@epicbagel/saas-kit 1.32.0 → 1.34.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 (228) hide show
  1. package/README.md +67 -0
  2. package/THIRD_PARTY_NOTICES.md +6 -5
  3. package/dist/chunk-2BNEE3U6.cjs +36 -0
  4. package/dist/chunk-2DCJ2SFU.js +20 -0
  5. package/dist/chunk-5GFMSK27.js +489 -0
  6. package/dist/chunk-5PHOKJCT.cjs +42 -0
  7. package/dist/chunk-B54ZEKBG.cjs +63 -0
  8. package/dist/chunk-BB7PO2BW.js +67 -0
  9. package/dist/chunk-BOMVE7QO.cjs +47 -0
  10. package/dist/{chunk-FPOJ2NGG.js → chunk-C3VZMTVB.js} +1 -1
  11. package/dist/chunk-CXAFTEEP.cjs +20 -0
  12. package/dist/chunk-EXHF3QUY.js +36 -0
  13. package/dist/chunk-FYNHRHVY.cjs +47 -0
  14. package/dist/chunk-HTTRUJQU.cjs +60 -0
  15. package/dist/chunk-I3GBXIFL.cjs +67 -0
  16. package/dist/chunk-O3G3TVPU.js +27 -0
  17. package/dist/{chunk-JS6BLIWL.js → chunk-ROUWBWEQ.js} +7 -7
  18. package/dist/chunk-TDCVZKMX.cjs +27 -0
  19. package/dist/{chunk-E2UVQXBO.cjs → chunk-TP74SBRH.cjs} +6 -6
  20. package/dist/chunk-TUQVHPSI.js +60 -0
  21. package/dist/chunk-UKYUWSF2.cjs +489 -0
  22. package/dist/{chunk-MOJHETNO.cjs → chunk-VUMLLKWY.cjs} +5 -5
  23. package/dist/chunk-VWOWPNKT.js +73 -0
  24. package/dist/chunk-W5L6LQI3.js +42 -0
  25. package/dist/chunk-WMTCL463.js +47 -0
  26. package/dist/chunk-WTVL2FK7.js +47 -0
  27. package/dist/chunk-XH2I3YJ6.js +63 -0
  28. package/dist/chunk-Y6X6XDHE.cjs +73 -0
  29. package/dist/primitives/accent-theme.cjs +7 -0
  30. package/dist/primitives/accent-theme.d.cts +32 -0
  31. package/dist/primitives/accent-theme.d.ts +32 -0
  32. package/dist/primitives/accent-theme.js +7 -0
  33. package/dist/primitives/activity-feed.cjs +3 -3
  34. package/dist/primitives/activity-feed.js +4 -4
  35. package/dist/primitives/anchor.cjs +3 -30
  36. package/dist/primitives/anchor.js +3 -30
  37. package/dist/primitives/app-layout.cjs +114 -0
  38. package/dist/primitives/app-layout.d.cts +47 -0
  39. package/dist/primitives/app-layout.d.ts +47 -0
  40. package/dist/primitives/app-layout.js +114 -0
  41. package/dist/primitives/app-sidebar.cjs +52 -0
  42. package/dist/primitives/app-sidebar.d.cts +105 -0
  43. package/dist/primitives/app-sidebar.d.ts +105 -0
  44. package/dist/primitives/app-sidebar.js +52 -0
  45. package/dist/primitives/back-bar.cjs +37 -0
  46. package/dist/primitives/back-bar.d.cts +31 -0
  47. package/dist/primitives/back-bar.d.ts +31 -0
  48. package/dist/primitives/back-bar.js +37 -0
  49. package/dist/primitives/batch-action-bar.cjs +134 -0
  50. package/dist/primitives/batch-action-bar.d.cts +27 -0
  51. package/dist/primitives/batch-action-bar.d.ts +27 -0
  52. package/dist/primitives/batch-action-bar.js +134 -0
  53. package/dist/primitives/board-view.cjs +7 -7
  54. package/dist/primitives/board-view.js +6 -6
  55. package/dist/primitives/brand-mark.cjs +8 -0
  56. package/dist/primitives/brand-mark.d.cts +10 -0
  57. package/dist/primitives/brand-mark.d.ts +10 -0
  58. package/dist/primitives/brand-mark.js +8 -0
  59. package/dist/primitives/branded-page.cjs +201 -0
  60. package/dist/primitives/branded-page.d.cts +118 -0
  61. package/dist/primitives/branded-page.d.ts +118 -0
  62. package/dist/primitives/branded-page.js +201 -0
  63. package/dist/primitives/call-card.cjs +2 -2
  64. package/dist/primitives/call-card.js +3 -3
  65. package/dist/primitives/chat.cjs +21 -21
  66. package/dist/primitives/chat.js +17 -17
  67. package/dist/primitives/command.cjs +129 -0
  68. package/dist/primitives/command.d.cts +60 -0
  69. package/dist/primitives/command.d.ts +60 -0
  70. package/dist/primitives/command.js +129 -0
  71. package/dist/primitives/compact-list.cjs +24 -0
  72. package/dist/primitives/compact-list.d.cts +18 -0
  73. package/dist/primitives/compact-list.d.ts +18 -0
  74. package/dist/primitives/compact-list.js +24 -0
  75. package/dist/primitives/connection.cjs +2 -2
  76. package/dist/primitives/connection.js +2 -2
  77. package/dist/primitives/context-bar.cjs +57 -0
  78. package/dist/primitives/context-bar.d.cts +50 -0
  79. package/dist/primitives/context-bar.d.ts +50 -0
  80. package/dist/primitives/context-bar.js +57 -0
  81. package/dist/primitives/cycling-prompt.cjs +102 -0
  82. package/dist/primitives/cycling-prompt.d.cts +24 -0
  83. package/dist/primitives/cycling-prompt.d.ts +24 -0
  84. package/dist/primitives/cycling-prompt.js +102 -0
  85. package/dist/primitives/dialog.d.cts +9 -9
  86. package/dist/primitives/dialog.d.ts +9 -9
  87. package/dist/primitives/document-preview.cjs +5 -5
  88. package/dist/primitives/document-preview.js +3 -3
  89. package/dist/primitives/dotted-list.cjs +41 -0
  90. package/dist/primitives/dotted-list.d.cts +28 -0
  91. package/dist/primitives/dotted-list.d.ts +28 -0
  92. package/dist/primitives/dotted-list.js +41 -0
  93. package/dist/primitives/drawer.d.cts +6 -6
  94. package/dist/primitives/drawer.d.ts +6 -6
  95. package/dist/primitives/field.cjs +3 -3
  96. package/dist/primitives/field.js +2 -2
  97. package/dist/primitives/file-dropzone.cjs +3 -3
  98. package/dist/primitives/file-dropzone.js +2 -2
  99. package/dist/primitives/file-preview-internals.cjs +4 -4
  100. package/dist/primitives/file-preview-internals.js +3 -3
  101. package/dist/primitives/file-preview.cjs +12 -12
  102. package/dist/primitives/file-preview.js +3 -3
  103. package/dist/primitives/filter-bar.cjs +4 -4
  104. package/dist/primitives/filter-bar.js +3 -3
  105. package/dist/primitives/fixed-action-bar.cjs +9 -0
  106. package/dist/primitives/fixed-action-bar.d.cts +15 -0
  107. package/dist/primitives/fixed-action-bar.d.ts +15 -0
  108. package/dist/primitives/fixed-action-bar.js +9 -0
  109. package/dist/primitives/floating-action-button.cjs +65 -0
  110. package/dist/primitives/floating-action-button.d.cts +52 -0
  111. package/dist/primitives/floating-action-button.d.ts +52 -0
  112. package/dist/primitives/floating-action-button.js +65 -0
  113. package/dist/primitives/form-section.cjs +38 -0
  114. package/dist/primitives/form-section.d.cts +43 -0
  115. package/dist/primitives/form-section.d.ts +43 -0
  116. package/dist/primitives/form-section.js +38 -0
  117. package/dist/primitives/key-value-grid.cjs +52 -0
  118. package/dist/primitives/key-value-grid.d.cts +20 -0
  119. package/dist/primitives/key-value-grid.d.ts +20 -0
  120. package/dist/primitives/key-value-grid.js +52 -0
  121. package/dist/primitives/marketing-footer.cjs +34 -0
  122. package/dist/primitives/marketing-footer.d.cts +29 -0
  123. package/dist/primitives/marketing-footer.d.ts +29 -0
  124. package/dist/primitives/marketing-footer.js +34 -0
  125. package/dist/primitives/marketing-header.cjs +8 -0
  126. package/dist/primitives/marketing-header.d.cts +31 -0
  127. package/dist/primitives/marketing-header.d.ts +31 -0
  128. package/dist/primitives/marketing-header.js +8 -0
  129. package/dist/primitives/marketing-section.cjs +8 -0
  130. package/dist/primitives/marketing-section.d.cts +35 -0
  131. package/dist/primitives/marketing-section.d.ts +35 -0
  132. package/dist/primitives/marketing-section.js +8 -0
  133. package/dist/primitives/marketing-shell.cjs +28 -0
  134. package/dist/primitives/marketing-shell.d.cts +14 -0
  135. package/dist/primitives/marketing-shell.d.ts +14 -0
  136. package/dist/primitives/marketing-shell.js +28 -0
  137. package/dist/primitives/notes.cjs +3 -3
  138. package/dist/primitives/notes.js +3 -3
  139. package/dist/primitives/page-header.cjs +3 -67
  140. package/dist/primitives/page-header.js +3 -67
  141. package/dist/primitives/page-shell.cjs +3 -41
  142. package/dist/primitives/page-shell.js +3 -41
  143. package/dist/primitives/page-tabs.cjs +4 -57
  144. package/dist/primitives/page-tabs.js +4 -57
  145. package/dist/primitives/pager.cjs +85 -0
  146. package/dist/primitives/pager.d.cts +39 -0
  147. package/dist/primitives/pager.d.ts +39 -0
  148. package/dist/primitives/pager.js +85 -0
  149. package/dist/primitives/pagination.cjs +119 -0
  150. package/dist/primitives/pagination.d.cts +41 -0
  151. package/dist/primitives/pagination.d.ts +41 -0
  152. package/dist/primitives/pagination.js +119 -0
  153. package/dist/primitives/poster.cjs +11 -1
  154. package/dist/primitives/poster.d.cts +12 -1
  155. package/dist/primitives/poster.d.ts +12 -1
  156. package/dist/primitives/poster.js +10 -0
  157. package/dist/primitives/resource-list.cjs +7 -7
  158. package/dist/primitives/resource-list.js +6 -6
  159. package/dist/primitives/responsive-dialog.cjs +3 -3
  160. package/dist/primitives/responsive-dialog.js +2 -2
  161. package/dist/primitives/responsive-embed.cjs +29 -0
  162. package/dist/primitives/responsive-embed.d.cts +14 -0
  163. package/dist/primitives/responsive-embed.d.ts +14 -0
  164. package/dist/primitives/responsive-embed.js +29 -0
  165. package/dist/primitives/save-bar.cjs +91 -0
  166. package/dist/primitives/save-bar.d.cts +55 -0
  167. package/dist/primitives/save-bar.d.ts +55 -0
  168. package/dist/primitives/save-bar.js +91 -0
  169. package/dist/primitives/section.cjs +2 -2
  170. package/dist/primitives/section.js +3 -3
  171. package/dist/primitives/settings-list.cjs +10 -0
  172. package/dist/primitives/settings-list.d.cts +31 -0
  173. package/dist/primitives/settings-list.d.ts +31 -0
  174. package/dist/primitives/settings-list.js +10 -0
  175. package/dist/primitives/settings-section.cjs +34 -0
  176. package/dist/primitives/settings-section.d.cts +44 -0
  177. package/dist/primitives/settings-section.d.ts +44 -0
  178. package/dist/primitives/settings-section.js +34 -0
  179. package/dist/primitives/sheet.d.cts +9 -9
  180. package/dist/primitives/sheet.d.ts +9 -9
  181. package/dist/primitives/short-video.cjs +110 -0
  182. package/dist/primitives/short-video.d.cts +30 -0
  183. package/dist/primitives/short-video.d.ts +30 -0
  184. package/dist/primitives/short-video.js +110 -0
  185. package/dist/primitives/stats-card.cjs +46 -0
  186. package/dist/primitives/stats-card.d.cts +19 -0
  187. package/dist/primitives/stats-card.d.ts +19 -0
  188. package/dist/primitives/stats-card.js +46 -0
  189. package/dist/primitives/stats-strip.cjs +38 -0
  190. package/dist/primitives/stats-strip.d.cts +24 -0
  191. package/dist/primitives/stats-strip.d.ts +24 -0
  192. package/dist/primitives/stats-strip.js +38 -0
  193. package/dist/primitives/step-list.cjs +32 -0
  194. package/dist/primitives/step-list.d.cts +19 -0
  195. package/dist/primitives/step-list.d.ts +19 -0
  196. package/dist/primitives/step-list.js +32 -0
  197. package/dist/primitives/steps.cjs +77 -0
  198. package/dist/primitives/steps.d.cts +35 -0
  199. package/dist/primitives/steps.d.ts +35 -0
  200. package/dist/primitives/steps.js +77 -0
  201. package/dist/primitives/switch-field.cjs +3 -3
  202. package/dist/primitives/switch-field.js +3 -3
  203. package/dist/primitives/tabbed-page-header.cjs +53 -0
  204. package/dist/primitives/tabbed-page-header.d.cts +26 -0
  205. package/dist/primitives/tabbed-page-header.d.ts +26 -0
  206. package/dist/primitives/tabbed-page-header.js +53 -0
  207. package/dist/primitives/theme-selector.cjs +15 -15
  208. package/dist/primitives/theme-selector.js +2 -2
  209. package/dist/primitives/voice-dictation-button.cjs +3 -3
  210. package/dist/primitives/voice-dictation-button.js +2 -2
  211. package/dist/primitives/voice-session-controls.cjs +3 -3
  212. package/dist/primitives/voice-session-controls.js +2 -2
  213. package/dist/primitives/workflow-assistant.cjs +4 -4
  214. package/dist/primitives/workflow-assistant.js +2 -2
  215. package/package.json +322 -1
  216. package/src/styles/components/poster.css +42 -1
  217. package/dist/{chunk-PH2TV7XI.cjs → chunk-2YW5VA2V.cjs} +2 -2
  218. package/dist/{chunk-UFFHGKI7.js → chunk-6LB37JWO.js} +8 -8
  219. package/dist/{chunk-AO56ET4F.cjs → chunk-BTHYGHOH.cjs} +2 -2
  220. package/dist/{chunk-WHDHUYS6.js → chunk-HBRVOGLA.js} +3 -3
  221. package/dist/{chunk-6O3DUMF7.js → chunk-HTUYUMAH.js} +3 -3
  222. package/dist/{chunk-PNI354BY.cjs → chunk-JMNDFISN.cjs} +2 -2
  223. package/dist/{chunk-CRZ4INEJ.js → chunk-JTI4244T.js} +10 -10
  224. package/dist/{chunk-ZGTPNSR7.js → chunk-NNEV5RHQ.js} +3 -3
  225. package/dist/{chunk-TWCJMFST.js → chunk-O42YC6ZQ.js} +3 -3
  226. package/dist/{chunk-MW67PHAQ.cjs → chunk-S2IMM37Q.cjs} +6 -6
  227. package/dist/{chunk-ZJFYOXSM.cjs → chunk-SRVRNHCX.cjs} +2 -2
  228. package/dist/{chunk-ZLEM2SAU.cjs → chunk-Z3JJSNR5.cjs} +2 -2
