@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
package/src/Link.tsx CHANGED
@@ -5,21 +5,15 @@
5
5
  * Port of react-aria-components/src/Link.tsx
6
6
  */
7
7
 
8
- import {
9
- type JSX,
10
- type ParentProps,
11
- createContext,
12
- createMemo,
13
- splitProps,
14
- } from 'solid-js';
15
- import { Dynamic } from 'solid-js/web';
8
+ import { type JSX, type ParentProps, createContext, createMemo, splitProps } from "solid-js";
9
+ import { Dynamic } from "solid-js/web";
16
10
  import {
17
11
  createLink,
18
12
  createFocusRing,
19
13
  createHover,
20
14
  type AriaLinkProps,
21
15
  type HoverEvents,
22
- } from '@proyecto-viviana/solidaria';
16
+ } from "@proyecto-viviana/solidaria";
23
17
  import {
24
18
  type RenderChildren,
25
19
  type ClassNameOrFunction,
@@ -27,11 +21,19 @@ import {
27
21
  type SlotProps,
28
22
  useRenderProps,
29
23
  filterDOMProps,
30
- } from './utils';
24
+ } from "./utils";
25
+ import { handleLinkClick, useRouter } from "./RouterProvider";
26
+
27
+ type RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;
31
28
 
32
- // ============================================
33
- // TYPES
34
- // ============================================
29
+ function assignRef<T>(ref: RefLike<T>, el: T): void {
30
+ if (!ref) return;
31
+ if (typeof ref === "function") {
32
+ ref(el);
33
+ } else {
34
+ ref.current = el;
35
+ }
36
+ }
35
37
 
