@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.
- package/README.md +39 -272
- package/dist/ActionBar.d.ts +21 -13
- package/dist/ActionBar.d.ts.map +1 -1
- package/dist/ActionGroup.d.ts +8 -8
- package/dist/ActionGroup.d.ts.map +1 -1
- package/dist/Alert.d.ts +5 -5
- package/dist/Alert.d.ts.map +1 -1
- package/dist/Autocomplete.d.ts +5 -5
- package/dist/Autocomplete.d.ts.map +1 -1
- package/dist/Breadcrumbs.d.ts +18 -7
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Button.d.ts +24 -5
- package/dist/Button.d.ts.map +1 -1
- package/dist/Calendar.d.ts +38 -7
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Checkbox.d.ts +32 -7
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Collection.d.ts +19 -14
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Color.d.ts +103 -14
- package/dist/Color.d.ts.map +1 -1
- package/dist/ColorEditor.d.ts +6 -6
- package/dist/ColorEditor.d.ts.map +1 -1
- package/dist/ComboBox.d.ts +85 -19
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ContextualHelpTrigger.d.ts +2 -2
- package/dist/ContextualHelpTrigger.d.ts.map +1 -1
- package/dist/DateField.d.ts +8 -6
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DatePicker.d.ts +53 -22
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DateRangePickerContext.d.ts +30 -0
- package/dist/DateRangePickerContext.d.ts.map +1 -0
- package/dist/Dialog.d.ts +5 -5
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Disclosure.d.ts +23 -5
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/DragAndDrop.d.ts +6 -6
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragPreview.d.ts +2 -2
- package/dist/DragPreview.d.ts.map +1 -1
- package/dist/DropZone.d.ts +4 -4
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/FieldError.d.ts +9 -5
- package/dist/FieldError.d.ts.map +1 -1
- package/dist/FileTrigger.d.ts +3 -3
- package/dist/FileTrigger.d.ts.map +1 -1
- package/dist/Focusable.d.ts +2 -2
- package/dist/Focusable.d.ts.map +1 -1
- package/dist/Form.d.ts +18 -4
- package/dist/Form.d.ts.map +1 -1
- package/dist/GridList.d.ts +32 -12
- package/dist/GridList.d.ts.map +1 -1
- package/dist/HiddenDateInput.d.ts +26 -0
- package/dist/HiddenDateInput.d.ts.map +1 -0
- package/dist/HiddenTimeInput.d.ts +25 -0
- package/dist/HiddenTimeInput.d.ts.map +1 -0
- package/dist/Icon.d.ts +5 -5
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Keyboard.d.ts +1 -1
- package/dist/Landmark.d.ts +3 -3
- package/dist/Landmark.d.ts.map +1 -1
- package/dist/Link.d.ts +10 -4
- package/dist/Link.d.ts.map +1 -1
- package/dist/ListBox.d.ts +32 -12
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListDropTargetDelegate.d.ts +6 -6
- package/dist/ListDropTargetDelegate.d.ts.map +1 -1
- package/dist/Menu.d.ts +65 -14
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Meter.d.ts +3 -3
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Modal.d.ts +5 -5
- package/dist/Modal.d.ts.map +1 -1
- package/dist/NumberField.d.ts +8 -12
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/Popover.d.ts +28 -5
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Pressable.d.ts +2 -2
- package/dist/Pressable.d.ts.map +1 -1
- package/dist/ProgressBar.d.ts +5 -3
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/RadioGroup.d.ts +43 -9
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RangeCalendar.d.ts +34 -7
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RouterProvider.d.ts +2 -2
- package/dist/RouterProvider.d.ts.map +1 -1
- package/dist/SearchField.d.ts +23 -20
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/Select.d.ts +41 -11
- package/dist/Select.d.ts.map +1 -1
- package/dist/SelectionIndicator.d.ts +3 -3
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/Separator.d.ts +9 -3
- package/dist/Separator.d.ts.map +1 -1
- package/dist/SharedElementTransition.d.ts +6 -4
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/Slider.d.ts +12 -8
- package/dist/Slider.d.ts.map +1 -1
- package/dist/StepList.d.ts +90 -0
- package/dist/StepList.d.ts.map +1 -0
- package/dist/Switch.d.ts +11 -5
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Table.d.ts +187 -23
- package/dist/Table.d.ts.map +1 -1
- package/dist/Tabs.d.ts +45 -9
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/TagGroup.d.ts +12 -10
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/Text.d.ts +2 -2
- package/dist/TextField.d.ts +15 -11
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TimeField.d.ts +6 -6
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/Toast.d.ts +29 -14
- package/dist/Toast.d.ts.map +1 -1
- package/dist/ToggleButton.d.ts +11 -5
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.d.ts +7 -7
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/Toolbar.d.ts +7 -3
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Tooltip.d.ts +50 -8
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tree.d.ts +66 -17
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Virtualizer.d.ts +12 -12
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/VirtualizerLayouts.d.ts +2 -2
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.d.ts +1 -1
- package/dist/VisuallyHidden.d.ts.map +1 -1
- package/dist/contexts.d.ts +5 -1
- package/dist/contexts.d.ts.map +1 -1
- package/dist/index.d.ts +73 -71
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23253 -18564
- package/dist/index.js.map +1 -1
- package/dist/index.jsx +18116 -0
- package/dist/index.jsx.map +1 -0
- package/dist/useDragAndDrop.d.ts +13 -13
- package/dist/useDragAndDrop.d.ts.map +1 -1
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/virtualizer/Layout.d.ts +1 -1
- package/dist/virtualizer/Layout.d.ts.map +1 -1
- package/package.json +31 -32
- package/src/ActionBar.tsx +75 -72
- package/src/ActionGroup.tsx +53 -61
- package/src/Alert.tsx +17 -42
- package/src/Autocomplete.tsx +39 -44
- package/src/Breadcrumbs.tsx +149 -80
- package/src/Button.tsx +267 -70
- package/src/Calendar.tsx +218 -138
- package/src/Checkbox.tsx +413 -121
- package/src/Collection.tsx +67 -58
- package/src/Color.tsx +803 -380
- package/src/ColorEditor.tsx +131 -149
- package/src/ComboBox.tsx +414 -249
- package/src/ContextualHelpTrigger.tsx +86 -74
- package/src/DateField.tsx +185 -91
- package/src/DatePicker.tsx +524 -213
- package/src/DateRangePickerContext.tsx +44 -0
- package/src/Dialog.tsx +156 -118
- package/src/Disclosure.tsx +127 -80
- package/src/DragAndDrop.tsx +60 -54
- package/src/DragPreview.tsx +13 -11
- package/src/DropZone.tsx +42 -22
- package/src/FieldError.tsx +45 -23
- package/src/FileTrigger.tsx +19 -19
- package/src/Focusable.tsx +21 -24
- package/src/Form.tsx +71 -16
- package/src/GridList.tsx +273 -197
- package/src/HiddenDateInput.tsx +153 -0
- package/src/HiddenTimeInput.tsx +133 -0
- package/src/Icon.tsx +22 -43
- package/src/Keyboard.tsx +3 -3
- package/src/Landmark.tsx +37 -63
- package/src/Link.tsx +125 -75
- package/src/ListBox.tsx +332 -233
- package/src/ListDropTargetDelegate.ts +81 -80
- package/src/Menu.tsx +1023 -274
- package/src/Meter.tsx +38 -56
- package/src/Modal.tsx +251 -176
- package/src/NumberField.tsx +139 -143
- package/src/Popover.tsx +396 -234
- package/src/Pressable.tsx +21 -21
- package/src/ProgressBar.tsx +48 -57
- package/src/RadioGroup.tsx +524 -122
- package/src/RangeCalendar.tsx +157 -90
- package/src/RouterProvider.tsx +30 -47
- package/src/SearchField.tsx +362 -143
- package/src/Select.tsx +656 -233
- package/src/SelectionIndicator.tsx +18 -15
- package/src/Separator.tsx +47 -49
- package/src/SharedElementTransition.tsx +103 -97
- package/src/Slider.tsx +138 -98
- package/src/StepList.tsx +272 -0
- package/src/Switch.tsx +93 -46
- package/src/Table.tsx +1308 -342
- package/src/Tabs.tsx +324 -103
- package/src/TagGroup.tsx +139 -126
- package/src/Text.tsx +3 -3
- package/src/TextField.tsx +389 -79
- package/src/TimeField.tsx +136 -76
- package/src/Toast.tsx +216 -158
- package/src/ToggleButton.tsx +47 -37
- package/src/ToggleButtonGroup.tsx +39 -34
- package/src/Toolbar.tsx +54 -69
- package/src/Tooltip.tsx +387 -119
- package/src/Tree.tsx +651 -368
- package/src/Virtualizer.tsx +208 -180
- package/src/VirtualizerLayouts.ts +45 -30
- package/src/VisuallyHidden.tsx +19 -19
- package/src/contexts.ts +29 -37
- package/src/index.ts +110 -195
- package/src/useDragAndDrop.ts +87 -71
- package/src/utils.tsx +49 -60
- package/src/virtualizer/Layout.ts +14 -22
- package/dist/index.ssr.js +0 -16996
- package/dist/index.ssr.js.map +0 -1
package/src/Breadcrumbs.tsx
CHANGED
|
@@ -10,11 +10,14 @@ import {
|
|
|
10
10
|
type JSX,
|
|
11
11
|
createContext,
|
|
12
12
|
createMemo,
|
|
13
|
+
createSignal,
|
|
14
|
+
children as resolveChildren,
|
|
13
15
|
splitProps,
|
|
14
16
|
useContext,
|
|
15
17
|
For,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
Show,
|
|
19
|
+
} from "solid-js";
|
|
20
|
+
import { Dynamic } from "solid-js/web";
|
|
18
21
|
import {
|
|
19
22
|
createBreadcrumbs,
|
|
20
23
|
createBreadcrumbItem,
|
|
@@ -24,7 +27,7 @@ import {
|
|
|
24
27
|
type AriaBreadcrumbsProps,
|
|
25
28
|
type AriaBreadcrumbItemProps,
|
|
26
29
|
type PressEvent,
|
|
27
|
-
} from
|
|
30
|
+
} from "@proyecto-viviana/solidaria";
|
|
28
31
|
import {
|
|
29
32
|
type RenderChildren,
|
|
30
33
|
type ClassNameOrFunction,
|
|
@@ -32,18 +35,28 @@ import {
|
|
|
32
35
|
type SlotProps,
|
|
33
36
|
useRenderProps,
|
|
34
37
|
filterDOMProps,
|
|
35
|
-
} from
|
|
38
|
+
} from "./utils";
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
type RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;
|
|
41
|
+
|
|
42
|
+
function assignRef<T>(ref: RefLike<T>, el: T): void {
|
|
43
|
+
if (!ref) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (typeof ref === "function") {
|
|
48
|
+
ref(el);
|
|
49
|
+
} else {
|
|
50
|
+
ref.current = el;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
40
53
|
|
|
41
54
|
export interface BreadcrumbsRenderProps {
|
|
42
55
|
/** Whether the breadcrumbs are disabled. */
|
|
43
56
|
isDisabled: boolean;
|
|
44
57
|
}
|
|
45
58
|
|
|
46
|
-
export interface BreadcrumbsProps<T> extends Omit<AriaBreadcrumbsProps,
|
|
59
|
+
export interface BreadcrumbsProps<T> extends Omit<AriaBreadcrumbsProps, "isDisabled">, SlotProps {
|
|
47
60
|
/** The items to render in the breadcrumbs. */
|
|
48
61
|
items?: T[];
|
|
49
62
|
/** Function to get the key from an item. */
|
|
@@ -52,12 +65,14 @@ export interface BreadcrumbsProps<T> extends Omit<AriaBreadcrumbsProps, 'isDisab
|
|
|
52
65
|
isDisabled?: boolean;
|
|
53
66
|
/** Handler called when a breadcrumb item is activated. */
|
|
54
67
|
onAction?: (key: string | number) => void;
|
|
55
|
-
/** The children of the component
|
|
56
|
-
children
|
|
68
|
+
/** The children of the component, or a render function for collection items. */
|
|
69
|
+
children?: JSX.Element | ((item: T) => JSX.Element);
|
|
57
70
|
/** The CSS className for the element. */
|
|
58
71
|
class?: ClassNameOrFunction<BreadcrumbsRenderProps>;
|
|
59
72
|
/** The inline style for the element. */
|
|
60
73
|
style?: StyleOrFunction<BreadcrumbsRenderProps>;
|
|
74
|
+
/** Ref for the navigation element. */
|
|
75
|
+
ref?: RefLike<HTMLElement>;
|
|
61
76
|
}
|
|
62
77
|
|
|
63
78
|
export interface BreadcrumbItemRenderProps {
|
|
@@ -75,7 +90,8 @@ export interface BreadcrumbItemRenderProps {
|
|
|
75
90
|
isHovered: boolean;
|
|
76
91
|
}
|
|
77
92
|
|
|
78
|
-
export interface BreadcrumbItemProps
|
|
93
|
+
export interface BreadcrumbItemProps
|
|
94
|
+
extends Omit<AriaBreadcrumbItemProps, "isDisabled">, SlotProps {
|
|
79
95
|
/** The children of the breadcrumb item. */
|
|
80
96
|
children?: RenderChildren<BreadcrumbItemRenderProps>;
|
|
81
97
|
/** The CSS className for the element. */
|
|
@@ -84,15 +100,17 @@ export interface BreadcrumbItemProps extends Omit<AriaBreadcrumbItemProps, 'isDi
|
|
|
84
100
|
style?: StyleOrFunction<BreadcrumbItemRenderProps>;
|
|
85
101
|
/** Whether this item is disabled. */
|
|
86
102
|
isDisabled?: boolean;
|
|
103
|
+
/** Ref for the breadcrumb item element. */
|
|
104
|
+
ref?: RefLike<HTMLElement>;
|
|
87
105
|
}
|
|
88
106
|
|
|
89
|
-
// ============================================
|
|
90
|
-
// CONTEXT
|
|
91
|
-
// ============================================
|
|
92
|
-
|
|
93
107
|
interface BreadcrumbsContextValue {
|
|
94
108
|
isDisabled: Accessor<boolean>;
|
|
95
109
|
onAction?: (key: string | number) => void;
|
|
110
|
+
registerStaticItem?: () => number;
|
|
111
|
+
staticItemCount?: Accessor<number>;
|
|
112
|
+
resetStaticItems?: () => void;
|
|
113
|
+
setStaticItemCount?: (count: number) => void;
|
|
96
114
|
}
|
|
97
115
|
|
|
98
116
|
export const BreadcrumbsContext = createContext<BreadcrumbsContextValue | null>(null);
|
|
@@ -109,106 +127,155 @@ function defaultItemKey(item: unknown, index: number): string | number {
|
|
|
109
127
|
return maybeItem.key ?? maybeItem.id ?? index;
|
|
110
128
|
}
|
|
111
129
|
|
|
112
|
-
// ============================================
|
|
113
|
-
// COMPONENTS
|
|
114
|
-
// ============================================
|
|
115
|
-
|
|
116
130
|
/**
|
|
117
131
|
* Breadcrumbs show hierarchy and navigational context for a user's location within an application.
|
|
118
132
|
*/
|
|
119
133
|
export function Breadcrumbs<T>(props: BreadcrumbsProps<T>): JSX.Element {
|
|
120
134
|
const [local, ariaProps, rest] = splitProps(
|
|
121
135
|
props,
|
|
122
|
-
[
|
|
123
|
-
[
|
|
136
|
+
["children", "class", "style", "slot", "items", "getKey", "isDisabled", "onAction", "ref"],
|
|
137
|
+
["aria-label", "aria-labelledby", "aria-describedby", "aria-details"],
|
|
124
138
|
);
|
|
125
139
|
|
|
126
140
|
const isDisabled = () => local.isDisabled ?? false;
|
|
127
141
|
const items = () => local.items ?? [];
|
|
142
|
+
const hasCollectionItems = () => local.items !== undefined;
|
|
128
143
|
const getItemKey = (item: T, index: number): string | number =>
|
|
129
144
|
local.getKey?.(item) ?? defaultItemKey(item, index);
|
|
145
|
+
const [staticItemCount, setStaticItemCount] = createSignal(0);
|
|
146
|
+
let nextStaticIndex = 0;
|
|
147
|
+
const resetStaticItems = () => {
|
|
148
|
+
nextStaticIndex = 0;
|
|
149
|
+
setStaticItemCount(0);
|
|
150
|
+
};
|
|
151
|
+
const registerStaticItem = () => {
|
|
152
|
+
const index = nextStaticIndex;
|
|
153
|
+
nextStaticIndex += 1;
|
|
154
|
+
return index;
|
|
155
|
+
};
|
|
130
156
|
|
|
131
|
-
// Create breadcrumbs aria props
|
|
132
157
|
const { navProps } = createBreadcrumbs({
|
|
133
|
-
get
|
|
134
|
-
return ariaProps[
|
|
158
|
+
get "aria-label"() {
|
|
159
|
+
return ariaProps["aria-label"];
|
|
135
160
|
},
|
|
136
|
-
get
|
|
137
|
-
return ariaProps[
|
|
161
|
+
get "aria-labelledby"() {
|
|
162
|
+
return ariaProps["aria-labelledby"];
|
|
138
163
|
},
|
|
139
|
-
get
|
|
140
|
-
return ariaProps[
|
|
164
|
+
get "aria-describedby"() {
|
|
165
|
+
return ariaProps["aria-describedby"];
|
|
141
166
|
},
|
|
142
167
|
get isDisabled() {
|
|
143
168
|
return isDisabled();
|
|
144
169
|
},
|
|
145
170
|
});
|
|
146
171
|
|
|
147
|
-
// Render props values
|
|
148
172
|
const renderValues = createMemo<BreadcrumbsRenderProps>(() => ({
|
|
149
173
|
isDisabled: isDisabled(),
|
|
150
174
|
}));
|
|
151
175
|
|
|
152
|
-
// Resolve render props
|
|
153
176
|
const renderProps = useRenderProps(
|
|
154
177
|
{
|
|
155
178
|
class: local.class,
|
|
156
179
|
style: local.style,
|
|
157
|
-
defaultClassName:
|
|
180
|
+
defaultClassName: "solidaria-Breadcrumbs",
|
|
158
181
|
},
|
|
159
|
-
renderValues
|
|
182
|
+
renderValues,
|
|
160
183
|
);
|
|
161
184
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
185
|
+
const domProps = createMemo(() =>
|
|
186
|
+
filterDOMProps(rest as Record<string, unknown>, { global: true }),
|
|
187
|
+
);
|
|
165
188
|
return (
|
|
166
|
-
<BreadcrumbsContext.Provider
|
|
189
|
+
<BreadcrumbsContext.Provider
|
|
190
|
+
value={{
|
|
191
|
+
isDisabled,
|
|
192
|
+
onAction: local.onAction,
|
|
193
|
+
registerStaticItem,
|
|
194
|
+
staticItemCount,
|
|
195
|
+
resetStaticItems,
|
|
196
|
+
setStaticItemCount,
|
|
197
|
+
}}
|
|
198
|
+
>
|
|
167
199
|
<nav
|
|
168
200
|
{...navProps}
|
|
169
201
|
{...domProps()}
|
|
202
|
+
ref={(element) => assignRef(local.ref, element)}
|
|
170
203
|
class={renderProps.class()}
|
|
171
204
|
style={renderProps.style()}
|
|
172
205
|
data-disabled={isDisabled() || undefined}
|
|
173
206
|
>
|
|
174
|
-
<ol
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
|
|
207
|
+
<ol
|
|
208
|
+
style={{
|
|
209
|
+
display: "flex",
|
|
210
|
+
"align-items": "center",
|
|
211
|
+
"list-style": "none",
|
|
212
|
+
margin: 0,
|
|
213
|
+
padding: 0,
|
|
214
|
+
}}
|
|
215
|
+
>
|
|
216
|
+
<Show
|
|
217
|
+
when={hasCollectionItems()}
|
|
218
|
+
fallback={
|
|
219
|
+
<StaticBreadcrumbItems>{local.children as JSX.Element}</StaticBreadcrumbItems>
|
|
220
|
+
}
|
|
221
|
+
>
|
|
222
|
+
<For each={items()}>
|
|
223
|
+
{(item, index) => {
|
|
224
|
+
const itemKey = getItemKey(item, index());
|
|
225
|
+
const isLast = () => index() === items().length - 1;
|
|
226
|
+
const renderItem = local.children as ((item: T) => JSX.Element) | undefined;
|
|
227
|
+
|
|
228
|
+
return (
|
|
229
|
+
<li style={{ display: "flex", "align-items": "center" }}>
|
|
230
|
+
<BreadcrumbItemContext.Provider value={{ itemKey, isLast }}>
|
|
231
|
+
{renderItem?.(item)}
|
|
232
|
+
</BreadcrumbItemContext.Provider>
|
|
233
|
+
</li>
|
|
234
|
+
);
|
|
235
|
+
}}
|
|
236
|
+
</For>
|
|
237
|
+
</Show>
|
|
189
238
|
</ol>
|
|
190
239
|
</nav>
|
|
191
240
|
</BreadcrumbsContext.Provider>
|
|
192
241
|
);
|
|
193
242
|
}
|
|
194
243
|
|
|
244
|
+
function StaticBreadcrumbItems(props: { children?: JSX.Element }): JSX.Element {
|
|
245
|
+
const context = useContext(BreadcrumbsContext);
|
|
246
|
+
const staticChildren = resolveChildren(() => props.children);
|
|
247
|
+
const childArray = createMemo(() => {
|
|
248
|
+
context?.resetStaticItems?.();
|
|
249
|
+
const array = staticChildren.toArray();
|
|
250
|
+
context?.setStaticItemCount?.(array.length);
|
|
251
|
+
return array;
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
return (
|
|
255
|
+
<For each={childArray()}>
|
|
256
|
+
{(child) => <li style={{ display: "flex", "align-items": "center" }}>{child}</li>}
|
|
257
|
+
</For>
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
|
|
195
261
|
/**
|
|
196
262
|
* A BreadcrumbItem represents an individual breadcrumb in the navigation trail.
|
|
197
263
|
*/
|
|
198
264
|
export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
199
|
-
const [local, ariaProps] = splitProps(props, [
|
|
200
|
-
|
|
201
|
-
'style',
|
|
202
|
-
'slot',
|
|
203
|
-
'isDisabled',
|
|
204
|
-
]);
|
|
205
|
-
|
|
206
|
-
// Get context
|
|
265
|
+
const [local, ariaProps] = splitProps(props, ["class", "style", "slot", "isDisabled", "ref"]);
|
|
266
|
+
|
|
207
267
|
const context = useContext(BreadcrumbsContext);
|
|
208
268
|
const itemContext = useContext(BreadcrumbItemContext);
|
|
269
|
+
const staticIndex = itemContext ? null : context?.registerStaticItem?.();
|
|
209
270
|
const isDisabled = () => local.isDisabled ?? context?.isDisabled() ?? false;
|
|
210
|
-
const isCurrent = () =>
|
|
211
|
-
|
|
271
|
+
const isCurrent = () =>
|
|
272
|
+
ariaProps.isCurrent ??
|
|
273
|
+
itemContext?.isLast() ??
|
|
274
|
+
(staticIndex !== null &&
|
|
275
|
+
staticIndex !== undefined &&
|
|
276
|
+
context?.staticItemCount !== undefined &&
|
|
277
|
+
staticIndex === context.staticItemCount() - 1);
|
|
278
|
+
const itemKey = () => itemContext?.itemKey ?? ariaProps.id ?? null;
|
|
212
279
|
|
|
213
280
|
const handlePress = (e: PressEvent) => {
|
|
214
281
|
ariaProps.onPress?.(e);
|
|
@@ -218,7 +285,6 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
218
285
|
}
|
|
219
286
|
};
|
|
220
287
|
|
|
221
|
-
// Create breadcrumb item aria props
|
|
222
288
|
const { itemProps, isPressed } = createBreadcrumbItem({
|
|
223
289
|
get id() {
|
|
224
290
|
return ariaProps.id;
|
|
@@ -271,17 +337,20 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
271
337
|
get autoFocus() {
|
|
272
338
|
return ariaProps.autoFocus;
|
|
273
339
|
},
|
|
274
|
-
get
|
|
275
|
-
return ariaProps[
|
|
340
|
+
get "aria-label"() {
|
|
341
|
+
return ariaProps["aria-label"];
|
|
342
|
+
},
|
|
343
|
+
get "aria-labelledby"() {
|
|
344
|
+
return ariaProps["aria-labelledby"];
|
|
276
345
|
},
|
|
277
|
-
get
|
|
278
|
-
return ariaProps[
|
|
346
|
+
get "aria-describedby"() {
|
|
347
|
+
return ariaProps["aria-describedby"];
|
|
279
348
|
},
|
|
280
|
-
get
|
|
281
|
-
return ariaProps[
|
|
349
|
+
get "aria-details"() {
|
|
350
|
+
return ariaProps["aria-details"];
|
|
282
351
|
},
|
|
283
|
-
get
|
|
284
|
-
return ariaProps[
|
|
352
|
+
get "aria-current"() {
|
|
353
|
+
return ariaProps["aria-current"];
|
|
285
354
|
},
|
|
286
355
|
});
|
|
287
356
|
|
|
@@ -295,12 +364,11 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
295
364
|
mergeProps(
|
|
296
365
|
itemProps as Record<string, unknown>,
|
|
297
366
|
focusProps as Record<string, unknown>,
|
|
298
|
-
hoverProps as Record<string, unknown
|
|
299
|
-
)
|
|
367
|
+
hoverProps as Record<string, unknown>,
|
|
368
|
+
),
|
|
300
369
|
);
|
|
301
|
-
const elementType = () => ariaProps.elementType ??
|
|
370
|
+
const elementType = () => ariaProps.elementType ?? "a";
|
|
302
371
|
|
|
303
|
-
// Render props values
|
|
304
372
|
const renderValues = createMemo<BreadcrumbItemRenderProps>(() => ({
|
|
305
373
|
isCurrent: isCurrent(),
|
|
306
374
|
isDisabled: isDisabled(),
|
|
@@ -310,21 +378,19 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
310
378
|
isHovered: isHovered(),
|
|
311
379
|
}));
|
|
312
380
|
|
|
313
|
-
// Resolve render props
|
|
314
381
|
const renderProps = useRenderProps(
|
|
315
382
|
{
|
|
316
383
|
children: props.children,
|
|
317
384
|
class: local.class,
|
|
318
385
|
style: local.style,
|
|
319
|
-
defaultClassName:
|
|
386
|
+
defaultClassName: "solidaria-BreadcrumbItem",
|
|
320
387
|
},
|
|
321
|
-
renderValues
|
|
388
|
+
renderValues,
|
|
322
389
|
);
|
|
323
390
|
|
|
324
|
-
// Merge inline flex styles with user styles
|
|
325
391
|
const mergedStyle = () => {
|
|
326
392
|
const userStyle = renderProps.style();
|
|
327
|
-
const baseStyle = { display:
|
|
393
|
+
const baseStyle = { display: "inline-flex", "align-items": "center" };
|
|
328
394
|
return userStyle ? { ...baseStyle, ...userStyle } : baseStyle;
|
|
329
395
|
};
|
|
330
396
|
|
|
@@ -332,6 +398,10 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
332
398
|
<Dynamic
|
|
333
399
|
component={elementType()}
|
|
334
400
|
{...mergedItemProps()}
|
|
401
|
+
ref={(element: HTMLElement) => assignRef(local.ref, element)}
|
|
402
|
+
href={isCurrent() ? undefined : (mergedItemProps() as { href?: string }).href}
|
|
403
|
+
aria-current={isCurrent() ? (ariaProps["aria-current"] ?? "page") : undefined}
|
|
404
|
+
aria-disabled={isDisabled() || isCurrent() || undefined}
|
|
335
405
|
class={renderProps.class()}
|
|
336
406
|
style={mergedStyle()}
|
|
337
407
|
data-current={isCurrent() || undefined}
|
|
@@ -346,5 +416,4 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
346
416
|
);
|
|
347
417
|
}
|
|
348
418
|
|
|
349
|
-
// Attach sub-components
|
|
350
419
|
Breadcrumbs.Item = BreadcrumbItem;
|