@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.
- package/LICENSE +21 -0
- package/dist/ActionBar.d.ts +71 -0
- package/dist/ActionBar.d.ts.map +1 -0
- package/dist/ActionGroup.d.ts +74 -0
- package/dist/ActionGroup.d.ts.map +1 -0
- package/dist/Alert.d.ts +70 -0
- package/dist/Alert.d.ts.map +1 -0
- package/dist/Breadcrumbs.d.ts +10 -2
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Button.d.ts +4 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Calendar.d.ts +13 -0
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Checkbox.d.ts +2 -2
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Collection.d.ts +125 -0
- package/dist/Collection.d.ts.map +1 -0
- package/dist/Color.d.ts +114 -2
- package/dist/Color.d.ts.map +1 -1
- package/dist/ColorEditor.d.ts +42 -0
- package/dist/ColorEditor.d.ts.map +1 -0
- package/dist/ComboBox.d.ts +64 -0
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ContextualHelpTrigger.d.ts +40 -0
- package/dist/ContextualHelpTrigger.d.ts.map +1 -0
- package/dist/DateField.d.ts +27 -2
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DatePicker.d.ts +67 -2
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Disclosure.d.ts +2 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/DragAndDrop.d.ts +80 -0
- package/dist/DragAndDrop.d.ts.map +1 -0
- package/dist/DragPreview.d.ts +14 -0
- package/dist/DragPreview.d.ts.map +1 -0
- package/dist/DropZone.d.ts +27 -0
- package/dist/DropZone.d.ts.map +1 -0
- package/dist/FieldError.d.ts +23 -0
- package/dist/FieldError.d.ts.map +1 -0
- package/dist/FileTrigger.d.ts +26 -0
- package/dist/FileTrigger.d.ts.map +1 -0
- package/dist/Focusable.d.ts +27 -0
- package/dist/Focusable.d.ts.map +1 -0
- package/dist/Form.d.ts +27 -0
- package/dist/Form.d.ts.map +1 -0
- package/dist/GridList.d.ts +40 -1
- package/dist/GridList.d.ts.map +1 -1
- package/dist/Icon.d.ts +57 -0
- package/dist/Icon.d.ts.map +1 -0
- package/dist/Keyboard.d.ts +13 -0
- package/dist/Keyboard.d.ts.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/ListBox.d.ts +43 -1
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListDropTargetDelegate.d.ts +38 -0
- package/dist/ListDropTargetDelegate.d.ts.map +1 -0
- package/dist/Menu.d.ts +20 -2
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Meter.d.ts +2 -2
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Modal.d.ts +2 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/NumberField.d.ts +2 -0
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/Popover.d.ts +4 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Pressable.d.ts +27 -0
- package/dist/Pressable.d.ts.map +1 -0
- package/dist/ProgressBar.d.ts +2 -2
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RangeCalendar.d.ts +5 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RouterProvider.d.ts +75 -0
- package/dist/RouterProvider.d.ts.map +1 -0
- package/dist/SearchField.d.ts +2 -3
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/Select.d.ts +11 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/SelectionIndicator.d.ts +30 -0
- package/dist/SelectionIndicator.d.ts.map +1 -0
- package/dist/SharedElementTransition.d.ts +39 -0
- package/dist/SharedElementTransition.d.ts.map +1 -0
- package/dist/Slider.d.ts +6 -3
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Table.d.ts +39 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Tabs.d.ts +4 -3
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/TagGroup.d.ts +12 -2
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/Text.d.ts +10 -0
- package/dist/Text.d.ts.map +1 -0
- package/dist/TextField.d.ts +4 -0
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TimeField.d.ts +26 -1
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/Toast.d.ts.map +1 -1
- package/dist/ToggleButton.d.ts +30 -0
- package/dist/ToggleButton.d.ts.map +1 -0
- package/dist/ToggleButtonGroup.d.ts +33 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -0
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Tooltip.d.ts +9 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tree.d.ts +44 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Virtualizer.d.ts +61 -0
- package/dist/Virtualizer.d.ts.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +82 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -0
- package/dist/VisuallyHidden.d.ts +3 -1
- package/dist/VisuallyHidden.d.ts.map +1 -1
- package/dist/contexts.d.ts +1 -0
- package/dist/contexts.d.ts.map +1 -1
- package/dist/index.d.ts +57 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13961 -5946
- package/dist/index.js.map +1 -7
- package/dist/index.ssr.js +9612 -2401
- package/dist/index.ssr.js.map +1 -7
- package/dist/useDragAndDrop.d.ts +93 -0
- package/dist/useDragAndDrop.d.ts.map +1 -0
- package/dist/utils.d.ts +7 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/virtualizer/Layout.d.ts +79 -0
- package/dist/virtualizer/Layout.d.ts.map +1 -0
- package/package.json +8 -6
- package/src/ActionBar.tsx +248 -0
- package/src/ActionGroup.tsx +285 -0
- package/src/Alert.tsx +177 -0
- package/src/Autocomplete.tsx +1 -1
- package/src/Breadcrumbs.tsx +103 -17
- package/src/Button.tsx +65 -21
- package/src/Calendar.tsx +179 -53
- package/src/Checkbox.tsx +1 -2
- package/src/Collection.tsx +341 -0
- package/src/Color.tsx +652 -34
- package/src/ColorEditor.tsx +231 -0
- package/src/ComboBox.tsx +315 -81
- package/src/ContextualHelpTrigger.tsx +183 -0
- package/src/DateField.tsx +93 -19
- package/src/DatePicker.tsx +495 -25
- package/src/Dialog.tsx +40 -9
- package/src/Disclosure.tsx +33 -27
- package/src/DragAndDrop.tsx +334 -0
- package/src/DragPreview.tsx +45 -0
- package/src/DropZone.tsx +213 -0
- package/src/FieldError.tsx +67 -0
- package/src/FileTrigger.tsx +83 -0
- package/src/Focusable.tsx +106 -0
- package/src/Form.tsx +85 -0
- package/src/GridList.tsx +379 -41
- package/src/Icon.tsx +154 -0
- package/src/Keyboard.tsx +26 -0
- package/src/Link.tsx +14 -1
- package/src/ListBox.tsx +484 -33
- package/src/ListDropTargetDelegate.ts +282 -0
- package/src/Menu.tsx +388 -35
- package/src/Meter.tsx +7 -3
- package/src/Modal.tsx +32 -4
- package/src/NumberField.tsx +163 -43
- package/src/Popover.tsx +136 -180
- package/src/Pressable.tsx +108 -0
- package/src/ProgressBar.tsx +7 -3
- package/src/RadioGroup.tsx +35 -25
- package/src/RangeCalendar.tsx +100 -68
- package/src/RouterProvider.tsx +240 -0
- package/src/SearchField.tsx +142 -34
- package/src/Select.tsx +221 -73
- package/src/SelectionIndicator.tsx +105 -0
- package/src/SharedElementTransition.tsx +258 -0
- package/src/Slider.tsx +16 -6
- package/src/Table.tsx +417 -57
- package/src/Tabs.tsx +68 -35
- package/src/TagGroup.tsx +121 -36
- package/src/Text.tsx +18 -0
- package/src/TextField.tsx +25 -8
- package/src/TimeField.tsx +101 -151
- package/src/Toast.tsx +108 -14
- package/src/ToggleButton.tsx +159 -0
- package/src/ToggleButtonGroup.tsx +136 -0
- package/src/Toolbar.tsx +14 -8
- package/src/Tooltip.tsx +108 -19
- package/src/Tree.tsx +1143 -87
- package/src/Virtualizer.tsx +702 -0
- package/src/VirtualizerLayouts.ts +265 -0
- package/src/VisuallyHidden.tsx +15 -21
- package/src/contexts.ts +1 -0
- package/src/index.ts +1057 -620
- package/src/useDragAndDrop.ts +351 -0
- package/src/utils.tsx +37 -3
- 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
|
+
}
|