@epicbagel/saas-kit 1.31.0 → 1.33.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 (219) hide show
  1. package/THIRD_PARTY_NOTICES.md +6 -5
  2. package/dist/chunk-2DCJ2SFU.js +20 -0
  3. package/dist/chunk-2FVFPGP5.js +489 -0
  4. package/dist/{chunk-HTPPNW74.js → chunk-AWCXVYPL.js} +1 -1
  5. package/dist/chunk-B54ZEKBG.cjs +63 -0
  6. package/dist/chunk-CXAFTEEP.cjs +20 -0
  7. package/dist/{chunk-MOJHETNO.cjs → chunk-F3D5HA2F.cjs} +10 -10
  8. package/dist/chunk-G3SF4RRA.cjs +489 -0
  9. package/dist/chunk-HTTRUJQU.cjs +60 -0
  10. package/dist/{chunk-JS6BLIWL.js → chunk-IZF4WCK6.js} +11 -11
  11. package/dist/{chunk-PH2TV7XI.cjs → chunk-KOR2QR7I.cjs} +5 -5
  12. package/dist/{chunk-BGCNGYPL.cjs → chunk-PTMZTP3V.cjs} +2 -2
  13. package/dist/{chunk-6O3DUMF7.js → chunk-REGA2L5S.js} +1 -1
  14. package/dist/{chunk-PNI354BY.cjs → chunk-SL6ECEN6.cjs} +2 -2
  15. package/dist/{chunk-ZGTPNSR7.js → chunk-TS4MC3B3.js} +4 -4
  16. package/dist/chunk-TUQVHPSI.js +60 -0
  17. package/dist/chunk-VWOWPNKT.js +73 -0
  18. package/dist/chunk-XH2I3YJ6.js +63 -0
  19. package/dist/chunk-Y6X6XDHE.cjs +73 -0
  20. package/dist/primitives/accent-theme.cjs +66 -0
  21. package/dist/primitives/accent-theme.d.cts +32 -0
  22. package/dist/primitives/accent-theme.d.ts +32 -0
  23. package/dist/primitives/accent-theme.js +66 -0
  24. package/dist/primitives/activity-feed.cjs +2 -2
  25. package/dist/primitives/activity-feed.js +2 -2
  26. package/dist/primitives/agent-audio-visualizer-bar.cjs +3 -3
  27. package/dist/primitives/agent-audio-visualizer-bar.js +2 -2
  28. package/dist/primitives/alert.d.cts +1 -1
  29. package/dist/primitives/alert.d.ts +1 -1
  30. package/dist/primitives/app-layout.cjs +114 -0
  31. package/dist/primitives/app-layout.d.cts +47 -0
  32. package/dist/primitives/app-layout.d.ts +47 -0
  33. package/dist/primitives/app-layout.js +114 -0
  34. package/dist/primitives/app-sidebar.cjs +52 -0
  35. package/dist/primitives/app-sidebar.d.cts +105 -0
  36. package/dist/primitives/app-sidebar.d.ts +105 -0
  37. package/dist/primitives/app-sidebar.js +52 -0
  38. package/dist/primitives/archive-confirmation-dialog.cjs +2 -2
  39. package/dist/primitives/archive-confirmation-dialog.js +3 -3
  40. package/dist/primitives/back-bar.cjs +37 -0
  41. package/dist/primitives/back-bar.d.cts +31 -0
  42. package/dist/primitives/back-bar.d.ts +31 -0
  43. package/dist/primitives/back-bar.js +37 -0
  44. package/dist/primitives/badge.d.cts +1 -1
  45. package/dist/primitives/badge.d.ts +1 -1
  46. package/dist/primitives/batch-action-bar.cjs +134 -0
  47. package/dist/primitives/batch-action-bar.d.cts +27 -0
  48. package/dist/primitives/batch-action-bar.d.ts +27 -0
  49. package/dist/primitives/batch-action-bar.js +134 -0
  50. package/dist/primitives/board-view-internals.cjs +3 -3
  51. package/dist/primitives/board-view-internals.js +2 -2
  52. package/dist/primitives/board-view.cjs +8 -8
  53. package/dist/primitives/board-view.js +7 -7
  54. package/dist/primitives/brand-mark.cjs +26 -0
  55. package/dist/primitives/brand-mark.d.cts +10 -0
  56. package/dist/primitives/brand-mark.d.ts +10 -0
  57. package/dist/primitives/brand-mark.js +26 -0
  58. package/dist/primitives/bubble.d.cts +1 -1
  59. package/dist/primitives/bubble.d.ts +1 -1
  60. package/dist/primitives/button.d.cts +2 -2
  61. package/dist/primitives/button.d.ts +2 -2
  62. package/dist/primitives/chat.cjs +27 -27
  63. package/dist/primitives/chat.js +21 -21
  64. package/dist/primitives/code-block.cjs +4 -4
  65. package/dist/primitives/code-block.js +3 -3
  66. package/dist/primitives/command.cjs +129 -0
  67. package/dist/primitives/command.d.cts +60 -0
  68. package/dist/primitives/command.d.ts +60 -0
  69. package/dist/primitives/command.js +129 -0
  70. package/dist/primitives/compact-list.cjs +24 -0
  71. package/dist/primitives/compact-list.d.cts +18 -0
  72. package/dist/primitives/compact-list.d.ts +18 -0
  73. package/dist/primitives/compact-list.js +24 -0
  74. package/dist/primitives/connection.cjs +6 -6
  75. package/dist/primitives/connection.js +8 -8
  76. package/dist/primitives/context-bar.cjs +57 -0
  77. package/dist/primitives/context-bar.d.cts +50 -0
  78. package/dist/primitives/context-bar.d.ts +50 -0
  79. package/dist/primitives/context-bar.js +57 -0
  80. package/dist/primitives/copy-button.cjs +3 -3
  81. package/dist/primitives/copy-button.js +2 -2
  82. package/dist/primitives/cycling-prompt.cjs +102 -0
  83. package/dist/primitives/cycling-prompt.d.cts +24 -0
  84. package/dist/primitives/cycling-prompt.d.ts +24 -0
  85. package/dist/primitives/cycling-prompt.js +102 -0
  86. package/dist/primitives/dialog.d.cts +9 -9
  87. package/dist/primitives/dialog.d.ts +9 -9
  88. package/dist/primitives/dotted-list.cjs +41 -0
  89. package/dist/primitives/dotted-list.d.cts +28 -0
  90. package/dist/primitives/dotted-list.d.ts +28 -0
  91. package/dist/primitives/dotted-list.js +41 -0
  92. package/dist/primitives/drawer.d.cts +6 -6
  93. package/dist/primitives/drawer.d.ts +6 -6
  94. package/dist/primitives/field.cjs +3 -3
  95. package/dist/primitives/field.js +2 -2
  96. package/dist/primitives/file-dropzone.cjs +3 -3
  97. package/dist/primitives/file-dropzone.js +2 -2
  98. package/dist/primitives/file-preview.cjs +4 -4
  99. package/dist/primitives/file-preview.js +3 -3
  100. package/dist/primitives/filter-bar.cjs +4 -4
  101. package/dist/primitives/filter-bar.js +3 -3
  102. package/dist/primitives/fixed-action-bar.cjs +46 -0
  103. package/dist/primitives/fixed-action-bar.d.cts +15 -0
  104. package/dist/primitives/fixed-action-bar.d.ts +15 -0
  105. package/dist/primitives/fixed-action-bar.js +46 -0
  106. package/dist/primitives/floating-action-button.cjs +65 -0
  107. package/dist/primitives/floating-action-button.d.cts +52 -0
  108. package/dist/primitives/floating-action-button.d.ts +52 -0
  109. package/dist/primitives/floating-action-button.js +65 -0
  110. package/dist/primitives/form-section.cjs +38 -0
  111. package/dist/primitives/form-section.d.cts +43 -0
  112. package/dist/primitives/form-section.d.ts +43 -0
  113. package/dist/primitives/form-section.js +38 -0
  114. package/dist/primitives/key-value-grid.cjs +52 -0
  115. package/dist/primitives/key-value-grid.d.cts +20 -0
  116. package/dist/primitives/key-value-grid.d.ts +20 -0
  117. package/dist/primitives/key-value-grid.js +52 -0
  118. package/dist/primitives/marketing-footer.cjs +34 -0
  119. package/dist/primitives/marketing-footer.d.cts +29 -0
  120. package/dist/primitives/marketing-footer.d.ts +29 -0
  121. package/dist/primitives/marketing-footer.js +34 -0
  122. package/dist/primitives/marketing-header.cjs +41 -0
  123. package/dist/primitives/marketing-header.d.cts +31 -0
  124. package/dist/primitives/marketing-header.d.ts +31 -0
  125. package/dist/primitives/marketing-header.js +41 -0
  126. package/dist/primitives/marketing-section.cjs +8 -0
  127. package/dist/primitives/marketing-section.d.cts +35 -0
  128. package/dist/primitives/marketing-section.d.ts +35 -0
  129. package/dist/primitives/marketing-section.js +8 -0
  130. package/dist/primitives/marketing-shell.cjs +28 -0
  131. package/dist/primitives/marketing-shell.d.cts +14 -0
  132. package/dist/primitives/marketing-shell.d.ts +14 -0
  133. package/dist/primitives/marketing-shell.js +28 -0
  134. package/dist/primitives/notes.cjs +4 -4
  135. package/dist/primitives/notes.js +4 -4
  136. package/dist/primitives/page-header.cjs +3 -67
  137. package/dist/primitives/page-header.js +3 -67
  138. package/dist/primitives/page-tabs.cjs +4 -57
  139. package/dist/primitives/page-tabs.js +4 -57
  140. package/dist/primitives/pager.cjs +85 -0
  141. package/dist/primitives/pager.d.cts +39 -0
  142. package/dist/primitives/pager.d.ts +39 -0
  143. package/dist/primitives/pager.js +85 -0
  144. package/dist/primitives/pagination.cjs +119 -0
  145. package/dist/primitives/pagination.d.cts +41 -0
  146. package/dist/primitives/pagination.d.ts +41 -0
  147. package/dist/primitives/pagination.js +119 -0
  148. package/dist/primitives/poster.cjs +406 -0
  149. package/dist/primitives/poster.d.cts +406 -0
  150. package/dist/primitives/poster.d.ts +406 -0
  151. package/dist/primitives/poster.js +406 -0
  152. package/dist/primitives/resource-list.cjs +8 -8
  153. package/dist/primitives/resource-list.js +7 -7
  154. package/dist/primitives/responsive-embed.cjs +29 -0
  155. package/dist/primitives/responsive-embed.d.cts +14 -0
  156. package/dist/primitives/responsive-embed.d.ts +14 -0
  157. package/dist/primitives/responsive-embed.js +29 -0
  158. package/dist/primitives/save-bar.cjs +91 -0
  159. package/dist/primitives/save-bar.d.cts +55 -0
  160. package/dist/primitives/save-bar.d.ts +55 -0
  161. package/dist/primitives/save-bar.js +91 -0
  162. package/dist/primitives/settings-list.cjs +10 -0
  163. package/dist/primitives/settings-list.d.cts +31 -0
  164. package/dist/primitives/settings-list.d.ts +31 -0
  165. package/dist/primitives/settings-list.js +10 -0
  166. package/dist/primitives/settings-section.cjs +34 -0
  167. package/dist/primitives/settings-section.d.cts +44 -0
  168. package/dist/primitives/settings-section.d.ts +44 -0
  169. package/dist/primitives/settings-section.js +34 -0
  170. package/dist/primitives/sheet.d.cts +9 -9
  171. package/dist/primitives/sheet.d.ts +9 -9
  172. package/dist/primitives/short-video.cjs +110 -0
  173. package/dist/primitives/short-video.d.cts +30 -0
  174. package/dist/primitives/short-video.d.ts +30 -0
  175. package/dist/primitives/short-video.js +110 -0
  176. package/dist/primitives/stats-card.cjs +46 -0
  177. package/dist/primitives/stats-card.d.cts +19 -0
  178. package/dist/primitives/stats-card.d.ts +19 -0
  179. package/dist/primitives/stats-card.js +46 -0
  180. package/dist/primitives/stats-strip.cjs +38 -0
  181. package/dist/primitives/stats-strip.d.cts +24 -0
  182. package/dist/primitives/stats-strip.d.ts +24 -0
  183. package/dist/primitives/stats-strip.js +38 -0
  184. package/dist/primitives/step-list.cjs +32 -0
  185. package/dist/primitives/step-list.d.cts +19 -0
  186. package/dist/primitives/step-list.d.ts +19 -0
  187. package/dist/primitives/step-list.js +32 -0
  188. package/dist/primitives/steps.cjs +77 -0
  189. package/dist/primitives/steps.d.cts +35 -0
  190. package/dist/primitives/steps.d.ts +35 -0
  191. package/dist/primitives/steps.js +77 -0
  192. package/dist/primitives/tabbed-page-header.cjs +53 -0
  193. package/dist/primitives/tabbed-page-header.d.cts +26 -0
  194. package/dist/primitives/tabbed-page-header.d.ts +26 -0
  195. package/dist/primitives/tabbed-page-header.js +53 -0
  196. package/dist/primitives/theme-selector.cjs +17 -17
  197. package/dist/primitives/theme-selector.js +5 -5
  198. package/dist/primitives/voice-dictation-button.cjs +5 -5
  199. package/dist/primitives/voice-dictation-button.js +4 -4
  200. package/dist/primitives/voice-session-controls.cjs +4 -4
  201. package/dist/primitives/voice-session-controls.js +3 -3
  202. package/dist/primitives/workflow-assistant.cjs +5 -5
  203. package/dist/primitives/workflow-assistant.js +3 -3
  204. package/package.json +322 -1
  205. package/src/styles/components/poster.css +1449 -0
  206. package/src/styles/components.css +1 -0
  207. package/src/styles/utilities.css +2 -2
  208. package/dist/{chunk-5OF6D3GH.js → chunk-4TJBXXUE.js} +3 -3
  209. package/dist/{chunk-DILYV4FI.js → chunk-7ZRFXJVN.js} +3 -3
  210. package/dist/{chunk-YYFVG5A6.cjs → chunk-D46FNEZ5.cjs} +2 -2
  211. package/dist/{chunk-NKWHDI4C.cjs → chunk-FB3VY2PL.cjs} +2 -2
  212. package/dist/{chunk-MW67PHAQ.cjs → chunk-GUVQAWUW.cjs} +9 -9
  213. package/dist/{chunk-WHDHUYS6.js → chunk-HBRVOGLA.js} +3 -3
  214. package/dist/{chunk-FARCLWLU.cjs → chunk-HHF5DEKM.cjs} +3 -3
  215. package/dist/{chunk-TWCJMFST.js → chunk-O42YC6ZQ.js} +3 -3
  216. package/dist/{chunk-ZJFYOXSM.cjs → chunk-SRVRNHCX.cjs} +2 -2
  217. package/dist/{chunk-UFFHGKI7.js → chunk-SW4T3O7M.js} +9 -9
  218. package/dist/{chunk-62UTAG2C.js → chunk-ULZB4A2I.js} +3 -3
  219. package/dist/{chunk-ZLEM2SAU.cjs → chunk-Z3JJSNR5.cjs} +2 -2
