@proyecto-viviana/solidaria-components 0.2.9 → 0.3.1

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 (222) hide show
  1. package/README.md +39 -272
  2. package/dist/ActionBar.d.ts +21 -13
  3. package/dist/ActionBar.d.ts.map +1 -1
  4. package/dist/ActionGroup.d.ts +8 -8
  5. package/dist/ActionGroup.d.ts.map +1 -1
  6. package/dist/Alert.d.ts +5 -5
  7. package/dist/Alert.d.ts.map +1 -1
  8. package/dist/Autocomplete.d.ts +5 -5
  9. package/dist/Autocomplete.d.ts.map +1 -1
  10. package/dist/Breadcrumbs.d.ts +18 -7
  11. package/dist/Breadcrumbs.d.ts.map +1 -1
  12. package/dist/Button.d.ts +24 -5
  13. package/dist/Button.d.ts.map +1 -1
  14. package/dist/Calendar.d.ts +38 -7
  15. package/dist/Calendar.d.ts.map +1 -1
  16. package/dist/Checkbox.d.ts +32 -7
  17. package/dist/Checkbox.d.ts.map +1 -1
  18. package/dist/Collection.d.ts +19 -14
  19. package/dist/Collection.d.ts.map +1 -1
  20. package/dist/Color.d.ts +103 -14
  21. package/dist/Color.d.ts.map +1 -1
  22. package/dist/ColorEditor.d.ts +6 -6
  23. package/dist/ColorEditor.d.ts.map +1 -1
  24. package/dist/ComboBox.d.ts +85 -19
  25. package/dist/ComboBox.d.ts.map +1 -1
  26. package/dist/ContextualHelpTrigger.d.ts +2 -2
  27. package/dist/ContextualHelpTrigger.d.ts.map +1 -1
  28. package/dist/DateField.d.ts +8 -6
  29. package/dist/DateField.d.ts.map +1 -1
  30. package/dist/DatePicker.d.ts +53 -22
  31. package/dist/DatePicker.d.ts.map +1 -1
  32. package/dist/DateRangePickerContext.d.ts +30 -0
  33. package/dist/DateRangePickerContext.d.ts.map +1 -0
  34. package/dist/Dialog.d.ts +5 -5
  35. package/dist/Dialog.d.ts.map +1 -1
  36. package/dist/Disclosure.d.ts +23 -5
  37. package/dist/Disclosure.d.ts.map +1 -1
  38. package/dist/DragAndDrop.d.ts +6 -6
  39. package/dist/DragAndDrop.d.ts.map +1 -1
  40. package/dist/DragPreview.d.ts +2 -2
  41. package/dist/DragPreview.d.ts.map +1 -1
  42. package/dist/DropZone.d.ts +4 -4
  43. package/dist/DropZone.d.ts.map +1 -1
  44. package/dist/FieldError.d.ts +9 -5
  45. package/dist/FieldError.d.ts.map +1 -1
  46. package/dist/FileTrigger.d.ts +3 -3
  47. package/dist/FileTrigger.d.ts.map +1 -1
  48. package/dist/Focusable.d.ts +2 -2
  49. package/dist/Focusable.d.ts.map +1 -1
  50. package/dist/Form.d.ts +18 -4
  51. package/dist/Form.d.ts.map +1 -1
  52. package/dist/GridList.d.ts +32 -12
  53. package/dist/GridList.d.ts.map +1 -1
  54. package/dist/HiddenDateInput.d.ts +26 -0
  55. package/dist/HiddenDateInput.d.ts.map +1 -0
  56. package/dist/HiddenTimeInput.d.ts +25 -0
  57. package/dist/HiddenTimeInput.d.ts.map +1 -0
  58. package/dist/Icon.d.ts +5 -5
  59. package/dist/Icon.d.ts.map +1 -1
  60. package/dist/Keyboard.d.ts +1 -1
  61. package/dist/Landmark.d.ts +3 -3
  62. package/dist/Landmark.d.ts.map +1 -1
  63. package/dist/Link.d.ts +10 -4
  64. package/dist/Link.d.ts.map +1 -1
  65. package/dist/ListBox.d.ts +32 -12
  66. package/dist/ListBox.d.ts.map +1 -1
  67. package/dist/ListDropTargetDelegate.d.ts +6 -6
  68. package/dist/ListDropTargetDelegate.d.ts.map +1 -1
  69. package/dist/Menu.d.ts +65 -14
  70. package/dist/Menu.d.ts.map +1 -1
  71. package/dist/Meter.d.ts +3 -3
  72. package/dist/Meter.d.ts.map +1 -1
  73. package/dist/Modal.d.ts +5 -5
  74. package/dist/Modal.d.ts.map +1 -1
  75. package/dist/NumberField.d.ts +8 -12
  76. package/dist/NumberField.d.ts.map +1 -1
  77. package/dist/Popover.d.ts +28 -5
  78. package/dist/Popover.d.ts.map +1 -1
  79. package/dist/Pressable.d.ts +2 -2
  80. package/dist/Pressable.d.ts.map +1 -1
  81. package/dist/ProgressBar.d.ts +5 -3
  82. package/dist/ProgressBar.d.ts.map +1 -1
  83. package/dist/RadioGroup.d.ts +43 -9
  84. package/dist/RadioGroup.d.ts.map +1 -1
  85. package/dist/RangeCalendar.d.ts +34 -7
  86. package/dist/RangeCalendar.d.ts.map +1 -1
  87. package/dist/RouterProvider.d.ts +2 -2
  88. package/dist/RouterProvider.d.ts.map +1 -1
  89. package/dist/SearchField.d.ts +23 -20
  90. package/dist/SearchField.d.ts.map +1 -1
  91. package/dist/Select.d.ts +41 -11
  92. package/dist/Select.d.ts.map +1 -1
  93. package/dist/SelectionIndicator.d.ts +3 -3
  94. package/dist/SelectionIndicator.d.ts.map +1 -1
  95. package/dist/Separator.d.ts +9 -3
  96. package/dist/Separator.d.ts.map +1 -1
  97. package/dist/SharedElementTransition.d.ts +6 -4
  98. package/dist/SharedElementTransition.d.ts.map +1 -1
  99. package/dist/Slider.d.ts +12 -8
  100. package/dist/Slider.d.ts.map +1 -1
  101. package/dist/StepList.d.ts +90 -0
  102. package/dist/StepList.d.ts.map +1 -0
  103. package/dist/Switch.d.ts +11 -5
  104. package/dist/Switch.d.ts.map +1 -1
  105. package/dist/Table.d.ts +187 -23
  106. package/dist/Table.d.ts.map +1 -1
  107. package/dist/Tabs.d.ts +45 -9
  108. package/dist/Tabs.d.ts.map +1 -1
  109. package/dist/TagGroup.d.ts +12 -10
  110. package/dist/TagGroup.d.ts.map +1 -1
  111. package/dist/Text.d.ts +2 -2
  112. package/dist/TextField.d.ts +15 -11
  113. package/dist/TextField.d.ts.map +1 -1
  114. package/dist/TimeField.d.ts +6 -6
  115. package/dist/TimeField.d.ts.map +1 -1
  116. package/dist/Toast.d.ts +29 -14
  117. package/dist/Toast.d.ts.map +1 -1
  118. package/dist/ToggleButton.d.ts +11 -5
  119. package/dist/ToggleButton.d.ts.map +1 -1
  120. package/dist/ToggleButtonGroup.d.ts +7 -7
  121. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  122. package/dist/Toolbar.d.ts +7 -3
  123. package/dist/Toolbar.d.ts.map +1 -1
  124. package/dist/Tooltip.d.ts +50 -8
  125. package/dist/Tooltip.d.ts.map +1 -1
  126. package/dist/Tree.d.ts +66 -17
  127. package/dist/Tree.d.ts.map +1 -1
  128. package/dist/Virtualizer.d.ts +12 -12
  129. package/dist/Virtualizer.d.ts.map +1 -1
  130. package/dist/VirtualizerLayouts.d.ts +2 -2
  131. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  132. package/dist/VisuallyHidden.d.ts +1 -1
  133. package/dist/VisuallyHidden.d.ts.map +1 -1
  134. package/dist/contexts.d.ts +5 -1
  135. package/dist/contexts.d.ts.map +1 -1
  136. package/dist/index.d.ts +73 -71
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +23253 -18564
  139. package/dist/index.js.map +1 -1
  140. package/dist/index.jsx +18116 -0
  141. package/dist/index.jsx.map +1 -0
  142. package/dist/useDragAndDrop.d.ts +13 -13
  143. package/dist/useDragAndDrop.d.ts.map +1 -1
  144. package/dist/utils.d.ts +2 -2
  145. package/dist/utils.d.ts.map +1 -1
  146. package/dist/virtualizer/Layout.d.ts +1 -1
  147. package/dist/virtualizer/Layout.d.ts.map +1 -1
  148. package/package.json +31 -32
  149. package/src/ActionBar.tsx +75 -72
  150. package/src/ActionGroup.tsx +53 -61
  151. package/src/Alert.tsx +17 -42
  152. package/src/Autocomplete.tsx +39 -44
  153. package/src/Breadcrumbs.tsx +149 -80
  154. package/src/Button.tsx +267 -70
  155. package/src/Calendar.tsx +218 -138
  156. package/src/Checkbox.tsx +413 -121
  157. package/src/Collection.tsx +67 -58
  158. package/src/Color.tsx +803 -380
  159. package/src/ColorEditor.tsx +131 -149
  160. package/src/ComboBox.tsx +414 -249
  161. package/src/ContextualHelpTrigger.tsx +86 -74
  162. package/src/DateField.tsx +185 -91
  163. package/src/DatePicker.tsx +524 -213
  164. package/src/DateRangePickerContext.tsx +44 -0
  165. package/src/Dialog.tsx +156 -118
  166. package/src/Disclosure.tsx +127 -80
  167. package/src/DragAndDrop.tsx +60 -54
  168. package/src/DragPreview.tsx +13 -11
  169. package/src/DropZone.tsx +42 -22
  170. package/src/FieldError.tsx +45 -23
  171. package/src/FileTrigger.tsx +19 -19
  172. package/src/Focusable.tsx +21 -24
  173. package/src/Form.tsx +71 -16
  174. package/src/GridList.tsx +273 -197
  175. package/src/HiddenDateInput.tsx +153 -0
  176. package/src/HiddenTimeInput.tsx +133 -0
  177. package/src/Icon.tsx +22 -43
  178. package/src/Keyboard.tsx +3 -3
  179. package/src/Landmark.tsx +37 -63
  180. package/src/Link.tsx +125 -75
  181. package/src/ListBox.tsx +332 -233
  182. package/src/ListDropTargetDelegate.ts +81 -80
  183. package/src/Menu.tsx +1023 -274
  184. package/src/Meter.tsx +38 -56
  185. package/src/Modal.tsx +251 -176
  186. package/src/NumberField.tsx +139 -143
  187. package/src/Popover.tsx +396 -234
  188. package/src/Pressable.tsx +21 -21
  189. package/src/ProgressBar.tsx +48 -57
  190. package/src/RadioGroup.tsx +524 -122
  191. package/src/RangeCalendar.tsx +157 -90
  192. package/src/RouterProvider.tsx +30 -47
  193. package/src/SearchField.tsx +362 -143
  194. package/src/Select.tsx +656 -233
  195. package/src/SelectionIndicator.tsx +18 -15
  196. package/src/Separator.tsx +47 -49
  197. package/src/SharedElementTransition.tsx +103 -97
  198. package/src/Slider.tsx +138 -98
  199. package/src/StepList.tsx +272 -0
  200. package/src/Switch.tsx +93 -46
  201. package/src/Table.tsx +1308 -342
  202. package/src/Tabs.tsx +324 -103
  203. package/src/TagGroup.tsx +139 -126
  204. package/src/Text.tsx +3 -3
  205. package/src/TextField.tsx +389 -79
  206. package/src/TimeField.tsx +136 -76
  207. package/src/Toast.tsx +216 -158
  208. package/src/ToggleButton.tsx +47 -37
  209. package/src/ToggleButtonGroup.tsx +39 -34
  210. package/src/Toolbar.tsx +54 -69
  211. package/src/Tooltip.tsx +387 -119
  212. package/src/Tree.tsx +651 -368
  213. package/src/Virtualizer.tsx +208 -180
  214. package/src/VirtualizerLayouts.ts +45 -30
  215. package/src/VisuallyHidden.tsx +19 -19
  216. package/src/contexts.ts +29 -37
  217. package/src/index.ts +110 -195
  218. package/src/useDragAndDrop.ts +87 -71
  219. package/src/utils.tsx +49 -60
  220. package/src/virtualizer/Layout.ts +14 -22
  221. package/dist/index.ssr.js +0 -16996
  222. package/dist/index.ssr.js.map +0 -1
