@igne-agency/react-web-ui 0.3.1 → 0.4.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 (290) hide show
  1. package/README.md +32 -1
  2. package/dist/components/accordion/accordion.css +24 -19
  3. package/dist/components/accordion/accordion.d.ts +19 -3
  4. package/dist/components/accordion/accordion.js +86 -32
  5. package/dist/components/accordion/accordion.module.js +8 -8
  6. package/dist/components/active-filters/active-filter-describers.d.ts +1 -1
  7. package/dist/components/active-filters/active-filter-describers.js +1 -1
  8. package/dist/components/active-filters/active-filters.d.ts +35 -2
  9. package/dist/components/active-filters/active-filters.js +57 -52
  10. package/dist/components/active-filters/index.js +2 -2
  11. package/dist/components/attachment-tile/attachment-preview.d.ts +11 -9
  12. package/dist/components/attachment-tile/attachment-preview.js +102 -68
  13. package/dist/components/attachment-tile/attachment-tile.css +22 -13
  14. package/dist/components/attachment-tile/attachment-tile.d.ts +51 -6
  15. package/dist/components/attachment-tile/attachment-tile.js +209 -85
  16. package/dist/components/attachment-tile/attachment-tile.module.js +10 -10
  17. package/dist/components/attachment-tile/index.d.ts +1 -1
  18. package/dist/components/attachment-tile/index.js +2 -2
  19. package/dist/components/avatar/avatar.d.ts +5 -5
  20. package/dist/components/avatar/avatar.js +64 -37
  21. package/dist/components/avatar-group/avatar-group.js +2 -2
  22. package/dist/components/badge/badge.js +1 -1
  23. package/dist/components/breadcrumbs/breadcrumbs.d.ts +22 -7
  24. package/dist/components/breadcrumbs/breadcrumbs.js +189 -170
  25. package/dist/components/button/button.d.ts +2 -3
  26. package/dist/components/button/button.js +58 -77
  27. package/dist/components/button/close-button.d.ts +4 -2
  28. package/dist/components/button/close-button.js +9 -9
  29. package/dist/components/checkbox-field/checkbox-field.d.ts +17 -3
  30. package/dist/components/checkbox-field/checkbox-field.js +108 -131
  31. package/dist/components/checkbox-field/checkbox.css +26 -34
  32. package/dist/components/checkbox-field/checkbox.d.ts +51 -8
  33. package/dist/components/checkbox-field/checkbox.js +221 -57
  34. package/dist/components/checkbox-field/checkbox.module.js +6 -8
  35. package/dist/components/checkbox-field/index.d.ts +0 -1
  36. package/dist/components/checkbox-field/index.js +1 -2
  37. package/dist/components/checkbox-field/tsf-checkbox-field.d.ts +2 -2
  38. package/dist/components/checkbox-group-field/checkbox-group-field.d.ts +4 -1
  39. package/dist/components/checkbox-group-field/checkbox-group-field.js +54 -50
  40. package/dist/components/checkbox-group-field/checkbox-group.d.ts +7 -2
  41. package/dist/components/checkbox-group-field/checkbox-group.js +8 -3
  42. package/dist/components/collapsible/collapsible.css +23 -18
  43. package/dist/components/collapsible/collapsible.d.ts +18 -3
  44. package/dist/components/collapsible/collapsible.js +85 -32
  45. package/dist/components/collapsible/collapsible.module.js +7 -7
  46. package/dist/components/combobox-field/combobox-field.d.ts +9 -1
  47. package/dist/components/combobox-field/combobox-field.js +195 -175
  48. package/dist/components/combobox-field/combobox-items.d.ts +2 -2
  49. package/dist/components/combobox-field/combobox-items.js +4 -4
  50. package/dist/components/combobox-field/combobox.css +99 -96
  51. package/dist/components/combobox-field/combobox.d.ts +94 -15
  52. package/dist/components/combobox-field/combobox.js +484 -159
  53. package/dist/components/combobox-field/combobox.module.js +21 -21
  54. package/dist/components/combobox-field/index.d.ts +0 -1
  55. package/dist/components/combobox-field/selection.d.ts +4 -1
  56. package/dist/components/combobox-field/value-state-view.css +7 -3
  57. package/dist/components/combobox-field/value-state-view.d.ts +4 -2
  58. package/dist/components/combobox-field/value-state-view.js +15 -15
  59. package/dist/components/combobox-field/value-state-view.module.js +6 -4
  60. package/dist/components/composer/composer-attachments.d.ts +11 -3
  61. package/dist/components/composer/composer-attachments.js +61 -47
  62. package/dist/components/composer/composer-editor.d.ts +2 -1
  63. package/dist/components/composer/composer-editor.js +79 -71
  64. package/dist/components/composer/composer-mentions.js +2 -2
  65. package/dist/components/composer/composer.d.ts +42 -21
  66. package/dist/components/composer/composer.js +201 -58
  67. package/dist/components/composer/mention-text.js +3 -3
  68. package/dist/components/confirm-dialog/confirm-dialog.d.ts +8 -7
  69. package/dist/components/confirm-dialog/confirm-dialog.js +10 -9
  70. package/dist/components/conversation/conversation.context.d.ts +0 -5
  71. package/dist/components/conversation/conversation.d.ts +63 -29
  72. package/dist/components/conversation/conversation.js +193 -82
  73. package/dist/components/conversation/index.d.ts +1 -1
  74. package/dist/components/date-field/date-field.d.ts +10 -4
  75. package/dist/components/date-field/date-field.js +57 -43
  76. package/dist/components/date-field/date-input.d.ts +20 -3
  77. package/dist/components/date-field/date-input.js +28 -13
  78. package/dist/components/date-field/index.d.ts +1 -1
  79. package/dist/components/date-field/tsf-date-field.d.ts +1 -1
  80. package/dist/components/date-field/tsf-date-field.js +1 -1
  81. package/dist/components/date-range-field/date-range-field.d.ts +8 -4
  82. package/dist/components/date-range-field/date-range-field.js +57 -45
  83. package/dist/components/date-range-field/date-range-input.d.ts +20 -3
  84. package/dist/components/date-range-field/date-range-input.js +27 -12
  85. package/dist/components/date-range-field/tsf-date-range-field.d.ts +1 -1
  86. package/dist/components/date-range-field/tsf-date-range-field.js +1 -1
  87. package/dist/components/detail-list/detail-list.d.ts +28 -27
  88. package/dist/components/detail-list/detail-list.js +177 -121
  89. package/dist/components/dialog/dialog.d.ts +47 -27
  90. package/dist/components/dialog/dialog.js +101 -38
  91. package/dist/components/divider/divider.js +1 -1
  92. package/dist/components/drawer/drawer.d.ts +48 -30
  93. package/dist/components/drawer/drawer.js +113 -41
  94. package/dist/components/email-field/email-field.d.ts +5 -3
  95. package/dist/components/email-field/email-field.js +1 -3
  96. package/dist/components/email-field/tsf-email-field.d.ts +3 -2
  97. package/dist/components/empty-message/empty-message.d.ts +3 -3
  98. package/dist/components/empty-message/empty-message.js +3 -3
  99. package/dist/components/error-boundary/error-boundary.d.ts +5 -2
  100. package/dist/components/error-boundary/error-boundary.js +2 -3
  101. package/dist/components/error-message/error-message.d.ts +1 -1
  102. package/dist/components/error-message/error-message.js +1 -1
  103. package/dist/components/error-text/error-text.js +3 -3
  104. package/dist/components/field/field.d.ts +5 -5
  105. package/dist/components/field/field.js +9 -9
  106. package/dist/components/field/index.js +2 -2
  107. package/dist/components/field/input-parts.js +1 -1
  108. package/dist/components/field-placeholder/field-placeholder.d.ts +4 -1
  109. package/dist/components/field-placeholder/field-placeholder.js +41 -26
  110. package/dist/components/fieldset/field-group.js +1 -1
  111. package/dist/components/fieldset/fieldset-root.js +1 -1
  112. package/dist/components/fieldset/fieldset.js +1 -1
  113. package/dist/components/file-field/file-field.css +19 -15
  114. package/dist/components/file-field/file-field.d.ts +10 -1
  115. package/dist/components/file-field/file-field.js +130 -109
  116. package/dist/components/file-field/file-field.module.js +6 -4
  117. package/dist/components/file-field/file-input.d.ts +32 -9
  118. package/dist/components/file-field/file-input.js +94 -74
  119. package/dist/components/filter-bar/filter-bar.d.ts +79 -51
  120. package/dist/components/filter-bar/filter-bar.js +552 -216
  121. package/dist/components/form/form.d.ts +4 -6
  122. package/dist/components/form/form.js +6 -8
  123. package/dist/components/icon/icon.d.ts +5 -10
  124. package/dist/components/icon/icon.js +4 -6
  125. package/dist/components/link/link.js +1 -1
  126. package/dist/components/link-button/link-button.d.ts +1 -2
  127. package/dist/components/link-button/link-button.js +12 -22
  128. package/dist/components/loading-message/loading-message.d.ts +2 -2
  129. package/dist/components/loading-message/loading-message.js +1 -1
  130. package/dist/components/locale-provider/locale-provider.js +1 -1
  131. package/dist/components/menu/menu.d.ts +40 -22
  132. package/dist/components/menu/menu.js +100 -40
  133. package/dist/components/nav/nav-context.d.ts +0 -1
  134. package/dist/components/nav/nav-context.js +1 -2
  135. package/dist/components/nav/nav-item-view.d.ts +7 -7
  136. package/dist/components/nav/nav-item-view.js +27 -51
  137. package/dist/components/nav/nav.css +72 -60
  138. package/dist/components/nav/nav.d.ts +15 -8
  139. package/dist/components/nav/nav.js +105 -52
  140. package/dist/components/nav/nav.module.js +14 -14
  141. package/dist/components/number-field/number-field.d.ts +7 -1
  142. package/dist/components/number-field/number-field.js +98 -82
  143. package/dist/components/number-field/number-input.d.ts +53 -4
  144. package/dist/components/number-field/number-input.js +68 -21
  145. package/dist/components/number-field/tsf-number-field.d.ts +1 -1
  146. package/dist/components/number-field/tsf-number-field.js +1 -1
  147. package/dist/components/otp-field/otp-input.d.ts +25 -0
  148. package/dist/components/otp-field/otp-input.js +26 -1
  149. package/dist/components/pagination/pagination.d.ts +82 -23
  150. package/dist/components/pagination/pagination.js +656 -229
  151. package/dist/components/password-field/password-field.d.ts +7 -1
  152. package/dist/components/password-field/password-field.js +117 -126
  153. package/dist/components/password-field/password-strength.js +1 -1
  154. package/dist/components/password-field/tsf-password-field.d.ts +1 -1
  155. package/dist/components/password-field/tsf-password-field.js +1 -1
  156. package/dist/components/photo-field/photo-field.d.ts +17 -3
  157. package/dist/components/photo-field/photo-field.js +168 -89
  158. package/dist/components/photo-field/photo-input-context.d.ts +25 -0
  159. package/dist/components/photo-field/photo-input-context.js +14 -0
  160. package/dist/components/photo-field/photo-input.d.ts +58 -23
  161. package/dist/components/photo-field/photo-input.js +459 -261
  162. package/dist/components/popover/popover.d.ts +55 -23
  163. package/dist/components/popover/popover.js +205 -61
  164. package/dist/components/radio-group-field/radio-group.js +1 -1
  165. package/dist/components/search-field/search-field.d.ts +7 -5
  166. package/dist/components/search-field/search-field.js +4 -6
  167. package/dist/components/search-field/tsf-search-field.d.ts +1 -1
  168. package/dist/components/search-field/tsf-search-field.js +1 -1
  169. package/dist/components/segmented-control-field/segmented-control.js +1 -1
  170. package/dist/components/select-field/select-field.d.ts +7 -1
  171. package/dist/components/select-field/select-field.js +151 -139
  172. package/dist/components/select-field/select.d.ts +28 -6
  173. package/dist/components/select-field/select.js +234 -149
  174. package/dist/components/skeleton/skeleton.js +1 -1
  175. package/dist/components/spinner/spinner.css +47 -1
  176. package/dist/components/spinner/spinner.js +28 -11
  177. package/dist/components/spinner/spinner.module.js +18 -3
  178. package/dist/components/stale/stale.d.ts +17 -21
  179. package/dist/components/stale/stale.js +307 -129
  180. package/dist/components/status-message/status-message.css +22 -21
  181. package/dist/components/status-message/status-message.d.ts +10 -5
  182. package/dist/components/status-message/status-message.js +20 -24
  183. package/dist/components/status-message/status-message.module.js +6 -6
  184. package/dist/components/status-message/status-preset.d.ts +4 -5
  185. package/dist/components/status-message/status-preset.js +3 -3
  186. package/dist/components/switch-field/switch.js +1 -1
  187. package/dist/components/tabs/tabs.d.ts +51 -28
  188. package/dist/components/tabs/tabs.js +219 -144
  189. package/dist/components/tag/tag.css +23 -21
  190. package/dist/components/tag/tag.d.ts +17 -15
  191. package/dist/components/tag/tag.js +140 -65
  192. package/dist/components/tag/tag.module.js +3 -3
  193. package/dist/components/tag-group/tag-group.css +30 -27
  194. package/dist/components/tag-group/tag-group.d.ts +10 -4
  195. package/dist/components/tag-group/tag-group.js +47 -35
  196. package/dist/components/tag-group/tag-group.module.js +4 -4
  197. package/dist/components/text-field/text-field.d.ts +14 -3
  198. package/dist/components/text-field/text-field.js +154 -133
  199. package/dist/components/text-field/text-input.d.ts +89 -3
  200. package/dist/components/text-field/text-input.js +184 -70
  201. package/dist/components/textarea-field/textarea.js +1 -1
  202. package/dist/components/time-field/time-input.d.ts +6 -0
  203. package/dist/components/time-field/time-input.js +6 -0
  204. package/dist/components/time-zone-provider/time-zone-provider.js +1 -1
  205. package/dist/components/toast/index.js +2 -2
  206. package/dist/components/toast/toast-provider.css +38 -34
  207. package/dist/components/toast/toast-provider.d.ts +65 -3
  208. package/dist/components/toast/toast-provider.js +313 -148
  209. package/dist/components/toast/toast-provider.module.js +11 -17
  210. package/dist/components/toast/toast.d.ts +5 -1
  211. package/dist/components/toast/toast.js +2 -1
  212. package/dist/components/toggle-group-field/toggle-group.js +1 -1
  213. package/dist/components/tooltip/tooltip.d.ts +6 -6
  214. package/dist/components/tooltip/tooltip.js +7 -7
  215. package/dist/data-table/data-table-content.d.ts +18 -10
  216. package/dist/data-table/data-table-content.js +145 -290
  217. package/dist/data-table/data-table-context.d.ts +4 -2
  218. package/dist/data-table/data-table-context.js +1 -1
  219. package/dist/data-table/data-table-parts.d.ts +99 -0
  220. package/dist/data-table/data-table-parts.js +1182 -0
  221. package/dist/data-table/data-table-selection.d.ts +7 -3
  222. package/dist/data-table/data-table-selection.js +62 -37
  223. package/dist/data-table/data-table.css +100 -95
  224. package/dist/data-table/data-table.d.ts +49 -25
  225. package/dist/data-table/data-table.js +95 -83
  226. package/dist/data-table/data-table.module.js +34 -34
  227. package/dist/data-table/index.d.ts +2 -1
  228. package/dist/data-table/index.js +2 -1
  229. package/dist/data-view/use-data-view.d.ts +2 -2
  230. package/dist/data-view/use-data-view.js +2 -2
  231. package/dist/index.js +7 -8
  232. package/dist/lib/calendar/calendar-navigation.d.ts +9 -2
  233. package/dist/lib/calendar/calendar-navigation.js +72 -73
  234. package/dist/lib/calendar/calendar-year.d.ts +4 -3
  235. package/dist/lib/calendar/calendar-year.js +137 -156
  236. package/dist/lib/calendar/temporal.d.ts +18 -12
  237. package/dist/lib/calendar/temporal.js +191 -147
  238. package/dist/lib/table-storage.d.ts +2 -2
  239. package/dist/lib/table-storage.js +2 -2
  240. package/dist/lib/unsaved-changes/leave-guard.js +1 -1
  241. package/dist/terrazzo/index.d.ts +16 -0
  242. package/dist/terrazzo/index.js +94 -2
  243. package/dist/tokens.css +71 -69
  244. package/package.json +3 -2
  245. package/tokens/ref.tokens.json +0 -30
  246. package/tokens/sys.tokens.json +0 -7
  247. package/dist/assets/spinner.js +0 -28
  248. package/dist/components/checkbox-field/checkbox-glyph.d.ts +0 -12
  249. package/dist/components/checkbox-field/checkbox-glyph.js +0 -38
  250. package/dist/components/combobox-field/combobox-popup-body.d.ts +0 -34
  251. package/dist/components/combobox-field/combobox-popup-body.js +0 -142
  252. package/dist/components/conversation/conversation.context.js +0 -4
  253. package/dist/vendor/@material-design-icons/svg/outlined/add.js +0 -12
  254. package/dist/vendor/@material-design-icons/svg/outlined/arrow_downward.js +0 -12
  255. package/dist/vendor/@material-design-icons/svg/outlined/arrow_forward.js +0 -12
  256. package/dist/vendor/@material-design-icons/svg/outlined/arrow_upward.js +0 -12
  257. package/dist/vendor/@material-design-icons/svg/outlined/attach_file.js +0 -12
  258. package/dist/vendor/@material-design-icons/svg/outlined/block.js +0 -12
  259. package/dist/vendor/@material-design-icons/svg/outlined/calendar_today.js +0 -12
  260. package/dist/vendor/@material-design-icons/svg/outlined/check.js +0 -12
  261. package/dist/vendor/@material-design-icons/svg/outlined/check_circle.js +0 -12
  262. package/dist/vendor/@material-design-icons/svg/outlined/chevron_left.js +0 -12
  263. package/dist/vendor/@material-design-icons/svg/outlined/chevron_right.js +0 -12
  264. package/dist/vendor/@material-design-icons/svg/outlined/close.js +0 -12
  265. package/dist/vendor/@material-design-icons/svg/outlined/content_copy.js +0 -12
  266. package/dist/vendor/@material-design-icons/svg/outlined/date_range.js +0 -12
  267. package/dist/vendor/@material-design-icons/svg/outlined/description.js +0 -12
  268. package/dist/vendor/@material-design-icons/svg/outlined/download.js +0 -12
  269. package/dist/vendor/@material-design-icons/svg/outlined/error.js +0 -12
  270. package/dist/vendor/@material-design-icons/svg/outlined/error_outline.js +0 -12
  271. package/dist/vendor/@material-design-icons/svg/outlined/expand_less.js +0 -12
  272. package/dist/vendor/@material-design-icons/svg/outlined/expand_more.js +0 -12
  273. package/dist/vendor/@material-design-icons/svg/outlined/filter_alt.js +0 -12
  274. package/dist/vendor/@material-design-icons/svg/outlined/filter_alt_off.js +0 -12
  275. package/dist/vendor/@material-design-icons/svg/outlined/first_page.js +0 -12
  276. package/dist/vendor/@material-design-icons/svg/outlined/info.js +0 -12
  277. package/dist/vendor/@material-design-icons/svg/outlined/keyboard_arrow_down.js +0 -12
  278. package/dist/vendor/@material-design-icons/svg/outlined/last_page.js +0 -12
  279. package/dist/vendor/@material-design-icons/svg/outlined/mail.js +0 -12
  280. package/dist/vendor/@material-design-icons/svg/outlined/more_horiz.js +0 -12
  281. package/dist/vendor/@material-design-icons/svg/outlined/photo_camera.js +0 -12
  282. package/dist/vendor/@material-design-icons/svg/outlined/remove.js +0 -12
  283. package/dist/vendor/@material-design-icons/svg/outlined/restart_alt.js +0 -12
  284. package/dist/vendor/@material-design-icons/svg/outlined/restore.js +0 -12
  285. package/dist/vendor/@material-design-icons/svg/outlined/search.js +0 -12
  286. package/dist/vendor/@material-design-icons/svg/outlined/unfold_more.js +0 -12
  287. package/dist/vendor/@material-design-icons/svg/outlined/upload_file.js +0 -12
  288. package/dist/vendor/@material-design-icons/svg/outlined/visibility.js +0 -12
  289. package/dist/vendor/@material-design-icons/svg/outlined/visibility_off.js +0 -12
  290. package/dist/vendor/@material-design-icons/svg/outlined/warning_amber.js +0 -12
