@welldot/vue 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +526 -2
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/_virtual/icons/ph/caret-down.js +21 -0
- package/dist/_virtual/icons/ph/caret-down.js.map +1 -0
- package/dist/_virtual/icons/ph/info.js +21 -0
- package/dist/_virtual/icons/ph/info.js.map +1 -0
- package/dist/_virtual/icons/ph/pencil-simple-line.js +21 -0
- package/dist/_virtual/icons/ph/pencil-simple-line.js.map +1 -0
- package/dist/_virtual/icons/ph/pencil-simple.js +21 -0
- package/dist/_virtual/icons/ph/pencil-simple.js.map +1 -0
- package/dist/_virtual/icons/ph/plus.js +21 -0
- package/dist/_virtual/icons/ph/plus.js.map +1 -0
- package/dist/_virtual/icons/ph/x.js +21 -0
- package/dist/_virtual/icons/ph/x.js.map +1 -0
- package/dist/components/WellChip.d.ts +30 -0
- package/dist/components/WellChip.d.ts.map +1 -0
- package/dist/components/WellChip.js +9 -0
- package/dist/components/WellChip.js.map +1 -0
- package/dist/components/WellChip.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/components/WellChip.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellComboSelect.d.ts +19 -0
- package/dist/components/WellComboSelect.d.ts.map +1 -0
- package/dist/components/WellComboSelect.js +7 -0
- package/dist/components/WellComboSelect.js.map +1 -0
- package/dist/components/WellComboSelect.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/WellComboSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellInfoPopover.d.ts +31 -0
- package/dist/components/WellInfoPopover.d.ts.map +1 -0
- package/dist/components/WellInfoPopover.js +7 -0
- package/dist/components/WellInfoPopover.js.map +1 -0
- package/dist/components/WellInfoPopover.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/components/WellInfoPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellInputNumber.d.ts +4 -0
- package/dist/components/WellInputNumber.d.ts.map +1 -0
- package/dist/components/WellInputNumber.js +7 -0
- package/dist/components/WellInputNumber.js.map +1 -0
- package/dist/components/WellInputNumber.vue_vue_type_script_setup_true_lang.js +16 -0
- package/dist/components/WellInputNumber.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellLabeledField.d.ts +22 -0
- package/dist/components/WellLabeledField.d.ts.map +1 -0
- package/dist/components/WellLabeledField.js +7 -0
- package/dist/components/WellLabeledField.js.map +1 -0
- package/dist/components/WellLabeledField.vue_vue_type_script_setup_true_lang.js +32 -0
- package/dist/components/WellLabeledField.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellTagSelect.d.ts +21 -0
- package/dist/components/WellTagSelect.d.ts.map +1 -0
- package/dist/components/WellTagSelect.js +7 -0
- package/dist/components/WellTagSelect.js.map +1 -0
- package/dist/components/WellTagSelect.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/components/WellTagSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellTextureSelect.d.ts +30 -0
- package/dist/components/WellTextureSelect.d.ts.map +1 -0
- package/dist/components/WellTextureSelect.js +7 -0
- package/dist/components/WellTextureSelect.js.map +1 -0
- package/dist/components/WellTextureSelect.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/WellTextureSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellTextureThumbnail.d.ts +10 -0
- package/dist/components/WellTextureThumbnail.d.ts.map +1 -0
- package/dist/components/WellTextureThumbnail.js +9 -0
- package/dist/components/WellTextureThumbnail.js.map +1 -0
- package/dist/components/WellTextureThumbnail.vue_vue_type_script_setup_true_lang.js +393 -0
- package/dist/components/WellTextureThumbnail.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/WellUnitInput.d.ts +19 -0
- package/dist/components/WellUnitInput.d.ts.map +1 -0
- package/dist/components/WellUnitInput.js +7 -0
- package/dist/components/WellUnitInput.js.map +1 -0
- package/dist/components/WellUnitInput.vue_vue_type_script_setup_true_lang.js +41 -0
- package/dist/components/WellUnitInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/parts/WellInfoTrigger.d.ts +8 -0
- package/dist/components/parts/WellInfoTrigger.d.ts.map +1 -0
- package/dist/components/parts/WellInfoTrigger.js +7 -0
- package/dist/components/parts/WellInfoTrigger.js.map +1 -0
- package/dist/components/parts/WellInfoTrigger.vue_vue_type_script_setup_true_lang.js +26 -0
- package/dist/components/parts/WellInfoTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composables/useWellNumberFormat.d.ts +12 -0
- package/dist/composables/useWellNumberFormat.d.ts.map +1 -0
- package/dist/composables/useWellNumberFormat.js +25 -0
- package/dist/composables/useWellNumberFormat.js.map +1 -0
- package/dist/composables/useWellText.d.ts +11 -0
- package/dist/composables/useWellText.d.ts.map +1 -0
- package/dist/composables/useWellText.js +15 -0
- package/dist/composables/useWellText.js.map +1 -0
- package/dist/composables/useWellUnits.d.ts +29 -0
- package/dist/composables/useWellUnits.d.ts.map +1 -0
- package/dist/composables/useWellUnits.js +52 -0
- package/dist/composables/useWellUnits.js.map +1 -0
- package/dist/config.d.ts +110 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -0
- package/dist/grid/WellDataGrid.d.ts +29 -0
- package/dist/grid/WellDataGrid.d.ts.map +1 -0
- package/dist/grid/WellDataGrid.js +9 -0
- package/dist/grid/WellDataGrid.js.map +1 -0
- package/dist/grid/WellDataGrid.vue_vue_type_script_setup_true_lang.js +84 -0
- package/dist/grid/WellDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridCheckboxCell.d.ts +10 -0
- package/dist/grid/cells/GridCheckboxCell.d.ts.map +1 -0
- package/dist/grid/cells/GridCheckboxCell.js +7 -0
- package/dist/grid/cells/GridCheckboxCell.js.map +1 -0
- package/dist/grid/cells/GridCheckboxCell.vue_vue_type_script_setup_true_lang.js +32 -0
- package/dist/grid/cells/GridCheckboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridColorCell.d.ts +7 -0
- package/dist/grid/cells/GridColorCell.d.ts.map +1 -0
- package/dist/grid/cells/GridColorCell.js +7 -0
- package/dist/grid/cells/GridColorCell.js.map +1 -0
- package/dist/grid/cells/GridColorCell.vue_vue_type_script_setup_true_lang.js +18 -0
- package/dist/grid/cells/GridColorCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridColorPickerEditor.d.ts +12 -0
- package/dist/grid/cells/GridColorPickerEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridColorPickerEditor.js +7 -0
- package/dist/grid/cells/GridColorPickerEditor.js.map +1 -0
- package/dist/grid/cells/GridColorPickerEditor.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/grid/cells/GridColorPickerEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridComboEditor.d.ts +14 -0
- package/dist/grid/cells/GridComboEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridComboEditor.js +7 -0
- package/dist/grid/cells/GridComboEditor.js.map +1 -0
- package/dist/grid/cells/GridComboEditor.vue_vue_type_script_setup_true_lang.js +177 -0
- package/dist/grid/cells/GridComboEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridDeleteCell.d.ts +12 -0
- package/dist/grid/cells/GridDeleteCell.d.ts.map +1 -0
- package/dist/grid/cells/GridDeleteCell.js +7 -0
- package/dist/grid/cells/GridDeleteCell.js.map +1 -0
- package/dist/grid/cells/GridDeleteCell.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/grid/cells/GridDeleteCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridDragCell.d.ts +16 -0
- package/dist/grid/cells/GridDragCell.d.ts.map +1 -0
- package/dist/grid/cells/GridDragCell.js +7 -0
- package/dist/grid/cells/GridDragCell.js.map +1 -0
- package/dist/grid/cells/GridDragCell.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/grid/cells/GridDragCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridFormattedCell.d.ts +9 -0
- package/dist/grid/cells/GridFormattedCell.d.ts.map +1 -0
- package/dist/grid/cells/GridFormattedCell.js +7 -0
- package/dist/grid/cells/GridFormattedCell.js.map +1 -0
- package/dist/grid/cells/GridFormattedCell.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/grid/cells/GridFormattedCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridHeaderCell.d.ts +11 -0
- package/dist/grid/cells/GridHeaderCell.d.ts.map +1 -0
- package/dist/grid/cells/GridHeaderCell.js +7 -0
- package/dist/grid/cells/GridHeaderCell.js.map +1 -0
- package/dist/grid/cells/GridHeaderCell.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/grid/cells/GridHeaderCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridNumberEditor.d.ts +9 -0
- package/dist/grid/cells/GridNumberEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridNumberEditor.js +7 -0
- package/dist/grid/cells/GridNumberEditor.js.map +1 -0
- package/dist/grid/cells/GridNumberEditor.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/grid/cells/GridNumberEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridSelectButtonCell.d.ts +12 -0
- package/dist/grid/cells/GridSelectButtonCell.d.ts.map +1 -0
- package/dist/grid/cells/GridSelectButtonCell.js +7 -0
- package/dist/grid/cells/GridSelectButtonCell.js.map +1 -0
- package/dist/grid/cells/GridSelectButtonCell.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/grid/cells/GridSelectButtonCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridSelectCell.d.ts +9 -0
- package/dist/grid/cells/GridSelectCell.d.ts.map +1 -0
- package/dist/grid/cells/GridSelectCell.js +7 -0
- package/dist/grid/cells/GridSelectCell.js.map +1 -0
- package/dist/grid/cells/GridSelectCell.vue_vue_type_script_setup_true_lang.js +18 -0
- package/dist/grid/cells/GridSelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridSelectEditor.d.ts +11 -0
- package/dist/grid/cells/GridSelectEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridSelectEditor.js +7 -0
- package/dist/grid/cells/GridSelectEditor.js.map +1 -0
- package/dist/grid/cells/GridSelectEditor.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/grid/cells/GridSelectEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridTextEditor.d.ts +9 -0
- package/dist/grid/cells/GridTextEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridTextEditor.js +7 -0
- package/dist/grid/cells/GridTextEditor.js.map +1 -0
- package/dist/grid/cells/GridTextEditor.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/grid/cells/GridTextEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridTextureSelectCell.d.ts +7 -0
- package/dist/grid/cells/GridTextureSelectCell.d.ts.map +1 -0
- package/dist/grid/cells/GridTextureSelectCell.js +7 -0
- package/dist/grid/cells/GridTextureSelectCell.js.map +1 -0
- package/dist/grid/cells/GridTextureSelectCell.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/grid/cells/GridTextureSelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridTextureSelectEditor.d.ts +13 -0
- package/dist/grid/cells/GridTextureSelectEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridTextureSelectEditor.js +7 -0
- package/dist/grid/cells/GridTextureSelectEditor.js.map +1 -0
- package/dist/grid/cells/GridTextureSelectEditor.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/grid/cells/GridTextureSelectEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridUnitCell.d.ts +9 -0
- package/dist/grid/cells/GridUnitCell.d.ts.map +1 -0
- package/dist/grid/cells/GridUnitCell.js +7 -0
- package/dist/grid/cells/GridUnitCell.js.map +1 -0
- package/dist/grid/cells/GridUnitCell.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/grid/cells/GridUnitCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/cells/GridUnitEditor.d.ts +11 -0
- package/dist/grid/cells/GridUnitEditor.d.ts.map +1 -0
- package/dist/grid/cells/GridUnitEditor.js +7 -0
- package/dist/grid/cells/GridUnitEditor.js.map +1 -0
- package/dist/grid/cells/GridUnitEditor.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/grid/cells/GridUnitEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/columnStretchPlugin.d.ts +12 -0
- package/dist/grid/columnStretchPlugin.d.ts.map +1 -0
- package/dist/grid/columnStretchPlugin.js +35 -0
- package/dist/grid/columnStretchPlugin.js.map +1 -0
- package/dist/grid/composables/useCellTemplate.d.ts +35 -0
- package/dist/grid/composables/useCellTemplate.d.ts.map +1 -0
- package/dist/grid/composables/useCellTemplate.js +30 -0
- package/dist/grid/composables/useCellTemplate.js.map +1 -0
- package/dist/grid/composables/useGridOverlayFocusGuard.d.ts +5 -0
- package/dist/grid/composables/useGridOverlayFocusGuard.d.ts.map +1 -0
- package/dist/grid/composables/useGridOverlayFocusGuard.js +12 -0
- package/dist/grid/composables/useGridOverlayFocusGuard.js.map +1 -0
- package/dist/grid/composables/useUnitSuffix.d.ts +9 -0
- package/dist/grid/composables/useUnitSuffix.d.ts.map +1 -0
- package/dist/grid/composables/useUnitSuffix.js +13 -0
- package/dist/grid/composables/useUnitSuffix.js.map +1 -0
- package/dist/grid/index.d.ts +8 -0
- package/dist/grid/index.d.ts.map +1 -0
- package/dist/grid/index.js +4 -0
- package/dist/grid/parts/WellGridAddButton.d.ts +5 -0
- package/dist/grid/parts/WellGridAddButton.d.ts.map +1 -0
- package/dist/grid/parts/WellGridAddButton.js +7 -0
- package/dist/grid/parts/WellGridAddButton.js.map +1 -0
- package/dist/grid/parts/WellGridAddButton.vue_vue_type_script_setup_true_lang.js +23 -0
- package/dist/grid/parts/WellGridAddButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/parts/WellGridDeleteButton.d.ts +5 -0
- package/dist/grid/parts/WellGridDeleteButton.d.ts.map +1 -0
- package/dist/grid/parts/WellGridDeleteButton.js +7 -0
- package/dist/grid/parts/WellGridDeleteButton.js.map +1 -0
- package/dist/grid/parts/WellGridDeleteButton.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/grid/parts/WellGridDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/grid/types.d.ts +90 -0
- package/dist/grid/types.d.ts.map +1 -0
- package/dist/grid/useWellGridColumns.d.ts +40 -0
- package/dist/grid/useWellGridColumns.d.ts.map +1 -0
- package/dist/grid/useWellGridColumns.js +242 -0
- package/dist/grid/useWellGridColumns.js.map +1 -0
- package/dist/grid.css +407 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/location/WellCoordinateInput.d.ts +14 -0
- package/dist/location/WellCoordinateInput.d.ts.map +1 -0
- package/dist/location/WellCoordinateInput.js +7 -0
- package/dist/location/WellCoordinateInput.js.map +1 -0
- package/dist/location/WellCoordinateInput.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/location/WellCoordinateInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/location/WellLocationMap.d.ts +22 -0
- package/dist/location/WellLocationMap.d.ts.map +1 -0
- package/dist/location/WellLocationMap.js +9 -0
- package/dist/location/WellLocationMap.js.map +1 -0
- package/dist/location/WellLocationMap.vue_vue_type_script_setup_true_lang.js +91 -0
- package/dist/location/WellLocationMap.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/location/WellLocationPicker.d.ts +32 -0
- package/dist/location/WellLocationPicker.d.ts.map +1 -0
- package/dist/location/WellLocationPicker.js +7 -0
- package/dist/location/WellLocationPicker.js.map +1 -0
- package/dist/location/WellLocationPicker.vue_vue_type_script_setup_true_lang.js +117 -0
- package/dist/location/WellLocationPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/location/index.d.ts +6 -0
- package/dist/location/index.d.ts.map +1 -0
- package/dist/location/index.js +5 -0
- package/dist/location/location.d.ts +61 -0
- package/dist/location/location.d.ts.map +1 -0
- package/dist/location/location.js +15 -0
- package/dist/location/location.js.map +1 -0
- package/dist/nuxt/module.d.ts +76 -0
- package/dist/nuxt/module.d.ts.map +1 -0
- package/dist/nuxt/module.js +129 -0
- package/dist/nuxt/module.js.map +1 -0
- package/dist/nuxt/runtime/plugin.d.ts +14 -0
- package/dist/nuxt/runtime/plugin.d.ts.map +1 -0
- package/dist/nuxt/runtime/plugin.js +13 -0
- package/dist/nuxt/runtime/plugin.js.map +1 -0
- package/dist/style.css +2 -0
- package/dist/tailwind.css +160 -0
- package/dist/theme/define.d.ts +44 -0
- package/dist/theme/define.d.ts.map +1 -0
- package/dist/theme/define.js +14 -0
- package/dist/theme/define.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +4 -0
- package/dist/theme/preset.d.ts +20 -0
- package/dist/theme/preset.d.ts.map +1 -0
- package/dist/theme/preset.js +977 -0
- package/dist/theme/preset.js.map +1 -0
- package/dist/theme/pt.d.ts +8 -0
- package/dist/theme/pt.d.ts.map +1 -0
- package/dist/theme/pt.js +66 -0
- package/dist/theme/pt.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +134 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellUnitInput.js","names":[],"sources":["../../src/components/WellUnitInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Number input bound to a canonical SI value, displayed and edited in the\n * configured unit for `unitType` (or the `unit` override). Other attrs pass\n * through to `WellInputNumber`; `maxFractionDigits` defaults to 4.\n */\nimport { computed, useAttrs } from 'vue';\nimport type { WelldotUnits } from '../config';\nimport {\n isDisplayedValue,\n useWellUnits,\n type DisplayUnitType,\n} from '../composables/useWellUnits';\nimport WellInputNumber from './WellInputNumber.vue';\n\nconst props = defineProps<{\n modelValue?: number | null;\n unitType: DisplayUnitType;\n /** Overrides the configured display unit for this input. */\n unit?: WelldotUnits[DisplayUnitType];\n min?: number;\n max?: number;\n step?: number;\n}>();\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | null];\n}>();\n\ndefineOptions({ inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst { toDisplay, toCanonical } = useWellUnits(\n () => props.unitType,\n () => props.unit as WelldotUnits[typeof props.unitType] | undefined,\n);\n\nconst displayValue = computed(() =>\n props.modelValue != null ? toDisplay(props.modelValue) : null,\n);\nconst displayMin = computed(() =>\n props.min != null ? toDisplay(props.min) : undefined,\n);\nconst displayMax = computed(() =>\n props.max != null ? toDisplay(props.max) : undefined,\n);\nconst displayStep = computed(() =>\n props.step != null ? toDisplay(props.step) : undefined,\n);\nconst maxFractionDigits = computed(\n () =>\n (attrs['maxFractionDigits'] ?? attrs['max-fraction-digits'] ?? 4) as number,\n);\n\nfunction onUpdate(value: number | null | undefined) {\n // `InputNumber` emits its (rounded) text on every blur: an untouched\n // focus + blur must not rewrite the exact canonical value.\n if (\n isDisplayedValue(value, displayValue.value, Number(maxFractionDigits.value))\n )\n return;\n emit('update:modelValue', value != null ? toCanonical(value) : null);\n}\n</script>\n\n<template>\n <WellInputNumber\n v-bind=\"attrs\"\n :model-value=\"displayValue\"\n :min=\"displayMin\"\n :max=\"displayMax\"\n :step=\"displayStep\"\n :max-fraction-digits=\"maxFractionDigits\"\n @update:model-value=\"onUpdate\"\n />\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isDisplayedValue as e, useWellUnits as t } from "../composables/useWellUnits.js";
|
|
2
|
+
import n from "./WellInputNumber.js";
|
|
3
|
+
import { computed as r, createBlock as i, defineComponent as a, mergeProps as o, openBlock as s, unref as c, useAttrs as l } from "vue";
|
|
4
|
+
//#region src/components/WellUnitInput.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var u = /* @__PURE__ */ a({
|
|
6
|
+
inheritAttrs: !1,
|
|
7
|
+
__name: "WellUnitInput",
|
|
8
|
+
props: {
|
|
9
|
+
modelValue: {},
|
|
10
|
+
unitType: {},
|
|
11
|
+
unit: {},
|
|
12
|
+
min: {},
|
|
13
|
+
max: {},
|
|
14
|
+
step: {}
|
|
15
|
+
},
|
|
16
|
+
emits: ["update:modelValue"],
|
|
17
|
+
setup(a, { emit: u }) {
|
|
18
|
+
let d = a, f = u, p = l(), { toDisplay: m, toCanonical: h } = t(() => d.unitType, () => d.unit), g = r(() => d.modelValue == null ? null : m(d.modelValue)), _ = r(() => d.min == null ? void 0 : m(d.min)), v = r(() => d.max == null ? void 0 : m(d.max)), y = r(() => d.step == null ? void 0 : m(d.step)), b = r(() => p.maxFractionDigits ?? p["max-fraction-digits"] ?? 4);
|
|
19
|
+
function x(t) {
|
|
20
|
+
e(t, g.value, Number(b.value)) || f("update:modelValue", t == null ? null : h(t));
|
|
21
|
+
}
|
|
22
|
+
return (e, t) => (s(), i(n, o(c(p), {
|
|
23
|
+
"model-value": g.value,
|
|
24
|
+
min: _.value,
|
|
25
|
+
max: v.value,
|
|
26
|
+
step: y.value,
|
|
27
|
+
"max-fraction-digits": b.value,
|
|
28
|
+
"onUpdate:modelValue": x
|
|
29
|
+
}), null, 16, [
|
|
30
|
+
"model-value",
|
|
31
|
+
"min",
|
|
32
|
+
"max",
|
|
33
|
+
"step",
|
|
34
|
+
"max-fraction-digits"
|
|
35
|
+
]));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//#endregion
|
|
39
|
+
export { u as default };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=WellUnitInput.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellUnitInput.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/WellUnitInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Number input bound to a canonical SI value, displayed and edited in the\n * configured unit for `unitType` (or the `unit` override). Other attrs pass\n * through to `WellInputNumber`; `maxFractionDigits` defaults to 4.\n */\nimport { computed, useAttrs } from 'vue';\nimport type { WelldotUnits } from '../config';\nimport {\n isDisplayedValue,\n useWellUnits,\n type DisplayUnitType,\n} from '../composables/useWellUnits';\nimport WellInputNumber from './WellInputNumber.vue';\n\nconst props = defineProps<{\n modelValue?: number | null;\n unitType: DisplayUnitType;\n /** Overrides the configured display unit for this input. */\n unit?: WelldotUnits[DisplayUnitType];\n min?: number;\n max?: number;\n step?: number;\n}>();\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | null];\n}>();\n\ndefineOptions({ inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst { toDisplay, toCanonical } = useWellUnits(\n () => props.unitType,\n () => props.unit as WelldotUnits[typeof props.unitType] | undefined,\n);\n\nconst displayValue = computed(() =>\n props.modelValue != null ? toDisplay(props.modelValue) : null,\n);\nconst displayMin = computed(() =>\n props.min != null ? toDisplay(props.min) : undefined,\n);\nconst displayMax = computed(() =>\n props.max != null ? toDisplay(props.max) : undefined,\n);\nconst displayStep = computed(() =>\n props.step != null ? toDisplay(props.step) : undefined,\n);\nconst maxFractionDigits = computed(\n () =>\n (attrs['maxFractionDigits'] ?? attrs['max-fraction-digits'] ?? 4) as number,\n);\n\nfunction onUpdate(value: number | null | undefined) {\n // `InputNumber` emits its (rounded) text on every blur: an untouched\n // focus + blur must not rewrite the exact canonical value.\n if (\n isDisplayedValue(value, displayValue.value, Number(maxFractionDigits.value))\n )\n return;\n emit('update:modelValue', value != null ? toCanonical(value) : null);\n}\n</script>\n\n<template>\n <WellInputNumber\n v-bind=\"attrs\"\n :model-value=\"displayValue\"\n :min=\"displayMin\"\n :max=\"displayMax\"\n :step=\"displayStep\"\n :max-fraction-digits=\"maxFractionDigits\"\n @update:model-value=\"onUpdate\"\n />\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;EAeA,IAAM,IAAQ,GAUR,IAAO,GAMP,IAAQ,GAAU,EAClB,EAAE,cAAW,mBAAgB,QAC3B,EAAM,gBACN,EAAM,KACb,EAEK,IAAe,QACnB,EAAM,cAAc,OAAqC,OAA9B,EAAU,EAAM,WAAW,CACvD,EACK,IAAa,QACjB,EAAM,OAAO,OAA8B,KAAA,IAAvB,EAAU,EAAM,IAAI,CACzC,EACK,IAAa,QACjB,EAAM,OAAO,OAA8B,KAAA,IAAvB,EAAU,EAAM,IAAI,CACzC,EACK,IAAc,QAClB,EAAM,QAAQ,OAA+B,KAAA,IAAxB,EAAU,EAAM,KAAK,CAC3C,EACK,IAAoB,QAErB,EAAM,qBAAwB,EAAM,0BAA0B,EAClE;EAED,SAAS,EAAS,GAAkC;AAIhD,KAAiB,GAAO,EAAa,OAAO,OAAO,EAAkB,MAAM,CAAA,IAG7E,EAAK,qBAAqB,KAAS,OAA4B,OAArB,EAAY,EAAM,CAAQ;;yBAKpE,EAQE,GARF,EACU,EAOR,EAPa,EAAA;GACZ,eAAa,EAAA;GACb,KAAK,EAAA;GACL,KAAK,EAAA;GACL,MAAM,EAAA;GACN,uBAAqB,EAAA;GACrB,uBAAoB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label?: string;
|
|
3
|
+
size: 'sm' | 'md';
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
declare const _default: typeof __VLS_export;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=WellInfoTrigger.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellInfoTrigger.d.ts","sourceRoot":"","sources":["../../../src/components/parts/WellInfoTrigger.vue"],"names":[],"mappings":"AAyCA,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB,CAAC;AAyDF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellInfoTrigger.js","names":[],"sources":["../../../src/components/parts/WellInfoTrigger.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Default `WellInfoPopover` trigger: a small round icon button. Listeners\n * from the popover (`mouseenter`, `focus`, `click`, …) fall through to it.\n */\nimport Button from 'primevue/button';\nimport IconInfo from '~icons/ph/info';\n\ndefineProps<{\n label?: string;\n size: 'sm' | 'md';\n}>();\n</script>\n\n<template>\n <Button\n unstyled\n type=\"button\"\n :aria-label=\"label\"\n :pt=\"{\n root: [\n 'rounded-full flex items-center justify-center text-content-300 hover:text-content-500 transition-colors cursor-pointer',\n size === 'md' ? 'size-6 hover:bg-surface-100' : 'size-4',\n ],\n }\"\n >\n <template #icon>\n <IconInfo :class=\"size === 'md' ? 'size-4' : 'size-3.5'\" />\n </template>\n </Button>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import e from "../../_virtual/icons/ph/info.js";
|
|
2
|
+
import { createBlock as t, createVNode as n, defineComponent as r, normalizeClass as i, openBlock as a, unref as o, withCtx as s } from "vue";
|
|
3
|
+
import c from "primevue/button";
|
|
4
|
+
//#region src/components/parts/WellInfoTrigger.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var l = /* @__PURE__ */ r({
|
|
6
|
+
__name: "WellInfoTrigger",
|
|
7
|
+
props: {
|
|
8
|
+
label: {},
|
|
9
|
+
size: {}
|
|
10
|
+
},
|
|
11
|
+
setup(r) {
|
|
12
|
+
return (l, u) => (a(), t(o(c), {
|
|
13
|
+
unstyled: "",
|
|
14
|
+
type: "button",
|
|
15
|
+
"aria-label": r.label,
|
|
16
|
+
pt: { root: ["rounded-full flex items-center justify-center text-content-300 hover:text-content-500 transition-colors cursor-pointer", r.size === "md" ? "size-6 hover:bg-surface-100" : "size-4"] }
|
|
17
|
+
}, {
|
|
18
|
+
icon: s(() => [n(o(e), { class: i(r.size === "md" ? "size-4" : "size-3.5") }, null, 8, ["class"])]),
|
|
19
|
+
_: 1
|
|
20
|
+
}, 8, ["aria-label", "pt"]));
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
export { l as default };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=WellInfoTrigger.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellInfoTrigger.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/parts/WellInfoTrigger.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Default `WellInfoPopover` trigger: a small round icon button. Listeners\n * from the popover (`mouseenter`, `focus`, `click`, …) fall through to it.\n */\nimport Button from 'primevue/button';\nimport IconInfo from '~icons/ph/info';\n\ndefineProps<{\n label?: string;\n size: 'sm' | 'md';\n}>();\n</script>\n\n<template>\n <Button\n unstyled\n type=\"button\"\n :aria-label=\"label\"\n :pt=\"{\n root: [\n 'rounded-full flex items-center justify-center text-content-300 hover:text-content-500 transition-colors cursor-pointer',\n size === 'md' ? 'size-6 hover:bg-surface-100' : 'size-4',\n ],\n }\"\n >\n <template #icon>\n <IconInfo :class=\"size === 'md' ? 'size-4' : 'size-3.5'\" />\n </template>\n </Button>\n</template>\n"],"mappings":";;;;;;;;;;;yBAeE,EAcS,EAAA,EAAA,EAAA;GAbP,UAAA;GACA,MAAK;GACJ,cAAY,EAAA;GACZ,IAAE,EAAA,MAAA,CAAA,0HAA4J,EAAA,SAAI,OAAA,gCAAA,SAAA,EAAA;;GAOxJ,MAAI,QAC8C,CAA3D,EAA2D,EAAA,EAAA,EAAA,EAAhD,OAAK,EAAE,EAAA,SAAI,OAAA,WAAA,WAAA,EAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FormatNumberOptions } from '@welldot/utils';
|
|
2
|
+
/** Bare app languages mapped to the regional tag used for number formatting. */
|
|
3
|
+
export declare const LOCALE_MAP: Record<string, string>;
|
|
4
|
+
/**
|
|
5
|
+
* Locale-aware number formatting driven by the configured locale. `en` and
|
|
6
|
+
* `pt` map to `en-US` / `pt-BR`; any other BCP-47 tag passes through.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useWellNumberFormat(): {
|
|
9
|
+
formatNumber: (value: number | null | undefined, options?: Omit<FormatNumberOptions, "locale">) => string;
|
|
10
|
+
resolvedLocale: import('vue').ComputedRef<string>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useWellNumberFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellNumberFormat.d.ts","sourceRoot":"","sources":["../../src/composables/useWellNumberFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIxE,gFAAgF;AAChF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAgC,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,mBAAmB;0BAOxB,MAAM,GAAG,IAAI,GAAG,SAAS,YACtB,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,KAC5C,MAAM;;EAKV"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useWelldotConfig as e } from "../config.js";
|
|
2
|
+
import { computed as t } from "vue";
|
|
3
|
+
import { formatNumber as n } from "@welldot/utils";
|
|
4
|
+
//#region src/composables/useWellNumberFormat.ts
|
|
5
|
+
var r = {
|
|
6
|
+
en: "en-US",
|
|
7
|
+
pt: "pt-BR"
|
|
8
|
+
};
|
|
9
|
+
function i() {
|
|
10
|
+
let i = e(), a = t(() => r[i.locale] ?? i.locale);
|
|
11
|
+
function o(e, t) {
|
|
12
|
+
return n(e, {
|
|
13
|
+
...t,
|
|
14
|
+
locale: a.value
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
formatNumber: o,
|
|
19
|
+
resolvedLocale: a
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { r as LOCALE_MAP, i as useWellNumberFormat };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=useWellNumberFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellNumberFormat.js","names":[],"sources":["../../src/composables/useWellNumberFormat.ts"],"sourcesContent":["import { formatNumber, type FormatNumberOptions } from '@welldot/utils';\nimport { computed } from 'vue';\nimport { useWelldotConfig } from '../config';\n\n/** Bare app languages mapped to the regional tag used for number formatting. */\nexport const LOCALE_MAP: Record<string, string> = { en: 'en-US', pt: 'pt-BR' };\n\n/**\n * Locale-aware number formatting driven by the configured locale. `en` and\n * `pt` map to `en-US` / `pt-BR`; any other BCP-47 tag passes through.\n */\nexport function useWellNumberFormat() {\n const config = useWelldotConfig();\n const resolvedLocale = computed(\n () => LOCALE_MAP[config.locale] ?? config.locale,\n );\n\n function format(\n value: number | null | undefined,\n options?: Omit<FormatNumberOptions, 'locale'>,\n ): string {\n return formatNumber(value, { ...options, locale: resolvedLocale.value });\n }\n\n return { formatNumber: format, resolvedLocale };\n}\n"],"mappings":";;;;AAKA,IAAa,IAAqC;CAAE,IAAI;CAAS,IAAI;CAAS;AAM9E,SAAgB,IAAsB;CACpC,IAAM,IAAS,GAAkB,EAC3B,IAAiB,QACf,EAAW,EAAO,WAAW,EAAO,OAC3C;CAED,SAAS,EACP,GACA,GACQ;AACR,SAAO,EAAa,GAAO;GAAE,GAAG;GAAS,QAAQ,EAAe;GAAO,CAAC;;AAG1E,QAAO;EAAE,cAAc;EAAQ;EAAgB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LanguageTextInput } from '@welldot/core';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a resolver for `LanguageTextInput` props against the configured
|
|
4
|
+
* locale. Missing or empty text resolves to `undefined`, so callers can skip
|
|
5
|
+
* rendering an omitted label with a plain `v-if`.
|
|
6
|
+
*
|
|
7
|
+
* Call it in `setup`; the returned function reads the locale on every call,
|
|
8
|
+
* so it stays reactive when used in templates or computeds.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useWellText(): (text?: LanguageTextInput) => string | undefined;
|
|
11
|
+
//# sourceMappingURL=useWellText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellText.d.ts","sourceRoot":"","sources":["../../src/composables/useWellText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG5E;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,CAC7B,IAAI,CAAC,EAAE,iBAAiB,KACrB,MAAM,GAAG,SAAS,CAOtB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useWelldotConfig as e } from "../config.js";
|
|
2
|
+
import { resolveLanguageText as t } from "@welldot/core";
|
|
3
|
+
//#region src/composables/useWellText.ts
|
|
4
|
+
function n() {
|
|
5
|
+
let n = e();
|
|
6
|
+
return (e) => {
|
|
7
|
+
if (e == null) return;
|
|
8
|
+
let r = t(e, n.locale);
|
|
9
|
+
return r === "" ? void 0 : r;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { n as useWellText };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=useWellText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellText.js","names":[],"sources":["../../src/composables/useWellText.ts"],"sourcesContent":["import { resolveLanguageText, type LanguageTextInput } from '@welldot/core';\nimport { useWelldotConfig } from '../config';\n\n/**\n * Returns a resolver for `LanguageTextInput` props against the configured\n * locale. Missing or empty text resolves to `undefined`, so callers can skip\n * rendering an omitted label with a plain `v-if`.\n *\n * Call it in `setup`; the returned function reads the locale on every call,\n * so it stays reactive when used in templates or computeds.\n */\nexport function useWellText(): (\n text?: LanguageTextInput,\n) => string | undefined {\n const config = useWelldotConfig();\n return text => {\n if (text == null) return undefined;\n const resolved = resolveLanguageText(text, config.locale);\n return resolved === '' ? undefined : resolved;\n };\n}\n"],"mappings":";;;AAWA,SAAgB,IAEQ;CACtB,IAAM,IAAS,GAAkB;AACjC,SAAO,MAAQ;AACb,MAAI,KAAQ,KAAM;EAClB,IAAM,IAAW,EAAoB,GAAM,EAAO,OAAO;AACzD,SAAO,MAAa,KAAK,KAAA,IAAY"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter } from 'vue';
|
|
2
|
+
import { WelldotUnits } from '../config';
|
|
3
|
+
export type DisplayUnitType = keyof WelldotUnits;
|
|
4
|
+
/**
|
|
5
|
+
* Canonical ↔ display conversion for one quantity, following the configured
|
|
6
|
+
* display unit (`createWelldot({ units })`). `.well` files always store SI
|
|
7
|
+
* (m, mm, m³/h, kW, m³); this only changes what the UI shows and accepts.
|
|
8
|
+
*
|
|
9
|
+
* `unitType` is a value, ref or getter, so a component can pass
|
|
10
|
+
* `() => props.unitType` and follow prop changes. `unitOverride` (a value,
|
|
11
|
+
* ref or getter) replaces the configured unit for this quantity;
|
|
12
|
+
* `null`/`undefined` falls back to the configuration.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useWellUnits<T extends DisplayUnitType>(unitType: MaybeRefOrGetter<T>, unitOverride?: MaybeRefOrGetter<WelldotUnits[T] | null | undefined>): {
|
|
15
|
+
/** Raw unit for length/diameter/power (`m`, `inches`, `kW`…); display label for flow/volume (`m³/h`, `m³`). */
|
|
16
|
+
unit: ComputedRef<string>;
|
|
17
|
+
toDisplay: (canonical: number) => number;
|
|
18
|
+
toCanonical: (display: number) => number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Whether `value`, emitted by a PrimeVue `InputNumber`, is just `display`
|
|
22
|
+
* as that input shows it (rounded to `maxFractionDigits`). `InputNumber`
|
|
23
|
+
* emits its parsed text on every blur, so an untouched focus + blur would
|
|
24
|
+
* otherwise replace the exact value with its rounded display (`1` m shown
|
|
25
|
+
* as `3.2808` ft would come back as `0.99998784` m). Internal: not exported
|
|
26
|
+
* from the package entry.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isDisplayedValue(value: number | null | undefined, display: number | null | undefined, maxFractionDigits: number): boolean;
|
|
29
|
+
//# sourceMappingURL=useWellUnits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellUnits.d.ts","sourceRoot":"","sources":["../../src/composables/useWellUnits.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,KAAK,CAAC;AACb,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,eAAe,EACpD,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,YAAY,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAClE;IACD,+GAA+G;IAC/G,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,CAqDA;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAKT"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useWelldotConfig as e } from "../config.js";
|
|
2
|
+
import { computed as t, toValue as n } from "vue";
|
|
3
|
+
import { resolveFlowUnitLabel as r, resolveVolumeUnitLabel as i } from "@welldot/utils";
|
|
4
|
+
import { feetToMeters as a, flowFromCanonical as o, flowToCanonical as s, inchesToMm as c, metersToFeet as l, mmToInches as u, powerFromCanonical as d, powerToCanonical as f, volumeFromCanonical as p, volumeToCanonical as m } from "@welldot/core";
|
|
5
|
+
//#region src/composables/useWellUnits.ts
|
|
6
|
+
function h(h, g) {
|
|
7
|
+
let _ = e(), v = t(() => n(h)), y = t(() => {
|
|
8
|
+
let e = n(g);
|
|
9
|
+
return e == null ? _.units : {
|
|
10
|
+
..._.units,
|
|
11
|
+
[v.value]: e
|
|
12
|
+
};
|
|
13
|
+
}), b = t(() => {
|
|
14
|
+
let e = y.value, t = v.value;
|
|
15
|
+
return t === "length" ? e.length : t === "diameter" ? e.diameter : t === "flow" ? r(e.flow) : t === "volume" ? i(e.volume) : e.power;
|
|
16
|
+
});
|
|
17
|
+
function x(e) {
|
|
18
|
+
let t = y.value;
|
|
19
|
+
switch (v.value) {
|
|
20
|
+
case "length": return t.length === "ft" ? l(e) : e;
|
|
21
|
+
case "diameter": return t.diameter === "inches" ? u(e) : e;
|
|
22
|
+
case "flow": return o(e, t.flow);
|
|
23
|
+
case "power": return d(e, t.power);
|
|
24
|
+
default: return p(e, t.volume);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function S(e) {
|
|
28
|
+
let t = y.value;
|
|
29
|
+
switch (v.value) {
|
|
30
|
+
case "length": return t.length === "ft" ? a(e) : e;
|
|
31
|
+
case "diameter": return t.diameter === "inches" ? c(e) : e;
|
|
32
|
+
case "flow": return s(e, t.flow);
|
|
33
|
+
case "power": return f(e, t.power);
|
|
34
|
+
default: return m(e, t.volume);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
unit: b,
|
|
39
|
+
toDisplay: x,
|
|
40
|
+
toCanonical: S
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function g(e, t, n) {
|
|
44
|
+
if (e == null || t == null) return e == null && t == null;
|
|
45
|
+
if (!Number.isFinite(t)) return !1;
|
|
46
|
+
let r = Math.min(100, Math.max(0, Math.trunc(n) || 0));
|
|
47
|
+
return e === Number(t.toFixed(r));
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { g as isDisplayedValue, h as useWellUnits };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=useWellUnits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWellUnits.js","names":[],"sources":["../../src/composables/useWellUnits.ts"],"sourcesContent":["import {\n feetToMeters,\n flowFromCanonical,\n flowToCanonical,\n inchesToMm,\n metersToFeet,\n mmToInches,\n powerFromCanonical,\n powerToCanonical,\n volumeFromCanonical,\n volumeToCanonical,\n} from '@welldot/core';\nimport { resolveFlowUnitLabel, resolveVolumeUnitLabel } from '@welldot/utils';\nimport {\n computed,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from 'vue';\nimport { useWelldotConfig, type WelldotUnits } from '../config';\n\nexport type DisplayUnitType = keyof WelldotUnits;\n\n/**\n * Canonical ↔ display conversion for one quantity, following the configured\n * display unit (`createWelldot({ units })`). `.well` files always store SI\n * (m, mm, m³/h, kW, m³); this only changes what the UI shows and accepts.\n *\n * `unitType` is a value, ref or getter, so a component can pass\n * `() => props.unitType` and follow prop changes. `unitOverride` (a value,\n * ref or getter) replaces the configured unit for this quantity;\n * `null`/`undefined` falls back to the configuration.\n */\nexport function useWellUnits<T extends DisplayUnitType>(\n unitType: MaybeRefOrGetter<T>,\n unitOverride?: MaybeRefOrGetter<WelldotUnits[T] | null | undefined>,\n): {\n /** Raw unit for length/diameter/power (`m`, `inches`, `kW`…); display label for flow/volume (`m³/h`, `m³`). */\n unit: ComputedRef<string>;\n toDisplay: (canonical: number) => number;\n toCanonical: (display: number) => number;\n} {\n const config = useWelldotConfig();\n const type = computed<DisplayUnitType>(() => toValue(unitType));\n const units = computed<WelldotUnits>(() => {\n const override = toValue(unitOverride);\n return override != null\n ? { ...config.units, [type.value]: override }\n : config.units;\n });\n\n const unit = computed(() => {\n const u = units.value;\n const kind = type.value;\n if (kind === 'length') return u.length;\n if (kind === 'diameter') return u.diameter;\n if (kind === 'flow') return resolveFlowUnitLabel(u.flow);\n if (kind === 'volume') return resolveVolumeUnitLabel(u.volume);\n return u.power;\n });\n\n function toDisplay(canonical: number): number {\n const u = units.value;\n switch (type.value) {\n case 'length':\n return u.length === 'ft' ? metersToFeet(canonical) : canonical;\n case 'diameter':\n return u.diameter === 'inches' ? mmToInches(canonical) : canonical;\n case 'flow':\n return flowFromCanonical(canonical, u.flow);\n case 'power':\n return powerFromCanonical(canonical, u.power);\n default:\n return volumeFromCanonical(canonical, u.volume);\n }\n }\n\n function toCanonical(display: number): number {\n const u = units.value;\n switch (type.value) {\n case 'length':\n return u.length === 'ft' ? feetToMeters(display) : display;\n case 'diameter':\n return u.diameter === 'inches' ? inchesToMm(display) : display;\n case 'flow':\n return flowToCanonical(display, u.flow);\n case 'power':\n return powerToCanonical(display, u.power);\n default:\n return volumeToCanonical(display, u.volume);\n }\n }\n\n return { unit, toDisplay, toCanonical };\n}\n\n/**\n * Whether `value`, emitted by a PrimeVue `InputNumber`, is just `display`\n * as that input shows it (rounded to `maxFractionDigits`). `InputNumber`\n * emits its parsed text on every blur, so an untouched focus + blur would\n * otherwise replace the exact value with its rounded display (`1` m shown\n * as `3.2808` ft would come back as `0.99998784` m). Internal: not exported\n * from the package entry.\n */\nexport function isDisplayedValue(\n value: number | null | undefined,\n display: number | null | undefined,\n maxFractionDigits: number,\n): boolean {\n if (value == null || display == null) return value == null && display == null;\n if (!Number.isFinite(display)) return false;\n const digits = Math.min(100, Math.max(0, Math.trunc(maxFractionDigits) || 0));\n return value === Number(display.toFixed(digits));\n}\n"],"mappings":";;;;;AAiCA,SAAgB,EACd,GACA,GAMA;CACA,IAAM,IAAS,GAAkB,EAC3B,IAAO,QAAgC,EAAQ,EAAS,CAAC,EACzD,IAAQ,QAA6B;EACzC,IAAM,IAAW,EAAQ,EAAa;AACtC,SAAO,KAAY,OAEf,EAAO,QADP;GAAE,GAAG,EAAO;IAAQ,EAAK,QAAQ;GAAU;GAE/C,EAEI,IAAO,QAAe;EAC1B,IAAM,IAAI,EAAM,OACV,IAAO,EAAK;AAKlB,SAJI,MAAS,WAAiB,EAAE,SAC5B,MAAS,aAAmB,EAAE,WAC9B,MAAS,SAAe,EAAqB,EAAE,KAAK,GACpD,MAAS,WAAiB,EAAuB,EAAE,OAAO,GACvD,EAAE;GACT;CAEF,SAAS,EAAU,GAA2B;EAC5C,IAAM,IAAI,EAAM;AAChB,UAAQ,EAAK,OAAb;GACE,KAAK,SACH,QAAO,EAAE,WAAW,OAAO,EAAa,EAAU,GAAG;GACvD,KAAK,WACH,QAAO,EAAE,aAAa,WAAW,EAAW,EAAU,GAAG;GAC3D,KAAK,OACH,QAAO,EAAkB,GAAW,EAAE,KAAK;GAC7C,KAAK,QACH,QAAO,EAAmB,GAAW,EAAE,MAAM;GAC/C,QACE,QAAO,EAAoB,GAAW,EAAE,OAAO;;;CAIrD,SAAS,EAAY,GAAyB;EAC5C,IAAM,IAAI,EAAM;AAChB,UAAQ,EAAK,OAAb;GACE,KAAK,SACH,QAAO,EAAE,WAAW,OAAO,EAAa,EAAQ,GAAG;GACrD,KAAK,WACH,QAAO,EAAE,aAAa,WAAW,EAAW,EAAQ,GAAG;GACzD,KAAK,OACH,QAAO,EAAgB,GAAS,EAAE,KAAK;GACzC,KAAK,QACH,QAAO,EAAiB,GAAS,EAAE,MAAM;GAC3C,QACE,QAAO,EAAkB,GAAS,EAAE,OAAO;;;AAIjD,QAAO;EAAE;EAAM;EAAW;EAAa;;AAWzC,SAAgB,EACd,GACA,GACA,GACS;AACT,KAAI,KAAS,QAAQ,KAAW,KAAM,QAAO,KAAS,QAAQ,KAAW;AACzE,KAAI,CAAC,OAAO,SAAS,EAAQ,CAAE,QAAO;CACtC,IAAM,IAAS,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAkB,IAAI,EAAE,CAAC;AAC7E,QAAO,MAAU,OAAO,EAAQ,QAAQ,EAAO,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { DiameterUnits, FlowUnits, LengthUnits, PowerUnits, VolumeUnits } from '@welldot/core';
|
|
2
|
+
import { CoordFormat } from '@welldot/utils';
|
|
3
|
+
import { Component, InjectionKey, MaybeRefOrGetter, Plugin } from 'vue';
|
|
4
|
+
/** Display units, one per quantity. `.well` files always store SI. */
|
|
5
|
+
export interface WelldotUnits {
|
|
6
|
+
length: LengthUnits;
|
|
7
|
+
diameter: DiameterUnits;
|
|
8
|
+
flow: FlowUnits;
|
|
9
|
+
power: PowerUnits;
|
|
10
|
+
volume: VolumeUnits;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Swappable parts, keyed by part name. Each part has a typed props contract
|
|
14
|
+
* exported from `types.ts` (e.g. `trigger` → `WellInfoTriggerProps`).
|
|
15
|
+
*
|
|
16
|
+
* Precedence when a component renders a part: its own `components` prop,
|
|
17
|
+
* then this map (from `createWelldot`), then the built-in default.
|
|
18
|
+
*/
|
|
19
|
+
export interface WelldotComponents {
|
|
20
|
+
/** `WellInfoPopover` trigger. Props: `WellInfoTriggerProps`. */
|
|
21
|
+
trigger?: Component;
|
|
22
|
+
/**
|
|
23
|
+
* Renders a string icon name (e.g. `WellChip`'s `icon="ph:drop"`).
|
|
24
|
+
* Props: `WellIconProps`. Without it, string icons are not rendered.
|
|
25
|
+
*/
|
|
26
|
+
icon?: Component;
|
|
27
|
+
/** `WellDataGrid` add-row button. Props: `WellAddButtonProps`. */
|
|
28
|
+
addButton?: Component;
|
|
29
|
+
/** `WellDataGrid` delete-row button. Props: `WellDeleteButtonProps`. */
|
|
30
|
+
deleteButton?: Component;
|
|
31
|
+
/** `WellDataGrid` drag handle. Visual only, no props. */
|
|
32
|
+
dragHandle?: Component;
|
|
33
|
+
}
|
|
34
|
+
export type WelldotPartName = keyof WelldotComponents;
|
|
35
|
+
/**
|
|
36
|
+
* Options of `createWelldot`. Every field is optional and may be a plain
|
|
37
|
+
* value, a ref or a getter — getters keep the configuration reactive to an
|
|
38
|
+
* app store or i18n instance without the package depending on either.
|
|
39
|
+
*/
|
|
40
|
+
export interface WelldotConfig {
|
|
41
|
+
/** BCP-47 tag or a bare language (`en`, `pt`, `pt-BR`). Default `en`. */
|
|
42
|
+
locale?: MaybeRefOrGetter<string>;
|
|
43
|
+
/** Display units. Missing quantities fall back to SI (m, mm, m³/h, kW, m³). */
|
|
44
|
+
units?: MaybeRefOrGetter<Partial<WelldotUnits>>;
|
|
45
|
+
/** Fallback coordinate format for location inputs. Default `DD`. */
|
|
46
|
+
coordinateFormat?: MaybeRefOrGetter<CoordFormat>;
|
|
47
|
+
/** Global part overrides. Wrapped in `markRaw`. */
|
|
48
|
+
components?: MaybeRefOrGetter<WelldotComponents>;
|
|
49
|
+
}
|
|
50
|
+
/** The configuration as components read it: plain values behind getters. */
|
|
51
|
+
export interface ResolvedWelldotConfig {
|
|
52
|
+
readonly locale: string;
|
|
53
|
+
readonly units: Readonly<WelldotUnits>;
|
|
54
|
+
readonly coordinateFormat: CoordFormat;
|
|
55
|
+
readonly components: Readonly<WelldotComponents>;
|
|
56
|
+
}
|
|
57
|
+
export declare const DEFAULT_WELLDOT_UNITS: Readonly<WelldotUnits>;
|
|
58
|
+
export declare const DEFAULT_WELLDOT_LOCALE = "en";
|
|
59
|
+
export declare const DEFAULT_COORDINATE_FORMAT: CoordFormat;
|
|
60
|
+
export declare const WELLDOT_CONFIG_KEY: InjectionKey<ResolvedWelldotConfig>;
|
|
61
|
+
/**
|
|
62
|
+
* Resolves options into getters; reading a field re-reads its source, so
|
|
63
|
+
* refs and getters stay reactive. Missing fields fall back to the defaults
|
|
64
|
+
* (`en`, SI units, `DD`, no part overrides).
|
|
65
|
+
*/
|
|
66
|
+
export declare function resolveWelldotConfig(options?: WelldotConfig): ResolvedWelldotConfig;
|
|
67
|
+
/**
|
|
68
|
+
* The `@welldot/vue` Vue plugin. Install it with `app.use()`.
|
|
69
|
+
*
|
|
70
|
+
* It registers the configuration with `app.provide`, which is what makes it
|
|
71
|
+
* reach components mounted outside the normal tree (e.g. RevoGrid cells,
|
|
72
|
+
* which only inherit the app context).
|
|
73
|
+
*
|
|
74
|
+
* **Layering.** Installing `createWelldot` again on the same app stacks the
|
|
75
|
+
* new options on top of the existing configuration instead of replacing it:
|
|
76
|
+
* `locale` and `coordinateFormat` come from the last install that sets them,
|
|
77
|
+
* `units` and `components` merge per key (the later install wins per
|
|
78
|
+
* quantity / part). This lets a library-level plugin (e.g. the Nuxt module's,
|
|
79
|
+
* which wires `locale`) and an app plugin (which wires `units`) each set their
|
|
80
|
+
* own fields. Install every layer before the app mounts.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* app.use(createWelldot({
|
|
84
|
+
* locale: () => i18n.global.locale.value,
|
|
85
|
+
* units: () => ({ length: ui.lengthUnit, diameter: ui.diameterUnit }),
|
|
86
|
+
* components: { trigger: MyInfoButton },
|
|
87
|
+
* }))
|
|
88
|
+
*/
|
|
89
|
+
export declare function createWelldot(options?: WelldotConfig): Plugin;
|
|
90
|
+
/**
|
|
91
|
+
* The active configuration. Falls back to the defaults (`en`, SI, `DD`, no
|
|
92
|
+
* part overrides) when `createWelldot` isn't installed or when called outside
|
|
93
|
+
* an injection context.
|
|
94
|
+
*/
|
|
95
|
+
export declare function useWelldotConfig(): ResolvedWelldotConfig;
|
|
96
|
+
/**
|
|
97
|
+
* Picks the component for a swappable part: `propOverride` (the rendering
|
|
98
|
+
* component's own `components` prop), then the `createWelldot` map, then
|
|
99
|
+
* `fallback` (the built-in default).
|
|
100
|
+
*
|
|
101
|
+
* `config` defaults to `useWelldotConfig()`, so call it from `setup` or a
|
|
102
|
+
* render function — or pass the config captured in `setup` when resolving
|
|
103
|
+
* inside a `computed` or callback.
|
|
104
|
+
*
|
|
105
|
+
* A prop override is unwrapped and marked raw, so a part held in reactive
|
|
106
|
+
* state (e.g. `components` built from a `reactive` object) is not rendered
|
|
107
|
+
* as a reactive component.
|
|
108
|
+
*/
|
|
109
|
+
export declare function resolvePart(name: WelldotPartName, propOverride?: Component | null, fallback?: Component, config?: ResolvedWelldotConfig): Component | undefined;
|
|
110
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACZ,MAAM,KAAK,CAAC;AAEb,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,yDAAyD;IACzD,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACjD,mDAAmD;IACnD,UAAU,CAAC,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;CAClD;AAED,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAMvD,CAAC;AAEH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,yBAAyB,EAAE,WAAkB,CAAC;AAE3D,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,qBAAqB,CACzC,CAAC;AAqG3B;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,aAAkB,GAC1B,qBAAqB,CAEvB;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAejE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAGxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,EACrB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,EAC/B,QAAQ,CAAC,EAAE,SAAS,EACpB,MAAM,GAAE,qBAA0C,GACjD,SAAS,GAAG,SAAS,CAGvB"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { hasInjectionContext as e, inject as t, isRef as n, markRaw as r, toRaw as i, toValue as a } from "vue";
|
|
2
|
+
//#region src/config.ts
|
|
3
|
+
var o = Object.freeze({
|
|
4
|
+
length: "m",
|
|
5
|
+
diameter: "mm",
|
|
6
|
+
flow: "m3/h",
|
|
7
|
+
power: "kW",
|
|
8
|
+
volume: "m3"
|
|
9
|
+
}), s = "en", c = "DD", l = Symbol("welldot-config"), u = Object.freeze({});
|
|
10
|
+
function d(e) {
|
|
11
|
+
if (!e) return u;
|
|
12
|
+
let t = {};
|
|
13
|
+
for (let [n, i] of Object.entries(e)) i && (t[n] = typeof i == "object" ? r(i) : i);
|
|
14
|
+
return r(t);
|
|
15
|
+
}
|
|
16
|
+
function f(e) {
|
|
17
|
+
let { components: t } = e;
|
|
18
|
+
return {
|
|
19
|
+
options: e,
|
|
20
|
+
staticComponents: t && typeof t != "function" && !n(t) ? d(t) : void 0
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function p(e) {
|
|
24
|
+
return e.staticComponents ?? d(a(e.options.components));
|
|
25
|
+
}
|
|
26
|
+
function m(e, t) {
|
|
27
|
+
let n = { ...e };
|
|
28
|
+
for (let e of t) if (e) for (let [t, r] of Object.entries(e)) r != null && (n[t] = r);
|
|
29
|
+
return n;
|
|
30
|
+
}
|
|
31
|
+
var h = /* @__PURE__ */ new WeakMap();
|
|
32
|
+
function g(e) {
|
|
33
|
+
function t(t) {
|
|
34
|
+
for (let n = e.length - 1; n >= 0; n--) {
|
|
35
|
+
let r = t(e[n].options);
|
|
36
|
+
if (r != null && r !== "") return r;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let n = {
|
|
40
|
+
get locale() {
|
|
41
|
+
return t((e) => a(e.locale)) ?? "en";
|
|
42
|
+
},
|
|
43
|
+
get units() {
|
|
44
|
+
return m(o, e.map((e) => a(e.options.units)));
|
|
45
|
+
},
|
|
46
|
+
get coordinateFormat() {
|
|
47
|
+
return t((e) => a(e.coordinateFormat)) ?? "DD";
|
|
48
|
+
},
|
|
49
|
+
get components() {
|
|
50
|
+
let t = e.map(p).filter((e) => e !== u);
|
|
51
|
+
return t.length === 0 ? u : t.length === 1 ? t[0] : r(Object.assign({}, ...t));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return h.set(n, e), n;
|
|
55
|
+
}
|
|
56
|
+
function _(e = {}) {
|
|
57
|
+
return g([f(e)]);
|
|
58
|
+
}
|
|
59
|
+
var v = _();
|
|
60
|
+
function y(e = {}) {
|
|
61
|
+
let n = f(e);
|
|
62
|
+
return { install(e) {
|
|
63
|
+
let r = e.runWithContext(() => t(l, null)), i = r ? h.get(r) : void 0;
|
|
64
|
+
i ? i.push(n) : e.provide(l, g([n]));
|
|
65
|
+
} };
|
|
66
|
+
}
|
|
67
|
+
function b() {
|
|
68
|
+
return e() ? t(l, v) : v;
|
|
69
|
+
}
|
|
70
|
+
function x(e, t, n, a = b()) {
|
|
71
|
+
return t ? r(i(t)) : a.components[e] ?? n;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { c as DEFAULT_COORDINATE_FORMAT, s as DEFAULT_WELLDOT_LOCALE, o as DEFAULT_WELLDOT_UNITS, l as WELLDOT_CONFIG_KEY, y as createWelldot, x as resolvePart, _ as resolveWelldotConfig, b as useWelldotConfig };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type {\n DiameterUnits,\n FlowUnits,\n LengthUnits,\n PowerUnits,\n VolumeUnits,\n} from '@welldot/core';\nimport type { CoordFormat } from '@welldot/utils';\nimport {\n hasInjectionContext,\n inject,\n isRef,\n markRaw,\n toRaw,\n toValue,\n type App,\n type Component,\n type InjectionKey,\n type MaybeRefOrGetter,\n type Plugin,\n} from 'vue';\n\n/** Display units, one per quantity. `.well` files always store SI. */\nexport interface WelldotUnits {\n length: LengthUnits;\n diameter: DiameterUnits;\n flow: FlowUnits;\n power: PowerUnits;\n volume: VolumeUnits;\n}\n\n/**\n * Swappable parts, keyed by part name. Each part has a typed props contract\n * exported from `types.ts` (e.g. `trigger` → `WellInfoTriggerProps`).\n *\n * Precedence when a component renders a part: its own `components` prop,\n * then this map (from `createWelldot`), then the built-in default.\n */\nexport interface WelldotComponents {\n /** `WellInfoPopover` trigger. Props: `WellInfoTriggerProps`. */\n trigger?: Component;\n /**\n * Renders a string icon name (e.g. `WellChip`'s `icon=\"ph:drop\"`).\n * Props: `WellIconProps`. Without it, string icons are not rendered.\n */\n icon?: Component;\n /** `WellDataGrid` add-row button. Props: `WellAddButtonProps`. */\n addButton?: Component;\n /** `WellDataGrid` delete-row button. Props: `WellDeleteButtonProps`. */\n deleteButton?: Component;\n /** `WellDataGrid` drag handle. Visual only, no props. */\n dragHandle?: Component;\n}\n\nexport type WelldotPartName = keyof WelldotComponents;\n\n/**\n * Options of `createWelldot`. Every field is optional and may be a plain\n * value, a ref or a getter — getters keep the configuration reactive to an\n * app store or i18n instance without the package depending on either.\n */\nexport interface WelldotConfig {\n /** BCP-47 tag or a bare language (`en`, `pt`, `pt-BR`). Default `en`. */\n locale?: MaybeRefOrGetter<string>;\n /** Display units. Missing quantities fall back to SI (m, mm, m³/h, kW, m³). */\n units?: MaybeRefOrGetter<Partial<WelldotUnits>>;\n /** Fallback coordinate format for location inputs. Default `DD`. */\n coordinateFormat?: MaybeRefOrGetter<CoordFormat>;\n /** Global part overrides. Wrapped in `markRaw`. */\n components?: MaybeRefOrGetter<WelldotComponents>;\n}\n\n/** The configuration as components read it: plain values behind getters. */\nexport interface ResolvedWelldotConfig {\n readonly locale: string;\n readonly units: Readonly<WelldotUnits>;\n readonly coordinateFormat: CoordFormat;\n readonly components: Readonly<WelldotComponents>;\n}\n\nexport const DEFAULT_WELLDOT_UNITS: Readonly<WelldotUnits> = Object.freeze({\n length: 'm',\n diameter: 'mm',\n flow: 'm3/h',\n power: 'kW',\n volume: 'm3',\n});\n\nexport const DEFAULT_WELLDOT_LOCALE = 'en';\nexport const DEFAULT_COORDINATE_FORMAT: CoordFormat = 'DD';\n\nexport const WELLDOT_CONFIG_KEY: InjectionKey<ResolvedWelldotConfig> =\n Symbol('welldot-config');\n\nconst EMPTY_COMPONENTS: Readonly<WelldotComponents> = Object.freeze({});\n\nfunction rawComponents(map: WelldotComponents | undefined): WelldotComponents {\n if (!map) return EMPTY_COMPONENTS;\n const raw: WelldotComponents = {};\n for (const [name, part] of Object.entries(map)) {\n if (part)\n raw[name as WelldotPartName] =\n typeof part === 'object' ? markRaw(part) : part;\n }\n return markRaw(raw);\n}\n\n/** One `createWelldot` call. A static `components` map is wrapped once. */\ninterface ConfigLayer {\n readonly options: WelldotConfig;\n readonly staticComponents?: WelldotComponents;\n}\n\nfunction toLayer(options: WelldotConfig): ConfigLayer {\n const { components } = options;\n const isStatic =\n !!components && typeof components !== 'function' && !isRef(components);\n return {\n options,\n staticComponents: isStatic\n ? rawComponents(components as WelldotComponents)\n : undefined,\n };\n}\n\nfunction layerComponents(layer: ConfigLayer): WelldotComponents {\n return (\n layer.staticComponents ?? rawComponents(toValue(layer.options.components))\n );\n}\n\n/** Merges plain objects key by key, skipping `undefined` values. */\nfunction mergeDefined<T extends object>(\n base: T,\n parts: Array<Partial<T> | null | undefined>,\n): T {\n const out = { ...base };\n for (const part of parts) {\n if (!part) continue;\n for (const [key, value] of Object.entries(part)) {\n if (value !== undefined && value !== null) {\n (out as Record<string, unknown>)[key] = value;\n }\n }\n }\n return out;\n}\n\n/** The layer stack behind every config this module created. */\nconst CONFIG_LAYERS = new WeakMap<ResolvedWelldotConfig, ConfigLayer[]>();\n\n/**\n * Builds the getters over a layer stack. The last layer that sets `locale`\n * or `coordinateFormat` wins; `units` and `components` merge key by key, the\n * later layer winning per quantity / part.\n */\nfunction layeredConfig(layers: ConfigLayer[]): ResolvedWelldotConfig {\n function last<T>(read: (options: WelldotConfig) => T | null | undefined) {\n for (let i = layers.length - 1; i >= 0; i--) {\n const value = read(layers[i].options);\n if (value !== undefined && value !== null && value !== '') return value;\n }\n return undefined;\n }\n\n const config: ResolvedWelldotConfig = {\n get locale() {\n return last(o => toValue(o.locale)) ?? DEFAULT_WELLDOT_LOCALE;\n },\n get units() {\n return mergeDefined<WelldotUnits>(\n DEFAULT_WELLDOT_UNITS,\n layers.map(l => toValue(l.options.units)),\n );\n },\n get coordinateFormat() {\n return (\n last(o => toValue(o.coordinateFormat)) ?? DEFAULT_COORDINATE_FORMAT\n );\n },\n get components() {\n const maps = layers\n .map(layerComponents)\n .filter(map => map !== EMPTY_COMPONENTS);\n if (maps.length === 0) return EMPTY_COMPONENTS;\n if (maps.length === 1) return maps[0];\n return markRaw(Object.assign({}, ...maps) as WelldotComponents);\n },\n };\n CONFIG_LAYERS.set(config, layers);\n return config;\n}\n\n/**\n * Resolves options into getters; reading a field re-reads its source, so\n * refs and getters stay reactive. Missing fields fall back to the defaults\n * (`en`, SI units, `DD`, no part overrides).\n */\nexport function resolveWelldotConfig(\n options: WelldotConfig = {},\n): ResolvedWelldotConfig {\n return layeredConfig([toLayer(options)]);\n}\n\nconst DEFAULT_CONFIG = resolveWelldotConfig();\n\n/**\n * The `@welldot/vue` Vue plugin. Install it with `app.use()`.\n *\n * It registers the configuration with `app.provide`, which is what makes it\n * reach components mounted outside the normal tree (e.g. RevoGrid cells,\n * which only inherit the app context).\n *\n * **Layering.** Installing `createWelldot` again on the same app stacks the\n * new options on top of the existing configuration instead of replacing it:\n * `locale` and `coordinateFormat` come from the last install that sets them,\n * `units` and `components` merge per key (the later install wins per\n * quantity / part). This lets a library-level plugin (e.g. the Nuxt module's,\n * which wires `locale`) and an app plugin (which wires `units`) each set their\n * own fields. Install every layer before the app mounts.\n *\n * @example\n * app.use(createWelldot({\n * locale: () => i18n.global.locale.value,\n * units: () => ({ length: ui.lengthUnit, diameter: ui.diameterUnit }),\n * components: { trigger: MyInfoButton },\n * }))\n */\nexport function createWelldot(options: WelldotConfig = {}): Plugin {\n const layer = toLayer(options);\n return {\n install(app: App) {\n // The stack lives per app (never on the plugin object), so one\n // `createWelldot()` result installed into several apps — e.g. one per\n // SSR request — never leaks layers between them.\n const current = app.runWithContext(() =>\n inject(WELLDOT_CONFIG_KEY, null),\n );\n const layers = current ? CONFIG_LAYERS.get(current) : undefined;\n if (layers) layers.push(layer);\n else app.provide(WELLDOT_CONFIG_KEY, layeredConfig([layer]));\n },\n };\n}\n\n/**\n * The active configuration. Falls back to the defaults (`en`, SI, `DD`, no\n * part overrides) when `createWelldot` isn't installed or when called outside\n * an injection context.\n */\nexport function useWelldotConfig(): ResolvedWelldotConfig {\n if (!hasInjectionContext()) return DEFAULT_CONFIG;\n return inject(WELLDOT_CONFIG_KEY, DEFAULT_CONFIG);\n}\n\n/**\n * Picks the component for a swappable part: `propOverride` (the rendering\n * component's own `components` prop), then the `createWelldot` map, then\n * `fallback` (the built-in default).\n *\n * `config` defaults to `useWelldotConfig()`, so call it from `setup` or a\n * render function — or pass the config captured in `setup` when resolving\n * inside a `computed` or callback.\n *\n * A prop override is unwrapped and marked raw, so a part held in reactive\n * state (e.g. `components` built from a `reactive` object) is not rendered\n * as a reactive component.\n */\nexport function resolvePart(\n name: WelldotPartName,\n propOverride?: Component | null,\n fallback?: Component,\n config: ResolvedWelldotConfig = useWelldotConfig(),\n): Component | undefined {\n if (propOverride) return markRaw(toRaw(propOverride));\n return config.components[name] ?? fallback;\n}\n"],"mappings":";;AAgFA,IAAa,IAAgD,OAAO,OAAO;CACzE,QAAQ;CACR,UAAU;CACV,MAAM;CACN,OAAO;CACP,QAAQ;CACT,CAAC,EAEW,IAAyB,MACzB,IAAyC,MAEzC,IACX,OAAO,iBAAiB,EAEpB,IAAgD,OAAO,OAAO,EAAE,CAAC;AAEvE,SAAS,EAAc,GAAuD;AAC5E,KAAI,CAAC,EAAK,QAAO;CACjB,IAAM,IAAyB,EAAE;AACjC,MAAK,IAAM,CAAC,GAAM,MAAS,OAAO,QAAQ,EAAI,CAC5C,CAAI,MACF,EAAI,KACF,OAAO,KAAS,WAAW,EAAQ,EAAK,GAAG;AAEjD,QAAO,EAAQ,EAAI;;AASrB,SAAS,EAAQ,GAAqC;CACpD,IAAM,EAAE,kBAAe;AAGvB,QAAO;EACL;EACA,kBAHE,KAAc,OAAO,KAAe,cAAc,CAAC,EAAM,EAAW,GAIlE,EAAc,EAAgC,GAC9C,KAAA;EACL;;AAGH,SAAS,EAAgB,GAAuC;AAC9D,QACE,EAAM,oBAAoB,EAAc,EAAQ,EAAM,QAAQ,WAAW,CAAC;;AAK9E,SAAS,EACP,GACA,GACG;CACH,IAAM,IAAM,EAAE,GAAG,GAAM;AACvB,MAAK,IAAM,KAAQ,EACZ,OACL,MAAK,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,EAAK,CAC7C,CAAI,KAAiC,SAClC,EAAgC,KAAO;AAI9C,QAAO;;AAIT,IAAM,oBAAgB,IAAI,SAA+C;AAOzE,SAAS,EAAc,GAA8C;CACnE,SAAS,EAAQ,GAAwD;AACvE,OAAK,IAAI,IAAI,EAAO,SAAS,GAAG,KAAK,GAAG,KAAK;GAC3C,IAAM,IAAQ,EAAK,EAAO,GAAG,QAAQ;AACrC,OAAI,KAAiC,QAAQ,MAAU,GAAI,QAAO;;;CAKtE,IAAM,IAAgC;EACpC,IAAI,SAAS;AACX,UAAO,GAAK,MAAK,EAAQ,EAAE,OAAO,CAAC,IAAA;;EAErC,IAAI,QAAQ;AACV,UAAO,EACL,GACA,EAAO,KAAI,MAAK,EAAQ,EAAE,QAAQ,MAAM,CAAC,CAC1C;;EAEH,IAAI,mBAAmB;AACrB,UACE,GAAK,MAAK,EAAQ,EAAE,iBAAiB,CAAC,IAAA;;EAG1C,IAAI,aAAa;GACf,IAAM,IAAO,EACV,IAAI,EAAgB,CACpB,QAAO,MAAO,MAAQ,EAAiB;AAG1C,UAFI,EAAK,WAAW,IAAU,IAC1B,EAAK,WAAW,IAAU,EAAK,KAC5B,EAAQ,OAAO,OAAO,EAAE,EAAE,GAAG,EAAK,CAAsB;;EAElE;AAED,QADA,EAAc,IAAI,GAAQ,EAAO,EAC1B;;AAQT,SAAgB,EACd,IAAyB,EAAE,EACJ;AACvB,QAAO,EAAc,CAAC,EAAQ,EAAQ,CAAC,CAAC;;AAG1C,IAAM,IAAiB,GAAsB;AAwB7C,SAAgB,EAAc,IAAyB,EAAE,EAAU;CACjE,IAAM,IAAQ,EAAQ,EAAQ;AAC9B,QAAO,EACL,QAAQ,GAAU;EAIhB,IAAM,IAAU,EAAI,qBAClB,EAAO,GAAoB,KAAK,CACjC,EACK,IAAS,IAAU,EAAc,IAAI,EAAQ,GAAG,KAAA;AACtD,EAAI,IAAQ,EAAO,KAAK,EAAM,GACzB,EAAI,QAAQ,GAAoB,EAAc,CAAC,EAAM,CAAC,CAAC;IAE/D;;AAQH,SAAgB,IAA0C;AAExD,QADK,GAAqB,GACnB,EAAO,GAAoB,EAAe,GADd;;AAiBrC,SAAgB,EACd,GACA,GACA,GACA,IAAgC,GAAkB,EAC3B;AAEvB,QADI,IAAqB,EAAQ,EAAM,EAAa,CAAC,GAC9C,EAAO,WAAW,MAAS"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LanguageTextInput } from '@welldot/core';
|
|
2
|
+
import { WellDataGridComponents, WellDataGridLabels, WellGridColumn } from './types';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/** Reactive array from the store (via deep-proxy or plain copy). */
|
|
5
|
+
rows: Record<string, unknown>[];
|
|
6
|
+
columns: WellGridColumn[];
|
|
7
|
+
/** Label of the add-row button. Icon-only when omitted. */
|
|
8
|
+
addLabel?: LanguageTextInput;
|
|
9
|
+
/** Label handed to the delete-row button (its aria-label by default). */
|
|
10
|
+
deleteLabel?: LanguageTextInput;
|
|
11
|
+
/** Grid-internal text (texture editor, column info trigger). */
|
|
12
|
+
labels?: WellDataGridLabels;
|
|
13
|
+
/** Part overrides: `addButton`, `deleteButton`, `dragHandle`. */
|
|
14
|
+
components?: WellDataGridComponents;
|
|
15
|
+
};
|
|
16
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
17
|
+
delete: (index: number) => any;
|
|
18
|
+
add: () => any;
|
|
19
|
+
change: (index: number, prop: string, value: unknown) => any;
|
|
20
|
+
reorder: (from: number, to: number) => any;
|
|
21
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
|
+
onDelete?: ((index: number) => any) | undefined;
|
|
23
|
+
onAdd?: (() => any) | undefined;
|
|
24
|
+
onChange?: ((index: number, prop: string, value: unknown) => any) | undefined;
|
|
25
|
+
onReorder?: ((from: number, to: number) => any) | undefined;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
declare const _default: typeof __VLS_export;
|
|
28
|
+
export default _default;
|
|
29
|
+
//# sourceMappingURL=WellDataGrid.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellDataGrid.d.ts","sourceRoot":"","sources":["../../src/grid/WellDataGrid.vue"],"names":[],"mappings":"AAiMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKvD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AAKjB,KAAK,WAAW,GAAG;IACjB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,yEAAyE;IACzE,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gEAAgE;IAChE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,iEAAiE;IACjE,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC,CAAC;AAuMF,QAAA,MAAM,YAAY;;;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import e from "../_virtual/_plugin-vue_export-helper.js";
|
|
2
|
+
import t from "./WellDataGrid.vue_vue_type_script_setup_true_lang.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/grid/WellDataGrid.vue
|
|
5
|
+
var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-45cbb3e6"]]);
|
|
6
|
+
//#endregion
|
|
7
|
+
export { n as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=WellDataGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellDataGrid.js","names":[],"sources":["../../src/grid/WellDataGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Editable spreadsheet for a well feature array (lithology, casing, screens…)\n * built on RevoGrid. Controlled: the grid never mutates `rows`, it emits\n * `add` / `delete` / `change` / `reorder` and the parent updates its store.\n *\n * - Columns are `WellGridColumn`s; their text is `LanguageTextInput`,\n * resolved for the configured locale. Unit columns follow the configured\n * display units.\n * - Parts (`components` prop, then `createWelldot({ components })`, then the\n * built-in default): `addButton` (`WellAddButtonProps`), `deleteButton`\n * (`WellDeleteButtonProps`), `dragHandle` (visual only).\n * - Rendered on the client only (after mount); a skeleton shows until then.\n * - Needs `@welldot/vue/tailwind.css` (which imports `grid.css`) for the\n * RevoGrid theme.\n */\nimport { VGrid } from '@revolist/vue3-datagrid';\nimport type { LanguageTextInput } from '@welldot/core';\nimport { computed, onMounted, ref } from 'vue';\nimport { useWellText } from '../composables/useWellText';\nimport { resolvePart, useWelldotConfig } from '../config';\nimport WellGridAddButton from './parts/WellGridAddButton.vue';\nimport type {\n WellDataGridComponents,\n WellDataGridLabels,\n WellGridColumn,\n} from './types';\nimport { useWellGridColumns } from './useWellGridColumns';\n\n// ─── Props / Emits ────────────────────────────────────────────────────────────\n\nconst props = defineProps<{\n /** Reactive array from the store (via deep-proxy or plain copy). */\n rows: Record<string, unknown>[];\n columns: WellGridColumn[];\n /** Label of the add-row button. Icon-only when omitted. */\n addLabel?: LanguageTextInput;\n /** Label handed to the delete-row button (its aria-label by default). */\n deleteLabel?: LanguageTextInput;\n /** Grid-internal text (texture editor, column info trigger). */\n labels?: WellDataGridLabels;\n /** Part overrides: `addButton`, `deleteButton`, `dragHandle`. */\n components?: WellDataGridComponents;\n}>();\n\nconst emit = defineEmits<{\n /** Parent should push a new row to the store */\n add: [];\n /** Parent should splice row at `index` from the store */\n delete: [index: number];\n /** Parent should assign `value` to `store.array[index][prop]` */\n change: [index: number, prop: string, value: unknown];\n /** Parent should reorder row from `from` to `to` */\n reorder: [from: number, to: number];\n}>();\n\nconst config = useWelldotConfig();\nconst text = useWellText();\n\nconst {\n gridEditors,\n revoColumns,\n gridStretch,\n plugins,\n handleAfterEdit,\n gridContainerRef,\n handleAfterFocus,\n handleGridMousedown,\n handleGridClick,\n} = useWellGridColumns({\n columns: () => props.columns,\n onDelete: rowIndex => emit('delete', rowIndex),\n onChange: (rowIndex, prop, value) => emit('change', rowIndex, prop, value),\n deleteLabel: () => props.deleteLabel,\n labels: () => props.labels,\n components: () => props.components,\n});\n\nconst addButton = computed(() =>\n resolvePart(\n 'addButton',\n props.components?.addButton,\n WellGridAddButton,\n config,\n ),\n);\n\n// ─── Client-only rendering ────────────────────────────────────────────────────\n// RevoGrid is a web component; render it only once mounted in the browser.\n\nconst mounted = ref(false);\nonMounted(() => {\n mounted.value = true;\n});\n\n// ─── Source ───────────────────────────────────────────────────────────────────\n// Spread to a plain array so RevoGrid's internal diffing does not fight the\n// Immer/deep-proxy wrapper on the store.\n\nconst gridSource = computed(() => props.rows.map(r => ({ ...r })));\n\n// ─── Height — auto-size based on row count ────────────────────────────────────\n\nconst HEADER_H = 38;\nconst ROW_H = 30;\n\nconst gridHeight = computed(() => {\n const contentH = Math.max(1, props.rows.length) * ROW_H;\n return `${HEADER_H + contentH + 2}px`;\n});\n\n// ─── Event handlers ───────────────────────────────────────────────────────────\n\nfunction handleRowOrderChanged(\n event: CustomEvent<{ from: number; to: number }>,\n) {\n emit('reorder', event.detail.from, event.detail.to);\n}\n</script>\n\n<template>\n <div class=\"well-data-grid-wrapper flex flex-col\">\n <div\n v-show=\"rows.length > 0\"\n ref=\"gridContainerRef\"\n class=\"well-grid-container\"\n @mousedown.capture=\"handleGridMousedown\"\n @click=\"handleGridClick\"\n >\n <VGrid\n v-if=\"mounted\"\n class=\"well-data-grid\"\n :style=\"{ height: gridHeight }\"\n :row-size=\"ROW_H\"\n :stretch=\"gridStretch\"\n :source=\"gridSource\"\n :columns=\"revoColumns\"\n :editors=\"gridEditors\"\n :plugins=\"plugins\"\n :range=\"true\"\n can-drag\n theme=\"compact\"\n @afteredit=\"handleAfterEdit\"\n @afterfocus=\"handleAfterFocus\"\n @roworderchanged=\"handleRowOrderChanged\"\n />\n <div\n v-else\n class=\"well-grid-skeleton animate-pulse rounded bg-surface-100 w-full h-full\"\n />\n </div>\n\n <component\n :is=\"addButton\"\n :label=\"text(props.addLabel)\"\n @click=\"emit('add')\"\n />\n </div>\n</template>\n\n<style scoped>\n.well-data-grid-wrapper {\n --accent-soft: color-mix(in srgb, var(--color-primary-500) 12%, transparent);\n --color-primary-soft: color-mix(\n in srgb,\n var(--color-primary-500) 25%,\n transparent\n );\n}\n\n.well-data-grid :deep(.header-rgRow) {\n height: v-bind('`${HEADER_H}px`');\n}\n</style>\n"],"mappings":""}
|