@digdir/designsystemet-react 1.11.1 → 1.12.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.
- package/dist/cjs/components/Combobox/Combobox.js +1 -0
- package/dist/cjs/components/Combobox/Option/useComboboxOption.js +1 -0
- package/dist/cjs/components/Combobox/useComboboxKeyboard.js +1 -0
- package/dist/cjs/components/avatar/avatar.js +2 -2
- package/dist/cjs/components/breadcrumbs/breadcrumbs-link.js +2 -1
- package/dist/cjs/components/breadcrumbs/breadcrumbs-list.js +1 -11
- package/dist/cjs/components/breadcrumbs/breadcrumbs.js +2 -1
- package/dist/cjs/components/button/button.js +8 -3
- package/dist/cjs/components/card/card.js +17 -9
- package/dist/cjs/components/details/details-summary.js +3 -3
- package/dist/cjs/components/details/details.js +2 -2
- package/dist/cjs/components/dialog/dialog-trigger-context.js +5 -6
- package/dist/cjs/components/dialog/dialog-trigger.js +3 -8
- package/dist/cjs/components/dialog/dialog.js +25 -55
- package/dist/cjs/components/error-summary/error-summary-heading.js +2 -8
- package/dist/cjs/components/error-summary/error-summary.js +4 -9
- package/dist/cjs/components/field/field-counter.js +6 -41
- package/dist/cjs/components/field/field-description.js +2 -1
- package/dist/cjs/components/field/field.js +6 -4
- package/dist/cjs/components/label/label.js +2 -1
- package/dist/cjs/components/pagination/pagination-button.js +5 -3
- package/dist/cjs/components/pagination/pagination.js +7 -3
- package/dist/cjs/components/popover/popover-trigger.js +6 -10
- package/dist/cjs/components/popover/popover.js +15 -62
- package/dist/cjs/components/select/select.js +2 -12
- package/dist/cjs/components/skeleton/skeleton.js +1 -0
- package/dist/cjs/components/spinner/spinner.js +1 -0
- package/dist/cjs/components/suggestion/suggestion-clear.js +4 -2
- package/dist/cjs/components/suggestion/suggestion-empty.js +3 -1
- package/dist/cjs/components/suggestion/suggestion-input.js +4 -3
- package/dist/cjs/components/suggestion/suggestion-list.js +5 -41
- package/dist/cjs/components/suggestion/suggestion-option.js +3 -1
- package/dist/cjs/components/suggestion/suggestion.js +9 -9
- package/dist/cjs/components/tabs/tabs-list.js +4 -7
- package/dist/cjs/components/tabs/tabs-panel.js +5 -28
- package/dist/cjs/components/tabs/tabs-tab.js +11 -9
- package/dist/cjs/components/tabs/tabs.js +16 -6
- package/dist/cjs/components/toggle-group/index.js +1 -1
- package/dist/cjs/components/toggle-group/toggle-group-item.js +8 -6
- package/dist/cjs/components/toggle-group/toggle-group.js +6 -6
- package/dist/cjs/components/tooltip/tooltip.js +6 -147
- package/dist/cjs/components/validation-message/validation-message.js +2 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/utilities/hooks/use-pagination/use-pagination.js +13 -25
- package/dist/cjs/utilities/index.js +17 -0
- package/dist/cjs/utilities/roving-focus/roving-focus-item.js +2 -0
- package/dist/cjs/utilities/roving-focus/roving-focus-root.js +4 -0
- package/dist/cjs/utilities/roving-focus/use-roving-focus.js +3 -1
- package/dist/esm/components/Combobox/Combobox.js +1 -0
- package/dist/esm/components/Combobox/Option/useComboboxOption.js +1 -0
- package/dist/esm/components/Combobox/useComboboxKeyboard.js +1 -0
- package/dist/esm/components/avatar/avatar.js +2 -2
- package/dist/esm/components/breadcrumbs/breadcrumbs-link.js +2 -1
- package/dist/esm/components/breadcrumbs/breadcrumbs-list.js +2 -12
- package/dist/esm/components/breadcrumbs/breadcrumbs.js +2 -1
- package/dist/esm/components/button/button.js +9 -4
- package/dist/esm/components/card/card.js +18 -10
- package/dist/esm/components/details/details-summary.js +3 -3
- package/dist/esm/components/details/details.js +2 -2
- package/dist/esm/components/dialog/dialog-trigger-context.js +6 -7
- package/dist/esm/components/dialog/dialog-trigger.js +3 -8
- package/dist/esm/components/dialog/dialog.js +26 -56
- package/dist/esm/components/error-summary/error-summary-heading.js +3 -9
- package/dist/esm/components/error-summary/error-summary.js +6 -10
- package/dist/esm/components/field/field-counter.js +8 -43
- package/dist/esm/components/field/field-description.js +2 -1
- package/dist/esm/components/field/field.js +7 -5
- package/dist/esm/components/label/label.js +2 -1
- package/dist/esm/components/pagination/pagination-button.js +5 -3
- package/dist/esm/components/pagination/pagination.js +7 -3
- package/dist/esm/components/popover/popover-trigger.js +6 -10
- package/dist/esm/components/popover/popover.js +15 -62
- package/dist/esm/components/select/select.js +2 -12
- package/dist/esm/components/skeleton/skeleton.js +1 -0
- package/dist/esm/components/spinner/spinner.js +1 -0
- package/dist/esm/components/suggestion/suggestion-clear.js +4 -2
- package/dist/esm/components/suggestion/suggestion-empty.js +3 -1
- package/dist/esm/components/suggestion/suggestion-input.js +4 -3
- package/dist/esm/components/suggestion/suggestion-list.js +5 -41
- package/dist/esm/components/suggestion/suggestion-option.js +3 -1
- package/dist/esm/components/suggestion/suggestion.js +9 -9
- package/dist/esm/components/tabs/tabs-list.js +5 -8
- package/dist/esm/components/tabs/tabs-panel.js +6 -29
- package/dist/esm/components/tabs/tabs-tab.js +12 -10
- package/dist/esm/components/tabs/tabs.js +17 -7
- package/dist/esm/components/toggle-group/index.js +1 -1
- package/dist/esm/components/toggle-group/toggle-group-item.js +10 -8
- package/dist/esm/components/toggle-group/toggle-group.js +7 -7
- package/dist/esm/components/tooltip/tooltip.js +8 -149
- package/dist/esm/components/validation-message/validation-message.js +2 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/utilities/hooks/use-pagination/use-pagination.js +13 -25
- package/dist/esm/utilities/index.js +11 -0
- package/dist/esm/utilities/roving-focus/roving-focus-item.js +2 -0
- package/dist/esm/utilities/roving-focus/roving-focus-root.js +4 -0
- package/dist/esm/utilities/roving-focus/use-roving-focus.js +3 -1
- package/dist/react-types.d.ts +8 -0
- package/dist/types/components/avatar/avatar.d.ts +12 -7
- package/dist/types/components/avatar/avatar.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs-link.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs-list.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +5 -3
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/types/components/button/button.d.ts +1 -1
- package/dist/types/components/button/button.d.ts.map +1 -1
- package/dist/types/components/card/card.d.ts.map +1 -1
- package/dist/types/components/details/details-summary.d.ts.map +1 -1
- package/dist/types/components/details/details.d.ts +1 -1
- package/dist/types/components/details/details.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog-trigger-context.d.ts +10 -3
- package/dist/types/components/dialog/dialog-trigger-context.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog-trigger.d.ts +1 -1
- package/dist/types/components/dialog/dialog-trigger.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog.d.ts +3 -3
- package/dist/types/components/dialog/dialog.d.ts.map +1 -1
- package/dist/types/components/dropdown/dropdown.d.ts +1 -2
- package/dist/types/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/types/components/error-summary/error-summary-heading.d.ts.map +1 -1
- package/dist/types/components/error-summary/error-summary.d.ts +6 -6
- package/dist/types/components/error-summary/error-summary.d.ts.map +1 -1
- package/dist/types/components/field/field-counter.d.ts +2 -8
- package/dist/types/components/field/field-counter.d.ts.map +1 -1
- package/dist/types/components/field/field-description.d.ts.map +1 -1
- package/dist/types/components/field/field.d.ts +6 -2
- package/dist/types/components/field/field.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/input/input.d.ts +13 -1
- package/dist/types/components/input/input.d.ts.map +1 -1
- package/dist/types/components/label/label.d.ts.map +1 -1
- package/dist/types/components/pagination/pagination-button.d.ts +13 -4
- package/dist/types/components/pagination/pagination-button.d.ts.map +1 -1
- package/dist/types/components/pagination/pagination.d.ts +27 -5
- package/dist/types/components/pagination/pagination.d.ts.map +1 -1
- package/dist/types/components/popover/popover-trigger.d.ts.map +1 -1
- package/dist/types/components/popover/popover.d.ts +2 -14
- package/dist/types/components/popover/popover.d.ts.map +1 -1
- package/dist/types/components/search/search-button.d.ts +1 -1
- package/dist/types/components/select/select.d.ts +2 -0
- package/dist/types/components/select/select.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-clear.d.ts +7 -5
- package/dist/types/components/suggestion/suggestion-clear.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-empty.d.ts +1 -0
- package/dist/types/components/suggestion/suggestion-empty.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-input.d.ts +2 -1
- package/dist/types/components/suggestion/suggestion-input.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-list.d.ts +1 -1
- package/dist/types/components/suggestion/suggestion-list.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-option.d.ts +1 -0
- package/dist/types/components/suggestion/suggestion-option.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion.d.ts +5 -6
- package/dist/types/components/suggestion/suggestion.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-list.d.ts +4 -2
- package/dist/types/components/tabs/tabs-list.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-panel.d.ts +4 -2
- package/dist/types/components/tabs/tabs-panel.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-tab.d.ts +4 -2
- package/dist/types/components/tabs/tabs-tab.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs.d.ts +6 -6
- package/dist/types/components/tabs/tabs.d.ts.map +1 -1
- package/dist/types/components/textfield/textfield.d.ts.map +1 -1
- package/dist/types/components/toggle-group/index.d.ts +1 -1
- package/dist/types/components/toggle-group/toggle-group-item.d.ts +12 -3
- package/dist/types/components/toggle-group/toggle-group-item.d.ts.map +1 -1
- package/dist/types/components/toggle-group/toggle-group.d.ts +12 -4
- package/dist/types/components/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/types/components/tooltip/tooltip.d.ts +10 -3
- package/dist/types/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/types/components/validation-message/validation-message.d.ts.map +1 -1
- package/dist/types/types.d.ts +2 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts +1 -1
- package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts.map +1 -1
- package/dist/types/utilities/index.d.ts +6 -0
- package/dist/types/utilities/index.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/roving-focus-item.d.ts +1 -0
- package/dist/types/utilities/roving-focus/roving-focus-item.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/roving-focus-root.d.ts +1 -0
- package/dist/types/utilities/roving-focus/roving-focus-root.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/use-roving-focus.d.ts +3 -1
- package/dist/types/utilities/roving-focus/use-roving-focus.d.ts.map +1 -1
- package/package.json +11 -14
- package/dist/cjs/components/field/field-observer.js +0 -112
- package/dist/cjs/components/toggle-group/use-toggle-groupitem.js +0 -34
- package/dist/esm/components/field/field-observer.js +0 -107
- package/dist/esm/components/toggle-group/use-toggle-groupitem.js +0 -32
- package/dist/types/components/field/field-observer.d.ts +0 -5
- package/dist/types/components/field/field-observer.d.ts.map +0 -1
- package/dist/types/components/toggle-group/use-toggle-groupitem.d.ts +0 -12
- package/dist/types/components/toggle-group/use-toggle-groupitem.d.ts.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { HTMLAttributes } from 'react';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
@deprecated useRovingFocus is deprecated.
|
|
4
|
+
Handles props for `RovingFocus` in context with `RovingFocusRoot` */
|
|
3
5
|
export declare const useRovingFocus: (value: string) => {
|
|
4
6
|
getOrderedItems: () => import("./roving-focus-root").RovingFocusElement[];
|
|
5
7
|
isFocusable: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-roving-focus.d.ts","sourceRoot":"","sources":["../../../src/utilities/roving-focus/use-roving-focus.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C
|
|
1
|
+
{"version":3,"file":"use-roving-focus.d.ts","sourceRoot":"","sources":["../../../src/utilities/roving-focus/use-roving-focus.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C;;oEAEoE;AACpE,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM;;;;qBAcvB,CAAC,SAAS,WAAW,SAAS,cAAc,CAAC,CAAC,CAAC;uBAE/C,WAAW,GAAG,IAAI;uBAOlB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;qBAOxB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digdir/designsystemet-react",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.12.0",
|
|
5
5
|
"description": "React components for Designsystemet",
|
|
6
6
|
"author": "Designsystemet team",
|
|
7
7
|
"repository": {
|
|
@@ -37,36 +37,33 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@floating-ui/dom": "^1.7.5",
|
|
39
39
|
"@floating-ui/react": "0.26.23",
|
|
40
|
-
"@navikt/aksel-icons": "^8.
|
|
40
|
+
"@navikt/aksel-icons": "^8.4.1",
|
|
41
41
|
"@radix-ui/react-slot": "^1.2.4",
|
|
42
42
|
"@tanstack/react-virtual": "^3.13.18",
|
|
43
|
-
"@u-elements/u-combobox": "^1.0.7",
|
|
44
|
-
"@u-elements/u-datalist": "^1.1.0",
|
|
45
|
-
"@u-elements/u-details": "^0.1.5",
|
|
46
43
|
"clsx": "^2.1.1",
|
|
47
|
-
"@digdir/designsystemet-types": "^1.
|
|
44
|
+
"@digdir/designsystemet-types": "^1.12.0",
|
|
45
|
+
"@digdir/designsystemet-web": "^1.12.0"
|
|
48
46
|
},
|
|
49
47
|
"devDependencies": {
|
|
50
48
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
51
49
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
52
|
-
"@storybook/addon-docs": "^10.2.
|
|
53
|
-
"@storybook/addon-vitest": "^10.2.
|
|
54
|
-
"@storybook/react-vite": "^10.2.
|
|
50
|
+
"@storybook/addon-docs": "^10.2.8",
|
|
51
|
+
"@storybook/addon-vitest": "^10.2.8",
|
|
52
|
+
"@storybook/react-vite": "^10.2.8",
|
|
55
53
|
"@testing-library/jest-dom": "^6.9.1",
|
|
56
54
|
"@testing-library/react": "^16.3.2",
|
|
57
55
|
"@testing-library/user-event": "^14.6.1",
|
|
58
|
-
"@types/react": "^19.2.
|
|
56
|
+
"@types/react": "^19.2.14",
|
|
59
57
|
"@types/react-dom": "^19.2.3",
|
|
60
58
|
"react": "^19.2.4",
|
|
61
59
|
"react-dom": "^19.2.4",
|
|
62
|
-
"rimraf": "^6.1.
|
|
60
|
+
"rimraf": "^6.1.3",
|
|
63
61
|
"rollup": "^4.57.1",
|
|
64
62
|
"rollup-plugin-copy": "^3.5.0",
|
|
65
|
-
"storybook": "^10.2.
|
|
63
|
+
"storybook": "^10.2.8",
|
|
66
64
|
"tsx": "4.21.0",
|
|
67
65
|
"typescript": "^5.9.3",
|
|
68
|
-
"@digdir/designsystemet-css": "^1.
|
|
69
|
-
"@digdir/designsystemet": "^1.11.1"
|
|
66
|
+
"@digdir/designsystemet-css": "^1.12.0"
|
|
70
67
|
},
|
|
71
68
|
"scripts": {
|
|
72
69
|
"build": "pnpm run clean && tsc -b tsconfig.lib.json --emitDeclarationOnly false && rollup -c --bundleConfigAsCjs",
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
function fieldObserver(fieldElement) {
|
|
5
|
-
if (!fieldElement)
|
|
6
|
-
return;
|
|
7
|
-
const elements = new Map();
|
|
8
|
-
const typeCounter = new Map(); // Track count for each data-field type
|
|
9
|
-
const uuid = `:${Date.now().toString(36)}${Math.random().toString(36).slice(2, 5)}`;
|
|
10
|
-
let input = null;
|
|
11
|
-
let describedby = '';
|
|
12
|
-
const process = (mutations) => {
|
|
13
|
-
const changed = [];
|
|
14
|
-
const removed = [];
|
|
15
|
-
// Merge MutationRecords
|
|
16
|
-
for (const mutation of mutations) {
|
|
17
|
-
if (mutation.attributeName)
|
|
18
|
-
changed.push(mutation.target ?? fieldElement);
|
|
19
|
-
changed.push(...(mutation.addedNodes || []));
|
|
20
|
-
removed.push(...(mutation.removedNodes || []));
|
|
21
|
-
}
|
|
22
|
-
// Register elements
|
|
23
|
-
for (const el of changed) {
|
|
24
|
-
if (!isElement(el))
|
|
25
|
-
continue;
|
|
26
|
-
if (isLabel(el))
|
|
27
|
-
elements.set(el, el.htmlFor);
|
|
28
|
-
else if (el.hasAttribute('data-field'))
|
|
29
|
-
elements.set(el, el.id);
|
|
30
|
-
else if (isInputLike(el) && !el.hidden) {
|
|
31
|
-
input = el;
|
|
32
|
-
describedby = el.getAttribute('aria-describedby') || '';
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// Reset removed elements
|
|
36
|
-
for (const el of removed) {
|
|
37
|
-
if (!isElement(el))
|
|
38
|
-
continue;
|
|
39
|
-
if (input === el)
|
|
40
|
-
input = null;
|
|
41
|
-
if (elements.has(el)) {
|
|
42
|
-
setAttr(el, isLabel(el) ? 'for' : 'id', elements.get(el));
|
|
43
|
-
elements.delete(el);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Connect elements
|
|
47
|
-
const describedbyIds = describedby ? describedby.split(' ') : []; // Keep original aria-describedby
|
|
48
|
-
const inputId = input?.id || uuid;
|
|
49
|
-
// Reset type counters since we reprocess all elements
|
|
50
|
-
typeCounter.clear();
|
|
51
|
-
for (const [el, value] of elements) {
|
|
52
|
-
const descriptionType = el.getAttribute('data-field');
|
|
53
|
-
let id;
|
|
54
|
-
if (descriptionType) {
|
|
55
|
-
// Increment type counter for this type
|
|
56
|
-
const count = (typeCounter.get(descriptionType) || 0) + 1;
|
|
57
|
-
typeCounter.set(descriptionType, count);
|
|
58
|
-
id = `${inputId}:${descriptionType}:${count}`;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
id = inputId;
|
|
62
|
-
}
|
|
63
|
-
if (!value)
|
|
64
|
-
setAttr(el, isLabel(el) ? 'for' : 'id', id); // Ensure we have a value
|
|
65
|
-
if (!describedbyIds.includes(el.id)) {
|
|
66
|
-
if (descriptionType === 'validation')
|
|
67
|
-
describedbyIds.unshift(el.id); // Validations to the front
|
|
68
|
-
else if (descriptionType)
|
|
69
|
-
describedbyIds.push(el.id); // Other descriptions to the back
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
setAttr(input, 'id', inputId);
|
|
73
|
-
setAttr(input, 'aria-describedby', describedbyIds.join(' ').trim());
|
|
74
|
-
};
|
|
75
|
-
const observer = createOptimizedMutationObserver(process);
|
|
76
|
-
observer.observe(fieldElement, {
|
|
77
|
-
attributeFilter: ['id', 'for', 'aria-describedby'],
|
|
78
|
-
attributes: true,
|
|
79
|
-
childList: true,
|
|
80
|
-
subtree: true,
|
|
81
|
-
});
|
|
82
|
-
process([{ addedNodes: fieldElement.querySelectorAll('*') }]); // Initial setup
|
|
83
|
-
observer.takeRecords(); // Clear initial setup queue
|
|
84
|
-
return () => observer.disconnect();
|
|
85
|
-
}
|
|
86
|
-
// Utilities
|
|
87
|
-
const isElement = (node) => node instanceof Element;
|
|
88
|
-
const isLabel = (node) => node instanceof HTMLLabelElement;
|
|
89
|
-
const isInputLike = (node) => node instanceof HTMLElement &&
|
|
90
|
-
'validity' in node &&
|
|
91
|
-
!(node instanceof HTMLButtonElement); // Matches input, textarea, select and form accosiated custom elements
|
|
92
|
-
const setAttr = (el, name, value) => value ? el?.setAttribute(name, value) : el?.removeAttribute(name);
|
|
93
|
-
// Speed up MutationObserver by debouncing, clearing internal queue after changes and only running when page is visible
|
|
94
|
-
function createOptimizedMutationObserver(callback) {
|
|
95
|
-
const queue = [];
|
|
96
|
-
const observer = new MutationObserver((mutations) => {
|
|
97
|
-
if (!queue.length)
|
|
98
|
-
requestAnimationFrame(process);
|
|
99
|
-
queue.push(...mutations);
|
|
100
|
-
});
|
|
101
|
-
const process = () => {
|
|
102
|
-
callback(queue, observer);
|
|
103
|
-
queue.length = 0; // Reset queue
|
|
104
|
-
observer.takeRecords(); // Clear queue due to DOM changes in callback
|
|
105
|
-
};
|
|
106
|
-
return observer;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
exports.fieldObserver = fieldObserver;
|
|
110
|
-
exports.isElement = isElement;
|
|
111
|
-
exports.isInputLike = isInputLike;
|
|
112
|
-
exports.isLabel = isLabel;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var toggleGroup = require('./toggle-group.js');
|
|
6
|
-
|
|
7
|
-
/** Handles props for `ToggleGroup.Item` in context with `ToggleGroup` and `RovingFocus` */
|
|
8
|
-
const useToggleGroupItem = (props) => {
|
|
9
|
-
const { ...rest } = props;
|
|
10
|
-
const genValue = react.useId();
|
|
11
|
-
const toggleGroup$1 = react.useContext(toggleGroup.ToggleGroupContext);
|
|
12
|
-
const value = props.value ?? genValue;
|
|
13
|
-
const active = toggleGroup$1.value === value;
|
|
14
|
-
const variant = toggleGroup$1.variant;
|
|
15
|
-
const buttonId = `togglegroup-item-${react.useId()}`;
|
|
16
|
-
return {
|
|
17
|
-
...rest,
|
|
18
|
-
active: active,
|
|
19
|
-
value,
|
|
20
|
-
variant,
|
|
21
|
-
buttonProps: {
|
|
22
|
-
id: buttonId,
|
|
23
|
-
'aria-checked': active,
|
|
24
|
-
'aria-current': active,
|
|
25
|
-
role: 'radio',
|
|
26
|
-
name: toggleGroup$1.name,
|
|
27
|
-
onClick: () => {
|
|
28
|
-
toggleGroup$1.onChange?.(value);
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
exports.useToggleGroupItem = useToggleGroupItem;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
function fieldObserver(fieldElement) {
|
|
3
|
-
if (!fieldElement)
|
|
4
|
-
return;
|
|
5
|
-
const elements = new Map();
|
|
6
|
-
const typeCounter = new Map(); // Track count for each data-field type
|
|
7
|
-
const uuid = `:${Date.now().toString(36)}${Math.random().toString(36).slice(2, 5)}`;
|
|
8
|
-
let input = null;
|
|
9
|
-
let describedby = '';
|
|
10
|
-
const process = (mutations) => {
|
|
11
|
-
const changed = [];
|
|
12
|
-
const removed = [];
|
|
13
|
-
// Merge MutationRecords
|
|
14
|
-
for (const mutation of mutations) {
|
|
15
|
-
if (mutation.attributeName)
|
|
16
|
-
changed.push(mutation.target ?? fieldElement);
|
|
17
|
-
changed.push(...(mutation.addedNodes || []));
|
|
18
|
-
removed.push(...(mutation.removedNodes || []));
|
|
19
|
-
}
|
|
20
|
-
// Register elements
|
|
21
|
-
for (const el of changed) {
|
|
22
|
-
if (!isElement(el))
|
|
23
|
-
continue;
|
|
24
|
-
if (isLabel(el))
|
|
25
|
-
elements.set(el, el.htmlFor);
|
|
26
|
-
else if (el.hasAttribute('data-field'))
|
|
27
|
-
elements.set(el, el.id);
|
|
28
|
-
else if (isInputLike(el) && !el.hidden) {
|
|
29
|
-
input = el;
|
|
30
|
-
describedby = el.getAttribute('aria-describedby') || '';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Reset removed elements
|
|
34
|
-
for (const el of removed) {
|
|
35
|
-
if (!isElement(el))
|
|
36
|
-
continue;
|
|
37
|
-
if (input === el)
|
|
38
|
-
input = null;
|
|
39
|
-
if (elements.has(el)) {
|
|
40
|
-
setAttr(el, isLabel(el) ? 'for' : 'id', elements.get(el));
|
|
41
|
-
elements.delete(el);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Connect elements
|
|
45
|
-
const describedbyIds = describedby ? describedby.split(' ') : []; // Keep original aria-describedby
|
|
46
|
-
const inputId = input?.id || uuid;
|
|
47
|
-
// Reset type counters since we reprocess all elements
|
|
48
|
-
typeCounter.clear();
|
|
49
|
-
for (const [el, value] of elements) {
|
|
50
|
-
const descriptionType = el.getAttribute('data-field');
|
|
51
|
-
let id;
|
|
52
|
-
if (descriptionType) {
|
|
53
|
-
// Increment type counter for this type
|
|
54
|
-
const count = (typeCounter.get(descriptionType) || 0) + 1;
|
|
55
|
-
typeCounter.set(descriptionType, count);
|
|
56
|
-
id = `${inputId}:${descriptionType}:${count}`;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
id = inputId;
|
|
60
|
-
}
|
|
61
|
-
if (!value)
|
|
62
|
-
setAttr(el, isLabel(el) ? 'for' : 'id', id); // Ensure we have a value
|
|
63
|
-
if (!describedbyIds.includes(el.id)) {
|
|
64
|
-
if (descriptionType === 'validation')
|
|
65
|
-
describedbyIds.unshift(el.id); // Validations to the front
|
|
66
|
-
else if (descriptionType)
|
|
67
|
-
describedbyIds.push(el.id); // Other descriptions to the back
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
setAttr(input, 'id', inputId);
|
|
71
|
-
setAttr(input, 'aria-describedby', describedbyIds.join(' ').trim());
|
|
72
|
-
};
|
|
73
|
-
const observer = createOptimizedMutationObserver(process);
|
|
74
|
-
observer.observe(fieldElement, {
|
|
75
|
-
attributeFilter: ['id', 'for', 'aria-describedby'],
|
|
76
|
-
attributes: true,
|
|
77
|
-
childList: true,
|
|
78
|
-
subtree: true,
|
|
79
|
-
});
|
|
80
|
-
process([{ addedNodes: fieldElement.querySelectorAll('*') }]); // Initial setup
|
|
81
|
-
observer.takeRecords(); // Clear initial setup queue
|
|
82
|
-
return () => observer.disconnect();
|
|
83
|
-
}
|
|
84
|
-
// Utilities
|
|
85
|
-
const isElement = (node) => node instanceof Element;
|
|
86
|
-
const isLabel = (node) => node instanceof HTMLLabelElement;
|
|
87
|
-
const isInputLike = (node) => node instanceof HTMLElement &&
|
|
88
|
-
'validity' in node &&
|
|
89
|
-
!(node instanceof HTMLButtonElement); // Matches input, textarea, select and form accosiated custom elements
|
|
90
|
-
const setAttr = (el, name, value) => value ? el?.setAttribute(name, value) : el?.removeAttribute(name);
|
|
91
|
-
// Speed up MutationObserver by debouncing, clearing internal queue after changes and only running when page is visible
|
|
92
|
-
function createOptimizedMutationObserver(callback) {
|
|
93
|
-
const queue = [];
|
|
94
|
-
const observer = new MutationObserver((mutations) => {
|
|
95
|
-
if (!queue.length)
|
|
96
|
-
requestAnimationFrame(process);
|
|
97
|
-
queue.push(...mutations);
|
|
98
|
-
});
|
|
99
|
-
const process = () => {
|
|
100
|
-
callback(queue, observer);
|
|
101
|
-
queue.length = 0; // Reset queue
|
|
102
|
-
observer.takeRecords(); // Clear queue due to DOM changes in callback
|
|
103
|
-
};
|
|
104
|
-
return observer;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export { fieldObserver, isElement, isInputLike, isLabel };
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useId, useContext } from 'react';
|
|
3
|
-
import { ToggleGroupContext } from './toggle-group.js';
|
|
4
|
-
|
|
5
|
-
/** Handles props for `ToggleGroup.Item` in context with `ToggleGroup` and `RovingFocus` */
|
|
6
|
-
const useToggleGroupItem = (props) => {
|
|
7
|
-
const { ...rest } = props;
|
|
8
|
-
const genValue = useId();
|
|
9
|
-
const toggleGroup = useContext(ToggleGroupContext);
|
|
10
|
-
const value = props.value ?? genValue;
|
|
11
|
-
const active = toggleGroup.value === value;
|
|
12
|
-
const variant = toggleGroup.variant;
|
|
13
|
-
const buttonId = `togglegroup-item-${useId()}`;
|
|
14
|
-
return {
|
|
15
|
-
...rest,
|
|
16
|
-
active: active,
|
|
17
|
-
value,
|
|
18
|
-
variant,
|
|
19
|
-
buttonProps: {
|
|
20
|
-
id: buttonId,
|
|
21
|
-
'aria-checked': active,
|
|
22
|
-
'aria-current': active,
|
|
23
|
-
role: 'radio',
|
|
24
|
-
name: toggleGroup.name,
|
|
25
|
-
onClick: () => {
|
|
26
|
-
toggleGroup.onChange?.(value);
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export { useToggleGroupItem };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare function fieldObserver(fieldElement: HTMLElement | null): (() => void) | undefined;
|
|
2
|
-
export declare const isElement: (node: Node) => node is Element;
|
|
3
|
-
export declare const isLabel: (node: Node) => node is HTMLLabelElement;
|
|
4
|
-
export declare const isInputLike: (node: unknown) => node is HTMLInputElement;
|
|
5
|
-
//# sourceMappingURL=field-observer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field-observer.d.ts","sourceRoot":"","sources":["../../../src/components/field/field-observer.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,4BAsF7D;AAGD,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,oBAA4B,CAAC;AACjE,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,6BAAqC,CAAC;AACxE,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,IAAI,IAAI,gBAGd,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ButtonProps } from '../button/button';
|
|
2
|
-
import type { ToggleGroupItemProps } from './toggle-group-item';
|
|
3
|
-
type UseToggleGroupItem = (props: ToggleGroupItemProps) => {
|
|
4
|
-
active: boolean;
|
|
5
|
-
variant?: 'primary' | 'secondary';
|
|
6
|
-
value: string;
|
|
7
|
-
buttonProps?: Pick<ButtonProps, 'id' | 'onClick' | 'role' | 'aria-checked' | 'aria-current' | 'name'>;
|
|
8
|
-
};
|
|
9
|
-
/** Handles props for `ToggleGroup.Item` in context with `ToggleGroup` and `RovingFocus` */
|
|
10
|
-
export declare const useToggleGroupItem: UseToggleGroupItem;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=use-toggle-groupitem.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-toggle-groupitem.d.ts","sourceRoot":"","sources":["../../../src/components/toggle-group/use-toggle-groupitem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,IAAI,CAChB,WAAW,EACX,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,MAAM,CACrE,CAAC;CACH,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,EAAE,kBA2BhC,CAAC"}
|