@bison-lab/admin-ui 3.23.0 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -4,6 +4,26 @@ import { Checkbox as Checkbox$1, Select as Select$1, Switch as Switch$1 } from "
4
4
  import * as react from "react";
5
5
  import { ButtonHTMLAttributes, ComponentPropsWithoutRef, HTMLAttributes, InputHTMLAttributes, ReactNode, TextareaHTMLAttributes } from "react";
6
6
 
7
+ //#region src/badge.d.ts
8
+ declare const BADGE_VARIANTS: readonly ["primary", "secondary", "success", "danger", "warning", "info", "neutral-subtle", "neutral-strong"];
9
+ type BadgeVariant = (typeof BADGE_VARIANTS)[number];
10
+ type BadgeCommon = {
11
+ variant?: BadgeVariant;
12
+ className?: string;
13
+ };
14
+ type BadgeProps = (BadgeCommon & {
15
+ as?: "span";
16
+ } & HTMLAttributes<HTMLSpanElement>) | (BadgeCommon & {
17
+ as: "button";
18
+ } & ButtonHTMLAttributes<HTMLButtonElement>);
19
+ /** Pill status. Span by default; pass `as="button"` for a clickable chip. Label case is the caller's. */
20
+ declare function Badge({
21
+ variant,
22
+ as,
23
+ className,
24
+ ...props
25
+ }: BadgeProps): react_jsx_runtime0.JSX.Element;
26
+ //#endregion
7
27
  //#region src/button.d.ts
8
28
  type ButtonVariant = "primary" | "secondary" | "outline" | "ghost" | "danger";
