@epicbagel/saas-kit 1.2.3 → 1.4.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 (80) hide show
  1. package/README.md +115 -0
  2. package/dist/chunk-2TKLS73N.js +121 -0
  3. package/dist/chunk-4UUTKR3V.cjs +53 -0
  4. package/dist/chunk-BTHYGHOH.cjs +143 -0
  5. package/dist/chunk-D5EHW3O2.cjs +52 -0
  6. package/dist/chunk-F3DAFAMD.js +271 -0
  7. package/dist/chunk-GRY77463.cjs +121 -0
  8. package/dist/chunk-HAP6USTP.cjs +46 -0
  9. package/dist/chunk-HAQOT2CD.js +46 -0
  10. package/dist/chunk-HHV4G77I.js +55 -0
  11. package/dist/{chunk-KYQPX754.js → chunk-HRLP4BHJ.js} +7 -7
  12. package/dist/{chunk-N6V3DDKU.cjs → chunk-IH3COANJ.cjs} +7 -7
  13. package/dist/chunk-JTI4244T.js +143 -0
  14. package/dist/chunk-QEJ2STIV.js +53 -0
  15. package/dist/chunk-TWCJMFST.js +260 -0
  16. package/dist/chunk-U3YFP6ZV.cjs +273 -0
  17. package/dist/chunk-VLXPLKFR.cjs +55 -0
  18. package/dist/chunk-X3PRMR5G.js +52 -0
  19. package/dist/chunk-ZJFYOXSM.cjs +260 -0
  20. package/dist/lib/neutral-theme.cjs +39 -236
  21. package/dist/lib/neutral-theme.d.cts +44 -2
  22. package/dist/lib/neutral-theme.d.ts +44 -2
  23. package/dist/lib/neutral-theme.js +23 -219
  24. package/dist/primitives/activity-feed.cjs +3 -3
  25. package/dist/primitives/activity-feed.js +4 -4
  26. package/dist/primitives/board-view.cjs +6 -6
  27. package/dist/primitives/board-view.js +5 -5
  28. package/dist/primitives/chat.cjs +14 -14
  29. package/dist/primitives/chat.js +12 -12
  30. package/dist/primitives/code-block.cjs +5 -50
  31. package/dist/primitives/code-block.js +5 -50
  32. package/dist/primitives/connection.cjs +6 -6
  33. package/dist/primitives/connection.js +7 -7
  34. package/dist/primitives/copy-button.cjs +3 -3
  35. package/dist/primitives/copy-button.js +2 -2
  36. package/dist/primitives/document-preview.cjs +54 -0
  37. package/dist/primitives/document-preview.d.cts +30 -0
  38. package/dist/primitives/document-preview.d.ts +30 -0
  39. package/dist/primitives/document-preview.js +54 -0
  40. package/dist/primitives/editable-list.cjs +1 -1
  41. package/dist/primitives/editable-list.js +1 -1
  42. package/dist/primitives/field.cjs +12 -239
  43. package/dist/primitives/field.js +16 -243
  44. package/dist/primitives/file-dropzone.cjs +3 -3
  45. package/dist/primitives/file-dropzone.js +2 -2
  46. package/dist/primitives/file-preview-internals.cjs +20 -0
  47. package/dist/primitives/file-preview-internals.d.cts +44 -0
  48. package/dist/primitives/file-preview-internals.d.ts +44 -0
  49. package/dist/primitives/file-preview-internals.js +20 -0
  50. package/dist/primitives/file-preview.cjs +327 -0
  51. package/dist/primitives/file-preview.d.cts +92 -0
  52. package/dist/primitives/file-preview.d.ts +92 -0
  53. package/dist/primitives/file-preview.js +327 -0
  54. package/dist/primitives/filter-bar.cjs +4 -4
  55. package/dist/primitives/filter-bar.js +3 -3
  56. package/dist/primitives/image.cjs +4 -48
  57. package/dist/primitives/image.js +3 -47
  58. package/dist/primitives/radio-group.cjs +4 -39
  59. package/dist/primitives/radio-group.js +4 -39
  60. package/dist/primitives/resource-list.cjs +6 -6
  61. package/dist/primitives/resource-list.js +5 -5
  62. package/dist/primitives/responsive-dialog.cjs +26 -142
  63. package/dist/primitives/responsive-dialog.js +13 -129
  64. package/dist/primitives/section.cjs +2 -2
  65. package/dist/primitives/section.js +3 -3
  66. package/dist/primitives/switch-field.cjs +2 -2
  67. package/dist/primitives/switch-field.js +3 -3
  68. package/dist/primitives/theme-selector.cjs +188 -0
  69. package/dist/primitives/theme-selector.d.cts +78 -0
  70. package/dist/primitives/theme-selector.d.ts +78 -0
  71. package/dist/primitives/theme-selector.js +188 -0
  72. package/dist/primitives/toggle-group.cjs +5 -45
  73. package/dist/primitives/toggle-group.js +5 -45
  74. package/package.json +31 -1
  75. package/dist/{chunk-6OTAGP2I.cjs → chunk-KADJ56AH.cjs} +2 -2
  76. package/dist/{chunk-EHKMVJ6O.js → chunk-M7FYGAGO.js} +3 -3
  77. package/dist/{chunk-PVZ4JGDU.js → chunk-MLHNYRFX.js} +6 -6
  78. package/dist/{chunk-PWOQMTPX.js → chunk-NW3OWKBN.js} +3 -3
  79. package/dist/{chunk-CYH63OCL.cjs → chunk-SGW4FWBX.cjs} +6 -6
  80. package/dist/{chunk-ENJNZ323.cjs → chunk-VKIGJNJR.cjs} +2 -2