@@ -1,11 +1,27 @@
1
1
  import { Popover as BasePopover } from "@base-ui/react/popover";
2
2
  import { type ComponentProps, type ReactNode } from "react";
3
+ export type PopoverRootProps<Payload = unknown> = Omit<BasePopover.Root.Props<Payload>, "open" | "defaultOpen" | "onOpenChange" | "modal" | "children"> & Readonly<{
4
+ /** Whether the popover is open. Leave it out for a popover that keeps its own state. */
5
+ open?: boolean;
6
+ /** Whether the popover starts open, when it keeps its own state. @default false */
7
+ defaultOpen?: boolean;
8
+ /** Called with the new open state when the popover opens or closes. */
9
+ onOpenChange?: BasePopover.Root.Props<Payload>["onOpenChange"];
10
+ /** Whether focus stays inside the popover and the page behind it is inert while it is open. @default false */
11
+ modal?: BasePopover.Root.Props<Payload>["modal"];
12
+ /** The trigger and the popover's content. */
13
+ children?: BasePopover.Root.Props<Payload>["children"];
14
+ }>;
15
+ /** Holds the popover's open state for its parts. It renders no element of its own. */
16
+ declare const Root: <Payload>(props: PopoverRootProps<Payload>) => ReactNode;
3
17
  export type PopoverTriggerProps = ComponentProps<typeof BasePopover.Trigger> & Readonly<{
4
18
  /** Called once a pointer rests on the trigger or it takes focus, to warm what the popup shows. */
5
19
  onIntent?: () => void;
6
20
  }>;
