@conscia-labs/design-system 0.3.2 → 0.3.4
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.
- package/README.md +63 -8
- package/dist/{chunk-OFYVHEIH.js → chunk-CTRJ24EO.js} +115 -37
- package/dist/chunk-CTRJ24EO.js.map +1 -0
- package/dist/{chunk-RFSIC55H.js → chunk-VIVMQAJM.js} +19 -13
- package/dist/chunk-VIVMQAJM.js.map +1 -0
- package/dist/{chunk-JC7W5VB3.js → chunk-ZCBZHRTV.js} +6 -6
- package/dist/chunk-ZCBZHRTV.js.map +1 -0
- package/dist/foundation.css +19 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -3
- package/dist/patterns/index.js +2 -2
- package/dist/primitives/index.d.ts +4 -1
- package/dist/primitives/index.js +4 -2
- package/dist/standalone.css +1 -1
- package/dist/styles.css +19 -6
- package/package.json +2 -2
- package/dist/chunk-JC7W5VB3.js.map +0 -1
- package/dist/chunk-OFYVHEIH.js.map +0 -1
- package/dist/chunk-RFSIC55H.js.map +0 -1
package/README.md
CHANGED
|
@@ -273,14 +273,50 @@ export function ProductShell({
|
|
|
273
273
|
|
|
274
274
|
### Typography and font loading
|
|
275
275
|
|
|
276
|
-
The design system declares the open-source
|
|
277
|
-
dependency and loads it through its CSS entry points.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
`
|
|
276
|
+
The design system declares the open-source Source Sans 3 variable font as a
|
|
277
|
+
runtime dependency and loads it through its CSS entry points. Consumers should
|
|
278
|
+
import the published `tailwind.css` or `styles.css` entry and should not add a
|
|
279
|
+
separate font download. The shared hierarchy uses a deliberate `400 / 500 /
|
|
280
|
+
600` weight ladder; applications should avoid replacing it with arbitrary
|
|
281
|
+
fractional weights.
|
|
281
282
|
Applications may override `--font-sans` only when a deliberate product-specific
|
|
282
283
|
type decision has been made.
|
|
283
284
|
|
|
285
|
+
### Typography hierarchy
|
|
286
|
+
|
|
287
|
+
Use the shared type scale by role:
|
|
288
|
+
|
|
289
|
+
- `--ds-display-title` is the responsive display or welcome scale for
|
|
290
|
+
high-level entry points.
|
|
291
|
+
- `--ds-page-title` is for page-level headings and `PageHeader` titles.
|
|
292
|
+
- `--ds-section-title` is for sections within a page or resource detail.
|
|
293
|
+
- `--ds-body` is the default application body size.
|
|
294
|
+
- `--ds-metadata` is for supporting context such as descriptions, timestamps,
|
|
295
|
+
counts, and secondary organization text.
|
|
296
|
+
- `--ds-menu-label-size` is intentionally compact and is reserved for menu
|
|
297
|
+
labels and compact option descriptions, not normal body copy.
|
|
298
|
+
|
|
299
|
+
Prefer these tokens over local `clamp()`, pixel, or one-off font-size values.
|
|
300
|
+
Product-specific layout styles may still control wrapping, maximum width, or
|
|
301
|
+
composition when the content requires it.
|
|
302
|
+
|
|
303
|
+
Sidebar section labels are intentionally smaller than navigation rows and
|
|
304
|
+
slightly more weighted: comfortable density uses a `12px / 600 / 16px`
|
|
305
|
+
contract with restrained tracking, while compact density reduces the size
|
|
306
|
+
without changing the role. Keep navigation labels at the shared row size and
|
|
307
|
+
weight them only when active.
|
|
308
|
+
|
|
309
|
+
### BrandIcon
|
|
310
|
+
|
|
311
|
+
`BrandIcon` is the shared symbol-only Conscia mark. It embeds the supplied
|
|
312
|
+
240×240 symbol geometry so published consumers do not need to manage an asset
|
|
313
|
+
path. The default treatment uses the existing foreground role in light mode
|
|
314
|
+
and the existing white brand treatment in dark mode. Use it for symbol-only
|
|
315
|
+
lockups, collapsed navigation identity, and other shared brand placements.
|
|
316
|
+
|
|
317
|
+
The icon is decorative by default. Add an `aria-label` when the mark conveys
|
|
318
|
+
meaning without adjacent text, and use `className` to control its size.
|
|
319
|
+
|
|
284
320
|
### Sidebar variants and semantic surfaces
|
|
285
321
|
|
|
286
322
|
`AppSidebar` keeps the historical dark treatment by default. Consumers that
|
|
@@ -315,6 +351,13 @@ are intentionally theme-aware: the base uses the muted surface in light mode
|
|
|
315
351
|
and the raised surface in dark mode; hover reverses that relationship so the
|
|
316
352
|
control remains visibly interactive without introducing a new color palette.
|
|
317
353
|
|
|
354
|
+
Button variants provide their foreground role explicitly: primary, secondary,
|
|
355
|
+
destructive, outline, ghost, and link content do not depend on an ancestor's
|
|
356
|
+
text color. The destructive variant uses the existing dark danger background
|
|
357
|
+
and foreground pair in dark mode because the bright danger role is not suitable
|
|
358
|
+
for white text there. Consumer classes remain the final override when a
|
|
359
|
+
product-specific treatment is intentional.
|
|
360
|
+
|
|
318
361
|
`SidebarSearch` owns only the trigger, expanded field, Escape handling, and
|
|
319
362
|
focus handoff. Applications provide the query value and filtering behavior.
|
|
320
363
|
`NavigationGroup` accepts an optional `count`; application-owned group labels
|
|
@@ -324,9 +367,21 @@ application-owned.
|
|
|
324
367
|
|
|
325
368
|
The shell uses `--ds-topbar-height` as the shared chrome-height contract. The
|
|
326
369
|
sidebar header aliases the historical `--ds-sidebar-header-height` token to the
|
|
327
|
-
same value, so the two rails stay aligned. `
|
|
328
|
-
|
|
329
|
-
|
|
370
|
+
same value, so the two rails stay aligned. `TopBar` also owns shared horizontal
|
|
371
|
+
padding through its responsive `--ds-topbar-padding-x` tokens; applications
|
|
372
|
+
should not add a normal-use hardcoded height or padding override. Keep leading
|
|
373
|
+
and trailing actions inside the topbar so icons and labels share the same
|
|
374
|
+
vertical rhythm and visible focus treatment. `SidebarTrigger` should be
|
|
375
|
+
rendered as a child of `TopBar`, never inside `AppSidebar`; the topbar remains
|
|
376
|
+
mounted when the sidebar enters collapsed or mobile states.
|
|
377
|
+
|
|
378
|
+
Sidebar section labels use the field-label size with a restrained medium weight
|
|
379
|
+
and tracking. Navigation rows retain the shared comfortable/touch heights,
|
|
380
|
+
while `--ds-sidebar-item-gap`, `--ds-sidebar-label-gap`, and
|
|
381
|
+
`--ds-sidebar-group-gap` control list, label, and group rhythm. Use the shared
|
|
382
|
+
sidebar semantic utilities for surfaces, text, icons, borders, and focus rings;
|
|
383
|
+
keep conversation data, organization names, and product-specific row actions
|
|
384
|
+
application-owned.
|
|
330
385
|
|
|
331
386
|
For migration, replace a consuming application's light-only `--sidebar-*`
|
|
332
387
|
root override with `variant="auto"` on its shared `AppSidebar`. Remove
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
TableHead,
|
|
20
20
|
TableHeader,
|
|
21
21
|
TableRow
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-ZCBZHRTV.js";
|
|
23
23
|
import {
|
|
24
24
|
cn
|
|
25
25
|
} from "./chunk-JU5DQXFC.js";
|
|
@@ -156,15 +156,92 @@ function Badge({
|
|
|
156
156
|
return /* @__PURE__ */ jsx3("span", { "data-slot": "badge", className: cn(badgeVariants({ variant, className })), ...props });
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
// src/primitives/brand-icon.tsx
|
|
160
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
161
|
+
var CONSCIA_SYMBOL_PATH = [
|
|
162
|
+
"M171.225 63.8139L173.637 66.1116L203.794 34.4551L201.382 32.1575L171.225 63.8139Z",
|
|
163
|
+
"M184.012 78.9693L185.769 81.8487L223.091 59.076L221.334 56.1966L184.012 78.9693Z",
|
|
164
|
+
"M192.436 96.8858L193.417 100.222L235.362 87.8847L234.381 84.5488L192.436 96.8858Z",
|
|
165
|
+
"M195.949 116.334L196.037 119.987L239.746 118.926L239.657 115.273L195.949 116.334Z",
|
|
166
|
+
"M194.341 135.989L193.42 139.796L235.913 150.084L236.835 146.277L194.341 135.989Z",
|
|
167
|
+
"M187.759 154.526L185.708 158.285L224.091 179.221L226.142 175.461L187.759 154.526Z",
|
|
168
|
+
"M176.683 170.712L173.394 174.165L205.05 204.322L208.34 200.868L176.683 170.712Z",
|
|
169
|
+
"M161.899 183.49L157.288 186.304L180.06 223.626L184.672 220.812L161.899 183.49Z",
|
|
170
|
+
"M144.425 192.058L138.472 193.809L150.809 235.754L156.762 234.003L144.425 192.058Z",
|
|
171
|
+
"M125.438 195.913L118.244 196.088L119.305 239.796L126.499 239.622L125.438 195.913Z",
|
|
172
|
+
"M106.176 194.873L98.0421 192.903L87.754 235.397L95.8882 237.366L106.176 194.873Z",
|
|
173
|
+
"M87.8408 189.056L79.3505 184.425L58.4147 222.808L66.905 227.439L87.8408 189.056Z",
|
|
174
|
+
"M71.5444 178.838L63.5819 171.253L33.4252 202.91L41.3878 210.495L71.5444 178.838Z",
|
|
175
|
+
"M58.2896 164.821L51.9185 154.379L14.5961 177.152L20.9672 187.593L58.2896 164.821Z",
|
|
176
|
+
"M48.9443 147.836L45.1912 135.075L3.24659 147.412L6.99972 160.173L48.9443 147.836Z",
|
|
177
|
+
"M44.1724 128.938L43.8283 114.759L0.119827 115.82L0.463868 129.998L44.1724 128.938Z",
|
|
178
|
+
"M44.3613 109.352L47.8648 94.8809L5.37116 84.5928L1.86766 99.0635L44.3613 109.352Z",
|
|
179
|
+
"M49.563 90.3812L56.9571 76.825L18.5742 55.8893L11.18 69.4455L49.563 90.3812Z",
|
|
180
|
+
"M59.4839 73.314L70.4267 61.8269L38.7702 31.6703L27.8274 43.1574L59.4839 73.314Z",
|
|
181
|
+
"M73.4951 59.3251L87.307 50.8976L64.5343 13.5752L50.7224 22.0027L73.4951 59.3251Z",
|
|
182
|
+
"M90.6772 49.3891L106.414 44.7604L94.0775 2.81575L78.3402 7.44453L90.6772 49.3891Z",
|
|
183
|
+
"M109.88 44.2086L126.426 43.8071L125.366 0.098614L108.82 0.500089L109.88 44.2086Z",
|
|
184
|
+
"M129.802 44.1632L145.967 48.0768L156.255 5.58318L140.09 1.66954L129.802 44.1632Z",
|
|
185
|
+
"M149.087 49.2798L163.709 57.2553L184.645 18.8723L170.023 10.8969L149.087 49.2798Z",
|
|
186
|
+
"M152.448 160.384L141.06 167.332L154.089 188.685L165.477 181.736L152.448 160.384Z",
|
|
187
|
+
"M140.881 167.41L128.103 171.168L135.161 195.165L147.939 191.407L140.881 167.41Z",
|
|
188
|
+
"M127.834 171.202L114.653 171.522L115.26 196.528L128.441 196.209L127.834 171.202Z",
|
|
189
|
+
"M114.192 171.456L101.624 168.413L95.738 192.724L108.306 195.767L114.192 171.456Z",
|
|
190
|
+
"M100.907 168.109L89.889 162.1L77.9114 184.059L88.9296 190.069L100.907 168.109Z",
|
|
191
|
+
"M88.9224 161.353L80.2035 153.047L62.9505 171.158L71.6694 179.464L88.9224 161.353Z",
|
|
192
|
+
"M79.1143 151.631L73.1721 141.893L51.8195 154.921L57.7617 164.66L79.1143 151.631Z",
|
|
193
|
+
"M72.2163 139.615L69.2075 129.385L45.2105 136.444L48.2193 146.673L72.2163 139.615Z",
|
|
194
|
+
"M68.7593 126.163L68.5209 116.339L43.5147 116.946L43.7531 126.77L68.7593 126.163Z",
|
|
195
|
+
"M69.0161 112.256L71.1176 103.576L46.8064 97.6899L44.7049 106.37L69.0161 112.256Z",
|
|
196
|
+
"M72.979 98.9209L76.8146 91.8888L54.8552 79.9112L51.0196 86.9432L72.979 98.9209Z",
|
|
197
|
+
"M80.3506 87.1414L85.2494 81.999L67.1383 64.746L62.2395 69.8884L80.3506 87.1414Z",
|
|
198
|
+
"M90.5762 77.7753L95.9023 74.5255L82.8738 53.1729L77.5476 56.4227L90.5762 77.7753Z",
|
|
199
|
+
"M102.889 71.4875L108.114 69.9508L101.056 45.9537L95.831 47.4905L102.889 71.4875Z",
|
|
200
|
+
"M116.381 68.7043L121.119 68.5894L120.513 43.5832L115.775 43.6981L116.381 68.7043Z",
|
|
201
|
+
"M130.08 69.5886L134.092 70.56L139.978 46.2488L135.966 45.2775L130.08 69.5886Z",
|
|
202
|
+
"M143.01 74.0389L146.183 75.7697L158.161 53.8103L154.988 52.0795L143.01 74.0389Z",
|
|
203
|
+
"M154.273 81.705L156.588 83.9108L173.841 65.7997L171.526 63.5939L154.273 81.705Z",
|
|
204
|
+
"M163.102 92.0197L164.599 94.4735L185.952 81.445L184.455 78.9911L163.102 92.0197Z",
|
|
205
|
+
"M168.91 104.243L169.655 106.775L193.652 99.7164L192.907 97.1844L168.91 104.243Z",
|
|
206
|
+
"M171.325 117.515L171.386 120.001L196.392 119.394L196.331 116.909L171.325 117.515Z",
|
|
207
|
+
"M170.21 130.922L169.644 133.264L193.955 139.15L194.522 136.808L170.21 130.922Z",
|
|
208
|
+
"M165.673 143.549L164.523 145.658L186.482 157.636L187.633 155.527L165.673 143.549Z",
|
|
209
|
+
"M158.032 154.558L156.355 156.318L174.467 173.571L176.143 171.811L158.032 154.558Z"
|
|
210
|
+
].join(" ");
|
|
211
|
+
function BrandIcon({
|
|
212
|
+
"aria-label": ariaLabel,
|
|
213
|
+
className,
|
|
214
|
+
...props
|
|
215
|
+
}) {
|
|
216
|
+
return /* @__PURE__ */ jsx4(
|
|
217
|
+
"svg",
|
|
218
|
+
{
|
|
219
|
+
"data-slot": "brand-icon",
|
|
220
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
221
|
+
width: "240",
|
|
222
|
+
height: "240",
|
|
223
|
+
viewBox: "0 0 240 240",
|
|
224
|
+
fill: "none",
|
|
225
|
+
focusable: "false",
|
|
226
|
+
role: ariaLabel ? "img" : void 0,
|
|
227
|
+
"aria-hidden": ariaLabel ? void 0 : true,
|
|
228
|
+
"aria-label": ariaLabel,
|
|
229
|
+
className: cn("size-6 shrink-0 text-foreground dark:text-white", className),
|
|
230
|
+
...props,
|
|
231
|
+
children: /* @__PURE__ */ jsx4("path", { d: CONSCIA_SYMBOL_PATH, fill: "currentColor" })
|
|
232
|
+
}
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
159
236
|
// src/primitives/switch.tsx
|
|
160
237
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
161
|
-
import { jsx as
|
|
238
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
162
239
|
function Switch({
|
|
163
240
|
className,
|
|
164
241
|
size = "default",
|
|
165
242
|
...props
|
|
166
243
|
}) {
|
|
167
|
-
return /* @__PURE__ */
|
|
244
|
+
return /* @__PURE__ */ jsx5(
|
|
168
245
|
SwitchPrimitive.Root,
|
|
169
246
|
{
|
|
170
247
|
"data-slot": "switch",
|
|
@@ -174,7 +251,7 @@ function Switch({
|
|
|
174
251
|
className
|
|
175
252
|
),
|
|
176
253
|
...props,
|
|
177
|
-
children: /* @__PURE__ */
|
|
254
|
+
children: /* @__PURE__ */ jsx5(
|
|
178
255
|
SwitchPrimitive.Thumb,
|
|
179
256
|
{
|
|
180
257
|
"data-slot": "switch-thumb",
|
|
@@ -186,26 +263,26 @@ function Switch({
|
|
|
186
263
|
}
|
|
187
264
|
|
|
188
265
|
// src/primitives/textarea.tsx
|
|
189
|
-
import { jsx as
|
|
266
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
190
267
|
function Textarea({ className, ...props }) {
|
|
191
|
-
return /* @__PURE__ */
|
|
268
|
+
return /* @__PURE__ */ jsx6(
|
|
192
269
|
"textarea",
|
|
193
270
|
{
|
|
194
271
|
"data-slot": "textarea",
|
|
195
|
-
className: cn("min-h-28 w-full rounded-[var(--ds-field-control-radius)] border border-input bg-surface-control px-[var(--ds-field-control-padding-x)] py-3 text-sm outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
272
|
+
className: cn("min-h-28 w-full rounded-[var(--ds-field-control-radius)] border border-input bg-surface-control px-[var(--ds-field-control-padding-x)] py-3 text-sm leading-5 outline-none transition-colors placeholder:text-sm placeholder:leading-5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
196
273
|
...props
|
|
197
274
|
}
|
|
198
275
|
);
|
|
199
276
|
}
|
|
200
277
|
|
|
201
278
|
// src/primitives/compat.tsx
|
|
202
|
-
import { jsx as
|
|
279
|
+
import { jsx as jsx7, jsxs } from "react/jsx-runtime";
|
|
203
280
|
var ConsciaButton = Button;
|
|
204
281
|
function ConsciaIconButton({
|
|
205
282
|
size = "icon",
|
|
206
283
|
...props
|
|
207
284
|
}) {
|
|
208
|
-
return /* @__PURE__ */
|
|
285
|
+
return /* @__PURE__ */ jsx7(Button, { size, ...props });
|
|
209
286
|
}
|
|
210
287
|
var ConsciaCard = Card;
|
|
211
288
|
var ConsciaCardContent = CardContent;
|
|
@@ -217,7 +294,7 @@ function ConsciaCardHeader({
|
|
|
217
294
|
...props
|
|
218
295
|
}) {
|
|
219
296
|
if (!actionRight) {
|
|
220
|
-
return /* @__PURE__ */
|
|
297
|
+
return /* @__PURE__ */ jsx7(CardHeader, { className, ...props, children });
|
|
221
298
|
}
|
|
222
299
|
return /* @__PURE__ */ jsxs(
|
|
223
300
|
CardHeader,
|
|
@@ -228,8 +305,8 @@ function ConsciaCardHeader({
|
|
|
228
305
|
),
|
|
229
306
|
...props,
|
|
230
307
|
children: [
|
|
231
|
-
/* @__PURE__ */
|
|
232
|
-
/* @__PURE__ */
|
|
308
|
+
/* @__PURE__ */ jsx7("div", { className: "grid gap-2", children }),
|
|
309
|
+
/* @__PURE__ */ jsx7("div", { className: "justify-self-end", children: actionRight })
|
|
233
310
|
]
|
|
234
311
|
}
|
|
235
312
|
);
|
|
@@ -253,12 +330,12 @@ var ConsciaTableHead = TableHead;
|
|
|
253
330
|
var ConsciaTableRow = TableRow;
|
|
254
331
|
|
|
255
332
|
// src/primitives/field.tsx
|
|
256
|
-
import { jsx as
|
|
333
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
257
334
|
function Field({
|
|
258
335
|
className,
|
|
259
336
|
...props
|
|
260
337
|
}) {
|
|
261
|
-
return /* @__PURE__ */
|
|
338
|
+
return /* @__PURE__ */ jsx8(
|
|
262
339
|
"div",
|
|
263
340
|
{
|
|
264
341
|
"data-slot": "field",
|
|
@@ -271,7 +348,7 @@ function FieldGroup({
|
|
|
271
348
|
className,
|
|
272
349
|
...props
|
|
273
350
|
}) {
|
|
274
|
-
return /* @__PURE__ */
|
|
351
|
+
return /* @__PURE__ */ jsx8(
|
|
275
352
|
"div",
|
|
276
353
|
{
|
|
277
354
|
"data-slot": "field-group",
|
|
@@ -284,7 +361,7 @@ function FieldLabel({
|
|
|
284
361
|
className,
|
|
285
362
|
...props
|
|
286
363
|
}) {
|
|
287
|
-
return /* @__PURE__ */
|
|
364
|
+
return /* @__PURE__ */ jsx8(
|
|
288
365
|
"label",
|
|
289
366
|
{
|
|
290
367
|
"data-slot": "field-label",
|
|
@@ -297,7 +374,7 @@ function FieldDescription({
|
|
|
297
374
|
className,
|
|
298
375
|
...props
|
|
299
376
|
}) {
|
|
300
|
-
return /* @__PURE__ */
|
|
377
|
+
return /* @__PURE__ */ jsx8(
|
|
301
378
|
"p",
|
|
302
379
|
{
|
|
303
380
|
"data-slot": "field-description",
|
|
@@ -310,7 +387,7 @@ function FieldError({
|
|
|
310
387
|
className,
|
|
311
388
|
...props
|
|
312
389
|
}) {
|
|
313
|
-
return /* @__PURE__ */
|
|
390
|
+
return /* @__PURE__ */ jsx8(
|
|
314
391
|
"p",
|
|
315
392
|
{
|
|
316
393
|
"data-slot": "field-error",
|
|
@@ -322,7 +399,7 @@ function FieldError({
|
|
|
322
399
|
|
|
323
400
|
// src/primitives/form-select.tsx
|
|
324
401
|
import * as React from "react";
|
|
325
|
-
import { jsx as
|
|
402
|
+
import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
326
403
|
var emptyValue = "__conscia_empty_select_value__";
|
|
327
404
|
function toSelectValue(value) {
|
|
328
405
|
if (value === void 0) {
|
|
@@ -358,7 +435,7 @@ function FormSelect({
|
|
|
358
435
|
}
|
|
359
436
|
onValueChange?.(actualValue);
|
|
360
437
|
}
|
|
361
|
-
return /* @__PURE__ */
|
|
438
|
+
return /* @__PURE__ */ jsx9("div", { className: cn("min-w-0", className), onClick, children: /* @__PURE__ */ jsxs2(
|
|
362
439
|
Select,
|
|
363
440
|
{
|
|
364
441
|
name,
|
|
@@ -367,8 +444,8 @@ function FormSelect({
|
|
|
367
444
|
disabled,
|
|
368
445
|
onValueChange: handleValueChange,
|
|
369
446
|
children: [
|
|
370
|
-
/* @__PURE__ */
|
|
371
|
-
/* @__PURE__ */
|
|
447
|
+
/* @__PURE__ */ jsx9(SelectTrigger, { id, "aria-label": ariaLabel, className: triggerClassName, children: /* @__PURE__ */ jsx9(SelectValue, { placeholder }) }),
|
|
448
|
+
/* @__PURE__ */ jsx9(SelectContent, { className: contentClassName, children: /* @__PURE__ */ jsx9(SelectGroup, { children: options.map((option) => /* @__PURE__ */ jsx9(
|
|
372
449
|
SelectItem,
|
|
373
450
|
{
|
|
374
451
|
value: toSelectValue(option.value) ?? emptyValue,
|
|
@@ -385,12 +462,12 @@ var ConsciaFormSelect = FormSelect;
|
|
|
385
462
|
|
|
386
463
|
// src/primitives/label.tsx
|
|
387
464
|
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
388
|
-
import { jsx as
|
|
465
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
389
466
|
function Label({
|
|
390
467
|
className,
|
|
391
468
|
...props
|
|
392
469
|
}) {
|
|
393
|
-
return /* @__PURE__ */
|
|
470
|
+
return /* @__PURE__ */ jsx10(
|
|
394
471
|
LabelPrimitive.Root,
|
|
395
472
|
{
|
|
396
473
|
"data-slot": "label",
|
|
@@ -406,7 +483,7 @@ function Label({
|
|
|
406
483
|
// src/primitives/searchable-select.tsx
|
|
407
484
|
import * as React2 from "react";
|
|
408
485
|
import { Check, ChevronsUpDown, Search, X } from "lucide-react";
|
|
409
|
-
import { jsx as
|
|
486
|
+
import { jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
410
487
|
function SearchableSelect({
|
|
411
488
|
id,
|
|
412
489
|
name,
|
|
@@ -503,10 +580,10 @@ function SearchableSelect({
|
|
|
503
580
|
}
|
|
504
581
|
}
|
|
505
582
|
return /* @__PURE__ */ jsxs3("div", { ref: rootRef, "data-slot": "searchable-select", className: cn("relative min-w-0", className), children: [
|
|
506
|
-
name ? /* @__PURE__ */
|
|
583
|
+
name ? /* @__PURE__ */ jsx11("input", { type: "hidden", name, value }) : null,
|
|
507
584
|
/* @__PURE__ */ jsxs3("div", { className: "relative", children: [
|
|
508
|
-
/* @__PURE__ */
|
|
509
|
-
/* @__PURE__ */
|
|
585
|
+
/* @__PURE__ */ jsx11(Search, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground", "aria-hidden": "true" }),
|
|
586
|
+
/* @__PURE__ */ jsx11(
|
|
510
587
|
Input,
|
|
511
588
|
{
|
|
512
589
|
id,
|
|
@@ -540,7 +617,7 @@ function SearchableSelect({
|
|
|
540
617
|
onKeyDown
|
|
541
618
|
}
|
|
542
619
|
),
|
|
543
|
-
clearable && value ? /* @__PURE__ */
|
|
620
|
+
clearable && value ? /* @__PURE__ */ jsx11(
|
|
544
621
|
Button,
|
|
545
622
|
{
|
|
546
623
|
type: "button",
|
|
@@ -554,12 +631,12 @@ function SearchableSelect({
|
|
|
554
631
|
onValueChange("");
|
|
555
632
|
setSearch("");
|
|
556
633
|
},
|
|
557
|
-
children: /* @__PURE__ */
|
|
634
|
+
children: /* @__PURE__ */ jsx11(X, {})
|
|
558
635
|
}
|
|
559
636
|
) : null,
|
|
560
|
-
/* @__PURE__ */
|
|
637
|
+
/* @__PURE__ */ jsx11(ChevronsUpDown, { className: "pointer-events-none absolute right-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground", "aria-hidden": "true" })
|
|
561
638
|
] }),
|
|
562
|
-
open ? /* @__PURE__ */
|
|
639
|
+
open ? /* @__PURE__ */ jsx11(
|
|
563
640
|
"div",
|
|
564
641
|
{
|
|
565
642
|
id: listboxId,
|
|
@@ -584,14 +661,14 @@ function SearchableSelect({
|
|
|
584
661
|
onClick: () => select(option),
|
|
585
662
|
children: [
|
|
586
663
|
/* @__PURE__ */ jsxs3("span", { className: "grid min-w-0 flex-1 gap-0.5", children: [
|
|
587
|
-
/* @__PURE__ */
|
|
588
|
-
option.description ? /* @__PURE__ */
|
|
664
|
+
/* @__PURE__ */ jsx11("span", { className: "truncate font-medium", children: option.label }),
|
|
665
|
+
option.description ? /* @__PURE__ */ jsx11("span", { className: "truncate text-[length:var(--ds-menu-label-size)] text-muted-foreground", children: option.description }) : null
|
|
589
666
|
] }),
|
|
590
|
-
option.value === value ? /* @__PURE__ */
|
|
667
|
+
option.value === value ? /* @__PURE__ */ jsx11(Check, { className: "size-4 shrink-0 text-success-foreground", "aria-hidden": "true" }) : null
|
|
591
668
|
]
|
|
592
669
|
},
|
|
593
670
|
option.value
|
|
594
|
-
)) : /* @__PURE__ */
|
|
671
|
+
)) : /* @__PURE__ */ jsx11("p", { className: "px-3 py-6 text-center text-[length:var(--ds-menu-item-size)] text-muted-foreground", children: emptyMessage })
|
|
595
672
|
}
|
|
596
673
|
) : null
|
|
597
674
|
] });
|
|
@@ -607,6 +684,7 @@ export {
|
|
|
607
684
|
AvatarFallback,
|
|
608
685
|
badgeVariants,
|
|
609
686
|
Badge,
|
|
687
|
+
BrandIcon,
|
|
610
688
|
Switch,
|
|
611
689
|
Textarea,
|
|
612
690
|
ConsciaButton,
|
|
@@ -642,4 +720,4 @@ export {
|
|
|
642
720
|
Label,
|
|
643
721
|
SearchableSelect
|
|
644
722
|
};
|
|
645
|
-
//# sourceMappingURL=chunk-
|
|
723
|
+
//# sourceMappingURL=chunk-CTRJ24EO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/alert.tsx","../src/primitives/avatar.tsx","../src/primitives/badge.tsx","../src/primitives/brand-icon.tsx","../src/primitives/switch.tsx","../src/primitives/textarea.tsx","../src/primitives/compat.tsx","../src/primitives/field.tsx","../src/primitives/form-select.tsx","../src/primitives/label.tsx","../src/primitives/searchable-select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[auto_1fr] items-start gap-x-3 rounded-[var(--ds-radius-surface)] border px-4 py-3.5 text-sm [&>svg]:mt-0.5 [&>svg]:size-5\",\n {\n variants: {\n variant: {\n default: \"border-border-default bg-card text-foreground\",\n information:\n \"border-information-border bg-information-background text-information-foreground\",\n success:\n \"border-success-border bg-success-background text-success-foreground\",\n warning:\n \"border-warning-border bg-warning-background text-warning-foreground\",\n danger: \"border-danger-border bg-danger-background text-danger-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\"font-medium leading-5\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\"col-start-2 mt-0.5 text-sm leading-5 opacity-80\", className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertDescription, AlertTitle, alertVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"./utils\";\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\"relative flex size-8 shrink-0 overflow-hidden rounded-full\", className)}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\"flex size-full items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarFallback, AvatarImage };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-1.5 py-0.5 text-[var(--ds-metadata)] font-medium leading-4 transition-colors\",\n {\n variants: {\n variant: {\n default: \"border-primary bg-primary text-primary-foreground\",\n accent: \"border-selection-border bg-selection-background text-selection-foreground\",\n secondary: \"border-neutral-border bg-neutral-background text-neutral-foreground\",\n neutral: \"border-neutral-border bg-neutral-background text-neutral-foreground\",\n outline: \"border-border-default text-foreground\",\n information: \"border-information-border bg-information-background text-information-foreground\",\n info: \"border-information-border bg-information-background text-information-foreground\",\n success: \"border-success-border bg-success-background text-success-foreground\",\n warning: \"border-warning-border bg-warning-background text-warning-foreground\",\n danger: \"border-danger-border bg-danger-background text-danger-foreground\",\n destructive: \"border-danger-border bg-danger-background text-danger-foreground\"\n }\n },\n defaultVariants: {\n variant: \"neutral\"\n }\n },\n);\n\nfunction Badge({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return <span data-slot=\"badge\" className={cn(badgeVariants({ variant, className }))} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst CONSCIA_SYMBOL_PATH = [\n \"M171.225 63.8139L173.637 66.1116L203.794 34.4551L201.382 32.1575L171.225 63.8139Z\",\n \"M184.012 78.9693L185.769 81.8487L223.091 59.076L221.334 56.1966L184.012 78.9693Z\",\n \"M192.436 96.8858L193.417 100.222L235.362 87.8847L234.381 84.5488L192.436 96.8858Z\",\n \"M195.949 116.334L196.037 119.987L239.746 118.926L239.657 115.273L195.949 116.334Z\",\n \"M194.341 135.989L193.42 139.796L235.913 150.084L236.835 146.277L194.341 135.989Z\",\n \"M187.759 154.526L185.708 158.285L224.091 179.221L226.142 175.461L187.759 154.526Z\",\n \"M176.683 170.712L173.394 174.165L205.05 204.322L208.34 200.868L176.683 170.712Z\",\n \"M161.899 183.49L157.288 186.304L180.06 223.626L184.672 220.812L161.899 183.49Z\",\n \"M144.425 192.058L138.472 193.809L150.809 235.754L156.762 234.003L144.425 192.058Z\",\n \"M125.438 195.913L118.244 196.088L119.305 239.796L126.499 239.622L125.438 195.913Z\",\n \"M106.176 194.873L98.0421 192.903L87.754 235.397L95.8882 237.366L106.176 194.873Z\",\n \"M87.8408 189.056L79.3505 184.425L58.4147 222.808L66.905 227.439L87.8408 189.056Z\",\n \"M71.5444 178.838L63.5819 171.253L33.4252 202.91L41.3878 210.495L71.5444 178.838Z\",\n \"M58.2896 164.821L51.9185 154.379L14.5961 177.152L20.9672 187.593L58.2896 164.821Z\",\n \"M48.9443 147.836L45.1912 135.075L3.24659 147.412L6.99972 160.173L48.9443 147.836Z\",\n \"M44.1724 128.938L43.8283 114.759L0.119827 115.82L0.463868 129.998L44.1724 128.938Z\",\n \"M44.3613 109.352L47.8648 94.8809L5.37116 84.5928L1.86766 99.0635L44.3613 109.352Z\",\n \"M49.563 90.3812L56.9571 76.825L18.5742 55.8893L11.18 69.4455L49.563 90.3812Z\",\n \"M59.4839 73.314L70.4267 61.8269L38.7702 31.6703L27.8274 43.1574L59.4839 73.314Z\",\n \"M73.4951 59.3251L87.307 50.8976L64.5343 13.5752L50.7224 22.0027L73.4951 59.3251Z\",\n \"M90.6772 49.3891L106.414 44.7604L94.0775 2.81575L78.3402 7.44453L90.6772 49.3891Z\",\n \"M109.88 44.2086L126.426 43.8071L125.366 0.098614L108.82 0.500089L109.88 44.2086Z\",\n \"M129.802 44.1632L145.967 48.0768L156.255 5.58318L140.09 1.66954L129.802 44.1632Z\",\n \"M149.087 49.2798L163.709 57.2553L184.645 18.8723L170.023 10.8969L149.087 49.2798Z\",\n \"M152.448 160.384L141.06 167.332L154.089 188.685L165.477 181.736L152.448 160.384Z\",\n \"M140.881 167.41L128.103 171.168L135.161 195.165L147.939 191.407L140.881 167.41Z\",\n \"M127.834 171.202L114.653 171.522L115.26 196.528L128.441 196.209L127.834 171.202Z\",\n \"M114.192 171.456L101.624 168.413L95.738 192.724L108.306 195.767L114.192 171.456Z\",\n \"M100.907 168.109L89.889 162.1L77.9114 184.059L88.9296 190.069L100.907 168.109Z\",\n \"M88.9224 161.353L80.2035 153.047L62.9505 171.158L71.6694 179.464L88.9224 161.353Z\",\n \"M79.1143 151.631L73.1721 141.893L51.8195 154.921L57.7617 164.66L79.1143 151.631Z\",\n \"M72.2163 139.615L69.2075 129.385L45.2105 136.444L48.2193 146.673L72.2163 139.615Z\",\n \"M68.7593 126.163L68.5209 116.339L43.5147 116.946L43.7531 126.77L68.7593 126.163Z\",\n \"M69.0161 112.256L71.1176 103.576L46.8064 97.6899L44.7049 106.37L69.0161 112.256Z\",\n \"M72.979 98.9209L76.8146 91.8888L54.8552 79.9112L51.0196 86.9432L72.979 98.9209Z\",\n \"M80.3506 87.1414L85.2494 81.999L67.1383 64.746L62.2395 69.8884L80.3506 87.1414Z\",\n \"M90.5762 77.7753L95.9023 74.5255L82.8738 53.1729L77.5476 56.4227L90.5762 77.7753Z\",\n \"M102.889 71.4875L108.114 69.9508L101.056 45.9537L95.831 47.4905L102.889 71.4875Z\",\n \"M116.381 68.7043L121.119 68.5894L120.513 43.5832L115.775 43.6981L116.381 68.7043Z\",\n \"M130.08 69.5886L134.092 70.56L139.978 46.2488L135.966 45.2775L130.08 69.5886Z\",\n \"M143.01 74.0389L146.183 75.7697L158.161 53.8103L154.988 52.0795L143.01 74.0389Z\",\n \"M154.273 81.705L156.588 83.9108L173.841 65.7997L171.526 63.5939L154.273 81.705Z\",\n \"M163.102 92.0197L164.599 94.4735L185.952 81.445L184.455 78.9911L163.102 92.0197Z\",\n \"M168.91 104.243L169.655 106.775L193.652 99.7164L192.907 97.1844L168.91 104.243Z\",\n \"M171.325 117.515L171.386 120.001L196.392 119.394L196.331 116.909L171.325 117.515Z\",\n \"M170.21 130.922L169.644 133.264L193.955 139.15L194.522 136.808L170.21 130.922Z\",\n \"M165.673 143.549L164.523 145.658L186.482 157.636L187.633 155.527L165.673 143.549Z\",\n \"M158.032 154.558L156.355 156.318L174.467 173.571L176.143 171.811L158.032 154.558Z\",\n].join(\" \");\n\ntype BrandIconProps = React.ComponentPropsWithoutRef<\"svg\">;\n\nfunction BrandIcon({\n \"aria-label\": ariaLabel,\n className,\n ...props\n}: BrandIconProps) {\n return (\n <svg\n data-slot=\"brand-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"240\"\n height=\"240\"\n viewBox=\"0 0 240 240\"\n fill=\"none\"\n focusable=\"false\"\n role={ariaLabel ? \"img\" : undefined}\n aria-hidden={ariaLabel ? undefined : true}\n aria-label={ariaLabel}\n className={cn(\"size-6 shrink-0 text-foreground dark:text-white\", className)}\n {...props}\n >\n <path d={CONSCIA_SYMBOL_PATH} fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport { BrandIcon };\nexport type { BrandIconProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\n\nimport { cn } from \"./utils\";\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\"min-h-28 w-full rounded-[var(--ds-field-control-radius)] border border-input bg-surface-control px-[var(--ds-field-control-padding-x)] py-3 text-sm leading-5 outline-none transition-colors placeholder:text-sm placeholder:leading-5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50\", className)}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import * as React from \"react\";\n\nimport { Button } from \"./button\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"./card\";\nimport { Checkbox } from \"./checkbox\";\nimport { Input } from \"./input\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { Switch } from \"./switch\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./table\";\nimport { Textarea } from \"./textarea\";\nimport { cn } from \"./utils\";\n\n/**\n * Temporary Admin UI migration aliases. New product code should import the\n * clean primitive names from @conscia-labs/design-system.\n */\nconst ConsciaButton = Button;\n\nfunction ConsciaIconButton({\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n return <Button size={size} {...props} />;\n}\n\nconst ConsciaCard = Card;\nconst ConsciaCardContent = CardContent;\nconst ConsciaCardDescription = CardDescription;\n\nfunction ConsciaCardHeader({\n actionRight,\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CardHeader> & {\n actionRight?: React.ReactNode;\n}) {\n if (!actionRight) {\n return (\n <CardHeader className={className} {...props}>\n {children}\n </CardHeader>\n );\n }\n\n return (\n <CardHeader\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-start gap-4\",\n className,\n )}\n {...props}\n >\n <div className=\"grid gap-2\">{children}</div>\n <div className=\"justify-self-end\">{actionRight}</div>\n </CardHeader>\n );\n}\n\nconst ConsciaCardTitle = CardTitle;\nconst ConsciaCheckbox = Checkbox;\nconst ConsciaInput = Input;\nconst ConsciaSwitch = Switch;\nconst ConsciaTextarea = Textarea;\nconst ConsciaSelect = Select;\nconst ConsciaSelectContent = SelectContent;\nconst ConsciaSelectGroup = SelectGroup;\nconst ConsciaSelectItem = SelectItem;\nconst ConsciaSelectTrigger = SelectTrigger;\nconst ConsciaSelectValue = SelectValue;\nconst ConsciaTable = Table;\nconst ConsciaTableBody = TableBody;\nconst ConsciaTableCell = TableCell;\nconst ConsciaTableHeader = TableHeader;\nconst ConsciaTableHead = TableHead;\nconst ConsciaTableRow = TableRow;\n\nexport {\n ConsciaButton,\n ConsciaCard,\n ConsciaCardContent,\n ConsciaCardDescription,\n ConsciaCardHeader,\n ConsciaCardTitle,\n ConsciaCheckbox,\n ConsciaIconButton,\n ConsciaInput,\n ConsciaSwitch,\n ConsciaTextarea,\n ConsciaSelect,\n ConsciaSelectContent,\n ConsciaSelectGroup,\n ConsciaSelectItem,\n ConsciaSelectTrigger,\n ConsciaSelectValue,\n ConsciaTable,\n ConsciaTableBody,\n ConsciaTableCell,\n ConsciaTableHeader,\n ConsciaTableHead,\n ConsciaTableRow,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nfunction Field({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field\"\n className={cn(\"grid gap-[var(--ds-field-label-gap)]\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\"grid gap-[var(--ds-field-gap)]\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"field-label\"\n className={cn(\"text-[length:var(--ds-field-label-size)] font-medium leading-[var(--ds-field-label-line-height)] text-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\"mt-[var(--ds-field-message-gap)] text-[var(--ds-metadata)] text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction FieldError({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-error\"\n className={cn(\"mt-[var(--ds-field-message-gap)] text-[var(--ds-metadata)] font-medium text-danger-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport { Field, FieldDescription, FieldError, FieldGroup, FieldLabel };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { cn } from \"./utils\";\n\ntype FormSelectOption = {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n};\n\ntype FormSelectProps = {\n id?: string;\n name?: string;\n value?: string;\n defaultValue?: string;\n required?: boolean;\n disabled?: boolean;\n placeholder?: string;\n options: FormSelectOption[];\n className?: string;\n triggerClassName?: string;\n contentClassName?: string;\n onValueChange?: (value: string) => void;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n \"aria-label\"?: string;\n};\n\nconst emptyValue = \"__conscia_empty_select_value__\";\n\nfunction toSelectValue(value: string | undefined) {\n if (value === undefined) {\n return undefined;\n }\n\n return value === \"\" ? emptyValue : value;\n}\n\nfunction fromSelectValue(value: string) {\n return value === emptyValue ? \"\" : value;\n}\n\nfunction FormSelect({\n name,\n id,\n value,\n defaultValue,\n required,\n disabled,\n placeholder,\n options,\n className,\n triggerClassName,\n contentClassName,\n onValueChange,\n onClick,\n \"aria-label\": ariaLabel,\n}: FormSelectProps) {\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? \"\");\n const currentValue = value ?? internalValue;\n\n function handleValueChange(nextValue: string) {\n const actualValue = fromSelectValue(nextValue);\n\n if (value === undefined) {\n setInternalValue(actualValue);\n }\n\n onValueChange?.(actualValue);\n }\n\n return (\n <div className={cn(\"min-w-0\", className)} onClick={onClick}>\n <Select\n name={name}\n value={toSelectValue(currentValue)}\n required={required}\n disabled={disabled}\n onValueChange={handleValueChange}\n >\n <SelectTrigger id={id} aria-label={ariaLabel} className={triggerClassName}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent className={contentClassName}>\n <SelectGroup>\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={toSelectValue(option.value) ?? emptyValue}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n );\n}\n\nconst ConsciaFormSelect = FormSelect;\n\nexport { ConsciaFormSelect, FormSelect };\nexport type { FormSelectOption, FormSelectProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"./utils\";\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-[length:var(--ds-field-label-size)] font-medium leading-[var(--ds-field-label-line-height)] text-foreground select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronsUpDown, Search, X } from \"lucide-react\";\n\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { cn } from \"./utils\";\n\ntype SearchableSelectOption = {\n value: string;\n label: string;\n description?: string;\n keywords?: string[];\n disabled?: boolean;\n};\n\ntype SearchableSelectProps = {\n id?: string;\n name?: string;\n value?: string;\n options: SearchableSelectOption[];\n onValueChange: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n clearable?: boolean;\n clearLabel?: string;\n optionsLabel?: string;\n className?: string;\n \"aria-label\"?: string;\n};\n\nfunction SearchableSelect({\n id,\n name,\n value = \"\",\n options,\n onValueChange,\n placeholder = \"Select an option\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No matching options.\",\n disabled = false,\n clearable = false,\n clearLabel = \"Clear selection\",\n optionsLabel,\n className,\n \"aria-label\": ariaLabel,\n}: SearchableSelectProps) {\n const generatedId = React.useId();\n const listboxId = `${id ?? generatedId}-listbox`;\n const rootRef = React.useRef<HTMLDivElement>(null);\n const activeOptionRef = React.useRef<HTMLButtonElement>(null);\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(0);\n const selected = options.find((option) => option.value === value);\n const normalizedSearch = search.trim().toLowerCase();\n const filteredOptions = normalizedSearch\n ? options.filter((option) =>\n [option.label, option.description, ...(option.keywords ?? [])]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase()\n .includes(normalizedSearch),\n )\n : options;\n const enabledIndexes = filteredOptions.reduce<number[]>((indexes, option, index) => {\n if (!option.disabled) {\n indexes.push(index);\n }\n\n return indexes;\n }, []);\n const resolvedActiveIndex = enabledIndexes.includes(activeIndex)\n ? activeIndex\n : (enabledIndexes[0] ?? -1);\n\n React.useEffect(() => {\n if (!open) {\n return;\n }\n\n function closeWhenOutside(event: PointerEvent) {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"pointerdown\", closeWhenOutside);\n return () => document.removeEventListener(\"pointerdown\", closeWhenOutside);\n }, [open]);\n\n React.useEffect(() => {\n if (open) {\n activeOptionRef.current?.scrollIntoView({ block: \"nearest\" });\n }\n }, [open, resolvedActiveIndex]);\n\n function select(option: SearchableSelectOption) {\n if (option.disabled) {\n return;\n }\n\n onValueChange(option.value);\n setSearch(\"\");\n setOpen(false);\n }\n\n function onKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => {\n const position = enabledIndexes.indexOf(current);\n return enabledIndexes[Math.min(enabledIndexes.length - 1, position + 1)] ?? -1;\n });\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => {\n const position = enabledIndexes.indexOf(current);\n return enabledIndexes[Math.max(0, position === -1 ? 0 : position - 1)] ?? -1;\n });\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex(enabledIndexes[0] ?? -1);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex(enabledIndexes.at(-1) ?? -1);\n } else if (event.key === \"Enter\" && open && filteredOptions[resolvedActiveIndex]) {\n event.preventDefault();\n select(filteredOptions[resolvedActiveIndex]);\n } else if (event.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n } else if (event.key === \"Tab\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n\n return (\n <div ref={rootRef} data-slot=\"searchable-select\" className={cn(\"relative min-w-0\", className)}>\n {name ? <input type=\"hidden\" name={name} value={value} /> : null}\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" aria-hidden=\"true\" />\n <Input\n id={id}\n role=\"combobox\"\n aria-label={ariaLabel}\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={open && filteredOptions[resolvedActiveIndex] ? `${listboxId}-${resolvedActiveIndex}` : undefined}\n autoComplete=\"off\"\n className=\"px-9\"\n disabled={disabled}\n placeholder={open ? searchPlaceholder : placeholder}\n value={open ? search : selected?.label ?? \"\"}\n onFocus={(event) => {\n setOpen(true);\n setSearch(\"\");\n event.currentTarget.select();\n }}\n onClick={() => {\n if (!open) {\n setOpen(true);\n setSearch(\"\");\n }\n }}\n onChange={(event) => {\n setSearch(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={onKeyDown}\n />\n {clearable && value ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={disabled}\n className=\"absolute right-8 top-1/2 -translate-y-1/2\"\n aria-label={clearLabel}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n onValueChange(\"\");\n setSearch(\"\");\n }}\n >\n <X />\n </Button>\n ) : null}\n <ChevronsUpDown className=\"pointer-events-none absolute right-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" aria-hidden=\"true\" />\n </div>\n\n {open ? (\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={optionsLabel ?? (ariaLabel ? `${ariaLabel} options` : \"Options\")}\n className=\"absolute z-50 mt-1 max-h-72 w-full overflow-y-auto rounded-md border border-border-subtle bg-popover p-1 text-popover-foreground shadow-md\"\n >\n {filteredOptions.length ? filteredOptions.map((option, index) => (\n <button\n key={option.value}\n id={`${listboxId}-${index}`}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n aria-disabled={option.disabled || undefined}\n disabled={option.disabled}\n tabIndex={-1}\n ref={index === resolvedActiveIndex ? activeOptionRef : undefined}\n data-active={index === resolvedActiveIndex}\n className=\"flex w-full items-center gap-3 rounded-sm px-3 py-2 text-left text-[length:var(--ds-menu-item-size)] outline-none hover:bg-surface-muted focus-visible:bg-surface-muted data-[active=true]:bg-surface-muted disabled:pointer-events-none disabled:opacity-50\"\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => select(option)}\n >\n <span className=\"grid min-w-0 flex-1 gap-0.5\">\n <span className=\"truncate font-medium\">{option.label}</span>\n {option.description ? <span className=\"truncate text-[length:var(--ds-menu-label-size)] text-muted-foreground\">{option.description}</span> : null}\n </span>\n {option.value === value ? <Check className=\"size-4 shrink-0 text-success-foreground\" aria-hidden=\"true\" /> : null}\n </button>\n )) : <p className=\"px-3 py-6 text-center text-[length:var(--ds-menu-item-size)] text-muted-foreground\">{emptyMessage}</p>}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport { SearchableSelect };\nexport type { SearchableSelectOption, SearchableSelectProps };\n"],"mappings":"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","names":["jsx","cva","jsx","cva","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","React","jsx","jsxs"]}
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
TooltipContent,
|
|
53
53
|
TooltipProvider,
|
|
54
54
|
TooltipTrigger
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ZCBZHRTV.js";
|
|
56
56
|
import {
|
|
57
57
|
cn
|
|
58
58
|
} from "./chunk-JU5DQXFC.js";
|
|
@@ -653,27 +653,30 @@ function NavigationGroup({
|
|
|
653
653
|
"section",
|
|
654
654
|
{
|
|
655
655
|
"data-slot": "navigation-group",
|
|
656
|
-
className: cn(
|
|
656
|
+
className: cn(
|
|
657
|
+
"flex min-w-0 flex-col gap-[var(--ds-sidebar-label-gap)]",
|
|
658
|
+
className
|
|
659
|
+
),
|
|
657
660
|
children: [
|
|
658
661
|
label ? /* @__PURE__ */ jsxs4(
|
|
659
662
|
"div",
|
|
660
663
|
{
|
|
661
664
|
"data-slot": "navigation-group-label",
|
|
662
|
-
className: "flex min-h-6 items-center gap-2 px-2 pb-
|
|
665
|
+
className: "flex min-h-6 items-center gap-2 px-2 pb-0 pt-2 text-[length:var(--ds-sidebar-group-label-size)] font-semibold uppercase leading-[var(--ds-sidebar-group-label-line-height)] tracking-[0.04em] text-sidebar-group-label group-data-[sidebar-state=collapsed]/shell:hidden",
|
|
663
666
|
children: [
|
|
664
667
|
label,
|
|
665
668
|
count !== void 0 ? /* @__PURE__ */ jsx5("span", { className: "ml-auto shrink-0 text-[length:var(--ds-metadata)] font-medium normal-case tracking-normal text-sidebar-group-count", children: count }) : null
|
|
666
669
|
]
|
|
667
670
|
}
|
|
668
671
|
) : null,
|
|
669
|
-
/* @__PURE__ */ jsx5("div", { className: "flex min-w-0 flex-col gap-
|
|
672
|
+
/* @__PURE__ */ jsx5("div", { className: "flex min-w-0 flex-col gap-[var(--ds-sidebar-item-gap)]", children })
|
|
670
673
|
]
|
|
671
674
|
}
|
|
672
675
|
);
|
|
673
676
|
}
|
|
674
677
|
function navigationItemClasses(active) {
|
|
675
678
|
return cn(
|
|
676
|
-
"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm font-medium text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[var(--ds-sidebar-item-height)] lg:min-h-0",
|
|
679
|
+
"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm font-medium leading-5 text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[var(--ds-sidebar-item-height)] lg:min-h-0",
|
|
677
680
|
"hover:bg-sidebar-hover hover:text-sidebar-primary-text",
|
|
678
681
|
"focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring",
|
|
679
682
|
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50",
|
|
@@ -733,7 +736,7 @@ function NavigationSubItem({
|
|
|
733
736
|
"data-slot": "navigation-sub-item",
|
|
734
737
|
"data-active": active ? "true" : void 0,
|
|
735
738
|
className: cn(
|
|
736
|
-
"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[calc(var(--ds-sidebar-item-height)-0.25rem)] lg:min-h-0",
|
|
739
|
+
"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm leading-5 text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[calc(var(--ds-sidebar-item-height)-0.25rem)] lg:min-h-0",
|
|
737
740
|
"hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring",
|
|
738
741
|
"group-data-[sidebar-state=collapsed]/shell:hidden [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:stroke-[1.75] [&>svg]:text-sidebar-icon",
|
|
739
742
|
active && "bg-sidebar-active text-sidebar-active-foreground shadow-[inset_3px_0_0_var(--sidebar-active-indicator)] hover:bg-sidebar-active hover:text-sidebar-active-foreground [&>svg]:text-sidebar-active-foreground",
|
|
@@ -752,7 +755,7 @@ function NavigationSubList({
|
|
|
752
755
|
{
|
|
753
756
|
"data-slot": "navigation-sub-list",
|
|
754
757
|
className: cn(
|
|
755
|
-
"ml-4 flex min-w-0 flex-col gap-
|
|
758
|
+
"ml-4 flex min-w-0 flex-col gap-[var(--ds-sidebar-item-gap)] border-l border-sidebar-border pl-2 group-data-[sidebar-state=collapsed]/shell:hidden",
|
|
756
759
|
className
|
|
757
760
|
),
|
|
758
761
|
...props
|
|
@@ -829,7 +832,7 @@ function SidebarSearch({
|
|
|
829
832
|
type: "button",
|
|
830
833
|
"data-slot": "sidebar-search-trigger",
|
|
831
834
|
className: cn(
|
|
832
|
-
"flex min-h-[var(--ds-sidebar-item-height-touch)] w-full cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-left text-sm font-medium text-sidebar-secondary-text outline-none transition-colors hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring lg:min-h-[var(--ds-sidebar-item-height)]",
|
|
835
|
+
"flex min-h-[var(--ds-sidebar-item-height-touch)] w-full cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-left text-sm font-medium leading-5 text-sidebar-secondary-text outline-none transition-colors hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring lg:min-h-[var(--ds-sidebar-item-height)]",
|
|
833
836
|
"group-data-[sidebar-state=collapsed]/shell:justify-center group-data-[sidebar-state=collapsed]/shell:px-0",
|
|
834
837
|
className
|
|
835
838
|
),
|
|
@@ -913,7 +916,7 @@ function TopBar({
|
|
|
913
916
|
{
|
|
914
917
|
"data-slot": "top-bar",
|
|
915
918
|
className: cn(
|
|
916
|
-
"sticky top-0 z-10 flex min-h-[var(--ds-topbar-height)] shrink-0 items-center justify-between gap-3 border-b border-border-subtle bg-background/96 px-
|
|
919
|
+
"sticky top-0 z-10 flex h-[var(--ds-topbar-height)] min-h-[var(--ds-topbar-height)] shrink-0 items-center justify-between gap-3 border-b border-border-subtle bg-background/96 px-[var(--ds-topbar-padding-x)] backdrop-blur md:px-[var(--ds-topbar-padding-x-wide)]",
|
|
917
920
|
"supports-[backdrop-filter]:bg-background/88",
|
|
918
921
|
className
|
|
919
922
|
),
|
|
@@ -1578,13 +1581,16 @@ function SidebarNavigation({
|
|
|
1578
1581
|
{
|
|
1579
1582
|
"data-slot": "sidebar-navigation",
|
|
1580
1583
|
"aria-label": "Primary navigation",
|
|
1581
|
-
className: cn(
|
|
1584
|
+
className: cn(
|
|
1585
|
+
"flex flex-col gap-[var(--ds-sidebar-group-gap)]",
|
|
1586
|
+
className
|
|
1587
|
+
),
|
|
1582
1588
|
children: entries.map((entry) => {
|
|
1583
1589
|
if (!isSection(entry)) {
|
|
1584
1590
|
return /* @__PURE__ */ jsx16(
|
|
1585
1591
|
NavigationGroup,
|
|
1586
1592
|
{
|
|
1587
|
-
className: entry.startsSection ? "mt-
|
|
1593
|
+
className: entry.startsSection ? "mt-[var(--ds-sidebar-group-gap)]" : void 0,
|
|
1588
1594
|
children: /* @__PURE__ */ jsx16(NavigationItem, { asChild: true, active: entry.active, tooltip: entry.label, children: renderLink(entry, {
|
|
1589
1595
|
"aria-current": entry.active ? "page" : void 0,
|
|
1590
1596
|
"aria-label": entry.label,
|
|
@@ -1604,7 +1610,7 @@ function SidebarNavigation({
|
|
|
1604
1610
|
/* @__PURE__ */ jsx16(
|
|
1605
1611
|
NavigationGroup,
|
|
1606
1612
|
{
|
|
1607
|
-
className: entry.startsSection ? "mt-
|
|
1613
|
+
className: entry.startsSection ? "mt-[var(--ds-sidebar-group-gap)]" : void 0,
|
|
1608
1614
|
children: /* @__PURE__ */ jsx16(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs14(
|
|
1609
1615
|
NavigationItem,
|
|
1610
1616
|
{
|
|
@@ -1879,4 +1885,4 @@ export {
|
|
|
1879
1885
|
ErrorState,
|
|
1880
1886
|
ValueMeter
|
|
1881
1887
|
};
|
|
1882
|
-
//# sourceMappingURL=chunk-
|
|
1888
|
+
//# sourceMappingURL=chunk-VIVMQAJM.js.map
|