@@ -0,0 +1,271 @@
1
+ // src/lib/neutral-theme.ts
2
+ var SEMANTIC_TOKENS = [
3
+ "background",
4
+ "foreground",
5
+ "card",
6
+ "card-foreground",
7
+ "popover",
8
+ "popover-foreground",
9
+ "primary",
10
+ "primary-foreground",
11
+ "secondary",
12
+ "secondary-foreground",
13
+ "muted",
14
+ "muted-foreground",
15
+ "accent",
16
+ "accent-foreground",
17
+ "destructive",
18
+ "destructive-foreground",
19
+ "border",
20
+ "input",
21
+ "ring",
22
+ "chart-1",
23
+ "chart-2",
24
+ "chart-3",
25
+ "chart-4",
26
+ "chart-5",
27
+ "sidebar-background",
28
+ "sidebar-foreground",
29
+ "sidebar-primary",
30
+ "sidebar-primary-foreground",
31
+ "sidebar-accent",
32
+ "sidebar-accent-foreground",
33
+ "sidebar-border",
34
+ "sidebar-ring"
35
+ ];
36
+ function hexToRgb(hex) {
37
+ const h = hex.replace("#", "").trim();
38
+ const full = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
39
+ if (!/^[0-9a-fA-F]{6}$/.test(full)) {
40
+ throw new Error(`Not a hex colour: ${hex}`);
41
+ }
42
+ return [
43
+ parseInt(full.slice(0, 2), 16),
44
+ parseInt(full.slice(2, 4), 16),
45
+ parseInt(full.slice(4, 6), 16)
46
+ ];
47
+ }
48
+ function hexToHsl(hex) {
49
+ const [r255, g255, b255] = hexToRgb(hex);
50
+ const r = r255 / 255;
51
+ const g = g255 / 255;
52
+ const b = b255 / 255;
53
+ const max = Math.max(r, g, b);
54
+ const min = Math.min(r, g, b);
55
+ const l = (max + min) / 2;
56
+ const d = max - min;
57
+ let h = 0;
58
+ let s = 0;
59
+ if (d !== 0) {
60
+ s = d / (1 - Math.abs(2 * l - 1));
61
+ if (max === r) h = (g - b) / d % 6;
62
+ else if (max === g) h = (b - r) / d + 2;
63
+ else h = (r - g) / d + 4;
64
+ h *= 60;
65
+ if (h < 0) h += 360;
66
+ }
67
+ const round = (n) => Math.round(n * 10) / 10;
68
+ return `${round(h)} ${round(s * 100)}% ${round(l * 100)}%`;
69
+ }
70
+ function luminance(hex) {
71
+ const [r, g, b] = hexToRgb(hex).map((v) => {
72
+ const c = v / 255;
73
+ return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
74
+ });
75
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
76
+ }
77
+ function contrastRatio(a, b) {
78
+ const la = luminance(a);
79
+ const lb = luminance(b);
80
+ const [hi, lo] = la > lb ? [la, lb] : [lb, la];
81
+ return (hi + 0.05) / (lo + 0.05);
82
+ }
83
+ function bestForeground(bg, candidates) {
84
+ let best = candidates[0];
85
+ let bestRatio = 0;
86
+ for (const c of candidates) {
87
+ const ratio = contrastRatio(bg, c);
88
+ if (ratio > bestRatio) {
89
+ best = c;
90
+ bestRatio = ratio;
91
+ }
92
+ }
93
+ return best;
94
+ }
95
+ var NEUTRAL_RADIUS = "0rem";
96
+ function neutral(mode) {
97
+ const light = mode === "light";
98
+ const danger = "#d71921";
99
+ const mono = light ? {
100
+ bg: "#ffffff",
101
+ fg: "#000000",
102
+ surface: "#f5f5f5",
103
+ subtle: "#666666",
104
+ border: "#e5e5e5",
105
+ sidebar: "#fafafa",
106
+ strong: "#333333"
107
+ } : {
108
+ bg: "#000000",
109
+ fg: "#ffffff",
110
+ surface: "#1a1a1a",
111
+ subtle: "#999999",
112
+ border: "#333333",
113
+ sidebar: "#0d0d0d",
114
+ strong: "#cccccc"
115
+ };
116
+ return {
117
+ background: mono.bg,
118
+ foreground: mono.fg,
119
+ card: mono.bg,
120
+ "card-foreground": mono.fg,
121
+ popover: mono.bg,
122
+ "popover-foreground": mono.fg,
123
+ primary: mono.fg,
124
+ "primary-foreground": mono.bg,
125
+ secondary: mono.surface,
126
+ "secondary-foreground": mono.fg,
127
+ muted: mono.surface,
128
+ "muted-foreground": mono.subtle,
129
+ accent: mono.surface,
130
+ "accent-foreground": mono.fg,
131
+ destructive: danger,
132
+ "destructive-foreground": bestForeground(danger, ["#ffffff", "#000000"]),
133
+ border: mono.border,
134
+ input: mono.border,
135
+ ring: mono.fg,
136
+ "chart-1": light ? "#333333" : "#cccccc",
137
+ "chart-2": light ? "#4d4d4d" : "#b3b3b3",
138
+ "chart-3": light ? "#666666" : "#999999",
139
+ "chart-4": light ? "#808080" : "#808080",
140
+ "chart-5": light ? "#999999" : "#666666",
141
+ "sidebar-background": mono.sidebar,
142
+ "sidebar-foreground": mono.fg,
143
+ "sidebar-primary": mono.fg,
144
+ "sidebar-primary-foreground": mono.bg,
145
+ "sidebar-accent": mono.surface,
146
+ "sidebar-accent-foreground": mono.fg,
147
+ "sidebar-border": mono.border,
148
+ "sidebar-ring": mono.border
149
+ };
150
+ }
151
+ var NEUTRAL = {
152
+ light: neutral("light"),
153
+ dark: neutral("dark")
154
+ };
155
+ var NEUTRAL_THEME_ID = "minimal";
156
+ var NEUTRAL_PALETTE = {
157
+ id: NEUTRAL_THEME_ID,
158
+ label: "Neutral",
159
+ description: "Black and white, square corners.",
160
+ radius: NEUTRAL_RADIUS,
161
+ light: NEUTRAL.light,
162
+ dark: NEUTRAL.dark
163
+ };
164
+ function colorAlias(token) {
165
+ if (token.startsWith("chart-")) return null;
166
+ if (token === "sidebar-background") return "--color-sidebar";
167
+ return `--color-${token}`;
168
+ }
169
+ var RADIUS_SCALE = [
170
+ ["--radius-sm", "calc(var(--radius) - 4px)"],
171
+ ["--radius-md", "calc(var(--radius) - 2px)"],
172
+ ["--radius-lg", "var(--radius)"],
173
+ ["--radius-xl", "calc(var(--radius) + 4px)"],
174
+ ["--radius-2xl", "calc(var(--radius) + 8px)"]
175
+ ];
176
+ function paletteDeclarations(tokens, names, radius, { indent = " ", aliasSource = "neutral-theme.ts" } = {}) {
177
+ const value = (token) => {
178
+ const hex = tokens[token];
179
+ if (hex === void 0) throw new Error(`Missing token: ${token}`);
180
+ return hexToHsl(hex);
181
+ };
182
+ const lines = [`${indent}--radius: ${radius};`];
183
+ for (const token of names) {
184
+ lines.push(`${indent}--${token}: ${value(token)};`);
185
+ }
186
+ lines.push(`${indent}--sidebar: ${value("sidebar-background")};`);
187
+ lines.push(`${indent}/* Tailwind-facing aliases \u2014 see ${aliasSource} */`);
188
+ for (const token of names) {
189
+ const alias = colorAlias(token);
190
+ if (alias) lines.push(`${indent}${alias}: hsl(var(--${token}));`);
191
+ }
192
+ for (const [name, scale] of RADIUS_SCALE) {
193
+ lines.push(`${indent}${name}: ${scale};`);
194
+ }
195
+ return lines.join("\n");
196
+ }
197
+ function paletteStyle(tokens, radius, names = SEMANTIC_TOKENS) {
198
+ const value = (token) => {
199
+ const hex = tokens[token];
200
+ if (hex === void 0) throw new Error(`Missing token: ${token}`);
201
+ return hexToHsl(hex);
202
+ };
203
+ const style = {};
204
+ if (radius !== void 0) style["--radius"] = radius;
205
+ for (const token of names) style[`--${token}`] = value(token);
206
+ style["--sidebar"] = value("sidebar-background");
207
+ for (const token of names) {
208
+ const alias = colorAlias(token);
209
+ if (alias) style[alias] = `hsl(var(--${token}))`;
210
+ }
211
+ for (const [name, scale] of RADIUS_SCALE) style[name] = scale;
212
+ return style;
213
+ }
214
+ function paletteBlock(selector, declarations, indent = "") {
215
+ const head = selector.split("\n").map((line) => indent + line).join("\n");
216
+ return `${head} {
217
+ ${declarations}
218
+ ${indent}}
219
+ `;
220
+ }
221
+ function layerBlock(name, rules) {
222
+ return `@layer ${name} {
223
+ ${rules.join("\n")}}
224
+ `;
225
+ }
226
+ var DARK_ROOT_SELECTOR = ":root:where(.dark)";
227
+ function baseLayerPalette(light, dark, indent = " ") {
228
+ return layerBlock("base", [
229
+ paletteBlock(":root", light, indent),
230
+ paletteBlock(DARK_ROOT_SELECTOR, dark, indent)
231
+ ]);
232
+ }
233
+ var PALETTE_GENERATED_HEADER = `/* GENERATED FILE \u2014 do not edit.
234
+ * Source: src/lib/neutral-theme.ts \xB7 Regenerate: pnpm gen:themes
235
+ *
236
+ * The neutral palette: light on :root, dark when the root carries the
237
+ * \`.dark\` class. It sits in \`@layer base\`, so any unlayered palette rule
238
+ * or a host's own :root overrides wins on layer order alone. Imported by
239
+ * tokens.css; every --color-* alias and the radius scale are re-declared
240
+ * alongside the tokens they read.
241
+ */`;
242
+ function renderPaletteCss() {
243
+ const declarations = (mode) => paletteDeclarations(NEUTRAL[mode], SEMANTIC_TOKENS, NEUTRAL_RADIUS, {
244
+ indent: " "
245
+ });
246
+ return [
247
+ PALETTE_GENERATED_HEADER,
248
+ baseLayerPalette(declarations("light"), declarations("dark"))
249
+ ].join("\n");
250
+ }
251
+
252
+ export {
253
+ SEMANTIC_TOKENS,
254
+ hexToRgb,
255
+ hexToHsl,
256
+ luminance,
257
+ contrastRatio,
258
+ bestForeground,
259
+ NEUTRAL_RADIUS,
260
+ NEUTRAL,
261
+ NEUTRAL_THEME_ID,
262
+ NEUTRAL_PALETTE,
263
+ colorAlias,
264
+ paletteDeclarations,
265
+ paletteStyle,
266
+ paletteBlock,
267
+ layerBlock,
268
+ baseLayerPalette,
269
+ PALETTE_GENERATED_HEADER,
270
+ renderPaletteCss
271
+ };
@@ -0,0 +1,121 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ var _chunkBTHYGHOHcjs = require('./chunk-BTHYGHOH.cjs');
10
+
11
+
12
+ var _chunkT2ZFSPE4cjs = require('./chunk-T2ZFSPE4.cjs');
13
+
14
+
15
+ var _chunkL4DH72UFcjs = require('./chunk-L4DH72UF.cjs');
16
+
17
+
18
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
19
+
20
+ // src/primitives/file-preview-internals.tsx
21
+ var _lucidereact = require('lucide-react');
22
+ var _jsxruntime = require('react/jsx-runtime');
23
+ function PreviewDialog({
24
+ open,
25
+ onOpenChange,
26
+ title,
27
+ onDownload,
28
+ downloading,
29
+ downloadLabel,
30
+ children
31
+ }) {
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
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-2", children: [
35
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogTitle, { className: "min-w-0 flex-1 truncate text-left", children: title }),
36
+ onDownload && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
+ _chunkL4DH72UFcjs.Button,
38
+ {
39
+ type: "button",
40
+ size: "icon-compact",
41
+ variant: "ghost",
42
+ onClick: onDownload,
43
+ disabled: downloading,
44
+ title: downloadLabel,
45
+ "aria-label": downloadLabel,
46
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkT2ZFSPE4cjs.Icon, { icon: downloading ? _lucidereact.Loader2 : _lucidereact.Download, size: "sm", spin: downloading })
47
+ }
48
+ ),
49
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogClose, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
50
+ _chunkL4DH72UFcjs.Button,
51
+ {
52
+ type: "button",
53
+ size: "icon-compact",
54
+ variant: "ghost",
55
+ title: "Close preview",
56
+ "aria-label": "Close preview",
57
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkT2ZFSPE4cjs.Icon, { icon: _lucidereact.X, size: "sm" })
58
+ }
59
+ ) })
60
+ ] }),
61
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBTHYGHOHcjs.ResponsiveDialogDescription, { className: "sr-only", children: [
62
+ "Preview of ",
63
+ title
64
+ ] })
65
+ ] }),
66
+ children
67
+ ] }) });
68
+ }
69
+ function PreviewStage({
70
+ layout = "center",
71
+ label,
72
+ children
73
+ }) {
74
+ const scrolls = layout === "scroll";
75
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
76
+ "div",
77
+ {
78
+ "data-slot": "preview-stage",
79
+ role: scrolls ? "region" : void 0,
80
+ "aria-label": scrolls ? label : void 0,
81
+ tabIndex: scrolls ? 0 : void 0,
82
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
83
+ "min-h-0 flex-1",
84
+ scrolls ? "overflow-y-auto overscroll-contain bg-background p-4 outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/50 sm:p-6" : "flex items-center justify-center overflow-hidden bg-muted"
85
+ ),
86
+ children
87
+ }
88
+ );
89
+ }
90
+ function PreviewLoading({ label }) {
91
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { role: "status", className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
92
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkT2ZFSPE4cjs.Icon, { icon: _lucidereact.Loader2, size: "sm", spin: true }),
93
+ label
94
+ ] });
95
+ }
96
+ function PreviewNotice({
97
+ icon,
98
+ alert = false,
99
+ message,
100
+ children
101
+ }) {
102
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
103
+ "div",
104
+ {
105
+ role: alert ? "alert" : void 0,
106
+ className: "flex max-w-sm flex-col items-center gap-3 p-6 text-center text-sm text-muted-foreground",
107
+ children: [
108
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkT2ZFSPE4cjs.Icon, { icon, size: "lg" }),
109
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: message }),
110
+ children
111
+ ]
112
+ }
113
+ );
114
+ }
115
+
116
+
117
+
118
+
119
+
120
+
121
+ exports.PreviewDialog = PreviewDialog; exports.PreviewStage = PreviewStage; exports.PreviewLoading = PreviewLoading; exports.PreviewNotice = PreviewNotice;
@@ -0,0 +1,46 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/radio-group.tsx
7
+ var _reactradiogroup = require('@radix-ui/react-radio-group'); var RadioGroupPrimitive = _interopRequireWildcard(_reactradiogroup);
8
+ var _react = require('react'); var React = _interopRequireWildcard(_react);
9
+ var _lucidereact = require('lucide-react');
10
+ var _jsxruntime = require('react/jsx-runtime');
11
+ var RadioGroup = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
12
+ RadioGroupPrimitive.Root,
13
+ {
14
+ ref,
15
+ "data-slot": "radio-group",
16
+ className: _chunkKWLSBTB2cjs.cn.call(void 0, "grid gap-3", className),
17
+ ...props
18
+ }
19
+ ));
20
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
21
+ var RadioGroupItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
22
+ RadioGroupPrimitive.Item,
23
+ {
24
+ ref,
25
+ "data-slot": "radio-group-item",
26
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
27
+ "aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
28
+ className
29
+ ),
30
+ ...props,
31
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32
+ RadioGroupPrimitive.Indicator,
33
+ {
34
+ "data-slot": "radio-group-indicator",
35
+ className: "relative flex items-center justify-center",
36
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CircleIcon, { className: "absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary" })
37
+ }
38
+ )
39
+ }
40
+ ));
41
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
42
+
43
+
44
+
45
+
46
+ exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem;
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "./chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/radio-group.tsx
7
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
8
+ import * as React from "react";
9
+ import { CircleIcon } from "lucide-react";
10
+ import { jsx } from "react/jsx-runtime";
11
+ var RadioGroup = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
12
+ RadioGroupPrimitive.Root,
13
+ {
14
+ ref,
15
+ "data-slot": "radio-group",
16
+ className: cn("grid gap-3", className),
17
+ ...props
18
+ }
19
+ ));
20
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
21
+ var RadioGroupItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
22
+ RadioGroupPrimitive.Item,
23
+ {
24
+ ref,
25
+ "data-slot": "radio-group-item",
26
+ className: cn(
27
+ "aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
28
+ className
29
+ ),
30
+ ...props,
31
+ children: /* @__PURE__ */ jsx(
32
+ RadioGroupPrimitive.Indicator,
33
+ {
34
+ "data-slot": "radio-group-indicator",
35
+ className: "relative flex items-center justify-center",
36
+ children: /* @__PURE__ */ jsx(CircleIcon, { className: "absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary" })
37
+ }
38
+ )
39
+ }
40
+ ));
41
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
42
+
43
+ export {
44
+ RadioGroup,
45
+ RadioGroupItem
46
+ };
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ import {
3
+ CopyButton
4
+ } from "./chunk-NW3OWKBN.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-G6SRSWXB.js";
8
+
9
+ // src/primitives/code-block.tsx
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ var HEIGHTS = {
12
+ none: "",
13
+ sm: "max-h-40 overflow-y-auto",
14
+ md: "max-h-64 overflow-y-auto",
15
+ lg: "max-h-96 overflow-y-auto",
16
+ viewport: "min-h-[55vh] max-h-[65vh] overflow-y-auto"
17
+ };
18
+ function CodeBlock({
19
+ children,
20
+ copy,
21
+ copyLabel,
22
+ wrap = false,
23
+ maxHeight = "none",
24
+ className
25
+ }) {
26
+ const copyText = typeof copy === "string" ? copy : children;
27
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
28
+ /* @__PURE__ */ jsx(
29
+ "pre",
30
+ {
31
+ className: cn(
32
+ "rounded-md border border-border bg-muted/40 p-3 font-mono text-xs leading-relaxed",
33
+ wrap ? "whitespace-pre-wrap break-words" : "overflow-x-auto",
34
+ HEIGHTS[maxHeight],
35
+ copy ? "pr-12" : void 0
36
+ ),
37
+ children
38
+ }
39
+ ),
40
+ copy ? /* @__PURE__ */ jsx(
41
+ CopyButton,
42
+ {
43
+ text: copyText,
44
+ label: copyLabel,
45
+ size: "sm",
46
+ variant: "ghost",
47
+ className: "absolute right-1.5 top-1.5"
48
+ }
49
+ ) : null
50
+ ] });
51
+ }
52
+
53
+ export {
54
+ CodeBlock
55
+ };
@@ -7,16 +7,16 @@ import {
7
7
  } from "./chunk-J3GQXM37.js";
