@birdapi/velinstyle 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +22 -19
- package/README.md +24 -25
- package/cli/cli-manifest.json +1 -1
- package/cli/docgen/extract-attributes.js +2 -0
- package/cli/index.js +32 -3
- package/cli/transparency.js +221 -0
- package/core/a11y/component-contracts.json +1 -1
- package/core/attributes/registry.js +14 -0
- package/core/meta/schema.js +10 -0
- package/core/transparency/attach.js +74 -0
- package/core/transparency/claims.js +97 -0
- package/core/transparency/doctor.js +142 -0
- package/core/transparency/engine.js +75 -0
- package/core/transparency/export.js +98 -0
- package/core/transparency/index.js +30 -0
- package/core/transparency/migrate.js +130 -0
- package/core/transparency/normalize.js +125 -0
- package/core/transparency/policy.js +105 -0
- package/core/transparency/providers.js +235 -0
- package/core/transparency/registry.js +104 -0
- package/core/transparency/renderer.js +111 -0
- package/core/transparency/reporter.js +113 -0
- package/core/transparency/validator.js +112 -0
- package/dist/chunks/attach-H2ZSEAE6.js +365 -0
- package/dist/chunks/attributes-DZCXX2RZ.js +404 -0
- package/dist/chunks/chunk-CQMTCEI6.js +113 -0
- package/dist/chunks/runtime-entry.js +1 -1
- package/dist/llms.txt +3 -2
- package/dist/search-index.json +28 -2
- package/dist/velin-agent.json +10 -6
- package/dist/velinstyle-components.iife.js +411 -2
- package/dist/velinstyle-components.js +411 -2
- package/dist/velinstyle-components.min.js +113 -113
- package/dist/velinstyle.css +160 -0
- package/dist/velinstyle.min.css +1 -1
- package/package.json +2 -1
- package/packages/velinstyle-skills/catalog.json +1 -1
- package/src/components/transparency.css +138 -0
- package/src/velinstyle.css +1 -0
|
@@ -9260,6 +9260,402 @@ var init_motion = __esm({
|
|
|
9260
9260
|
}
|
|
9261
9261
|
});
|
|
9262
9262
|
|
|
9263
|
+
// core/transparency/claims.js
|
|
9264
|
+
function deriveClaims({ status, review, license, claims = [] } = {}) {
|
|
9265
|
+
const out = new Set(Array.isArray(claims) ? claims.filter(Boolean) : []);
|
|
9266
|
+
const statusClaim = STATUS_TO_CLAIM[String(status || "").toLowerCase()];
|
|
9267
|
+
if (statusClaim) out.add(statusClaim);
|
|
9268
|
+
const reviewClaim = REVIEW_TO_CLAIM[String(review || "").toLowerCase()];
|
|
9269
|
+
if (reviewClaim) out.add(reviewClaim);
|
|
9270
|
+
if (license) {
|
|
9271
|
+
const key = String(license).toLowerCase().trim();
|
|
9272
|
+
const mapped = LICENSE_TO_CLAIM[key] || (key.startsWith("cc") ? "license.cc-by" : null);
|
|
9273
|
+
if (mapped) out.add(mapped);
|
|
9274
|
+
}
|
|
9275
|
+
return [...out];
|
|
9276
|
+
}
|
|
9277
|
+
function claimLabel(claim, lang = "en") {
|
|
9278
|
+
const entry = CLAIM_CATALOG[claim];
|
|
9279
|
+
if (!entry) return claim;
|
|
9280
|
+
return entry.label[lang] || entry.label.en || claim;
|
|
9281
|
+
}
|
|
9282
|
+
function primaryLabel(claims = [], lang = "en") {
|
|
9283
|
+
const order = ["ai.generated", "ai.assisted", "review.human", "review.verified", "trust.official", "license.cc-by", "license.mit"];
|
|
9284
|
+
for (const c of order) {
|
|
9285
|
+
if (claims.includes(c)) return claimLabel(c, lang);
|
|
9286
|
+
}
|
|
9287
|
+
if (claims[0]) return claimLabel(claims[0], lang);
|
|
9288
|
+
return lang === "de" ? "Transparenz" : "Transparency";
|
|
9289
|
+
}
|
|
9290
|
+
var CLAIM_CATALOG, STATUS_TO_CLAIM, REVIEW_TO_CLAIM, LICENSE_TO_CLAIM;
|
|
9291
|
+
var init_claims = __esm({
|
|
9292
|
+
"core/transparency/claims.js"() {
|
|
9293
|
+
CLAIM_CATALOG = {
|
|
9294
|
+
"ai.generated": { pillar: "ai", label: { en: "AI generated", de: "KI-generiert" } },
|
|
9295
|
+
"ai.assisted": { pillar: "ai", label: { en: "AI assisted", de: "KI-unterst\xFCtzt" } },
|
|
9296
|
+
"review.human": { pillar: "ai", label: { en: "Human reviewed", de: "Mensch gepr\xFCft" } },
|
|
9297
|
+
"review.verified": { pillar: "trust", label: { en: "Verified", de: "Verifiziert" } },
|
|
9298
|
+
"security.checked": { pillar: "trust", label: { en: "Security checked", de: "Security gepr\xFCft" } },
|
|
9299
|
+
"accessibility.checked": { pillar: "trust", label: { en: "Accessibility checked", de: "Barrierefreiheit gepr\xFCft" } },
|
|
9300
|
+
"trust.official": { pillar: "trust", label: { en: "Official", de: "Offiziell" } },
|
|
9301
|
+
"trust.signed": { pillar: "trust", label: { en: "Signed", de: "Signiert" } },
|
|
9302
|
+
"trust.opensource": { pillar: "trust", label: { en: "Open source", de: "Open Source" } },
|
|
9303
|
+
"privacy.gdpr": { pillar: "compliance", label: { en: "GDPR", de: "DSGVO" } },
|
|
9304
|
+
"license.cc-by": { pillar: "compliance", label: { en: "CC BY", de: "CC BY" } },
|
|
9305
|
+
"license.mit": { pillar: "compliance", label: { en: "MIT", de: "MIT" } },
|
|
9306
|
+
"license.apache-2": { pillar: "compliance", label: { en: "Apache-2.0", de: "Apache-2.0" } },
|
|
9307
|
+
"content.updated": { pillar: "metadata", label: { en: "Updated", de: "Aktualisiert" } },
|
|
9308
|
+
"content.author": { pillar: "metadata", label: { en: "Author", de: "Autor" } },
|
|
9309
|
+
"content.source": { pillar: "metadata", label: { en: "Source", de: "Quelle" } },
|
|
9310
|
+
"content.language": { pillar: "metadata", label: { en: "Language", de: "Sprache" } },
|
|
9311
|
+
"version.current": { pillar: "metadata", label: { en: "Version", de: "Version" } },
|
|
9312
|
+
"provenance.complete": { pillar: "provenance", label: { en: "Provenance complete", de: "Nachweis vollst\xE4ndig" } }
|
|
9313
|
+
};
|
|
9314
|
+
STATUS_TO_CLAIM = {
|
|
9315
|
+
generated: "ai.generated",
|
|
9316
|
+
assisted: "ai.assisted",
|
|
9317
|
+
"ai-assisted": "ai.assisted",
|
|
9318
|
+
"human-reviewed": "review.human",
|
|
9319
|
+
"human-edited": "review.human",
|
|
9320
|
+
verified: "review.verified",
|
|
9321
|
+
edited: "review.human",
|
|
9322
|
+
draft: null
|
|
9323
|
+
};
|
|
9324
|
+
REVIEW_TO_CLAIM = {
|
|
9325
|
+
human: "review.human",
|
|
9326
|
+
"human-reviewed": "review.human",
|
|
9327
|
+
verified: "review.verified",
|
|
9328
|
+
none: null
|
|
9329
|
+
};
|
|
9330
|
+
LICENSE_TO_CLAIM = {
|
|
9331
|
+
"cc by 4.0": "license.cc-by",
|
|
9332
|
+
"cc-by": "license.cc-by",
|
|
9333
|
+
"cc-by-4.0": "license.cc-by",
|
|
9334
|
+
mit: "license.mit",
|
|
9335
|
+
"apache-2.0": "license.apache-2",
|
|
9336
|
+
apache: "license.apache-2"
|
|
9337
|
+
};
|
|
9338
|
+
}
|
|
9339
|
+
});
|
|
9340
|
+
|
|
9341
|
+
// core/transparency/registry.js
|
|
9342
|
+
function createRegistry() {
|
|
9343
|
+
const map = /* @__PURE__ */ new Map();
|
|
9344
|
+
return {
|
|
9345
|
+
register(record) {
|
|
9346
|
+
if (!record?.id) throw new Error("DisclosureRecord requires id");
|
|
9347
|
+
map.set(record.id, structuredCloneSafe(record));
|
|
9348
|
+
return map.get(record.id);
|
|
9349
|
+
},
|
|
9350
|
+
get(id) {
|
|
9351
|
+
return map.get(id) || null;
|
|
9352
|
+
},
|
|
9353
|
+
has(id) {
|
|
9354
|
+
return map.has(id);
|
|
9355
|
+
},
|
|
9356
|
+
remove(id) {
|
|
9357
|
+
return map.delete(id);
|
|
9358
|
+
},
|
|
9359
|
+
list() {
|
|
9360
|
+
return [...map.values()].map((r) => structuredCloneSafe(r));
|
|
9361
|
+
},
|
|
9362
|
+
query(predicate) {
|
|
9363
|
+
return this.list().filter(predicate);
|
|
9364
|
+
},
|
|
9365
|
+
clear() {
|
|
9366
|
+
map.clear();
|
|
9367
|
+
},
|
|
9368
|
+
size() {
|
|
9369
|
+
return map.size;
|
|
9370
|
+
},
|
|
9371
|
+
export() {
|
|
9372
|
+
return { schema: "velinstyle.transparency.registry", version: 1, items: this.list() };
|
|
9373
|
+
},
|
|
9374
|
+
diff(otherList = []) {
|
|
9375
|
+
const other = new Map(otherList.map((r) => [r.id, r]));
|
|
9376
|
+
const added = [];
|
|
9377
|
+
const removed2 = [];
|
|
9378
|
+
const changed = [];
|
|
9379
|
+
for (const r of map.values()) {
|
|
9380
|
+
if (!other.has(r.id)) added.push(r.id);
|
|
9381
|
+
else if (JSON.stringify(r) !== JSON.stringify(other.get(r.id))) changed.push(r.id);
|
|
9382
|
+
}
|
|
9383
|
+
for (const id of other.keys()) {
|
|
9384
|
+
if (!map.has(id)) removed2.push(id);
|
|
9385
|
+
}
|
|
9386
|
+
return { added, removed: removed2, changed };
|
|
9387
|
+
}
|
|
9388
|
+
};
|
|
9389
|
+
}
|
|
9390
|
+
function structuredCloneSafe(obj) {
|
|
9391
|
+
return JSON.parse(JSON.stringify(obj));
|
|
9392
|
+
}
|
|
9393
|
+
function stableDisclosureId(parts = {}) {
|
|
9394
|
+
if (parts.id) return String(parts.id).trim();
|
|
9395
|
+
const raw = [parts.file || "", parts.selector || "", parts.src || "", parts.tag || "", parts.type || ""].join("|").toLowerCase();
|
|
9396
|
+
let h = 2166136261;
|
|
9397
|
+
for (let i = 0; i < raw.length; i += 1) {
|
|
9398
|
+
h ^= raw.charCodeAt(i);
|
|
9399
|
+
h = Math.imul(h, 16777619);
|
|
9400
|
+
}
|
|
9401
|
+
return `tx-${(h >>> 0).toString(16)}`;
|
|
9402
|
+
}
|
|
9403
|
+
var init_registry2 = __esm({
|
|
9404
|
+
"core/transparency/registry.js"() {
|
|
9405
|
+
}
|
|
9406
|
+
});
|
|
9407
|
+
|
|
9408
|
+
// core/transparency/normalize.js
|
|
9409
|
+
function normalizeDisclosure(draft = {}, ctx = {}) {
|
|
9410
|
+
const provider = String(draft.provider || ctx.provider || "api");
|
|
9411
|
+
const type = String(draft.type || "ai").toLowerCase();
|
|
9412
|
+
const status = draft.status != null ? String(draft.status).toLowerCase() : void 0;
|
|
9413
|
+
const review = draft.review != null ? String(draft.review).toLowerCase() : void 0;
|
|
9414
|
+
const provenance = normalizeProvenance(draft.provenance || draft);
|
|
9415
|
+
if (draft.license && !provenance.license) provenance.license = String(draft.license);
|
|
9416
|
+
if (draft.model && !provenance.source) provenance.source = `model:${draft.model}`;
|
|
9417
|
+
if (draft.generated === true && !status) {
|
|
9418
|
+
}
|
|
9419
|
+
const resolvedStatus = status || (draft.generated === true ? "generated" : void 0);
|
|
9420
|
+
const claims = deriveClaims({
|
|
9421
|
+
status: resolvedStatus,
|
|
9422
|
+
review,
|
|
9423
|
+
license: provenance.license,
|
|
9424
|
+
claims: draft.claims
|
|
9425
|
+
});
|
|
9426
|
+
const target = {
|
|
9427
|
+
selector: draft.target?.selector || draft.selector || void 0,
|
|
9428
|
+
tag: draft.target?.tag || draft.tag || void 0,
|
|
9429
|
+
src: draft.target?.src || draft.src || void 0,
|
|
9430
|
+
file: draft.target?.file || ctx.file || draft.file || void 0
|
|
9431
|
+
};
|
|
9432
|
+
const id = stableDisclosureId({
|
|
9433
|
+
id: draft.id || draft.velinTransparencyId,
|
|
9434
|
+
selector: target.selector,
|
|
9435
|
+
src: target.src,
|
|
9436
|
+
tag: target.tag,
|
|
9437
|
+
type,
|
|
9438
|
+
file: target.file
|
|
9439
|
+
});
|
|
9440
|
+
const lang = ctx.lang === "de" ? "de" : "en";
|
|
9441
|
+
const label = draft.label ? String(draft.label) : primaryLabel(claims, lang);
|
|
9442
|
+
const updated = draft.updated || provenance.publishedAt || provenance.reviewedAt || provenance.createdAt || void 0;
|
|
9443
|
+
return {
|
|
9444
|
+
id,
|
|
9445
|
+
type,
|
|
9446
|
+
status: resolvedStatus,
|
|
9447
|
+
review,
|
|
9448
|
+
provider,
|
|
9449
|
+
claims,
|
|
9450
|
+
provenance,
|
|
9451
|
+
updated,
|
|
9452
|
+
label,
|
|
9453
|
+
description: draft.description ? String(draft.description) : void 0,
|
|
9454
|
+
renderer: draft.renderer || draft.overlay || "badge",
|
|
9455
|
+
tone: draft.tone || toneFromClaims(claims),
|
|
9456
|
+
position: draft.position || "top-right",
|
|
9457
|
+
target,
|
|
9458
|
+
meta: draft.meta && typeof draft.meta === "object" ? draft.meta : void 0
|
|
9459
|
+
};
|
|
9460
|
+
}
|
|
9461
|
+
function normalizeProvenance(src = {}) {
|
|
9462
|
+
const out = {};
|
|
9463
|
+
for (const key of PROVENANCE_KEYS) {
|
|
9464
|
+
const v = src[key] ?? src[key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)];
|
|
9465
|
+
if (v != null && String(v).trim()) out[key] = String(v).trim();
|
|
9466
|
+
}
|
|
9467
|
+
if (src["created-by"]) out.createdBy = String(src["created-by"]);
|
|
9468
|
+
if (src["created-at"]) out.createdAt = String(src["created-at"]);
|
|
9469
|
+
if (src["reviewed-at"]) out.reviewedAt = String(src["reviewed-at"]);
|
|
9470
|
+
if (src["approved-by"]) out.approvedBy = String(src["approved-by"]);
|
|
9471
|
+
if (src["published-at"]) out.publishedAt = String(src["published-at"]);
|
|
9472
|
+
return out;
|
|
9473
|
+
}
|
|
9474
|
+
function toneFromClaims(claims) {
|
|
9475
|
+
if (claims.includes("ai.generated")) return "generated";
|
|
9476
|
+
if (claims.includes("review.verified") || claims.includes("trust.official")) return "verified";
|
|
9477
|
+
if (claims.includes("review.human")) return "human";
|
|
9478
|
+
if (claims.includes("ai.assisted")) return "mixed";
|
|
9479
|
+
return "neutral";
|
|
9480
|
+
}
|
|
9481
|
+
var PROVENANCE_KEYS;
|
|
9482
|
+
var init_normalize = __esm({
|
|
9483
|
+
"core/transparency/normalize.js"() {
|
|
9484
|
+
init_claims();
|
|
9485
|
+
init_registry2();
|
|
9486
|
+
PROVENANCE_KEYS = [
|
|
9487
|
+
"createdBy",
|
|
9488
|
+
"createdAt",
|
|
9489
|
+
"reviewedAt",
|
|
9490
|
+
"approvedBy",
|
|
9491
|
+
"source",
|
|
9492
|
+
"license",
|
|
9493
|
+
"version",
|
|
9494
|
+
"publishedAt"
|
|
9495
|
+
];
|
|
9496
|
+
}
|
|
9497
|
+
});
|
|
9498
|
+
|
|
9499
|
+
// core/transparency/renderer.js
|
|
9500
|
+
function registerTransparencyRenderer(name, fn) {
|
|
9501
|
+
renderers.set(name, fn);
|
|
9502
|
+
}
|
|
9503
|
+
function renderDisclosure(el, record) {
|
|
9504
|
+
if (typeof document === "undefined" || !el) return null;
|
|
9505
|
+
const name = record.renderer || "badge";
|
|
9506
|
+
const custom = renderers.get(name);
|
|
9507
|
+
if (custom) {
|
|
9508
|
+
custom(el, record);
|
|
9509
|
+
return el.querySelector(".velin-transparency");
|
|
9510
|
+
}
|
|
9511
|
+
return defaultRender(el, record);
|
|
9512
|
+
}
|
|
9513
|
+
function defaultRender(el, record) {
|
|
9514
|
+
const cs = getComputedStyle(el);
|
|
9515
|
+
if (cs.position === "static") el.style.position = "relative";
|
|
9516
|
+
let mark = el.querySelector(":scope > .velin-transparency");
|
|
9517
|
+
if (!mark) {
|
|
9518
|
+
mark = document.createElement("div");
|
|
9519
|
+
el.prepend(mark);
|
|
9520
|
+
}
|
|
9521
|
+
const renderer = record.renderer || "badge";
|
|
9522
|
+
const tone = record.tone || "neutral";
|
|
9523
|
+
const position = record.position || "top-right";
|
|
9524
|
+
mark.className = [
|
|
9525
|
+
"velin-transparency",
|
|
9526
|
+
`velin-transparency--${renderer}`,
|
|
9527
|
+
`velin-transparency--tone-${tone}`,
|
|
9528
|
+
`velin-transparency--pos-${position}`
|
|
9529
|
+
].join(" ");
|
|
9530
|
+
mark.setAttribute("data-velin-transparency-id", record.id);
|
|
9531
|
+
mark.setAttribute("role", "note");
|
|
9532
|
+
const claimsText = (record.claims || []).join(", ");
|
|
9533
|
+
const prov = record.provenance || {};
|
|
9534
|
+
const sr = document.createElement("span");
|
|
9535
|
+
sr.className = "velin-sr-only";
|
|
9536
|
+
const lang = (el.closest("[lang]")?.getAttribute("lang") || document.documentElement.lang || "en").startsWith("de") ? "de" : "en";
|
|
9537
|
+
sr.textContent = lang === "de" ? `Transparenzhinweis: ${record.label}. ${claimsText}. ${provenanceSr(prov, "de")}` : `Transparency notice: ${record.label}. ${claimsText}. ${provenanceSr(prov, "en")}`;
|
|
9538
|
+
const visible = document.createElement("span");
|
|
9539
|
+
visible.className = "velin-transparency__label";
|
|
9540
|
+
visible.textContent = record.label || "Transparency";
|
|
9541
|
+
const details = document.createElement("span");
|
|
9542
|
+
details.className = "velin-transparency__details";
|
|
9543
|
+
details.hidden = renderer === "badge" || renderer === "icon";
|
|
9544
|
+
details.textContent = formatDetails(record, lang);
|
|
9545
|
+
mark.replaceChildren(sr, visible, details);
|
|
9546
|
+
if (record.description) mark.title = record.description;
|
|
9547
|
+
else if (details.textContent) mark.title = details.textContent;
|
|
9548
|
+
el.setAttribute("data-velin-transparency", record.id);
|
|
9549
|
+
return mark;
|
|
9550
|
+
}
|
|
9551
|
+
function provenanceSr(p, lang) {
|
|
9552
|
+
const parts = [];
|
|
9553
|
+
if (p.createdBy) parts.push(lang === "de" ? `Erstellt von ${p.createdBy}` : `Created by ${p.createdBy}`);
|
|
9554
|
+
if (p.createdAt) parts.push(lang === "de" ? `am ${p.createdAt}` : `on ${p.createdAt}`);
|
|
9555
|
+
if (p.approvedBy) parts.push(lang === "de" ? `Freigegeben von ${p.approvedBy}` : `Approved by ${p.approvedBy}`);
|
|
9556
|
+
if (p.license) parts.push(p.license);
|
|
9557
|
+
if (p.version) parts.push(`v${p.version}`);
|
|
9558
|
+
return parts.join(". ");
|
|
9559
|
+
}
|
|
9560
|
+
function formatDetails(record, lang) {
|
|
9561
|
+
const p = record.provenance || {};
|
|
9562
|
+
const bits = [];
|
|
9563
|
+
if (p.approvedBy) bits.push(lang === "de" ? `Freigabe: ${p.approvedBy}` : `Approved: ${p.approvedBy}`);
|
|
9564
|
+
if (p.license) bits.push(p.license);
|
|
9565
|
+
if (p.version) bits.push(`v${p.version}`);
|
|
9566
|
+
if (p.updated || record.updated) bits.push(record.updated || p.publishedAt || "");
|
|
9567
|
+
return bits.filter(Boolean).join(" \xB7 ");
|
|
9568
|
+
}
|
|
9569
|
+
function normalizeRendererName(name) {
|
|
9570
|
+
if (name === "corner-badge" || name === "stamp") return "badge";
|
|
9571
|
+
if (name === "floating-card" || name === "sidebar") return "panel";
|
|
9572
|
+
if (name === "banner") return "footer";
|
|
9573
|
+
return name;
|
|
9574
|
+
}
|
|
9575
|
+
var renderers;
|
|
9576
|
+
var init_renderer = __esm({
|
|
9577
|
+
"core/transparency/renderer.js"() {
|
|
9578
|
+
renderers = /* @__PURE__ */ new Map();
|
|
9579
|
+
for (const name of ["overlay", "badge", "inline", "tooltip", "footer", "ribbon", "panel", "icon", "corner-badge", "stamp", "sidebar", "floating-card", "banner"]) {
|
|
9580
|
+
registerTransparencyRenderer(name, (el, record) => {
|
|
9581
|
+
defaultRender(el, { ...record, renderer: normalizeRendererName(name) });
|
|
9582
|
+
});
|
|
9583
|
+
}
|
|
9584
|
+
}
|
|
9585
|
+
});
|
|
9586
|
+
|
|
9587
|
+
// core/transparency/attach.js
|
|
9588
|
+
var attach_exports = {};
|
|
9589
|
+
__export(attach_exports, {
|
|
9590
|
+
VelinTransparency: () => VelinTransparency,
|
|
9591
|
+
attach: () => attach,
|
|
9592
|
+
enhanceAll: () => enhanceAll,
|
|
9593
|
+
getDefaultRegistry: () => getDefaultRegistry
|
|
9594
|
+
});
|
|
9595
|
+
function attach(el, options = {}, ctx = {}) {
|
|
9596
|
+
if (!el) throw new Error("VelinTransparency.attach requires an element");
|
|
9597
|
+
const registry3 = ctx.registry || defaultRegistry;
|
|
9598
|
+
const draft = {
|
|
9599
|
+
...options,
|
|
9600
|
+
tag: el.tagName,
|
|
9601
|
+
src: el.getAttribute?.("src") || el.getAttribute?.("href") || options.src,
|
|
9602
|
+
selector: el.id ? `#${el.id}` : options.selector,
|
|
9603
|
+
id: options.id || el.getAttribute?.("velin-transparency-id") || el.id,
|
|
9604
|
+
provider: options.provider || "api"
|
|
9605
|
+
};
|
|
9606
|
+
if (el.hasAttribute?.("velin-transparency") || el.hasAttribute?.("velin-disclosure")) {
|
|
9607
|
+
draft.type = draft.type || el.getAttribute("velin-type") || "ai";
|
|
9608
|
+
draft.status = draft.status || el.getAttribute("velin-status");
|
|
9609
|
+
draft.review = draft.review || el.getAttribute("velin-review");
|
|
9610
|
+
draft.license = draft.license || el.getAttribute("velin-license");
|
|
9611
|
+
draft.label = draft.label || el.getAttribute("velin-label");
|
|
9612
|
+
draft.description = draft.description || el.getAttribute("velin-description");
|
|
9613
|
+
draft.overlay = draft.overlay || el.getAttribute("velin-overlay") || el.getAttribute("velin-renderer");
|
|
9614
|
+
draft.provenance = {
|
|
9615
|
+
createdBy: el.getAttribute("velin-created-by"),
|
|
9616
|
+
createdAt: el.getAttribute("velin-created-at"),
|
|
9617
|
+
reviewedAt: el.getAttribute("velin-reviewed-at"),
|
|
9618
|
+
approvedBy: el.getAttribute("velin-approved-by"),
|
|
9619
|
+
source: el.getAttribute("velin-source"),
|
|
9620
|
+
license: el.getAttribute("velin-license"),
|
|
9621
|
+
version: el.getAttribute("velin-version"),
|
|
9622
|
+
publishedAt: el.getAttribute("velin-published-at"),
|
|
9623
|
+
...options.provenance || {}
|
|
9624
|
+
};
|
|
9625
|
+
}
|
|
9626
|
+
const record = normalizeDisclosure(draft, { provider: draft.provider, lang: ctx.lang });
|
|
9627
|
+
registry3.register(record);
|
|
9628
|
+
if (!el.hasAttribute("velin-transparency")) el.setAttribute("velin-transparency", "");
|
|
9629
|
+
if (!el.hasAttribute("velin-transparency-id")) el.setAttribute("velin-transparency-id", record.id);
|
|
9630
|
+
renderDisclosure(el, record);
|
|
9631
|
+
return record;
|
|
9632
|
+
}
|
|
9633
|
+
function enhanceAll(root = typeof document !== "undefined" ? document : null) {
|
|
9634
|
+
if (!root?.querySelectorAll) return [];
|
|
9635
|
+
const out = [];
|
|
9636
|
+
root.querySelectorAll("[velin-transparency], [velin-disclosure]").forEach((el) => {
|
|
9637
|
+
out.push(attach(el, {}, { registry: defaultRegistry }));
|
|
9638
|
+
});
|
|
9639
|
+
return out;
|
|
9640
|
+
}
|
|
9641
|
+
function getDefaultRegistry() {
|
|
9642
|
+
return defaultRegistry;
|
|
9643
|
+
}
|
|
9644
|
+
var defaultRegistry, VelinTransparency;
|
|
9645
|
+
var init_attach = __esm({
|
|
9646
|
+
"core/transparency/attach.js"() {
|
|
9647
|
+
init_normalize();
|
|
9648
|
+
init_renderer();
|
|
9649
|
+
init_registry2();
|
|
9650
|
+
defaultRegistry = createRegistry();
|
|
9651
|
+
VelinTransparency = {
|
|
9652
|
+
attach,
|
|
9653
|
+
enhanceAll,
|
|
9654
|
+
getRegistry: getDefaultRegistry
|
|
9655
|
+
};
|
|
9656
|
+
}
|
|
9657
|
+
});
|
|
9658
|
+
|
|
9263
9659
|
// core/attributes/registry.js
|
|
9264
9660
|
function registerAttribute(name, handler) {
|
|
9265
9661
|
registry.set(name, handler);
|
|
@@ -9470,6 +9866,19 @@ function registerBuiltins() {
|
|
|
9470
9866
|
el.classList.add("velin-highlight");
|
|
9471
9867
|
}
|
|
9472
9868
|
});
|
|
9869
|
+
registerAttribute("velin-transparency", {
|
|
9870
|
+
async enhance(el) {
|
|
9871
|
+
const { attach: attach2 } = await Promise.resolve().then(() => (init_attach(), attach_exports));
|
|
9872
|
+
attach2(el);
|
|
9873
|
+
}
|
|
9874
|
+
});
|
|
9875
|
+
registerAttribute("velin-disclosure", {
|
|
9876
|
+
async enhance(el) {
|
|
9877
|
+
const { attach: attach2 } = await Promise.resolve().then(() => (init_attach(), attach_exports));
|
|
9878
|
+
if (!el.hasAttribute("velin-transparency")) el.setAttribute("velin-transparency", "");
|
|
9879
|
+
attach2(el);
|
|
9880
|
+
}
|
|
9881
|
+
});
|
|
9473
9882
|
for (const motion of ["velin-reveal", "velin-fade", "velin-slide", "velin-scale", "velin-parallax", "velin-hover", "velin-stagger", "velin-scroll"]) {
|
|
9474
9883
|
registerAttribute(motion, { enhance() {
|
|
9475
9884
|
} });
|
|
@@ -9501,7 +9910,7 @@ function listRegisteredAttributes() {
|
|
|
9501
9910
|
return [...registry.keys()];
|
|
9502
9911
|
}
|
|
9503
9912
|
var registry, enhanced;
|
|
9504
|
-
var
|
|
9913
|
+
var init_registry3 = __esm({
|
|
9505
9914
|
"core/attributes/registry.js"() {
|
|
9506
9915
|
init_runtime();
|
|
9507
9916
|
init_motion();
|
|
@@ -9521,7 +9930,7 @@ __export(attributes_exports, {
|
|
|
9521
9930
|
});
|
|
9522
9931
|
var init_attributes = __esm({
|
|
9523
9932
|
"core/attributes/index.js"() {
|
|
9524
|
-
|
|
9933
|
+
init_registry3();
|
|
9525
9934
|
}
|
|
9526
9935
|
});
|
|
9527
9936
|
|