@plumile/ui 0.1.187 → 0.1.188

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 (211) hide show
  1. package/lib/esm/admin/organisms/admin_sidebar/AdminSidebar.js +1 -1
  2. package/lib/esm/admin/organisms/admin_sidebar/adminSidebar.css.js +2 -2
  3. package/lib/esm/admin/organisms/admin_topbar/adminTopbar.css.js +1 -1
  4. package/lib/esm/atomic/atoms/badge/badge.css.js +7 -7
  5. package/lib/esm/atomic/atoms/button/button.css.js +38 -38
  6. package/lib/esm/atomic/atoms/checkbox/checkbox.css.js +6 -6
  7. package/lib/esm/atomic/atoms/error_message/errorMessage.css.js +1 -1
  8. package/lib/esm/atomic/atoms/input/input.css.js +9 -9
  9. package/lib/esm/atomic/atoms/label/label.css.js +3 -3
  10. package/lib/esm/atomic/atoms/modal/Modal.js +1 -1
  11. package/lib/esm/atomic/atoms/modal/modal.css.js +1 -1
  12. package/lib/esm/atomic/atoms/overlay/overlay.css.js +1 -1
  13. package/lib/esm/atomic/atoms/textarea/textarea.css.js +8 -8
  14. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +1 -1
  15. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +1 -1
  16. package/lib/esm/atomic/molecules/checkbox_field/checkboxField.css.js +1 -1
  17. package/lib/esm/atomic/molecules/dropdown/Dropdown.js +75 -95
  18. package/lib/esm/atomic/molecules/dropdown/Dropdown.js.map +1 -1
  19. package/lib/esm/atomic/molecules/dropdown/dropdown.css.js +1 -1
  20. package/lib/esm/atomic/molecules/empty-state/EmptyState.css.js +17 -17
  21. package/lib/esm/atomic/molecules/form/formStyles.css.js +1 -1
  22. package/lib/esm/atomic/molecules/form_error/formError.css.js +1 -1
  23. package/lib/esm/atomic/molecules/form_field/formField.css.js +1 -1
  24. package/lib/esm/atomic/molecules/form_field_layout/FormFieldLayout.js +55 -0
  25. package/lib/esm/atomic/molecules/form_field_layout/FormFieldLayout.js.map +1 -0
  26. package/lib/esm/atomic/molecules/form_field_layout/formFieldLayout.css.js +8 -0
  27. package/lib/esm/atomic/molecules/form_field_layout/formFieldLayout.css.js.map +1 -0
  28. package/lib/esm/atomic/molecules/form_grid/FormGrid.css.js +11 -2
  29. package/lib/esm/atomic/molecules/form_grid/FormGrid.css.js.map +1 -1
  30. package/lib/esm/atomic/molecules/form_grid/FormGrid.js +10 -6
  31. package/lib/esm/atomic/molecules/form_grid/FormGrid.js.map +1 -1
  32. package/lib/esm/atomic/molecules/highlight/HighlightCode.css.js +1 -1
  33. package/lib/esm/atomic/molecules/highlight/highlightStyles.css.js +1 -1
  34. package/lib/esm/atomic/molecules/markdown/LazyMarkdownRenderer.css.js +1 -1
  35. package/lib/esm/atomic/molecules/markdown/LazyMarkdownRenderer.css.js.map +1 -1
  36. package/lib/esm/atomic/molecules/markdown/components/MarkdownBlockquote.css.js +1 -1
  37. package/lib/esm/atomic/molecules/markdown/components/MarkdownCodeCopyButton.css.js +1 -1
  38. package/lib/esm/atomic/molecules/markdown/components/MarkdownFootnoteDefinition.css.js +1 -1
  39. package/lib/esm/atomic/molecules/markdown/components/MarkdownFootnotesSection.css.js +1 -1
  40. package/lib/esm/atomic/molecules/markdown/components/MarkdownHeading.css.js +1 -1
  41. package/lib/esm/atomic/molecules/markdown/components/MarkdownHtmlFallback.css.js +1 -1
  42. package/lib/esm/atomic/molecules/markdown/components/MarkdownImage.css.js +1 -1
  43. package/lib/esm/atomic/molecules/markdown/components/MarkdownInlineCode.css.js +1 -1
  44. package/lib/esm/atomic/molecules/markdown/components/MarkdownInlineCode.css.js.map +1 -1
  45. package/lib/esm/atomic/molecules/markdown/components/MarkdownLink.css.js +1 -1
  46. package/lib/esm/atomic/molecules/markdown/components/MarkdownList.css.js +1 -1
  47. package/lib/esm/atomic/molecules/markdown/components/MarkdownMark.css.js +1 -1
  48. package/lib/esm/atomic/molecules/markdown/components/MarkdownMermaidBlock.css.js +1 -1
  49. package/lib/esm/atomic/molecules/markdown/components/MarkdownTable.css.js +1 -1
  50. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableCaption.css.js +1 -1
  51. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableCell.css.js +1 -1
  52. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableHead.css.js +1 -1
  53. package/lib/esm/atomic/molecules/markdown/components/MarkdownTableHeaderCell.css.js +1 -1
  54. package/lib/esm/atomic/molecules/markdown/components/MarkdownTaskListItem.css.js +1 -1
  55. package/lib/esm/atomic/molecules/markdown/components/MarkdownText.css.js +1 -1
  56. package/lib/esm/atomic/molecules/markdown/components/MarkdownThematicBreak.css.js +1 -1
  57. package/lib/esm/atomic/molecules/tabs/tabs.css.js +14 -14
  58. package/lib/esm/atomic/molecules/toast/ToastViewport.js +3 -1
  59. package/lib/esm/atomic/molecules/toast/ToastViewport.js.map +1 -1
  60. package/lib/esm/atomic/molecules/toast/toast.css.js +2 -2
  61. package/lib/esm/atomic/organisms/login_form/loginForm.css.js +1 -1
  62. package/lib/esm/atomic/organisms/sidebar/SidebarContainer.js +1 -1
  63. package/lib/esm/atomic/organisms/sidebar/navigationSidebar.css.js +7 -7
  64. package/lib/esm/atomic/organisms/sidebar/sidebar.css.js +2 -2
  65. package/lib/esm/atomic/templates/auth_layout/authLayout.css.js +1 -1
  66. package/lib/esm/atomic/templates/page-container/pageContainer.css.js +1 -1
  67. package/lib/esm/backoffice/atoms/copyable_text/copyableText.css.js +1 -1
  68. package/lib/esm/backoffice/atoms/shortcut_hint/shortcutHint.css.js +1 -1
  69. package/lib/esm/backoffice/atoms/status_badge/statusBadge.css.js +1 -1
  70. package/lib/esm/backoffice/atoms/tag/tag.css.js +7 -7
  71. package/lib/esm/backoffice/molecules/backoffice_detail_field/backofficeDetailField.css.js +1 -1
  72. package/lib/esm/backoffice/molecules/backoffice_detail_section/backofficeDetailSection.css.js +1 -1
  73. package/lib/esm/backoffice/molecules/backoffice_filter_drawer/BackofficeFilterDrawer.js +3 -3
  74. package/lib/esm/backoffice/molecules/backoffice_filter_drawer/backofficeFilterDrawer.css.js +1 -1
  75. package/lib/esm/backoffice/molecules/backoffice_filter_field/backofficeFilterField.css.js +1 -1
  76. package/lib/esm/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.css.js +1 -1
  77. package/lib/esm/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.js +1 -1
  78. package/lib/esm/backoffice/molecules/backoffice_json_viewer/backofficeJsonViewer.css.js +1 -1
  79. package/lib/esm/backoffice/molecules/backoffice_key_value_list/backofficeKeyValueList.css.js +1 -1
  80. package/lib/esm/backoffice/molecules/backoffice_key_value_section/backofficeKeyValueSection.css.js +1 -1
  81. package/lib/esm/backoffice/molecules/backoffice_list_footer/BackofficeListFooter.js +2 -2
  82. package/lib/esm/backoffice/molecules/backoffice_list_footer/backofficeListFooter.css.js +1 -1
  83. package/lib/esm/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js +1 -1
  84. package/lib/esm/backoffice/molecules/backoffice_page_header/backofficePageHeader.css.js +1 -1
  85. package/lib/esm/backoffice/molecules/backoffice_payload_section/backofficePayloadSection.css.js +1 -1
  86. package/lib/esm/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js +1 -1
  87. package/lib/esm/backoffice/molecules/backoffice_payload_viewer/backofficePayloadViewer.css.js +1 -1
  88. package/lib/esm/backoffice/molecules/backoffice_picker/backofficePicker.css.js +1 -1
  89. package/lib/esm/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js +3 -3
  90. package/lib/esm/backoffice/molecules/backoffice_relations_menu/backofficeRelationsMenu.css.js +1 -1
  91. package/lib/esm/backoffice/molecules/backoffice_status_meta_badge/backofficeStatusMetaBadge.css.js +1 -1
  92. package/lib/esm/backoffice/molecules/backoffice_sticky_disclosure/BackofficeStickyDisclosure.js +1 -1
  93. package/lib/esm/backoffice/molecules/backoffice_sticky_disclosure/backofficeStickyDisclosure.css.js +4 -4
  94. package/lib/esm/backoffice/molecules/backoffice_table_skeleton/backofficeTableSkeleton.css.js +2 -2
  95. package/lib/esm/backoffice/molecules/backoffice_tool_call_frame/BackofficeToolCallFrame.js +2 -2
  96. package/lib/esm/backoffice/molecules/backoffice_tool_call_frame/backofficeToolCallFrame.css.js +1 -1
  97. package/lib/esm/backoffice/molecules/backoffice_toolbar/BackofficeToolbar.js +6 -6
  98. package/lib/esm/backoffice/molecules/backoffice_toolbar/backofficeToolbar.css.js +2 -2
  99. package/lib/esm/backoffice/molecules/bulk_actions_bar/bulkActionsBar.css.js +1 -1
  100. package/lib/esm/backoffice/molecules/filter_chip_row/filterChipRow.css.js +1 -1
  101. package/lib/esm/backoffice/molecules/global_search_input/globalSearchInput.css.js +1 -1
  102. package/lib/esm/backoffice/molecules/sidebar_collapse_toggle/sidebarCollapseToggle.css.js +1 -1
  103. package/lib/esm/backoffice/molecules/sidebar_nav_item/sidebarNavItem.css.js +1 -1
  104. package/lib/esm/backoffice/molecules/sidebar_nav_section/SidebarNavSection.js +2 -2
  105. package/lib/esm/backoffice/molecules/sidebar_nav_section/sidebarNavSection.css.js +1 -1
  106. package/lib/esm/backoffice/molecules/sidebar_profile_menu/BackofficeSidebarProfileMenu.js +2 -2
  107. package/lib/esm/backoffice/molecules/sidebar_profile_menu/sidebarProfileMenu.css.js +5 -5
  108. package/lib/esm/backoffice/organisms/audit_timeline/auditTimeline.css.js +3 -3
  109. package/lib/esm/backoffice/organisms/entity_header/entityHeader.css.js +1 -1
  110. package/lib/esm/backoffice/templates/detail_page_template/DetailPageTemplate.js +1 -1
  111. package/lib/esm/backoffice/templates/detail_page_template/detailPageTemplate.css.js +4 -4
  112. package/lib/esm/backoffice/templates/list_page_template/listPageTemplate.css.js +1 -1
  113. package/lib/esm/components/agent/AgentMarkdownCard.css.js +1 -1
  114. package/lib/esm/components/charts/metricHistoryChart.css.js +1 -1
  115. package/lib/esm/components/charts/timeSeriesLineChart.css.js +1 -1
  116. package/lib/esm/components/dashboard/activity_card/ActivityCard.css.js +1 -1
  117. package/lib/esm/components/dashboard/activity_card/ActivityCard.js +2 -2
  118. package/lib/esm/components/dashboard/dashboard_grid/DashboardGrid.css.js +1 -1
  119. package/lib/esm/components/dashboard/dashboard_metric_group/DashboardMetricGroup.css.js +1 -1
  120. package/lib/esm/components/dashboard/dashboard_operational/DashboardEntitySpotlight.css.js +1 -1
  121. package/lib/esm/components/dashboard/dashboard_operational/DashboardEntitySpotlight.js +2 -2
  122. package/lib/esm/components/dashboard/dashboard_operational/DashboardHealthMatrix.css.js +1 -1
  123. package/lib/esm/components/dashboard/dashboard_operational/DashboardItemList.css.js +1 -1
  124. package/lib/esm/components/dashboard/dashboard_operational/DashboardItemList.js +1 -1
  125. package/lib/esm/components/dashboard/dashboard_operational/DashboardLinkedSurface.css.js +1 -1
  126. package/lib/esm/components/dashboard/dashboard_operational/DashboardProgressBar.css.js +1 -1
  127. package/lib/esm/components/dashboard/dashboard_operational/DashboardSlaGauge.css.js +1 -1
  128. package/lib/esm/components/dashboard/dashboard_operational/DashboardToneBadge.css.js +1 -1
  129. package/lib/esm/components/dashboard/dashboard_operational/DashboardTrendMetric.css.js +1 -1
  130. package/lib/esm/components/dashboard/dashboard_operational/DashboardTrendMetric.js +1 -1
  131. package/lib/esm/components/dashboard/dashboard_operational/DashboardWindowControl.css.js +1 -1
  132. package/lib/esm/components/dashboard/dashboard_panel/DashboardPanel.css.js +1 -1
  133. package/lib/esm/components/dashboard/dashboard_quick_actions/DashboardQuickActions.css.js +1 -1
  134. package/lib/esm/components/dashboard/dashboard_status_list/DashboardStatusList.css.js +1 -1
  135. package/lib/esm/components/dashboard/metadata_strip/MetadataStrip.css.js +1 -1
  136. package/lib/esm/components/dashboard/metric_card/MetricCard.css.js +2 -2
  137. package/lib/esm/components/dashboard/metric_card/MetricCard.js +2 -2
  138. package/lib/esm/components/dashboard/metric_tile_group/MetricTileGroup.css.js +1 -1
  139. package/lib/esm/components/dashboard/page_hero/PageHero.css.js +1 -1
  140. package/lib/esm/components/dashboard/page_hero/PageHero.js +2 -2
  141. package/lib/esm/components/dashboard/selectable_card/SelectableCard.css.js +1 -1
  142. package/lib/esm/components/dashboard/selectable_card/SelectableCard.js +1 -1
  143. package/lib/esm/components/dashboard/status_summary_panel/StatusSummaryPanel.css.js +1 -1
  144. package/lib/esm/components/dashboard/status_summary_panel/StatusSummaryPanel.js +1 -1
  145. package/lib/esm/components/dashboard/timeline_event_row/TimelineEventRow.css.js +2 -2
  146. package/lib/esm/components/dashboard/timeline_event_row/TimelineEventRow.js +7 -7
  147. package/lib/esm/components/data-table/DataTable.css.js +23 -23
  148. package/lib/esm/components/data-table/DataTable.js +1 -1
  149. package/lib/esm/components/data-table/ResponsiveRecordList.css.js +5 -5
  150. package/lib/esm/components/data-table/TableCell.css.js +2 -2
  151. package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js +1 -1
  152. package/lib/esm/components/feedback/OperationFeedback.css.js +1 -1
  153. package/lib/esm/components/feedback/inlineBanner.css.js +6 -6
  154. package/lib/esm/components/infinite/InfiniteScrollTrigger.js +1 -1
  155. package/lib/esm/components/infinite/infiniteScrollTrigger.css.js +1 -1
  156. package/lib/esm/components/layout/ActionPanel.css.js +1 -1
  157. package/lib/esm/components/layout/ActionPanel.js +1 -1
  158. package/lib/esm/components/layout/AppHeader.css.js +1 -1
  159. package/lib/esm/components/layout/AppHeader.js +2 -2
  160. package/lib/esm/components/layout/ContentLayout.css.js +1 -1
  161. package/lib/esm/components/layout/DetailSummaryHeader.css.js +1 -1
  162. package/lib/esm/components/layout/DetailSummaryHeader.js +2 -2
  163. package/lib/esm/components/layout/PageShell.css.js +1 -1
  164. package/lib/esm/components/layout/PageShell.js +4 -4
  165. package/lib/esm/components/layout/ResizableSplitView.css.js +1 -1
  166. package/lib/esm/components/layout/ResizableSplitView.js +1 -1
  167. package/lib/esm/components/layout/SettingsLayout.css.js +1 -1
  168. package/lib/esm/components/layout/Surface.css.js +9 -9
  169. package/lib/esm/components/layout/Surface.js +2 -2
  170. package/lib/esm/components/layout/toolbar/Toolbar.css.js +3 -3
  171. package/lib/esm/components/layout/top_navigation_shell/TopNavigationShell.css.js +3 -3
  172. package/lib/esm/components/media/imagePreviewModal.css.js +5 -5
  173. package/lib/esm/components/navigation/sidebar/SidebarNavigation.js +1 -1
  174. package/lib/esm/components/navigation/sidebar/sidebarNavigation.css.js +1 -1
  175. package/lib/esm/components/responsive/ResponsiveCollectionRenderer.css.js +1 -1
  176. package/lib/esm/components/routing/routeFallback.css.js +1 -1
  177. package/lib/esm/components/routing/routePendingBar.css.js +1 -1
  178. package/lib/esm/components/select/SimpleSelect.css.js +13 -13
  179. package/lib/esm/components/select/SimpleSelect.css.js.map +1 -1
  180. package/lib/esm/components/select/SimpleSelect.js +141 -96
  181. package/lib/esm/components/select/SimpleSelect.js.map +1 -1
  182. package/lib/esm/components/tile/InfoTile.css.js +1 -1
  183. package/lib/esm/components/tile/InfoTile.js +1 -1
  184. package/lib/esm/index.js +245 -244
  185. package/lib/esm/shared/anchoredFloatingPosition.js +27 -0
  186. package/lib/esm/shared/anchoredFloatingPosition.js.map +1 -0
  187. package/lib/esm/style.css +1 -1
  188. package/lib/esm/theme/accessibility.css.js +1 -1
  189. package/lib/esm/theme/sprinkles.css.js +8252 -8216
  190. package/lib/esm/theme/sprinkles.css.js.map +1 -1
  191. package/lib/esm/theme/styleRecipes.css.js +7 -7
  192. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts +2 -1
  193. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts.map +1 -1
  194. package/lib/types/atomic/molecules/form_field_layout/FormFieldLayout.d.ts +20 -0
  195. package/lib/types/atomic/molecules/form_field_layout/FormFieldLayout.d.ts.map +1 -0
  196. package/lib/types/atomic/molecules/form_field_layout/formFieldLayout.css.d.ts +8 -0
  197. package/lib/types/atomic/molecules/form_field_layout/formFieldLayout.css.d.ts.map +1 -0
  198. package/lib/types/atomic/molecules/form_grid/FormGrid.css.d.ts +6 -1
  199. package/lib/types/atomic/molecules/form_grid/FormGrid.css.d.ts.map +1 -1
  200. package/lib/types/atomic/molecules/form_grid/FormGrid.d.ts +2 -1
  201. package/lib/types/atomic/molecules/form_grid/FormGrid.d.ts.map +1 -1
  202. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts +1 -0
  203. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts.map +1 -1
  204. package/lib/types/components/select/SimpleSelect.css.d.ts.map +1 -1
  205. package/lib/types/components/select/SimpleSelect.d.ts.map +1 -1
  206. package/lib/types/index.d.ts +1 -0
  207. package/lib/types/index.d.ts.map +1 -1
  208. package/lib/types/shared/anchoredFloatingPosition.d.ts +23 -0
  209. package/lib/types/shared/anchoredFloatingPosition.d.ts.map +1 -0
  210. package/lib/types/theme/sprinkles.css.d.ts +28 -28
  211. package/package.json +3 -3
