@stridge/noctis 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -0
- package/dist/_virtual/_rolldown/runtime.js +27 -0
- package/dist/components/accordion/accordion.context.js +15 -0
- package/dist/components/accordion/accordion.d.ts +136 -0
- package/dist/components/accordion/accordion.js +132 -0
- package/dist/components/accordion/accordion.props.d.ts +45 -0
- package/dist/components/accordion/accordion.props.js +53 -0
- package/dist/components/accordion/accordion.slots.d.ts +24 -0
- package/dist/components/accordion/accordion.slots.js +39 -0
- package/dist/components/accordion/accordion.types.d.ts +11 -0
- package/dist/components/accordion/index.d.ts +3 -0
- package/dist/components/alert-dialog/alert-dialog.context.js +16 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +324 -0
- package/dist/components/alert-dialog/alert-dialog.js +279 -0
- package/dist/components/alert-dialog/alert-dialog.props.d.ts +85 -0
- package/dist/components/alert-dialog/alert-dialog.props.js +84 -0
- package/dist/components/alert-dialog/alert-dialog.slots.d.ts +29 -0
- package/dist/components/alert-dialog/alert-dialog.slots.js +52 -0
- package/dist/components/alert-dialog/alert-dialog.types.d.ts +22 -0
- package/dist/components/alert-dialog/index.d.ts +3 -0
- package/dist/components/autocomplete/autocomplete.context.d.ts +5 -0
- package/dist/components/autocomplete/autocomplete.context.js +13 -0
- package/dist/components/autocomplete/autocomplete.d.ts +364 -0
- package/dist/components/autocomplete/autocomplete.js +373 -0
- package/dist/components/autocomplete/autocomplete.props.d.ts +83 -0
- package/dist/components/autocomplete/autocomplete.props.js +63 -0
- package/dist/components/autocomplete/autocomplete.slots.d.ts +32 -0
- package/dist/components/autocomplete/autocomplete.slots.js +61 -0
- package/dist/components/autocomplete/index.d.ts +3 -0
- package/dist/components/avatar/avatar.context.js +21 -0
- package/dist/components/avatar/avatar.d.ts +235 -0
- package/dist/components/avatar/avatar.js +208 -0
- package/dist/components/avatar/avatar.props.d.ts +86 -0
- package/dist/components/avatar/avatar.props.js +78 -0
- package/dist/components/avatar/avatar.slots.d.ts +35 -0
- package/dist/components/avatar/avatar.slots.js +49 -0
- package/dist/components/avatar/avatar.types.d.ts +28 -0
- package/dist/components/avatar/index.d.ts +2 -0
- package/dist/components/button/button.d.ts +91 -0
- package/dist/components/button/button.js +82 -0
- package/dist/components/button/button.props.d.ts +48 -0
- package/dist/components/button/button.props.js +25 -0
- package/dist/components/button/button.slots.d.ts +30 -0
- package/dist/components/button/button.slots.js +40 -0
- package/dist/components/button/button.types.d.ts +12 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button-group/button-group.context.js +15 -0
- package/dist/components/button-group/button-group.d.ts +60 -0
- package/dist/components/button-group/button-group.js +50 -0
- package/dist/components/button-group/button-group.props.d.ts +22 -0
- package/dist/components/button-group/button-group.props.js +33 -0
- package/dist/components/button-group/button-group.slots.d.ts +12 -0
- package/dist/components/button-group/button-group.slots.js +18 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/checkbox/checkbox-group.d.ts +46 -0
- package/dist/components/checkbox/checkbox-group.js +31 -0
- package/dist/components/checkbox/checkbox.context.js +15 -0
- package/dist/components/checkbox/checkbox.d.ts +130 -0
- package/dist/components/checkbox/checkbox.js +117 -0
- package/dist/components/checkbox/checkbox.props.d.ts +84 -0
- package/dist/components/checkbox/checkbox.props.js +49 -0
- package/dist/components/checkbox/checkbox.slots.d.ts +27 -0
- package/dist/components/checkbox/checkbox.slots.js +40 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/code-block/brand-logo.d.ts +37 -0
- package/dist/components/code-block/brand-logo.js +212 -0
- package/dist/components/code-block/code-block.context.js +13 -0
- package/dist/components/code-block/code-block.d.ts +190 -0
- package/dist/components/code-block/code-block.js +267 -0
- package/dist/components/code-block/code-block.props.d.ts +42 -0
- package/dist/components/code-block/code-block.props.js +51 -0
- package/dist/components/code-block/code-block.slots.d.ts +16 -0
- package/dist/components/code-block/code-block.slots.js +31 -0
- package/dist/components/code-block/index.d.ts +3 -0
- package/dist/components/code-block/language-label.js +43 -0
- package/dist/components/collapsible/collapsible.context.js +18 -0
- package/dist/components/collapsible/collapsible.d.ts +167 -0
- package/dist/components/collapsible/collapsible.js +182 -0
- package/dist/components/collapsible/collapsible.props.d.ts +33 -0
- package/dist/components/collapsible/collapsible.props.js +44 -0
- package/dist/components/collapsible/collapsible.slots.d.ts +25 -0
- package/dist/components/collapsible/collapsible.slots.js +40 -0
- package/dist/components/collapsible/collapsible.types.d.ts +23 -0
- package/dist/components/collapsible/index.d.ts +2 -0
- package/dist/components/color-picker/area.d.ts +11 -0
- package/dist/components/color-picker/area.js +148 -0
- package/dist/components/color-picker/color-picker.d.ts +110 -0
- package/dist/components/color-picker/color-picker.js +149 -0
- package/dist/components/color-picker/color-picker.props.d.ts +69 -0
- package/dist/components/color-picker/color-picker.props.js +74 -0
- package/dist/components/color-picker/color-picker.slots.js +21 -0
- package/dist/components/color-picker/color.d.ts +18 -0
- package/dist/components/color-picker/color.js +224 -0
- package/dist/components/color-picker/context.d.ts +25 -0
- package/dist/components/color-picker/context.js +23 -0
- package/dist/components/color-picker/eyedropper.d.ts +14 -0
- package/dist/components/color-picker/eyedropper.js +50 -0
- package/dist/components/color-picker/format-tabs.d.ts +11 -0
- package/dist/components/color-picker/format-tabs.js +35 -0
- package/dist/components/color-picker/index.d.ts +3 -0
- package/dist/components/color-picker/inputs.d.ts +16 -0
- package/dist/components/color-picker/inputs.js +61 -0
- package/dist/components/color-picker/sliders.d.ts +17 -0
- package/dist/components/color-picker/sliders.js +94 -0
- package/dist/components/color-picker/store.js +48 -0
- package/dist/components/color-picker/swatch.d.ts +15 -0
- package/dist/components/color-picker/swatch.js +25 -0
- package/dist/components/color-swatch/color-swatch-picker.d.ts +87 -0
- package/dist/components/color-swatch/color-swatch-picker.js +73 -0
- package/dist/components/color-swatch/color-swatch.context.js +8 -0
- package/dist/components/color-swatch/color-swatch.d.ts +55 -0
- package/dist/components/color-swatch/color-swatch.js +48 -0
- package/dist/components/color-swatch/color-swatch.props.d.ts +54 -0
- package/dist/components/color-swatch/color-swatch.props.js +32 -0
- package/dist/components/color-swatch/color-swatch.slots.js +13 -0
- package/dist/components/color-swatch/index.d.ts +2 -0
- package/dist/components/combobox/combobox.context.js +13 -0
- package/dist/components/combobox/combobox.d.ts +328 -0
- package/dist/components/combobox/combobox.js +315 -0
- package/dist/components/combobox/combobox.props.d.ts +85 -0
- package/dist/components/combobox/combobox.props.js +79 -0
- package/dist/components/combobox/combobox.slots.d.ts +28 -0
- package/dist/components/combobox/combobox.slots.js +63 -0
- package/dist/components/combobox/index.d.ts +2 -0
- package/dist/components/context-menu/context-menu.d.ts +254 -0
- package/dist/components/context-menu/context-menu.js +150 -0
- package/dist/components/context-menu/context-menu.props.d.ts +22 -0
- package/dist/components/context-menu/context-menu.props.js +32 -0
- package/dist/components/context-menu/context-menu.slots.d.ts +24 -0
- package/dist/components/context-menu/context-menu.slots.js +42 -0
- package/dist/components/context-menu/index.d.ts +2 -0
- package/dist/components/copy-button/copy-button.d.ts +56 -0
- package/dist/components/copy-button/copy-button.js +88 -0
- package/dist/components/copy-button/copy-button.props.d.ts +27 -0
- package/dist/components/copy-button/copy-button.props.js +51 -0
- package/dist/components/copy-button/copy-button.slots.d.ts +20 -0
- package/dist/components/copy-button/copy-button.slots.js +36 -0
- package/dist/components/copy-button/index.d.ts +2 -0
- package/dist/components/dialog/dialog.context.js +15 -0
- package/dist/components/dialog/dialog.d.ts +299 -0
- package/dist/components/dialog/dialog.js +263 -0
- package/dist/components/dialog/dialog.props.d.ts +71 -0
- package/dist/components/dialog/dialog.props.js +75 -0
- package/dist/components/dialog/dialog.slots.d.ts +26 -0
- package/dist/components/dialog/dialog.slots.js +46 -0
- package/dist/components/dialog/dialog.types.d.ts +16 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/field/field.d.ts +221 -0
- package/dist/components/field/field.js +192 -0
- package/dist/components/field/field.props.d.ts +66 -0
- package/dist/components/field/field.props.js +65 -0
- package/dist/components/field/field.slots.d.ts +35 -0
- package/dist/components/field/field.slots.js +54 -0
- package/dist/components/field/field.types.d.ts +5 -0
- package/dist/components/field/index.d.ts +4 -0
- package/dist/components/inline-code/index.d.ts +1 -0
- package/dist/components/inline-code/inline-code.d.ts +46 -0
- package/dist/components/inline-code/inline-code.js +36 -0
- package/dist/components/inline-code/inline-code.props.d.ts +17 -0
- package/dist/components/inline-code/inline-code.props.js +27 -0
- package/dist/components/inline-code/inline-code.slots.js +8 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/input.context.js +13 -0
- package/dist/components/input/input.d.ts +161 -0
- package/dist/components/input/input.js +117 -0
- package/dist/components/input/input.props.d.ts +51 -0
- package/dist/components/input/input.props.js +50 -0
- package/dist/components/input/input.slots.d.ts +35 -0
- package/dist/components/input/input.slots.js +46 -0
- package/dist/components/input/input.types.d.ts +12 -0
- package/dist/components/kbd/glyphs.js +45 -0
- package/dist/components/kbd/index.d.ts +1 -0
- package/dist/components/kbd/kbd.d.ts +61 -0
- package/dist/components/kbd/kbd.js +233 -0
- package/dist/components/kbd/kbd.props.d.ts +30 -0
- package/dist/components/kbd/kbd.props.js +39 -0
- package/dist/components/kbd/kbd.slots.js +14 -0
- package/dist/components/kbd/use-apple-platform.js +25 -0
- package/dist/components/menu/index.d.ts +2 -0
- package/dist/components/menu/menu.d.ts +355 -0
- package/dist/components/menu/menu.js +263 -0
- package/dist/components/menu/menu.props.d.ts +92 -0
- package/dist/components/menu/menu.props.js +97 -0
- package/dist/components/menu/menu.slots.d.ts +32 -0
- package/dist/components/menu/menu.slots.js +60 -0
- package/dist/components/menubar/index.d.ts +2 -0
- package/dist/components/menubar/menubar.context.js +13 -0
- package/dist/components/menubar/menubar.d.ts +162 -0
- package/dist/components/menubar/menubar.js +122 -0
- package/dist/components/menubar/menubar.props.d.ts +41 -0
- package/dist/components/menubar/menubar.props.js +45 -0
- package/dist/components/menubar/menubar.slots.d.ts +26 -0
- package/dist/components/menubar/menubar.slots.js +40 -0
- package/dist/components/meter/index.d.ts +2 -0
- package/dist/components/meter/meter.context.d.ts +9 -0
- package/dist/components/meter/meter.context.js +13 -0
- package/dist/components/meter/meter.d.ts +163 -0
- package/dist/components/meter/meter.js +121 -0
- package/dist/components/meter/meter.props.d.ts +50 -0
- package/dist/components/meter/meter.props.js +33 -0
- package/dist/components/meter/meter.slots.d.ts +18 -0
- package/dist/components/meter/meter.slots.js +31 -0
- package/dist/components/navigation-menu/index.d.ts +2 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +328 -0
- package/dist/components/navigation-menu/navigation-menu.js +274 -0
- package/dist/components/navigation-menu/navigation-menu.props.d.ts +98 -0
- package/dist/components/navigation-menu/navigation-menu.props.js +90 -0
- package/dist/components/navigation-menu/navigation-menu.slots.d.ts +34 -0
- package/dist/components/navigation-menu/navigation-menu.slots.js +60 -0
- package/dist/components/number-field/index.d.ts +2 -0
- package/dist/components/number-field/number-field.context.d.ts +13 -0
- package/dist/components/number-field/number-field.context.js +13 -0
- package/dist/components/number-field/number-field.d.ts +197 -0
- package/dist/components/number-field/number-field.js +187 -0
- package/dist/components/number-field/number-field.props.d.ts +66 -0
- package/dist/components/number-field/number-field.props.js +50 -0
- package/dist/components/number-field/number-field.slots.d.ts +31 -0
- package/dist/components/number-field/number-field.slots.js +48 -0
- package/dist/components/otp-field/index.d.ts +3 -0
- package/dist/components/otp-field/otp-field.context.js +13 -0
- package/dist/components/otp-field/otp-field.d.ts +99 -0
- package/dist/components/otp-field/otp-field.js +76 -0
- package/dist/components/otp-field/otp-field.props.d.ts +48 -0
- package/dist/components/otp-field/otp-field.props.js +43 -0
- package/dist/components/otp-field/otp-field.slots.d.ts +28 -0
- package/dist/components/otp-field/otp-field.slots.js +39 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/popover.d.ts +192 -0
- package/dist/components/popover/popover.js +152 -0
- package/dist/components/popover/popover.props.d.ts +34 -0
- package/dist/components/popover/popover.props.js +44 -0
- package/dist/components/popover/popover.slots.d.ts +22 -0
- package/dist/components/popover/popover.slots.js +42 -0
- package/dist/components/preview-card/index.d.ts +2 -0
- package/dist/components/preview-card/preview-card.d.ts +182 -0
- package/dist/components/preview-card/preview-card.js +146 -0
- package/dist/components/preview-card/preview-card.props.d.ts +37 -0
- package/dist/components/preview-card/preview-card.props.js +48 -0
- package/dist/components/preview-card/preview-card.slots.d.ts +22 -0
- package/dist/components/preview-card/preview-card.slots.js +39 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/progress.context.d.ts +9 -0
- package/dist/components/progress/progress.context.js +13 -0
- package/dist/components/progress/progress.d.ts +139 -0
- package/dist/components/progress/progress.js +92 -0
- package/dist/components/progress/progress.props.d.ts +56 -0
- package/dist/components/progress/progress.props.js +38 -0
- package/dist/components/progress/progress.slots.d.ts +24 -0
- package/dist/components/progress/progress.slots.js +37 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/radio.context.js +5 -0
- package/dist/components/radio/radio.d.ts +205 -0
- package/dist/components/radio/radio.js +168 -0
- package/dist/components/radio/radio.props.d.ts +106 -0
- package/dist/components/radio/radio.props.js +65 -0
- package/dist/components/radio/radio.slots.d.ts +29 -0
- package/dist/components/radio/radio.slots.js +44 -0
- package/dist/components/rail/index.d.ts +3 -0
- package/dist/components/rail/rail.context.d.ts +17 -0
- package/dist/components/rail/rail.context.js +23 -0
- package/dist/components/rail/rail.d.ts +232 -0
- package/dist/components/rail/rail.js +254 -0
- package/dist/components/rail/rail.props.d.ts +98 -0
- package/dist/components/rail/rail.props.js +64 -0
- package/dist/components/rail/rail.slots.d.ts +20 -0
- package/dist/components/rail/rail.slots.js +40 -0
- package/dist/components/scroll-area/index.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.context.js +15 -0
- package/dist/components/scroll-area/scroll-area.d.ts +217 -0
- package/dist/components/scroll-area/scroll-area.js +153 -0
- package/dist/components/scroll-area/scroll-area.props.d.ts +73 -0
- package/dist/components/scroll-area/scroll-area.props.js +64 -0
- package/dist/components/scroll-area/scroll-area.slots.d.ts +40 -0
- package/dist/components/scroll-area/scroll-area.slots.js +54 -0
- package/dist/components/scroll-area/scroll-area.types.d.ts +24 -0
- package/dist/components/search-dialog/index.d.ts +3 -0
- package/dist/components/search-dialog/parts/input.d.ts +24 -0
- package/dist/components/search-dialog/parts/input.js +53 -0
- package/dist/components/search-dialog/parts/messages.d.ts +80 -0
- package/dist/components/search-dialog/parts/messages.js +75 -0
- package/dist/components/search-dialog/parts/results.d.ts +43 -0
- package/dist/components/search-dialog/parts/results.js +63 -0
- package/dist/components/search-dialog/parts/root.d.ts +54 -0
- package/dist/components/search-dialog/parts/root.js +99 -0
- package/dist/components/search-dialog/search-dialog.context.d.ts +15 -0
- package/dist/components/search-dialog/search-dialog.context.js +20 -0
- package/dist/components/search-dialog/search-dialog.d.ts +84 -0
- package/dist/components/search-dialog/search-dialog.js +43 -0
- package/dist/components/search-dialog/search-dialog.props.d.ts +45 -0
- package/dist/components/search-dialog/search-dialog.props.js +49 -0
- package/dist/components/search-dialog/search-dialog.slots.d.ts +16 -0
- package/dist/components/search-dialog/search-dialog.slots.js +32 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/select.context.js +17 -0
- package/dist/components/select/select.d.ts +356 -0
- package/dist/components/select/select.js +314 -0
- package/dist/components/select/select.props.d.ts +110 -0
- package/dist/components/select/select.props.js +103 -0
- package/dist/components/select/select.slots.d.ts +38 -0
- package/dist/components/select/select.slots.js +67 -0
- package/dist/components/separator/index.d.ts +2 -0
- package/dist/components/separator/separator.d.ts +69 -0
- package/dist/components/separator/separator.js +44 -0
- package/dist/components/separator/separator.props.d.ts +30 -0
- package/dist/components/separator/separator.props.js +30 -0
- package/dist/components/separator/separator.slots.d.ts +22 -0
- package/dist/components/separator/separator.slots.js +21 -0
- package/dist/components/separator/separator.types.d.ts +5 -0
- package/dist/components/sheet/index.d.ts +3 -0
- package/dist/components/sheet/sheet-stack.d.ts +106 -0
- package/dist/components/sheet/sheet-stack.js +146 -0
- package/dist/components/sheet/sheet.d.ts +279 -0
- package/dist/components/sheet/sheet.js +264 -0
- package/dist/components/sheet/sheet.props.d.ts +74 -0
- package/dist/components/sheet/sheet.props.js +77 -0
- package/dist/components/sheet/sheet.slots.js +22 -0
- package/dist/components/sheet/sheet.types.d.ts +12 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/slider.context.d.ts +5 -0
- package/dist/components/slider/slider.context.js +29 -0
- package/dist/components/slider/slider.d.ts +230 -0
- package/dist/components/slider/slider.js +274 -0
- package/dist/components/slider/slider.props.d.ts +72 -0
- package/dist/components/slider/slider.props.js +59 -0
- package/dist/components/slider/slider.slots.d.ts +30 -0
- package/dist/components/slider/slider.slots.js +50 -0
- package/dist/components/surface/index.d.ts +1 -0
- package/dist/components/surface/surface.d.ts +84 -0
- package/dist/components/surface/surface.js +48 -0
- package/dist/components/surface/surface.props.d.ts +35 -0
- package/dist/components/surface/surface.props.js +26 -0
- package/dist/components/surface/surface.slots.js +9 -0
- package/dist/components/surface/surface.types.d.ts +14 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/switch.context.js +14 -0
- package/dist/components/switch/switch.d.ts +110 -0
- package/dist/components/switch/switch.js +92 -0
- package/dist/components/switch/switch.props.d.ts +68 -0
- package/dist/components/switch/switch.props.js +41 -0
- package/dist/components/switch/switch.slots.d.ts +23 -0
- package/dist/components/switch/switch.slots.js +35 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/table.d.ts +104 -0
- package/dist/components/table/table.js +92 -0
- package/dist/components/table/table.props.d.ts +38 -0
- package/dist/components/table/table.props.js +49 -0
- package/dist/components/table/table.slots.js +17 -0
- package/dist/components/tabs/index.d.ts +2 -0
- package/dist/components/tabs/tabs.context.d.ts +9 -0
- package/dist/components/tabs/tabs.context.js +13 -0
- package/dist/components/tabs/tabs.d.ts +139 -0
- package/dist/components/tabs/tabs.js +118 -0
- package/dist/components/tabs/tabs.props.d.ts +59 -0
- package/dist/components/tabs/tabs.props.js +39 -0
- package/dist/components/tabs/tabs.slots.d.ts +20 -0
- package/dist/components/tabs/tabs.slots.js +33 -0
- package/dist/components/textarea/index.d.ts +3 -0
- package/dist/components/textarea/textarea.context.js +13 -0
- package/dist/components/textarea/textarea.d.ts +142 -0
- package/dist/components/textarea/textarea.js +129 -0
- package/dist/components/textarea/textarea.props.d.ts +44 -0
- package/dist/components/textarea/textarea.props.js +32 -0
- package/dist/components/textarea/textarea.slots.d.ts +23 -0
- package/dist/components/textarea/textarea.slots.js +33 -0
- package/dist/components/textarea/textarea.types.d.ts +5 -0
- package/dist/components/toast/index.d.ts +4 -0
- package/dist/components/toast/toast.d.ts +241 -0
- package/dist/components/toast/toast.js +193 -0
- package/dist/components/toast/toast.manager.d.ts +76 -0
- package/dist/components/toast/toast.manager.js +71 -0
- package/dist/components/toast/toast.props.d.ts +66 -0
- package/dist/components/toast/toast.props.js +74 -0
- package/dist/components/toast/toast.slots.d.ts +30 -0
- package/dist/components/toast/toast.slots.js +49 -0
- package/dist/components/toast/toast.types.d.ts +19 -0
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle/toggle.context.d.ts +11 -0
- package/dist/components/toggle/toggle.context.js +14 -0
- package/dist/components/toggle/toggle.d.ts +136 -0
- package/dist/components/toggle/toggle.js +101 -0
- package/dist/components/toggle/toggle.props.d.ts +51 -0
- package/dist/components/toggle/toggle.props.js +29 -0
- package/dist/components/toggle/toggle.slots.d.ts +26 -0
- package/dist/components/toggle/toggle.slots.js +36 -0
- package/dist/components/toolbar/index.d.ts +3 -0
- package/dist/components/toolbar/toolbar.context.js +23 -0
- package/dist/components/toolbar/toolbar.d.ts +218 -0
- package/dist/components/toolbar/toolbar.js +197 -0
- package/dist/components/toolbar/toolbar.props.d.ts +54 -0
- package/dist/components/toolbar/toolbar.props.js +55 -0
- package/dist/components/toolbar/toolbar.slots.d.ts +24 -0
- package/dist/components/toolbar/toolbar.slots.js +37 -0
- package/dist/components/toolbar/toolbar.types.d.ts +15 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/tooltip.d.ts +170 -0
- package/dist/components/tooltip/tooltip.js +143 -0
- package/dist/components/tooltip/tooltip.props.d.ts +36 -0
- package/dist/components/tooltip/tooltip.props.js +42 -0
- package/dist/components/tooltip/tooltip.slots.d.ts +26 -0
- package/dist/components/tooltip/tooltip.slots.js +42 -0
- package/dist/core/derive-threshold-tone.js +35 -0
- package/dist/core/merge-class-name.d.ts +17 -0
- package/dist/core/merge-class-name.js +16 -0
- package/dist/core/noctis-provider.d.ts +38 -0
- package/dist/core/noctis-provider.js +44 -0
- package/dist/core/primitive/index.d.ts +1 -0
- package/dist/core/primitive/primitive.d.ts +44 -0
- package/dist/core/primitive/primitive.js +27 -0
- package/dist/core/radius-scope/index.d.ts +2 -0
- package/dist/core/radius-scope/radius-scope.d.ts +43 -0
- package/dist/core/radius-scope/radius-scope.js +36 -0
- package/dist/core/radius-scope/radius-scope.styles.d.ts +13 -0
- package/dist/core/radius-scope/radius-scope.styles.js +11 -0
- package/dist/core/render.d.ts +24 -0
- package/dist/core/render.js +12 -0
- package/dist/core/use-copy.d.ts +13 -0
- package/dist/core/use-copy.js +30 -0
- package/dist/core/use-injected-labels.js +55 -0
- package/dist/core/use-reduced-motion.d.ts +9 -0
- package/dist/core/use-reduced-motion.js +26 -0
- package/dist/core/visually-hidden/index.d.ts +1 -0
- package/dist/core/visually-hidden/visually-hidden.d.ts +24 -0
- package/dist/core/visually-hidden/visually-hidden.js +19 -0
- package/dist/i18n/default-messages.d.ts +12 -0
- package/dist/i18n/default-messages.js +10 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/messages/index.d.ts +2 -0
- package/dist/i18n/messages/index.js +2 -0
- package/dist/icons/glyphs.d.ts +2 -0
- package/dist/icons/glyphs.js +2 -0
- package/dist/icons/icon.d.ts +40 -0
- package/dist/icons/icon.js +26 -0
- package/dist/icons/icon.styles.d.ts +9 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/index.d.ts +126 -0
- package/dist/index.js +112 -0
- package/dist/primitives/accordion.d.ts +7 -0
- package/dist/primitives/accordion.js +8 -0
- package/dist/primitives/alert-dialog.d.ts +7 -0
- package/dist/primitives/alert-dialog.js +8 -0
- package/dist/primitives/autocomplete/autocomplete.d.ts +58 -0
- package/dist/primitives/autocomplete/autocomplete.js +58 -0
- package/dist/primitives/autocomplete/index.d.ts +1 -0
- package/dist/primitives/autocomplete.d.ts +2 -0
- package/dist/primitives/autocomplete.js +2 -0
- package/dist/primitives/avatar.d.ts +7 -0
- package/dist/primitives/avatar.js +8 -0
- package/dist/primitives/button.d.ts +7 -0
- package/dist/primitives/button.js +8 -0
- package/dist/primitives/checkbox-group.d.ts +7 -0
- package/dist/primitives/checkbox-group.js +8 -0
- package/dist/primitives/checkbox.d.ts +7 -0
- package/dist/primitives/checkbox.js +8 -0
- package/dist/primitives/collapsible.d.ts +7 -0
- package/dist/primitives/collapsible.js +8 -0
- package/dist/primitives/combobox/combobox.d.ts +71 -0
- package/dist/primitives/combobox/combobox.js +66 -0
- package/dist/primitives/combobox/index.d.ts +1 -0
- package/dist/primitives/combobox.d.ts +2 -0
- package/dist/primitives/combobox.js +2 -0
- package/dist/primitives/context-menu.d.ts +7 -0
- package/dist/primitives/context-menu.js +8 -0
- package/dist/primitives/csp-provider.d.ts +1 -0
- package/dist/primitives/csp-provider.js +2 -0
- package/dist/primitives/dialog.d.ts +7 -0
- package/dist/primitives/dialog.js +8 -0
- package/dist/primitives/direction-provider.d.ts +1 -0
- package/dist/primitives/direction-provider.js +8 -0
- package/dist/primitives/drawer.d.ts +1 -0
- package/dist/primitives/drawer.js +2 -0
- package/dist/primitives/field.d.ts +7 -0
- package/dist/primitives/field.js +8 -0
- package/dist/primitives/fieldset.d.ts +7 -0
- package/dist/primitives/fieldset.js +8 -0
- package/dist/primitives/form.d.ts +7 -0
- package/dist/primitives/form.js +8 -0
- package/dist/primitives/index.d.ts +79 -0
- package/dist/primitives/index.js +113 -0
- package/dist/primitives/input.d.ts +7 -0
- package/dist/primitives/input.js +8 -0
- package/dist/primitives/menu.d.ts +7 -0
- package/dist/primitives/menu.js +8 -0
- package/dist/primitives/menubar.d.ts +7 -0
- package/dist/primitives/menubar.js +8 -0
- package/dist/primitives/meter/index.d.ts +1 -0
- package/dist/primitives/meter/meter.d.ts +56 -0
- package/dist/primitives/meter/meter.js +59 -0
- package/dist/primitives/meter.d.ts +2 -0
- package/dist/primitives/meter.js +2 -0
- package/dist/primitives/navigation-menu.d.ts +7 -0
- package/dist/primitives/navigation-menu.js +8 -0
- package/dist/primitives/number-field/context.d.ts +13 -0
- package/dist/primitives/number-field/context.js +36 -0
- package/dist/primitives/number-field/index.d.ts +2 -0
- package/dist/primitives/number-field/number-field.d.ts +90 -0
- package/dist/primitives/number-field/number-field.js +107 -0
- package/dist/primitives/number-field.d.ts +3 -0
- package/dist/primitives/number-field.js +2 -0
- package/dist/primitives/otp-field.d.ts +7 -0
- package/dist/primitives/otp-field.js +8 -0
- package/dist/primitives/popover.d.ts +7 -0
- package/dist/primitives/popover.js +8 -0
- package/dist/primitives/preview-card.d.ts +7 -0
- package/dist/primitives/preview-card.js +8 -0
- package/dist/primitives/progress/index.d.ts +1 -0
- package/dist/primitives/progress/progress.d.ts +56 -0
- package/dist/primitives/progress/progress.js +59 -0
- package/dist/primitives/progress.d.ts +2 -0
- package/dist/primitives/progress.js +2 -0
- package/dist/primitives/radio-group.d.ts +7 -0
- package/dist/primitives/radio-group.js +8 -0
- package/dist/primitives/radio.d.ts +7 -0
- package/dist/primitives/radio.js +8 -0
- package/dist/primitives/scroll-area.d.ts +7 -0
- package/dist/primitives/scroll-area.js +8 -0
- package/dist/primitives/select.d.ts +7 -0
- package/dist/primitives/select.js +8 -0
- package/dist/primitives/separator.d.ts +7 -0
- package/dist/primitives/separator.js +8 -0
- package/dist/primitives/slider/context.d.ts +12 -0
- package/dist/primitives/slider/context.js +18 -0
- package/dist/primitives/slider/index.d.ts +2 -0
- package/dist/primitives/slider/slider.d.ts +83 -0
- package/dist/primitives/slider/slider.js +99 -0
- package/dist/primitives/slider.d.ts +3 -0
- package/dist/primitives/slider.js +2 -0
- package/dist/primitives/switch.d.ts +1 -0
- package/dist/primitives/switch.js +2 -0
- package/dist/primitives/tabs.d.ts +7 -0
- package/dist/primitives/tabs.js +8 -0
- package/dist/primitives/toast/context.d.ts +11 -0
- package/dist/primitives/toast/context.js +18 -0
- package/dist/primitives/toast/index.d.ts +2 -0
- package/dist/primitives/toast/toast.d.ts +122 -0
- package/dist/primitives/toast/toast.js +133 -0
- package/dist/primitives/toast.d.ts +3 -0
- package/dist/primitives/toast.js +2 -0
- package/dist/primitives/toggle-group.d.ts +7 -0
- package/dist/primitives/toggle-group.js +8 -0
- package/dist/primitives/toggle.d.ts +7 -0
- package/dist/primitives/toggle.js +8 -0
- package/dist/primitives/toolbar.d.ts +7 -0
- package/dist/primitives/toolbar.js +8 -0
- package/dist/primitives/tooltip.d.ts +7 -0
- package/dist/primitives/tooltip.js +8 -0
- package/dist/props.d.ts +46 -0
- package/dist/props.js +46 -0
- package/dist/styles.css +11513 -0
- package/dist/tailwind/cn.d.ts +33 -0
- package/dist/tailwind/cn.js +42 -0
- package/dist/tailwind/index.d.ts +3 -0
- package/dist/tailwind/index.js +3 -0
- package/dist/tailwind/tv.d.ts +20 -0
- package/dist/tailwind/tv.js +11 -0
- package/dist/tailwind.css +485 -0
- package/dist/theme/react.d.ts +1 -0
- package/dist/theme/react.js +1 -0
- package/dist/theme.d.ts +1 -0
- package/dist/theme.js +1 -0
- package/dist/tokens/react.d.ts +1 -0
- package/dist/tokens/react.js +1 -0
- package/dist/tokens.d.ts +1 -0
- package/dist/tokens.js +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Icon } from "../../../icons/icon.js";
|
|
3
|
+
import { SearchIcon, SpinnerIcon } from "../../../icons/glyphs.js";
|
|
4
|
+
import { dialog_exports } from "../../../primitives/dialog.js";
|
|
5
|
+
import { useSearchDialogContext } from "../search-dialog.context.js";
|
|
6
|
+
import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/search-dialog/parts/input.tsx
|
|
9
|
+
/**
|
|
10
|
+
* The header row: the search glyph, the query field, an in-flight spinner, and the `Esc` close chip.
|
|
11
|
+
* Reads the query, the in-flight state, and the key handler from context; the field auto-focuses when
|
|
12
|
+
* the dialog opens (`SearchDialog.Root` points Base UI's `initialFocus` at it). The `Esc` chip's label
|
|
13
|
+
* stays decorative — the dialog's own Escape handling closes it.
|
|
14
|
+
*
|
|
15
|
+
* Slot: `search-dialog-header` on the row, `search-dialog-input` on the field.
|
|
16
|
+
*
|
|
17
|
+
* @see {@link SearchDialog.Input.Props}
|
|
18
|
+
*/
|
|
19
|
+
function SearchDialogInput({ placeholder, ...props }) {
|
|
20
|
+
const { state, actions, meta } = useSearchDialogContext("Input");
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
22
|
+
"data-slot": SEARCH_DIALOG_SLOTS.header,
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Icon, {
|
|
25
|
+
icon: SearchIcon,
|
|
26
|
+
size: "sm"
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ jsx("input", {
|
|
29
|
+
...props,
|
|
30
|
+
ref: meta.inputRef,
|
|
31
|
+
"data-slot": SEARCH_DIALOG_SLOTS.input,
|
|
32
|
+
type: "search",
|
|
33
|
+
value: state.query,
|
|
34
|
+
onChange: (event) => actions.setQuery(event.target.value),
|
|
35
|
+
onKeyDown: actions.onKeyDown,
|
|
36
|
+
placeholder,
|
|
37
|
+
"aria-label": meta.title,
|
|
38
|
+
autoComplete: "off",
|
|
39
|
+
spellCheck: false
|
|
40
|
+
}),
|
|
41
|
+
state.searching ? /* @__PURE__ */ jsx(Icon, {
|
|
42
|
+
icon: SpinnerIcon,
|
|
43
|
+
size: "sm"
|
|
44
|
+
}) : null,
|
|
45
|
+
/* @__PURE__ */ jsx(dialog_exports.Dialog.Close, {
|
|
46
|
+
"data-allow-literal": true,
|
|
47
|
+
children: "Esc"
|
|
48
|
+
})
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { SearchDialogInput };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/search-dialog/parts/messages.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* The loading message, shown while the search index is still loading — before any query can run.
|
|
6
|
+
* Renders nothing once the index is ready.
|
|
7
|
+
*
|
|
8
|
+
* Slot: none — rendered inside the result pane; the loading state, not an element, marks it.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link SearchDialog.Loading.Props}
|
|
11
|
+
*/
|
|
12
|
+
declare function SearchDialogLoading({
|
|
13
|
+
children
|
|
14
|
+
}: SearchDialogLoading.Props): ReactElement | null;
|
|
15
|
+
declare namespace SearchDialogLoading {
|
|
16
|
+
type Props = {
|
|
17
|
+
/** The loading copy. */children?: ReactNode;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The non-result messages: the empty-query prompt, the in-flight `searching` line, and the
|
|
22
|
+
* `noResults` line (which receives the trimmed query so it can quote the term). The root gates which
|
|
23
|
+
* one shows; the part only supplies the copy, so it renders nothing while results are present.
|
|
24
|
+
*
|
|
25
|
+
* Slot: none — rendered inside the result pane; the gated state, not an element, marks it.
|
|
26
|
+
*
|
|
27
|
+
* @see {@link SearchDialog.Empty.Props}
|
|
28
|
+
*/
|
|
29
|
+
declare function SearchDialogEmpty({
|
|
30
|
+
children,
|
|
31
|
+
searching,
|
|
32
|
+
noResults
|
|
33
|
+
}: SearchDialogEmpty.Props): ReactElement | null;
|
|
34
|
+
declare namespace SearchDialogEmpty {
|
|
35
|
+
type Props = {
|
|
36
|
+
/** The empty-query prompt, shown before anything is typed. */children?: ReactNode; /** The in-flight line, shown while a query is searching with nothing settled yet. */
|
|
37
|
+
searching?: ReactNode; /** The leading no-results copy; the quoted query is appended after it. */
|
|
38
|
+
noResults?: ReactNode;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The footer row holding the keyboard hints.
|
|
43
|
+
*
|
|
44
|
+
* Slot: `search-dialog-footer`.
|
|
45
|
+
*
|
|
46
|
+
* @see {@link SearchDialog.Footer.Props}
|
|
47
|
+
*/
|
|
48
|
+
declare function SearchDialogFooter({
|
|
49
|
+
children,
|
|
50
|
+
className,
|
|
51
|
+
...props
|
|
52
|
+
}: SearchDialogFooter.Props): ReactElement;
|
|
53
|
+
declare namespace SearchDialogFooter {
|
|
54
|
+
type Props = {
|
|
55
|
+
/** The `SearchDialog.Hint`s. */children?: ReactNode; /** Classes merged onto the footer. */
|
|
56
|
+
className?: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One footer hint: a keys cluster (compose `Kbd`s) beside its label.
|
|
61
|
+
*
|
|
62
|
+
* Slot: none — rendered inside the footer.
|
|
63
|
+
*
|
|
64
|
+
* @see {@link SearchDialog.Hint.Props}
|
|
65
|
+
*/
|
|
66
|
+
declare function SearchDialogHint({
|
|
67
|
+
label,
|
|
68
|
+
children,
|
|
69
|
+
className,
|
|
70
|
+
...props
|
|
71
|
+
}: SearchDialogHint.Props): ReactElement;
|
|
72
|
+
declare namespace SearchDialogHint {
|
|
73
|
+
type Props = {
|
|
74
|
+
/** What the keys do. */label?: ReactNode; /** The keys — typically one or more `Kbd`s. */
|
|
75
|
+
children?: ReactNode; /** Classes merged onto the hint. */
|
|
76
|
+
className?: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
export { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { searchDialogPhase, useSearchDialogContext } from "../search-dialog.context.js";
|
|
3
|
+
import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
|
|
4
|
+
import clsx$1 from "clsx";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/search-dialog/parts/messages.tsx
|
|
7
|
+
/** The centred message shell shared by the loading and empty states, filling the result pane. */
|
|
8
|
+
function Centered({ children }) {
|
|
9
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { children }) }) });
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The loading message, shown while the search index is still loading — before any query can run.
|
|
13
|
+
* Renders nothing once the index is ready.
|
|
14
|
+
*
|
|
15
|
+
* Slot: none — rendered inside the result pane; the loading state, not an element, marks it.
|
|
16
|
+
*
|
|
17
|
+
* @see {@link SearchDialog.Loading.Props}
|
|
18
|
+
*/
|
|
19
|
+
function SearchDialogLoading({ children }) {
|
|
20
|
+
const { state } = useSearchDialogContext("Loading");
|
|
21
|
+
if (searchDialogPhase(state) !== "loading") return null;
|
|
22
|
+
return /* @__PURE__ */ jsx(Centered, { children });
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The non-result messages: the empty-query prompt, the in-flight `searching` line, and the
|
|
26
|
+
* `noResults` line (which receives the trimmed query so it can quote the term). The root gates which
|
|
27
|
+
* one shows; the part only supplies the copy, so it renders nothing while results are present.
|
|
28
|
+
*
|
|
29
|
+
* Slot: none — rendered inside the result pane; the gated state, not an element, marks it.
|
|
30
|
+
*
|
|
31
|
+
* @see {@link SearchDialog.Empty.Props}
|
|
32
|
+
*/
|
|
33
|
+
function SearchDialogEmpty({ children, searching, noResults }) {
|
|
34
|
+
const { state } = useSearchDialogContext("Empty");
|
|
35
|
+
const phase = searchDialogPhase(state);
|
|
36
|
+
if (phase === "empty") return /* @__PURE__ */ jsx(Centered, { children });
|
|
37
|
+
if (phase === "searching") return /* @__PURE__ */ jsx(Centered, { children: searching });
|
|
38
|
+
if (phase === "no-results") return /* @__PURE__ */ jsxs(Centered, { children: [
|
|
39
|
+
noResults,
|
|
40
|
+
" ",
|
|
41
|
+
/* @__PURE__ */ jsx("span", { children: `“${state.query.trim()}”` })
|
|
42
|
+
] });
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The footer row holding the keyboard hints.
|
|
47
|
+
*
|
|
48
|
+
* Slot: `search-dialog-footer`.
|
|
49
|
+
*
|
|
50
|
+
* @see {@link SearchDialog.Footer.Props}
|
|
51
|
+
*/
|
|
52
|
+
function SearchDialogFooter({ children, className, ...props }) {
|
|
53
|
+
return /* @__PURE__ */ jsx("div", {
|
|
54
|
+
"data-slot": SEARCH_DIALOG_SLOTS.footer,
|
|
55
|
+
className: clsx$1(className),
|
|
56
|
+
...props,
|
|
57
|
+
children
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* One footer hint: a keys cluster (compose `Kbd`s) beside its label.
|
|
62
|
+
*
|
|
63
|
+
* Slot: none — rendered inside the footer.
|
|
64
|
+
*
|
|
65
|
+
* @see {@link SearchDialog.Hint.Props}
|
|
66
|
+
*/
|
|
67
|
+
function SearchDialogHint({ label, children, className, ...props }) {
|
|
68
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
69
|
+
className: clsx$1(className),
|
|
70
|
+
...props,
|
|
71
|
+
children: [/* @__PURE__ */ jsx("span", { children }), /* @__PURE__ */ jsx("span", { children: label })]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SearchResult } from "../search-dialog.context.js";
|
|
2
|
+
import { ReactElement, ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/search-dialog/parts/results.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* The listbox container holding the result rows. Reads the listbox ref from context so the root can
|
|
7
|
+
* scroll the active row into view, and renders nothing unless there are results to show — the empty,
|
|
8
|
+
* loading, and searching states are owned by `SearchDialog.Empty` / `SearchDialog.Loading`.
|
|
9
|
+
*
|
|
10
|
+
* Slot: `search-dialog-results`.
|
|
11
|
+
*
|
|
12
|
+
* @see {@link SearchDialog.Results.Props}
|
|
13
|
+
*/
|
|
14
|
+
declare function SearchDialogResults({
|
|
15
|
+
children
|
|
16
|
+
}: SearchDialogResults.Props): ReactElement | null;
|
|
17
|
+
declare namespace SearchDialogResults {
|
|
18
|
+
type Props = {
|
|
19
|
+
/** One `SearchDialog.Item` per result. */children?: ReactNode;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* One result row — its title opposite a crumb or method+path, over an optional `<mark>`-highlighted
|
|
24
|
+
* excerpt. Reads its active state and the select action from context off its `index`; pointer hover
|
|
25
|
+
* makes it active, click chooses it. The excerpt is trusted HTML (Pagefind escapes it and wraps only
|
|
26
|
+
* matched terms in `<mark>`).
|
|
27
|
+
*
|
|
28
|
+
* Slot: `search-dialog-result`.
|
|
29
|
+
*
|
|
30
|
+
* @see {@link SearchDialog.Item.Props}
|
|
31
|
+
*/
|
|
32
|
+
declare function SearchDialogItem({
|
|
33
|
+
result,
|
|
34
|
+
index
|
|
35
|
+
}: SearchDialogItem.Props): ReactElement;
|
|
36
|
+
declare namespace SearchDialogItem {
|
|
37
|
+
type Props = {
|
|
38
|
+
/** The hit this row renders. */result: SearchResult; /** This row's zero-based position, matched against the active row. */
|
|
39
|
+
index: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { SearchDialogItem, SearchDialogResults };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Icon } from "../../../icons/icon.js";
|
|
3
|
+
import { FileIcon } from "../../../icons/glyphs.js";
|
|
4
|
+
import { searchDialogPhase, useSearchDialogContext } from "../search-dialog.context.js";
|
|
5
|
+
import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/search-dialog/parts/results.tsx
|
|
8
|
+
/**
|
|
9
|
+
* The listbox container holding the result rows. Reads the listbox ref from context so the root can
|
|
10
|
+
* scroll the active row into view, and renders nothing unless there are results to show — the empty,
|
|
11
|
+
* loading, and searching states are owned by `SearchDialog.Empty` / `SearchDialog.Loading`.
|
|
12
|
+
*
|
|
13
|
+
* Slot: `search-dialog-results`.
|
|
14
|
+
*
|
|
15
|
+
* @see {@link SearchDialog.Results.Props}
|
|
16
|
+
*/
|
|
17
|
+
function SearchDialogResults({ children }) {
|
|
18
|
+
const { state, meta } = useSearchDialogContext("Results");
|
|
19
|
+
if (searchDialogPhase(state) !== "results") return null;
|
|
20
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", {
|
|
21
|
+
ref: meta.listRef,
|
|
22
|
+
"data-slot": SEARCH_DIALOG_SLOTS.results,
|
|
23
|
+
role: "listbox",
|
|
24
|
+
"aria-label": meta.title,
|
|
25
|
+
"data-custom-scrollbar": true,
|
|
26
|
+
children
|
|
27
|
+
}) });
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One result row — its title opposite a crumb or method+path, over an optional `<mark>`-highlighted
|
|
31
|
+
* excerpt. Reads its active state and the select action from context off its `index`; pointer hover
|
|
32
|
+
* makes it active, click chooses it. The excerpt is trusted HTML (Pagefind escapes it and wraps only
|
|
33
|
+
* matched terms in `<mark>`).
|
|
34
|
+
*
|
|
35
|
+
* Slot: `search-dialog-result`.
|
|
36
|
+
*
|
|
37
|
+
* @see {@link SearchDialog.Item.Props}
|
|
38
|
+
*/
|
|
39
|
+
function SearchDialogItem({ result, index }) {
|
|
40
|
+
const { state, actions } = useSearchDialogContext("Item");
|
|
41
|
+
const active = index === state.active;
|
|
42
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
43
|
+
"data-slot": SEARCH_DIALOG_SLOTS.result,
|
|
44
|
+
type: "button",
|
|
45
|
+
role: "option",
|
|
46
|
+
"aria-selected": active,
|
|
47
|
+
"data-index": index,
|
|
48
|
+
onMouseMove: () => actions.setActive(index),
|
|
49
|
+
onClick: () => actions.select(index),
|
|
50
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
51
|
+
icon: FileIcon,
|
|
52
|
+
size: "sm"
|
|
53
|
+
}), /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("span", { children: result.title }), result.method && result.path ? /* @__PURE__ */ jsxs("span", {
|
|
54
|
+
"data-allow-literal": true,
|
|
55
|
+
children: [/* @__PURE__ */ jsx("span", { children: result.method }), /* @__PURE__ */ jsx("span", { children: result.path })]
|
|
56
|
+
}) : result.crumb && /* @__PURE__ */ jsx("span", {
|
|
57
|
+
"data-allow-literal": true,
|
|
58
|
+
children: result.crumb
|
|
59
|
+
})] }), result.excerpt && /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: result.excerpt } })] })]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
export { SearchDialogItem, SearchDialogResults };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SearchResult } from "../search-dialog.context.js";
|
|
2
|
+
import { ReactElement, ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/search-dialog/parts/root.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Owns the dialog chassis and the keyboard contract, and shares the query, results, and active row
|
|
7
|
+
* with every part through context. Built on Base UI's `Dialog` (focus trap, dismissal) with a `Surface`
|
|
8
|
+
* popup for the elevated chrome; ↑/↓ move the active row, Enter opens it, Esc closes. The caller runs
|
|
9
|
+
* the search and feeds `results`, so the dialog is index-agnostic. Compose `SearchDialog.Input`, the
|
|
10
|
+
* `SearchDialog.Loading` / `SearchDialog.Empty` messages, a `SearchDialog.Results` of
|
|
11
|
+
* `SearchDialog.Item`s, and a `SearchDialog.Footer` of `SearchDialog.Hint`s as children.
|
|
12
|
+
*
|
|
13
|
+
* @see {@link SearchDialog.Root.Props}
|
|
14
|
+
*/
|
|
15
|
+
declare function SearchDialogRoot({
|
|
16
|
+
open,
|
|
17
|
+
onOpenChange,
|
|
18
|
+
query,
|
|
19
|
+
onQueryChange,
|
|
20
|
+
results,
|
|
21
|
+
loading,
|
|
22
|
+
searching,
|
|
23
|
+
onSelect,
|
|
24
|
+
title,
|
|
25
|
+
children
|
|
26
|
+
}: SearchDialogRoot.Props): ReactElement;
|
|
27
|
+
declare namespace SearchDialogRoot {
|
|
28
|
+
type Props = {
|
|
29
|
+
/** Whether the dialog is open. */open: boolean; /** Called when the open state should change (backdrop, Esc, dismissal). */
|
|
30
|
+
onOpenChange: (open: boolean) => void; /** The current query (controlled). */
|
|
31
|
+
query: string; /** Called as the query field changes. */
|
|
32
|
+
onQueryChange: (query: string) => void; /** The results to render — the caller runs the search and feeds settled results. */
|
|
33
|
+
results: readonly SearchResult[];
|
|
34
|
+
/**
|
|
35
|
+
* The search index is still loading, before any query can run.
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
loading?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* A query is in flight (debounced search not yet settled).
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
searching?: boolean; /** Called when a result is chosen (click or Enter). */
|
|
44
|
+
onSelect: (result: SearchResult, index: number) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Accessible dialog title and input label.
|
|
47
|
+
* @default "Search"
|
|
48
|
+
*/
|
|
49
|
+
title?: string; /** The dialog parts — `Input`, the `Loading` / `Empty` messages, `Results`, and `Footer`. */
|
|
50
|
+
children?: ReactNode;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { SearchDialogRoot };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { VisuallyHidden } from "../../../core/visually-hidden/visually-hidden.js";
|
|
3
|
+
import { SearchDialogProvider } from "../search-dialog.context.js";
|
|
4
|
+
import { SEARCH_DIALOG_SLOTS } from "../search-dialog.slots.js";
|
|
5
|
+
import { Dialog } from "../../dialog/dialog.js";
|
|
6
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/search-dialog/parts/root.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Owns the dialog chassis and the keyboard contract, and shares the query, results, and active row
|
|
11
|
+
* with every part through context. Built on Base UI's `Dialog` (focus trap, dismissal) with a `Surface`
|
|
12
|
+
* popup for the elevated chrome; ↑/↓ move the active row, Enter opens it, Esc closes. The caller runs
|
|
13
|
+
* the search and feeds `results`, so the dialog is index-agnostic. Compose `SearchDialog.Input`, the
|
|
14
|
+
* `SearchDialog.Loading` / `SearchDialog.Empty` messages, a `SearchDialog.Results` of
|
|
15
|
+
* `SearchDialog.Item`s, and a `SearchDialog.Footer` of `SearchDialog.Hint`s as children.
|
|
16
|
+
*
|
|
17
|
+
* @see {@link SearchDialog.Root.Props}
|
|
18
|
+
*/
|
|
19
|
+
function SearchDialogRoot({ open, onOpenChange, query, onQueryChange, results, loading = false, searching = false, onSelect, title = "Search", children }) {
|
|
20
|
+
const inputRef = useRef(null);
|
|
21
|
+
const listRef = useRef(null);
|
|
22
|
+
const [active, setActive] = useState(0);
|
|
23
|
+
useEffect(() => setActive(0), [results]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const row = listRef.current?.querySelector(`[data-index="${active}"]`);
|
|
26
|
+
if (typeof row?.scrollIntoView !== "function") return;
|
|
27
|
+
try {
|
|
28
|
+
row.scrollIntoView({ block: "nearest" });
|
|
29
|
+
} catch {}
|
|
30
|
+
}, [active]);
|
|
31
|
+
const value = useMemo(() => {
|
|
32
|
+
const select = (index) => {
|
|
33
|
+
const result = results[index];
|
|
34
|
+
if (result) onSelect(result, index);
|
|
35
|
+
};
|
|
36
|
+
const onKeyDown = (event) => {
|
|
37
|
+
if (event.key === "ArrowDown") {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
setActive((i) => Math.min(i + 1, Math.max(results.length - 1, 0)));
|
|
40
|
+
} else if (event.key === "ArrowUp") {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
setActive((i) => Math.max(i - 1, 0));
|
|
43
|
+
} else if (event.key === "Enter") {
|
|
44
|
+
if (results[active]) {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
select(active);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
state: {
|
|
52
|
+
query,
|
|
53
|
+
active,
|
|
54
|
+
results,
|
|
55
|
+
loading,
|
|
56
|
+
searching
|
|
57
|
+
},
|
|
58
|
+
actions: {
|
|
59
|
+
setQuery: onQueryChange,
|
|
60
|
+
select,
|
|
61
|
+
setActive,
|
|
62
|
+
onKeyDown
|
|
63
|
+
},
|
|
64
|
+
meta: {
|
|
65
|
+
title,
|
|
66
|
+
inputRef,
|
|
67
|
+
listRef
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}, [
|
|
71
|
+
query,
|
|
72
|
+
active,
|
|
73
|
+
results,
|
|
74
|
+
loading,
|
|
75
|
+
searching,
|
|
76
|
+
onQueryChange,
|
|
77
|
+
onSelect,
|
|
78
|
+
title
|
|
79
|
+
]);
|
|
80
|
+
return /* @__PURE__ */ jsx(Dialog.Root, {
|
|
81
|
+
open,
|
|
82
|
+
onOpenChange,
|
|
83
|
+
children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [/* @__PURE__ */ jsx(Dialog.Backdrop, { "data-slot": SEARCH_DIALOG_SLOTS.backdrop }), /* @__PURE__ */ jsxs(Dialog.Popup, {
|
|
84
|
+
elevation: "menu",
|
|
85
|
+
"data-slot": SEARCH_DIALOG_SLOTS.root,
|
|
86
|
+
initialFocus: inputRef,
|
|
87
|
+
children: [/* @__PURE__ */ jsx(Dialog.Title, {
|
|
88
|
+
"data-slot": "noctis-visually-hidden",
|
|
89
|
+
render: /* @__PURE__ */ jsx(VisuallyHidden, {}),
|
|
90
|
+
children: title
|
|
91
|
+
}), /* @__PURE__ */ jsx(SearchDialogProvider, {
|
|
92
|
+
value,
|
|
93
|
+
children
|
|
94
|
+
})]
|
|
95
|
+
})] })
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
export { SearchDialogRoot };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/components/search-dialog/search-dialog.context.d.ts
|
|
2
|
+
/** A single search hit rendered as a row. `excerpt` is trusted HTML (Pagefind wraps matches in `<mark>`). */
|
|
3
|
+
interface SearchResult {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
/** A breadcrumb / path shown opposite the title. */
|
|
7
|
+
crumb?: string;
|
|
8
|
+
/** Excerpt HTML with `<mark>` around matched terms. */
|
|
9
|
+
excerpt?: string;
|
|
10
|
+
/** For endpoint-style rows: an HTTP method + path shown instead of the crumb. */
|
|
11
|
+
method?: string;
|
|
12
|
+
path?: string;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { SearchResult };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext, use } from "react";
|
|
3
|
+
//#region src/components/search-dialog/search-dialog.context.ts
|
|
4
|
+
/** Resolve the active pane from the dialog state, in the gate's priority order. */
|
|
5
|
+
function searchDialogPhase(state) {
|
|
6
|
+
if (state.loading) return "loading";
|
|
7
|
+
if (state.query.trim().length === 0) return "empty";
|
|
8
|
+
if (state.results.length === 0) return state.searching ? "searching" : "no-results";
|
|
9
|
+
return "results";
|
|
10
|
+
}
|
|
11
|
+
const SearchDialogContext = createContext(null);
|
|
12
|
+
const SearchDialogProvider = SearchDialogContext.Provider;
|
|
13
|
+
/** Read the dialog context, throwing a named error when a part renders outside `SearchDialog.Root`. */
|
|
14
|
+
function useSearchDialogContext(part) {
|
|
15
|
+
const context = use(SearchDialogContext);
|
|
16
|
+
if (context === null) throw new Error(`SearchDialog.${part} must be rendered inside <SearchDialog.Root>.`);
|
|
17
|
+
return context;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { SearchDialogProvider, searchDialogPhase, useSearchDialogContext };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { SearchDialogInput } from "./parts/input.js";
|
|
2
|
+
import { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading } from "./parts/messages.js";
|
|
3
|
+
import { SearchResult } from "./search-dialog.context.js";
|
|
4
|
+
import { SearchDialogItem, SearchDialogResults } from "./parts/results.js";
|
|
5
|
+
import { SearchDialogRoot } from "./parts/root.js";
|
|
6
|
+
import { SearchDialogItemPropsArgs, SearchDialogPartProps, footerProps, inputProps, itemProps, resultsProps, rootProps } from "./search-dialog.props.js";
|
|
7
|
+
|
|
8
|
+
//#region src/components/search-dialog/search-dialog.d.ts
|
|
9
|
+
/**
|
|
10
|
+
* The documentation search dialog — a centred, focus-trapped command palette built on Base UI's
|
|
11
|
+
* `Dialog`. The shell (backdrop blur, scale-fade enter/exit, a fixed height so the panel never jumps
|
|
12
|
+
* as results stream in), the keyboard contract (↑/↓ move the active row, Enter opens it, Esc closes),
|
|
13
|
+
* and the result rows (title, crumb or method+path, `<mark>`-highlighted excerpt) all live here; the
|
|
14
|
+
* caller owns the data — it runs the search and feeds `results`, so the dialog is index-agnostic.
|
|
15
|
+
*
|
|
16
|
+
* Compose from parts: `SearchDialog.Root` owns the open state, the query, and the keyboard-driven
|
|
17
|
+
* active row; `SearchDialog.Input` is the query field; `SearchDialog.Loading` and `SearchDialog.Empty`
|
|
18
|
+
* supply the loading, empty-query, searching, and no-results copy (the root gates which one shows);
|
|
19
|
+
* `SearchDialog.Results` lists one `SearchDialog.Item` per hit; and `SearchDialog.Footer` holds the
|
|
20
|
+
* `SearchDialog.Hint` keyboard hints. All copy arrives as part children, so a consuming app routes it
|
|
21
|
+
* through its own i18n.
|
|
22
|
+
*
|
|
23
|
+
* The runtime compound is a plain object (kept tree-shakeable); per-part prop types are exposed through
|
|
24
|
+
* the matching `SearchDialog` namespace — e.g. `SearchDialog.Item.Props`.
|
|
25
|
+
*/
|
|
26
|
+
declare const SearchDialog: {
|
|
27
|
+
/** Owns the open state, query, and active row. `SearchDialog.Root.props()` → its spreadable popup prop bag. */Root: typeof SearchDialogRoot & {
|
|
28
|
+
props: typeof rootProps;
|
|
29
|
+
}; /** The query field. `SearchDialog.Input.props()` → its spreadable prop bag. */
|
|
30
|
+
Input: typeof SearchDialogInput & {
|
|
31
|
+
props: typeof inputProps;
|
|
32
|
+
}; /** The listbox of hits. `SearchDialog.Results.props()` → its spreadable prop bag. */
|
|
33
|
+
Results: typeof SearchDialogResults & {
|
|
34
|
+
props: typeof resultsProps;
|
|
35
|
+
}; /** One result row. `SearchDialog.Item.props({ active, index })` → its spreadable prop bag for a foreign element. */
|
|
36
|
+
Item: typeof SearchDialogItem & {
|
|
37
|
+
props: typeof itemProps;
|
|
38
|
+
}; /** The empty / searching / no-results copy. */
|
|
39
|
+
Empty: typeof SearchDialogEmpty; /** The index-loading copy. */
|
|
40
|
+
Loading: typeof SearchDialogLoading; /** The keyboard-hints row. `SearchDialog.Footer.props()` → its spreadable prop bag. */
|
|
41
|
+
Footer: typeof SearchDialogFooter & {
|
|
42
|
+
props: typeof footerProps;
|
|
43
|
+
}; /** One footer hint. */
|
|
44
|
+
Hint: typeof SearchDialogHint;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Per-part prop types, mirroring Base UI's `Component.Part.Props` convention. Types-only — it emits no
|
|
48
|
+
* runtime code and merges with the `SearchDialog` object above, so `SearchDialog.Item` is the component
|
|
49
|
+
* value while `SearchDialog.Item.Props` is its prop type.
|
|
50
|
+
*/
|
|
51
|
+
declare namespace SearchDialog {
|
|
52
|
+
/** The spreadable data-attribute prop bag every `SearchDialog.*.props()` returns (D12). */
|
|
53
|
+
type PartProps = SearchDialogPartProps;
|
|
54
|
+
namespace Root {
|
|
55
|
+
type Props = SearchDialogRoot.Props;
|
|
56
|
+
}
|
|
57
|
+
namespace Input {
|
|
58
|
+
type Props = SearchDialogInput.Props;
|
|
59
|
+
}
|
|
60
|
+
namespace Results {
|
|
61
|
+
type Props = SearchDialogResults.Props;
|
|
62
|
+
}
|
|
63
|
+
namespace Item {
|
|
64
|
+
type Props = SearchDialogItem.Props;
|
|
65
|
+
/** A single search hit — the data shape a caller builds its `results` array from. */
|
|
66
|
+
type Result = SearchResult;
|
|
67
|
+
/** Argument to the `SearchDialog.Item.props(...)` escape-hatch helper. */
|
|
68
|
+
type PropsArgs = SearchDialogItemPropsArgs;
|
|
69
|
+
}
|
|
70
|
+
namespace Empty {
|
|
71
|
+
type Props = SearchDialogEmpty.Props;
|
|
72
|
+
}
|
|
73
|
+
namespace Loading {
|
|
74
|
+
type Props = SearchDialogLoading.Props;
|
|
75
|
+
}
|
|
76
|
+
namespace Footer {
|
|
77
|
+
type Props = SearchDialogFooter.Props;
|
|
78
|
+
}
|
|
79
|
+
namespace Hint {
|
|
80
|
+
type Props = SearchDialogHint.Props;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { SearchDialog };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SearchDialogInput } from "./parts/input.js";
|
|
2
|
+
import { SearchDialogEmpty, SearchDialogFooter, SearchDialogHint, SearchDialogLoading } from "./parts/messages.js";
|
|
3
|
+
import { SearchDialogItem, SearchDialogResults } from "./parts/results.js";
|
|
4
|
+
import { SearchDialogRoot } from "./parts/root.js";
|
|
5
|
+
import { footerProps, inputProps, itemProps, resultsProps, rootProps } from "./search-dialog.props.js";
|
|
6
|
+
//#region src/components/search-dialog/search-dialog.tsx
|
|
7
|
+
/**
|
|
8
|
+
* The documentation search dialog — a centred, focus-trapped command palette built on Base UI's
|
|
9
|
+
* `Dialog`. The shell (backdrop blur, scale-fade enter/exit, a fixed height so the panel never jumps
|
|
10
|
+
* as results stream in), the keyboard contract (↑/↓ move the active row, Enter opens it, Esc closes),
|
|
11
|
+
* and the result rows (title, crumb or method+path, `<mark>`-highlighted excerpt) all live here; the
|
|
12
|
+
* caller owns the data — it runs the search and feeds `results`, so the dialog is index-agnostic.
|
|
13
|
+
*
|
|
14
|
+
* Compose from parts: `SearchDialog.Root` owns the open state, the query, and the keyboard-driven
|
|
15
|
+
* active row; `SearchDialog.Input` is the query field; `SearchDialog.Loading` and `SearchDialog.Empty`
|
|
16
|
+
* supply the loading, empty-query, searching, and no-results copy (the root gates which one shows);
|
|
17
|
+
* `SearchDialog.Results` lists one `SearchDialog.Item` per hit; and `SearchDialog.Footer` holds the
|
|
18
|
+
* `SearchDialog.Hint` keyboard hints. All copy arrives as part children, so a consuming app routes it
|
|
19
|
+
* through its own i18n.
|
|
20
|
+
*
|
|
21
|
+
* The runtime compound is a plain object (kept tree-shakeable); per-part prop types are exposed through
|
|
22
|
+
* the matching `SearchDialog` namespace — e.g. `SearchDialog.Item.Props`.
|
|
23
|
+
*/
|
|
24
|
+
const SearchDialog = {
|
|
25
|
+
/** Owns the open state, query, and active row. `SearchDialog.Root.props()` → its spreadable popup prop bag. */
|
|
26
|
+
Root: Object.assign(SearchDialogRoot, { props: rootProps }),
|
|
27
|
+
/** The query field. `SearchDialog.Input.props()` → its spreadable prop bag. */
|
|
28
|
+
Input: Object.assign(SearchDialogInput, { props: inputProps }),
|
|
29
|
+
/** The listbox of hits. `SearchDialog.Results.props()` → its spreadable prop bag. */
|
|
30
|
+
Results: Object.assign(SearchDialogResults, { props: resultsProps }),
|
|
31
|
+
/** One result row. `SearchDialog.Item.props({ active, index })` → its spreadable prop bag for a foreign element. */
|
|
32
|
+
Item: Object.assign(SearchDialogItem, { props: itemProps }),
|
|
33
|
+
/** The empty / searching / no-results copy. */
|
|
34
|
+
Empty: SearchDialogEmpty,
|
|
35
|
+
/** The index-loading copy. */
|
|
36
|
+
Loading: SearchDialogLoading,
|
|
37
|
+
/** The keyboard-hints row. `SearchDialog.Footer.props()` → its spreadable prop bag. */
|
|
38
|
+
Footer: Object.assign(SearchDialogFooter, { props: footerProps }),
|
|
39
|
+
/** One footer hint. */
|
|
40
|
+
Hint: SearchDialogHint
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { SearchDialog };
|