package/src/Pressable.tsx CHANGED
@@ -5,17 +5,19 @@
5
5
  * to make an element pressable. Port of React Aria's Pressable.
6
6
  */
7
7
 
8
- import { type JSX, children as resolveChildren, createEffect, onCleanup, splitProps } from 'solid-js';
8
+ import {
9
+ type JSX,
10
+ children as resolveChildren,
11
+ createEffect,
12
+ onCleanup,
13
+ splitProps,
14
+ } from "solid-js";
9
15
  import {
10
16
  createPress,
11
17
  createFocusable,
12
18
  type CreatePressProps,
13
19
  type CreateFocusableProps,
14
- } from '@proyecto-viviana/solidaria';
15
-
16
- // ============================================
17
- // TYPES
18
- // ============================================
20
+ } from "@proyecto-viviana/solidaria";
19
21
 
20
22
  export interface PressableProps extends CreatePressProps {
21
23
  /** A single child element to make pressable. */
@@ -24,10 +26,6 @@ export interface PressableProps extends CreatePressProps {
24
26
  ref?: HTMLElement | ((el: HTMLElement) => void);
25
27
  }
26
28
 
27
- // ============================================
28
- // COMPONENT
29
- // ============================================
30
-
31
29
  /**
32
30
  * Makes its child element pressable and focusable.
33
31
  * Combines createPress and createFocusable for full interaction support.
@@ -40,11 +38,14 @@ export interface PressableProps extends CreatePressProps {
40
38
  * ```
41
39
  */
42
40
  export function Pressable(props: PressableProps): JSX.Element {
43
- const [local, pressProps] = splitProps(props, ['children', 'ref']);
41
+ const [local, pressProps] = splitProps(props, ["children", "ref"]);
44
42
 
45
43
  let ref!: HTMLElement;
46
44
  const { pressProps: domPressProps } = createPress(pressProps);
47
- const { focusableProps: domFocusableProps } = createFocusable(pressProps as CreateFocusableProps, () => ref);
45
+ const { focusableProps: domFocusableProps } = createFocusable(
46
+ pressProps as CreateFocusableProps,
47
+ () => ref,
48
+ );
48
49
 
49
50
  const resolved = resolveChildren(() => local.children);
50
51
 
@@ -52,8 +53,7 @@ export function Pressable(props: PressableProps): JSX.Element {
52
53
  const child = resolved() as HTMLElement;
53
54
  if (child instanceof HTMLElement) {
54
55
  ref = child;
55
- // Forward ref
56
- if (typeof local.ref === 'function') {
56
+ if (typeof local.ref === "function") {
57
57
  local.ref(child);
58
58
  }
59
59
 
@@ -61,7 +61,7 @@ export function Pressable(props: PressableProps): JSX.Element {
61
61
  const allProps = { ...domFocusableProps, ...domPressProps };
62
62
  const listeners: Array<[string, EventListener]> = [];
63
63
  for (const [key, handler] of Object.entries(allProps)) {
64
- if (key.startsWith('on') && typeof handler === 'function') {
64
+ if (key.startsWith("on") && typeof handler === "function") {
65
65
  const eventName = key.slice(2).toLowerCase();
66
66
  const listener = handler as EventListener;
67
67
  child.addEventListener(eventName, listener);
@@ -72,24 +72,24 @@ export function Pressable(props: PressableProps): JSX.Element {
72
72
  // Apply non-event press/focusable props (e.g. tabIndex/data attrs).
73
73
  // Keep explicit child tabIndex to mirror mergeProps(child.props precedence).
74
74
  for (const [key, value] of Object.entries(allProps)) {
75
- if (key === 'ref' || (key.startsWith('on') && typeof value === 'function')) continue;
75
+ if (key === "ref" || (key.startsWith("on") && typeof value === "function")) continue;
76
76
 
77
- if (key === 'tabIndex') {
78
- if (child.hasAttribute('tabindex')) continue;
77
+ if (key === "tabIndex") {
78
+ if (child.hasAttribute("tabindex")) continue;
79
79
  if (value == null || value === false) {
80
- child.removeAttribute('tabindex');
80
+ child.removeAttribute("tabindex");
81
81
  } else {
82
82
  child.tabIndex = Number(value);
83
83
  }
84
84
  continue;
85
85
  }
86
86
 
87
- if (key.startsWith('aria-') || key.startsWith('data-') || key === 'id' || key === 'role') {
87
+ if (key.startsWith("aria-") || key.startsWith("data-") || key === "id" || key === "role") {
88
88
  if (child.hasAttribute(key)) continue;
89
89
  if (value == null || value === false) {
90
90
  child.removeAttribute(key);
91
91
  } else if (value === true) {
92
- child.setAttribute(key, '');
92
+ child.setAttribute(key, "");
93
93
  } else {
94
94
  child.setAttribute(key, String(value));
95
95
  }
@@ -5,16 +5,8 @@
5
5
  * Port of react-aria-components/src/ProgressBar.tsx
6
6
  */
7
7
 
8
- import {
9
- type JSX,
10
- createContext,
11
- createMemo,
12
- splitProps,
13
- } from 'solid-js';
14
- import {
15
- createProgressBar,
16
- type AriaProgressBarProps,
17
- } from '@proyecto-viviana/solidaria';
8
+ import { type JSX, createContext, createMemo, mergeProps, splitProps, useContext } from "solid-js";
9
+ import { createProgressBar, type AriaProgressBarProps } from "@proyecto-viviana/solidaria";
18
10
  import {
19
11
  type RenderChildren,
20
12
  type ClassNameOrFunction,
@@ -22,11 +14,7 @@ import {
22
14
  type SlotProps,
23
15
  useRenderProps,
24
16
  filterDOMProps,
25
- } from './utils';
26
-
27
- // ============================================
28
- // TYPES
29
- // ============================================
17
+ } from "./utils";
30
18
 
31
19
  export interface ProgressBarRenderProps {
32
20
  /** The value as a percentage between the minimum and maximum (0-100). */
@@ -37,9 +25,9 @@ export interface ProgressBarRenderProps {
37
25
  isIndeterminate: boolean;
38
26
  }
39
27
 
40
- export interface ProgressBarProps
41
- extends AriaProgressBarProps,
42
- SlotProps {
28
+ export interface ProgressBarProps extends AriaProgressBarProps, SlotProps {
29
+ /** The element id. */
30
+ id?: string;
43
31
  /** The children of the component. A function may be provided to receive render props. */
44
32
  children?: RenderChildren<ProgressBarRenderProps>;
45
33
  /** The CSS className for the element. */
@@ -48,16 +36,8 @@ export interface ProgressBarProps
48
36
  style?: StyleOrFunction<ProgressBarRenderProps>;
49
37
  }
50
38
 
51
- // ============================================
52
- // CONTEXT
53
- // ============================================
54
-
55
39
  export const ProgressBarContext = createContext<ProgressBarProps | null>(null);
56
40
 
57
- // ============================================
58
- // UTILITIES
59
- // ============================================
60
-
61
41
  function clamp(value: number, min: number, max: number): number {
62
42
  return Math.min(Math.max(value, min), max);
63
43
  }
@@ -67,10 +47,6 @@ function getSafeRange(min: number, max: number): number {
67
47
  return Number.isFinite(range) && range > 0 ? range : 1;
68
48
  }
69
49
 
70
- // ============================================
71
- // PROGRESSBAR COMPONENT
72
- // ============================================
73
-
74
50
  /**
75
51
  * Progress bars show either determinate or indeterminate progress of an operation
76
52
  * over time.
@@ -89,35 +65,54 @@ function getSafeRange(min: number, max: number): number {
89
65
  * ```
90
66
  */
91
67
  export function ProgressBar(props: ProgressBarProps): JSX.Element {
92
- const [local, ariaProps] = splitProps(props, [
93
- 'children',
94
- 'class',
95
- 'style',
96
- 'slot',
97
- ]);
68
+ const contextProps = useContext(ProgressBarContext);
69
+ const mergedProps = contextProps ? mergeProps(contextProps, props) : props;
70
+ const [local, ariaProps] = splitProps(mergedProps, ["children", "class", "style", "slot"]);
98
71
 
99
- // Get values for calculations
100
72
  const value = () => ariaProps.value ?? 0;
101
73
  const minValue = () => ariaProps.minValue ?? 0;
102
74
  const maxValue = () => ariaProps.maxValue ?? 100;
103
75
  const isIndeterminate = () => ariaProps.isIndeterminate ?? false;
104
76
 
105
- // Create progress bar aria props
106
77
  const progressAria = createProgressBar({
107
- get value() { return ariaProps.value; },
108
- get minValue() { return ariaProps.minValue; },
109
- get maxValue() { return ariaProps.maxValue; },
110
- get valueLabel() { return ariaProps.valueLabel; },
111
- get isIndeterminate() { return ariaProps.isIndeterminate; },
112
- get formatOptions() { return ariaProps.formatOptions; },
113
- get label() { return ariaProps.label; },
114
- get 'aria-label'() { return ariaProps['aria-label']; },
115
- get 'aria-labelledby'() { return ariaProps['aria-labelledby']; },
116
- get 'aria-describedby'() { return ariaProps['aria-describedby']; },
117
- get 'aria-details'() { return ariaProps['aria-details']; },
78
+ get id() {
79
+ return ariaProps.id;
80
+ },
81
+ get value() {
82
+ return ariaProps.value;
83
+ },
84
+ get minValue() {
85
+ return ariaProps.minValue;
86
+ },
87
+ get maxValue() {
88
+ return ariaProps.maxValue;
89
+ },
90
+ get valueLabel() {
91
+ return ariaProps.valueLabel;
92
+ },
93
+ get isIndeterminate() {
94
+ return ariaProps.isIndeterminate;
95
+ },
96
+ get formatOptions() {
97
+ return ariaProps.formatOptions;
98
+ },
99
+ get label() {
100
+ return ariaProps.label;
101
+ },
102
+ get "aria-label"() {
103
+ return ariaProps["aria-label"];
104
+ },
105
+ get "aria-labelledby"() {
106
+ return ariaProps["aria-labelledby"];
107
+ },
108
+ get "aria-describedby"() {
109
+ return ariaProps["aria-describedby"];
110
+ },
111
+ get "aria-details"() {
112
+ return ariaProps["aria-details"];
113
+ },
118
114
  });
119
115
 
120
- // Calculate percentage
121
116
  const percentage = createMemo(() => {
122
117
  if (isIndeterminate()) {
123
118
  return undefined;
@@ -126,30 +121,26 @@ export function ProgressBar(props: ProgressBarProps): JSX.Element {
126
121
  return ((clampedValue - minValue()) / getSafeRange(minValue(), maxValue())) * 100;
127
122
  });
128
123
 
129
- // Get value text from aria props
130
124
  const valueText = createMemo(() => {
131
- return progressAria.progressBarProps['aria-valuetext'] as string | undefined;
125
+ return progressAria.progressBarProps["aria-valuetext"] as string | undefined;
132
126
  });
133
127
 
134
- // Render props values
135
128
  const renderValues = createMemo<ProgressBarRenderProps>(() => ({
136
129
  percentage: percentage(),
137
130
  valueText: valueText(),
138
131
  isIndeterminate: isIndeterminate(),
139
132
  }));
140
133
 
141
- // Resolve render props
142
134
  const renderProps = useRenderProps(
143
135
  {
144
136
  children: props.children,
145
137
  class: local.class,
146
138
  style: local.style,
147
- defaultClassName: 'solidaria-ProgressBar',
139
+ defaultClassName: "solidaria-ProgressBar",
148
140
  },
149
- renderValues
141
+ renderValues,
150
142
  );
151
143
 
152
- // Filter DOM props
153
144
  const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
154
145
 
155
146
  return (