9
29
  declare function Button({
@@ -23,11 +43,19 @@ declare function Checkbox({
23
43
  }: ComponentPropsWithoutRef<typeof Checkbox$1.Root>): react_jsx_runtime0.JSX.Element;
24
44
  //#endregion
25
45
  //#region src/provider.d.ts
26
- /** Mount once around kit chrome. Primitives read these styles; they do not inject them. */
46
+ /** A `#rrggbb` the kit may write onto `--bl-kit-accent`. Anything else is ignored. */
47
+ declare function kitAccent(value: string | undefined): string | undefined;
48
+ /**
49
+ * Mount once around kit chrome. Primitives read these styles; they do not
50
+ * inject them. Pass `accent` to set `--bl-kit-accent` on `:root` so portaled
51
+ * dialogs and selects follow it. Sites can also set that variable themselves.
52
+ */
27
53
  declare function KitProvider({
28
- children
54
+ children,
55
+ accent
29
56
  }: {
30
57
  children: ReactNode;
58
+ accent?: string;
31
59
  }): react_jsx_runtime0.JSX.Element;
32
60
  //#endregion
33
61
  //#region src/label.d.ts
@@ -102,7 +130,8 @@ declare function Dialog({
102
130
  onCancel,
103
131
  confirmLabel,
104
132
  onConfirm,
105
- confirmVariant
133
+ confirmVariant,
134
+ confirmDisabled
106
135
  }: {
107
136
  open: boolean;
108
137
  title: string;
@@ -112,6 +141,7 @@ declare function Dialog({
112
141
  confirmLabel?: string;
113
142
  onConfirm?: () => void;
114
143
  confirmVariant?: DialogConfirmVariant;
144
+ confirmDisabled?: boolean;
115
145
  }): react_jsx_runtime0.JSX.Element | null;
116
146
  //#endregion
117
147
  //#region src/confirm-dialog.d.ts
@@ -237,5 +267,5 @@ declare function Canvas({
237
267
  children: ReactNode;
238
268
  }): react_jsx_runtime0.JSX.Element;
239
269
  //#endregion
240
- export { Button, Canvas, Checkbox, ConfirmDialog, Dialog, Field, Fold, type FoldAction, type FoldTone, Input, ItemRail, Kicker, KindGlyph, KitProvider, Label, LinkGlyph, MainHead, MegaGlyph, RailSlot, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Stack, Switch, Textarea, TypeCard, TypeCards };
270
+ export { BADGE_VARIANTS, Badge, type BadgeVariant, Button, Canvas, Checkbox, ConfirmDialog, Dialog, Field, Fold, type FoldAction, type FoldTone, Input, ItemRail, Kicker, KindGlyph, KitProvider, Label, LinkGlyph, MainHead, MegaGlyph, RailSlot, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Stack, Switch, Textarea, TypeCard, TypeCards, kitAccent };
241
271
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/button.tsx","../src/checkbox.tsx","../src/provider.tsx","../src/label.tsx","../src/kicker.tsx","../src/fold.tsx","../src/stack.tsx","../src/dialog.tsx","../src/confirm-dialog.tsx","../src/input.tsx","../src/switch.tsx","../src/textarea.tsx","../src/glyphs.tsx","../src/type-cards.tsx","../src/select.tsx","../src/workspace.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/badge.tsx","../src/button.tsx","../src/checkbox.tsx","../src/provider.tsx","../src/label.tsx","../src/kicker.tsx","../src/fold.tsx","../src/stack.tsx","../src/dialog.tsx","../src/confirm-dialog.tsx","../src/input.tsx","../src/switch.tsx","../src/textarea.tsx","../src/glyphs.tsx","../src/type-cards.tsx","../src/select.tsx","../src/workspace.tsx"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -2,6 +2,31 @@
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { Checkbox as Checkbox$1, Select as Select$1, Switch as Switch$1 } from "radix-ui";
4
4
  import { useId, useState } from "react";
5
+ //#region src/badge.tsx
6
+ const BADGE_VARIANTS = [
7
+ "primary",
8
+ "secondary",
9
+ "success",
10
+ "danger",
11
+ "warning",
12
+ "info",
13
+ "neutral-subtle",
14
+ "neutral-strong"
15
+ ];
16
+ /** Pill status. Span by default; pass `as="button"` for a clickable chip. Label case is the caller's. */
17
+ function Badge({ variant = "neutral-subtle", as, className, ...props }) {
18
+ const Tag = as ?? "span";
19
+ return /* @__PURE__ */ jsx(Tag, {
20
+ className: [
21
+ "bl-nav-kit__badge",
22
+ `bl-nav-kit__badge--${variant}`,
23
+ className
24
+ ].filter(Boolean).join(" "),
25
+ ...Tag === "button" ? { type: "button" } : {},
26
+ ...props
27
+ });
28
+ }
29
+ //#endregion
5
30
  //#region src/button.tsx
6
31
  function Button({ variant = "primary", className, type = "button", children, ...props }) {
7
32
  return /* @__PURE__ */ jsx("button", {
@@ -44,87 +69,97 @@ function Checkbox({ className, ...props }) {
44
69
  const CSS = `
45
70
  .bl-nav-kit__types{display:grid;grid-template-columns:1fr 1fr;gap:12px}
46
71
  .bl-nav-kit__types--compact{margin:0 0 10px;gap:6px}
47
- .bl-nav-kit__type{display:flex;flex-direction:column;align-items:stretch;gap:0;border:1px solid var(--line2,#444854);background:#1b1d22;border-radius:10px;padding:16px;text-align:left;color:inherit;cursor:pointer;font:inherit}
72
+ .bl-nav-kit__type{display:flex;flex-direction:column;align-items:stretch;gap:0;border:1px solid var(--theme-elevation-150,#e4e4e7);background:var(--theme-elevation-50,#f4f4f5);border-radius:10px;padding:16px;text-align:left;color:var(--theme-elevation-800,#27272a);cursor:pointer;font:inherit}
48
73
  .bl-nav-kit__type-row{display:flex;align-items:center;gap:12px;min-width:0}
49
- .bl-nav-kit__types--compact .bl-nav-kit__type{align-items:center;justify-content:center;border-radius:7px;padding:8px 6px;font-size:12px;background:#15171b}
50
- .bl-nav-kit__types--compact .bl-nav-kit__type-row{gap:8px;justify-content:center}
51
- .bl-nav-kit__type small{display:block;margin-top:.3rem;color:var(--muted,var(--theme-elevation-500));font-weight:400}
52
- .bl-nav-kit__type-icon{display:grid;place-items:center;width:2rem;height:2rem;border-radius:7px;background:#292c33;flex:none}
53
- .bl-nav-kit__glyph{width:28px;height:28px;display:grid;place-items:center;border-radius:7px;background:#292c33;color:#c9ccd4;flex:none}
54
- .bl-nav-kit__glyph[data-kind="megaMenu"]{background:#32142a;color:#ff91ce}
74
+ .bl-nav-kit__types--compact .bl-nav-kit__type{align-items:center;justify-content:center;border-radius:7px;padding:8px 6px;font-size:12px;background:var(--theme-elevation-0,#fff)}
75
+ .bl-nav-kit__type small{display:block;margin-top:.3rem;color:var(--theme-elevation-500,#71717a);font-weight:400}
76
+ .bl-nav-kit__type-icon{display:grid;place-items:center;width:2rem;height:2rem;border-radius:7px;background:var(--theme-elevation-150,#e4e4e7);flex:none}
77
+ .bl-nav-kit__glyph{width:28px;height:28px;display:grid;place-items:center;border-radius:7px;background:var(--theme-elevation-150,#e4e4e7);color:var(--theme-elevation-800,#27272a);flex:none}
78
+ .bl-nav-kit__glyph[data-kind="megaMenu"]{background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 18%,var(--theme-elevation-0,#fff));color:var(--bl-kit-accent,#2563eb)}
55
79
  .bl-nav-kit__type-icon .bl-nav-kit__glyph{width:100%;height:100%;background:transparent;color:inherit}
56
80
  .bl-nav-kit__types--compact .bl-nav-kit__type-icon{width:1.25rem;height:1.25rem;background:transparent}
57
- .bl-nav-kit__type:hover{border-color:var(--bl-kit-accent,var(--pink,#e60088))}
58
- .bl-nav-kit__type.is-active,.bl-nav-kit__types--compact .bl-nav-kit__type.is-active{border-color:var(--bl-kit-accent,var(--pink,#e60088));background:#261722}
59
- .bl-nav-kit__modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:rgba(0,0,0,.62);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:#f6f7f9}
60
- .bl-nav-kit__modal-card{width:min(36rem,calc(100vw - 2rem));background:#15171b;border:1px solid #3a3d46;border-radius:12px;padding:1.25rem 0 0;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.45)}
81
+ .bl-nav-kit__type:hover{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
82
+ .bl-nav-kit__type.is-active,.bl-nav-kit__types--compact .bl-nav-kit__type.is-active{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 12%,var(--theme-elevation-0,#fff))}
83
+ .bl-nav-kit__modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:var(--theme-overlay,rgba(0,0,0,.62));font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:var(--theme-elevation-800,#27272a)}
84
+ .bl-nav-kit__modal-card{width:min(36rem,calc(100vw - 2rem));background:var(--theme-elevation-0,#fff);border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:12px;padding:1.25rem 0 0;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.45)}
61
85
  .bl-nav-kit__modal-card h2{margin:0 1.25rem .75rem;font-size:18px}
62
- .bl-nav-kit__modal-card p{margin:0;color:#989daa}
86
+ .bl-nav-kit__modal-card p{margin:0;color:var(--theme-elevation-500,#71717a)}
63
87
  .bl-nav-kit__modal-body{min-width:0;padding:0 1.25rem}
64
- .bl-nav-kit__modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem;padding:1rem 1.25rem;border-top:1px solid #3a3d46}
88
+ .bl-nav-kit__modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem;padding:1rem 1.25rem;border-top:1px solid var(--theme-elevation-150,#e4e4e7)}
65
89
  .bl-nav-kit__danger{color:var(--theme-error-500,#ff7381)}
66
90
  .bl-nav-kit__btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 14px;border-radius:8px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:550;cursor:pointer}
67
91
  .bl-nav-kit__btn:disabled{opacity:.5;cursor:not-allowed}
68
- .bl-nav-kit__btn--primary{border:0;background:var(--bl-kit-accent,var(--pink,#e60088));color:#fff}
92
+ .bl-nav-kit__btn--primary{border:0;background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));color:#fff}
69
93
  .bl-nav-kit__btn--primary:hover{filter:brightness(1.08)}
70
- .bl-nav-kit__btn--secondary{border:0;background:#292c33;color:#f6f7f9}
71
- .bl-nav-kit__btn--secondary:hover{background:#343845}
72
- .bl-nav-kit__btn--outline{border:1px solid #3a3d46;background:transparent;color:#f6f7f9}
73
- .bl-nav-kit__btn--outline:hover{border-color:var(--bl-kit-accent,var(--pink,#e60088))}
74
- .bl-nav-kit__btn--ghost{border:1px solid transparent;background:transparent;color:#f6f7f9}
75
- .bl-nav-kit__btn--ghost:hover{background:#1d1f24}
76
- .bl-nav-kit__btn--danger{border:1px solid var(--theme-error-500,#ff7381);background:#261722;color:var(--theme-error-500,#ff7381)}
77
- .bl-nav-kit__btn--danger:hover{background:#32181f}
78
- .bl-nav-kit__input,.bl-nav-kit__textarea{width:100%;min-height:38px;padding:8px 10px;border:1px solid #3a3d46;border-radius:8px;background:#1d1f24;color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}
94
+ .bl-nav-kit__btn--secondary{border:0;background:var(--theme-elevation-800,#27272a);color:var(--theme-elevation-0,#fff)}
95
+ .bl-nav-kit__btn--secondary:hover{filter:brightness(1.08)}
96
+ .bl-nav-kit__btn--outline{border:1px solid var(--theme-elevation-250,#d4d4d8);background:transparent;color:var(--theme-elevation-800,#27272a)}
97
+ .bl-nav-kit__btn--outline:hover{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
98
+ .bl-nav-kit__btn--ghost{border:1px solid transparent;background:transparent;color:var(--theme-elevation-800,#27272a)}
99
+ .bl-nav-kit__btn--ghost:hover{background:var(--theme-elevation-100,#f4f4f5)}
100
+ .bl-nav-kit__btn--danger{border:1px solid var(--theme-error-500,#ff7381);background:color-mix(in srgb,var(--theme-error-500,#ff7381) 16%,var(--theme-elevation-0,#fff));color:var(--theme-error-500,#ff7381)}
101
+ .bl-nav-kit__btn--danger:hover{background:color-mix(in srgb,var(--theme-error-500,#ff7381) 24%,var(--theme-elevation-0,#fff))}
102
+ .bl-nav-kit__input,.bl-nav-kit__textarea{width:100%;min-height:38px;padding:8px 10px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-input-bg,var(--theme-elevation-0,#fff));color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}
79
103
  .bl-nav-kit__textarea{min-height:5.5rem;resize:vertical}
80
- .bl-nav-kit__input:hover,.bl-nav-kit__textarea:hover,.bl-nav-kit__input:focus,.bl-nav-kit__textarea:focus{border-color:var(--bl-kit-accent,var(--pink,#e60088));outline:none}
104
+ .bl-nav-kit__input:hover,.bl-nav-kit__textarea:hover,.bl-nav-kit__input:focus,.bl-nav-kit__textarea:focus{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));outline:none}
81
105
  .bl-nav-kit__input:disabled,.bl-nav-kit__textarea:disabled{opacity:.5;cursor:not-allowed}
82
- .bl-nav-kit__input::placeholder,.bl-nav-kit__textarea::placeholder{color:#989daa}
83
- .bl-nav-kit__check{display:flex;align-items:center;gap:10px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:#f6f7f9;cursor:pointer}
84
- .bl-nav-kit__checkbox{position:relative;width:18px;height:18px;flex:none;border:1px solid #3a3d46;border-radius:3px;background:#1d1f24;color:#fff;cursor:pointer;padding:0}
85
- .bl-nav-kit__checkbox:hover,.bl-nav-kit__checkbox[data-state="checked"]{border-color:var(--bl-kit-accent,var(--pink,#e60088))}
86
- .bl-nav-kit__checkbox[data-state="checked"]{background:var(--bl-kit-accent,var(--pink,#e60088))}
106
+ .bl-nav-kit__input::placeholder,.bl-nav-kit__textarea::placeholder{color:var(--theme-elevation-500,#71717a)}
107
+ .bl-nav-kit__check{display:flex;align-items:center;gap:10px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:var(--theme-elevation-800,#27272a);cursor:pointer}
108
+ .bl-nav-kit__check:has(.bl-nav-kit__checkbox[data-disabled]){opacity:.5;cursor:not-allowed}
109
+ .bl-nav-kit__checkbox{position:relative;width:18px;height:18px;flex:none;border:1px solid var(--theme-elevation-250,#a1a1aa);border-radius:3px;background:var(--theme-elevation-0,#fff);color:#fff;cursor:pointer;padding:0}
110
+ .bl-nav-kit__checkbox:hover,.bl-nav-kit__checkbox[data-state="checked"]{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
111
+ .bl-nav-kit__checkbox[data-state="checked"]{background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
87
112
  .bl-nav-kit__checkbox[data-disabled]{opacity:.5;cursor:not-allowed}
88
113
  .bl-nav-kit__checkbox-mark{position:absolute;inset:0;display:grid;place-items:center}
89
114
  .bl-nav-kit__checkbox-mark svg{width:12px;height:12px;display:block}
90
- .bl-nav-kit__switch{width:40px;height:22px;flex:none;padding:0;border:0;border-radius:999px;background:#3a3d46;position:relative;cursor:pointer}
91
- .bl-nav-kit__switch[data-state="checked"]{background:var(--bl-kit-accent,var(--pink,#e60088))}
115
+ .bl-nav-kit__switch{width:40px;height:22px;flex:none;padding:0;border:0;border-radius:999px;background:var(--theme-elevation-250,#d4d4d8);position:relative;cursor:pointer}
116
+ .bl-nav-kit__switch[data-state="checked"]{background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
92
117
  .bl-nav-kit__switch[data-disabled]{opacity:.5;cursor:not-allowed}
93
- .bl-nav-kit__switch-thumb{display:block;width:18px;height:18px;border-radius:999px;background:#f6f7f9;transform:translateX(2px);transition:transform .12s ease}
118
+ .bl-nav-kit__switch-thumb{display:block;width:18px;height:18px;border-radius:999px;background:#fff;transform:translateX(2px);transition:transform .12s ease}
94
119
  .bl-nav-kit__switch[data-state="checked"] .bl-nav-kit__switch-thumb{transform:translateX(20px)}
95
- .bl-nav-kit__select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:38px;padding:8px 10px;border:1px solid #3a3d46;border-radius:8px;background:#1d1f24;color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;text-align:left;cursor:pointer}
96
- .bl-nav-kit__select-trigger:hover,.bl-nav-kit__select-trigger[data-state="open"]{border-color:var(--bl-kit-accent,var(--pink,#e60088))}
120
+ .bl-nav-kit__select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:38px;padding:8px 10px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-input-bg,var(--theme-elevation-0,#fff));color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;text-align:left;cursor:pointer}
121
+ .bl-nav-kit__select-trigger:hover,.bl-nav-kit__select-trigger[data-state="open"]{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}
97
122
  .bl-nav-kit__select-trigger[data-disabled]{opacity:.5;cursor:not-allowed}
98
123
  .bl-nav-kit__select-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
99
- .bl-nav-kit__select-chevron{flex:none;color:#989daa;display:grid;place-items:center}
100
- .bl-nav-kit__select-content{z-index:40;min-width:var(--radix-select-trigger-width);background:#15171b;border:1px solid #3a3d46;border-radius:10px;padding:4px;box-shadow:0 12px 32px rgba(0,0,0,.45);color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}
124
+ .bl-nav-kit__select-chevron{flex:none;color:var(--theme-elevation-500,#71717a);display:grid;place-items:center}
125
+ .bl-nav-kit__select-content{z-index:10050;min-width:var(--radix-select-trigger-width);background:var(--theme-elevation-0,#fff);border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:10px;padding:4px;box-shadow:0 12px 32px rgba(0,0,0,.45);color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}
101
126
  .bl-nav-kit__select-viewport{display:grid;gap:2px}
102
127
  .bl-nav-kit__select-item{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:7px;cursor:pointer;outline:none;font:inherit}
103
- .bl-nav-kit__select-item[data-highlighted],.bl-nav-kit__select-item[data-state="checked"]{background:#261722}
128
+ .bl-nav-kit__select-item[data-highlighted],.bl-nav-kit__select-item[data-state="checked"]{background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 12%,var(--theme-elevation-0,#fff))}
104
129
  .bl-nav-kit__select-item[data-disabled]{opacity:.45;pointer-events:none}
105
- .bl-nav-kit__select-check{flex:none;color:var(--bl-kit-accent,var(--pink,#e60088));display:grid;place-items:center}
130
+ .bl-nav-kit__select-check{flex:none;color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));display:grid;place-items:center}
106
131
  .bl-nav-kit__field{display:flex;flex-direction:column;align-items:stretch;gap:8px;margin:0 0 16px}
107
132
  .bl-nav-kit__label{display:block;font:12px/1.2 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:700;color:inherit}
133
+ .bl-nav-kit__badge{display:inline-flex;align-items:center;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:10px;font-weight:700;line-height:1.2;padding:.32rem .55rem;border:0;border-radius:999px;background:transparent;color:inherit}
134
+ button.bl-nav-kit__badge{cursor:pointer;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:10px;font-weight:700;line-height:1.2}
135
+ .bl-nav-kit__badge--primary{background:var(--bl-kit-accent,var(--brand-primary,#2563eb));color:#fff}
136
+ .bl-nav-kit__badge--secondary{background:#71717a;color:#fff}
137
+ .bl-nav-kit__badge--success{background:#16a34a;color:#fff}
138
+ .bl-nav-kit__badge--danger{background:#e5484d;color:#fff}
139
+ .bl-nav-kit__badge--warning{background:#d97706;color:#fff}
140
+ .bl-nav-kit__badge--info{background:#0889b2;color:#fff}
141
+ .bl-nav-kit__badge--neutral-subtle{background:var(--theme-elevation-150,#e4e4e7);color:var(--theme-elevation-800,#27272a)}
142
+ .bl-nav-kit__badge--neutral-strong{background:var(--theme-elevation-800,#27272a);color:var(--theme-elevation-0,#fff)}
108
143
  .bl-nav-kit__kicker{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#989daa);font-weight:800}
109
- .bl-nav-kit__fold{border:1px solid var(--line,#30333b);overflow:visible;margin:0;min-width:0;color:inherit}
110
- .bl-nav-kit__fold--light{background:var(--panel,#141518);border-color:var(--line2,#444854);border-radius:12px}
111
- .bl-nav-kit__fold--dark{background:#111216;border-radius:10px}
112
- .bl-nav-kit__fold-head{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--line,#30333b)}
113
- .bl-nav-kit__fold--light .bl-nav-kit__fold-head{background:#1b1d22}
144
+ .bl-nav-kit__fold{border:1px solid var(--theme-elevation-150,#e4e4e7);overflow:visible;margin:0;min-width:0;color:var(--theme-elevation-800,#27272a)}
145
+ .bl-nav-kit__fold--light{background:var(--theme-elevation-50,#f4f4f5);border-color:var(--theme-elevation-150,#e4e4e7);border-radius:12px}
146
+ .bl-nav-kit__fold--dark{background:var(--theme-elevation-0,#fff);border-radius:10px}
147
+ .bl-nav-kit__fold-head{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--theme-elevation-150,#e4e4e7)}
148
+ .bl-nav-kit__fold--light .bl-nav-kit__fold-head{background:var(--theme-elevation-100,#f4f4f5)}
114
149
  .bl-nav-kit__fold[data-open="false"] .bl-nav-kit__fold-head{border-bottom:0}
115
150
  .bl-nav-kit__fold-toggle{flex:1;display:flex;align-items:center;gap:8px;min-width:0;border:0;background:transparent;padding:0;text-align:left;color:inherit;cursor:pointer;font:inherit}
116
151
  .bl-nav-kit__fold-chevron{flex:none;transition:transform .12s ease}
117
152
  .bl-nav-kit__fold[data-open="false"] .bl-nav-kit__fold-chevron{transform:rotate(-90deg)}
118
153
  .bl-nav-kit__fold-title{font-size:13px;font-weight:700}
119
- .bl-nav-kit__fold-badge{font-size:11px;color:#c2c5cc;background:#292c33;border-radius:999px;padding:3px 8px}
120
- .bl-nav-kit__fold-toggle > small{color:var(--muted,#989daa)}
154
+ .bl-nav-kit__fold-badge{font-size:11px;color:var(--theme-elevation-800,#27272a);background:var(--theme-elevation-150,#e4e4e7);border-radius:999px;padding:3px 8px}
155
+ .bl-nav-kit__fold-toggle > small{color:var(--theme-elevation-500,#71717a)}
121
156
  .bl-nav-kit__fold-body{padding:16px}
122
157
  .bl-nav-kit__fold-body[hidden]{display:none}
123
158
  .bl-nav-kit__stack{display:flex;flex-direction:column;gap:12px}
124
159
  .bl-nav-kit__fold-menu{position:relative}
125
160
  .bl-nav-kit__fold-menu > button{border:0;background:transparent;color:inherit;cursor:pointer}
126
- .bl-nav-kit__fold-menu-pop{position:absolute;right:0;top:34px;z-index:12;min-width:140px;padding:4px;border:1px solid #3a3d46;border-radius:8px;background:#1b1d22}
127
- .bl-nav-kit__fold-menu-pop button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:7px 8px;border-radius:6px;color:#d8dbe1;cursor:pointer}
161
+ .bl-nav-kit__fold-menu-pop{position:absolute;right:0;top:34px;z-index:12;min-width:140px;padding:4px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-elevation-0,#fff)}
162
+ .bl-nav-kit__fold-menu-pop button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:7px 8px;border-radius:6px;color:var(--theme-elevation-800,#27272a);cursor:pointer}
128
163
  .bl-nav-kit__fold-menu-pop button:disabled{opacity:.45;cursor:not-allowed}
129
164
  `;
130
165
  function KitStyles() {
@@ -136,9 +171,27 @@ function KitStyles() {
136
171
  }
137
172
  //#endregion
138
173
  //#region src/provider.tsx
139
- /** Mount once around kit chrome. Primitives read these styles; they do not inject them. */
140
- function KitProvider({ children }) {
141
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(KitStyles, {}), children] });
174
+ const ACCENT = /^#[0-9A-Fa-f]{6}$/;
175
+ /** A `#rrggbb` the kit may write onto `--bl-kit-accent`. Anything else is ignored. */
176
+ function kitAccent(value) {
177
+ return value && ACCENT.test(value) ? value : void 0;
178
+ }
179
+ /**
180
+ * Mount once around kit chrome. Primitives read these styles; they do not
181
+ * inject them. Pass `accent` to set `--bl-kit-accent` on `:root` so portaled
182
+ * dialogs and selects follow it. Sites can also set that variable themselves.
183
+ */
184
+ function KitProvider({ children, accent }) {
185
+ const hex = kitAccent(accent);
186
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
187
+ /* @__PURE__ */ jsx(KitStyles, {}),
188
+ hex ? /* @__PURE__ */ jsx("style", {
189
+ href: "bl-admin-ui-accent",
190
+ precedence: "high",
191
+ children: `:root{--bl-kit-accent:${hex};--pink:${hex};--brand-primary:${hex}}`
192
+ }) : null,
193
+ children
194
+ ] });
142
195
  }
143
196
  //#endregion
144
197
  //#region src/label.tsx
@@ -256,7 +309,7 @@ function Stack({ className, ...props }) {
256
309
  }
257
310
  //#endregion
258
311
  //#region src/dialog.tsx
259
- function Dialog({ open, title, children, cancelLabel = "Cancel", onCancel, confirmLabel, onConfirm, confirmVariant = "primary" }) {
312
+ function Dialog({ open, title, children, cancelLabel = "Cancel", onCancel, confirmLabel, onConfirm, confirmVariant = "primary", confirmDisabled = false }) {
260
313
  const titleId = useId();
261
314
  if (!open) return null;
262
315
  return /* @__PURE__ */ jsx("div", {
@@ -284,6 +337,7 @@ function Dialog({ open, title, children, cancelLabel = "Cancel", onCancel, confi
284
337
  }), confirmLabel && onConfirm ? /* @__PURE__ */ jsx(Button, {
285
338
  variant: confirmVariant,
286
339
  onClick: onConfirm,
340
+ disabled: confirmDisabled,
287
341
  children: confirmLabel
288
342
  }) : null]
289
343
  })
@@ -514,6 +568,6 @@ function Canvas({ children }) {
514
568
  });
515
569
  }
516
570
  //#endregion
517
- export { Button, Canvas, Checkbox, ConfirmDialog, Dialog, Field, Fold, Input, ItemRail, Kicker, KindGlyph, KitProvider, Label, LinkGlyph, MainHead, MegaGlyph, RailSlot, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Stack, Switch, Textarea, TypeCard, TypeCards };
571
+ export { BADGE_VARIANTS, Badge, Button, Canvas, Checkbox, ConfirmDialog, Dialog, Field, Fold, Input, ItemRail, Kicker, KindGlyph, KitProvider, Label, LinkGlyph, MainHead, MegaGlyph, RailSlot, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Stack, Switch, Textarea, TypeCard, TypeCards, kitAccent };
518
572
 
519
573
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["CheckboxPrimitive","SwitchPrimitive","SelectPrimitive"],"sources":["../src/button.tsx","../src/checkbox.tsx","../src/styles.tsx","../src/provider.tsx","../src/label.tsx","../src/kicker.tsx","../src/fold.tsx","../src/stack.tsx","../src/dialog.tsx","../src/confirm-dialog.tsx","../src/input.tsx","../src/switch.tsx","../src/textarea.tsx","../src/glyphs.tsx","../src/type-cards.tsx","../src/select.tsx","../src/workspace.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\n\nexport function Button({\n variant = \"primary\",\n className,\n type = \"button\",\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { variant?: ButtonVariant }) {\n return (\n <button\n type={type}\n className={[\"bl-nav-kit__btn\", `bl-nav-kit__btn--${variant}`, className].filter(Boolean).join(\" \")}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\n\nexport function Checkbox({\n className,\n ...props\n}: ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root className={[\"bl-nav-kit__checkbox\", className].filter(Boolean).join(\" \")} {...props}>\n <CheckboxPrimitive.Indicator className=\"bl-nav-kit__checkbox-mark\" aria-hidden>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <path\n d=\"M20 6 9 17l-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n","const CSS = `\n.bl-nav-kit__types{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.bl-nav-kit__types--compact{margin:0 0 10px;gap:6px}\n.bl-nav-kit__type{display:flex;flex-direction:column;align-items:stretch;gap:0;border:1px solid var(--line2,#444854);background:#1b1d22;border-radius:10px;padding:16px;text-align:left;color:inherit;cursor:pointer;font:inherit}\n.bl-nav-kit__type-row{display:flex;align-items:center;gap:12px;min-width:0}\n.bl-nav-kit__types--compact .bl-nav-kit__type{align-items:center;justify-content:center;border-radius:7px;padding:8px 6px;font-size:12px;background:#15171b}\n.bl-nav-kit__types--compact .bl-nav-kit__type-row{gap:8px;justify-content:center}\n.bl-nav-kit__type small{display:block;margin-top:.3rem;color:var(--muted,var(--theme-elevation-500));font-weight:400}\n.bl-nav-kit__type-icon{display:grid;place-items:center;width:2rem;height:2rem;border-radius:7px;background:#292c33;flex:none}\n.bl-nav-kit__glyph{width:28px;height:28px;display:grid;place-items:center;border-radius:7px;background:#292c33;color:#c9ccd4;flex:none}\n.bl-nav-kit__glyph[data-kind=\"megaMenu\"]{background:#32142a;color:#ff91ce}\n.bl-nav-kit__type-icon .bl-nav-kit__glyph{width:100%;height:100%;background:transparent;color:inherit}\n.bl-nav-kit__types--compact .bl-nav-kit__type-icon{width:1.25rem;height:1.25rem;background:transparent}\n.bl-nav-kit__type:hover{border-color:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__type.is-active,.bl-nav-kit__types--compact .bl-nav-kit__type.is-active{border-color:var(--bl-kit-accent,var(--pink,#e60088));background:#261722}\n.bl-nav-kit__modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:rgba(0,0,0,.62);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:#f6f7f9}\n.bl-nav-kit__modal-card{width:min(36rem,calc(100vw - 2rem));background:#15171b;border:1px solid #3a3d46;border-radius:12px;padding:1.25rem 0 0;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.45)}\n.bl-nav-kit__modal-card h2{margin:0 1.25rem .75rem;font-size:18px}\n.bl-nav-kit__modal-card p{margin:0;color:#989daa}\n.bl-nav-kit__modal-body{min-width:0;padding:0 1.25rem}\n.bl-nav-kit__modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem;padding:1rem 1.25rem;border-top:1px solid #3a3d46}\n.bl-nav-kit__danger{color:var(--theme-error-500,#ff7381)}\n.bl-nav-kit__btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 14px;border-radius:8px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:550;cursor:pointer}\n.bl-nav-kit__btn:disabled{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__btn--primary{border:0;background:var(--bl-kit-accent,var(--pink,#e60088));color:#fff}\n.bl-nav-kit__btn--primary:hover{filter:brightness(1.08)}\n.bl-nav-kit__btn--secondary{border:0;background:#292c33;color:#f6f7f9}\n.bl-nav-kit__btn--secondary:hover{background:#343845}\n.bl-nav-kit__btn--outline{border:1px solid #3a3d46;background:transparent;color:#f6f7f9}\n.bl-nav-kit__btn--outline:hover{border-color:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__btn--ghost{border:1px solid transparent;background:transparent;color:#f6f7f9}\n.bl-nav-kit__btn--ghost:hover{background:#1d1f24}\n.bl-nav-kit__btn--danger{border:1px solid var(--theme-error-500,#ff7381);background:#261722;color:var(--theme-error-500,#ff7381)}\n.bl-nav-kit__btn--danger:hover{background:#32181f}\n.bl-nav-kit__input,.bl-nav-kit__textarea{width:100%;min-height:38px;padding:8px 10px;border:1px solid #3a3d46;border-radius:8px;background:#1d1f24;color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}\n.bl-nav-kit__textarea{min-height:5.5rem;resize:vertical}\n.bl-nav-kit__input:hover,.bl-nav-kit__textarea:hover,.bl-nav-kit__input:focus,.bl-nav-kit__textarea:focus{border-color:var(--bl-kit-accent,var(--pink,#e60088));outline:none}\n.bl-nav-kit__input:disabled,.bl-nav-kit__textarea:disabled{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__input::placeholder,.bl-nav-kit__textarea::placeholder{color:#989daa}\n.bl-nav-kit__check{display:flex;align-items:center;gap:10px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:#f6f7f9;cursor:pointer}\n.bl-nav-kit__checkbox{position:relative;width:18px;height:18px;flex:none;border:1px solid #3a3d46;border-radius:3px;background:#1d1f24;color:#fff;cursor:pointer;padding:0}\n.bl-nav-kit__checkbox:hover,.bl-nav-kit__checkbox[data-state=\"checked\"]{border-color:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__checkbox[data-state=\"checked\"]{background:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__checkbox[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__checkbox-mark{position:absolute;inset:0;display:grid;place-items:center}\n.bl-nav-kit__checkbox-mark svg{width:12px;height:12px;display:block}\n.bl-nav-kit__switch{width:40px;height:22px;flex:none;padding:0;border:0;border-radius:999px;background:#3a3d46;position:relative;cursor:pointer}\n.bl-nav-kit__switch[data-state=\"checked\"]{background:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__switch[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__switch-thumb{display:block;width:18px;height:18px;border-radius:999px;background:#f6f7f9;transform:translateX(2px);transition:transform .12s ease}\n.bl-nav-kit__switch[data-state=\"checked\"] .bl-nav-kit__switch-thumb{transform:translateX(20px)}\n.bl-nav-kit__select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:38px;padding:8px 10px;border:1px solid #3a3d46;border-radius:8px;background:#1d1f24;color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;text-align:left;cursor:pointer}\n.bl-nav-kit__select-trigger:hover,.bl-nav-kit__select-trigger[data-state=\"open\"]{border-color:var(--bl-kit-accent,var(--pink,#e60088))}\n.bl-nav-kit__select-trigger[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__select-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.bl-nav-kit__select-chevron{flex:none;color:#989daa;display:grid;place-items:center}\n.bl-nav-kit__select-content{z-index:40;min-width:var(--radix-select-trigger-width);background:#15171b;border:1px solid #3a3d46;border-radius:10px;padding:4px;box-shadow:0 12px 32px rgba(0,0,0,.45);color:#f6f7f9;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}\n.bl-nav-kit__select-viewport{display:grid;gap:2px}\n.bl-nav-kit__select-item{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:7px;cursor:pointer;outline:none;font:inherit}\n.bl-nav-kit__select-item[data-highlighted],.bl-nav-kit__select-item[data-state=\"checked\"]{background:#261722}\n.bl-nav-kit__select-item[data-disabled]{opacity:.45;pointer-events:none}\n.bl-nav-kit__select-check{flex:none;color:var(--bl-kit-accent,var(--pink,#e60088));display:grid;place-items:center}\n.bl-nav-kit__field{display:flex;flex-direction:column;align-items:stretch;gap:8px;margin:0 0 16px}\n.bl-nav-kit__label{display:block;font:12px/1.2 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:700;color:inherit}\n.bl-nav-kit__kicker{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#989daa);font-weight:800}\n.bl-nav-kit__fold{border:1px solid var(--line,#30333b);overflow:visible;margin:0;min-width:0;color:inherit}\n.bl-nav-kit__fold--light{background:var(--panel,#141518);border-color:var(--line2,#444854);border-radius:12px}\n.bl-nav-kit__fold--dark{background:#111216;border-radius:10px}\n.bl-nav-kit__fold-head{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--line,#30333b)}\n.bl-nav-kit__fold--light .bl-nav-kit__fold-head{background:#1b1d22}\n.bl-nav-kit__fold[data-open=\"false\"] .bl-nav-kit__fold-head{border-bottom:0}\n.bl-nav-kit__fold-toggle{flex:1;display:flex;align-items:center;gap:8px;min-width:0;border:0;background:transparent;padding:0;text-align:left;color:inherit;cursor:pointer;font:inherit}\n.bl-nav-kit__fold-chevron{flex:none;transition:transform .12s ease}\n.bl-nav-kit__fold[data-open=\"false\"] .bl-nav-kit__fold-chevron{transform:rotate(-90deg)}\n.bl-nav-kit__fold-title{font-size:13px;font-weight:700}\n.bl-nav-kit__fold-badge{font-size:11px;color:#c2c5cc;background:#292c33;border-radius:999px;padding:3px 8px}\n.bl-nav-kit__fold-toggle > small{color:var(--muted,#989daa)}\n.bl-nav-kit__fold-body{padding:16px}\n.bl-nav-kit__fold-body[hidden]{display:none}\n.bl-nav-kit__stack{display:flex;flex-direction:column;gap:12px}\n.bl-nav-kit__fold-menu{position:relative}\n.bl-nav-kit__fold-menu > button{border:0;background:transparent;color:inherit;cursor:pointer}\n.bl-nav-kit__fold-menu-pop{position:absolute;right:0;top:34px;z-index:12;min-width:140px;padding:4px;border:1px solid #3a3d46;border-radius:8px;background:#1b1d22}\n.bl-nav-kit__fold-menu-pop button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:7px 8px;border-radius:6px;color:#d8dbe1;cursor:pointer}\n.bl-nav-kit__fold-menu-pop button:disabled{opacity:.45;cursor:not-allowed}\n`;\n\nexport function KitStyles() {\n return (\n <style href=\"bl-admin-ui\" precedence=\"default\">\n {CSS}\n </style>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { KitStyles } from \"./styles\";\n\n/** Mount once around kit chrome. Primitives read these styles; they do not inject them. */\nexport function KitProvider({ children }: { children: ReactNode }) {\n return (\n <>\n <KitStyles />\n {children}\n </>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\ntype FieldTag = \"label\" | \"div\";\n\n/** Stack a label above its control. The label class owns type; this owns the 8px gap. */\nexport function Field({\n as: Tag = \"label\",\n className,\n ...props\n}: HTMLAttributes<HTMLElement> & { as?: FieldTag }) {\n return <Tag className={[\"bl-nav-kit__field\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n\n/** Visible field name. Sit this in `Field` above the control — do not restyle per screen. */\nexport function Label({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={[\"bl-nav-kit__label\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import type { HTMLAttributes } from \"react\";\n\n/** Uppercase eyebrow. MainHead, the preview note, and later chrome all use this. */\nexport function Kicker({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={[\"bl-nav-kit__kicker\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import { useState, type ReactNode } from \"react\";\n\nexport type FoldAction = {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n danger?: boolean;\n};\n\nexport type FoldTone = \"light\" | \"dark\";\n\nexport function Fold({\n title,\n tone = \"light\",\n badge,\n meta,\n actions,\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n children,\n}: {\n title: string;\n tone?: FoldTone;\n badge?: ReactNode;\n meta?: ReactNode | ((open: boolean) => ReactNode);\n actions?: FoldAction[];\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children?: ReactNode;\n}) {\n const controlled = openProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultOpen);\n const [menu, setMenu] = useState(false);\n const open = controlled ? openProp : uncontrolled;\n\n function setOpen(next: boolean) {\n if (!controlled) setUncontrolled(next);\n onOpenChange?.(next);\n }\n\n const metaNode = typeof meta === \"function\" ? meta(open) : meta;\n const badgeNode =\n badge == null\n ? null\n : typeof badge === \"string\" || typeof badge === \"number\" ? (\n <span className=\"bl-nav-kit__fold-badge\">{badge}</span>\n ) : (\n badge\n );\n\n return (\n <section\n role=\"group\"\n aria-label={title}\n data-open={open ? \"true\" : \"false\"}\n className={[\"bl-nav-kit__fold\", `bl-nav-kit__fold--${tone}`, className].filter(Boolean).join(\" \")}\n >\n <div className=\"bl-nav-kit__fold-head\">\n <button\n type=\"button\"\n className=\"bl-nav-kit__fold-toggle\"\n aria-expanded={open}\n aria-label={open ? `Collapse ${title}` : `Expand ${title}`}\n onClick={() => setOpen(!open)}\n >\n <svg\n className=\"bl-nav-kit__fold-chevron\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n <strong className=\"bl-nav-kit__fold-title\">{title}</strong>\n {badgeNode}\n {metaNode}\n </button>\n {actions?.length ? (\n <div className=\"bl-nav-kit__fold-menu\">\n <button type=\"button\" aria-label={`${title} actions`} onClick={() => setMenu((next) => !next)}>\n ⋯\n </button>\n {menu ? (\n <div className=\"bl-nav-kit__fold-menu-pop\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n disabled={action.disabled}\n className={action.danger ? \"bl-nav-kit__danger\" : undefined}\n onClick={() => {\n action.onClick();\n setMenu(false);\n }}\n >\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n <div className=\"bl-nav-kit__fold-body\" hidden={!open}>\n {children}\n </div>\n </section>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\n/** Vertical list with a locked gap — sections in a column, links in a section, and their add buttons. */\nexport function Stack({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={[\"bl-nav-kit__stack\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import { useId, type ReactNode } from \"react\";\n\nimport { Button, type ButtonVariant } from \"./button\";\n\nexport type DialogConfirmVariant = Extract<ButtonVariant, \"primary\" | \"danger\">;\n\nexport function Dialog({\n open,\n title,\n children,\n cancelLabel = \"Cancel\",\n onCancel,\n confirmLabel,\n onConfirm,\n confirmVariant = \"primary\",\n}: {\n open: boolean;\n title: string;\n children: ReactNode;\n cancelLabel?: string;\n onCancel: () => void;\n confirmLabel?: string;\n onConfirm?: () => void;\n confirmVariant?: DialogConfirmVariant;\n}) {\n const titleId = useId();\n if (!open) return null;\n return (\n <div className=\"bl-nav-kit__modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId}>\n <div className=\"bl-nav-kit__modal-card\">\n <h2 id={titleId}>{title}</h2>\n <div className=\"bl-nav-kit__modal-body\">{children}</div>\n <div className=\"bl-nav-kit__modal-actions\">\n <Button variant=\"outline\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n {confirmLabel && onConfirm ? (\n <Button variant={confirmVariant} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Dialog, type DialogConfirmVariant } from \"./dialog\";\n\nexport function ConfirmDialog({\n open,\n title,\n children,\n cancelLabel,\n confirmLabel,\n onCancel,\n onConfirm,\n confirmVariant = \"primary\",\n}: {\n open: boolean;\n title: string;\n children: ReactNode;\n cancelLabel: string;\n confirmLabel: string;\n onCancel: () => void;\n onConfirm: () => void;\n confirmVariant?: DialogConfirmVariant;\n}) {\n return (\n <Dialog\n open={open}\n title={title}\n cancelLabel={cancelLabel}\n confirmLabel={confirmLabel}\n confirmVariant={confirmVariant}\n onCancel={onCancel}\n onConfirm={onConfirm}\n >\n <p>{children}</p>\n </Dialog>\n );\n}\n","import type { InputHTMLAttributes } from \"react\";\n\nexport function Input({ className, ...props }: InputHTMLAttributes<HTMLInputElement>) {\n return <input className={[\"bl-nav-kit__input\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nexport function Switch({ className, ...props }: ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root className={[\"bl-nav-kit__switch\", className].filter(Boolean).join(\" \")} {...props}>\n <SwitchPrimitive.Thumb className=\"bl-nav-kit__switch-thumb\" />\n </SwitchPrimitive.Root>\n );\n}\n","import type { TextareaHTMLAttributes } from \"react\";\n\nexport function Textarea({ className, ...props }: TextareaHTMLAttributes<HTMLTextAreaElement>) {\n return <textarea className={[\"bl-nav-kit__textarea\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","export type ItemKind = \"navLink\" | \"megaMenu\";\n\n/** Rail / type-card mark. The kit owns the badge; pass `kind` only. */\nexport function KindGlyph({ kind }: { kind: ItemKind }) {\n return (\n <span className=\"bl-nav-kit__glyph\" data-kind={kind} aria-hidden>\n {kind === \"megaMenu\" ? <MegaMark /> : <LinkMark />}\n </span>\n );\n}\n\nexport function LinkGlyph() {\n return <KindGlyph kind=\"navLink\" />;\n}\n\nexport function MegaGlyph() {\n return <KindGlyph kind=\"megaMenu\" />;\n}\n\nfunction LinkMark() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n );\n}\n\nfunction MegaMark() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function TypeCards({\n compact,\n children,\n}: {\n compact?: boolean;\n children: ReactNode;\n}) {\n return (\n <div className={compact ? \"bl-nav-kit__types bl-nav-kit__types--compact\" : \"bl-nav-kit__types\"}>\n {children}\n </div>\n );\n}\n\nexport function TypeCard({\n icon,\n label,\n description,\n onClick,\n active,\n disabled,\n}: {\n icon?: ReactNode;\n label: string;\n description?: string;\n onClick: () => void;\n active?: boolean;\n disabled?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n className={active ? \"bl-nav-kit__type is-active\" : \"bl-nav-kit__type\"}\n disabled={disabled}\n onClick={onClick}\n >\n <span className=\"bl-nav-kit__type-row\">\n {icon ? (\n <span className=\"bl-nav-kit__type-icon\" aria-hidden>\n {icon}\n </span>\n ) : null}\n {label}\n </span>\n {description ? <small>{description}</small> : null}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport function SelectTrigger({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger className=\"bl-nav-kit__select-trigger\" {...props}>\n <span className=\"bl-nav-kit__select-value\">{children}</span>\n <span className=\"bl-nav-kit__select-chevron\" aria-hidden>\n <ChevronGlyph />\n </span>\n </SelectPrimitive.Trigger>\n );\n}\n\nexport function SelectContent({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n className=\"bl-nav-kit__select-content\"\n position=\"popper\"\n sideOffset={6}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"bl-nav-kit__select-viewport\">{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nexport function SelectItem({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item className=\"bl-nav-kit__select-item\" {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"bl-nav-kit__select-check\" aria-hidden>\n <CheckGlyph />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\nfunction ChevronGlyph() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckGlyph() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Kicker } from \"./kicker\";\n\n/**\n * Presentational workspace chrome. Surfaces come from the adapter CSS\n * (Payload theme tokens). Field adapters own form writes.\n */\nexport function MainHead({\n kicker,\n title,\n description,\n children,\n}: {\n kicker?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n}) {\n return (\n <header className=\"bl-workspace__main-head\">\n <div>\n {kicker ? <Kicker>{kicker}</Kicker> : null}\n <h1>{title}</h1>\n {description ? <p>{description}</p> : null}\n </div>\n {children}\n </header>\n );\n}\n\n/** Aside chrome only. The adapter supplies children — nothing here is a link list. */\nexport function ItemRail({ children }: { children: ReactNode }) {\n return <aside className=\"bl-workspace__rail\">{children}</aside>;\n}\n\nexport function RailSlot({ children }: { children: ReactNode }) {\n return <div className=\"bl-workspace__rail-slot\">{children}</div>;\n}\n\nexport function Canvas({ children }: { children: ReactNode }) {\n return <div className=\"bl-workspace__canvas\">{children}</div>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["CheckboxPrimitive","SwitchPrimitive","SelectPrimitive"],"sources":["../src/badge.tsx","../src/button.tsx","../src/checkbox.tsx","../src/styles.tsx","../src/provider.tsx","../src/label.tsx","../src/kicker.tsx","../src/fold.tsx","../src/stack.tsx","../src/dialog.tsx","../src/confirm-dialog.tsx","../src/input.tsx","../src/switch.tsx","../src/textarea.tsx","../src/glyphs.tsx","../src/type-cards.tsx","../src/select.tsx","../src/workspace.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes, HTMLAttributes } from \"react\";\n\nexport const BADGE_VARIANTS = [\n \"primary\",\n \"secondary\",\n \"success\",\n \"danger\",\n \"warning\",\n \"info\",\n \"neutral-subtle\",\n \"neutral-strong\",\n] as const;\n\nexport type BadgeVariant = (typeof BADGE_VARIANTS)[number];\n\ntype BadgeCommon = {\n variant?: BadgeVariant;\n className?: string;\n};\n\nexport type BadgeProps =\n | (BadgeCommon & { as?: \"span\" } & HTMLAttributes<HTMLSpanElement>)\n | (BadgeCommon & { as: \"button\" } & ButtonHTMLAttributes<HTMLButtonElement>);\n\n/** Pill status. Span by default; pass `as=\"button\"` for a clickable chip. Label case is the caller's. */\nexport function Badge({ variant = \"neutral-subtle\", as, className, ...props }: BadgeProps) {\n const Tag = as ?? \"span\";\n return (\n <Tag\n className={[\"bl-nav-kit__badge\", `bl-nav-kit__badge--${variant}`, className].filter(Boolean).join(\" \")}\n {...(Tag === \"button\" ? { type: \"button\" } : {})}\n {...props}\n />\n );\n}\n","import type { ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\n\nexport function Button({\n variant = \"primary\",\n className,\n type = \"button\",\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & { variant?: ButtonVariant }) {\n return (\n <button\n type={type}\n className={[\"bl-nav-kit__btn\", `bl-nav-kit__btn--${variant}`, className].filter(Boolean).join(\" \")}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\n\nexport function Checkbox({\n className,\n ...props\n}: ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root className={[\"bl-nav-kit__checkbox\", className].filter(Boolean).join(\" \")} {...props}>\n <CheckboxPrimitive.Indicator className=\"bl-nav-kit__checkbox-mark\" aria-hidden>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <path\n d=\"M20 6 9 17l-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n","const CSS = `\n.bl-nav-kit__types{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.bl-nav-kit__types--compact{margin:0 0 10px;gap:6px}\n.bl-nav-kit__type{display:flex;flex-direction:column;align-items:stretch;gap:0;border:1px solid var(--theme-elevation-150,#e4e4e7);background:var(--theme-elevation-50,#f4f4f5);border-radius:10px;padding:16px;text-align:left;color:var(--theme-elevation-800,#27272a);cursor:pointer;font:inherit}\n.bl-nav-kit__type-row{display:flex;align-items:center;gap:12px;min-width:0}\n.bl-nav-kit__types--compact .bl-nav-kit__type{align-items:center;justify-content:center;border-radius:7px;padding:8px 6px;font-size:12px;background:var(--theme-elevation-0,#fff)}\n.bl-nav-kit__type small{display:block;margin-top:.3rem;color:var(--theme-elevation-500,#71717a);font-weight:400}\n.bl-nav-kit__type-icon{display:grid;place-items:center;width:2rem;height:2rem;border-radius:7px;background:var(--theme-elevation-150,#e4e4e7);flex:none}\n.bl-nav-kit__glyph{width:28px;height:28px;display:grid;place-items:center;border-radius:7px;background:var(--theme-elevation-150,#e4e4e7);color:var(--theme-elevation-800,#27272a);flex:none}\n.bl-nav-kit__glyph[data-kind=\"megaMenu\"]{background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 18%,var(--theme-elevation-0,#fff));color:var(--bl-kit-accent,#2563eb)}\n.bl-nav-kit__type-icon .bl-nav-kit__glyph{width:100%;height:100%;background:transparent;color:inherit}\n.bl-nav-kit__types--compact .bl-nav-kit__type-icon{width:1.25rem;height:1.25rem;background:transparent}\n.bl-nav-kit__type:hover{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__type.is-active,.bl-nav-kit__types--compact .bl-nav-kit__type.is-active{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 12%,var(--theme-elevation-0,#fff))}\n.bl-nav-kit__modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:var(--theme-overlay,rgba(0,0,0,.62));font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:var(--theme-elevation-800,#27272a)}\n.bl-nav-kit__modal-card{width:min(36rem,calc(100vw - 2rem));background:var(--theme-elevation-0,#fff);border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:12px;padding:1.25rem 0 0;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.45)}\n.bl-nav-kit__modal-card h2{margin:0 1.25rem .75rem;font-size:18px}\n.bl-nav-kit__modal-card p{margin:0;color:var(--theme-elevation-500,#71717a)}\n.bl-nav-kit__modal-body{min-width:0;padding:0 1.25rem}\n.bl-nav-kit__modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1.25rem;padding:1rem 1.25rem;border-top:1px solid var(--theme-elevation-150,#e4e4e7)}\n.bl-nav-kit__danger{color:var(--theme-error-500,#ff7381)}\n.bl-nav-kit__btn{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:8px 14px;border-radius:8px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:550;cursor:pointer}\n.bl-nav-kit__btn:disabled{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__btn--primary{border:0;background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));color:#fff}\n.bl-nav-kit__btn--primary:hover{filter:brightness(1.08)}\n.bl-nav-kit__btn--secondary{border:0;background:var(--theme-elevation-800,#27272a);color:var(--theme-elevation-0,#fff)}\n.bl-nav-kit__btn--secondary:hover{filter:brightness(1.08)}\n.bl-nav-kit__btn--outline{border:1px solid var(--theme-elevation-250,#d4d4d8);background:transparent;color:var(--theme-elevation-800,#27272a)}\n.bl-nav-kit__btn--outline:hover{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__btn--ghost{border:1px solid transparent;background:transparent;color:var(--theme-elevation-800,#27272a)}\n.bl-nav-kit__btn--ghost:hover{background:var(--theme-elevation-100,#f4f4f5)}\n.bl-nav-kit__btn--danger{border:1px solid var(--theme-error-500,#ff7381);background:color-mix(in srgb,var(--theme-error-500,#ff7381) 16%,var(--theme-elevation-0,#fff));color:var(--theme-error-500,#ff7381)}\n.bl-nav-kit__btn--danger:hover{background:color-mix(in srgb,var(--theme-error-500,#ff7381) 24%,var(--theme-elevation-0,#fff))}\n.bl-nav-kit__input,.bl-nav-kit__textarea{width:100%;min-height:38px;padding:8px 10px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-input-bg,var(--theme-elevation-0,#fff));color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}\n.bl-nav-kit__textarea{min-height:5.5rem;resize:vertical}\n.bl-nav-kit__input:hover,.bl-nav-kit__textarea:hover,.bl-nav-kit__input:focus,.bl-nav-kit__textarea:focus{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));outline:none}\n.bl-nav-kit__input:disabled,.bl-nav-kit__textarea:disabled{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__input::placeholder,.bl-nav-kit__textarea::placeholder{color:var(--theme-elevation-500,#71717a)}\n.bl-nav-kit__check{display:flex;align-items:center;gap:10px;font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;color:var(--theme-elevation-800,#27272a);cursor:pointer}\n.bl-nav-kit__check:has(.bl-nav-kit__checkbox[data-disabled]){opacity:.5;cursor:not-allowed}\n.bl-nav-kit__checkbox{position:relative;width:18px;height:18px;flex:none;border:1px solid var(--theme-elevation-250,#a1a1aa);border-radius:3px;background:var(--theme-elevation-0,#fff);color:#fff;cursor:pointer;padding:0}\n.bl-nav-kit__checkbox:hover,.bl-nav-kit__checkbox[data-state=\"checked\"]{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__checkbox[data-state=\"checked\"]{background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__checkbox[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__checkbox-mark{position:absolute;inset:0;display:grid;place-items:center}\n.bl-nav-kit__checkbox-mark svg{width:12px;height:12px;display:block}\n.bl-nav-kit__switch{width:40px;height:22px;flex:none;padding:0;border:0;border-radius:999px;background:var(--theme-elevation-250,#d4d4d8);position:relative;cursor:pointer}\n.bl-nav-kit__switch[data-state=\"checked\"]{background:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__switch[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__switch-thumb{display:block;width:18px;height:18px;border-radius:999px;background:#fff;transform:translateX(2px);transition:transform .12s ease}\n.bl-nav-kit__switch[data-state=\"checked\"] .bl-nav-kit__switch-thumb{transform:translateX(20px)}\n.bl-nav-kit__select-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:38px;padding:8px 10px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-input-bg,var(--theme-elevation-0,#fff));color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;text-align:left;cursor:pointer}\n.bl-nav-kit__select-trigger:hover,.bl-nav-kit__select-trigger[data-state=\"open\"]{border-color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)))}\n.bl-nav-kit__select-trigger[data-disabled]{opacity:.5;cursor:not-allowed}\n.bl-nav-kit__select-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.bl-nav-kit__select-chevron{flex:none;color:var(--theme-elevation-500,#71717a);display:grid;place-items:center}\n.bl-nav-kit__select-content{z-index:10050;min-width:var(--radix-select-trigger-width);background:var(--theme-elevation-0,#fff);border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:10px;padding:4px;box-shadow:0 12px 32px rgba(0,0,0,.45);color:var(--theme-elevation-800,#27272a);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}\n.bl-nav-kit__select-viewport{display:grid;gap:2px}\n.bl-nav-kit__select-item{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:7px;cursor:pointer;outline:none;font:inherit}\n.bl-nav-kit__select-item[data-highlighted],.bl-nav-kit__select-item[data-state=\"checked\"]{background:color-mix(in srgb,var(--bl-kit-accent,#2563eb) 12%,var(--theme-elevation-0,#fff))}\n.bl-nav-kit__select-item[data-disabled]{opacity:.45;pointer-events:none}\n.bl-nav-kit__select-check{flex:none;color:var(--bl-kit-accent,var(--brand-primary,var(--pink,#2563eb)));display:grid;place-items:center}\n.bl-nav-kit__field{display:flex;flex-direction:column;align-items:stretch;gap:8px;margin:0 0 16px}\n.bl-nav-kit__label{display:block;font:12px/1.2 Inter,ui-sans-serif,system-ui,sans-serif;font-weight:700;color:inherit}\n.bl-nav-kit__badge{display:inline-flex;align-items:center;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:10px;font-weight:700;line-height:1.2;padding:.32rem .55rem;border:0;border-radius:999px;background:transparent;color:inherit}\nbutton.bl-nav-kit__badge{cursor:pointer;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:10px;font-weight:700;line-height:1.2}\n.bl-nav-kit__badge--primary{background:var(--bl-kit-accent,var(--brand-primary,#2563eb));color:#fff}\n.bl-nav-kit__badge--secondary{background:#71717a;color:#fff}\n.bl-nav-kit__badge--success{background:#16a34a;color:#fff}\n.bl-nav-kit__badge--danger{background:#e5484d;color:#fff}\n.bl-nav-kit__badge--warning{background:#d97706;color:#fff}\n.bl-nav-kit__badge--info{background:#0889b2;color:#fff}\n.bl-nav-kit__badge--neutral-subtle{background:var(--theme-elevation-150,#e4e4e7);color:var(--theme-elevation-800,#27272a)}\n.bl-nav-kit__badge--neutral-strong{background:var(--theme-elevation-800,#27272a);color:var(--theme-elevation-0,#fff)}\n.bl-nav-kit__kicker{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#989daa);font-weight:800}\n.bl-nav-kit__fold{border:1px solid var(--theme-elevation-150,#e4e4e7);overflow:visible;margin:0;min-width:0;color:var(--theme-elevation-800,#27272a)}\n.bl-nav-kit__fold--light{background:var(--theme-elevation-50,#f4f4f5);border-color:var(--theme-elevation-150,#e4e4e7);border-radius:12px}\n.bl-nav-kit__fold--dark{background:var(--theme-elevation-0,#fff);border-radius:10px}\n.bl-nav-kit__fold-head{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--theme-elevation-150,#e4e4e7)}\n.bl-nav-kit__fold--light .bl-nav-kit__fold-head{background:var(--theme-elevation-100,#f4f4f5)}\n.bl-nav-kit__fold[data-open=\"false\"] .bl-nav-kit__fold-head{border-bottom:0}\n.bl-nav-kit__fold-toggle{flex:1;display:flex;align-items:center;gap:8px;min-width:0;border:0;background:transparent;padding:0;text-align:left;color:inherit;cursor:pointer;font:inherit}\n.bl-nav-kit__fold-chevron{flex:none;transition:transform .12s ease}\n.bl-nav-kit__fold[data-open=\"false\"] .bl-nav-kit__fold-chevron{transform:rotate(-90deg)}\n.bl-nav-kit__fold-title{font-size:13px;font-weight:700}\n.bl-nav-kit__fold-badge{font-size:11px;color:var(--theme-elevation-800,#27272a);background:var(--theme-elevation-150,#e4e4e7);border-radius:999px;padding:3px 8px}\n.bl-nav-kit__fold-toggle > small{color:var(--theme-elevation-500,#71717a)}\n.bl-nav-kit__fold-body{padding:16px}\n.bl-nav-kit__fold-body[hidden]{display:none}\n.bl-nav-kit__stack{display:flex;flex-direction:column;gap:12px}\n.bl-nav-kit__fold-menu{position:relative}\n.bl-nav-kit__fold-menu > button{border:0;background:transparent;color:inherit;cursor:pointer}\n.bl-nav-kit__fold-menu-pop{position:absolute;right:0;top:34px;z-index:12;min-width:140px;padding:4px;border:1px solid var(--theme-elevation-150,#e4e4e7);border-radius:8px;background:var(--theme-elevation-0,#fff)}\n.bl-nav-kit__fold-menu-pop button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:7px 8px;border-radius:6px;color:var(--theme-elevation-800,#27272a);cursor:pointer}\n.bl-nav-kit__fold-menu-pop button:disabled{opacity:.45;cursor:not-allowed}\n`;\n\nexport function KitStyles() {\n return (\n <style href=\"bl-admin-ui\" precedence=\"default\">\n {CSS}\n </style>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { KitStyles } from \"./styles\";\n\nconst ACCENT = /^#[0-9A-Fa-f]{6}$/;\n\n/** A `#rrggbb` the kit may write onto `--bl-kit-accent`. Anything else is ignored. */\nexport function kitAccent(value: string | undefined): string | undefined {\n return value && ACCENT.test(value) ? value : undefined;\n}\n\n/**\n * Mount once around kit chrome. Primitives read these styles; they do not\n * inject them. Pass `accent` to set `--bl-kit-accent` on `:root` so portaled\n * dialogs and selects follow it. Sites can also set that variable themselves.\n */\nexport function KitProvider({\n children,\n accent,\n}: {\n children: ReactNode;\n accent?: string;\n}) {\n const hex = kitAccent(accent);\n return (\n <>\n <KitStyles />\n {hex ? (\n <style href=\"bl-admin-ui-accent\" precedence=\"high\">\n {`:root{--bl-kit-accent:${hex};--pink:${hex};--brand-primary:${hex}}`}\n </style>\n ) : null}\n {children}\n </>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\ntype FieldTag = \"label\" | \"div\";\n\n/** Stack a label above its control. The label class owns type; this owns the 8px gap. */\nexport function Field({\n as: Tag = \"label\",\n className,\n ...props\n}: HTMLAttributes<HTMLElement> & { as?: FieldTag }) {\n return <Tag className={[\"bl-nav-kit__field\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n\n/** Visible field name. Sit this in `Field` above the control — do not restyle per screen. */\nexport function Label({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={[\"bl-nav-kit__label\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import type { HTMLAttributes } from \"react\";\n\n/** Uppercase eyebrow. MainHead, the preview note, and later chrome all use this. */\nexport function Kicker({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={[\"bl-nav-kit__kicker\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import { useState, type ReactNode } from \"react\";\n\nexport type FoldAction = {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n danger?: boolean;\n};\n\nexport type FoldTone = \"light\" | \"dark\";\n\nexport function Fold({\n title,\n tone = \"light\",\n badge,\n meta,\n actions,\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n children,\n}: {\n title: string;\n tone?: FoldTone;\n badge?: ReactNode;\n meta?: ReactNode | ((open: boolean) => ReactNode);\n actions?: FoldAction[];\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children?: ReactNode;\n}) {\n const controlled = openProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultOpen);\n const [menu, setMenu] = useState(false);\n const open = controlled ? openProp : uncontrolled;\n\n function setOpen(next: boolean) {\n if (!controlled) setUncontrolled(next);\n onOpenChange?.(next);\n }\n\n const metaNode = typeof meta === \"function\" ? meta(open) : meta;\n const badgeNode =\n badge == null\n ? null\n : typeof badge === \"string\" || typeof badge === \"number\" ? (\n <span className=\"bl-nav-kit__fold-badge\">{badge}</span>\n ) : (\n badge\n );\n\n return (\n <section\n role=\"group\"\n aria-label={title}\n data-open={open ? \"true\" : \"false\"}\n className={[\"bl-nav-kit__fold\", `bl-nav-kit__fold--${tone}`, className].filter(Boolean).join(\" \")}\n >\n <div className=\"bl-nav-kit__fold-head\">\n <button\n type=\"button\"\n className=\"bl-nav-kit__fold-toggle\"\n aria-expanded={open}\n aria-label={open ? `Collapse ${title}` : `Expand ${title}`}\n onClick={() => setOpen(!open)}\n >\n <svg\n className=\"bl-nav-kit__fold-chevron\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n <strong className=\"bl-nav-kit__fold-title\">{title}</strong>\n {badgeNode}\n {metaNode}\n </button>\n {actions?.length ? (\n <div className=\"bl-nav-kit__fold-menu\">\n <button type=\"button\" aria-label={`${title} actions`} onClick={() => setMenu((next) => !next)}>\n ⋯\n </button>\n {menu ? (\n <div className=\"bl-nav-kit__fold-menu-pop\">\n {actions.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n disabled={action.disabled}\n className={action.danger ? \"bl-nav-kit__danger\" : undefined}\n onClick={() => {\n action.onClick();\n setMenu(false);\n }}\n >\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n <div className=\"bl-nav-kit__fold-body\" hidden={!open}>\n {children}\n </div>\n </section>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\n/** Vertical list with a locked gap — sections in a column, links in a section, and their add buttons. */\nexport function Stack({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={[\"bl-nav-kit__stack\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import { useId, type ReactNode } from \"react\";\n\nimport { Button, type ButtonVariant } from \"./button\";\n\nexport type DialogConfirmVariant = Extract<ButtonVariant, \"primary\" | \"danger\">;\n\nexport function Dialog({\n open,\n title,\n children,\n cancelLabel = \"Cancel\",\n onCancel,\n confirmLabel,\n onConfirm,\n confirmVariant = \"primary\",\n confirmDisabled = false,\n}: {\n open: boolean;\n title: string;\n children: ReactNode;\n cancelLabel?: string;\n onCancel: () => void;\n confirmLabel?: string;\n onConfirm?: () => void;\n confirmVariant?: DialogConfirmVariant;\n confirmDisabled?: boolean;\n}) {\n const titleId = useId();\n if (!open) return null;\n return (\n <div className=\"bl-nav-kit__modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId}>\n <div className=\"bl-nav-kit__modal-card\">\n <h2 id={titleId}>{title}</h2>\n <div className=\"bl-nav-kit__modal-body\">{children}</div>\n <div className=\"bl-nav-kit__modal-actions\">\n <Button variant=\"outline\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n {confirmLabel && onConfirm ? (\n <Button variant={confirmVariant} onClick={onConfirm} disabled={confirmDisabled}>\n {confirmLabel}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Dialog, type DialogConfirmVariant } from \"./dialog\";\n\nexport function ConfirmDialog({\n open,\n title,\n children,\n cancelLabel,\n confirmLabel,\n onCancel,\n onConfirm,\n confirmVariant = \"primary\",\n}: {\n open: boolean;\n title: string;\n children: ReactNode;\n cancelLabel: string;\n confirmLabel: string;\n onCancel: () => void;\n onConfirm: () => void;\n confirmVariant?: DialogConfirmVariant;\n}) {\n return (\n <Dialog\n open={open}\n title={title}\n cancelLabel={cancelLabel}\n confirmLabel={confirmLabel}\n confirmVariant={confirmVariant}\n onCancel={onCancel}\n onConfirm={onConfirm}\n >\n <p>{children}</p>\n </Dialog>\n );\n}\n","import type { InputHTMLAttributes } from \"react\";\n\nexport function Input({ className, ...props }: InputHTMLAttributes<HTMLInputElement>) {\n return <input className={[\"bl-nav-kit__input\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nexport function Switch({ className, ...props }: ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root className={[\"bl-nav-kit__switch\", className].filter(Boolean).join(\" \")} {...props}>\n <SwitchPrimitive.Thumb className=\"bl-nav-kit__switch-thumb\" />\n </SwitchPrimitive.Root>\n );\n}\n","import type { TextareaHTMLAttributes } from \"react\";\n\nexport function Textarea({ className, ...props }: TextareaHTMLAttributes<HTMLTextAreaElement>) {\n return <textarea className={[\"bl-nav-kit__textarea\", className].filter(Boolean).join(\" \")} {...props} />;\n}\n","export type ItemKind = \"navLink\" | \"megaMenu\";\n\n/** Rail / type-card mark. The kit owns the badge; pass `kind` only. */\nexport function KindGlyph({ kind }: { kind: ItemKind }) {\n return (\n <span className=\"bl-nav-kit__glyph\" data-kind={kind} aria-hidden>\n {kind === \"megaMenu\" ? <MegaMark /> : <LinkMark />}\n </span>\n );\n}\n\nexport function LinkGlyph() {\n return <KindGlyph kind=\"navLink\" />;\n}\n\nexport function MegaGlyph() {\n return <KindGlyph kind=\"megaMenu\" />;\n}\n\nfunction LinkMark() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n );\n}\n\nfunction MegaMark() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function TypeCards({\n compact,\n children,\n}: {\n compact?: boolean;\n children: ReactNode;\n}) {\n return (\n <div className={compact ? \"bl-nav-kit__types bl-nav-kit__types--compact\" : \"bl-nav-kit__types\"}>\n {children}\n </div>\n );\n}\n\nexport function TypeCard({\n icon,\n label,\n description,\n onClick,\n active,\n disabled,\n}: {\n icon?: ReactNode;\n label: string;\n description?: string;\n onClick: () => void;\n active?: boolean;\n disabled?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n className={active ? \"bl-nav-kit__type is-active\" : \"bl-nav-kit__type\"}\n disabled={disabled}\n onClick={onClick}\n >\n <span className=\"bl-nav-kit__type-row\">\n {icon ? (\n <span className=\"bl-nav-kit__type-icon\" aria-hidden>\n {icon}\n </span>\n ) : null}\n {label}\n </span>\n {description ? <small>{description}</small> : null}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport function SelectTrigger({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger className=\"bl-nav-kit__select-trigger\" {...props}>\n <span className=\"bl-nav-kit__select-value\">{children}</span>\n <span className=\"bl-nav-kit__select-chevron\" aria-hidden>\n <ChevronGlyph />\n </span>\n </SelectPrimitive.Trigger>\n );\n}\n\nexport function SelectContent({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n className=\"bl-nav-kit__select-content\"\n position=\"popper\"\n sideOffset={6}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"bl-nav-kit__select-viewport\">{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nexport function SelectItem({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item className=\"bl-nav-kit__select-item\" {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"bl-nav-kit__select-check\" aria-hidden>\n <CheckGlyph />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\nfunction ChevronGlyph() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckGlyph() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Kicker } from \"./kicker\";\n\n/**\n * Presentational workspace chrome. Surfaces come from the adapter CSS\n * (Payload theme tokens). Field adapters own form writes.\n */\nexport function MainHead({\n kicker,\n title,\n description,\n children,\n}: {\n kicker?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n}) {\n return (\n <header className=\"bl-workspace__main-head\">\n <div>\n {kicker ? <Kicker>{kicker}</Kicker> : null}\n <h1>{title}</h1>\n {description ? <p>{description}</p> : null}\n </div>\n {children}\n </header>\n );\n}\n\n/** Aside chrome only. The adapter supplies children — nothing here is a link list. */\nexport function ItemRail({ children }: { children: ReactNode }) {\n return <aside className=\"bl-workspace__rail\">{children}</aside>;\n}\n\nexport function RailSlot({ children }: { children: ReactNode }) {\n return <div className=\"bl-workspace__rail-slot\">{children}</div>;\n}\n\nexport function Canvas({ children }: { children: ReactNode }) {\n return <div className=\"bl-workspace__canvas\">{children}</div>;\n}\n"],"mappings":";;;;;AAEA,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;AAcD,SAAgB,MAAM,EAAE,UAAU,kBAAkB,IAAI,WAAW,GAAG,SAAqB;CACzF,MAAM,MAAM,MAAM;AAClB,QACE,oBAAC,KAAD;EACE,WAAW;GAAC;GAAqB,sBAAsB;GAAW;GAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EACtG,GAAK,QAAQ,WAAW,EAAE,MAAM,UAAU,GAAG,EAAE;EAC/C,GAAI;EACJ,CAAA;;;;AC5BN,SAAgB,OAAO,EACrB,UAAU,WACV,WACA,OAAO,UACP,UACA,GAAG,SACqE;AACxE,QACE,oBAAC,UAAD;EACQ;EACN,WAAW;GAAC;GAAmB,oBAAoB;GAAW;GAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAClG,GAAI;EAEH;EACM,CAAA;;;;ACfb,SAAgB,SAAS,EACvB,WACA,GAAG,SACuD;AAC1D,QACE,oBAACA,WAAkB,MAAnB;EAAwB,WAAW,CAAC,wBAAwB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;YACpG,oBAACA,WAAkB,WAAnB;GAA6B,WAAU;GAA4B,eAAA;aACjE,oBAAC,OAAD;IAAK,SAAQ;IAAY,MAAK;IAAO,eAAA;cACnC,oBAAC,QAAD;KACE,GAAE;KACF,QAAO;KACP,aAAY;KACZ,eAAc;KACd,gBAAe;KACf,CAAA;IACE,CAAA;GACsB,CAAA;EACP,CAAA;;;;ACpB7B,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGZ,SAAgB,YAAY;AAC1B,QACE,oBAAC,SAAD;EAAO,MAAK;EAAc,YAAW;YAClC;EACK,CAAA;;;;ACjGZ,MAAM,SAAS;;AAGf,SAAgB,UAAU,OAA+C;AACvE,QAAO,SAAS,OAAO,KAAK,MAAM,GAAG,QAAQ,KAAA;;;;;;;AAQ/C,SAAgB,YAAY,EAC1B,UACA,UAIC;CACD,MAAM,MAAM,UAAU,OAAO;AAC7B,QACE,qBAAA,UAAA,EAAA,UAAA;EACE,oBAAC,WAAD,EAAa,CAAA;EACZ,MACC,oBAAC,SAAD;GAAO,MAAK;GAAqB,YAAW;aACzC,yBAAyB,IAAI,UAAU,IAAI,mBAAmB,IAAI;GAC7D,CAAA,GACN;EACH;EACA,EAAA,CAAA;;;;;AC5BP,SAAgB,MAAM,EACpB,IAAI,MAAM,SACV,WACA,GAAG,SAC+C;AAClD,QAAO,oBAAC,KAAD;EAAK,WAAW,CAAC,qBAAqB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;AAIlG,SAAgB,MAAM,EAAE,WAAW,GAAG,SAA0C;AAC9E,QAAO,oBAAC,QAAD;EAAM,WAAW,CAAC,qBAAqB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;;;ACZnG,SAAgB,OAAO,EAAE,WAAW,GAAG,SAA+C;AACpF,QAAO,oBAAC,KAAD;EAAG,WAAW,CAAC,sBAAsB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;;ACOjG,SAAgB,KAAK,EACnB,OACA,OAAO,SACP,OACA,MACA,SACA,cAAc,MACd,MAAM,UACN,cACA,WACA,YAYC;CACD,MAAM,aAAa,aAAa,KAAA;CAChC,MAAM,CAAC,cAAc,mBAAmB,SAAS,YAAY;CAC7D,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,OAAO,aAAa,WAAW;CAErC,SAAS,QAAQ,MAAe;AAC9B,MAAI,CAAC,WAAY,iBAAgB,KAAK;AACtC,iBAAe,KAAK;;CAGtB,MAAM,WAAW,OAAO,SAAS,aAAa,KAAK,KAAK,GAAG;CAC3D,MAAM,YACJ,SAAS,OACL,OACA,OAAO,UAAU,YAAY,OAAO,UAAU,WAC5C,oBAAC,QAAD;EAAM,WAAU;YAA0B;EAAa,CAAA,GAEvD;AAGR,QACE,qBAAC,WAAD;EACE,MAAK;EACL,cAAY;EACZ,aAAW,OAAO,SAAS;EAC3B,WAAW;GAAC;GAAoB,qBAAqB;GAAQ;GAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;YAJnG,CAME,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,iBAAe;IACf,cAAY,OAAO,YAAY,UAAU,UAAU;IACnD,eAAe,QAAQ,CAAC,KAAK;cAL/B;KAOE,oBAAC,OAAD;MACE,WAAU;MACV,SAAQ;MACR,OAAM;MACN,QAAO;MACP,MAAK;MACL,QAAO;MACP,aAAY;MACZ,eAAA;gBAEA,oBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;MACrB,CAAA;KACN,oBAAC,UAAD;MAAQ,WAAU;gBAA0B;MAAe,CAAA;KAC1D;KACA;KACM;OACR,SAAS,SACR,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,UAAD;KAAQ,MAAK;KAAS,cAAY,GAAG,MAAM;KAAW,eAAe,SAAS,SAAS,CAAC,KAAK;eAAE;KAEtF,CAAA,EACR,OACC,oBAAC,OAAD;KAAK,WAAU;eACZ,QAAQ,KAAK,WACZ,oBAAC,UAAD;MAEE,MAAK;MACL,UAAU,OAAO;MACjB,WAAW,OAAO,SAAS,uBAAuB,KAAA;MAClD,eAAe;AACb,cAAO,SAAS;AAChB,eAAQ,MAAM;;gBAGf,OAAO;MACD,EAVF,OAAO,MAUL,CACT;KACE,CAAA,GACJ,KACA;QACJ,KACA;MACN,oBAAC,OAAD;GAAK,WAAU;GAAwB,QAAQ,CAAC;GAC7C;GACG,CAAA,CACE;;;;;;AC/Gd,SAAgB,MAAM,EAAE,WAAW,GAAG,SAAyC;AAC7E,QAAO,oBAAC,OAAD;EAAK,WAAW,CAAC,qBAAqB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;;ACElG,SAAgB,OAAO,EACrB,MACA,OACA,UACA,cAAc,UACd,UACA,cACA,WACA,iBAAiB,WACjB,kBAAkB,SAWjB;CACD,MAAM,UAAU,OAAO;AACvB,KAAI,CAAC,KAAM,QAAO;AAClB,QACE,oBAAC,OAAD;EAAK,WAAU;EAAoB,MAAK;EAAS,cAAW;EAAO,mBAAiB;YAClF,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,MAAD;KAAI,IAAI;eAAU;KAAW,CAAA;IAC7B,oBAAC,OAAD;KAAK,WAAU;KAA0B;KAAe,CAAA;IACxD,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,QAAD;MAAQ,SAAQ;MAAU,SAAS;gBAChC;MACM,CAAA,EACR,gBAAgB,YACf,oBAAC,QAAD;MAAQ,SAAS;MAAgB,SAAS;MAAW,UAAU;gBAC5D;MACM,CAAA,GACP,KACA;;IACF;;EACF,CAAA;;;;ACzCV,SAAgB,cAAc,EAC5B,MACA,OACA,UACA,aACA,cACA,UACA,WACA,iBAAiB,aAUhB;AACD,QACE,oBAAC,QAAD;EACQ;EACC;EACM;EACC;EACE;EACN;EACC;YAEX,oBAAC,KAAD,EAAI,UAAa,CAAA;EACV,CAAA;;;;AChCb,SAAgB,MAAM,EAAE,WAAW,GAAG,SAAgD;AACpF,QAAO,oBAAC,SAAD;EAAO,WAAW,CAAC,qBAAqB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;;ACApG,SAAgB,OAAO,EAAE,WAAW,GAAG,SAAgE;AACrG,QACE,oBAACC,SAAgB,MAAjB;EAAsB,WAAW,CAAC,sBAAsB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;YAChG,oBAACA,SAAgB,OAAjB,EAAuB,WAAU,4BAA6B,CAAA;EACzC,CAAA;;;;ACL3B,SAAgB,SAAS,EAAE,WAAW,GAAG,SAAsD;AAC7F,QAAO,oBAAC,YAAD;EAAU,WAAW,CAAC,wBAAwB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAAE,GAAI;EAAS,CAAA;;;;;ACA1G,SAAgB,UAAU,EAAE,QAA4B;AACtD,QACE,oBAAC,QAAD;EAAM,WAAU;EAAoB,aAAW;EAAM,eAAA;YAClD,SAAS,aAAa,oBAAC,UAAD,EAAY,CAAA,GAAG,oBAAC,UAAD,EAAY,CAAA;EAC7C,CAAA;;AAIX,SAAgB,YAAY;AAC1B,QAAO,oBAAC,WAAD,EAAW,MAAK,WAAY,CAAA;;AAGrC,SAAgB,YAAY;AAC1B,QAAO,oBAAC,WAAD,EAAW,MAAK,YAAa,CAAA;;AAGtC,SAAS,WAAW;AAClB,QACE,qBAAC,OAAD;EAAK,OAAM;EAA6B,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAI,eAAc;EAAQ,gBAAe;YAA1K,CACE,oBAAC,QAAD,EAAM,GAAE,+DAAgE,CAAA,EACxE,oBAAC,QAAD,EAAM,GAAE,gEAAiE,CAAA,CACrE;;;AAIV,SAAS,WAAW;AAClB,QACE,qBAAC,OAAD;EAAK,OAAM;EAA6B,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAI,eAAc;EAAQ,gBAAe;YAA1K;GACE,oBAAC,QAAD;IAAM,OAAM;IAAK,QAAO;IAAK,GAAE;IAAI,GAAE;IAAI,IAAG;IAAM,CAAA;GAClD,oBAAC,QAAD,EAAM,GAAE,WAAY,CAAA;GACpB,oBAAC,QAAD,EAAM,GAAE,YAAa,CAAA;GACjB;;;;;AChCV,SAAgB,UAAU,EACxB,SACA,YAIC;AACD,QACE,oBAAC,OAAD;EAAK,WAAW,UAAU,iDAAiD;EACxE;EACG,CAAA;;AAIV,SAAgB,SAAS,EACvB,MACA,OACA,aACA,SACA,QACA,YAQC;AACD,QACE,qBAAC,UAAD;EACE,MAAK;EACL,WAAW,SAAS,+BAA+B;EACzC;EACD;YAJX,CAME,qBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,OACC,oBAAC,QAAD;IAAM,WAAU;IAAwB,eAAA;cACrC;IACI,CAAA,GACL,MACH,MACI;MACN,cAAc,oBAAC,SAAD,EAAA,UAAQ,aAAoB,CAAA,GAAG,KACvC;;;;;AC5Cb,MAAa,SAASC,SAAgB;AACtC,MAAa,cAAcA,SAAgB;AAE3C,SAAgB,cAAc,EAC5B,UACA,GAAG,SACwD;AAC3D,QACE,qBAACA,SAAgB,SAAjB;EAAyB,WAAU;EAA6B,GAAI;YAApE,CACE,oBAAC,QAAD;GAAM,WAAU;GAA4B;GAAgB,CAAA,EAC5D,oBAAC,QAAD;GAAM,WAAU;GAA6B,eAAA;aAC3C,oBAAC,cAAD,EAAgB,CAAA;GACX,CAAA,CACiB;;;AAI9B,SAAgB,cAAc,EAC5B,UACA,GAAG,SACwD;AAC3D,QACE,oBAACA,SAAgB,QAAjB,EAAA,UACE,oBAACA,SAAgB,SAAjB;EACE,WAAU;EACV,UAAS;EACT,YAAY;EACZ,GAAI;YAEJ,oBAACA,SAAgB,UAAjB;GAA0B,WAAU;GAA+B;GAAoC,CAAA;EAC/E,CAAA,EACH,CAAA;;AAI7B,SAAgB,WAAW,EACzB,UACA,GAAG,SACqD;AACxD,QACE,qBAACA,SAAgB,MAAjB;EAAsB,WAAU;EAA0B,GAAI;YAA9D,CACE,oBAACA,SAAgB,UAAjB,EAA2B,UAAoC,CAAA,EAC/D,oBAACA,SAAgB,eAAjB;GAA+B,WAAU;GAA2B,eAAA;aAClE,oBAAC,YAAD,EAAc,CAAA;GACgB,CAAA,CACX;;;AAI3B,SAAS,eAAe;AACtB,QACE,oBAAC,OAAD;EAAK,OAAM;EAA6B,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAI,eAAc;EAAQ,gBAAe;YACxK,oBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;EACrB,CAAA;;AAIV,SAAS,aAAa;AACpB,QACE,oBAAC,OAAD;EAAK,OAAM;EAA6B,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAI,eAAc;EAAQ,gBAAe;YACxK,oBAAC,QAAD,EAAM,GAAE,mBAAoB,CAAA;EACxB,CAAA;;;;;;;;ACxDV,SAAgB,SAAS,EACvB,QACA,OACA,aACA,YAMC;AACD,QACE,qBAAC,UAAD;EAAQ,WAAU;YAAlB,CACE,qBAAC,OAAD,EAAA,UAAA;GACG,SAAS,oBAAC,QAAD,EAAA,UAAS,QAAgB,CAAA,GAAG;GACtC,oBAAC,MAAD,EAAA,UAAK,OAAW,CAAA;GACf,cAAc,oBAAC,KAAD,EAAA,UAAI,aAAgB,CAAA,GAAG;GAClC,EAAA,CAAA,EACL,SACM;;;;AAKb,SAAgB,SAAS,EAAE,YAAqC;AAC9D,QAAO,oBAAC,SAAD;EAAO,WAAU;EAAsB;EAAiB,CAAA;;AAGjE,SAAgB,SAAS,EAAE,YAAqC;AAC9D,QAAO,oBAAC,OAAD;EAAK,WAAU;EAA2B;EAAe,CAAA;;AAGlE,SAAgB,OAAO,EAAE,YAAqC;AAC5D,QAAO,oBAAC,OAAD;EAAK,WAAU;EAAwB;EAAe,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bison-lab/admin-ui",
3
- "version": "3.23.0",
3
+ "version": "3.24.0",
4
4
  "description": "Payload-free admin kit primitives for Bison Lab CMS fields",
5
5
  "homepage": "https://components.bisonlab.ai",
6
6
  "repository": {