@arbor-education/design-system.components 0.21.1 → 0.22.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 (121) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/component-library.md +15 -14
  3. package/dist/components/articleCard/ArticleCard.d.ts +2 -2
  4. package/dist/components/articleCard/ArticleCard.d.ts.map +1 -1
  5. package/dist/components/articleCard/ArticleCard.js +3 -3
  6. package/dist/components/articleCard/ArticleCard.js.map +1 -1
  7. package/dist/components/articleCard/ArticleCard.stories.d.ts +11 -3
  8. package/dist/components/articleCard/ArticleCard.stories.d.ts.map +1 -1
  9. package/dist/components/articleCard/ArticleCard.stories.js +16 -11
  10. package/dist/components/articleCard/ArticleCard.stories.js.map +1 -1
  11. package/dist/components/iconText/IconText.d.ts +43 -0
  12. package/dist/components/iconText/IconText.d.ts.map +1 -0
  13. package/dist/components/iconText/IconText.js +29 -0
  14. package/dist/components/iconText/IconText.js.map +1 -0
  15. package/dist/components/{icoText/IcoText.stories.d.ts → iconText/IconText.stories.d.ts} +8 -9
  16. package/dist/components/iconText/IconText.stories.d.ts.map +1 -0
  17. package/dist/components/{icoText/IcoText.stories.js → iconText/IconText.stories.js} +81 -81
  18. package/dist/components/iconText/IconText.stories.js.map +1 -0
  19. package/dist/components/iconText/IconText.test.d.ts +2 -0
  20. package/dist/components/iconText/IconText.test.d.ts.map +1 -0
  21. package/dist/components/{icoText/IcoText.test.js → iconText/IconText.test.js} +6 -6
  22. package/dist/components/iconText/IconText.test.js.map +1 -0
  23. package/dist/components/modal/Modal.d.ts +1 -0
  24. package/dist/components/modal/Modal.d.ts.map +1 -1
  25. package/dist/components/modal/Modal.js +2 -2
  26. package/dist/components/modal/Modal.js.map +1 -1
  27. package/dist/components/tag/Tag.d.ts +14 -1
  28. package/dist/components/tag/Tag.d.ts.map +1 -1
  29. package/dist/components/tag/Tag.js +9 -3
  30. package/dist/components/tag/Tag.js.map +1 -1
  31. package/dist/components/tag/Tag.stories.d.ts +1 -1
  32. package/dist/components/tag/Tag.stories.d.ts.map +1 -1
  33. package/dist/components/tag/Tag.stories.js +3 -3
  34. package/dist/components/tag/Tag.stories.js.map +1 -1
  35. package/dist/components/tag/Tag.test.js +36 -5
  36. package/dist/components/tag/Tag.test.js.map +1 -1
  37. package/dist/components/tagList/TagList.d.ts +49 -0
  38. package/dist/components/tagList/TagList.d.ts.map +1 -0
  39. package/dist/components/tagList/TagList.js +114 -0
  40. package/dist/components/tagList/TagList.js.map +1 -0
  41. package/dist/components/tagList/TagList.stories.d.ts +130 -0
  42. package/dist/components/tagList/TagList.stories.d.ts.map +1 -0
  43. package/dist/components/tagList/TagList.stories.js +443 -0
  44. package/dist/components/tagList/TagList.stories.js.map +1 -0
  45. package/dist/components/{icoText/IcoText.test.d.ts → tagList/TagList.test.d.ts} +1 -1
  46. package/dist/components/tagList/TagList.test.d.ts.map +1 -0
  47. package/dist/components/tagList/TagList.test.js +246 -0
  48. package/dist/components/tagList/TagList.test.js.map +1 -0
  49. package/dist/components/tagList/useTagListCollapsedLayout.d.ts +19 -0
  50. package/dist/components/tagList/useTagListCollapsedLayout.d.ts.map +1 -0
  51. package/dist/components/tagList/useTagListCollapsedLayout.js +48 -0
  52. package/dist/components/tagList/useTagListCollapsedLayout.js.map +1 -0
  53. package/dist/components/tagList/useVisibleTags.d.ts +18 -0
  54. package/dist/components/tagList/useVisibleTags.d.ts.map +1 -0
  55. package/dist/components/tagList/useVisibleTags.js +41 -0
  56. package/dist/components/tagList/useVisibleTags.js.map +1 -0
  57. package/dist/index.css +130 -10
  58. package/dist/index.css.map +1 -1
  59. package/dist/index.d.ts +3 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +2 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/utils/hooks/useElementWidth.d.ts +2 -0
  64. package/dist/utils/hooks/useElementWidth.d.ts.map +1 -0
  65. package/dist/utils/hooks/useElementWidth.js +30 -0
  66. package/dist/utils/hooks/useElementWidth.js.map +1 -0
  67. package/dist/utils/hooks/useMeasuredChildWidths.d.ts +8 -0
  68. package/dist/utils/hooks/useMeasuredChildWidths.d.ts.map +1 -0
  69. package/dist/utils/hooks/useMeasuredChildWidths.js +26 -0
  70. package/dist/utils/hooks/useMeasuredChildWidths.js.map +1 -0
  71. package/dist/utils/hooks/useRovingFocus.d.ts +18 -0
  72. package/dist/utils/hooks/useRovingFocus.d.ts.map +1 -0
  73. package/dist/utils/hooks/useRovingFocus.js +130 -0
  74. package/dist/utils/hooks/useRovingFocus.js.map +1 -0
  75. package/dist/utils/hooks/useRovingFocus.test.d.ts +2 -0
  76. package/dist/utils/hooks/useRovingFocus.test.d.ts.map +1 -0
  77. package/dist/utils/hooks/useRovingFocus.test.js +59 -0
  78. package/dist/utils/hooks/useRovingFocus.test.js.map +1 -0
  79. package/dist/utils/spacedWidths.d.ts +3 -0
  80. package/dist/utils/spacedWidths.d.ts.map +1 -0
  81. package/dist/utils/spacedWidths.js +28 -0
  82. package/dist/utils/spacedWidths.js.map +1 -0
  83. package/dist/utils/spacedWidths.test.d.ts +2 -0
  84. package/dist/utils/spacedWidths.test.d.ts.map +1 -0
  85. package/dist/utils/spacedWidths.test.js +17 -0
  86. package/dist/utils/spacedWidths.test.js.map +1 -0
  87. package/package.json +1 -1
  88. package/src/components/articleCard/ArticleCard.stories.tsx +17 -12
  89. package/src/components/articleCard/ArticleCard.tsx +9 -9
  90. package/src/components/{icoText/IcoText.stories.tsx → iconText/IconText.stories.tsx} +112 -112
  91. package/src/components/{icoText/IcoText.test.tsx → iconText/IconText.test.tsx} +10 -10
  92. package/src/components/{icoText/IcoText.tsx → iconText/IconText.tsx} +27 -20
  93. package/src/components/modal/Modal.tsx +5 -1
  94. package/src/components/tag/Tag.stories.tsx +4 -4
  95. package/src/components/tag/Tag.test.tsx +62 -5
  96. package/src/components/tag/Tag.tsx +61 -3
  97. package/src/components/tag/tag.scss +80 -9
  98. package/src/components/tagList/TagList.stories.tsx +564 -0
  99. package/src/components/tagList/TagList.test.tsx +342 -0
  100. package/src/components/tagList/TagList.tsx +296 -0
  101. package/src/components/tagList/tagList.scss +56 -0
  102. package/src/components/tagList/useTagListCollapsedLayout.ts +83 -0
  103. package/src/components/tagList/useVisibleTags.ts +74 -0
  104. package/src/index.scss +2 -1
  105. package/src/index.ts +3 -1
  106. package/src/tokens.scss +2 -1
  107. package/src/utils/hooks/useElementWidth.ts +39 -0
  108. package/src/utils/hooks/useMeasuredChildWidths.ts +39 -0
  109. package/src/utils/hooks/useRovingFocus.test.tsx +105 -0
  110. package/src/utils/hooks/useRovingFocus.ts +163 -0
  111. package/src/utils/spacedWidths.test.ts +20 -0
  112. package/src/utils/spacedWidths.ts +37 -0
  113. package/dist/components/icoText/IcoText.d.ts +0 -37
  114. package/dist/components/icoText/IcoText.d.ts.map +0 -1
  115. package/dist/components/icoText/IcoText.js +0 -29
  116. package/dist/components/icoText/IcoText.js.map +0 -1
  117. package/dist/components/icoText/IcoText.stories.d.ts.map +0 -1
  118. package/dist/components/icoText/IcoText.stories.js.map +0 -1
  119. package/dist/components/icoText/IcoText.test.d.ts.map +0 -1
  120. package/dist/components/icoText/IcoText.test.js.map +0 -1
  121. /package/src/components/{icoText/icoText.scss → iconText/iconText.scss} +0 -0