8
8
  import {
9
9
  FilterBar
10
- } from "./chunk-PVZ4JGDU.js";
10
+ } from "./chunk-MLHNYRFX.js";
11
+ import {
12
+ Heading
13
+ } from "./chunk-H2O6NMLZ.js";
11
14
  import {
12
15
  Tooltip,
13
16
  TooltipContent,
14
17
  TooltipProvider,
15
18
  TooltipTrigger
16
19
  } from "./chunk-ZRLUUZHK.js";
17
- import {
18
- Heading
19
- } from "./chunk-H2O6NMLZ.js";
20
20
  import {
21
21
  BoardColumnComponent,
22
22
  MobileBoardView
@@ -24,15 +24,15 @@ import {
24
24
  import {
25
25
  ScrollArea
26
26
  } from "./chunk-LELFPLTE.js";
27
- import {
28
- useIsMobile
29
- } from "./chunk-PIU5SSUV.js";
30
27
  import {
31
28
  Input
32
29
  } from "./chunk-QMA3WVB7.js";
33
30
  import {
34
31
  Button
35
32
  } from "./chunk-HQRWRRZJ.js";
33
+ import {
34
+ useIsMobile
35
+ } from "./chunk-PIU5SSUV.js";
36
36
  import {
37
37
  cn
38
38
  } from "./chunk-G6SRSWXB.js";
@@ -7,16 +7,16 @@ var _chunkPNWNU6JWcjs = require('./chunk-PNWNU6JW.cjs');
7
7
  var _chunkFNDBM67Kcjs = require('./chunk-FNDBM67K.cjs');
8
8
 
9
9
 
10
- var _chunkCYH63OCLcjs = require('./chunk-CYH63OCL.cjs');
10
+ var _chunkSGW4FWBXcjs = require('./chunk-SGW4FWBX.cjs');
11
11
 
12
12
 
13
+ var _chunkLELBCBDTcjs = require('./chunk-LELBCBDT.cjs');
13
14
 
14
15
 
15
16
 
16
- var _chunkU2NES7VRcjs = require('./chunk-U2NES7VR.cjs');
17
17
 
18
18
 
19
- var _chunkLELBCBDTcjs = require('./chunk-LELBCBDT.cjs');
19
+ var _chunkU2NES7VRcjs = require('./chunk-U2NES7VR.cjs');
20
20
 
21
21
 
22
22
 
@@ -26,15 +26,15 @@ var _chunkYYFVG5A6cjs = require('./chunk-YYFVG5A6.cjs');
26
26
  var _chunkXLIAY56Vcjs = require('./chunk-XLIAY56V.cjs');
27
27
 
28
28
 
29
- var _chunkR35FT53Gcjs = require('./chunk-R35FT53G.cjs');
30
-
31
-
32
29
  var _chunkPQUSJEXLcjs = require('./chunk-PQUSJEXL.cjs');
33
30
 
34
31
 
35
32
  var _chunkL4DH72UFcjs = require('./chunk-L4DH72UF.cjs');
36
33
 
37
34
 
35
+ var _chunkR35FT53Gcjs = require('./chunk-R35FT53G.cjs');
36
+
37
+
38
38
  var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
39
39
 
40
40
  // src/primitives/resource-list.tsx
@@ -268,7 +268,7 @@ function ResourceList({
268
268
  const controlsVisible = !(hideControlsWhenEmpty && !loading && !error && _optionalChain([data, 'optionalAccess', _5 => _5.length]) === 0);
269
269
  const filterOnQuickRow = filterBarVisible && !toolbarHasOtherControls && hasQuickFilters;
270
270
  const filterBarNode = filterBarVisible ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
271
- _chunkCYH63OCLcjs.FilterBar,
271
+ _chunkSGW4FWBXcjs.FilterBar,
272
272
  {
273
273
  filters: filterSchema,
274
274
  onFiltersChange,