@cyberskill/design 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +267 -0
- package/README.md +316 -0
- package/SKILL.md +64 -0
- package/VERSION +1 -0
- package/_ds_bundle.js +5377 -0
- package/_ds_manifest.json +1 -0
- package/_esm/cs.mjs +137 -0
- package/assets/aurora-gold.jpg +0 -0
- package/assets/aurora-hoa.png +0 -0
- package/assets/aurora-kim.png +0 -0
- package/assets/aurora-moc.png +0 -0
- package/assets/aurora-thuy.png +0 -0
- package/assets/favicon.svg +1 -0
- package/assets/logo-mark.png +0 -0
- package/assets/logo-mark.svg +10 -0
- package/assets/lumi-poster.webp +0 -0
- package/assets/og-dashboard.png +0 -0
- package/base/a11y.css +57 -0
- package/base/ai.css +67 -0
- package/base/collections.css +53 -0
- package/base/components.css +212 -0
- package/base/controls.css +329 -0
- package/base/data.css +48 -0
- package/base/feedback.css +60 -0
- package/base/forms.css +32 -0
- package/base/glass.css +119 -0
- package/base/interaction.css +50 -0
- package/base/navigation.css +39 -0
- package/base/reset.css +17 -0
- package/base/responsive.css +128 -0
- package/base/shell.css +55 -0
- package/base/typography.css +14 -0
- package/components/_i18n/i18n.js +56 -0
- package/components/_i18n/strings.js +187 -0
- package/components/_utils/cx.js +4 -0
- package/components/ai/AIDisclosureBadge.d.ts +16 -0
- package/components/ai/AIDisclosureBadge.figma.tsx +12 -0
- package/components/ai/AIDisclosureBadge.jsx +39 -0
- package/components/ai/AIDisclosureBadge.prompt.md +9 -0
- package/components/ai/ChatMessage.d.ts +17 -0
- package/components/ai/ChatMessage.figma.tsx +12 -0
- package/components/ai/ChatMessage.jsx +22 -0
- package/components/ai/ChatMessage.prompt.md +8 -0
- package/components/ai/CitationList.d.ts +13 -0
- package/components/ai/CitationList.figma.tsx +12 -0
- package/components/ai/CitationList.jsx +22 -0
- package/components/ai/CitationList.prompt.md +5 -0
- package/components/ai/ConfidenceMeter.d.ts +17 -0
- package/components/ai/ConfidenceMeter.figma.tsx +12 -0
- package/components/ai/ConfidenceMeter.jsx +43 -0
- package/components/ai/ConfidenceMeter.prompt.md +6 -0
- package/components/ai/HumanReviewGate.d.ts +20 -0
- package/components/ai/HumanReviewGate.figma.tsx +12 -0
- package/components/ai/HumanReviewGate.jsx +37 -0
- package/components/ai/HumanReviewGate.prompt.md +13 -0
- package/components/ai/PromptInput.d.ts +21 -0
- package/components/ai/PromptInput.figma.tsx +12 -0
- package/components/ai/PromptInput.jsx +48 -0
- package/components/ai/PromptInput.prompt.md +5 -0
- package/components/ai/PromptSuggestions.d.ts +12 -0
- package/components/ai/PromptSuggestions.figma.tsx +12 -0
- package/components/ai/PromptSuggestions.jsx +20 -0
- package/components/ai/PromptSuggestions.prompt.md +5 -0
- package/components/ai/TypingIndicator.d.ts +9 -0
- package/components/ai/TypingIndicator.figma.tsx +12 -0
- package/components/ai/TypingIndicator.jsx +14 -0
- package/components/ai/TypingIndicator.prompt.md +5 -0
- package/components/ai/ai-conversation.card.html +49 -0
- package/components/ai/ai-lumi.card.html +39 -0
- package/components/ai/ai.card.html +43 -0
- package/components/brand/LumiAvatar.d.ts +14 -0
- package/components/brand/LumiAvatar.figma.tsx +12 -0
- package/components/brand/LumiAvatar.jsx +11 -0
- package/components/brand/LumiAvatar.prompt.md +5 -0
- package/components/brand/brand.card.html +37 -0
- package/components/button/Button.d.ts +24 -0
- package/components/button/Button.figma.tsx +31 -0
- package/components/button/Button.jsx +42 -0
- package/components/button/Button.prompt.md +12 -0
- package/components/button/ButtonGroup.d.ts +11 -0
- package/components/button/ButtonGroup.figma.tsx +12 -0
- package/components/button/ButtonGroup.jsx +7 -0
- package/components/button/ButtonGroup.prompt.md +8 -0
- package/components/button/FloatingActionButton.d.ts +15 -0
- package/components/button/FloatingActionButton.figma.tsx +12 -0
- package/components/button/FloatingActionButton.jsx +20 -0
- package/components/button/FloatingActionButton.prompt.md +6 -0
- package/components/button/buttons.card.html +52 -0
- package/components/data/Accordion.d.ts +14 -0
- package/components/data/Accordion.figma.tsx +12 -0
- package/components/data/Accordion.jsx +25 -0
- package/components/data/Accordion.prompt.md +5 -0
- package/components/data/Avatar.d.ts +18 -0
- package/components/data/Avatar.figma.tsx +12 -0
- package/components/data/Avatar.jsx +17 -0
- package/components/data/Avatar.prompt.md +6 -0
- package/components/data/Card.d.ts +23 -0
- package/components/data/Card.figma.tsx +12 -0
- package/components/data/Card.jsx +27 -0
- package/components/data/Card.prompt.md +9 -0
- package/components/data/Carousel.d.ts +13 -0
- package/components/data/Carousel.figma.tsx +12 -0
- package/components/data/Carousel.jsx +26 -0
- package/components/data/Carousel.prompt.md +5 -0
- package/components/data/Chart.d.ts +17 -0
- package/components/data/Chart.figma.tsx +12 -0
- package/components/data/Chart.jsx +52 -0
- package/components/data/Chart.prompt.md +5 -0
- package/components/data/CodeBlock.d.ts +12 -0
- package/components/data/CodeBlock.figma.tsx +12 -0
- package/components/data/CodeBlock.jsx +21 -0
- package/components/data/CodeBlock.prompt.md +5 -0
- package/components/data/Comment.d.ts +18 -0
- package/components/data/Comment.figma.tsx +12 -0
- package/components/data/Comment.jsx +24 -0
- package/components/data/Comment.prompt.md +7 -0
- package/components/data/DescriptionList.d.ts +10 -0
- package/components/data/DescriptionList.figma.tsx +12 -0
- package/components/data/DescriptionList.jsx +16 -0
- package/components/data/DescriptionList.prompt.md +5 -0
- package/components/data/Divider.d.ts +13 -0
- package/components/data/Divider.figma.tsx +12 -0
- package/components/data/Divider.jsx +11 -0
- package/components/data/Divider.prompt.md +6 -0
- package/components/data/Image.d.ts +18 -0
- package/components/data/Image.figma.tsx +12 -0
- package/components/data/Image.jsx +37 -0
- package/components/data/Image.prompt.md +5 -0
- package/components/data/Kbd.d.ts +8 -0
- package/components/data/Kbd.figma.tsx +12 -0
- package/components/data/Kbd.jsx +7 -0
- package/components/data/Kbd.prompt.md +5 -0
- package/components/data/List.d.ts +16 -0
- package/components/data/List.figma.tsx +12 -0
- package/components/data/List.jsx +24 -0
- package/components/data/List.prompt.md +7 -0
- package/components/data/Masonry.d.ts +13 -0
- package/components/data/Masonry.figma.tsx +12 -0
- package/components/data/Masonry.jsx +11 -0
- package/components/data/Masonry.prompt.md +5 -0
- package/components/data/QRCode.d.ts +12 -0
- package/components/data/QRCode.figma.tsx +12 -0
- package/components/data/QRCode.jsx +17 -0
- package/components/data/QRCode.prompt.md +5 -0
- package/components/data/Sortable.d.ts +10 -0
- package/components/data/Sortable.figma.tsx +12 -0
- package/components/data/Sortable.jsx +30 -0
- package/components/data/Sortable.prompt.md +5 -0
- package/components/data/Splitter.d.ts +16 -0
- package/components/data/Splitter.figma.tsx +12 -0
- package/components/data/Splitter.jsx +31 -0
- package/components/data/Splitter.prompt.md +5 -0
- package/components/data/Stat.d.ts +15 -0
- package/components/data/Stat.figma.tsx +12 -0
- package/components/data/Stat.jsx +19 -0
- package/components/data/Stat.prompt.md +5 -0
- package/components/data/Terminal.d.ts +13 -0
- package/components/data/Terminal.figma.tsx +12 -0
- package/components/data/Terminal.jsx +32 -0
- package/components/data/Terminal.prompt.md +5 -0
- package/components/data/Timeline.d.ts +17 -0
- package/components/data/Timeline.figma.tsx +12 -0
- package/components/data/Timeline.jsx +20 -0
- package/components/data/Timeline.prompt.md +8 -0
- package/components/data/Tooltip.d.ts +14 -0
- package/components/data/Tooltip.figma.tsx +12 -0
- package/components/data/Tooltip.jsx +12 -0
- package/components/data/Tooltip.prompt.md +5 -0
- package/components/data/Tree.d.ts +13 -0
- package/components/data/Tree.figma.tsx +12 -0
- package/components/data/Tree.jsx +23 -0
- package/components/data/Tree.prompt.md +5 -0
- package/components/data/Watermark.d.ts +15 -0
- package/components/data/Watermark.figma.tsx +12 -0
- package/components/data/Watermark.jsx +15 -0
- package/components/data/Watermark.prompt.md +5 -0
- package/components/data/collections.card.html +52 -0
- package/components/data/data.card.html +50 -0
- package/components/data/qr-encode.js +80 -0
- package/components/datatable/DataGrid.d.ts +42 -0
- package/components/datatable/DataGrid.figma.tsx +12 -0
- package/components/datatable/DataGrid.jsx +149 -0
- package/components/datatable/DataGrid.prompt.md +12 -0
- package/components/datatable/DataTable.d.ts +25 -0
- package/components/datatable/DataTable.figma.tsx +12 -0
- package/components/datatable/DataTable.jsx +42 -0
- package/components/datatable/DataTable.prompt.md +15 -0
- package/components/datatable/TreeTable.d.ts +14 -0
- package/components/datatable/TreeTable.figma.tsx +12 -0
- package/components/datatable/TreeTable.jsx +47 -0
- package/components/datatable/TreeTable.prompt.md +6 -0
- package/components/datatable/datatable.card.html +51 -0
- package/components/dialog/Dialog.d.ts +22 -0
- package/components/dialog/Dialog.figma.tsx +12 -0
- package/components/dialog/Dialog.jsx +99 -0
- package/components/dialog/Dialog.prompt.md +17 -0
- package/components/dialog/dialog.card.html +46 -0
- package/components/feedback/Alert.d.ts +16 -0
- package/components/feedback/Alert.figma.tsx +17 -0
- package/components/feedback/Alert.jsx +29 -0
- package/components/feedback/Alert.prompt.md +6 -0
- package/components/feedback/Badge.d.ts +15 -0
- package/components/feedback/Badge.figma.tsx +12 -0
- package/components/feedback/Badge.jsx +12 -0
- package/components/feedback/Badge.prompt.md +6 -0
- package/components/feedback/EmptyState.d.ts +13 -0
- package/components/feedback/EmptyState.figma.tsx +12 -0
- package/components/feedback/EmptyState.jsx +16 -0
- package/components/feedback/EmptyState.prompt.md +7 -0
- package/components/feedback/ProgressBar.d.ts +15 -0
- package/components/feedback/ProgressBar.figma.tsx +12 -0
- package/components/feedback/ProgressBar.jsx +13 -0
- package/components/feedback/ProgressBar.prompt.md +5 -0
- package/components/feedback/Result.d.ts +15 -0
- package/components/feedback/Result.figma.tsx +12 -0
- package/components/feedback/Result.jsx +24 -0
- package/components/feedback/Result.prompt.md +7 -0
- package/components/feedback/Skeleton.d.ts +18 -0
- package/components/feedback/Skeleton.figma.tsx +12 -0
- package/components/feedback/Skeleton.jsx +22 -0
- package/components/feedback/Skeleton.prompt.md +6 -0
- package/components/feedback/Spinner.d.ts +11 -0
- package/components/feedback/Spinner.figma.tsx +12 -0
- package/components/feedback/Spinner.jsx +10 -0
- package/components/feedback/Spinner.prompt.md +5 -0
- package/components/feedback/StatusIndicator.d.ts +11 -0
- package/components/feedback/StatusIndicator.figma.tsx +12 -0
- package/components/feedback/StatusIndicator.jsx +12 -0
- package/components/feedback/StatusIndicator.prompt.md +5 -0
- package/components/feedback/Tag.d.ts +14 -0
- package/components/feedback/Tag.figma.tsx +12 -0
- package/components/feedback/Tag.jsx +19 -0
- package/components/feedback/Tag.prompt.md +6 -0
- package/components/feedback/Toast.d.ts +19 -0
- package/components/feedback/Toast.figma.tsx +12 -0
- package/components/feedback/Toast.jsx +30 -0
- package/components/feedback/Toast.prompt.md +7 -0
- package/components/feedback/feedback-2.card.html +43 -0
- package/components/feedback/feedback.card.html +50 -0
- package/components/forms/Calendar.d.ts +10 -0
- package/components/forms/Calendar.figma.tsx +12 -0
- package/components/forms/Calendar.jsx +43 -0
- package/components/forms/Calendar.prompt.md +5 -0
- package/components/forms/Cascader.d.ts +17 -0
- package/components/forms/Cascader.figma.tsx +12 -0
- package/components/forms/Cascader.jsx +58 -0
- package/components/forms/Cascader.prompt.md +5 -0
- package/components/forms/Checkbox.d.ts +13 -0
- package/components/forms/Checkbox.figma.tsx +12 -0
- package/components/forms/Checkbox.jsx +16 -0
- package/components/forms/Checkbox.prompt.md +6 -0
- package/components/forms/ColorPicker.d.ts +12 -0
- package/components/forms/ColorPicker.figma.tsx +12 -0
- package/components/forms/ColorPicker.jsx +44 -0
- package/components/forms/ColorPicker.prompt.md +5 -0
- package/components/forms/Combobox.d.ts +17 -0
- package/components/forms/Combobox.figma.tsx +12 -0
- package/components/forms/Combobox.jsx +49 -0
- package/components/forms/Combobox.prompt.md +6 -0
- package/components/forms/DatePicker.d.ts +15 -0
- package/components/forms/DatePicker.figma.tsx +12 -0
- package/components/forms/DatePicker.jsx +35 -0
- package/components/forms/DatePicker.prompt.md +5 -0
- package/components/forms/Editor.d.ts +12 -0
- package/components/forms/Editor.figma.tsx +12 -0
- package/components/forms/Editor.jsx +26 -0
- package/components/forms/Editor.prompt.md +5 -0
- package/components/forms/FileUpload.d.ts +14 -0
- package/components/forms/FileUpload.figma.tsx +12 -0
- package/components/forms/FileUpload.jsx +29 -0
- package/components/forms/FileUpload.prompt.md +5 -0
- package/components/forms/Form.d.ts +87 -0
- package/components/forms/Form.figma.tsx +12 -0
- package/components/forms/Form.jsx +316 -0
- package/components/forms/Form.prompt.md +46 -0
- package/components/forms/InlineEdit.d.ts +13 -0
- package/components/forms/InlineEdit.figma.tsx +12 -0
- package/components/forms/InlineEdit.jsx +27 -0
- package/components/forms/InlineEdit.prompt.md +5 -0
- package/components/forms/InputGroup.d.ts +20 -0
- package/components/forms/InputGroup.figma.tsx +12 -0
- package/components/forms/InputGroup.jsx +25 -0
- package/components/forms/InputGroup.prompt.md +6 -0
- package/components/forms/InputOTP.d.ts +16 -0
- package/components/forms/InputOTP.figma.tsx +12 -0
- package/components/forms/InputOTP.jsx +47 -0
- package/components/forms/InputOTP.prompt.md +5 -0
- package/components/forms/Mentions.d.ts +13 -0
- package/components/forms/Mentions.figma.tsx +12 -0
- package/components/forms/Mentions.jsx +31 -0
- package/components/forms/Mentions.prompt.md +5 -0
- package/components/forms/NumberField.d.ts +14 -0
- package/components/forms/NumberField.figma.tsx +12 -0
- package/components/forms/NumberField.jsx +21 -0
- package/components/forms/NumberField.prompt.md +5 -0
- package/components/forms/RadioGroup.d.ts +24 -0
- package/components/forms/RadioGroup.figma.tsx +12 -0
- package/components/forms/RadioGroup.jsx +32 -0
- package/components/forms/RadioGroup.prompt.md +6 -0
- package/components/forms/Rating.d.ts +16 -0
- package/components/forms/Rating.figma.tsx +12 -0
- package/components/forms/Rating.jsx +22 -0
- package/components/forms/Rating.prompt.md +6 -0
- package/components/forms/SearchField.d.ts +11 -0
- package/components/forms/SearchField.figma.tsx +12 -0
- package/components/forms/SearchField.jsx +25 -0
- package/components/forms/SearchField.prompt.md +5 -0
- package/components/forms/SegmentedControl.d.ts +13 -0
- package/components/forms/SegmentedControl.figma.tsx +12 -0
- package/components/forms/SegmentedControl.jsx +31 -0
- package/components/forms/SegmentedControl.prompt.md +6 -0
- package/components/forms/Select.d.ts +19 -0
- package/components/forms/Select.figma.tsx +12 -0
- package/components/forms/Select.jsx +27 -0
- package/components/forms/Select.prompt.md +6 -0
- package/components/forms/Slider.d.ts +6 -0
- package/components/forms/Slider.figma.tsx +12 -0
- package/components/forms/Slider.jsx +8 -0
- package/components/forms/Slider.prompt.md +5 -0
- package/components/forms/Switch.d.ts +12 -0
- package/components/forms/Switch.figma.tsx +12 -0
- package/components/forms/Switch.jsx +14 -0
- package/components/forms/Switch.prompt.md +5 -0
- package/components/forms/TagInput.d.ts +16 -0
- package/components/forms/TagInput.figma.tsx +12 -0
- package/components/forms/TagInput.jsx +39 -0
- package/components/forms/TagInput.prompt.md +5 -0
- package/components/forms/Textarea.d.ts +14 -0
- package/components/forms/Textarea.figma.tsx +12 -0
- package/components/forms/Textarea.jsx +19 -0
- package/components/forms/Textarea.prompt.md +5 -0
- package/components/forms/TimePicker.d.ts +16 -0
- package/components/forms/TimePicker.figma.tsx +12 -0
- package/components/forms/TimePicker.jsx +22 -0
- package/components/forms/TimePicker.prompt.md +5 -0
- package/components/forms/Toggle.d.ts +16 -0
- package/components/forms/Toggle.figma.tsx +12 -0
- package/components/forms/Toggle.jsx +15 -0
- package/components/forms/Toggle.prompt.md +6 -0
- package/components/forms/Transfer.d.ts +14 -0
- package/components/forms/Transfer.figma.tsx +12 -0
- package/components/forms/Transfer.jsx +41 -0
- package/components/forms/Transfer.prompt.md +5 -0
- package/components/forms/TreeSelect.d.ts +15 -0
- package/components/forms/TreeSelect.figma.tsx +12 -0
- package/components/forms/TreeSelect.jsx +35 -0
- package/components/forms/TreeSelect.prompt.md +5 -0
- package/components/forms/forms-2.card.html +40 -0
- package/components/forms/forms.card.html +40 -0
- package/components/icon/Icon.d.ts +26 -0
- package/components/icon/Icon.figma.tsx +12 -0
- package/components/icon/Icon.jsx +74 -0
- package/components/icon/Icon.prompt.md +8 -0
- package/components/icon/icon.card.html +38 -0
- package/components/logo/Logo.d.ts +18 -0
- package/components/logo/Logo.figma.tsx +12 -0
- package/components/logo/Logo.jsx +25 -0
- package/components/logo/Logo.prompt.md +10 -0
- package/components/logo/logo-data.js +214 -0
- package/components/logo/logo.card.html +44 -0
- package/components/navigation/Anchor.d.ts +11 -0
- package/components/navigation/Anchor.figma.tsx +12 -0
- package/components/navigation/Anchor.jsx +25 -0
- package/components/navigation/Anchor.prompt.md +5 -0
- package/components/navigation/BackTop.d.ts +9 -0
- package/components/navigation/BackTop.figma.tsx +12 -0
- package/components/navigation/BackTop.jsx +23 -0
- package/components/navigation/BackTop.prompt.md +5 -0
- package/components/navigation/Breadcrumb.d.ts +14 -0
- package/components/navigation/Breadcrumb.figma.tsx +12 -0
- package/components/navigation/Breadcrumb.jsx +24 -0
- package/components/navigation/Breadcrumb.prompt.md +5 -0
- package/components/navigation/CommandPalette.d.ts +19 -0
- package/components/navigation/CommandPalette.figma.tsx +12 -0
- package/components/navigation/CommandPalette.jsx +48 -0
- package/components/navigation/CommandPalette.prompt.md +7 -0
- package/components/navigation/Dock.d.ts +6 -0
- package/components/navigation/Dock.figma.tsx +12 -0
- package/components/navigation/Dock.jsx +22 -0
- package/components/navigation/Dock.prompt.md +5 -0
- package/components/navigation/HotKeys.d.ts +13 -0
- package/components/navigation/HotKeys.figma.tsx +12 -0
- package/components/navigation/HotKeys.jsx +44 -0
- package/components/navigation/HotKeys.prompt.md +5 -0
- package/components/navigation/Link.d.ts +12 -0
- package/components/navigation/Link.figma.tsx +12 -0
- package/components/navigation/Link.jsx +13 -0
- package/components/navigation/Link.prompt.md +5 -0
- package/components/navigation/Menu.d.ts +23 -0
- package/components/navigation/Menu.figma.tsx +12 -0
- package/components/navigation/Menu.jsx +36 -0
- package/components/navigation/Menu.prompt.md +9 -0
- package/components/navigation/Menubar.d.ts +7 -0
- package/components/navigation/Menubar.figma.tsx +12 -0
- package/components/navigation/Menubar.jsx +48 -0
- package/components/navigation/Menubar.prompt.md +5 -0
- package/components/navigation/NavigationMenu.d.ts +7 -0
- package/components/navigation/NavigationMenu.figma.tsx +12 -0
- package/components/navigation/NavigationMenu.jsx +38 -0
- package/components/navigation/NavigationMenu.prompt.md +5 -0
- package/components/navigation/Pagination.d.ts +13 -0
- package/components/navigation/Pagination.figma.tsx +12 -0
- package/components/navigation/Pagination.jsx +32 -0
- package/components/navigation/Pagination.prompt.md +5 -0
- package/components/navigation/Sidebar.d.ts +20 -0
- package/components/navigation/Sidebar.figma.tsx +12 -0
- package/components/navigation/Sidebar.jsx +24 -0
- package/components/navigation/Sidebar.prompt.md +8 -0
- package/components/navigation/Steps.d.ts +13 -0
- package/components/navigation/Steps.figma.tsx +12 -0
- package/components/navigation/Steps.jsx +20 -0
- package/components/navigation/Steps.prompt.md +5 -0
- package/components/navigation/Tabs.d.ts +21 -0
- package/components/navigation/Tabs.figma.tsx +12 -0
- package/components/navigation/Tabs.jsx +41 -0
- package/components/navigation/Tabs.prompt.md +6 -0
- package/components/navigation/Toolbar.d.ts +16 -0
- package/components/navigation/Toolbar.figma.tsx +12 -0
- package/components/navigation/Toolbar.jsx +32 -0
- package/components/navigation/Toolbar.prompt.md +5 -0
- package/components/navigation/navigation.card.html +51 -0
- package/components/navigation/shell.card.html +52 -0
- package/components/overlays/ContextMenu.d.ts +10 -0
- package/components/overlays/ContextMenu.figma.tsx +12 -0
- package/components/overlays/ContextMenu.jsx +28 -0
- package/components/overlays/ContextMenu.prompt.md +7 -0
- package/components/overlays/Drawer.d.ts +18 -0
- package/components/overlays/Drawer.figma.tsx +12 -0
- package/components/overlays/Drawer.jsx +44 -0
- package/components/overlays/Drawer.prompt.md +8 -0
- package/components/overlays/HoverCard.d.ts +13 -0
- package/components/overlays/HoverCard.figma.tsx +12 -0
- package/components/overlays/HoverCard.jsx +17 -0
- package/components/overlays/HoverCard.prompt.md +5 -0
- package/components/overlays/Popconfirm.d.ts +18 -0
- package/components/overlays/Popconfirm.figma.tsx +12 -0
- package/components/overlays/Popconfirm.jsx +33 -0
- package/components/overlays/Popconfirm.prompt.md +6 -0
- package/components/overlays/Popover.d.ts +17 -0
- package/components/overlays/Popover.figma.tsx +12 -0
- package/components/overlays/Popover.jsx +24 -0
- package/components/overlays/Popover.prompt.md +7 -0
- package/components/overlays/Tour.d.ts +13 -0
- package/components/overlays/Tour.figma.tsx +12 -0
- package/components/overlays/Tour.jsx +46 -0
- package/components/overlays/Tour.prompt.md +5 -0
- package/components/overlays/overlays.card.html +50 -0
- package/components/textfield/TextField.d.ts +18 -0
- package/components/textfield/TextField.figma.tsx +14 -0
- package/components/textfield/TextField.jsx +44 -0
- package/components/textfield/TextField.prompt.md +11 -0
- package/components/textfield/textfield.card.html +34 -0
- package/docs/ci-cd.md +84 -0
- package/docs/consuming.md +109 -0
- package/docs/contrast-report.md +125 -0
- package/docs/conventions.md +114 -0
- package/docs/decisions.md +94 -0
- package/docs/deploy.md +110 -0
- package/docs/design-styles.md +25 -0
- package/docs/figma.md +119 -0
- package/docs/live-hub.md +58 -0
- package/docs/products.md +26 -0
- package/docs/quality-gates.md +94 -0
- package/docs/release-notes.md +31 -0
- package/docs/storybook.md +56 -0
- package/docs/sync.md +48 -0
- package/docs/template-schema-v2.md +36 -0
- package/docs/vi/ci-cd.md +84 -0
- package/docs/vi/consuming.md +109 -0
- package/docs/vi/contrast-report.md +125 -0
- package/docs/vi/conventions.md +114 -0
- package/docs/vi/decisions.md +94 -0
- package/docs/vi/deploy.md +110 -0
- package/docs/vi/design-styles.md +25 -0
- package/docs/vi/figma.md +119 -0
- package/docs/vi/live-hub.md +58 -0
- package/docs/vi/products.md +26 -0
- package/docs/vi/quality-gates.md +94 -0
- package/docs/vi/release-notes.md +31 -0
- package/docs/vi/storybook.md +56 -0
- package/docs/vi/sync.md +48 -0
- package/docs/vi/template-schema-v2.md +36 -0
- package/docs/viewer.html +230 -0
- package/fonts/bevietnampro-300-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-300-latin.woff2 +0 -0
- package/fonts/bevietnampro-300-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-400-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-400-latin.woff2 +0 -0
- package/fonts/bevietnampro-400-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-400i-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-400i-latin.woff2 +0 -0
- package/fonts/bevietnampro-400i-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-500-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-500-latin.woff2 +0 -0
- package/fonts/bevietnampro-500-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-600-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-600-latin.woff2 +0 -0
- package/fonts/bevietnampro-600-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-600i-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-600i-latin.woff2 +0 -0
- package/fonts/bevietnampro-600i-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-700-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-700-latin.woff2 +0 -0
- package/fonts/bevietnampro-700-vietnamese.woff2 +0 -0
- package/fonts/bevietnampro-800-latin-ext.woff2 +0 -0
- package/fonts/bevietnampro-800-latin.woff2 +0 -0
- package/fonts/bevietnampro-800-vietnamese.woff2 +0 -0
- package/fonts/jetbrainsmono-400-cyrillic-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-400-cyrillic.woff2 +0 -0
- package/fonts/jetbrainsmono-400-greek.woff2 +0 -0
- package/fonts/jetbrainsmono-400-latin-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-400-latin.woff2 +0 -0
- package/fonts/jetbrainsmono-400-vietnamese.woff2 +0 -0
- package/fonts/jetbrainsmono-500-cyrillic-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-500-cyrillic.woff2 +0 -0
- package/fonts/jetbrainsmono-500-greek.woff2 +0 -0
- package/fonts/jetbrainsmono-500-latin-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-500-latin.woff2 +0 -0
- package/fonts/jetbrainsmono-500-vietnamese.woff2 +0 -0
- package/fonts/jetbrainsmono-700-cyrillic-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-700-cyrillic.woff2 +0 -0
- package/fonts/jetbrainsmono-700-greek.woff2 +0 -0
- package/fonts/jetbrainsmono-700-latin-ext.woff2 +0 -0
- package/fonts/jetbrainsmono-700-latin.woff2 +0 -0
- package/fonts/jetbrainsmono-700-vietnamese.woff2 +0 -0
- package/guidelines/atomic-view.html +497 -0
- package/guidelines/brand-iconography.html +51 -0
- package/guidelines/brand-imagery.html +23 -0
- package/guidelines/brand-interaction.html +24 -0
- package/guidelines/brand-voice.html +24 -0
- package/guidelines/colors-anchors.html +20 -0
- package/guidelines/colors-semantic.html +19 -0
- package/guidelines/colors-surfaces.html +19 -0
- package/guidelines/colors-text.html +20 -0
- package/guidelines/documents.html +43 -0
- package/guidelines/elements-components.html +27 -0
- package/guidelines/elements-concept.html +48 -0
- package/guidelines/elements-variants.html +49 -0
- package/guidelines/motion-interaction.html +29 -0
- package/guidelines/motion.html +53 -0
- package/guidelines/nav-model.cjs +113 -0
- package/guidelines/responsive-bilingual.html +75 -0
- package/guidelines/rtl-preview.html +115 -0
- package/guidelines/spacing-breakpoints.html +20 -0
- package/guidelines/spacing-radius.html +19 -0
- package/guidelines/spacing-scale.html +21 -0
- package/guidelines/surfaces-aurora.html +20 -0
- package/guidelines/surfaces-depth.html +27 -0
- package/guidelines/surfaces-glass.html +21 -0
- package/guidelines/surfaces-shadow.html +20 -0
- package/guidelines/type-families.html +25 -0
- package/guidelines/type-lineheight.html +16 -0
- package/guidelines/type-scale.html +21 -0
- package/guidelines/type-weights.html +20 -0
- package/llms.txt +70 -0
- package/package.json +88 -0
- package/styles.css +39 -0
- package/templates/_vendor/deck-stage.js +2584 -0
- package/templates/ai-cluster-demo.html +46 -0
- package/templates/app-shell/.thumbnail +0 -0
- package/templates/app-shell/AppShell.dc.html +80 -0
- package/templates/app-shell/content-schema.json +114 -0
- package/templates/app-shell/ds-base.js +23 -0
- package/templates/app-shell/support.js +1841 -0
- package/templates/article/.thumbnail +0 -0
- package/templates/article/Article.dc.html +67 -0
- package/templates/article/content-schema.json +80 -0
- package/templates/article/ds-base.js +23 -0
- package/templates/article/support.js +1841 -0
- package/templates/auth/.thumbnail +0 -0
- package/templates/auth/Auth.dc.html +72 -0
- package/templates/auth/content-schema.json +74 -0
- package/templates/auth/ds-base.js +23 -0
- package/templates/auth/support.js +1841 -0
- package/templates/bod-deck/.thumbnail +0 -0
- package/templates/bod-deck/BodDeck.dc.html +106 -0
- package/templates/bod-deck/content-schema.json +171 -0
- package/templates/bod-deck/ds-base.js +23 -0
- package/templates/bod-deck/support.js +1841 -0
- package/templates/bod-investor-update/.thumbnail +0 -0
- package/templates/bod-investor-update/BodInvestorUpdate.dc.html +81 -0
- package/templates/bod-investor-update/content-schema.json +105 -0
- package/templates/bod-investor-update/ds-base.js +23 -0
- package/templates/bod-investor-update/support.js +1841 -0
- package/templates/bod-memo/.thumbnail +0 -0
- package/templates/bod-memo/BodMemo.dc.html +87 -0
- package/templates/bod-memo/ds-base.js +23 -0
- package/templates/bod-memo/support.js +1841 -0
- package/templates/bod-minutes/.thumbnail +0 -0
- package/templates/bod-minutes/BodMinutes.dc.html +84 -0
- package/templates/bod-minutes/ds-base.js +23 -0
- package/templates/bod-minutes/support.js +1841 -0
- package/templates/bod-report/.thumbnail +0 -0
- package/templates/bod-report/BodReport.dc.html +106 -0
- package/templates/bod-report/content-schema.json +29 -0
- package/templates/bod-report/ds-base.js +23 -0
- package/templates/bod-report/support.js +1841 -0
- package/templates/bod-resolution/.thumbnail +0 -0
- package/templates/bod-resolution/BodResolution.dc.html +87 -0
- package/templates/bod-resolution/content-schema.json +123 -0
- package/templates/bod-resolution/ds-base.js +23 -0
- package/templates/bod-resolution/support.js +1841 -0
- package/templates/culture-event-invite/.thumbnail +0 -0
- package/templates/culture-event-invite/CultureEventInvite.dc.html +73 -0
- package/templates/culture-event-invite/ds-base.js +23 -0
- package/templates/culture-event-invite/support.js +1841 -0
- package/templates/dashboard/.thumbnail +0 -0
- package/templates/dashboard/Dashboard.dc.html +120 -0
- package/templates/dashboard/content-schema.json +97 -0
- package/templates/dashboard/ds-base.js +23 -0
- package/templates/dashboard/support.js +1841 -0
- package/templates/delivery-change-note/.thumbnail +0 -0
- package/templates/delivery-change-note/DeliveryChangeNote.dc.html +85 -0
- package/templates/delivery-change-note/content-schema.json +158 -0
- package/templates/delivery-change-note/ds-base.js +23 -0
- package/templates/delivery-change-note/support.js +1841 -0
- package/templates/delivery-kickoff/.thumbnail +0 -0
- package/templates/delivery-kickoff/DeliveryKickoff.dc.html +112 -0
- package/templates/delivery-kickoff/content-schema.json +223 -0
- package/templates/delivery-kickoff/ds-base.js +23 -0
- package/templates/delivery-kickoff/support.js +1841 -0
- package/templates/delivery-qbr-deck/.thumbnail +0 -0
- package/templates/delivery-qbr-deck/DeliveryQbrDeck.dc.html +118 -0
- package/templates/delivery-qbr-deck/content-schema.json +177 -0
- package/templates/delivery-qbr-deck/ds-base.js +23 -0
- package/templates/delivery-qbr-deck/support.js +1841 -0
- package/templates/delivery-runbook/.thumbnail +0 -0
- package/templates/delivery-runbook/DeliveryRunbook.dc.html +91 -0
- package/templates/delivery-runbook/content-schema.json +211 -0
- package/templates/delivery-runbook/ds-base.js +23 -0
- package/templates/delivery-runbook/support.js +1841 -0
- package/templates/delivery-status-email/.thumbnail +0 -0
- package/templates/delivery-status-email/DeliveryStatusEmail.dc.html +78 -0
- package/templates/delivery-status-email/ds-base.js +23 -0
- package/templates/delivery-status-email/support.js +1841 -0
- package/templates/doc-style-guide/.thumbnail +0 -0
- package/templates/doc-style-guide/DocStyleGuide.dc.html +148 -0
- package/templates/doc-style-guide/ds-base.js +23 -0
- package/templates/doc-style-guide/support.js +1841 -0
- package/templates/doc-suite-index/.thumbnail +0 -0
- package/templates/doc-suite-index/DocSuiteIndex.dc.html +201 -0
- package/templates/doc-suite-index/content-schema.json +12 -0
- package/templates/doc-suite-index/ds-base.js +23 -0
- package/templates/doc-suite-index/support.js +1841 -0
- package/templates/doc-templates/.thumbnail +0 -0
- package/templates/doc-templates/DocTemplates.dc.html +118 -0
- package/templates/doc-templates/ds-base.js +23 -0
- package/templates/doc-templates/support.js +1841 -0
- package/templates/email/.thumbnail +0 -0
- package/templates/email/Email-VN-standalone.html +59 -0
- package/templates/email/Email.dc.html +67 -0
- package/templates/email/ds-base.js +23 -0
- package/templates/email/support.js +1841 -0
- package/templates/email-safe/README.md +28 -0
- package/templates/email-safe/email-announcement.html +88 -0
- package/templates/email-safe/email-dunning.html +59 -0
- package/templates/email-safe/email-investor.html +88 -0
- package/templates/email-safe/email-launch.html +88 -0
- package/templates/email-safe/email-newsletter.html +62 -0
- package/templates/email-safe/email-status.html +88 -0
- package/templates/email-safe/email-transactional.html +88 -0
- package/templates/finance-dunning-email/.thumbnail +0 -0
- package/templates/finance-dunning-email/FinanceDunningEmail.dc.html +58 -0
- package/templates/finance-dunning-email/ds-base.js +23 -0
- package/templates/finance-dunning-email/support.js +1841 -0
- package/templates/finance-expense-report/.thumbnail +0 -0
- package/templates/finance-expense-report/FinanceExpenseReport.dc.html +82 -0
- package/templates/finance-expense-report/ds-base.js +23 -0
- package/templates/finance-expense-report/support.js +1841 -0
- package/templates/finance-invoice/.thumbnail +0 -0
- package/templates/finance-invoice/FinanceInvoice.dc.html +92 -0
- package/templates/finance-invoice/ds-base.js +23 -0
- package/templates/finance-invoice/support.js +1841 -0
- package/templates/finance-quote/.thumbnail +0 -0
- package/templates/finance-quote/FinanceQuote.dc.html +86 -0
- package/templates/finance-quote/ds-base.js +23 -0
- package/templates/finance-quote/support.js +1841 -0
- package/templates/hr-announcement/.thumbnail +0 -0
- package/templates/hr-announcement/HrAnnouncement.dc.html +64 -0
- package/templates/hr-announcement/ds-base.js +23 -0
- package/templates/hr-announcement/support.js +1841 -0
- package/templates/hr-interview-kit/.thumbnail +0 -0
- package/templates/hr-interview-kit/HrInterviewKit.dc.html +102 -0
- package/templates/hr-interview-kit/ds-base.js +23 -0
- package/templates/hr-interview-kit/support.js +1841 -0
- package/templates/hr-offboarding/.thumbnail +0 -0
- package/templates/hr-offboarding/HrOffboarding.dc.html +86 -0
- package/templates/hr-offboarding/ds-base.js +23 -0
- package/templates/hr-offboarding/support.js +1841 -0
- package/templates/hr-performance-review/.thumbnail +0 -0
- package/templates/hr-performance-review/HrPerformanceReview.dc.html +95 -0
- package/templates/hr-performance-review/ds-base.js +23 -0
- package/templates/hr-performance-review/support.js +1841 -0
- package/templates/hr-pip/.thumbnail +0 -0
- package/templates/hr-pip/HrPip.dc.html +73 -0
- package/templates/hr-pip/ds-base.js +23 -0
- package/templates/hr-pip/support.js +1841 -0
- package/templates/image-slots-demo.html +57 -0
- package/templates/kitchen-sink.html +127 -0
- package/templates/legal-msa/.thumbnail +0 -0
- package/templates/legal-msa/LegalMsa.dc.html +85 -0
- package/templates/legal-msa/ds-base.js +23 -0
- package/templates/legal-msa/support.js +1841 -0
- package/templates/legal-sow/.thumbnail +0 -0
- package/templates/legal-sow/LegalSow.dc.html +125 -0
- package/templates/legal-sow/ds-base.js +23 -0
- package/templates/legal-sow/support.js +1841 -0
- package/templates/marketing-campaign-brief/.thumbnail +0 -0
- package/templates/marketing-campaign-brief/MarketingCampaignBrief.dc.html +86 -0
- package/templates/marketing-campaign-brief/content-schema.json +139 -0
- package/templates/marketing-campaign-brief/ds-base.js +23 -0
- package/templates/marketing-campaign-brief/support.js +1841 -0
- package/templates/marketing-case-study/.thumbnail +0 -0
- package/templates/marketing-case-study/MarketingCaseStudy.dc.html +82 -0
- package/templates/marketing-case-study/content-schema.json +103 -0
- package/templates/marketing-case-study/ds-base.js +23 -0
- package/templates/marketing-case-study/support.js +1841 -0
- package/templates/marketing-launch/.thumbnail +0 -0
- package/templates/marketing-launch/MarketingLaunch.dc.html +84 -0
- package/templates/marketing-launch/ds-base.js +23 -0
- package/templates/marketing-launch/support.js +1841 -0
- package/templates/marketing-newsletter/.thumbnail +0 -0
- package/templates/marketing-newsletter/MarketingNewsletter.dc.html +109 -0
- package/templates/marketing-newsletter/ds-base.js +23 -0
- package/templates/marketing-newsletter/support.js +1841 -0
- package/templates/marketing-page/.thumbnail +0 -0
- package/templates/marketing-page/MarketingPage.dc.html +132 -0
- package/templates/marketing-page/content-schema.json +33 -0
- package/templates/marketing-page/ds-base.js +23 -0
- package/templates/marketing-page/support.js +1841 -0
- package/templates/marketing-press-release/.thumbnail +0 -0
- package/templates/marketing-press-release/MarketingPressRelease.dc.html +84 -0
- package/templates/marketing-press-release/content-schema.json +116 -0
- package/templates/marketing-press-release/ds-base.js +23 -0
- package/templates/marketing-press-release/support.js +1841 -0
- package/templates/marketing-social-kit/.thumbnail +0 -0
- package/templates/marketing-social-kit/MarketingSocialKit.dc.html +77 -0
- package/templates/marketing-social-kit/content-schema.json +54 -0
- package/templates/marketing-social-kit/ds-base.js +23 -0
- package/templates/marketing-social-kit/support.js +1841 -0
- package/templates/playground.html +79 -0
- package/templates/sales-one-pager/.thumbnail +0 -0
- package/templates/sales-one-pager/SalesOnePager.dc.html +103 -0
- package/templates/sales-one-pager/content-schema.json +73 -0
- package/templates/sales-one-pager/ds-base.js +23 -0
- package/templates/sales-one-pager/support.js +1841 -0
- package/templates/sales-proposal-deck/.thumbnail +0 -0
- package/templates/sales-proposal-deck/SalesProposalDeck.dc.html +159 -0
- package/templates/sales-proposal-deck/content-schema.json +273 -0
- package/templates/sales-proposal-deck/ds-base.js +23 -0
- package/templates/sales-proposal-deck/support.js +1841 -0
- package/templates/schema/content-schema.schema.json +31 -0
- package/templates/settings/.thumbnail +0 -0
- package/templates/settings/Settings.dc.html +86 -0
- package/templates/settings/content-schema.json +131 -0
- package/templates/settings/ds-base.js +23 -0
- package/templates/settings/support.js +1841 -0
- package/templates/slide-deck/.thumbnail +0 -0
- package/templates/slide-deck/SlideDeck.dc.html +86 -0
- package/templates/slide-deck/content-schema.json +23 -0
- package/templates/slide-deck/ds-base.js +23 -0
- package/templates/slide-deck/support.js +1841 -0
- package/templates/team-meeting-agenda/.thumbnail +0 -0
- package/templates/team-meeting-agenda/TeamMeetingAgenda.dc.html +93 -0
- package/templates/team-meeting-agenda/ds-base.js +23 -0
- package/templates/team-meeting-agenda/support.js +1841 -0
- package/templates/tech-incident-report/.thumbnail +0 -0
- package/templates/tech-incident-report/TechIncidentReport.dc.html +111 -0
- package/templates/tech-incident-report/content-schema.json +25 -0
- package/templates/tech-incident-report/ds-base.js +23 -0
- package/templates/tech-incident-report/support.js +1841 -0
- package/templates/tech-release-notes/.thumbnail +0 -0
- package/templates/tech-release-notes/TechReleaseNotes.dc.html +79 -0
- package/templates/tech-release-notes/ds-base.js +23 -0
- package/templates/tech-release-notes/support.js +1841 -0
- package/templates/tech-retro/.thumbnail +0 -0
- package/templates/tech-retro/TechRetro.dc.html +84 -0
- package/templates/tech-retro/ds-base.js +23 -0
- package/templates/tech-retro/support.js +1841 -0
- package/templates/tech-rfc/.thumbnail +0 -0
- package/templates/tech-rfc/TechRfc.dc.html +87 -0
- package/templates/tech-rfc/content-schema.json +115 -0
- package/templates/tech-rfc/ds-base.js +23 -0
- package/templates/tech-rfc/support.js +1841 -0
- package/templates/vn-appointment-transfer/.thumbnail +0 -0
- package/templates/vn-appointment-transfer/VnAppointmentTransfer.dc.html +101 -0
- package/templates/vn-appointment-transfer/ds-base.js +23 -0
- package/templates/vn-appointment-transfer/support.js +1841 -0
- package/templates/vn-certificate-of-employment/.thumbnail +0 -0
- package/templates/vn-certificate-of-employment/VnCertificateOfEmployment.dc.html +84 -0
- package/templates/vn-certificate-of-employment/ds-base.js +23 -0
- package/templates/vn-certificate-of-employment/support.js +1841 -0
- package/templates/vn-code-of-conduct/.thumbnail +0 -0
- package/templates/vn-code-of-conduct/VnCodeOfConduct.dc.html +105 -0
- package/templates/vn-code-of-conduct/ds-base.js +23 -0
- package/templates/vn-code-of-conduct/support.js +1841 -0
- package/templates/vn-compensation-regulation/.thumbnail +0 -0
- package/templates/vn-compensation-regulation/VnCompensationRegulation.dc.html +122 -0
- package/templates/vn-compensation-regulation/ds-base.js +23 -0
- package/templates/vn-compensation-regulation/support.js +1841 -0
- package/templates/vn-contract-amendment/.thumbnail +0 -0
- package/templates/vn-contract-amendment/VnContractAmendment.dc.html +107 -0
- package/templates/vn-contract-amendment/ds-base.js +23 -0
- package/templates/vn-contract-amendment/support.js +1841 -0
- package/templates/vn-contractor-agreement/.thumbnail +0 -0
- package/templates/vn-contractor-agreement/VnContractorAgreement.dc.html +120 -0
- package/templates/vn-contractor-agreement/ds-base.js +23 -0
- package/templates/vn-contractor-agreement/support.js +1841 -0
- package/templates/vn-data-protection-policy/.thumbnail +0 -0
- package/templates/vn-data-protection-policy/VnDataProtectionPolicy.dc.html +116 -0
- package/templates/vn-data-protection-policy/ds-base.js +23 -0
- package/templates/vn-data-protection-policy/support.js +1841 -0
- package/templates/vn-disciplinary-case-file/.thumbnail +0 -0
- package/templates/vn-disciplinary-case-file/VnDisciplinaryCaseFile.dc.html +172 -0
- package/templates/vn-disciplinary-case-file/ds-base.js +23 -0
- package/templates/vn-disciplinary-case-file/support.js +1841 -0
- package/templates/vn-disciplinary-schedule/.thumbnail +0 -0
- package/templates/vn-disciplinary-schedule/VnDisciplinarySchedule.dc.html +91 -0
- package/templates/vn-disciplinary-schedule/ds-base.js +23 -0
- package/templates/vn-disciplinary-schedule/support.js +1841 -0
- package/templates/vn-employee-request/.thumbnail +0 -0
- package/templates/vn-employee-request/VnEmployeeRequest.dc.html +137 -0
- package/templates/vn-employee-request/ds-base.js +23 -0
- package/templates/vn-employee-request/support.js +1841 -0
- package/templates/vn-exit-handover/.thumbnail +0 -0
- package/templates/vn-exit-handover/VnExitHandover.dc.html +228 -0
- package/templates/vn-exit-handover/ds-base.js +23 -0
- package/templates/vn-exit-handover/support.js +1841 -0
- package/templates/vn-foreign-employee-pack/.thumbnail +0 -0
- package/templates/vn-foreign-employee-pack/VnForeignEmployeePack.dc.html +129 -0
- package/templates/vn-foreign-employee-pack/content-schema.json +22 -0
- package/templates/vn-foreign-employee-pack/ds-base.js +23 -0
- package/templates/vn-foreign-employee-pack/support.js +1841 -0
- package/templates/vn-grassroots-democracy/.thumbnail +0 -0
- package/templates/vn-grassroots-democracy/VnGrassrootsDemocracy.dc.html +117 -0
- package/templates/vn-grassroots-democracy/ds-base.js +23 -0
- package/templates/vn-grassroots-democracy/support.js +1841 -0
- package/templates/vn-infosec-policy/.thumbnail +0 -0
- package/templates/vn-infosec-policy/VnInfosecPolicy.dc.html +116 -0
- package/templates/vn-infosec-policy/ds-base.js +23 -0
- package/templates/vn-infosec-policy/support.js +1841 -0
- package/templates/vn-internal-labor-regulations/.thumbnail +0 -0
- package/templates/vn-internal-labor-regulations/VnInternalLaborRegulations.dc.html +155 -0
- package/templates/vn-internal-labor-regulations/ds-base.js +23 -0
- package/templates/vn-internal-labor-regulations/support.js +1841 -0
- package/templates/vn-internship-agreement/.thumbnail +0 -0
- package/templates/vn-internship-agreement/VnInternshipAgreement.dc.html +112 -0
- package/templates/vn-internship-agreement/ds-base.js +23 -0
- package/templates/vn-internship-agreement/support.js +1841 -0
- package/templates/vn-job-description/.thumbnail +0 -0
- package/templates/vn-job-description/VnJobDescription.dc.html +85 -0
- package/templates/vn-job-description/ds-base.js +23 -0
- package/templates/vn-job-description/support.js +1841 -0
- package/templates/vn-labor-contract/.thumbnail +0 -0
- package/templates/vn-labor-contract/VnLaborContract.dc.html +180 -0
- package/templates/vn-labor-contract/ds-base.js +23 -0
- package/templates/vn-labor-contract/support.js +1841 -0
- package/templates/vn-labour-management-book/.thumbnail +0 -0
- package/templates/vn-labour-management-book/VnLabourManagementBook.dc.html +115 -0
- package/templates/vn-labour-management-book/ds-base.js +23 -0
- package/templates/vn-labour-management-book/support.js +1841 -0
- package/templates/vn-mutual-nda/.thumbnail +0 -0
- package/templates/vn-mutual-nda/VnMutualNda.dc.html +114 -0
- package/templates/vn-mutual-nda/ds-base.js +23 -0
- package/templates/vn-mutual-nda/support.js +1841 -0
- package/templates/vn-ndnca-ip/.thumbnail +0 -0
- package/templates/vn-ndnca-ip/VnNdncaIp.dc.html +157 -0
- package/templates/vn-ndnca-ip/ds-base.js +23 -0
- package/templates/vn-ndnca-ip/support.js +1841 -0
- package/templates/vn-offer-letter/.thumbnail +0 -0
- package/templates/vn-offer-letter/VnOfferLetter.dc.html +84 -0
- package/templates/vn-offer-letter/ds-base.js +23 -0
- package/templates/vn-offer-letter/support.js +1841 -0
- package/templates/vn-onboarding-checklist/.thumbnail +0 -0
- package/templates/vn-onboarding-checklist/VnOnboardingChecklist.dc.html +98 -0
- package/templates/vn-onboarding-checklist/content-schema.json +12 -0
- package/templates/vn-onboarding-checklist/ds-base.js +23 -0
- package/templates/vn-onboarding-checklist/support.js +1841 -0
- package/templates/vn-pdpl-consent/.thumbnail +0 -0
- package/templates/vn-pdpl-consent/VnPdplConsent.dc.html +111 -0
- package/templates/vn-pdpl-consent/ds-base.js +23 -0
- package/templates/vn-pdpl-consent/support.js +1841 -0
- package/templates/vn-performance-evaluation-regulation/.thumbnail +0 -0
- package/templates/vn-performance-evaluation-regulation/VnPerformanceEvaluationRegulation.dc.html +135 -0
- package/templates/vn-performance-evaluation-regulation/ds-base.js +23 -0
- package/templates/vn-performance-evaluation-regulation/support.js +1841 -0
- package/templates/vn-performance-review-form/.thumbnail +0 -0
- package/templates/vn-performance-review-form/VnPerformanceReviewForm.dc.html +129 -0
- package/templates/vn-performance-review-form/ds-base.js +23 -0
- package/templates/vn-performance-review-form/support.js +1841 -0
- package/templates/vn-phantom-stock/.thumbnail +0 -0
- package/templates/vn-phantom-stock/VnPhantomStock.dc.html +184 -0
- package/templates/vn-phantom-stock/content-schema.json +17 -0
- package/templates/vn-phantom-stock/ds-base.js +23 -0
- package/templates/vn-phantom-stock/support.js +1841 -0
- package/templates/vn-probation-contract/.thumbnail +0 -0
- package/templates/vn-probation-contract/VnProbationContract.dc.html +126 -0
- package/templates/vn-probation-contract/ds-base.js +23 -0
- package/templates/vn-probation-contract/support.js +1841 -0
- package/templates/vn-receipt-acknowledgement/.thumbnail +0 -0
- package/templates/vn-receipt-acknowledgement/VnReceiptAcknowledgement.dc.html +106 -0
- package/templates/vn-receipt-acknowledgement/ds-base.js +23 -0
- package/templates/vn-receipt-acknowledgement/support.js +1841 -0
- package/templates/vn-remote-work-policy/.thumbnail +0 -0
- package/templates/vn-remote-work-policy/VnRemoteWorkPolicy.dc.html +103 -0
- package/templates/vn-remote-work-policy/ds-base.js +23 -0
- package/templates/vn-remote-work-policy/support.js +1841 -0
- package/templates/vn-resignation-letter/.thumbnail +0 -0
- package/templates/vn-resignation-letter/VnResignationLetter.dc.html +71 -0
- package/templates/vn-resignation-letter/ds-base.js +23 -0
- package/templates/vn-resignation-letter/support.js +1841 -0
- package/templates/vn-salary-scale/.thumbnail +0 -0
- package/templates/vn-salary-scale/VnSalaryScale.dc.html +110 -0
- package/templates/vn-salary-scale/ds-base.js +23 -0
- package/templates/vn-salary-scale/support.js +1841 -0
- package/templates/vn-sow-appendix/.thumbnail +0 -0
- package/templates/vn-sow-appendix/VnSowAppendix.dc.html +70 -0
- package/templates/vn-sow-appendix/ds-base.js +23 -0
- package/templates/vn-sow-appendix/support.js +1841 -0
- package/templates/vn-termination-decision/.thumbnail +0 -0
- package/templates/vn-termination-decision/VnTerminationDecision.dc.html +80 -0
- package/templates/vn-termination-decision/ds-base.js +23 -0
- package/templates/vn-termination-decision/support.js +1841 -0
- package/templates/vn-total-rewards-appendix/.thumbnail +0 -0
- package/templates/vn-total-rewards-appendix/VnTotalRewardsAppendix.dc.html +138 -0
- package/templates/vn-total-rewards-appendix/ds-base.js +23 -0
- package/templates/vn-total-rewards-appendix/support.js +1841 -0
- package/templates/vn-training-commitment/.thumbnail +0 -0
- package/templates/vn-training-commitment/VnTrainingCommitment.dc.html +105 -0
- package/templates/vn-training-commitment/ds-base.js +23 -0
- package/templates/vn-training-commitment/support.js +1841 -0
- package/templates/vn-travel-expense-policy/.thumbnail +0 -0
- package/templates/vn-travel-expense-policy/VnTravelExpensePolicy.dc.html +113 -0
- package/templates/vn-travel-expense-policy/ds-base.js +23 -0
- package/templates/vn-travel-expense-policy/support.js +1841 -0
- package/tokens/colors.css +77 -0
- package/tokens/component-tokens.css +46 -0
- package/tokens/elements.css +300 -0
- package/tokens/elevation.css +46 -0
- package/tokens/fonts.css +51 -0
- package/tokens/motion.css +25 -0
- package/tokens/native/CSTokens.kt +255 -0
- package/tokens/native/CSTokens.swift +257 -0
- package/tokens/native/cs_tokens.dart +253 -0
- package/tokens/provenance.json +52 -0
- package/tokens/spacing.css +34 -0
- package/tokens/tokens.dtcg.json +1222 -0
- package/tokens/tokens.js +436 -0
- package/tokens/tokens.json +434 -0
- package/tokens/typography.css +67 -0
- package/tokens/viewer.html +261 -0
- package/ui_kits/deck/README.md +21 -0
- package/ui_kits/deck/index.html +120 -0
- package/ui_kits/status-hub/README.md +40 -0
- package/ui_kits/status-hub/StatusHub.jsx +270 -0
- package/ui_kits/status-hub/data.js +57 -0
- package/ui_kits/status-hub/identity-lab.html +134 -0
- package/ui_kits/status-hub/index.html +24 -0
- package/ui_kits/status-hub/login.html +65 -0
- package/ui_kits/status-hub/project.html +137 -0
- package/ui_kits/status-hub/settings.html +88 -0
- package/ui_kits/status-hub/status.css +199 -0
- package/ui_kits/website/README.md +36 -0
- package/ui_kits/website/Website.jsx +167 -0
- package/ui_kits/website/careers.html +109 -0
- package/ui_kits/website/chat.html +133 -0
- package/ui_kits/website/copy.js +76 -0
- package/ui_kits/website/index.html +24 -0
- package/ui_kits/website/site.css +121 -0
- package/ui_kits/website/work.html +119 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>CyberSkill · Tokens</title>
|
|
7
|
+
<link rel="stylesheet" href="../styles.css">
|
|
8
|
+
<style>
|
|
9
|
+
*{box-sizing:border-box}html,body{height:100%}
|
|
10
|
+
body{margin:0;font-family:var(--cs-font-family-ui);background:var(--cs-color-surface-page);color:var(--cs-color-text-primary);display:flex;flex-direction:column}
|
|
11
|
+
.bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:12px 16px;background:var(--cs-color-surface-panel);border-block-end:1px solid var(--cs-color-border-default)}
|
|
12
|
+
.bar h1{font-size:15px;font-weight:800;margin:0;letter-spacing:-.01em}
|
|
13
|
+
.bar h1 b{color:var(--cs-color-brand-umber)}
|
|
14
|
+
[data-theme="dark"] .bar h1 b{color:var(--cs-color-brand-ochre)}
|
|
15
|
+
.modes{display:flex;gap:4px;padding:3px;border-radius:999px;background:var(--cs-color-surface-page);border:1px solid var(--cs-color-border-default)}
|
|
16
|
+
.modes button{appearance:none;border:0;background:transparent;font:600 12.5px var(--cs-font-family-ui);padding:6px 12px;border-radius:999px;cursor:pointer;color:var(--cs-color-text-primary)}
|
|
17
|
+
.modes button[aria-pressed="true"]{background:var(--cs-color-brand-umber);color:var(--cs-color-text-inverse)}
|
|
18
|
+
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-inline-start:auto}
|
|
19
|
+
.filters input,.filters select{font:inherit;font-size:12.5px;padding:6px 10px;border-radius:8px;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-page);color:var(--cs-color-text-primary);min-width:0}
|
|
20
|
+
.filters input{width:min(220px,40vw)}
|
|
21
|
+
.meta{font:12px/1.4 var(--cs-font-family-mono);font-weight:600;color:var(--cs-color-text-primary)}
|
|
22
|
+
.chips{display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;background:var(--cs-color-surface-panel);border-block-end:1px solid var(--cs-color-border-default)}
|
|
23
|
+
.chips button{appearance:none;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-page);color:var(--cs-color-text-primary);font:600 11.5px var(--cs-font-family-ui);padding:5px 10px;border-radius:999px;cursor:pointer}
|
|
24
|
+
.chips button[aria-pressed="true"]{background:var(--cs-color-brand-umber);color:var(--cs-color-text-inverse);border-color:var(--cs-color-brand-umber)}
|
|
25
|
+
.chips button .n{font-family:var(--cs-font-family-mono);font-size:10px;opacity:.85;margin-inline-start:4px}
|
|
26
|
+
.panel{flex:1;min-height:0;overflow:auto}
|
|
27
|
+
.panel.hide{display:none}
|
|
28
|
+
table{width:100%;border-collapse:collapse;font-size:13px}
|
|
29
|
+
th,td{text-align:start;padding:8px 12px;border-block-end:1px solid var(--cs-color-border-default);vertical-align:top}
|
|
30
|
+
th{position:sticky;top:0;background:var(--cs-color-surface-panel);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--cs-color-text-primary);z-index:1;font-weight:800}
|
|
31
|
+
tr:hover td{background:var(--cs-color-surface-raised)}
|
|
32
|
+
.swatch{display:inline-block;width:14px;height:14px;border-radius:4px;border:1px solid var(--cs-color-border-default);vertical-align:middle;margin-inline-end:6px}
|
|
33
|
+
code{font-family:var(--cs-font-family-mono);font-size:12px}
|
|
34
|
+
.path{font-family:var(--cs-font-family-mono);font-size:12px;word-break:break-all}
|
|
35
|
+
.group{color:var(--cs-color-text-primary);opacity:.72;font-size:12px;font-weight:600}
|
|
36
|
+
.copy{appearance:none;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-page);color:var(--cs-color-brand-umber);font:700 10.5px var(--cs-font-family-mono);padding:3px 7px;border-radius:6px;cursor:pointer;margin-inline-start:6px}
|
|
37
|
+
.copy:hover{border-color:var(--cs-color-brand-ochre)}
|
|
38
|
+
.copy.ok{background:#dcfce7;color:#166534;border-color:#16a34a55}
|
|
39
|
+
#raw{margin:0;padding:16px 18px;font:12px/1.5 var(--cs-font-family-mono);white-space:pre;overflow:auto;min-height:100%;background:var(--cs-color-surface-panel);color:var(--cs-color-text-primary)}
|
|
40
|
+
.empty{padding:28px;color:var(--cs-color-text-primary);font-size:13.5px}
|
|
41
|
+
.src{font-size:12px;color:var(--cs-color-text-primary);font-weight:600}
|
|
42
|
+
.src select{font:inherit;font-size:12px;padding:4px 8px;border-radius:6px;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-page);color:var(--cs-color-text-primary)}
|
|
43
|
+
.src-help{margin:0;padding:8px 16px;font:12.5px/1.45 var(--cs-font-family-ui);color:var(--cs-color-text-primary);background:var(--cs-color-surface-panel);border-block-end:1px solid var(--cs-color-border-default)}
|
|
44
|
+
.src-help code{font-family:var(--cs-font-family-mono);font-size:11.5px}
|
|
45
|
+
.toast{position:fixed;inset-block-end:16px;inset-inline-end:16px;background:var(--cs-color-brand-umber);color:var(--cs-color-text-inverse);font:600 12.5px var(--cs-font-family-ui);padding:8px 12px;border-radius:8px;opacity:0;pointer-events:none;transition:opacity .15s}
|
|
46
|
+
.toast.on{opacity:1}
|
|
47
|
+
</style>
|
|
48
|
+
</head>
|
|
49
|
+
<body data-chrome="tokens-viewer">
|
|
50
|
+
<div class="bar">
|
|
51
|
+
<h1><b>Tokens</b></h1>
|
|
52
|
+
<div class="modes" role="group" aria-label="View mode">
|
|
53
|
+
<button type="button" id="modeTable" aria-pressed="true">Table</button>
|
|
54
|
+
<button type="button" id="modeRaw" aria-pressed="false">Raw</button>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="filters" id="tableFilters">
|
|
57
|
+
<input id="q" type="search" placeholder="Filter path or value…" autocomplete="off">
|
|
58
|
+
<span class="meta" id="count"></span>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="src">
|
|
61
|
+
Source
|
|
62
|
+
<select id="source" aria-label="Token source">
|
|
63
|
+
<option value="tokens.dtcg.json" selected>tokens.dtcg.json (W3C DTCG)</option>
|
|
64
|
+
<option value="tokens.json">tokens.json (CSS-grouped)</option>
|
|
65
|
+
</select>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
<p class="src-help" id="srcHelp">DTCG is the design-tool + native-regen interchange. <code>tokens.json</code> is the CSS-oriented grouped export for agents. Runtime UI still resolves from <code>styles.css</code> / <code>tokens/*.css</code>. Keeping both files is intentional — see <code>docs/decisions.md</code> §5.</p>
|
|
69
|
+
<div class="chips" id="chips" aria-label="Token groups"></div>
|
|
70
|
+
<div class="panel" id="tablePanel">
|
|
71
|
+
<table>
|
|
72
|
+
<thead><tr><th>Token</th><th>Group</th><th>Value</th><th>Type</th><th>Copy</th></tr></thead>
|
|
73
|
+
<tbody id="tbody"></tbody>
|
|
74
|
+
</table>
|
|
75
|
+
<p class="empty hide" id="empty">No tokens match this filter.</p>
|
|
76
|
+
</div>
|
|
77
|
+
<pre class="panel hide" id="raw"></pre>
|
|
78
|
+
<div class="toast" id="toast" role="status">Copied</div>
|
|
79
|
+
<script>
|
|
80
|
+
const tbody=document.getElementById('tbody');
|
|
81
|
+
const empty=document.getElementById('empty');
|
|
82
|
+
const countEl=document.getElementById('count');
|
|
83
|
+
const qEl=document.getElementById('q');
|
|
84
|
+
const sourceEl=document.getElementById('source');
|
|
85
|
+
const rawEl=document.getElementById('raw');
|
|
86
|
+
const tablePanel=document.getElementById('tablePanel');
|
|
87
|
+
const tableFilters=document.getElementById('tableFilters');
|
|
88
|
+
const modeTable=document.getElementById('modeTable');
|
|
89
|
+
const modeRaw=document.getElementById('modeRaw');
|
|
90
|
+
const chipsEl=document.getElementById('chips');
|
|
91
|
+
const toast=document.getElementById('toast');
|
|
92
|
+
|
|
93
|
+
let rows=[];
|
|
94
|
+
let rawText='';
|
|
95
|
+
let mode='table';
|
|
96
|
+
let activeGroup='';
|
|
97
|
+
let lastCopied='';
|
|
98
|
+
|
|
99
|
+
function isColor(v){
|
|
100
|
+
if(typeof v!=='string') return false;
|
|
101
|
+
return /^#([0-9a-f]{3,8})$/i.test(v.trim()) || /^rgba?\(/i.test(v) || /^oklch\(/i.test(v) || /^hsl/i.test(v);
|
|
102
|
+
}
|
|
103
|
+
function fmt(v){
|
|
104
|
+
if(v==null) return '';
|
|
105
|
+
if(typeof v==='object') return JSON.stringify(v);
|
|
106
|
+
return String(v);
|
|
107
|
+
}
|
|
108
|
+
function flattenDtcg(obj, path='', group=''){
|
|
109
|
+
const out=[];
|
|
110
|
+
if(!obj || typeof obj!=='object') return out;
|
|
111
|
+
const hasValue = Object.prototype.hasOwnProperty.call(obj,'$value') || Object.prototype.hasOwnProperty.call(obj,'value');
|
|
112
|
+
if(hasValue){
|
|
113
|
+
const value = obj.$value!==undefined ? obj.$value : obj.value;
|
|
114
|
+
const type = obj.$type || obj.type || '';
|
|
115
|
+
out.push({path: path || '(root)', group: group || path.split('.')[0] || '', value, type});
|
|
116
|
+
return out;
|
|
117
|
+
}
|
|
118
|
+
for(const [k,v] of Object.entries(obj)){
|
|
119
|
+
if(k.startsWith('$')) continue;
|
|
120
|
+
const nextPath = path ? path+'.'+k : k;
|
|
121
|
+
const nextGroup = path ? group : k;
|
|
122
|
+
if(v && typeof v==='object') out.push(...flattenDtcg(v, nextPath, nextGroup || k));
|
|
123
|
+
else out.push({path: nextPath, group: nextGroup || k, value: v, type: typeof v});
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
function flattenTokensJson(data){
|
|
128
|
+
const out=[];
|
|
129
|
+
const root = data.root || data;
|
|
130
|
+
if(!root || typeof root!=='object') return out;
|
|
131
|
+
for(const [group, bag] of Object.entries(root)){
|
|
132
|
+
if(group.startsWith('$')) continue;
|
|
133
|
+
if(!bag || typeof bag!=='object'){
|
|
134
|
+
out.push({path: group, group: 'root', value: bag, type: typeof bag});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
for(const [name, value] of Object.entries(bag)){
|
|
138
|
+
if(name.startsWith('$')) continue;
|
|
139
|
+
if(value && typeof value==='object' && !Array.isArray(value) && (value.value!==undefined || value.$value!==undefined)){
|
|
140
|
+
out.push({path: name, group, value: value.value!==undefined?value.value:value.$value, type: value.type||value.$type||''});
|
|
141
|
+
} else {
|
|
142
|
+
out.push({path: name, group, value, type: typeof value});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
for(const scope of ['themes','elements']){
|
|
147
|
+
const block = data[scope];
|
|
148
|
+
if(!block || typeof block!=='object') continue;
|
|
149
|
+
for(const [scopeName, bag] of Object.entries(block)){
|
|
150
|
+
if(!bag || typeof bag!=='object') continue;
|
|
151
|
+
for(const [name, value] of Object.entries(bag)){
|
|
152
|
+
out.push({path: name, group: scope+'.'+scopeName, value, type: typeof value});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
function setMode(next){
|
|
159
|
+
mode=next;
|
|
160
|
+
modeTable.setAttribute('aria-pressed', mode==='table'?'true':'false');
|
|
161
|
+
modeRaw.setAttribute('aria-pressed', mode==='raw'?'true':'false');
|
|
162
|
+
tablePanel.classList.toggle('hide', mode!=='table');
|
|
163
|
+
rawEl.classList.toggle('hide', mode!=='raw');
|
|
164
|
+
tableFilters.style.visibility = mode==='table'?'visible':'hidden';
|
|
165
|
+
chipsEl.style.display = mode==='table'?'flex':'none';
|
|
166
|
+
}
|
|
167
|
+
function showToast(msg){
|
|
168
|
+
toast.textContent=msg;
|
|
169
|
+
toast.classList.add('on');
|
|
170
|
+
clearTimeout(showToast._t);
|
|
171
|
+
showToast._t=setTimeout(()=>toast.classList.remove('on'),1200);
|
|
172
|
+
}
|
|
173
|
+
async function copyText(text, label){
|
|
174
|
+
lastCopied=text;
|
|
175
|
+
let ok=false;
|
|
176
|
+
try{ await navigator.clipboard.writeText(text); ok=true; }catch(e){
|
|
177
|
+
try{
|
|
178
|
+
const ta=document.createElement('textarea'); ta.value=text; document.body.appendChild(ta); ta.select();
|
|
179
|
+
ok=document.execCommand('copy'); ta.remove();
|
|
180
|
+
}catch(e2){}
|
|
181
|
+
}
|
|
182
|
+
showToast(ok?('Copied '+label):'Copy blocked — value selected in memory');
|
|
183
|
+
window.__csTokensLastCopy={ok, text, label, at:Date.now()};
|
|
184
|
+
return ok;
|
|
185
|
+
}
|
|
186
|
+
function filteredRows(){
|
|
187
|
+
const q=(qEl.value||'').trim().toLowerCase();
|
|
188
|
+
return rows.filter(r=>{
|
|
189
|
+
if(activeGroup && r.group!==activeGroup) return false;
|
|
190
|
+
if(!q) return true;
|
|
191
|
+
return (r.path+' '+fmt(r.value)+' '+r.group+' '+(r.type||'')).toLowerCase().includes(q);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
function renderChips(){
|
|
195
|
+
const counts=new Map();
|
|
196
|
+
for(const r of rows) counts.set(r.group, (counts.get(r.group)||0)+1);
|
|
197
|
+
const groups=[...counts.keys()].sort();
|
|
198
|
+
chipsEl.innerHTML='';
|
|
199
|
+
const all=document.createElement('button');
|
|
200
|
+
all.type='button'; all.setAttribute('aria-pressed', activeGroup===''?'true':'false');
|
|
201
|
+
all.innerHTML='All<span class="n">'+rows.length+'</span>';
|
|
202
|
+
all.onclick=()=>{ activeGroup=''; renderChips(); renderTable(); };
|
|
203
|
+
chipsEl.appendChild(all);
|
|
204
|
+
for(const g of groups){
|
|
205
|
+
const b=document.createElement('button');
|
|
206
|
+
b.type='button'; b.setAttribute('aria-pressed', activeGroup===g?'true':'false');
|
|
207
|
+
b.innerHTML=esc(g)+'<span class="n">'+counts.get(g)+'</span>';
|
|
208
|
+
b.onclick=()=>{ activeGroup = activeGroup===g ? '' : g; renderChips(); renderTable(); };
|
|
209
|
+
chipsEl.appendChild(b);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function renderTable(){
|
|
213
|
+
const filtered=filteredRows();
|
|
214
|
+
countEl.textContent = filtered.length+' / '+rows.length;
|
|
215
|
+
tbody.innerHTML='';
|
|
216
|
+
empty.classList.toggle('hide', filtered.length>0);
|
|
217
|
+
const frag=document.createDocumentFragment();
|
|
218
|
+
for(const r of filtered){
|
|
219
|
+
const tr=document.createElement('tr');
|
|
220
|
+
const val=fmt(r.value);
|
|
221
|
+
const sw = isColor(val) ? '<span class="swatch" style="background:'+val.replace(/"/g,'')+'"></span>' : '';
|
|
222
|
+
tr.innerHTML = '<td class="path">'+esc(r.path)+'</td>'
|
|
223
|
+
+'<td class="group">'+esc(r.group)+'</td>'
|
|
224
|
+
+'<td>'+sw+'<code>'+esc(val)+'</code></td>'
|
|
225
|
+
+'<td class="group">'+esc(r.type||'')+'</td>'
|
|
226
|
+
+'<td><button type="button" class="copy" data-copy="path" data-v="'+esc(r.path)+'">path</button>'
|
|
227
|
+
+'<button type="button" class="copy" data-copy="value" data-v="'+esc(val)+'">value</button></td>';
|
|
228
|
+
frag.appendChild(tr);
|
|
229
|
+
}
|
|
230
|
+
tbody.appendChild(frag);
|
|
231
|
+
tbody.querySelectorAll('.copy').forEach(btn=>{
|
|
232
|
+
btn.addEventListener('click',async()=>{
|
|
233
|
+
const ok=await copyText(btn.getAttribute('data-v')||'', btn.getAttribute('data-copy')||'token');
|
|
234
|
+
if(ok){ btn.classList.add('ok'); setTimeout(()=>btn.classList.remove('ok'),900); }
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
window.__csTokensViewer={rows:rows.length, filtered:filtered.length, group:activeGroup||null, mode, lastCopied};
|
|
238
|
+
}
|
|
239
|
+
function esc(s){ return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); }
|
|
240
|
+
async function load(){
|
|
241
|
+
const file=sourceEl.value;
|
|
242
|
+
const r=await fetch('./'+file,{cache:'no-store'});
|
|
243
|
+
rawText=await r.text();
|
|
244
|
+
rawEl.textContent=rawText;
|
|
245
|
+
let data;
|
|
246
|
+
try{ data=JSON.parse(rawText); }catch(e){ rows=[]; renderChips(); renderTable(); return; }
|
|
247
|
+
rows = file.includes('dtcg') ? flattenDtcg(data) : flattenTokensJson(data);
|
|
248
|
+
rows.sort((a,b)=>a.path.localeCompare(b.path) || a.group.localeCompare(b.group));
|
|
249
|
+
activeGroup='';
|
|
250
|
+
renderChips();
|
|
251
|
+
renderTable();
|
|
252
|
+
}
|
|
253
|
+
modeTable.onclick=()=>setMode('table');
|
|
254
|
+
modeRaw.onclick=()=>setMode('raw');
|
|
255
|
+
qEl.addEventListener('input',()=>{ clearTimeout(qEl._t); qEl._t=setTimeout(renderTable,120); });
|
|
256
|
+
sourceEl.addEventListener('change',load);
|
|
257
|
+
setMode('table');
|
|
258
|
+
load().catch(e=>{ rawEl.textContent=String(e); rows=[]; renderChips(); renderTable(); });
|
|
259
|
+
</script>
|
|
260
|
+
</body>
|
|
261
|
+
</html>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Brand deck — UI kit
|
|
2
|
+
|
|
3
|
+
A ready-to-present **16:9 CyberSkill deck** built on the `deck-stage` starter. It doubles as the design system's **PDF / PPTX export** reference: because it's a real deck-stage deck, it exports with no rebuild.
|
|
4
|
+
|
|
5
|
+
## What it demonstrates
|
|
6
|
+
Five brand slides — umber title, light agenda, a by-the-numbers stat slide, an umber big-quote, and an umber closing — all painted from `styles.css` tokens (Umber/Ochre anchors, Be Vietnam Pro, JetBrains Mono numerals) with the official Logo mark.
|
|
7
|
+
|
|
8
|
+
## Files
|
|
9
|
+
- `index.html` — the deck. `<deck-stage width="1920" height="1080">` with one `<section>` per slide; links `styles.css` for tokens + fonts.
|
|
10
|
+
|
|
11
|
+
- deck-stage runtime lives at `templates/_vendor/deck-stage.js` (kept out of the compiled bundle; scaling, keyboard nav, thumbnail rail, print-to-PDF).
|
|
12
|
+
|
|
13
|
+
- Export **PPTX/PDF on demand** from the live deck (the host's export flows); no pre-generated binary is kept in the repo.
|
|
14
|
+
|
|
15
|
+
## Export
|
|
16
|
+
- **PDF** — open `index.html` and Print → Save as PDF. `deck-stage` lays out one clean page per slide automatically.
|
|
17
|
+
|
|
18
|
+
- **PPTX** — regenerate anytime from the showing deck; slides are `deck-stage > [data-deck-active]` navigated with `goTo(n)`, `resetTransformSelector: "deck-stage"`, at 1920×1080. Be Vietnam Pro + JetBrains Mono map to matching Google Fonts so text stays on-brand and Vietnamese diacritics render.
|
|
19
|
+
|
|
20
|
+
## Authoring
|
|
21
|
+
Slides are static inline-styled `<section>`s — edit copy directly. Keep to two backgrounds (umber / panel) and one accent (ochre); don't set position/size on a `<section>` (the component positions them).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<!-- @dsCard group="Deck" viewport="1280x720" name="Brand deck — CyberSkill" subtitle="16:9 presentation on deck-stage — PDF & PPTX ready" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
7
|
+
<title>CyberSkill · Brand deck</title>
|
|
8
|
+
<link rel="icon" href="../../assets/favicon.svg" />
|
|
9
|
+
<link rel="stylesheet" href="../../styles.css" />
|
|
10
|
+
<style>
|
|
11
|
+
html, body { margin: 0; background: #2a1a0d; }
|
|
12
|
+
deck-stage:not(:defined) { visibility: hidden; }
|
|
13
|
+
.sl { box-sizing: border-box; display: flex; flex-direction: column; font-family: var(--cs-font-family-ui); }
|
|
14
|
+
.sl-umber { background: var(--cs-color-brand-umber); color: #fff; }
|
|
15
|
+
.sl-page { background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); }
|
|
16
|
+
.sl-pad { padding: 96px 120px; }
|
|
17
|
+
.sl-center { justify-content: center; }
|
|
18
|
+
.eyebrow { font-size: 22px; font-weight: 700; text-transform: uppercase; letter-spacing: .14em; color: var(--cs-color-brand-ochre); }
|
|
19
|
+
.eyebrow-dark { color: var(--cs-color-text-accent); }
|
|
20
|
+
.display { font-size: 108px; font-weight: 800; letter-spacing: -.02em; line-height: 1.02; color: var(--cs-color-brand-ochre); margin: 22px 0 12px; }
|
|
21
|
+
.h2 { font-size: 68px; font-weight: 800; letter-spacing: -.02em; margin: 14px 0 40px; }
|
|
22
|
+
.vn { font-size: 34px; font-weight: 600; opacity: .9; }
|
|
23
|
+
.lockup { display: flex; align-items: center; gap: 20px; }
|
|
24
|
+
.lockup img { width: 76px; height: 76px; }
|
|
25
|
+
.lockup b { font-size: 34px; font-weight: 800; letter-spacing: -.01em; }
|
|
26
|
+
.foot { display: flex; justify-content: space-between; align-items: center; font-size: 24px; opacity: .72; margin-top: auto; }
|
|
27
|
+
.foot .num { font-family: var(--cs-font-family-mono); color: var(--cs-color-brand-ochre); }
|
|
28
|
+
.cols3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 44px; }
|
|
29
|
+
.col { border-top: 5px solid var(--cs-color-brand-ochre); padding-top: 28px; }
|
|
30
|
+
.col .n { font-family: var(--cs-font-family-mono); font-weight: 700; font-size: 24px; color: var(--cs-color-text-accent); }
|
|
31
|
+
.col h3 { font-size: 38px; margin: 12px 0 12px; letter-spacing: -.01em; }
|
|
32
|
+
.col p { font-size: 24px; line-height: 1.5; color: var(--cs-color-text-muted); margin: 0; }
|
|
33
|
+
.quote { font-size: 72px; font-weight: 700; line-height: 1.22; max-width: 1400px; }
|
|
34
|
+
.quote .hl { color: var(--cs-color-brand-ochre); }
|
|
35
|
+
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 56px; margin-top: 24px; }
|
|
36
|
+
.stat .v { font-size: 96px; font-weight: 800; letter-spacing: -.02em; color: var(--cs-color-brand-ochre); line-height: 1; }
|
|
37
|
+
.stat .l { font-size: 26px; opacity: .85; margin-top: 10px; }
|
|
38
|
+
.close-wrap { align-items: center; text-align: center; justify-content: center; }
|
|
39
|
+
.close-wrap img { width: 128px; height: 128px; }
|
|
40
|
+
</style>
|
|
41
|
+
</head>
|
|
42
|
+
<body>
|
|
43
|
+
<deck-stage width="1920" height="1080">
|
|
44
|
+
<section class="sl sl-umber sl-pad" data-label="Title">
|
|
45
|
+
<div class="lockup" style="margin-bottom:56px"><img src="../../assets/logo-mark.svg" alt="CyberSkill" /><b>CyberSkill</b></div>
|
|
46
|
+
<div class="eyebrow" data-vi="Đánh giá sản phẩm · Q3 2026">Product review · Q3 2026</div>
|
|
47
|
+
<div class="display">Turn Your Will<br />Into Real</div>
|
|
48
|
+
<div class="vn" data-vi="Hiện Thực Hoá Ý Chí · nhìn lại những gì đã ra mắt">Hiện Thực Hoá Ý Chí · a look at what shipped</div>
|
|
49
|
+
<div class="foot"><span data-vi="Lumi · CyberSkill · Sài Gòn">Lumi · CyberSkill · Saigon</span><span class="num">01</span></div>
|
|
50
|
+
</section>
|
|
51
|
+
|
|
52
|
+
<section class="sl sl-page sl-pad sl-center" data-label="Agenda">
|
|
53
|
+
<div class="eyebrow eyebrow-dark" data-vi="Nội dung chính">What we'll cover</div>
|
|
54
|
+
<div class="h2" data-vi="Ba điều đã ra mắt">Three things that shipped</div>
|
|
55
|
+
<div class="cols3">
|
|
56
|
+
<div class="col"><div class="n">01</div><h3>Liquid Glass</h3><p data-vi="Năm chất liệu, nay gắn vào component.">Five materials, now bound to components.</p></div>
|
|
57
|
+
<div class="col"><div class="n">02</div><h3 data-vi="15 gói Ngũ Hành">15 element packs</h3><p data-vi="Đã kiểm chứng — không cảnh báo nào trên toàn bộ.">Verified — zero warnings across the set.</p></div>
|
|
58
|
+
<div class="col"><div class="n">03</div><h3 data-vi="Thần đèn Lumi">Lumi genie</h3><p data-vi="Luồng tiếp nhận điều ước, có con người kiểm duyệt.">A wish-capture flow, human in the loop.</p></div>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="foot" style="color:var(--cs-color-text-muted)"><span>Turn Your Will Into Real</span><span class="num">02</span></div>
|
|
61
|
+
</section>
|
|
62
|
+
|
|
63
|
+
<section class="sl sl-page sl-pad sl-center" data-label="By the numbers">
|
|
64
|
+
<div class="eyebrow eyebrow-dark" data-vi="Từ 2020">Since 2020</div>
|
|
65
|
+
<div class="h2" data-vi="Những con số">By the numbers</div>
|
|
66
|
+
<div class="stats">
|
|
67
|
+
<div class="stat"><div class="v">40+</div><div class="l" style="color:var(--cs-color-text-muted)" data-vi="Điều ước đã thực hiện">Wishes granted</div></div>
|
|
68
|
+
<div class="stat"><div class="v">1 day</div><div class="l" style="color:var(--cs-color-text-muted)" data-vi="Thời gian phản hồi">Reply time</div></div>
|
|
69
|
+
<div class="stat"><div class="v">EN·VN</div><div class="l" style="color:var(--cs-color-text-muted)" data-vi="Song ngữ mặc định">Bilingual by default</div></div>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="foot" style="color:var(--cs-color-text-muted)"><span data-vi="Xưởng phần mềm Sài Gòn">Saigon software studio</span><span class="num">03</span></div>
|
|
72
|
+
</section>
|
|
73
|
+
|
|
74
|
+
<section class="sl sl-page sl-pad sl-center" data-label="Ngũ Hành">
|
|
75
|
+
<div class="eyebrow eyebrow-dark" data-vi="Bản sắc sản phẩm theo ngũ hành">Elemental product identity</div>
|
|
76
|
+
<div class="h2" data-vi="Ngũ Hành — năm hành, một xưởng">Ngũ Hành — five elements, one studio</div>
|
|
77
|
+
<div style="display:grid;grid-template-columns:repeat(5,1fr);gap:28px">
|
|
78
|
+
<div style="border-radius:18px;background:radial-gradient(120% 100% at 50% -20%, rgba(122,155,87,0.55), transparent 62%),#18200F;color:#fff;padding:34px 28px"><div style="font-size:40px;font-weight:800">Mộc</div><div style="font-size:22px;opacity:.75" data-vi="Gỗ · sinh trưởng">Wood · growth</div><div style="height:10px;border-radius:99px;background:#7A9B57;margin-top:26px"></div></div>
|
|
79
|
+
<div style="border-radius:18px;background:radial-gradient(120% 100% at 50% -20%, rgba(224,99,43,0.55), transparent 62%),#231007;color:#fff;padding:34px 28px"><div style="font-size:40px;font-weight:800">Hỏa</div><div style="font-size:22px;opacity:.75" data-vi="Lửa · năng lượng">Fire · energy</div><div style="height:10px;border-radius:99px;background:#E0632B;margin-top:26px"></div></div>
|
|
80
|
+
<div style="border-radius:18px;background:radial-gradient(120% 100% at 50% -20%, rgba(244,186,23,0.55), transparent 62%),#45210E;color:#fff;padding:34px 28px;outline:4px solid var(--cs-color-brand-ochre);outline-offset:4px"><div style="font-size:40px;font-weight:800">Thổ</div><div style="font-size:22px;opacity:.75" data-vi="Đất · chính xưởng">Earth · the studio</div><div style="height:10px;border-radius:99px;background:#F4BA17;margin-top:26px"></div></div>
|
|
81
|
+
<div style="border-radius:18px;background:radial-gradient(120% 100% at 50% -20%, rgba(191,178,155,0.55), transparent 62%),#221C12;color:#fff;padding:34px 28px"><div style="font-size:40px;font-weight:800">Kim</div><div style="font-size:22px;opacity:.75" data-vi="Kim loại · chuẩn xác">Metal · precision</div><div style="height:10px;border-radius:99px;background:#BFB29B;margin-top:26px"></div></div>
|
|
82
|
+
<div style="border-radius:18px;background:radial-gradient(120% 100% at 50% -20%, rgba(78,142,155,0.55), transparent 62%),#0E1D20;color:#fff;padding:34px 28px"><div style="font-size:40px;font-weight:800">Thủy</div><div style="font-size:22px;opacity:.75" data-vi="Nước · trôi chảy">Water · flow</div><div style="height:10px;border-radius:99px;background:#4E8E9B;margin-top:26px"></div></div>
|
|
83
|
+
</div>
|
|
84
|
+
<div style="font-size:24px;color:var(--cs-color-text-muted);margin-top:36px" data-vi="Mỗi sản phẩm mang một hành; phối màu theo Tương sinh. Lumi luôn giữ sắc vàng.">Each product takes one element; mixes follow Tương sinh. Lumi stays golden in every one.</div>
|
|
85
|
+
<div class="foot" style="color:var(--cs-color-text-muted)"><span>Hiện Thực Hoá Ý Chí</span><span class="num">04</span></div>
|
|
86
|
+
</section>
|
|
87
|
+
|
|
88
|
+
<section class="sl sl-umber sl-pad sl-center" data-label="Quote">
|
|
89
|
+
<div class="quote"><span data-vi="“Một điều ước rõ ràng, được một đội ngũ thật thực hiện — ">“A clear wish, granted by a real team — </span><span class="hl" data-vi="xây để ra mắt, bền để dùng lâu.">built to ship, built to last.</span>”</div>
|
|
90
|
+
<div style="margin-top:40px;font-size:26px;opacity:.75" data-vi="Lời hứa của CyberSkill">The CyberSkill promise</div>
|
|
91
|
+
<div class="foot"><span data-vi="Ấm áp · Thẳng thắn · Trung thực · Tôn trọng">Warm · Direct · Honest · Respectful</span><span class="num">05</span></div>
|
|
92
|
+
</section>
|
|
93
|
+
|
|
94
|
+
<section class="sl sl-umber sl-pad close-wrap" data-label="Closing">
|
|
95
|
+
<img src="../../assets/logo-mark.svg" alt="CyberSkill" />
|
|
96
|
+
<div class="display" style="margin-top:28px" data-vi="Ước một điều">Make a wish</div>
|
|
97
|
+
<div class="vn" data-vi="cyberskill.world · trả lời trong một ngày làm việc">cyberskill.world · we reply within one business day</div>
|
|
98
|
+
</section>
|
|
99
|
+
</deck-stage>
|
|
100
|
+
<script src="../../templates/_vendor/deck-stage.js"></script>
|
|
101
|
+
<button id="langToggle" style="position:fixed;left:20px;bottom:20px;z-index:60;border:1px solid rgba(255,255,255,.3);background:rgba(26,17,8,.85);color:#F4BA17;height:44px;padding:0 16px;border-radius:999px;cursor:pointer;font:600 14px var(--cs-font-family-ui)">Tiếng Việt</button>
|
|
102
|
+
<script>
|
|
103
|
+
(function(){
|
|
104
|
+
var KEY="cs_site_lang", link=document.getElementById("langToggle");
|
|
105
|
+
function apply(vi){
|
|
106
|
+
document.documentElement.setAttribute("lang", vi?"vi":"en");
|
|
107
|
+
document.querySelectorAll("[data-vi]").forEach(function(el){
|
|
108
|
+
if(!el.dataset.en) el.dataset.en=el.textContent;
|
|
109
|
+
el.textContent = vi ? el.dataset.vi : el.dataset.en;
|
|
110
|
+
});
|
|
111
|
+
if(link) link.textContent = vi ? "English" : "Tiếng Việt";
|
|
112
|
+
try{localStorage.setItem(KEY, vi?"vi":"en");}catch(e){}
|
|
113
|
+
}
|
|
114
|
+
var vi=false; try{vi=localStorage.getItem(KEY)==="vi";}catch(e){}
|
|
115
|
+
if(vi) apply(true);
|
|
116
|
+
if(link) link.addEventListener("click", function(){ apply(document.documentElement.getAttribute("lang")!=="vi"); });
|
|
117
|
+
})();
|
|
118
|
+
</script>
|
|
119
|
+
</body>
|
|
120
|
+
</html>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Status Hub — UI kit
|
|
2
|
+
|
|
3
|
+
A high-fidelity recreation of **CyberSkill Status Hub** (`status-hub@2`): the single-page portfolio dashboard that ships inside the design system repo (`docs/status/`). One page, three lenses.
|
|
4
|
+
|
|
5
|
+
## What it demonstrates
|
|
6
|
+
- **Umber header** with the official Logo mark on an Ochre tile, the product title, and a warm-dark theme toggle (`data-theme` on the root — flip it to see the whole surface re-theme).
|
|
7
|
+
|
|
8
|
+
- **Deck**: clickable KPI stats (filter the board by status), a segmented progress bar with legend, and a velocity spark chart.
|
|
9
|
+
|
|
10
|
+
- **"Now shipping"** Ochre callout.
|
|
11
|
+
|
|
12
|
+
- **Command bar** (sticky, Light-Glass-adjacent): search, a segmented **Board / Table / Releases** lens switcher, a status facet, and a live count.
|
|
13
|
+
|
|
14
|
+
- **Board lens** — project cards with segmented mini-bars, status pills, and mono task chips.
|
|
15
|
+
|
|
16
|
+
- **Table lens** — dense, solid-surface data table.
|
|
17
|
+
|
|
18
|
+
- **Releases lens** — a shipped/now timeline.
|
|
19
|
+
|
|
20
|
+
- **Detail drawer** — slides in on card/row click with meta, tasks, and a risk callout.
|
|
21
|
+
|
|
22
|
+
## Files
|
|
23
|
+
- `index.html` — entry; loads `styles.css` (design tokens) + `status.css` (product layer), React, and the app.
|
|
24
|
+
|
|
25
|
+
- `login.html` — split sign-in (brand panel + form; dark toggle).
|
|
26
|
+
|
|
27
|
+
- `settings.html` — Tabs, form controls, switches, danger zone (dark toggle).
|
|
28
|
+
|
|
29
|
+
- `project.html` — full project detail view: breadcrumb, KPI stats, tasks, `cs-steps`, `cs-timeline`, `cs-dl` (dark toggle).
|
|
30
|
+
|
|
31
|
+
- `identity-lab.html` — live Theme × Element switching on a product surface (15 element-variant pills · light/dark).
|
|
32
|
+
|
|
33
|
+
- `status.css` — product component styles ported from the real status-hub stylesheet; **tokens come from the design system**, not redeclared.
|
|
34
|
+
|
|
35
|
+
- `data.js` — fictional, on-brand sample data (`window.SH_DATA`).
|
|
36
|
+
|
|
37
|
+
- `StatusHub.jsx` — the interactive app (`window.StatusHub`).
|
|
38
|
+
|
|
39
|
+
## Fidelity notes
|
|
40
|
+
This is a cosmetic recreation: search/sort/filter are shallow and data is fake. Colours, spacing, pills, chips, radii, and the warm-dark theme are taken verbatim from the source token vocabulary. The real product is vanilla HTML+CSS (no React); this kit uses light React only for lens/drawer state.
|