@@ -0,0 +1,443 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Controls, Heading as DocHeading, Primary as DocPrimary, Markdown, Stories, Subtitle, Title, } from '@storybook/addon-docs/blocks';
3
+ import { Icon } from '../icon/Icon.js';
4
+ import { Modal } from '../modal/Modal.js';
5
+ import { useRef, useState } from 'react';
6
+ import { fn } from 'storybook/test';
7
+ import { TagList } from './TagList.js';
8
+ const DESCRIPTION_INTRO = [
9
+ '`TagList` lays out a sequence of shared `Tag` interactions, including optional remove buttons,',
10
+ 'controlled highlight state, and single-row overflow collapsing. It is the shared building block',
11
+ 'behind places like `FilterBar` and Combobox chip displays.',
12
+ ].join(' ');
13
+ const USAGE_GUIDANCE = [
14
+ '### When to use',
15
+ '',
16
+ '- Applied-filter summaries where each tag can reopen or remove a criterion',
17
+ '- Token or chip lists that need shared keyboard movement between tag actions and remove buttons',
18
+ '- Constrained layouts where hidden items should collapse behind a summary instead of wrapping',
19
+ '',
20
+ '---',
21
+ '',
22
+ '### When NOT to use',
23
+ '',
24
+ '| Situation | Use instead |',
25
+ '|---|---|',
26
+ '| You need a single standalone chip | [`Tag`](?path=/docs/components-tag--docs) on its own |',
27
+ '| You want hidden items to wrap onto multiple lines | `wrap={true}` rather than `collapseOverflow` |',
28
+ '| You expect `+N more` to reveal hidden tags automatically | Wire `overflowOnClick` to your own disclosure or management surface |',
29
+ ].join('\n');
30
+ const DEVELOPER_NOTES = [
31
+ '### Critical usage patterns',
32
+ '',
33
+ '**`wrap` and `collapseOverflow` are different modes.** `collapseOverflow` only applies when `wrap` is `false`.',
34
+ 'If wrapping is enabled, the list expands onto multiple lines instead of collapsing behind `+N more`.',
35
+ '',
36
+ '**Overflow is callback-driven.** `+N more` is only interactive when `overflowOnClick` is provided.',
37
+ 'Without that callback it is an informational summary, not an inline expansion control.',
38
+ '',
39
+ '**Keyboard movement follows interactive targets, not just items.** When a tag is removable, roving focus moves',
40
+ 'from the tag action to its remove button before continuing to the next tag. `Home` and `End` jump to the first',
41
+ 'and last interactive target. `Delete` and `Backspace` trigger removal for the focused removable item.',
42
+ '',
43
+ '**Use specific labels.** Give removable items a concrete `removeLabel`, and give overflow an',
44
+ '`overflowActionLabel` whenever it is clickable.',
45
+ '',
46
+ '**Provide a fallback focus target when removal can empty the list.** Pass `returnFocusRef` when the next',
47
+ 'logical destination lives outside the tag list, such as a filter toolbar button or a combobox trigger.',
48
+ '',
49
+ '---',
50
+ '',
51
+ '### Accessibility',
52
+ '',
53
+ '- Provide `ariaLabel` when the list needs an accessible name',
54
+ '- Use `actionLabel` when the visible tag text is not descriptive enough for screen readers',
55
+ '- Use `removeLabel` for precise remove-button announcements instead of repeated generic “Remove” buttons',
56
+ '- When overflow reopens another surface, pass `overflowAriaControls` and `overflowAriaExpanded` to describe that relationship',
57
+ '',
58
+ '---',
59
+ '',
60
+ '### TypeScript types',
61
+ '',
62
+ '```ts',
63
+ "import { TagList, type TagListItem, type TagListProps } from '../tagList/TagList.js';",
64
+ '```',
65
+ '',
66
+ '| Type | Description |',
67
+ '|---|---|',
68
+ '| `TagListProps` | Full props interface for the list component |',
69
+ '| `TagListItem` | Item data shape for the rendered tags |',
70
+ ].join('\n');
71
+ const RELATED_COMPONENTS = [
72
+ '## Related components',
73
+ '',
74
+ '[Tag](?path=/docs/components-tag--docs) · [FilterBar](?path=/docs/components-filterbar--docs) · [Combobox](?path=/docs/components-combobox--docs)',
75
+ ].join('\n');
76
+ const PROPS_INTRO = 'The preview below is wired to the **Controls** panel for the main layout and overflow props. Complex item data and callbacks are supplied by the story templates.';
77
+ const STORY_SHELL_STYLE = {
78
+ width: '100%',
79
+ maxWidth: 'min(100%, 48rem)',
80
+ padding: 'var(--spacing-large)',
81
+ boxSizing: 'border-box',
82
+ };
83
+ const NARROW_SHELL_STYLE = {
84
+ width: '22.5rem',
85
+ maxWidth: '100%',
86
+ padding: 'var(--spacing-medium)',
87
+ boxSizing: 'border-box',
88
+ backgroundColor: 'var(--color-mono-white)',
89
+ };
90
+ const DEFAULT_ITEMS = [
91
+ {
92
+ id: 'date',
93
+ children: 'Wed, 05 Feb 2025 AM',
94
+ onClick: fn(),
95
+ actionLabel: 'Open attendance date filter',
96
+ onRemove: fn(),
97
+ removeLabel: 'Remove attendance date filter',
98
+ },
99
+ {
100
+ id: 'registers',
101
+ children: 'Attendance registers',
102
+ onClick: fn(),
103
+ actionLabel: 'Open attendance registers filter',
104
+ onRemove: fn(),
105
+ removeLabel: 'Remove attendance registers filter',
106
+ },
107
+ {
108
+ id: 'interventions',
109
+ children: 'Interventions',
110
+ slotStart: _jsx(Icon, { name: "funnel", size: 12 }),
111
+ onClick: fn(),
112
+ actionLabel: 'Open interventions filter',
113
+ },
114
+ {
115
+ id: 'exclusions',
116
+ children: 'Internal exclusions',
117
+ onClick: fn(),
118
+ actionLabel: 'Open internal exclusions filter',
119
+ disabled: true,
120
+ },
121
+ ];
122
+ const OVERFLOW_ITEMS = [
123
+ {
124
+ id: 'date',
125
+ children: 'Wed, 05 Feb 2025 AM',
126
+ onClick: fn(),
127
+ actionLabel: 'Open attendance date filter',
128
+ },
129
+ {
130
+ id: 'registers',
131
+ children: 'Attendance registers',
132
+ onClick: fn(),
133
+ actionLabel: 'Open attendance registers filter',
134
+ },
135
+ {
136
+ id: 'interventions',
137
+ children: 'Interventions',
138
+ onClick: fn(),
139
+ actionLabel: 'Open interventions filter',
140
+ },
141
+ {
142
+ id: 'exclusions',
143
+ children: 'Internal exclusions',
144
+ onClick: fn(),
145
+ actionLabel: 'Open internal exclusions filter',
146
+ },
147
+ ];
148
+ function TagListDocsPage() {
149
+ return (_jsxs(_Fragment, { children: [_jsx(Title, {}), _jsx(Subtitle, {}), _jsx(Markdown, { children: DESCRIPTION_INTRO }), _jsx(DocHeading, { children: "Interactive example" }), _jsx(Markdown, { children: PROPS_INTRO }), _jsx(DocPrimary, {}), _jsx(Controls, {}), _jsx(DocHeading, { children: "Usage guidance" }), _jsx(Markdown, { children: USAGE_GUIDANCE }), _jsx(DocHeading, { children: "Developer notes" }), _jsx(Markdown, { children: DEVELOPER_NOTES }), _jsx(DocHeading, { children: "Examples" }), _jsx(Stories, { title: "" }), _jsx(Markdown, { children: RELATED_COMPONENTS })] }));
150
+ }
151
+ const meta = {
152
+ title: 'Components/TagList',
153
+ component: TagList,
154
+ tags: ['autodocs'],
155
+ parameters: {
156
+ layout: 'padded',
157
+ docs: {
158
+ page: TagListDocsPage,
159
+ },
160
+ },
161
+ argTypes: {
162
+ ariaLabel: {
163
+ control: 'text',
164
+ description: 'Accessible name applied to the rendered tag list.',
165
+ table: {
166
+ type: { summary: 'string' },
167
+ },
168
+ },
169
+ wrap: {
170
+ control: 'boolean',
171
+ description: 'Allows tags to wrap onto multiple lines instead of staying in a single row.',
172
+ table: {
173
+ type: { summary: 'boolean' },
174
+ defaultValue: { summary: 'false' },
175
+ },
176
+ },
177
+ collapseOverflow: {
178
+ control: 'boolean',
179
+ description: 'Collapses hidden tags behind `+N more` when wrapping is off.',
180
+ table: {
181
+ type: { summary: 'boolean' },
182
+ defaultValue: { summary: 'false' },
183
+ },
184
+ },
185
+ overflowActionLabel: {
186
+ control: 'text',
187
+ description: 'Accessible label for the overflow summary when `overflowOnClick` makes it interactive.',
188
+ table: {
189
+ type: { summary: 'string' },
190
+ },
191
+ },
192
+ overflowDisabled: {
193
+ control: 'boolean',
194
+ description: 'Disables the clickable overflow summary when `overflowOnClick` is present.',
195
+ table: {
196
+ type: { summary: 'boolean' },
197
+ defaultValue: { summary: 'false' },
198
+ },
199
+ },
200
+ overflowColor: {
201
+ control: 'select',
202
+ options: ['neutral', 'orange', 'blue', 'green', 'purple', 'teal', 'salmon', 'yellow'],
203
+ description: 'Colour used for the overflow summary tag.',
204
+ table: {
205
+ type: { summary: 'Tag.Color' },
206
+ defaultValue: { summary: 'neutral' },
207
+ },
208
+ },
209
+ items: { control: false, description: 'Complex item data for the rendered tags.' },
210
+ className: { control: false, description: 'Optional class name applied to the root wrapper.' },
211
+ emptyState: { control: false, description: 'Content shown when `items` is empty.' },
212
+ returnFocusRef: { control: false, description: 'Optional fallback element to focus when removal leaves no tag targets.' },
213
+ highlightedItemIndex: { control: false, description: 'Controlled visual highlight for a specific item index.' },
214
+ onHighlightedItemIndexChange: { control: false, description: 'Callback fired when the internal roving target changes item.' },
215
+ overflowRenderer: { control: false, description: 'Custom renderer for the overflow summary content.' },
216
+ overflowOnClick: { control: false, description: 'Optional callback that makes `+N more` interactive.' },
217
+ overflowAriaControls: { control: false, description: 'Optional `aria-controls` value forwarded to the overflow button.' },
218
+ overflowAriaExpanded: { control: false, description: 'Optional `aria-expanded` value forwarded to the overflow button.' },
219
+ },
220
+ };
221
+ export default meta;
222
+ const withDescription = (story, description) => ({
223
+ ...story,
224
+ parameters: {
225
+ ...story.parameters,
226
+ docs: {
227
+ ...story.parameters?.docs,
228
+ description: {
229
+ story: description,
230
+ },
231
+ },
232
+ },
233
+ });
234
+ const DefaultTemplate = (args) => (_jsx("div", { style: STORY_SHELL_STYLE, children: _jsx(TagList, { ...args }) }));
235
+ const WrapTemplate = () => (_jsx("div", { style: NARROW_SHELL_STYLE, children: _jsx(TagList, { items: DEFAULT_ITEMS, ariaLabel: "Wrapped attendance filters", wrap: true }) }));
236
+ const CollapsedOverflowInteractiveTemplate = () => {
237
+ const [open, setOpen] = useState(false);
238
+ return (_jsxs(_Fragment, { children: [_jsx("div", { style: NARROW_SHELL_STYLE, children: _jsx(TagList, { items: OVERFLOW_ITEMS, ariaLabel: "Collapsed attendance filters", collapseOverflow: true, overflowOnClick: () => setOpen(true), overflowActionLabel: "Open hidden filters example" }) }), _jsx(Modal, { open: open, closeHandler: () => setOpen(false), title: "Hidden filters example", children: _jsxs(Modal.Body, { children: [_jsxs("p", { style: { margin: 0 }, children: ["This modal is only an example of what authors might open from", ' ', _jsx("strong", { children: "+N more" }), ". `TagList` does not decide how hidden items are managed."] }), _jsx("p", { style: { marginBottom: 0 }, children: "In production, the consuming application chooses the real surface, such as a modal, slideover, local disclosure panel, or another editing flow." })] }) })] }));
239
+ };
240
+ const ReturnFocusTemplate = () => {
241
+ const [itemIds, setItemIds] = useState(['date', 'registers']);
242
+ const homeButtonRef = useRef(null);
243
+ const items = itemIds.map((itemId) => {
244
+ if (itemId === 'date') {
245
+ return {
246
+ id: itemId,
247
+ children: 'Wed, 05 Feb 2025 AM',
248
+ onClick: fn(),
249
+ actionLabel: 'Open attendance date filter',
250
+ onRemove: () => setItemIds(current => current.filter(id => id !== itemId)),
251
+ removeLabel: 'Remove attendance date filter',
252
+ };
253
+ }
254
+ return {
255
+ id: itemId,
256
+ children: 'Attendance registers',
257
+ onClick: fn(),
258
+ actionLabel: 'Open attendance registers filter',
259
+ onRemove: () => setItemIds(current => current.filter(id => id !== itemId)),
260
+ removeLabel: 'Remove attendance registers filter',
261
+ };
262
+ });
263
+ return (_jsx("div", { style: STORY_SHELL_STYLE, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--spacing-medium)' }, children: [_jsx(TagList, { items: items, ariaLabel: "Applied attendance filters", returnFocusRef: homeButtonRef }), _jsx("button", { ref: homeButtonRef, type: "button", children: "Return to toolbar" })] }) }));
264
+ };
265
+ export const Default = withDescription({
266
+ args: {
267
+ items: DEFAULT_ITEMS,
268
+ ariaLabel: 'Applied attendance filters',
269
+ wrap: false,
270
+ collapseOverflow: false,
271
+ overflowActionLabel: 'Show more filters',
272
+ overflowDisabled: false,
273
+ overflowColor: 'neutral',
274
+ },
275
+ render: args => _jsx(DefaultTemplate, { ...args }),
276
+ }, 'The controls-friendly reference story. It shows the shared action and remove affordances, disabled items, and the default single-row layout without forcing overflow.');
277
+ export const Empty = withDescription({
278
+ args: {
279
+ items: [],
280
+ emptyState: _jsx("span", { children: "No filters set" }),
281
+ },
282
+ parameters: {
283
+ controls: { disable: true },
284
+ docs: {
285
+ source: {
286
+ language: 'tsx',
287
+ code: `
288
+ import { TagList } from '../tagList/TagList.js';
289
+
290
+ function EmptyTagListExample() {
291
+ return <TagList items={[]} emptyState={<span>No filters set</span>} />;
292
+ }
293
+
294
+ export default EmptyTagListExample;
295
+ `.trim(),
296
+ },
297
+ },
298
+ },
299
+ }, 'Renders the provided empty-state content when there are no items. If `emptyState` is omitted, `TagList` renders nothing for an empty list.');
300
+ export const Wrap = withDescription({
301
+ args: {
302
+ items: DEFAULT_ITEMS,
303
+ },
304
+ parameters: {
305
+ controls: { disable: true },
306
+ docs: {
307
+ source: {
308
+ language: 'tsx',
309
+ code: `
310
+ import { TagList } from '../tagList/TagList.js';
311
+
312
+ const items = [
313
+ { id: 'date', children: 'Wed, 05 Feb 2025 AM' },
314
+ { id: 'registers', children: 'Attendance registers' },
315
+ { id: 'interventions', children: 'Interventions' },
316
+ { id: 'exclusions', children: 'Internal exclusions' },
317
+ ];
318
+
319
+ function WrappedTagListExample() {
320
+ return (
321
+ <div style={{ width: '22.5rem', maxWidth: '100%', padding: 'var(--spacing-medium)', boxSizing: 'border-box' }}>
322
+ <TagList
323
+ items={items}
324
+ ariaLabel="Wrapped attendance filters"
325
+ wrap
326
+ />
327
+ </div>
328
+ );
329
+ }
330
+
331
+ export default WrappedTagListExample;
332
+ `.trim(),
333
+ },
334
+ },
335
+ },
336
+ render: () => _jsx(WrapTemplate, {}),
337
+ }, 'Wrapping is the multiline mode. Use it when hidden tags should stay visible by flowing onto the next line rather than collapsing behind a summary.');
338
+ export const ReturnFocusFallback = withDescription({
339
+ args: {
340
+ items: DEFAULT_ITEMS,
341
+ },
342
+ parameters: {
343
+ controls: { disable: true },
344
+ docs: {
345
+ source: {
346
+ language: 'tsx',
347
+ code: `
348
+ import { useRef, useState } from 'react';
349
+ import { TagList } from '../tagList/TagList.js';
350
+
351
+ function ReturnFocusFallbackExample() {
352
+ const [itemIds, setItemIds] = useState(['date', 'registers']);
353
+ const homeButtonRef = useRef<HTMLButtonElement>(null);
354
+ const items = itemIds.map(itemId => ({
355
+ id: itemId,
356
+ children: itemId === 'date' ? 'Wed, 05 Feb 2025 AM' : 'Attendance registers',
357
+ onClick: () => {},
358
+ onRemove: () => setItemIds(current => current.filter(id => id !== itemId)),
359
+ removeLabel: itemId === 'date' ? 'Remove attendance date filter' : 'Remove attendance registers filter',
360
+ }));
361
+
362
+ return (
363
+ <>
364
+ <TagList
365
+ items={items}
366
+ ariaLabel="Applied attendance filters"
367
+ returnFocusRef={homeButtonRef}
368
+ />
369
+ <button ref={homeButtonRef} type="button">Return to toolbar</button>
370
+ </>
371
+ );
372
+ }
373
+
374
+ export default ReturnFocusFallbackExample;
375
+ `.trim(),
376
+ },
377
+ },
378
+ },
379
+ render: () => _jsx(ReturnFocusTemplate, {}),
380
+ }, 'A focused fallback example. Tab to a tag, press ArrowRight to move onto the remove button, then remove tags sequentially. When the final removable target disappears, focus returns to the provided home button.');
381
+ export const CollapsedOverflowInteractive = withDescription({
382
+ args: {
383
+ items: OVERFLOW_ITEMS,
384
+ },
385
+ parameters: {
386
+ controls: { disable: true },
387
+ docs: {
388
+ source: {
389
+ language: 'tsx',
390
+ code: `
391
+ import { useState } from 'react';
392
+ import { Modal } from '../modal/Modal.js';
393
+ import { TagList } from '../tagList/TagList.js';
394
+
395
+ const items = [
396
+ { id: 'date', children: 'Wed, 05 Feb 2025 AM', onClick: () => {} },
397
+ { id: 'registers', children: 'Attendance registers', onClick: () => {} },
398
+ { id: 'interventions', children: 'Interventions', onClick: () => {} },
399
+ { id: 'exclusions', children: 'Internal exclusions', onClick: () => {} },
400
+ ];
401
+
402
+ function CollapsedOverflowInteractiveExample() {
403
+ const [open, setOpen] = useState(false);
404
+
405
+ return (
406
+ <>
407
+ <div style={{ width: '22.5rem', maxWidth: '100%', padding: 'var(--spacing-medium)', boxSizing: 'border-box', backgroundColor: 'var(--color-mono-white)' }}>
408
+ <TagList
409
+ items={items}
410
+ ariaLabel="Collapsed attendance filters"
411
+ collapseOverflow
412
+ overflowOnClick={() => setOpen(true)}
413
+ overflowActionLabel="Open hidden filters example"
414
+ />
415
+ </div>
416
+ <Modal
417
+ open={open}
418
+ closeHandler={() => setOpen(false)}
419
+ title="Hidden filters example"
420
+ >
421
+ <Modal.Body>
422
+ <p style={{ margin: 0 }}>
423
+ This modal is only an example of what authors might open from <strong>+N more</strong>.
424
+ TagList does not decide how hidden items are managed.
425
+ </p>
426
+ <p style={{ marginBottom: 0 }}>
427
+ In production, the consuming application chooses the real surface, such as a modal,
428
+ slideover, local disclosure panel, or another editing flow.
429
+ </p>
430
+ </Modal.Body>
431
+ </Modal>
432
+ </>
433
+ );
434
+ }
435
+
436
+ export default CollapsedOverflowInteractiveExample;
437
+ `.trim(),
438
+ },
439
+ },
440
+ },
441
+ render: () => _jsx(CollapsedOverflowInteractiveTemplate, {}),
442
+ }, 'The callback-wired overflow mode. This example opens a modal, but that is only illustrative: `TagList` calls `overflowOnClick`, and the consuming application decides which management surface handles the hidden items.');
443
+ //# sourceMappingURL=TagList.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagList.stories.js","sourceRoot":"","sources":["../../../src/components/tagList/TagList.stories.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import '@testing-library/jest-dom/vitest';
2
- //# sourceMappingURL=IcoText.test.d.ts.map
2
+ //# sourceMappingURL=TagList.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagList.test.d.ts","sourceRoot":"","sources":["../../../src/components/tagList/TagList.test.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}