@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.
Files changed (190) hide show
  1. package/dist/cjs/components/Combobox/Combobox.js +1 -0
  2. package/dist/cjs/components/Combobox/Option/useComboboxOption.js +1 -0
  3. package/dist/cjs/components/Combobox/useComboboxKeyboard.js +1 -0
  4. package/dist/cjs/components/avatar/avatar.js +2 -2
  5. package/dist/cjs/components/breadcrumbs/breadcrumbs-link.js +2 -1
  6. package/dist/cjs/components/breadcrumbs/breadcrumbs-list.js +1 -11
  7. package/dist/cjs/components/breadcrumbs/breadcrumbs.js +2 -1
  8. package/dist/cjs/components/button/button.js +8 -3
  9. package/dist/cjs/components/card/card.js +17 -9
  10. package/dist/cjs/components/details/details-summary.js +3 -3
  11. package/dist/cjs/components/details/details.js +2 -2
  12. package/dist/cjs/components/dialog/dialog-trigger-context.js +5 -6
  13. package/dist/cjs/components/dialog/dialog-trigger.js +3 -8
  14. package/dist/cjs/components/dialog/dialog.js +25 -55
  15. package/dist/cjs/components/error-summary/error-summary-heading.js +2 -8
  16. package/dist/cjs/components/error-summary/error-summary.js +4 -9
  17. package/dist/cjs/components/field/field-counter.js +6 -41
  18. package/dist/cjs/components/field/field-description.js +2 -1
  19. package/dist/cjs/components/field/field.js +6 -4
  20. package/dist/cjs/components/label/label.js +2 -1
  21. package/dist/cjs/components/pagination/pagination-button.js +5 -3
  22. package/dist/cjs/components/pagination/pagination.js +7 -3
  23. package/dist/cjs/components/popover/popover-trigger.js +6 -10
  24. package/dist/cjs/components/popover/popover.js +15 -62
  25. package/dist/cjs/components/select/select.js +2 -12
  26. package/dist/cjs/components/skeleton/skeleton.js +1 -0
  27. package/dist/cjs/components/spinner/spinner.js +1 -0
  28. package/dist/cjs/components/suggestion/suggestion-clear.js +4 -2
  29. package/dist/cjs/components/suggestion/suggestion-empty.js +3 -1
  30. package/dist/cjs/components/suggestion/suggestion-input.js +4 -3
  31. package/dist/cjs/components/suggestion/suggestion-list.js +5 -41
  32. package/dist/cjs/components/suggestion/suggestion-option.js +3 -1
  33. package/dist/cjs/components/suggestion/suggestion.js +9 -9
  34. package/dist/cjs/components/tabs/tabs-list.js +4 -7
  35. package/dist/cjs/components/tabs/tabs-panel.js +5 -28
  36. package/dist/cjs/components/tabs/tabs-tab.js +11 -9
  37. package/dist/cjs/components/tabs/tabs.js +16 -6
  38. package/dist/cjs/components/toggle-group/index.js +1 -1
  39. package/dist/cjs/components/toggle-group/toggle-group-item.js +8 -6
  40. package/dist/cjs/components/toggle-group/toggle-group.js +6 -6
  41. package/dist/cjs/components/tooltip/tooltip.js +6 -147
  42. package/dist/cjs/components/validation-message/validation-message.js +2 -1
  43. package/dist/cjs/index.js +1 -0
  44. package/dist/cjs/utilities/hooks/use-pagination/use-pagination.js +13 -25
  45. package/dist/cjs/utilities/index.js +17 -0
  46. package/dist/cjs/utilities/roving-focus/roving-focus-item.js +2 -0
  47. package/dist/cjs/utilities/roving-focus/roving-focus-root.js +4 -0
  48. package/dist/cjs/utilities/roving-focus/use-roving-focus.js +3 -1
  49. package/dist/esm/components/Combobox/Combobox.js +1 -0
  50. package/dist/esm/components/Combobox/Option/useComboboxOption.js +1 -0
  51. package/dist/esm/components/Combobox/useComboboxKeyboard.js +1 -0
  52. package/dist/esm/components/avatar/avatar.js +2 -2
  53. package/dist/esm/components/breadcrumbs/breadcrumbs-link.js +2 -1
  54. package/dist/esm/components/breadcrumbs/breadcrumbs-list.js +2 -12
  55. package/dist/esm/components/breadcrumbs/breadcrumbs.js +2 -1
  56. package/dist/esm/components/button/button.js +9 -4
  57. package/dist/esm/components/card/card.js +18 -10
  58. package/dist/esm/components/details/details-summary.js +3 -3
  59. package/dist/esm/components/details/details.js +2 -2
  60. package/dist/esm/components/dialog/dialog-trigger-context.js +6 -7
  61. package/dist/esm/components/dialog/dialog-trigger.js +3 -8
  62. package/dist/esm/components/dialog/dialog.js +26 -56
  63. package/dist/esm/components/error-summary/error-summary-heading.js +3 -9
  64. package/dist/esm/components/error-summary/error-summary.js +6 -10
  65. package/dist/esm/components/field/field-counter.js +8 -43
  66. package/dist/esm/components/field/field-description.js +2 -1
  67. package/dist/esm/components/field/field.js +7 -5
  68. package/dist/esm/components/label/label.js +2 -1
  69. package/dist/esm/components/pagination/pagination-button.js +5 -3
  70. package/dist/esm/components/pagination/pagination.js +7 -3
  71. package/dist/esm/components/popover/popover-trigger.js +6 -10
  72. package/dist/esm/components/popover/popover.js +15 -62
  73. package/dist/esm/components/select/select.js +2 -12
  74. package/dist/esm/components/skeleton/skeleton.js +1 -0
  75. package/dist/esm/components/spinner/spinner.js +1 -0
  76. package/dist/esm/components/suggestion/suggestion-clear.js +4 -2
  77. package/dist/esm/components/suggestion/suggestion-empty.js +3 -1
  78. package/dist/esm/components/suggestion/suggestion-input.js +4 -3
  79. package/dist/esm/components/suggestion/suggestion-list.js +5 -41
  80. package/dist/esm/components/suggestion/suggestion-option.js +3 -1
  81. package/dist/esm/components/suggestion/suggestion.js +9 -9
  82. package/dist/esm/components/tabs/tabs-list.js +5 -8
  83. package/dist/esm/components/tabs/tabs-panel.js +6 -29
  84. package/dist/esm/components/tabs/tabs-tab.js +12 -10
  85. package/dist/esm/components/tabs/tabs.js +17 -7
  86. package/dist/esm/components/toggle-group/index.js +1 -1
  87. package/dist/esm/components/toggle-group/toggle-group-item.js +10 -8
  88. package/dist/esm/components/toggle-group/toggle-group.js +7 -7
  89. package/dist/esm/components/tooltip/tooltip.js +8 -149
  90. package/dist/esm/components/validation-message/validation-message.js +2 -1
  91. package/dist/esm/index.js +1 -0
  92. package/dist/esm/utilities/hooks/use-pagination/use-pagination.js +13 -25
  93. package/dist/esm/utilities/index.js +11 -0
  94. package/dist/esm/utilities/roving-focus/roving-focus-item.js +2 -0
  95. package/dist/esm/utilities/roving-focus/roving-focus-root.js +4 -0
  96. package/dist/esm/utilities/roving-focus/use-roving-focus.js +3 -1
  97. package/dist/react-types.d.ts +8 -0
  98. package/dist/types/components/avatar/avatar.d.ts +12 -7
  99. package/dist/types/components/avatar/avatar.d.ts.map +1 -1
  100. package/dist/types/components/breadcrumbs/breadcrumbs-link.d.ts.map +1 -1
  101. package/dist/types/components/breadcrumbs/breadcrumbs-list.d.ts.map +1 -1
  102. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +5 -3
  103. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  104. package/dist/types/components/button/button.d.ts +1 -1
  105. package/dist/types/components/button/button.d.ts.map +1 -1
  106. package/dist/types/components/card/card.d.ts.map +1 -1
  107. package/dist/types/components/details/details-summary.d.ts.map +1 -1
  108. package/dist/types/components/details/details.d.ts +1 -1
  109. package/dist/types/components/details/details.d.ts.map +1 -1
  110. package/dist/types/components/dialog/dialog-trigger-context.d.ts +10 -3
  111. package/dist/types/components/dialog/dialog-trigger-context.d.ts.map +1 -1
  112. package/dist/types/components/dialog/dialog-trigger.d.ts +1 -1
  113. package/dist/types/components/dialog/dialog-trigger.d.ts.map +1 -1
  114. package/dist/types/components/dialog/dialog.d.ts +3 -3
  115. package/dist/types/components/dialog/dialog.d.ts.map +1 -1
  116. package/dist/types/components/dropdown/dropdown.d.ts +1 -2
  117. package/dist/types/components/dropdown/dropdown.d.ts.map +1 -1
  118. package/dist/types/components/error-summary/error-summary-heading.d.ts.map +1 -1
  119. package/dist/types/components/error-summary/error-summary.d.ts +6 -6
  120. package/dist/types/components/error-summary/error-summary.d.ts.map +1 -1
  121. package/dist/types/components/field/field-counter.d.ts +2 -8
  122. package/dist/types/components/field/field-counter.d.ts.map +1 -1
  123. package/dist/types/components/field/field-description.d.ts.map +1 -1
  124. package/dist/types/components/field/field.d.ts +6 -2
  125. package/dist/types/components/field/field.d.ts.map +1 -1
  126. package/dist/types/components/index.d.ts +1 -0
  127. package/dist/types/components/index.d.ts.map +1 -1
  128. package/dist/types/components/input/input.d.ts +13 -1
  129. package/dist/types/components/input/input.d.ts.map +1 -1
  130. package/dist/types/components/label/label.d.ts.map +1 -1
  131. package/dist/types/components/pagination/pagination-button.d.ts +13 -4
  132. package/dist/types/components/pagination/pagination-button.d.ts.map +1 -1
  133. package/dist/types/components/pagination/pagination.d.ts +27 -5
  134. package/dist/types/components/pagination/pagination.d.ts.map +1 -1
  135. package/dist/types/components/popover/popover-trigger.d.ts.map +1 -1
  136. package/dist/types/components/popover/popover.d.ts +2 -14
  137. package/dist/types/components/popover/popover.d.ts.map +1 -1
  138. package/dist/types/components/search/search-button.d.ts +1 -1
  139. package/dist/types/components/select/select.d.ts +2 -0
  140. package/dist/types/components/select/select.d.ts.map +1 -1
  141. package/dist/types/components/suggestion/suggestion-clear.d.ts +7 -5
  142. package/dist/types/components/suggestion/suggestion-clear.d.ts.map +1 -1
  143. package/dist/types/components/suggestion/suggestion-empty.d.ts +1 -0
  144. package/dist/types/components/suggestion/suggestion-empty.d.ts.map +1 -1
  145. package/dist/types/components/suggestion/suggestion-input.d.ts +2 -1
  146. package/dist/types/components/suggestion/suggestion-input.d.ts.map +1 -1
  147. package/dist/types/components/suggestion/suggestion-list.d.ts +1 -1
  148. package/dist/types/components/suggestion/suggestion-list.d.ts.map +1 -1
  149. package/dist/types/components/suggestion/suggestion-option.d.ts +1 -0
  150. package/dist/types/components/suggestion/suggestion-option.d.ts.map +1 -1
  151. package/dist/types/components/suggestion/suggestion.d.ts +5 -6
  152. package/dist/types/components/suggestion/suggestion.d.ts.map +1 -1
  153. package/dist/types/components/tabs/tabs-list.d.ts +4 -2
  154. package/dist/types/components/tabs/tabs-list.d.ts.map +1 -1
  155. package/dist/types/components/tabs/tabs-panel.d.ts +4 -2
  156. package/dist/types/components/tabs/tabs-panel.d.ts.map +1 -1
  157. package/dist/types/components/tabs/tabs-tab.d.ts +4 -2
  158. package/dist/types/components/tabs/tabs-tab.d.ts.map +1 -1
  159. package/dist/types/components/tabs/tabs.d.ts +6 -6
  160. package/dist/types/components/tabs/tabs.d.ts.map +1 -1
  161. package/dist/types/components/textfield/textfield.d.ts.map +1 -1
  162. package/dist/types/components/toggle-group/index.d.ts +1 -1
  163. package/dist/types/components/toggle-group/toggle-group-item.d.ts +12 -3
  164. package/dist/types/components/toggle-group/toggle-group-item.d.ts.map +1 -1
  165. package/dist/types/components/toggle-group/toggle-group.d.ts +12 -4
  166. package/dist/types/components/toggle-group/toggle-group.d.ts.map +1 -1
  167. package/dist/types/components/tooltip/tooltip.d.ts +10 -3
  168. package/dist/types/components/tooltip/tooltip.d.ts.map +1 -1
  169. package/dist/types/components/validation-message/validation-message.d.ts.map +1 -1
  170. package/dist/types/types.d.ts +2 -0
  171. package/dist/types/types.d.ts.map +1 -1
  172. package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts +1 -1
  173. package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts.map +1 -1
  174. package/dist/types/utilities/index.d.ts +6 -0
  175. package/dist/types/utilities/index.d.ts.map +1 -1
  176. package/dist/types/utilities/roving-focus/roving-focus-item.d.ts +1 -0
  177. package/dist/types/utilities/roving-focus/roving-focus-item.d.ts.map +1 -1
  178. package/dist/types/utilities/roving-focus/roving-focus-root.d.ts +1 -0
  179. package/dist/types/utilities/roving-focus/roving-focus-root.d.ts.map +1 -1
  180. package/dist/types/utilities/roving-focus/use-roving-focus.d.ts +3 -1
  181. package/dist/types/utilities/roving-focus/use-roving-focus.d.ts.map +1 -1
  182. package/package.json +11 -14
  183. package/dist/cjs/components/field/field-observer.js +0 -112
  184. package/dist/cjs/components/toggle-group/use-toggle-groupitem.js +0 -34
  185. package/dist/esm/components/field/field-observer.js +0 -107
  186. package/dist/esm/components/toggle-group/use-toggle-groupitem.js +0 -32
  187. package/dist/types/components/field/field-observer.d.ts +0 -5
  188. package/dist/types/components/field/field-observer.d.ts.map +0 -1
  189. package/dist/types/components/toggle-group/use-toggle-groupitem.d.ts +0 -12
  190. 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
- /** Handles props for `RovingFocus` in context with `RovingFocusRoot` */
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,wEAAwE;AACxE,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"}
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.11.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.2.0",
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.11.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.3",
53
- "@storybook/addon-vitest": "^10.2.3",
54
- "@storybook/react-vite": "^10.2.3",
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.10",
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.2",
60
+ "rimraf": "^6.1.3",
63
61
  "rollup": "^4.57.1",
64
62
  "rollup-plugin-copy": "^3.5.0",
65
- "storybook": "^10.2.3",
63
+ "storybook": "^10.2.8",
66
64
  "tsx": "4.21.0",
67
65
  "typescript": "^5.9.3",
68
- "@digdir/designsystemet-css": "^1.11.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"}