@cyberskill/design 1.0.0 → 1.1.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/DESIGN.md +10 -9
- package/README.md +31 -28
- package/SKILL.md +13 -9
- package/VERSION +1 -1
- package/_ds_bundle.js +660 -202
- package/_ds_manifest.json +1 -1
- package/_esm/cs.mjs +14 -8
- package/_esm/react.d.ts +216 -0
- package/_esm/react.mjs +114 -0
- package/base/collections.css +31 -0
- package/base/components.css +3 -0
- package/base/data.css +33 -0
- package/base/forms.css +8 -0
- package/base/interaction.css +1 -0
- package/base/typography.css +6 -0
- package/components/_i18n/strings.js +8 -4
- package/components/ai/ai-conversation.card.html +2 -2
- package/components/ai/ai-lumi.card.html +2 -2
- package/components/ai/ai.card.html +2 -2
- package/components/brand/brand.card.html +2 -2
- package/components/button/buttons.card.html +2 -2
- package/components/data/AspectRatio.d.ts +16 -0
- package/components/data/AspectRatio.figma.tsx +12 -0
- package/components/data/AspectRatio.jsx +16 -0
- package/components/data/AspectRatio.prompt.md +7 -0
- package/components/data/Collapsible.d.ts +21 -0
- package/components/data/Collapsible.figma.tsx +12 -0
- package/components/data/Collapsible.jsx +49 -0
- package/components/data/Collapsible.prompt.md +7 -0
- package/components/data/Image.d.ts +4 -0
- package/components/data/Image.prompt.md +2 -2
- package/components/data/Item.d.ts +26 -0
- package/components/data/Item.figma.tsx +12 -0
- package/components/data/Item.jsx +63 -0
- package/components/data/Item.prompt.md +10 -0
- package/components/data/ScrollArea.d.ts +16 -0
- package/components/data/ScrollArea.figma.tsx +12 -0
- package/components/data/ScrollArea.jsx +25 -0
- package/components/data/ScrollArea.prompt.md +7 -0
- package/components/data/collections.card.html +15 -4
- package/components/data/data.card.html +15 -4
- package/components/datatable/datatable.card.html +2 -2
- package/components/dialog/dialog.card.html +2 -2
- package/components/feedback/feedback-2.card.html +2 -2
- package/components/feedback/feedback.card.html +2 -2
- package/components/forms/Cascader.jsx +5 -3
- package/components/forms/Editor.prompt.md +1 -1
- package/components/forms/InputGroup.d.ts +4 -0
- package/components/forms/InputGroup.jsx +38 -8
- package/components/forms/InputGroup.prompt.md +3 -3
- package/components/forms/NativeSelect.d.ts +22 -0
- package/components/forms/NativeSelect.figma.tsx +12 -0
- package/components/forms/NativeSelect.jsx +56 -0
- package/components/forms/NativeSelect.prompt.md +10 -0
- package/components/forms/NumberField.d.ts +5 -0
- package/components/forms/NumberField.jsx +51 -7
- package/components/forms/NumberField.prompt.md +2 -2
- package/components/forms/SegmentedControl.jsx +1 -1
- package/components/forms/TagInput.d.ts +3 -0
- package/components/forms/TagInput.jsx +62 -20
- package/components/forms/TagInput.prompt.md +2 -2
- package/components/forms/forms-2.card.html +2 -2
- package/components/forms/forms.card.html +5 -4
- package/components/icon/Icon.prompt.md +1 -1
- package/components/icon/icon.card.html +2 -2
- package/components/logo/Logo.jsx +2 -1
- package/components/logo/logo.card.html +2 -2
- package/components/navigation/Menu.jsx +14 -1
- package/components/navigation/navigation.card.html +2 -2
- package/components/navigation/shell.card.html +2 -2
- package/components/overlays/AlertDialog.d.ts +29 -0
- package/components/overlays/AlertDialog.figma.tsx +12 -0
- package/components/overlays/AlertDialog.jsx +142 -0
- package/components/overlays/AlertDialog.prompt.md +12 -0
- package/components/overlays/Drawer.jsx +1 -1
- package/components/overlays/Popconfirm.jsx +14 -1
- package/components/overlays/Popover.jsx +14 -1
- package/components/overlays/alertdialog.card.html +42 -0
- package/components/overlays/overlays.card.html +2 -2
- package/components/textfield/textfield.card.html +2 -2
- package/docs/benchmark-rubric.md +46 -0
- package/docs/ci-cd.md +17 -11
- package/docs/consumer-grant.md +37 -0
- package/docs/consuming.md +45 -16
- package/docs/contrast-report.md +91 -103
- package/docs/conventions.md +12 -9
- package/docs/decisions.md +33 -10
- package/docs/deploy.md +1 -1
- package/docs/design-styles.md +26 -8
- package/docs/figma.md +3 -3
- package/docs/live-hub.md +5 -3
- package/docs/products.md +13 -11
- package/docs/quality-gates.md +35 -21
- package/docs/release-notes.md +21 -3
- package/docs/status/assets/favicon.svg +5 -0
- package/docs/status/assets/status-legacy.css +399 -0
- package/docs/status/assets/status-legacy.js +505 -0
- package/docs/status/assets/status.css +644 -0
- package/docs/status/assets/status.js +1308 -0
- package/docs/status/data/status-feed.json +1 -0
- package/docs/status/data/task/TASK-REL-001.js +1 -0
- package/docs/status/data/task/TASK-REL-002.js +1 -0
- package/docs/status/index.html +42 -0
- package/docs/status/roadmap.html +4 -0
- package/docs/status/status-legacy.html +117 -0
- package/docs/storybook.md +5 -4
- package/docs/sync.md +3 -2
- package/docs/tasks/BACKLOG.md +26 -0
- package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +55 -0
- package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +54 -0
- package/docs/template-schema-v2.md +15 -3
- package/docs/vi/benchmark-rubric.md +46 -0
- package/docs/vi/ci-cd.md +17 -11
- package/docs/vi/consumer-grant.md +37 -0
- package/docs/vi/consuming.md +45 -16
- package/docs/vi/contrast-report.md +94 -106
- package/docs/vi/conventions.md +12 -9
- package/docs/vi/decisions.md +33 -10
- package/docs/vi/deploy.md +1 -1
- package/docs/vi/design-styles.md +26 -8
- package/docs/vi/figma.md +3 -3
- package/docs/vi/live-hub.md +5 -3
- package/docs/vi/products.md +13 -11
- package/docs/vi/quality-gates.md +35 -21
- package/docs/vi/release-notes.md +26 -8
- package/docs/vi/storybook.md +5 -4
- package/docs/vi/sync.md +3 -2
- package/docs/vi/template-schema-v2.md +15 -3
- package/docs/viewer.html +2 -2
- package/fonts/spacegrotesk-var-latin-ext.woff2 +0 -0
- package/fonts/spacegrotesk-var-latin.woff2 +0 -0
- package/fonts/spacegrotesk-var-vietnamese.woff2 +0 -0
- package/guidelines/atomic-view.html +40 -27
- package/guidelines/elements-geometry.html +69 -0
- package/guidelines/elements-variants.html +17 -17
- package/guidelines/type-families.html +16 -10
- package/llms.txt +17 -11
- package/package.json +38 -16
- package/styles.css +1 -0
- package/templates/ai-cluster-demo.html +29 -14
- package/templates/app-shell/support.js +4 -4
- package/templates/article/content-schema.json +6 -0
- package/templates/article/support.js +4 -4
- package/templates/auth/support.js +4 -4
- package/templates/bod-deck/support.js +4 -4
- package/templates/bod-investor-update/support.js +4 -4
- package/templates/bod-memo/support.js +4 -4
- package/templates/bod-minutes/content-schema.json +12 -0
- package/templates/bod-minutes/support.js +4 -4
- package/templates/bod-report/support.js +4 -4
- package/templates/bod-resolution/support.js +4 -4
- package/templates/culture-event-invite/support.js +4 -4
- package/templates/dashboard/support.js +4 -4
- package/templates/delivery-change-note/support.js +4 -4
- package/templates/delivery-kickoff/support.js +4 -4
- package/templates/delivery-qbr-deck/support.js +4 -4
- package/templates/delivery-runbook/content-schema.json +6 -0
- package/templates/delivery-runbook/support.js +4 -4
- package/templates/delivery-status-email/support.js +4 -4
- package/templates/doc-style-guide/DocStyleGuide.dc.html +2 -2
- package/templates/doc-style-guide/support.js +4 -4
- package/templates/doc-suite-index/support.js +4 -4
- package/templates/doc-templates/DocTemplates.dc.html +1 -1
- package/templates/doc-templates/support.js +4 -4
- package/templates/email/support.js +4 -4
- package/templates/email-safe/README.md +17 -4
- package/templates/email-safe/email-launch.html +3 -3
- package/templates/email-safe/email-newsletter.html +1 -1
- package/templates/finance-dunning-email/support.js +4 -4
- package/templates/finance-expense-report/support.js +4 -4
- package/templates/finance-invoice/support.js +4 -4
- package/templates/finance-quote/support.js +4 -4
- package/templates/hr-announcement/support.js +4 -4
- package/templates/hr-interview-kit/content-schema.json +12 -0
- package/templates/hr-interview-kit/support.js +4 -4
- package/templates/hr-offboarding/content-schema.json +12 -0
- package/templates/hr-offboarding/support.js +4 -4
- package/templates/hr-performance-review/content-schema.json +12 -0
- package/templates/hr-performance-review/support.js +4 -4
- package/templates/hr-pip/content-schema.json +12 -0
- package/templates/hr-pip/support.js +4 -4
- package/templates/legal-msa/content-schema.json +16 -0
- package/templates/legal-msa/support.js +4 -4
- package/templates/legal-sow/support.js +4 -4
- package/templates/marketing-campaign-brief/support.js +4 -4
- package/templates/marketing-case-study/support.js +4 -4
- package/templates/marketing-launch/support.js +4 -4
- package/templates/marketing-newsletter/support.js +4 -4
- package/templates/marketing-page/content-schema.json +0 -1
- package/templates/marketing-page/support.js +4 -4
- package/templates/marketing-press-release/support.js +4 -4
- package/templates/marketing-social-kit/support.js +4 -4
- package/templates/playground.html +8 -4
- package/templates/sales-one-pager/support.js +4 -4
- package/templates/sales-proposal-deck/support.js +4 -4
- package/templates/settings/Settings.dc.html +26 -14
- package/templates/settings/content-schema.json +36 -0
- package/templates/settings/support.js +4 -4
- package/templates/slide-deck/support.js +4 -4
- package/templates/team-meeting-agenda/content-schema.json +16 -0
- package/templates/team-meeting-agenda/support.js +4 -4
- package/templates/tech-incident-report/support.js +4 -4
- package/templates/tech-release-notes/support.js +4 -4
- package/templates/tech-retro/content-schema.json +12 -0
- package/templates/tech-retro/support.js +4 -4
- package/templates/tech-rfc/content-schema.json +6 -0
- package/templates/tech-rfc/support.js +4 -4
- package/templates/vn-appointment-transfer/support.js +4 -4
- package/templates/vn-certificate-of-employment/support.js +4 -4
- package/templates/vn-code-of-conduct/support.js +4 -4
- package/templates/vn-compensation-regulation/support.js +4 -4
- package/templates/vn-contract-amendment/support.js +4 -4
- package/templates/vn-contractor-agreement/support.js +4 -4
- package/templates/vn-data-protection-policy/support.js +4 -4
- package/templates/vn-disciplinary-case-file/support.js +4 -4
- package/templates/vn-disciplinary-schedule/content-schema.json +15 -0
- package/templates/vn-disciplinary-schedule/support.js +4 -4
- package/templates/vn-employee-request/support.js +4 -4
- package/templates/vn-exit-handover/support.js +4 -4
- package/templates/vn-foreign-employee-pack/support.js +4 -4
- package/templates/vn-grassroots-democracy/support.js +4 -4
- package/templates/vn-infosec-policy/support.js +4 -4
- package/templates/vn-internal-labor-regulations/support.js +4 -4
- package/templates/vn-internship-agreement/support.js +4 -4
- package/templates/vn-job-description/support.js +4 -4
- package/templates/vn-labor-contract/support.js +4 -4
- package/templates/vn-labour-management-book/content-schema.json +15 -0
- package/templates/vn-labour-management-book/support.js +4 -4
- package/templates/vn-mutual-nda/support.js +4 -4
- package/templates/vn-ndnca-ip/support.js +4 -4
- package/templates/vn-offer-letter/support.js +4 -4
- package/templates/vn-onboarding-checklist/support.js +4 -4
- package/templates/vn-pdpl-consent/support.js +4 -4
- package/templates/vn-performance-evaluation-regulation/support.js +4 -4
- package/templates/vn-performance-review-form/support.js +4 -4
- package/templates/vn-phantom-stock/support.js +4 -4
- package/templates/vn-probation-contract/support.js +4 -4
- package/templates/vn-receipt-acknowledgement/content-schema.json +15 -0
- package/templates/vn-receipt-acknowledgement/support.js +4 -4
- package/templates/vn-remote-work-policy/support.js +4 -4
- package/templates/vn-resignation-letter/support.js +4 -4
- package/templates/vn-salary-scale/content-schema.json +15 -0
- package/templates/vn-salary-scale/support.js +4 -4
- package/templates/vn-sow-appendix/support.js +4 -4
- package/templates/vn-termination-decision/support.js +4 -4
- package/templates/vn-total-rewards-appendix/support.js +4 -4
- package/templates/vn-training-commitment/support.js +4 -4
- package/templates/vn-travel-expense-policy/support.js +4 -4
- package/tokens/element-seeds.json +112 -0
- package/tokens/elements.css +274 -187
- package/tokens/fonts.css +12 -3
- package/tokens/native/CSTokens.kt +84 -68
- package/tokens/native/CSTokens.swift +84 -68
- package/tokens/native/cs_tokens.dart +84 -68
- package/tokens/provenance.json +9 -9
- package/tokens/styles.css +15 -0
- package/tokens/tokens.dtcg.json +258 -233
- package/tokens/tokens.js +168 -167
- package/tokens/tokens.json +167 -166
- package/tokens/typography.css +9 -1
- package/ui_kits/status-hub/README.md +1 -2
- package/ui_kits/status-hub/index.html +2 -2
- package/ui_kits/status-hub/settings.html +6 -3
- package/ui_kits/website/chat.html +2 -2
- package/ui_kits/website/index.html +2 -2
- package/ui_kits/status-hub/identity-lab.html +0 -134
package/llms.txt
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# CyberSkill Design System
|
|
2
2
|
|
|
3
|
-
> HTML-first, Vietnamese-first design system,
|
|
3
|
+
> HTML-first, Vietnamese-first design system, LAUNCHED **v1.1.0**; current **v1.1.1**. Immutable anchors: Umber #45210E · Ochre #F4BA17. Four independent axes — Theme (light · dark · system) × Element (Ngũ Hành, 15 variants) × Language (EN · VI) × Style (`data-cs-style` — sole pack **liquid-glass**; absent ≡ default). It ships 105 components / 121 exports, 84 copyable templates (EN·VN for emails + team/legal/finance; client/media collateral EN-first), and tokens in CSS + JSON + ESM + W3C DTCG + native mirrors. This file is the agent/tool front door: it maps each audience to the format it should consume. npm package name is **`@cyberskill/design`** (not `@cyberskill/react`). Release signal: tip SHA + [docs/release-notes.md](docs/release-notes.md) — VERSION **1.1.1**, no CHANGELOG.
|
|
4
4
|
|
|
5
|
-
The portable contract
|
|
5
|
+
The portable contract covers browser and bundler entry points: `styles.css` · `_esm/cs.mjs` legacy · `_ds_bundle.js` · tokens work without a build step; `_esm/react.mjs` is bundler-native JSX (Next/Vite must transpile — not a bare-browser import). The DC layer (`templates/**/*.dc.html`) is **Claude Design / authoring-environment-only**. **Google Stitch must not treat `*.dc.html` as source of truth** — use `DESIGN.md`, DTCG, `styles.css`, kitchen-sink, and `.cs-*` static HTML instead. Dual path: [docs/consuming.md](docs/consuming.md). The full non-negotiables list lives in `CONTRIBUTING.md` and `docs/conventions.md`.
|
|
6
6
|
|
|
7
7
|
## Consume by audience
|
|
8
8
|
|
|
9
|
-
- **Claude Code** → [SKILL.md](SKILL.md) first, then [README.md](README.md): compose with `styles.css` + `_esm/cs.mjs` / `_ds_bundle.js` (prefix resolve). Optional DC templates only when the session has the compiler. Gates/`_audit/` need a full clone.
|
|
9
|
+
- **Claude Code** → [SKILL.md](SKILL.md) first, then [README.md](README.md): compose with `styles.css` + bundler `_esm/react.mjs` / legacy `_esm/cs.mjs` / `_ds_bundle.js` (prefix resolve). Optional DC templates only when the session has the compiler. Gates/`_audit/` need a full clone.
|
|
10
10
|
- **Google Stitch** → [DESIGN.md](DESIGN.md) first, then this file + [tokens/tokens.dtcg.json](tokens/tokens.dtcg.json): generate **static** UI. Do **not** open or rewrite `templates/**/*.dc.html` as if they were plain HTML.
|
|
11
11
|
- [styles.css](styles.css): any web / framework / email (Vue, Svelte, plain HTML, React) — link this one file for every `--cs-*` token, the `.cs-*` component classes, and the Liquid Glass surfaces. Framework-agnostic, no build step.
|
|
12
|
-
- [_esm/
|
|
12
|
+
- [_esm/react.mjs](_esm/react.mjs): **default** npm entry — `import { Button, … } from "@cyberskill/design"` (React peer; Next/Vite transpile). Also `@cyberskill/design/react`.
|
|
13
|
+
- [_esm/cs.mjs](_esm/cs.mjs): browser / no-build legacy — `import { Button, … } from "@cyberskill/design/legacy"` (self-ensures React; still link `styles.css`). **Not for Next/SSR.**
|
|
13
14
|
- [_ds_bundle.js](_ds_bundle.js): React (production) — `styles.css` + `<script src="_ds_bundle.js">`, then resolve the bundle global by prefix (its `_<projectId>` suffix is compiler-assigned and changes on re-import): `const CS = window[Object.keys(window).find(k => /^CyberSkillDesignSystem_/.test(k))]; const { Button, … } = CS`. Proven green by `_audit/consumer-smoke-test.html`. (Templates load via `ds-base.js`, which publishes a stable `window.CyberSkillDS` alias for the same reason.)
|
|
14
15
|
- [tokens/tokens.json](tokens/tokens.json): design tools / native / token pipelines / other agents (Figma, Google Stitch, Style Dictionary) — every token grouped by category, plus theme/element override maps; also [tokens/tokens.js](tokens/tokens.js) (ESM) and [tokens/tokens.dtcg.json](tokens/tokens.dtcg.json) (**W3C DTCG** format for Tokens Studio for Figma / Style Dictionary). This is the canonical cross-tool contract.
|
|
15
16
|
- [DESIGN.md](DESIGN.md): agents/tools that read a root DESIGN.md (Google Stitch open-spec style) — **this repo's** generated file with the brand doctrine, every token value (light + dark), and the component/template inventory. Generated from the DTCG source by `npm run build:design-md`; the `design-md-parity` gate pins it — do not hand-edit.
|
|
@@ -19,26 +20,31 @@ The portable contract (styles.css · `_esm/cs.mjs` · bundle · tokens) works ev
|
|
|
19
20
|
|
|
20
21
|
- [dashboard.html](dashboard.html): legacy redirect stub → `/` (product site is Storybook)
|
|
21
22
|
- [styles.css](styles.css): single entry point (`@import`s `tokens/` then `base/`)
|
|
22
|
-
- [_esm/
|
|
23
|
+
- [_esm/react.mjs](_esm/react.mjs): bundler-native React entry (default package export; React peer)
|
|
24
|
+
- [_esm/cs.mjs](_esm/cs.mjs): browser / no-build legacy ESM entry (`@cyberskill/design/legacy`)
|
|
23
25
|
- [tokens/](tokens/): design tokens as CSS custom properties + `tokens.json` / `tokens.js` / `tokens.dtcg.json` (W3C DTCG) + `viewer.html` (table + raw modes) + `native/` (SwiftUI/Compose/Flutter)
|
|
24
26
|
- [base/](base/): reset, component classes (`.cs-*`), a11y, responsive, glass
|
|
25
|
-
- [components/](components/):
|
|
27
|
+
- [components/](components/): 105 components / 121 exports — every primary ships `.jsx` + `.d.ts` + `.prompt.md` + a `@dsCard` card; co-exports are documented in their parent's files
|
|
26
28
|
- [templates/](templates/): 84 copyable starting points (`.dc.html`); `email-safe/` send-ready emails; `kitchen-sink.html`; `playground.html`
|
|
27
29
|
- [guidelines/](guidelines/): specimen cards + `atomic-view.html` (portable component grid) — host product surface is Storybook at `/`
|
|
30
|
+
- [examples/static-hello/](examples/static-hello/): zero-install static consumer (Stitch / plain HTML)
|
|
31
|
+
- [examples/npm-hello/](examples/npm-hello/): first registry **browser** consumer — `@cyberskill/design@1.1.1` legacy entry (Lumi · Hỏa · plasma); Status Hub teams swap to `thuy`; Next/SSR apps use default `@cyberskill/design` React entry instead
|
|
32
|
+
- [examples/native/](examples/native/): SwiftUI / Compose / Flutter sample apps + store scaffolds — Compose is **Android Studio**-first (no committed `gradlew`; see `examples/native/README.md`)
|
|
28
33
|
- [ui_kits/](ui_kits/): product recreations — status-hub · website · deck
|
|
29
|
-
- [fonts/](fonts/): self-hosted Be Vietnam Pro + JetBrains Mono woff2
|
|
34
|
+
- [fonts/](fonts/): self-hosted Be Vietnam Pro (UI) + Space Grotesk (opt-in display, `--cs-font-family-display`) + JetBrains Mono woff2
|
|
30
35
|
- [assets/](assets/): official logo mark (never recreate) · favicon · aurora washes · Lumi mascot
|
|
31
36
|
- [README.md](README.md): the entrance document — voice, visual foundations, components, templates, index
|
|
32
37
|
- [DESIGN.md](DESIGN.md): generated open-spec surface (doctrine + tokens + inventory) for Stitch-style consumers — pinned to DTCG by the design-md-parity gate
|
|
33
38
|
- [SKILL.md](SKILL.md): agent entry — hard rules + fast orientation
|
|
34
39
|
- [CONTRIBUTING.md](CONTRIBUTING.md): one-page onboarding for extending the system
|
|
35
|
-
- [VERSION](VERSION): pinned 1.
|
|
40
|
+
- [VERSION](VERSION): pinned 1.1.1 (matches [package.json](package.json))
|
|
36
41
|
|
|
37
42
|
## Docs — consumers
|
|
38
43
|
|
|
39
|
-
- [docs/consuming.md](docs/consuming.md): adopting & upgrading, Claude Code vs Stitch dual path, package name `@cyberskill/design
|
|
40
|
-
- [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog)
|
|
41
|
-
- [docs/
|
|
44
|
+
- [docs/consuming.md](docs/consuming.md): adopting & upgrading, Claude Code vs Stitch dual path, package name `@cyberskill/design`; first registry install at [examples/npm-hello/](examples/npm-hello/) (Lumi · Hỏa · plasma); native mirrors at [examples/native/](examples/native/) (SwiftUI / Compose / Flutter samples)
|
|
45
|
+
- [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog) — includes `@cyberskill/design@1.1.1` Trusted Publishing / grant pointer
|
|
46
|
+
- [docs/consumer-grant.md](docs/consumer-grant.md): written npm grant (CyberSkill portfolio; UNLICENSED)
|
|
47
|
+
- [docs/conventions.md](docs/conventions.md): authoring rules (naming grammar, the four axes)
|
|
42
48
|
- [docs/design-styles.md](docs/design-styles.md): the live styling axes and the fixed liquid-glass treatment
|
|
43
49
|
- [docs/products.md](docs/products.md): product → element registry (**locked**)
|
|
44
50
|
- [docs/contrast-report.md](docs/contrast-report.md): generated APCA elemental sweep — 0 failures at its Lc ≥ 60 UI-label floor (body text authors to Lc ≥ 75)
|
package/package.json
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyberskill/design",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/cyberskill-official/design-system.git"
|
|
11
|
+
},
|
|
12
|
+
"module": "_esm/react.mjs",
|
|
13
|
+
"types": "_esm/react.d.ts",
|
|
9
14
|
"exports": {
|
|
10
15
|
".": {
|
|
16
|
+
"types": "./_esm/react.d.ts",
|
|
17
|
+
"import": "./_esm/react.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./react": {
|
|
20
|
+
"types": "./_esm/react.d.ts",
|
|
21
|
+
"import": "./_esm/react.mjs"
|
|
22
|
+
},
|
|
23
|
+
"./legacy": {
|
|
11
24
|
"import": "./_esm/cs.mjs"
|
|
12
25
|
},
|
|
13
26
|
"./styles.css": "./styles.css",
|
|
@@ -15,8 +28,12 @@
|
|
|
15
28
|
"./_ds_bundle.js": "./_ds_bundle.js",
|
|
16
29
|
"./_ds_manifest.json": "./_ds_manifest.json"
|
|
17
30
|
},
|
|
18
|
-
"description": "CyberSkill Design System — HTML-first, Vietnamese-first (EN·VI). Anchors: Umber #45210E · Ochre #F4BA17. Axes: Theme × Element × Language.
|
|
31
|
+
"description": "CyberSkill Design System — HTML-first, Vietnamese-first (EN·VI). Anchors: Umber #45210E · Ochre #F4BA17. Axes: Theme × Element × Language × Style. Bundler React entry (`_esm/react.mjs`) + browser legacy (`_esm/cs.mjs`) + styles.css / _ds_bundle.js. Storybook is host-only playground.",
|
|
19
32
|
"style": "styles.css",
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
35
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
36
|
+
},
|
|
20
37
|
"files": [
|
|
21
38
|
"styles.css",
|
|
22
39
|
"_esm/",
|
|
@@ -47,8 +64,9 @@
|
|
|
47
64
|
"type": "module",
|
|
48
65
|
"scripts": {
|
|
49
66
|
"build:bundle": "node scripts/build-bundle.mjs",
|
|
67
|
+
"build:react-entry": "node scripts/generate-react-entry.mjs",
|
|
50
68
|
"build:design-md": "node scripts/generate-design-md.mjs",
|
|
51
|
-
"prepublishOnly": "npm run build:bundle && node scripts/generate-design-md.mjs --check",
|
|
69
|
+
"prepublishOnly": "npm run build:bundle && npm run build:react-entry && node scripts/generate-design-md.mjs --check",
|
|
52
70
|
"code-connect:generate": "node _audit/ci/generate-code-connect.mjs",
|
|
53
71
|
"code-connect:dry-run": "node _audit/ci/code-connect-publish.mjs --dry-run",
|
|
54
72
|
"npm:pack-dry-run": "node _audit/ci/npm-publish.mjs --dry-run",
|
|
@@ -62,27 +80,31 @@
|
|
|
62
80
|
"test:nav-model": "node _audit/ci/test-nav-model.mjs",
|
|
63
81
|
"test:ui-contracts": "node _audit/ci/test-health-tokens-contract.mjs",
|
|
64
82
|
"test:form-paths": "node _audit/ci/test-form-paths.mjs",
|
|
65
|
-
"test:unit": "node _audit/ci/test-nav-model.mjs && node _audit/ci/test-health-tokens-contract.mjs && node _audit/ci/test-form-paths.mjs && node _audit/ci/test-storybook-contract.mjs && node _audit/ci/test-figma-push-helpers.mjs && node _audit/ci/test-native-samples.mjs && node _audit/ci/test-code-connect.mjs && node _audit/ci/test-subtree-consume.mjs",
|
|
83
|
+
"test:unit": "node _audit/ci/test-nav-model.mjs && node _audit/ci/test-health-tokens-contract.mjs && node _audit/ci/test-form-paths.mjs && node _audit/ci/test-storybook-contract.mjs && node _audit/ci/test-axe-coverage.mjs && node _audit/ci/test-figma-push-helpers.mjs && node _audit/ci/test-native-samples.mjs && node _audit/ci/test-code-connect.mjs && node _audit/ci/test-subtree-consume.mjs && node _audit/ci/test-react-entry.mjs && node _audit/ci/test-element-packs.mjs",
|
|
84
|
+
"test:element-packs": "node _audit/ci/test-element-packs.mjs",
|
|
85
|
+
"test:react-entry": "node _audit/ci/test-react-entry.mjs",
|
|
66
86
|
"test:subtree-consume": "node _audit/ci/test-subtree-consume.mjs",
|
|
67
87
|
"native:sync-tokens": "node examples/native/sync-tokens.mjs",
|
|
68
88
|
"test:storybook-contract": "node _audit/ci/test-storybook-contract.mjs",
|
|
69
89
|
"test:storybook-coverage": "node _audit/ci/test-storybook-contract.mjs",
|
|
70
90
|
"test:figma-helpers": "node _audit/ci/test-figma-push-helpers.mjs",
|
|
71
91
|
"test:code-connect": "node _audit/ci/test-code-connect.mjs",
|
|
72
|
-
"test:native-samples": "node _audit/ci/test-native-samples.mjs"
|
|
92
|
+
"test:native-samples": "node _audit/ci/test-native-samples.mjs",
|
|
93
|
+
"tokens:elements": "node scripts/generate-element-packs.mjs",
|
|
94
|
+
"tokens:contrast": "node scripts/generate-contrast-report.mjs"
|
|
73
95
|
},
|
|
74
96
|
"devDependencies": {
|
|
75
97
|
"@figma/code-connect": "^1.4.9",
|
|
76
|
-
"@storybook/addon-a11y": "^10.5.
|
|
77
|
-
"@storybook/addon-docs": "^10.5.
|
|
78
|
-
"@storybook/react": "^10.5.
|
|
79
|
-
"@storybook/react-vite": "^10.5.
|
|
80
|
-
"@vitejs/plugin-react": "^
|
|
98
|
+
"@storybook/addon-a11y": "^10.5.4",
|
|
99
|
+
"@storybook/addon-docs": "^10.5.4",
|
|
100
|
+
"@storybook/react": "^10.5.4",
|
|
101
|
+
"@storybook/react-vite": "^10.5.4",
|
|
102
|
+
"@vitejs/plugin-react": "^6.0.4",
|
|
81
103
|
"esbuild": "^0.28.1",
|
|
82
|
-
"playwright": "^1.
|
|
83
|
-
"react": "^
|
|
84
|
-
"react-dom": "^
|
|
85
|
-
"storybook": "^10.5.
|
|
86
|
-
"vite": "^
|
|
104
|
+
"playwright": "^1.62.0",
|
|
105
|
+
"react": "^19.2.8",
|
|
106
|
+
"react-dom": "^19.2.8",
|
|
107
|
+
"storybook": "^10.5.4",
|
|
108
|
+
"vite": "^8.1.5"
|
|
87
109
|
}
|
|
88
110
|
}
|
package/styles.css
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
@import url("tokens/motion.css");
|
|
17
17
|
@import url("tokens/component-tokens.css");
|
|
18
18
|
@import url("tokens/elements.css");
|
|
19
|
+
@import url("tokens/styles.css");
|
|
19
20
|
|
|
20
21
|
/* 3 — Base: reset, type utilities, component classes, Liquid Glass surfaces */
|
|
21
22
|
@import url("base/reset.css");
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
h1{font-size:18px;margin:0 0 8px} .sub{color:var(--cs-color-text-muted);font-size:13px;line-height:1.5;margin:0 0 18px}
|
|
9
9
|
#root{display:grid;gap:14px}
|
|
10
10
|
</style>
|
|
11
|
-
<script src="https://unpkg.com/react@
|
|
12
|
-
<script src="https://unpkg.com/react
|
|
11
|
+
<script src="https://unpkg.com/umd-react@19.2.8/dist/react.development.js" crossorigin="anonymous"></script>
|
|
12
|
+
<script src="https://unpkg.com/umd-react@19.2.8/dist/react-dom.development.js" crossorigin="anonymous"></script>
|
|
13
13
|
<script src="../_ds_bundle.js"></script>
|
|
14
|
-
</head><body data-cs-
|
|
14
|
+
</head><body data-cs-element="tho" data-cs-style="liquid-glass">
|
|
15
15
|
<h1>AI cluster demo</h1>
|
|
16
|
-
<p class="sub">End-to-end productization story for Lumi AI surfaces: disclosure, confidence, citations, chat message, prompt input. Axes: Theme × Element × Language (parent frame may post <code>__cs_axes</code>).</p>
|
|
16
|
+
<p class="sub">End-to-end productization story for Lumi AI surfaces: disclosure, confidence, citations, chat message, prompt input. Axes: Theme × Element × Language × Style (parent frame may post <code>__cs_axes</code>).</p>
|
|
17
17
|
<div id="root"></div>
|
|
18
18
|
<script>
|
|
19
19
|
const NS=window[Object.keys(window).find(k=>/^CyberSkillDesignSystem_[0-9a-f]{6}$/.test(k))];
|
|
@@ -22,23 +22,38 @@ function App(){
|
|
|
22
22
|
const [lang,setLang]=React.useState('en');
|
|
23
23
|
React.useEffect(()=>{
|
|
24
24
|
const on=e=>{const d=e.data||{}; if(d.type==='__cs_axes'){
|
|
25
|
-
|
|
26
|
-
if(d.
|
|
27
|
-
if(d.
|
|
25
|
+
const root=document.documentElement;
|
|
26
|
+
if(d.theme!==undefined){ if(d.theme) root.setAttribute('data-theme', d.theme); else root.removeAttribute('data-theme'); }
|
|
27
|
+
if(d.element!==undefined){ if(d.element) root.setAttribute('data-cs-element', d.element); else root.removeAttribute('data-cs-element'); }
|
|
28
|
+
if(d.variant!==undefined){ if(d.variant) root.setAttribute('data-cs-variant', d.variant); else root.removeAttribute('data-cs-variant'); }
|
|
29
|
+
if(d.style!==undefined){ if(d.style) root.setAttribute('data-cs-style', d.style); else root.removeAttribute('data-cs-style'); }
|
|
30
|
+
if(d.lang){ setLang(d.lang); root.setAttribute('lang', d.lang); }
|
|
28
31
|
}};
|
|
29
32
|
window.addEventListener('message',on); return ()=>window.removeEventListener('message',on);
|
|
30
33
|
},[]);
|
|
31
34
|
if(!NS) return h('p',null,'Bundle missing');
|
|
32
35
|
const {AIDisclosureBadge,ConfidenceMeter,CitationList,ChatMessage,PromptInput,PromptSuggestions,TypingIndicator,HumanReviewGate}=NS;
|
|
36
|
+
const vi=lang==='vi';
|
|
33
37
|
return h('div',{id:'cluster',lang},
|
|
34
|
-
AIDisclosureBadge?h(AIDisclosureBadge,{
|
|
38
|
+
AIDisclosureBadge?h(AIDisclosureBadge,{
|
|
39
|
+
label: vi?'Có hỗ trợ AI':'AI assisted',
|
|
40
|
+
details: vi?'Bản nháp do Lumi tạo, đội ngũ đã xem.':'Draft generated by Lumi, reviewed by the team.',
|
|
41
|
+
sources:['SKILL.md','llms.txt']
|
|
42
|
+
}):null,
|
|
35
43
|
ConfidenceMeter?h(ConfidenceMeter,{value:0.82,lang}):null,
|
|
36
|
-
CitationList?h(CitationList,{items:[{title:'SKILL.md',
|
|
37
|
-
ChatMessage?h(ChatMessage,{role:'
|
|
38
|
-
TypingIndicator?h(TypingIndicator
|
|
39
|
-
PromptSuggestions?h(PromptSuggestions,{
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
CitationList?h(CitationList,{items:[{title:'SKILL.md',href:'#skill'},{title:'llms.txt',href:'#llms'}]}):null,
|
|
45
|
+
ChatMessage?h(ChatMessage,{role:'lumi',children: vi?'Xin chào — Lumi sẵn sàng.':'Hello — Lumi is ready.'}):null,
|
|
46
|
+
TypingIndicator?h(TypingIndicator):null,
|
|
47
|
+
PromptSuggestions?h(PromptSuggestions,{
|
|
48
|
+
suggestions: vi?['Tóm tắt ticket','Soạn email']:['Summarise ticket','Draft email'],
|
|
49
|
+
onSelect:()=>{}
|
|
50
|
+
}):null,
|
|
51
|
+
PromptInput?h(PromptInput,{placeholder: vi?'Hỏi Lumi…':'Ask Lumi…'}):null,
|
|
52
|
+
HumanReviewGate?h(HumanReviewGate,{
|
|
53
|
+
risk: vi?'Rủi ro cao · thay đổi billing':'High-stakes · billing change',
|
|
54
|
+
summary: vi?'Lumi đề xuất chuyển gói năm và hoàn tiền theo tỉ lệ.':'Lumi proposes moving to the annual plan and issuing a prorated credit.',
|
|
55
|
+
reviewer: vi?'Ops trực ca':'Ops on call'
|
|
56
|
+
}):null
|
|
42
57
|
);
|
|
43
58
|
}
|
|
44
59
|
ReactDOM.createRoot(document.getElementById('root')).render(h(App));
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|
|
@@ -126,8 +126,8 @@
|
|
|
126
126
|
<tr><td style="padding:6px 10px">Ảnh mạng xã hội<div style="color:#3F4C55;font-style:italic;font-size:11px">Social image</div></td><td style="padding:6px 10px">Khổ cố định theo kênh; màu/kiểu chữ/logo theo hệ thống.<div style="color:#3F4C55;font-style:italic;font-size:11px">Fixed per-channel size; system colour/type/logo.</div></td></tr>
|
|
127
127
|
</tbody>
|
|
128
128
|
</table>
|
|
129
|
-
<p style="font-size:14px;line-height:1.55;margin:0 0 2px">
|
|
130
|
-
<p style="font-size:12.5px;line-height:1.5;color:#3F4C55;font-style:italic;margin:0 0 8px">The
|
|
129
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 2px">Bốn trục nhận diện — <b>Theme × Element (Ngũ Hành) × Language × Style</b> — áp dụng cho mọi mẫu. Nhấn của một sản phẩm dùng token <span style="font-family:var(--cs-font-family-mono);font-size:12px">--cs-accent-*</span>, không dùng mã màu cứng. Pack Style duy nhất là <b>liquid-glass</b>.</p>
|
|
130
|
+
<p style="font-size:12.5px;line-height:1.5;color:#3F4C55;font-style:italic;margin:0 0 8px">The four identity axes — <b>Theme × Element (Ngũ Hành) × Language × Style</b> — apply to every template. A product's accent consumes the <span style="font-family:var(--cs-font-family-mono);font-size:12px">--cs-accent-*</span> tokens, never a raw hex. Style’s sole pack is <b>liquid-glass</b>.</p>
|
|
131
131
|
|
|
132
132
|
<div style="border-top:1px solid var(--cs-color-border-default);padding-top:8px;margin-top:8px;display:flex;gap:10px;font-size:10.5px;color:var(--cs-color-text-muted);flex-wrap:wrap">Hiện Thực Hoá Ý Chí · <i style="color:#3F4C55">Turn Your Will Into Real</i><span>·</span>MST: 0316475200<span>·</span>info@cyberskill.world<span>·</span>(+84) 906 878 091<span style="margin-left:auto">Trang / Page 1</span></div>
|
|
133
133
|
</div>
|
|
@@ -1070,10 +1070,10 @@
|
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
// src/cdn.ts
|
|
1073
|
-
var REACT_URL = "https://unpkg.com/react@
|
|
1074
|
-
var REACT_SRI = "sha384
|
|
1075
|
-
var REACT_DOM_URL = "https://unpkg.com/react
|
|
1076
|
-
var REACT_DOM_SRI = "sha384-
|
|
1073
|
+
var REACT_URL = "https://unpkg.com/umd-react@19.2.8/dist/react.production.min.js";
|
|
1074
|
+
var REACT_SRI = "sha384-/nh8CKeV7Pk42Gpda6L4DM1JtZ2bwPOi+eh9O7+a1Y22UkGs8+mw3aW1shQ9FV30";
|
|
1075
|
+
var REACT_DOM_URL = "https://unpkg.com/umd-react@19.2.8/dist/react-dom.production.min.js";
|
|
1076
|
+
var REACT_DOM_SRI = "sha384-rhLCB72qrpcezgY2QW0panvW9IeO32m94nvuDVRD/iEGHXoUbjtijL6Xi/Z5/mzu";
|
|
1077
1077
|
var BABEL_URL = "https://unpkg.com/@babel/standalone@7.29.0/babel.min.js";
|
|
1078
1078
|
var BABEL_SRI = "sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y";
|
|
1079
1079
|
function cdnScriptFor(url, sri) {
|