@proyecto-viviana/solidaria-components 0.2.5 → 0.2.9

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.
Files changed (194) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ActionBar.d.ts +71 -0
  3. package/dist/ActionBar.d.ts.map +1 -0
  4. package/dist/ActionGroup.d.ts +74 -0
  5. package/dist/ActionGroup.d.ts.map +1 -0
  6. package/dist/Alert.d.ts +70 -0
  7. package/dist/Alert.d.ts.map +1 -0
  8. package/dist/Breadcrumbs.d.ts +10 -2
  9. package/dist/Breadcrumbs.d.ts.map +1 -1
  10. package/dist/Button.d.ts +4 -0
  11. package/dist/Button.d.ts.map +1 -1
  12. package/dist/Calendar.d.ts +13 -0
  13. package/dist/Calendar.d.ts.map +1 -1
  14. package/dist/Checkbox.d.ts +2 -2
  15. package/dist/Checkbox.d.ts.map +1 -1
  16. package/dist/Collection.d.ts +125 -0
  17. package/dist/Collection.d.ts.map +1 -0
  18. package/dist/Color.d.ts +114 -2
  19. package/dist/Color.d.ts.map +1 -1
  20. package/dist/ColorEditor.d.ts +42 -0
  21. package/dist/ColorEditor.d.ts.map +1 -0
  22. package/dist/ComboBox.d.ts +64 -0
  23. package/dist/ComboBox.d.ts.map +1 -1
  24. package/dist/ContextualHelpTrigger.d.ts +40 -0
  25. package/dist/ContextualHelpTrigger.d.ts.map +1 -0
  26. package/dist/DateField.d.ts +27 -2
  27. package/dist/DateField.d.ts.map +1 -1
  28. package/dist/DatePicker.d.ts +67 -2
  29. package/dist/DatePicker.d.ts.map +1 -1
  30. package/dist/Dialog.d.ts.map +1 -1
  31. package/dist/Disclosure.d.ts +2 -0
  32. package/dist/Disclosure.d.ts.map +1 -1
  33. package/dist/DragAndDrop.d.ts +80 -0
  34. package/dist/DragAndDrop.d.ts.map +1 -0
  35. package/dist/DragPreview.d.ts +14 -0
  36. package/dist/DragPreview.d.ts.map +1 -0
  37. package/dist/DropZone.d.ts +27 -0
  38. package/dist/DropZone.d.ts.map +1 -0
  39. package/dist/FieldError.d.ts +23 -0
  40. package/dist/FieldError.d.ts.map +1 -0
  41. package/dist/FileTrigger.d.ts +26 -0
  42. package/dist/FileTrigger.d.ts.map +1 -0
  43. package/dist/Focusable.d.ts +27 -0
  44. package/dist/Focusable.d.ts.map +1 -0
  45. package/dist/Form.d.ts +27 -0
  46. package/dist/Form.d.ts.map +1 -0
  47. package/dist/GridList.d.ts +40 -1
  48. package/dist/GridList.d.ts.map +1 -1
  49. package/dist/Icon.d.ts +57 -0
  50. package/dist/Icon.d.ts.map +1 -0
  51. package/dist/Keyboard.d.ts +13 -0
  52. package/dist/Keyboard.d.ts.map +1 -0
  53. package/dist/Link.d.ts.map +1 -1
  54. package/dist/ListBox.d.ts +43 -1
  55. package/dist/ListBox.d.ts.map +1 -1
  56. package/dist/ListDropTargetDelegate.d.ts +38 -0
  57. package/dist/ListDropTargetDelegate.d.ts.map +1 -0
  58. package/dist/Menu.d.ts +20 -2
  59. package/dist/Menu.d.ts.map +1 -1
  60. package/dist/Meter.d.ts +2 -2
  61. package/dist/Meter.d.ts.map +1 -1
  62. package/dist/Modal.d.ts +2 -0
  63. package/dist/Modal.d.ts.map +1 -1
  64. package/dist/NumberField.d.ts +2 -0
  65. package/dist/NumberField.d.ts.map +1 -1
  66. package/dist/Popover.d.ts +4 -2
  67. package/dist/Popover.d.ts.map +1 -1
  68. package/dist/Pressable.d.ts +27 -0
  69. package/dist/Pressable.d.ts.map +1 -0
  70. package/dist/ProgressBar.d.ts +2 -2
  71. package/dist/ProgressBar.d.ts.map +1 -1
  72. package/dist/RadioGroup.d.ts.map +1 -1
  73. package/dist/RangeCalendar.d.ts +5 -0
  74. package/dist/RangeCalendar.d.ts.map +1 -1
  75. package/dist/RouterProvider.d.ts +75 -0
  76. package/dist/RouterProvider.d.ts.map +1 -0
  77. package/dist/SearchField.d.ts +2 -3
  78. package/dist/SearchField.d.ts.map +1 -1
  79. package/dist/Select.d.ts +11 -0
  80. package/dist/Select.d.ts.map +1 -1
  81. package/dist/SelectionIndicator.d.ts +30 -0
  82. package/dist/SelectionIndicator.d.ts.map +1 -0
  83. package/dist/SharedElementTransition.d.ts +39 -0
  84. package/dist/SharedElementTransition.d.ts.map +1 -0
  85. package/dist/Slider.d.ts +6 -3
  86. package/dist/Slider.d.ts.map +1 -1
  87. package/dist/Table.d.ts +39 -0
  88. package/dist/Table.d.ts.map +1 -1
  89. package/dist/Tabs.d.ts +4 -3
  90. package/dist/Tabs.d.ts.map +1 -1
  91. package/dist/TagGroup.d.ts +12 -2
  92. package/dist/TagGroup.d.ts.map +1 -1
  93. package/dist/Text.d.ts +10 -0
  94. package/dist/Text.d.ts.map +1 -0
  95. package/dist/TextField.d.ts +4 -0
  96. package/dist/TextField.d.ts.map +1 -1
  97. package/dist/TimeField.d.ts +26 -1
  98. package/dist/TimeField.d.ts.map +1 -1
  99. package/dist/Toast.d.ts.map +1 -1
  100. package/dist/ToggleButton.d.ts +30 -0
  101. package/dist/ToggleButton.d.ts.map +1 -0
  102. package/dist/ToggleButtonGroup.d.ts +33 -0
  103. package/dist/ToggleButtonGroup.d.ts.map +1 -0
  104. package/dist/Toolbar.d.ts.map +1 -1
  105. package/dist/Tooltip.d.ts +9 -0
  106. package/dist/Tooltip.d.ts.map +1 -1
  107. package/dist/Tree.d.ts +44 -2
  108. package/dist/Tree.d.ts.map +1 -1
  109. package/dist/Virtualizer.d.ts +61 -0
  110. package/dist/Virtualizer.d.ts.map +1 -0
  111. package/dist/VirtualizerLayouts.d.ts +82 -0
  112. package/dist/VirtualizerLayouts.d.ts.map +1 -0
  113. package/dist/VisuallyHidden.d.ts +3 -1
  114. package/dist/VisuallyHidden.d.ts.map +1 -1
  115. package/dist/contexts.d.ts +1 -0
  116. package/dist/contexts.d.ts.map +1 -1
  117. package/dist/index.d.ts +57 -25
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +13961 -5946
  120. package/dist/index.js.map +1 -7
  121. package/dist/index.ssr.js +9612 -2401
  122. package/dist/index.ssr.js.map +1 -7
  123. package/dist/useDragAndDrop.d.ts +93 -0
  124. package/dist/useDragAndDrop.d.ts.map +1 -0
  125. package/dist/utils.d.ts +7 -1
  126. package/dist/utils.d.ts.map +1 -1
  127. package/dist/virtualizer/Layout.d.ts +79 -0
  128. package/dist/virtualizer/Layout.d.ts.map +1 -0
  129. package/package.json +8 -6
  130. package/src/ActionBar.tsx +248 -0
  131. package/src/ActionGroup.tsx +285 -0
  132. package/src/Alert.tsx +177 -0
  133. package/src/Autocomplete.tsx +1 -1
  134. package/src/Breadcrumbs.tsx +103 -17
  135. package/src/Button.tsx +65 -21
  136. package/src/Calendar.tsx +179 -53
  137. package/src/Checkbox.tsx +1 -2
  138. package/src/Collection.tsx +341 -0
  139. package/src/Color.tsx +652 -34
  140. package/src/ColorEditor.tsx +231 -0
  141. package/src/ComboBox.tsx +315 -81
  142. package/src/ContextualHelpTrigger.tsx +183 -0
  143. package/src/DateField.tsx +93 -19
  144. package/src/DatePicker.tsx +495 -25
  145. package/src/Dialog.tsx +40 -9
  146. package/src/Disclosure.tsx +33 -27
  147. package/src/DragAndDrop.tsx +334 -0
  148. package/src/DragPreview.tsx +45 -0
  149. package/src/DropZone.tsx +213 -0
  150. package/src/FieldError.tsx +67 -0
  151. package/src/FileTrigger.tsx +83 -0
  152. package/src/Focusable.tsx +106 -0
  153. package/src/Form.tsx +85 -0
  154. package/src/GridList.tsx +379 -41
  155. package/src/Icon.tsx +154 -0
  156. package/src/Keyboard.tsx +26 -0
  157. package/src/Link.tsx +14 -1
  158. package/src/ListBox.tsx +484 -33
  159. package/src/ListDropTargetDelegate.ts +282 -0
  160. package/src/Menu.tsx +388 -35
  161. package/src/Meter.tsx +7 -3
  162. package/src/Modal.tsx +32 -4
  163. package/src/NumberField.tsx +163 -43
  164. package/src/Popover.tsx +136 -180
  165. package/src/Pressable.tsx +108 -0
  166. package/src/ProgressBar.tsx +7 -3
  167. package/src/RadioGroup.tsx +35 -25
  168. package/src/RangeCalendar.tsx +100 -68
  169. package/src/RouterProvider.tsx +240 -0
  170. package/src/SearchField.tsx +142 -34
  171. package/src/Select.tsx +221 -73
  172. package/src/SelectionIndicator.tsx +105 -0
  173. package/src/SharedElementTransition.tsx +258 -0
  174. package/src/Slider.tsx +16 -6
  175. package/src/Table.tsx +417 -57
  176. package/src/Tabs.tsx +68 -35
  177. package/src/TagGroup.tsx +121 -36
  178. package/src/Text.tsx +18 -0
  179. package/src/TextField.tsx +25 -8
  180. package/src/TimeField.tsx +101 -151
  181. package/src/Toast.tsx +108 -14
  182. package/src/ToggleButton.tsx +159 -0
  183. package/src/ToggleButtonGroup.tsx +136 -0
  184. package/src/Toolbar.tsx +14 -8
  185. package/src/Tooltip.tsx +108 -19
  186. package/src/Tree.tsx +1143 -87
  187. package/src/Virtualizer.tsx +702 -0
  188. package/src/VirtualizerLayouts.ts +265 -0
  189. package/src/VisuallyHidden.tsx +15 -21
  190. package/src/contexts.ts +1 -0
  191. package/src/index.ts +1057 -620
  192. package/src/useDragAndDrop.ts +351 -0
  193. package/src/utils.tsx +37 -3
  194. package/src/virtualizer/Layout.ts +200 -0