@@ -1,60 +1,104 @@
1
1
  import { cx as e } from "../../theme/tools.js";
2
2
  import { useUiTranslation as t } from "../../i18n/useUiTranslation.js";
3
3
  import { ChevronDownSvg as n } from "../../icons/ChevronDownSvg.js";
4
- import { actionsContainer as r, container as i, label as a, menu as o, menuOpen as s, menuSeparator as c, optionButton as l, optionDescription as u, optionSelected as d, trigger as f, triggerIcon as p, triggerIconBrand as ee, triggerIconOpen as te, triggerOpen as ne, valueText as re } from "./SimpleSelect.css.js";
5
- import { useCallback as m, useEffect as h, useId as g, useMemo as _, useRef as v, useState as y } from "react";
6
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
4
+ import { getAnchoredFloatingPosition as r } from "../../shared/anchoredFloatingPosition.js";
5
+ import { actionsContainer as i, container as a, label as o, menu as s, menuOpen as ee, menuSeparator as c, optionButton as l, optionDescription as u, optionSelected as d, trigger as f, triggerIcon as p, triggerIconBrand as te, triggerIconOpen as ne, triggerOpen as re, valueText as m } from "./SimpleSelect.css.js";
6
+ import { useCallback as h, useEffect as g, useId as ie, useLayoutEffect as ae, useMemo as _, useRef as v, useState as y } from "react";
7
+ import { Fragment as oe, jsx as b, jsxs as x } from "react/jsx-runtime";
7
8
  //#region src/components/select/SimpleSelect.tsx