@@ -0,0 +1,406 @@
1
+ "use client";
2
+
3
+ // src/primitives/poster.tsx
4
+ import {
5
+ forwardRef,
6
+ useEffect,
7
+ useId,
8
+ useRef,
9
+ useState
10
+ } from "react";
11
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
+ var PosterShell = forwardRef(function PosterShell2({ colours, font, colorScheme, className, style, ...props }, ref) {
13
+ const variables = {
14
+ ...colours?.paper ? { "--poster-paper": colours.paper } : {},
15
+ ...colours?.ink ? { "--poster-ink": colours.ink } : {},
16
+ ...colours?.primary ? { "--poster-primary": colours.primary } : {},
17
+ ...colours?.onPrimary ? { "--poster-on-primary": colours.onPrimary } : {},
18
+ ...colours?.mute ? { "--poster-mute": colours.mute } : {},
19
+ ...colours?.wash ? { "--poster-wash": colours.wash } : {},
20
+ ...font ? { "--poster-font": font } : {},
21
+ ...colorScheme ? { colorScheme } : {}
22
+ };
23
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "poster-shell", className, style: { ...variables, ...style }, ...props });
24
+ });
25
+ var PosterMain = forwardRef(function PosterMain2(props, ref) {
26
+ return /* @__PURE__ */ jsx("main", { ref, "data-slot": "poster-main", ...props });
27
+ });
28
+ var PosterBanner = forwardRef(function PosterBanner2({ action, children, ...props }, ref) {
29
+ return /* @__PURE__ */ jsxs("a", { ref, "data-slot": "poster-banner", ...props, children: [
30
+ /* @__PURE__ */ jsx("span", { children }),
31
+ action ? /* @__PURE__ */ jsxs(Fragment, { children: [
32
+ " ",
33
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-banner-action", children: action })
34
+ ] }) : null
35
+ ] });
36
+ });
37
+ var PosterHeader = forwardRef(function PosterHeader2({ brand, nav, action, className, ...props }, ref) {
38
+ return /* @__PURE__ */ jsxs("header", { ref, "data-slot": "poster-header", className, ...props, children: [
39
+ brand,
40
+ nav,
41
+ action
42
+ ] });
43
+ });
44
+ function PosterNav({ label, menuLabel = "Menu", children }) {
45
+ const menu = useRef(null);
46
+ const panelId = useId();
47
+ useEffect(() => {
48
+ const details = menu.current;
49
+ if (!details) return;
50
+ const close = (focusSummary) => {
51
+ if (!details.open) return;
52
+ details.open = false;
53
+ if (focusSummary) details.querySelector("summary")?.focus();
54
+ };
55
+ const onKey = (event) => {
56
+ if (event.key === "Escape") close(details.contains(document.activeElement));
57
+ };
58
+ const onPointer = (event) => {
59
+ if (!details.contains(event.target)) close(false);
60
+ };
61
+ document.addEventListener("keydown", onKey);
62
+ document.addEventListener("pointerdown", onPointer);
63
+ return () => {
64
+ document.removeEventListener("keydown", onKey);
65
+ document.removeEventListener("pointerdown", onPointer);
66
+ };
67
+ }, []);
68
+ const onPick = (event) => {
69
+ if (event.target.closest("a") && menu.current) menu.current.open = false;
70
+ };
71
+ return /* @__PURE__ */ jsxs("nav", { "data-slot": "poster-nav", "aria-label": label, children: [
72
+ /* @__PURE__ */ jsx("ul", { "data-slot": "poster-nav-list", children }),
73
+ /* @__PURE__ */ jsxs("details", { ref: menu, "data-slot": "poster-nav-menu", children: [
74
+ /* @__PURE__ */ jsx("summary", { "data-slot": "poster-nav-toggle", "aria-controls": panelId, children: menuLabel }),
75
+ /* @__PURE__ */ jsx("ul", { id: panelId, "data-slot": "poster-nav-panel", onClick: onPick, children })
76
+ ] })
77
+ ] });
78
+ }
79
+ var PosterNavLink = forwardRef(function PosterNavLink2({ current = false, ...props }, ref) {
80
+ return /* @__PURE__ */ jsx("li", { "data-slot": "poster-nav-item", children: /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-nav-link", "aria-current": current ? "page" : void 0, ...props }) });
81
+ });
82
+ var PosterMark = forwardRef(function PosterMark2(props, ref) {
83
+ return /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-mark", ...props });
84
+ });
85
+ var PosterHeaderAction = forwardRef(function PosterHeaderAction2(props, ref) {
86
+ return /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-header-action", ...props });
87
+ });
88
+ var PosterHero = forwardRef(function PosterHero2({ title, description, eyebrow, variant = "home", actions, ...props }, ref) {
89
+ return /* @__PURE__ */ jsxs("section", { ref, "data-slot": "poster-hero", "data-variant": variant, ...props, children: [
90
+ eyebrow ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-eyebrow", children: eyebrow }) : null,
91
+ /* @__PURE__ */ jsx("h1", { "data-slot": "poster-hero-title", children: title }),
92
+ description ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-hero-description", children: description }) : null,
93
+ actions ? /* @__PURE__ */ jsx("div", { "data-slot": "poster-hero-actions", children: actions }) : null
94
+ ] });
95
+ });
96
+ var PosterAction = forwardRef(function PosterAction2({ variant = "solid", ...props }, ref) {
97
+ return /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-action", "data-variant": variant, ...props });
98
+ });
99
+ function PosterSwitch({ label, options, value, onValueChange, className }) {
100
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-switch", role: "group", "aria-label": label, className, children: options.map((option) => /* @__PURE__ */ jsxs(
101
+ "button",
102
+ {
103
+ type: "button",
104
+ "data-slot": "poster-switch-option",
105
+ "aria-pressed": option.value === value,
106
+ onClick: () => onValueChange(option.value),
107
+ children: [
108
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-switch-title", children: option.title }),
109
+ option.hint ? /* @__PURE__ */ jsx("span", { "data-slot": "poster-switch-hint", children: option.hint }) : null
110
+ ]
111
+ },
112
+ option.value
113
+ )) });
114
+ }
115
+ var PosterBand = forwardRef(function PosterBand2({ tone = "paper", padding = "default", eyebrow, kicker, title, titleSize = "head", titleWrap = "balance", lead, description, after, children, ...props }, ref) {
116
+ return /* @__PURE__ */ jsxs("section", { ref, "data-slot": "poster-band", "data-tone": tone, "data-padding": padding, ...props, children: [
117
+ eyebrow ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-eyebrow", children: eyebrow }) : null,
118
+ kicker ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-kicker", children: kicker }) : null,
119
+ title ? /* @__PURE__ */ jsx("h2", { "data-slot": "poster-title", "data-size": titleSize, "data-wrap": titleWrap, children: title }) : null,
120
+ lead ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-lead", children: lead }) : null,
121
+ description ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-description", children: description }) : null,
122
+ after ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-after", children: after }) : null,
123
+ children
124
+ ] });
125
+ });
126
+ var PosterSubhead = forwardRef(function PosterSubhead2(props, ref) {
127
+ return /* @__PURE__ */ jsx("h3", { ref, "data-slot": "poster-subhead", ...props });
128
+ });
129
+ var PosterStatement = forwardRef(function PosterStatement2(props, ref) {
130
+ return /* @__PURE__ */ jsx("p", { ref, "data-slot": "poster-statement", ...props });
131
+ });
132
+ var PosterCalculator = forwardRef(function PosterCalculator2(props, ref) {
133
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "poster-calculator", ...props });
134
+ });
135
+ var PosterRanges = forwardRef(function PosterRanges2(props, ref) {
136
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "poster-ranges", ...props });
137
+ });
138
+ function PosterRange({ label, value, min, max, step, onValueChange, valueText, id }) {
139
+ const generated = useId();
140
+ const inputId = id ?? generated;
141
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "poster-range", children: [
142
+ /* @__PURE__ */ jsx("label", { "data-slot": "poster-range-label", htmlFor: inputId, children: label }),
143
+ /* @__PURE__ */ jsx("output", { "data-slot": "poster-range-value", htmlFor: inputId, children: valueText }),
144
+ /* @__PURE__ */ jsx(
145
+ "input",
146
+ {
147
+ "data-slot": "poster-range-input",
148
+ type: "range",
149
+ id: inputId,
150
+ min,
151
+ max,
152
+ step,
153
+ value,
154
+ "aria-valuetext": valueText,
155
+ onChange: (event) => onValueChange(Number(event.target.value))
156
+ }
157
+ )
158
+ ] });
159
+ }
160
+ var PosterFigures = forwardRef(function PosterFigures2({ items, ...props }, ref) {
161
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "poster-figures", "data-columns": items.length === 1 ? 1 : 2, ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-figure", children: [
162
+ /* @__PURE__ */ jsx("p", { "data-slot": "poster-figure-label", children: item.label }),
163
+ /* @__PURE__ */ jsx("p", { "data-slot": "poster-figure-value", children: item.value })
164
+ ] }, index)) });
165
+ });
166
+ var PosterSmallPrint = forwardRef(function PosterSmallPrint2(props, ref) {
167
+ return /* @__PURE__ */ jsx("p", { ref, "data-slot": "poster-small-print", ...props });
168
+ });
169
+ var PosterColumns = forwardRef(function PosterColumns2({ variant = "labelled", items, ...props }, ref) {
170
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "poster-columns", "data-variant": variant, ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-column", children: [
171
+ variant === "titled" ? /* @__PURE__ */ jsx("h3", { "data-slot": "poster-column-heading", children: item.heading }) : /* @__PURE__ */ jsx("p", { "data-slot": "poster-column-heading", children: item.heading }),
172
+ /* @__PURE__ */ jsx("p", { "data-slot": "poster-column-text", children: item.text }),
173
+ item.link ? /* @__PURE__ */ jsx("a", { "data-slot": "poster-column-link", href: item.link.href, children: item.link.label }) : null
174
+ ] }, index)) });
175
+ });
176
+ var PosterTicks = forwardRef(function PosterTicks2({ items, spacing = "default", ...props }, ref) {
177
+ return /* @__PURE__ */ jsx("ul", { ref, "data-slot": "poster-ticks", "data-spacing": spacing, ...props, children: items.map((item, index) => /* @__PURE__ */ jsx("li", { "data-slot": "poster-tick", children: item }, index)) });
178
+ });
179
+ var PosterDisclosure = forwardRef(function PosterDisclosure2({ summary, children, defaultOpen, ...props }, ref) {
180
+ return /* @__PURE__ */ jsxs("details", { ref, "data-slot": "poster-disclosure", open: defaultOpen, ...props, children: [
181
+ /* @__PURE__ */ jsx("summary", { "data-slot": "poster-disclosure-summary", children: summary }),
182
+ /* @__PURE__ */ jsx("div", { "data-slot": "poster-disclosure-body", children })
183
+ ] });
184
+ });
185
+ var PosterFacts = forwardRef(function PosterFacts2({ items, ...props }, ref) {
186
+ return /* @__PURE__ */ jsx("dl", { ref, "data-slot": "poster-facts", ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-fact", children: [
187
+ /* @__PURE__ */ jsx("dt", { "data-slot": "poster-fact-term", children: item.term }),
188
+ /* @__PURE__ */ jsx("dd", { "data-slot": "poster-fact-detail", children: item.detail })
189
+ ] }, index)) });
190
+ });
191
+ var PosterNote = forwardRef(function PosterNote2(props, ref) {
192
+ return /* @__PURE__ */ jsx("p", { ref, "data-slot": "poster-note", ...props });
193
+ });
194
+ var PosterCallList = forwardRef(function PosterCallList2({ label, items, ...props }, ref) {
195
+ return /* @__PURE__ */ jsx("ul", { ref, "data-slot": "poster-calls", "aria-label": label, ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("li", { "data-slot": "poster-call", children: [
196
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-call-name", children: item.name }),
197
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-call-action", children: item.action })
198
+ ] }, index)) });
199
+ });
200
+ var PosterFlow = forwardRef(function PosterFlow2({ items, ...props }, ref) {
201
+ return /* @__PURE__ */ jsx("ol", { ref, "data-slot": "poster-flow", ...props, children: items.map((item, index) => /* @__PURE__ */ jsx("li", { "data-slot": "poster-flow-step", children: item }, index)) });
202
+ });
203
+ var PosterSteps = forwardRef(function PosterSteps2({ items, layout = "three", ...props }, ref) {
204
+ return /* @__PURE__ */ jsx("ol", { ref, "data-slot": "poster-steps", "data-layout": layout, ...props, children: items.map((item, index) => /* @__PURE__ */ jsx("li", { "data-slot": "poster-step", children: item }, index)) });
205
+ });
206
+ var PosterCost = forwardRef(function PosterCost2({ label, statement, action, ...props }, ref) {
207
+ return /* @__PURE__ */ jsxs("div", { ref, "data-slot": "poster-cost", ...props, children: [
208
+ /* @__PURE__ */ jsxs("div", { children: [
209
+ /* @__PURE__ */ jsx("p", { "data-slot": "poster-cost-label", children: label }),
210
+ /* @__PURE__ */ jsx("p", { "data-slot": "poster-cost-statement", children: statement })
211
+ ] }),
212
+ action ? /* @__PURE__ */ jsx("div", { "data-slot": "poster-cost-action", children: action }) : null
213
+ ] });
214
+ });
215
+ function PosterCopyText({ text, copyLabel = "Copy", copiedLabel = "Copied", selectedLabel = "Selected", placement = "inline" }) {
216
+ const textRef = useRef(null);
217
+ const [label, setLabel] = useState(copyLabel);
218
+ const select = () => {
219
+ const node = textRef.current;
220
+ const selection = typeof window === "undefined" ? null : window.getSelection();
221
+ if (!node || !selection) return;
222
+ const range = document.createRange();
223
+ range.selectNodeContents(node);
224
+ selection.removeAllRanges();
225
+ selection.addRange(range);
226
+ setLabel(selectedLabel);
227
+ };
228
+ const copy = () => {
229
+ const clipboard = typeof navigator === "undefined" ? void 0 : navigator.clipboard;
230
+ if (!clipboard?.writeText) return select();
231
+ clipboard.writeText(text).then(() => setLabel(copiedLabel), select);
232
+ };
233
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "poster-copy", "data-placement": placement, children: [
234
+ /* @__PURE__ */ jsx("span", { ref: textRef, "data-slot": "poster-copy-text", children: text }),
235
+ /* @__PURE__ */ jsx("button", { type: "button", "data-slot": "poster-copy-button", onClick: copy, children: label })
236
+ ] });
237
+ }
238
+ var PosterPeople = forwardRef(function PosterPeople2({ items, ...props }, ref) {
239
+ return /* @__PURE__ */ jsx("ul", { ref, "data-slot": "poster-people", ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("li", { "data-slot": "poster-person", children: [
240
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-person-name", children: item.name }),
241
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-person-bio", children: item.bio })
242
+ ] }, index)) });
243
+ });
244
+ var PosterFootnote = forwardRef(function PosterFootnote2({ start, end, ...props }, ref) {
245
+ return /* @__PURE__ */ jsxs("div", { ref, "data-slot": "poster-footnote", ...props, children: [
246
+ /* @__PURE__ */ jsx("span", { children: start }),
247
+ end ? /* @__PURE__ */ jsx("span", { children: end }) : null
248
+ ] });
249
+ });
250
+ var PosterMoreLink = forwardRef(function PosterMoreLink2(props, ref) {
251
+ return /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-more-link", ...props });
252
+ });
253
+ var PosterNextLink = forwardRef(function PosterNextLink2({ label, children, ...props }, ref) {
254
+ return /* @__PURE__ */ jsxs("a", { ref, "data-slot": "poster-next-link", ...props, children: [
255
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-next-label", children: label }),
256
+ children
257
+ ] });
258
+ });
259
+ var PosterTextLink = forwardRef(function PosterTextLink2(props, ref) {
260
+ return /* @__PURE__ */ jsx("a", { ref, "data-slot": "poster-text-link", ...props });
261
+ });
262
+ function PosterBreak() {
263
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
264
+ " ",
265
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-break" })
266
+ ] });
267
+ }
268
+ function PosterQuote({ children, by, size = "large", as = "blockquote" }) {
269
+ const Quote = as;
270
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
271
+ /* @__PURE__ */ jsx(Quote, { "data-slot": "poster-quote", "data-size": size, children }),
272
+ by ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-quote-by", children: by }) : null
273
+ ] });
274
+ }
275
+ var PosterStats = forwardRef(function PosterStats2({ items, ...props }, ref) {
276
+ return /* @__PURE__ */ jsx("dl", { ref, "data-slot": "poster-stats", "data-columns": items.length <= 2 ? 2 : 4, ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-stat", children: [
277
+ /* @__PURE__ */ jsx("dt", { "data-slot": "poster-stat-value", children: item.value }),
278
+ /* @__PURE__ */ jsx("dd", { "data-slot": "poster-stat-label", children: item.label })
279
+ ] }, index)) });
280
+ });
281
+ var PosterClaims = forwardRef(function PosterClaims2({ items, ...props }, ref) {
282
+ return /* @__PURE__ */ jsx("ul", { ref, "data-slot": "poster-claims", ...props, children: items.map((item, index) => /* @__PURE__ */ jsx("li", { "data-slot": "poster-claim", children: item }, index)) });
283
+ });
284
+ var PosterScreen = forwardRef(function PosterScreen2({ title, context, children, ...props }, ref) {
285
+ return /* @__PURE__ */ jsxs("div", { ref, "data-slot": "poster-screen", ...props, children: [
286
+ /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-bar", children: [
287
+ /* @__PURE__ */ jsx("b", { children: title }),
288
+ context ? /* @__PURE__ */ jsx("span", { children: context }) : null
289
+ ] }),
290
+ children
291
+ ] });
292
+ });
293
+ function PosterScreenTabs({ items }) {
294
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-tabs", children: items.map((item, index) => index === 0 ? /* @__PURE__ */ jsx("b", { children: item }, index) : /* @__PURE__ */ jsx("span", { children: item }, index)) });
295
+ }
296
+ function PosterScreenSplit({ ratio = "5:7", children }) {
297
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-split", "data-ratio": ratio, children });
298
+ }
299
+ function PosterScreenPane({ children }) {
300
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-pane", children });
301
+ }
302
+ function PosterScreenMessage({ from, children, variant = "sent" }) {
303
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-message", "data-variant": variant, children: [
304
+ /* @__PURE__ */ jsx("small", { children: from }),
305
+ children
306
+ ] });
307
+ }
308
+ function PosterScreenTrace({ items }) {
309
+ return /* @__PURE__ */ jsx("ul", { "data-slot": "poster-screen-trace", children: items.map((item, index) => /* @__PURE__ */ jsx("li", { children: item }, index)) });
310
+ }
311
+ function PosterScreenLead({ children }) {
312
+ return /* @__PURE__ */ jsx("p", { "data-slot": "poster-screen-lead", children });
313
+ }
314
+ function PosterGrade({ children, top = false }) {
315
+ return /* @__PURE__ */ jsx("span", { "data-slot": "poster-grade", "data-top": top || void 0, children });
316
+ }
317
+ function PosterScreenPerson({ initials, name, summary, test, grade, topGrade }) {
318
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-person", children: [
319
+ /* @__PURE__ */ jsx("span", { "data-slot": "poster-initials", "aria-hidden": "true", children: initials }),
320
+ /* @__PURE__ */ jsxs("div", { children: [
321
+ /* @__PURE__ */ jsx("b", { children: name }),
322
+ /* @__PURE__ */ jsx("span", { children: summary }),
323
+ test ? /* @__PURE__ */ jsx("em", { children: test }) : null
324
+ ] }),
325
+ /* @__PURE__ */ jsx(PosterGrade, { top: topGrade, children: grade })
326
+ ] });
327
+ }
328
+ function PosterScreenQueue({ items }) {
329
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-queue", children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-queue-item", "data-selected": item.selected || void 0, children: [
330
+ /* @__PURE__ */ jsx("b", { children: item.name }),
331
+ /* @__PURE__ */ jsx("span", { children: item.role }),
332
+ /* @__PURE__ */ jsx(PosterGrade, { top: item.topGrade, children: item.grade })
333
+ ] }, index)) });
334
+ }
335
+ function PosterScreenDetail({ title, line, evidence = [], actions = [] }) {
336
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-detail", children: [
337
+ /* @__PURE__ */ jsx("h3", { children: title }),
338
+ line ? /* @__PURE__ */ jsx("p", { "data-slot": "poster-screen-detail-line", children: line }) : null,
339
+ evidence.length ? /* @__PURE__ */ jsx("ul", { "data-slot": "poster-screen-evidence", children: evidence.map((item, index) => /* @__PURE__ */ jsx("li", { children: item }, index)) }) : null,
340
+ actions.length ? /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-decide", children: actions.map((action, index) => index === 0 ? /* @__PURE__ */ jsx("b", { children: action }, index) : /* @__PURE__ */ jsx("span", { children: action }, index)) }) : null
341
+ ] });
342
+ }
343
+ function PosterScreenRows({ items }) {
344
+ return /* @__PURE__ */ jsx("div", { "data-slot": "poster-screen-rows", children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { "data-slot": "poster-screen-row", children: [
345
+ /* @__PURE__ */ jsx("b", { children: item.name }),
346
+ /* @__PURE__ */ jsx("span", { children: item.line }),
347
+ /* @__PURE__ */ jsx(PosterGrade, { top: item.topGrade, children: item.grade }),
348
+ /* @__PURE__ */ jsx("em", { "data-needs-you": item.needsYou || void 0, children: item.action })
349
+ ] }, index)) });
350
+ }
351
+ var PosterMockNote = forwardRef(function PosterMockNote2(props, ref) {
352
+ return /* @__PURE__ */ jsx("p", { ref, "data-slot": "poster-mock-note", ...props });
353
+ });
354
+ export {
355
+ PosterAction,
356
+ PosterBand,
357
+ PosterBanner,
358
+ PosterBreak,
359
+ PosterCalculator,
360
+ PosterCallList,
361
+ PosterClaims,
362
+ PosterColumns,
363
+ PosterCopyText,
364
+ PosterCost,
365
+ PosterDisclosure,
366
+ PosterFacts,
367
+ PosterFigures,
368
+ PosterFlow,
369
+ PosterFootnote,
370
+ PosterGrade,
371
+ PosterHeader,
372
+ PosterHeaderAction,
373
+ PosterHero,
374
+ PosterMain,
375
+ PosterMark,
376
+ PosterMockNote,
377
+ PosterMoreLink,
378
+ PosterNav,
379
+ PosterNavLink,
380
+ PosterNextLink,
381
+ PosterNote,
382
+ PosterPeople,
383
+ PosterQuote,
384
+ PosterRange,
385
+ PosterRanges,
386
+ PosterScreen,
387
+ PosterScreenDetail,
388
+ PosterScreenLead,
389
+ PosterScreenMessage,
390
+ PosterScreenPane,
391
+ PosterScreenPerson,
392
+ PosterScreenQueue,
393
+ PosterScreenRows,
394
+ PosterScreenSplit,
395
+ PosterScreenTabs,
396
+ PosterScreenTrace,
397
+ PosterShell,
398
+ PosterSmallPrint,
399
+ PosterStatement,
400
+ PosterStats,
401
+ PosterSteps,
402
+ PosterSubhead,
403
+ PosterSwitch,
404
+ PosterTextLink,
405
+ PosterTicks
406
+ };
@@ -2,27 +2,27 @@
2
2
  "use client";
