@plumile/ui 0.1.68 → 0.1.69

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 (150) hide show
  1. package/lib/esm/admin/organisms/admin_sidebar/AdminSidebar.js +62 -0
  2. package/lib/esm/admin/organisms/admin_sidebar/AdminSidebar.js.map +1 -0
  3. package/lib/esm/admin/organisms/admin_sidebar/adminSidebar.css.js +17 -0
  4. package/lib/esm/admin/organisms/admin_sidebar/adminSidebar.css.js.map +1 -0
  5. package/lib/esm/{backoffice/organisms/backoffice_topbar/BackofficeTopbar.js → admin/organisms/admin_topbar/AdminTopbar.js} +4 -4
  6. package/lib/esm/admin/organisms/admin_topbar/AdminTopbar.js.map +1 -0
  7. package/lib/esm/admin/organisms/admin_topbar/adminTopbar.css.js +8 -0
  8. package/lib/esm/admin/organisms/admin_topbar/adminTopbar.css.js.map +1 -0
  9. package/lib/esm/admin/templates/admin_shell_layout/AdminShellLayout.js +19 -0
  10. package/lib/esm/admin/templates/admin_shell_layout/AdminShellLayout.js.map +1 -0
  11. package/lib/esm/admin/theme/AdminThemeProvider.js +11 -0
  12. package/lib/esm/admin/theme/AdminThemeProvider.js.map +1 -0
  13. package/lib/esm/admin/theme/adminTheme.css.js +7 -0
  14. package/lib/esm/admin/theme/adminTheme.css.js.map +1 -0
  15. package/lib/esm/atomic/atoms/badge/Badge.js +3 -3
  16. package/lib/esm/atomic/atoms/button/Button.js +1 -1
  17. package/lib/esm/atomic/atoms/checkbox/Checkbox.js +1 -1
  18. package/lib/esm/atomic/atoms/error_message/ErrorMessage.js +1 -1
  19. package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js +4 -4
  20. package/lib/esm/atomic/atoms/label/Label.js +1 -1
  21. package/lib/esm/atomic/atoms/modal/Modal.js +13 -13
  22. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +12 -12
  23. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +20 -20
  24. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +14 -14
  25. package/lib/esm/atomic/molecules/card/Card.js +6 -6
  26. package/lib/esm/atomic/molecules/checkbox_field/CheckboxField.js +1 -1
  27. package/lib/esm/atomic/molecules/dropdown/Dropdown.js +80 -80
  28. package/lib/esm/atomic/molecules/dropdown/Dropdown.js.map +1 -1
  29. package/lib/esm/atomic/molecules/form/Form.js +1 -1
  30. package/lib/esm/atomic/molecules/form_error/FormError.js +1 -1
  31. package/lib/esm/atomic/molecules/highlight/HighlightCode.js +25 -25
  32. package/lib/esm/atomic/molecules/markdown/LazyMarkdownRenderer.js +7 -7
  33. package/lib/esm/atomic/molecules/markdown/MarkdownRenderer.js +33 -33
  34. package/lib/esm/atomic/molecules/markdown/MarkdownRenderer.js.map +1 -1
  35. package/lib/esm/atomic/molecules/markdown/components/LazyMarkdownCodeBlock.js +9 -9
  36. package/lib/esm/atomic/molecules/markdown/components/MarkdownCodeBlock.js +7 -7
  37. package/lib/esm/atomic/molecules/markdown/components/MarkdownCodeCopyButton.js +9 -9
  38. package/lib/esm/atomic/molecules/markdown/components/MarkdownFootnotesSection.js +7 -7
  39. package/lib/esm/atomic/molecules/markdown/components/MarkdownMermaidBlock.js +34 -34
  40. package/lib/esm/atomic/molecules/markdown/components/MarkdownShikiCodeBlock.js +4 -4
  41. package/lib/esm/atomic/molecules/profile_dropdown/ProfileDropdown.js +25 -25
  42. package/lib/esm/atomic/molecules/toast/ToastProvider.js +15 -15
  43. package/lib/esm/atomic/molecules/toast/ToastViewport.js +15 -15
  44. package/lib/esm/atomic/organisms/login_form/LoginForm.js +1 -1
  45. package/lib/esm/atomic/organisms/sidebar/NavigationSidebar.js +34 -34
  46. package/lib/esm/atomic/organisms/sidebar/icons.js +13 -13
  47. package/lib/esm/atomic/templates/auth_layout/AuthLayout.js +1 -1
  48. package/lib/esm/backoffice/atoms/copyable_text/CopyableText.js +10 -10
  49. package/lib/esm/backoffice/atoms/shortcut_hint/ShortcutHint.js +6 -6
  50. package/lib/esm/backoffice/atoms/tag/Tag.js +7 -7
  51. package/lib/esm/backoffice/molecules/backoffice_filter_drawer/BackofficeFilterDrawer.js +22 -22
  52. package/lib/esm/backoffice/molecules/backoffice_json_viewer/BackofficeJsonViewer.js +12 -12
  53. package/lib/esm/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.js +11 -11
  54. package/lib/esm/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js +12 -12
  55. package/lib/esm/backoffice/molecules/confirm_dialog/ConfirmDialog.js +9 -9
  56. package/lib/esm/backoffice/molecules/global_search_input/GlobalSearchInput.js +5 -5
  57. package/lib/esm/backoffice/molecules/sidebar_collapse_toggle/SidebarCollapseToggle.js +7 -7
  58. package/lib/esm/backoffice/molecules/sidebar_nav_item/SidebarNavItem.js +26 -26
  59. package/lib/esm/backoffice/molecules/sidebar_nav_item/SidebarNavItem.js.map +1 -1
  60. package/lib/esm/backoffice/molecules/sidebar_nav_section/SidebarNavSection.js +11 -11
  61. package/lib/esm/backoffice/organisms/backoffice_data_table/BackofficeDataTable.js +20 -20
  62. package/lib/esm/components/data-table/TableCell.js +17 -17
  63. package/lib/esm/components/data-table/VirtualizedConnectionTable.js +27 -27
  64. package/lib/esm/components/layout/AppShell.js +14 -0
  65. package/lib/esm/components/layout/AppShell.js.map +1 -0
  66. package/lib/esm/components/layout/PageShell.js +65 -65
  67. package/lib/esm/components/layout/PageShell.js.map +1 -1
  68. package/lib/esm/components/layout/SettingsLayout.css.js +8 -0
  69. package/lib/esm/components/layout/SettingsLayout.css.js.map +1 -0
  70. package/lib/esm/{backoffice/templates/settings_template/SettingsTemplate.js → components/layout/SettingsLayout.js} +5 -5
  71. package/lib/esm/components/layout/SettingsLayout.js.map +1 -0
  72. package/lib/esm/components/layout/SplitViewLayout.css.js +8 -0
  73. package/lib/esm/components/layout/SplitViewLayout.css.js.map +1 -0
  74. package/lib/esm/{backoffice/templates/split_view_template/SplitViewTemplate.js → components/layout/SplitViewLayout.js} +5 -5
  75. package/lib/esm/components/layout/SplitViewLayout.js.map +1 -0
  76. package/lib/esm/components/select/SimpleSelect.js +23 -23
  77. package/lib/esm/index.js +105 -104
  78. package/lib/esm/node_modules/react-shiki/dist/chunk-QPJZGYHO.js +23 -23
  79. package/lib/esm/node_modules/react-shiki/dist/chunk-QPJZGYHO.js.map +1 -1
  80. package/lib/esm/style.css +1 -1
  81. package/lib/esm/theme/ThemeProvider.js +11 -11
  82. package/lib/esm/theme/VisuallyHidden.js +3 -3
  83. package/lib/esm/theme/index.js +9 -9
  84. package/lib/types/{backoffice/organisms/backoffice_sidebar/BackofficeSidebar.d.ts → admin/organisms/admin_sidebar/AdminSidebar.d.ts} +7 -7
  85. package/lib/types/admin/organisms/admin_sidebar/AdminSidebar.d.ts.map +1 -0
  86. package/lib/types/{backoffice/organisms/backoffice_sidebar/backofficeSidebar.css.d.ts → admin/organisms/admin_sidebar/adminSidebar.css.d.ts} +1 -1
  87. package/lib/types/admin/organisms/admin_sidebar/adminSidebar.css.d.ts.map +1 -0
  88. package/lib/types/admin/organisms/admin_topbar/AdminTopbar.d.ts +10 -0
  89. package/lib/types/admin/organisms/admin_topbar/AdminTopbar.d.ts.map +1 -0
  90. package/lib/types/{backoffice/organisms/backoffice_topbar/backofficeTopbar.css.d.ts → admin/organisms/admin_topbar/adminTopbar.css.d.ts} +1 -1
  91. package/lib/types/admin/organisms/admin_topbar/adminTopbar.css.d.ts.map +1 -0
  92. package/lib/types/admin/templates/admin_shell_layout/AdminShellLayout.d.ts +14 -0
  93. package/lib/types/admin/templates/admin_shell_layout/AdminShellLayout.d.ts.map +1 -0
  94. package/lib/types/admin/theme/AdminThemeProvider.d.ts +7 -0
  95. package/lib/types/admin/theme/AdminThemeProvider.d.ts.map +1 -0
  96. package/lib/types/admin/theme/adminTheme.css.d.ts +2 -0
  97. package/lib/types/admin/theme/adminTheme.css.d.ts.map +1 -0
  98. package/lib/types/components/layout/AppShell.d.ts +12 -0
  99. package/lib/types/components/layout/AppShell.d.ts.map +1 -0
  100. package/lib/types/{backoffice/templates/settings_template/settingsTemplate.css.d.ts → components/layout/SettingsLayout.css.d.ts} +1 -1
  101. package/lib/types/components/layout/SettingsLayout.css.d.ts.map +1 -0
  102. package/lib/types/components/layout/SettingsLayout.d.ts +11 -0
  103. package/lib/types/components/layout/SettingsLayout.d.ts.map +1 -0
  104. package/lib/types/{backoffice/templates/split_view_template/splitViewTemplate.css.d.ts → components/layout/SplitViewLayout.css.d.ts} +1 -1
  105. package/lib/types/components/layout/SplitViewLayout.css.d.ts.map +1 -0
  106. package/lib/types/components/layout/SplitViewLayout.d.ts +11 -0
  107. package/lib/types/components/layout/SplitViewLayout.d.ts.map +1 -0
  108. package/lib/types/index.d.ts +9 -8
  109. package/lib/types/index.d.ts.map +1 -1
  110. package/package.json +10 -10
  111. package/lib/esm/backoffice/organisms/backoffice_app_shell/BackofficeAppShell.js +0 -14
  112. package/lib/esm/backoffice/organisms/backoffice_app_shell/BackofficeAppShell.js.map +0 -1
  113. package/lib/esm/backoffice/organisms/backoffice_sidebar/BackofficeSidebar.js +0 -62
  114. package/lib/esm/backoffice/organisms/backoffice_sidebar/BackofficeSidebar.js.map +0 -1
  115. package/lib/esm/backoffice/organisms/backoffice_sidebar/backofficeSidebar.css.js +0 -17
  116. package/lib/esm/backoffice/organisms/backoffice_sidebar/backofficeSidebar.css.js.map +0 -1
  117. package/lib/esm/backoffice/organisms/backoffice_topbar/BackofficeTopbar.js.map +0 -1
  118. package/lib/esm/backoffice/organisms/backoffice_topbar/backofficeTopbar.css.js +0 -8
  119. package/lib/esm/backoffice/organisms/backoffice_topbar/backofficeTopbar.css.js.map +0 -1
  120. package/lib/esm/backoffice/templates/backoffice_shell_template/BackofficeShellTemplate.js +0 -19
  121. package/lib/esm/backoffice/templates/backoffice_shell_template/BackofficeShellTemplate.js.map +0 -1
  122. package/lib/esm/backoffice/templates/settings_template/SettingsTemplate.js.map +0 -1
  123. package/lib/esm/backoffice/templates/settings_template/settingsTemplate.css.js +0 -8
  124. package/lib/esm/backoffice/templates/settings_template/settingsTemplate.css.js.map +0 -1
  125. package/lib/esm/backoffice/templates/split_view_template/SplitViewTemplate.js.map +0 -1
  126. package/lib/esm/backoffice/templates/split_view_template/splitViewTemplate.css.js +0 -8
  127. package/lib/esm/backoffice/templates/split_view_template/splitViewTemplate.css.js.map +0 -1
  128. package/lib/esm/backoffice/theme/BackofficeThemeProvider.js +0 -11
  129. package/lib/esm/backoffice/theme/BackofficeThemeProvider.js.map +0 -1
  130. package/lib/esm/backoffice/theme/backofficeTheme.css.js +0 -7
  131. package/lib/esm/backoffice/theme/backofficeTheme.css.js.map +0 -1
  132. package/lib/types/backoffice/organisms/backoffice_app_shell/BackofficeAppShell.d.ts +0 -12
  133. package/lib/types/backoffice/organisms/backoffice_app_shell/BackofficeAppShell.d.ts.map +0 -1
  134. package/lib/types/backoffice/organisms/backoffice_sidebar/BackofficeSidebar.d.ts.map +0 -1
  135. package/lib/types/backoffice/organisms/backoffice_sidebar/backofficeSidebar.css.d.ts.map +0 -1
  136. package/lib/types/backoffice/organisms/backoffice_topbar/BackofficeTopbar.d.ts +0 -10
  137. package/lib/types/backoffice/organisms/backoffice_topbar/BackofficeTopbar.d.ts.map +0 -1
  138. package/lib/types/backoffice/organisms/backoffice_topbar/backofficeTopbar.css.d.ts.map +0 -1
  139. package/lib/types/backoffice/templates/backoffice_shell_template/BackofficeShellTemplate.d.ts +0 -14
  140. package/lib/types/backoffice/templates/backoffice_shell_template/BackofficeShellTemplate.d.ts.map +0 -1
  141. package/lib/types/backoffice/templates/settings_template/SettingsTemplate.d.ts +0 -11
  142. package/lib/types/backoffice/templates/settings_template/SettingsTemplate.d.ts.map +0 -1
  143. package/lib/types/backoffice/templates/settings_template/settingsTemplate.css.d.ts.map +0 -1
  144. package/lib/types/backoffice/templates/split_view_template/SplitViewTemplate.d.ts +0 -11
  145. package/lib/types/backoffice/templates/split_view_template/SplitViewTemplate.d.ts.map +0 -1
  146. package/lib/types/backoffice/templates/split_view_template/splitViewTemplate.css.d.ts.map +0 -1
  147. package/lib/types/backoffice/theme/BackofficeThemeProvider.d.ts +0 -7
  148. package/lib/types/backoffice/theme/BackofficeThemeProvider.d.ts.map +0 -1
  149. package/lib/types/backoffice/theme/backofficeTheme.css.d.ts +0 -2
  150. package/lib/types/backoffice/theme/backofficeTheme.css.d.ts.map +0 -1