8
- var C = ({ ariaDescribedBy: C, ariaLabel: ie, ariaLabelledBy: ae, ariaInvalid: oe, actionsSlot: w, className: se, fullWidth: ce = !0, isDisabled: T = !1, label: E, onChange: le, options: D, placeholder: O, size: k = "medium", state: A = "default", value: j, variant: M = "default" }) => {
9
- let { t: N } = t(), [P, F] = y(!1), I = O ?? N("common.select.placeholder"), [L, R] = y(-1), z = v(null), B = v(null), V = v(/* @__PURE__ */ new Map()), H = g(), U = _(() => D.find((e) => e.value === j) ?? null, [D, j]);
10
- h(() => {
11
- if (!P) return;
12
- let e = D.findIndex((e) => e.value === j), t = 0;
13
- e >= 0 && (t = e), R(t);
9
+ var S = ({ ariaDescribedBy: S, ariaLabel: C, ariaLabelledBy: se, ariaInvalid: ce, actionsSlot: w, className: le, fullWidth: ue = !0, isDisabled: T = !1, label: E, onChange: de, options: D, placeholder: fe, size: pe = "medium", state: O = "default", value: k, variant: A = "default" }) => {
10
+ let { t: j } = t(), [M, N] = y(!1), P = fe ?? j("common.select.placeholder"), [F, I] = y(-1), [L, R] = y(null), z = v(null), B = v(null), V = v(/* @__PURE__ */ new Map()), H = ie(), me = _(() => D.find((e) => e.value === k) ?? null, [D, k]);
11
+ g(() => {
12
+ if (!M) return;
13
+ let e = D.findIndex((e) => e.value === k), t = 0;
14
+ e >= 0 && (t = e), I(t);
14
15
  }, [
15
- P,
16
+ M,
16
17
  D,
17
- j
18
- ]), h(() => {
19
- if (!P || L < 0 || L >= D.length) return;
20
- let e = D[L];
18
+ k
19
+ ]), g(() => {
20
+ if (!M || F < 0 || F >= D.length) return;
21
+ let e = D[F];
21
22
  e != null && V.current.get(e.id)?.focus();
22
23
  }, [
23
- L,
24
- P,
24
+ F,
25
+ M,
25
26
  D
26
- ]), h(() => {
27
- if (!P) return () => {};
27
+ ]);
28
+ let U = h(() => {
29
+ let e = B.current;
30
+ if (e == null) {
31
+ R(null);
32
+ return;
33
+ }
34
+ let t = e.getBoundingClientRect(), n = r({
35
+ anchorRect: t,
36
+ floatingWidth: t.width,
37
+ floatingHeight: 288,
38
+ placement: "bottom-start",
39
+ offset: -1,
40
+ matchAnchorWidth: !0,
41
+ viewportWidth: window.innerWidth,
42
+ viewportHeight: window.innerHeight,
43
+ viewportPadding: 8,
44
+ minHeight: 96,
45
+ maxHeight: 288
46
+ });
47
+ R({
48
+ top: n.top,
49
+ left: n.left,
50
+ width: n.width ?? t.width,
51
+ maxHeight: n.maxHeight ?? 288
52
+ });
53
+ }, []);
54
+ ae(() => {
55
+ if (!M) {
56
+ R(null);
57
+ return;
58
+ }
59
+ U();
60
+ let e = () => {
61
+ U();
62
+ };
63
+ return window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), () => {
64
+ window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
65
+ };
66
+ }, [
67
+ M,
68
+ D,
69
+ U
70
+ ]), g(() => {
71
+ if (!M) return () => {};
28
72
  let e = (e) => {
29
- z.current?.contains(e.target) || F(!1);
73
+ z.current?.contains(e.target) || N(!1);
30
74
  }, t = (e) => {
31
- e.key === "Escape" && (F(!1), B.current?.focus());
75
+ e.key === "Escape" && (N(!1), B.current?.focus());
32
76
  };
33
77
  return document.addEventListener("mousedown", e), window.addEventListener("keydown", t), () => {
34
78
  document.removeEventListener("mousedown", e), window.removeEventListener("keydown", t);
35
79
  };
36
- }, [P]), h(() => {
80
+ }, [M]), g(() => {
37
81
  V.current.clear();
38
82
  }, [D]);
39
- let W = m(() => {
40
- F(!1), requestAnimationFrame(() => {
83
+ let W = h(() => {
84
+ N(!1), requestAnimationFrame(() => {
41
85
  B.current?.focus();
42
86
  });
43
- }, []), ue = () => {
44
- T || F((e) => !e);
87
+ }, []), he = () => {
88
+ T || N((e) => !e);
45
89
  }, G = (e) => {
46
- le(e), W();
47
- }, de = (e) => {
48
- T || (e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), F(!0));
90
+ de(e), W();
91
+ }, ge = (e) => {
92
+ T || (e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), N(!0));
49
93
  }, K = (e) => {
50
- D.length !== 0 && R((t) => {
94
+ D.length !== 0 && I((t) => {
51
95
  if (t < 0) {
52
96
  let t = D.length - 1;
53
97
  return e === 1 && (t = 0), t;
54
98
  }
55
99
  return (t + e + D.length) % D.length;
56
100
  });
57
- }, fe = (e) => {
101
+ }, _e = (e) => {
58
102
  switch (e.key) {
59
103
  case "ArrowDown":
60
104
  e.preventDefault(), K(1);
@@ -63,39 +107,39 @@ var C = ({ ariaDescribedBy: C, ariaLabel: ie, ariaLabelledBy: ae, ariaInvalid: o
63
107
  e.preventDefault(), K(-1);
64
108
  break;
65
109
  case "Home":
66
- e.preventDefault(), R(0);
110
+ e.preventDefault(), I(0);
67
111
  break;
68
112
  case "End":
69
- e.preventDefault(), R(D.length - 1);
113
+ e.preventDefault(), I(D.length - 1);
70
114
  break;
71
115
  case "Enter":
72
116
  case " ":
73
- if (e.preventDefault(), L >= 0 && L < D.length) {
74
- let e = D[L];
117
+ if (e.preventDefault(), F >= 0 && F < D.length) {
118
+ let e = D[F];
75
119
  e != null && G(e.value);
76
120
  }
77
121
  break;
78
122
  case "Escape":
79
- e.preventDefault(), F(!1), B.current?.focus();
123
+ e.preventDefault(), N(!1), B.current?.focus();
80
124
  break;
81
125
  default: break;
82
126
  }
83
- }, pe = (e) => (t) => {
127
+ }, q = (e) => (t) => {
84
128
  V.current.set(e, t);
85
- }, q;
86
- E != null && (q = `${H}-label`);
87
- let me = ae ?? q, he = () => typeof w == "function" ? w(W) : w ?? null, ge = D.map((t, n) => {
88
- let r = t.value === j, i = `${H}-option-${n}`, a = e(l, { [d]: r }), o = -1;
89
- L === n && (o = 0);
129
+ }, J;
130
+ E != null && (J = `${H}-label`);
131
+ let ve = se ?? J, ye = () => typeof w == "function" ? w(W) : w ?? null, be = D.map((t, n) => {
132
+ let r = t.value === k, i = `${H}-option-${n}`, a = e(l, { [d]: r }), o = -1;
133
+ F === n && (o = 0);
90
134
  let s = null;
91
- return t.description != null && t.description !== "" && (s = /* @__PURE__ */ x("span", {
135
+ return t.description != null && t.description !== "" && (s = /* @__PURE__ */ b("span", {
92
136
  className: u,
93
137
  children: t.description
94
- })), /* @__PURE__ */ x("li", {
138
+ })), /* @__PURE__ */ b("li", {
95
139
  role: "presentation",
96
- children: /* @__PURE__ */ S("button", {
140
+ children: /* @__PURE__ */ x("button", {
97
141
  id: i,
98
- ref: pe(t.id),
142
+ ref: q(t.id),
99
143
  type: "button",
100
144
  role: "option",
101
145
  "aria-selected": r,
@@ -105,89 +149,90 @@ var C = ({ ariaDescribedBy: C, ariaLabel: ie, ariaLabelledBy: ae, ariaInvalid: o
105
149
  G(t.value);
106
150
  },
107
151
  onMouseEnter: () => {
108
- R(n);
152
+ I(n);
109
153
  },
110
- children: [/* @__PURE__ */ x("span", { children: t.label }), s]
154
+ children: [/* @__PURE__ */ b("span", { children: t.label }), s]
111
155
  })
112
156
  }, t.id);
113
- }), J;
114
- L >= 0 && L < D.length && (J = `${H}-option-${L}`);
115
- let Y = null;
116
- E != null && (Y = /* @__PURE__ */ x("span", {
117
- id: q,
118
- className: a,
157
+ }), Y;
158
+ F >= 0 && F < D.length && (Y = `${H}-option-${F}`);
159
+ let X = null;
160
+ E != null && (X = /* @__PURE__ */ b("span", {
161
+ id: J,
162
+ className: o,
119
163
  children: E
120
164
  }));
121
- let X;
122
- P && (X = H);
123
- let Z = null;
124
- w != null && (Z = /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x("li", {
165
+ let Z;
166
+ M && (Z = H);
167
+ let Q = null;
168
+ w != null && (Q = /* @__PURE__ */ x(oe, { children: [/* @__PURE__ */ b("li", {
125
169
  role: "presentation",
126
- children: /* @__PURE__ */ x("div", {
170
+ children: /* @__PURE__ */ b("div", {
127
171
  className: c,
128
172
  role: "separator"
129
173
  })
130
- }), /* @__PURE__ */ x("li", {
174
+ }), /* @__PURE__ */ b("li", {
131
175
  role: "presentation",
132
- children: /* @__PURE__ */ x("div", {
133
- className: r,
134
- children: he()
176
+ children: /* @__PURE__ */ b("div", {
177
+ className: i,
178
+ children: ye()
135
179
  })
136
180
  })] }));
137
- let Q = null;
138
- P && (Q = /* @__PURE__ */ S("ul", {
181
+ let $ = null;
182
+ M && ($ = /* @__PURE__ */ x("ul", {
139
183
  id: H,
140
- className: e(o, s),
184
+ className: e(s, ee),
141
185
  role: "listbox",
142
- "aria-activedescendant": J,
186
+ "aria-activedescendant": Y,
143
187
  tabIndex: -1,
144
- onKeyDown: fe,
145
- children: [ge, Z]
188
+ style: L ?? void 0,
189
+ onKeyDown: _e,
190
+ children: [be, Q]
146
191
  }));
147
- let $ = e(f({
148
- size: k,
149
- state: A,
150
- variant: M
151
- }), { [ne]: P }), _e = e(p, {
152
- [te]: P,
153
- [ee]: M === "brand"
192
+ let xe = e(f({
193
+ size: pe,
194
+ state: O,
195
+ variant: A
196
+ }), { [re]: M }), Se = e(p, {
197
+ [ne]: M,
198
+ [te]: A === "brand"
154
199
  });
155
- return /* @__PURE__ */ S("div", {
156
- className: e(i({ fullWidth: ce }), se),
200
+ return /* @__PURE__ */ x("div", {
201
+ className: e(a({ fullWidth: ue }), le),
157
202
  ref: z,
158
203
  children: [
159
- Y,
160
- /* @__PURE__ */ S("button", {
204
+ X,
205
+ /* @__PURE__ */ x("button", {
161
206
  ref: B,
162
207
  type: "button",
163
- className: $,
208
+ className: xe,
164
209
  "aria-haspopup": "listbox",
165
- "aria-expanded": P,
166
- "aria-controls": X,
167
- "aria-describedby": C,
168
- "aria-invalid": oe,
169
- "aria-label": ie,
170
- "aria-labelledby": me,
171
- onClick: ue,
172
- onKeyDown: de,
210
+ "aria-expanded": M,
211
+ "aria-controls": Z,
212
+ "aria-describedby": S,
213
+ "aria-invalid": ce,
214
+ "aria-label": C,
215
+ "aria-labelledby": ve,
216
+ onClick: he,
217
+ onKeyDown: ge,
173
218
  disabled: T,
174
- children: [/* @__PURE__ */ x("span", {
175
- className: re,
176
- children: U?.label ?? I
177
- }), /* @__PURE__ */ x("span", {
178
- className: _e,
179
- children: /* @__PURE__ */ x(n, {
219
+ children: [/* @__PURE__ */ b("span", {
220
+ className: m,
221
+ children: me?.label ?? P
222
+ }), /* @__PURE__ */ b("span", {
223
+ className: Se,
224
+ children: /* @__PURE__ */ b(n, {
180
225
  width: 16,
181
226
  height: 16,
182
227
  "aria-hidden": "true"
183
228
  })
184
229
  })]
185
230
  }),
186
- Q
231
+ $
187
232
  ]
188
233
  });
189
234
  };
190
235
  //#endregion
191
- export { C as SimpleSelect };
236
+ export { S as SimpleSelect };
192
237
 
193
238
  //# sourceMappingURL=SimpleSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleSelect.js","names":[],"sources":["../../../../src/components/select/SimpleSelect.tsx"],"sourcesContent":["import {\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ChevronDownSvg } from '../../icons/ChevronDownSvg.js';\n\nimport * as styles from './SimpleSelect.css.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nexport type SimpleSelectOption = {\n id: string;\n label: string;\n value: string;\n description?: string | null;\n};\n\ntype ActionSlot = ReactNode | ((closeMenu: () => void) => ReactNode);\n\ntype Props = {\n options: readonly SimpleSelectOption[];\n value: string;\n onChange: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n actionsSlot?: ActionSlot;\n isDisabled?: boolean;\n className?: string;\n variant?: 'default' | 'brand';\n size?: 'small' | 'medium' | 'large';\n state?: 'default' | 'error';\n fullWidth?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n};\n\nexport const SimpleSelect = ({\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n ariaInvalid,\n actionsSlot,\n className,\n fullWidth = true,\n isDisabled = false,\n label,\n onChange,\n options,\n placeholder,\n size = 'medium',\n state = 'default',\n value,\n variant = 'default',\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const resolvedPlaceholder = placeholder ?? t('common.select.placeholder');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const optionRefs = useRef(new Map<string, HTMLButtonElement | null>());\n const listboxId = useId();\n\n const selectedOption = useMemo(() => {\n return (\n options.find((option) => {\n return option.value === value;\n }) ?? null\n );\n }, [options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const selectedIndex = options.findIndex((option) => {\n return option.value === value;\n });\n let nextIndex = 0;\n if (selectedIndex >= 0) {\n nextIndex = selectedIndex;\n }\n setFocusedIndex(nextIndex);\n }, [isOpen, options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n if (focusedIndex < 0 || focusedIndex >= options.length) {\n return;\n }\n const option = options[focusedIndex];\n if (option == null) {\n return;\n }\n const node = optionRefs.current.get(option.id);\n node?.focus();\n }, [focusedIndex, isOpen, options]);\n\n useEffect(() => {\n if (!isOpen) {\n return () => {};\n }\n\n const handleClick = (event: MouseEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n optionRefs.current.clear();\n }, [options]);\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n }, []);\n\n const handleToggle = (): void => {\n if (isDisabled) {\n return;\n }\n setIsOpen((prev) => {\n return !prev;\n });\n };\n\n const handleSelect = (nextValue: string): void => {\n onChange(nextValue);\n closeMenu();\n };\n\n const handleTriggerKeyDown = (\n event: ReactKeyboardEvent<HTMLButtonElement>,\n ) => {\n if (isDisabled) {\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n const moveFocus = (direction: 1 | -1): void => {\n if (options.length === 0) {\n return;\n }\n setFocusedIndex((prev) => {\n if (prev < 0) {\n let fallbackIndex = options.length - 1;\n if (direction === 1) {\n fallbackIndex = 0;\n }\n return fallbackIndex;\n }\n const nextIndex = (prev + direction + options.length) % options.length;\n return nextIndex;\n });\n };\n\n const handleListKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n setFocusedIndex(0);\n break;\n case 'End':\n event.preventDefault();\n setFocusedIndex(options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n const option = options[focusedIndex];\n if (option != null) {\n handleSelect(option.value);\n }\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n break;\n default:\n break;\n }\n };\n\n const registerOptionRef = (optionId: string) => {\n return (node: HTMLButtonElement | null) => {\n optionRefs.current.set(optionId, node);\n };\n };\n\n let labelId: string | undefined;\n if (label != null) {\n labelId = `${listboxId}-label`;\n }\n const resolvedAriaLabelledBy = ariaLabelledBy ?? labelId;\n\n const renderActionsSlot = (): ReactNode | null => {\n if (typeof actionsSlot === 'function') {\n return actionsSlot(closeMenu);\n }\n return actionsSlot ?? null;\n };\n\n const optionItems = options.map((option, index) => {\n const isSelected = option.value === value;\n const optionDomId = `${listboxId}-option-${index}`;\n const optionClassName = cx(styles.optionButton, {\n [styles.optionSelected]: isSelected,\n });\n let optionTabIndex = -1;\n if (focusedIndex === index) {\n optionTabIndex = 0;\n }\n\n let descriptionNode: JSX.Element | null = null;\n if (option.description != null && option.description !== '') {\n descriptionNode = (\n <span className={styles.optionDescription}>{option.description}</span>\n );\n }\n\n return (\n <li key={option.id} role=\"presentation\">\n <button\n id={optionDomId}\n ref={registerOptionRef(option.id)}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={optionClassName}\n tabIndex={optionTabIndex}\n onClick={() => {\n handleSelect(option.value);\n }}\n onMouseEnter={() => {\n setFocusedIndex(index);\n }}\n >\n <span>{option.label}</span>\n {descriptionNode}\n </button>\n </li>\n );\n });\n\n let activeOptionId: string | undefined;\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n activeOptionId = `${listboxId}-option-${focusedIndex}`;\n }\n\n let labelNode: JSX.Element | null = null;\n if (label != null) {\n labelNode = (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n );\n }\n\n let ariaControls: string | undefined;\n if (isOpen) {\n ariaControls = listboxId;\n }\n\n let actionsSlotNode: ReactNode | null = null;\n if (actionsSlot != null) {\n actionsSlotNode = (\n <>\n <li role=\"presentation\">\n <div className={styles.menuSeparator} role=\"separator\" />\n </li>\n <li role=\"presentation\">\n <div className={styles.actionsContainer}>{renderActionsSlot()}</div>\n </li>\n </>\n );\n }\n\n let menuNode: JSX.Element | null = null;\n if (isOpen) {\n menuNode = (\n <ul\n id={listboxId}\n className={cx(styles.menu, styles.menuOpen)}\n role=\"listbox\"\n aria-activedescendant={activeOptionId}\n tabIndex={-1}\n onKeyDown={handleListKeyDown}\n >\n {optionItems}\n {actionsSlotNode}\n </ul>\n );\n }\n\n const triggerClassName = cx(styles.trigger({ size, state, variant }), {\n [styles.triggerOpen]: isOpen,\n });\n const triggerIconClassName = cx(styles.triggerIcon, {\n [styles.triggerIconOpen]: isOpen,\n [styles.triggerIconBrand]: variant === 'brand',\n });\n\n return (\n <div\n className={cx(styles.container({ fullWidth }), className)}\n ref={containerRef}\n >\n {labelNode}\n <button\n ref={triggerRef}\n type=\"button\"\n className={triggerClassName}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={ariaControls}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n aria-label={ariaLabel}\n aria-labelledby={resolvedAriaLabelledBy}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n disabled={isDisabled}\n >\n <span className={styles.valueText}>\n {selectedOption?.label ?? resolvedPlaceholder}\n </span>\n <span className={triggerIconClassName}>\n <ChevronDownSvg width={16} height={16} aria-hidden=\"true\" />\n </span>\n </button>\n {menuNode}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"SimpleSelect.js","names":[],"sources":["../../../../src/components/select/SimpleSelect.tsx"],"sourcesContent":["import {\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ChevronDownSvg } from '../../icons/ChevronDownSvg.js';\nimport { getAnchoredFloatingPosition } from '../../shared/anchoredFloatingPosition.js';\n\nimport * as styles from './SimpleSelect.css.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nexport type SimpleSelectOption = {\n id: string;\n label: string;\n value: string;\n description?: string | null;\n};\n\ntype ActionSlot = ReactNode | ((closeMenu: () => void) => ReactNode);\n\ntype MenuPosition = {\n top: number;\n left: number;\n width: number;\n maxHeight: number;\n};\n\ntype Props = {\n options: readonly SimpleSelectOption[];\n value: string;\n onChange: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n actionsSlot?: ActionSlot;\n isDisabled?: boolean;\n className?: string;\n variant?: 'default' | 'brand';\n size?: 'small' | 'medium' | 'large';\n state?: 'default' | 'error';\n fullWidth?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n};\n\nexport const SimpleSelect = ({\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n ariaInvalid,\n actionsSlot,\n className,\n fullWidth = true,\n isDisabled = false,\n label,\n onChange,\n options,\n placeholder,\n size = 'medium',\n state = 'default',\n value,\n variant = 'default',\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const resolvedPlaceholder = placeholder ?? t('common.select.placeholder');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [menuPosition, setMenuPosition] = useState<MenuPosition | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const optionRefs = useRef(new Map<string, HTMLButtonElement | null>());\n const listboxId = useId();\n\n const selectedOption = useMemo(() => {\n return (\n options.find((option) => {\n return option.value === value;\n }) ?? null\n );\n }, [options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const selectedIndex = options.findIndex((option) => {\n return option.value === value;\n });\n let nextIndex = 0;\n if (selectedIndex >= 0) {\n nextIndex = selectedIndex;\n }\n setFocusedIndex(nextIndex);\n }, [isOpen, options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n if (focusedIndex < 0 || focusedIndex >= options.length) {\n return;\n }\n const option = options[focusedIndex];\n if (option == null) {\n return;\n }\n const node = optionRefs.current.get(option.id);\n node?.focus();\n }, [focusedIndex, isOpen, options]);\n\n const updateMenuPosition = useCallback(() => {\n const trigger = triggerRef.current;\n if (trigger == null) {\n setMenuPosition(null);\n return;\n }\n\n const rect = trigger.getBoundingClientRect();\n const nextPosition = getAnchoredFloatingPosition({\n anchorRect: rect,\n floatingWidth: rect.width,\n floatingHeight: 288,\n placement: 'bottom-start',\n offset: -1,\n matchAnchorWidth: true,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n viewportPadding: 8,\n minHeight: 96,\n maxHeight: 288,\n });\n\n setMenuPosition({\n top: nextPosition.top,\n left: nextPosition.left,\n width: nextPosition.width ?? rect.width,\n maxHeight: nextPosition.maxHeight ?? 288,\n });\n }, []);\n\n useLayoutEffect(() => {\n if (!isOpen) {\n setMenuPosition(null);\n return undefined;\n }\n\n updateMenuPosition();\n\n const handleViewportChange = () => {\n updateMenuPosition();\n };\n\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n\n return () => {\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n };\n }, [isOpen, options, updateMenuPosition]);\n\n useEffect(() => {\n if (!isOpen) {\n return () => {};\n }\n\n const handleClick = (event: MouseEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n optionRefs.current.clear();\n }, [options]);\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n }, []);\n\n const handleToggle = (): void => {\n if (isDisabled) {\n return;\n }\n setIsOpen((prev) => {\n return !prev;\n });\n };\n\n const handleSelect = (nextValue: string): void => {\n onChange(nextValue);\n closeMenu();\n };\n\n const handleTriggerKeyDown = (\n event: ReactKeyboardEvent<HTMLButtonElement>,\n ) => {\n if (isDisabled) {\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n const moveFocus = (direction: 1 | -1): void => {\n if (options.length === 0) {\n return;\n }\n setFocusedIndex((prev) => {\n if (prev < 0) {\n let fallbackIndex = options.length - 1;\n if (direction === 1) {\n fallbackIndex = 0;\n }\n return fallbackIndex;\n }\n const nextIndex = (prev + direction + options.length) % options.length;\n return nextIndex;\n });\n };\n\n const handleListKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n setFocusedIndex(0);\n break;\n case 'End':\n event.preventDefault();\n setFocusedIndex(options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n const option = options[focusedIndex];\n if (option != null) {\n handleSelect(option.value);\n }\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n break;\n default:\n break;\n }\n };\n\n const registerOptionRef = (optionId: string) => {\n return (node: HTMLButtonElement | null) => {\n optionRefs.current.set(optionId, node);\n };\n };\n\n let labelId: string | undefined;\n if (label != null) {\n labelId = `${listboxId}-label`;\n }\n const resolvedAriaLabelledBy = ariaLabelledBy ?? labelId;\n\n const renderActionsSlot = (): ReactNode | null => {\n if (typeof actionsSlot === 'function') {\n return actionsSlot(closeMenu);\n }\n return actionsSlot ?? null;\n };\n\n const optionItems = options.map((option, index) => {\n const isSelected = option.value === value;\n const optionDomId = `${listboxId}-option-${index}`;\n const optionClassName = cx(styles.optionButton, {\n [styles.optionSelected]: isSelected,\n });\n let optionTabIndex = -1;\n if (focusedIndex === index) {\n optionTabIndex = 0;\n }\n\n let descriptionNode: JSX.Element | null = null;\n if (option.description != null && option.description !== '') {\n descriptionNode = (\n <span className={styles.optionDescription}>{option.description}</span>\n );\n }\n\n return (\n <li key={option.id} role=\"presentation\">\n <button\n id={optionDomId}\n ref={registerOptionRef(option.id)}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={optionClassName}\n tabIndex={optionTabIndex}\n onClick={() => {\n handleSelect(option.value);\n }}\n onMouseEnter={() => {\n setFocusedIndex(index);\n }}\n >\n <span>{option.label}</span>\n {descriptionNode}\n </button>\n </li>\n );\n });\n\n let activeOptionId: string | undefined;\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n activeOptionId = `${listboxId}-option-${focusedIndex}`;\n }\n\n let labelNode: JSX.Element | null = null;\n if (label != null) {\n labelNode = (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n );\n }\n\n let ariaControls: string | undefined;\n if (isOpen) {\n ariaControls = listboxId;\n }\n\n let actionsSlotNode: ReactNode | null = null;\n if (actionsSlot != null) {\n actionsSlotNode = (\n <>\n <li role=\"presentation\">\n <div className={styles.menuSeparator} role=\"separator\" />\n </li>\n <li role=\"presentation\">\n <div className={styles.actionsContainer}>{renderActionsSlot()}</div>\n </li>\n </>\n );\n }\n\n let menuNode: JSX.Element | null = null;\n if (isOpen) {\n menuNode = (\n <ul\n id={listboxId}\n className={cx(styles.menu, styles.menuOpen)}\n role=\"listbox\"\n aria-activedescendant={activeOptionId}\n tabIndex={-1}\n style={menuPosition ?? undefined}\n onKeyDown={handleListKeyDown}\n >\n {optionItems}\n {actionsSlotNode}\n </ul>\n );\n }\n\n const triggerClassName = cx(styles.trigger({ size, state, variant }), {\n [styles.triggerOpen]: isOpen,\n });\n const triggerIconClassName = cx(styles.triggerIcon, {\n [styles.triggerIconOpen]: isOpen,\n [styles.triggerIconBrand]: variant === 'brand',\n });\n\n return (\n <div\n className={cx(styles.container({ fullWidth }), className)}\n ref={containerRef}\n >\n {labelNode}\n <button\n ref={triggerRef}\n type=\"button\"\n className={triggerClassName}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={ariaControls}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n aria-label={ariaLabel}\n aria-labelledby={resolvedAriaLabelledBy}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n disabled={isDisabled}\n >\n <span className={styles.valueText}>\n {selectedOption?.label ?? resolvedPlaceholder}\n </span>\n <span className={triggerIconClassName}>\n <ChevronDownSvg width={16} height={16} aria-hidden=\"true\" />\n </span>\n </button>\n {menuNode}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /* empty css */
2
2
  /* empty css */
3
3
  //#region src/components/tile/InfoTile.css.ts
4
- var e = "_1mkg78a0 txvbqb19uf txvbqb2uc txvbqb1b81 txvbqbwwy txvbqbfpn txvbqbh4x txvbqbhdy", t = "_1mkg78a3 _1mkg78a1 txvbqb7g txvbqb77 txvbqb7t _1mkg78a2 txvbqb1e31 qbwcue6 txvbqb1gg6 txvbqb1ggf qbwcue0 txvbqb1ffs txvbqb1ga0", n = "_1mkg78a4 txvbqb3f txvbqb19uf txvbqbfqq", r = "_1mkg78a5 txvbqb4 txvbqbv txvbqbfqq txvbqb19uf", i = "_1mkg78a6 txvbqbfpn txvbqbh7g txvbqbel txvbqblt7 txvbqbhdy", a = "_1mkg78a7 txvbqbfpn txvbqbh4x txvbqbhd8 txvbqbv7x", o = "_1mkg78a8 txvbqb9w txvbqbnxe txvbqbhbf txvbqb1bg1 txvbqbo7v", s = "_1mkg78a9 txvbqbo7v txvbqb9j txvbqbhc5", c = "_1mkg78aa txvbqb9j txvbqb1bg3 txvbqbfpn txvbqbh7g txvbqbhdl", l = "_1mkg78ab txvbqb9w txvbqb1bg1 txvbqbfpn txvbqbh4x txvbqbhdl", u = "_1mkg78ac txvbqbfpn txvbqbh7g txvbqbhdy txvbqbey txvbqblt7 txvbqb9j txvbqb1bg3", d = "_1mkg78ad txvbqbfpn txvbqbey txvbqbhdl txvbqbqhu";
4
+ var e = "_1mkg78a0 txvbqb19us txvbqb2uc txvbqb1b8r txvbqbwxb txvbqbfpn txvbqbh4x txvbqbhdy", t = "_1mkg78a3 _1mkg78a1 txvbqb7g txvbqb77 txvbqb7t _1mkg78a2 txvbqb1e3r qbwcue6 txvbqb1ggw txvbqb1gh5 qbwcue0 txvbqb1fgi txvbqb1gaq", n = "_1mkg78a4 txvbqb3f txvbqb19us txvbqbfqq", r = "_1mkg78a5 txvbqb4 txvbqbv txvbqbfqq txvbqb19us", i = "_1mkg78a6 txvbqbfpn txvbqbh7g txvbqbel txvbqblt7 txvbqbhdy", a = "_1mkg78a7 txvbqbfpn txvbqbh4x txvbqbhd8 txvbqbv7x", o = "_1mkg78a8 txvbqb9w txvbqbnxe txvbqbhbf txvbqb1bgr txvbqbo7v", s = "_1mkg78a9 txvbqbo7v txvbqb9j txvbqbhc5", c = "_1mkg78aa txvbqb9j txvbqb1bgt txvbqbfpn txvbqbh7g txvbqbhdl", l = "_1mkg78ab txvbqb9w txvbqb1bgr txvbqbfpn txvbqbh4x txvbqbhdl", u = "_1mkg78ac txvbqbfpn txvbqbh7g txvbqbhdy txvbqbey txvbqblt7 txvbqb9j txvbqb1bgt", d = "_1mkg78ad txvbqbfpn txvbqbey txvbqbhdl txvbqbqhu";
5
5
  //#endregion
6
6
  export { d as actions, l as body, u as footer, i as header, a as headingGroup, t as interactive, r as interactiveButton, n as interactiveLink, c as meta, s as subtitle, e as tile, o as title };
7
7
 
@@ -37,7 +37,7 @@ var p = (e) => e == null ? null : u(typeof e == "string" || typeof e == "number"
37
37
  }),
38
38
  w,
39
39
  (h != null || g != null) && /* @__PURE__ */ d("div", {
40
- className: "_1mkg78ab txvbqb9w txvbqb1bg1 txvbqbfpn txvbqbh4x txvbqbhdl",
40
+ className: "_1mkg78ab txvbqb9w txvbqb1bgr txvbqbfpn txvbqbh4x txvbqbhdl",
41
41
  children: [h, g]
42
42
  }),
43
43
  T