@jakubmazanec/ui 0.1.0-unstable.081bdf1
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 +45 -0
- package/build/components/Button.d.ts +40 -0
- package/build/components/Button.js +139 -0
- package/build/components/Button.js.map +7 -0
- package/build/components/Card.d.ts +19 -0
- package/build/components/Card.js +26 -0
- package/build/components/Card.js.map +7 -0
- package/build/components/Checkbox.d.ts +39 -0
- package/build/components/Checkbox.js +87 -0
- package/build/components/Checkbox.js.map +7 -0
- package/build/components/CheckboxField.d.ts +18 -0
- package/build/components/CheckboxField.js +22 -0
- package/build/components/CheckboxField.js.map +7 -0
- package/build/components/Combobox.d.ts +57 -0
- package/build/components/Combobox.js +178 -0
- package/build/components/Combobox.js.map +7 -0
- package/build/components/ComboboxOption.d.ts +33 -0
- package/build/components/ComboboxOption.js +59 -0
- package/build/components/ComboboxOption.js.map +7 -0
- package/build/components/DataTable.d.ts +70 -0
- package/build/components/DataTable.js +383 -0
- package/build/components/DataTable.js.map +7 -0
- package/build/components/Description.d.ts +19 -0
- package/build/components/Description.js +28 -0
- package/build/components/Description.js.map +7 -0
- package/build/components/Dialog.d.ts +32 -0
- package/build/components/Dialog.js +55 -0
- package/build/components/Dialog.js.map +7 -0
- package/build/components/DialogPanel.d.ts +19 -0
- package/build/components/DialogPanel.js +29 -0
- package/build/components/DialogPanel.js.map +7 -0
- package/build/components/DialogTitle.d.ts +19 -0
- package/build/components/DialogTitle.js +28 -0
- package/build/components/DialogTitle.js.map +7 -0
- package/build/components/Error.d.ts +19 -0
- package/build/components/Error.js +37 -0
- package/build/components/Error.js.map +7 -0
- package/build/components/Field.d.ts +22 -0
- package/build/components/Field.js +32 -0
- package/build/components/Field.js.map +7 -0
- package/build/components/Fieldset.d.ts +27 -0
- package/build/components/Fieldset.js +39 -0
- package/build/components/Fieldset.js.map +7 -0
- package/build/components/Form.d.ts +22 -0
- package/build/components/Form.js +41 -0
- package/build/components/Form.js.map +7 -0
- package/build/components/Icon.d.ts +29 -0
- package/build/components/Icon.js +59 -0
- package/build/components/Icon.js.map +7 -0
- package/build/components/Input.d.ts +37 -0
- package/build/components/Input.js +111 -0
- package/build/components/Input.js.map +7 -0
- package/build/components/Label.d.ts +19 -0
- package/build/components/Label.js +26 -0
- package/build/components/Label.js.map +7 -0
- package/build/components/Legend.d.ts +19 -0
- package/build/components/Legend.js +26 -0
- package/build/components/Legend.js.map +7 -0
- package/build/components/Listbox.d.ts +59 -0
- package/build/components/Listbox.js +254 -0
- package/build/components/Listbox.js.map +7 -0
- package/build/components/ListboxOption.d.ts +33 -0
- package/build/components/ListboxOption.js +59 -0
- package/build/components/ListboxOption.js.map +7 -0
- package/build/components/Menu.d.ts +21 -0
- package/build/components/Menu.js +29 -0
- package/build/components/Menu.js.map +7 -0
- package/build/components/MenuButton.d.ts +27 -0
- package/build/components/MenuButton.js +45 -0
- package/build/components/MenuButton.js.map +7 -0
- package/build/components/MenuHeading.d.ts +19 -0
- package/build/components/MenuHeading.js +28 -0
- package/build/components/MenuHeading.js.map +7 -0
- package/build/components/MenuItem.d.ts +27 -0
- package/build/components/MenuItem.js +39 -0
- package/build/components/MenuItem.js.map +7 -0
- package/build/components/MenuItems.d.ts +22 -0
- package/build/components/MenuItems.js +36 -0
- package/build/components/MenuItems.js.map +7 -0
- package/build/components/MenuSection.d.ts +19 -0
- package/build/components/MenuSection.js +28 -0
- package/build/components/MenuSection.js.map +7 -0
- package/build/components/MenuSeparator.d.ts +19 -0
- package/build/components/MenuSeparator.js +28 -0
- package/build/components/MenuSeparator.js.map +7 -0
- package/build/components/Popover.d.ts +19 -0
- package/build/components/Popover.js +28 -0
- package/build/components/Popover.js.map +7 -0
- package/build/components/PopoverBackdrop.d.ts +19 -0
- package/build/components/PopoverBackdrop.js +28 -0
- package/build/components/PopoverBackdrop.js.map +7 -0
- package/build/components/PopoverButton.d.ts +29 -0
- package/build/components/PopoverButton.js +47 -0
- package/build/components/PopoverButton.js.map +7 -0
- package/build/components/PopoverGroup.d.ts +19 -0
- package/build/components/PopoverGroup.js +28 -0
- package/build/components/PopoverGroup.js.map +7 -0
- package/build/components/PopoverPanel.d.ts +24 -0
- package/build/components/PopoverPanel.js +38 -0
- package/build/components/PopoverPanel.js.map +7 -0
- package/build/components/Radio.d.ts +33 -0
- package/build/components/Radio.js +57 -0
- package/build/components/Radio.js.map +7 -0
- package/build/components/RadioField.d.ts +11 -0
- package/build/components/RadioField.js +15 -0
- package/build/components/RadioField.js.map +7 -0
- package/build/components/RadioGroup.d.ts +34 -0
- package/build/components/RadioGroup.js +87 -0
- package/build/components/RadioGroup.js.map +7 -0
- package/build/components/Spinner.d.ts +21 -0
- package/build/components/Spinner.js +70 -0
- package/build/components/Spinner.js.map +7 -0
- package/build/components/Table.d.ts +19 -0
- package/build/components/Table.js +26 -0
- package/build/components/Table.js.map +7 -0
- package/build/components/TableBody.d.ts +19 -0
- package/build/components/TableBody.js +26 -0
- package/build/components/TableBody.js.map +7 -0
- package/build/components/TableCaption.d.ts +19 -0
- package/build/components/TableCaption.js +31 -0
- package/build/components/TableCaption.js.map +7 -0
- package/build/components/TableCell.d.ts +19 -0
- package/build/components/TableCell.js +26 -0
- package/build/components/TableCell.js.map +7 -0
- package/build/components/TableFoot.d.ts +19 -0
- package/build/components/TableFoot.js +26 -0
- package/build/components/TableFoot.js.map +7 -0
- package/build/components/TableHead.d.ts +19 -0
- package/build/components/TableHead.js +26 -0
- package/build/components/TableHead.js.map +7 -0
- package/build/components/TableHeader.d.ts +19 -0
- package/build/components/TableHeader.js +26 -0
- package/build/components/TableHeader.js.map +7 -0
- package/build/components/TableRow.d.ts +19 -0
- package/build/components/TableRow.js +26 -0
- package/build/components/TableRow.js.map +7 -0
- package/build/components/Text.d.ts +19 -0
- package/build/components/Text.js +26 -0
- package/build/components/Text.js.map +7 -0
- package/build/components/Textarea.d.ts +34 -0
- package/build/components/Textarea.js +78 -0
- package/build/components/Textarea.js.map +7 -0
- package/build/components/data-table/DataTableHeader.d.ts +13 -0
- package/build/components/data-table/DataTableHeader.js +418 -0
- package/build/components/data-table/DataTableHeader.js.map +7 -0
- package/build/components/data-table/DataTablePageButton.d.ts +6 -0
- package/build/components/data-table/DataTablePageButton.js +11 -0
- package/build/components/data-table/DataTablePageButton.js.map +7 -0
- package/build/components/data-table/internals/constants.d.ts +3 -0
- package/build/components/data-table/internals/constants.js +5 -0
- package/build/components/data-table/internals/constants.js.map +7 -0
- package/build/components/data-table/internals/getCommonPinningClasses.d.ts +2 -0
- package/build/components/data-table/internals/getCommonPinningClasses.js +13 -0
- package/build/components/data-table/internals/getCommonPinningClasses.js.map +7 -0
- package/build/components/data-table/internals/getCommonPinningStyles.d.ts +3 -0
- package/build/components/data-table/internals/getCommonPinningStyles.js +10 -0
- package/build/components/data-table/internals/getCommonPinningStyles.js.map +7 -0
- package/build/components/internals/fieldContext.d.ts +3 -0
- package/build/components/internals/fieldContext.js +4 -0
- package/build/components/internals/fieldContext.js.map +7 -0
- package/build/components/internals/fieldNameContext.d.ts +3 -0
- package/build/components/internals/fieldNameContext.js +4 -0
- package/build/components/internals/fieldNameContext.js.map +7 -0
- package/build/components/internals/filterProps.d.ts +4 -0
- package/build/components/internals/filterProps.js +9 -0
- package/build/components/internals/filterProps.js.map +7 -0
- package/build/components/internals/formIdContext.d.ts +2 -0
- package/build/components/internals/formIdContext.js +4 -0
- package/build/components/internals/formIdContext.js.map +7 -0
- package/build/components/internals/forwardRef.d.ts +4 -0
- package/build/components/internals/forwardRef.js +6 -0
- package/build/components/internals/forwardRef.js.map +7 -0
- package/build/components/internals/useFormId.d.ts +1 -0
- package/build/components/internals/useFormId.js +7 -0
- package/build/components/internals/useFormId.js.map +7 -0
- package/build/components/internals.d.ts +6 -0
- package/build/components/internals.js +8 -0
- package/build/components/internals.js.map +7 -0
- package/build/components/useField.d.ts +1 -0
- package/build/components/useField.js +7 -0
- package/build/components/useField.js.map +7 -0
- package/build/components/useFieldName.d.ts +1 -0
- package/build/components/useFieldName.js +7 -0
- package/build/components/useFieldName.js.map +7 -0
- package/build/components/useForm.d.ts +10 -0
- package/build/components/useForm.js +19 -0
- package/build/components/useForm.js.map +7 -0
- package/build/components.d.ts +50 -0
- package/build/components.js +52 -0
- package/build/components.js.map +7 -0
- package/build/development/createTailwindConfig.d.ts +18 -0
- package/build/development/createTailwindConfig.js +161 -0
- package/build/development/createTailwindConfig.js.map +7 -0
- package/build/development/createTailwindMerge.d.ts +2 -0
- package/build/development/createTailwindMerge.js +74 -0
- package/build/development/createTailwindMerge.js.map +7 -0
- package/build/development/internals/PaletteConfig.d.ts +6 -0
- package/build/development/internals/PaletteConfig.js +2 -0
- package/build/development/internals/PaletteConfig.js.map +7 -0
- package/build/development/internals/SwatchValue.d.ts +9 -0
- package/build/development/internals/SwatchValue.js +2 -0
- package/build/development/internals/SwatchValue.js.map +7 -0
- package/build/development/internals/clamp.d.ts +1 -0
- package/build/development/internals/clamp.js +5 -0
- package/build/development/internals/clamp.js.map +7 -0
- package/build/development/internals/constants.d.ts +2 -0
- package/build/development/internals/constants.js +22 -0
- package/build/development/internals/constants.js.map +7 -0
- package/build/development/internals/createDisplayColor.d.ts +1 -0
- package/build/development/internals/createDisplayColor.js +24 -0
- package/build/development/internals/createDisplayColor.js.map +7 -0
- package/build/development/internals/createDistributionValues.d.ts +4 -0
- package/build/development/internals/createDistributionValues.js +32 -0
- package/build/development/internals/createDistributionValues.js.map +7 -0
- package/build/development/internals/createHueScale.d.ts +4 -0
- package/build/development/internals/createHueScale.js +15 -0
- package/build/development/internals/createHueScale.js.map +7 -0
- package/build/development/internals/createPalette.d.ts +16 -0
- package/build/development/internals/createPalette.js +36 -0
- package/build/development/internals/createPalette.js.map +7 -0
- package/build/development/internals/createSaturationScale.d.ts +4 -0
- package/build/development/internals/createSaturationScale.js +18 -0
- package/build/development/internals/createSaturationScale.js.map +7 -0
- package/build/development/internals/createSwatches.d.ts +10 -0
- package/build/development/internals/createSwatches.js +31 -0
- package/build/development/internals/createSwatches.js.map +7 -0
- package/build/development/internals/hexToHsl.d.ts +5 -0
- package/build/development/internals/hexToHsl.js +37 -0
- package/build/development/internals/hexToHsl.js.map +7 -0
- package/build/development/internals/hexToRgb.d.ts +5 -0
- package/build/development/internals/hexToRgb.js +21 -0
- package/build/development/internals/hexToRgb.js.map +7 -0
- package/build/development/internals/hslToHex.d.ts +1 -0
- package/build/development/internals/hslToHex.js +19 -0
- package/build/development/internals/hslToHex.js.map +7 -0
- package/build/development/internals/hslToRgb.d.ts +5 -0
- package/build/development/internals/hslToRgb.js +42 -0
- package/build/development/internals/hslToRgb.js.map +7 -0
- package/build/development/internals/isHex.d.ts +1 -0
- package/build/development/internals/isHex.js +7 -0
- package/build/development/internals/isHex.js.map +7 -0
- package/build/development/internals/resolveModule.d.ts +1 -0
- package/build/development/internals/resolveModule.js +9 -0
- package/build/development/internals/resolveModule.js.map +7 -0
- package/build/development/internals/round.d.ts +1 -0
- package/build/development/internals/round.js +6 -0
- package/build/development/internals/round.js.map +7 -0
- package/build/development/internals/unsignedModulo.d.ts +1 -0
- package/build/development/internals/unsignedModulo.js +5 -0
- package/build/development/internals/unsignedModulo.js.map +7 -0
- package/build/development/internals.d.ts +1 -0
- package/build/development/internals.js +3 -0
- package/build/development/internals.js.map +7 -0
- package/build/development.d.ts +2 -0
- package/build/development.js +4 -0
- package/build/development.js.map +7 -0
- package/build/inter-variable-italic.woff2 +0 -0
- package/build/inter-variable.woff2 +0 -0
- package/build/main.d.ts +5 -0
- package/build/main.js +7 -0
- package/build/main.js.map +7 -0
- package/build/styles.css +23 -0
- package/build/styles.css.map +7 -0
- package/build/theme/Theme.d.ts +143 -0
- package/build/theme/Theme.js +2 -0
- package/build/theme/Theme.js.map +7 -0
- package/build/theme/ThemeProvider.d.ts +6 -0
- package/build/theme/ThemeProvider.js +7 -0
- package/build/theme/ThemeProvider.js.map +7 -0
- package/build/theme/defaultTheme.d.ts +2 -0
- package/build/theme/defaultTheme.js +100 -0
- package/build/theme/defaultTheme.js.map +7 -0
- package/build/theme/internals/ClassName.d.ts +1 -0
- package/build/theme/internals/ClassName.js +2 -0
- package/build/theme/internals/ClassName.js.map +7 -0
- package/build/theme/internals/ComponentProps.d.ts +7 -0
- package/build/theme/internals/ComponentProps.js +2 -0
- package/build/theme/internals/ComponentProps.js.map +7 -0
- package/build/theme/internals/ComponentTheme.d.ts +35 -0
- package/build/theme/internals/ComponentTheme.js +2 -0
- package/build/theme/internals/ComponentTheme.js.map +7 -0
- package/build/theme/internals/ComponentThemeCompoundVariants.d.ts +12 -0
- package/build/theme/internals/ComponentThemeCompoundVariants.js +2 -0
- package/build/theme/internals/ComponentThemeCompoundVariants.js.map +7 -0
- package/build/theme/internals/ComponentThemeDefinition.d.ts +6 -0
- package/build/theme/internals/ComponentThemeDefinition.js +2 -0
- package/build/theme/internals/ComponentThemeDefinition.js.map +7 -0
- package/build/theme/internals/ComponentThemeDefinitionElements.d.ts +1 -0
- package/build/theme/internals/ComponentThemeDefinitionElements.js +2 -0
- package/build/theme/internals/ComponentThemeDefinitionElements.js.map +7 -0
- package/build/theme/internals/ComponentThemeDefinitionVariants.d.ts +3 -0
- package/build/theme/internals/ComponentThemeDefinitionVariants.js +2 -0
- package/build/theme/internals/ComponentThemeDefinitionVariants.js.map +7 -0
- package/build/theme/internals/ComponentThemeProps.d.ts +5 -0
- package/build/theme/internals/ComponentThemeProps.js +2 -0
- package/build/theme/internals/ComponentThemeProps.js.map +7 -0
- package/build/theme/internals/ComponentThemeVariants.d.ts +14 -0
- package/build/theme/internals/ComponentThemeVariants.js +2 -0
- package/build/theme/internals/ComponentThemeVariants.js.map +7 -0
- package/build/theme/internals/ComponentWithTheme.d.ts +5 -0
- package/build/theme/internals/ComponentWithTheme.js +2 -0
- package/build/theme/internals/ComponentWithTheme.js.map +7 -0
- package/build/theme/internals/UseComponentTheme.d.ts +21 -0
- package/build/theme/internals/UseComponentTheme.js +2 -0
- package/build/theme/internals/UseComponentTheme.js.map +7 -0
- package/build/theme/internals/UseComponentThemeReturn.d.ts +6 -0
- package/build/theme/internals/UseComponentThemeReturn.js +2 -0
- package/build/theme/internals/UseComponentThemeReturn.js.map +7 -0
- package/build/theme/internals/booleanToString.d.ts +1 -0
- package/build/theme/internals/booleanToString.js +5 -0
- package/build/theme/internals/booleanToString.js.map +7 -0
- package/build/theme/internals/createComponentTheme.d.ts +3 -0
- package/build/theme/internals/createComponentTheme.js +39 -0
- package/build/theme/internals/createComponentTheme.js.map +7 -0
- package/build/theme/internals/createUseComponentThemeReturn.d.ts +15 -0
- package/build/theme/internals/createUseComponentThemeReturn.js +50 -0
- package/build/theme/internals/createUseComponentThemeReturn.js.map +7 -0
- package/build/theme/internals/pickPropertyIfExists.d.ts +4 -0
- package/build/theme/internals/pickPropertyIfExists.js +11 -0
- package/build/theme/internals/pickPropertyIfExists.js.map +7 -0
- package/build/theme/internals/themeContext.d.ts +330 -0
- package/build/theme/internals/themeContext.js +4 -0
- package/build/theme/internals/themeContext.js.map +7 -0
- package/build/theme/internals/useTheme.d.ts +329 -0
- package/build/theme/internals/useTheme.js +7 -0
- package/build/theme/internals/useTheme.js.map +7 -0
- package/build/theme/internals.d.ts +18 -0
- package/build/theme/internals.js +20 -0
- package/build/theme/internals.js.map +7 -0
- package/build/theme.d.ts +3 -0
- package/build/theme.js +5 -0
- package/build/theme.js.map +7 -0
- package/build/utilities/WithLocaleOrLocales.d.ts +5 -0
- package/build/utilities/WithLocaleOrLocales.js +2 -0
- package/build/utilities/WithLocaleOrLocales.js.map +7 -0
- package/build/utilities/formatDateTime.d.ts +3 -0
- package/build/utilities/formatDateTime.js +11 -0
- package/build/utilities/formatDateTime.js.map +7 -0
- package/build/utilities/formatNumber.d.ts +3 -0
- package/build/utilities/formatNumber.js +11 -0
- package/build/utilities/formatNumber.js.map +7 -0
- package/build/utilities/internals/cache.d.ts +1 -0
- package/build/utilities/internals/cache.js +3 -0
- package/build/utilities/internals/cache.js.map +7 -0
- package/build/utilities/internals/createCacheKey.d.ts +1 -0
- package/build/utilities/internals/createCacheKey.js +6 -0
- package/build/utilities/internals/createCacheKey.js.map +7 -0
- package/build/utilities/internals/getMemoized.d.ts +1 -0
- package/build/utilities/internals/getMemoized.js +12 -0
- package/build/utilities/internals/getMemoized.js.map +7 -0
- package/build/utilities/internals/normalizeLocales.d.ts +2 -0
- package/build/utilities/internals/normalizeLocales.js +12 -0
- package/build/utilities/internals/normalizeLocales.js.map +7 -0
- package/build/utilities/internals.d.ts +4 -0
- package/build/utilities/internals.js +6 -0
- package/build/utilities/internals.js.map +7 -0
- package/build/utilities.d.ts +3 -0
- package/build/utilities.js +5 -0
- package/build/utilities.js.map +7 -0
- package/package.json +100 -0
- package/source/components/Button.tsx +172 -0
- package/source/components/Card.ts +46 -0
- package/source/components/Checkbox.tsx +125 -0
- package/source/components/CheckboxField.tsx +61 -0
- package/source/components/Combobox.tsx +298 -0
- package/source/components/ComboboxOption.tsx +95 -0
- package/source/components/DataTable.tsx +464 -0
- package/source/components/Description.tsx +52 -0
- package/source/components/Dialog.tsx +85 -0
- package/source/components/DialogPanel.tsx +54 -0
- package/source/components/DialogTitle.tsx +52 -0
- package/source/components/Error.tsx +58 -0
- package/source/components/Field.tsx +79 -0
- package/source/components/Fieldset.tsx +64 -0
- package/source/components/Form.tsx +72 -0
- package/source/components/Icon.tsx +96 -0
- package/source/components/Input.tsx +156 -0
- package/source/components/Label.tsx +49 -0
- package/source/components/Legend.tsx +49 -0
- package/source/components/Listbox.tsx +401 -0
- package/source/components/ListboxOption.tsx +95 -0
- package/source/components/Menu.tsx +50 -0
- package/source/components/MenuButton.tsx +69 -0
- package/source/components/MenuHeading.tsx +52 -0
- package/source/components/MenuItem.tsx +63 -0
- package/source/components/MenuItems.tsx +61 -0
- package/source/components/MenuSection.tsx +52 -0
- package/source/components/MenuSeparator.tsx +52 -0
- package/source/components/Popover.tsx +52 -0
- package/source/components/PopoverBackdrop.tsx +52 -0
- package/source/components/PopoverButton.tsx +72 -0
- package/source/components/PopoverGroup.tsx +52 -0
- package/source/components/PopoverPanel.tsx +65 -0
- package/source/components/Radio.tsx +88 -0
- package/source/components/RadioField.tsx +31 -0
- package/source/components/RadioGroup.tsx +147 -0
- package/source/components/Spinner.tsx +70 -0
- package/source/components/Table.ts +47 -0
- package/source/components/TableBody.ts +47 -0
- package/source/components/TableCaption.ts +52 -0
- package/source/components/TableCell.ts +47 -0
- package/source/components/TableFoot.ts +47 -0
- package/source/components/TableHead.ts +47 -0
- package/source/components/TableHeader.ts +47 -0
- package/source/components/TableRow.ts +47 -0
- package/source/components/Text.ts +47 -0
- package/source/components/Textarea.tsx +104 -0
- package/source/components/data-table/DataTableHeader.tsx +602 -0
- package/source/components/data-table/DataTablePageButton.tsx +21 -0
- package/source/components/data-table/internals/constants.ts +3 -0
- package/source/components/data-table/internals/getCommonPinningClasses.ts +19 -0
- package/source/components/data-table/internals/getCommonPinningStyles.ts +13 -0
- package/source/components/internals/fieldContext.ts +4 -0
- package/source/components/internals/fieldNameContext.ts +5 -0
- package/source/components/internals/filterProps.ts +12 -0
- package/source/components/internals/formIdContext.ts +3 -0
- package/source/components/internals/forwardRef.ts +7 -0
- package/source/components/internals/useFormId.ts +7 -0
- package/source/components/internals.ts +6 -0
- package/source/components/useField.ts +7 -0
- package/source/components/useFieldName.ts +7 -0
- package/source/components/useForm.ts +24 -0
- package/source/components.ts +50 -0
- package/source/development/createTailwindConfig.ts +182 -0
- package/source/development/createTailwindMerge.ts +101 -0
- package/source/development/internals/PaletteConfig.ts +6 -0
- package/source/development/internals/SwatchValue.ts +9 -0
- package/source/development/internals/clamp.ts +3 -0
- package/source/development/internals/constants.ts +4 -0
- package/source/development/internals/createDisplayColor.ts +29 -0
- package/source/development/internals/createDistributionValues.ts +38 -0
- package/source/development/internals/createHueScale.ts +17 -0
- package/source/development/internals/createPalette.ts +54 -0
- package/source/development/internals/createSaturationScale.ts +21 -0
- package/source/development/internals/createSwatches.ts +34 -0
- package/source/development/internals/hexToHsl.ts +45 -0
- package/source/development/internals/hexToRgb.ts +23 -0
- package/source/development/internals/hslToHex.ts +23 -0
- package/source/development/internals/hslToRgb.ts +43 -0
- package/source/development/internals/isHex.ts +7 -0
- package/source/development/internals/resolveModule.ts +9 -0
- package/source/development/internals/round.ts +5 -0
- package/source/development/internals/unsignedModulo.ts +3 -0
- package/source/development/internals.ts +1 -0
- package/source/development.ts +2 -0
- package/source/inter-variable-italic.woff2 +0 -0
- package/source/inter-variable.woff2 +0 -0
- package/source/main.ts +5 -0
- package/source/styles.css +25 -0
- package/source/theme/Theme.ts +100 -0
- package/source/theme/ThemeProvider.tsx +12 -0
- package/source/theme/defaultTheme.ts +100 -0
- package/source/theme/internals/ClassName.ts +1 -0
- package/source/theme/internals/ComponentProps.ts +13 -0
- package/source/theme/internals/ComponentTheme.ts +50 -0
- package/source/theme/internals/ComponentThemeCompoundVariants.ts +20 -0
- package/source/theme/internals/ComponentThemeDefinition.ts +7 -0
- package/source/theme/internals/ComponentThemeDefinitionElements.ts +1 -0
- package/source/theme/internals/ComponentThemeDefinitionVariants.ts +3 -0
- package/source/theme/internals/ComponentThemeProps.ts +11 -0
- package/source/theme/internals/ComponentThemeVariants.ts +24 -0
- package/source/theme/internals/ComponentWithTheme.ts +6 -0
- package/source/theme/internals/UseComponentTheme.ts +22 -0
- package/source/theme/internals/UseComponentThemeReturn.ts +15 -0
- package/source/theme/internals/booleanToString.ts +6 -0
- package/source/theme/internals/createComponentTheme.ts +70 -0
- package/source/theme/internals/createUseComponentThemeReturn.ts +87 -0
- package/source/theme/internals/pickPropertyIfExists.ts +24 -0
- package/source/theme/internals/themeContext.ts +5 -0
- package/source/theme/internals/useTheme.ts +7 -0
- package/source/theme/internals.ts +18 -0
- package/source/theme.ts +3 -0
- package/source/utilities/WithLocaleOrLocales.ts +1 -0
- package/source/utilities/formatDateTime.ts +15 -0
- package/source/utilities/formatNumber.ts +15 -0
- package/source/utilities/internals/cache.ts +1 -0
- package/source/utilities/internals/createCacheKey.ts +9 -0
- package/source/utilities/internals/getMemoized.ts +14 -0
- package/source/utilities/internals/normalizeLocales.ts +15 -0
- package/source/utilities/internals.ts +4 -0
- package/source/utilities.ts +3 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type Ref } from 'react';
|
|
2
|
+
import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
|
|
3
|
+
export declare const useLabelTheme: (() => (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string) & {
|
|
4
|
+
componentThemeName: "Label";
|
|
5
|
+
themeDefinition: undefined;
|
|
6
|
+
};
|
|
7
|
+
export type LabelProps<T extends ElementType> = PropsWithChildren<ComponentProps<typeof useLabelTheme> & ComponentPropsWithoutRef<T> & {
|
|
8
|
+
as?: T | undefined;
|
|
9
|
+
className?: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const Label: <T extends ElementType = "label">(props: import("react").PropsWithoutRef<import("react").ComponentProps<T>> & {
|
|
12
|
+
as?: T | undefined;
|
|
13
|
+
className?: string | undefined;
|
|
14
|
+
} & {
|
|
15
|
+
children?: import("react").ReactNode;
|
|
16
|
+
} & {
|
|
17
|
+
ref?: Ref<HTMLElement> | undefined;
|
|
18
|
+
}) => import("react").ReactNode;
|
|
19
|
+
export declare const labelTheme: ComponentTheme<typeof useLabelTheme>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Label as HeadlessLabel } from "@headlessui/react";
|
|
4
|
+
import {
|
|
5
|
+
createComponentTheme
|
|
6
|
+
} from "../theme/internals.js";
|
|
7
|
+
import { filterProps, forwardRef } from "./internals.js";
|
|
8
|
+
export const useLabelTheme = createComponentTheme("Label");
|
|
9
|
+
const LABEL_ELEMENT = "label";
|
|
10
|
+
export const Label = forwardRef(
|
|
11
|
+
({ as = LABEL_ELEMENT, className, children, ...rest }, ref) => {
|
|
12
|
+
let theme = useLabelTheme();
|
|
13
|
+
let props = filterProps({
|
|
14
|
+
as,
|
|
15
|
+
ref,
|
|
16
|
+
className: theme(null, className),
|
|
17
|
+
"data-component": "label",
|
|
18
|
+
...rest
|
|
19
|
+
});
|
|
20
|
+
return /* @__PURE__ */ jsx(HeadlessLabel, { ...props, children });
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
export const labelTheme = {
|
|
24
|
+
className: "block cursor-pointer font-sans text-sm font-medium"
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Label.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/components/Label.tsx"],
|
|
4
|
+
"sourcesContent": ["import {Label as HeadlessLabel, type LabelProps as HeadlessLabelProps} from '@headlessui/react';\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type PropsWithChildren,\n type Ref,\n} from 'react';\n\nimport {\n type ComponentProps,\n type ComponentTheme,\n createComponentTheme,\n} from '../theme/internals.js';\nimport {filterProps, forwardRef} from './internals.js';\n\nexport const useLabelTheme = createComponentTheme('Label');\n\nconst LABEL_ELEMENT = 'label';\n\nexport type LabelProps<T extends ElementType> = PropsWithChildren<\n ComponentProps<typeof useLabelTheme> &\n ComponentPropsWithoutRef<T> & {\n as?: T | undefined;\n className?: string;\n }\n>;\n\nexport const Label = forwardRef(\n <T extends ElementType = typeof LABEL_ELEMENT>(\n {as = LABEL_ELEMENT as T, className, children, ...rest}: LabelProps<T>,\n ref: Ref<HTMLElement>,\n ) => {\n let theme = useLabelTheme();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let props: HeadlessLabelProps<any> = filterProps({\n as,\n ref,\n className: theme(null, className),\n 'data-component': 'label',\n ...rest,\n });\n\n return <HeadlessLabel {...props}>{children}</HeadlessLabel>;\n },\n);\n\nexport const labelTheme: ComponentTheme<typeof useLabelTheme> = {\n className: 'block cursor-pointer font-sans text-sm font-medium',\n};\n"],
|
|
5
|
+
"mappings": ";AA0CW;AA1CX,SAAQ,SAAS,qBAA2D;AAQ5E;AAAA,EAGE;AAAA,OACK;AACP,SAAQ,aAAa,kBAAiB;AAE/B,aAAM,gBAAgB,qBAAqB,OAAO;AAEzD,MAAM,gBAAgB;AAUf,aAAM,QAAQ;AAAA,EACnB,CACE,EAAC,KAAK,eAAoB,WAAW,UAAU,GAAG,KAAI,GACtD,QACG;AACH,QAAI,QAAQ,cAAc;AAE1B,QAAI,QAAiC,YAAY;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,WAAW,MAAM,MAAM,SAAS;AAAA,MAChC,kBAAkB;AAAA,MAClB,GAAG;AAAA,IACL,CAAC;AAED,WAAO,oBAAC,iBAAe,GAAG,OAAQ,UAAS;AAAA,EAC7C;AACF;AAEO,aAAM,aAAmD;AAAA,EAC9D,WAAW;AACb;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type Ref } from 'react';
|
|
2
|
+
import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
|
|
3
|
+
export declare const useLegendTheme: (() => (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string) & {
|
|
4
|
+
componentThemeName: "Legend";
|
|
5
|
+
themeDefinition: undefined;
|
|
6
|
+
};
|
|
7
|
+
export type LegendProps<T extends ElementType> = PropsWithChildren<ComponentProps<typeof useLegendTheme> & ComponentPropsWithoutRef<T> & {
|
|
8
|
+
as?: T | undefined;
|
|
9
|
+
className?: string | undefined;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const Legend: <T extends ElementType = "div">(props: import("react").PropsWithoutRef<import("react").ComponentProps<T>> & {
|
|
12
|
+
as?: T | undefined;
|
|
13
|
+
className?: string | undefined;
|
|
14
|
+
} & {
|
|
15
|
+
children?: import("react").ReactNode;
|
|
16
|
+
} & {
|
|
17
|
+
ref?: Ref<HTMLElement> | undefined;
|
|
18
|
+
}) => import("react").ReactNode;
|
|
19
|
+
export declare const legendTheme: ComponentTheme<typeof useLegendTheme>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Legend as HeadlessLegend } from "@headlessui/react";
|
|
4
|
+
import {
|
|
5
|
+
createComponentTheme
|
|
6
|
+
} from "../theme/internals.js";
|
|
7
|
+
import { filterProps, forwardRef } from "./internals.js";
|
|
8
|
+
export const useLegendTheme = createComponentTheme("Legend");
|
|
9
|
+
const LEGEND_ELEMENT = "div";
|
|
10
|
+
export const Legend = forwardRef(
|
|
11
|
+
({ as = LEGEND_ELEMENT, className, children, ...rest }, ref) => {
|
|
12
|
+
let theme = useLegendTheme();
|
|
13
|
+
let props = filterProps({
|
|
14
|
+
as,
|
|
15
|
+
ref,
|
|
16
|
+
className: theme(null, className),
|
|
17
|
+
"data-component": "legend",
|
|
18
|
+
...rest
|
|
19
|
+
});
|
|
20
|
+
return /* @__PURE__ */ jsx(HeadlessLegend, { ...props, children });
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
export const legendTheme = {
|
|
24
|
+
className: "font-sans font-semibold text-sm"
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Legend.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/components/Legend.tsx"],
|
|
4
|
+
"sourcesContent": ["import {Legend as HeadlessLegend, type LegendProps as HeadlessLegendProps} from '@headlessui/react';\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type PropsWithChildren,\n type Ref,\n} from 'react';\n\nimport {\n type ComponentProps,\n type ComponentTheme,\n createComponentTheme,\n} from '../theme/internals.js';\nimport {filterProps, forwardRef} from './internals.js';\n\nexport const useLegendTheme = createComponentTheme('Legend');\n\nconst LEGEND_ELEMENT = 'div';\n\nexport type LegendProps<T extends ElementType> = PropsWithChildren<\n ComponentProps<typeof useLegendTheme> &\n ComponentPropsWithoutRef<T> & {\n as?: T | undefined;\n className?: string | undefined;\n }\n>;\n\nexport const Legend = forwardRef(\n <T extends ElementType = typeof LEGEND_ELEMENT>(\n {as = LEGEND_ELEMENT as T, className, children, ...rest}: LegendProps<T>,\n ref: Ref<HTMLElement>,\n ) => {\n let theme = useLegendTheme();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let props: HeadlessLegendProps<any> = filterProps({\n as,\n ref,\n className: theme(null, className),\n 'data-component': 'legend',\n ...rest,\n });\n\n return <HeadlessLegend {...props}>{children}</HeadlessLegend>;\n },\n);\n\nexport const legendTheme: ComponentTheme<typeof useLegendTheme> = {\n className: 'font-sans font-semibold text-sm',\n};\n"],
|
|
5
|
+
"mappings": ";AA0CW;AA1CX,SAAQ,UAAU,sBAA8D;AAQhF;AAAA,EAGE;AAAA,OACK;AACP,SAAQ,aAAa,kBAAiB;AAE/B,aAAM,iBAAiB,qBAAqB,QAAQ;AAE3D,MAAM,iBAAiB;AAUhB,aAAM,SAAS;AAAA,EACpB,CACE,EAAC,KAAK,gBAAqB,WAAW,UAAU,GAAG,KAAI,GACvD,QACG;AACH,QAAI,QAAQ,eAAe;AAE3B,QAAI,QAAkC,YAAY;AAAA,MAChD;AAAA,MACA;AAAA,MACA,WAAW,MAAM,MAAM,SAAS;AAAA,MAChC,kBAAkB;AAAA,MAClB,GAAG;AAAA,IACL,CAAC;AAED,WAAO,oBAAC,kBAAgB,GAAG,OAAQ,UAAS;AAAA,EAC9C;AACF;AAEO,aAAM,cAAqD;AAAA,EAChE,WAAW;AACb;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type ReactNode, type Ref } from 'react';
|
|
2
|
+
import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
|
|
3
|
+
export declare const useListboxTheme: ((themeProps: {
|
|
4
|
+
readonly disabled: boolean;
|
|
5
|
+
readonly invalid: boolean;
|
|
6
|
+
}) => {
|
|
7
|
+
filter: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
8
|
+
label: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
9
|
+
icon: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
10
|
+
root: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
11
|
+
options: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
12
|
+
}) & {
|
|
13
|
+
componentThemeName: "Listbox";
|
|
14
|
+
themeDefinition: {
|
|
15
|
+
readonly variants: {
|
|
16
|
+
readonly disabled: [true, false];
|
|
17
|
+
readonly invalid: [true, false];
|
|
18
|
+
};
|
|
19
|
+
readonly elements: ["root", "label", "icon", "options", "filter"];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type ListboxItem<V> = {
|
|
23
|
+
value: V;
|
|
24
|
+
label: string;
|
|
25
|
+
};
|
|
26
|
+
export type ListboxProps<T extends ElementType, V extends boolean | number | string> = PropsWithChildren<ComponentProps<typeof useListboxTheme> & ComponentPropsWithoutRef<T> & ({
|
|
27
|
+
as?: T | undefined;
|
|
28
|
+
value?: V | undefined;
|
|
29
|
+
defaultValue?: V | undefined;
|
|
30
|
+
multiple?: false | undefined;
|
|
31
|
+
hideSelected?: never;
|
|
32
|
+
items?: Array<ListboxItem<V>> | undefined;
|
|
33
|
+
placeholder?: string;
|
|
34
|
+
name?: string | undefined;
|
|
35
|
+
className?: string | undefined;
|
|
36
|
+
showFilter?: boolean | undefined;
|
|
37
|
+
onChange?: (selectedValue: V) => void;
|
|
38
|
+
} | {
|
|
39
|
+
as?: T | undefined;
|
|
40
|
+
value?: V[] | undefined;
|
|
41
|
+
defaultValue?: V[] | undefined;
|
|
42
|
+
multiple: true;
|
|
43
|
+
hideSelected?: {
|
|
44
|
+
limit: number;
|
|
45
|
+
message?: string | undefined;
|
|
46
|
+
} | undefined;
|
|
47
|
+
items?: Array<ListboxItem<V>> | undefined;
|
|
48
|
+
placeholder?: string;
|
|
49
|
+
name?: string | undefined;
|
|
50
|
+
className?: string | undefined;
|
|
51
|
+
showFilter?: boolean | undefined;
|
|
52
|
+
onChange?: (selectedValue: V[]) => void;
|
|
53
|
+
})>;
|
|
54
|
+
export declare const Listbox: <T extends ElementType = import("react").ExoticComponent<{
|
|
55
|
+
children?: ReactNode;
|
|
56
|
+
}>, V extends string | number | boolean = string>(props: ListboxProps<T, V> & {
|
|
57
|
+
ref?: Ref<HTMLElement> | undefined;
|
|
58
|
+
}) => ReactNode;
|
|
59
|
+
export declare const listboxTheme: ComponentTheme<typeof useListboxTheme>;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import {
|
|
4
|
+
Listbox as HeadlessListbox,
|
|
5
|
+
ListboxButton as HeadlessListboxButton,
|
|
6
|
+
ListboxOptions as HeadlessListboxOptions
|
|
7
|
+
} from "@headlessui/react";
|
|
8
|
+
import {
|
|
9
|
+
Children,
|
|
10
|
+
Fragment as Fragment2,
|
|
11
|
+
useCallback,
|
|
12
|
+
useRef,
|
|
13
|
+
useState
|
|
14
|
+
} from "react";
|
|
15
|
+
import {
|
|
16
|
+
createComponentTheme
|
|
17
|
+
} from "../theme/internals.js";
|
|
18
|
+
import { Icon } from "./Icon.js";
|
|
19
|
+
import { Input } from "./Input.js";
|
|
20
|
+
import { forwardRef, useFormId } from "./internals.js";
|
|
21
|
+
import { ListboxOption } from "./ListboxOption.js";
|
|
22
|
+
import { useField } from "./useField.js";
|
|
23
|
+
import { useFieldName } from "./useFieldName.js";
|
|
24
|
+
export const useListboxTheme = createComponentTheme("Listbox", {
|
|
25
|
+
variants: { disabled: [true, false], invalid: [true, false] },
|
|
26
|
+
elements: ["root", "label", "icon", "options", "filter"]
|
|
27
|
+
});
|
|
28
|
+
const LISTBOX_ELEMENT = Fragment2;
|
|
29
|
+
export const Listbox = forwardRef(
|
|
30
|
+
({
|
|
31
|
+
disabled = false,
|
|
32
|
+
invalid = false,
|
|
33
|
+
as = LISTBOX_ELEMENT,
|
|
34
|
+
value,
|
|
35
|
+
defaultValue,
|
|
36
|
+
multiple,
|
|
37
|
+
hideSelected,
|
|
38
|
+
items,
|
|
39
|
+
placeholder,
|
|
40
|
+
name,
|
|
41
|
+
className,
|
|
42
|
+
showFilter,
|
|
43
|
+
onChange,
|
|
44
|
+
children,
|
|
45
|
+
...rest
|
|
46
|
+
}, ref) => {
|
|
47
|
+
let theme = useListboxTheme({ disabled, invalid });
|
|
48
|
+
let formId = useFormId();
|
|
49
|
+
let field = useField();
|
|
50
|
+
let fieldName = useFieldName();
|
|
51
|
+
let [query, setQuery] = useState("");
|
|
52
|
+
let inputRef = useRef(null);
|
|
53
|
+
let handleChange = useCallback(
|
|
54
|
+
(selectedValue) => {
|
|
55
|
+
onChange?.(selectedValue);
|
|
56
|
+
},
|
|
57
|
+
[onChange]
|
|
58
|
+
);
|
|
59
|
+
let handleTab = useCallback(
|
|
60
|
+
(event) => {
|
|
61
|
+
if (!showFilter) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (event.key === "Tab" && document.activeElement !== inputRef.current) {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
inputRef.current?.focus();
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
[showFilter]
|
|
70
|
+
);
|
|
71
|
+
let handleQueryChange = useCallback((event) => {
|
|
72
|
+
setQuery(event.target.value);
|
|
73
|
+
}, []);
|
|
74
|
+
if (items && children) {
|
|
75
|
+
throw new Error("Combobox accepts only either `items` prop, or children!");
|
|
76
|
+
}
|
|
77
|
+
let filteredItems = query ? items?.filter(
|
|
78
|
+
(item) => item.label.toLowerCase().replace(/\s+/g, "").includes(query.toLowerCase().replace(/\s+/g, ""))
|
|
79
|
+
) : items;
|
|
80
|
+
let filteredChildren = query ? Children.toArray(children).filter((child) => {
|
|
81
|
+
if (typeof child === "object" && "props" in child && typeof child.props === "object" && typeof child.props.children === "string" && child.props.children.toLowerCase().replace(/\s+/g, "").includes(query.toLowerCase().replace(/\s+/g, ""))) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
}) : children;
|
|
86
|
+
let props = {
|
|
87
|
+
as,
|
|
88
|
+
ref,
|
|
89
|
+
name: field?.name ?? fieldName ?? name,
|
|
90
|
+
value: value ?? null,
|
|
91
|
+
defaultValue,
|
|
92
|
+
multiple,
|
|
93
|
+
disabled,
|
|
94
|
+
invalid,
|
|
95
|
+
form: formId,
|
|
96
|
+
onChange: handleChange,
|
|
97
|
+
...rest
|
|
98
|
+
};
|
|
99
|
+
return /* @__PURE__ */ jsxs(HeadlessListbox, { ...props, children: [
|
|
100
|
+
/* @__PURE__ */ jsx(
|
|
101
|
+
HeadlessListboxButton,
|
|
102
|
+
{
|
|
103
|
+
className: theme.root("relative", className),
|
|
104
|
+
"data-multiple": multiple ? true : null,
|
|
105
|
+
"data-component": "listbox",
|
|
106
|
+
children: ({ value: selectedValue }) => {
|
|
107
|
+
if (!items && !multiple) {
|
|
108
|
+
let selectedItem2;
|
|
109
|
+
Children.forEach(filteredChildren, (child) => {
|
|
110
|
+
if (!child) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (typeof child === "object" && "props" in child && typeof child.props === "object" && child.props.value === selectedValue) {
|
|
114
|
+
selectedItem2 = child.props.children;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
118
|
+
/* @__PURE__ */ jsx("span", { className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"), children: selectedItem2 ?? placeholder ?? null }),
|
|
119
|
+
/* @__PURE__ */ jsx("span", { className: theme.icon("absolute"), children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUpDown" }) })
|
|
120
|
+
] });
|
|
121
|
+
} else if (!items && multiple) {
|
|
122
|
+
let itemsHidden = false;
|
|
123
|
+
let selectedItems = [];
|
|
124
|
+
Children.forEach(filteredChildren, (child) => {
|
|
125
|
+
if (!child) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (typeof child === "object" && "props" in child && typeof child.props === "object" && selectedValue.includes(
|
|
129
|
+
child.props.value
|
|
130
|
+
)) {
|
|
131
|
+
selectedItems.push(
|
|
132
|
+
child.props.children
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
if (hideSelected && selectedItems.length > hideSelected.limit) {
|
|
137
|
+
selectedItems = selectedItems.slice(0, hideSelected.limit);
|
|
138
|
+
itemsHidden = true;
|
|
139
|
+
}
|
|
140
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
141
|
+
selectedItems.length ? selectedItems.map((selectedItem2, index) => /* @__PURE__ */ jsx(
|
|
142
|
+
"span",
|
|
143
|
+
{
|
|
144
|
+
className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"),
|
|
145
|
+
children: selectedItem2
|
|
146
|
+
},
|
|
147
|
+
index
|
|
148
|
+
)) : placeholder ?? null,
|
|
149
|
+
itemsHidden ? /* @__PURE__ */ jsx(
|
|
150
|
+
"span",
|
|
151
|
+
{
|
|
152
|
+
"data-ellipsis": true,
|
|
153
|
+
className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"),
|
|
154
|
+
children: hideSelected?.message ?? "\u2026"
|
|
155
|
+
}
|
|
156
|
+
) : null,
|
|
157
|
+
/* @__PURE__ */ jsx("span", { className: theme.icon("absolute"), children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUpDown" }) })
|
|
158
|
+
] });
|
|
159
|
+
} else if (items && multiple) {
|
|
160
|
+
let itemsHidden = false;
|
|
161
|
+
let selectedItems = filteredItems?.filter(
|
|
162
|
+
(item) => selectedValue?.includes(item.value)
|
|
163
|
+
) ?? [];
|
|
164
|
+
if (hideSelected && selectedItems.length > hideSelected.limit) {
|
|
165
|
+
selectedItems = selectedItems.slice(0, hideSelected.limit);
|
|
166
|
+
itemsHidden = true;
|
|
167
|
+
}
|
|
168
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
169
|
+
selectedItems.length ? selectedItems.map((selectedItem2, index) => /* @__PURE__ */ jsx(
|
|
170
|
+
"span",
|
|
171
|
+
{
|
|
172
|
+
className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"),
|
|
173
|
+
children: selectedItem2.label
|
|
174
|
+
},
|
|
175
|
+
index
|
|
176
|
+
)) : placeholder ?? null,
|
|
177
|
+
itemsHidden ? /* @__PURE__ */ jsx(
|
|
178
|
+
"span",
|
|
179
|
+
{
|
|
180
|
+
"data-ellipsis": true,
|
|
181
|
+
className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"),
|
|
182
|
+
children: hideSelected?.message ?? "\u2026"
|
|
183
|
+
}
|
|
184
|
+
) : null,
|
|
185
|
+
/* @__PURE__ */ jsx("span", { className: theme.icon("absolute"), children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUpDown" }) })
|
|
186
|
+
] });
|
|
187
|
+
}
|
|
188
|
+
let selectedItem = filteredItems?.find((item) => item.value === selectedValue);
|
|
189
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
190
|
+
/* @__PURE__ */ jsx("span", { className: theme.label("overflow-hidden text-ellipsis whitespace-nowrap"), children: selectedItem?.label ?? placeholder ?? null }),
|
|
191
|
+
/* @__PURE__ */ jsx("span", { className: theme.icon("absolute"), children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUpDown" }) })
|
|
192
|
+
] });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
/* @__PURE__ */ jsxs(
|
|
197
|
+
HeadlessListboxOptions,
|
|
198
|
+
{
|
|
199
|
+
className: theme.options(),
|
|
200
|
+
anchor: "bottom start",
|
|
201
|
+
onKeyDown: handleTab,
|
|
202
|
+
children: [
|
|
203
|
+
showFilter ? /* @__PURE__ */ jsx("div", { className: theme.filter(), children: /* @__PURE__ */ jsx(Input, { ref: inputRef, showClearButton: true, value: query, onInput: handleQueryChange }) }) : null,
|
|
204
|
+
items ? filteredItems?.map((item) => /* @__PURE__ */ jsx(ListboxOption, { value: item.value, children: item.label }, item.label)) : filteredChildren
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
)
|
|
208
|
+
] });
|
|
209
|
+
}
|
|
210
|
+
);
|
|
211
|
+
export const listboxTheme = {
|
|
212
|
+
classNames: {
|
|
213
|
+
root: "flex w-full min-w-32 items-center rounded-2 border-2 border-gray-100 hover:border-gray-200 bg-white px-2.5 h-9 pr-9 gap-x-2 transition-colors shadow-inner font-sans text-sm",
|
|
214
|
+
label: "flex gap-x-2",
|
|
215
|
+
icon: "text-gray-500 size-5 top-1.5 right-1.5 cursor-pointer",
|
|
216
|
+
options: "flex flex-col gap-y-1 shadow p-1 z-30 rounded-2 border-2 border-gray-100 hover:border-gray-200 bg-white text-left w-[var(--button-width)] [--anchor-gap:theme(spacing.1)] [--anchor-padding:theme(spacing.2)] [scrollbar-width:thin] empty:invisible transition-colors",
|
|
217
|
+
filter: "[&>[data-component=input]]:rounded"
|
|
218
|
+
},
|
|
219
|
+
variants: {
|
|
220
|
+
disabled: {
|
|
221
|
+
true: {
|
|
222
|
+
root: "border-gray-100 text-gray-200 cursor-not-allowed",
|
|
223
|
+
label: "",
|
|
224
|
+
icon: "text-gray-200",
|
|
225
|
+
options: "border-gray-100",
|
|
226
|
+
filter: ""
|
|
227
|
+
},
|
|
228
|
+
false: {
|
|
229
|
+
root: "",
|
|
230
|
+
label: "",
|
|
231
|
+
icon: "",
|
|
232
|
+
options: "",
|
|
233
|
+
filter: ""
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
invalid: {
|
|
237
|
+
true: {
|
|
238
|
+
root: "",
|
|
239
|
+
label: "",
|
|
240
|
+
icon: "",
|
|
241
|
+
options: "",
|
|
242
|
+
filter: ""
|
|
243
|
+
},
|
|
244
|
+
false: {
|
|
245
|
+
root: "",
|
|
246
|
+
label: "",
|
|
247
|
+
icon: "",
|
|
248
|
+
options: "",
|
|
249
|
+
filter: ""
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
//# sourceMappingURL=Listbox.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/components/Listbox.tsx"],
|
|
4
|
+
"sourcesContent": ["// TODO: fix somehow\n/* eslint-disable complexity -- TODO */\nimport {\n Listbox as HeadlessListbox,\n ListboxButton as HeadlessListboxButton,\n ListboxOptions as HeadlessListboxOptions,\n type ListboxProps as HeadlessListboxProps,\n} from '@headlessui/react';\nimport {\n type ChangeEvent,\n Children,\n type ComponentPropsWithoutRef,\n type ElementType,\n Fragment,\n type KeyboardEvent,\n type PropsWithChildren,\n type ReactNode,\n type Ref,\n useCallback,\n useRef,\n useState,\n} from 'react';\n\nimport {\n type ComponentProps,\n type ComponentTheme,\n createComponentTheme,\n} from '../theme/internals.js';\nimport {Icon} from './Icon.js';\nimport {Input} from './Input.js';\nimport {forwardRef, useFormId} from './internals.js';\nimport {ListboxOption} from './ListboxOption.js';\nimport {useField} from './useField.js';\nimport {useFieldName} from './useFieldName.js';\n\nexport const useListboxTheme = createComponentTheme('Listbox', {\n variants: {disabled: [true, false], invalid: [true, false]},\n elements: ['root', 'label', 'icon', 'options', 'filter'],\n});\n\nconst LISTBOX_ELEMENT = Fragment;\n\nexport type ListboxItem<V> = {\n value: V;\n label: string;\n};\n\nexport type ListboxProps<\n T extends ElementType,\n V extends boolean | number | string,\n> = PropsWithChildren<\n ComponentProps<typeof useListboxTheme> &\n ComponentPropsWithoutRef<T> &\n (\n | {\n as?: T | undefined;\n value?: V | undefined;\n defaultValue?: V | undefined;\n multiple?: false | undefined;\n hideSelected?: never; // must be here so the type of props is correct\n items?: Array<ListboxItem<V>> | undefined;\n placeholder?: string;\n name?: string | undefined;\n className?: string | undefined;\n showFilter?: boolean | undefined;\n onChange?: (selectedValue: V) => void;\n }\n | {\n as?: T | undefined;\n value?: V[] | undefined;\n defaultValue?: V[] | undefined;\n multiple: true;\n hideSelected?:\n | {\n limit: number;\n message?: string | undefined;\n }\n | undefined;\n items?: Array<ListboxItem<V>> | undefined;\n placeholder?: string;\n name?: string | undefined;\n className?: string | undefined;\n showFilter?: boolean | undefined;\n onChange?: (selectedValue: V[]) => void;\n }\n )\n>;\n\nexport const Listbox = forwardRef(\n <T extends ElementType = typeof LISTBOX_ELEMENT, V extends boolean | number | string = string>(\n {\n disabled = false,\n invalid = false,\n as = LISTBOX_ELEMENT as unknown as T,\n value,\n defaultValue,\n multiple,\n hideSelected,\n items,\n placeholder,\n name,\n className,\n showFilter,\n onChange,\n children,\n ...rest\n }: ListboxProps<T, V>,\n ref: Ref<HTMLElement>,\n ) => {\n let theme = useListboxTheme({disabled, invalid});\n let formId = useFormId();\n let field = useField();\n let fieldName = useFieldName();\n let [query, setQuery] = useState('');\n let inputRef = useRef<HTMLElement>(null);\n\n let handleChange = useCallback(\n (selectedValue: V) => {\n onChange?.(selectedValue as V & V[]);\n },\n [onChange],\n );\n\n // hacky solution so the user is able to focus inout used for filtering\n let handleTab = useCallback(\n (event: KeyboardEvent) => {\n if (!showFilter) {\n return;\n }\n\n if (event.key === 'Tab' && document.activeElement !== inputRef.current) {\n event.preventDefault();\n inputRef.current?.focus();\n }\n },\n [showFilter],\n );\n\n let handleQueryChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value);\n }, []);\n\n if (items && children) {\n throw new Error('Combobox accepts only either `items` prop, or children!');\n }\n\n let filteredItems =\n query ?\n items?.filter((item) =>\n item.label\n .toLowerCase()\n .replace(/\\s+/g, '')\n .includes(query.toLowerCase().replace(/\\s+/g, '')),\n )\n : items;\n let filteredChildren =\n query ?\n Children.toArray(children).filter((child) => {\n if (\n typeof child === 'object' &&\n 'props' in child &&\n typeof child.props === 'object' &&\n typeof (child.props as {children?: unknown[] | string}).children === 'string' &&\n (child.props as {children: string}).children\n .toLowerCase()\n .replace(/\\s+/g, '')\n .includes(query.toLowerCase().replace(/\\s+/g, ''))\n ) {\n return true;\n }\n\n return false;\n })\n : children;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let props: HeadlessListboxProps<any, any> = {\n as,\n ref,\n name: field?.name ?? fieldName ?? name,\n value: value ?? null,\n defaultValue,\n multiple,\n disabled,\n invalid,\n form: formId,\n onChange: handleChange,\n ...rest,\n };\n\n return (\n <HeadlessListbox {...props}>\n <HeadlessListboxButton\n className={theme.root('relative', className)}\n data-multiple={multiple ? true : null}\n data-component=\"listbox\"\n >\n {({value: selectedValue}) => {\n if (!items && !multiple) {\n let selectedItem: ReactNode;\n\n Children.forEach(filteredChildren, (child) => {\n if (!child) {\n return;\n }\n\n if (\n typeof child === 'object' &&\n 'props' in child &&\n typeof child.props === 'object' &&\n (child.props as Record<string, unknown>).value === selectedValue\n ) {\n selectedItem = (child.props as Record<string, unknown>).children as ReactNode;\n }\n });\n\n return (\n <>\n <span className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}>\n {selectedItem ?? placeholder ?? null}\n </span>\n <span className={theme.icon('absolute')}>\n <Icon name=\"ChevronUpDown\" />\n </span>\n </>\n );\n } else if (!items && multiple) {\n let itemsHidden = false;\n let selectedItems: ReactNode[] = [];\n\n Children.forEach(filteredChildren, (child) => {\n if (!child) {\n return;\n }\n\n if (\n typeof child === 'object' &&\n 'props' in child &&\n typeof child.props === 'object' &&\n (selectedValue as unknown[]).includes(\n (child.props as Record<string, unknown>).value,\n )\n ) {\n selectedItems.push(\n (child.props as Record<string, unknown>).children as ReactNode,\n );\n }\n });\n\n if (hideSelected && selectedItems.length > hideSelected.limit) {\n selectedItems = selectedItems.slice(0, hideSelected.limit);\n itemsHidden = true;\n }\n\n return (\n <>\n {selectedItems.length ?\n selectedItems.map((selectedItem, index) => (\n <span\n // eslint-disable-next-line react/no-array-index-key -- needed\n key={index}\n className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}\n >\n {selectedItem}\n </span>\n ))\n : placeholder ?? null}\n {itemsHidden ?\n <span\n data-ellipsis\n className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}\n >\n {hideSelected?.message ?? '\u2026'}\n </span>\n : null}\n <span className={theme.icon('absolute')}>\n <Icon name=\"ChevronUpDown\" />\n </span>\n </>\n );\n } else if (items && multiple) {\n let itemsHidden = false;\n let selectedItems =\n filteredItems?.filter((item) =>\n (selectedValue as unknown[] | undefined)?.includes(item.value),\n ) ?? [];\n\n if (hideSelected && selectedItems.length > hideSelected.limit) {\n selectedItems = selectedItems.slice(0, hideSelected.limit);\n itemsHidden = true;\n }\n\n return (\n <>\n {selectedItems.length ?\n selectedItems.map((selectedItem, index) => (\n <span\n // eslint-disable-next-line react/no-array-index-key -- needed\n key={index}\n className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}\n >\n {selectedItem.label}\n </span>\n ))\n : placeholder ?? null}\n {itemsHidden ?\n <span\n data-ellipsis\n className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}\n >\n {hideSelected?.message ?? '\u2026'}\n </span>\n : null}\n <span className={theme.icon('absolute')}>\n <Icon name=\"ChevronUpDown\" />\n </span>\n </>\n );\n }\n\n let selectedItem = filteredItems?.find((item) => item.value === selectedValue);\n\n return (\n <>\n <span className={theme.label('overflow-hidden text-ellipsis whitespace-nowrap')}>\n {selectedItem?.label ?? placeholder ?? null}\n </span>\n <span className={theme.icon('absolute')}>\n <Icon name=\"ChevronUpDown\" />\n </span>\n </>\n );\n }}\n </HeadlessListboxButton>\n <HeadlessListboxOptions\n className={theme.options()}\n anchor=\"bottom start\"\n onKeyDown={handleTab}\n >\n {showFilter ?\n <div className={theme.filter()}>\n <Input ref={inputRef} showClearButton value={query} onInput={handleQueryChange} />\n </div>\n : null}\n {items ?\n filteredItems?.map((item) => (\n <ListboxOption key={item.label} value={item.value}>\n {item.label}\n </ListboxOption>\n ))\n : filteredChildren}\n </HeadlessListboxOptions>\n </HeadlessListbox>\n );\n },\n);\n\nexport const listboxTheme: ComponentTheme<typeof useListboxTheme> = {\n classNames: {\n root: 'flex w-full min-w-32 items-center rounded-2 border-2 border-gray-100 hover:border-gray-200 bg-white px-2.5 h-9 pr-9 gap-x-2 transition-colors shadow-inner font-sans text-sm',\n label: 'flex gap-x-2',\n icon: 'text-gray-500 size-5 top-1.5 right-1.5 cursor-pointer',\n options:\n 'flex flex-col gap-y-1 shadow p-1 z-30 rounded-2 border-2 border-gray-100 hover:border-gray-200 bg-white text-left w-[var(--button-width)] [--anchor-gap:theme(spacing.1)] [--anchor-padding:theme(spacing.2)] [scrollbar-width:thin] empty:invisible transition-colors',\n filter: '[&>[data-component=input]]:rounded',\n },\n variants: {\n disabled: {\n true: {\n root: 'border-gray-100 text-gray-200 cursor-not-allowed',\n label: '',\n icon: 'text-gray-200',\n options: 'border-gray-100',\n filter: '',\n },\n false: {\n root: '',\n label: '',\n icon: '',\n options: '',\n filter: '',\n },\n },\n invalid: {\n true: {\n root: '',\n label: '',\n icon: '',\n options: '',\n filter: '',\n },\n false: {\n root: '',\n label: '',\n icon: '',\n options: '',\n filter: '',\n },\n },\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Fragment", "selectedItem"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type Ref } from 'react';
|
|
2
|
+
import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
|
|
3
|
+
export declare const useListboxOptionTheme: ((themeProps: {
|
|
4
|
+
readonly disabled: boolean;
|
|
5
|
+
}) => {
|
|
6
|
+
icon: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
7
|
+
root: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
|
|
8
|
+
}) & {
|
|
9
|
+
componentThemeName: "ListboxOption";
|
|
10
|
+
themeDefinition: {
|
|
11
|
+
readonly variants: {
|
|
12
|
+
readonly disabled: [true, false];
|
|
13
|
+
};
|
|
14
|
+
readonly elements: ["root", "icon"];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type ListboxOptionProps<T extends ElementType, V extends boolean | number | string> = PropsWithChildren<ComponentProps<typeof useListboxOptionTheme> & ComponentPropsWithoutRef<T> & {
|
|
18
|
+
as?: T | undefined;
|
|
19
|
+
value: V;
|
|
20
|
+
className?: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const ListboxOption: <T extends ElementType = "div", V extends string | number | boolean = string>(props: Partial<import("@jakubmazanec/ts-utils").Writable<{
|
|
23
|
+
readonly disabled: boolean;
|
|
24
|
+
}>> & import("react").PropsWithoutRef<import("react").ComponentProps<T>> & {
|
|
25
|
+
as?: T | undefined;
|
|
26
|
+
value: V;
|
|
27
|
+
className?: string | undefined;
|
|
28
|
+
} & {
|
|
29
|
+
children?: import("react").ReactNode;
|
|
30
|
+
} & {
|
|
31
|
+
ref?: Ref<HTMLElement> | undefined;
|
|
32
|
+
}) => import("react").ReactNode;
|
|
33
|
+
export declare const listboxOptionTheme: ComponentTheme<typeof useListboxOptionTheme>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import {
|
|
4
|
+
ListboxOption as HeadlessListboxOption
|
|
5
|
+
} from "@headlessui/react";
|
|
6
|
+
import {
|
|
7
|
+
createComponentTheme
|
|
8
|
+
} from "../theme/internals.js";
|
|
9
|
+
import { Icon } from "./Icon.js";
|
|
10
|
+
import { forwardRef } from "./internals.js";
|
|
11
|
+
export const useListboxOptionTheme = createComponentTheme("ListboxOption", {
|
|
12
|
+
variants: { disabled: [true, false] },
|
|
13
|
+
elements: ["root", "icon"]
|
|
14
|
+
});
|
|
15
|
+
const LISTBOX_OPTION_ELEMENT = "div";
|
|
16
|
+
export const ListboxOption = forwardRef(
|
|
17
|
+
({
|
|
18
|
+
disabled = false,
|
|
19
|
+
as = LISTBOX_OPTION_ELEMENT,
|
|
20
|
+
value,
|
|
21
|
+
className,
|
|
22
|
+
children,
|
|
23
|
+
...rest
|
|
24
|
+
}, ref) => {
|
|
25
|
+
let theme = useListboxOptionTheme({ disabled });
|
|
26
|
+
let props = {
|
|
27
|
+
as,
|
|
28
|
+
ref,
|
|
29
|
+
value,
|
|
30
|
+
disabled,
|
|
31
|
+
className: theme.root("cursor-pointer", className),
|
|
32
|
+
"data-component": "listbox-option",
|
|
33
|
+
...rest
|
|
34
|
+
};
|
|
35
|
+
return /* @__PURE__ */ jsxs(HeadlessListboxOption, { ...props, children: [
|
|
36
|
+
/* @__PURE__ */ jsx("span", { className: theme.icon("absolute"), children: /* @__PURE__ */ jsx(Icon, { name: "Check" }) }),
|
|
37
|
+
children
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
export const listboxOptionTheme = {
|
|
42
|
+
classNames: {
|
|
43
|
+
root: "relative group/option p-1 pr-6 rounded-1 hover:bg-gray-50 data-[active]:bg-gray-50 text-sm transition-colors",
|
|
44
|
+
icon: "hidden group-data-[selected]/option:block right-1 top-1 text-gray-500"
|
|
45
|
+
},
|
|
46
|
+
variants: {
|
|
47
|
+
disabled: {
|
|
48
|
+
true: {
|
|
49
|
+
root: "text-gray-200 cursor-not-allowed",
|
|
50
|
+
icon: "text-gray-200"
|
|
51
|
+
},
|
|
52
|
+
false: {
|
|
53
|
+
root: "",
|
|
54
|
+
icon: ""
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=ListboxOption.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/components/ListboxOption.tsx"],
|
|
4
|
+
"sourcesContent": ["import {\n ListboxOption as HeadlessListboxOption,\n type ListboxOptionProps as HeadlessListboxOptionProps,\n} from '@headlessui/react';\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type PropsWithChildren,\n type Ref,\n} from 'react';\n\nimport {\n type ComponentProps,\n type ComponentTheme,\n createComponentTheme,\n} from '../theme/internals.js';\nimport {Icon} from './Icon.js';\nimport {forwardRef} from './internals.js';\n\nexport const useListboxOptionTheme = createComponentTheme('ListboxOption', {\n variants: {disabled: [true, false]},\n elements: ['root', 'icon'],\n});\n\nconst LISTBOX_OPTION_ELEMENT = 'div';\n\nexport type ListboxOptionProps<\n T extends ElementType,\n V extends boolean | number | string,\n> = PropsWithChildren<\n ComponentProps<typeof useListboxOptionTheme> &\n ComponentPropsWithoutRef<T> & {\n as?: T | undefined;\n value: V;\n className?: string;\n }\n>;\n\nexport const ListboxOption = forwardRef(\n <\n T extends ElementType = typeof LISTBOX_OPTION_ELEMENT,\n V extends boolean | number | string = string,\n >(\n {\n disabled = false,\n as = LISTBOX_OPTION_ELEMENT as T,\n value,\n className,\n children,\n ...rest\n }: ListboxOptionProps<T, V>,\n ref: Ref<HTMLElement>,\n ) => {\n let theme = useListboxOptionTheme({disabled});\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let props: HeadlessListboxOptionProps<any, any> = {\n as,\n ref,\n value,\n disabled,\n className: theme.root('cursor-pointer', className),\n 'data-component': 'listbox-option',\n ...rest,\n };\n\n return (\n <HeadlessListboxOption {...props}>\n <span className={theme.icon('absolute')}>\n <Icon name=\"Check\" />\n </span>\n {children}\n </HeadlessListboxOption>\n );\n },\n);\n\nexport const listboxOptionTheme: ComponentTheme<typeof useListboxOptionTheme> = {\n classNames: {\n root: 'relative group/option p-1 pr-6 rounded-1 hover:bg-gray-50 data-[active]:bg-gray-50 text-sm transition-colors',\n icon: 'hidden group-data-[selected]/option:block right-1 top-1 text-gray-500',\n },\n variants: {\n disabled: {\n true: {\n root: 'text-gray-200 cursor-not-allowed',\n icon: 'text-gray-200',\n },\n false: {\n root: '',\n icon: '',\n },\n },\n },\n};\n"],
|
|
5
|
+
"mappings": ";AAmEM,SAEI,KAFJ;AAnEN;AAAA,EACE,iBAAiB;AAAA,OAEZ;AAQP;AAAA,EAGE;AAAA,OACK;AACP,SAAQ,YAAW;AACnB,SAAQ,kBAAiB;AAElB,aAAM,wBAAwB,qBAAqB,iBAAiB;AAAA,EACzE,UAAU,EAAC,UAAU,CAAC,MAAM,KAAK,EAAC;AAAA,EAClC,UAAU,CAAC,QAAQ,MAAM;AAC3B,CAAC;AAED,MAAM,yBAAyB;AAcxB,aAAM,gBAAgB;AAAA,EAC3B,CAIE;AAAA,IACE,WAAW;AAAA,IACX,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,QAAI,QAAQ,sBAAsB,EAAC,SAAQ,CAAC;AAG5C,QAAI,QAA8C;AAAA,MAChD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,MAAM,KAAK,kBAAkB,SAAS;AAAA,MACjD,kBAAkB;AAAA,MAClB,GAAG;AAAA,IACL;AAEA,WACE,qBAAC,yBAAuB,GAAG,OACzB;AAAA,0BAAC,UAAK,WAAW,MAAM,KAAK,UAAU,GACpC,8BAAC,QAAK,MAAK,SAAQ,GACrB;AAAA,MACC;AAAA,OACH;AAAA,EAEJ;AACF;AAEO,aAAM,qBAAmE;AAAA,EAC9E,YAAY;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type Ref } from 'react';
|
|
2
|
+
import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
|
|
3
|
+
export declare const useMenuTheme: (() => (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string) & {
|
|
4
|
+
componentThemeName: "Menu";
|
|
5
|
+
themeDefinition: undefined;
|
|
6
|
+
};
|
|
7
|
+
export type MenuProps<T extends ElementType> = PropsWithChildren<ComponentProps<typeof useMenuTheme> & ComponentPropsWithoutRef<T> & {
|
|
8
|
+
as?: T | undefined;
|
|
9
|
+
className?: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const Menu: <T extends ElementType = import("react").ExoticComponent<{
|
|
12
|
+
children?: import("react").ReactNode;
|
|
13
|
+
}>>(props: import("react").PropsWithoutRef<import("react").ComponentProps<T>> & {
|
|
14
|
+
as?: T | undefined;
|
|
15
|
+
className?: string | undefined;
|
|
16
|
+
} & {
|
|
17
|
+
children?: import("react").ReactNode;
|
|
18
|
+
} & {
|
|
19
|
+
ref?: Ref<HTMLElement> | undefined;
|
|
20
|
+
}) => import("react").ReactNode;
|
|
21
|
+
export declare const menuTheme: ComponentTheme<typeof useMenuTheme>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Menu as HeadlessMenu } from "@headlessui/react";
|
|
4
|
+
import {
|
|
5
|
+
Fragment
|
|
6
|
+
} from "react";
|
|
7
|
+
import {
|
|
8
|
+
createComponentTheme
|
|
9
|
+
} from "../theme/internals.js";
|
|
10
|
+
import { filterProps, forwardRef } from "./internals.js";
|
|
11
|
+
export const useMenuTheme = createComponentTheme("Menu");
|
|
12
|
+
const MENU_ELEMENT = Fragment;
|
|
13
|
+
export const Menu = forwardRef(
|
|
14
|
+
({ as = MENU_ELEMENT, className, children, ...rest }, ref) => {
|
|
15
|
+
let theme = useMenuTheme();
|
|
16
|
+
let props = filterProps({
|
|
17
|
+
as,
|
|
18
|
+
ref,
|
|
19
|
+
className: theme(null, className),
|
|
20
|
+
"data-component": "menu",
|
|
21
|
+
...rest
|
|
22
|
+
});
|
|
23
|
+
return /* @__PURE__ */ jsx(HeadlessMenu, { ...props, children });
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
export const menuTheme = {
|
|
27
|
+
className: null
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=Menu.js.map
|