@zen-ui-capri/system 1.1.0 → 1.1.2
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/bin/capri.mjs +7 -2
- package/dist/lib/components/ZenIcon.d.ts.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +3 -3
- package/dist/lib/universal/zen-universal.d.ts.map +1 -1
- package/dist/lib/universal/zen-universal.js +1 -1
- package/dist/lib/{zen-universal-C0PD8AI9.js → zen-universal-CdKK8x-h.js} +159 -159
- package/package.json +2 -2
- package/src/lib/audio/ZenAudioController.tsx +114 -114
- package/src/lib/components/ZenIcon.tsx +24 -7
- package/src/lib/index.ts +1 -1
- package/src/lib/universal/zen-universal.ts +2 -1
package/bin/capri.mjs
CHANGED
|
@@ -753,8 +753,13 @@ function analyzeRepo(targetDir) {
|
|
|
753
753
|
if (allDeps.mongoose || allDeps.mongodb || extCounts['.kt']) {
|
|
754
754
|
if (repoName === 'JourneyLink') stackSet.add('MongoDB + RabbitMQ + Redis');
|
|
755
755
|
}
|
|
756
|
-
if (
|
|
757
|
-
|
|
756
|
+
if (
|
|
757
|
+
allDeps['@zen-ui/system'] ||
|
|
758
|
+
allDeps['@zen-ui-capri/system'] ||
|
|
759
|
+
pkg?.name === '@zen-ui/system' ||
|
|
760
|
+
pkg?.name === '@zen-ui-capri/system'
|
|
761
|
+
) {
|
|
762
|
+
stackSet.add('@zen-ui-capri/system (CAPRI)');
|
|
758
763
|
}
|
|
759
764
|
if (extCounts['.ts'] || extCounts['.tsx']) stackSet.add('TypeScript');
|
|
760
765
|
if (extCounts['.ps1']) stackSet.add('PowerShell');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZenIcon.d.ts","sourceRoot":"","sources":["../../../src/lib/components/ZenIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,cAAc,GACd,eAAe,GACf,cAAc,GACd,eAAe,GACf,MAAM,GACN,UAAU,GACV,UAAU,GACV,KAAK,GACL,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,OAAO,GACP,KAAK,GACL,MAAM,GACN,KAAK,GACL,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,aAAa,GACb,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3D,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,SAAS,GACT,WAAW,GACX,OAAO,GACP,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;AAEb,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAMxD,CAAC;AAaF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAiF1D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAEtB,CAAC;AAE5B,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ZenIcon.d.ts","sourceRoot":"","sources":["../../../src/lib/components/ZenIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,cAAc,GACd,eAAe,GACf,cAAc,GACd,eAAe,GACf,MAAM,GACN,UAAU,GACV,UAAU,GACV,KAAK,GACL,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,OAAO,GACP,KAAK,GACL,MAAM,GACN,KAAK,GACL,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,aAAa,GACb,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3D,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,SAAS,GACT,WAAW,GACX,OAAO,GACP,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;AAEb,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAMxD,CAAC;AAaF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAiF1D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAEtB,CAAC;AAE5B,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CAkBT;AAED,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,IAAW,EACX,IAAgB,EAChB,WAAe,EACf,IAAY,EACZ,SAAS,EACT,SAAc,EACd,GAAG,IAAI,EACR,EAAE,YAAY,+BA8Bd"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const ZEN_UI_VERSION = "1.1.
|
|
1
|
+
export declare const ZEN_UI_VERSION = "1.1.2";
|
|
2
2
|
export declare const ZEN_PACKAGE_NAME = "@zen-ui/system";
|
|
3
3
|
export { ZenThemeProvider, useZenTheme, syncZenScrollbarStyles, ZEN_THEMES, type ZenThemeId, type ZenThemeMode, type ZenDensityMode, type ZenRadiusMode, type ZenThemeMetadata, type ZenThemeTokenOverrides, type ZenThemeContextValue, type ZenThemeProviderProps, } from './theme/ZenThemeProvider';
|
|
4
4
|
export { ZenButton, ZenCopyButton, type ZenButtonVariant, type ZenButtonSize, type ZenButtonProps, type ZenCopyButtonProps, } from './components/ZenButton';
|
package/dist/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as Ie, u as Le, C as he } from "./zen-universal-
|
|
2
|
-
import { a as en, Z as tn, b as rn, d as nn, e as an, f as sn, g as ln, h as on, i as cn, j as dn, k as mn, l as un, m as pn, n as fn, o as vn, r as hn, p as bn, s as xn, q as gn, z as yn, t as zn } from "./zen-universal-
|
|
1
|
+
import { c as Ie, u as Le, C as he } from "./zen-universal-CdKK8x-h.js";
|
|
2
|
+
import { a as en, Z as tn, b as rn, d as nn, e as an, f as sn, g as ln, h as on, i as cn, j as dn, k as mn, l as un, m as pn, n as fn, o as vn, r as hn, p as bn, s as xn, q as gn, z as yn, t as zn } from "./zen-universal-CdKK8x-h.js";
|
|
3
3
|
import { jsxs as a, jsx as e, Fragment as ye } from "react/jsx-runtime";
|
|
4
4
|
import { useState as H, useRef as R, useEffect as q, useId as re, useCallback as ge, useMemo as le, useImperativeHandle as ot, Suspense as ct } from "react";
|
|
5
5
|
import { Loader2 as dt, Check as Ne, Copy as mt, CheckCircle2 as Pe, ArrowUpRight as Ze, ChevronDown as Ke, X as we, AlertTriangle as Ye, Info as Xe, ArrowUp as ut, ArrowDown as pt, ArrowUpDown as ft, Menu as vt, Radio as ht, Minimize2 as bt, Maximize2 as xt, Sparkles as Be, Terminal as gt, Activity as yt, Cpu as zt, ShieldAlert as Qe, FileText as Je, Minus as et, UploadCloud as Nt, Plus as wt, ChevronRight as tt, ChevronLeft as kt, Search as Ct, CornerDownLeft as St, TrendingUp as At, TrendingDown as Tt, Inbox as Et, Volume2 as He, VolumeX as _e, Disc3 as Mt } from "lucide-react";
|
|
@@ -3834,7 +3834,7 @@ function Kr({
|
|
|
3834
3834
|
/* @__PURE__ */ e(lt, { bridgeRef: s })
|
|
3835
3835
|
] });
|
|
3836
3836
|
}
|
|
3837
|
-
const Yr = "1.1.
|
|
3837
|
+
const Yr = "1.1.2", Xr = "@zen-ui/system";
|
|
3838
3838
|
export {
|
|
3839
3839
|
he as CAPRI_SUBROUTINE_SKILLS,
|
|
3840
3840
|
en as CapriEngine,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zen-universal.d.ts","sourceRoot":"","sources":["../../../src/lib/universal/zen-universal.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"zen-universal.d.ts","sourceRoot":"","sources":["../../../src/lib/universal/zen-universal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as s, a, f as t, g as r, h as m, j as i, k as E, m as l, n as o, c as Z, o as c, r as A, s as I, z as S, t as h } from "../zen-universal-
|
|
1
|
+
import { C as s, a, f as t, g as r, h as m, j as i, k as E, m as l, n as o, c as Z, o as c, r as A, s as I, z as S, t as h } from "../zen-universal-CdKK8x-h.js";
|
|
2
2
|
export {
|
|
3
3
|
s as CAPRI_SUBROUTINE_SKILLS,
|
|
4
4
|
a as CapriEngine,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var Q = Object.defineProperty;
|
|
2
|
-
var J = (
|
|
3
|
-
var g = (
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { createContext as ee, useState as
|
|
6
|
-
const
|
|
2
|
+
var J = (s, e, n) => e in s ? Q(s, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : s[e] = n;
|
|
3
|
+
var g = (s, e, n) => J(s, typeof e != "symbol" ? e + "" : e, n);
|
|
4
|
+
import { jsx as K } from "react/jsx-runtime";
|
|
5
|
+
import { createContext as ee, useState as L, useEffect as q, useMemo as te, useContext as ne } from "react";
|
|
6
|
+
const E = [
|
|
7
7
|
{
|
|
8
8
|
id: "obsidian-gold",
|
|
9
9
|
name: "Obsidian Gold",
|
|
@@ -84,10 +84,10 @@ const k = [
|
|
|
84
84
|
secondaryHex: "#0284C7",
|
|
85
85
|
inkHex: "#09090D"
|
|
86
86
|
}
|
|
87
|
-
],
|
|
88
|
-
function
|
|
87
|
+
], W = ee(null);
|
|
88
|
+
function Y(s, e) {
|
|
89
89
|
if (typeof document > "u") return;
|
|
90
|
-
const n = (e == null ? void 0 : e.accentPrimary) ??
|
|
90
|
+
const n = (e == null ? void 0 : e.accentPrimary) ?? s.accentHex, t = (e == null ? void 0 : e.bgCanvas) ?? s.canvasHex, a = s.polarity === "dark" ? "rgba(255, 255, 255, 0.12)" : "rgba(15, 23, 42, 0.14)", i = "zen-theme-scrollbar";
|
|
91
91
|
let r = document.getElementById(i);
|
|
92
92
|
r || (r = document.createElement("style"), r.id = i, document.head.appendChild(r)), r.textContent = `
|
|
93
93
|
@supports (-moz-appearance: none) {
|
|
@@ -129,7 +129,7 @@ body::-webkit-scrollbar-thumb:hover,
|
|
|
129
129
|
html::-webkit-scrollbar-thumb:active,
|
|
130
130
|
body::-webkit-scrollbar-thumb:active,
|
|
131
131
|
*::-webkit-scrollbar-thumb:active {
|
|
132
|
-
background-color: ${
|
|
132
|
+
background-color: ${s.secondaryHex};
|
|
133
133
|
border: 2px solid ${t};
|
|
134
134
|
}
|
|
135
135
|
::-webkit-scrollbar-corner,
|
|
@@ -141,56 +141,56 @@ body::-webkit-scrollbar-corner,
|
|
|
141
141
|
`.trim();
|
|
142
142
|
}
|
|
143
143
|
function ge({
|
|
144
|
-
defaultTheme:
|
|
144
|
+
defaultTheme: s = "blackwall-crimson",
|
|
145
145
|
defaultDensity: e = "comfortable",
|
|
146
146
|
defaultRadius: n = "architectural",
|
|
147
147
|
overrides: t,
|
|
148
148
|
syncDocumentRoot: a = !0,
|
|
149
149
|
children: i
|
|
150
150
|
}) {
|
|
151
|
-
const [r, d] =
|
|
152
|
-
|
|
151
|
+
const [r, d] = L(s), [l, c] = L(e), [u, v] = L(n), [b, h] = L(() => typeof window > "u" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches), A = E.find((m) => m.id === r) ?? E[0];
|
|
152
|
+
q(() => {
|
|
153
153
|
if (typeof window > "u") return;
|
|
154
|
-
const
|
|
155
|
-
return
|
|
156
|
-
}, []),
|
|
154
|
+
const m = window.matchMedia("(prefers-reduced-motion: reduce)"), x = (k) => h(k.matches);
|
|
155
|
+
return m.addEventListener("change", x), () => m.removeEventListener("change", x);
|
|
156
|
+
}, []), q(() => {
|
|
157
157
|
if (!a || typeof document > "u") return;
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
}, [r, A,
|
|
158
|
+
const m = document.documentElement;
|
|
159
|
+
m.setAttribute("data-theme", r), m.setAttribute("data-polarity", A.polarity), m.setAttribute("data-density", l), m.setAttribute("data-radius", u), t != null && t.accentPrimary ? m.style.setProperty("--zen-accent-primary", t.accentPrimary) : m.style.removeProperty("--zen-accent-primary"), t != null && t.bgCanvas ? m.style.setProperty("--zen-bg-canvas", t.bgCanvas) : m.style.removeProperty("--zen-bg-canvas"), t != null && t.surface1 ? m.style.setProperty("--zen-surface-1", t.surface1) : m.style.removeProperty("--zen-surface-1"), t != null && t.inkPrimary ? m.style.setProperty("--zen-ink-primary", t.inkPrimary) : m.style.removeProperty("--zen-ink-primary"), Y(A, t);
|
|
160
|
+
}, [r, A, l, u, t, a]);
|
|
161
161
|
const C = () => {
|
|
162
|
-
d((
|
|
162
|
+
d((m) => (E.find((k) => k.id === m) ?? E[0]).polarity === "dark" ? m === "blackwall-crimson" ? "cyber-daylight" : m === "neon-emerald" ? "kyoto-matcha" : m === "midnight-cobalt" ? "nordic-snow" : "atelier-paper" : m === "cyber-daylight" ? "blackwall-crimson" : m === "kyoto-matcha" ? "neon-emerald" : m === "nordic-snow" ? "midnight-cobalt" : "obsidian-gold");
|
|
163
163
|
}, w = te(
|
|
164
164
|
() => ({
|
|
165
165
|
theme: r,
|
|
166
166
|
themeMeta: A,
|
|
167
167
|
polarity: A.polarity,
|
|
168
|
-
density:
|
|
169
|
-
radius:
|
|
168
|
+
density: l,
|
|
169
|
+
radius: u,
|
|
170
170
|
reducedMotion: b,
|
|
171
|
-
themes:
|
|
171
|
+
themes: E,
|
|
172
172
|
setTheme: d,
|
|
173
173
|
togglePolarity: C,
|
|
174
|
-
setDensity:
|
|
174
|
+
setDensity: c,
|
|
175
175
|
setRadius: v
|
|
176
176
|
}),
|
|
177
|
-
[r, A,
|
|
177
|
+
[r, A, l, u, b]
|
|
178
178
|
);
|
|
179
|
-
return /* @__PURE__ */
|
|
179
|
+
return /* @__PURE__ */ K(W.Provider, { value: w, children: i });
|
|
180
180
|
}
|
|
181
181
|
function be() {
|
|
182
|
-
const
|
|
183
|
-
if (!
|
|
182
|
+
const s = ne(W);
|
|
183
|
+
if (!s)
|
|
184
184
|
throw new Error("useZenTheme must be used within a ZenThemeProvider");
|
|
185
|
-
return
|
|
185
|
+
return s;
|
|
186
186
|
}
|
|
187
|
-
const
|
|
187
|
+
const R = {
|
|
188
188
|
xs: 12,
|
|
189
189
|
sm: 14,
|
|
190
190
|
md: 16,
|
|
191
191
|
lg: 20,
|
|
192
192
|
xl: 24
|
|
193
|
-
},
|
|
193
|
+
}, P = {
|
|
194
194
|
inherit: "currentColor",
|
|
195
195
|
primary: "var(--zen-ink-primary)",
|
|
196
196
|
secondary: "var(--zen-ink-secondary)",
|
|
@@ -199,7 +199,7 @@ const Y = {
|
|
|
199
199
|
success: "var(--zen-status-success)",
|
|
200
200
|
warning: "var(--zen-status-warning)",
|
|
201
201
|
danger: "var(--zen-status-danger)"
|
|
202
|
-
},
|
|
202
|
+
}, T = {
|
|
203
203
|
search: '<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',
|
|
204
204
|
plus: '<path d="M5 12h14"/><path d="M12 5v14"/>',
|
|
205
205
|
minus: '<path d="M5 12h14"/>',
|
|
@@ -241,14 +241,14 @@ const Y = {
|
|
|
241
241
|
globe: '<circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/>',
|
|
242
242
|
folder: '<path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>'
|
|
243
243
|
}, fe = Object.keys(
|
|
244
|
-
|
|
244
|
+
T
|
|
245
245
|
);
|
|
246
|
-
function re(
|
|
247
|
-
const e =
|
|
248
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
246
|
+
function re(s) {
|
|
247
|
+
const e = s.size ?? "md", n = Object.prototype.hasOwnProperty.call(R, e) ? R[e] : R.md, t = s.tone ?? "inherit", a = Object.prototype.hasOwnProperty.call(P, t) ? P[t] : P.inherit, i = typeof s.strokeWidth == "number" && Number.isFinite(s.strokeWidth) ? Math.min(Math.max(s.strokeWidth, 0.5), 4) : 2, r = Object.prototype.hasOwnProperty.call(T, s.name) ? T[s.name] : T.sparkles, d = s.spin ? "animation: spin 1s linear infinite;" : "";
|
|
248
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${n}" viewBox="0 0 24 24" fill="none" stroke="${a}" stroke-width="${i}" stroke-linecap="round" stroke-linejoin="round" style="display:inline-block;vertical-align:middle;flex-shrink:0;${d}">${r}</svg>`;
|
|
249
249
|
}
|
|
250
250
|
function ve({
|
|
251
|
-
name:
|
|
251
|
+
name: s,
|
|
252
252
|
size: e = "md",
|
|
253
253
|
tone: n = "inherit",
|
|
254
254
|
strokeWidth: t = 2,
|
|
@@ -257,16 +257,16 @@ function ve({
|
|
|
257
257
|
className: r = "",
|
|
258
258
|
...d
|
|
259
259
|
}) {
|
|
260
|
-
const
|
|
261
|
-
return /* @__PURE__ */
|
|
260
|
+
const l = Object.prototype.hasOwnProperty.call(R, e) ? R[e] : R.md, c = Object.prototype.hasOwnProperty.call(P, n) ? P[n] : P.inherit, u = Object.prototype.hasOwnProperty.call(T, s) ? T[s] : T.sparkles;
|
|
261
|
+
return /* @__PURE__ */ K(
|
|
262
262
|
"svg",
|
|
263
263
|
{
|
|
264
264
|
xmlns: "http://www.w3.org/2000/svg",
|
|
265
|
-
width:
|
|
266
|
-
height:
|
|
265
|
+
width: l,
|
|
266
|
+
height: l,
|
|
267
267
|
viewBox: "0 0 24 24",
|
|
268
268
|
fill: "none",
|
|
269
|
-
stroke:
|
|
269
|
+
stroke: c,
|
|
270
270
|
strokeWidth: t,
|
|
271
271
|
strokeLinecap: "round",
|
|
272
272
|
strokeLinejoin: "round",
|
|
@@ -274,7 +274,7 @@ function ve({
|
|
|
274
274
|
"aria-label": i,
|
|
275
275
|
"aria-hidden": i ? void 0 : "true",
|
|
276
276
|
className: `inline-block shrink-0 ${a ? "animate-spin" : ""} ${r}`.trim(),
|
|
277
|
-
dangerouslySetInnerHTML: { __html:
|
|
277
|
+
dangerouslySetInnerHTML: { __html: u },
|
|
278
278
|
...d
|
|
279
279
|
}
|
|
280
280
|
);
|
|
@@ -507,7 +507,7 @@ class ie {
|
|
|
507
507
|
this.activeSubroutine = e;
|
|
508
508
|
const t = S[e];
|
|
509
509
|
if (typeof document < "u" && (document.documentElement.setAttribute("data-capri-subroutine", e), n != null && n.applyPresetTheme)) {
|
|
510
|
-
const r =
|
|
510
|
+
const r = E.find((d) => d.id === t.recommendedTheme) ?? E[0];
|
|
511
511
|
document.documentElement.setAttribute("data-theme", t.recommendedTheme), document.documentElement.setAttribute("data-polarity", r.polarity), document.documentElement.setAttribute("data-radius", t.recommendedRadius), document.documentElement.setAttribute("data-density", t.recommendedDensity), document.documentElement.style.colorScheme = r.polarity, (i = n.onThemeChange) == null || i.call(
|
|
512
512
|
n,
|
|
513
513
|
t.recommendedTheme,
|
|
@@ -519,7 +519,7 @@ class ie {
|
|
|
519
519
|
return this.notify(a), t;
|
|
520
520
|
}
|
|
521
521
|
guard(e) {
|
|
522
|
-
var
|
|
522
|
+
var m, x, k, $, O;
|
|
523
523
|
if (typeof document > "u" || typeof window > "u") {
|
|
524
524
|
const y = {
|
|
525
525
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -542,31 +542,31 @@ class ie {
|
|
|
542
542
|
const n = e ?? document, t = document.documentElement, a = t.getAttribute("data-theme") ?? "", i = t.getAttribute("data-polarity") ?? "", r = !!(a && i), d = Math.max(
|
|
543
543
|
0,
|
|
544
544
|
Math.round(t.scrollWidth - window.innerWidth)
|
|
545
|
-
),
|
|
545
|
+
), l = Array.from(
|
|
546
546
|
n.querySelectorAll(
|
|
547
547
|
'button, [role="button"], input:not([type="hidden"]), select, textarea'
|
|
548
548
|
)
|
|
549
|
-
),
|
|
550
|
-
let
|
|
551
|
-
for (const y of
|
|
552
|
-
const
|
|
553
|
-
if (!
|
|
554
|
-
const
|
|
555
|
-
|
|
549
|
+
), c = [];
|
|
550
|
+
let u = 0;
|
|
551
|
+
for (const y of l) {
|
|
552
|
+
const H = (m = y.getAttribute("aria-label")) == null ? void 0 : m.trim(), o = (x = y.getAttribute("aria-labelledby")) == null ? void 0 : x.trim(), p = (k = y.getAttribute("title")) == null ? void 0 : k.trim(), f = ($ = y.textContent) == null ? void 0 : $.trim(), I = (O = y.getAttribute("placeholder")) == null ? void 0 : O.trim(), M = y.getAttribute("id"), F = !!(M && n.querySelector(`label[for="${CSS.escape(M)}"]`)), U = !!y.closest("label");
|
|
553
|
+
if (!H && !o && !p && !f && !I && !F && !U) {
|
|
554
|
+
const z = y.tagName.toLowerCase(), B = y.className ? `.${String(y.className).trim().split(/\s+/).slice(0, 2).join(".")}` : "";
|
|
555
|
+
c.push(`${z}${B}`);
|
|
556
556
|
}
|
|
557
557
|
if (y instanceof HTMLInputElement || y instanceof HTMLTextAreaElement) {
|
|
558
|
-
const
|
|
559
|
-
|
|
558
|
+
const z = this.scanPromptInjection(y.value || "");
|
|
559
|
+
z.safe || (u += z.threatCount);
|
|
560
560
|
}
|
|
561
561
|
}
|
|
562
562
|
const b = n.querySelectorAll(
|
|
563
563
|
'a[href^="javascript:"], iframe[src^="javascript:"], [onerror], [onload]'
|
|
564
564
|
).length, h = [];
|
|
565
|
-
|
|
565
|
+
u > 0 && h.push({
|
|
566
566
|
code: "PROMPT_INJECTION_DETECTED",
|
|
567
567
|
severity: "error",
|
|
568
568
|
selector: "input, textarea",
|
|
569
|
-
message: `${
|
|
569
|
+
message: `${u} prompt-injection or token-spoofing payload(s) detected in active form controls.`,
|
|
570
570
|
fixHint: "Sanitize untrusted input with capri.sanitizeForPrompt() before forwarding to AI models."
|
|
571
571
|
}), b > 0 && h.push({
|
|
572
572
|
code: "UNSAFE_DOM_SINK",
|
|
@@ -586,23 +586,23 @@ class ie {
|
|
|
586
586
|
selector: "document.documentElement",
|
|
587
587
|
message: `Horizontal viewport overflow detected (+${d}px beyond ${window.innerWidth}px).`,
|
|
588
588
|
fixHint: "Add min-w-0 to CSS Grid/Flex children and wrap wide tables in .zen-table-wrapper."
|
|
589
|
-
}),
|
|
589
|
+
}), c.length > 0 && h.push({
|
|
590
590
|
code: "UNLABELED_CONTROL",
|
|
591
591
|
severity: "error",
|
|
592
|
-
selector:
|
|
593
|
-
message: `${
|
|
592
|
+
selector: c.slice(0, 3).join(", "),
|
|
593
|
+
message: `${c.length} interactive control(s) missing an accessible label.`,
|
|
594
594
|
fixHint: 'Pass ariaLabel="..." to ZenIconButton or associate inputs with <label>.'
|
|
595
595
|
});
|
|
596
|
-
const A =
|
|
596
|
+
const A = u * 35 + b * 35 + (d > 0 ? 35 : 0) + c.length * 15 + (r ? 0 : 15), C = Math.max(0, 100 - A), w = {
|
|
597
597
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
598
598
|
passed: h.length === 0,
|
|
599
599
|
score: C,
|
|
600
600
|
viewport: `${window.innerWidth}x${window.innerHeight}`,
|
|
601
601
|
horizontalOverflowPx: d,
|
|
602
|
-
unlabeledControlsCount:
|
|
603
|
-
unlabeledSelectors:
|
|
604
|
-
promptInjectionSafe:
|
|
605
|
-
promptThreatsCount:
|
|
602
|
+
unlabeledControlsCount: c.length,
|
|
603
|
+
unlabeledSelectors: c,
|
|
604
|
+
promptInjectionSafe: u === 0,
|
|
605
|
+
promptThreatsCount: u,
|
|
606
606
|
unsafeDomSinksCount: b,
|
|
607
607
|
themeConfigured: r,
|
|
608
608
|
activeTheme: a || "unconfigured",
|
|
@@ -641,7 +641,7 @@ class ie {
|
|
|
641
641
|
};
|
|
642
642
|
}
|
|
643
643
|
docu(e) {
|
|
644
|
-
var
|
|
644
|
+
var $, O, y, H;
|
|
645
645
|
const n = this.telemetry(), t = this.guard(e);
|
|
646
646
|
if (typeof document > "u" || typeof window > "u") {
|
|
647
647
|
const o = {
|
|
@@ -667,23 +667,23 @@ class ie {
|
|
|
667
667
|
markdownBundle: "# Automated Architecture & User-Flow Dossier (SSR)"
|
|
668
668
|
};
|
|
669
669
|
}
|
|
670
|
-
const a = e ?? document, i = document.title || "zeN-UI Application", r = window.location.pathname || "/",
|
|
670
|
+
const a = e ?? document, i = document.title || "zeN-UI Application", r = window.location.pathname || "/", l = Array.from(
|
|
671
671
|
a.querySelectorAll("header, nav, section[id], main, footer")
|
|
672
672
|
).slice(0, 12).map((o, p) => {
|
|
673
|
-
var
|
|
674
|
-
const f = o.tagName.toLowerCase(),
|
|
673
|
+
var j;
|
|
674
|
+
const f = o.tagName.toLowerCase(), I = o.id || `${f}-${p + 1}`, M = o.querySelector("h1, h2, h3, h4"), F = o.getAttribute("aria-label"), U = ((j = M == null ? void 0 : M.textContent) == null ? void 0 : j.trim()) || (F == null ? void 0 : F.trim()) || `${f.toUpperCase()} (${I})`, z = this.sanitizeForPrompt(U).replace(/\s+/g, " ").slice(0, 64), B = o.querySelectorAll(
|
|
675
675
|
'button, a[href], [role="button"], [role="radio"], [role="tab"]'
|
|
676
676
|
).length, X = o.querySelectorAll(
|
|
677
677
|
'input, select, textarea, [role="switch"], [role="checkbox"], [role="combobox"]'
|
|
678
678
|
).length;
|
|
679
679
|
return {
|
|
680
|
-
id:
|
|
680
|
+
id: I,
|
|
681
681
|
tag: f,
|
|
682
|
-
title:
|
|
683
|
-
interactiveCount:
|
|
682
|
+
title: z,
|
|
683
|
+
interactiveCount: B,
|
|
684
684
|
formControlsCount: X
|
|
685
685
|
};
|
|
686
|
-
}),
|
|
686
|
+
}), c = [
|
|
687
687
|
"zen-icon",
|
|
688
688
|
"zen-ai-construct",
|
|
689
689
|
"zen-ambient-background",
|
|
@@ -691,29 +691,29 @@ class ie {
|
|
|
691
691
|
].filter((o) => {
|
|
692
692
|
var p;
|
|
693
693
|
return !!((p = window.customElements) != null && p.get(o));
|
|
694
|
-
}),
|
|
694
|
+
}), u = {
|
|
695
695
|
buttons: a.querySelectorAll("button, .zen-btn-base").length,
|
|
696
696
|
inputsAndSelects: a.querySelectorAll("input, textarea, select, .zen-input, .zen-select").length,
|
|
697
697
|
switchesAndRadios: a.querySelectorAll('[role="switch"], [role="radio"], [type="checkbox"]').length,
|
|
698
698
|
tables: a.querySelectorAll("table, .zen-table").length,
|
|
699
699
|
cardsAndSurfaces: a.querySelectorAll(".zen-surface-base, .zen-surface-interactive, .zen-surface-selected").length,
|
|
700
700
|
badgesAndAlerts: a.querySelectorAll('.zen-badge, [role="alert"], [role="status"]').length,
|
|
701
|
-
customElements:
|
|
701
|
+
customElements: c
|
|
702
702
|
}, v = [], b = Array.from(a.querySelectorAll("nav a[href], nav button")).slice(0, 5);
|
|
703
703
|
for (const [o, p] of b.entries()) {
|
|
704
|
-
const f = ((
|
|
704
|
+
const f = (($ = p.textContent) == null ? void 0 : $.trim().replace(/\s+/g, " ").slice(0, 36)) || `Nav Trigger ${o + 1}`, I = p.getAttribute("href") || "Section / State Action";
|
|
705
705
|
v.push({
|
|
706
706
|
id: `flow-nav-${o + 1}`,
|
|
707
707
|
category: "navigation",
|
|
708
708
|
triggerLabel: f,
|
|
709
|
-
targetDescription: `Navigates or jumps to ${
|
|
709
|
+
targetDescription: `Navigates or jumps to ${I}`
|
|
710
710
|
});
|
|
711
711
|
}
|
|
712
712
|
const h = Array.from(
|
|
713
713
|
a.querySelectorAll("button")
|
|
714
714
|
).filter((o) => /modal|drawer|palette|command/i.test(o.textContent ?? "")).slice(0, 3);
|
|
715
715
|
for (const [o, p] of h.entries()) {
|
|
716
|
-
const f = ((
|
|
716
|
+
const f = ((O = p.textContent) == null ? void 0 : O.trim().replace(/\s+/g, " ").slice(0, 36)) || `Overlay ${o + 1}`;
|
|
717
717
|
v.push({
|
|
718
718
|
id: `flow-overlay-${o + 1}`,
|
|
719
719
|
category: "overlay-trigger",
|
|
@@ -735,7 +735,7 @@ class ie {
|
|
|
735
735
|
}
|
|
736
736
|
const C = Array.from(a.querySelectorAll("table")).slice(0, 2);
|
|
737
737
|
for (const [o, p] of C.entries()) {
|
|
738
|
-
const f = ((
|
|
738
|
+
const f = ((H = (y = p.querySelector("caption")) == null ? void 0 : y.textContent) == null ? void 0 : H.trim()) || p.getAttribute("aria-label") || `Data Table ${o + 1}`;
|
|
739
739
|
v.push({
|
|
740
740
|
id: `flow-table-${o + 1}`,
|
|
741
741
|
category: "data-table",
|
|
@@ -743,25 +743,25 @@ class ie {
|
|
|
743
743
|
targetDescription: `Tabular data grid (${p.querySelectorAll("tbody tr").length} rows visible)`
|
|
744
744
|
});
|
|
745
745
|
}
|
|
746
|
-
const w = (o) => o.replace(/["[\]()]/g, "").replace(/\s+/g, " ").trim(),
|
|
746
|
+
const w = (o) => o.replace(/["[\]()]/g, "").replace(/\s+/g, " ").trim(), m = [
|
|
747
747
|
"flowchart TD",
|
|
748
748
|
` AppRoot["${w(i)} (${n.theme} / ${n.polarity})"]`,
|
|
749
749
|
` Guard["CapriEngine Guard: ${t.score}/100 (${t.horizontalOverflowPx}px overflow)"]`,
|
|
750
750
|
" AppRoot --> Guard"
|
|
751
751
|
];
|
|
752
|
-
|
|
752
|
+
l.slice(0, 6).forEach((o, p) => {
|
|
753
753
|
const f = `LM_${p + 1}`;
|
|
754
|
-
|
|
754
|
+
m.push(
|
|
755
755
|
` AppRoot --> ${f}["${w(o.id)}: ${w(o.title)} (${o.interactiveCount} actions)"]`
|
|
756
756
|
);
|
|
757
757
|
}), v.slice(0, 5).forEach((o, p) => {
|
|
758
758
|
const f = `UF_${p + 1}`;
|
|
759
|
-
|
|
759
|
+
m.push(
|
|
760
760
|
` Guard --> ${f}["[${o.category}] ${w(o.triggerLabel)}"]`
|
|
761
761
|
);
|
|
762
762
|
});
|
|
763
|
-
const x =
|
|
764
|
-
`),
|
|
763
|
+
const x = m.join(`
|
|
764
|
+
`), k = [
|
|
765
765
|
`# ${i} — Automated Architecture, User-Flow & AI Context Dossier`,
|
|
766
766
|
`Generated by \`@zen-ui/system\` // \`capri.docu()\` at \`${(/* @__PURE__ */ new Date()).toISOString()}\``,
|
|
767
767
|
"",
|
|
@@ -770,19 +770,19 @@ class ie {
|
|
|
770
770
|
`- **Active Theme & Polarity:** \`${n.theme}\` (\`${n.polarity}\`)`,
|
|
771
771
|
`- **Corner Radius & Density:** \`${n.radius}\` / \`${n.density}\``,
|
|
772
772
|
`- **Viewport & Reduced Motion:** \`${n.viewportWidth}x${n.viewportHeight}\` (DPR \`${n.devicePixelRatio}\`, reducedMotion=\`${n.reducedMotion}\`)`,
|
|
773
|
-
`- **W3C Custom Elements Registered:** ${
|
|
773
|
+
`- **W3C Custom Elements Registered:** ${u.customElements.map((o) => `\`<${o}>\``).join(", ") || "None"}`,
|
|
774
774
|
`- **DOM, Security & WCAG 2.2 AA Audit Score:** **${t.score}/100** (${t.passed ? "PASSED" : "VIOLATIONS DETECTED"}, \`${t.horizontalOverflowPx}px\` horizontal overflow, promptInjectionSafe=\`${t.promptInjectionSafe}\`)`,
|
|
775
775
|
"",
|
|
776
776
|
"## 2. Component Inventory on Current Screen",
|
|
777
|
-
`- **Buttons & Action Triggers:** ${
|
|
778
|
-
`- **Text Inputs, Textareas & Selects:** ${
|
|
779
|
-
`- **Switches, Checkboxes & Radio Controls:** ${
|
|
780
|
-
`- **Glass Cards & Surface Containers:** ${
|
|
781
|
-
`- **Data Tables:** ${
|
|
782
|
-
`- **Status Badges & Live Alerts:** ${
|
|
777
|
+
`- **Buttons & Action Triggers:** ${u.buttons}`,
|
|
778
|
+
`- **Text Inputs, Textareas & Selects:** ${u.inputsAndSelects}`,
|
|
779
|
+
`- **Switches, Checkboxes & Radio Controls:** ${u.switchesAndRadios}`,
|
|
780
|
+
`- **Glass Cards & Surface Containers:** ${u.cardsAndSurfaces}`,
|
|
781
|
+
`- **Data Tables:** ${u.tables}`,
|
|
782
|
+
`- **Status Badges & Live Alerts:** ${u.badgesAndAlerts}`,
|
|
783
783
|
"",
|
|
784
784
|
"## 3. Semantic Landmark & Section Hierarchy",
|
|
785
|
-
...
|
|
785
|
+
...l.map(
|
|
786
786
|
(o) => `- **\`#${o.id}\` (\`<${o.tag}>\`)** — *${o.title}* (${o.interactiveCount} interactive triggers, ${o.formControlsCount} form controls)`
|
|
787
787
|
),
|
|
788
788
|
"",
|
|
@@ -803,11 +803,11 @@ class ie {
|
|
|
803
803
|
routePath: r,
|
|
804
804
|
telemetry: n,
|
|
805
805
|
audit: t,
|
|
806
|
-
landmarks:
|
|
807
|
-
inventory:
|
|
806
|
+
landmarks: l,
|
|
807
|
+
inventory: u,
|
|
808
808
|
userFlows: v,
|
|
809
809
|
mermaidDiagram: x,
|
|
810
|
-
markdownBundle:
|
|
810
|
+
markdownBundle: k
|
|
811
811
|
};
|
|
812
812
|
}
|
|
813
813
|
exportMarkdownDocu(e = this.activeSubroutine, n, t = !1) {
|
|
@@ -820,7 +820,7 @@ class ie {
|
|
|
820
820
|
t ? `
|
|
821
821
|
${i.aiVoiceAddendum}` : "",
|
|
822
822
|
"",
|
|
823
|
-
...i.ruleset.map((d,
|
|
823
|
+
...i.ruleset.map((d, l) => `${l + 1}. ${d}`),
|
|
824
824
|
r ? `
|
|
825
825
|
## 7. Current Developer / AI Task
|
|
826
826
|
${r}` : ""
|
|
@@ -828,7 +828,7 @@ ${r}` : ""
|
|
|
828
828
|
`);
|
|
829
829
|
}
|
|
830
830
|
buildAgentPrompt(e = this.activeSubroutine, n, t = !1) {
|
|
831
|
-
const a = S[e], i = this.docu(), r = i.audit, d = n ? this.sanitizeForPrompt(n) : "",
|
|
831
|
+
const a = S[e], i = this.docu(), r = i.audit, d = n ? this.sanitizeForPrompt(n) : "", l = r.violations.length === 0 ? "0 violations detected (Score: 100/100, 0 prompt-injection threats, 0px overflow, 0 unlabeled controls)." : r.violations.map((c) => `- [${c.code}] (${c.selector}): ${c.message} -> Fix: ${c.fixHint}`).join(`
|
|
832
832
|
`);
|
|
833
833
|
return [
|
|
834
834
|
"# @zen-ui/system // CAPRI AI SKILL & ARCHITECTURE CONTEXT",
|
|
@@ -842,18 +842,18 @@ ${r}` : ""
|
|
|
842
842
|
${a.aiVoiceAddendum}` : "",
|
|
843
843
|
"",
|
|
844
844
|
"## 2. Mandatory Engineering Ruleset",
|
|
845
|
-
...a.ruleset.map((
|
|
845
|
+
...a.ruleset.map((c, u) => `${u + 1}. ${c}`),
|
|
846
846
|
"",
|
|
847
847
|
"## 3. Automated Screen Architecture & Component Context (capri.docu())",
|
|
848
848
|
`- Route: ${i.routePath} | Theme: ${r.activeTheme} (${r.activePolarity}) | Viewport: ${r.viewport}`,
|
|
849
849
|
`- Component Counts: ${i.inventory.buttons} buttons, ${i.inventory.inputsAndSelects} inputs/selects, ${i.inventory.tables} tables, ${i.inventory.cardsAndSurfaces} glass cards`,
|
|
850
|
-
`- Landmarks: ${i.landmarks.map((
|
|
851
|
-
`- Key User Flows: ${i.userFlows.slice(0, 6).map((
|
|
850
|
+
`- Landmarks: ${i.landmarks.map((c) => `#${c.id} (${c.interactiveCount} actions)`).join(", ")}`,
|
|
851
|
+
`- Key User Flows: ${i.userFlows.slice(0, 6).map((c) => `[${c.category}] ${c.triggerLabel}`).join(" | ")}`,
|
|
852
852
|
"",
|
|
853
853
|
"## 4. Live CapriEngine Security, DOM & WCAG Telemetry",
|
|
854
854
|
`- Audit Score: ${r.score}/100 (${r.passed ? "PASSED" : "ACTION REQUIRED"}) | Prompt-Injection Firewall: ${r.promptInjectionSafe ? "CLEAN (0 threats)" : `${r.promptThreatsCount} THREAT(S) BLOCKED`}`,
|
|
855
855
|
`- Findings:
|
|
856
|
-
${
|
|
856
|
+
${l}`,
|
|
857
857
|
d ? `
|
|
858
858
|
## 5. Requested Task
|
|
859
859
|
${d}` : ""
|
|
@@ -870,7 +870,7 @@ ${d}` : ""
|
|
|
870
870
|
n(this.activeSubroutine, e);
|
|
871
871
|
}
|
|
872
872
|
}
|
|
873
|
-
const we = new ie(),
|
|
873
|
+
const we = new ie(), D = [
|
|
874
874
|
{
|
|
875
875
|
id: "blackwall-crimson",
|
|
876
876
|
name: "Capri // Capricorn",
|
|
@@ -951,7 +951,7 @@ const we = new ie(), P = [
|
|
|
951
951
|
secondaryHex: "#0284C7",
|
|
952
952
|
inkHex: "#09090D"
|
|
953
953
|
}
|
|
954
|
-
],
|
|
954
|
+
], N = [
|
|
955
955
|
{
|
|
956
956
|
id: "orion",
|
|
957
957
|
label: "CAPRI // UNLEASHED",
|
|
@@ -1005,8 +1005,8 @@ const we = new ie(), P = [
|
|
|
1005
1005
|
]
|
|
1006
1006
|
}
|
|
1007
1007
|
];
|
|
1008
|
-
function
|
|
1009
|
-
const e =
|
|
1008
|
+
function G(s) {
|
|
1009
|
+
const e = D.find((n) => n.id === s);
|
|
1010
1010
|
return e ? e.polarity : "dark";
|
|
1011
1011
|
}
|
|
1012
1012
|
class oe {
|
|
@@ -1019,13 +1019,13 @@ class oe {
|
|
|
1019
1019
|
if (typeof window < "u")
|
|
1020
1020
|
try {
|
|
1021
1021
|
const t = window.localStorage.getItem(this.storageKey);
|
|
1022
|
-
t &&
|
|
1022
|
+
t && D.some((a) => a.id === t) && (n = t);
|
|
1023
1023
|
} catch {
|
|
1024
1024
|
n = (e == null ? void 0 : e.defaultTheme) ?? "blackwall-crimson";
|
|
1025
1025
|
}
|
|
1026
1026
|
this.state = {
|
|
1027
1027
|
theme: n,
|
|
1028
|
-
polarity:
|
|
1028
|
+
polarity: G(n),
|
|
1029
1029
|
density: (e == null ? void 0 : e.defaultDensity) ?? "comfortable",
|
|
1030
1030
|
radius: (e == null ? void 0 : e.defaultRadius) ?? "architectural"
|
|
1031
1031
|
}, this.applyToDom();
|
|
@@ -1037,7 +1037,7 @@ class oe {
|
|
|
1037
1037
|
if (this.state = {
|
|
1038
1038
|
...this.state,
|
|
1039
1039
|
theme: e,
|
|
1040
|
-
polarity:
|
|
1040
|
+
polarity: G(e)
|
|
1041
1041
|
}, typeof window < "u")
|
|
1042
1042
|
try {
|
|
1043
1043
|
window.localStorage.setItem(this.storageKey, e);
|
|
@@ -1070,8 +1070,8 @@ class oe {
|
|
|
1070
1070
|
if (typeof document > "u") return;
|
|
1071
1071
|
const e = document.documentElement;
|
|
1072
1072
|
e.setAttribute("data-theme", this.state.theme), e.setAttribute("data-polarity", this.state.polarity), e.setAttribute("data-density", this.state.density), e.setAttribute("data-radius", this.state.radius);
|
|
1073
|
-
const n =
|
|
1074
|
-
|
|
1073
|
+
const n = D.find((t) => t.id === this.state.theme) ?? D[0];
|
|
1074
|
+
Y(n);
|
|
1075
1075
|
}
|
|
1076
1076
|
notify() {
|
|
1077
1077
|
for (const e of this.listeners)
|
|
@@ -1099,7 +1099,7 @@ class se {
|
|
|
1099
1099
|
}
|
|
1100
1100
|
}
|
|
1101
1101
|
}
|
|
1102
|
-
const
|
|
1102
|
+
const Z = new oe(), _ = new se();
|
|
1103
1103
|
class ce extends HTMLElement {
|
|
1104
1104
|
constructor() {
|
|
1105
1105
|
super(...arguments);
|
|
@@ -1134,16 +1134,16 @@ class ce extends HTMLElement {
|
|
|
1134
1134
|
const n = performance.now(), t = (a) => {
|
|
1135
1135
|
const i = (a - n) * 1e-3;
|
|
1136
1136
|
if (this.smoothPointer.x += (this.pointer.x - this.smoothPointer.x) * 0.12, this.smoothPointer.y += (this.pointer.y - this.smoothPointer.y) * 0.12, this.figureEl) {
|
|
1137
|
-
const r = Math.sin(i * 2.1) * 3.5, d = this.smoothPointer.x * 5.5,
|
|
1138
|
-
this.figureEl.style.transform = `perspective(900px) translateY(${r.toFixed(2)}px) rotateX(${
|
|
1137
|
+
const r = Math.sin(i * 2.1) * 3.5, d = this.smoothPointer.x * 5.5, l = -this.smoothPointer.y * 3.5;
|
|
1138
|
+
this.figureEl.style.transform = `perspective(900px) translateY(${r.toFixed(2)}px) rotateX(${l.toFixed(2)}deg) rotateY(${d.toFixed(2)}deg)`;
|
|
1139
1139
|
}
|
|
1140
1140
|
if (this.canvasEl) {
|
|
1141
1141
|
const r = this.canvasEl.getContext("2d");
|
|
1142
1142
|
if (r) {
|
|
1143
|
-
const d = this.canvasEl.width,
|
|
1144
|
-
r.clearRect(0, 0, d,
|
|
1145
|
-
const
|
|
1146
|
-
if (
|
|
1143
|
+
const d = this.canvasEl.width, l = this.canvasEl.height;
|
|
1144
|
+
r.clearRect(0, 0, d, l);
|
|
1145
|
+
const c = Math.sin(i * 1.1 - 1.2) > 0.992 || Math.sin(i * 2.9 - 1.5) > 0.995, u = this.smoothPointer.x * (d * 85e-4), v = this.smoothPointer.y * (l * 55e-4), b = d * 0.562 + u, h = l * 0.233 + v, A = d * 0.474 + u * 0.75, C = l * 0.25 + v * 0.75;
|
|
1146
|
+
if (c)
|
|
1147
1147
|
r.save(), r.strokeStyle = "#00FF66", r.lineWidth = 2.5, r.beginPath(), r.moveTo(b - d * 0.014, h), r.lineTo(b + d * 0.014, h), r.stroke(), r.restore();
|
|
1148
1148
|
else {
|
|
1149
1149
|
r.save(), r.globalCompositeOperation = "screen";
|
|
@@ -1164,13 +1164,13 @@ class ce extends HTMLElement {
|
|
|
1164
1164
|
this.rafId = window.requestAnimationFrame(t);
|
|
1165
1165
|
}
|
|
1166
1166
|
render() {
|
|
1167
|
-
const n =
|
|
1167
|
+
const n = V(
|
|
1168
1168
|
this.getAttribute("title") ?? "CAPRI // CONSTRUCT"
|
|
1169
|
-
), t =
|
|
1169
|
+
), t = V(
|
|
1170
1170
|
this.getAttribute("subtitle") ?? "Edgerunners S2 // Soulkiller Net-Driver"
|
|
1171
|
-
), a =
|
|
1171
|
+
), a = ue(
|
|
1172
1172
|
this.getAttribute("image-src") ?? "/capri-construct-base.png"
|
|
1173
|
-
), i =
|
|
1173
|
+
), i = N.find((l) => l.id === this.activeMode) ?? N[0];
|
|
1174
1174
|
this.innerHTML = `
|
|
1175
1175
|
<div class="zen-surface-selected" style="padding: 1.25rem; position: relative; overflow: hidden;">
|
|
1176
1176
|
<div style="display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 1rem;">
|
|
@@ -1198,29 +1198,29 @@ class ce extends HTMLElement {
|
|
|
1198
1198
|
<p style="font-size: 0.75rem; color: var(--zen-ink-secondary); margin: 0;">${i.transmission}</p>
|
|
1199
1199
|
</div>
|
|
1200
1200
|
<div style="display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; margin-top: 0.75rem;">
|
|
1201
|
-
${
|
|
1202
|
-
(
|
|
1203
|
-
<button type="button" data-directive="${
|
|
1204
|
-
${
|
|
1201
|
+
${N.map(
|
|
1202
|
+
(l) => `
|
|
1203
|
+
<button type="button" data-directive="${l.id}" class="zen-btn-base zen-btn-sm ${l.id === this.activeMode ? "zen-btn-primary" : "zen-btn-secondary"}" style="justify-content: flex-start; font-family: var(--zen-font-mono); font-size: 0.6875rem;">
|
|
1204
|
+
${l.label}
|
|
1205
1205
|
</button>
|
|
1206
1206
|
`
|
|
1207
1207
|
).join("")}
|
|
1208
1208
|
</div>
|
|
1209
1209
|
</div>
|
|
1210
|
-
`, this.canvasEl = this.querySelector("[data-capri-eyes]"), this.figureEl = this.querySelector("[data-capri-figure]"), this.querySelectorAll("[data-framing]").forEach((
|
|
1211
|
-
|
|
1212
|
-
const
|
|
1213
|
-
(
|
|
1210
|
+
`, this.canvasEl = this.querySelector("[data-capri-eyes]"), this.figureEl = this.querySelector("[data-capri-figure]"), this.querySelectorAll("[data-framing]").forEach((l) => {
|
|
1211
|
+
l.addEventListener("click", () => {
|
|
1212
|
+
const c = l.getAttribute("framing") ?? l.dataset.framing;
|
|
1213
|
+
(c === "portrait" || c === "full") && (_.playMicroClick(560), this.framing = c, this.setAttribute("framing", c), this.render(), this.startEyeLoop());
|
|
1214
1214
|
});
|
|
1215
|
-
}), this.querySelectorAll("[data-directive]").forEach((
|
|
1216
|
-
|
|
1217
|
-
const
|
|
1218
|
-
if (!
|
|
1219
|
-
|
|
1220
|
-
const
|
|
1221
|
-
|
|
1215
|
+
}), this.querySelectorAll("[data-directive]").forEach((l) => {
|
|
1216
|
+
l.addEventListener("click", () => {
|
|
1217
|
+
const c = l.dataset.directive;
|
|
1218
|
+
if (!c) return;
|
|
1219
|
+
_.playMicroClick(620), this.activeMode = c, this.setAttribute("mode", c);
|
|
1220
|
+
const u = N.find((v) => v.id === c);
|
|
1221
|
+
u && this.dispatchEvent(
|
|
1222
1222
|
new CustomEvent("zen-directive", {
|
|
1223
|
-
detail: { directive:
|
|
1223
|
+
detail: { directive: u },
|
|
1224
1224
|
bubbles: !0,
|
|
1225
1225
|
composed: !0
|
|
1226
1226
|
})
|
|
@@ -1252,7 +1252,7 @@ class de extends HTMLElement {
|
|
|
1252
1252
|
g(this, "unsubscribe", null);
|
|
1253
1253
|
}
|
|
1254
1254
|
connectedCallback() {
|
|
1255
|
-
this.unsubscribe =
|
|
1255
|
+
this.unsubscribe = Z.subscribe(() => {
|
|
1256
1256
|
this.render();
|
|
1257
1257
|
});
|
|
1258
1258
|
}
|
|
@@ -1260,10 +1260,10 @@ class de extends HTMLElement {
|
|
|
1260
1260
|
this.unsubscribe && (this.unsubscribe(), this.unsubscribe = null);
|
|
1261
1261
|
}
|
|
1262
1262
|
render() {
|
|
1263
|
-
const { theme: n } =
|
|
1263
|
+
const { theme: n } = Z.getState();
|
|
1264
1264
|
this.innerHTML = `
|
|
1265
1265
|
<div style="display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;">
|
|
1266
|
-
${
|
|
1266
|
+
${D.map(
|
|
1267
1267
|
(t) => `
|
|
1268
1268
|
<button
|
|
1269
1269
|
type="button"
|
|
@@ -1279,9 +1279,9 @@ class de extends HTMLElement {
|
|
|
1279
1279
|
`, this.querySelectorAll("[data-theme-id]").forEach((t) => {
|
|
1280
1280
|
t.addEventListener("click", () => {
|
|
1281
1281
|
const a = t.dataset.themeId;
|
|
1282
|
-
a && (
|
|
1282
|
+
a && (_.playMicroClick(540), Z.setTheme(a), this.dispatchEvent(
|
|
1283
1283
|
new CustomEvent("zen-theme-change", {
|
|
1284
|
-
detail:
|
|
1284
|
+
detail: Z.getState(),
|
|
1285
1285
|
bubbles: !0,
|
|
1286
1286
|
composed: !0
|
|
1287
1287
|
})
|
|
@@ -1290,7 +1290,7 @@ class de extends HTMLElement {
|
|
|
1290
1290
|
});
|
|
1291
1291
|
}
|
|
1292
1292
|
}
|
|
1293
|
-
class
|
|
1293
|
+
class me extends HTMLElement {
|
|
1294
1294
|
static get observedAttributes() {
|
|
1295
1295
|
return ["name", "size", "tone", "stroke-width", "spin"];
|
|
1296
1296
|
}
|
|
@@ -1311,15 +1311,15 @@ class ue extends HTMLElement {
|
|
|
1311
1311
|
});
|
|
1312
1312
|
}
|
|
1313
1313
|
}
|
|
1314
|
-
function
|
|
1315
|
-
return
|
|
1314
|
+
function V(s) {
|
|
1315
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
1316
1316
|
}
|
|
1317
|
-
function
|
|
1318
|
-
const e =
|
|
1319
|
-
return /^(?:javascript|data|vbscript)
|
|
1317
|
+
function ue(s) {
|
|
1318
|
+
const e = s.trim(), n = e.replace(/[\u0000-\u0020]+/g, "");
|
|
1319
|
+
return /^(?:javascript|data|vbscript|file):/i.test(n) ? "/capri-construct-base.png" : V(e);
|
|
1320
1320
|
}
|
|
1321
1321
|
function Ae() {
|
|
1322
|
-
typeof window > "u" || !("customElements" in window) || (window.customElements.get("zen-icon") || window.customElements.define("zen-icon",
|
|
1322
|
+
typeof window > "u" || !("customElements" in window) || (window.customElements.get("zen-icon") || window.customElements.define("zen-icon", me), window.customElements.get("zen-ai-construct") || window.customElements.define("zen-ai-construct", ce), window.customElements.get("zen-ambient-background") || window.customElements.define(
|
|
1323
1323
|
"zen-ambient-background",
|
|
1324
1324
|
le
|
|
1325
1325
|
), window.customElements.get("zen-theme-switcher") || window.customElements.define("zen-theme-switcher", de));
|
|
@@ -1328,25 +1328,25 @@ export {
|
|
|
1328
1328
|
S as C,
|
|
1329
1329
|
fe as Z,
|
|
1330
1330
|
ie as a,
|
|
1331
|
-
|
|
1331
|
+
R as b,
|
|
1332
1332
|
we as c,
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1333
|
+
T as d,
|
|
1334
|
+
E as e,
|
|
1335
|
+
D as f,
|
|
1336
1336
|
ce as g,
|
|
1337
1337
|
le as h,
|
|
1338
1338
|
ve as i,
|
|
1339
|
-
|
|
1339
|
+
me as j,
|
|
1340
1340
|
oe as k,
|
|
1341
1341
|
ge as l,
|
|
1342
1342
|
de as m,
|
|
1343
1343
|
se as n,
|
|
1344
|
-
|
|
1344
|
+
V as o,
|
|
1345
1345
|
re as p,
|
|
1346
|
-
|
|
1346
|
+
Y as q,
|
|
1347
1347
|
Ae as r,
|
|
1348
|
-
|
|
1349
|
-
|
|
1348
|
+
ue as s,
|
|
1349
|
+
Z as t,
|
|
1350
1350
|
be as u,
|
|
1351
|
-
|
|
1351
|
+
_ as z
|
|
1352
1352
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zen-ui-capri/system",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "zeN-UI // CAPRI — Universal Multi-Framework Design System (51 Primitives, 40 Vector Icons, 8 Dark/Light Themes & Capri 5-Subroutine AI Co-Pilot)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -77,4 +77,4 @@
|
|
|
77
77
|
"typescript": "~5.8.2",
|
|
78
78
|
"vite": "^6.2.0"
|
|
79
79
|
}
|
|
80
|
-
}
|
|
80
|
+
}
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import { Volume2, VolumeX, Disc3 } from 'lucide-react';
|
|
2
|
-
import type { ZenAudioSynthController, ZenSynthPresetId } from './useZenAudioSynth';
|
|
3
|
-
import { ZenButton } from '../components/ZenButton';
|
|
4
|
-
import { ZenSegmentedControl } from '../components/ZenSegmentedControl';
|
|
5
|
-
|
|
6
|
-
export interface ZenAudioControllerProps {
|
|
7
|
-
readonly synth: ZenAudioSynthController;
|
|
8
|
-
readonly mode?: 'pill' | 'deck';
|
|
9
|
-
readonly activeLabel?: string;
|
|
10
|
-
readonly idleLabel?: string;
|
|
11
|
-
readonly className?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function ZenAudioController({
|
|
15
|
-
synth,
|
|
16
|
-
mode = 'pill',
|
|
17
|
-
activeLabel = 'Lo-Fi Radio: ON',
|
|
18
|
-
idleLabel = 'Lo-Fi Background',
|
|
19
|
-
className = '',
|
|
20
|
-
}: ZenAudioControllerProps) {
|
|
21
|
-
if (mode === 'pill') {
|
|
22
|
-
return (
|
|
23
|
-
<ZenButton
|
|
24
|
-
variant="secondary"
|
|
25
|
-
size="sm"
|
|
26
|
-
mono
|
|
27
|
-
pressed={synth.active}
|
|
28
|
-
onClick={synth.toggle}
|
|
29
|
-
aria-label="Toggle procedural ambient synthesizer"
|
|
30
|
-
className={className}
|
|
31
|
-
iconLeft={
|
|
32
|
-
synth.active ? (
|
|
33
|
-
<Volume2 className="w-3.5 h-3.5 animate-pulse" />
|
|
34
|
-
) : (
|
|
35
|
-
<VolumeX className="w-3.5 h-3.5 text-[var(--zen-accent-primary)]" />
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
>
|
|
39
|
-
{synth.active ? activeLabel : idleLabel}
|
|
40
|
-
</ZenButton>
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<div
|
|
46
|
-
data-zen-occlude="true"
|
|
47
|
-
className={`p-5 rounded-3xl zen-surface-static flex flex-col gap-4 ${className}`.trim()}
|
|
48
|
-
>
|
|
49
|
-
<div className="flex flex-wrap items-center justify-between gap-3">
|
|
50
|
-
<div className="flex items-center gap-3">
|
|
51
|
-
<Disc3
|
|
52
|
-
className={`w-6 h-6 text-[var(--zen-accent-primary)] ${
|
|
53
|
-
synth.active ? 'animate-spin' : ''
|
|
54
|
-
}`}
|
|
55
|
-
/>
|
|
56
|
-
<div>
|
|
57
|
-
<div className="zen-telemetry-label text-[var(--zen-accent-primary)]">
|
|
58
|
-
WEB AUDIO PROCEDURAL SYNTHESIZER
|
|
59
|
-
</div>
|
|
60
|
-
<div className="zen-font-display font-bold text-base text-[var(--zen-ink-primary)]">
|
|
61
|
-
Zero-Dependency Acoustic Engine
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
|
|
66
|
-
<ZenButton
|
|
67
|
-
variant={synth.active ? 'primary' : 'secondary'}
|
|
68
|
-
size="sm"
|
|
69
|
-
mono
|
|
70
|
-
pressed={synth.active}
|
|
71
|
-
onClick={synth.toggle}
|
|
72
|
-
iconLeft={
|
|
73
|
-
synth.active ? (
|
|
74
|
-
<Volume2 className="w-3.5 h-3.5" />
|
|
75
|
-
) : (
|
|
76
|
-
<VolumeX className="w-3.5 h-3.5" />
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
>
|
|
80
|
-
{synth.active ? 'SYNTH ACTIVE' : 'START SYNTH'}
|
|
81
|
-
</ZenButton>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pt-2 border-t border-[var(--zen-border-subtle)]">
|
|
85
|
-
<ZenSegmentedControl<ZenSynthPresetId>
|
|
86
|
-
ariaLabel="Select synthesizer voicing preset"
|
|
87
|
-
size="sm"
|
|
88
|
-
value={synth.presetId}
|
|
89
|
-
onChange={synth.setPresetId}
|
|
90
|
-
items={synth.presets.map((p) => ({
|
|
91
|
-
value: p.id,
|
|
92
|
-
label: p.label.split(' (')[0],
|
|
93
|
-
}))}
|
|
94
|
-
/>
|
|
95
|
-
|
|
96
|
-
<div className="flex items-center gap-1.5" aria-label="8-step bar sequencer">
|
|
97
|
-
{Array.from({ length: 8 }).map((_, idx) => {
|
|
98
|
-
const isBeat = synth.active && synth.currentStep === idx;
|
|
99
|
-
return (
|
|
100
|
-
<span
|
|
101
|
-
key={idx}
|
|
102
|
-
className={`h-2.5 w-2.5 rounded-full transition-all ${
|
|
103
|
-
isBeat
|
|
104
|
-
? 'bg-[var(--zen-accent-primary)] scale-125'
|
|
105
|
-
: 'bg-[var(--zen-border-default)]'
|
|
106
|
-
}`}
|
|
107
|
-
/>
|
|
108
|
-
);
|
|
109
|
-
})}
|
|
110
|
-
</div>
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
);
|
|
114
|
-
}
|
|
1
|
+
import { Volume2, VolumeX, Disc3 } from 'lucide-react';
|
|
2
|
+
import type { ZenAudioSynthController, ZenSynthPresetId } from './useZenAudioSynth';
|
|
3
|
+
import { ZenButton } from '../components/ZenButton';
|
|
4
|
+
import { ZenSegmentedControl } from '../components/ZenSegmentedControl';
|
|
5
|
+
|
|
6
|
+
export interface ZenAudioControllerProps {
|
|
7
|
+
readonly synth: ZenAudioSynthController;
|
|
8
|
+
readonly mode?: 'pill' | 'deck';
|
|
9
|
+
readonly activeLabel?: string;
|
|
10
|
+
readonly idleLabel?: string;
|
|
11
|
+
readonly className?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function ZenAudioController({
|
|
15
|
+
synth,
|
|
16
|
+
mode = 'pill',
|
|
17
|
+
activeLabel = 'Lo-Fi Radio: ON',
|
|
18
|
+
idleLabel = 'Lo-Fi Background',
|
|
19
|
+
className = '',
|
|
20
|
+
}: ZenAudioControllerProps) {
|
|
21
|
+
if (mode === 'pill') {
|
|
22
|
+
return (
|
|
23
|
+
<ZenButton
|
|
24
|
+
variant="secondary"
|
|
25
|
+
size="sm"
|
|
26
|
+
mono
|
|
27
|
+
pressed={synth.active}
|
|
28
|
+
onClick={synth.toggle}
|
|
29
|
+
aria-label="Toggle procedural ambient synthesizer"
|
|
30
|
+
className={className}
|
|
31
|
+
iconLeft={
|
|
32
|
+
synth.active ? (
|
|
33
|
+
<Volume2 className="w-3.5 h-3.5 animate-pulse" />
|
|
34
|
+
) : (
|
|
35
|
+
<VolumeX className="w-3.5 h-3.5 text-[var(--zen-accent-primary)]" />
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
>
|
|
39
|
+
{synth.active ? activeLabel : idleLabel}
|
|
40
|
+
</ZenButton>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div
|
|
46
|
+
data-zen-occlude="true"
|
|
47
|
+
className={`p-5 rounded-3xl zen-surface-static flex flex-col gap-4 ${className}`.trim()}
|
|
48
|
+
>
|
|
49
|
+
<div className="flex flex-wrap items-center justify-between gap-3">
|
|
50
|
+
<div className="flex items-center gap-3">
|
|
51
|
+
<Disc3
|
|
52
|
+
className={`w-6 h-6 text-[var(--zen-accent-primary)] ${
|
|
53
|
+
synth.active ? 'animate-spin' : ''
|
|
54
|
+
}`}
|
|
55
|
+
/>
|
|
56
|
+
<div>
|
|
57
|
+
<div className="zen-telemetry-label text-[var(--zen-accent-primary)]">
|
|
58
|
+
WEB AUDIO PROCEDURAL SYNTHESIZER
|
|
59
|
+
</div>
|
|
60
|
+
<div className="zen-font-display font-bold text-base text-[var(--zen-ink-primary)]">
|
|
61
|
+
Zero-Dependency Acoustic Engine
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<ZenButton
|
|
67
|
+
variant={synth.active ? 'primary' : 'secondary'}
|
|
68
|
+
size="sm"
|
|
69
|
+
mono
|
|
70
|
+
pressed={synth.active}
|
|
71
|
+
onClick={synth.toggle}
|
|
72
|
+
iconLeft={
|
|
73
|
+
synth.active ? (
|
|
74
|
+
<Volume2 className="w-3.5 h-3.5" />
|
|
75
|
+
) : (
|
|
76
|
+
<VolumeX className="w-3.5 h-3.5" />
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
>
|
|
80
|
+
{synth.active ? 'SYNTH ACTIVE' : 'START SYNTH'}
|
|
81
|
+
</ZenButton>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pt-2 border-t border-[var(--zen-border-subtle)]">
|
|
85
|
+
<ZenSegmentedControl<ZenSynthPresetId>
|
|
86
|
+
ariaLabel="Select synthesizer voicing preset"
|
|
87
|
+
size="sm"
|
|
88
|
+
value={synth.presetId}
|
|
89
|
+
onChange={synth.setPresetId}
|
|
90
|
+
items={synth.presets.map((p) => ({
|
|
91
|
+
value: p.id,
|
|
92
|
+
label: p.label.split(' (')[0],
|
|
93
|
+
}))}
|
|
94
|
+
/>
|
|
95
|
+
|
|
96
|
+
<div className="flex items-center gap-1.5" aria-label="8-step bar sequencer">
|
|
97
|
+
{Array.from({ length: 8 }).map((_, idx) => {
|
|
98
|
+
const isBeat = synth.active && synth.currentStep === idx;
|
|
99
|
+
return (
|
|
100
|
+
<span
|
|
101
|
+
key={idx}
|
|
102
|
+
className={`h-2.5 w-2.5 rounded-full transition-all ${
|
|
103
|
+
isBeat
|
|
104
|
+
? 'bg-[var(--zen-accent-primary)] scale-125'
|
|
105
|
+
: 'bg-[var(--zen-border-default)]'
|
|
106
|
+
}`}
|
|
107
|
+
/>
|
|
108
|
+
);
|
|
109
|
+
})}
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
@@ -167,10 +167,21 @@ export function renderZenIconSvgMarkup(options: {
|
|
|
167
167
|
readonly strokeWidth?: number;
|
|
168
168
|
readonly spin?: boolean;
|
|
169
169
|
}): string {
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
const sizeKey = options.size ?? 'md';
|
|
171
|
+
const px = Object.prototype.hasOwnProperty.call(ZEN_ICON_SIZE_PX, sizeKey)
|
|
172
|
+
? ZEN_ICON_SIZE_PX[sizeKey]
|
|
173
|
+
: ZEN_ICON_SIZE_PX.md;
|
|
174
|
+
const toneKey = options.tone ?? 'inherit';
|
|
175
|
+
const color = Object.prototype.hasOwnProperty.call(TONE_COLOR_MAP, toneKey)
|
|
176
|
+
? TONE_COLOR_MAP[toneKey]
|
|
177
|
+
: TONE_COLOR_MAP.inherit;
|
|
178
|
+
const sw =
|
|
179
|
+
typeof options.strokeWidth === 'number' && Number.isFinite(options.strokeWidth)
|
|
180
|
+
? Math.min(Math.max(options.strokeWidth, 0.5), 4)
|
|
181
|
+
: 2;
|
|
182
|
+
const inner = Object.prototype.hasOwnProperty.call(ZEN_ICON_SVG_INNER, options.name)
|
|
183
|
+
? ZEN_ICON_SVG_INNER[options.name]
|
|
184
|
+
: ZEN_ICON_SVG_INNER.sparkles;
|
|
174
185
|
const spinStyle = options.spin ? 'animation: spin 1s linear infinite;' : '';
|
|
175
186
|
return `<svg xmlns="http://www.w3.org/2000/svg" width="${px}" height="${px}" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="${sw}" stroke-linecap="round" stroke-linejoin="round" style="display:inline-block;vertical-align:middle;flex-shrink:0;${spinStyle}">${inner}</svg>`;
|
|
176
187
|
}
|
|
@@ -194,9 +205,15 @@ export function ZenIcon({
|
|
|
194
205
|
className = '',
|
|
195
206
|
...rest
|
|
196
207
|
}: ZenIconProps) {
|
|
197
|
-
const px = ZEN_ICON_SIZE_PX
|
|
198
|
-
|
|
199
|
-
|
|
208
|
+
const px = Object.prototype.hasOwnProperty.call(ZEN_ICON_SIZE_PX, size)
|
|
209
|
+
? ZEN_ICON_SIZE_PX[size]
|
|
210
|
+
: ZEN_ICON_SIZE_PX.md;
|
|
211
|
+
const strokeColor = Object.prototype.hasOwnProperty.call(TONE_COLOR_MAP, tone)
|
|
212
|
+
? TONE_COLOR_MAP[tone]
|
|
213
|
+
: TONE_COLOR_MAP.inherit;
|
|
214
|
+
const innerMarkup = Object.prototype.hasOwnProperty.call(ZEN_ICON_SVG_INNER, name)
|
|
215
|
+
? ZEN_ICON_SVG_INNER[name]
|
|
216
|
+
: ZEN_ICON_SVG_INNER.sparkles;
|
|
200
217
|
|
|
201
218
|
return (
|
|
202
219
|
<svg
|
package/src/lib/index.ts
CHANGED
|
@@ -696,7 +696,8 @@ export function escapeZenHtml(raw: string): string {
|
|
|
696
696
|
|
|
697
697
|
export function sanitizeZenAssetUrl(raw: string): string {
|
|
698
698
|
const trimmed = raw.trim();
|
|
699
|
-
|
|
699
|
+
const normalizedSchemeCheck = trimmed.replace(/[\u0000-\u0020]+/g, '');
|
|
700
|
+
if (/^(?:javascript|data|vbscript|file):/i.test(normalizedSchemeCheck)) {
|
|
700
701
|
return '/capri-construct-base.png';
|
|
701
702
|
}
|
|
702
703
|
return escapeZenHtml(trimmed);
|