From c8bdf01cdda8bf88bbf7942ec35011a90d5f211d Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle <139135120+andrewwallacespeckle@users.noreply.github.com> Date: Wed, 6 Dec 2023 09:56:22 +0000 Subject: [PATCH] FE2 Viewer - Add Measure Mode (#1889) * RadioGroup & Initial UI for Measure * Add option to Panel to allow actions to move to bottom * Typo * Add count to precision * Add enable, snap and type api integrations * Update Units WIP * Add precision update * Update v-tippy name * Updates * New design * Better darkmode radio. Keystrokes. * Styling fixes. Fix select mount-menu-on-body * Fix ts bug * Show label in Select for units * Update shortcut to D * Small design changes * Small tidy ups * WIP New Measurements Helper State * Fix build erros * Remove viewer import from shared * Delete WIP * Fix delete * Fix close button on measure mode * Measurement nullable * Updates from PR * Seperate measurements into measurementsEnabled & measurementOptions * Update state.ts * Update ts bugs * Updates to RadioGroup * Use ctx.updateArgs * Replace RadioGroup with Radio - More consistent with existing inputs * Update FE2 to use new Radio * Fix circleci fail * Fix build * Fix wrong initial state for vertexSnap * Adjust type to measurement * Use Lodash isEqual * Fix bug where units don't update * Remove double input * Fix server error in data.ts * Revert change around useEqual --- .../global/icon/MeasurePerpendicular.vue | 90 +++++++ .../global/icon/MeasurePointToPoint.vue | 68 +++++ .../components/global/icon/Measurements.vue | 27 ++ .../frontend-2/components/viewer/Controls.vue | 35 ++- .../components/viewer/layout/Panel.vue | 26 +- .../viewer/measurements/Options.vue | 144 +++++++++++ .../viewer/measurements/UnitSelect.vue | 59 +++++ .../lib/viewer/composables/serialization.ts | 6 +- .../lib/viewer/composables/setup.ts | 20 +- .../lib/viewer/composables/setup/postSetup.ts | 28 +++ .../frontend-2/lib/viewer/composables/ui.ts | 26 +- .../server/modules/comments/services/data.ts | 4 + packages/shared/src/viewer/helpers/state.ts | 36 ++- .../src/components/form/Radio.stories.ts | 232 ++++++++++++++++++ .../src/components/form/Radio.vue | 228 +++++++++++++++++ .../src/components/form/select/Base.vue | 13 +- packages/ui-components/src/lib.ts | 2 + 17 files changed, 1030 insertions(+), 14 deletions(-) create mode 100644 packages/frontend-2/components/global/icon/MeasurePerpendicular.vue create mode 100644 packages/frontend-2/components/global/icon/MeasurePointToPoint.vue create mode 100644 packages/frontend-2/components/global/icon/Measurements.vue create mode 100644 packages/frontend-2/components/viewer/measurements/Options.vue create mode 100644 packages/frontend-2/components/viewer/measurements/UnitSelect.vue create mode 100644 packages/ui-components/src/components/form/Radio.stories.ts create mode 100644 packages/ui-components/src/components/form/Radio.vue diff --git a/packages/frontend-2/components/global/icon/MeasurePerpendicular.vue b/packages/frontend-2/components/global/icon/MeasurePerpendicular.vue new file mode 100644 index 000000000..a8402b5b2 --- /dev/null +++ b/packages/frontend-2/components/global/icon/MeasurePerpendicular.vue @@ -0,0 +1,90 @@ + diff --git a/packages/frontend-2/components/global/icon/MeasurePointToPoint.vue b/packages/frontend-2/components/global/icon/MeasurePointToPoint.vue new file mode 100644 index 000000000..9df10ec47 --- /dev/null +++ b/packages/frontend-2/components/global/icon/MeasurePointToPoint.vue @@ -0,0 +1,68 @@ + diff --git a/packages/frontend-2/components/global/icon/Measurements.vue b/packages/frontend-2/components/global/icon/Measurements.vue new file mode 100644 index 000000000..63953556d --- /dev/null +++ b/packages/frontend-2/components/global/icon/Measurements.vue @@ -0,0 +1,27 @@ + diff --git a/packages/frontend-2/components/viewer/Controls.vue b/packages/frontend-2/components/viewer/Controls.vue index 78277d963..7737c45dd 100644 --- a/packages/frontend-2/components/viewer/Controls.vue +++ b/packages/frontend-2/components/viewer/Controls.vue @@ -3,6 +3,7 @@
+ + + + + + + + + +
+
+ +
+
+ +

+ {{ descriptionText }} +

+
+ + + diff --git a/packages/ui-components/src/components/form/select/Base.vue b/packages/ui-components/src/components/form/select/Base.vue index d9dd58309..adacb903e 100644 --- a/packages/ui-components/src/components/form/select/Base.vue +++ b/packages/ui-components/src/components/form/select/Base.vue @@ -77,6 +77,7 @@ > (props.name, props.rul const isMounted = useMounted() const searchInput = ref(null as Nullable) +const menuEl = ref(null as Nullable<{ el: Nullable }>) const listboxButton = ref(null as Nullable<{ el: Nullable }>) const searchValue = ref('') const currentItems = ref([]) as Ref @@ -410,6 +412,15 @@ const listboxButtonBounding = useElementBounding( { windowResize: true, windowScroll: true, immediate: true } ) +useIntersectionObserver( + computed(() => menuEl.value?.el), + ([{ isIntersecting }]) => { + if (isIntersecting && props.mountMenuOnBody) { + listboxButtonBounding.update() + } + } +) + const title = computed(() => unref(props.label) || unref(props.name)) const errorMessage = computed(() => { const base = error.value diff --git a/packages/ui-components/src/lib.ts b/packages/ui-components/src/lib.ts index 839fd25f6..dfd232f4d 100644 --- a/packages/ui-components/src/lib.ts +++ b/packages/ui-components/src/lib.ts @@ -16,6 +16,7 @@ import CommonStepsNumber from '~~/src/components/common/steps/Number.vue' import CommonStepsBullet from '~~/src/components/common/steps/Bullet.vue' import FormCardButton from '~~/src/components/form/CardButton.vue' import FormCheckbox from '~~/src/components/form/Checkbox.vue' +import FormRadio from '~~/src/components/form/Radio.vue' import FormTextArea from '~~/src/components/form/TextArea.vue' import FormTextInput from '~~/src/components/form/TextInput.vue' import * as ValidationHelpers from '~~/src/helpers/common/validation' @@ -95,6 +96,7 @@ export { CommonStepsNumber, FormCardButton, FormCheckbox, + FormRadio, FormTextArea, FormTextInput, FormSwitch,