@alfadocs/ui-kit-debug 0.21.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/_chunks/{autocomplete-BxfabhZ8.js → autocomplete-C7xq06bP.js} +40 -40
  2. package/dist/_chunks/{autocomplete-BxfabhZ8.js.map → autocomplete-C7xq06bP.js.map} +1 -1
  3. package/dist/_chunks/editable-currency-cell-renderer-DJB5MxAI.js +2349 -0
  4. package/dist/_chunks/editable-currency-cell-renderer-DJB5MxAI.js.map +1 -0
  5. package/dist/_chunks/locale-picker-CYBhgSHR.js +575 -0
  6. package/dist/_chunks/locale-picker-CYBhgSHR.js.map +1 -0
  7. package/dist/_chunks/{patient-shell-DavGODt9.js → patient-shell-B164drIa.js} +40 -55
  8. package/dist/_chunks/patient-shell-B164drIa.js.map +1 -0
  9. package/dist/_chunks/settings-ca2Yi9R8.js +21 -0
  10. package/dist/_chunks/settings-ca2Yi9R8.js.map +1 -0
  11. package/dist/_chunks/sun-Eweh5fvi.js +50 -0
  12. package/dist/_chunks/sun-Eweh5fvi.js.map +1 -0
  13. package/dist/_chunks/{theme-toggle-BswYl0Yp.js → theme-toggle-FrotC2VI.js} +85 -127
  14. package/dist/_chunks/{theme-toggle-BswYl0Yp.js.map → theme-toggle-FrotC2VI.js.map} +1 -1
  15. package/dist/_chunks/use-locale-BkCIHujH.js +20 -0
  16. package/dist/_chunks/use-locale-BkCIHujH.js.map +1 -0
  17. package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js +55 -0
  18. package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js.map +1 -0
  19. package/dist/_chunks/{whatsapp-button-CtlLwM3M.js → whatsapp-button-DUjlWGKf.js} +26 -25
  20. package/dist/_chunks/{whatsapp-button-CtlLwM3M.js.map → whatsapp-button-DUjlWGKf.js.map} +1 -1
  21. package/dist/agent-catalog.json +59 -1
  22. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  23. package/dist/components/autocomplete/index.js +1 -1
  24. package/dist/components/data-table/data-table.d.ts.map +1 -1
  25. package/dist/components/data-table/filters/number-filter.d.ts +56 -0
  26. package/dist/components/data-table/filters/number-filter.d.ts.map +1 -0
  27. package/dist/components/data-table/filters/text-filter.d.ts +49 -0
  28. package/dist/components/data-table/filters/text-filter.d.ts.map +1 -0
  29. package/dist/components/data-table/index.d.ts +4 -0
  30. package/dist/components/data-table/index.d.ts.map +1 -1
  31. package/dist/components/data-table/index.js +25 -21
  32. package/dist/components/header-settings/index.js +205 -0
  33. package/dist/components/header-settings/index.js.map +1 -0
  34. package/dist/components/locale-picker/index.js +7 -0
  35. package/dist/components/locale-picker/index.js.map +1 -0
  36. package/dist/components/theme-toggle/index.js +1 -1
  37. package/dist/components/whatsapp-button/index.js +1 -1
  38. package/dist/components/whatsapp-button/whatsapp-button.d.ts +14 -1
  39. package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
  40. package/dist/fonts/Lexend-VF-latin-ext.woff2 +0 -0
  41. package/dist/fonts/Lexend-VF-latin.woff2 +0 -0
  42. package/dist/fonts/Lexend-VF-vietnamese.woff2 +0 -0
  43. package/dist/fonts/NotoSansArabic-VF-arabic.woff2 +0 -0
  44. package/dist/fonts/NotoSansDevanagari-VF-devanagari.woff2 +0 -0
  45. package/dist/hooks/index.js +29 -28
  46. package/dist/hooks/index.js.map +1 -1
  47. package/dist/i18n/config.d.ts +1 -1
  48. package/dist/i18n/config.d.ts.map +1 -1
  49. package/dist/i18n/config.js +20944 -2110
  50. package/dist/i18n/config.js.map +1 -1
  51. package/dist/i18n/locales/ar.d.ts +1225 -0
  52. package/dist/i18n/locales/ar.d.ts.map +1 -0
  53. package/dist/i18n/locales/de.d.ts +1225 -0
  54. package/dist/i18n/locales/de.d.ts.map +1 -0
  55. package/dist/i18n/locales/el.d.ts +1222 -0
  56. package/dist/i18n/locales/el.d.ts.map +1 -0
  57. package/dist/i18n/locales/es.d.ts +1222 -0
  58. package/dist/i18n/locales/es.d.ts.map +1 -0
  59. package/dist/i18n/locales/fr.d.ts +1222 -0
  60. package/dist/i18n/locales/fr.d.ts.map +1 -0
  61. package/dist/i18n/locales/hi.d.ts +1222 -0
  62. package/dist/i18n/locales/hi.d.ts.map +1 -0
  63. package/dist/i18n/locales/ja.d.ts +1222 -0
  64. package/dist/i18n/locales/ja.d.ts.map +1 -0
  65. package/dist/i18n/locales/nl.d.ts +1222 -0
  66. package/dist/i18n/locales/nl.d.ts.map +1 -0
  67. package/dist/i18n/locales/pl.d.ts +1222 -0
  68. package/dist/i18n/locales/pl.d.ts.map +1 -0
  69. package/dist/i18n/locales/pt.d.ts +1223 -0
  70. package/dist/i18n/locales/pt.d.ts.map +1 -0
  71. package/dist/i18n/locales/ro.d.ts +1222 -0
  72. package/dist/i18n/locales/ro.d.ts.map +1 -0
  73. package/dist/i18n/locales/ru.d.ts +1222 -0
  74. package/dist/i18n/locales/ru.d.ts.map +1 -0
  75. package/dist/i18n/locales/sq.d.ts +1222 -0
  76. package/dist/i18n/locales/sq.d.ts.map +1 -0
  77. package/dist/i18n/locales/sv.d.ts +1222 -0
  78. package/dist/i18n/locales/sv.d.ts.map +1 -0
  79. package/dist/i18n/locales/tr.d.ts +1222 -0
  80. package/dist/i18n/locales/tr.d.ts.map +1 -0
  81. package/dist/i18n/locales/zh.d.ts +1222 -0
  82. package/dist/i18n/locales/zh.d.ts.map +1 -0
  83. package/dist/i18n/resources.d.ts +342 -1040
  84. package/dist/i18n/resources.d.ts.map +1 -1
  85. package/dist/index.js +512 -507
  86. package/dist/index.js.map +1 -1
  87. package/dist/locales/ar.json +1217 -1
  88. package/dist/locales/de.json +207 -13
  89. package/dist/locales/el.json +1217 -0
  90. package/dist/locales/en.json +147 -3
  91. package/dist/locales/es.json +1217 -0
  92. package/dist/locales/fr.json +1217 -0
  93. package/dist/locales/hi.json +1217 -0
  94. package/dist/locales/it.json +178 -3
  95. package/dist/locales/ja.json +1217 -0
  96. package/dist/locales/nl.json +1217 -0
  97. package/dist/locales/pl.json +1217 -0
  98. package/dist/locales/pt.json +1217 -0
  99. package/dist/locales/ro.json +1217 -0
  100. package/dist/locales/ru.json +1217 -0
  101. package/dist/locales/sq.json +1217 -0
  102. package/dist/locales/sv.json +1217 -0
  103. package/dist/locales/tr.json +1217 -0
  104. package/dist/locales/zh.json +1217 -0
  105. package/dist/patterns/patient-shell/index.js +1 -1
  106. package/dist/tokens.css +2 -2
  107. package/package.json +13 -1
  108. package/dist/_chunks/editable-currency-cell-renderer-1t42gENX.js +0 -1972
  109. package/dist/_chunks/editable-currency-cell-renderer-1t42gENX.js.map +0 -1
  110. package/dist/_chunks/patient-shell-DavGODt9.js.map +0 -1
  111. package/dist/_chunks/use-locale-C5rS3Xon.js +0 -71
  112. package/dist/_chunks/use-locale-C5rS3Xon.js.map +0 -1