@@ -1,149 +1,149 @@
1
1
  import { cx as e } from "../../../theme/tools.js";
2
2
  import { container as t, content as n, contentPositioned as r } from "./dropdown.css.js";
3
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
- import { cloneElement as o, createContext as s, isValidElement as c, useCallback as l, useContext as u, useEffect as d, useLayoutEffect as f, useRef as p, useState as m } from "react";
5
- import { createPortal as h } from "react-dom";
3
+ import { cloneElement as i, createContext as a, isValidElement as o, useCallback as s, useContext as c, useEffect as l, useLayoutEffect as u, useRef as d, useState as f } from "react";
4
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
5
+ import { createPortal as ee } from "react-dom";
6
6
  //#region src/atomic/molecules/dropdown/Dropdown.tsx
7
- var g = s(null), _ = () => {
8
- let e = u(g);
7
+ var h = a(null), g = () => {
8
+ let e = c(h);
9
9
  if (e == null) throw Error("useDropdown must be used within a <Dropdown />");
10
10
  return e;
11
- }, v = (e) => typeof e != "object" || !e ? !1 : e.$$typeof === Symbol.for("react.forward_ref"), y = ({ trigger: s, children: u, className: _, contentClassName: y, placement: b = "bottom-start", offset: x = 4, matchTriggerWidth: S = !0, open: C, defaultOpen: w = !1, onOpenChange: T, closeOnItemClick: E = !1, portalContainer: D, ariaLabel: O }) => {
12
- let k = C != null, [A, j] = m(w), M = A;
13
- k && (M = !!C);
14
- let N = p(null), P = p(null), F = p(null), [I, L] = m(null), R = p([]), z = l((e) => {
15
- k || j(e), T?.(e);
16
- }, [k, T]), B = l(() => {
17
- z(!M);
18
- }, [M, z]), V = l(() => {
19
- z(!1);
20
- }, [z]), ee = l(() => {
21
- z(!0);
22
- }, [z]), H = l(() => {
23
- let e = P.current, t = F.current;
11
+ }, _ = (e) => typeof e != "object" || !e ? !1 : e.$$typeof === Symbol.for("react.forward_ref"), v = ({ trigger: a, children: c, className: g, contentClassName: v, placement: y = "bottom-start", offset: b = 4, matchTriggerWidth: x = !0, open: S, defaultOpen: C = !1, onOpenChange: w, closeOnItemClick: T = !1, portalContainer: E, ariaLabel: D }) => {
12
+ let O = S != null, [k, A] = f(C), j = k;
13
+ O && (j = !!S);
14
+ let M = d(null), N = d(null), P = d(null), [F, I] = f(null), L = d([]), R = s((e) => {
15
+ O || A(e), w?.(e);
16
+ }, [O, w]), z = s(() => {
17
+ R(!j);
18
+ }, [j, R]), B = s(() => {
19
+ R(!1);
20
+ }, [R]), V = s(() => {
21
+ R(!0);
22
+ }, [R]), H = s(() => {
23
+ let e = N.current, t = P.current;
24
24
  if (e == null || t == null) return;
25
25
  let n = e.getBoundingClientRect(), r = 0, i = 0;
26
- switch (b) {
26
+ switch (y) {
27
27
  case "bottom-start":
28
- r = n.bottom + x, i = n.left;
28
+ r = n.bottom + b, i = n.left;
29
29
  break;
30
30
  case "bottom-end":
31
- r = n.bottom + x, i = n.right - t.offsetWidth;
31
+ r = n.bottom + b, i = n.right - t.offsetWidth;
32
32
  break;
33
33
  case "top-start":
34
- r = n.top - t.offsetHeight - x, i = n.left;
34
+ r = n.top - t.offsetHeight - b, i = n.left;
35
35
  break;
36
36
  case "top-end":
37
- r = n.top - t.offsetHeight - x, i = n.right - t.offsetWidth;
37
+ r = n.top - t.offsetHeight - b, i = n.right - t.offsetWidth;
38
38
  break;
39
- default: r = n.bottom + x, i = n.left;
39
+ default: r = n.bottom + b, i = n.left;
40
40
  }
41
41
  let a = window.innerWidth, o = window.innerHeight, s;
42
- S && (s = n.width);
42
+ x && (s = n.width);
43
43
  let c = s ?? t.offsetWidth;
44
44
  i + c > a - 4 && (i = Math.max(4, a - c - 4)), i < 4 && (i = 4);
45
45
  let l = t.offsetHeight;
46
- if (r + l > o - 4) if (b.startsWith("bottom")) {
47
- let e = n.top - l - x;
46
+ if (r + l > o - 4) if (y.startsWith("bottom")) {
47
+ let e = n.top - l - b;
48
48
  r = e >= 4 ? e : Math.max(4, o - l - 4);
49
49
  } else r = Math.max(4, o - l - 4);
50
- r < 4 && (r = 4), L({
50
+ r < 4 && (r = 4), I({
51
51
  top: r,
52
52
  left: i,
53
53
  width: s
54
54
  });
55
55
  }, [
56
+ y,
56
57
  b,
57
- x,
58
- S
58
+ x
59
59
  ]);
60
- f(() => {
61
- M && H();
60
+ u(() => {
61
+ j && H();
62
62
  }, [
63
- M,
63
+ j,
64
64
  H,
65
- u
66
- ]), d(() => {
67
- if (!M) return;
65
+ c
66
+ ]), l(() => {
67
+ if (!j) return;
68
68
  let e = () => {
69
69
  H();
70
70
  };
71
- window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), R.current.push(() => {
71
+ window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), L.current.push(() => {
72
72
  window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
73
73
  });
74
- }, [M, H]), d(() => {
75
- if (!M) return;
74
+ }, [j, H]), l(() => {
75
+ if (!j) return;
76
76
  let e = (e) => {
77
77
  let t = e.target;
78
- N.current != null && F.current != null && !N.current.contains(t) && !F.current.contains(t) && V();
78
+ M.current != null && P.current != null && !M.current.contains(t) && !P.current.contains(t) && B();
79
79
  }, t = (e) => {
80
- e.key === "Escape" && (V(), P.current?.focus());
80
+ e.key === "Escape" && (B(), N.current?.focus());
81
81
  };
82
- document.addEventListener("mousedown", e), document.addEventListener("keydown", t), R.current.push(() => {
82
+ document.addEventListener("mousedown", e), document.addEventListener("keydown", t), L.current.push(() => {
83
83
  document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
84
84
  });
85
- }, [M, V]), d(() => {
86
- M && (F.current?.querySelector("button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])"))?.focus();
87
- }, [M]), d(() => {
88
- if (!M || !E) return;
85
+ }, [j, B]), l(() => {
86
+ j && (P.current?.querySelector("button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])"))?.focus();
87
+ }, [j]), l(() => {
88
+ if (!j || !T) return;
89
89
  let e = (e) => {
90
- F.current?.contains(e.target) && V();
90
+ P.current?.contains(e.target) && B();
91
91
  };
92
- document.addEventListener("click", e, { capture: !0 }), R.current.push(() => {
92
+ document.addEventListener("click", e, { capture: !0 }), L.current.push(() => {
93
93
  document.removeEventListener("click", e, { capture: !0 });
94
94
  });
95
95
  }, [
96
- M,
97
- E,
98
- V
99
- ]), d(() => () => {
100
- R.current.forEach((e) => {
96
+ j,
97
+ T,
98
+ B
99
+ ]), l(() => () => {
100
+ L.current.forEach((e) => {
101
101
  e();
102
- }), R.current = [];
102
+ }), L.current = [];
103
103
  }, []);
104
- let U = s;
105
- if (typeof s == "function" && (U = s(M)), !c(U)) throw Error("Dropdown trigger must be a React element.");
104
+ let U = a;
105
+ if (typeof a == "function" && (U = a(j)), !o(U)) throw Error("Dropdown trigger must be a React element.");
106
106
  let W = typeof U.type == "string", G = W && U.type === "button";
107
- if (!(W || typeof U.type == "function" || v(U.type))) throw Error("Dropdown trigger must be a DOM element or component that accepts a ref.");
107
+ if (!(W || typeof U.type == "function" || _(U.type))) throw Error("Dropdown trigger must be a DOM element or component that accepts a ref.");
108
108
  let K = U.props.ref ?? U.ref, q = (e) => {
109
- P.current = e, typeof K == "function" ? K(e) : K != null && (K.current = e);
109
+ N.current = e, typeof K == "function" ? K(e) : K != null && (K.current = e);
110
110
  }, J = U.props, Y = (e) => {
111
- J.onClick?.(e), !e.defaultPrevented && B();
111
+ J.onClick?.(e), !e.defaultPrevented && z();
112
112
  }, X = (e) => {
113
- J.onKeyDown?.(e), !e.defaultPrevented && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), B());
113
+ J.onKeyDown?.(e), !e.defaultPrevented && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), z());
114
114
  }, Z = {
115
115
  onClick: Y,
116
116
  "aria-haspopup": "menu",
117
- "aria-expanded": M
117
+ "aria-expanded": j
118
118
  };
119
- O != null && O !== "" && (Z["aria-label"] = O), G ? J.type ?? (Z.type = "button") : (Z.onKeyDown = X, J.role ?? (Z.role = "button"), J.tabIndex ?? (Z.tabIndex = 0)), Z.ref = q;
119
+ D != null && D !== "" && (Z["aria-label"] = D), G ? J.type ?? (Z.type = "button") : (Z.onKeyDown = X, J.role ?? (Z.role = "button"), J.tabIndex ?? (Z.tabIndex = 0)), Z.ref = q;
120
120
  let Q = {};
121
- I != null && (Q = {
122
- top: I.top,
123
- left: I.left,
124
- width: I.width
121
+ F != null && (Q = {
122
+ top: F.top,
123
+ left: F.left,
124
+ width: F.width
125
125
  });
126
- let te = D ?? document.body, ne = {
127
- close: V,
128
- open: ee,
129
- isOpen: M
126
+ let te = E ?? document.body, ne = {
127
+ close: B,
128
+ open: V,
129
+ isOpen: j
130
130
  }, $ = null;
131
- return M && ($ = h(/* @__PURE__ */ i("div", {
132
- ref: F,
131
+ return j && ($ = ee(/* @__PURE__ */ p("div", {
132
+ ref: P,
133
133
  role: "menu",
134
- className: e(n, r, y),
134
+ className: e(n, r, v),
135
135
  style: Q,
136
- children: u
137
- }), te)), /* @__PURE__ */ a(g.Provider, {
136
+ children: c
137
+ }), te)), /* @__PURE__ */ m(h.Provider, {
138
138
  value: ne,
139
- children: [/* @__PURE__ */ i("div", {
140
- className: e(t, _),
141
- ref: N,
142
- children: o(U, Z)
139
+ children: [/* @__PURE__ */ p("div", {
140
+ className: e(t, g),
141
+ ref: M,
142
+ children: i(U, Z)
143
143
  }), $]
144
144
  });
145
145
  };
146
146
  //#endregion
147
- export { y as Dropdown, _ as useDropdown };
147
+ export { v as Dropdown, g as useDropdown };
148
148
 
149
149
  //# sourceMappingURL=Dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","names":[],"sources":["../../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type ReactElement,\n type JSX,\n type Ref,\n type MutableRefObject,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n createContext,\n useContext,\n isValidElement,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport * as classes from './dropdown.css.js';\nimport { cx } from '../../../theme/tools.js';\n\n// Types\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n close: () => void;\n open: () => void;\n isOpen: boolean;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n/**\n * Access the nearest Dropdown context. Throws if used outside a <Dropdown />.\n */\nexport const useDropdown = (): DropdownContextValue => {\n const ctx = useContext(DropdownContext);\n if (ctx == null) {\n throw new Error('useDropdown must be used within a <Dropdown />');\n }\n return ctx;\n};\n\nexport interface DropdownProps {\n trigger: ReactElement | ((isOpen: boolean) => ReactElement);\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n placement?: DropdownPlacement;\n offset?: number;\n matchTriggerWidth?: boolean;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n closeOnItemClick?: boolean;\n portalContainer?: HTMLElement | null;\n // Accessible label if trigger is an icon only\n ariaLabel?: string;\n}\n\ninterface PositionState {\n top: number;\n left: number;\n width?: number;\n}\n\nconst isForwardRefComponent = (type: unknown): boolean => {\n if (type == null || typeof type !== 'object') {\n return false;\n }\n return (\n (type as { $$typeof?: symbol }).$$typeof === Symbol.for('react.forward_ref')\n );\n};\n\n/**\n * A scalable, portal-based dropdown component with basic collision handling,\n * controlled/uncontrolled modes, accessibility attributes, and optional\n * trigger width matching. Content is rendered in a React portal (default: document.body).\n */\nexport const Dropdown = ({\n trigger,\n children,\n className,\n contentClassName,\n placement = 'bottom-start',\n offset = 4,\n matchTriggerWidth = true,\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnItemClick = false,\n portalContainer,\n ariaLabel,\n}: DropdownProps): JSX.Element => {\n const isControlled = open != null;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n let isOpen = uncontrolledOpen;\n if (isControlled) {\n isOpen = Boolean(open);\n }\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<PositionState | null>(null);\n // Accumulate manual cleanups for effects where returning a function violates lint rules.\n const cleanupRef = useRef<(() => void)[]>([]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const openFn = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n // Positioning logic\n const computePosition = useCallback(() => {\n const triggerEl = triggerRef.current;\n const contentEl = contentRef.current;\n if (triggerEl == null) {\n return;\n }\n if (contentEl == null) {\n return;\n }\n\n const rect = triggerEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'bottom-start':\n top = rect.bottom + offset;\n left = rect.left;\n break;\n case 'bottom-end':\n top = rect.bottom + offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n case 'top-start':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.left;\n break;\n case 'top-end':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n default:\n top = rect.bottom + offset;\n left = rect.left;\n }\n\n // Keep within viewport (basic collision handling)\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let width: number | undefined;\n if (matchTriggerWidth) {\n width = rect.width;\n }\n const contentWidth = width ?? contentEl.offsetWidth;\n\n if (left + contentWidth > vw - 4) {\n left = Math.max(4, vw - contentWidth - 4);\n }\n if (left < 4) left = 4;\n const contentHeight = contentEl.offsetHeight;\n if (top + contentHeight > vh - 4) {\n // Try flip to top if bottom overflows and initial was bottom\n if (placement.startsWith('bottom')) {\n const flippedTop = rect.top - contentHeight - offset;\n if (flippedTop >= 4) {\n top = flippedTop;\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n }\n if (top < 4) top = 4;\n\n setPosition({ top, left, width });\n }, [placement, offset, matchTriggerWidth]);\n\n useLayoutEffect(() => {\n if (isOpen) computePosition();\n }, [isOpen, computePosition, children]);\n\n useEffect(() => {\n if (!isOpen) return;\n const handle = () => {\n computePosition();\n };\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n const cleanup = () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, computePosition]);\n\n // Outside click & Escape\n useEffect(() => {\n if (!isOpen) return;\n const onDocMouseDown = (e: globalThis.MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current != null &&\n contentRef.current != null &&\n !containerRef.current.contains(target) &&\n !contentRef.current.contains(target)\n ) {\n close();\n }\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKey);\n const cleanup = () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKey);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, close]);\n\n // Keyboard navigation basic (ArrowDown focuses first focusable)\n useEffect(() => {\n if (!isOpen) return;\n const firstFocusable = contentRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n firstFocusable?.focus();\n }, [isOpen]);\n\n // Close on item click if enabled\n useEffect(() => {\n if (!isOpen || !closeOnItemClick) return;\n const handler = (e: globalThis.MouseEvent) => {\n if (contentRef.current?.contains(e.target as Node)) {\n close();\n }\n };\n document.addEventListener('click', handler, { capture: true });\n // Explicit cleanup without returning (lint rule forbids returning arrow fn)\n const cleanup = () => {\n document.removeEventListener('click', handler, { capture: true });\n };\n // Store in ref to run on unmount / dependency change\n cleanupRef.current.push(cleanup);\n }, [isOpen, closeOnItemClick, close]);\n // Run accumulated cleanups on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current.forEach((fn) => {\n fn();\n });\n cleanupRef.current = [];\n };\n }, []);\n\n let triggerElement = trigger;\n if (typeof trigger === 'function') {\n triggerElement = trigger(isOpen);\n }\n\n if (!isValidElement(triggerElement)) {\n throw new Error('Dropdown trigger must be a React element.');\n }\n\n const isHostElement = typeof triggerElement.type === 'string';\n const isButtonElement = isHostElement && triggerElement.type === 'button';\n const canAttachRef =\n isHostElement ||\n typeof triggerElement.type === 'function' ||\n isForwardRefComponent(triggerElement.type);\n\n if (!canAttachRef) {\n throw new Error(\n 'Dropdown trigger must be a DOM element or component that accepts a ref.',\n );\n }\n\n const triggerElementRef =\n (triggerElement.props as { ref?: Ref<HTMLElement> }).ref ??\n (triggerElement as ReactElement & { ref?: Ref<HTMLElement> }).ref;\n const setTriggerRef = (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof triggerElementRef === 'function') {\n triggerElementRef(node);\n } else if (triggerElementRef != null) {\n (triggerElementRef as MutableRefObject<HTMLElement | null>).current =\n node;\n }\n };\n\n const triggerProps = triggerElement.props as HTMLAttributes<HTMLElement> & {\n type?: string;\n };\n\n const handleTriggerClick = (event: ReactMouseEvent<HTMLElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n toggle();\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n };\n\n const mergedTriggerProps: Record<string, unknown> = {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n };\n\n if (ariaLabel != null && ariaLabel !== '') {\n mergedTriggerProps['aria-label'] = ariaLabel;\n }\n\n if (isButtonElement) {\n if (triggerProps.type == null) {\n mergedTriggerProps.type = 'button';\n }\n } else {\n mergedTriggerProps.onKeyDown = handleTriggerKeyDown;\n if (triggerProps.role == null) {\n mergedTriggerProps.role = 'button';\n }\n if (triggerProps.tabIndex == null) {\n mergedTriggerProps.tabIndex = 0;\n }\n }\n\n mergedTriggerProps.ref = setTriggerRef;\n\n let contentStyles: React.CSSProperties = {};\n if (position != null) {\n contentStyles = {\n top: position.top,\n left: position.left,\n width: position.width,\n };\n }\n\n const portalTarget = portalContainer ?? document.body;\n\n const contextValue: DropdownContextValue = {\n close,\n open: openFn,\n isOpen,\n };\n\n let dropdownContent: JSX.Element | null = null;\n if (isOpen) {\n dropdownContent = createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={cx(\n classes.content,\n classes.contentPositioned,\n contentClassName,\n )}\n style={contentStyles}\n >\n {children}\n </div>,\n portalTarget,\n );\n }\n\n return (\n <DropdownContext.Provider value={contextValue}>\n <div className={cx(classes.container, className)} ref={containerRef}>\n {cloneElement(triggerElement, mergedTriggerProps)}\n </div>\n {dropdownContent}\n </DropdownContext.Provider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","names":[],"sources":["../../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type ReactElement,\n type JSX,\n type Ref,\n type MutableRefObject,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n createContext,\n useContext,\n isValidElement,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport * as classes from './dropdown.css.js';\nimport { cx } from '../../../theme/tools.js';\n\n// Types\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n close: () => void;\n open: () => void;\n isOpen: boolean;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n/**\n * Access the nearest Dropdown context. Throws if used outside a <Dropdown />.\n */\nexport const useDropdown = (): DropdownContextValue => {\n const ctx = useContext(DropdownContext);\n if (ctx == null) {\n throw new Error('useDropdown must be used within a <Dropdown />');\n }\n return ctx;\n};\n\nexport interface DropdownProps {\n trigger: ReactElement | ((isOpen: boolean) => ReactElement);\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n placement?: DropdownPlacement;\n offset?: number;\n matchTriggerWidth?: boolean;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n closeOnItemClick?: boolean;\n portalContainer?: HTMLElement | null;\n // Accessible label if trigger is an icon only\n ariaLabel?: string;\n}\n\ninterface PositionState {\n top: number;\n left: number;\n width?: number;\n}\n\nconst isForwardRefComponent = (type: unknown): boolean => {\n if (type == null || typeof type !== 'object') {\n return false;\n }\n return (\n (type as { $$typeof?: symbol }).$$typeof === Symbol.for('react.forward_ref')\n );\n};\n\n/**\n * A scalable, portal-based dropdown component with basic collision handling,\n * controlled/uncontrolled modes, accessibility attributes, and optional\n * trigger width matching. Content is rendered in a React portal (default: document.body).\n */\nexport const Dropdown = ({\n trigger,\n children,\n className,\n contentClassName,\n placement = 'bottom-start',\n offset = 4,\n matchTriggerWidth = true,\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnItemClick = false,\n portalContainer,\n ariaLabel,\n}: DropdownProps): JSX.Element => {\n const isControlled = open != null;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n let isOpen = uncontrolledOpen;\n if (isControlled) {\n isOpen = Boolean(open);\n }\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<PositionState | null>(null);\n // Accumulate manual cleanups for effects where returning a function violates lint rules.\n const cleanupRef = useRef<(() => void)[]>([]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const openFn = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n // Positioning logic\n const computePosition = useCallback(() => {\n const triggerEl = triggerRef.current;\n const contentEl = contentRef.current;\n if (triggerEl == null) {\n return;\n }\n if (contentEl == null) {\n return;\n }\n\n const rect = triggerEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'bottom-start':\n top = rect.bottom + offset;\n left = rect.left;\n break;\n case 'bottom-end':\n top = rect.bottom + offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n case 'top-start':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.left;\n break;\n case 'top-end':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n default:\n top = rect.bottom + offset;\n left = rect.left;\n }\n\n // Keep within viewport (basic collision handling)\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let width: number | undefined;\n if (matchTriggerWidth) {\n width = rect.width;\n }\n const contentWidth = width ?? contentEl.offsetWidth;\n\n if (left + contentWidth > vw - 4) {\n left = Math.max(4, vw - contentWidth - 4);\n }\n if (left < 4) left = 4;\n const contentHeight = contentEl.offsetHeight;\n if (top + contentHeight > vh - 4) {\n // Try flip to top if bottom overflows and initial was bottom\n if (placement.startsWith('bottom')) {\n const flippedTop = rect.top - contentHeight - offset;\n if (flippedTop >= 4) {\n top = flippedTop;\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n }\n if (top < 4) top = 4;\n\n setPosition({ top, left, width });\n }, [placement, offset, matchTriggerWidth]);\n\n useLayoutEffect(() => {\n if (isOpen) computePosition();\n }, [isOpen, computePosition, children]);\n\n useEffect(() => {\n if (!isOpen) return;\n const handle = () => {\n computePosition();\n };\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n const cleanup = () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, computePosition]);\n\n // Outside click & Escape\n useEffect(() => {\n if (!isOpen) return;\n const onDocMouseDown = (e: globalThis.MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current != null &&\n contentRef.current != null &&\n !containerRef.current.contains(target) &&\n !contentRef.current.contains(target)\n ) {\n close();\n }\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKey);\n const cleanup = () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKey);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, close]);\n\n // Keyboard navigation basic (ArrowDown focuses first focusable)\n useEffect(() => {\n if (!isOpen) return;\n const firstFocusable = contentRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n firstFocusable?.focus();\n }, [isOpen]);\n\n // Close on item click if enabled\n useEffect(() => {\n if (!isOpen || !closeOnItemClick) return;\n const handler = (e: globalThis.MouseEvent) => {\n if (contentRef.current?.contains(e.target as Node)) {\n close();\n }\n };\n document.addEventListener('click', handler, { capture: true });\n // Explicit cleanup without returning (lint rule forbids returning arrow fn)\n const cleanup = () => {\n document.removeEventListener('click', handler, { capture: true });\n };\n // Store in ref to run on unmount / dependency change\n cleanupRef.current.push(cleanup);\n }, [isOpen, closeOnItemClick, close]);\n // Run accumulated cleanups on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current.forEach((fn) => {\n fn();\n });\n cleanupRef.current = [];\n };\n }, []);\n\n let triggerElement = trigger;\n if (typeof trigger === 'function') {\n triggerElement = trigger(isOpen);\n }\n\n if (!isValidElement(triggerElement)) {\n throw new Error('Dropdown trigger must be a React element.');\n }\n\n const isHostElement = typeof triggerElement.type === 'string';\n const isButtonElement = isHostElement && triggerElement.type === 'button';\n const canAttachRef =\n isHostElement ||\n typeof triggerElement.type === 'function' ||\n isForwardRefComponent(triggerElement.type);\n\n if (!canAttachRef) {\n throw new Error(\n 'Dropdown trigger must be a DOM element or component that accepts a ref.',\n );\n }\n\n const triggerElementRef =\n (triggerElement.props as { ref?: Ref<HTMLElement> }).ref ??\n (triggerElement as ReactElement & { ref?: Ref<HTMLElement> }).ref;\n const setTriggerRef = (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof triggerElementRef === 'function') {\n triggerElementRef(node);\n } else if (triggerElementRef != null) {\n (triggerElementRef as MutableRefObject<HTMLElement | null>).current =\n node;\n }\n };\n\n const triggerProps = triggerElement.props as HTMLAttributes<HTMLElement> & {\n type?: string;\n };\n\n const handleTriggerClick = (event: ReactMouseEvent<HTMLElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n toggle();\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n };\n\n const mergedTriggerProps: Record<string, unknown> = {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n };\n\n if (ariaLabel != null && ariaLabel !== '') {\n mergedTriggerProps['aria-label'] = ariaLabel;\n }\n\n if (isButtonElement) {\n if (triggerProps.type == null) {\n mergedTriggerProps.type = 'button';\n }\n } else {\n mergedTriggerProps.onKeyDown = handleTriggerKeyDown;\n if (triggerProps.role == null) {\n mergedTriggerProps.role = 'button';\n }\n if (triggerProps.tabIndex == null) {\n mergedTriggerProps.tabIndex = 0;\n }\n }\n\n mergedTriggerProps.ref = setTriggerRef;\n\n let contentStyles: React.CSSProperties = {};\n if (position != null) {\n contentStyles = {\n top: position.top,\n left: position.left,\n width: position.width,\n };\n }\n\n const portalTarget = portalContainer ?? document.body;\n\n const contextValue: DropdownContextValue = {\n close,\n open: openFn,\n isOpen,\n };\n\n let dropdownContent: JSX.Element | null = null;\n if (isOpen) {\n dropdownContent = createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={cx(\n classes.content,\n classes.contentPositioned,\n contentClassName,\n )}\n style={contentStyles}\n >\n {children}\n </div>,\n portalTarget,\n );\n }\n\n return (\n <DropdownContext.Provider value={contextValue}>\n <div className={cx(classes.container, className)} ref={containerRef}>\n {cloneElement(triggerElement, mergedTriggerProps)}\n </div>\n {dropdownContent}\n </DropdownContext.Provider>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { cx as e } from "../../../theme/tools.js";
2
2
  import { form as t } from "./formStyles.css.js";
3
- import { jsx as n } from "react/jsx-runtime";
4
3
  import "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
5
  //#region src/atomic/molecules/form/Form.tsx
6
6
  var r = (r) => {
7
7
  let { onSubmit: i, className: a, children: o, ref: s, ...c } = r;
@@ -1,7 +1,7 @@
1
1
  import { FormErrorAlertSvg as e } from "../../../icons/FormErrorAlertSvg.js";
2
2
  import { formError as t, icon as n, message as r } from "./formError.css.js";
3
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
3
  import "react";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
5
  //#region src/atomic/molecules/form_error/FormError.tsx
6
6
  var o = ({ children: o, ...s }) => o == null ? null : /* @__PURE__ */ a("div", {
7
7
  className: t,
@@ -1,39 +1,39 @@
1
1
  import { cx as e } from "../../../theme/tools.js";
2
- import { badge as t, container as n, content as r, fallbackCode as i, placeholder as a, shikiPre as o, shikiWrapper as s, toolbar as c } from "./HighlightCode.css.js";
3
- import { MarkdownCodeCopyButton as l } from "../markdown/components/MarkdownCodeCopyButton.js";
4
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
5
- import { cloneElement as f, isValidElement as p } from "react";
2
+ import { MarkdownCodeCopyButton as t } from "../markdown/components/MarkdownCodeCopyButton.js";
3
+ import { badge as n, container as r, content as i, fallbackCode as a, placeholder as o, shikiPre as s, shikiWrapper as c, toolbar as l } from "./HighlightCode.css.js";
4
+ import { cloneElement as u, isValidElement as d } from "react";
5
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
6
  //#region src/atomic/molecules/highlight/HighlightCode.tsx
7
7
  var m = (t) => {
8
- if (!p(t) || typeof t.type != "string" || t.type !== "pre") return t;
8
+ if (!d(t) || typeof t.type != "string" || t.type !== "pre") return t;
9
9
  let n = t.props.className;
10
- return f(t, { className: e(o, n) });
11
- }, h = ({ badgeLabel: e, copyCode: o, highlighted: f, fallbackCodeText: p, placeholderText: h }) => {
10
+ return u(t, { className: e(s, n) });
11
+ }, h = ({ badgeLabel: e, copyCode: s, highlighted: u, fallbackCodeText: d, placeholderText: h }) => {
12
12
  let g;
13
- g = h == null ? f == null ? /* @__PURE__ */ u("pre", {
14
- className: i,
15
- children: p ?? ""
16
- }) : typeof f == "string" ? /* @__PURE__ */ u("pre", {
17
- className: i,
18
- dangerouslySetInnerHTML: { __html: f }
19
- }) : /* @__PURE__ */ u("div", {
20
- className: s,
21
- children: m(f)
22
- }) : /* @__PURE__ */ u("span", {
13
+ g = h == null ? u == null ? /* @__PURE__ */ f("pre", {
23
14
  className: a,
15
+ children: d ?? ""
16
+ }) : typeof u == "string" ? /* @__PURE__ */ f("pre", {
17
+ className: a,
18
+ dangerouslySetInnerHTML: { __html: u }
19
+ }) : /* @__PURE__ */ f("div", {
20
+ className: c,
21
+ children: m(u)
22
+ }) : /* @__PURE__ */ f("span", {
23
+ className: o,
24
24
  children: h
25
25
  });
26
26
  let _ = null;
27
- return typeof o == "string" && o !== "" && (_ = /* @__PURE__ */ u(l, { code: o })), /* @__PURE__ */ d("div", {
28
- className: n,
29
- children: [/* @__PURE__ */ d("div", {
30
- className: c,
31
- children: [/* @__PURE__ */ u("span", {
32
- className: t,
27
+ return typeof s == "string" && s !== "" && (_ = /* @__PURE__ */ f(t, { code: s })), /* @__PURE__ */ p("div", {
28
+ className: r,
29
+ children: [/* @__PURE__ */ p("div", {
30
+ className: l,
31
+ children: [/* @__PURE__ */ f("span", {
32
+ className: n,
33
33
  children: e
34
34
  }), _]
35
- }), /* @__PURE__ */ u("div", {
36
- className: r,
35
+ }), /* @__PURE__ */ f("div", {
36
+ className: i,
37
37
  children: g
38
38
  })]
39
39
  });
@@ -1,13 +1,13 @@
1
1
  import { fallback as e } from "./LazyMarkdownRenderer.css.js";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { Suspense as n, lazy as r } from "react";
2
+ import { Suspense as t, lazy as n } from "react";
3
+ import { jsx as r } from "react/jsx-runtime";
4
4
  //#region src/atomic/molecules/markdown/LazyMarkdownRenderer.tsx
5
- var i = r(async () => ({ default: (await import("./MarkdownRenderer.js")).MarkdownRenderer })), a = ({ content: n }) => /* @__PURE__ */ t("div", {
5
+ var i = n(async () => ({ default: (await import("./MarkdownRenderer.js")).MarkdownRenderer })), a = ({ content: t }) => /* @__PURE__ */ r("div", {
6
6
  className: e,
7
- children: n
8
- }), o = ({ content: e }) => /* @__PURE__ */ t(n, {
9
- fallback: /* @__PURE__ */ t(a, { content: e }),
10
- children: /* @__PURE__ */ t(i, { content: e })
7
+ children: t
8
+ }), o = ({ content: e }) => /* @__PURE__ */ r(t, {
9
+ fallback: /* @__PURE__ */ r(a, { content: e }),
10
+ children: /* @__PURE__ */ r(i, { content: e })
11
11
  });
12
12
  //#endregion
13
13
  export { o as LazyMarkdownRenderer, o as default };
@@ -28,26 +28,26 @@ import { MarkdownTableRow as E } from "./components/MarkdownTableRow.js";
28
28
  import { MarkdownTaskListItem as D } from "./components/MarkdownTaskListItem.js";
29
29
  import { MarkdownText as O } from "./components/MarkdownText.js";
30
30
  import { MarkdownThematicBreak as k } from "./components/MarkdownThematicBreak.js";
31
- import { jsx as A, jsxs as j } from "react/jsx-runtime";
32
- import { Fragment as M, useDeferredValue as N, useMemo as te } from "react";
31
+ import { Fragment as A, useDeferredValue as j, useMemo as M } from "react";
32
+ import { jsx as N, jsxs as te } from "react/jsx-runtime";
33
33
  //#region src/atomic/molecules/markdown/MarkdownRenderer.tsx
34
34
  var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t == null ? null : e(t, n), I = (e) => {
35
35
  if ("children" in e) return e.children;
36
36
  }, L = (t) => t.type === e.codeInline, R = (t) => t.type === e.codeBlock, z = (t) => t.type === e.footnoteReference, B = (t) => t.type === e.heading, V = (t) => t.type === e.htmlBlock, H = (t) => t.type === e.htmlSelfClosing, U = (t) => t.type === e.image, W = (t) => t.type === e.link, G = (t) => t.type === e.orderedList, K = (t) => t.type === e.paragraph, q = (t) => t.type === e.table, J = (t) => t.type === e.text, Y = (t) => t.type === e.textFormatted, X = (t) => t.type === e.unorderedList, Z = (t) => t.type === e.gfmTask, Q = {
37
- [e.blockQuote]: (e, t, n, i) => /* @__PURE__ */ A(r, { children: F(n, I(t), i) }, i.key),
38
- [e.breakLine]: (e, t, n, r) => /* @__PURE__ */ A(m, {}, r.key),
39
- [e.breakThematic]: (e, t, n, r) => /* @__PURE__ */ A(k, {}, r.key),
40
- [e.codeInline]: (e, t, n, r) => L(t) ? /* @__PURE__ */ A(p, { text: t.text }, r.key) : null,
41
- [e.codeBlock]: (e, t, n, r) => R(t) ? /* @__PURE__ */ A(i, {
37
+ [e.blockQuote]: (e, t, n, i) => /* @__PURE__ */ N(r, { children: F(n, I(t), i) }, i.key),
38
+ [e.breakLine]: (e, t, n, r) => /* @__PURE__ */ N(m, {}, r.key),
39
+ [e.breakThematic]: (e, t, n, r) => /* @__PURE__ */ N(k, {}, r.key),
40
+ [e.codeInline]: (e, t, n, r) => L(t) ? /* @__PURE__ */ N(p, { text: t.text }, r.key) : null,
41
+ [e.codeBlock]: (e, t, n, r) => R(t) ? /* @__PURE__ */ N(i, {
42
42
  code: t.text,
43
43
  language: t.lang
44
44
  }, r.key) : null,
45
- [e.footnoteReference]: (e, t, n, r) => z(t) ? /* @__PURE__ */ A(c, {
45
+ [e.footnoteReference]: (e, t, n, r) => z(t) ? /* @__PURE__ */ N(c, {
46
46
  href: t.target,
47
47
  label: t.text
48
48
  }, r.key) : null,
49
49
  [e.gfmTask]: () => null,
50
- [e.heading]: (e, t, n, r) => B(t) ? /* @__PURE__ */ A(u, {
50
+ [e.heading]: (e, t, n, r) => B(t) ? /* @__PURE__ */ N(u, {
51
51
  id: t.id,
52
52
  level: t.level,
53
53
  children: F(n, t.children, r)
@@ -55,16 +55,16 @@ var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t
55
55
  [e.htmlBlock]: (e, t, n, r) => {
56
56
  if (!V(t)) return null;
57
57
  let i = t.text, a = "";
58
- return typeof i == "string" && (a = i), /* @__PURE__ */ A(d, {
58
+ return typeof i == "string" && (a = i), /* @__PURE__ */ N(d, {
59
59
  content: a,
60
60
  title: "HTML non pris en charge"
61
61
  }, r.key);
62
62
  },
63
- [e.htmlSelfClosing]: (e, t, n, r) => H(t) ? /* @__PURE__ */ A(d, {
63
+ [e.htmlSelfClosing]: (e, t, n, r) => H(t) ? /* @__PURE__ */ N(d, {
64
64
  content: `<${t.tag} />`,
65
65
  title: "HTML non pris en charge"
66
66
  }, r.key) : null,
67
- [e.image]: (e, t, n, r) => U(t) ? /* @__PURE__ */ A(f, {
67
+ [e.image]: (e, t, n, r) => U(t) ? /* @__PURE__ */ N(f, {
68
68
  alt: t.alt,
69
69
  src: t.target,
70
70
  title: t.title
@@ -72,13 +72,13 @@ var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t
72
72
  [e.link]: (e, t, n, r) => {
73
73
  if (!W(t)) return null;
74
74
  let i = t.target;
75
- return i == null ? /* @__PURE__ */ A(M, { children: F(n, t.children, r) }, r.key) : /* @__PURE__ */ A(h, {
75
+ return i == null ? /* @__PURE__ */ N(A, { children: F(n, t.children, r) }, r.key) : /* @__PURE__ */ N(h, {
76
76
  href: i,
77
77
  title: t.title,
78
78
  children: F(n, t.children, r)
79
79
  }, r.key);
80
80
  },
81
- [e.orderedList]: (e, t, n, r) => G(t) ? /* @__PURE__ */ A(g, {
81
+ [e.orderedList]: (e, t, n, r) => G(t) ? /* @__PURE__ */ N(g, {
82
82
  ordered: !0,
83
83
  start: t.start,
84
84
  children: t.items.map((e, t) => {
@@ -87,48 +87,48 @@ var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t
87
87
  let a = `${i}-${t}`, o = e[0];
88
88
  if (o != null && Z(o)) {
89
89
  let t = e.slice(1);
90
- return /* @__PURE__ */ A(D, {
90
+ return /* @__PURE__ */ N(D, {
91
91
  checked: o.completed,
92
92
  children: F(n, t, r)
93
93
  }, a);
94
94
  }
95
- return /* @__PURE__ */ A(_, { children: F(n, e, r) }, a);
95
+ return /* @__PURE__ */ N(_, { children: F(n, e, r) }, a);
96
96
  })
97
97
  }, r.key) : null,
98
- [e.paragraph]: (e, t, n, r) => K(t) ? /* @__PURE__ */ A(v, { children: F(n, t.children, r) }, r.key) : null,
98
+ [e.paragraph]: (e, t, n, r) => K(t) ? /* @__PURE__ */ N(v, { children: F(n, t.children, r) }, r.key) : null,
99
99
  [e.table]: (e, t, n, r) => {
100
100
  if (!q(t)) return null;
101
101
  let i = null;
102
- return Array.isArray(t.header) && t.header.length > 0 && (i = /* @__PURE__ */ A(w, { children: /* @__PURE__ */ A(E, { children: t.header.map((e, i) => {
102
+ return Array.isArray(t.header) && t.header.length > 0 && (i = /* @__PURE__ */ N(w, { children: /* @__PURE__ */ N(E, { children: t.header.map((e, i) => {
103
103
  let a;
104
- return Array.isArray(t.align) && (a = t.align[i]), /* @__PURE__ */ A(T, {
104
+ return Array.isArray(t.align) && (a = t.align[i]), /* @__PURE__ */ N(T, {
105
105
  align: P(a),
106
106
  children: F(n, e, r)
107
107
  }, `header-${i}`);
108
- }) }) })), /* @__PURE__ */ j(x, { children: [i, /* @__PURE__ */ A(S, { children: t.cells.map((e, i) => /* @__PURE__ */ A(E, { children: e.map((e, a) => {
108
+ }) }) })), /* @__PURE__ */ te(x, { children: [i, /* @__PURE__ */ N(S, { children: t.cells.map((e, i) => /* @__PURE__ */ N(E, { children: e.map((e, a) => {
109
109
  let o;
110
- return Array.isArray(t.align) && (o = t.align[a]), /* @__PURE__ */ A(C, {
110
+ return Array.isArray(t.align) && (o = t.align[a]), /* @__PURE__ */ N(C, {
111
111
  align: P(o),
112
112
  children: F(n, e, r)
113
113
  }, `cell-${i}-${a}`);
114
114
  }) }, `row-${i}`)) })] }, r.key);
115
115
  },
116
- [e.text]: (e, t, n, r) => J(t) ? /* @__PURE__ */ A(O, { text: t.text }, r.key) : null,
116
+ [e.text]: (e, t, n, r) => J(t) ? /* @__PURE__ */ N(O, { text: t.text }, r.key) : null,
117
117
  [e.textFormatted]: (e, t, n, r) => {
118
118
  if (!Y(t)) return e();
119
119
  let i = F(n, t.children, r);
120
120
  switch (t.tag) {
121
121
  case "strong":
122
- case "b": return /* @__PURE__ */ A(y, { children: i }, r.key);
122
+ case "b": return /* @__PURE__ */ N(y, { children: i }, r.key);
123
123
  case "em":
124
- case "i": return /* @__PURE__ */ A(o, { children: i }, r.key);
125
- case "mark": return /* @__PURE__ */ A(ee, { children: i }, r.key);
124
+ case "i": return /* @__PURE__ */ N(o, { children: i }, r.key);
125
+ case "mark": return /* @__PURE__ */ N(ee, { children: i }, r.key);
126
126
  case "del":
127
- case "s": return /* @__PURE__ */ A(a, { children: i }, r.key);
127
+ case "s": return /* @__PURE__ */ N(a, { children: i }, r.key);
128
128
  default: return e();
129
129
  }
130
130
  },
131
- [e.unorderedList]: (e, t, n, r) => X(t) ? /* @__PURE__ */ A(g, {
131
+ [e.unorderedList]: (e, t, n, r) => X(t) ? /* @__PURE__ */ N(g, {
132
132
  ordered: !1,
133
133
  children: t.items.map((e, t) => {
134
134
  let i = "ul";
@@ -136,18 +136,18 @@ var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t
136
136
  let a = `${i}-${t}`, o = e[0];
137
137
  if (o != null && Z(o)) {
138
138
  let t = e.slice(1);
139
- return /* @__PURE__ */ A(D, {
139
+ return /* @__PURE__ */ N(D, {
140
140
  checked: o.completed,
141
141
  children: F(n, t, r)
142
142
  }, a);
143
143
  }
144
- return /* @__PURE__ */ A(_, { children: F(n, e, r) }, a);
144
+ return /* @__PURE__ */ N(_, { children: F(n, e, r) }, a);
145
145
  })
146
146
  }, r.key) : null
147
147
  }, ne = {
148
148
  disableParsingRawHTML: !0,
149
149
  forceBlock: !0,
150
- wrapper: M,
150
+ wrapper: A,
151
151
  overrides: {
152
152
  footer: { component: l },
153
153
  sup: { component: s },
@@ -158,10 +158,10 @@ var P = (e) => e === "center" || e === "right" ? e : "left", F = (e, t, n) => t
158
158
  return i == null ? e() : i(e, t, n, r);
159
159
  }
160
160
  }, $ = ({ content: e }) => {
161
- let r = N(e);
162
- return /* @__PURE__ */ A(n, { children: /* @__PURE__ */ A(t, {
161
+ let r = j(e);
162
+ return /* @__PURE__ */ N(n, { children: /* @__PURE__ */ N(t, {
163
163
  options: ne,
164
- children: te(() => r, [r])
164
+ children: M(() => r, [r])
165
165
  }) });
166
166
  };
167
167
  //#endregion