3
3
 
4
4
 
5
- var _chunkMOJHETNOcjs = require('../chunk-MOJHETNO.cjs');
5
+ var _chunkF3D5HA2Fcjs = require('../chunk-F3D5HA2F.cjs');
6
6
  require('../chunk-EUFV25KL.cjs');
7
7
  require('../chunk-7YCKII7G.cjs');
8
- require('../chunk-MW67PHAQ.cjs');
9
- require('../chunk-PPX2VPGI.cjs');
8
+ require('../chunk-GUVQAWUW.cjs');
10
9
  require('../chunk-WNXVGUBF.cjs');
11
10
  require('../chunk-IQZLUT2Y.cjs');
12
11
  require('../chunk-LELBCBDT.cjs');
13
- require('../chunk-U2NES7VR.cjs');
14
12
  require('../chunk-JH4GAGOQ.cjs');
15
- require('../chunk-YYFVG5A6.cjs');
13
+ require('../chunk-D46FNEZ5.cjs');
16
14
  require('../chunk-XLIAY56V.cjs');
17
15
  require('../chunk-V5SPFLKW.cjs');
18
16
  require('../chunk-VOTCYG3F.cjs');
17
+ require('../chunk-PPX2VPGI.cjs');
18
+ require('../chunk-R35FT53G.cjs');
19
+ require('../chunk-U2NES7VR.cjs');
19
20
  require('../chunk-PQUSJEXL.cjs');