@@ -1,45 +1,30 @@
1
1
  import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
- import { forwardRef as k, useState as w } from "react";
2
+ import { forwardRef as v, useState as I } from "react";
3
3
  import { useTranslation as c } from "react-i18next";
4
- import { A as y } from "./app-frame-BYx1gcV7.js";
5
- import { I } from "./icon-button-C4CGcYuz.js";
4
+ import { A as L } from "./app-frame-BYx1gcV7.js";
5
+ import { I as w } from "./icon-button-C4CGcYuz.js";
6
6
  import { D as n } from "./dropdown-menu-DZxwF23X.js";
7
- import { H as L, g as A, f as H, e as x, a as C, c as M, d as B } from "./header-DqmKROIY.js";
8
- import { L as N } from "./logo-_Z-jLq80.js";
9
- import { S as T, a as _, h as O, j as P, k as W, i as j } from "./sidebar-DkyC6GvS.js";
10
- import { T as z } from "./theme-root-BOO73p5t.js";
11
- import { a as R } from "./tooltip-DHik5yRI.js";
12
- import { u as D } from "./use-theme-B1cwAXJR.js";
13
- import { c as h } from "./createLucideIcon-CrFbzy84.js";
14
- import { L as q } from "./log-out-616hnn2-.js";
7
+ import { H as k, g as A, f as y, e as H, a as C, c as x, d as B } from "./header-DqmKROIY.js";
8
+ import { L as M } from "./logo-_Z-jLq80.js";
9
+ import { S as T, a as N, h as O, j as P, k as W, i as j } from "./sidebar-DkyC6GvS.js";
10
+ import { T as R } from "./theme-root-BOO73p5t.js";
11
+ import { a as _ } from "./tooltip-DHik5yRI.js";
12
+ import { u as z } from "./use-theme-B1cwAXJR.js";
13
+ import { S as D } from "./settings-ca2Yi9R8.js";
14
+ import { c as q } from "./createLucideIcon-CrFbzy84.js";
15
+ import { L as E } from "./log-out-616hnn2-.js";
15
16
  /**
16
17
  * @license lucide-react v1.8.0 - ISC
17
18
  *
18
19
  * This source code is licensed under the ISC license.
19
20
  * See the LICENSE file in the root directory of this source tree.
20
21
  */