21
+ /** The control that opens the popover, warming its content on intent. */
7
22
  declare const Trigger: ({ onIntent, onPointerEnter, onPointerLeave, onFocus, ...props }: PopoverTriggerProps) => ReactNode;
8
23
  export type PopoverPositionerProps = Omit<ComponentProps<typeof BasePopover.Positioner>, "ref">;
24
+ /** Places the popup against its trigger, clear of the viewport's edges. */
9
25
  declare const Positioner: ({ sideOffset, className, ...props }: PopoverPositionerProps) => ReactNode;
10
26
  export type PopoverPopupProps = ComponentProps<typeof BasePopover.Popup> & (Readonly<{
11
27
  /** Whether the content the popup describes is still in flight. */
@@ -16,56 +32,72 @@ export type PopoverPopupProps = ComponentProps<typeof BasePopover.Popup> & (Read
16
32
  loading?: undefined;
17
33
  loadingLabel?: undefined;
18
34
  }>);
35
+ /**
36
+ * The popover's surface. While `loading`, its title and values draw as
37
+ * placeholders and `loadingLabel` is announced once.
38
+ */
19
39
  declare const Popup: ({ loading, loadingLabel, className, children, ...props }: PopoverPopupProps) => ReactNode;
40
+ /** The arrow pointing from the popup at its trigger. */
20
41
  declare const Arrow: ({ className, ...props }: ComponentProps<typeof BasePopover.Arrow>) => ReactNode;
42
+ /** The popover's heading, which names it. */
21
43
  declare const Title: ({ className, children, ...props }: ComponentProps<typeof BasePopover.Title>) => ReactNode;
44
+ /** A table of `Row`s whose labels and values line up in two columns. */
22
45
  declare const Rows: ({ className, ...props }: ComponentProps<"div">) => ReactNode;
23
- export type PopoverRowProps = Readonly<{
24
- /** Left-aligned descriptor. */
25
- label: ReactNode;
26
- /** Value displayed beside the label. */
27
- children: ReactNode;
46
+ export type PopoverRowProps = ComponentProps<"div">;
47
+ /** One labelled value: a `RowLabel`, then a `RowValue`. */
48
+ declare const Row: ({ className, ...props }: PopoverRowProps) => ReactNode;
49
+ export type PopoverRowLabelProps = ComponentProps<"span">;
50
+ /** What the row's value is, at its start. */
51
+ declare const RowLabel: ({ className, ...props }: PopoverRowLabelProps) => ReactNode;
52
+ export type PopoverRowValueProps = ComponentProps<"span"> & Readonly<{
28
53
  /** Uses tabular figures for evenly spaced numbers. */
29
54
  numeric?: boolean;
30
- className?: string;
31
55
  }>;
32
- declare const Row: ({ label, children, numeric, className, }: PopoverRowProps) => ReactNode;
56
+ /** The row's value, beside its label; a placeholder while the popup is loading. */
57
+ declare const RowValue: ({ numeric, className, children, ...props }: PopoverRowValueProps) => ReactNode;
58
+ export type PopoverContentProps = PopoverPopupProps & Readonly<Pick<PopoverPositionerProps, "side" | "sideOffset" | "align" | "alignOffset"> & {
59
+ /** The element the popover is portalled into. @default document.body */
60
+ container?: BasePopover.Portal.Props["container"];
61
+ }>;
62
+ /** `Portal`, `Positioner` and `Popup` in one: the popover's surface, placed against its trigger. */
63
+ declare const Content: ({ container, side, sideOffset, align, alignOffset, ...props }: PopoverContentProps) => ReactNode;
33
64
  type PopoverParts = Readonly<{
34
- Root: typeof BasePopover.Root;
65
+ Root: typeof Root;
35
66
  Trigger: typeof Trigger;
36
67
  Portal: typeof BasePopover.Portal;
37
68
  Positioner: typeof Positioner;
38
69
  Popup: typeof Popup;
70
+ Content: typeof Content;
39
71
  Arrow: typeof Arrow;
40
72
  Title: typeof Title;
41
73
  Rows: typeof Rows;
42
74
  Row: typeof Row;
75
+ RowLabel: typeof RowLabel;
76
+ RowValue: typeof RowValue;
43
77
  Description: typeof BasePopover.Description;
44
78
  Close: typeof BasePopover.Close;
45
79
  createHandle: typeof BasePopover.createHandle;
46
80
  }>;
47
81
  /**
48
- * Rich light popover over base-ui's Popover. Adds a styled `Title` and a
49
- * labelled `Row` slot (label on the left, value on the right) for cell-level
50
- * composition explainers. The positioner keeps `--popup-edge-padding` from the
51
- * viewport's edges.
82
+ * A rich popover over base-ui's `Popover`, with a `Title` and rows of labelled
83
+ * values. `Content` bundles the portal, positioner and popup; the unbundled
84
+ * parts stay.
52
85
  *
53
86
  * @example
54
87
  * <Popover.Root>
55
88
  * <Popover.Trigger openOnHover onIntent={() => prefetchRate(id)}>
56
89
  * € 1.234,56
57
90
  * </Popover.Trigger>
58
- * <Popover.Portal>
59
- * <Popover.Positioner>
60
- * <Popover.Popup loading={rate.isPending} loadingLabel="Loading the rate">
61
- * <Popover.Arrow />
62
- * <Popover.Title>Rate breakdown</Popover.Title>
63
- * <Popover.Rows>
64
- * <Popover.Row numeric label="Base">{rate.data?.base}</Popover.Row>
65
- * </Popover.Rows>
66
- * </Popover.Popup>
67
- * </Popover.Positioner>
68
- * </Popover.Portal>
91
+ * <Popover.Content loading={rate.isPending} loadingLabel="Loading the rate">
92
+ * <Popover.Arrow />
93
+ * <Popover.Title>Rate breakdown</Popover.Title>
94
+ * <Popover.Rows>
95
+ * <Popover.Row>
96
+ * <Popover.RowLabel>Base</Popover.RowLabel>
97
+ * <Popover.RowValue numeric>{rate.data?.base}</Popover.RowValue>
98
+ * </Popover.Row>
99
+ * </Popover.Rows>
100
+ * </Popover.Content>
69
101
  * </Popover.Root>
70
102
  */
71
103
  export declare const Popover: PopoverParts;
@@ -4,13 +4,25 @@ import { useIntent } from "../../lib/use-intent.js";
4
4
  import { Skeleton } from "../skeleton/skeleton.js";
5
5
  import popover_module_default from "./popover.module.js";
6
6
  import { c } from "react/compiler-runtime";
7
- import { createContext, useContext } from "react";
8
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
7
  import { clsx } from "clsx";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import { createContext, useContext } from "react";
10
10
  import { mergeProps } from "@base-ui/react/merge-props";
11
11
  import { Popover } from "@base-ui/react/popover";
12
12
  // src/components/popover/popover.tsx
13
+ /** Holds the popover's open state for its parts. It renders no element of its own. */
14
+ var Root = (props) => {
15
+ const $ = c(2);
16
+ let t0;
17
+ if ($[0] !== props) {
18
+ t0 = /* @__PURE__ */ jsx(Popover.Root, { ...props });
19
+ $[0] = props;
20
+ $[1] = t0;
21
+ } else t0 = $[1];
22
+ return t0;
23
+ };
13
24
  var LoadingContext = createContext(false);
25
+ /** The control that opens the popover, warming its content on intent. */
14
26
  var Trigger = (t0) => {
15
27
  const $ = c(14);
16
28
  let onFocus;
@@ -59,6 +71,7 @@ var Trigger = (t0) => {
59
71
  } else t2 = $[13];
60
72
  return t2;
61
73
  };
74
+ /** Places the popup against its trigger, clear of the viewport's edges. */
62
75
  var Positioner = (t0) => {
63
76
  const $ = c(11);
64
77
  let className;
@@ -134,6 +147,10 @@ var SkeletonText = (t0) => {
134
147
  } else t4 = $[7];
135
148
  return t4;
136
149
  };
150
+ /**
151
+ * The popover's surface. While `loading`, its title and values draw as
152
+ * placeholders and `loadingLabel` is announced once.
153
+ */
137
154
  var Popup = (t0) => {
138
155
  const $ = c(21);
139
156
  let children;
@@ -211,6 +228,7 @@ var Popup = (t0) => {
211
228
  } else t6 = $[20];
212
229
  return t6;
213
230
  };
231
+ /** The arrow pointing from the popup at its trigger. */
214
232
  var Arrow = (t0) => {
215
233
  const $ = c(9);
216
234
  let className;
@@ -257,6 +275,7 @@ var Arrow = (t0) => {
257
275
  } else t3 = $[8];
258
276
  return t3;
259
277
  };
278
+ /** The popover's heading, which names it. */
260
279
  var Title = (t0) => {
261
280
  const $ = c(13);
262
281
  let children;
@@ -282,7 +301,7 @@ var Title = (t0) => {
282
301
  } else t1 = $[5];
283
302
  let t2;
284
303
  if ($[6] !== children || $[7] !== loading) {
285
- t2 = loading ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SkeletonText, {
304
+ t2 = loading ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SkeletonText, {
286
305
  className: popover_module_default.titleSkeleton,
287
306
  children
288
307
  }), /* @__PURE__ */ jsx("span", {
@@ -307,6 +326,7 @@ var Title = (t0) => {
307
326
  } else t3 = $[12];
308
327
  return t3;
309
328
  };
329
+ /** A table of `Row`s whose labels and values line up in two columns. */
310
330
  var Rows = (t0) => {
311
331
  const $ = c(8);
312
332
  let className;
@@ -338,95 +358,219 @@ var Rows = (t0) => {
338
358
  } else t2 = $[7];
339
359
  return t2;
340
360
  };
361
+ /** One labelled value: a `RowLabel`, then a `RowValue`. */
341
362
  var Row = (t0) => {
342
- const $ = c(15);
343
- const { label, children, numeric, className } = t0;
344
- const loading = useContext(LoadingContext);
363
+ const $ = c(8);
364
+ let className;
365
+ let props;
366
+ if ($[0] !== t0) {
367
+ ({className, ...props} = t0);
368
+ $[0] = t0;
369
+ $[1] = className;
370
+ $[2] = props;
371
+ } else {
372
+ className = $[1];
373
+ props = $[2];
374
+ }
345
375
  let t1;
346
- if ($[0] !== className) {
376
+ if ($[3] !== className) {
347
377
  t1 = clsx(popover_module_default.row, className);
348
- $[0] = className;
349
- $[1] = t1;
350
- } else t1 = $[1];
378
+ $[3] = className;
379
+ $[4] = t1;
380
+ } else t1 = $[4];
351
381
  let t2;
352
- if ($[2] !== label) {
382
+ if ($[5] !== props || $[6] !== t1) {
383
+ t2 = /* @__PURE__ */ jsx("div", {
384
+ className: t1,
385
+ ...props
386
+ });
387
+ $[5] = props;
388
+ $[6] = t1;
389
+ $[7] = t2;
390
+ } else t2 = $[7];
391
+ return t2;
392
+ };
393
+ /** What the row's value is, at its start. */
394
+ var RowLabel = (t0) => {
395
+ const $ = c(8);
396
+ let className;
397
+ let props;
398
+ if ($[0] !== t0) {
399
+ ({className, ...props} = t0);
400
+ $[0] = t0;
401
+ $[1] = className;
402
+ $[2] = props;
403
+ } else {
404
+ className = $[1];
405
+ props = $[2];
406
+ }
407
+ let t1;
408
+ if ($[3] !== className) {
409
+ t1 = clsx(popover_module_default.rowLabel, className);
410
+ $[3] = className;
411
+ $[4] = t1;
412
+ } else t1 = $[4];
413
+ let t2;
414
+ if ($[5] !== props || $[6] !== t1) {
353
415
  t2 = /* @__PURE__ */ jsx("span", {
354
- className: popover_module_default.rowLabel,
355
- children: label
416
+ className: t1,
417
+ ...props
356
418
  });
357
- $[2] = label;
358
- $[3] = t2;
359
- } else t2 = $[3];
360
- const t3 = numeric || void 0;
361
- let t4;
362
- if ($[4] !== children || $[5] !== label || $[6] !== loading) {
363
- t4 = loading ? /* @__PURE__ */ jsx(SkeletonText, {
419
+ $[5] = props;
420
+ $[6] = t1;
421
+ $[7] = t2;
422
+ } else t2 = $[7];
423
+ return t2;
424
+ };
425
+ /** The row's value, beside its label; a placeholder while the popup is loading. */
426
+ var RowValue = (t0) => {
427
+ const $ = c(15);
428
+ let children;
429
+ let className;
430
+ let numeric;
431
+ let props;
432
+ if ($[0] !== t0) {
433
+ ({numeric, className, children, ...props} = t0);
434
+ $[0] = t0;
435
+ $[1] = children;
436
+ $[2] = className;
437
+ $[3] = numeric;
438
+ $[4] = props;
439
+ } else {
440
+ children = $[1];
441
+ className = $[2];
442
+ numeric = $[3];
443
+ props = $[4];
444
+ }
445
+ const loading = useContext(LoadingContext);
446
+ let t1;
447
+ if ($[5] !== className) {
448
+ t1 = clsx(popover_module_default.rowValue, className);
449
+ $[5] = className;
450
+ $[6] = t1;
451
+ } else t1 = $[6];
452
+ const t2 = numeric || void 0;
453
+ let t3;
454
+ if ($[7] !== children || $[8] !== loading) {
455
+ t3 = loading ? /* @__PURE__ */ jsx(SkeletonText, {
364
456
  className: popover_module_default.valueSkeleton,
365
- children: label
457
+ children
366
458
  }) : children;
367
- $[4] = children;
368
- $[5] = label;
369
- $[6] = loading;
370
- $[7] = t4;
371
- } else t4 = $[7];
372
- let t5;
373
- if ($[8] !== t3 || $[9] !== t4) {
374
- t5 = /* @__PURE__ */ jsx("span", {
375
- className: popover_module_default.rowValue,
376
- "data-numeric": t3,
377
- children: t4
378
- });
379
- $[8] = t3;
380
- $[9] = t4;
381
- $[10] = t5;
382
- } else t5 = $[10];
383
- let t6;
384
- if ($[11] !== t1 || $[12] !== t2 || $[13] !== t5) {
385
- t6 = /* @__PURE__ */ jsxs("div", {
459
+ $[7] = children;
460
+ $[8] = loading;
461
+ $[9] = t3;
462
+ } else t3 = $[9];
463
+ let t4;
464
+ if ($[10] !== props || $[11] !== t1 || $[12] !== t2 || $[13] !== t3) {
465
+ t4 = /* @__PURE__ */ jsx("span", {
386
466
  className: t1,
387
- children: [t2, t5]
467
+ "data-numeric": t2,
468
+ ...props,
469
+ children: t3
388
470
  });
471
+ $[10] = props;
389
472
  $[11] = t1;
390
473
  $[12] = t2;
391
- $[13] = t5;
392
- $[14] = t6;
393
- } else t6 = $[14];
394
- return t6;
474
+ $[13] = t3;
475
+ $[14] = t4;
476
+ } else t4 = $[14];
477
+ return t4;
478
+ };
479
+ /** `Portal`, `Positioner` and `Popup` in one: the popover's surface, placed against its trigger. */
480
+ var Content = (t0) => {
481
+ const $ = c(18);
482
+ let align;
483
+ let alignOffset;
484
+ let container;
485
+ let props;
486
+ let side;
487
+ let sideOffset;
488
+ if ($[0] !== t0) {
489
+ ({container, side, sideOffset, align, alignOffset, ...props} = t0);
490
+ $[0] = t0;
491
+ $[1] = align;
492
+ $[2] = alignOffset;
493
+ $[3] = container;
494
+ $[4] = props;
495
+ $[5] = side;
496
+ $[6] = sideOffset;
497
+ } else {
498
+ align = $[1];
499
+ alignOffset = $[2];
500
+ container = $[3];
501
+ props = $[4];
502
+ side = $[5];
503
+ sideOffset = $[6];
504
+ }
505
+ let t1;
506
+ if ($[7] !== props) {
507
+ t1 = /* @__PURE__ */ jsx(Popup, { ...props });
508
+ $[7] = props;
509
+ $[8] = t1;
510
+ } else t1 = $[8];
511
+ let t2;
512
+ if ($[9] !== align || $[10] !== alignOffset || $[11] !== side || $[12] !== sideOffset || $[13] !== t1) {
513
+ t2 = /* @__PURE__ */ jsx(Positioner, {
514
+ side,
515
+ sideOffset,
516
+ align,
517
+ alignOffset,
518
+ children: t1
519
+ });
520
+ $[9] = align;
521
+ $[10] = alignOffset;
522
+ $[11] = side;
523
+ $[12] = sideOffset;
524
+ $[13] = t1;
525
+ $[14] = t2;
526
+ } else t2 = $[14];
527
+ let t3;
528
+ if ($[15] !== container || $[16] !== t2) {
529
+ t3 = /* @__PURE__ */ jsx(Popover.Portal, {
530
+ container,
531
+ children: t2
532
+ });
533
+ $[15] = container;
534
+ $[16] = t2;
535
+ $[17] = t3;
536
+ } else t3 = $[17];
537
+ return t3;
395
538
  };
396
539
  /**
397
- * Rich light popover over base-ui's Popover. Adds a styled `Title` and a
398
- * labelled `Row` slot (label on the left, value on the right) for cell-level
399
- * composition explainers. The positioner keeps `--popup-edge-padding` from the
400
- * viewport's edges.
540
+ * A rich popover over base-ui's `Popover`, with a `Title` and rows of labelled
541
+ * values. `Content` bundles the portal, positioner and popup; the unbundled
542
+ * parts stay.
401
543
  *
402
544
  * @example
403
545
  * <Popover.Root>
404
546
  * <Popover.Trigger openOnHover onIntent={() => prefetchRate(id)}>
405
547
  * € 1.234,56
406
548
  * </Popover.Trigger>
407
- * <Popover.Portal>
408
- * <Popover.Positioner>
409
- * <Popover.Popup loading={rate.isPending} loadingLabel="Loading the rate">
410
- * <Popover.Arrow />
411
- * <Popover.Title>Rate breakdown</Popover.Title>
412
- * <Popover.Rows>
413
- * <Popover.Row numeric label="Base">{rate.data?.base}</Popover.Row>
414
- * </Popover.Rows>
415
- * </Popover.Popup>
416
- * </Popover.Positioner>
417
- * </Popover.Portal>
549
+ * <Popover.Content loading={rate.isPending} loadingLabel="Loading the rate">
550
+ * <Popover.Arrow />
551
+ * <Popover.Title>Rate breakdown</Popover.Title>
552
+ * <Popover.Rows>
553
+ * <Popover.Row>
554
+ * <Popover.RowLabel>Base</Popover.RowLabel>
555
+ * <Popover.RowValue numeric>{rate.data?.base}</Popover.RowValue>
556
+ * </Popover.Row>
557
+ * </Popover.Rows>
558
+ * </Popover.Content>
418
559
  * </Popover.Root>
419
560
  */
420
561
  var Popover$1 = {
421
- Root: Popover.Root,
562
+ Root,
422
563
  Trigger,
423
564
  Portal: Popover.Portal,
424
565
  Positioner,
425
566
  Popup,
567
+ Content,
426
568
  Arrow,
427
569
  Title,
428
570
  Rows,
429
571
  Row,
572
+ RowLabel,
573
+ RowValue,
430
574
  Description: Popover.Description,
431
575
  Close: Popover.Close,
432
576
  createHandle: Popover.createHandle
@@ -4,8 +4,8 @@ import { useFieldFocus } from "../field/use-field-focus.js";
4
4
  import { FieldsetLegend, FieldsetRoot } from "../fieldset/fieldset-root.js";
5
5
  import radio_group_module_default from "./radio-group.module.js";
6
6
  import { c } from "react/compiler-runtime";
7
- import { jsx } from "react/jsx-runtime";
8
7
  import { clsx } from "clsx";
8
+ import { jsx } from "react/jsx-runtime";
9
9
  import { Field } from "@base-ui/react/field";
10
10
  import { Radio } from "@base-ui/react/radio";
11
11
  import { RadioGroup } from "@base-ui/react/radio-group";
@@ -1,17 +1,19 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { type TextFieldBaseProps, type TextPresetProps } from "../text-field/index.ts";
3
3
  /** What a search field takes beside the preset props. */
4
- export type SearchFieldExtraProps = Pick<TextFieldBaseProps, "labelHidden" | "placeholder"> & Readonly<{
4
+ export type SearchFieldExtraProps = Pick<TextFieldBaseProps, "labelHidden" | "placeholder" | "icon"> & Readonly<{
5
5
  /** The clear button's accessible name and tooltip, such as "Clear search". */
6
6
  clearLabel: string;
7
+ /** The clear button's icon. */
8
+ clearIcon: ReactNode;
7
9
  }>;
8
10
  export type SearchFieldProps = TextPresetProps & SearchFieldExtraProps;
9
11
  /**
10
- * A search box: a `TextField` with a leading search glyph and the clear button.
11
- * `labelHidden` keeps the name for screen readers where the layout carries no
12
- * room for a visible label.
12
+ * A search box: a `TextField` with an optional leading glyph and the clear
13
+ * button. `labelHidden` keeps the name for screen readers where the layout
14
+ * carries no room for a visible label.
13
15
  *
14
16
  * @example
15
- * <SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" value={search} onValueChange={setSearch} />
17
+ * <SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" clearIcon={<CloseIcon />} icon={<SearchIcon />} value={search} onValueChange={setSearch} />
16
18
  */
17
19
  export declare const SearchField: ({ enterKeyHint, ...props }: SearchFieldProps) => ReactNode;
@@ -1,15 +1,14 @@
1
- import SvgSearch from "../../vendor/@material-design-icons/svg/outlined/search.js";
2
1
  import { TextField } from "../text-field/text-field.js";
3
2
  import { c } from "react/compiler-runtime";
4
3
  import { jsx } from "react/jsx-runtime";
5
4
  // src/components/search-field/search-field.tsx
6
5
  /**
7
- * A search box: a `TextField` with a leading search glyph and the clear button.
8
- * `labelHidden` keeps the name for screen readers where the layout carries no
9
- * room for a visible label.
6
+ * A search box: a `TextField` with an optional leading glyph and the clear
7
+ * button. `labelHidden` keeps the name for screen readers where the layout
8
+ * carries no room for a visible label.
10
9
  *
11
10
  * @example
12
- * <SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" value={search} onValueChange={setSearch} />
11
+ * <SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" clearIcon={<CloseIcon />} icon={<SearchIcon />} value={search} onValueChange={setSearch} />
13
12
  */
14
13
  var SearchField = (t0) => {
15
14
  const $ = c(6);
@@ -31,7 +30,6 @@ var SearchField = (t0) => {
31
30
  ...props,
32
31
  enterKeyHint,
33
32
  type: "search",
34
- icon: SvgSearch,
35
33
  clearable: true,
36
34
  autoComplete: "off",
37
35
  spellCheck: false
@@ -8,7 +8,7 @@ export type TSFSearchFieldProps = TSFTextPresetProps<SearchFieldExtraProps>;
8
8
  *
9
9
  * @example
10
10
  * <form.AppField name="query">
11
- * {field => <field.SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" />}
11
+ * {field => <field.SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" clearIcon={<CloseIcon />} />}
12
12
  * </form.AppField>
13
13
  */
14
14
  export declare const TSFSearchField: (props: TSFSearchFieldProps) => ReactNode;
@@ -7,7 +7,7 @@ import { SearchField } from "./search-field.js";
7
7
  *
8
8
  * @example
9
9
  * <form.AppField name="query">
10
- * {field => <field.SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" />}
10
+ * {field => <field.SearchField label="Search clients" optionalLabel="optional" clearLabel="Clear search" clearIcon={<CloseIcon />} />}
11
11
  * </form.AppField>
12
12
  */
13
13
  var TSFSearchField = connectTextPreset(SearchField);
@@ -6,8 +6,8 @@ import { useFormDisabled } from "../form/form-context.js";
6
6
  import { useSlidingIndicator } from "../../lib/sliding-indicator/use-sliding-indicator.js";
7
7
  import segmented_control_module_default from "./segmented-control.module.js";
8
8
  import { c } from "react/compiler-runtime";
9
- import { jsx } from "react/jsx-runtime";
10
9
  import { clsx } from "clsx";
10
+ import { jsx } from "react/jsx-runtime";
11
11
  import { Toggle } from "@base-ui/react/toggle";
12
12
  import { ToggleGroup } from "@base-ui/react/toggle-group";
13
13
  // src/components/segmented-control-field/segmented-control.tsx
@@ -4,6 +4,10 @@ import { type SelectRootProps } from "./select.tsx";
4
4
  export type SelectFieldProps<T extends string> = FieldProps & OptionsLoadLabels & Omit<SelectRootProps<T>, "children" | "required"> & Readonly<{
5
5
  /** Shown on the trigger while nothing is selected. */
6
6
  placeholder?: string;
7
+ /** The chevron after the trigger's value, such as an expand icon. */
8
+ icon?: ReactNode;
9
+ /** The mark beside the chosen option, such as a tick. */
10
+ checkIcon: ReactNode;
7
11
  /** How far the options have loaded, when they come from a query. */
8
12
  load?: OptionsLoad;
9
13
  /** Called once focus has left the field, its popup included. */
@@ -20,6 +24,8 @@ export type SelectFieldProps<T extends string> = FieldProps & OptionsLoadLabels
20
24
  * label="Status"
21
25
  * optionalLabel="optional"
22
26
  * options={statusOptions}
27
+ * icon={<ExpandMoreIcon />}
28
+ * checkIcon={<CheckIcon />}
23
29
  * value={status}
24
30
  * onValueChange={setStatus}
25
31
  * loadingLabel="Loading options…"
@@ -29,4 +35,4 @@ export type SelectFieldProps<T extends string> = FieldProps & OptionsLoadLabels
29
35
  * noOptionsLabel="No options available."
30
36
  * />
31
37
  */
32
- export declare const SelectField: <T extends string>({ label, description, errors, requiredness, optionalLabel, dirty, touched, pending, placeholder, load, loadingLabel, loadFailedLabel, loadBrokenLabel, retryLabel, noOptionsLabel, onBlur, className, onOpenChange, onOpenChangeComplete, ...rootProps }: SelectFieldProps<T>) => ReactNode;
38
+ export declare const SelectField: <T extends string>({ label, description, errors, requiredness, optionalLabel, dirty, touched, pending, placeholder, icon, checkIcon, load, loadingLabel, loadFailedLabel, loadBrokenLabel, retryLabel, noOptionsLabel, onBlur, className, onOpenChange, onOpenChangeComplete, ...rootProps }: SelectFieldProps<T>) => ReactNode;