@gunkin/uiify 0.0.17-alpha → 0.0.20-alpha
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/agents/components.md +1 -1
- package/agents/index.md +1 -0
- package/agents/reference/components/breadcrumb.md +11 -1
- package/agents/reference/components/button.md +4 -4
- package/agents/reference/components/candle-chart.md +20 -1
- package/agents/reference/components/carousel.md +3 -2
- package/agents/reference/components/combobox.md +2 -1
- package/agents/reference/components/drawer.md +8 -1
- package/agents/reference/components/dropdown-menu.md +1 -1
- package/agents/reference/components/file-upload.md +12 -1
- package/agents/reference/components/line-chart.md +1 -0
- package/agents/reference/components/modal.md +8 -1
- package/agents/reference/components/number-field.md +14 -3
- package/agents/reference/components/pagination.md +22 -1
- package/agents/reference/components/slider.md +9 -1
- package/agents/reference/components/spinner.md +8 -1
- package/agents/reference/components/toast.md +14 -1
- package/dist/components/behavior.css +9 -9
- package/dist/components/behavior.css.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.js +21 -4
- package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/index.d.ts +1 -1
- package/dist/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js.map +1 -1
- package/dist/components/breadcrumb/types.d.ts +7 -0
- package/dist/components/breadcrumb/types.d.ts.map +1 -1
- package/dist/components/button/types.d.ts +4 -0
- package/dist/components/button/types.d.ts.map +1 -1
- package/dist/components/candle-chart/CandleChart.d.ts +1 -1
- package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
- package/dist/components/candle-chart/CandleChart.js +81 -46
- package/dist/components/candle-chart/CandleChart.js.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.js +5 -0
- package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
- package/dist/components/candle-chart/index.d.ts +1 -1
- package/dist/components/candle-chart/index.d.ts.map +1 -1
- package/dist/components/candle-chart/index.js.map +1 -1
- package/dist/components/candle-chart/types.d.ts +17 -0
- package/dist/components/candle-chart/types.d.ts.map +1 -1
- package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
- package/dist/components/carousel/CarouselMarkup.js +20 -3
- package/dist/components/carousel/CarouselMarkup.js.map +1 -1
- package/dist/components/carousel/carousel-markup.js +2 -2
- package/dist/components/carousel/carousel-markup.js.map +1 -1
- package/dist/components/carousel/types.d.ts +3 -2
- package/dist/components/carousel/types.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +37 -23
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/combobox-store.d.ts.map +1 -1
- package/dist/components/combobox/combobox-store.js +5 -2
- package/dist/components/combobox/combobox-store.js.map +1 -1
- package/dist/components/combobox/types.d.ts +2 -3
- package/dist/components/combobox/types.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.js +25 -5
- package/dist/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/components/drawer/DrawerNative.d.ts +1 -1
- package/dist/components/drawer/DrawerNative.d.ts.map +1 -1
- package/dist/components/drawer/DrawerNative.js +5 -2
- package/dist/components/drawer/DrawerNative.js.map +1 -1
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/drawer/index.d.ts.map +1 -1
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/types.d.ts +4 -0
- package/dist/components/drawer/types.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenu.js +31 -15
- package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuBar.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuBar.js +7 -5
- package/dist/components/dropdown-menu/DropdownMenuBar.js.map +1 -1
- package/dist/components/dropdown-menu/types.d.ts +1 -1
- package/dist/components/dropdown-menu/types.d.ts.map +1 -1
- package/dist/components/file-upload/FileUpload.d.ts.map +1 -1
- package/dist/components/file-upload/FileUpload.js +11 -4
- package/dist/components/file-upload/FileUpload.js.map +1 -1
- package/dist/components/file-upload/FileUploadRoot.d.ts +1 -1
- package/dist/components/file-upload/FileUploadRoot.d.ts.map +1 -1
- package/dist/components/file-upload/FileUploadRoot.js +9 -0
- package/dist/components/file-upload/FileUploadRoot.js.map +1 -1
- package/dist/components/file-upload/index.d.ts +1 -1
- package/dist/components/file-upload/index.d.ts.map +1 -1
- package/dist/components/file-upload/index.js.map +1 -1
- package/dist/components/file-upload/types.d.ts +8 -0
- package/dist/components/file-upload/types.d.ts.map +1 -1
- package/dist/components/line-chart/LineChart.d.ts.map +1 -1
- package/dist/components/line-chart/LineChart.js +3 -2
- package/dist/components/line-chart/LineChart.js.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.d.ts +2 -2
- package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.js +6 -6
- package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
- package/dist/components/line-chart/types.d.ts +2 -0
- package/dist/components/line-chart/types.d.ts.map +1 -1
- package/dist/components/modal/Modal.d.ts +1 -1
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +5 -2
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/modal/index.d.ts +1 -1
- package/dist/components/modal/index.d.ts.map +1 -1
- package/dist/components/modal/index.js.map +1 -1
- package/dist/components/modal/types.d.ts +4 -0
- package/dist/components/modal/types.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.d.ts +1 -1
- package/dist/components/number-field/NumberField.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.js +25 -5
- package/dist/components/number-field/NumberField.js.map +1 -1
- package/dist/components/number-field/format.d.ts +1 -1
- package/dist/components/number-field/format.d.ts.map +1 -1
- package/dist/components/number-field/format.js +32 -7
- package/dist/components/number-field/format.js.map +1 -1
- package/dist/components/number-field/index.d.ts +1 -1
- package/dist/components/number-field/index.d.ts.map +1 -1
- package/dist/components/number-field/index.js.map +1 -1
- package/dist/components/number-field/types.d.ts +11 -2
- package/dist/components/number-field/types.d.ts.map +1 -1
- package/dist/components/otp-input/OtpInput.d.ts.map +1 -1
- package/dist/components/otp-input/OtpInput.js +2 -0
- package/dist/components/otp-input/OtpInput.js.map +1 -1
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +93 -29
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/PaginationShell.d.ts +2 -1
- package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
- package/dist/components/pagination/PaginationShell.js +44 -9
- package/dist/components/pagination/PaginationShell.js.map +1 -1
- package/dist/components/pagination/index.d.ts +1 -1
- package/dist/components/pagination/index.d.ts.map +1 -1
- package/dist/components/pagination/index.js.map +1 -1
- package/dist/components/pagination/types.d.ts +18 -0
- package/dist/components/pagination/types.d.ts.map +1 -1
- package/dist/components/slider/client/SliderClient.d.ts.map +1 -1
- package/dist/components/slider/client/SliderClient.js +11 -2
- package/dist/components/slider/client/SliderClient.js.map +1 -1
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/slider/index.d.ts.map +1 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/types.d.ts +5 -0
- package/dist/components/slider/types.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.js +6 -3
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/spinner/index.d.ts +1 -1
- package/dist/components/spinner/index.d.ts.map +1 -1
- package/dist/components/spinner/index.js.map +1 -1
- package/dist/components/spinner/types.d.ts +4 -0
- package/dist/components/spinner/types.d.ts.map +1 -1
- package/dist/components/tags-input/TagsInput.d.ts.map +1 -1
- package/dist/components/tags-input/TagsInput.js +2 -0
- package/dist/components/tags-input/TagsInput.js.map +1 -1
- package/dist/components/toast/Toast.d.ts +1 -1
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js +33 -29
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/toast/ToastElements.d.ts.map +1 -1
- package/dist/components/toast/ToastElements.js +24 -12
- package/dist/components/toast/ToastElements.js.map +1 -1
- package/dist/components/toast/index.d.ts +1 -1
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/types.d.ts +10 -0
- package/dist/components/toast/types.d.ts.map +1 -1
- package/dist/components/toolbar/Toolbar.d.ts +2 -2
- package/dist/components/toolbar/Toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/Toolbar.js +8 -4
- package/dist/components/toolbar/Toolbar.js.map +1 -1
- package/dist/core/direction.d.ts +2 -0
- package/dist/core/direction.d.ts.map +1 -1
- package/dist/core/direction.js +8 -3
- package/dist/core/direction.js.map +1 -1
- package/dist/core/dismissable-layer-registry.d.ts.map +1 -1
- package/dist/core/dismissable-layer-registry.js +3 -1
- package/dist/core/dismissable-layer-registry.js.map +1 -1
- package/dist/core/format-label.d.ts +2 -0
- package/dist/core/format-label.d.ts.map +1 -0
- package/dist/core/format-label.js +13 -0
- package/dist/core/format-label.js.map +1 -0
- package/dist/core/ime.d.ts +16 -0
- package/dist/core/ime.d.ts.map +1 -0
- package/dist/core/ime.js +7 -0
- package/dist/core/ime.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/roving-focus-store.d.ts +3 -2
- package/dist/core/roving-focus-store.d.ts.map +1 -1
- package/dist/core/roving-focus-store.js +5 -3
- package/dist/core/roving-focus-store.js.map +1 -1
- package/dist/core/roving-focus.d.ts.map +1 -1
- package/dist/core/roving-focus.js +10 -5
- package/dist/core/roving-focus.js.map +1 -1
- package/dist/core/text-direction.d.ts +7 -0
- package/dist/core/text-direction.d.ts.map +1 -0
- package/dist/core/text-direction.js +7 -0
- package/dist/core/text-direction.js.map +1 -0
- package/dist/styles/index.css +1 -1
- package/package.json +2 -1
- package/skills/uiify/SKILL.md +58 -33
- package/skills/uiify/references/compositions/card-rhythm.md +0 -2
- package/skills/uiify/references/compositions/destructive-confirmation.md +1 -3
- package/skills/uiify/references/compositions/form-grouping.md +0 -2
- package/skills/uiify/references/compositions/hero-actions.md +3 -5
- package/skills/uiify/references/compositions/page-frame.md +0 -2
- package/skills/uiify/references/compositions/pricing-actions.md +0 -2
- package/skills/uiify/references/compositions/save-feedback.md +1 -3
- package/skills/uiify/references/compositions/table-controls.md +1 -3
- package/skills/uiify/references/elements/accordion.md +38 -0
- package/skills/uiify/references/elements/alert-modal.md +32 -5
- package/skills/uiify/references/elements/avatar.md +31 -2
- package/skills/uiify/references/elements/badge.md +32 -3
- package/skills/uiify/references/elements/bar-chart.md +39 -7
- package/skills/uiify/references/elements/breadcrumb.md +38 -0
- package/skills/uiify/references/elements/button.md +38 -3
- package/skills/uiify/references/elements/candle-chart.md +40 -0
- package/skills/uiify/references/elements/card.md +38 -1
- package/skills/uiify/references/elements/carousel.md +40 -0
- package/skills/uiify/references/elements/checkbox.md +39 -0
- package/skills/uiify/references/elements/code-block.md +31 -2
- package/skills/uiify/references/elements/collapsible.md +38 -0
- package/skills/uiify/references/elements/color-picker.md +39 -0
- package/skills/uiify/references/elements/combobox.md +37 -0
- package/skills/uiify/references/elements/command-palette.md +33 -12
- package/skills/uiify/references/elements/context-menu.md +38 -0
- package/skills/uiify/references/elements/cookie-banner.md +30 -2
- package/skills/uiify/references/elements/date-picker.md +33 -9
- package/skills/uiify/references/elements/divider.md +30 -2
- package/skills/uiify/references/elements/drawer.md +38 -0
- package/skills/uiify/references/elements/dropdown-menu.md +38 -0
- package/skills/uiify/references/elements/empty-state.md +30 -2
- package/skills/uiify/references/elements/feature-grid.md +41 -1
- package/skills/uiify/references/elements/field.md +33 -3
- package/skills/uiify/references/elements/file-upload.md +40 -0
- package/skills/uiify/references/elements/footer.md +35 -4
- package/skills/uiify/references/elements/form.md +31 -4
- package/skills/uiify/references/elements/header.md +31 -3
- package/skills/uiify/references/elements/hero.md +43 -3
- package/skills/uiify/references/elements/hover-card.md +38 -0
- package/skills/uiify/references/elements/image-gallery.md +36 -4
- package/skills/uiify/references/elements/inline-alert.md +30 -2
- package/skills/uiify/references/elements/input.md +31 -4
- package/skills/uiify/references/elements/line-chart.md +38 -0
- package/skills/uiify/references/elements/logo-wall.md +31 -2
- package/skills/uiify/references/elements/modal.md +38 -0
- package/skills/uiify/references/elements/number-field.md +41 -0
- package/skills/uiify/references/elements/otp-input.md +39 -0
- package/skills/uiify/references/elements/pagination.md +33 -4
- package/skills/uiify/references/elements/password-input.md +33 -9
- package/skills/uiify/references/elements/popup.md +38 -0
- package/skills/uiify/references/elements/pricing-table.md +55 -2
- package/skills/uiify/references/elements/progress-bar.md +32 -4
- package/skills/uiify/references/elements/radio-group.md +39 -0
- package/skills/uiify/references/elements/rating.md +39 -0
- package/skills/uiify/references/elements/search-input.md +35 -4
- package/skills/uiify/references/elements/segmented-control.md +39 -0
- package/skills/uiify/references/elements/select.md +29 -1
- package/skills/uiify/references/elements/sidebar.md +33 -10
- package/skills/uiify/references/elements/skeleton.md +38 -0
- package/skills/uiify/references/elements/slider.md +39 -0
- package/skills/uiify/references/elements/spinner.md +38 -0
- package/skills/uiify/references/elements/stats-bar.md +30 -2
- package/skills/uiify/references/elements/stepper.md +32 -9
- package/skills/uiify/references/elements/switch.md +31 -4
- package/skills/uiify/references/elements/table-of-contents.md +39 -0
- package/skills/uiify/references/elements/table.md +32 -3
- package/skills/uiify/references/elements/tabs.md +38 -0
- package/skills/uiify/references/elements/tags-input.md +39 -0
- package/skills/uiify/references/elements/testimonial.md +35 -4
- package/skills/uiify/references/elements/textarea.md +30 -3
- package/skills/uiify/references/elements/timeline.md +31 -3
- package/skills/uiify/references/elements/toast.md +27 -1
- package/skills/uiify/references/elements/toggle-group.md +39 -0
- package/skills/uiify/references/elements/toggle.md +39 -0
- package/skills/uiify/references/elements/toolbar.md +39 -0
- package/skills/uiify/references/elements/tooltip.md +38 -0
- package/skills/uiify/references/elements/virtual-scroll.md +39 -0
- package/skills/uiify/references/examples/alert-confirmation.md +34 -0
- package/skills/uiify/references/examples/field-validation.md +37 -0
- package/skills/uiify/references/examples/select-basic.md +35 -0
- package/skills/uiify/references/examples/table-controls.md +40 -0
- package/skills/uiify/references/guides/assets.md +14 -0
- package/skills/uiify/references/guides/content.md +11 -0
- package/skills/uiify/references/guides/hierarchy.md +14 -0
- package/skills/uiify/references/guides/i18n.md +21 -0
- package/skills/uiify/references/guides/reference.md +9 -0
- package/skills/uiify/references/guides/states.md +12 -0
- package/skills/uiify/references/guides/surface.md +27 -0
- package/skills/uiify/scripts/lint.mjs +1 -1
- package/skills/uiify/scripts/static.mjs +150 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/combobox/combobox-store.ts"],"sourcesContent":["import type { ActiveMoveDirection, ComboboxActiveStore, ComboboxItemData } from \"./types.js\";\n\nexport function createComboboxActiveStore(): ComboboxActiveStore {\n let activeId: string | null = null;\n const listeners = new Set<() => void>();\n const itemListeners = new Map<string, Set<() => void>>();\n\n const emitItem = (id: string) => {\n itemListeners.get(id)?.forEach((listener) => listener());\n };\n\n return {\n getActiveId: () => activeId,\n isActive(id: string) {\n return activeId === id;\n },\n setActiveId(next: string | null) {\n if (activeId === next) return;\n const previous = activeId;\n activeId = next;\n listeners.forEach((listener) => listener());\n if (previous) emitItem(previous);\n if (next) emitItem(next);\n },\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n subscribeItem(id: string, listener: () => void) {\n const set = itemListeners.get(id) ?? new Set<() => void>();\n set.add(listener);\n itemListeners.set(id, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) itemListeners.delete(id);\n };\n },\n };\n}\n\nexport function moveActiveId(\n orderedIds: readonly string[],\n activeId: string | null,\n direction: ActiveMoveDirection,\n): string | null {\n if (orderedIds.length === 0) return null;\n\n const currentIndex = activeId ? orderedIds.indexOf(activeId) : -1;\n\n switch (direction) {\n case \"first\":\n return orderedIds[0] ?? null;\n case \"last\":\n return orderedIds[orderedIds.length - 1] ?? null;\n case \"next\": {\n if (currentIndex < 0) return orderedIds[0] ?? null;\n return orderedIds[Math.min(currentIndex + 1, orderedIds.length - 1)] ?? null;\n }\n case \"prev\": {\n if (currentIndex < 0) return orderedIds[orderedIds.length - 1] ?? null;\n return orderedIds[Math.max(currentIndex - 1, 0)] ?? null;\n }\n }\n}\n\nexport function defaultComboboxFilter(\n items: readonly ComboboxItemData[],\n inputValue: string,\n): ComboboxItemData[] {\n const query = inputValue.trim()
|
|
1
|
+
{"version":3,"sources":["../../../src/components/combobox/combobox-store.ts"],"sourcesContent":["import type { ActiveMoveDirection, ComboboxActiveStore, ComboboxItemData } from \"./types.js\";\n\nexport function createComboboxActiveStore(): ComboboxActiveStore {\n let activeId: string | null = null;\n const listeners = new Set<() => void>();\n const itemListeners = new Map<string, Set<() => void>>();\n\n const emitItem = (id: string) => {\n itemListeners.get(id)?.forEach((listener) => listener());\n };\n\n return {\n getActiveId: () => activeId,\n isActive(id: string) {\n return activeId === id;\n },\n setActiveId(next: string | null) {\n if (activeId === next) return;\n const previous = activeId;\n activeId = next;\n listeners.forEach((listener) => listener());\n if (previous) emitItem(previous);\n if (next) emitItem(next);\n },\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n subscribeItem(id: string, listener: () => void) {\n const set = itemListeners.get(id) ?? new Set<() => void>();\n set.add(listener);\n itemListeners.set(id, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) itemListeners.delete(id);\n };\n },\n };\n}\n\nexport function moveActiveId(\n orderedIds: readonly string[],\n activeId: string | null,\n direction: ActiveMoveDirection,\n): string | null {\n if (orderedIds.length === 0) return null;\n\n const currentIndex = activeId ? orderedIds.indexOf(activeId) : -1;\n\n switch (direction) {\n case \"first\":\n return orderedIds[0] ?? null;\n case \"last\":\n return orderedIds[orderedIds.length - 1] ?? null;\n case \"next\": {\n if (currentIndex < 0) return orderedIds[0] ?? null;\n return orderedIds[Math.min(currentIndex + 1, orderedIds.length - 1)] ?? null;\n }\n case \"prev\": {\n if (currentIndex < 0) return orderedIds[orderedIds.length - 1] ?? null;\n return orderedIds[Math.max(currentIndex - 1, 0)] ?? null;\n }\n }\n}\n\nfunction foldForSearch(value: string): string {\n return value.normalize(\"NFKC\").toLowerCase();\n}\n\nexport function defaultComboboxFilter(\n items: readonly ComboboxItemData[],\n inputValue: string,\n): ComboboxItemData[] {\n const query = foldForSearch(inputValue.trim());\n if (!query) return [...items];\n return items.filter((item) => foldForSearch(item.label).includes(query));\n}\n"],"mappings":"AAEO,SAAS,4BAAiD;AAC/D,MAAI,WAA0B;AAC9B,QAAM,YAAY,oBAAI,IAAgB;AACtC,QAAM,gBAAgB,oBAAI,IAA6B;AAEvD,QAAM,WAAW,CAAC,OAAe;AAC/B,kBAAc,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,EACzD;AAEA,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,SAAS,IAAY;AACnB,aAAO,aAAa;AAAA,IACtB;AAAA,IACA,YAAY,MAAqB;AAC/B,UAAI,aAAa,KAAM;AACvB,YAAM,WAAW;AACjB,iBAAW;AACX,gBAAU,QAAQ,CAAC,aAAa,SAAS,CAAC;AAC1C,UAAI,SAAU,UAAS,QAAQ;AAC/B,UAAI,KAAM,UAAS,IAAI;AAAA,IACzB;AAAA,IACA,UAAU,UAAsB;AAC9B,gBAAU,IAAI,QAAQ;AACtB,aAAO,MAAM,UAAU,OAAO,QAAQ;AAAA,IACxC;AAAA,IACA,cAAc,IAAY,UAAsB;AAC9C,YAAM,MAAM,cAAc,IAAI,EAAE,KAAK,oBAAI,IAAgB;AACzD,UAAI,IAAI,QAAQ;AAChB,oBAAc,IAAI,IAAI,GAAG;AACzB,aAAO,MAAM;AACX,YAAI,OAAO,QAAQ;AACnB,YAAI,IAAI,SAAS,EAAG,eAAc,OAAO,EAAE;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,aACd,YACA,UACA,WACe;AACf,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,QAAM,eAAe,WAAW,WAAW,QAAQ,QAAQ,IAAI;AAE/D,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO,WAAW,CAAC,KAAK;AAAA,IAC1B,KAAK;AACH,aAAO,WAAW,WAAW,SAAS,CAAC,KAAK;AAAA,IAC9C,KAAK,QAAQ;AACX,UAAI,eAAe,EAAG,QAAO,WAAW,CAAC,KAAK;AAC9C,aAAO,WAAW,KAAK,IAAI,eAAe,GAAG,WAAW,SAAS,CAAC,CAAC,KAAK;AAAA,IAC1E;AAAA,IACA,KAAK,QAAQ;AACX,UAAI,eAAe,EAAG,QAAO,WAAW,WAAW,SAAS,CAAC,KAAK;AAClE,aAAO,WAAW,KAAK,IAAI,eAAe,GAAG,CAAC,CAAC,KAAK;AAAA,IACtD;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,MAAM,UAAU,MAAM,EAAE,YAAY;AAC7C;AAEO,SAAS,sBACd,OACA,YACoB;AACpB,QAAM,QAAQ,cAAc,WAAW,KAAK,CAAC;AAC7C,MAAI,CAAC,MAAO,QAAO,CAAC,GAAG,KAAK;AAC5B,SAAO,MAAM,OAAO,CAAC,SAAS,cAAc,KAAK,KAAK,EAAE,SAAS,KAAK,CAAC;AACzE;","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ElementType, ReactNode } from "react";
|
|
1
|
+
import type { ComponentPropsWithRef, ElementType, ReactNode } from "react";
|
|
2
2
|
import type { AnchorAlign, AnchorSide, UseAnchorPositionReturn } from "@gunkin/uiify/core/anchor-position";
|
|
3
3
|
import type { PopoverChangeHandler, UsePopoverReturn } from "@gunkin/uiify/core/popover";
|
|
4
4
|
import type { RenderableProps } from "@gunkin/uiify/core/render";
|
|
@@ -53,13 +53,12 @@ export interface ComboboxContextValue {
|
|
|
53
53
|
readonly setInputValue: (value: string) => void;
|
|
54
54
|
readonly value?: string | readonly string[] | undefined;
|
|
55
55
|
}
|
|
56
|
-
export interface ComboboxRootShellOwnProps {
|
|
56
|
+
export interface ComboboxRootShellOwnProps extends Omit<ComponentPropsWithRef<"div">, "children"> {
|
|
57
57
|
readonly className?: string;
|
|
58
58
|
readonly defaultInputValue?: string;
|
|
59
59
|
readonly defaultOpen?: boolean;
|
|
60
60
|
readonly defaultValue?: string;
|
|
61
61
|
readonly filterFn?: ComboboxFilterFn;
|
|
62
|
-
readonly id?: string;
|
|
63
62
|
readonly items: readonly ComboboxItemData[];
|
|
64
63
|
}
|
|
65
64
|
export interface ComboboxRootControlledOwnProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/context-menu/ContextMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAKX,YAAY,
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/context-menu/ContextMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAKX,YAAY,EAGb,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAEV,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,CAAC;AAKhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CA8DhF;yBA9De,eAAe;;;AAiE/B,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,CAsBrB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,CA6DrB;yBA/De,kBAAkB;;;AAkElC,wBAAgB,eAAe,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC7D,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAC/B,YAAY,GAAG,IAAI,CA6DrB;yBA/De,eAAe;;;AA8F/B,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,+BAA+B,GACrC,YAAY,GAAG,IAAI,CAyCrB;yBA3Ce,uBAAuB;;;AA8CvC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,4BAA4B,GAAG,YAAY,GAAG,IAAI,CAgC7F;yBAhCe,oBAAoB;;;AA+CpC,wBAAgB,cAAc,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,GAAG,IAAI,CAOjF;yBAPe,cAAc;;;AAU9B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CA4C/F;yBA5Ce,qBAAqB;;;AA+CrC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAkC/F;AAED,eAAO,MAAM,gBAAgB,kBAAY,CAAC;AAE1C,eAAO,MAAM,oBAAoB,sBAAgB,CAAC;AAElD,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { createPartContext, splitRef } from "@gunkin/uiify/core";
|
|
|
6
6
|
import { composeEventHandlers } from "@gunkin/uiify/core/compose-event-handlers";
|
|
7
7
|
import { RovingFocusItem, RovingFocusRoot } from "@gunkin/uiify/core/roving-focus";
|
|
8
8
|
import { useRenderElement } from "@gunkin/uiify/core/render";
|
|
9
|
+
import { resolveDirection } from "@gunkin/uiify/core/text-direction";
|
|
9
10
|
import { createMenuSelectEvent } from "../internal/menu/menu-utils.js";
|
|
10
11
|
import { focusMenuItem } from "../internal/menu/focus-menu-item.js";
|
|
11
12
|
import { MenuLabel, MenuSeparator } from "../internal/menu/menu-parts.js";
|
|
@@ -290,20 +291,25 @@ const [ContextMenuSubProvider, useContextMenuSubContext] = createPartContext(
|
|
|
290
291
|
function ContextMenuSub(props) {
|
|
291
292
|
const { children } = props;
|
|
292
293
|
const [open, setOpen] = useState(false);
|
|
293
|
-
const
|
|
294
|
+
const triggerRef = useRef(null);
|
|
295
|
+
const skipFocusOpenRef = useRef(false);
|
|
296
|
+
const value = useMemo(() => ({ open, setOpen, skipFocusOpenRef, triggerRef }), [open]);
|
|
294
297
|
return /* @__PURE__ */ jsx(ContextMenuSubProvider, { value, children });
|
|
295
298
|
}
|
|
296
299
|
ContextMenuSub.displayName = "ContextMenuSub";
|
|
297
300
|
function ContextMenuSubTrigger(props) {
|
|
298
301
|
const { children, className, disabled = false, textValue, ...consumerProps } = props;
|
|
299
302
|
const sub = useContextMenuSubContext("SubTrigger");
|
|
303
|
+
const [consumerRef, withoutRef] = splitRef(consumerProps);
|
|
304
|
+
const mergedRef = useMergedRefs(sub.triggerRef, consumerRef);
|
|
300
305
|
const {
|
|
301
306
|
onFocus: consumerOnFocus,
|
|
302
307
|
onKeyDown: consumerOnKeyDown,
|
|
303
308
|
onPointerEnter: consumerOnPointerEnter
|
|
304
|
-
} =
|
|
309
|
+
} = withoutRef;
|
|
305
310
|
const handleKeyDown = (event) => {
|
|
306
|
-
|
|
311
|
+
const openKey = resolveDirection(event.currentTarget) === "rtl" ? "ArrowLeft" : "ArrowRight";
|
|
312
|
+
if (event.key === openKey) {
|
|
307
313
|
event.preventDefault();
|
|
308
314
|
sub.setOpen(true);
|
|
309
315
|
}
|
|
@@ -314,14 +320,17 @@ function ContextMenuSubTrigger(props) {
|
|
|
314
320
|
disabled,
|
|
315
321
|
...textValue !== void 0 ? { textValue } : {},
|
|
316
322
|
...{
|
|
317
|
-
...
|
|
323
|
+
...withoutRef,
|
|
324
|
+
ref: mergedRef,
|
|
318
325
|
role: "menuitem",
|
|
319
326
|
"data-part": "item",
|
|
320
327
|
"aria-haspopup": "menu",
|
|
321
328
|
"aria-expanded": sub.open,
|
|
322
329
|
...className ? { className } : {},
|
|
323
330
|
onPointerEnter: composeEventHandlers(consumerOnPointerEnter, () => sub.setOpen(true)),
|
|
324
|
-
onFocus: composeEventHandlers(consumerOnFocus, () =>
|
|
331
|
+
onFocus: composeEventHandlers(consumerOnFocus, () => {
|
|
332
|
+
if (!sub.skipFocusOpenRef.current) sub.setOpen(true);
|
|
333
|
+
}),
|
|
325
334
|
onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),
|
|
326
335
|
children
|
|
327
336
|
}
|
|
@@ -332,6 +341,16 @@ ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
|
|
|
332
341
|
function ContextMenuSubContent(props) {
|
|
333
342
|
const { children, className } = props;
|
|
334
343
|
const sub = useContextMenuSubContext("SubContent");
|
|
344
|
+
const handleKeyDown = (event) => {
|
|
345
|
+
const closeKey = resolveDirection(event.currentTarget) === "rtl" ? "ArrowRight" : "ArrowLeft";
|
|
346
|
+
if (event.key !== closeKey && event.key !== "Escape") return;
|
|
347
|
+
event.preventDefault();
|
|
348
|
+
event.stopPropagation();
|
|
349
|
+
sub.setOpen(false);
|
|
350
|
+
sub.skipFocusOpenRef.current = true;
|
|
351
|
+
sub.triggerRef.current?.focus();
|
|
352
|
+
sub.skipFocusOpenRef.current = false;
|
|
353
|
+
};
|
|
335
354
|
const element = useRenderElement({
|
|
336
355
|
defaultTag: "div",
|
|
337
356
|
props: {
|
|
@@ -341,6 +360,7 @@ function ContextMenuSubContent(props) {
|
|
|
341
360
|
"data-state": sub.open ? "open" : "closed",
|
|
342
361
|
hidden: !sub.open ? true : void 0,
|
|
343
362
|
...className ? { className } : {},
|
|
363
|
+
onKeyDown: handleKeyDown,
|
|
344
364
|
children: sub.open ? children : null
|
|
345
365
|
},
|
|
346
366
|
state: { open: sub.open }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/context-menu/ContextMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type {\n ElementType,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n SyntheticEvent,\n} from \"react\";\nimport { useIsomorphicLayoutEffect, useMergedRefs } from \"@gunkin/uiify/hooks\";\nimport { createPartContext, splitRef } from \"@gunkin/uiify/core\";\nimport { composeEventHandlers } from \"@gunkin/uiify/core/compose-event-handlers\";\nimport { RovingFocusItem, RovingFocusRoot } from \"@gunkin/uiify/core/roving-focus\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { createMenuSelectEvent } from \"../internal/menu/menu-utils.js\";\nimport { focusMenuItem } from \"../internal/menu/focus-menu-item.js\";\nimport { MenuLabel, MenuSeparator } from \"../internal/menu/menu-parts.js\";\nimport { useMenuSurface } from \"../internal/menu/use-menu-surface.js\";\nimport type { MenuSelectEvent } from \"../internal/menu/types.js\";\nimport type {\n ContextMenuContextValue,\n ContextMenuRootProps,\n ContextMenuTriggerProps,\n ContextMenuContentProps,\n ContextMenuItemProps,\n ContextMenuCheckboxItemOwnProps,\n ContextMenuRadioItemOwnProps,\n ContextMenuSubOwnProps,\n ContextMenuSubTriggerOwnProps,\n ContextMenuSubContentOwnProps,\n} from \"./types.js\";\n\nexport type { MenuSelectEvent };\n\nconst [ContextMenuProvider, useContextMenuContext] =\n createPartContext<ContextMenuContextValue>(\"ContextMenu\");\n\nexport function ContextMenuRoot(props: ContextMenuRootProps): ReactElement | null {\n const { children, defaultOpen, onOpenChange, open } = props;\n const virtualAnchorRef = useRef<HTMLSpanElement | null>(null);\n const [radioValue, setRadioValue] = useState<string | undefined>();\n const [pointerAnchor, setPointerAnchor] = useState(false);\n const surface = useMenuSurface({\n align: \"start\",\n mode: \"manual\",\n side: \"bottom\",\n ...(defaultOpen !== undefined ? { defaultOpen } : {}),\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n });\n const { contentRef, openPopover, setTriggerElement } = surface;\n\n const openAtPointer = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n virtualAnchorRef.current?.style.setProperty(\"--uiify-context-menu-x\", `${event.clientX}px`);\n virtualAnchorRef.current?.style.setProperty(\"--uiify-context-menu-y\", `${event.clientY}px`);\n setPointerAnchor(true);\n setTriggerElement(event.currentTarget);\n openPopover();\n queueMicrotask(() => focusMenuItem(contentRef.current));\n },\n [contentRef, openPopover, setTriggerElement],\n );\n\n const contextValue = useMemo<ContextMenuContextValue>(\n () => ({\n ...surface,\n anchorProps: pointerAnchor ? {} : surface.anchorProps,\n openAtPointer,\n radioValue,\n setRadioValue,\n }),\n [pointerAnchor, surface, openAtPointer, radioValue],\n );\n\n return (\n <ContextMenuProvider value={contextValue}>\n <span\n aria-hidden\n ref={(element) => {\n virtualAnchorRef.current = element;\n }}\n data-virtual-anchor=\"\"\n {...(pointerAnchor ? surface.anchorProps : {})}\n style={\n {\n position: \"fixed\",\n left: \"var(--uiify-context-menu-x, 0px)\",\n top: \"var(--uiify-context-menu-y, 0px)\",\n width: 0,\n height: 0,\n pointerEvents: \"none\",\n } as React.CSSProperties\n }\n />\n {children}\n </ContextMenuProvider>\n );\n}\nContextMenuRoot.displayName = \"ContextMenuRoot\";\n\nexport function ContextMenuTrigger<TAs extends ElementType = \"div\">(\n props: ContextMenuTriggerProps<TAs>,\n): ReactElement | null {\n const { as, render, className, ...consumerProps } = props as ContextMenuTriggerProps<\"div\">;\n const { anchorProps, open, openAtPointer, setTriggerElement } = useContextMenuContext(\"Trigger\");\n const [consumerRef, withoutRef] = splitRef<HTMLElement, typeof consumerProps>(consumerProps);\n const mergedRef = useMergedRefs(setTriggerElement, consumerRef);\n const { onContextMenu: consumerOnContextMenu } = withoutRef as {\n onContextMenu?: (event: MouseEvent<HTMLElement>) => void;\n };\n\n return useRenderElement({\n as,\n defaultTag: \"div\",\n props: {\n ...withoutRef,\n ...anchorProps,\n ref: mergedRef,\n ...(className ? { className } : {}),\n onContextMenu: composeEventHandlers(consumerOnContextMenu, openAtPointer),\n },\n render,\n state: { open },\n });\n}\n\nexport function ContextMenuContent<TAs extends ElementType = \"div\">(\n props: ContextMenuContentProps<TAs>,\n): ReactElement | null {\n const { as, className, children, render, ...consumerProps } =\n props as ContextMenuContentProps<\"div\">;\n const { close, contentRef, focusTrigger, open, popupProps, popupRef, positionerProps } =\n useContextMenuContext(\"Content\");\n const [consumerRef, withoutRef] = splitRef<HTMLElement, typeof consumerProps>(consumerProps);\n const mergedRef = useMergedRefs(popupRef, contentRef, consumerRef);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) return;\n\n const content = contentRef.current;\n const ownerDocument = content?.ownerDocument;\n if (!content || !ownerDocument) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (event.composedPath().includes(content)) return;\n close();\n };\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true);\n return () => ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true);\n }, [close, contentRef, open]);\n\n const { onKeyDown: consumerOnKeyDown } = withoutRef as {\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n focusTrigger();\n }\n };\n\n const contentProps = {\n ...withoutRef,\n ...popupProps,\n ...positionerProps,\n ref: mergedRef,\n role: \"menu\",\n \"data-part\": \"content\",\n \"data-uiify-menu\": \"\",\n \"data-state\": open ? \"open\" : \"closed\",\n ...(className ? { className } : {}),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n };\n\n if (render) {\n return (\n <RovingFocusRoot\n orientation=\"vertical\"\n render={(renderProps) => render(renderProps, { open })}\n {...contentProps}\n />\n );\n }\n\n return <RovingFocusRoot as={as ?? \"div\"} orientation=\"vertical\" {...contentProps} />;\n}\nContextMenuContent.displayName = \"ContextMenuContent\";\n\nexport function ContextMenuItem<TAs extends ElementType = \"div\">(\n props: ContextMenuItemProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n className,\n disabled = false,\n onSelect,\n textValue,\n ...consumerProps\n } = props as ContextMenuItemProps<\"div\">;\n const { close, focusTrigger } = useContextMenuContext(\"Item\");\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n\n const handleSelect = (event: SyntheticEvent<HTMLElement>) => {\n if (disabled) return;\n const selectEvent = createMenuSelectEvent();\n onSelect?.(selectEvent);\n if (!selectEvent.defaultPrevented) {\n close();\n focusTrigger();\n }\n event.preventDefault();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") handleSelect(event);\n };\n\n const itemProps = {\n ...consumerProps,\n role: \"menuitem\",\n \"data-part\": \"item\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n };\n\n if (render) {\n return (\n <RovingFocusItem\n disabled={disabled}\n render={render}\n {...(textValue !== undefined ? { textValue } : {})}\n {...(itemProps as object)}\n />\n );\n }\n\n return (\n <RovingFocusItem\n as={as ?? \"div\"}\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...(itemProps as object)}\n />\n );\n}\nContextMenuItem.displayName = \"ContextMenuItem\";\n\n/**\n * Shared \"activate this menu item\" logic for CheckboxItem and RadioItem: run\n * the item-specific action, close the menu, and return focus to the trigger,\n * unless disabled. Not promoted to internal/menu — it has no second consumer\n * yet, so it remains local to this component.\n */\nfunction useItemActivation(\n disabled: boolean,\n action: () => void,\n close: () => void,\n focusTrigger: () => void,\n): {\n readonly handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n readonly handleSelect: (event: SyntheticEvent<HTMLElement>) => void;\n} {\n const handleSelect = (event: SyntheticEvent<HTMLElement>) => {\n if (disabled) return;\n action();\n close();\n focusTrigger();\n event.preventDefault();\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") handleSelect(event);\n };\n return { handleKeyDown, handleSelect };\n}\n\nexport function ContextMenuCheckboxItem(\n props: ContextMenuCheckboxItemOwnProps,\n): ReactElement | null {\n const {\n checked = false,\n children,\n className,\n disabled = false,\n onCheckedChange,\n textValue,\n ...consumerProps\n } = props;\n const { close, focusTrigger } = useContextMenuContext(\"CheckboxItem\");\n const isChecked = checked === true;\n const isIndeterminate = checked === \"indeterminate\";\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n const { handleKeyDown, handleSelect } = useItemActivation(\n disabled,\n () => onCheckedChange?.(!isChecked),\n close,\n focusTrigger,\n );\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...consumerProps,\n role: \"menuitemcheckbox\",\n \"data-part\": \"item\",\n \"aria-checked\": (isIndeterminate ? \"mixed\" : isChecked) as boolean | \"mixed\",\n \"data-state\": isIndeterminate ? \"indeterminate\" : isChecked ? \"checked\" : \"unchecked\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuCheckboxItem.displayName = \"ContextMenuCheckboxItem\";\n\nexport function ContextMenuRadioItem(props: ContextMenuRadioItemOwnProps): ReactElement | null {\n const { children, className, disabled = false, textValue, value, ...consumerProps } = props;\n const { close, focusTrigger, radioValue, setRadioValue } = useContextMenuContext(\"RadioItem\");\n const checked = radioValue === value;\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n const { handleKeyDown, handleSelect } = useItemActivation(\n disabled,\n () => setRadioValue(value),\n close,\n focusTrigger,\n );\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...consumerProps,\n role: \"menuitemradio\",\n \"data-part\": \"item\",\n \"aria-checked\": checked,\n \"data-state\": checked ? \"checked\" : \"unchecked\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuRadioItem.displayName = \"ContextMenuRadioItem\";\n\ninterface ContextMenuSubValue {\n readonly open: boolean;\n readonly setOpen: (open: boolean) => void;\n}\n\nconst [ContextMenuSubProvider, useContextMenuSubContext] = createPartContext<ContextMenuSubValue>(\n \"ContextMenu\",\n \"Sub\",\n);\n\nexport function ContextMenuSub(props: ContextMenuSubOwnProps): ReactElement | null {\n const { children } = props;\n const [open, setOpen] = useState(false);\n const value = useMemo(() => ({ open, setOpen }), [open]);\n return <ContextMenuSubProvider value={value}>{children}</ContextMenuSubProvider>;\n}\nContextMenuSub.displayName = \"ContextMenuSub\";\n\nexport function ContextMenuSubTrigger(props: ContextMenuSubTriggerOwnProps): ReactElement | null {\n const { children, className, disabled = false, textValue, ...consumerProps } = props;\n const sub = useContextMenuSubContext(\"SubTrigger\");\n const {\n onFocus: consumerOnFocus,\n onKeyDown: consumerOnKeyDown,\n onPointerEnter: consumerOnPointerEnter,\n } = consumerProps as {\n onFocus?: (event: FocusEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n onPointerEnter?: (event: ReactPointerEvent<HTMLElement>) => void;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n sub.setOpen(true);\n }\n };\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...consumerProps,\n role: \"menuitem\",\n \"data-part\": \"item\",\n \"aria-haspopup\": \"menu\" as const,\n \"aria-expanded\": sub.open,\n ...(className ? { className } : {}),\n onPointerEnter: composeEventHandlers(consumerOnPointerEnter, () => sub.setOpen(true)),\n onFocus: composeEventHandlers(consumerOnFocus, () => sub.setOpen(true)),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nexport function ContextMenuSubContent(props: ContextMenuSubContentOwnProps): ReactElement | null {\n const { children, className } = props;\n const sub = useContextMenuSubContext(\"SubContent\");\n\n const element = useRenderElement({\n defaultTag: \"div\",\n props: {\n role: \"menu\",\n \"data-part\": \"sub-content\",\n \"data-uiify-menu\": \"\",\n \"data-state\": sub.open ? \"open\" : \"closed\",\n hidden: !sub.open ? true : undefined,\n ...(className ? { className } : {}),\n children: sub.open ? children : null,\n },\n state: { open: sub.open },\n });\n\n if (!sub.open) return null;\n return element;\n}\n\nexport const ContextMenuLabel = MenuLabel;\n\nexport const ContextMenuSeparator = MenuSeparator;\n\nexport const ContextMenu = {\n CheckboxItem: ContextMenuCheckboxItem,\n Content: ContextMenuContent,\n Item: ContextMenuItem,\n Label: ContextMenuLabel,\n RadioItem: ContextMenuRadioItem,\n Root: ContextMenuRoot,\n Separator: ContextMenuSeparator,\n Sub: Object.assign(ContextMenuSub, {\n Content: ContextMenuSubContent,\n Trigger: ContextMenuSubTrigger,\n }),\n Trigger: ContextMenuTrigger,\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/context-menu/ContextMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type {\n ElementType,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n RefObject,\n SyntheticEvent,\n} from \"react\";\nimport { useIsomorphicLayoutEffect, useMergedRefs } from \"@gunkin/uiify/hooks\";\nimport { createPartContext, splitRef } from \"@gunkin/uiify/core\";\nimport { composeEventHandlers } from \"@gunkin/uiify/core/compose-event-handlers\";\nimport { RovingFocusItem, RovingFocusRoot } from \"@gunkin/uiify/core/roving-focus\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { resolveDirection } from \"@gunkin/uiify/core/text-direction\";\nimport { createMenuSelectEvent } from \"../internal/menu/menu-utils.js\";\nimport { focusMenuItem } from \"../internal/menu/focus-menu-item.js\";\nimport { MenuLabel, MenuSeparator } from \"../internal/menu/menu-parts.js\";\nimport { useMenuSurface } from \"../internal/menu/use-menu-surface.js\";\nimport type { MenuSelectEvent } from \"../internal/menu/types.js\";\nimport type {\n ContextMenuContextValue,\n ContextMenuRootProps,\n ContextMenuTriggerProps,\n ContextMenuContentProps,\n ContextMenuItemProps,\n ContextMenuCheckboxItemOwnProps,\n ContextMenuRadioItemOwnProps,\n ContextMenuSubOwnProps,\n ContextMenuSubTriggerOwnProps,\n ContextMenuSubContentOwnProps,\n} from \"./types.js\";\n\nexport type { MenuSelectEvent };\n\nconst [ContextMenuProvider, useContextMenuContext] =\n createPartContext<ContextMenuContextValue>(\"ContextMenu\");\n\nexport function ContextMenuRoot(props: ContextMenuRootProps): ReactElement | null {\n const { children, defaultOpen, onOpenChange, open } = props;\n const virtualAnchorRef = useRef<HTMLSpanElement | null>(null);\n const [radioValue, setRadioValue] = useState<string | undefined>();\n const [pointerAnchor, setPointerAnchor] = useState(false);\n const surface = useMenuSurface({\n align: \"start\",\n mode: \"manual\",\n side: \"bottom\",\n ...(defaultOpen !== undefined ? { defaultOpen } : {}),\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n });\n const { contentRef, openPopover, setTriggerElement } = surface;\n\n const openAtPointer = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n virtualAnchorRef.current?.style.setProperty(\"--uiify-context-menu-x\", `${event.clientX}px`);\n virtualAnchorRef.current?.style.setProperty(\"--uiify-context-menu-y\", `${event.clientY}px`);\n setPointerAnchor(true);\n setTriggerElement(event.currentTarget);\n openPopover();\n queueMicrotask(() => focusMenuItem(contentRef.current));\n },\n [contentRef, openPopover, setTriggerElement],\n );\n\n const contextValue = useMemo<ContextMenuContextValue>(\n () => ({\n ...surface,\n anchorProps: pointerAnchor ? {} : surface.anchorProps,\n openAtPointer,\n radioValue,\n setRadioValue,\n }),\n [pointerAnchor, surface, openAtPointer, radioValue],\n );\n\n return (\n <ContextMenuProvider value={contextValue}>\n <span\n aria-hidden\n ref={(element) => {\n virtualAnchorRef.current = element;\n }}\n data-virtual-anchor=\"\"\n {...(pointerAnchor ? surface.anchorProps : {})}\n style={\n {\n position: \"fixed\",\n left: \"var(--uiify-context-menu-x, 0px)\",\n top: \"var(--uiify-context-menu-y, 0px)\",\n width: 0,\n height: 0,\n pointerEvents: \"none\",\n } as React.CSSProperties\n }\n />\n {children}\n </ContextMenuProvider>\n );\n}\nContextMenuRoot.displayName = \"ContextMenuRoot\";\n\nexport function ContextMenuTrigger<TAs extends ElementType = \"div\">(\n props: ContextMenuTriggerProps<TAs>,\n): ReactElement | null {\n const { as, render, className, ...consumerProps } = props as ContextMenuTriggerProps<\"div\">;\n const { anchorProps, open, openAtPointer, setTriggerElement } = useContextMenuContext(\"Trigger\");\n const [consumerRef, withoutRef] = splitRef<HTMLElement, typeof consumerProps>(consumerProps);\n const mergedRef = useMergedRefs(setTriggerElement, consumerRef);\n const { onContextMenu: consumerOnContextMenu } = withoutRef as {\n onContextMenu?: (event: MouseEvent<HTMLElement>) => void;\n };\n\n return useRenderElement({\n as,\n defaultTag: \"div\",\n props: {\n ...withoutRef,\n ...anchorProps,\n ref: mergedRef,\n ...(className ? { className } : {}),\n onContextMenu: composeEventHandlers(consumerOnContextMenu, openAtPointer),\n },\n render,\n state: { open },\n });\n}\n\nexport function ContextMenuContent<TAs extends ElementType = \"div\">(\n props: ContextMenuContentProps<TAs>,\n): ReactElement | null {\n const { as, className, children, render, ...consumerProps } =\n props as ContextMenuContentProps<\"div\">;\n const { close, contentRef, focusTrigger, open, popupProps, popupRef, positionerProps } =\n useContextMenuContext(\"Content\");\n const [consumerRef, withoutRef] = splitRef<HTMLElement, typeof consumerProps>(consumerProps);\n const mergedRef = useMergedRefs(popupRef, contentRef, consumerRef);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) return;\n\n const content = contentRef.current;\n const ownerDocument = content?.ownerDocument;\n if (!content || !ownerDocument) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (event.composedPath().includes(content)) return;\n close();\n };\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true);\n return () => ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true);\n }, [close, contentRef, open]);\n\n const { onKeyDown: consumerOnKeyDown } = withoutRef as {\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n focusTrigger();\n }\n };\n\n const contentProps = {\n ...withoutRef,\n ...popupProps,\n ...positionerProps,\n ref: mergedRef,\n role: \"menu\",\n \"data-part\": \"content\",\n \"data-uiify-menu\": \"\",\n \"data-state\": open ? \"open\" : \"closed\",\n ...(className ? { className } : {}),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n };\n\n if (render) {\n return (\n <RovingFocusRoot\n orientation=\"vertical\"\n render={(renderProps) => render(renderProps, { open })}\n {...contentProps}\n />\n );\n }\n\n return <RovingFocusRoot as={as ?? \"div\"} orientation=\"vertical\" {...contentProps} />;\n}\nContextMenuContent.displayName = \"ContextMenuContent\";\n\nexport function ContextMenuItem<TAs extends ElementType = \"div\">(\n props: ContextMenuItemProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n className,\n disabled = false,\n onSelect,\n textValue,\n ...consumerProps\n } = props as ContextMenuItemProps<\"div\">;\n const { close, focusTrigger } = useContextMenuContext(\"Item\");\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n\n const handleSelect = (event: SyntheticEvent<HTMLElement>) => {\n if (disabled) return;\n const selectEvent = createMenuSelectEvent();\n onSelect?.(selectEvent);\n if (!selectEvent.defaultPrevented) {\n close();\n focusTrigger();\n }\n event.preventDefault();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") handleSelect(event);\n };\n\n const itemProps = {\n ...consumerProps,\n role: \"menuitem\",\n \"data-part\": \"item\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n };\n\n if (render) {\n return (\n <RovingFocusItem\n disabled={disabled}\n render={render}\n {...(textValue !== undefined ? { textValue } : {})}\n {...(itemProps as object)}\n />\n );\n }\n\n return (\n <RovingFocusItem\n as={as ?? \"div\"}\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...(itemProps as object)}\n />\n );\n}\nContextMenuItem.displayName = \"ContextMenuItem\";\n\n/**\n * Shared \"activate this menu item\" logic for CheckboxItem and RadioItem: run\n * the item-specific action, close the menu, and return focus to the trigger,\n * unless disabled. Not promoted to internal/menu — it has no second consumer\n * yet, so it remains local to this component.\n */\nfunction useItemActivation(\n disabled: boolean,\n action: () => void,\n close: () => void,\n focusTrigger: () => void,\n): {\n readonly handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n readonly handleSelect: (event: SyntheticEvent<HTMLElement>) => void;\n} {\n const handleSelect = (event: SyntheticEvent<HTMLElement>) => {\n if (disabled) return;\n action();\n close();\n focusTrigger();\n event.preventDefault();\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") handleSelect(event);\n };\n return { handleKeyDown, handleSelect };\n}\n\nexport function ContextMenuCheckboxItem(\n props: ContextMenuCheckboxItemOwnProps,\n): ReactElement | null {\n const {\n checked = false,\n children,\n className,\n disabled = false,\n onCheckedChange,\n textValue,\n ...consumerProps\n } = props;\n const { close, focusTrigger } = useContextMenuContext(\"CheckboxItem\");\n const isChecked = checked === true;\n const isIndeterminate = checked === \"indeterminate\";\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n const { handleKeyDown, handleSelect } = useItemActivation(\n disabled,\n () => onCheckedChange?.(!isChecked),\n close,\n focusTrigger,\n );\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...consumerProps,\n role: \"menuitemcheckbox\",\n \"data-part\": \"item\",\n \"aria-checked\": (isIndeterminate ? \"mixed\" : isChecked) as boolean | \"mixed\",\n \"data-state\": isIndeterminate ? \"indeterminate\" : isChecked ? \"checked\" : \"unchecked\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuCheckboxItem.displayName = \"ContextMenuCheckboxItem\";\n\nexport function ContextMenuRadioItem(props: ContextMenuRadioItemOwnProps): ReactElement | null {\n const { children, className, disabled = false, textValue, value, ...consumerProps } = props;\n const { close, focusTrigger, radioValue, setRadioValue } = useContextMenuContext(\"RadioItem\");\n const checked = radioValue === value;\n const { onClick: consumerOnClick, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n };\n const { handleKeyDown, handleSelect } = useItemActivation(\n disabled,\n () => setRadioValue(value),\n close,\n focusTrigger,\n );\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...consumerProps,\n role: \"menuitemradio\",\n \"data-part\": \"item\",\n \"aria-checked\": checked,\n \"data-state\": checked ? \"checked\" : \"unchecked\",\n ...(className ? { className } : {}),\n onClick: composeEventHandlers(consumerOnClick, handleSelect),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuRadioItem.displayName = \"ContextMenuRadioItem\";\n\ninterface ContextMenuSubValue {\n readonly open: boolean;\n readonly setOpen: (open: boolean) => void;\n readonly skipFocusOpenRef: RefObject<boolean>;\n readonly triggerRef: RefObject<HTMLElement | null>;\n}\n\nconst [ContextMenuSubProvider, useContextMenuSubContext] = createPartContext<ContextMenuSubValue>(\n \"ContextMenu\",\n \"Sub\",\n);\n\nexport function ContextMenuSub(props: ContextMenuSubOwnProps): ReactElement | null {\n const { children } = props;\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement | null>(null);\n const skipFocusOpenRef = useRef(false);\n const value = useMemo(() => ({ open, setOpen, skipFocusOpenRef, triggerRef }), [open]);\n return <ContextMenuSubProvider value={value}>{children}</ContextMenuSubProvider>;\n}\nContextMenuSub.displayName = \"ContextMenuSub\";\n\nexport function ContextMenuSubTrigger(props: ContextMenuSubTriggerOwnProps): ReactElement | null {\n const { children, className, disabled = false, textValue, ...consumerProps } = props;\n const sub = useContextMenuSubContext(\"SubTrigger\");\n const [consumerRef, withoutRef] = splitRef<HTMLElement, typeof consumerProps>(consumerProps);\n const mergedRef = useMergedRefs(sub.triggerRef, consumerRef);\n const {\n onFocus: consumerOnFocus,\n onKeyDown: consumerOnKeyDown,\n onPointerEnter: consumerOnPointerEnter,\n } = withoutRef as {\n onFocus?: (event: FocusEvent<HTMLElement>) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n onPointerEnter?: (event: ReactPointerEvent<HTMLElement>) => void;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const openKey = resolveDirection(event.currentTarget) === \"rtl\" ? \"ArrowLeft\" : \"ArrowRight\";\n if (event.key === openKey) {\n event.preventDefault();\n sub.setOpen(true);\n }\n };\n\n return (\n <RovingFocusItem\n disabled={disabled}\n {...(textValue !== undefined ? { textValue } : {})}\n {...{\n ...withoutRef,\n ref: mergedRef,\n role: \"menuitem\",\n \"data-part\": \"item\",\n \"aria-haspopup\": \"menu\" as const,\n \"aria-expanded\": sub.open,\n ...(className ? { className } : {}),\n onPointerEnter: composeEventHandlers(consumerOnPointerEnter, () => sub.setOpen(true)),\n onFocus: composeEventHandlers(consumerOnFocus, () => {\n if (!sub.skipFocusOpenRef.current) sub.setOpen(true);\n }),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n children,\n }}\n />\n );\n}\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nexport function ContextMenuSubContent(props: ContextMenuSubContentOwnProps): ReactElement | null {\n const { children, className } = props;\n const sub = useContextMenuSubContext(\"SubContent\");\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n const closeKey = resolveDirection(event.currentTarget) === \"rtl\" ? \"ArrowRight\" : \"ArrowLeft\";\n if (event.key !== closeKey && event.key !== \"Escape\") return;\n // Escape closes only this submenu, not the menu around it.\n event.preventDefault();\n event.stopPropagation();\n sub.setOpen(false);\n // The trigger opens its submenu on focus; skip that while returning focus.\n sub.skipFocusOpenRef.current = true;\n sub.triggerRef.current?.focus();\n sub.skipFocusOpenRef.current = false;\n };\n\n const element = useRenderElement({\n defaultTag: \"div\",\n props: {\n role: \"menu\",\n \"data-part\": \"sub-content\",\n \"data-uiify-menu\": \"\",\n \"data-state\": sub.open ? \"open\" : \"closed\",\n hidden: !sub.open ? true : undefined,\n ...(className ? { className } : {}),\n onKeyDown: handleKeyDown,\n children: sub.open ? children : null,\n },\n state: { open: sub.open },\n });\n\n if (!sub.open) return null;\n return element;\n}\n\nexport const ContextMenuLabel = MenuLabel;\n\nexport const ContextMenuSeparator = MenuSeparator;\n\nexport const ContextMenu = {\n CheckboxItem: ContextMenuCheckboxItem,\n Content: ContextMenuContent,\n Item: ContextMenuItem,\n Label: ContextMenuLabel,\n RadioItem: ContextMenuRadioItem,\n Root: ContextMenuRoot,\n Separator: ContextMenuSeparator,\n Sub: Object.assign(ContextMenuSub, {\n Content: ContextMenuSubContent,\n Trigger: ContextMenuSubTrigger,\n }),\n Trigger: ContextMenuTrigger,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,7 @@ export declare function DrawerNativeContent({ size, dismiss, backdrop, side, ...
|
|
|
6
6
|
export declare namespace DrawerNativeContent {
|
|
7
7
|
var displayName: string;
|
|
8
8
|
}
|
|
9
|
-
export declare function DrawerPanel({ id, trigger, title, description, children, closeLabel, side, className, footer, size, dismiss, backdrop, }: DrawerProps): ReactElement;
|
|
9
|
+
export declare function DrawerPanel({ id, trigger, title, description, children, closeLabel, labels, side, className, footer, size, dismiss, backdrop, }: DrawerProps): ReactElement;
|
|
10
10
|
export declare namespace DrawerPanel {
|
|
11
11
|
var displayName: string;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawerNative.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerNative.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"DrawerNative.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerNative.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAIlG,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,GAAG,YAAY,CAUhG;AACD,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,GAAG,YAAY,CAU9F;AACD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAe,EACf,QAAQ,EACR,IAAe,EACf,GAAG,KAAK,EACT,EAAE,wBAAwB,GAAG,YAAY,CAYzC;yBAlBe,mBAAmB;;;AAqBnC,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,IAAe,EACf,SAAS,EACT,MAAM,EACN,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE,WAAW,GAAG,YAAY,CAuD5B;yBArEe,WAAW"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { renderNativeInvoker } from "@gunkin/uiify/core/render";
|
|
3
|
+
const DEFAULT_DRAWER_LABELS = { close: "Close" };
|
|
3
4
|
function DrawerNativeTrigger({ target, ...props }) {
|
|
4
5
|
return renderNativeInvoker(
|
|
5
6
|
"button",
|
|
@@ -49,7 +50,8 @@ function DrawerPanel({
|
|
|
49
50
|
title,
|
|
50
51
|
description,
|
|
51
52
|
children,
|
|
52
|
-
closeLabel
|
|
53
|
+
closeLabel,
|
|
54
|
+
labels,
|
|
53
55
|
side = "bottom",
|
|
54
56
|
className,
|
|
55
57
|
footer,
|
|
@@ -57,6 +59,7 @@ function DrawerPanel({
|
|
|
57
59
|
dismiss,
|
|
58
60
|
backdrop
|
|
59
61
|
}) {
|
|
62
|
+
const effectiveCloseLabel = closeLabel ?? labels?.close ?? DEFAULT_DRAWER_LABELS.close;
|
|
60
63
|
return /* @__PURE__ */ jsxs("div", { "data-part": "root", "data-side": side, "data-uiify-drawer": "", children: [
|
|
61
64
|
/* @__PURE__ */ jsx(DrawerNativeTrigger, { target: id, children: trigger }),
|
|
62
65
|
/* @__PURE__ */ jsxs(
|
|
@@ -75,7 +78,7 @@ function DrawerPanel({
|
|
|
75
78
|
/* @__PURE__ */ jsxs("div", { "data-part": "header", "data-uiify-drawer": "", children: [
|
|
76
79
|
/* @__PURE__ */ jsx("h2", { "data-part": "title", id: `${id}-title`, children: title }),
|
|
77
80
|
description === null || description === void 0 ? null : /* @__PURE__ */ jsx("p", { "data-part": "description", id: `${id}-description`, children: description }),
|
|
78
|
-
/* @__PURE__ */ jsx(DrawerNativeClose, { target: id, "aria-label":
|
|
81
|
+
/* @__PURE__ */ jsx(DrawerNativeClose, { target: id, "aria-label": effectiveCloseLabel, children: /* @__PURE__ */ jsx(
|
|
79
82
|
"svg",
|
|
80
83
|
{
|
|
81
84
|
"aria-hidden": "true",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/drawer/DrawerNative.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\nimport { renderNativeInvoker } from \"@gunkin/uiify/core/render\";\nimport type { DrawerProps, DrawerNativeContentProps, DrawerNativeInvokerProps } from \"./types.js\";\n\nexport function DrawerNativeTrigger({ target, ...props }: DrawerNativeInvokerProps): ReactElement {\n return renderNativeInvoker(\n \"button\",\n \"data-uiify-drawer\",\n \"trigger\",\n \"show-modal\",\n target,\n props,\n { button: true },\n );\n}\nexport function DrawerNativeClose({ target, ...props }: DrawerNativeInvokerProps): ReactElement {\n return renderNativeInvoker(\n \"button\",\n \"data-uiify-drawer\",\n \"close\",\n \"request-close\",\n target,\n props,\n { button: true, variant: \"ghost\" },\n );\n}\nexport function DrawerNativeContent({\n size,\n dismiss = \"any\",\n backdrop,\n side = \"bottom\",\n ...props\n}: DrawerNativeContentProps): ReactElement {\n return (\n <dialog\n {...props}\n closedby={dismiss}\n data-side={side}\n data-size={size}\n data-backdrop={backdrop}\n data-part=\"content\"\n data-uiify-drawer=\"\"\n />\n );\n}\nDrawerNativeContent.displayName = \"DrawerNativeContent\";\n\nexport function DrawerPanel({\n id,\n trigger,\n title,\n description,\n children,\n closeLabel
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drawer/DrawerNative.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\nimport { renderNativeInvoker } from \"@gunkin/uiify/core/render\";\nimport type { DrawerProps, DrawerNativeContentProps, DrawerNativeInvokerProps } from \"./types.js\";\n\nconst DEFAULT_DRAWER_LABELS = { close: \"Close\" } as const;\n\nexport function DrawerNativeTrigger({ target, ...props }: DrawerNativeInvokerProps): ReactElement {\n return renderNativeInvoker(\n \"button\",\n \"data-uiify-drawer\",\n \"trigger\",\n \"show-modal\",\n target,\n props,\n { button: true },\n );\n}\nexport function DrawerNativeClose({ target, ...props }: DrawerNativeInvokerProps): ReactElement {\n return renderNativeInvoker(\n \"button\",\n \"data-uiify-drawer\",\n \"close\",\n \"request-close\",\n target,\n props,\n { button: true, variant: \"ghost\" },\n );\n}\nexport function DrawerNativeContent({\n size,\n dismiss = \"any\",\n backdrop,\n side = \"bottom\",\n ...props\n}: DrawerNativeContentProps): ReactElement {\n return (\n <dialog\n {...props}\n closedby={dismiss}\n data-side={side}\n data-size={size}\n data-backdrop={backdrop}\n data-part=\"content\"\n data-uiify-drawer=\"\"\n />\n );\n}\nDrawerNativeContent.displayName = \"DrawerNativeContent\";\n\nexport function DrawerPanel({\n id,\n trigger,\n title,\n description,\n children,\n closeLabel,\n labels,\n side = \"bottom\",\n className,\n footer,\n size,\n dismiss,\n backdrop,\n}: DrawerProps): ReactElement {\n const effectiveCloseLabel = closeLabel ?? labels?.close ?? DEFAULT_DRAWER_LABELS.close;\n return (\n <div data-part=\"root\" data-side={side} data-uiify-drawer=\"\">\n <DrawerNativeTrigger target={id}>{trigger}</DrawerNativeTrigger>\n <DrawerNativeContent\n aria-describedby={\n description === null || description === undefined ? undefined : `${id}-description`\n }\n aria-labelledby={`${id}-title`}\n className={className}\n side={side}\n id={id}\n {...(size ? { size } : {})}\n {...(dismiss ? { dismiss } : {})}\n {...(backdrop ? { backdrop } : {})}\n >\n <div data-part=\"grabber\" data-uiify-drawer=\"\" aria-hidden=\"true\" />\n <div data-part=\"header\" data-uiify-drawer=\"\">\n <h2 data-part=\"title\" id={`${id}-title`}>\n {title}\n </h2>\n {description === null || description === undefined ? null : (\n <p data-part=\"description\" id={`${id}-description`}>\n {description}\n </p>\n )}\n <DrawerNativeClose target={id} aria-label={effectiveCloseLabel}>\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 16 16\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n >\n <path d=\"M3 3l10 10M13 3L3 13\" />\n </svg>\n </DrawerNativeClose>\n </div>\n {children === null || children === undefined ? null : (\n <div data-part=\"body\" data-uiify-drawer=\"\">\n {children}\n </div>\n )}\n {footer === null || footer === undefined ? null : (\n <div data-part=\"footer\" data-uiify-drawer=\"\">\n {footer}\n </div>\n )}\n </DrawerNativeContent>\n </div>\n );\n}\nDrawerPanel.displayName = \"DrawerPanel\";\n"],"mappings":"AAoCI,cA6CI,YA7CJ;AAnCJ,SAAS,2BAA2B;AAGpC,MAAM,wBAAwB,EAAE,OAAO,QAAQ;AAExC,SAAS,oBAAoB,EAAE,QAAQ,GAAG,MAAM,GAA2C;AAChG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,KAAK;AAAA,EACjB;AACF;AACO,SAAS,kBAAkB,EAAE,QAAQ,GAAG,MAAM,GAA2C;AAC9F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,MAAM,SAAS,QAAQ;AAAA,EACnC;AACF;AACO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAA2C;AACzC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,UAAU;AAAA,MACV,aAAW;AAAA,MACX,aAAW;AAAA,MACX,iBAAe;AAAA,MACf,aAAU;AAAA,MACV,qBAAkB;AAAA;AAAA,EACpB;AAEJ;AACA,oBAAoB,cAAc;AAE3B,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,sBAAsB,cAAc,QAAQ,SAAS,sBAAsB;AACjF,SACE,qBAAC,SAAI,aAAU,QAAO,aAAW,MAAM,qBAAkB,IACvD;AAAA,wBAAC,uBAAoB,QAAQ,IAAK,mBAAQ;AAAA,IAC1C;AAAA,MAAC;AAAA;AAAA,QACC,oBACE,gBAAgB,QAAQ,gBAAgB,SAAY,SAAY,GAAG,EAAE;AAAA,QAEvE,mBAAiB,GAAG,EAAE;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,QACvB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC7B,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,QAEhC;AAAA,8BAAC,SAAI,aAAU,WAAU,qBAAkB,IAAG,eAAY,QAAO;AAAA,UACjE,qBAAC,SAAI,aAAU,UAAS,qBAAkB,IACxC;AAAA,gCAAC,QAAG,aAAU,SAAQ,IAAI,GAAG,EAAE,UAC5B,iBACH;AAAA,YACC,gBAAgB,QAAQ,gBAAgB,SAAY,OACnD,oBAAC,OAAE,aAAU,eAAc,IAAI,GAAG,EAAE,gBACjC,uBACH;AAAA,YAEF,oBAAC,qBAAkB,QAAQ,IAAI,cAAY,qBACzC;AAAA,cAAC;AAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,aAAY;AAAA,gBACZ,eAAc;AAAA,gBAEd,8BAAC,UAAK,GAAE,wBAAuB;AAAA;AAAA,YACjC,GACF;AAAA,aACF;AAAA,UACC,aAAa,QAAQ,aAAa,SAAY,OAC7C,oBAAC,SAAI,aAAU,QAAO,qBAAkB,IACrC,UACH;AAAA,UAED,WAAW,QAAQ,WAAW,SAAY,OACzC,oBAAC,SAAI,aAAU,UAAS,qBAAkB,IACvC,kBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AACA,YAAY,cAAc;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerHandle, DrawerRoot, DrawerTitle, DrawerTrigger, } from "./Drawer.js";
|
|
2
2
|
export { DrawerPanel, DrawerNativeTrigger, DrawerNativeClose, DrawerNativeContent, } from "./DrawerNative.js";
|
|
3
3
|
export type { DrawerCloseOwnProps, DrawerCloseProps, DrawerContentOwnProps, DrawerContentProps, DrawerDescriptionOwnProps, DrawerHandleOwnProps, DrawerRootOwnProps, DrawerRootProps, DrawerTitleOwnProps, DrawerTriggerOwnProps, DrawerTriggerProps, } from "./types.js";
|
|
4
|
-
export type { DrawerProps, DrawerSide, DrawerAppearanceProps, DrawerNativeContentProps, DrawerNativeInvokerProps, } from "./types.js";
|
|
4
|
+
export type { DrawerProps, DrawerLabels, DrawerSide, DrawerAppearanceProps, DrawerNativeContentProps, DrawerNativeInvokerProps, } from "./types.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/drawer/index.ts"],"sourcesContent":["export {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerHandle,\n DrawerRoot,\n DrawerTitle,\n DrawerTrigger,\n} from \"./Drawer.js\";\nexport {\n DrawerPanel,\n DrawerNativeTrigger,\n DrawerNativeClose,\n DrawerNativeContent,\n} from \"./DrawerNative.js\";\nexport type {\n DrawerCloseOwnProps,\n DrawerCloseProps,\n DrawerContentOwnProps,\n DrawerContentProps,\n DrawerDescriptionOwnProps,\n DrawerHandleOwnProps,\n DrawerRootOwnProps,\n DrawerRootProps,\n DrawerTitleOwnProps,\n DrawerTriggerOwnProps,\n DrawerTriggerProps,\n} from \"./types.js\";\nexport type {\n DrawerProps,\n DrawerSide,\n DrawerAppearanceProps,\n DrawerNativeContentProps,\n DrawerNativeInvokerProps,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drawer/index.ts"],"sourcesContent":["export {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerHandle,\n DrawerRoot,\n DrawerTitle,\n DrawerTrigger,\n} from \"./Drawer.js\";\nexport {\n DrawerPanel,\n DrawerNativeTrigger,\n DrawerNativeClose,\n DrawerNativeContent,\n} from \"./DrawerNative.js\";\nexport type {\n DrawerCloseOwnProps,\n DrawerCloseProps,\n DrawerContentOwnProps,\n DrawerContentProps,\n DrawerDescriptionOwnProps,\n DrawerHandleOwnProps,\n DrawerRootOwnProps,\n DrawerRootProps,\n DrawerTitleOwnProps,\n DrawerTriggerOwnProps,\n DrawerTriggerProps,\n} from \"./types.js\";\nexport type {\n DrawerProps,\n DrawerLabels,\n DrawerSide,\n DrawerAppearanceProps,\n DrawerNativeContentProps,\n DrawerNativeInvokerProps,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -13,10 +13,14 @@ export interface DrawerProps extends DrawerAppearanceProps {
|
|
|
13
13
|
readonly description?: ReactNode;
|
|
14
14
|
readonly children?: ReactNode;
|
|
15
15
|
readonly closeLabel?: string;
|
|
16
|
+
readonly labels?: Partial<DrawerLabels>;
|
|
16
17
|
readonly footer?: ReactNode;
|
|
17
18
|
readonly side?: DrawerSide;
|
|
18
19
|
readonly className?: string;
|
|
19
20
|
}
|
|
21
|
+
export interface DrawerLabels {
|
|
22
|
+
readonly close: string;
|
|
23
|
+
}
|
|
20
24
|
export interface DrawerNativeContentProps extends Omit<ComponentPropsWithRef<"dialog">, "open" | "popover" | "closedby">, DrawerAppearanceProps {
|
|
21
25
|
readonly id: string;
|
|
22
26
|
readonly side?: DrawerSide;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/DropdownMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAIX,YAAY,EAGb,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/DropdownMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useMemo, useRef } from "react";
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { useControllableState, useMergedRefs } from "@gunkin/uiify/hooks";
|
|
5
5
|
import { createPartContext, splitRef } from "@gunkin/uiify/core";
|
|
6
6
|
import { useAnchorPosition } from "@gunkin/uiify/core/anchor-position";
|
|
7
7
|
import { composeEventHandlers } from "@gunkin/uiify/core/compose-event-handlers";
|
|
8
|
-
import {
|
|
8
|
+
import { useDirectionOverride } from "@gunkin/uiify/core/direction";
|
|
9
|
+
import { resolveDirection } from "@gunkin/uiify/core/text-direction";
|
|
9
10
|
import { createHoverIntentStore } from "@gunkin/uiify/core/hover-intent-store";
|
|
10
11
|
import { usePopover } from "@gunkin/uiify/core/popover";
|
|
11
12
|
import { RovingFocusItem, RovingFocusRoot } from "@gunkin/uiify/core/roving-focus";
|
|
@@ -33,7 +34,7 @@ function DropdownMenuRoot(props) {
|
|
|
33
34
|
onOpenChange,
|
|
34
35
|
open
|
|
35
36
|
} = props;
|
|
36
|
-
const dir =
|
|
37
|
+
const dir = useDirectionOverride(localDir);
|
|
37
38
|
const surface = useMenuSurface({
|
|
38
39
|
mode: "auto",
|
|
39
40
|
...defaultOpen !== void 0 ? { defaultOpen } : {},
|
|
@@ -58,7 +59,7 @@ function DropdownMenuRoot(props) {
|
|
|
58
59
|
() => ({
|
|
59
60
|
...surface,
|
|
60
61
|
cancelHoverClose,
|
|
61
|
-
dir,
|
|
62
|
+
...dir ? { dir } : {},
|
|
62
63
|
disabled,
|
|
63
64
|
hoverEnabledRef,
|
|
64
65
|
loop,
|
|
@@ -208,7 +209,7 @@ function DropdownMenuContent(props) {
|
|
|
208
209
|
return /* @__PURE__ */ jsx(
|
|
209
210
|
RovingFocusRoot,
|
|
210
211
|
{
|
|
211
|
-
direction: dir,
|
|
212
|
+
...dir ? { direction: dir } : {},
|
|
212
213
|
loop,
|
|
213
214
|
orientation: "vertical",
|
|
214
215
|
...contentProps,
|
|
@@ -219,7 +220,7 @@ function DropdownMenuContent(props) {
|
|
|
219
220
|
RovingFocusRoot,
|
|
220
221
|
{
|
|
221
222
|
as: as ?? "div",
|
|
222
|
-
direction: dir,
|
|
223
|
+
...dir ? { direction: dir } : {},
|
|
223
224
|
loop,
|
|
224
225
|
orientation: "vertical",
|
|
225
226
|
...contentProps
|
|
@@ -438,9 +439,19 @@ function DropdownMenuSub(props) {
|
|
|
438
439
|
});
|
|
439
440
|
const anchor = useAnchorPosition();
|
|
440
441
|
const clickedRef = useRef(false);
|
|
442
|
+
const [resolvedSide, setResolvedSide] = useState("right");
|
|
441
443
|
const value = useMemo(
|
|
442
|
-
() => ({
|
|
443
|
-
|
|
444
|
+
() => ({
|
|
445
|
+
anchor,
|
|
446
|
+
clickedRef,
|
|
447
|
+
contentRef,
|
|
448
|
+
open: popover.open,
|
|
449
|
+
popover,
|
|
450
|
+
resolvedSide,
|
|
451
|
+
setResolvedSide,
|
|
452
|
+
triggerRef
|
|
453
|
+
}),
|
|
454
|
+
[anchor, popover, clickedRef, resolvedSide]
|
|
444
455
|
);
|
|
445
456
|
return /* @__PURE__ */ jsx(SubProvider, { value, children });
|
|
446
457
|
}
|
|
@@ -458,16 +469,21 @@ function DropdownMenuSubTrigger(props) {
|
|
|
458
469
|
const { clickedRef } = sub;
|
|
459
470
|
const { onClick, onKeyDown, onPointerEnter, ...withoutEvents } = consumerProps;
|
|
460
471
|
const handleKeyDown = (event) => {
|
|
461
|
-
const
|
|
472
|
+
const rtl = resolveDirection(event.currentTarget, root.dir) === "rtl";
|
|
473
|
+
const openKey = rtl ? "ArrowLeft" : "ArrowRight";
|
|
462
474
|
if (event.key === openKey || event.key === "Enter" || event.key === " ") {
|
|
463
475
|
event.preventDefault();
|
|
464
476
|
clickedRef.current = true;
|
|
477
|
+
sub.setResolvedSide(rtl ? "left" : "right");
|
|
465
478
|
sub.popover.openPopover();
|
|
466
479
|
queueMicrotask(() => focusMenuItem(sub.contentRef.current));
|
|
467
480
|
}
|
|
468
481
|
};
|
|
469
|
-
const handlePointerEnter = () => {
|
|
482
|
+
const handlePointerEnter = (event) => {
|
|
470
483
|
clickedRef.current = false;
|
|
484
|
+
sub.setResolvedSide(
|
|
485
|
+
resolveDirection(event.currentTarget, root.dir) === "rtl" ? "left" : "right"
|
|
486
|
+
);
|
|
471
487
|
sub.popover.openPopover();
|
|
472
488
|
};
|
|
473
489
|
const handlePointerLeave = (event) => {
|
|
@@ -524,14 +540,14 @@ function DropdownMenuSubContent(props) {
|
|
|
524
540
|
align = "start",
|
|
525
541
|
as,
|
|
526
542
|
render,
|
|
527
|
-
side
|
|
543
|
+
side,
|
|
528
544
|
children,
|
|
529
545
|
...consumerProps
|
|
530
546
|
} = props;
|
|
531
547
|
const sub = useSubContext("SubContent");
|
|
532
548
|
const root = useDropdownMenuContext("SubContent");
|
|
533
549
|
const handleKeyDown = (event) => {
|
|
534
|
-
const closeKey = root.dir === "rtl" ? "ArrowRight" : "ArrowLeft";
|
|
550
|
+
const closeKey = resolveDirection(event.currentTarget, root.dir) === "rtl" ? "ArrowRight" : "ArrowLeft";
|
|
535
551
|
if (event.key === closeKey || event.key === "Escape") {
|
|
536
552
|
event.preventDefault();
|
|
537
553
|
sub.popover.close();
|
|
@@ -546,7 +562,7 @@ function DropdownMenuSubContent(props) {
|
|
|
546
562
|
role: "menu",
|
|
547
563
|
"data-part": "sub-content",
|
|
548
564
|
"data-state": sub.open ? "open" : "closed",
|
|
549
|
-
"data-side": side,
|
|
565
|
+
"data-side": side ?? sub.resolvedSide,
|
|
550
566
|
"data-align": align,
|
|
551
567
|
onKeyDown: handleKeyDown,
|
|
552
568
|
onPointerLeave: (event) => {
|
|
@@ -562,7 +578,7 @@ function DropdownMenuSubContent(props) {
|
|
|
562
578
|
return /* @__PURE__ */ jsx(
|
|
563
579
|
RovingFocusRoot,
|
|
564
580
|
{
|
|
565
|
-
direction: root.dir,
|
|
581
|
+
...root.dir ? { direction: root.dir } : {},
|
|
566
582
|
loop: root.loop,
|
|
567
583
|
orientation: "vertical",
|
|
568
584
|
...contentProps,
|
|
@@ -573,7 +589,7 @@ function DropdownMenuSubContent(props) {
|
|
|
573
589
|
RovingFocusRoot,
|
|
574
590
|
{
|
|
575
591
|
as: as ?? "div",
|
|
576
|
-
direction: root.dir,
|
|
592
|
+
...root.dir ? { direction: root.dir } : {},
|
|
577
593
|
loop: root.loop,
|
|
578
594
|
orientation: "vertical",
|
|
579
595
|
...contentProps
|