21
- const E = [
22
+ const F = [
22
23
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
23
24
  ["path", { d: "m21 3-7 7", key: "1l2asr" }],
24
25
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
25
26
  ["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
26
- ], F = h("maximize-2", E);
27
- /**
28
- * @license lucide-react v1.8.0 - ISC
29
- *
30
- * This source code is licensed under the ISC license.
31
- * See the LICENSE file in the root directory of this source tree.
32
- */
33
- const U = [
34
- [
35
- "path",
36
- {
37
- d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
38
- key: "1i5ecw"
39
- }
40
- ],
41
- ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
42
- ], $ = h("settings", U);
27
+ ], U = q("maximize-2", F);
43
28
  function G(a) {
44
29
  return a > 99 ? "99+" : String(a);
45
30
  }
@@ -60,9 +45,9 @@ function K({
60
45
  const { t: r } = c();
61
46
  return /* @__PURE__ */ i(n.Root, { children: [
62
47
  /* @__PURE__ */ e(n.Trigger, { asChild: !0, children: /* @__PURE__ */ e(
63
- I,
48
+ w,
64
49
  {
65
- icon: /* @__PURE__ */ e($, { "aria-hidden": "true" }),
50
+ icon: /* @__PURE__ */ e(D, { "aria-hidden": "true" }),
66
51
  "aria-label": r("patientShell.settings.triggerAria"),
67
52
  tooltip: r("patientShell.settings.triggerAria"),
68
53
  "data-testid": "patient-shell-settings-trigger"
@@ -72,7 +57,7 @@ function K({
72
57
  /* @__PURE__ */ e(
73
58
  n.Item,
74
59
  {
75
- startIcon: /* @__PURE__ */ e(F, { "aria-hidden": "true" }),
60
+ startIcon: /* @__PURE__ */ e(U, { "aria-hidden": "true" }),
76
61
  onSelect: t,
77
62
  "data-testid": "patient-shell-fullscreen",
78
63
  children: r("patientShell.settings.fullscreen")
@@ -82,7 +67,7 @@ function K({
82
67
  /* @__PURE__ */ e(
83
68
  n.Item,
84
69
  {
85
- startIcon: /* @__PURE__ */ e(q, { "aria-hidden": "true" }),
70
+ startIcon: /* @__PURE__ */ e(E, { "aria-hidden": "true" }),
86
71
  onSelect: () => {
87
72
  typeof window > "u" || J(a) && window.location.assign(a);
88
73
  },
@@ -94,7 +79,7 @@ function K({
94
79
  ] });
95
80
  }
96
81
  function Q({ menuItems: a }) {
97
- return /* @__PURE__ */ e(_, { children: a.map((t) => {
82
+ return /* @__PURE__ */ e(N, { children: a.map((t) => {
98
83
  const r = typeof t.badgeCount == "number" && t.badgeCount > 0 ? t.badgeCount : void 0;
99
84
  return /* @__PURE__ */ i(
100
85
  O,
@@ -112,49 +97,49 @@ function Q({ menuItems: a }) {
112
97
  );
113
98
  }) });
114
99
  }
115
- const V = k(
100
+ const V = v(
116
101
  ({
117
102
  menuItems: a,
118
103
  logoutHref: t,
119
104
  onToggleFullscreen: r,
120
- brandLogo: p,
121
- brandHref: u = "/",
105
+ brandLogo: h,
106
+ brandHref: p = "/",
122
107
  mainAriaLabel: m,
123
108
  sidebarState: o,
124
- children: f,
109
+ children: u,
125
110
  // `userName` and `userAvatarSrc` are declared on the public API
126
111
  // for forward-compatibility (future profile-pill work) — they are
127
112
  // intentionally unused today because the legacy patient chrome
128
113
  // carries no profile pill.
129
114
  userName: X,
130
115
  userAvatarSrc: Y
131
- }, g) => {
132
- const { t: s } = c(), { resolvedTheme: d } = D(), S = d.startsWith("dark") ? "dark" : "light", b = d.endsWith("-accessible"), [v, l] = w(!1);
116
+ }, f) => {
117
+ const { t: s } = c(), { resolvedTheme: d } = z(), g = d.startsWith("dark") ? "dark" : "light", S = d.endsWith("-accessible"), [b, l] = I(!1);
133
118
  return /* @__PURE__ */ e(
134
- z,
119
+ R,
135
120
  {
136
- ref: g,
137
- theme: S,
138
- accessible: b,
121
+ ref: f,
122
+ theme: g,
123
+ accessible: S,
139
124
  className: "ds:contents",
140
- children: /* @__PURE__ */ e(R, { children: /* @__PURE__ */ e(
141
- y,
125
+ children: /* @__PURE__ */ e(_, { children: /* @__PURE__ */ e(
126
+ L,
142
127
  {
143
128
  mainAriaLabel: m,
144
- header: /* @__PURE__ */ i(L, { children: [
129
+ header: /* @__PURE__ */ i(k, { children: [
145
130
  /* @__PURE__ */ i(A, { children: [
146
- /* @__PURE__ */ e(H, { href: "#main-content" }),
147
- /* @__PURE__ */ e(x, { onMenuOpen: () => l(!0) }),
131
+ /* @__PURE__ */ e(y, { href: "#main-content" }),
132
+ /* @__PURE__ */ e(H, { onMenuOpen: () => l(!0) }),
148
133
  /* @__PURE__ */ e(
149
134
  C,
150
135
  {
151
- logo: p ?? /* @__PURE__ */ e(N, { variant: "monochrome", size: "md", decorative: !0 }),
152
- href: u,
136
+ logo: h ?? /* @__PURE__ */ e(M, { variant: "monochrome", size: "md", decorative: !0 }),
137
+ href: p,
153
138
  "aria-label": s("patientShell.brand.homeAria")
154
139
  }
155
140
  )
156
141
  ] }),
157
- /* @__PURE__ */ e(M, {}),
142
+ /* @__PURE__ */ e(x, {}),
158
143
  /* @__PURE__ */ e(B, { children: /* @__PURE__ */ e(
159
144
  K,
160
145
  {
@@ -167,14 +152,14 @@ const V = k(
167
152
  T,
168
153
  {
169
154
  ...o !== void 0 ? { state: o } : { defaultState: "expanded" },
170
- open: v,
155
+ open: b,
171
156
  onOpenChange: l,
172
157
  "aria-label": s("patientShell.sidebar.panelLabel"),
173
158
  "data-testid": "patient-shell-sidebar",
174
159
  children: /* @__PURE__ */ e(Q, { menuItems: a })
175
160
  }
176
161
  ),
177
- children: f
162
+ children: u
178
163
  }
179
164
  ) })
180
165
  }
@@ -185,4 +170,4 @@ V.displayName = "PatientShell";
185
170
  export {
186
171
  V as P
187
172
  };
188
- //# sourceMappingURL=patient-shell-DavGODt9.js.map
173
+ //# sourceMappingURL=patient-shell-B164drIa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patient-shell-B164drIa.js","sources":["../../node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../src/patterns/patient-shell/patient-shell.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * Patient Shell — the chrome for AlfaDocs's patient-facing users\n * (patients managing their own appointments and records).\n *\n * Deliberately flatter than the clinician `AppFrame` composition: no\n * command palette, no favourites, no practice/chain affordances, no\n * Alia, no privacy lock. Mirrors the legacy `_header.html.twig`\n * `app.user.type == 'patient'` branch and the `knp_menu_render('pcp')`\n * flat nav menu.\n *\n * Unlike most patterns in this folder, PatientShell exports a runtime\n * component because the consuming patient-portal app mounts it in\n * production — the exports are surfaced via `src/patterns/index.ts`\n * and included in the library bundle.\n */\nimport { forwardRef, useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LogOut, Maximize2, Settings as SettingsIcon } from 'lucide-react';\n\nimport { AppFrame } from '../../components/app-frame';\nimport { IconButton } from '../../components/button';\nimport { DropdownMenu } from '../../components/dropdown-menu';\nimport {\n Header,\n HeaderBrand,\n HeaderCenter,\n HeaderEnd,\n HeaderMenuButton,\n HeaderSkipLink,\n HeaderStart,\n} from '../../components/header';\nimport { Logo } from '../../components/logo';\nimport {\n Sidebar,\n SidebarBody,\n SidebarItem,\n SidebarItemBadge,\n SidebarItemIcon,\n SidebarItemLabel,\n type SidebarMode,\n} from '../../components/sidebar';\nimport { ThemeRoot } from '../../components/theme-root';\nimport { TooltipProvider } from '../../components/tooltip';\nimport { useTheme } from '../../hooks/use-theme';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface PatientNavItem {\n id: string;\n /** Pre-translated label — patients' nav labels are emitted already\n * translated by the consuming app's backend (legacy `knp_menu`). */\n label: string;\n href: string;\n /** Optional leading icon. Pass a lucide-react or equivalent element. */\n icon?: ReactNode;\n /** Optional unseen-item count rendered as a pill badge. */\n badgeCount?: number;\n /** Mark the item as the current page (`aria-current='page'`). */\n isActive?: boolean;\n}\n\nexport interface PatientShellProps {\n /** Patient's display name. Used as the avatar fallback by consumers\n * that read the name through a slot; not rendered inside this shell\n * today because the legacy patient chrome carries no profile pill. */\n userName: string;\n /** Optional avatar URL. Reserved for future profile-pill surfaces;\n * no visible effect today. */\n userAvatarSrc?: string;\n /** Flat nav items rendered in the sidebar, in order. */\n menuItems: PatientNavItem[];\n /** URL the \"Logout\" action navigates to — typically `/logout`. */\n logoutHref: string;\n /** Fires when the user toggles fullscreen from the settings menu. */\n onToggleFullscreen?: () => void;\n /** Optional brand logo. Defaults to\n * `<Logo variant=\"monochrome\" size=\"md\" decorative />`. */\n brandLogo?: ReactNode;\n /** Link target for the brand — typically the patient dashboard. */\n brandHref?: string;\n /** Override the accessible name of the `<main>` landmark. */\n mainAriaLabel?: string;\n /**\n * Force the sidebar into a specific mode. Consuming apps typically\n * flip to `'overlay'` on narrow viewports and leave this undefined\n * elsewhere (the sidebar then defaults to `'expanded'`).\n */\n sidebarState?: SidebarMode;\n /** Children render inside the main content region. */\n children: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Internals */\n/* ------------------------------------------------------------------ */\n\nfunction formatBadgeCount(count: number): string {\n return count > 99 ? '99+' : String(count);\n}\n\n/**\n * Guard against `javascript:` and other non-navigation schemes before\n * handing the URL to `window.location.assign`. A consuming app that lets\n * attacker-controlled input reach `logoutHref` would otherwise execute\n * script. Allow only relative paths, hash fragments, and `http(s)` URLs.\n */\nfunction isSafeLogoutHref(href: string): boolean {\n if (href.startsWith('/') || href.startsWith('#') || href.startsWith('?')) {\n return true;\n }\n try {\n const url = new URL(href, window.location.origin);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction SettingsMenu({\n logoutHref,\n onToggleFullscreen,\n}: {\n logoutHref: string;\n onToggleFullscreen?: () => void;\n}) {\n const { t } = useTranslation();\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<SettingsIcon aria-hidden=\"true\" />}\n aria-label={t('patientShell.settings.triggerAria')}\n tooltip={t('patientShell.settings.triggerAria')}\n data-testid=\"patient-shell-settings-trigger\"\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n <DropdownMenu.Item\n startIcon={<Maximize2 aria-hidden=\"true\" />}\n onSelect={onToggleFullscreen}\n data-testid=\"patient-shell-fullscreen\"\n >\n {t('patientShell.settings.fullscreen')}\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n startIcon={<LogOut aria-hidden=\"true\" />}\n onSelect={() => {\n if (typeof window === 'undefined') return;\n if (!isSafeLogoutHref(logoutHref)) return;\n window.location.assign(logoutHref);\n }}\n data-testid=\"patient-shell-logout\"\n >\n {t('patientShell.settings.logout')}\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}\n\nfunction PatientSidebarNav({ menuItems }: { menuItems: PatientNavItem[] }) {\n return (\n <SidebarBody>\n {menuItems.map((item) => {\n const badge =\n typeof item.badgeCount === 'number' && item.badgeCount > 0\n ? item.badgeCount\n : undefined;\n return (\n <SidebarItem\n key={item.id}\n href={item.href}\n aria-label={item.label}\n isActive={item.isActive}\n >\n {item.icon ? <SidebarItemIcon>{item.icon}</SidebarItemIcon> : null}\n <SidebarItemLabel>{item.label}</SidebarItemLabel>\n {badge !== undefined ? (\n <SidebarItemBadge>{formatBadgeCount(badge)}</SidebarItemBadge>\n ) : null}\n </SidebarItem>\n );\n })}\n </SidebarBody>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PatientShell = forwardRef<HTMLDivElement, PatientShellProps>(\n (\n {\n menuItems,\n logoutHref,\n onToggleFullscreen,\n brandLogo,\n brandHref = '/',\n mainAriaLabel,\n sidebarState,\n children,\n // `userName` and `userAvatarSrc` are declared on the public API\n // for forward-compatibility (future profile-pill work) — they are\n // intentionally unused today because the legacy patient chrome\n // carries no profile pill.\n userName: _userName,\n userAvatarSrc: _userAvatarSrc,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const { resolvedTheme } = useTheme();\n const themeBase = resolvedTheme.startsWith('dark') ? 'dark' : 'light';\n const themeAccessible = resolvedTheme.endsWith('-accessible');\n\n // Narrow-viewport overlay: `HeaderMenuButton` only renders below the\n // `md` breakpoint, and toggling opens the Sidebar's overlay Dialog.\n const [sidebarOpen, setSidebarOpen] = useState(false);\n\n const resolvedLogo = brandLogo ?? (\n <Logo variant=\"monochrome\" size=\"md\" decorative />\n );\n\n return (\n <ThemeRoot\n ref={ref}\n theme={themeBase}\n accessible={themeAccessible}\n className=\"ds:contents\"\n >\n <TooltipProvider>\n <AppFrame\n mainAriaLabel={mainAriaLabel}\n header={\n <Header>\n <HeaderStart>\n <HeaderSkipLink href=\"#main-content\" />\n <HeaderMenuButton onMenuOpen={() => setSidebarOpen(true)} />\n <HeaderBrand\n logo={resolvedLogo}\n href={brandHref}\n aria-label={t('patientShell.brand.homeAria')}\n />\n </HeaderStart>\n <HeaderCenter />\n <HeaderEnd>\n <SettingsMenu\n logoutHref={logoutHref}\n onToggleFullscreen={onToggleFullscreen}\n />\n </HeaderEnd>\n </Header>\n }\n sidebar={\n <Sidebar\n {...(sidebarState !== undefined\n ? { state: sidebarState }\n : { defaultState: 'expanded' as const })}\n open={sidebarOpen}\n onOpenChange={setSidebarOpen}\n aria-label={t('patientShell.sidebar.panelLabel')}\n data-testid=\"patient-shell-sidebar\"\n >\n <PatientSidebarNav menuItems={menuItems} />\n </Sidebar>\n }\n >\n {children}\n </AppFrame>\n </TooltipProvider>\n </ThemeRoot>\n );\n },\n);\n\nPatientShell.displayName = 'PatientShell';\n"],"names":["__iconNode","Maximize2","createLucideIcon","formatBadgeCount","count","isSafeLogoutHref","href","url","SettingsMenu","logoutHref","onToggleFullscreen","t","useTranslation","jsxs","DropdownMenu","jsx","IconButton","SettingsIcon","LogOut","PatientSidebarNav","menuItems","SidebarBody","item","badge","SidebarItem","SidebarItemIcon","SidebarItemLabel","SidebarItemBadge","PatientShell","forwardRef","brandLogo","brandHref","mainAriaLabel","sidebarState","children","_userName","_userAvatarSrc","ref","resolvedTheme","useTheme","themeBase","themeAccessible","sidebarOpen","setSidebarOpen","useState","ThemeRoot","TooltipProvider","AppFrame","Header","HeaderStart","HeaderSkipLink","HeaderMenuButton","HeaderBrand","Logo","HeaderCenter","HeaderEnd","Sidebar"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,21 @@
1
+ import { c } from "./createLucideIcon-CrFbzy84.js";
2
+ /**
3
+ * @license lucide-react v1.8.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const e = [
9
+ [
10
+ "path",
11
+ {
12
+ d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
13
+ key: "1i5ecw"
14
+ }
15
+ ],
16
+ ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
17
+ ], o = c("settings", e);
18
+ export {
19
+ o as S
20
+ };
21
+ //# sourceMappingURL=settings-ca2Yi9R8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-ca2Yi9R8.js","sources":["../../node_modules/lucide-react/dist/esm/icons/settings.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n"],"names":["__iconNode","Settings","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,GACMC,IAAWC,EAAiB,YAAYF,CAAU;","x_google_ignoreList":[0]}
@@ -0,0 +1,50 @@
1
+ import { c as t } from "./createLucideIcon-CrFbzy84.js";
2
+ /**
3
+ * @license lucide-react v1.8.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const e = [
9
+ ["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
10
+ ["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
11
+ ["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
12
+ ], y = t("monitor", e);
13
+ /**
14
+ * @license lucide-react v1.8.0 - ISC
15
+ *
16
+ * This source code is licensed under the ISC license.
17
+ * See the LICENSE file in the root directory of this source tree.
18
+ */
19
+ const o = [
20
+ [
21
+ "path",
22
+ {
23
+ d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",
24
+ key: "kfwtm"
25
+ }
26
+ ]
27
+ ], a = t("moon", o);
28
+ /**
29
+ * @license lucide-react v1.8.0 - ISC
30
+ *
31
+ * This source code is licensed under the ISC license.
32
+ * See the LICENSE file in the root directory of this source tree.
33
+ */
34
+ const c = [
35
+ ["circle", { cx: "12", cy: "12", r: "4", key: "4exip2" }],
36
+ ["path", { d: "M12 2v2", key: "tus03m" }],
37
+ ["path", { d: "M12 20v2", key: "1lh1kg" }],
38
+ ["path", { d: "m4.93 4.93 1.41 1.41", key: "149t6j" }],
39
+ ["path", { d: "m17.66 17.66 1.41 1.41", key: "ptbguv" }],
40
+ ["path", { d: "M2 12h2", key: "1t8f8n" }],
41
+ ["path", { d: "M20 12h2", key: "1q8mjw" }],
42
+ ["path", { d: "m6.34 17.66-1.41 1.41", key: "1m8zz5" }],
43
+ ["path", { d: "m19.07 4.93-1.41 1.41", key: "1shlcs" }]
44
+ ], h = t("sun", c);
45
+ export {
46
+ a as M,
47
+ h as S,
48
+ y as a
49
+ };
50
+ //# sourceMappingURL=sun-Eweh5fvi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sun-Eweh5fvi.js","sources":["../../node_modules/lucide-react/dist/esm/icons/monitor.js","../../node_modules/lucide-react/dist/esm/icons/moon.js","../../node_modules/lucide-react/dist/esm/icons/sun.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"3\", rx: \"2\", key: \"48i651\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"21\", y2: \"21\", key: \"1svkeh\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"17\", y2: \"21\", key: \"vw1qmm\" }]\n];\nconst Monitor = createLucideIcon(\"monitor\", __iconNode);\n\nexport { __iconNode, Monitor as default };\n//# sourceMappingURL=monitor.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\",\n key: \"kfwtm\"\n }\n ]\n];\nconst Moon = createLucideIcon(\"moon\", __iconNode);\n\nexport { __iconNode, Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n];\nconst Sun = createLucideIcon(\"sun\", __iconNode);\n\nexport { __iconNode, Sun as default };\n//# sourceMappingURL=sun.js.map\n"],"names":["__iconNode","Monitor","createLucideIcon","Moon","Sun"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,SAAQ,CAAE;AAAA,EAC9E,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AAAA,EACjE,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AACpE,GACMC,IAAUC,EAAiB,WAAWF,CAAU;ACdtD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,GACMG,IAAOD,EAAiB,QAAQF,CAAU;AClBhD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,wBAAwB,KAAK,SAAQ,CAAE;AAAA,EACrD,CAAC,QAAQ,EAAE,GAAG,0BAA0B,KAAK,SAAQ,CAAE;AAAA,EACvD,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,yBAAyB,KAAK,SAAQ,CAAE;AAAA,EACtD,CAAC,QAAQ,EAAE,GAAG,yBAAyB,KAAK,SAAQ,CAAE;AACxD,GACMI,IAAMF,EAAiB,OAAOF,CAAU;","x_google_ignoreList":[0,1,2]}