@proyecto-viviana/silapse 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/accordion/index.d.ts +6 -0
- package/dist/accordion/index.d.ts.map +1 -0
- package/dist/actionbar/index.d.ts +34 -0
- package/dist/actionbar/index.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +42 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/alert/index.d.ts +13 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/autocomplete/index.d.ts +51 -0
- package/dist/autocomplete/index.d.ts.map +1 -0
- package/dist/avatar/index.d.ts +18 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/badge/index.d.ts +12 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/breadcrumbs/index.d.ts +38 -0
- package/dist/breadcrumbs/index.d.ts.map +1 -0
- package/dist/button/ActionButton.d.ts +21 -0
- package/dist/button/ActionButton.d.ts.map +1 -0
- package/dist/button/Button.d.ts +19 -0
- package/dist/button/Button.d.ts.map +1 -0
- package/dist/button/ClearButton.d.ts +19 -0
- package/dist/button/ClearButton.d.ts.map +1 -0
- package/dist/button/FieldButton.d.ts +16 -0
- package/dist/button/FieldButton.d.ts.map +1 -0
- package/dist/button/LogicButton.d.ts +16 -0
- package/dist/button/LogicButton.d.ts.map +1 -0
- package/dist/button/ToggleButton.d.ts +19 -0
- package/dist/button/ToggleButton.d.ts.map +1 -0
- package/dist/button/index.d.ts +13 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/types.d.ts +23 -0
- package/dist/button/types.d.ts.map +1 -0
- package/dist/buttongroup/index.d.ts +11 -0
- package/dist/buttongroup/index.d.ts.map +1 -0
- package/dist/calendar/DateField.d.ts +47 -0
- package/dist/calendar/DateField.d.ts.map +1 -0
- package/dist/calendar/DatePicker.d.ts +28 -0
- package/dist/calendar/DatePicker.d.ts.map +1 -0
- package/dist/calendar/DateRangePicker.d.ts +26 -0
- package/dist/calendar/DateRangePicker.d.ts.map +1 -0
- package/dist/calendar/RangeCalendar.d.ts +42 -0
- package/dist/calendar/RangeCalendar.d.ts.map +1 -0
- package/dist/calendar/TimeField.d.ts +44 -0
- package/dist/calendar/TimeField.d.ts.map +1 -0
- package/dist/calendar/index.d.ts +50 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/card/index.d.ts +11 -0
- package/dist/card/index.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +43 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/color/ColorEditor.d.ts +17 -0
- package/dist/color/ColorEditor.d.ts.map +1 -0
- package/dist/color/ColorSwatchPicker.d.ts +36 -0
- package/dist/color/ColorSwatchPicker.d.ts.map +1 -0
- package/dist/color/index.d.ts +233 -0
- package/dist/color/index.d.ts.map +1 -0
- package/dist/combobox/index.d.ts +81 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/components.css +1152 -0
- package/dist/contextualhelp/index.d.ts +18 -0
- package/dist/contextualhelp/index.d.ts.map +1 -0
- package/dist/custom/calendar-card/index.d.ts +12 -0
- package/dist/custom/calendar-card/index.d.ts.map +1 -0
- package/dist/custom/chip/index.d.ts +16 -0
- package/dist/custom/chip/index.d.ts.map +1 -0
- package/dist/custom/conversation/index.d.ts +32 -0
- package/dist/custom/conversation/index.d.ts.map +1 -0
- package/dist/custom/event-card/index.d.ts +30 -0
- package/dist/custom/event-card/index.d.ts.map +1 -0
- package/dist/custom/header/index.d.ts +16 -0
- package/dist/custom/header/index.d.ts.map +1 -0
- package/dist/custom/lateral-nav/index.d.ts +32 -0
- package/dist/custom/lateral-nav/index.d.ts.map +1 -0
- package/dist/custom/logo/index.d.ts +28 -0
- package/dist/custom/logo/index.d.ts.map +1 -0
- package/dist/custom/nav-header/index.d.ts +13 -0
- package/dist/custom/nav-header/index.d.ts.map +1 -0
- package/dist/custom/page-layout/index.d.ts +13 -0
- package/dist/custom/page-layout/index.d.ts.map +1 -0
- package/dist/custom/profile-card/index.d.ts +16 -0
- package/dist/custom/profile-card/index.d.ts.map +1 -0
- package/dist/custom/project-card/index.d.ts +24 -0
- package/dist/custom/project-card/index.d.ts.map +1 -0
- package/dist/custom/timeline-item/index.d.ts +28 -0
- package/dist/custom/timeline-item/index.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +10 -0
- package/dist/datepicker/index.d.ts.map +1 -0
- package/dist/dialog/AlertDialog.d.ts +41 -0
- package/dist/dialog/AlertDialog.d.ts.map +1 -0
- package/dist/dialog/Dialog.d.ts +62 -0
- package/dist/dialog/Dialog.d.ts.map +1 -0
- package/dist/dialog/index.d.ts +5 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/disclosure/index.d.ts +84 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/divider/index.d.ts +6 -0
- package/dist/divider/index.d.ts.map +1 -0
- package/dist/dnd/index.d.ts +7 -0
- package/dist/dnd/index.d.ts.map +1 -0
- package/dist/dropzone/index.d.ts +13 -0
- package/dist/dropzone/index.d.ts.map +1 -0
- package/dist/filetrigger/index.d.ts +13 -0
- package/dist/filetrigger/index.d.ts.map +1 -0
- package/dist/form/Field.d.ts +35 -0
- package/dist/form/Field.d.ts.map +1 -0
- package/dist/form/HelpText.d.ts +23 -0
- package/dist/form/HelpText.d.ts.map +1 -0
- package/dist/form/index.d.ts +20 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/gridlist/index.d.ts +92 -0
- package/dist/gridlist/index.d.ts.map +1 -0
- package/dist/icon/Illustration.d.ts +22 -0
- package/dist/icon/Illustration.d.ts.map +1 -0
- package/dist/icon/UIIcon.d.ts +24 -0
- package/dist/icon/UIIcon.d.ts.map +1 -0
- package/dist/icon/icons/GitHubIcon.d.ts +8 -0
- package/dist/icon/icons/GitHubIcon.d.ts.map +1 -0
- package/dist/icon/index.d.ts +40 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/illustratedmessage/index.d.ts +14 -0
- package/dist/illustratedmessage/index.d.ts.map +1 -0
- package/dist/image/index.d.ts +11 -0
- package/dist/image/index.d.ts.map +1 -0
- package/dist/index.d.ts +231 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10697 -0
- package/dist/index.js.map +1 -0
- package/dist/index.ssr.js +8944 -0
- package/dist/index.ssr.js.map +1 -0
- package/dist/inlinealert/index.d.ts +6 -0
- package/dist/inlinealert/index.d.ts.map +1 -0
- package/dist/label/index.d.ts +14 -0
- package/dist/label/index.d.ts.map +1 -0
- package/dist/labeledvalue/index.d.ts +25 -0
- package/dist/labeledvalue/index.d.ts.map +1 -0
- package/dist/landmark/index.d.ts +83 -0
- package/dist/landmark/index.d.ts.map +1 -0
- package/dist/layout/Flex.d.ts +29 -0
- package/dist/layout/Flex.d.ts.map +1 -0
- package/dist/layout/Grid.d.ts +37 -0
- package/dist/layout/Grid.d.ts.map +1 -0
- package/dist/layout/css-utils.d.ts +23 -0
- package/dist/layout/css-utils.d.ts.map +1 -0
- package/dist/layout/index.d.ts +11 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/link/index.d.ts +39 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/list/index.d.ts +6 -0
- package/dist/list/index.d.ts.map +1 -0
- package/dist/listbox/index.d.ts +47 -0
- package/dist/listbox/index.d.ts.map +1 -0
- package/dist/menu/ActionMenu.d.ts +24 -0
- package/dist/menu/ActionMenu.d.ts.map +1 -0
- package/dist/menu/ContextualHelpTrigger.d.ts +36 -0
- package/dist/menu/ContextualHelpTrigger.d.ts.map +1 -0
- package/dist/menu/SubmenuTrigger.d.ts +14 -0
- package/dist/menu/SubmenuTrigger.d.ts.map +1 -0
- package/dist/menu/index.d.ts +80 -0
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/meter/index.d.ts +51 -0
- package/dist/meter/index.d.ts.map +1 -0
- package/dist/numberfield/index.d.ts +32 -0
- package/dist/numberfield/index.d.ts.map +1 -0
- package/dist/overlays/Modal.d.ts +21 -0
- package/dist/overlays/Modal.d.ts.map +1 -0
- package/dist/overlays/OpenTransition.d.ts +46 -0
- package/dist/overlays/OpenTransition.d.ts.map +1 -0
- package/dist/overlays/Overlay.d.ts +21 -0
- package/dist/overlays/Overlay.d.ts.map +1 -0
- package/dist/overlays/Tray.d.ts +18 -0
- package/dist/overlays/Tray.d.ts.map +1 -0
- package/dist/overlays/index.d.ts +18 -0
- package/dist/overlays/index.d.ts.map +1 -0
- package/dist/picker/index.d.ts +6 -0
- package/dist/picker/index.d.ts.map +1 -0
- package/dist/popover/index.d.ts +86 -0
- package/dist/popover/index.d.ts.map +1 -0
- package/dist/progress/ProgressCircle.d.ts +31 -0
- package/dist/progress/ProgressCircle.d.ts.map +1 -0
- package/dist/progress/index.d.ts +8 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress-bar/index.d.ts +51 -0
- package/dist/progress-bar/index.d.ts.map +1 -0
- package/dist/provider/index.d.ts +77 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/radio/index.d.ts +39 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/searchfield/index.d.ts +29 -0
- package/dist/searchfield/index.d.ts.map +1 -0
- package/dist/select/index.d.ts +72 -0
- package/dist/select/index.d.ts.map +1 -0
- package/dist/separator/index.d.ts +38 -0
- package/dist/separator/index.d.ts.map +1 -0
- package/dist/shared-element/index.d.ts +10 -0
- package/dist/shared-element/index.d.ts.map +1 -0
- package/dist/slider/RangeSlider.d.ts +48 -0
- package/dist/slider/RangeSlider.d.ts.map +1 -0
- package/dist/slider/index.d.ts +32 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/statuslight/index.d.ts +22 -0
- package/dist/statuslight/index.d.ts.map +1 -0
- package/dist/steplist/index.d.ts +15 -0
- package/dist/steplist/index.d.ts.map +1 -0
- package/dist/story-utils/ErrorBoundary.d.ts +17 -0
- package/dist/story-utils/ErrorBoundary.d.ts.map +1 -0
- package/dist/story-utils/generatePowerset.d.ts +32 -0
- package/dist/story-utils/generatePowerset.d.ts.map +1 -0
- package/dist/story-utils/index.d.ts +9 -0
- package/dist/story-utils/index.d.ts.map +1 -0
- package/dist/style-macro-s1/index.d.ts +5 -0
- package/dist/style-macro-s1/index.d.ts.map +1 -0
- package/dist/styles.css +487 -0
- package/dist/switch/ToggleSwitch.d.ts +28 -0
- package/dist/switch/ToggleSwitch.d.ts.map +1 -0
- package/dist/switch/index.d.ts +26 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/table/index.d.ts +140 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/tabs/index.d.ts +56 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tag/index.d.ts +6 -0
- package/dist/tag/index.d.ts.map +1 -0
- package/dist/tag-group/index.d.ts +84 -0
- package/dist/tag-group/index.d.ts.map +1 -0
- package/dist/text/Heading.d.ts +22 -0
- package/dist/text/Heading.d.ts.map +1 -0
- package/dist/text/Keyboard.d.ts +16 -0
- package/dist/text/Keyboard.d.ts.map +1 -0
- package/dist/text/index.d.ts +20 -0
- package/dist/text/index.d.ts.map +1 -0
- package/dist/textfield/TextArea.d.ts +30 -0
- package/dist/textfield/TextArea.d.ts.map +1 -0
- package/dist/textfield/index.d.ts +27 -0
- package/dist/textfield/index.d.ts.map +1 -0
- package/dist/theme/types.d.ts +10 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme-dark/index.d.ts +10 -0
- package/dist/theme-dark/index.d.ts.map +1 -0
- package/dist/theme-default/index.d.ts +8 -0
- package/dist/theme-default/index.d.ts.map +1 -0
- package/dist/theme-express/index.d.ts +5 -0
- package/dist/theme-express/index.d.ts.map +1 -0
- package/dist/theme-light/index.d.ts +10 -0
- package/dist/theme-light/index.d.ts.map +1 -0
- package/dist/theme.css +360 -0
- package/dist/toast/index.d.ts +101 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toolbar/index.d.ts +42 -0
- package/dist/toolbar/index.d.ts.map +1 -0
- package/dist/tooltip/index.d.ts +78 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tree/index.d.ts +99 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/view/Content.d.ts +37 -0
- package/dist/view/Content.d.ts.map +1 -0
- package/dist/view/index.d.ts +13 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/well/index.d.ts +11 -0
- package/dist/well/index.d.ts.map +1 -0
- package/package.json +67 -0
- package/src/accordion/index.tsx +19 -0
- package/src/actionbar/index.tsx +92 -0
- package/src/actiongroup/index.tsx +110 -0
- package/src/alert/index.tsx +59 -0
- package/src/assets/favicon.png +0 -0
- package/src/assets/fire.gif +0 -0
- package/src/autocomplete/index.tsx +151 -0
- package/src/avatar/index.tsx +75 -0
- package/src/badge/index.tsx +43 -0
- package/src/breadcrumbs/index.tsx +212 -0
- package/src/button/ActionButton.tsx +80 -0
- package/src/button/Button.tsx +76 -0
- package/src/button/ClearButton.tsx +81 -0
- package/src/button/FieldButton.tsx +60 -0
- package/src/button/LogicButton.tsx +62 -0
- package/src/button/ToggleButton.tsx +77 -0
- package/src/button/index.ts +12 -0
- package/src/button/types.ts +24 -0
- package/src/buttongroup/index.tsx +25 -0
- package/src/calendar/DateField.tsx +208 -0
- package/src/calendar/DatePicker.tsx +257 -0
- package/src/calendar/DateRangePicker.tsx +254 -0
- package/src/calendar/RangeCalendar.tsx +238 -0
- package/src/calendar/TimeField.tsx +204 -0
- package/src/calendar/index.tsx +225 -0
- package/src/card/index.tsx +24 -0
- package/src/checkbox/index.tsx +259 -0
- package/src/color/ColorEditor.tsx +60 -0
- package/src/color/ColorSwatchPicker.tsx +169 -0
- package/src/color/index.tsx +725 -0
- package/src/combobox/index.tsx +398 -0
- package/src/components.css +1152 -0
- package/src/contextualhelp/index.tsx +42 -0
- package/src/custom/calendar-card/index.tsx +66 -0
- package/src/custom/chip/index.tsx +47 -0
- package/src/custom/conversation/index.tsx +107 -0
- package/src/custom/event-card/index.tsx +133 -0
- package/src/custom/header/index.tsx +33 -0
- package/src/custom/lateral-nav/index.tsx +88 -0
- package/src/custom/logo/index.tsx +58 -0
- package/src/custom/nav-header/index.tsx +45 -0
- package/src/custom/page-layout/index.tsx +29 -0
- package/src/custom/profile-card/index.tsx +64 -0
- package/src/custom/project-card/index.tsx +59 -0
- package/src/custom/timeline-item/index.tsx +105 -0
- package/src/datepicker/index.tsx +23 -0
- package/src/dialog/AlertDialog.tsx +140 -0
- package/src/dialog/Dialog.tsx +195 -0
- package/src/dialog/index.tsx +5 -0
- package/src/disclosure/index.tsx +310 -0
- package/src/divider/index.tsx +11 -0
- package/src/dnd/index.tsx +23 -0
- package/src/dropzone/index.tsx +48 -0
- package/src/filetrigger/index.tsx +28 -0
- package/src/form/Field.tsx +94 -0
- package/src/form/HelpText.tsx +48 -0
- package/src/form/index.tsx +48 -0
- package/src/gridlist/index.tsx +403 -0
- package/src/icon/Illustration.tsx +55 -0
- package/src/icon/UIIcon.tsx +59 -0
- package/src/icon/icons/GitHubIcon.tsx +22 -0
- package/src/icon/index.tsx +81 -0
- package/src/illustratedmessage/index.tsx +44 -0
- package/src/image/index.tsx +22 -0
- package/src/index.ts +666 -0
- package/src/inlinealert/index.tsx +10 -0
- package/src/label/index.tsx +36 -0
- package/src/labeledvalue/index.tsx +62 -0
- package/src/landmark/index.tsx +231 -0
- package/src/layout/Flex.tsx +94 -0
- package/src/layout/Grid.tsx +98 -0
- package/src/layout/css-utils.ts +31 -0
- package/src/layout/index.tsx +12 -0
- package/src/link/index.tsx +132 -0
- package/src/list/index.tsx +17 -0
- package/src/listbox/index.tsx +251 -0
- package/src/menu/ActionMenu.tsx +117 -0
- package/src/menu/ContextualHelpTrigger.tsx +122 -0
- package/src/menu/SubmenuTrigger.tsx +28 -0
- package/src/menu/index.tsx +309 -0
- package/src/meter/index.tsx +141 -0
- package/src/numberfield/index.tsx +282 -0
- package/src/overlays/Modal.tsx +64 -0
- package/src/overlays/OpenTransition.tsx +110 -0
- package/src/overlays/Overlay.tsx +47 -0
- package/src/overlays/Tray.tsx +48 -0
- package/src/overlays/index.tsx +55 -0
- package/src/picker/index.tsx +20 -0
- package/src/popover/index.tsx +261 -0
- package/src/progress/ProgressCircle.tsx +114 -0
- package/src/progress/index.tsx +14 -0
- package/src/progress-bar/index.tsx +144 -0
- package/src/provider/index.tsx +358 -0
- package/src/radio/index.tsx +192 -0
- package/src/searchfield/index.tsx +274 -0
- package/src/select/index.tsx +366 -0
- package/src/separator/index.tsx +110 -0
- package/src/shared-element/index.tsx +38 -0
- package/src/slider/RangeSlider.tsx +344 -0
- package/src/slider/index.tsx +232 -0
- package/src/statuslight/index.tsx +54 -0
- package/src/steplist/index.tsx +40 -0
- package/src/story-utils/ErrorBoundary.tsx +50 -0
- package/src/story-utils/generatePowerset.ts +63 -0
- package/src/story-utils/index.ts +13 -0
- package/src/style-macro-s1/index.ts +8 -0
- package/src/styles.css +487 -0
- package/src/switch/ToggleSwitch.tsx +114 -0
- package/src/switch/index.tsx +95 -0
- package/src/table/index.tsx +534 -0
- package/src/tabs/index.tsx +276 -0
- package/src/tag/index.tsx +12 -0
- package/src/tag-group/index.tsx +246 -0
- package/src/test-utils/index.ts +40 -0
- package/src/text/Heading.tsx +61 -0
- package/src/text/Keyboard.tsx +38 -0
- package/src/text/index.tsx +52 -0
- package/src/textfield/TextArea.tsx +193 -0
- package/src/textfield/index.tsx +191 -0
- package/src/theme/types.ts +10 -0
- package/src/theme-dark/index.ts +63 -0
- package/src/theme-default/index.ts +8 -0
- package/src/theme-express/index.ts +6 -0
- package/src/theme-light/index.ts +63 -0
- package/src/theme.css +360 -0
- package/src/toast/index.tsx +328 -0
- package/src/toolbar/index.tsx +110 -0
- package/src/tooltip/index.tsx +197 -0
- package/src/tree/index.tsx +496 -0
- package/src/view/Content.tsx +76 -0
- package/src/view/index.tsx +28 -0
- package/src/well/index.tsx +24 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Button } from './Button';
|
|
2
|
+
export type { ButtonProps, ButtonVariant, ButtonStyle, ButtonSize, StaticColor } from './types';
|
|
3
|
+
export { ToggleButton } from './ToggleButton';
|
|
4
|
+
export type { ToggleButtonProps, ToggleButtonSize } from './ToggleButton';
|
|
5
|
+
export { ActionButton } from './ActionButton';
|
|
6
|
+
export type { ActionButtonProps, ActionButtonSize } from './ActionButton';
|
|
7
|
+
export { ClearButton } from './ClearButton';
|
|
8
|
+
export type { ClearButtonProps, ClearButtonSize } from './ClearButton';
|
|
9
|
+
export { FieldButton } from './FieldButton';
|
|
10
|
+
export type { FieldButtonProps } from './FieldButton';
|
|
11
|
+
export { LogicButton } from './LogicButton';
|
|
12
|
+
export type { LogicButtonProps } from './LogicButton';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { JSX } from 'solid-js';
|
|
2
|
+
import type { ButtonProps as HeadlessButtonProps } from '@proyecto-viviana/solidaria-components';
|
|
3
|
+
|
|
4
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'accent' | 'positive' | 'negative' | 'ghost' | 'link';
|
|
5
|
+
export type ButtonStyle = 'fill' | 'outline';
|
|
6
|
+
export type ButtonSize = 'sm' | 'md' | 'lg';
|
|
7
|
+
export type StaticColor = 'white' | 'black';
|
|
8
|
+
|
|
9
|
+
export interface ButtonProps extends Omit<HeadlessButtonProps, 'class' | 'children' | 'style'> {
|
|
10
|
+
/** The content to display in the button. */
|
|
11
|
+
children?: JSX.Element;
|
|
12
|
+
/** The visual style of the button. */
|
|
13
|
+
variant?: ButtonVariant;
|
|
14
|
+
/** The background style of the button. */
|
|
15
|
+
buttonStyle?: ButtonStyle;
|
|
16
|
+
/** The size of the button. */
|
|
17
|
+
size?: ButtonSize;
|
|
18
|
+
/** Whether the button should take up the full width of its container. */
|
|
19
|
+
fullWidth?: boolean;
|
|
20
|
+
/** The static color style to apply. Useful when the button appears over a color background. */
|
|
21
|
+
staticColor?: StaticColor;
|
|
22
|
+
/** Additional CSS class name. */
|
|
23
|
+
class?: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ButtonGroup component for proyecto-viviana-silapse.
|
|
3
|
+
*
|
|
4
|
+
* Styling-only button grouping primitive.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { type JSX, splitProps } from 'solid-js';
|
|
8
|
+
|
|
9
|
+
export interface ButtonGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function ButtonGroup(props: ButtonGroupProps): JSX.Element {
|
|
14
|
+
const [local, domProps] = splitProps(props, ['class', 'children']);
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
{...domProps}
|
|
18
|
+
role={domProps.role ?? 'group'}
|
|
19
|
+
class={`inline-flex items-center gap-2 ${local.class ?? ''}`}
|
|
20
|
+
>
|
|
21
|
+
{local.children}
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DateField component for proyecto-viviana-silapse
|
|
3
|
+
*
|
|
4
|
+
* Styled date field component with segment-based editing.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { type JSX, splitProps } from 'solid-js';
|
|
8
|
+
import {
|
|
9
|
+
DateField as HeadlessDateField,
|
|
10
|
+
DateFieldLabel,
|
|
11
|
+
DateFieldDescription,
|
|
12
|
+
DateFieldErrorMessage,
|
|
13
|
+
DateInput,
|
|
14
|
+
DateSegment,
|
|
15
|
+
type DateFieldProps as HeadlessDateFieldProps,
|
|
16
|
+
type CalendarDate,
|
|
17
|
+
type DateValue,
|
|
18
|
+
} from '@proyecto-viviana/solidaria-components';
|
|
19
|
+
import { useProviderProps } from '../provider';
|
|
20
|
+
|
|
21
|
+
// ============================================
|
|
22
|
+
// TYPES
|
|
23
|
+
// ============================================
|
|
24
|
+
|
|
25
|
+
export type DateFieldSize = 'sm' | 'md' | 'lg';
|
|
26
|
+
|
|
27
|
+
export interface DateFieldProps<T extends DateValue = DateValue>
|
|
28
|
+
extends Omit<HeadlessDateFieldProps<T>, 'class' | 'style' | 'children'> {
|
|
29
|
+
/** The size of the field. @default 'md' */
|
|
30
|
+
size?: DateFieldSize;
|
|
31
|
+
/** Additional CSS class name. */
|
|
32
|
+
class?: string;
|
|
33
|
+
/** Label for the field. */
|
|
34
|
+
label?: string;
|
|
35
|
+
/** Description text. */
|
|
36
|
+
description?: string;
|
|
37
|
+
/** Error message. */
|
|
38
|
+
errorMessage?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ============================================
|
|
42
|
+
// STYLES
|
|
43
|
+
// ============================================
|
|
44
|
+
|
|
45
|
+
const sizeStyles = {
|
|
46
|
+
sm: {
|
|
47
|
+
container: 'text-sm',
|
|
48
|
+
input: 'px-2 py-1 gap-0.5',
|
|
49
|
+
segment: 'px-0.5',
|
|
50
|
+
label: 'text-xs',
|
|
51
|
+
},
|
|
52
|
+
md: {
|
|
53
|
+
container: 'text-base',
|
|
54
|
+
input: 'px-3 py-2 gap-1',
|
|
55
|
+
segment: 'px-1',
|
|
56
|
+
label: 'text-sm',
|
|
57
|
+
},
|
|
58
|
+
lg: {
|
|
59
|
+
container: 'text-lg',
|
|
60
|
+
input: 'px-4 py-3 gap-1.5',
|
|
61
|
+
segment: 'px-1.5',
|
|
62
|
+
label: 'text-base',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// ============================================
|
|
67
|
+
// DATE FIELD COMPONENT
|
|
68
|
+
// ============================================
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* A date field allows users to enter and edit date values using a keyboard.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* // Basic usage
|
|
76
|
+
* <DateField label="Birth date" />
|
|
77
|
+
*
|
|
78
|
+
* // Controlled
|
|
79
|
+
* const [date, setDate] = createSignal<CalendarDate | null>(null);
|
|
80
|
+
* <DateField
|
|
81
|
+
* label="Event date"
|
|
82
|
+
* value={date()}
|
|
83
|
+
* onChange={setDate}
|
|
84
|
+
* />
|
|
85
|
+
*
|
|
86
|
+
* // With validation
|
|
87
|
+
* <DateField
|
|
88
|
+
* label="Future date"
|
|
89
|
+
* minValue={today(getLocalTimeZone())}
|
|
90
|
+
* errorMessage="Date must be in the future"
|
|
91
|
+
* />
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export function DateField<T extends DateValue = CalendarDate>(
|
|
95
|
+
props: DateFieldProps<T>
|
|
96
|
+
): JSX.Element {
|
|
97
|
+
const mergedProps = useProviderProps(props);
|
|
98
|
+
const [local, rest] = splitProps(mergedProps, [
|
|
99
|
+
'size',
|
|
100
|
+
'class',
|
|
101
|
+
'label',
|
|
102
|
+
'description',
|
|
103
|
+
'errorMessage',
|
|
104
|
+
'isInvalid',
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
const size = () => local.size ?? 'md';
|
|
108
|
+
const sizeConfig = () => sizeStyles[size()];
|
|
109
|
+
const isInvalid = () => local.isInvalid || !!local.errorMessage;
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<HeadlessDateField
|
|
113
|
+
{...rest}
|
|
114
|
+
label={local.label}
|
|
115
|
+
description={local.description}
|
|
116
|
+
errorMessage={local.errorMessage}
|
|
117
|
+
isInvalid={isInvalid()}
|
|
118
|
+
class={`
|
|
119
|
+
flex flex-col gap-1
|
|
120
|
+
${sizeConfig().container}
|
|
121
|
+
${local.class ?? ''}
|
|
122
|
+
`}
|
|
123
|
+
>
|
|
124
|
+
{/* Label */}
|
|
125
|
+
{local.label && (
|
|
126
|
+
<DateFieldLabel class={`font-medium text-primary-200 ${sizeConfig().label}`}>
|
|
127
|
+
{local.label}
|
|
128
|
+
{rest.isRequired && <span class="text-red-500 ml-0.5">*</span>}
|
|
129
|
+
</DateFieldLabel>
|
|
130
|
+
)}
|
|
131
|
+
|
|
132
|
+
{/* Input container */}
|
|
133
|
+
<DateInput
|
|
134
|
+
class={({ isFocused, isDisabled }) => {
|
|
135
|
+
const base = `
|
|
136
|
+
inline-flex items-center
|
|
137
|
+
${sizeConfig().input}
|
|
138
|
+
bg-bg-400 rounded-md border
|
|
139
|
+
transition-colors duration-150
|
|
140
|
+
`;
|
|
141
|
+
|
|
142
|
+
let borderClass = 'border-primary-600';
|
|
143
|
+
if (isInvalid()) {
|
|
144
|
+
borderClass = 'border-red-500';
|
|
145
|
+
} else if (isFocused) {
|
|
146
|
+
borderClass = 'border-accent';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const disabledClass = isDisabled
|
|
150
|
+
? 'opacity-50 cursor-not-allowed'
|
|
151
|
+
: '';
|
|
152
|
+
|
|
153
|
+
const focusClass = isFocused
|
|
154
|
+
? 'ring-2 ring-accent/30'
|
|
155
|
+
: '';
|
|
156
|
+
|
|
157
|
+
return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();
|
|
158
|
+
}}
|
|
159
|
+
>
|
|
160
|
+
{(segment) => (
|
|
161
|
+
<DateSegment
|
|
162
|
+
segment={segment}
|
|
163
|
+
class={({ isFocused, isPlaceholder, isEditable }) => {
|
|
164
|
+
const base = `
|
|
165
|
+
${sizeConfig().segment}
|
|
166
|
+
rounded
|
|
167
|
+
outline-none
|
|
168
|
+
tabular-nums
|
|
169
|
+
`;
|
|
170
|
+
|
|
171
|
+
let stateClass = '';
|
|
172
|
+
if (segment.type === 'literal') {
|
|
173
|
+
stateClass = 'text-primary-400';
|
|
174
|
+
} else if (isPlaceholder) {
|
|
175
|
+
stateClass = 'text-primary-500 italic';
|
|
176
|
+
} else {
|
|
177
|
+
stateClass = 'text-primary-100';
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const focusClass = isFocused && isEditable
|
|
181
|
+
? 'bg-accent text-bg-400'
|
|
182
|
+
: '';
|
|
183
|
+
|
|
184
|
+
return `${base} ${stateClass} ${focusClass}`.trim();
|
|
185
|
+
}}
|
|
186
|
+
/>
|
|
187
|
+
)}
|
|
188
|
+
</DateInput>
|
|
189
|
+
|
|
190
|
+
{/* Description */}
|
|
191
|
+
{local.description && !isInvalid() && (
|
|
192
|
+
<DateFieldDescription class={`text-primary-400 ${sizeConfig().label}`}>
|
|
193
|
+
{local.description}
|
|
194
|
+
</DateFieldDescription>
|
|
195
|
+
)}
|
|
196
|
+
|
|
197
|
+
{/* Error message */}
|
|
198
|
+
{isInvalid() && local.errorMessage && (
|
|
199
|
+
<DateFieldErrorMessage class={`text-red-500 ${sizeConfig().label}`}>
|
|
200
|
+
{local.errorMessage}
|
|
201
|
+
</DateFieldErrorMessage>
|
|
202
|
+
)}
|
|
203
|
+
</HeadlessDateField>
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Re-export types
|
|
208
|
+
export type { CalendarDate, DateValue };
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DatePicker component for proyecto-viviana-silapse
|
|
3
|
+
*
|
|
4
|
+
* Styled date picker component that combines a date field with a calendar popup.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { type JSX, splitProps, Show } from 'solid-js'
|
|
8
|
+
import {
|
|
9
|
+
DatePicker as HeadlessDatePicker,
|
|
10
|
+
DatePickerLabel as HeadlessDatePickerLabel,
|
|
11
|
+
DatePickerDescription as HeadlessDatePickerDescription,
|
|
12
|
+
DatePickerErrorMessage as HeadlessDatePickerErrorMessage,
|
|
13
|
+
DatePickerButton,
|
|
14
|
+
DatePickerContent,
|
|
15
|
+
DateInput,
|
|
16
|
+
DateSegment,
|
|
17
|
+
type DatePickerProps as HeadlessDatePickerProps,
|
|
18
|
+
type CalendarDate,
|
|
19
|
+
type DateValue,
|
|
20
|
+
} from '@proyecto-viviana/solidaria-components'
|
|
21
|
+
import { Calendar } from './index'
|
|
22
|
+
import { useProviderProps } from '../provider'
|
|
23
|
+
|
|
24
|
+
// Calendar icon component - use function to ensure consistent hydration
|
|
25
|
+
function CalendarIcon(): JSX.Element {
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
viewBox="0 0 24 24"
|
|
29
|
+
fill="none"
|
|
30
|
+
stroke="currentColor"
|
|
31
|
+
stroke-width="2"
|
|
32
|
+
stroke-linecap="round"
|
|
33
|
+
stroke-linejoin="round"
|
|
34
|
+
class="w-5 h-5"
|
|
35
|
+
aria-hidden="true"
|
|
36
|
+
>
|
|
37
|
+
<rect x="3" y="4" width="18" height="18" rx="2" ry="2" />
|
|
38
|
+
<line x1="16" y1="2" x2="16" y2="6" />
|
|
39
|
+
<line x1="8" y1="2" x2="8" y2="6" />
|
|
40
|
+
<line x1="3" y1="10" x2="21" y2="10" />
|
|
41
|
+
</svg>
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ============================================
|
|
46
|
+
// TYPES
|
|
47
|
+
// ============================================
|
|
48
|
+
|
|
49
|
+
export type DatePickerSize = 'sm' | 'md' | 'lg'
|
|
50
|
+
|
|
51
|
+
export interface DatePickerProps<T extends DateValue = DateValue>
|
|
52
|
+
extends Omit<HeadlessDatePickerProps<T>, 'class' | 'style' | 'children'> {
|
|
53
|
+
/** The size of the picker. @default 'md' */
|
|
54
|
+
size?: DatePickerSize
|
|
55
|
+
/** Additional CSS class name. */
|
|
56
|
+
class?: string
|
|
57
|
+
/** Label for the field. */
|
|
58
|
+
label?: string
|
|
59
|
+
/** Description text. */
|
|
60
|
+
description?: string
|
|
61
|
+
/** Error message. */
|
|
62
|
+
errorMessage?: string
|
|
63
|
+
/** Placeholder text. */
|
|
64
|
+
placeholder?: string
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ============================================
|
|
68
|
+
// STYLES
|
|
69
|
+
// ============================================
|
|
70
|
+
|
|
71
|
+
const sizeStyles = {
|
|
72
|
+
sm: {
|
|
73
|
+
container: 'text-sm',
|
|
74
|
+
input: 'px-2 py-1 gap-0.5',
|
|
75
|
+
segment: 'px-0.5',
|
|
76
|
+
label: 'text-xs',
|
|
77
|
+
button: 'w-7 h-7',
|
|
78
|
+
},
|
|
79
|
+
md: {
|
|
80
|
+
container: 'text-base',
|
|
81
|
+
input: 'px-3 py-2 gap-1',
|
|
82
|
+
segment: 'px-1',
|
|
83
|
+
label: 'text-sm',
|
|
84
|
+
button: 'w-9 h-9',
|
|
85
|
+
},
|
|
86
|
+
lg: {
|
|
87
|
+
container: 'text-lg',
|
|
88
|
+
input: 'px-4 py-3 gap-1.5',
|
|
89
|
+
segment: 'px-1.5',
|
|
90
|
+
label: 'text-base',
|
|
91
|
+
button: 'w-11 h-11',
|
|
92
|
+
},
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ============================================
|
|
96
|
+
// DATE PICKER COMPONENT
|
|
97
|
+
// ============================================
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* A date picker combines a date field and a calendar popup.
|
|
101
|
+
*/
|
|
102
|
+
export function DatePicker<T extends DateValue = CalendarDate>(
|
|
103
|
+
props: DatePickerProps<T>
|
|
104
|
+
): JSX.Element {
|
|
105
|
+
const mergedProps = useProviderProps(props)
|
|
106
|
+
const [local, rest] = splitProps(mergedProps, [
|
|
107
|
+
'size',
|
|
108
|
+
'class',
|
|
109
|
+
'label',
|
|
110
|
+
'description',
|
|
111
|
+
'errorMessage',
|
|
112
|
+
'isInvalid',
|
|
113
|
+
'placeholder',
|
|
114
|
+
])
|
|
115
|
+
|
|
116
|
+
const size = () => local.size ?? 'md'
|
|
117
|
+
const sizeConfig = () => sizeStyles[size()]
|
|
118
|
+
const isInvalid = () => local.isInvalid || !!local.errorMessage
|
|
119
|
+
|
|
120
|
+
return (
|
|
121
|
+
<HeadlessDatePicker
|
|
122
|
+
{...rest}
|
|
123
|
+
label={local.label}
|
|
124
|
+
description={local.description}
|
|
125
|
+
errorMessage={local.errorMessage}
|
|
126
|
+
isInvalid={isInvalid()}
|
|
127
|
+
class={`flex flex-col gap-1 relative ${sizeConfig().container} ${local.class ?? ''}`}
|
|
128
|
+
>
|
|
129
|
+
<Show when={local.label}>
|
|
130
|
+
<HeadlessDatePickerLabel class={`font-medium text-primary-200 ${sizeConfig().label}`}>
|
|
131
|
+
{local.label}
|
|
132
|
+
<Show when={rest.isRequired}>
|
|
133
|
+
<span class="text-red-500 ml-0.5">*</span>
|
|
134
|
+
</Show>
|
|
135
|
+
</HeadlessDatePickerLabel>
|
|
136
|
+
</Show>
|
|
137
|
+
|
|
138
|
+
<div class="relative flex items-center">
|
|
139
|
+
<DateInput
|
|
140
|
+
class={({ isFocused, isDisabled }) => {
|
|
141
|
+
const base = `
|
|
142
|
+
inline-flex items-center flex-1
|
|
143
|
+
${sizeConfig().input}
|
|
144
|
+
bg-bg-400 rounded-l-md border-y border-l
|
|
145
|
+
transition-colors duration-150
|
|
146
|
+
`
|
|
147
|
+
|
|
148
|
+
let borderClass = 'border-primary-600'
|
|
149
|
+
if (isInvalid()) {
|
|
150
|
+
borderClass = 'border-red-500'
|
|
151
|
+
} else if (isFocused) {
|
|
152
|
+
borderClass = 'border-accent'
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const disabledClass = isDisabled
|
|
156
|
+
? 'opacity-50 cursor-not-allowed'
|
|
157
|
+
: ''
|
|
158
|
+
|
|
159
|
+
const focusClass = isFocused
|
|
160
|
+
? 'ring-2 ring-accent/30'
|
|
161
|
+
: ''
|
|
162
|
+
|
|
163
|
+
return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim()
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
{(segment) => (
|
|
167
|
+
<DateSegment
|
|
168
|
+
segment={segment}
|
|
169
|
+
class={({ isFocused, isPlaceholder, isEditable }) => {
|
|
170
|
+
const base = `
|
|
171
|
+
${sizeConfig().segment}
|
|
172
|
+
rounded
|
|
173
|
+
outline-none
|
|
174
|
+
tabular-nums
|
|
175
|
+
`
|
|
176
|
+
|
|
177
|
+
let stateClass = ''
|
|
178
|
+
if (segment.type === 'literal') {
|
|
179
|
+
stateClass = 'text-primary-400'
|
|
180
|
+
} else if (isPlaceholder) {
|
|
181
|
+
stateClass = 'text-primary-500 italic'
|
|
182
|
+
} else {
|
|
183
|
+
stateClass = 'text-primary-100'
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const focusClass = isFocused && isEditable
|
|
187
|
+
? 'bg-accent text-bg-400'
|
|
188
|
+
: ''
|
|
189
|
+
|
|
190
|
+
return `${base} ${stateClass} ${focusClass}`.trim()
|
|
191
|
+
}}
|
|
192
|
+
/>
|
|
193
|
+
)}
|
|
194
|
+
</DateInput>
|
|
195
|
+
|
|
196
|
+
<DatePickerButton
|
|
197
|
+
class={({ isDisabled, isOpen }) => {
|
|
198
|
+
const base = `
|
|
199
|
+
${sizeConfig().button}
|
|
200
|
+
flex items-center justify-center
|
|
201
|
+
bg-bg-400 border-y border-r rounded-r-md
|
|
202
|
+
text-primary-200
|
|
203
|
+
transition-colors duration-150
|
|
204
|
+
focus:outline-none focus:ring-2 focus:ring-accent/50
|
|
205
|
+
`
|
|
206
|
+
|
|
207
|
+
let borderClass = 'border-primary-600'
|
|
208
|
+
if (isInvalid()) {
|
|
209
|
+
borderClass = 'border-red-500'
|
|
210
|
+
} else if (isOpen) {
|
|
211
|
+
borderClass = 'border-accent bg-bg-300'
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const disabledClass = isDisabled
|
|
215
|
+
? 'opacity-50 cursor-not-allowed'
|
|
216
|
+
: 'hover:bg-bg-300 cursor-pointer'
|
|
217
|
+
|
|
218
|
+
return `${base} ${borderClass} ${disabledClass}`.trim()
|
|
219
|
+
}}
|
|
220
|
+
>
|
|
221
|
+
<CalendarIcon />
|
|
222
|
+
</DatePickerButton>
|
|
223
|
+
|
|
224
|
+
<DatePickerPopup size={size()} />
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
<Show when={local.description && !isInvalid()}>
|
|
228
|
+
<HeadlessDatePickerDescription class={`text-primary-400 ${sizeConfig().label}`}>
|
|
229
|
+
{local.description}
|
|
230
|
+
</HeadlessDatePickerDescription>
|
|
231
|
+
</Show>
|
|
232
|
+
|
|
233
|
+
<Show when={isInvalid() && local.errorMessage}>
|
|
234
|
+
<HeadlessDatePickerErrorMessage class={`text-red-500 ${sizeConfig().label}`}>
|
|
235
|
+
{local.errorMessage}
|
|
236
|
+
</HeadlessDatePickerErrorMessage>
|
|
237
|
+
</Show>
|
|
238
|
+
</HeadlessDatePicker>
|
|
239
|
+
)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// ============================================
|
|
243
|
+
// POPUP COMPONENT (uses context)
|
|
244
|
+
// ============================================
|
|
245
|
+
|
|
246
|
+
function DatePickerPopup(props: { size: DatePickerSize }): JSX.Element {
|
|
247
|
+
return (
|
|
248
|
+
<DatePickerContent
|
|
249
|
+
class="z-50 shadow-lg rounded-lg"
|
|
250
|
+
>
|
|
251
|
+
<Calendar size={props.size} />
|
|
252
|
+
</DatePickerContent>
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Re-export types
|
|
257
|
+
export type { CalendarDate, DateValue }
|