21
+ require('../chunk-VBPPFC7X.cjs');
20
22
  require('../chunk-VGTINL5Q.cjs');
21
23
  require('../chunk-I6GUOEBO.cjs');
22
- require('../chunk-VBPPFC7X.cjs');
23
24
  require('../chunk-JDEXZGIY.cjs');
24
25
  require('../chunk-KWLSBTB2.cjs');
25
- require('../chunk-R35FT53G.cjs');
26
26
 
27
27
 
28
- exports.ResourceList = _chunkMOJHETNOcjs.ResourceList;
28
+ exports.ResourceList = _chunkF3D5HA2Fcjs.ResourceList;
@@ -2,27 +2,27 @@
2
2
  "use client";
3
3
  import {
4
4
  ResourceList
5
- } from "../chunk-JS6BLIWL.js";
5
+ } from "../chunk-IZF4WCK6.js";
6
6
  import "../chunk-43UMPZWD.js";
7
7
  import "../chunk-EEHIMPD7.js";
8
- import "../chunk-UFFHGKI7.js";
9
- import "../chunk-G76JANB4.js";
8
+ import "../chunk-SW4T3O7M.js";
10
9
  import "../chunk-YG7FBJRM.js";
11
10
  import "../chunk-E2TQMDO7.js";
12
11
  import "../chunk-H2O6NMLZ.js";
