@pickle-ui/react 0.0.0-stage → 1.0.0-beta.4
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 +490 -2
- package/dist/components/Alert.d.ts +38 -0
- package/dist/components/Alert.d.ts.map +1 -0
- package/dist/components/Alert.js +54 -0
- package/dist/components/Alert.js.map +1 -0
- package/dist/components/AlertDialog.d.ts +41 -0
- package/dist/components/AlertDialog.d.ts.map +1 -0
- package/dist/components/AlertDialog.js +47 -0
- package/dist/components/AlertDialog.js.map +1 -0
- package/dist/components/Avatar.d.ts +18 -0
- package/dist/components/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar.js +34 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.d.ts +12 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +37 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.d.ts +19 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +66 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.d.ts +27 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +34 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Dialog.d.ts +38 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +41 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/Flex.d.ts +22 -0
- package/dist/components/Flex.d.ts.map +1 -0
- package/dist/components/Flex.js +20 -0
- package/dist/components/Flex.js.map +1 -0
- package/dist/components/Grid.d.ts +66 -0
- package/dist/components/Grid.d.ts.map +1 -0
- package/dist/components/Grid.js +63 -0
- package/dist/components/Grid.js.map +1 -0
- package/dist/components/Group.d.ts +20 -0
- package/dist/components/Group.d.ts.map +1 -0
- package/dist/components/Group.js +43 -0
- package/dist/components/Group.js.map +1 -0
- package/dist/components/Menu.d.ts +53 -0
- package/dist/components/Menu.d.ts.map +1 -0
- package/dist/components/Menu.js +78 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Popover.d.ts +27 -0
- package/dist/components/Popover.d.ts.map +1 -0
- package/dist/components/Popover.js +34 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.d.ts +23 -0
- package/dist/components/Progress.d.ts.map +1 -0
- package/dist/components/Progress.js +26 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/ScrollArea.d.ts +32 -0
- package/dist/components/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea.js +36 -0
- package/dist/components/ScrollArea.js.map +1 -0
- package/dist/components/Separator.d.ts +7 -0
- package/dist/components/Separator.d.ts.map +1 -0
- package/dist/components/Separator.js +8 -0
- package/dist/components/Separator.js.map +1 -0
- package/dist/components/Sidebar.d.ts +35 -0
- package/dist/components/Sidebar.d.ts.map +1 -0
- package/dist/components/Sidebar.js +45 -0
- package/dist/components/Sidebar.js.map +1 -0
- package/dist/components/Spinner.d.ts +11 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +13 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Table.d.ts +32 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +37 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Text.d.ts +14 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +50 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/Toast.d.ts +39 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toast.js +97 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Tooltip.d.ts +18 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +22 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/XStack.d.ts +6 -0
- package/dist/components/XStack.d.ts.map +1 -0
- package/dist/components/XStack.js +8 -0
- package/dist/components/XStack.js.map +1 -0
- package/dist/components/YStack.d.ts +6 -0
- package/dist/components/YStack.d.ts.map +1 -0
- package/dist/components/YStack.js +8 -0
- package/dist/components/YStack.js.map +1 -0
- package/dist/components/_internal/VisuallyHiddenInput.d.ts +11 -0
- package/dist/components/_internal/VisuallyHiddenInput.d.ts.map +1 -0
- package/dist/components/_internal/VisuallyHiddenInput.js +105 -0
- package/dist/components/_internal/VisuallyHiddenInput.js.map +1 -0
- package/dist/components/_internal/dialog-styles.d.ts +15 -0
- package/dist/components/_internal/dialog-styles.d.ts.map +1 -0
- package/dist/components/_internal/dialog-styles.js +27 -0
- package/dist/components/_internal/dialog-styles.js.map +1 -0
- package/dist/components/_internal/layout.d.ts +46 -0
- package/dist/components/_internal/layout.d.ts.map +1 -0
- package/dist/components/_internal/layout.js +72 -0
- package/dist/components/_internal/layout.js.map +1 -0
- package/dist/components/form/Checkbox.d.ts +19 -0
- package/dist/components/form/Checkbox.d.ts.map +1 -0
- package/dist/components/form/Checkbox.js +27 -0
- package/dist/components/form/Checkbox.js.map +1 -0
- package/dist/components/form/ColorPicker.d.ts +25 -0
- package/dist/components/form/ColorPicker.d.ts.map +1 -0
- package/dist/components/form/ColorPicker.js +14 -0
- package/dist/components/form/ColorPicker.js.map +1 -0
- package/dist/components/form/ColorPickerPrimitive.d.ts +65 -0
- package/dist/components/form/ColorPickerPrimitive.d.ts.map +1 -0
- package/dist/components/form/ColorPickerPrimitive.js +486 -0
- package/dist/components/form/ColorPickerPrimitive.js.map +1 -0
- package/dist/components/form/Combobox.d.ts +86 -0
- package/dist/components/form/Combobox.d.ts.map +1 -0
- package/dist/components/form/Combobox.js +198 -0
- package/dist/components/form/Combobox.js.map +1 -0
- package/dist/components/form/Form.context.d.ts +28 -0
- package/dist/components/form/Form.context.d.ts.map +1 -0
- package/dist/components/form/Form.context.js +56 -0
- package/dist/components/form/Form.context.js.map +1 -0
- package/dist/components/form/Form.d.ts +68 -0
- package/dist/components/form/Form.d.ts.map +1 -0
- package/dist/components/form/Form.js +32 -0
- package/dist/components/form/Form.js.map +1 -0
- package/dist/components/form/FormCheckbox.d.ts +10 -0
- package/dist/components/form/FormCheckbox.d.ts.map +1 -0
- package/dist/components/form/FormCheckbox.js +24 -0
- package/dist/components/form/FormCheckbox.js.map +1 -0
- package/dist/components/form/FormCombobox.d.ts +28 -0
- package/dist/components/form/FormCombobox.d.ts.map +1 -0
- package/dist/components/form/FormCombobox.js +50 -0
- package/dist/components/form/FormCombobox.js.map +1 -0
- package/dist/components/form/FormDescription.d.ts +7 -0
- package/dist/components/form/FormDescription.d.ts.map +1 -0
- package/dist/components/form/FormDescription.js +9 -0
- package/dist/components/form/FormDescription.js.map +1 -0
- package/dist/components/form/FormError.d.ts +7 -0
- package/dist/components/form/FormError.d.ts.map +1 -0
- package/dist/components/form/FormError.js +9 -0
- package/dist/components/form/FormError.js.map +1 -0
- package/dist/components/form/FormField.d.ts +13 -0
- package/dist/components/form/FormField.d.ts.map +1 -0
- package/dist/components/form/FormField.js +45 -0
- package/dist/components/form/FormField.js.map +1 -0
- package/dist/components/form/FormInput.d.ts +8 -0
- package/dist/components/form/FormInput.d.ts.map +1 -0
- package/dist/components/form/FormInput.js +17 -0
- package/dist/components/form/FormInput.js.map +1 -0
- package/dist/components/form/FormInputGroup.d.ts +7 -0
- package/dist/components/form/FormInputGroup.d.ts.map +1 -0
- package/dist/components/form/FormInputGroup.js +30 -0
- package/dist/components/form/FormInputGroup.js.map +1 -0
- package/dist/components/form/FormLabel.d.ts +7 -0
- package/dist/components/form/FormLabel.d.ts.map +1 -0
- package/dist/components/form/FormLabel.js +9 -0
- package/dist/components/form/FormLabel.js.map +1 -0
- package/dist/components/form/FormRadioGroup.d.ts +14 -0
- package/dist/components/form/FormRadioGroup.d.ts.map +1 -0
- package/dist/components/form/FormRadioGroup.js +25 -0
- package/dist/components/form/FormRadioGroup.js.map +1 -0
- package/dist/components/form/FormRoot.d.ts +10 -0
- package/dist/components/form/FormRoot.d.ts.map +1 -0
- package/dist/components/form/FormRoot.js +10 -0
- package/dist/components/form/FormRoot.js.map +1 -0
- package/dist/components/form/FormSelect.d.ts +19 -0
- package/dist/components/form/FormSelect.d.ts.map +1 -0
- package/dist/components/form/FormSelect.js +34 -0
- package/dist/components/form/FormSelect.js.map +1 -0
- package/dist/components/form/FormSwitch.d.ts +10 -0
- package/dist/components/form/FormSwitch.d.ts.map +1 -0
- package/dist/components/form/FormSwitch.js +24 -0
- package/dist/components/form/FormSwitch.js.map +1 -0
- package/dist/components/form/FormTextarea.d.ts +8 -0
- package/dist/components/form/FormTextarea.d.ts.map +1 -0
- package/dist/components/form/FormTextarea.js +13 -0
- package/dist/components/form/FormTextarea.js.map +1 -0
- package/dist/components/form/Input.d.ts +14 -0
- package/dist/components/form/Input.d.ts.map +1 -0
- package/dist/components/form/Input.js +22 -0
- package/dist/components/form/Input.js.map +1 -0
- package/dist/components/form/InputGroup.d.ts +26 -0
- package/dist/components/form/InputGroup.d.ts.map +1 -0
- package/dist/components/form/InputGroup.js +58 -0
- package/dist/components/form/InputGroup.js.map +1 -0
- package/dist/components/form/RadioGroup.d.ts +23 -0
- package/dist/components/form/RadioGroup.d.ts.map +1 -0
- package/dist/components/form/RadioGroup.js +30 -0
- package/dist/components/form/RadioGroup.js.map +1 -0
- package/dist/components/form/Select.d.ts +42 -0
- package/dist/components/form/Select.d.ts.map +1 -0
- package/dist/components/form/Select.js +68 -0
- package/dist/components/form/Select.js.map +1 -0
- package/dist/components/form/Slider.d.ts +37 -0
- package/dist/components/form/Slider.d.ts.map +1 -0
- package/dist/components/form/Slider.js +35 -0
- package/dist/components/form/Slider.js.map +1 -0
- package/dist/components/form/Switch.d.ts +23 -0
- package/dist/components/form/Switch.d.ts.map +1 -0
- package/dist/components/form/Switch.js +21 -0
- package/dist/components/form/Switch.js.map +1 -0
- package/dist/components/form/Textarea.d.ts +16 -0
- package/dist/components/form/Textarea.d.ts.map +1 -0
- package/dist/components/form/Textarea.js +12 -0
- package/dist/components/form/Textarea.js.map +1 -0
- package/dist/entries/alert-dialog.d.ts +3 -0
- package/dist/entries/alert-dialog.d.ts.map +1 -0
- package/dist/entries/alert-dialog.js +2 -0
- package/dist/entries/alert-dialog.js.map +1 -0
- package/dist/entries/alert.d.ts +3 -0
- package/dist/entries/alert.d.ts.map +1 -0
- package/dist/entries/alert.js +2 -0
- package/dist/entries/alert.js.map +1 -0
- package/dist/entries/avatar.d.ts +3 -0
- package/dist/entries/avatar.d.ts.map +1 -0
- package/dist/entries/avatar.js +2 -0
- package/dist/entries/avatar.js.map +1 -0
- package/dist/entries/badge.d.ts +3 -0
- package/dist/entries/badge.d.ts.map +1 -0
- package/dist/entries/badge.js +2 -0
- package/dist/entries/badge.js.map +1 -0
- package/dist/entries/button.d.ts +3 -0
- package/dist/entries/button.d.ts.map +1 -0
- package/dist/entries/button.js +2 -0
- package/dist/entries/button.js.map +1 -0
- package/dist/entries/card.d.ts +3 -0
- package/dist/entries/card.d.ts.map +1 -0
- package/dist/entries/card.js +2 -0
- package/dist/entries/card.js.map +1 -0
- package/dist/entries/checkbox.d.ts +3 -0
- package/dist/entries/checkbox.d.ts.map +1 -0
- package/dist/entries/checkbox.js +2 -0
- package/dist/entries/checkbox.js.map +1 -0
- package/dist/entries/cn.d.ts +3 -0
- package/dist/entries/cn.d.ts.map +1 -0
- package/dist/entries/cn.js +2 -0
- package/dist/entries/cn.js.map +1 -0
- package/dist/entries/color-picker.d.ts +3 -0
- package/dist/entries/color-picker.d.ts.map +1 -0
- package/dist/entries/color-picker.js +2 -0
- package/dist/entries/color-picker.js.map +1 -0
- package/dist/entries/combobox.d.ts +3 -0
- package/dist/entries/combobox.d.ts.map +1 -0
- package/dist/entries/combobox.js +2 -0
- package/dist/entries/combobox.js.map +1 -0
- package/dist/entries/dialog.d.ts +3 -0
- package/dist/entries/dialog.d.ts.map +1 -0
- package/dist/entries/dialog.js +2 -0
- package/dist/entries/dialog.js.map +1 -0
- package/dist/entries/flex.d.ts +3 -0
- package/dist/entries/flex.d.ts.map +1 -0
- package/dist/entries/flex.js +2 -0
- package/dist/entries/flex.js.map +1 -0
- package/dist/entries/form.d.ts +3 -0
- package/dist/entries/form.d.ts.map +1 -0
- package/dist/entries/form.js +2 -0
- package/dist/entries/form.js.map +1 -0
- package/dist/entries/grid.d.ts +3 -0
- package/dist/entries/grid.d.ts.map +1 -0
- package/dist/entries/grid.js +2 -0
- package/dist/entries/grid.js.map +1 -0
- package/dist/entries/group.d.ts +3 -0
- package/dist/entries/group.d.ts.map +1 -0
- package/dist/entries/group.js +2 -0
- package/dist/entries/group.js.map +1 -0
- package/dist/entries/input-group.d.ts +3 -0
- package/dist/entries/input-group.d.ts.map +1 -0
- package/dist/entries/input-group.js +2 -0
- package/dist/entries/input-group.js.map +1 -0
- package/dist/entries/input.d.ts +3 -0
- package/dist/entries/input.d.ts.map +1 -0
- package/dist/entries/input.js +2 -0
- package/dist/entries/input.js.map +1 -0
- package/dist/entries/menu.d.ts +3 -0
- package/dist/entries/menu.d.ts.map +1 -0
- package/dist/entries/menu.js +2 -0
- package/dist/entries/menu.js.map +1 -0
- package/dist/entries/popover.d.ts +3 -0
- package/dist/entries/popover.d.ts.map +1 -0
- package/dist/entries/popover.js +2 -0
- package/dist/entries/popover.js.map +1 -0
- package/dist/entries/progress.d.ts +3 -0
- package/dist/entries/progress.d.ts.map +1 -0
- package/dist/entries/progress.js +2 -0
- package/dist/entries/progress.js.map +1 -0
- package/dist/entries/radio-group.d.ts +3 -0
- package/dist/entries/radio-group.d.ts.map +1 -0
- package/dist/entries/radio-group.js +2 -0
- package/dist/entries/radio-group.js.map +1 -0
- package/dist/entries/scroll-area.d.ts +3 -0
- package/dist/entries/scroll-area.d.ts.map +1 -0
- package/dist/entries/scroll-area.js +2 -0
- package/dist/entries/scroll-area.js.map +1 -0
- package/dist/entries/select.d.ts +3 -0
- package/dist/entries/select.d.ts.map +1 -0
- package/dist/entries/select.js +2 -0
- package/dist/entries/select.js.map +1 -0
- package/dist/entries/separator.d.ts +3 -0
- package/dist/entries/separator.d.ts.map +1 -0
- package/dist/entries/separator.js +2 -0
- package/dist/entries/separator.js.map +1 -0
- package/dist/entries/sidebar.d.ts +3 -0
- package/dist/entries/sidebar.d.ts.map +1 -0
- package/dist/entries/sidebar.js +2 -0
- package/dist/entries/sidebar.js.map +1 -0
- package/dist/entries/slider.d.ts +3 -0
- package/dist/entries/slider.d.ts.map +1 -0
- package/dist/entries/slider.js +2 -0
- package/dist/entries/slider.js.map +1 -0
- package/dist/entries/spinner.d.ts +3 -0
- package/dist/entries/spinner.d.ts.map +1 -0
- package/dist/entries/spinner.js +2 -0
- package/dist/entries/spinner.js.map +1 -0
- package/dist/entries/switch.d.ts +3 -0
- package/dist/entries/switch.d.ts.map +1 -0
- package/dist/entries/switch.js +2 -0
- package/dist/entries/switch.js.map +1 -0
- package/dist/entries/table.d.ts +3 -0
- package/dist/entries/table.d.ts.map +1 -0
- package/dist/entries/table.js +2 -0
- package/dist/entries/table.js.map +1 -0
- package/dist/entries/text.d.ts +3 -0
- package/dist/entries/text.d.ts.map +1 -0
- package/dist/entries/text.js +2 -0
- package/dist/entries/text.js.map +1 -0
- package/dist/entries/textarea.d.ts +3 -0
- package/dist/entries/textarea.d.ts.map +1 -0
- package/dist/entries/textarea.js +2 -0
- package/dist/entries/textarea.js.map +1 -0
- package/dist/entries/theme.d.ts +3 -0
- package/dist/entries/theme.d.ts.map +1 -0
- package/dist/entries/theme.js +2 -0
- package/dist/entries/theme.js.map +1 -0
- package/dist/entries/toast.d.ts +3 -0
- package/dist/entries/toast.d.ts.map +1 -0
- package/dist/entries/toast.js +2 -0
- package/dist/entries/toast.js.map +1 -0
- package/dist/entries/tooltip.d.ts +3 -0
- package/dist/entries/tooltip.d.ts.map +1 -0
- package/dist/entries/tooltip.js +2 -0
- package/dist/entries/tooltip.js.map +1 -0
- package/dist/entries/x-stack.d.ts +3 -0
- package/dist/entries/x-stack.d.ts.map +1 -0
- package/dist/entries/x-stack.js +2 -0
- package/dist/entries/x-stack.js.map +1 -0
- package/dist/entries/y-stack.d.ts +3 -0
- package/dist/entries/y-stack.d.ts.map +1 -0
- package/dist/entries/y-stack.js +2 -0
- package/dist/entries/y-stack.js.map +1 -0
- package/dist/hooks/use-as-ref.d.ts +4 -0
- package/dist/hooks/use-as-ref.d.ts.map +1 -0
- package/dist/hooks/use-as-ref.js +11 -0
- package/dist/hooks/use-as-ref.js.map +1 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts +4 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/hooks/use-isomorphic-layout-effect.js +4 -0
- package/dist/hooks/use-isomorphic-layout-effect.js.map +1 -0
- package/dist/hooks/use-lazy-ref.d.ts +4 -0
- package/dist/hooks/use-lazy-ref.d.ts.map +1 -0
- package/dist/hooks/use-lazy-ref.js +10 -0
- package/dist/hooks/use-lazy-ref.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/color.d.ts +42 -0
- package/dist/lib/color.d.ts.map +1 -0
- package/dist/lib/color.js +140 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/compose-refs.d.ts +14 -0
- package/dist/lib/compose-refs.d.ts.map +1 -0
- package/dist/lib/compose-refs.js +57 -0
- package/dist/lib/compose-refs.js.map +1 -0
- package/dist/lib/theme.d.ts +40 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +82 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +8 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +18 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +2 -0
- package/dist/test-setup.js.map +1 -0
- package/package.json +107 -4
- package/src/base.css +99 -0
- package/src/components/Alert.stories.tsx +124 -0
- package/src/components/Alert.test.tsx +76 -0
- package/src/components/Alert.tsx +133 -0
- package/src/components/AlertDialog.stories.tsx +184 -0
- package/src/components/AlertDialog.test.tsx +142 -0
- package/src/components/AlertDialog.tsx +164 -0
- package/src/components/Avatar.stories.tsx +92 -0
- package/src/components/Avatar.test.tsx +26 -0
- package/src/components/Avatar.tsx +96 -0
- package/src/components/Badge.stories.tsx +52 -0
- package/src/components/Badge.test.tsx +35 -0
- package/src/components/Badge.tsx +65 -0
- package/src/components/Button.stories.tsx +171 -0
- package/src/components/Button.test.tsx +112 -0
- package/src/components/Button.tsx +114 -0
- package/src/components/Card.stories.tsx +62 -0
- package/src/components/Card.test.tsx +23 -0
- package/src/components/Card.tsx +129 -0
- package/src/components/Dialog.stories.tsx +133 -0
- package/src/components/Dialog.test.tsx +95 -0
- package/src/components/Dialog.tsx +147 -0
- package/src/components/Flex.stories.tsx +70 -0
- package/src/components/Flex.test.tsx +53 -0
- package/src/components/Flex.tsx +59 -0
- package/src/components/Grid.stories.tsx +70 -0
- package/src/components/Grid.test.tsx +46 -0
- package/src/components/Grid.tsx +114 -0
- package/src/components/Group.stories.tsx +130 -0
- package/src/components/Group.test.tsx +57 -0
- package/src/components/Group.tsx +92 -0
- package/src/components/Menu.stories.tsx +139 -0
- package/src/components/Menu.test.tsx +103 -0
- package/src/components/Menu.tsx +290 -0
- package/src/components/Popover.stories.tsx +72 -0
- package/src/components/Popover.tsx +117 -0
- package/src/components/Progress.stories.tsx +105 -0
- package/src/components/Progress.test.tsx +28 -0
- package/src/components/Progress.tsx +111 -0
- package/src/components/ScrollArea.stories.tsx +66 -0
- package/src/components/ScrollArea.test.tsx +32 -0
- package/src/components/ScrollArea.tsx +160 -0
- package/src/components/Separator.stories.tsx +39 -0
- package/src/components/Separator.test.tsx +24 -0
- package/src/components/Separator.tsx +27 -0
- package/src/components/Sidebar.stories.tsx +87 -0
- package/src/components/Sidebar.tsx +166 -0
- package/src/components/Spinner.stories.tsx +36 -0
- package/src/components/Spinner.test.tsx +25 -0
- package/src/components/Spinner.tsx +31 -0
- package/src/components/Table.stories.tsx +76 -0
- package/src/components/Table.tsx +151 -0
- package/src/components/Text.stories.tsx +148 -0
- package/src/components/Text.test.tsx +106 -0
- package/src/components/Text.tsx +85 -0
- package/src/components/Toast.stories.tsx +166 -0
- package/src/components/Toast.test.tsx +97 -0
- package/src/components/Toast.tsx +270 -0
- package/src/components/Tooltip.stories.tsx +116 -0
- package/src/components/Tooltip.test.tsx +51 -0
- package/src/components/Tooltip.tsx +80 -0
- package/src/components/XStack.stories.tsx +64 -0
- package/src/components/XStack.test.tsx +33 -0
- package/src/components/XStack.tsx +19 -0
- package/src/components/YStack.stories.tsx +65 -0
- package/src/components/YStack.test.tsx +31 -0
- package/src/components/YStack.tsx +19 -0
- package/src/components/_internal/Story.tsx +161 -0
- package/src/components/_internal/VisuallyHiddenInput.tsx +164 -0
- package/src/components/_internal/dialog-styles.ts +57 -0
- package/src/components/_internal/layout.ts +103 -0
- package/src/components/form/Checkbox.stories.tsx +78 -0
- package/src/components/form/Checkbox.test.tsx +107 -0
- package/src/components/form/Checkbox.tsx +95 -0
- package/src/components/form/ColorPicker.stories.tsx +160 -0
- package/src/components/form/ColorPicker.test.tsx +45 -0
- package/src/components/form/ColorPicker.tsx +55 -0
- package/src/components/form/ColorPickerPrimitive.test.tsx +14 -0
- package/src/components/form/ColorPickerPrimitive.tsx +1283 -0
- package/src/components/form/Combobox.stories.tsx +378 -0
- package/src/components/form/Combobox.test.tsx +334 -0
- package/src/components/form/Combobox.tsx +667 -0
- package/src/components/form/Form.context.ts +114 -0
- package/src/components/form/Form.stories.tsx +226 -0
- package/src/components/form/Form.test.tsx +293 -0
- package/src/components/form/Form.tsx +50 -0
- package/src/components/form/FormCheckbox.tsx +50 -0
- package/src/components/form/FormCombobox.tsx +92 -0
- package/src/components/form/FormDescription.tsx +21 -0
- package/src/components/form/FormError.tsx +21 -0
- package/src/components/form/FormField.tsx +109 -0
- package/src/components/form/FormInput.tsx +41 -0
- package/src/components/form/FormInputGroup.tsx +47 -0
- package/src/components/form/FormLabel.tsx +24 -0
- package/src/components/form/FormRadioGroup.tsx +46 -0
- package/src/components/form/FormRoot.tsx +41 -0
- package/src/components/form/FormSelect.tsx +60 -0
- package/src/components/form/FormSwitch.tsx +50 -0
- package/src/components/form/FormTextarea.tsx +34 -0
- package/src/components/form/Input.stories.tsx +114 -0
- package/src/components/form/Input.test.tsx +62 -0
- package/src/components/form/Input.tsx +93 -0
- package/src/components/form/InputGroup.stories.tsx +162 -0
- package/src/components/form/InputGroup.tsx +149 -0
- package/src/components/form/RadioGroup.stories.tsx +68 -0
- package/src/components/form/RadioGroup.test.tsx +171 -0
- package/src/components/form/RadioGroup.tsx +127 -0
- package/src/components/form/Select.stories.tsx +115 -0
- package/src/components/form/Select.test.tsx +115 -0
- package/src/components/form/Select.tsx +293 -0
- package/src/components/form/Slider.stories.tsx +121 -0
- package/src/components/form/Slider.test.tsx +33 -0
- package/src/components/form/Slider.tsx +200 -0
- package/src/components/form/Switch.stories.tsx +62 -0
- package/src/components/form/Switch.test.tsx +29 -0
- package/src/components/form/Switch.tsx +81 -0
- package/src/components/form/Textarea.stories.tsx +71 -0
- package/src/components/form/Textarea.test.tsx +31 -0
- package/src/components/form/Textarea.tsx +46 -0
- package/src/entries/alert-dialog.ts +11 -0
- package/src/entries/alert.ts +8 -0
- package/src/entries/avatar.ts +7 -0
- package/src/entries/badge.ts +2 -0
- package/src/entries/button.ts +2 -0
- package/src/entries/card.ts +10 -0
- package/src/entries/checkbox.ts +5 -0
- package/src/entries/cn.ts +2 -0
- package/src/entries/color-picker.ts +13 -0
- package/src/entries/combobox.ts +20 -0
- package/src/entries/dialog.ts +11 -0
- package/src/entries/entries.test.ts +65 -0
- package/src/entries/flex.ts +2 -0
- package/src/entries/form.ts +16 -0
- package/src/entries/grid.ts +2 -0
- package/src/entries/group.ts +6 -0
- package/src/entries/input-group.ts +8 -0
- package/src/entries/input.ts +2 -0
- package/src/entries/menu.ts +17 -0
- package/src/entries/popover.ts +10 -0
- package/src/entries/progress.ts +8 -0
- package/src/entries/radio-group.ts +5 -0
- package/src/entries/scroll-area.ts +10 -0
- package/src/entries/select.ts +12 -0
- package/src/entries/separator.ts +2 -0
- package/src/entries/sidebar.ts +13 -0
- package/src/entries/slider.ts +7 -0
- package/src/entries/spinner.ts +2 -0
- package/src/entries/switch.ts +2 -0
- package/src/entries/table.ts +11 -0
- package/src/entries/text.ts +2 -0
- package/src/entries/textarea.ts +2 -0
- package/src/entries/theme.ts +8 -0
- package/src/entries/toast.ts +2 -0
- package/src/entries/tooltip.ts +7 -0
- package/src/entries/x-stack.ts +2 -0
- package/src/entries/y-stack.ts +2 -0
- package/src/hooks/use-as-ref.ts +15 -0
- package/src/hooks/use-isomorphic-layout-effect.ts +6 -0
- package/src/hooks/use-lazy-ref.ts +13 -0
- package/src/index.ts +38 -0
- package/src/lib/color.test.ts +148 -0
- package/src/lib/color.ts +193 -0
- package/src/lib/compose-refs.ts +63 -0
- package/src/lib/theme.test.ts +64 -0
- package/src/lib/theme.ts +143 -0
- package/src/lib/utils.ts +25 -0
- package/src/public-api.test.ts +74 -0
- package/src/styles.css +2 -0
- package/src/test-setup.ts +1 -0
- package/src/theme.css +195 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// The public API is the union of the subpath entries in ./entries: add a
|
|
2
|
+
// component there and re-export it here (see "Public API" in AGENTS.md).
|
|
3
|
+
export * from './entries/alert.js';
|
|
4
|
+
export * from './entries/alert-dialog.js';
|
|
5
|
+
export * from './entries/avatar.js';
|
|
6
|
+
export * from './entries/badge.js';
|
|
7
|
+
export * from './entries/button.js';
|
|
8
|
+
export * from './entries/card.js';
|
|
9
|
+
export * from './entries/checkbox.js';
|
|
10
|
+
export * from './entries/cn.js';
|
|
11
|
+
export * from './entries/color-picker.js';
|
|
12
|
+
export * from './entries/combobox.js';
|
|
13
|
+
export * from './entries/dialog.js';
|
|
14
|
+
export * from './entries/flex.js';
|
|
15
|
+
export * from './entries/form.js';
|
|
16
|
+
export * from './entries/grid.js';
|
|
17
|
+
export * from './entries/group.js';
|
|
18
|
+
export * from './entries/input.js';
|
|
19
|
+
export * from './entries/input-group.js';
|
|
20
|
+
export * from './entries/menu.js';
|
|
21
|
+
export * from './entries/popover.js';
|
|
22
|
+
export * from './entries/progress.js';
|
|
23
|
+
export * from './entries/radio-group.js';
|
|
24
|
+
export * from './entries/scroll-area.js';
|
|
25
|
+
export * from './entries/select.js';
|
|
26
|
+
export * from './entries/separator.js';
|
|
27
|
+
export * from './entries/sidebar.js';
|
|
28
|
+
export * from './entries/slider.js';
|
|
29
|
+
export * from './entries/spinner.js';
|
|
30
|
+
export * from './entries/switch.js';
|
|
31
|
+
export * from './entries/table.js';
|
|
32
|
+
export * from './entries/text.js';
|
|
33
|
+
export * from './entries/textarea.js';
|
|
34
|
+
export * from './entries/theme.js';
|
|
35
|
+
export * from './entries/toast.js';
|
|
36
|
+
export * from './entries/tooltip.js';
|
|
37
|
+
export * from './entries/x-stack.js';
|
|
38
|
+
export * from './entries/y-stack.js';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color helpers for the color picker.
|
|
3
|
+
*
|
|
4
|
+
* culori performs every color-space conversion and string parse. The functions
|
|
5
|
+
* here are thin adapters that translate between culori's normalized shape
|
|
6
|
+
* (`{ mode, r/g/b: 0–1, alpha: 0–1 }`) and the integer/percentage shape the UI
|
|
7
|
+
* works in (`ColorValue` with 0–255 channels, HSL/HSV in degrees/percent), plus
|
|
8
|
+
* rounding and null-hue handling for greys.
|
|
9
|
+
*/
|
|
10
|
+
export declare const colorFormats: readonly ["hex", "rgb", "hsl", "hsb"];
|
|
11
|
+
export type ColorFormat = (typeof colorFormats)[number];
|
|
12
|
+
export interface ColorValue {
|
|
13
|
+
r: number;
|
|
14
|
+
g: number;
|
|
15
|
+
b: number;
|
|
16
|
+
a: number;
|
|
17
|
+
}
|
|
18
|
+
export interface HSVColorValue {
|
|
19
|
+
h: number;
|
|
20
|
+
s: number;
|
|
21
|
+
v: number;
|
|
22
|
+
a: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function hexToRgb(hex: string, alpha?: number): ColorValue;
|
|
25
|
+
export declare function isColorEqual(a: ColorValue, b: ColorValue): boolean;
|
|
26
|
+
export declare function isHsvEqual(a: HSVColorValue, b: HSVColorValue): boolean;
|
|
27
|
+
export declare function rgbToHex(color: ColorValue): string;
|
|
28
|
+
export declare function rgbToHsv(color: ColorValue, fallbackHue?: number): HSVColorValue;
|
|
29
|
+
export declare function hsvToRgb(hsv: HSVColorValue): ColorValue;
|
|
30
|
+
export declare function rgbToHsl(color: ColorValue): {
|
|
31
|
+
h: number;
|
|
32
|
+
s: number;
|
|
33
|
+
l: number;
|
|
34
|
+
};
|
|
35
|
+
export declare function hslToRgb(hsl: {
|
|
36
|
+
h: number;
|
|
37
|
+
s: number;
|
|
38
|
+
l: number;
|
|
39
|
+
}, alpha?: number): ColorValue;
|
|
40
|
+
export declare function colorToString(color: ColorValue, format?: ColorFormat): string;
|
|
41
|
+
export declare function parseColorString(value: string): ColorValue | null;
|
|
42
|
+
//# sourceMappingURL=color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,eAAO,MAAM,YAAY,uCAAwC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AA2DD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAOhE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,WAExD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,WAE5D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,SAAI,GAAG,aAAa,CAS1E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAUvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU;;;;EAQzC;AAED,wBAAgB,QAAQ,CACtB,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,KAAK,SAAI,GACR,UAAU,CAUZ;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,WAAmB,GAC1B,MAAM,CAuBR;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAMjE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color helpers for the color picker.
|
|
3
|
+
*
|
|
4
|
+
* culori performs every color-space conversion and string parse. The functions
|
|
5
|
+
* here are thin adapters that translate between culori's normalized shape
|
|
6
|
+
* (`{ mode, r/g/b: 0–1, alpha: 0–1 }`) and the integer/percentage shape the UI
|
|
7
|
+
* works in (`ColorValue` with 0–255 channels, HSL/HSV in degrees/percent), plus
|
|
8
|
+
* rounding and null-hue handling for greys.
|
|
9
|
+
*/
|
|
10
|
+
/* eslint-disable perfectionist/sort-objects, perfectionist/sort-object-types, perfectionist/sort-interfaces, perfectionist/sort-modules, perfectionist/sort-switch-case -- color values read best in their conventional order (RGBA/HSVA channels, culori's mode-first shape, rgb↔x conversion pairs, format precedence) rather than alphabetically. */
|
|
11
|
+
import { converter, formatHex, parse } from 'culori';
|
|
12
|
+
export const colorFormats = ['hex', 'rgb', 'hsl', 'hsb'];
|
|
13
|
+
const toRgb = converter('rgb');
|
|
14
|
+
const toHsl = converter('hsl');
|
|
15
|
+
const toHsv = converter('hsv');
|
|
16
|
+
function clamp(value, min, max) {
|
|
17
|
+
return Math.min(max, Math.max(min, value));
|
|
18
|
+
}
|
|
19
|
+
function alphaToValue(alpha) {
|
|
20
|
+
return clamp(alpha ?? 1, 0, 1);
|
|
21
|
+
}
|
|
22
|
+
function parseAlphaValue(value, isPercent) {
|
|
23
|
+
if (!value)
|
|
24
|
+
return 1;
|
|
25
|
+
const alpha = Number.parseFloat(value);
|
|
26
|
+
return alphaToValue(isPercent ? alpha / 100 : alpha);
|
|
27
|
+
}
|
|
28
|
+
function toCuloriRgb(color) {
|
|
29
|
+
return {
|
|
30
|
+
mode: 'rgb',
|
|
31
|
+
r: color.r / 255,
|
|
32
|
+
g: color.g / 255,
|
|
33
|
+
b: color.b / 255,
|
|
34
|
+
alpha: color.a,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function fromCuloriRgb(color) {
|
|
38
|
+
return {
|
|
39
|
+
r: Math.round(clamp(color.r, 0, 1) * 255),
|
|
40
|
+
g: Math.round(clamp(color.g, 0, 1) * 255),
|
|
41
|
+
b: Math.round(clamp(color.b, 0, 1) * 255),
|
|
42
|
+
a: alphaToValue(color.alpha),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** culori does not parse the `hsb()`/`hsba()` notation, so handle it ourselves. */
|
|
46
|
+
function parseHsbString(value) {
|
|
47
|
+
const numberPattern = String.raw `([+-]?(?:\d+\.?\d*|\.\d+))`;
|
|
48
|
+
const hsbMatch = new RegExp(String.raw `^hsba?\(\s*${numberPattern}(?:deg)?(?:\s*,\s*|\s+)${numberPattern}%(?:\s*,\s*|\s+)${numberPattern}%(?:\s*(?:,|\/)\s*${numberPattern}(%)?)?\s*\)$`, 'i').exec(value);
|
|
49
|
+
if (!hsbMatch)
|
|
50
|
+
return null;
|
|
51
|
+
return {
|
|
52
|
+
mode: 'hsv',
|
|
53
|
+
h: Number.parseFloat(hsbMatch[1] ?? '0'),
|
|
54
|
+
s: clamp(Number.parseFloat(hsbMatch[2] ?? '0') / 100, 0, 1),
|
|
55
|
+
v: clamp(Number.parseFloat(hsbMatch[3] ?? '0') / 100, 0, 1),
|
|
56
|
+
alpha: parseAlphaValue(hsbMatch[4], hsbMatch[5]),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function hexToRgb(hex, alpha) {
|
|
60
|
+
const color = parse(hex);
|
|
61
|
+
const rgb = color ? toRgb(color) : undefined;
|
|
62
|
+
return rgb
|
|
63
|
+
? { ...fromCuloriRgb(rgb), a: alpha ?? 1 }
|
|
64
|
+
: { r: 0, g: 0, b: 0, a: alpha ?? 1 };
|
|
65
|
+
}
|
|
66
|
+
export function isColorEqual(a, b) {
|
|
67
|
+
return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;
|
|
68
|
+
}
|
|
69
|
+
export function isHsvEqual(a, b) {
|
|
70
|
+
return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;
|
|
71
|
+
}
|
|
72
|
+
export function rgbToHex(color) {
|
|
73
|
+
return formatHex(toCuloriRgb(color)) ?? '#000000';
|
|
74
|
+
}
|
|
75
|
+
export function rgbToHsv(color, fallbackHue = 0) {
|
|
76
|
+
const hsv = toHsv(toCuloriRgb(color));
|
|
77
|
+
return {
|
|
78
|
+
h: Math.round(hsv.h ?? fallbackHue),
|
|
79
|
+
s: Math.round(hsv.s * 100),
|
|
80
|
+
v: Math.round(hsv.v * 100),
|
|
81
|
+
a: alphaToValue(hsv.alpha),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function hsvToRgb(hsv) {
|
|
85
|
+
return fromCuloriRgb(toRgb({
|
|
86
|
+
mode: 'hsv',
|
|
87
|
+
h: hsv.h,
|
|
88
|
+
s: hsv.s / 100,
|
|
89
|
+
v: hsv.v / 100,
|
|
90
|
+
alpha: hsv.a,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
export function rgbToHsl(color) {
|
|
94
|
+
const hsl = toHsl(toCuloriRgb(color));
|
|
95
|
+
return {
|
|
96
|
+
h: Math.round(hsl.h ?? 0),
|
|
97
|
+
s: Math.round(hsl.s * 100),
|
|
98
|
+
l: Math.round(hsl.l * 100),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export function hslToRgb(hsl, alpha = 1) {
|
|
102
|
+
return fromCuloriRgb(toRgb({
|
|
103
|
+
mode: 'hsl',
|
|
104
|
+
h: hsl.h,
|
|
105
|
+
s: hsl.s / 100,
|
|
106
|
+
l: hsl.l / 100,
|
|
107
|
+
alpha,
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
export function colorToString(color, format = 'hex') {
|
|
111
|
+
switch (format) {
|
|
112
|
+
case 'hex':
|
|
113
|
+
return rgbToHex(color);
|
|
114
|
+
case 'rgb':
|
|
115
|
+
return color.a < 1
|
|
116
|
+
? `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`
|
|
117
|
+
: `rgb(${color.r}, ${color.g}, ${color.b})`;
|
|
118
|
+
case 'hsl': {
|
|
119
|
+
const hsl = rgbToHsl(color);
|
|
120
|
+
return color.a < 1
|
|
121
|
+
? `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${color.a})`
|
|
122
|
+
: `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;
|
|
123
|
+
}
|
|
124
|
+
case 'hsb': {
|
|
125
|
+
const hsv = rgbToHsv(color);
|
|
126
|
+
return color.a < 1
|
|
127
|
+
? `hsba(${hsv.h}, ${hsv.s}%, ${hsv.v}%, ${color.a})`
|
|
128
|
+
: `hsb(${hsv.h}, ${hsv.s}%, ${hsv.v}%)`;
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
return rgbToHex(color);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export function parseColorString(value) {
|
|
135
|
+
const trimmed = value.trim();
|
|
136
|
+
const color = parseHsbString(trimmed) ?? parse(trimmed);
|
|
137
|
+
const rgb = color ? toRgb(color) : undefined;
|
|
138
|
+
return rgb ? fromCuloriRgb(rgb) : null;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wVAAwV;AAExV,OAAO,EAAE,SAAS,EAAE,SAAS,EAAY,KAAK,EAAY,MAAM,QAAQ,CAAC;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAkBlE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAE/B,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB;IAC7C,OAAO,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB,EAAE,SAAkB;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG;QAChB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG;QAChB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG;QAChB,KAAK,EAAE,KAAK,CAAC,CAAC;KACf,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAU;IAC/B,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QACzC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QACzC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QACzC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA,4BAA4B,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,MAAM,CACzB,MAAM,CAAC,GAAG,CAAA,cAAc,aAAa,0BAA0B,aAAa,mBAAmB,aAAa,qBAAqB,aAAa,cAAc,EAC5J,GAAG,CACJ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEd,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACxC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAc;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7C,OAAO,GAAG;QACR,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QAC1C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAa,EAAE,CAAa;IACvD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAgB,EAAE,CAAgB;IAC3D,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACxC,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,WAAW,GAAG,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC;QACnC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1B,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAkB;IACzC,OAAO,aAAa,CAClB,KAAK,CAAC;QACJ,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;QACd,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;QACd,KAAK,EAAE,GAAG,CAAC,CAAC;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,GAAwC,EACxC,KAAK,GAAG,CAAC;IAET,OAAO,aAAa,CAClB,KAAK,CAAC;QACJ,IAAI,EAAE,KAAK;QACX,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;QACd,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;QACd,KAAK;KACN,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAiB,EACjB,SAAsB,KAAK;IAE3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG;gBACxD,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC;QAChD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG;gBACpD,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;QAC5C,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG;gBACpD,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;QAC5C,CAAC;QACD;YACE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7C,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type PossibleRef<T> = React.Ref<T> | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* A utility to compose multiple refs together
|
|
5
|
+
* Accepts callback refs and RefObject(s)
|
|
6
|
+
*/
|
|
7
|
+
declare function composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T>;
|
|
8
|
+
/**
|
|
9
|
+
* A custom hook that composes multiple refs
|
|
10
|
+
* Accepts callback refs and RefObject(s)
|
|
11
|
+
*/
|
|
12
|
+
declare function useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T>;
|
|
13
|
+
export { composeRefs, useComposedRefs };
|
|
14
|
+
//# sourceMappingURL=compose-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-refs.d.ts","sourceRoot":"","sources":["../../src/lib/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAE/C;;;GAGG;AACH,iBAAS,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CA4BvE;AAgBD;;;GAGG;AACH,iBAAS,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAI3E;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A utility to compose multiple refs together
|
|
4
|
+
* Accepts callback refs and RefObject(s)
|
|
5
|
+
*/
|
|
6
|
+
function composeRefs(...refs) {
|
|
7
|
+
return (node) => {
|
|
8
|
+
let hasCleanup = false;
|
|
9
|
+
const cleanups = refs.map((ref) => {
|
|
10
|
+
const cleanup = setRef(ref, node);
|
|
11
|
+
if (!hasCleanup && typeof cleanup === 'function') {
|
|
12
|
+
hasCleanup = true;
|
|
13
|
+
}
|
|
14
|
+
return cleanup;
|
|
15
|
+
});
|
|
16
|
+
// React <19 will log an error to the console if a callback ref returns a
|
|
17
|
+
// value. We don't use ref cleanups internally so this will only happen if a
|
|
18
|
+
// user's ref callback returns a value, which we only expect if they are
|
|
19
|
+
// using the cleanup functionality added in React 19.
|
|
20
|
+
if (hasCleanup) {
|
|
21
|
+
return () => {
|
|
22
|
+
for (let i = 0; i < cleanups.length; i++) {
|
|
23
|
+
const cleanup = cleanups[i];
|
|
24
|
+
if (typeof cleanup === 'function') {
|
|
25
|
+
cleanup();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
setRef(refs[i], null);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set a given ref to a given value
|
|
37
|
+
* This utility takes care of different types of refs: callback refs and RefObject(s)
|
|
38
|
+
*/
|
|
39
|
+
function setRef(ref, value) {
|
|
40
|
+
if (typeof ref === 'function') {
|
|
41
|
+
return ref(value);
|
|
42
|
+
}
|
|
43
|
+
if (ref !== null && ref !== undefined) {
|
|
44
|
+
ref.current = value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A custom hook that composes multiple refs
|
|
49
|
+
* Accepts callback refs and RefObject(s)
|
|
50
|
+
*/
|
|
51
|
+
function useComposedRefs(...refs) {
|
|
52
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: we want to memoize by all values
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo -- memoize by every ref value; the spread `refs` array is the intended dependency list
|
|
54
|
+
return React.useCallback(composeRefs(...refs), refs); // react-doctor-disable-line react-doctor/exhaustive-deps -- same intentional memo: the dependency list is the spread `refs` array on purpose
|
|
55
|
+
}
|
|
56
|
+
export { composeRefs, useComposedRefs };
|
|
57
|
+
//# sourceMappingURL=compose-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-refs.js","sourceRoot":"","sources":["../../src/lib/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;GAGG;AACH,SAAS,WAAW,CAAI,GAAG,IAAsB;IAC/C,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBACjD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,4EAA4E;QAC5E,wEAAwE;QACxE,qDAAqD;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,EAAE;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;wBAClC,OAAO,EAAE,CAAC;oBACZ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAI,GAAmB,EAAE,KAAQ;IAC9C,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAI,GAAG,IAAsB;IACnD,4FAA4F;IAC5F,oKAAoK;IACpK,OAAO,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,6IAA6I;AACrM,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme generator: derives Pickle's brand-dependent tokens from a single
|
|
3
|
+
* primary color so consumers can theme the library without hand-writing CSS
|
|
4
|
+
* variables. Tokens that do not depend on the brand (neutrals, status colors)
|
|
5
|
+
* keep the values from `@pickle-ui/react/theme.css`.
|
|
6
|
+
*/
|
|
7
|
+
type Theme = {
|
|
8
|
+
dark: ThemeVariables;
|
|
9
|
+
light: ThemeVariables;
|
|
10
|
+
};
|
|
11
|
+
type ThemeCssOptions = {
|
|
12
|
+
darkSelector?: string;
|
|
13
|
+
lightSelector?: string;
|
|
14
|
+
};
|
|
15
|
+
type ThemeFonts = {
|
|
16
|
+
heading?: string;
|
|
17
|
+
mono?: string;
|
|
18
|
+
sans?: string;
|
|
19
|
+
};
|
|
20
|
+
type ThemeOptions = {
|
|
21
|
+
/** Font stacks, written to `--font-sans`, `--font-heading` and `--font-mono`. */
|
|
22
|
+
fonts?: ThemeFonts;
|
|
23
|
+
/** Brand color in any CSS notation (hex, rgb, hsl, oklch, …). */
|
|
24
|
+
primary: string;
|
|
25
|
+
/** Brand color for the dark scheme. Defaults to a lighter version of `primary`. */
|
|
26
|
+
primaryDark?: string;
|
|
27
|
+
/** Base radius, e.g. `'0.5rem'`. Every `rounded-*` scale derives from it. */
|
|
28
|
+
radius?: string;
|
|
29
|
+
};
|
|
30
|
+
type ThemeVariables = Record<`--${string}`, string>;
|
|
31
|
+
/**
|
|
32
|
+
* Build the light and dark token sets for a brand color. Apply the result
|
|
33
|
+
* with `themeToCss` in a stylesheet, or spread `theme.light` / `theme.dark`
|
|
34
|
+
* as the `style` of a wrapper element.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createTheme(options: ThemeOptions): Theme;
|
|
37
|
+
/** Serialize a theme as CSS rules for the light and dark selectors. */
|
|
38
|
+
export declare function themeToCss(theme: Theme, { darkSelector, lightSelector }?: ThemeCssOptions): string;
|
|
39
|
+
export type { Theme, ThemeCssOptions, ThemeFonts, ThemeOptions, ThemeVariables, };
|
|
40
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,iFAAiF;IACjF,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;AAOpD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,CAWxD;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,EAAE,YAAsB,EAAE,aAAuB,EAAE,GAAE,eAAoB,GACxE,MAAM,CAOR;AAyDD,YAAY,EACV,KAAK,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,GACf,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme generator: derives Pickle's brand-dependent tokens from a single
|
|
3
|
+
* primary color so consumers can theme the library without hand-writing CSS
|
|
4
|
+
* variables. Tokens that do not depend on the brand (neutrals, status colors)
|
|
5
|
+
* keep the values from `@pickle-ui/react/theme.css`.
|
|
6
|
+
*/
|
|
7
|
+
import { clampChroma, converter, formatCss, parse, wcagContrast, } from 'culori';
|
|
8
|
+
const toOklch = converter('oklch');
|
|
9
|
+
const LIGHT_FOREGROUND = { c: 0, h: 0, l: 1, mode: 'oklch' };
|
|
10
|
+
const DARK_FOREGROUND = { c: 0.006, h: 285.9, l: 0.21, mode: 'oklch' };
|
|
11
|
+
/**
|
|
12
|
+
* Build the light and dark token sets for a brand color. Apply the result
|
|
13
|
+
* with `themeToCss` in a stylesheet, or spread `theme.light` / `theme.dark`
|
|
14
|
+
* as the `style` of a wrapper element.
|
|
15
|
+
*/
|
|
16
|
+
export function createTheme(options) {
|
|
17
|
+
const primary = parseColor(options.primary, 'primary');
|
|
18
|
+
const primaryDark = options.primaryDark
|
|
19
|
+
? parseColor(options.primaryDark, 'primaryDark')
|
|
20
|
+
: lightenForDark(primary);
|
|
21
|
+
const shared = sharedVariables(options);
|
|
22
|
+
return {
|
|
23
|
+
dark: { ...shared, ...brandVariables(primaryDark) },
|
|
24
|
+
light: { ...shared, ...brandVariables(primary) },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Serialize a theme as CSS rules for the light and dark selectors. */
|
|
28
|
+
export function themeToCss(theme, { darkSelector = '.dark', lightSelector = ':root' } = {}) {
|
|
29
|
+
const block = (selector, variables) => `${selector} {\n${Object.entries(variables)
|
|
30
|
+
.map(([name, value]) => ` ${name}: ${value};`)
|
|
31
|
+
.join('\n')}\n}`;
|
|
32
|
+
return `${block(lightSelector, theme.light)}\n\n${block(darkSelector, theme.dark)}\n`;
|
|
33
|
+
}
|
|
34
|
+
function brandVariables(primary) {
|
|
35
|
+
const foreground = foregroundFor(primary);
|
|
36
|
+
return {
|
|
37
|
+
'--primary': format(primary),
|
|
38
|
+
'--primary-foreground': format(foreground),
|
|
39
|
+
'--ring': format({ ...primary, c: primary.c * 0.6 }),
|
|
40
|
+
'--sidebar-primary': format(primary),
|
|
41
|
+
'--sidebar-primary-foreground': format(foreground),
|
|
42
|
+
'--sidebar-ring': format({ ...primary, c: primary.c * 0.6 }),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** White or near-black, whichever reads better on the given fill. */
|
|
46
|
+
function foregroundFor(fill) {
|
|
47
|
+
return wcagContrast(fill, LIGHT_FOREGROUND) >=
|
|
48
|
+
wcagContrast(fill, DARK_FOREGROUND)
|
|
49
|
+
? LIGHT_FOREGROUND
|
|
50
|
+
: DARK_FOREGROUND;
|
|
51
|
+
}
|
|
52
|
+
function format(color) {
|
|
53
|
+
return formatCss(clampChroma(color, 'oklch'));
|
|
54
|
+
}
|
|
55
|
+
/** Lift a brand color so it stays vivid on dark surfaces. */
|
|
56
|
+
function lightenForDark(color) {
|
|
57
|
+
return {
|
|
58
|
+
...color,
|
|
59
|
+
c: color.c * 0.92,
|
|
60
|
+
l: Math.min(Math.max(color.l + 0.12, 0.6), 0.85),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function parseColor(value, name) {
|
|
64
|
+
const color = parse(value);
|
|
65
|
+
if (!color) {
|
|
66
|
+
throw new Error(`createTheme: ${name} is not a valid CSS color: ${value}`);
|
|
67
|
+
}
|
|
68
|
+
return toOklch(color);
|
|
69
|
+
}
|
|
70
|
+
function sharedVariables({ fonts, radius }) {
|
|
71
|
+
const variables = {};
|
|
72
|
+
if (radius)
|
|
73
|
+
variables['--radius'] = radius;
|
|
74
|
+
if (fonts?.sans)
|
|
75
|
+
variables['--font-sans'] = fonts.sans;
|
|
76
|
+
if (fonts?.heading)
|
|
77
|
+
variables['--font-heading'] = fonts.heading;
|
|
78
|
+
if (fonts?.mono)
|
|
79
|
+
variables['--font-mono'] = fonts.mono;
|
|
80
|
+
return variables;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ClassValue } from 'clsx';
|
|
2
|
+
/**
|
|
3
|
+
* Per-slot class overrides for components that render several parts from a
|
|
4
|
+
* single props object. Keys match the suffix of each part's `data-slot`.
|
|
5
|
+
*/
|
|
6
|
+
export type SlotClassNames<Slot extends string> = Partial<Record<Slot, string>>;
|
|
7
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAgB7C;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhF,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
3
|
+
/**
|
|
4
|
+
* Teaches tailwind-merge Pickle's theme scales: `text-body`, `text-h1`, … are
|
|
5
|
+
* font sizes, so they must not be mistaken for text colors and dropped next
|
|
6
|
+
* to one.
|
|
7
|
+
*/
|
|
8
|
+
const twMerge = extendTailwindMerge({
|
|
9
|
+
extend: {
|
|
10
|
+
theme: {
|
|
11
|
+
text: ['body', 'code', 'h1', 'h2', 'h3', 'h4', 'lead', 'small'],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
export function cn(...inputs) {
|
|
16
|
+
return twMerge(clsx(inputs));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;GAIG;AACH,MAAM,OAAO,GAAG,mBAAmB,CAAC;IAClC,MAAM,EAAE;QACN,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;SAChE;KACF;CACF,CAAC,CAAC;AAQH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,109 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pickle-ui/react",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"description": "
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "React component library built with Base UI, shadcn/ui, Tailwind CSS, and reui.",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"style": "src/styles.css",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"sideEffects": [
|
|
10
|
+
"**/*.css"
|
|
11
|
+
],
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/ugogo/pickle-ui.git",
|
|
15
|
+
"directory": "packages/react"
|
|
16
|
+
},
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./styles.css": "./src/styles.css",
|
|
27
|
+
"./theme.css": "./src/theme.css",
|
|
28
|
+
"./base.css": "./src/base.css",
|
|
29
|
+
"./*": {
|
|
30
|
+
"types": "./dist/entries/*.d.ts",
|
|
31
|
+
"import": "./dist/entries/*.js",
|
|
32
|
+
"default": "./dist/entries/*.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"src"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"dev": "storybook dev -p 6006",
|
|
41
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { force: true, recursive: true })\"",
|
|
42
|
+
"build": "pnpm run clean && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json --resolve-full-paths",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"storybook": "storybook dev -p 6006",
|
|
45
|
+
"build-storybook": "storybook build",
|
|
46
|
+
"test": "vitest run",
|
|
47
|
+
"doctor": "react-doctor",
|
|
48
|
+
"prepublishOnly": "pnpm run build",
|
|
49
|
+
"release": "release-it"
|
|
50
|
+
},
|
|
51
|
+
"keywords": [
|
|
52
|
+
"react",
|
|
53
|
+
"components",
|
|
54
|
+
"ui",
|
|
55
|
+
"shadcn",
|
|
56
|
+
"tailwind",
|
|
57
|
+
"reui"
|
|
58
|
+
],
|
|
59
|
+
"author": "Ugo Onali",
|
|
60
|
+
"license": "MIT",
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"@base-ui/react": "^1.5.0",
|
|
63
|
+
"@tabler/icons-react": "^3.44.0",
|
|
64
|
+
"class-variance-authority": "^0.7.1",
|
|
65
|
+
"clsx": "^2.1.1",
|
|
66
|
+
"culori": "^4.0.2",
|
|
67
|
+
"tailwind-merge": "^3.6.0",
|
|
68
|
+
"tw-animate-css": "^1.4.0"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@fontsource-variable/geist": "5.2.9",
|
|
72
|
+
"@fontsource/jetbrains-mono": "5.2.8",
|
|
73
|
+
"@hookform/resolvers": "^5.4.0",
|
|
74
|
+
"@storybook/addon-docs": "^10.6.3",
|
|
75
|
+
"@storybook/addon-links": "^10.6.3",
|
|
76
|
+
"@storybook/react": "^10.6.3",
|
|
77
|
+
"@storybook/react-vite": "^10.6.3",
|
|
78
|
+
"@tailwindcss/postcss": "^4.3.0",
|
|
79
|
+
"@testing-library/dom": "^10.4.1",
|
|
80
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
81
|
+
"@testing-library/react": "^16.3.2",
|
|
82
|
+
"@types/culori": "^4.0.1",
|
|
83
|
+
"@types/node": "^25.9.3",
|
|
84
|
+
"@types/react": "^19.2.17",
|
|
85
|
+
"@types/react-dom": "^19.2.3",
|
|
86
|
+
"@vitejs/plugin-react": "^6.0.2",
|
|
87
|
+
"jsdom": "^29.1.1",
|
|
88
|
+
"postcss": "^8.5.15",
|
|
89
|
+
"react": "^19.2.7",
|
|
90
|
+
"react-doctor": "^0.5.6",
|
|
91
|
+
"react-dom": "^19.2.7",
|
|
92
|
+
"react-hook-form": "^7.79.0",
|
|
93
|
+
"release-it": "^20.2.0",
|
|
94
|
+
"storybook": "^10.6.3",
|
|
95
|
+
"storybook-addon-pseudo-states": "^10.6.3",
|
|
96
|
+
"tailwindcss": "^4.3.0",
|
|
97
|
+
"tsc-alias": "^1.8.17",
|
|
98
|
+
"typescript": "^6.0.3",
|
|
99
|
+
"vite": "^8.0.16",
|
|
100
|
+
"vitest": "^3.2.6",
|
|
101
|
+
"zod": "4.0.17"
|
|
102
|
+
},
|
|
103
|
+
"peerDependencies": {
|
|
104
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
105
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
106
|
+
"react-hook-form": "^7.0.0",
|
|
107
|
+
"tailwindcss": "^4.0.0"
|
|
108
|
+
}
|
|
109
|
+
}
|