@hina-ui/vue 1.7.5 → 1.7.6
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/README.md +37 -0
- package/dist/index.js +2222 -987
- package/dist/index.js.map +1 -1
- package/dist/shared/behavior/anchor-follow.ts +95 -0
- package/dist/shared/behavior/form.ts +187 -0
- package/dist/shared/behavior/ripple.ts +222 -0
- package/dist/shared/behavior/spoiler/painter.ts +197 -0
- package/dist/shared/behavior/spoiler/worklet.ts +199 -0
- package/dist/shared/behavior/toast.ts +243 -0
- package/dist/shared/lib/anchor.ts +83 -0
- package/dist/shared/lib/banner.ts +10 -0
- package/dist/shared/lib/calendar/format.ts +23 -0
- package/dist/shared/lib/caret.ts +48 -0
- package/dist/shared/lib/collapse.ts +29 -0
- package/dist/shared/lib/command-palette/hotkey.ts +27 -0
- package/dist/shared/lib/command-palette/match.ts +92 -0
- package/dist/shared/lib/data-list.ts +40 -0
- package/dist/shared/lib/data-table/column-sizing-styles.ts +41 -0
- package/dist/shared/lib/data-table/column-sizing.ts +101 -0
- package/dist/shared/lib/data-table/csv.ts +51 -0
- package/dist/shared/lib/data-table/layout.ts +199 -0
- package/dist/shared/lib/data-table/resize.ts +66 -0
- package/dist/shared/lib/data-table/state.ts +226 -0
- package/dist/shared/lib/data-table/utils.ts +80 -0
- package/dist/shared/lib/date-range-field/validity.ts +21 -0
- package/dist/shared/lib/date.ts +111 -0
- package/dist/shared/lib/field-focus.ts +36 -0
- package/dist/shared/lib/file-upload/select.ts +58 -0
- package/dist/shared/lib/file-upload/size.ts +16 -0
- package/dist/shared/lib/form/errors.ts +48 -0
- package/dist/shared/lib/form/focus.ts +10 -0
- package/dist/shared/lib/form/standard-schema.ts +26 -0
- package/dist/shared/lib/form/values.ts +23 -0
- package/dist/shared/lib/highlighter.ts +98 -0
- package/dist/shared/lib/iris-origin.ts +40 -0
- package/dist/shared/lib/lightbox/clip.ts +117 -0
- package/dist/shared/lib/lightbox/download.ts +29 -0
- package/dist/shared/lib/lightbox/gesture.ts +54 -0
- package/dist/shared/lib/lightbox/paging.ts +33 -0
- package/dist/shared/lib/lightbox/pose.ts +142 -0
- package/dist/shared/lib/lightbox/source.ts +17 -0
- package/dist/shared/lib/lightbox/types.ts +14 -0
- package/dist/shared/lib/lightbox/zoom.ts +127 -0
- package/dist/shared/lib/meter-group.ts +16 -0
- package/dist/shared/lib/overlay-anchor.ts +42 -0
- package/dist/shared/lib/pagination.ts +16 -0
- package/dist/shared/lib/pointer-corridor.ts +26 -0
- package/dist/shared/lib/qr-code-export.ts +68 -0
- package/dist/shared/lib/range-calendar/limit.ts +11 -0
- package/dist/shared/lib/rating.ts +4 -0
- package/dist/shared/lib/relative-time.ts +20 -0
- package/dist/shared/lib/scroll-area.ts +77 -0
- package/dist/shared/lib/scroll-restore.ts +148 -0
- package/dist/shared/lib/toast-layout.ts +42 -0
- package/dist/shared/lib/tree/selection.ts +131 -0
- package/dist/shared/lib/tree-select/filter.ts +19 -0
- package/dist/shared/lib/virtual/choices.ts +193 -0
- package/dist/shared/lib/virtual/collection.ts +71 -0
- package/dist/shared/lib/virtual/filter.ts +26 -0
- package/dist/shared/lib/virtual/flow.ts +32 -0
- package/dist/shared/lib/virtual/list.ts +63 -0
- package/dist/shared/lib/virtual/navigation.ts +26 -0
- package/dist/shared/lib/virtual/tree.ts +98 -0
- package/dist/shared/locale/en-US.ts +220 -0
- package/dist/shared/locale/index.ts +52 -0
- package/dist/shared/locale/types.ts +225 -0
- package/dist/shared/locale/zh-CN.ts +215 -0
- package/dist/shared/primitives/number-field/LICENSE +21 -0
- package/dist/shared/primitives/number-field/index.ts +407 -0
- package/dist/shared/styles/semantic.css +10 -2
- package/dist/shared/types/autocomplete.ts +16 -0
- package/dist/shared/types/data-table.ts +170 -0
- package/dist/shared/types/pagination.ts +19 -0
- package/dist/shared/types/select.ts +23 -0
- package/dist/shared/types/tree-select.ts +34 -0
- package/dist/shared/types/tree.ts +20 -0
- package/dist/types/shared/src/behavior/anchor-follow.d.ts +13 -0
- package/dist/types/shared/src/behavior/anchor-follow.d.ts.map +1 -0
- package/dist/types/shared/src/behavior/form.d.ts +24 -0
- package/dist/types/shared/src/behavior/form.d.ts.map +1 -0
- package/dist/types/shared/src/behavior/ripple.d.ts +11 -0
- package/dist/types/shared/src/behavior/ripple.d.ts.map +1 -0
- package/dist/types/shared/src/behavior/spoiler/painter.d.ts +35 -0
- package/dist/types/shared/src/behavior/spoiler/painter.d.ts.map +1 -0
- package/dist/types/shared/src/behavior/spoiler/worklet.d.ts +2 -0
- package/dist/types/shared/src/behavior/spoiler/worklet.d.ts.map +1 -0
- package/dist/types/shared/src/behavior/toast.d.ts +72 -0
- package/dist/types/shared/src/behavior/toast.d.ts.map +1 -0
- package/dist/types/shared/src/lib/anchor.d.ts +31 -0
- package/dist/types/shared/src/lib/anchor.d.ts.map +1 -0
- package/dist/types/shared/src/lib/banner.d.ts +3 -0
- package/dist/types/shared/src/lib/banner.d.ts.map +1 -0
- package/dist/types/shared/src/lib/calendar/format.d.ts +7 -0
- package/dist/types/shared/src/lib/calendar/format.d.ts.map +1 -0
- package/dist/types/shared/src/lib/caret.d.ts +2 -0
- package/dist/types/shared/src/lib/caret.d.ts.map +1 -0
- package/dist/types/shared/src/lib/collapse.d.ts +9 -0
- package/dist/types/shared/src/lib/collapse.d.ts.map +1 -0
- package/dist/types/shared/src/lib/command-palette/hotkey.d.ts +9 -0
- package/dist/types/shared/src/lib/command-palette/hotkey.d.ts.map +1 -0
- package/dist/types/shared/src/lib/command-palette/match.d.ts +21 -0
- package/dist/types/shared/src/lib/command-palette/match.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-list.d.ts +7 -0
- package/dist/types/shared/src/lib/data-list.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/column-sizing-styles.d.ts +8 -0
- package/dist/types/shared/src/lib/data-table/column-sizing-styles.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/column-sizing.d.ts +22 -0
- package/dist/types/shared/src/lib/data-table/column-sizing.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/csv.d.ts +5 -0
- package/dist/types/shared/src/lib/data-table/csv.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/layout.d.ts +28 -0
- package/dist/types/shared/src/lib/data-table/layout.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/resize.d.ts +15 -0
- package/dist/types/shared/src/lib/data-table/resize.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/state.d.ts +103 -0
- package/dist/types/shared/src/lib/data-table/state.d.ts.map +1 -0
- package/dist/types/shared/src/lib/data-table/utils.d.ts +11 -0
- package/dist/types/shared/src/lib/data-table/utils.d.ts.map +1 -0
- package/dist/types/shared/src/lib/date-range-field/validity.d.ts +12 -0
- package/dist/types/shared/src/lib/date-range-field/validity.d.ts.map +1 -0
- package/dist/types/shared/src/lib/date.d.ts +28 -0
- package/dist/types/shared/src/lib/date.d.ts.map +1 -0
- package/dist/types/shared/src/lib/field-focus.d.ts +2 -0
- package/dist/types/shared/src/lib/field-focus.d.ts.map +1 -0
- package/dist/types/shared/src/lib/file-upload/select.d.ts +17 -0
- package/dist/types/shared/src/lib/file-upload/select.d.ts.map +1 -0
- package/dist/types/shared/src/lib/file-upload/size.d.ts +2 -0
- package/dist/types/shared/src/lib/file-upload/size.d.ts.map +1 -0
- package/dist/types/shared/src/lib/form/errors.d.ts +7 -0
- package/dist/types/shared/src/lib/form/errors.d.ts.map +1 -0
- package/dist/types/shared/src/lib/form/focus.d.ts +2 -0
- package/dist/types/shared/src/lib/form/focus.d.ts.map +1 -0
- package/dist/types/shared/src/lib/form/standard-schema.d.ts +23 -0
- package/dist/types/shared/src/lib/form/standard-schema.d.ts.map +1 -0
- package/dist/types/shared/src/lib/form/values.d.ts +3 -0
- package/dist/types/shared/src/lib/form/values.d.ts.map +1 -0
- package/dist/types/shared/src/lib/highlighter.d.ts +4 -0
- package/dist/types/shared/src/lib/highlighter.d.ts.map +1 -0
- package/dist/types/shared/src/lib/iris-origin.d.ts +6 -0
- package/dist/types/shared/src/lib/iris-origin.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/clip.d.ts +16 -0
- package/dist/types/shared/src/lib/lightbox/clip.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/download.d.ts +3 -0
- package/dist/types/shared/src/lib/lightbox/download.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/gesture.d.ts +26 -0
- package/dist/types/shared/src/lib/lightbox/gesture.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/paging.d.ts +9 -0
- package/dist/types/shared/src/lib/lightbox/paging.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/pose.d.ts +38 -0
- package/dist/types/shared/src/lib/lightbox/pose.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/source.d.ts +4 -0
- package/dist/types/shared/src/lib/lightbox/source.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/types.d.ts +16 -0
- package/dist/types/shared/src/lib/lightbox/types.d.ts.map +1 -0
- package/dist/types/shared/src/lib/lightbox/zoom.d.ts +40 -0
- package/dist/types/shared/src/lib/lightbox/zoom.d.ts.map +1 -0
- package/dist/types/shared/src/lib/meter-group.d.ts +5 -0
- package/dist/types/shared/src/lib/meter-group.d.ts.map +1 -0
- package/dist/types/shared/src/lib/overlay-anchor.d.ts +10 -0
- package/dist/types/shared/src/lib/overlay-anchor.d.ts.map +1 -0
- package/dist/types/shared/src/lib/pagination.d.ts +4 -0
- package/dist/types/shared/src/lib/pagination.d.ts.map +1 -0
- package/dist/types/shared/src/lib/pointer-corridor.d.ts +7 -0
- package/dist/types/shared/src/lib/pointer-corridor.d.ts.map +1 -0
- package/dist/types/shared/src/lib/qr-code-export.d.ts +6 -0
- package/dist/types/shared/src/lib/qr-code-export.d.ts.map +1 -0
- package/dist/types/shared/src/lib/range-calendar/limit.d.ts +3 -0
- package/dist/types/shared/src/lib/range-calendar/limit.d.ts.map +1 -0
- package/dist/types/shared/src/lib/rating.d.ts +2 -0
- package/dist/types/shared/src/lib/rating.d.ts.map +1 -0
- package/dist/types/shared/src/lib/relative-time.d.ts +2 -0
- package/dist/types/shared/src/lib/relative-time.d.ts.map +1 -0
- package/dist/types/shared/src/lib/scroll-area.d.ts +50 -0
- package/dist/types/shared/src/lib/scroll-area.d.ts.map +1 -0
- package/dist/types/shared/src/lib/scroll-restore.d.ts +34 -0
- package/dist/types/shared/src/lib/scroll-restore.d.ts.map +1 -0
- package/dist/types/shared/src/lib/toast-layout.d.ts +13 -0
- package/dist/types/shared/src/lib/toast-layout.d.ts.map +1 -0
- package/dist/types/shared/src/lib/tree/selection.d.ts +23 -0
- package/dist/types/shared/src/lib/tree/selection.d.ts.map +1 -0
- package/dist/types/shared/src/lib/tree-select/filter.d.ts +7 -0
- package/dist/types/shared/src/lib/tree-select/filter.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/choices.d.ts +59 -0
- package/dist/types/shared/src/lib/virtual/choices.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/collection.d.ts +25 -0
- package/dist/types/shared/src/lib/virtual/collection.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/flow.d.ts +18 -0
- package/dist/types/shared/src/lib/virtual/flow.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/list.d.ts +46 -0
- package/dist/types/shared/src/lib/virtual/list.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/navigation.d.ts +3 -0
- package/dist/types/shared/src/lib/virtual/navigation.d.ts.map +1 -0
- package/dist/types/shared/src/lib/virtual/tree.d.ts +31 -0
- package/dist/types/shared/src/lib/virtual/tree.d.ts.map +1 -0
- package/dist/types/shared/src/locale/en-US.d.ts +3 -0
- package/dist/types/shared/src/locale/en-US.d.ts.map +1 -0
- package/dist/types/shared/src/locale/index.d.ts +6 -0
- package/dist/types/shared/src/locale/index.d.ts.map +1 -0
- package/dist/types/shared/src/locale/types.d.ts +235 -0
- package/dist/types/shared/src/locale/types.d.ts.map +1 -0
- package/dist/types/shared/src/locale/zh-CN.d.ts +3 -0
- package/dist/types/shared/src/locale/zh-CN.d.ts.map +1 -0
- package/dist/types/shared/src/primitives/number-field/index.d.ts +155 -0
- package/dist/types/shared/src/primitives/number-field/index.d.ts.map +1 -0
- package/dist/types/shared/src/types/autocomplete.d.ts +14 -0
- package/dist/types/shared/src/types/autocomplete.d.ts.map +1 -0
- package/dist/types/shared/src/types/data-table.d.ts +169 -0
- package/dist/types/shared/src/types/data-table.d.ts.map +1 -0
- package/dist/types/shared/src/types/pagination.d.ts +23 -0
- package/dist/types/shared/src/types/pagination.d.ts.map +1 -0
- package/dist/types/shared/src/types/select.d.ts +14 -0
- package/dist/types/shared/src/types/select.d.ts.map +1 -0
- package/dist/types/shared/src/types/tree-select.d.ts +10 -0
- package/dist/types/shared/src/types/tree-select.d.ts.map +1 -0
- package/dist/types/shared/src/types/tree.d.ts +18 -0
- package/dist/types/shared/src/types/tree.d.ts.map +1 -0
- package/dist/types/shared/src/variants/autocomplete.d.ts +3 -0
- package/dist/types/shared/src/variants/autocomplete.d.ts.map +1 -0
- package/dist/types/shared/src/variants/editable.d.ts +52 -0
- package/dist/types/shared/src/variants/editable.d.ts.map +1 -0
- package/dist/types/shared/src/variants/float-button.d.ts +74 -0
- package/dist/types/shared/src/variants/float-button.d.ts.map +1 -0
- package/dist/types/shared/src/variants/split-button.d.ts +18 -0
- package/dist/types/shared/src/variants/split-button.d.ts.map +1 -0
- package/dist/types/vue/src/components/accordion/AccordionTrigger.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts +2 -7
- package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts.map +1 -1
- package/dist/types/vue/src/components/anchor/composables/useAnchorFollow.d.ts.map +1 -1
- package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts +2 -5
- package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts.map +1 -1
- package/dist/types/vue/src/components/anchor/types.d.ts +1 -8
- package/dist/types/vue/src/components/anchor/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts +1 -1
- package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts.map +1 -1
- package/dist/types/vue/src/components/autocomplete/types.d.ts +1 -13
- package/dist/types/vue/src/components/autocomplete/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/banner/utils/direction.d.ts +1 -2
- package/dist/types/vue/src/components/banner/utils/direction.d.ts.map +1 -1
- package/dist/types/vue/src/components/calendar/utils/format.d.ts +1 -6
- package/dist/types/vue/src/components/calendar/utils/format.d.ts.map +1 -1
- package/dist/types/vue/src/components/code-block/highlighter.d.ts +1 -3
- package/dist/types/vue/src/components/code-block/highlighter.d.ts.map +1 -1
- package/dist/types/vue/src/components/collapsible/CollapsibleTrigger.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/command-palette/composables/useCommandItems.d.ts +1 -1
- package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts +1 -8
- package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts.map +1 -1
- package/dist/types/vue/src/components/command-palette/utils/match.d.ts +5 -12
- package/dist/types/vue/src/components/command-palette/utils/match.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-list/composables/useDataList.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-list/utils/scroll.d.ts +1 -2
- package/dist/types/vue/src/components/data-list/utils/scroll.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts +1 -3
- package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/column-sizing.d.ts +1 -21
- package/dist/types/vue/src/components/data-table/column-sizing.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useDataTable.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableColumns.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableDrag.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableExport.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableResize.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableResizeHandles.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/composables/useTableVirtual.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/types.d.ts +3 -153
- package/dist/types/vue/src/components/data-table/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/data-table/utils.d.ts +1 -9
- package/dist/types/vue/src/components/data-table/utils.d.ts.map +1 -1
- package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts +1 -11
- package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts.map +1 -1
- package/dist/types/vue/src/components/editable/editable.variants.d.ts +1 -1
- package/dist/types/vue/src/components/editable/editable.variants.d.ts.map +1 -1
- package/dist/types/vue/src/components/file-upload/utils/select.d.ts +1 -16
- package/dist/types/vue/src/components/file-upload/utils/select.d.ts.map +1 -1
- package/dist/types/vue/src/components/file-upload/utils/size.d.ts +1 -1
- package/dist/types/vue/src/components/file-upload/utils/size.d.ts.map +1 -1
- package/dist/types/vue/src/components/float-button/float-button.variants.d.ts +1 -1
- package/dist/types/vue/src/components/float-button/float-button.variants.d.ts.map +1 -1
- package/dist/types/vue/src/components/form/Form.vue.d.ts +1 -1
- package/dist/types/vue/src/components/form/composables/useForm.d.ts +9 -15
- package/dist/types/vue/src/components/form/composables/useForm.d.ts.map +1 -1
- package/dist/types/vue/src/components/form/standard-schema.d.ts +1 -22
- package/dist/types/vue/src/components/form/standard-schema.d.ts.map +1 -1
- package/dist/types/vue/src/components/form/utils/errors.d.ts +1 -6
- package/dist/types/vue/src/components/form/utils/errors.d.ts.map +1 -1
- package/dist/types/vue/src/components/form/utils/focus.d.ts +1 -1
- package/dist/types/vue/src/components/form/utils/focus.d.ts.map +1 -1
- package/dist/types/vue/src/components/form/utils/values.d.ts +1 -2
- package/dist/types/vue/src/components/form/utils/values.d.ts.map +1 -1
- package/dist/types/vue/src/components/form-field/FormField.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/types.d.ts +1 -15
- package/dist/types/vue/src/components/lightbox/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/clip.d.ts +1 -15
- package/dist/types/vue/src/components/lightbox/utils/clip.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/download.d.ts +1 -2
- package/dist/types/vue/src/components/lightbox/utils/download.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts +1 -25
- package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/paging.d.ts +1 -8
- package/dist/types/vue/src/components/lightbox/utils/paging.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/pose.d.ts +1 -37
- package/dist/types/vue/src/components/lightbox/utils/pose.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/source.d.ts +1 -3
- package/dist/types/vue/src/components/lightbox/utils/source.d.ts.map +1 -1
- package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts +1 -39
- package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts.map +1 -1
- package/dist/types/vue/src/components/meter-group/utils/tones.d.ts +1 -3
- package/dist/types/vue/src/components/meter-group/utils/tones.d.ts.map +1 -1
- package/dist/types/vue/src/components/month-grid/MonthGrid.vue.d.ts +1 -1
- package/dist/types/vue/src/components/multi-select/MultiSelect.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts +2 -2
- package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts.map +1 -1
- package/dist/types/vue/src/components/pagination/types.d.ts +1 -22
- package/dist/types/vue/src/components/pagination/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/pagination/utils/ranges.d.ts +1 -2
- package/dist/types/vue/src/components/pagination/utils/ranges.d.ts.map +1 -1
- package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts +4 -1
- package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/qr-code/export.d.ts +1 -2
- package/dist/types/vue/src/components/qr-code/export.d.ts.map +1 -1
- package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts +1 -2
- package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts.map +1 -1
- package/dist/types/vue/src/components/range-slider/RangeSlider.vue.d.ts +2 -2
- package/dist/types/vue/src/components/rating/utils/fill.d.ts +1 -1
- package/dist/types/vue/src/components/rating/utils/fill.d.ts.map +1 -1
- package/dist/types/vue/src/components/ripple/useRipple.d.ts.map +1 -1
- package/dist/types/vue/src/components/scroll-area/ScrollArea.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts +2 -1
- package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts.map +1 -1
- package/dist/types/vue/src/components/scroll-area/composables/useLayerLock.d.ts.map +1 -1
- package/dist/types/vue/src/components/scroll-area/composables/useWheelRedirect.d.ts.map +1 -1
- package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts +1 -33
- package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts.map +1 -1
- package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts +4 -1
- package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/select/types.d.ts +1 -13
- package/dist/types/vue/src/components/select/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/slider/Slider.vue.d.ts +2 -2
- package/dist/types/vue/src/components/split-button/split-button.variants.d.ts +1 -1
- package/dist/types/vue/src/components/split-button/split-button.variants.d.ts.map +1 -1
- package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts +1 -34
- package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts.map +1 -1
- package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts +1 -5
- package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts.map +1 -1
- package/dist/types/vue/src/components/spoiler/worklet.d.ts +1 -1
- package/dist/types/vue/src/components/spoiler/worklet.d.ts.map +1 -1
- package/dist/types/vue/src/components/table/Table.vue.d.ts +6 -3
- package/dist/types/vue/src/components/table/Table.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts +6 -3
- package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts.map +1 -1
- package/dist/types/vue/src/components/time/utils/relativeTime.d.ts +1 -1
- package/dist/types/vue/src/components/time/utils/relativeTime.d.ts.map +1 -1
- package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts +4 -11
- package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts.map +1 -1
- package/dist/types/vue/src/components/toast/store.d.ts +14 -62
- package/dist/types/vue/src/components/toast/store.d.ts.map +1 -1
- package/dist/types/vue/src/components/tree/composables/useTree.d.ts.map +1 -1
- package/dist/types/vue/src/components/tree/types.d.ts +1 -17
- package/dist/types/vue/src/components/tree/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/tree/utils/selection.d.ts +1 -15
- package/dist/types/vue/src/components/tree/utils/selection.d.ts.map +1 -1
- package/dist/types/vue/src/components/tree-select/types.d.ts +1 -9
- package/dist/types/vue/src/components/tree-select/types.d.ts.map +1 -1
- package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts +1 -6
- package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts.map +1 -1
- package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts +1 -1
- package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts.map +1 -1
- package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts +4 -1
- package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts.map +1 -1
- package/dist/types/vue/src/lib/caret.d.ts +1 -1
- package/dist/types/vue/src/lib/caret.d.ts.map +1 -1
- package/dist/types/vue/src/lib/collapse.d.ts +2 -8
- package/dist/types/vue/src/lib/collapse.d.ts.map +1 -1
- package/dist/types/vue/src/lib/date.d.ts +1 -27
- package/dist/types/vue/src/lib/date.d.ts.map +1 -1
- package/dist/types/vue/src/lib/field-focus.d.ts +1 -1
- package/dist/types/vue/src/lib/field-focus.d.ts.map +1 -1
- package/dist/types/vue/src/lib/overlay-anchor.d.ts +2 -7
- package/dist/types/vue/src/lib/overlay-anchor.d.ts.map +1 -1
- package/dist/types/vue/src/lib/pointer-corridor.d.ts +1 -6
- package/dist/types/vue/src/lib/pointer-corridor.d.ts.map +1 -1
- package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts +3 -11
- package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts.map +1 -1
- package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts +1 -1
- package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts.map +1 -1
- package/dist/types/vue/src/lib/virtual/navigation.d.ts +1 -2
- package/dist/types/vue/src/lib/virtual/navigation.d.ts.map +1 -1
- package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts +1 -1
- package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts.map +1 -1
- package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts +2 -15
- package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts.map +1 -1
- package/dist/types/vue/src/locale/en-US.d.ts +1 -2
- package/dist/types/vue/src/locale/en-US.d.ts.map +1 -1
- package/dist/types/vue/src/locale/index.d.ts +3 -4
- package/dist/types/vue/src/locale/index.d.ts.map +1 -1
- package/dist/types/vue/src/locale/types.d.ts +1 -234
- package/dist/types/vue/src/locale/types.d.ts.map +1 -1
- package/dist/types/vue/src/locale/zh-CN.d.ts +1 -2
- package/dist/types/vue/src/locale/zh-CN.d.ts.map +1 -1
- package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts +17 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts +17 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts +16 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts +47 -0
- package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/number-field/context.d.ts +41 -0
- package/dist/types/vue/src/primitives/number-field/context.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/number-field/index.d.ts +5 -0
- package/dist/types/vue/src/primitives/number-field/index.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/utils/timers.d.ts +6 -0
- package/dist/types/vue/src/primitives/utils/timers.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts +6 -0
- package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/utils/useVModel.d.ts +7 -0
- package/dist/types/vue/src/primitives/utils/useVModel.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts +66 -0
- package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts.map +1 -0
- package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts +28 -0
- package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts.map +1 -0
- package/package.json +3 -2
- package/src/components/accordion/AccordionTrigger.vue +9 -1
- package/src/components/anchor/composables/useAnchor.ts +3 -12
- package/src/components/anchor/composables/useAnchorFollow.ts +8 -76
- package/src/components/anchor/composables/useScrollSpy.ts +22 -38
- package/src/components/anchor/types.ts +1 -8
- package/src/components/autocomplete/autocomplete.variants.ts +1 -1
- package/src/components/autocomplete/composables/useAutocomplete.ts +1 -1
- package/src/components/autocomplete/types.ts +1 -16
- package/src/components/banner/utils/direction.ts +1 -10
- package/src/components/calendar/utils/format.ts +1 -23
- package/src/components/code-block/highlighter.ts +1 -98
- package/src/components/collapsible/CollapsibleTrigger.vue +8 -1
- package/src/components/command-palette/utils/hotkey.ts +1 -27
- package/src/components/command-palette/utils/match.ts +5 -75
- package/src/components/data-list/composables/useDataList.ts +2 -4
- package/src/components/data-list/utils/scroll.ts +1 -26
- package/src/components/data-table/column-sizing-styles.ts +1 -40
- package/src/components/data-table/column-sizing.ts +1 -101
- package/src/components/data-table/composables/useDataTable.ts +103 -123
- package/src/components/data-table/composables/useTableColumns.ts +38 -113
- package/src/components/data-table/composables/useTableDrag.ts +21 -11
- package/src/components/data-table/composables/useTableExport.ts +8 -32
- package/src/components/data-table/composables/useTableResize.ts +13 -17
- package/src/components/data-table/composables/useTableResizeHandles.ts +6 -21
- package/src/components/data-table/types.ts +15 -155
- package/src/components/data-table/utils.ts +1 -75
- package/src/components/date-range-field/utils/validity.ts +1 -21
- package/src/components/editable/editable.variants.ts +1 -1
- package/src/components/file-upload/utils/select.ts +1 -58
- package/src/components/file-upload/utils/size.ts +1 -16
- package/src/components/float-button/float-button.variants.ts +1 -1
- package/src/components/form/composables/useForm.ts +24 -135
- package/src/components/form/standard-schema.ts +1 -26
- package/src/components/form/utils/errors.ts +1 -48
- package/src/components/form/utils/focus.ts +1 -10
- package/src/components/form/utils/values.ts +1 -23
- package/src/components/form-field/FormField.vue +3 -2
- package/src/components/lightbox/types.ts +1 -14
- package/src/components/lightbox/utils/clip.ts +1 -117
- package/src/components/lightbox/utils/download.ts +1 -29
- package/src/components/lightbox/utils/gesture.ts +1 -54
- package/src/components/lightbox/utils/paging.ts +1 -33
- package/src/components/lightbox/utils/pose.ts +1 -142
- package/src/components/lightbox/utils/source.ts +1 -17
- package/src/components/lightbox/utils/zoom.ts +1 -127
- package/src/components/meter-group/utils/tones.ts +1 -14
- package/src/components/multi-select/MultiSelect.vue +1 -2
- package/src/components/number-input/NumberInput.vue +2 -2
- package/src/components/pagination/composables/usePagination.ts +2 -3
- package/src/components/pagination/types.ts +1 -19
- package/src/components/pagination/utils/ranges.ts +1 -12
- package/src/components/password-input/PasswordInput.vue +6 -0
- package/src/components/qr-code/export.ts +1 -65
- package/src/components/range-calendar/utils/limit.ts +1 -11
- package/src/components/rating/utils/fill.ts +1 -4
- package/src/components/ripple/useRipple.ts +10 -198
- package/src/components/scroll-area/ScrollArea.vue +6 -18
- package/src/components/scroll-area/composables/useEdgeShadow.ts +7 -16
- package/src/components/scroll-area/composables/useLayerLock.ts +2 -9
- package/src/components/scroll-area/composables/useWheelRedirect.ts +2 -10
- package/src/components/scroll-area/scroll-restore.ts +1 -148
- package/src/components/search-input/SearchInput.vue +6 -0
- package/src/components/select/types.ts +1 -23
- package/src/components/split-button/split-button.variants.ts +1 -1
- package/src/components/spoiler/SpoilerPainter.ts +1 -197
- package/src/components/spoiler/utils/irisOrigin.ts +1 -40
- package/src/components/spoiler/worklet.ts +1 -199
- package/src/components/table/Table.vue +9 -0
- package/src/components/tabs/TabsList.vue +9 -0
- package/src/components/time/utils/relativeTime.ts +1 -20
- package/src/components/toast/composables/useToastLayout.ts +12 -24
- package/src/components/toast/store.ts +16 -228
- package/src/components/tree/composables/useTree.ts +17 -33
- package/src/components/tree/types.ts +1 -20
- package/src/components/tree/utils/selection.ts +1 -78
- package/src/components/tree-select/types.ts +1 -34
- package/src/components/tree-select/utils/filterTree.ts +1 -19
- package/src/components/virtual-list/composables/useVirtualList.ts +16 -42
- package/src/components/visually-hidden/VisuallyHidden.vue +21 -3
- package/src/lib/caret.ts +1 -48
- package/src/lib/collapse.ts +6 -29
- package/src/lib/date.ts +1 -111
- package/src/lib/field-focus.ts +1 -36
- package/src/lib/overlay-anchor.ts +11 -37
- package/src/lib/pointer-corridor.ts +1 -26
- package/src/lib/reka/useVirtualChoices.ts +55 -133
- package/src/lib/reka/useVirtualTree.ts +22 -65
- package/src/lib/virtual/navigation.ts +1 -26
- package/src/lib/virtual/useVirtualCollection.ts +28 -47
- package/src/lib/virtual/useVirtualWindow.ts +15 -25
- package/src/locale/en-US.ts +1 -220
- package/src/locale/index.ts +9 -53
- package/src/locale/types.ts +1 -225
- package/src/locale/zh-CN.ts +1 -215
- package/src/primitives/number-field/LICENSE +21 -0
- package/src/primitives/number-field/NumberFieldDecrement.vue +21 -0
- package/src/primitives/number-field/NumberFieldIncrement.vue +21 -0
- package/src/primitives/number-field/NumberFieldInput.vue +114 -0
- package/src/primitives/number-field/NumberFieldRoot.vue +169 -0
- package/src/primitives/number-field/context.ts +111 -0
- package/src/primitives/number-field/index.ts +14 -0
- package/src/primitives/utils/LICENSE +44 -0
- package/src/primitives/utils/timers.ts +6 -0
- package/src/primitives/utils/usePrimitiveElement.ts +12 -0
- package/src/primitives/utils/useVModel.ts +37 -0
- package/src/primitives/visually-hidden/LICENSE +21 -0
- package/src/primitives/visually-hidden/VisuallyHiddenInput.ts +97 -0
- package/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue +49 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from 'reka-ui'
|
|
3
|
+
|
|
4
|
+
export interface NumberFieldRootProps extends PrimitiveProps {
|
|
5
|
+
defaultValue?: number
|
|
6
|
+
modelValue?: number | null
|
|
7
|
+
min?: number
|
|
8
|
+
max?: number
|
|
9
|
+
step?: number
|
|
10
|
+
stepSnapping?: boolean
|
|
11
|
+
focusOnChange?: boolean
|
|
12
|
+
formatOptions?: Intl.NumberFormatOptions
|
|
13
|
+
locale?: string
|
|
14
|
+
disabled?: boolean
|
|
15
|
+
readonly?: boolean
|
|
16
|
+
disableWheelChange?: boolean
|
|
17
|
+
invertWheelChange?: boolean
|
|
18
|
+
id?: string
|
|
19
|
+
name?: string
|
|
20
|
+
required?: boolean
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type NumberFieldRootEmits = {
|
|
24
|
+
'update:modelValue': [val: number]
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<script setup lang="ts">
|
|
29
|
+
import {
|
|
30
|
+
computed,
|
|
31
|
+
createCommentVNode,
|
|
32
|
+
h,
|
|
33
|
+
ref,
|
|
34
|
+
toRefs,
|
|
35
|
+
type FunctionalComponent,
|
|
36
|
+
type Ref,
|
|
37
|
+
} from 'vue'
|
|
38
|
+
import { injectConfigProviderContext, Primitive } from 'reka-ui'
|
|
39
|
+
import {
|
|
40
|
+
boundNumberFieldValue,
|
|
41
|
+
commitNumberFieldText,
|
|
42
|
+
createNumberFieldFormat,
|
|
43
|
+
formatNumberFieldValue,
|
|
44
|
+
isNumberFieldAtLimit,
|
|
45
|
+
numberFieldInputMode,
|
|
46
|
+
numberFieldRootAttributes,
|
|
47
|
+
resolveNumberFieldLocale,
|
|
48
|
+
stepNumberFieldText,
|
|
49
|
+
type NumberFieldBound,
|
|
50
|
+
type NumberFieldRange,
|
|
51
|
+
type NumberFieldStep,
|
|
52
|
+
} from '../../../../shared/src/primitives/number-field'
|
|
53
|
+
import { usePrimitiveElement } from '../utils/usePrimitiveElement'
|
|
54
|
+
import { useVModel } from '../utils/useVModel'
|
|
55
|
+
import VisuallyHiddenInput from '../visually-hidden/VisuallyHiddenInput'
|
|
56
|
+
import { provideNumberFieldRootContext } from './context'
|
|
57
|
+
|
|
58
|
+
defineOptions({ inheritAttrs: false })
|
|
59
|
+
|
|
60
|
+
const props = withDefaults(defineProps<NumberFieldRootProps>(), {
|
|
61
|
+
as: 'div',
|
|
62
|
+
defaultValue: undefined,
|
|
63
|
+
step: 1,
|
|
64
|
+
stepSnapping: true,
|
|
65
|
+
focusOnChange: true,
|
|
66
|
+
})
|
|
67
|
+
const emits = defineEmits<NumberFieldRootEmits>()
|
|
68
|
+
const { disabled, readonly, disableWheelChange, invertWheelChange, id } = toRefs(props)
|
|
69
|
+
|
|
70
|
+
const modelValue = useVModel(props, 'modelValue', emits, {
|
|
71
|
+
defaultValue: props.defaultValue,
|
|
72
|
+
passive: props.modelValue === undefined,
|
|
73
|
+
}) as Ref<number | undefined>
|
|
74
|
+
|
|
75
|
+
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
76
|
+
const config = injectConfigProviderContext(null)
|
|
77
|
+
const locale = computed(() => resolveNumberFieldLocale(props.locale, config?.locale?.value))
|
|
78
|
+
const isFormControl = computed(() =>
|
|
79
|
+
currentElement.value ? Boolean(currentElement.value.closest('form')) : true,
|
|
80
|
+
)
|
|
81
|
+
const inputEl = ref<HTMLInputElement>()
|
|
82
|
+
|
|
83
|
+
const format = computed(() => createNumberFieldFormat(locale.value, props.formatOptions))
|
|
84
|
+
const range = computed<NumberFieldRange>(() => ({
|
|
85
|
+
min: props.min,
|
|
86
|
+
max: props.max,
|
|
87
|
+
step: props.step,
|
|
88
|
+
stepSnapping: props.stepSnapping,
|
|
89
|
+
}))
|
|
90
|
+
const isDecreaseDisabled = computed(() =>
|
|
91
|
+
isNumberFieldAtLimit('decrease', modelValue.value, range.value, format.value),
|
|
92
|
+
)
|
|
93
|
+
const isIncreaseDisabled = computed(() =>
|
|
94
|
+
isNumberFieldAtLimit('increase', modelValue.value, range.value, format.value),
|
|
95
|
+
)
|
|
96
|
+
const inputMode = computed(() => numberFieldInputMode(format.value))
|
|
97
|
+
const textValue = computed(() => formatNumberFieldValue(modelValue.value, format.value))
|
|
98
|
+
const attributes = computed(() =>
|
|
99
|
+
numberFieldRootAttributes({ disabled: props.disabled, readonly: props.readonly }),
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
function step(direction: NumberFieldStep, multiplier = 1) {
|
|
103
|
+
if (props.focusOnChange) inputEl.value?.focus()
|
|
104
|
+
if (props.disabled || props.readonly) return
|
|
105
|
+
modelValue.value = stepNumberFieldText(
|
|
106
|
+
direction,
|
|
107
|
+
inputEl.value?.value ?? '',
|
|
108
|
+
range.value,
|
|
109
|
+
format.value,
|
|
110
|
+
multiplier,
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function jump(bound: NumberFieldBound) {
|
|
115
|
+
const next = boundNumberFieldValue(bound, range.value, format.value)
|
|
116
|
+
if (next !== undefined) modelValue.value = next
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function commit(text: string) {
|
|
120
|
+
const { value, reformat } = commitNumberFieldText(text, range.value, format.value)
|
|
121
|
+
modelValue.value = value
|
|
122
|
+
if (inputEl.value) inputEl.value.value = reformat ? textValue.value : text
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const FormInput: FunctionalComponent = () =>
|
|
126
|
+
isFormControl.value && props.name
|
|
127
|
+
? h(VisuallyHiddenInput, {
|
|
128
|
+
type: 'text',
|
|
129
|
+
value: modelValue.value,
|
|
130
|
+
name: props.name,
|
|
131
|
+
disabled: props.disabled,
|
|
132
|
+
readonly: props.readonly,
|
|
133
|
+
required: props.required,
|
|
134
|
+
})
|
|
135
|
+
: createCommentVNode('v-if', true)
|
|
136
|
+
|
|
137
|
+
provideNumberFieldRootContext({
|
|
138
|
+
modelValue,
|
|
139
|
+
step,
|
|
140
|
+
jump,
|
|
141
|
+
commit,
|
|
142
|
+
inputEl,
|
|
143
|
+
onInputElement: element => (inputEl.value = element),
|
|
144
|
+
inputMode,
|
|
145
|
+
textValue,
|
|
146
|
+
range,
|
|
147
|
+
format,
|
|
148
|
+
disabled,
|
|
149
|
+
readonly,
|
|
150
|
+
disableWheelChange,
|
|
151
|
+
invertWheelChange,
|
|
152
|
+
isDecreaseDisabled,
|
|
153
|
+
isIncreaseDisabled,
|
|
154
|
+
id,
|
|
155
|
+
})
|
|
156
|
+
</script>
|
|
157
|
+
|
|
158
|
+
<template>
|
|
159
|
+
<Primitive
|
|
160
|
+
v-bind="{ ...$attrs, ...attributes }"
|
|
161
|
+
ref="primitiveElement"
|
|
162
|
+
:as="as"
|
|
163
|
+
:as-child="asChild"
|
|
164
|
+
>
|
|
165
|
+
<slot :model-value="modelValue" :text-value="textValue" :readonly="readonly" />
|
|
166
|
+
|
|
167
|
+
<FormInput />
|
|
168
|
+
</Primitive>
|
|
169
|
+
</template>
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
inject,
|
|
4
|
+
onScopeDispose,
|
|
5
|
+
provide,
|
|
6
|
+
ref,
|
|
7
|
+
watch,
|
|
8
|
+
type InjectionKey,
|
|
9
|
+
type Ref,
|
|
10
|
+
} from 'vue'
|
|
11
|
+
import {
|
|
12
|
+
createNumberFieldPressHold,
|
|
13
|
+
isNumberFieldStepDisabled,
|
|
14
|
+
numberFieldStepAttributes,
|
|
15
|
+
type NumberFieldBound,
|
|
16
|
+
type NumberFieldFormat,
|
|
17
|
+
type NumberFieldInputMode,
|
|
18
|
+
type NumberFieldRange,
|
|
19
|
+
type NumberFieldStep,
|
|
20
|
+
} from '../../../../shared/src/primitives/number-field'
|
|
21
|
+
import { usePrimitiveElement } from '../utils/usePrimitiveElement'
|
|
22
|
+
import { isClient, windowTimers } from '../utils/timers'
|
|
23
|
+
|
|
24
|
+
export interface NumberFieldRootContext {
|
|
25
|
+
modelValue: Ref<number | null | undefined>
|
|
26
|
+
step: (direction: NumberFieldStep, multiplier?: number) => void
|
|
27
|
+
jump: (bound: NumberFieldBound) => void
|
|
28
|
+
commit: (text: string) => void
|
|
29
|
+
inputEl: Ref<HTMLInputElement | undefined>
|
|
30
|
+
onInputElement: (element: HTMLInputElement) => void
|
|
31
|
+
inputMode: Ref<NumberFieldInputMode>
|
|
32
|
+
textValue: Ref<string>
|
|
33
|
+
range: Ref<NumberFieldRange>
|
|
34
|
+
format: Ref<NumberFieldFormat>
|
|
35
|
+
disabled: Ref<boolean>
|
|
36
|
+
readonly: Ref<boolean>
|
|
37
|
+
disableWheelChange: Ref<boolean>
|
|
38
|
+
invertWheelChange: Ref<boolean>
|
|
39
|
+
isDecreaseDisabled: Ref<boolean>
|
|
40
|
+
isIncreaseDisabled: Ref<boolean>
|
|
41
|
+
id: Ref<string | undefined>
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const NUMBER_FIELD_ROOT = Symbol('NumberFieldRootContext') as InjectionKey<NumberFieldRootContext>
|
|
45
|
+
|
|
46
|
+
export function provideNumberFieldRootContext(context: NumberFieldRootContext) {
|
|
47
|
+
provide(NUMBER_FIELD_ROOT, context)
|
|
48
|
+
return context
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function injectNumberFieldRootContext() {
|
|
52
|
+
const context = inject(NUMBER_FIELD_ROOT, null)
|
|
53
|
+
if (!context)
|
|
54
|
+
throw new Error(
|
|
55
|
+
'Injection `Symbol(NumberFieldRootContext)` not found. Component must be used within `NumberFieldRoot`',
|
|
56
|
+
)
|
|
57
|
+
return context
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function useNumberFieldStep(
|
|
61
|
+
direction: NumberFieldStep,
|
|
62
|
+
props: { as?: unknown; disabled?: boolean },
|
|
63
|
+
) {
|
|
64
|
+
const root = injectNumberFieldRootContext()
|
|
65
|
+
const isDisabled = computed(() =>
|
|
66
|
+
isNumberFieldStepDisabled({
|
|
67
|
+
disabled: root.disabled.value,
|
|
68
|
+
readonly: root.readonly.value,
|
|
69
|
+
own: !!props.disabled,
|
|
70
|
+
atLimit:
|
|
71
|
+
direction === 'increase' ? root.isIncreaseDisabled.value : root.isDecreaseDisabled.value,
|
|
72
|
+
}),
|
|
73
|
+
)
|
|
74
|
+
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
75
|
+
const isPressed = ref(false)
|
|
76
|
+
const hold = createNumberFieldPressHold({
|
|
77
|
+
timers: windowTimers,
|
|
78
|
+
disabled: () => isDisabled.value,
|
|
79
|
+
trigger: () => root.step(direction),
|
|
80
|
+
pressed: pressed => (isPressed.value = pressed),
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
if (isClient) {
|
|
84
|
+
watch(
|
|
85
|
+
currentElement,
|
|
86
|
+
(element, _, onCleanup) => {
|
|
87
|
+
if (!element) return
|
|
88
|
+
element.addEventListener('pointerdown', hold.press)
|
|
89
|
+
onCleanup(() => element.removeEventListener('pointerdown', hold.press))
|
|
90
|
+
},
|
|
91
|
+
{ immediate: true, flush: 'post' },
|
|
92
|
+
)
|
|
93
|
+
window.addEventListener('pointerup', hold.release)
|
|
94
|
+
window.addEventListener('pointercancel', hold.release)
|
|
95
|
+
onScopeDispose(() => {
|
|
96
|
+
window.removeEventListener('pointerup', hold.release)
|
|
97
|
+
window.removeEventListener('pointercancel', hold.release)
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const attributes = computed(() =>
|
|
102
|
+
numberFieldStepAttributes({
|
|
103
|
+
direction,
|
|
104
|
+
button: props.as === 'button',
|
|
105
|
+
disabled: isDisabled.value,
|
|
106
|
+
pressed: isPressed.value,
|
|
107
|
+
}),
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return { primitiveElement, attributes }
|
|
111
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export {
|
|
2
|
+
default as NumberFieldRoot,
|
|
3
|
+
type NumberFieldRootEmits,
|
|
4
|
+
type NumberFieldRootProps,
|
|
5
|
+
} from './NumberFieldRoot.vue'
|
|
6
|
+
export { default as NumberFieldInput, type NumberFieldInputProps } from './NumberFieldInput.vue'
|
|
7
|
+
export {
|
|
8
|
+
default as NumberFieldIncrement,
|
|
9
|
+
type NumberFieldIncrementProps,
|
|
10
|
+
} from './NumberFieldIncrement.vue'
|
|
11
|
+
export {
|
|
12
|
+
default as NumberFieldDecrement,
|
|
13
|
+
type NumberFieldDecrementProps,
|
|
14
|
+
} from './NumberFieldDecrement.vue'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 UnoVue <https://github.com/unovue>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
Portions adapted from VueUse:
|
|
24
|
+
MIT License
|
|
25
|
+
|
|
26
|
+
Copyright (c) 2019-PRESENT Anthony Fu<https://github.com/antfu>
|
|
27
|
+
|
|
28
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
29
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
30
|
+
in the Software without restriction, including without limitation the rights
|
|
31
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
32
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
33
|
+
furnished to do so, subject to the following conditions:
|
|
34
|
+
|
|
35
|
+
The above copyright notice and this permission notice shall be included in all
|
|
36
|
+
copies or substantial portions of the Software.
|
|
37
|
+
|
|
38
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
39
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
40
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
41
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
42
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
43
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
44
|
+
SOFTWARE.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const windowTimers = {
|
|
2
|
+
setTimeout: (callback: () => void, delay: number) => window.setTimeout(callback, delay),
|
|
3
|
+
clearTimeout: (handle: unknown) => window.clearTimeout(handle as number | undefined),
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const isClient = typeof window !== 'undefined' && typeof document !== 'undefined'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { computed, ref, type ComponentPublicInstance } from 'vue'
|
|
2
|
+
|
|
3
|
+
export function usePrimitiveElement<T extends ComponentPublicInstance>() {
|
|
4
|
+
const primitiveElement = ref<T>()
|
|
5
|
+
const currentElement = computed<HTMLElement | undefined>(() => {
|
|
6
|
+
const element = primitiveElement.value?.$el as Element | undefined
|
|
7
|
+
if (element && ['#text', '#comment'].includes(element.nodeName))
|
|
8
|
+
return element.nextElementSibling as HTMLElement | undefined
|
|
9
|
+
return (element ?? primitiveElement.value) as HTMLElement | undefined
|
|
10
|
+
})
|
|
11
|
+
return { primitiveElement, currentElement }
|
|
12
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { computed, nextTick, ref, watch, type Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface VModelOptions<V> {
|
|
4
|
+
defaultValue?: V
|
|
5
|
+
passive?: boolean
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function useVModel<P extends object, K extends keyof P & string, V = P[K]>(
|
|
9
|
+
props: P,
|
|
10
|
+
key: K,
|
|
11
|
+
emit: (event: `update:${K}`, value: V) => void,
|
|
12
|
+
options: VModelOptions<V> = {},
|
|
13
|
+
): Ref<V> {
|
|
14
|
+
const event = `update:${key}` as const
|
|
15
|
+
const current = () =>
|
|
16
|
+
(props[key] !== undefined ? (props[key] as unknown as V) : options.defaultValue) as V
|
|
17
|
+
if (!options.passive)
|
|
18
|
+
return computed({
|
|
19
|
+
get: current,
|
|
20
|
+
set: value => emit(event, value),
|
|
21
|
+
})
|
|
22
|
+
const proxy = ref(current()) as Ref<V>
|
|
23
|
+
let updating = false
|
|
24
|
+
watch(
|
|
25
|
+
() => props[key],
|
|
26
|
+
value => {
|
|
27
|
+
if (updating) return
|
|
28
|
+
updating = true
|
|
29
|
+
proxy.value = value as unknown as V
|
|
30
|
+
void nextTick(() => (updating = false))
|
|
31
|
+
},
|
|
32
|
+
)
|
|
33
|
+
watch(proxy, value => {
|
|
34
|
+
if (!updating && value !== (props[key] as unknown)) emit(event, value)
|
|
35
|
+
})
|
|
36
|
+
return proxy
|
|
37
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 UnoVue <https://github.com/unovue>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
createCommentVNode,
|
|
4
|
+
defineComponent,
|
|
5
|
+
Fragment,
|
|
6
|
+
h,
|
|
7
|
+
mergeProps,
|
|
8
|
+
type PropType,
|
|
9
|
+
} from 'vue'
|
|
10
|
+
import type { VisuallyHiddenProps } from 'reka-ui'
|
|
11
|
+
import VisuallyHiddenInputBubble from './VisuallyHiddenInputBubble.vue'
|
|
12
|
+
|
|
13
|
+
const REQUIRED_NOTE = " We render single input if it's required "
|
|
14
|
+
|
|
15
|
+
type BubbleProps = { name: string; value: unknown }
|
|
16
|
+
|
|
17
|
+
export default defineComponent({
|
|
18
|
+
name: 'VisuallyHiddenInput',
|
|
19
|
+
inheritAttrs: false,
|
|
20
|
+
props: {
|
|
21
|
+
name: { type: String, required: true },
|
|
22
|
+
value: { type: null as unknown as PropType<unknown>, required: true },
|
|
23
|
+
checked: { type: Boolean, required: false, default: undefined },
|
|
24
|
+
required: { type: Boolean, required: false },
|
|
25
|
+
disabled: { type: Boolean, required: false },
|
|
26
|
+
feature: {
|
|
27
|
+
type: String as PropType<VisuallyHiddenProps['feature']>,
|
|
28
|
+
required: false,
|
|
29
|
+
default: 'fully-hidden',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
setup(props, { attrs }) {
|
|
33
|
+
const isFormArrayEmptyAndRequired = computed(
|
|
34
|
+
() => Array.isArray(props.value) && props.value.length === 0 && props.required,
|
|
35
|
+
)
|
|
36
|
+
const parsedValue = computed(() => {
|
|
37
|
+
const value = props.value
|
|
38
|
+
if (
|
|
39
|
+
typeof value === 'string' ||
|
|
40
|
+
typeof value === 'number' ||
|
|
41
|
+
typeof value === 'boolean' ||
|
|
42
|
+
value === null ||
|
|
43
|
+
value === undefined
|
|
44
|
+
)
|
|
45
|
+
return [{ name: props.name, value }]
|
|
46
|
+
if (Array.isArray(value))
|
|
47
|
+
return value.flatMap((item: unknown, index) =>
|
|
48
|
+
typeof item === 'object'
|
|
49
|
+
? Object.entries(item as object).map(([key, entry]) => ({
|
|
50
|
+
name: `${props.name}[${index}][${key}]`,
|
|
51
|
+
value: entry as unknown,
|
|
52
|
+
}))
|
|
53
|
+
: { name: `${props.name}[${index}]`, value: item },
|
|
54
|
+
)
|
|
55
|
+
if (typeof value === 'object')
|
|
56
|
+
return Object.entries(value as object).map(([key, entry]) => ({
|
|
57
|
+
name: `${props.name}[${key}]`,
|
|
58
|
+
value: entry as unknown,
|
|
59
|
+
}))
|
|
60
|
+
return []
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
return () =>
|
|
64
|
+
h(Fragment, null, [
|
|
65
|
+
createCommentVNode(REQUIRED_NOTE),
|
|
66
|
+
isFormArrayEmptyAndRequired.value
|
|
67
|
+
? h(
|
|
68
|
+
VisuallyHiddenInputBubble,
|
|
69
|
+
mergeProps(
|
|
70
|
+
{ key: props.name },
|
|
71
|
+
{ ...props, ...attrs },
|
|
72
|
+
{
|
|
73
|
+
name: props.name,
|
|
74
|
+
value: props.value,
|
|
75
|
+
},
|
|
76
|
+
) as BubbleProps,
|
|
77
|
+
)
|
|
78
|
+
: h(
|
|
79
|
+
Fragment,
|
|
80
|
+
{ key: 1 },
|
|
81
|
+
parsedValue.value.map(parsed =>
|
|
82
|
+
h(
|
|
83
|
+
VisuallyHiddenInputBubble,
|
|
84
|
+
mergeProps(
|
|
85
|
+
{ key: parsed.name },
|
|
86
|
+
{ ...props, ...attrs },
|
|
87
|
+
{
|
|
88
|
+
name: parsed.name,
|
|
89
|
+
value: parsed.value,
|
|
90
|
+
},
|
|
91
|
+
) as BubbleProps,
|
|
92
|
+
),
|
|
93
|
+
),
|
|
94
|
+
),
|
|
95
|
+
])
|
|
96
|
+
},
|
|
97
|
+
})
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { VisuallyHiddenProps } from 'reka-ui'
|
|
3
|
+
|
|
4
|
+
export interface VisuallyHiddenInputBubbleProps<T> {
|
|
5
|
+
name: string
|
|
6
|
+
value: T
|
|
7
|
+
checked?: boolean
|
|
8
|
+
required?: boolean
|
|
9
|
+
disabled?: boolean
|
|
10
|
+
feature?: VisuallyHiddenProps['feature']
|
|
11
|
+
}
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<script setup lang="ts" generic="T">
|
|
15
|
+
import { computed, watch } from 'vue'
|
|
16
|
+
import { VisuallyHidden } from 'reka-ui'
|
|
17
|
+
import { usePrimitiveElement } from '../utils/usePrimitiveElement'
|
|
18
|
+
|
|
19
|
+
defineOptions({ inheritAttrs: false })
|
|
20
|
+
|
|
21
|
+
const props = withDefaults(defineProps<VisuallyHiddenInputBubbleProps<T>>(), {
|
|
22
|
+
feature: 'fully-hidden',
|
|
23
|
+
checked: undefined,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const { primitiveElement, currentElement } = usePrimitiveElement()
|
|
27
|
+
const valueState = computed(() => props.checked ?? props.value)
|
|
28
|
+
|
|
29
|
+
watch(valueState, (cur, prev) => {
|
|
30
|
+
if (!currentElement.value) return
|
|
31
|
+
const input = currentElement.value as HTMLInputElement
|
|
32
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
33
|
+
window.HTMLInputElement.prototype,
|
|
34
|
+
'value',
|
|
35
|
+
) as PropertyDescriptor
|
|
36
|
+
const setValue = descriptor.set
|
|
37
|
+
if (setValue && cur !== prev) {
|
|
38
|
+
const inputEvent = new Event('input', { bubbles: true })
|
|
39
|
+
const changeEvent = new Event('change', { bubbles: true })
|
|
40
|
+
setValue.call(input, cur)
|
|
41
|
+
input.dispatchEvent(inputEvent)
|
|
42
|
+
input.dispatchEvent(changeEvent)
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
</script>
|
|
46
|
+
|
|
47
|
+
<template>
|
|
48
|
+
<VisuallyHidden ref="primitiveElement" v-bind="{ ...props, ...$attrs }" as="input" />
|
|
49
|
+
</template>
|