13
- import "../chunk-ZRLUUZHK.js";
14
12
  import "../chunk-OICAYRVH.js";
15
- import "../chunk-62UTAG2C.js";
13
+ import "../chunk-ULZB4A2I.js";
16
14
  import "../chunk-LELFPLTE.js";
17
15
  import "../chunk-J6NXDZR5.js";
18
16
  import "../chunk-H2CCBRVG.js";
17
+ import "../chunk-G76JANB4.js";
18
+ import "../chunk-PIU5SSUV.js";
19
+ import "../chunk-ZRLUUZHK.js";
19
20
  import "../chunk-QMA3WVB7.js";
21
+ import "../chunk-YEW65ASC.js";
20
22
  import "../chunk-H7TETFLB.js";
21
23
  import "../chunk-D4ZL2OEQ.js";
22
- import "../chunk-YEW65ASC.js";
23
24
  import "../chunk-W326GKML.js";
24
25
  import "../chunk-G6SRSWXB.js";
25
- import "../chunk-PIU5SSUV.js";
26
26
  export {
27
27
  ResourceList
28
28
  };
@@ -0,0 +1,29 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/responsive-embed.tsx
7
+ var _jsxruntime = require('react/jsx-runtime');
8
+ function ResponsiveEmbed({
9
+ src,
10
+ title,
11
+ allow,
12
+ allowFullScreen = true,
13
+ marginTop = "none",
14
+ className
15
+ }) {
16
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "aspect-video overflow-hidden rounded-lg border border-border bg-muted", marginTop === "md" && "mt-4", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17
+ "iframe",
18
+ {
19
+ src,
20
+ title,
21
+ allow,
22
+ allowFullScreen,
23
+ className: "h-full w-full border-0"
24
+ }
25
+ ) });
26
+ }
27
+
28
+
29
+ exports.ResponsiveEmbed = ResponsiveEmbed;
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ResponsiveEmbedProps {
4
+ src: string;
5
+ title: string;
6
+ allow?: string;
7
+ allowFullScreen?: boolean;
8
+ className?: string;
9
+ marginTop?: "none" | "md";
10
+ }
11
+ /** Generic 16:9 iframe container for trusted external media embeds. */
12
+ declare function ResponsiveEmbed({ src, title, allow, allowFullScreen, marginTop, className, }: ResponsiveEmbedProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { ResponsiveEmbed, type ResponsiveEmbedProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ResponsiveEmbedProps {
4
+ src: string;
5
+ title: string;
6
+ allow?: string;
7
+ allowFullScreen?: boolean;
8
+ className?: string;
9
+ marginTop?: "none" | "md";
10
+ }
11
+ /** Generic 16:9 iframe container for trusted external media embeds. */
12
+ declare function ResponsiveEmbed({ src, title, allow, allowFullScreen, marginTop, className, }: ResponsiveEmbedProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { ResponsiveEmbed, type ResponsiveEmbedProps };
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/responsive-embed.tsx
7
+ import { jsx } from "react/jsx-runtime";
8
+ function ResponsiveEmbed({
9
+ src,
10
+ title,
11
+ allow,
12
+ allowFullScreen = true,
13
+ marginTop = "none",
14
+ className
15
+ }) {
16
+ return /* @__PURE__ */ jsx("div", { className: cn("aspect-video overflow-hidden rounded-lg border border-border bg-muted", marginTop === "md" && "mt-4", className), children: /* @__PURE__ */ jsx(
17
+ "iframe",
18
+ {
19
+ src,
20
+ title,
21
+ allow,
22
+ allowFullScreen,
23
+ className: "h-full w-full border-0"
24
+ }
25
+ ) });
26
+ }
27
+ export {
28
+ ResponsiveEmbed
29
+ };
@@ -0,0 +1,91 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
2
+ "use client";
3
+
4
+
5
+ var _chunkJDEXZGIYcjs = require('../chunk-JDEXZGIY.cjs');
6
+
7
+
8
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
9
+
10
+ // src/primitives/save-bar.tsx
11
+ var _react = require('react');
12
+ var _reactdom = require('react-dom');
13
+ var _jsxruntime = require('react/jsx-runtime');
14
+ function SaveBar({
15
+ isDirty,
16
+ saving = false,
17
+ onSave,
18
+ onDiscard,
19
+ saveLabel = "Save changes",
20
+ savingLabel = "Saving\u2026",
21
+ discardLabel = "Discard",
22
+ status,
23
+ containerClassName,
24
+ className,
25
+ width = "wide"
26
+ }) {
27
+ const [mounted, setMounted] = _react.useState.call(void 0, false);
28
+ _react.useEffect.call(void 0, () => setMounted(true), []);
29
+ if (!mounted) return null;
30
+ const bar = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31
+ "div",
32
+ {
33
+ role: "region",
34
+ "aria-label": "Save changes",
35
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
36
+ "fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/95 backdrop-blur-sm",
37
+ // Lift above iOS home indicator / Safari URL bar
38
+ "pb-[env(safe-area-inset-bottom)]",
39
+ className
40
+ ),
41
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
42
+ "div",
43
+ {
44
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
45
+ "mx-auto px-4 md:px-6 py-3 flex items-center justify-between gap-3",
46
+ _nullishCoalesce(containerClassName, () => ( (width === "narrow" ? "max-w-3xl" : "max-w-5xl")))
47
+ ),
48
+ children: [
49
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
50
+ "span",
51
+ {
52
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
53
+ "text-sm truncate transition-colors",
54
+ isDirty ? "text-foreground" : "text-muted-foreground"
55
+ ),
56
+ children: _nullishCoalesce(status, () => ( (isDirty ? "Unsaved changes" : "All changes saved")))
57
+ }
58
+ ),
59
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 shrink-0", children: [
60
+ onDiscard && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
61
+ _chunkJDEXZGIYcjs.Button,
62
+ {
63
+ type: "button",
64
+ variant: "ghost",
65
+ size: "sm",
66
+ onClick: onDiscard,
67
+ disabled: saving || !isDirty,
68
+ children: discardLabel
69
+ }
70
+ ),
71
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
72
+ _chunkJDEXZGIYcjs.Button,
73
+ {
74
+ type: "button",
75
+ size: "sm",
76
+ onClick: onSave,
77
+ disabled: saving || !isDirty,
78
+ children: saving ? savingLabel : saveLabel
79
+ }
80
+ )
81
+ ] })
82
+ ]
83
+ }
84
+ )
85
+ }
86
+ );
87
+ return _reactdom.createPortal.call(void 0, bar, document.body);
88
+ }
89
+
90
+
91
+ exports.SaveBar = SaveBar;