@@ -0,0 +1,231 @@
1
+ /**
2
+ * ColorEditor headless component
3
+ *
4
+ * A composite component that combines ColorArea, ColorSlider, and ColorField
5
+ * into a complete color editing UI. Pure composition — no new ARIA hooks needed.
6
+ */
7
+
8
+ import { type JSX, createSignal, For, Show, splitProps, createMemo } from 'solid-js'
9
+ import {
10
+ ColorPicker,
11
+ ColorArea,
12
+ ColorAreaGradient,
13
+ ColorAreaThumb,
14
+ ColorSlider,
15
+ ColorSliderTrack,
16
+ ColorSliderThumb,
17
+ ColorField,
18
+ ColorFieldInput,
19
+ } from './Color'
20
+ import { getColorChannels } from '@proyecto-viviana/solid-stately'
21
+ import type { Color, ColorChannel, ColorSpace } from '@proyecto-viviana/solid-stately'
22
+
23
+ // ============================================
24
+ // TYPES
25
+ // ============================================
26
+
27
+ export type ColorEditorColorSpace = 'rgb' | 'hsl' | 'hsb'
28
+
29
+ export interface ColorEditorRenderProps {
30
+ colorSpace: ColorEditorColorSpace | 'hex'
31
+ }
32
+
33
+ export interface ColorEditorProps {
34
+ /** The current color value (controlled). */
35
+ value?: Color | string
36
+ /** The default color value (uncontrolled). */
37
+ defaultValue?: Color | string
38
+ /** Handler called when the color changes. */
39
+ onChange?: (color: Color) => void
40
+ /** Whether to hide the alpha channel. */
41
+ hideAlphaChannel?: boolean
42
+ /** The initial color space. @default 'hex' */
43
+ colorSpace?: ColorEditorColorSpace | 'hex'
44
+ /** Handler called when the color space changes. */
45
+ onColorSpaceChange?: (colorSpace: ColorEditorColorSpace | 'hex') => void
46
+ /** The CSS class name. */
47
+ class?: string | ((renderProps: ColorEditorRenderProps) => string)
48
+ /** The inline style. */
49
+ style?: JSX.CSSProperties
50
+ /** Children override. If provided, replaces the default layout. */
51
+ children?: JSX.Element
52
+ /** Whether the editor is disabled. */
53
+ isDisabled?: boolean
54
+ }
55
+
56
+ // ============================================
57
+ // COMPONENT
58
+ // ============================================
59
+
60
+ /**
61
+ * ColorEditor provides a default UI for editing colors.
62
+ *
63
+ * Composes: ColorArea + ColorSlider (hue) + optional ColorSlider (alpha) +
64
+ * color space selector + channel ColorFields.
65
+ */
66
+ export function ColorEditor(props: ColorEditorProps): JSX.Element {
67
+ const [local] = splitProps(props, [
68
+ 'value',
69
+ 'defaultValue',
70
+ 'onChange',
71
+ 'hideAlphaChannel',
72
+ 'colorSpace',
73
+ 'onColorSpaceChange',
74
+ 'class',
75
+ 'style',
76
+ 'children',
77
+ 'isDisabled',
78
+ ])
79
+
80
+ const [activeSpace, setActiveSpace] = createSignal<ColorEditorColorSpace | 'hex'>(
81
+ local.colorSpace ?? 'hex'
82
+ )
83
+
84
+ const handleSpaceChange = (space: ColorEditorColorSpace | 'hex') => {
85
+ setActiveSpace(space)
86
+ local.onColorSpaceChange?.(space)
87
+ }
88
+
89
+ const channels = createMemo<ColorChannel[]>(() => {
90
+ const space = activeSpace()
91
+ if (space === 'hex') return []
92
+ return getColorChannels(space as ColorSpace)
93
+ })
94
+
95
+ const resolvedClass = () => {
96
+ if (typeof local.class === 'function') {
97
+ return local.class({ colorSpace: activeSpace() })
98
+ }
99
+ return local.class ?? ''
100
+ }
101
+
102
+ // If children are provided, render them instead of the default layout
103
+ if (local.children) {
104
+ return (
105
+ <div class={resolvedClass()} style={local.style}>
106
+ <ColorPicker value={local.value} defaultValue={local.defaultValue} onChange={local.onChange}>
107
+ {() => local.children}
108
+ </ColorPicker>
109
+ </div>
110
+ )
111
+ }
112
+
113
+ // Determine ColorArea channels based on active color space
114
+ const areaChannels = createMemo(() => {
115
+ const space = activeSpace()
116
+ if (space === 'hsb' || space === 'hex') {
117
+ return { x: 'saturation' as ColorChannel, y: 'brightness' as ColorChannel, colorSpace: 'hsb' as ColorSpace }
118
+ }
119
+ if (space === 'hsl') {
120
+ return { x: 'saturation' as ColorChannel, y: 'lightness' as ColorChannel, colorSpace: 'hsl' as ColorSpace }
121
+ }
122
+ // rgb: use green and blue on area
123
+ return { x: 'green' as ColorChannel, y: 'blue' as ColorChannel, colorSpace: 'rgb' as ColorSpace }
124
+ })
125
+
126
+ return (
127
+ <div
128
+ class={`solidaria-ColorEditor ${resolvedClass()}`}
129
+ style={local.style}
130
+ data-color-space={activeSpace()}
131
+ >
132
+ <ColorPicker value={local.value} defaultValue={local.defaultValue} onChange={local.onChange}>
133
+ {() => (
134
+ <>
135
+ {/* Top row: ColorArea + vertical sliders */}
136
+ <div class="solidaria-ColorEditor-top">
137
+ <ColorArea
138
+ xChannel={areaChannels().x}
139
+ yChannel={areaChannels().y}
140
+ isDisabled={local.isDisabled}
141
+ >
142
+ {() => (
143
+ <>
144
+ <ColorAreaGradient />
145
+ <ColorAreaThumb />
146
+ </>
147
+ )}
148
+ </ColorArea>
149
+
150
+ <ColorSlider
151
+ channel="hue"
152
+ isDisabled={local.isDisabled}
153
+ aria-label="Hue"
154
+ >
155
+ {() => (
156
+ <ColorSliderTrack>
157
+ {() => <ColorSliderThumb />}
158
+ </ColorSliderTrack>
159
+ )}
160
+ </ColorSlider>
161
+
162
+ <Show when={!local.hideAlphaChannel}>
163
+ <ColorSlider
164
+ channel="alpha"
165
+ isDisabled={local.isDisabled}
166
+ aria-label="Alpha"
167
+ >
168
+ {() => (
169
+ <ColorSliderTrack>
170
+ {() => <ColorSliderThumb />}
171
+ </ColorSliderTrack>
172
+ )}
173
+ </ColorSlider>
174
+ </Show>
175
+ </div>
176
+
177
+ {/* Bottom row: color space selector + channel fields */}
178
+ <div class="solidaria-ColorEditor-bottom">
179
+ <select
180
+ value={activeSpace()}
181
+ onChange={(e) => handleSpaceChange(e.currentTarget.value as ColorEditorColorSpace | 'hex')}
182
+ disabled={local.isDisabled}
183
+ aria-label="Color format"
184
+ class="solidaria-ColorEditor-format"
185
+ >
186
+ <option value="hex">Hex</option>
187
+ <option value="rgb">RGB</option>
188
+ <option value="hsl">HSL</option>
189
+ <option value="hsb">HSB</option>
190
+ </select>
191
+
192
+ <Show
193
+ when={activeSpace() !== 'hex'}
194
+ fallback={
195
+ <ColorField
196
+ isDisabled={local.isDisabled}
197
+ aria-label="Hex color"
198
+ >
199
+ {() => <ColorFieldInput />}
200
+ </ColorField>
201
+ }
202
+ >
203
+ <For each={channels()}>
204
+ {(channel) => (
205
+ <ColorField
206
+ channel={channel}
207
+ isDisabled={local.isDisabled}
208
+ aria-label={channel}
209
+ >
210
+ {() => <ColorFieldInput />}
211
+ </ColorField>
212
+ )}
213
+ </For>
214
+ </Show>
215
+
216
+ <Show when={!local.hideAlphaChannel && activeSpace() !== 'hex'}>
217
+ <ColorField
218
+ channel="alpha"
219
+ isDisabled={local.isDisabled}
220
+ aria-label="Alpha"
221
+ >
222
+ {() => <ColorFieldInput />}
223
+ </ColorField>
224
+ </Show>
225
+ </div>
226
+ </>
227
+ )}
228
+ </ColorPicker>
229
+ </div>
230
+ )
231
+ }