36
38
  export interface LinkRenderProps {
37
39
  /** Whether the link is the current item within a list. */
@@ -48,28 +50,19 @@ export interface LinkRenderProps {
48
50
  isDisabled: boolean;
49
51
  }
50
52
 
51
- export interface LinkProps
52
- extends Omit<AriaLinkProps, 'elementType'>,
53
- HoverEvents,
54
- SlotProps {
53
+ export interface LinkProps extends Omit<AriaLinkProps, "elementType">, HoverEvents, SlotProps {
55
54
  /** The children of the component. A function may be provided to receive render props. */
56
55
  children?: RenderChildren<LinkRenderProps>;
57
56
  /** The CSS className for the element. */
58
57
  class?: ClassNameOrFunction<LinkRenderProps>;
59
58
  /** The inline style for the element. */
60
59
  style?: StyleOrFunction<LinkRenderProps>;
60
+ /** Ref for the underlying link element. */
61
+ ref?: RefLike<HTMLElement>;
61
62
  }
62
63
 
63
- // ============================================
64
- // CONTEXT
65
- // ============================================
66
-
67
64
  export const LinkContext = createContext<LinkProps | null>(null);
68
65
 
69
- // ============================================
70
- // LINK COMPONENT
71
- // ============================================
72
-
73
66
  /**
74
67
  * A link allows a user to navigate to another page or resource within a web page
75
68
  * or application.
@@ -90,60 +83,124 @@ export const LinkContext = createContext<LinkProps | null>(null);
90
83
  */
91
84
  export function Link(props: ParentProps<LinkProps>): JSX.Element {
92
85
  const [local, ariaProps] = splitProps(props, [
93
- 'children',
94
- 'class',
95
- 'style',
96
- 'slot',
97
- 'onHoverStart',
98
- 'onHoverEnd',
99
- 'onHoverChange',
86
+ "children",
87
+ "class",
88
+ "style",
89
+ "ref",
90
+ "slot",
91
+ "onHoverStart",
92
+ "onHoverEnd",
93
+ "onHoverChange",
100
94
  ]);
95
+ const router = useRouter();
96
+ const resolvedHref = createMemo(() =>
97
+ ariaProps.href ? router.useHref(ariaProps.href) : undefined,
98
+ );
101
99
 
102
- // Determine element type - use 'a' if href is provided and not disabled
103
100
  const elementType = () => {
104
101
  if (ariaProps.href && !ariaProps.isDisabled) {
105
- return 'a';
102
+ return "a";
106
103
  }
107
- return 'span';
104
+ return "span";
108
105
  };
109
106
 
110
- // Create link aria props
111
107
  const linkAria = createLink({
112
- get elementType() { return elementType(); },
113
- get isDisabled() { return ariaProps.isDisabled; },
114
- get href() { return ariaProps.href; },
115
- get target() { return ariaProps.target; },
116
- get rel() { return ariaProps.rel; },
117
- get onPress() { return ariaProps.onPress; },
118
- get onPressStart() { return ariaProps.onPressStart; },
119
- get onPressEnd() { return ariaProps.onPressEnd; },
120
- get onClick() { return ariaProps.onClick; },
121
- get onFocus() { return ariaProps.onFocus; },
122
- get onBlur() { return ariaProps.onBlur; },
123
- get onFocusChange() { return ariaProps.onFocusChange; },
124
- get onKeyDown() { return ariaProps.onKeyDown; },
125
- get onKeyUp() { return ariaProps.onKeyUp; },
126
- get autoFocus() { return ariaProps.autoFocus; },
127
- get 'aria-current'() { return ariaProps['aria-current']; },
128
- get 'aria-label'() { return ariaProps['aria-label']; },
129
- get 'aria-labelledby'() { return ariaProps['aria-labelledby']; },
130
- get 'aria-describedby'() { return ariaProps['aria-describedby']; },
108
+ get elementType() {
109
+ return elementType();
110
+ },
111
+ get isDisabled() {
112
+ return ariaProps.isDisabled;
113
+ },
114
+ get href() {
115
+ return resolvedHref();
116
+ },
117
+ get hrefLang() {
118
+ return ariaProps.hrefLang;
119
+ },
120
+ get target() {
121
+ return ariaProps.target;
122
+ },
123
+ get rel() {
124
+ return ariaProps.rel;
125
+ },
126
+ get download() {
127
+ return ariaProps.download;
128
+ },
129
+ get ping() {
130
+ return ariaProps.ping;
131
+ },
132
+ get referrerPolicy() {
133
+ return ariaProps.referrerPolicy;
134
+ },
135
+ get onPress() {
136
+ return ariaProps.onPress;
137
+ },
138
+ get onPressStart() {
139
+ return ariaProps.onPressStart;
140
+ },
141
+ get onPressEnd() {
142
+ return ariaProps.onPressEnd;
143
+ },
144
+ get onPressUp() {
145
+ return ariaProps.onPressUp;
146
+ },
147
+ get onPressChange() {
148
+ return ariaProps.onPressChange;
149
+ },
150
+ get onClick() {
151
+ return ariaProps.onClick;
152
+ },
153
+ get onFocus() {
154
+ return ariaProps.onFocus;
155
+ },
156
+ get onBlur() {
157
+ return ariaProps.onBlur;
158
+ },
159
+ get onFocusChange() {
160
+ return ariaProps.onFocusChange;
161
+ },
162
+ get onKeyDown() {
163
+ return ariaProps.onKeyDown;
164
+ },
165
+ get onKeyUp() {
166
+ return ariaProps.onKeyUp;
167
+ },
168
+ get autoFocus() {
169
+ return ariaProps.autoFocus;
170
+ },
171
+ get "aria-current"() {
172
+ return ariaProps["aria-current"];
173
+ },
174
+ get "aria-label"() {
175
+ return ariaProps["aria-label"];
176
+ },
177
+ get "aria-labelledby"() {
178
+ return ariaProps["aria-labelledby"];
179
+ },
180
+ get "aria-describedby"() {
181
+ return ariaProps["aria-describedby"];
182
+ },
131
183
  });
132
184
 
133
- // Create focus ring
134
185
  const { isFocused, isFocusVisible, focusProps } = createFocusRing();
135
186
 
136
- // Create hover
137
187
  const { isHovered, hoverProps } = createHover({
138
- get isDisabled() { return ariaProps.isDisabled ?? false; },
139
- get onHoverStart() { return local.onHoverStart; },
140
- get onHoverEnd() { return local.onHoverEnd; },
141
- get onHoverChange() { return local.onHoverChange; },
188
+ get isDisabled() {
189
+ return ariaProps.isDisabled ?? false;
190
+ },
191
+ get onHoverStart() {
192
+ return local.onHoverStart;
193
+ },
194
+ get onHoverEnd() {
195
+ return local.onHoverEnd;
196
+ },
197
+ get onHoverChange() {
198
+ return local.onHoverChange;
199
+ },
142
200
  });
143
201
 
144
- // Render props values
145
202
  const renderValues = createMemo<LinkRenderProps>(() => ({
146
- isCurrent: !!ariaProps['aria-current'],
203
+ isCurrent: !!ariaProps["aria-current"],
147
204
  isHovered: isHovered(),
148
205
  isPressed: linkAria.isPressed(),
149
206
  isFocused: isFocused(),
@@ -151,21 +208,18 @@ export function Link(props: ParentProps<LinkProps>): JSX.Element {
151
208
  isDisabled: ariaProps.isDisabled ?? false,
152
209
  }));
153
210
 
154
- // Resolve render props
155
211
  const renderProps = useRenderProps(
156
212
  {
157
213
  children: props.children,
158
214
  class: local.class,
159
215
  style: local.style,
160
- defaultClassName: 'solidaria-Link',
216
+ defaultClassName: "solidaria-Link",
161
217
  },
162
- renderValues
218
+ renderValues,
163
219
  );
164
220
 
165
- // Filter DOM props
166
221
  const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
167
222
 
168
- // Remove ref from spread props to avoid type conflicts
169
223
  const cleanLinkProps = () => {
170
224
  const { ref: _ref1, ...rest } = linkAria.linkProps as Record<string, unknown>;
171
225
  return rest;
@@ -178,6 +232,11 @@ export function Link(props: ParentProps<LinkProps>): JSX.Element {
178
232
  const { ref: _ref3, ...rest } = focusProps as Record<string, unknown>;
179
233
  return rest;
180
234
  };
235
+ const onLinkClick = (event: MouseEvent) => {
236
+ const onClick = cleanLinkProps().onClick as ((event: MouseEvent) => void) | undefined;
237
+ onClick?.(event);
238
+ handleLinkClick(event, router, ariaProps.href, ariaProps.routerOptions);
239
+ };
181
240
 
182
241
  return (
183
242
  <Dynamic
@@ -186,13 +245,17 @@ export function Link(props: ParentProps<LinkProps>): JSX.Element {
186
245
  {...cleanLinkProps()}
187
246
  {...cleanHoverProps()}
188
247
  {...cleanFocusProps()}
248
+ ref={(element: HTMLElement) => {
249
+ assignRef(local.ref, element);
250
+ }}
251
+ onClick={onLinkClick}
189
252
  class={renderProps.class()}
190
253
  style={renderProps.style()}
191
254
  data-hovered={isHovered() || undefined}
192
255
  data-pressed={linkAria.isPressed() || undefined}
193
256
  data-focused={isFocused() || undefined}
194
257
  data-focus-visible={isFocusVisible() || undefined}
195
- data-current={!!ariaProps['aria-current'] || undefined}
258
+ data-current={!!ariaProps["aria-current"] || undefined}
196
259
  data-disabled={ariaProps.isDisabled || undefined}
197
260
  >
198
261
  {renderProps.renderChildren()}