@proyecto-viviana/solidaria-components 0.2.5 → 0.3.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.
Files changed (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -272
  3. package/dist/ActionBar.d.ts +79 -0
  4. package/dist/ActionBar.d.ts.map +1 -0
  5. package/dist/ActionGroup.d.ts +74 -0
  6. package/dist/ActionGroup.d.ts.map +1 -0
  7. package/dist/Alert.d.ts +70 -0
  8. package/dist/Alert.d.ts.map +1 -0
  9. package/dist/Autocomplete.d.ts +5 -5
  10. package/dist/Autocomplete.d.ts.map +1 -1
  11. package/dist/Breadcrumbs.d.ts +27 -8
  12. package/dist/Breadcrumbs.d.ts.map +1 -1
  13. package/dist/Button.d.ts +28 -5
  14. package/dist/Button.d.ts.map +1 -1
  15. package/dist/Calendar.d.ts +51 -7
  16. package/dist/Calendar.d.ts.map +1 -1
  17. package/dist/Checkbox.d.ts +33 -8
  18. package/dist/Checkbox.d.ts.map +1 -1
  19. package/dist/Collection.d.ts +130 -0
  20. package/dist/Collection.d.ts.map +1 -0
  21. package/dist/Color.d.ts +210 -9
  22. package/dist/Color.d.ts.map +1 -1
  23. package/dist/ColorEditor.d.ts +42 -0
  24. package/dist/ColorEditor.d.ts.map +1 -0
  25. package/dist/ComboBox.d.ts +146 -16
  26. package/dist/ComboBox.d.ts.map +1 -1
  27. package/dist/ContextualHelpTrigger.d.ts +40 -0
  28. package/dist/ContextualHelpTrigger.d.ts.map +1 -0
  29. package/dist/DateField.d.ts +35 -8
  30. package/dist/DateField.d.ts.map +1 -1
  31. package/dist/DatePicker.d.ts +101 -5
  32. package/dist/DatePicker.d.ts.map +1 -1
  33. package/dist/DateRangePickerContext.d.ts +30 -0
  34. package/dist/DateRangePickerContext.d.ts.map +1 -0
  35. package/dist/Dialog.d.ts +5 -5
  36. package/dist/Dialog.d.ts.map +1 -1
  37. package/dist/Disclosure.d.ts +25 -5
  38. package/dist/Disclosure.d.ts.map +1 -1
  39. package/dist/DragAndDrop.d.ts +80 -0
  40. package/dist/DragAndDrop.d.ts.map +1 -0
  41. package/dist/DragPreview.d.ts +14 -0
  42. package/dist/DragPreview.d.ts.map +1 -0
  43. package/dist/DropZone.d.ts +27 -0
  44. package/dist/DropZone.d.ts.map +1 -0
  45. package/dist/FieldError.d.ts +27 -0
  46. package/dist/FieldError.d.ts.map +1 -0
  47. package/dist/FileTrigger.d.ts +26 -0
  48. package/dist/FileTrigger.d.ts.map +1 -0
  49. package/dist/Focusable.d.ts +27 -0
  50. package/dist/Focusable.d.ts.map +1 -0
  51. package/dist/Form.d.ts +41 -0
  52. package/dist/Form.d.ts.map +1 -0
  53. package/dist/GridList.d.ts +69 -10
  54. package/dist/GridList.d.ts.map +1 -1
  55. package/dist/HiddenDateInput.d.ts +26 -0
  56. package/dist/HiddenDateInput.d.ts.map +1 -0
  57. package/dist/HiddenTimeInput.d.ts +25 -0
  58. package/dist/HiddenTimeInput.d.ts.map +1 -0
  59. package/dist/Icon.d.ts +57 -0
  60. package/dist/Icon.d.ts.map +1 -0
  61. package/dist/Keyboard.d.ts +13 -0
  62. package/dist/Keyboard.d.ts.map +1 -0
  63. package/dist/Landmark.d.ts +3 -3
  64. package/dist/Landmark.d.ts.map +1 -1
  65. package/dist/Link.d.ts +10 -4
  66. package/dist/Link.d.ts.map +1 -1
  67. package/dist/ListBox.d.ts +73 -11
  68. package/dist/ListBox.d.ts.map +1 -1
  69. package/dist/ListDropTargetDelegate.d.ts +38 -0
  70. package/dist/ListDropTargetDelegate.d.ts.map +1 -0
  71. package/dist/Menu.d.ts +79 -10
  72. package/dist/Menu.d.ts.map +1 -1
  73. package/dist/Meter.d.ts +4 -4
  74. package/dist/Meter.d.ts.map +1 -1
  75. package/dist/Modal.d.ts +6 -4
  76. package/dist/Modal.d.ts.map +1 -1
  77. package/dist/NumberField.d.ts +10 -12
  78. package/dist/NumberField.d.ts.map +1 -1
  79. package/dist/Popover.d.ts +32 -7
  80. package/dist/Popover.d.ts.map +1 -1
  81. package/dist/Pressable.d.ts +27 -0
  82. package/dist/Pressable.d.ts.map +1 -0
  83. package/dist/ProgressBar.d.ts +6 -4
  84. package/dist/ProgressBar.d.ts.map +1 -1
  85. package/dist/RadioGroup.d.ts +43 -9
  86. package/dist/RadioGroup.d.ts.map +1 -1
  87. package/dist/RangeCalendar.d.ts +39 -7
  88. package/dist/RangeCalendar.d.ts.map +1 -1
  89. package/dist/RouterProvider.d.ts +75 -0
  90. package/dist/RouterProvider.d.ts.map +1 -0
  91. package/dist/SearchField.d.ts +23 -21
  92. package/dist/SearchField.d.ts.map +1 -1
  93. package/dist/Select.d.ts +48 -7
  94. package/dist/Select.d.ts.map +1 -1
  95. package/dist/SelectionIndicator.d.ts +30 -0
  96. package/dist/SelectionIndicator.d.ts.map +1 -0
  97. package/dist/Separator.d.ts +9 -3
  98. package/dist/Separator.d.ts.map +1 -1
  99. package/dist/SharedElementTransition.d.ts +41 -0
  100. package/dist/SharedElementTransition.d.ts.map +1 -0
  101. package/dist/Slider.d.ts +15 -8
  102. package/dist/Slider.d.ts.map +1 -1
  103. package/dist/StepList.d.ts +90 -0
  104. package/dist/StepList.d.ts.map +1 -0
  105. package/dist/Switch.d.ts +11 -5
  106. package/dist/Switch.d.ts.map +1 -1
  107. package/dist/Table.d.ts +222 -19
  108. package/dist/Table.d.ts.map +1 -1
  109. package/dist/Tabs.d.ts +47 -10
  110. package/dist/Tabs.d.ts.map +1 -1
  111. package/dist/TagGroup.d.ts +22 -10
  112. package/dist/TagGroup.d.ts.map +1 -1
  113. package/dist/Text.d.ts +10 -0
  114. package/dist/Text.d.ts.map +1 -0
  115. package/dist/TextField.d.ts +19 -11
  116. package/dist/TextField.d.ts.map +1 -1
  117. package/dist/TimeField.d.ts +32 -7
  118. package/dist/TimeField.d.ts.map +1 -1
  119. package/dist/Toast.d.ts +29 -14
  120. package/dist/Toast.d.ts.map +1 -1
  121. package/dist/ToggleButton.d.ts +36 -0
  122. package/dist/ToggleButton.d.ts.map +1 -0
  123. package/dist/ToggleButtonGroup.d.ts +33 -0
  124. package/dist/ToggleButtonGroup.d.ts.map +1 -0
  125. package/dist/Toolbar.d.ts +7 -3
  126. package/dist/Toolbar.d.ts.map +1 -1
  127. package/dist/Tooltip.d.ts +58 -7
  128. package/dist/Tooltip.d.ts.map +1 -1
  129. package/dist/Tree.d.ts +102 -11
  130. package/dist/Tree.d.ts.map +1 -1
  131. package/dist/Virtualizer.d.ts +61 -0
  132. package/dist/Virtualizer.d.ts.map +1 -0
  133. package/dist/VirtualizerLayouts.d.ts +82 -0
  134. package/dist/VirtualizerLayouts.d.ts.map +1 -0
  135. package/dist/VisuallyHidden.d.ts +4 -2
  136. package/dist/VisuallyHidden.d.ts.map +1 -1
  137. package/dist/contexts.d.ts +6 -1
  138. package/dist/contexts.d.ts.map +1 -1
  139. package/dist/index.d.ts +73 -39
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +23342 -10644
  142. package/dist/index.js.map +1 -7
  143. package/dist/index.jsx +18110 -0
  144. package/dist/index.jsx.map +1 -0
  145. package/dist/useDragAndDrop.d.ts +93 -0
  146. package/dist/useDragAndDrop.d.ts.map +1 -0
  147. package/dist/utils.d.ts +8 -2
  148. package/dist/utils.d.ts.map +1 -1
  149. package/dist/virtualizer/Layout.d.ts +79 -0
  150. package/dist/virtualizer/Layout.d.ts.map +1 -0
  151. package/package.json +33 -32
  152. package/src/ActionBar.tsx +251 -0
  153. package/src/ActionGroup.tsx +277 -0
  154. package/src/Alert.tsx +152 -0
  155. package/src/Autocomplete.tsx +39 -44
  156. package/src/Breadcrumbs.tsx +227 -72
  157. package/src/Button.tsx +315 -74
  158. package/src/Calendar.tsx +347 -141
  159. package/src/Checkbox.tsx +414 -123
  160. package/src/Collection.tsx +350 -0
  161. package/src/Color.tsx +1325 -284
  162. package/src/ColorEditor.tsx +213 -0
  163. package/src/ComboBox.tsx +644 -245
  164. package/src/ContextualHelpTrigger.tsx +195 -0
  165. package/src/DateField.tsx +274 -106
  166. package/src/DatePicker.tsx +892 -111
  167. package/src/DateRangePickerContext.tsx +44 -0
  168. package/src/Dialog.tsx +173 -104
  169. package/src/Disclosure.tsx +158 -105
  170. package/src/DragAndDrop.tsx +340 -0
  171. package/src/DragPreview.tsx +47 -0
  172. package/src/DropZone.tsx +233 -0
  173. package/src/FieldError.tsx +89 -0
  174. package/src/FileTrigger.tsx +83 -0
  175. package/src/Focusable.tsx +103 -0
  176. package/src/Form.tsx +140 -0
  177. package/src/GridList.tsx +542 -128
  178. package/src/HiddenDateInput.tsx +153 -0
  179. package/src/HiddenTimeInput.tsx +133 -0
  180. package/src/Icon.tsx +133 -0
  181. package/src/Keyboard.tsx +26 -0
  182. package/src/Landmark.tsx +37 -63
  183. package/src/Link.tsx +132 -69
  184. package/src/ListBox.tsx +656 -106
  185. package/src/ListDropTargetDelegate.ts +283 -0
  186. package/src/Menu.tsx +1234 -132
  187. package/src/Meter.tsx +44 -58
  188. package/src/Modal.tsx +262 -166
  189. package/src/NumberField.tsx +267 -151
  190. package/src/Popover.tsx +452 -343
  191. package/src/Pressable.tsx +108 -0
  192. package/src/ProgressBar.tsx +54 -59
  193. package/src/RadioGroup.tsx +533 -121
  194. package/src/RangeCalendar.tsx +249 -150
  195. package/src/RouterProvider.tsx +223 -0
  196. package/src/SearchField.tsx +460 -133
  197. package/src/Select.tsx +804 -233
  198. package/src/SelectionIndicator.tsx +108 -0
  199. package/src/Separator.tsx +47 -49
  200. package/src/SharedElementTransition.tsx +264 -0
  201. package/src/Slider.tsx +148 -98
  202. package/src/StepList.tsx +272 -0
  203. package/src/Switch.tsx +93 -46
  204. package/src/Table.tsx +1551 -225
  205. package/src/Tabs.tsx +377 -123
  206. package/src/TagGroup.tsx +233 -135
  207. package/src/Text.tsx +18 -0
  208. package/src/TextField.tsx +413 -86
  209. package/src/TimeField.tsx +232 -222
  210. package/src/Toast.tsx +306 -160
  211. package/src/ToggleButton.tsx +169 -0
  212. package/src/ToggleButtonGroup.tsx +141 -0
  213. package/src/Toolbar.tsx +61 -70
  214. package/src/Tooltip.tsx +473 -116
  215. package/src/Tree.tsx +1514 -175
  216. package/src/Virtualizer.tsx +730 -0
  217. package/src/VirtualizerLayouts.ts +280 -0
  218. package/src/VisuallyHidden.tsx +32 -38
  219. package/src/contexts.ts +29 -36
  220. package/src/index.ts +972 -620
  221. package/src/useDragAndDrop.ts +367 -0
  222. package/src/utils.tsx +69 -50
  223. package/src/virtualizer/Layout.ts +192 -0
  224. package/dist/index.ssr.js +0 -9785
  225. package/dist/index.ssr.js.map +0 -7
@@ -0,0 +1,195 @@
1
+ /**
2
+ * ContextualHelpTrigger headless component
3
+ *
4
+ * A button trigger that opens contextual help in a popover or dialog.
5
+ * Uses existing overlay infrastructure.
6
+ */
7
+
8
+ import {
9
+ type JSX,
10
+ createSignal,
11
+ splitProps,
12
+ Show,
13
+ onCleanup,
14
+ createEffect,
15
+ createUniqueId,
16
+ } from "solid-js";
17
+
18
+ export interface ContextualHelpTriggerProps extends Omit<
19
+ JSX.ButtonHTMLAttributes<HTMLButtonElement>,
20
+ "class" | "children"
21
+ > {
22
+ /** Whether the trigger is currently unavailable (shows different styling). */
23
+ isUnavailable?: boolean;
24
+ /**
25
+ * Two children: [trigger element, help content].
26
+ * The trigger renders as a button, the content opens in a popover.
27
+ */
28
+ children?: [JSX.Element, JSX.Element];
29
+ /** CSS class name. */
30
+ class?: string;
31
+ /** Whether the trigger is disabled. */
32
+ isDisabled?: boolean;
33
+ }
34
+
35
+ export interface ContextualHelpTriggerRenderProps {
36
+ isOpen: boolean;
37
+ isUnavailable: boolean;
38
+ isDisabled: boolean;
39
+ }
40
+
41
+ /**
42
+ * A trigger that opens contextual help content.
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * <ContextualHelpTrigger>
47
+ * {[
48
+ * <span>What is this?</span>,
49
+ * <div>Help content goes here...</div>
50
+ * ]}
51
+ * </ContextualHelpTrigger>
52
+ * ```
53
+ */
54
+ export function ContextualHelpTrigger(props: ContextualHelpTriggerProps): JSX.Element {
55
+ const [local, triggerProps] = splitProps(props, [
56
+ "isUnavailable",
57
+ "children",
58
+ "class",
59
+ "isDisabled",
60
+ ]);
61
+ const [isOpen, setIsOpen] = createSignal(false);
62
+ const triggerId = createUniqueId();
63
+ const contentId = createUniqueId();
64
+ let triggerRef: HTMLButtonElement | undefined;
65
+ let contentRef: HTMLDivElement | undefined;
66
+
67
+ const isUnavailable = () => local.isUnavailable ?? false;
68
+ const isDisabled = () => local.isDisabled ?? false;
69
+
70
+ const toggle = () => {
71
+ if (!isDisabled()) {
72
+ setIsOpen(!isOpen());
73
+ }
74
+ };
75
+
76
+ const close = () => setIsOpen(false);
77
+
78
+ const callHandler = <E extends Event>(
79
+ handler: JSX.EventHandlerUnion<HTMLButtonElement, E> | undefined,
80
+ event: E,
81
+ ) => {
82
+ if (!handler) return;
83
+ if (Array.isArray(handler)) {
84
+ handler[1].call(handler[0], event);
85
+ return;
86
+ }
87
+ if (typeof handler === "function") {
88
+ (handler as (evt: E) => void)(event);
89
+ return;
90
+ }
91
+ if (
92
+ typeof handler === "object" &&
93
+ "handleEvent" in handler &&
94
+ typeof handler.handleEvent === "function"
95
+ ) {
96
+ (handler.handleEvent as (evt: E) => void)(event);
97
+ }
98
+ };
99
+
100
+ const handleTriggerClick = (e: MouseEvent) => {
101
+ callHandler(triggerProps.onClick, e);
102
+ if (e.defaultPrevented) return;
103
+ toggle();
104
+ };
105
+
106
+ const handleTriggerKeyDown = (e: KeyboardEvent) => {
107
+ callHandler(triggerProps.onKeyDown, e);
108
+ if (e.defaultPrevented) return;
109
+ if (e.key === "Escape" && isOpen()) {
110
+ e.preventDefault();
111
+ e.stopPropagation();
112
+ close();
113
+ triggerRef?.focus();
114
+ }
115
+ };
116
+
117
+ // Close on outside click
118
+ const handleDocumentClick = (e: MouseEvent) => {
119
+ if (
120
+ isOpen() &&
121
+ triggerRef &&
122
+ contentRef &&
123
+ !triggerRef.contains(e.target as Node) &&
124
+ !contentRef.contains(e.target as Node)
125
+ ) {
126
+ close();
127
+ }
128
+ };
129
+
130
+ createEffect(() => {
131
+ if (!isOpen()) return;
132
+ document.addEventListener("mousedown", handleDocumentClick);
133
+ onCleanup(() => {
134
+ document.removeEventListener("mousedown", handleDocumentClick);
135
+ });
136
+ });
137
+
138
+ // Focus trap: return focus to trigger on close
139
+ createEffect(() => {
140
+ if (!isOpen()) return;
141
+ // Focus the content on open
142
+ contentRef?.focus();
143
+ });
144
+
145
+ const children = () => local.children ?? ([null, null] as [JSX.Element, JSX.Element]);
146
+ const trigger = () => children()[0];
147
+ const content = () => children()[1];
148
+
149
+ return (
150
+ <div
151
+ class={`solidaria-ContextualHelpTrigger ${local.class ?? ""}`}
152
+ style={{ position: "relative", display: "inline-block" }}
153
+ >
154
+ <button
155
+ {...triggerProps}
156
+ type="button"
157
+ id={triggerId}
158
+ ref={triggerRef}
159
+ aria-haspopup="dialog"
160
+ aria-expanded={isOpen()}
161
+ aria-controls={isOpen() ? contentId : undefined}
162
+ data-unavailable={isUnavailable() || undefined}
163
+ data-disabled={isDisabled() || undefined}
164
+ disabled={isDisabled()}
165
+ onClick={handleTriggerClick}
166
+ onKeyDown={handleTriggerKeyDown}
167
+ class="solidaria-ContextualHelpTrigger-trigger"
168
+ >
169
+ {trigger()}
170
+ </button>
171
+
172
+ <Show when={isOpen()}>
173
+ <div
174
+ id={contentId}
175
+ ref={contentRef}
176
+ role="dialog"
177
+ aria-labelledby={triggerId}
178
+ tabIndex={-1}
179
+ class="solidaria-ContextualHelpTrigger-content"
180
+ style={{ position: "absolute", "z-index": "50" }}
181
+ onKeyDown={(e) => {
182
+ if (e.key === "Escape") {
183
+ e.preventDefault();
184
+ e.stopPropagation();
185
+ close();
186
+ triggerRef?.focus();
187
+ }
188
+ }}
189
+ >
190
+ {content()}
191
+ </div>
192
+ </Show>
193
+ </div>
194
+ );
195
+ }