@@ -0,0 +1,63 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+
5
+
6
+ var _chunkDFB4ILN6cjs = require('./chunk-DFB4ILN6.cjs');
7
+
8
+
9
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
10
+
11
+ // src/primitives/page-tabs.tsx
12
+ var _jsxruntime = require('react/jsx-runtime');
13
+ function PageTabs({
14
+ value,
15
+ onValueChange,
16
+ items,
17
+ ariaLabel,
18
+ layout = "equal",
19
+ className
20
+ }) {
21
+ if (items.length === 0) return null;
22
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23
+ _chunkDFB4ILN6cjs.Tabs,
24
+ {
25
+ value,
26
+ onValueChange: (next) => onValueChange(next),
27
+ className,
28
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
29
+ _chunkDFB4ILN6cjs.TabsList,
30
+ {
31
+ "aria-label": ariaLabel,
32
+ scrollable: layout === "scroll",
33
+ width: "full",
34
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
35
+ "w-full",
36
+ layout === "equal" ? "grid h-auto p-1.5" : "justify-start"
37
+ ),
38
+ style: layout === "equal" ? { gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))` } : void 0,
39
+ children: items.map((item) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
40
+ _chunkDFB4ILN6cjs.TabsTrigger,
41
+ {
42
+ value: item.value,
43
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
44
+ layout === "equal" && "min-h-11 gap-2 text-sm sm:text-base",
45
+ layout === "scroll" && "shrink-0 gap-2"
46
+ ),
47
+ children: [
48
+ item.icon,
49
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate", children: item.label }),
50
+ item.badge && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "shrink-0", children: item.badge })
51
+ ]
52
+ },
53
+ item.value
54
+ ))
55
+ }
56
+ )
57
+ }
58
+ );
59
+ }
60
+
61
+
62
+
63
+ exports.PageTabs = PageTabs;
@@ -0,0 +1,67 @@
1
+ "use client";
2
+
3
+ // src/primitives/accent-theme.tsx
4
+ import { useId } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ var PALETTE_ID = /^[A-Za-z0-9_-]+$/;
7
+ function hexToHslTriplet(hex) {
8
+ const match = /^#([0-9a-f]{6})$/i.exec(hex.trim());
9
+ if (!match) return null;
10
+ const value = Number.parseInt(match[1], 16);
11
+ const red = (value >> 16 & 255) / 255;
12
+ const green = (value >> 8 & 255) / 255;
13
+ const blue = (value & 255) / 255;
14
+ const maximum = Math.max(red, green, blue);
15
+ const minimum = Math.min(red, green, blue);
16
+ const lightness = (maximum + minimum) / 2;
17
+ let hue = 0;
18
+ let saturation = 0;
19
+ if (maximum !== minimum) {
20
+ const delta = maximum - minimum;
21
+ saturation = lightness > 0.5 ? delta / (2 - maximum - minimum) : delta / (maximum + minimum);
22
+ if (maximum === red) hue = ((green - blue) / delta + (green < blue ? 6 : 0)) / 6;
23
+ else if (maximum === green) hue = ((blue - red) / delta + 2) / 6;
24
+ else hue = ((red - green) / delta + 4) / 6;
25
+ }
26
+ const round = (number) => Math.round(number * 10) / 10;
27
+ return `${round(hue * 360)} ${round(saturation * 100)}% ${round(lightness * 100)}%`;
28
+ }
29
+ function foregroundFor(hex) {
30
+ const match = /^#([0-9a-f]{6})$/i.exec(hex.trim());
31
+ if (!match) return "0 0% 100%";
32
+ const value = Number.parseInt(match[1], 16);
33
+ const channel = (number) => {
34
+ const normalized = number / 255;
35
+ return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
36
+ };
37
+ const luminance = 0.2126 * channel(value >> 16 & 255) + 0.7152 * channel(value >> 8 & 255) + 0.0722 * channel(value & 255);
38
+ return luminance > 0.45 ? "0 0% 9%" : "0 0% 100%";
39
+ }
40
+ function AccentTheme({ colours, palette, scope: target = "region", children }) {
41
+ const scope = `accent-${useId().replace(/[^a-zA-Z0-9]/g, "")}`;
42
+ const light = colours?.light ? hexToHslTriplet(colours.light) : null;
43
+ const dark = colours?.dark ? hexToHslTriplet(colours.dark) : null;
44
+ if (!light && !dark) return /* @__PURE__ */ jsx(Fragment, { children });
45
+ const root = palette === void 0 ? null : PALETTE_ID.test(palette) ? `:root[data-theme="${palette}"]` : ":root:not(*)";
46
+ const lightSelector = target === "document" ? root ?? ":root" : root ? `${root} .${scope}` : `.${scope}`;
47
+ const darkSelector = `${root ?? ":root"}.dark${target === "document" ? "" : ` .${scope}`}`;
48
+ const rules = [];
49
+ if (light && colours?.light) {
50
+ rules.push(
51
+ `${lightSelector}{--primary:${light};--primary-foreground:${foregroundFor(colours.light)};--ring:${light};--color-primary:hsl(var(--primary));--color-primary-foreground:hsl(var(--primary-foreground));--color-ring:hsl(var(--ring));}`
52
+ );
53
+ }
54
+ if (dark && colours?.dark) {
55
+ rules.push(
56
+ `${darkSelector}{--primary:${dark};--primary-foreground:${foregroundFor(colours.dark)};--ring:${dark};--color-primary:hsl(var(--primary));--color-primary-foreground:hsl(var(--primary-foreground));--color-ring:hsl(var(--ring));}`
57
+ );
58
+ }
59
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: rules.join("") } }),
61
+ target === "document" ? children : /* @__PURE__ */ jsx("div", { className: scope, children })
62
+ ] });
63
+ }
64
+
65
+ export {
66
+ AccentTheme
67
+ };
@@ -0,0 +1,47 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunk373W6VADcjs = require('./chunk-373W6VAD.cjs');
5
+
6
+
7
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
8
+
9
+ // src/primitives/fixed-action-bar.tsx
10
+ var _jsxruntime = require('react/jsx-runtime');
11
+ var widthStyles = {
12
+ compact: "max-w-2xl",
13
+ narrow: "max-w-3xl",
14
+ wide: "max-w-5xl",
15
+ full: "max-w-none"
16
+ };
17
+ function FixedActionBar({
18
+ title,
19
+ description,
20
+ children,
21
+ width = "narrow",
22
+ actionsWidth = "auto",
23
+ className
24
+ }) {
25
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26
+ "aside",
27
+ {
28
+ "aria-label": "Page action",
29
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
30
+ "fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/95 backdrop-blur-sm",
31
+ "pb-[env(safe-area-inset-bottom)] supports-backdrop-filter:bg-background/80",
32
+ className
33
+ ),
34
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "mx-auto flex items-center gap-4 px-4 py-3 md:px-6", title ? "justify-between" : "justify-end", widthStyles[width]), children: [
35
+ title && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0", children: [
36
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { className: "truncate font-medium", children: title }),
37
+ description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { variant: "muted", className: "text-sm", children: description })
38
+ ] }),
39
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "shrink-0", actionsWidth === "full" && "w-full"), children })
40
+ ] })
41
+ }
42
+ );
43
+ }
44
+
45
+
46
+
47
+ exports.FixedActionBar = FixedActionBar;
@@ -6,7 +6,7 @@ import {
6
6
  ResponsiveDialogDescription,
7
7
  ResponsiveDialogHeader,
8
8
  ResponsiveDialogTitle
9
- } from "./chunk-CRZ4INEJ.js";
9
+ } from "./chunk-JTI4244T.js";
10
10
  import {
11
11
  Icon
12
12
  } from "./chunk-KN4RPX35.js";
@@ -0,0 +1,20 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+ // src/primitives/settings-list.tsx
4
+ var _react = require('react');
5
+ var _jsxruntime = require('react/jsx-runtime');
6
+ var SettingsListContext = _react.createContext.call(void 0, { single: false });
7
+ function SettingsList({ children, className }) {
8
+ const items = _react.Children.toArray(children).filter(Boolean);
9
+ if (items.length === 0) return null;
10
+ const single = items.length === 1;
11
+ if (single) {
12
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SettingsListContext.Provider, { value: { single: true }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className, children: items[0] }) });
13
+ }
14
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SettingsListContext.Provider, { value: { single: false }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className, children: items.map((child, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-t border-border py-8", children: child }, i)) }) });
15
+ }
16
+
17
+
18
+
19
+
20
+ exports.SettingsListContext = SettingsListContext; exports.SettingsList = SettingsList;
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/anchor.tsx
7
+ import { Slot } from "@radix-ui/react-slot";
8
+ import { forwardRef } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var Anchor = forwardRef(function Anchor2({ variant = "unstyled", size = "inherit", display = "inline", underline = false, asChild = false, border = "none", weight = "normal", className, ...props }, ref) {
11
+ const Component = asChild ? Slot : "a";
12
+ return /* @__PURE__ */ jsx(
13
+ Component,
14
+ {
15
+ ref,
16
+ className: cn(
17
+ variant === "text" && "font-medium text-primary underline-offset-4 hover:underline",
18
+ variant === "muted" && "text-muted-foreground underline underline-offset-2 hover:text-foreground",
19
+ variant === "foreground" && "text-foreground underline-offset-2 hover:underline",
20
+ size === "xs" && "text-xs",
21
+ size === "sm" && "text-sm",
22
+ display === "inline-flex" && "inline-flex items-center gap-1",
23
+ display === "block" && "block",
24
+ border === "bottom" && "border-b last:border-b-0",
25
+ weight === "medium" && "font-medium",
26
+ underline && "underline",
27
+ className
28
+ ),
29
+ ...props
30
+ }
31
+ );
32
+ });
33
+
34
+ export {
35
+ Anchor
36
+ };
@@ -0,0 +1,47 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/page-shell.tsx
7
+ var _react = require('react');
8
+ var _jsxruntime = require('react/jsx-runtime');
9
+ var widthStyles = {
10
+ narrow: "max-w-3xl",
11
+ wide: "max-w-5xl",
12
+ full: "max-w-none"
13
+ };
14
+ var paddingStyles = {
15
+ none: "",
16
+ base: "px-4 md:px-6",
17
+ relaxed: "px-6 md:px-10",
18
+ spacious: "px-6 md:px-10 xl:px-16"
19
+ };
20
+ var PageShell = _react.forwardRef.call(void 0,
21
+ function PageShell2({ width = "full", padding = "base", spacing = "default", bottomInset = "default", minHeight = "none", align = "start", printMode = "default", mobileTreatment = "page", as = "main", className, ...props }, ref) {
22
+ const Tag = as;
23
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24
+ Tag,
25
+ {
26
+ ref,
27
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
28
+ "mx-auto w-full pt-6 md:pt-8 mb-28",
29
+ spacing === "default" ? "space-y-6" : "space-y-4",
30
+ widthStyles[width],
31
+ paddingStyles[padding],
32
+ bottomInset === "action" && "pb-32",
33
+ minHeight === "content" && "min-h-[70vh]",
34
+ align === "center" && "flex items-center",
35
+ printMode === "compact" && "print:my-0 print:pt-0",
36
+ mobileTreatment === "application" && "mb-0 flex min-h-[calc(100svh-4rem)] flex-1 flex-col space-y-0 px-0 pt-0 md:mb-28 md:block md:min-h-0 md:pt-8",
37
+ className
38
+ ),
39
+ ...props
40
+ }
41
+ );
42
+ }
43
+ );
44
+
45
+
46
+
47
+ exports.PageShell = PageShell;
@@ -0,0 +1,60 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/marketing-section.tsx
7
+ var _react = require('react');
8
+ var _classvarianceauthority = require('class-variance-authority');
9
+ var _jsxruntime = require('react/jsx-runtime');
10
+ var sectionVariants = _classvarianceauthority.cva.call(void 0, "w-full", {
11
+ variants: {
12
+ tone: {
13
+ default: "bg-background text-foreground",
14
+ // The "every other section" muted band used across the apps.
15
+ muted: "border-t border-border bg-muted/30 text-foreground",
16
+ // Full-width dark call-to-action band.
17
+ inverted: "border-t border-border bg-foreground text-background"
18
+ },
19
+ padding: {
20
+ none: "",
21
+ sm: "py-12 md:py-16",
22
+ default: "py-20 md:py-28",
23
+ lg: "py-24 md:py-32"
24
+ }
25
+ },
26
+ defaultVariants: { tone: "default", padding: "default" }
27
+ });
28
+ var widthClass = {
29
+ narrow: "max-w-3xl",
30
+ wide: "max-w-5xl",
31
+ widest: "max-w-6xl"
32
+ };
33
+ var MarketingSection = _react.forwardRef.call(void 0,
34
+ function MarketingSection2({ tone, padding, width = "wide", as, className, innerClassName, children, ...props }, ref) {
35
+ const Tag = _nullishCoalesce(as, () => ( "section"));
36
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
+ Tag,
38
+ {
39
+ ref,
40
+ className: _chunkKWLSBTB2cjs.cn.call(void 0, sectionVariants({ tone, padding }), className),
41
+ ...props,
42
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
43
+ "div",
44
+ {
45
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
46
+ "mx-auto w-full px-4 md:px-6",
47
+ widthClass[width],
48
+ innerClassName
49
+ ),
50
+ children
51
+ }
52
+ )
53
+ }
54
+ );
55
+ }
56
+ );
57
+
58
+
59
+
60
+ exports.MarketingSection = MarketingSection;
@@ -0,0 +1,67 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
+
3
+ // src/primitives/accent-theme.tsx
4
+ var _react = require('react');
5
+ var _jsxruntime = require('react/jsx-runtime');
6
+ var PALETTE_ID = /^[A-Za-z0-9_-]+$/;
7
+ function hexToHslTriplet(hex) {
8
+ const match = /^#([0-9a-f]{6})$/i.exec(hex.trim());
9
+ if (!match) return null;
10
+ const value = Number.parseInt(match[1], 16);
11
+ const red = (value >> 16 & 255) / 255;
12
+ const green = (value >> 8 & 255) / 255;
13
+ const blue = (value & 255) / 255;
14
+ const maximum = Math.max(red, green, blue);
15
+ const minimum = Math.min(red, green, blue);
16
+ const lightness = (maximum + minimum) / 2;
17
+ let hue = 0;
18
+ let saturation = 0;
19
+ if (maximum !== minimum) {
20
+ const delta = maximum - minimum;
21
+ saturation = lightness > 0.5 ? delta / (2 - maximum - minimum) : delta / (maximum + minimum);
22
+ if (maximum === red) hue = ((green - blue) / delta + (green < blue ? 6 : 0)) / 6;
23
+ else if (maximum === green) hue = ((blue - red) / delta + 2) / 6;
24
+ else hue = ((red - green) / delta + 4) / 6;
25
+ }
26
+ const round = (number) => Math.round(number * 10) / 10;
27
+ return `${round(hue * 360)} ${round(saturation * 100)}% ${round(lightness * 100)}%`;
28
+ }
29
+ function foregroundFor(hex) {
30
+ const match = /^#([0-9a-f]{6})$/i.exec(hex.trim());
31
+ if (!match) return "0 0% 100%";
32
+ const value = Number.parseInt(match[1], 16);
33
+ const channel = (number) => {
34
+ const normalized = number / 255;
35
+ return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
36
+ };
37
+ const luminance = 0.2126 * channel(value >> 16 & 255) + 0.7152 * channel(value >> 8 & 255) + 0.0722 * channel(value & 255);
38
+ return luminance > 0.45 ? "0 0% 9%" : "0 0% 100%";
39
+ }
40
+ function AccentTheme({ colours, palette, scope: target = "region", children }) {
41
+ const scope = `accent-${_react.useId.call(void 0, ).replace(/[^a-zA-Z0-9]/g, "")}`;
42
+ const light = _optionalChain([colours, 'optionalAccess', _ => _.light]) ? hexToHslTriplet(colours.light) : null;
43
+ const dark = _optionalChain([colours, 'optionalAccess', _2 => _2.dark]) ? hexToHslTriplet(colours.dark) : null;
44
+ if (!light && !dark) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
45
+ const root = palette === void 0 ? null : PALETTE_ID.test(palette) ? `:root[data-theme="${palette}"]` : ":root:not(*)";
46
+ const lightSelector = target === "document" ? _nullishCoalesce(root, () => ( ":root")) : root ? `${root} .${scope}` : `.${scope}`;
47
+ const darkSelector = `${_nullishCoalesce(root, () => ( ":root"))}.dark${target === "document" ? "" : ` .${scope}`}`;
48
+ const rules = [];
49
+ if (light && _optionalChain([colours, 'optionalAccess', _3 => _3.light])) {
50
+ rules.push(
51
+ `${lightSelector}{--primary:${light};--primary-foreground:${foregroundFor(colours.light)};--ring:${light};--color-primary:hsl(var(--primary));--color-primary-foreground:hsl(var(--primary-foreground));--color-ring:hsl(var(--ring));}`
52
+ );
53
+ }
54
+ if (dark && _optionalChain([colours, 'optionalAccess', _4 => _4.dark])) {
55
+ rules.push(
56
+ `${darkSelector}{--primary:${dark};--primary-foreground:${foregroundFor(colours.dark)};--ring:${dark};--color-primary:hsl(var(--primary));--color-primary-foreground:hsl(var(--primary-foreground));--color-ring:hsl(var(--ring));}`
57
+ );
58
+ }
59
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
60
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "style", { dangerouslySetInnerHTML: { __html: rules.join("") } }),
61
+ target === "document" ? children : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: scope, children })
62
+ ] });
63
+ }
64
+
65
+
66
+
67
+ exports.AccentTheme = AccentTheme;
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/brand-mark.tsx
7
+ import { forwardRef } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ var sizeStyles = {
10
+ sm: "h-6 max-w-36",
11
+ md: "h-7 max-w-44",
12
+ lg: "h-9 max-w-52"
13
+ };
14
+ var BrandMark = forwardRef(function BrandMark2({ size = "md", className, ...props }, ref) {
15
+ return /* @__PURE__ */ jsx(
16
+ "img",
17
+ {
18
+ ref,
19
+ className: cn("w-auto object-contain", sizeStyles[size], className),
20
+ ...props
21
+ }
22
+ );
23
+ });
24
+
25
+ export {
26
+ BrandMark
27
+ };
@@ -7,16 +7,10 @@ import {
7
7
  } from "./chunk-EEHIMPD7.js";
8
8
  import {
9
9
  FilterBar
10
- } from "./chunk-UFFHGKI7.js";
10
+ } from "./chunk-6LB37JWO.js";
11
11
  import {
12
12
  Heading
13
13
  } from "./chunk-H2O6NMLZ.js";
14
- import {
15
- Tooltip,
16
- TooltipContent,
17
- TooltipProvider,
18
- TooltipTrigger
19
- } from "./chunk-ZRLUUZHK.js";
20
14
  import {
21
15
  BoardColumnComponent,
22
16
  MobileBoardView
@@ -24,6 +18,12 @@ import {
24
18
  import {
25
19
  ScrollArea
26
20
  } from "./chunk-LELFPLTE.js";
21
+ import {
22
+ Tooltip,
23
+ TooltipContent,
24
+ TooltipProvider,
25
+ TooltipTrigger
26
+ } from "./chunk-ZRLUUZHK.js";
27
27
  import {
28
28
  Input
29
29
  } from "./chunk-QMA3WVB7.js";
@@ -0,0 +1,27 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/brand-mark.tsx
7
+ var _react = require('react');
8
+ var _jsxruntime = require('react/jsx-runtime');
9
+ var sizeStyles = {
10
+ sm: "h-6 max-w-36",
11
+ md: "h-7 max-w-44",
12
+ lg: "h-9 max-w-52"
13
+ };
14
+ var BrandMark = _react.forwardRef.call(void 0, function BrandMark2({ size = "md", className, ...props }, ref) {
15
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16
+ "img",
17
+ {
18
+ ref,
19
+ className: _chunkKWLSBTB2cjs.cn.call(void 0, "w-auto object-contain", sizeStyles[size], className),
20
+ ...props
21
+ }
22
+ );
23
+ });
24
+
25
+
26
+
27
+ exports.BrandMark = BrandMark;
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- var _chunkAO56ET4Fcjs = require('./chunk-AO56ET4F.cjs');
9
+ var _chunkBTHYGHOHcjs = require('./chunk-BTHYGHOH.cjs');
10
10
 
11
11
 
12
12
  var _chunkT2ZFSPE4cjs = require('./chunk-T2ZFSPE4.cjs');
@@ -29,10 +29,10 @@ function PreviewDialog({
29
29
  downloadLabel,
30
30
  children
31
31
  }) {
32
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialogContent, { presentation: "preview", className: "h-[92dvh] outline-none", children: [
33
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialogHeader, { className: "shrink-0 border-b border-border", children: [
32
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogContent, { presentation: "preview", className: "h-[92dvh] outline-none", children: [
33
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogHeader, { className: "shrink-0 border-b border-border", children: [
34
34
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-2", children: [
35
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialogTitle, { className: "min-w-0 flex-1 truncate text-left", children: title }),
35
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogTitle, { className: "min-w-0 flex-1 truncate text-left", children: title }),
36
36
  onDownload && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
37
  _chunkJDEXZGIYcjs.Button,
38
38
  {
@@ -46,7 +46,7 @@ function PreviewDialog({
46
46
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkT2ZFSPE4cjs.Icon, { icon: downloading ? _lucidereact.Loader2 : _lucidereact.Download, size: "sm", spin: downloading })
47
47
  }
48
48
  ),
49
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialogClose, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
49
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogClose, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
50
50
  _chunkJDEXZGIYcjs.Button,
51
51
  {
52
52
  type: "button",
@@ -58,7 +58,7 @@ function PreviewDialog({
58
58
  }
59
59
  ) })
60
60
  ] }),
61
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkAO56ET4Fcjs.ResponsiveDialogDescription, { className: "sr-only", children: [
61
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogDescription, { className: "sr-only", children: [
62
62
  "Preview of ",
63
63
  title
64
64
  ] })
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/marketing-section.tsx
7
+ import { forwardRef } from "react";
8
+ import { cva } from "class-variance-authority";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var sectionVariants = cva("w-full", {
11
+ variants: {
12
+ tone: {
13
+ default: "bg-background text-foreground",
14
+ // The "every other section" muted band used across the apps.
15
+ muted: "border-t border-border bg-muted/30 text-foreground",
16
+ // Full-width dark call-to-action band.
17
+ inverted: "border-t border-border bg-foreground text-background"
18
+ },
19
+ padding: {
20
+ none: "",
21
+ sm: "py-12 md:py-16",
22
+ default: "py-20 md:py-28",
23
+ lg: "py-24 md:py-32"
24
+ }
25
+ },
26
+ defaultVariants: { tone: "default", padding: "default" }
27
+ });
28
+ var widthClass = {
29
+ narrow: "max-w-3xl",
30
+ wide: "max-w-5xl",
31
+ widest: "max-w-6xl"
32
+ };
33
+ var MarketingSection = forwardRef(
34
+ function MarketingSection2({ tone, padding, width = "wide", as, className, innerClassName, children, ...props }, ref) {
35
+ const Tag = as ?? "section";
36
+ return /* @__PURE__ */ jsx(
37
+ Tag,
38
+ {
39
+ ref,
40
+ className: cn(sectionVariants({ tone, padding }), className),
41
+ ...props,
42
+ children: /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ className: cn(
46
+ "mx-auto w-full px-4 md:px-6",
47
+ widthClass[width],
48
+ innerClassName
49
+ ),
50
+ children
51
+ }
52
+ )
53
+ }
54
+ );
55
+ }
56
+ );
57
+
58
+ export {
59
+ MarketingSection
60
+ };