@igne-agency/react-web-ui 0.5.0 → 0.6.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 (254) hide show
  1. package/dist/components/accordion/accordion.css +21 -21
  2. package/dist/components/accordion/accordion.d.ts +17 -4
  3. package/dist/components/accordion/accordion.js +83 -36
  4. package/dist/components/accordion/accordion.module.js +6 -6
  5. package/dist/components/attachment-tile/attachment-preview.d.ts +56 -13
  6. package/dist/components/attachment-tile/attachment-preview.js +388 -119
  7. package/dist/components/attachment-tile/attachment-tile.css +31 -25
  8. package/dist/components/attachment-tile/attachment-tile.d.ts +32 -10
  9. package/dist/components/attachment-tile/attachment-tile.js +160 -43
  10. package/dist/components/attachment-tile/attachment-tile.module.js +8 -8
  11. package/dist/components/attachment-tile/index.d.ts +1 -1
  12. package/dist/components/avatar/avatar.css +9 -9
  13. package/dist/components/avatar/avatar.d.ts +50 -5
  14. package/dist/components/avatar/avatar.js +178 -64
  15. package/dist/components/avatar/avatar.module.js +3 -3
  16. package/dist/components/avatar-group/avatar-group-context.d.ts +2 -4
  17. package/dist/components/avatar-group/avatar-group-context.js +2 -2
  18. package/dist/components/avatar-group/avatar-group.css +26 -20
  19. package/dist/components/avatar-group/avatar-group.d.ts +85 -27
  20. package/dist/components/avatar-group/avatar-group.js +400 -246
  21. package/dist/components/avatar-group/avatar-group.module.js +8 -8
  22. package/dist/components/breadcrumbs/breadcrumbs.css +12 -12
  23. package/dist/components/breadcrumbs/breadcrumbs.d.ts +69 -23
  24. package/dist/components/breadcrumbs/breadcrumbs.js +299 -248
  25. package/dist/components/breadcrumbs/breadcrumbs.module.js +8 -8
  26. package/dist/components/button/button.css +29 -31
  27. package/dist/components/button/button.d.ts +20 -16
  28. package/dist/components/button/button.js +140 -145
  29. package/dist/components/button/button.module.js +1 -1
  30. package/dist/components/button/index.js +1 -1
  31. package/dist/components/checkbox-field/checkbox-field.js +63 -49
  32. package/dist/components/checkbox-field/checkbox.css +105 -56
  33. package/dist/components/checkbox-field/checkbox.d.ts +3 -2
  34. package/dist/components/checkbox-field/checkbox.js +12 -9
  35. package/dist/components/checkbox-field/checkbox.module.js +4 -4
  36. package/dist/components/checkbox-group-field/checkbox-group-field.js +78 -72
  37. package/dist/components/checkbox-group-field/checkbox-group.css +14 -10
  38. package/dist/components/checkbox-group-field/checkbox-group.d.ts +2 -2
  39. package/dist/components/checkbox-group-field/checkbox-group.js +2 -2
  40. package/dist/components/checkbox-group-field/checkbox-group.module.js +2 -2
  41. package/dist/components/collapsible/collapsible.css +20 -20
  42. package/dist/components/collapsible/collapsible.d.ts +17 -4
  43. package/dist/components/collapsible/collapsible.js +83 -36
  44. package/dist/components/collapsible/collapsible.module.js +5 -5
  45. package/dist/components/combobox-field/combobox-field.js +206 -158
  46. package/dist/components/combobox-field/combobox.css +492 -277
  47. package/dist/components/combobox-field/combobox.d.ts +148 -39
  48. package/dist/components/combobox-field/combobox.js +506 -206
  49. package/dist/components/combobox-field/combobox.module.js +21 -21
  50. package/dist/components/combobox-field/value-state-view.css +5 -5
  51. package/dist/components/combobox-field/value-state-view.module.js +4 -4
  52. package/dist/components/composer/composer-attachments.d.ts +30 -11
  53. package/dist/components/composer/composer-attachments.js +45 -40
  54. package/dist/components/composer/composer-editor.css +40 -35
  55. package/dist/components/composer/composer-editor.d.ts +14 -4
  56. package/dist/components/composer/composer-editor.js +134 -44
  57. package/dist/components/composer/composer-editor.module.js +5 -5
  58. package/dist/components/composer/composer.css +22 -22
  59. package/dist/components/composer/composer.d.ts +13 -2
  60. package/dist/components/composer/composer.js +78 -63
  61. package/dist/components/composer/composer.module.js +5 -5
  62. package/dist/components/composer/index.d.ts +2 -2
  63. package/dist/components/composer/mention-text.css +5 -5
  64. package/dist/components/composer/mention-text.module.js +1 -1
  65. package/dist/components/confirm-dialog/confirm-dialog.css +29 -29
  66. package/dist/components/confirm-dialog/confirm-dialog.d.ts +57 -3
  67. package/dist/components/confirm-dialog/confirm-dialog.js +266 -108
  68. package/dist/components/confirm-dialog/confirm-dialog.module.js +5 -5
  69. package/dist/components/conversation/conversation.css +52 -52
  70. package/dist/components/conversation/conversation.d.ts +43 -18
  71. package/dist/components/conversation/conversation.js +120 -78
  72. package/dist/components/conversation/conversation.module.js +15 -15
  73. package/dist/components/date-field/date-field.d.ts +1 -1
  74. package/dist/components/date-field/date-field.js +202 -100
  75. package/dist/components/date-field/date-input.d.ts +73 -37
  76. package/dist/components/date-field/date-input.js +72 -45
  77. package/dist/components/date-field/index.d.ts +1 -1
  78. package/dist/components/date-range-field/date-range-field.d.ts +1 -1
  79. package/dist/components/date-range-field/date-range-field.js +219 -107
  80. package/dist/components/date-range-field/date-range-input.d.ts +84 -40
  81. package/dist/components/date-range-field/date-range-input.js +83 -48
  82. package/dist/components/dialog/dialog.css +32 -32
  83. package/dist/components/dialog/dialog.d.ts +8 -7
  84. package/dist/components/dialog/dialog.js +8 -26
  85. package/dist/components/dialog/dialog.module.js +6 -6
  86. package/dist/components/divider/divider.css +6 -6
  87. package/dist/components/divider/divider.d.ts +36 -2
  88. package/dist/components/divider/divider.js +195 -29
  89. package/dist/components/divider/divider.module.js +3 -3
  90. package/dist/components/drawer/drawer.css +55 -56
  91. package/dist/components/drawer/drawer.d.ts +8 -7
  92. package/dist/components/drawer/drawer.js +8 -26
  93. package/dist/components/drawer/drawer.module.js +6 -6
  94. package/dist/components/field/field.css +34 -24
  95. package/dist/components/field/field.d.ts +60 -37
  96. package/dist/components/field/field.js +242 -157
  97. package/dist/components/field/field.module.js +12 -10
  98. package/dist/components/field/input-parts.d.ts +11 -13
  99. package/dist/components/field/input-parts.js +23 -42
  100. package/dist/components/field-placeholder/field-placeholder.css +6 -6
  101. package/dist/components/field-placeholder/field-placeholder.module.js +4 -4
  102. package/dist/components/fieldset/field-group.d.ts +1 -1
  103. package/dist/components/fieldset/field-group.js +48 -42
  104. package/dist/components/fieldset/fieldset-root.d.ts +1 -1
  105. package/dist/components/fieldset/fieldset-root.js +19 -17
  106. package/dist/components/fieldset/fieldset.d.ts +2 -2
  107. package/dist/components/fieldset/fieldset.js +2 -2
  108. package/dist/components/file-field/file-field.css +126 -60
  109. package/dist/components/file-field/file-field.js +201 -109
  110. package/dist/components/file-field/file-field.module.js +4 -4
  111. package/dist/components/file-field/file-input.d.ts +66 -40
  112. package/dist/components/file-field/file-input.js +188 -132
  113. package/dist/components/filter-bar/filter-bar.css +8 -8
  114. package/dist/components/filter-bar/filter-bar.d.ts +12 -3
  115. package/dist/components/filter-bar/filter-bar.js +23 -25
  116. package/dist/components/filter-bar/filter-bar.module.js +5 -5
  117. package/dist/components/form/form.d.ts +19 -7
  118. package/dist/components/form/form.js +80 -29
  119. package/dist/components/icon/icon.css +2 -2
  120. package/dist/components/icon/icon.module.js +1 -1
  121. package/dist/components/link/link.css +6 -5
  122. package/dist/components/link/link.module.js +1 -1
  123. package/dist/components/menu/menu.css +52 -47
  124. package/dist/components/menu/menu.d.ts +32 -25
  125. package/dist/components/menu/menu.js +75 -124
  126. package/dist/components/menu/menu.module.js +8 -8
  127. package/dist/components/nav/nav-context.d.ts +1 -1
  128. package/dist/components/nav/nav-item-view.d.ts +10 -13
  129. package/dist/components/nav/nav-item-view.js +42 -54
  130. package/dist/components/nav/nav.css +150 -119
  131. package/dist/components/nav/nav.d.ts +61 -17
  132. package/dist/components/nav/nav.js +271 -176
  133. package/dist/components/nav/nav.module.js +17 -15
  134. package/dist/components/number-field/number-field.css +153 -64
  135. package/dist/components/number-field/number-field.d.ts +2 -2
  136. package/dist/components/number-field/number-field.js +112 -91
  137. package/dist/components/number-field/number-field.module.js +6 -6
  138. package/dist/components/number-field/number-input.d.ts +43 -23
  139. package/dist/components/number-field/number-input.js +179 -125
  140. package/dist/components/otp-field/otp-field.css +153 -60
  141. package/dist/components/otp-field/otp-field.d.ts +2 -2
  142. package/dist/components/otp-field/otp-field.js +62 -46
  143. package/dist/components/otp-field/otp-field.module.js +4 -4
  144. package/dist/components/otp-field/otp-input.d.ts +8 -6
  145. package/dist/components/otp-field/otp-input.js +92 -92
  146. package/dist/components/pagination/pagination.d.ts +46 -15
  147. package/dist/components/pagination/pagination.js +217 -224
  148. package/dist/components/password-field/password-field.css +23 -23
  149. package/dist/components/password-field/password-field.js +107 -85
  150. package/dist/components/password-field/password-field.module.js +8 -8
  151. package/dist/components/password-field/password-strength.d.ts +107 -3
  152. package/dist/components/password-field/password-strength.js +569 -92
  153. package/dist/components/photo-field/photo-field.js +137 -112
  154. package/dist/components/photo-field/photo-input.css +67 -44
  155. package/dist/components/photo-field/photo-input.d.ts +59 -15
  156. package/dist/components/photo-field/photo-input.js +173 -86
  157. package/dist/components/photo-field/photo-input.module.js +10 -8
  158. package/dist/components/popover/popover.css +41 -41
  159. package/dist/components/popover/popover.d.ts +66 -25
  160. package/dist/components/popover/popover.js +332 -217
  161. package/dist/components/popover/popover.module.js +15 -19
  162. package/dist/components/radio-group-field/radio-group-field.js +80 -71
  163. package/dist/components/radio-group-field/radio-group.css +112 -60
  164. package/dist/components/radio-group-field/radio-group.d.ts +19 -3
  165. package/dist/components/radio-group-field/radio-group.js +66 -23
  166. package/dist/components/radio-group-field/radio-group.module.js +4 -4
  167. package/dist/components/segmented-control-field/segmented-control-field.d.ts +1 -1
  168. package/dist/components/segmented-control-field/segmented-control-field.js +111 -96
  169. package/dist/components/segmented-control-field/segmented-control.css +132 -79
  170. package/dist/components/segmented-control-field/segmented-control.d.ts +39 -15
  171. package/dist/components/segmented-control-field/segmented-control.js +124 -41
  172. package/dist/components/segmented-control-field/segmented-control.module.js +4 -4
  173. package/dist/components/select-field/select.css +214 -101
  174. package/dist/components/select-field/select.d.ts +43 -11
  175. package/dist/components/select-field/select.js +194 -109
  176. package/dist/components/select-field/select.module.js +14 -14
  177. package/dist/components/skeleton/skeleton.css +4 -4
  178. package/dist/components/skeleton/skeleton.module.js +3 -3
  179. package/dist/components/stale/stale.css +15 -15
  180. package/dist/components/stale/stale.d.ts +27 -3
  181. package/dist/components/stale/stale.js +147 -66
  182. package/dist/components/stale/stale.module.js +6 -6
  183. package/dist/components/status-message/status-message.css +22 -22
  184. package/dist/components/status-message/status-message.module.js +6 -6
  185. package/dist/components/switch-field/switch-field.js +77 -57
  186. package/dist/components/switch-field/switch.css +112 -63
  187. package/dist/components/switch-field/switch.d.ts +20 -3
  188. package/dist/components/switch-field/switch.js +70 -27
  189. package/dist/components/switch-field/switch.module.js +4 -4
  190. package/dist/components/tabs/tabs.css +32 -32
  191. package/dist/components/tabs/tabs.d.ts +21 -7
  192. package/dist/components/tabs/tabs.js +73 -14
  193. package/dist/components/tabs/tabs.module.js +7 -7
  194. package/dist/components/tag/tag.css +84 -84
  195. package/dist/components/tag/tag.module.js +3 -3
  196. package/dist/components/tag-group/tag-group.css +94 -94
  197. package/dist/components/tag-group/tag-group.module.js +4 -4
  198. package/dist/components/text-field/text-field.css +159 -82
  199. package/dist/components/text-field/text-field.d.ts +1 -1
  200. package/dist/components/text-field/text-field.js +139 -110
  201. package/dist/components/text-field/text-field.module.js +9 -9
  202. package/dist/components/text-field/text-input.d.ts +81 -45
  203. package/dist/components/text-field/text-input.js +366 -217
  204. package/dist/components/textarea-field/textarea-field.css +7 -2
  205. package/dist/components/textarea-field/textarea-field.js +72 -56
  206. package/dist/components/textarea-field/textarea-field.module.js +2 -2
  207. package/dist/components/time-field/time-field.js +153 -60
  208. package/dist/components/time-field/time-input.d.ts +21 -10
  209. package/dist/components/time-field/time-input.js +22 -11
  210. package/dist/components/toast/toast-provider.css +34 -31
  211. package/dist/components/toast/toast-provider.d.ts +63 -14
  212. package/dist/components/toast/toast-provider.js +174 -111
  213. package/dist/components/toast/toast-provider.module.js +7 -7
  214. package/dist/components/toggle-group-field/toggle-group-field.d.ts +1 -1
  215. package/dist/components/toggle-group-field/toggle-group-field.js +95 -89
  216. package/dist/components/toggle-group-field/toggle-group.css +117 -67
  217. package/dist/components/toggle-group-field/toggle-group.d.ts +2 -2
  218. package/dist/components/toggle-group-field/toggle-group.js +2 -2
  219. package/dist/components/toggle-group-field/toggle-group.module.js +2 -2
  220. package/dist/components/tooltip/tooltip.css +4 -4
  221. package/dist/components/tooltip/tooltip.module.js +1 -1
  222. package/dist/data-table/data-table-content.js +6 -5
  223. package/dist/data-table/data-table-parts.d.ts +41 -13
  224. package/dist/data-table/data-table-parts.js +213 -172
  225. package/dist/data-table/data-table-selection.d.ts +105 -3
  226. package/dist/data-table/data-table-selection.js +654 -145
  227. package/dist/data-table/data-table.css +125 -128
  228. package/dist/data-table/data-table.d.ts +21 -26
  229. package/dist/data-table/data-table.js +20 -23
  230. package/dist/data-table/data-table.module.js +32 -34
  231. package/dist/data-table/index.d.ts +2 -2
  232. package/dist/index.js +3 -3
  233. package/dist/lib/calendar/calendar-navigation.d.ts +39 -5
  234. package/dist/lib/calendar/calendar-navigation.js +185 -118
  235. package/dist/lib/calendar/calendar-parts.d.ts +143 -0
  236. package/dist/lib/calendar/calendar-parts.js +540 -0
  237. package/dist/lib/calendar/calendar-prefab.d.ts +52 -0
  238. package/dist/lib/calendar/calendar-prefab.js +311 -0
  239. package/dist/lib/calendar/calendar-year.d.ts +3 -1
  240. package/dist/lib/calendar/calendar-year.js +139 -131
  241. package/dist/lib/calendar/temporal.css +325 -232
  242. package/dist/lib/calendar/temporal.d.ts +67 -82
  243. package/dist/lib/calendar/temporal.js +258 -569
  244. package/dist/lib/calendar/temporal.module.js +38 -38
  245. package/dist/lib/forms/use-connected-field.d.ts +1 -1
  246. package/dist/lib/forms/use-connected-field.js +1 -1
  247. package/dist/lib/render-as.d.ts +13 -0
  248. package/dist/lib/render-as.js +46 -0
  249. package/dist/tokens.css +6 -3
  250. package/package.json +1 -1
  251. package/tokens/dark.tokens.json +6 -0
  252. package/tokens/sys.tokens.json +7 -0
  253. package/dist/components/button/close-button.d.ts +0 -16
  254. package/dist/components/button/close-button.js +0 -30
@@ -1,24 +1,30 @@
1
1
  @layer kit.reset, kit.base, kit.components;
2
2
  @layer kit.components {
3
- ._scroller_9ce88_3 {
3
+ ._root_1hb8v_3 {
4
+ border: 0 solid var(--nav-border, var(--sys-color-border));
5
+ border-width: var(--nav-border-width, 0);
6
+ background: var(--nav-bg, transparent);
7
+ backdrop-filter: var(--nav-backdrop-filter, none);
8
+ }
9
+ ._scroller_1hb8v_9 {
4
10
  overflow-x: auto;
5
11
  overscroll-behavior-x: contain;
6
12
  }
7
- ._list_9ce88_7 {
13
+ ._list_1hb8v_13 {
8
14
  list-style: none;
9
15
  }
10
- ._list_9ce88_7[data-orientation=vertical] {
16
+ ._list_1hb8v_13[data-orientation=vertical] {
11
17
  display: flex;
12
18
  flex-direction: column;
13
19
  gap: var(--nav-gap, var(--sys-unit-2));
14
20
  }
15
- ._list_9ce88_7[data-orientation=horizontal] {
21
+ ._list_1hb8v_13[data-orientation=horizontal] {
16
22
  position: relative;
17
23
  display: flex;
18
24
  gap: var(--tab-gap, var(--sys-unit-2));
19
25
  min-inline-size: max-content;
20
26
  }
21
- ._indicator_9ce88_21 {
27
+ ._indicator_1hb8v_27 {
22
28
  --_indicator-slack: var(
23
29
  --sliding-indicator-slack,
24
30
  0px
@@ -36,103 +42,112 @@
36
42
  pointer-events: none;
37
43
  }
38
44
  @media not (prefers-reduced-motion) {
39
- ._indicator_9ce88_21 {
45
+ ._indicator_1hb8v_27 {
40
46
  transition: inset-inline-start var(--_indicator-slide), inset-block-start var(--_indicator-slide), inline-size var(--_indicator-slide), block-size var(--_indicator-slide), opacity var(--sys-motion-instant) var(--sys-motion-standard), scale var(--sys-motion-short) var(--sys-motion-overshoot);
41
47
  }
42
48
  }
43
- ._indicator_9ce88_21[data-jump] {
49
+ ._indicator_1hb8v_27[data-jump] {
44
50
  --_indicator-slide: 0s;
45
51
  }
46
- ._indicator_9ce88_21[data-empty] {
52
+ ._indicator_1hb8v_27[data-empty] {
47
53
  opacity: 0;
48
54
  scale: 0;
49
55
  }
50
56
  @media not (prefers-reduced-motion) {
51
- ._indicator_9ce88_21[data-empty] {
57
+ ._indicator_1hb8v_27[data-empty] {
52
58
  transition: opacity var(--sys-motion-instant) var(--sys-motion-standard), scale var(--sys-motion-instant) var(--sys-motion-standard);
53
59
  }
54
60
  }
55
- ._indicator_9ce88_21 {
56
- border-radius: var(--sys-radius-full);
61
+ ._indicator_1hb8v_27 {
62
+ border-radius: var(--tab-indicator-radius, var(--sys-radius-full));
57
63
  background: var(--tab-indicator, var(--sys-color-primary));
58
64
  }
59
- ._tab_9ce88_59 {
65
+ ._tab_1hb8v_65 {
60
66
  display: inline-flex;
61
67
  align-items: center;
62
- gap: var(--sys-unit-4);
63
- padding: var(--sys-unit-6) var(--sys-unit-10);
64
- border-radius: var(--sys-radius-full);
68
+ gap: var(--tab-icon-gap, var(--sys-unit-4));
69
+ padding: var(--tab-pad-y, var(--sys-unit-6)) var(--tab-pad-x, var(--sys-unit-10));
70
+ border-radius: var(--tab-radius, var(--sys-radius-full));
65
71
  color: var(--tab-fg, var(--sys-color-text-muted));
66
- font: var(--sys-font-label-medium);
72
+ font: var(--tab-font, var(--sys-font-label-medium));
67
73
  text-decoration: none;
68
74
  white-space: nowrap;
69
75
  cursor: pointer;
70
76
  }
71
- ._tab_9ce88_59 {
77
+ ._tab_1hb8v_65 {
72
78
  outline: 0 solid var(--sys-color-focus-ring);
73
79
  outline-offset: var(--sys-focus-ring-offset);
74
80
  }
75
- ._tab_9ce88_59:focus-visible {
81
+ ._tab_1hb8v_65:focus-visible {
76
82
  outline-width: var(--sys-focus-ring-width);
77
83
  }
78
- ._tab_9ce88_59 {
84
+ ._tab_1hb8v_65 {
79
85
  outline-offset: calc(-1 * var(--sys-focus-ring-width));
80
86
  }
81
87
  @media not (prefers-reduced-motion) {
82
- ._tab_9ce88_59 {
88
+ ._tab_1hb8v_65 {
83
89
  transition: background-color var(--sys-motion-instant) var(--sys-motion-standard);
84
90
  }
85
91
  }
86
- ._tab_9ce88_59:hover {
87
- background: var(--tab-bg-hover, var(--sys-color-primary-container));
92
+ ._tab_1hb8v_65:hover {
93
+ background: var(--tab-hover-bg, var(--sys-color-primary-container));
88
94
  }
89
- ._tab_9ce88_59 {
95
+ ._tab_1hb8v_65 {
90
96
  position: relative;
91
97
  }
92
98
  @media not (prefers-reduced-motion) {
93
- ._tab_9ce88_59 {
99
+ ._tab_1hb8v_65 {
94
100
  transition: background-color var(--sys-motion-instant) var(--sys-motion-standard), color var(--sys-motion-short) var(--sys-motion-emphasized);
95
101
  }
96
102
  }
97
- ._tab_9ce88_59[aria-current=page], ._tab_9ce88_59[data-active=true] {
98
- color: var(--tab-fg-active, var(--sys-color-on-primary));
103
+ ._tab_1hb8v_65[aria-current=page], ._tab_1hb8v_65[data-active=true] {
104
+ color: var(--tab-active-fg, var(--sys-color-on-primary));
99
105
  }
100
- ._tab_9ce88_59[aria-current=page]:hover, ._tab_9ce88_59[data-active=true]:hover {
106
+ ._tab_1hb8v_65[aria-current=page]:hover, ._tab_1hb8v_65[data-active=true]:hover {
101
107
  background: none;
102
108
  }
103
- ._iconSlot_9ce88_103 {
109
+ ._iconSlot_1hb8v_109 {
104
110
  display: inline-flex;
105
111
  flex-shrink: 0;
106
112
  align-items: center;
107
113
  justify-content: center;
108
114
  font-size: var(--nav-icon-size, 1em);
109
115
  }
110
- ._item_9ce88_110 {
116
+ ._item_1hb8v_116 {
117
+ --_nav-item-gap: var(--sys-unit-6);
118
+ --_nav-item-pad-y: var(--sys-unit-4);
119
+ --_nav-item-pad-x: var(--sys-unit-8);
120
+ --_nav-item-radius: var(--sys-radius-full);
121
+ --_nav-item-font: var(--sys-font-label-medium);
122
+ --_nav-item-active-bg: var(--sys-color-primary-container);
123
+ --_nav-item-active-font: var(
124
+ --sys-font-label-medium-strong
125
+ );
111
126
  display: flex;
112
- gap: var(--sys-unit-6);
127
+ gap: var(--nav-item-gap, var(--_nav-item-gap));
113
128
  align-items: center;
114
129
  box-sizing: border-box;
115
130
  inline-size: 100%;
116
131
  min-block-size: var(--nav-item-min-size, var(--sys-unit-24));
117
- padding: var(--sys-unit-4) var(--sys-unit-8);
118
- border-radius: var(--sys-radius-full);
132
+ padding: var(--nav-item-pad-y, var(--_nav-item-pad-y)) var(--nav-item-pad-x, var(--_nav-item-pad-x));
133
+ border-radius: var(--nav-item-radius, var(--_nav-item-radius));
119
134
  color: var(--nav-item-fg, var(--sys-color-text));
120
- font: var(--sys-font-label-medium);
135
+ font: var(--nav-item-font, var(--_nav-item-font));
121
136
  text-align: start;
122
137
  text-decoration: none;
123
138
  }
124
- ._item_9ce88_110 {
139
+ ._item_1hb8v_116 {
125
140
  outline: 0 solid var(--sys-color-focus-ring);
126
141
  outline-offset: var(--sys-focus-ring-offset);
127
142
  }
128
- ._item_9ce88_110:focus-visible {
143
+ ._item_1hb8v_116:focus-visible {
129
144
  outline-width: var(--sys-focus-ring-width);
130
145
  }
131
- ._item_9ce88_110 {
146
+ ._item_1hb8v_116 {
132
147
  position: relative;
133
148
  isolation: isolate;
134
149
  }
135
- ._item_9ce88_110::after {
150
+ ._item_1hb8v_116::after {
136
151
  content: "";
137
152
  position: absolute;
138
153
  z-index: -1;
@@ -143,180 +158,196 @@
143
158
  pointer-events: none;
144
159
  }
145
160
  @media not (prefers-reduced-motion) {
146
- ._item_9ce88_110::after {
161
+ ._item_1hb8v_116::after {
147
162
  transition: opacity var(--sys-motion-instant) var(--sys-motion-standard);
148
163
  }
149
164
  }
150
- ._item_9ce88_110:hover:not(:disabled, [data-disabled])::after {
165
+ ._item_1hb8v_116:hover:not(:disabled, [data-disabled])::after {
151
166
  opacity: var(--sys-state-hover);
152
167
  }
153
- ._item_9ce88_110:active:not(:disabled, [data-disabled])::after {
168
+ ._item_1hb8v_116:active:not(:disabled, [data-disabled])::after {
154
169
  opacity: var(--sys-state-pressed);
155
170
  }
156
171
  @media not (prefers-reduced-motion) {
157
- ._item_9ce88_110 {
172
+ ._item_1hb8v_116 {
158
173
  transition: background-color var(--sys-motion-short) var(--sys-motion-standard), color var(--sys-motion-short) var(--sys-motion-standard);
159
174
  }
160
175
  }
161
- ._item_9ce88_110[data-active=true], ._item_9ce88_110[aria-current=page] {
162
- background-color: var(--sys-color-primary-container);
163
- color: var(--sys-color-on-primary-container);
164
- font: var(--sys-font-label-medium-strong);
165
- }
166
- ._item_9ce88_110[data-labelled=false] > ._label_9ce88_166 {
167
- opacity: 0;
168
- }
169
- ._item_9ce88_110[data-layout=stack] {
176
+ ._item_1hb8v_116[data-active=true], ._item_1hb8v_116[aria-current=page] {
177
+ background-color: var(--nav-item-active-bg, var(--_nav-item-active-bg));
178
+ color: var(--nav-item-active-fg, var(--sys-color-on-primary-container));
179
+ font: var(--nav-item-active-font, var(--_nav-item-active-font));
180
+ }
181
+ ._item_1hb8v_116[data-layout=stack] {
182
+ --_nav-item-gap: var(--sys-unit-2);
183
+ --_nav-item-pad-y: var(--sys-unit-2);
184
+ --_nav-item-pad-x: var(--sys-unit-2);
185
+ --_nav-item-radius: var(--sys-radius-md);
186
+ --_nav-item-font: var(--sys-font-label-small);
187
+ --_nav-item-active-bg: transparent;
188
+ --_nav-item-active-font: var(
189
+ --sys-font-label-small-strong
190
+ );
170
191
  display: grid;
171
192
  grid-row: span 2;
172
193
  grid-template-rows: subgrid;
173
- gap: var(--sys-unit-2);
174
194
  justify-items: center;
175
195
  align-items: start;
176
196
  min-inline-size: 0;
177
- padding: var(--sys-unit-2);
178
- border-radius: var(--sys-radius-md);
179
- font: var(--sys-font-label-small);
180
197
  text-align: center;
181
198
  }
182
- ._item_9ce88_110[data-layout=stack][data-active=true], ._item_9ce88_110[data-layout=stack][aria-current=page] {
183
- background-color: transparent;
184
- color: var(--sys-color-on-primary-container);
185
- font: var(--sys-font-label-small-strong);
186
- }
187
- ._item_9ce88_110[data-layout=stack] > ._iconSlot_9ce88_103 {
199
+ ._item_1hb8v_116[data-layout=stack] > ._iconSlot_1hb8v_109 {
188
200
  inline-size: 100%;
189
- max-inline-size: var(--sys-unit-24);
190
- block-size: var(--sys-unit-16);
191
- border-radius: var(--sys-radius-full);
201
+ max-inline-size: var(--nav-item-indicator-max-inline-size, var(--sys-unit-24));
202
+ block-size: var(--nav-item-indicator-block-size, var(--sys-unit-16));
203
+ border-radius: var(--nav-item-indicator-radius, var(--sys-radius-full));
192
204
  }
193
205
  @media not (prefers-reduced-motion) {
194
- ._item_9ce88_110[data-layout=stack] > ._iconSlot_9ce88_103 {
206
+ ._item_1hb8v_116[data-layout=stack] > ._iconSlot_1hb8v_109 {
195
207
  transition: background-color var(--sys-motion-short) var(--sys-motion-standard);
196
208
  }
197
209
  }
198
- ._item_9ce88_110[data-layout=stack] > ._iconSlot_9ce88_103 {
210
+ ._item_1hb8v_116[data-layout=stack] > ._iconSlot_1hb8v_109 {
199
211
  font-size: var(--nav-icon-size, 1.5em);
200
212
  }
201
- ._item_9ce88_110[data-layout=stack][data-active=true] > ._iconSlot_9ce88_103, ._item_9ce88_110[data-layout=stack][aria-current=page] > ._iconSlot_9ce88_103 {
202
- background-color: var(--sys-color-primary-container);
213
+ ._item_1hb8v_116[data-layout=stack][data-active=true] > ._iconSlot_1hb8v_109, ._item_1hb8v_116[data-layout=stack][aria-current=page] > ._iconSlot_1hb8v_109 {
214
+ background-color: var(--nav-item-indicator-bg, var(--sys-color-primary-container));
203
215
  }
204
- ._label_9ce88_166 {
216
+ ._label_1hb8v_216 {
205
217
  min-inline-size: 0;
206
218
  overflow-wrap: normal;
207
219
  hyphens: auto;
208
220
  white-space: var(--nav-label-wrap, normal);
209
221
  }
210
- @media not (prefers-reduced-motion) {
211
- ._label_9ce88_166 {
212
- transition: opacity var(--sys-motion-short) var(--sys-motion-standard);
213
- }
214
- }
215
- ._hintPositioner_9ce88_215 {
222
+ ._hintPositioner_1hb8v_222 {
216
223
  inline-size: var(--positioner-width);
217
224
  block-size: var(--positioner-height);
218
225
  }
219
226
  @media not (prefers-reduced-motion) {
220
- ._hintPositioner_9ce88_215 {
227
+ ._hintPositioner_1hb8v_222 {
221
228
  transition: top var(--sys-motion-short) var(--sys-motion-standard), left var(--sys-motion-short) var(--sys-motion-standard);
222
229
  }
223
230
  }
224
- ._hintViewport_9ce88_224 {
231
+ ._hintViewport_1hb8v_231 {
225
232
  overflow: hidden;
226
233
  }
227
234
  @media not (prefers-reduced-motion) {
228
- ._hintViewport_9ce88_224 > [data-current],
229
- ._hintViewport_9ce88_224 > [data-previous] {
235
+ ._hintViewport_1hb8v_231 > [data-current],
236
+ ._hintViewport_1hb8v_231 > [data-previous] {
230
237
  transition: opacity var(--sys-motion-short) var(--sys-motion-standard);
231
238
  }
232
- ._hintViewport_9ce88_224 > [data-current][data-starting-style],
233
- ._hintViewport_9ce88_224 > [data-previous][data-ending-style] {
239
+ ._hintViewport_1hb8v_231 > [data-current][data-starting-style],
240
+ ._hintViewport_1hb8v_231 > [data-previous][data-ending-style] {
234
241
  opacity: 0;
235
242
  }
236
243
  }
237
- ._group_9ce88_237 {
244
+ ._group_1hb8v_244 {
238
245
  display: flex;
239
246
  flex-direction: column;
240
247
  }
241
- ._groupHeader_9ce88_241 {
248
+ ._groupHeader_1hb8v_248 {
242
249
  display: grid;
243
250
  grid-auto-flow: column;
244
251
  grid-template-columns: minmax(0, 1fr);
245
252
  align-items: center;
246
- gap: var(--sys-unit-2);
247
- border-radius: var(--sys-radius-full);
253
+ gap: var(--nav-group-header-gap, var(--sys-unit-2));
254
+ border-radius: var(--nav-item-radius, var(--sys-radius-full));
248
255
  }
249
256
  @media not (prefers-reduced-motion) {
250
- ._groupHeader_9ce88_241 {
257
+ ._groupHeader_1hb8v_248 {
251
258
  transition: background-color var(--sys-motion-short) var(--sys-motion-standard);
252
259
  }
253
260
  }
254
- ._groupHeader_9ce88_241:has(> [data-active=true]), ._groupHeader_9ce88_241:has(> [aria-current=page]) {
255
- background-color: var(--sys-color-primary-container);
261
+ ._groupHeader_1hb8v_248:has(> [data-active=true]), ._groupHeader_1hb8v_248:has(> [aria-current=page]) {
262
+ background-color: var(--nav-item-active-bg, var(--sys-color-primary-container));
256
263
  }
257
- ._groupToggle_9ce88_257 {
258
- --btn-pad-y: var(--sys-unit-8);
264
+ ._groupToggle_1hb8v_264 {
265
+ --btn-pad-y: var(
266
+ --nav-group-toggle-pad,
267
+ var(--sys-unit-8)
268
+ );
259
269
  }
260
270
  @media not (prefers-reduced-motion) {
261
- ._groupToggle_9ce88_257 svg {
271
+ ._groupToggle_1hb8v_264 svg {
262
272
  transition: rotate var(--sys-motion-short) var(--sys-motion-standard);
263
273
  }
264
274
  }
265
- ._groupToggle_9ce88_257[data-panel-open] svg {
275
+ ._groupToggle_1hb8v_264[data-panel-open] svg {
266
276
  rotate: 180deg;
267
277
  }
268
- ._groupPanel_9ce88_268 {
278
+ ._groupPanel_1hb8v_278 {
269
279
  overflow: hidden;
270
280
  }
271
- ._groupPanel_9ce88_268[hidden]:not([hidden=until-found]) {
281
+ ._groupPanel_1hb8v_278[hidden]:not([hidden=until-found]) {
272
282
  display: none;
273
283
  }
274
284
  @media not (prefers-reduced-motion) {
275
- ._groupPanel_9ce88_268 {
285
+ ._groupPanel_1hb8v_278 {
276
286
  block-size: var(--collapsible-panel-height);
277
287
  transition: block-size var(--sys-motion-short) var(--sys-motion-standard);
278
288
  }
279
- ._groupPanel_9ce88_268[data-starting-style], ._groupPanel_9ce88_268[data-ending-style] {
289
+ ._groupPanel_1hb8v_278[data-starting-style], ._groupPanel_1hb8v_278[data-ending-style] {
280
290
  block-size: 0;
281
291
  }
282
292
  }
283
- ._groupList_9ce88_283 {
284
- --branch-reach: var(--sys-unit-8);
285
- --branch-line: color-mix(
286
- in oklab,
287
- var(--sys-color-border) 66.66%,
288
- var(--sys-color-surface)
293
+ ._groupList_1hb8v_293 {
294
+ --nav-item-min-size: var(
295
+ --nav-group-item-min-size,
296
+ var(--sys-unit-20)
297
+ );
298
+ --nav-item-fg: var(
299
+ --nav-group-item-fg,
300
+ var(--sys-color-text-muted)
289
301
  );
290
- --nav-item-min-size: var(--sys-unit-20);
291
- --nav-item-fg: var(--sys-color-text-muted);
292
302
  display: flex;
293
303
  flex-direction: column;
294
- gap: var(--sys-unit-2);
295
- padding-block: var(--sys-unit-2);
296
- padding-inline-start: var(--sys-unit-20);
304
+ gap: var(--nav-group-list-gap, var(--sys-unit-2));
305
+ padding-block: var(--nav-group-list-pad-y, var(--sys-unit-2));
306
+ padding-inline-start: var(--nav-group-list-indent, var(--sys-unit-20));
297
307
  list-style: none;
298
308
  }
299
- ._groupList_9ce88_283 > li {
309
+ ._groupList_1hb8v_293 > li {
310
+ --_nav-branch-gap: var(
311
+ --nav-group-list-gap,
312
+ var(--sys-unit-2)
313
+ );
314
+ --_nav-branch-reach: var(
315
+ --nav-branch-reach,
316
+ var(--sys-unit-8)
317
+ );
318
+ --_nav-branch-line: var(
319
+ --nav-branch-border-width,
320
+ 1px
321
+ )
322
+ solid
323
+ var(
324
+ --nav-branch-border,
325
+ color-mix(
326
+ in oklab,
327
+ var(--sys-color-border) 66.66%,
328
+ var(--sys-color-surface)
329
+ )
330
+ );
300
331
  position: relative;
301
332
  }
302
- ._groupList_9ce88_283 > li::before {
333
+ ._groupList_1hb8v_293 > li::before {
303
334
  content: "";
304
335
  position: absolute;
305
- inset-block-start: calc(-1 * var(--sys-unit-2));
306
- inset-inline-start: calc(-1 * var(--branch-reach));
307
- inline-size: var(--branch-reach);
308
- block-size: calc(50% + var(--sys-unit-2));
309
- border-inline-start: 1px solid var(--branch-line);
310
- border-block-end: 1px solid var(--branch-line);
336
+ inset-block-start: calc(-1 * var(--_nav-branch-gap));
337
+ inset-inline-start: calc(-1 * var(--_nav-branch-reach));
338
+ inline-size: var(--_nav-branch-reach);
339
+ block-size: calc(50% + var(--_nav-branch-gap));
340
+ border-inline-start: var(--_nav-branch-line);
341
+ border-block-end: var(--_nav-branch-line);
311
342
  }
312
- ._groupList_9ce88_283 > li:last-child::before {
313
- border-end-start-radius: var(--sys-radius-sm);
343
+ ._groupList_1hb8v_293 > li:last-child::before {
344
+ border-end-start-radius: var(--nav-branch-radius, var(--sys-radius-sm));
314
345
  }
315
- ._groupList_9ce88_283 > li:not(:last-child)::after {
346
+ ._groupList_1hb8v_293 > li:not(:last-child)::after {
316
347
  content: "";
317
348
  position: absolute;
318
349
  inset-block: 50% 0;
319
- inset-inline-start: calc(-1 * var(--branch-reach));
320
- border-inline-start: 1px solid var(--branch-line);
350
+ inset-inline-start: calc(-1 * var(--_nav-branch-reach));
351
+ border-inline-start: var(--_nav-branch-line);
321
352
  }
322
353
  }
@@ -1,5 +1,6 @@
1
1
  import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
2
- import { type ComponentPropsWithRef, type ReactNode } from "react";
2
+ import { useRender } from "@base-ui/react/use-render";
3
+ import { type ComponentPropsWithRef, type ReactElement, type ReactNode } from "react";
3
4
  import { type NavOrientation } from "./nav-context.ts";
4
5
  import { type NavEntryProps } from "./nav-item-view.tsx";
5
6
  export type NavRootProps = Omit<ComponentPropsWithRef<"nav">, "aria-label"> & Readonly<{
@@ -8,13 +9,48 @@ export type NavRootProps = Omit<ComponentPropsWithRef<"nav">, "aria-label"> & Re
8
9
  /** A bar of tabs that lead to pages, or the app's rail. @default "vertical" */
9
10
  orientation?: NavOrientation;
10
11
  }>;
12
+ /** The `<nav>`, holding the one hint its entries share. */
11
13
  declare const Root: ({ orientation, className, children, ...props }: NavRootProps) => ReactNode;
14
+ export type NavHintProps = Readonly<{
15
+ className?: string;
16
+ }>;
17
+ /**
18
+ * The one tooltip every entry with a `label` names itself through, so the hint
19
+ * travels between entries rather than one closing as the next opens. Mount it
20
+ * inside `Root` where the entries show no label, such as a collapsed rail.
21
+ *
22
+ * @example
23
+ * <Nav.Root aria-label="Main">
24
+ * <Nav.List>…</Nav.List>
25
+ * {collapsed ? <Nav.Hint /> : null}
26
+ * </Nav.Root>
27
+ */
28
+ declare const Hint: ({ className }: NavHintProps) => ReactNode;
29
+ export type NavScrollerProps = useRender.ComponentProps<"div">;
30
+ /**
31
+ * Lets a horizontal `List` scroll sideways once it outgrows its room.
32
+ *
33
+ * @example
34
+ * <Nav.Scroller>
35
+ * <Nav.List>…</Nav.List>
36
+ * </Nav.Scroller>
37
+ */
38
+ declare const Scroller: ({ render, className, ref, ...props }: NavScrollerProps) => ReactElement;
12
39
  export type NavListProps = ComponentPropsWithRef<"ul">;
40
+ /** The entries, laid out along the nav's orientation. */
41
+ declare const List: ({ className, ref, ...props }: NavListProps) => ReactElement;
42
+ export type NavIndicatorProps = Omit<useRender.ComponentProps<"li">, "children">;
13
43
  /**
14
- * The entries. In a horizontal nav a pill slides to the entry marked
15
- * `aria-current="page"` or `data-active="true"`.
44
+ * The pill that slides to the entry marked `aria-current="page"` or
45
+ * `data-active="true"`, inside a horizontal `List`.
46
+ *
47
+ * @example
48
+ * <Nav.List>
49
+ * <Nav.Indicator />
50
+ * <Nav.Item>…</Nav.Item>
51
+ * </Nav.List>
16
52
  */
17
- declare const List: ({ className, children, ref, ...props }: NavListProps) => ReactNode;
53
+ declare const Indicator: ({ render, className, ref, ...props }: NavIndicatorProps) => ReactElement;
18
54
  export type NavItemProps = ComponentPropsWithRef<"li">;
19
55
  declare const Item: (props: NavItemProps) => ReactNode;
20
56
  export type NavLinkProps = ComponentPropsWithRef<"a"> & NavEntryProps;
@@ -23,7 +59,7 @@ export type NavLinkProps = ComponentPropsWithRef<"a"> & NavEntryProps;
23
59
  * ref, so a router's `createLink` can wrap it; the router's
24
60
  * `aria-current="page"` marks the current one.
25
61
  */
26
- declare const Link: ({ layout, labelled, label, className, ...props }: NavLinkProps) => ReactNode;
62
+ declare const Link: ({ layout, label, className, ...props }: NavLinkProps) => ReactNode;
27
63
  export type NavGroupProps = Omit<ComponentPropsWithRef<"div">, "onToggle"> & (Readonly<{
28
64
  /** Whether the subpages show, when controlled. */
29
65
  open: boolean;
@@ -43,14 +79,18 @@ declare const Group: ({ open, defaultOpen, onOpenChange, className, children, ..
43
79
  export type NavGroupHeaderProps = ComponentPropsWithRef<"div">;
44
80
  /** The group's row: its own `Link`, then its `GroupToggle`. Filled while that link is current. */
45
81
  declare const GroupHeader: ({ className, ...props }: NavGroupHeaderProps) => ReactNode;
46
- export type NavGroupToggleProps = Omit<ComponentPropsWithRef<"button">, "children" | "aria-label"> & Readonly<{
47
- /** Accessible name, such as "Show subpages", surfaced as the tooltip hint and the `aria-label`. */
48
- label: string;
49
- /** The expand chevron, pointing down while closed; it turns over while open. */
50
- children: ReactNode;
82
+ export type NavGroupToggleProps = Omit<BaseCollapsible.Trigger.Props, "render"> & Readonly<{
83
+ /** The button to render, such as `<IconButton label="Show subpages" variant="tertiary"><ExpandIcon /></IconButton>`. */
84
+ render: ReactElement;
51
85
  }>;
52
- /** The icon-only button that folds the group's subpages open and shut; its children are the chevron. */
53
- declare const GroupToggle: ({ label, children, className, ...props }: NavGroupToggleProps) => ReactNode;
86
+ /**
87
+ * The trigger that folds the group's subpages open and shut, rendered as the
88
+ * button it is given.
89
+ *
90
+ * @example
91
+ * <Nav.GroupToggle render={<IconButton label="Show subpages" variant="tertiary"><ExpandIcon /></IconButton>} />
92
+ */
93
+ declare const GroupToggle: ({ className, ...props }: NavGroupToggleProps) => ReactNode;
54
94
  export type NavGroupPanelProps = Omit<BaseCollapsible.Panel.Props, "className"> & Readonly<{
55
95
  className?: string;
56
96
  }>;
@@ -61,7 +101,10 @@ export type NavGroupListProps = ComponentPropsWithRef<"ul">;
61
101
  declare const GroupList: ({ className, ...props }: NavGroupListProps) => ReactNode;
62
102
  type NavParts = Readonly<{
63
103
  Root: typeof Root;
104
+ Hint: typeof Hint;
105
+ Scroller: typeof Scroller;
64
106
  List: typeof List;
107
+ Indicator: typeof Indicator;
65
108
  Item: typeof Item;
66
109
  Link: typeof Link;
67
110
  Group: typeof Group;
@@ -71,10 +114,11 @@ type NavParts = Readonly<{
71
114
  GroupList: typeof GroupList;
72
115
  }>;
73
116
  /**
74
- * Navigation between pages as `nav > ul > li > a`: a horizontal bar of tabs
75
- * with a pill that slides to the current page, or the app's vertical rail,
76
- * whose destinations with subpages fold them open in a `Group`. An entry that
77
- * is not a link is a `NavItemView.Root`.
117
+ * Navigation between pages as `nav > ul > li > a`: a horizontal bar of tabs,
118
+ * in a `Scroller` with an `Indicator` that slides to the current page, or the
119
+ * app's vertical rail, whose destinations with subpages fold them open in a
120
+ * `Group` and whose entries without a visible label are named by the `Hint`.
121
+ * An entry that is not a link is a `NavItemView.Root`.
78
122
  *
79
123
  * @example
80
124
  * const NavLink = createLink(Nav.Link);
@@ -82,7 +126,7 @@ type NavParts = Readonly<{
82
126
  * <Nav.Root aria-label="Main">
83
127
  * <Nav.List>
84
128
  * <Nav.Item>
85
- * <NavLink to="/" label="Home" activeOptions={{ exact: true }}>
129
+ * <NavLink to="/" activeOptions={{ exact: true }}>
86
130
  * <NavItemView.Icon><HomeIcon /></NavItemView.Icon>
87
131
  * <NavItemView.Label>Home</NavItemView.Label>
88
132
  * </NavLink>