@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,50 @@
|
|
|
1
|
+
/* CyberSkill — interaction layer: hover depth, focus glow, entrance motion.
|
|
2
|
+
* Additive layer loaded LAST so it enhances base components without changing
|
|
3
|
+
* their structure. Everything degrades under prefers-reduced-motion. Anchors
|
|
4
|
+
* (Umber/Ochre) unchanged — this only adds warmth to elevation + interaction. */
|
|
5
|
+
|
|
6
|
+
/* ---- 1. Warm hover depth — filled controls lift on a warm umber shadow ---- */
|
|
7
|
+
.cs-button--primary, .cs-button--secondary, .cs-button--tertiary, .cs-button--danger {
|
|
8
|
+
transition: background var(--cs-duration-fast) var(--cs-ease-standard),
|
|
9
|
+
border-color var(--cs-duration-fast) var(--cs-ease-standard),
|
|
10
|
+
filter var(--cs-duration-fast) var(--cs-ease-standard),
|
|
11
|
+
box-shadow var(--cs-duration-base) var(--cs-ease-standard),
|
|
12
|
+
transform var(--cs-duration-fast) var(--cs-ease-standard);
|
|
13
|
+
}
|
|
14
|
+
.cs-button--primary:hover:not(.is-disabled),
|
|
15
|
+
.cs-button--danger:hover:not(.is-disabled) {
|
|
16
|
+
box-shadow: 0 8px 20px rgba(69, 33, 14, 0.24);
|
|
17
|
+
transform: translateY(-1px);
|
|
18
|
+
}
|
|
19
|
+
.cs-button--primary:active:not(.is-disabled),
|
|
20
|
+
.cs-button--danger:active:not(.is-disabled) {
|
|
21
|
+
transform: translateY(0);
|
|
22
|
+
box-shadow: var(--cs-shadow-xs);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* ---- 2. Soft ochre focus glow — layered on the immutable 3px ring ---- */
|
|
26
|
+
.cs-button:focus-visible,
|
|
27
|
+
.cs-field__control:focus-visible,
|
|
28
|
+
.cs-select select.cs-field__control:focus-visible,
|
|
29
|
+
.cs-search:focus-within,
|
|
30
|
+
.cs-ai-disclosure__badge:focus-visible,
|
|
31
|
+
.cs-switch input:focus-visible + .cs-switch__track {
|
|
32
|
+
box-shadow: 0 0 0 5px color-mix(in oklab, var(--cs-color-accent-ochre) 26%, transparent);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* ---- 3. Entrance motion utilities (opt-in) + a gentle Dialog entrance ---- */
|
|
36
|
+
@keyframes cs-fade-in { from { opacity: 0; } to { opacity: 1; } }
|
|
37
|
+
@keyframes cs-rise-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
|
|
38
|
+
@keyframes cs-pop-in { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: scale(1); } }
|
|
39
|
+
.cs-fade-in { animation: cs-fade-in var(--cs-duration-slow) var(--cs-ease-entrance) both; }
|
|
40
|
+
.cs-rise-in { animation: cs-rise-in var(--cs-duration-slow) var(--cs-ease-entrance) both; }
|
|
41
|
+
.cs-rise-in--2 { animation-delay: 80ms; }
|
|
42
|
+
.cs-rise-in--3 { animation-delay: 160ms; }
|
|
43
|
+
.cs-rise-in--4 { animation-delay: 240ms; }
|
|
44
|
+
.cs-dialog { animation: cs-pop-in var(--cs-duration-base) var(--cs-ease-entrance) both; }
|
|
45
|
+
.cs-dialog__overlay { animation: cs-fade-in var(--cs-duration-base) var(--cs-ease-standard) both; }
|
|
46
|
+
|
|
47
|
+
@media (prefers-reduced-motion: reduce) {
|
|
48
|
+
.cs-button--primary:hover, .cs-button--danger:hover { transform: none; }
|
|
49
|
+
.cs-fade-in, .cs-rise-in, .cs-dialog, .cs-dialog__overlay { animation: none; }
|
|
50
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* CyberSkill — navigation (.cs-*). */
|
|
2
|
+
|
|
3
|
+
/* Tabs */
|
|
4
|
+
.cs-tabs { display: flex; gap: 4px; border-block-end: 1px solid var(--cs-color-border-default); }
|
|
5
|
+
.cs-tab { appearance: none; border: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-weight: 600; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-muted); padding: 10px 14px; cursor: pointer; position: relative; border-block-end: 2px solid transparent; margin-block-end: -1px; display: inline-flex; align-items: center; gap: 7px; }
|
|
6
|
+
.cs-tab:hover { color: var(--cs-color-text-primary); }
|
|
7
|
+
.cs-tab[aria-selected="true"] { color: var(--cs-color-brand-umber); border-block-end-color: var(--cs-color-brand-ochre); }
|
|
8
|
+
[data-theme="dark"] .cs-tab[aria-selected="true"] { color: var(--cs-color-brand-ochre); }
|
|
9
|
+
.cs-tab:focus-visible { outline: 3px solid var(--cs-color-accent-ochre); outline-offset: -3px; border-radius: var(--cs-radius-sm); }
|
|
10
|
+
.cs-tab__count { font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-xs); background: var(--cs-color-surface-raised); border-radius: var(--cs-radius-full); padding: 1px 7px; }
|
|
11
|
+
|
|
12
|
+
/* Breadcrumb */
|
|
13
|
+
.cs-breadcrumb { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; list-style: none; margin: 0; padding: 0; font-size: var(--cs-font-size-sm); font-family: var(--cs-font-family-ui); }
|
|
14
|
+
.cs-breadcrumb li { display: inline-flex; align-items: center; gap: 8px; }
|
|
15
|
+
.cs-breadcrumb a { color: var(--cs-color-text-muted); text-decoration: none; }
|
|
16
|
+
.cs-breadcrumb a:hover { color: var(--cs-color-text-accent); }
|
|
17
|
+
.cs-breadcrumb__sep { color: var(--cs-color-border-default); }
|
|
18
|
+
.cs-breadcrumb__current { color: var(--cs-color-text-primary); font-weight: 600; }
|
|
19
|
+
|
|
20
|
+
/* Pagination */
|
|
21
|
+
.cs-pagination { display: inline-flex; align-items: center; gap: 4px; }
|
|
22
|
+
.cs-pagination button { min-inline-size: 38px; block-size: 38px; padding: 0 10px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); border-radius: var(--cs-radius-md); font: inherit; font-family: var(--cs-font-family-ui); font-weight: 600; font-size: var(--cs-font-size-sm); cursor: pointer; display: inline-grid; place-items: center; }
|
|
23
|
+
.cs-pagination button:hover:not(:disabled) { border-color: var(--cs-color-brand-ochre); }
|
|
24
|
+
.cs-pagination button[aria-current="page"] { background: var(--cs-color-brand-umber); color: var(--cs-color-text-inverse); border-color: transparent; }
|
|
25
|
+
[data-theme="dark"] .cs-pagination button[aria-current="page"] { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); }
|
|
26
|
+
.cs-pagination button:disabled { opacity: 0.45; cursor: not-allowed; }
|
|
27
|
+
.cs-pagination__ellipsis { padding: 0 4px; color: var(--cs-color-text-muted); }
|
|
28
|
+
|
|
29
|
+
/* Menu / Dropdown */
|
|
30
|
+
.cs-menu { position: relative; display: inline-block; }
|
|
31
|
+
.cs-menu__list { position: absolute; inset-block-start: calc(100% + 6px); inset-inline-start: 0; min-inline-size: 200px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 6px; z-index: var(--cs-depth-toast); display: grid; gap: 2px; }
|
|
32
|
+
.cs-menu__list--end { inset-inline-start: auto; inset-inline-end: 0; }
|
|
33
|
+
.cs-menu__item { display: flex; align-items: center; gap: 10px; inline-size: 100%; text-align: start; border: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); padding: 8px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; }
|
|
34
|
+
.cs-menu__item:hover { background: var(--cs-color-surface-raised); }
|
|
35
|
+
.cs-menu__item:focus-visible { background: var(--cs-color-surface-raised); outline: 3px solid var(--cs-color-accent-ochre); outline-offset: -3px; }
|
|
36
|
+
.cs-menu__item--danger { color: var(--cs-color-semantic-danger); }
|
|
37
|
+
.cs-menu__item--danger:hover { background: color-mix(in oklab, var(--cs-color-semantic-danger) 10%, transparent); }
|
|
38
|
+
.cs-menu__sep { block-size: 1px; background: var(--cs-color-border-default); margin: 4px 2px; }
|
|
39
|
+
.cs-menu__label { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); padding: 6px 10px 2px; }
|
package/base/reset.css
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* CyberSkill — minimal base reset. Products opt in by linking styles.css. */
|
|
2
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
3
|
+
html { -webkit-text-size-adjust: 100%; }
|
|
4
|
+
body {
|
|
5
|
+
margin: 0;
|
|
6
|
+
background: var(--cs-color-surface-page, #fffdf8);
|
|
7
|
+
color: var(--cs-color-text-primary, #45210e);
|
|
8
|
+
font-family: var(--cs-font-family-ui, ui-sans-serif, system-ui);
|
|
9
|
+
font-size: var(--cs-font-size-base, 1rem);
|
|
10
|
+
line-height: var(--cs-font-lineHeight-body, 1.5);
|
|
11
|
+
-webkit-font-smoothing: antialiased;
|
|
12
|
+
text-rendering: optimizeLegibility;
|
|
13
|
+
}
|
|
14
|
+
:where(h1, h2, h3, h4, h5, h6) { line-height: var(--cs-font-lineHeight-heading, 1.35); text-wrap: balance; }
|
|
15
|
+
:where(p) { text-wrap: pretty; }
|
|
16
|
+
:where(code, pre, kbd, samp) { font-family: var(--cs-font-family-mono, ui-monospace, monospace); }
|
|
17
|
+
:where(:focus-visible) { outline: 2px solid var(--cs-color-accent-ochre, #f4ba17); outline-offset: 2px; }
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/* CyberSkill — global responsive layer (loaded LAST so it can adapt any surface).
|
|
2
|
+
* The system is desktop-first but every artifact must read on tablet and phone.
|
|
3
|
+
* Strategy: (1) media never overflows; (2) the print-doc archetype (cs-desk /
|
|
4
|
+
* cs-sheet) relaxes its generous desktop padding on small screens; (3) shared class
|
|
5
|
+
* hooks (sidebar, tables) reflow; (4) inline fixed-column grids collapse; (5) wide
|
|
6
|
+
* fixed-pixel export canvases (decks, social) scroll to keep their exact geometry.
|
|
7
|
+
*
|
|
8
|
+
* NOTE on the [style*=…] selectors below: Design-Component templates compile inline
|
|
9
|
+
* `style="…"` into React style objects, so the RENDERED attribute is serialized with
|
|
10
|
+
* a space after the colon and after commas — e.g. `grid-template-columns: repeat(4, 1fr)`.
|
|
11
|
+
* Every substring selector here MUST match that spaced form, not the authored source. */
|
|
12
|
+
|
|
13
|
+
/* 1 — Media and embeds never blow out a column */
|
|
14
|
+
img, svg, video, canvas { max-width: 100%; height: auto; }
|
|
15
|
+
|
|
16
|
+
/* 2 — Print-doc archetype: shrink desk + sheet chrome as the screen narrows.
|
|
17
|
+
* cs-desk is the grey backing; cs-sheet is the white page. */
|
|
18
|
+
@media screen and (max-width: 900px) {
|
|
19
|
+
.cs-desk { padding: 24px 10px !important; }
|
|
20
|
+
.cs-sheet { padding: 40px 40px !important; }
|
|
21
|
+
}
|
|
22
|
+
@media screen and (max-width: 620px) {
|
|
23
|
+
.cs-desk { padding: 12px 6px !important; }
|
|
24
|
+
.cs-sheet { padding: 26px 20px !important; border-radius: 8px !important; }
|
|
25
|
+
}
|
|
26
|
+
@media screen and (max-width: 460px) {
|
|
27
|
+
.cs-sheet { padding: 20px 15px !important; }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* 3 — Wide tables inside sheets/panels scroll horizontally instead of clipping */
|
|
31
|
+
@media screen and (max-width: 760px) {
|
|
32
|
+
.cs-sheet table, .cs-table-scroll { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* 4 — App shell: the sidebar + main is a fixed two-column inline grid on desktop.
|
|
36
|
+
* Collapse it to a stacked layout; the sidebar becomes a horizontal nav strip. */
|
|
37
|
+
@media screen and (max-width: 760px) {
|
|
38
|
+
.cs-sidebar { position: static !important; width: auto !important; height: auto !important;
|
|
39
|
+
display: flex !important; flex-wrap: wrap !important; gap: 4px 10px !important;
|
|
40
|
+
align-items: center !important; border-inline-end: 0 !important;
|
|
41
|
+
border-block-end: 1px solid var(--cs-color-border-default) !important; }
|
|
42
|
+
.cs-sidebar__label { width: 100% !important; }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* 5 — Fixed-pixel export canvases (16:9 decks, social 1080/1200 canvases) sit in a
|
|
46
|
+
* dark desk wrapper tagged .cs-canvas-desk. It is ALWAYS a horizontal scroll viewport,
|
|
47
|
+
* so a slide/canvas wider than the window scrolls INSIDE the desk instead of pushing
|
|
48
|
+
* the whole page wide — a 16:9 slide's content min-width can exceed the window a little
|
|
49
|
+
* even on a laptop (≈1280), which otherwise overflowed the document. The legible
|
|
50
|
+
* min-width floor for the inner track only applies once the window itself is narrow. */
|
|
51
|
+
.cs-canvas-desk { overflow-x: auto; -webkit-overflow-scrolling: touch; }
|
|
52
|
+
@media screen and (max-width: 1120px) {
|
|
53
|
+
.cs-canvas-desk > * { min-width: 960px; }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* 6 — Very wide section padding eases in on phones */
|
|
57
|
+
@media screen and (max-width: 620px) {
|
|
58
|
+
section[style*="padding: 84px"], section[style*="padding: 80px"],
|
|
59
|
+
section[style*="padding: 72px"] { padding-inline: 22px !important; }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* 7 — Inline fixed-column grids reflow on small screens. Templates set
|
|
63
|
+
* `grid-template-columns` inline, which beats external rules — so override with
|
|
64
|
+
* !important via substring selectors (spaced form, see the note above). Fluid
|
|
65
|
+
* repeat(auto-fit/auto-fill,…) grids are never matched (they read `repeat(a`).
|
|
66
|
+
* Tablet: 3+ cols → 2. Phone: everything → 1 (declared after, so it wins at the
|
|
67
|
+
* narrow width). Print is unaffected — the @page is wide, so these screen
|
|
68
|
+
* breakpoints never fire during print/export. */
|
|
69
|
+
@media screen and (max-width: 900px) {
|
|
70
|
+
[style*="grid-template-columns: repeat(3"],
|
|
71
|
+
[style*="grid-template-columns: repeat(4"],
|
|
72
|
+
[style*="grid-template-columns: repeat(5"],
|
|
73
|
+
[style*="grid-template-columns: repeat(6"] { grid-template-columns: repeat(2, 1fr) !important; }
|
|
74
|
+
}
|
|
75
|
+
@media screen and (max-width: 600px) {
|
|
76
|
+
[style*="grid-template-columns: repeat(2"],
|
|
77
|
+
[style*="grid-template-columns: repeat(3"],
|
|
78
|
+
[style*="grid-template-columns: repeat(4"],
|
|
79
|
+
[style*="grid-template-columns: repeat(5"],
|
|
80
|
+
[style*="grid-template-columns: repeat(6"],
|
|
81
|
+
[style*="grid-template-columns: 1fr 1fr"],
|
|
82
|
+
[style*="grid-template-columns: 1.15fr 1fr"],
|
|
83
|
+
[style*="grid-template-columns: 1fr 1.15fr"],
|
|
84
|
+
[style*="grid-template-columns: 2fr 1fr"],
|
|
85
|
+
[style*="grid-template-columns: 1fr 2fr"],
|
|
86
|
+
[style*="grid-template-columns: auto 1fr"] { grid-template-columns: 1fr !important; }
|
|
87
|
+
}
|
|
88
|
+
/* Decks & social canvases keep their authored columns — they scroll (see §5), so their
|
|
89
|
+
* internal grids must not collapse. Unscoped + higher specificity, so they win at every width. */
|
|
90
|
+
.cs-canvas-desk [style*="grid-template-columns: repeat(3, 1fr)"] { grid-template-columns: repeat(3, 1fr) !important; }
|
|
91
|
+
.cs-canvas-desk [style*="grid-template-columns: repeat(4, 1fr)"] { grid-template-columns: repeat(4, 1fr) !important; }
|
|
92
|
+
|
|
93
|
+
/* 8 — Touch targets reach the 44px minimum on phones/tablets (the system's a11y
|
|
94
|
+
* floor). Base sidebar nav rows (39px) and the topbar search input (26px) are
|
|
95
|
+
* fine for mouse on desktop but too small to tap; grow them on small screens. */
|
|
96
|
+
@media screen and (max-width: 760px) {
|
|
97
|
+
.cs-sidebar .cs-nav-item, .cs-nav-item { min-height: 44px; }
|
|
98
|
+
.cs-search { display: flex; align-items: center; min-height: 44px; }
|
|
99
|
+
.cs-search input, .cs-search select { min-height: 44px; }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* 9 — Unbreakable long tokens force horizontal overflow on narrow screens.
|
|
103
|
+
* Write-on lines ("______"), long URLs, IDs, hashes, and account numbers have a
|
|
104
|
+
* min-content width that can exceed a phone column and push the page wider than the
|
|
105
|
+
* viewport (observed: the agenda / review / PIP fill-in lines overflowed at 390px).
|
|
106
|
+
* `overflow-wrap: anywhere` lets them break — and unlike `break-word` it ALSO shrinks
|
|
107
|
+
* the min-content contribution, so grid/flex tracks size down correctly instead of
|
|
108
|
+
* being propped open. It only breaks a token when it would otherwise overflow, so
|
|
109
|
+
* ordinary prose is untouched. Scoped to the print-doc wrapper; the print @page is
|
|
110
|
+
* wide, so this screen breakpoint never fires during export. */
|
|
111
|
+
@media screen and (max-width: 760px) {
|
|
112
|
+
.cs-desk, .cs-sheet { overflow-wrap: anywhere; }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* 10 — App-shell layout: sidebar + main is a fixed two-column INLINE grid
|
|
116
|
+
* (grid-template-columns: 248px 1fr). §4 restyles the .cs-sidebar itself, but the
|
|
117
|
+
* parent grid still reserved the 248px column, so on a phone the main column (and its
|
|
118
|
+
* DataTable) was squeezed and overflowed. Collapse the shell grid to one column with
|
|
119
|
+
* an attribute selector — the compiler serializes the inline value with spaces, and an
|
|
120
|
+
* attribute selector reliably overrides an inline grid-template-columns (a class
|
|
121
|
+
* selector does not). Then let the app-region grids shrink (min-width:0) and the data
|
|
122
|
+
* table scroll inside its panel instead of forcing the page wide. */
|
|
123
|
+
@media screen and (max-width: 760px) {
|
|
124
|
+
[style*="grid-template-columns: 248px 1fr"] { grid-template-columns: 1fr !important; }
|
|
125
|
+
main { min-width: 0; }
|
|
126
|
+
main > * { min-width: 0; }
|
|
127
|
+
.cs-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
|
|
128
|
+
}
|
package/base/shell.css
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* CyberSkill — app shell + overlays wave 2 (.cs-*). */
|
|
2
|
+
|
|
3
|
+
/* Sidebar + NavItem */
|
|
4
|
+
.cs-sidebar { inline-size: 248px; background: var(--cs-color-surface-panel); border-inline-end: 1px solid var(--cs-color-border-default); padding: 16px 12px; display: flex; flex-direction: column; gap: 3px; }
|
|
5
|
+
.cs-sidebar__label { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); padding: 12px 12px 4px; }
|
|
6
|
+
.cs-nav-item { display: flex; align-items: center; gap: 11px; padding: 9px 12px; border-radius: var(--cs-radius-md); color: var(--cs-color-text-primary); font-family: var(--cs-font-family-ui); font-weight: 600; font-size: var(--cs-font-size-sm); text-decoration: none; cursor: pointer; border: 0; background: transparent; inline-size: 100%; text-align: start; }
|
|
7
|
+
.cs-nav-item:hover { background: var(--cs-color-surface-raised); }
|
|
8
|
+
.cs-nav-item__icon { flex: none; color: var(--cs-color-text-muted); display: grid; place-items: center; }
|
|
9
|
+
.cs-nav-item.is-active { background: color-mix(in oklab, var(--cs-color-brand-ochre) 22%, var(--cs-color-surface-panel)); color: var(--cs-color-brand-umber); }
|
|
10
|
+
.cs-nav-item.is-active .cs-nav-item__icon { color: var(--cs-color-brand-umber); }
|
|
11
|
+
[data-theme="dark"] .cs-nav-item.is-active { color: var(--cs-color-brand-ochre); }
|
|
12
|
+
[data-theme="dark"] .cs-nav-item.is-active .cs-nav-item__icon { color: var(--cs-color-brand-ochre); }
|
|
13
|
+
.cs-nav-item__trail { margin-inline-start: auto; }
|
|
14
|
+
|
|
15
|
+
/* Steps */
|
|
16
|
+
.cs-steps { display: flex; gap: 0; }
|
|
17
|
+
.cs-step { flex: 1; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; position: relative; padding-inline-end: 12px; }
|
|
18
|
+
.cs-step:not(:last-child)::after { content: ""; position: absolute; inset-block-start: 13px; inset-inline-start: 34px; inline-size: calc(100% - 46px); block-size: 2px; background: var(--cs-color-border-default); }
|
|
19
|
+
.cs-step__marker { inline-size: 28px; block-size: 28px; border-radius: 50%; display: grid; place-items: center; font-family: var(--cs-font-family-mono); font-weight: 700; font-size: 13px; background: var(--cs-color-surface-raised); color: var(--cs-color-text-muted); border: 1px solid var(--cs-color-border-default); z-index: 1; }
|
|
20
|
+
.cs-step--done .cs-step__marker { background: var(--cs-color-brand-umber); color: #fff; border-color: transparent; }
|
|
21
|
+
.cs-step--done:not(:last-child)::after { background: var(--cs-color-brand-umber); }
|
|
22
|
+
.cs-step--active .cs-step__marker { background: var(--cs-color-brand-ochre); color: var(--cs-color-brand-umber); border-color: transparent; box-shadow: 0 0 0 4px color-mix(in oklab, var(--cs-color-brand-ochre) 28%, transparent); }
|
|
23
|
+
.cs-step__title { font-weight: 700; font-size: var(--cs-font-size-sm); }
|
|
24
|
+
.cs-step__body { font-size: var(--cs-font-size-xs); color: var(--cs-color-text-muted); }
|
|
25
|
+
|
|
26
|
+
/* Popover */
|
|
27
|
+
.cs-popover { position: relative; display: inline-block; }
|
|
28
|
+
.cs-popover__panel { position: absolute; inset-block-start: calc(100% + 8px); inset-inline-start: 0; min-inline-size: 240px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 14px; z-index: var(--cs-depth-toast); }
|
|
29
|
+
.cs-popover__panel--end { inset-inline-start: auto; inset-inline-end: 0; }
|
|
30
|
+
|
|
31
|
+
/* Drawer */
|
|
32
|
+
.cs-drawer-scrim { position: fixed; inset: 0; background: rgba(31, 19, 11, 0.42); z-index: var(--cs-depth-modal); }
|
|
33
|
+
.cs-drawer { position: fixed; inset-block: 0; inset-inline-end: 0; inline-size: min(480px, 100%); background: var(--cs-color-surface-page); border-inline-start: 1px solid var(--cs-color-border-default); box-shadow: -18px 0 48px rgba(31, 19, 11, 0.22); z-index: calc(var(--cs-depth-modal) + 1); display: flex; flex-direction: column; animation: cs-drawer-in var(--cs-duration-base) var(--cs-ease-standard); }
|
|
34
|
+
.cs-drawer--left { inset-inline: 0 auto; border-inline: none; border-inline-end: 1px solid var(--cs-color-border-default); box-shadow: 18px 0 48px rgba(31, 19, 11, 0.22); animation-name: cs-drawer-in-left; }
|
|
35
|
+
.cs-drawer__header { display: flex; align-items: center; gap: 12px; padding: 16px 20px; border-block-end: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); }
|
|
36
|
+
.cs-drawer__title { margin: 0; font-size: var(--cs-text-h4); font-weight: 700; }
|
|
37
|
+
.cs-drawer__close { margin-inline-start: auto; border: 0; background: transparent; cursor: pointer; color: var(--cs-color-text-muted); display: grid; place-items: center; padding: 4px; }
|
|
38
|
+
.cs-drawer__close:hover { color: var(--cs-color-semantic-danger); }
|
|
39
|
+
.cs-drawer__body { flex: 1; overflow: auto; padding: 20px; }
|
|
40
|
+
.cs-drawer__footer { padding: 14px 20px; border-block-start: 1px solid var(--cs-color-border-default); display: flex; gap: 10px; justify-content: flex-end; }
|
|
41
|
+
@keyframes cs-drawer-in { from { transform: translateX(100%); } to { transform: none; } }
|
|
42
|
+
@keyframes cs-drawer-in-left { from { transform: translateX(-100%); } to { transform: none; } }
|
|
43
|
+
@media (prefers-reduced-motion: reduce) { .cs-drawer { animation: none; } }
|
|
44
|
+
|
|
45
|
+
/* CommandPalette */
|
|
46
|
+
.cs-cmdk-scrim { position: fixed; inset: 0; background: rgba(31, 19, 11, 0.42); z-index: var(--cs-depth-modal); display: grid; align-items: start; justify-items: center; padding-block-start: 12vh; }
|
|
47
|
+
.cs-cmdk { inline-size: min(560px, 92vw); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-xl); overflow: hidden; }
|
|
48
|
+
.cs-cmdk__search { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-block-end: 1px solid var(--cs-color-border-default); }
|
|
49
|
+
.cs-cmdk__search svg { color: var(--cs-color-text-muted); }
|
|
50
|
+
.cs-cmdk__search input { flex: 1; border: 0; outline: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-size: var(--cs-font-size-md); color: var(--cs-color-text-primary); }
|
|
51
|
+
.cs-cmdk__list { max-block-size: 340px; overflow: auto; padding: 8px; display: grid; gap: 2px; }
|
|
52
|
+
.cs-cmdk__label { font-size: var(--cs-font-size-xs); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-muted); padding: 8px 10px 2px; }
|
|
53
|
+
.cs-cmdk__item { display: flex; align-items: center; gap: 11px; inline-size: 100%; text-align: start; border: 0; background: transparent; font: inherit; font-family: var(--cs-font-family-ui); font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); padding: 10px 12px; border-radius: var(--cs-radius-md); cursor: pointer; }
|
|
54
|
+
.cs-cmdk__item:hover, .cs-cmdk__item[aria-selected="true"] { background: var(--cs-color-surface-raised); }
|
|
55
|
+
.cs-cmdk__item .cs-kbd { margin-inline-start: auto; }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* CyberSkill — typographic role utilities. Each bundles size + line-height +
|
|
2
|
+
* weight + tracking so consumers write intent (.cs-h1) not magic numbers.
|
|
3
|
+
* Built on the semantic aliases in tokens/typography.css. */
|
|
4
|
+
.cs-display { font-family: var(--cs-heading-family); font-size: var(--cs-text-display); line-height: var(--cs-font-lineHeight-tight); font-weight: var(--cs-heading-weight-strong); letter-spacing: var(--cs-heading-tracking); text-wrap: balance; }
|
|
5
|
+
.cs-h1 { font-family: var(--cs-heading-family); font-size: var(--cs-text-h1); line-height: var(--cs-font-lineHeight-heading); font-weight: var(--cs-heading-weight-strong); letter-spacing: var(--cs-heading-tracking); text-wrap: balance; }
|
|
6
|
+
.cs-h2 { font-family: var(--cs-heading-family); font-size: var(--cs-text-h2); line-height: var(--cs-font-lineHeight-heading); font-weight: var(--cs-heading-weight); letter-spacing: var(--cs-heading-tracking); text-wrap: balance; }
|
|
7
|
+
.cs-h3 { font-family: var(--cs-heading-family); font-size: var(--cs-text-h3); line-height: var(--cs-font-lineHeight-heading); font-weight: var(--cs-heading-weight); }
|
|
8
|
+
.cs-h4 { font-family: var(--cs-heading-family); font-size: var(--cs-text-h4); line-height: var(--cs-font-lineHeight-heading); font-weight: var(--cs-font-weight-semibold); }
|
|
9
|
+
.cs-body-lg { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-body-lg); line-height: var(--cs-font-lineHeight-body); font-weight: var(--cs-font-weight-regular); text-wrap: pretty; }
|
|
10
|
+
.cs-body { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-body); line-height: var(--cs-font-lineHeight-body); font-weight: var(--cs-font-weight-regular); text-wrap: pretty; }
|
|
11
|
+
.cs-secondary { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-secondary); line-height: var(--cs-font-lineHeight-body); color: var(--cs-color-text-muted); }
|
|
12
|
+
.cs-caption { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-caption); line-height: var(--cs-font-lineHeight-body); color: var(--cs-color-text-muted); }
|
|
13
|
+
.cs-eyebrow { font-family: var(--cs-font-family-ui); font-size: var(--cs-text-eyebrow); font-weight: var(--cs-font-weight-bold); text-transform: uppercase; letter-spacing: var(--cs-letter-spacing-caps); color: var(--cs-color-text-accent); }
|
|
14
|
+
.cs-mono { font-family: var(--cs-font-family-mono); }
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* CyberSkill i18n — shared bilingual helper (v3 Batch 0).
|
|
2
|
+
* Vietnamese-first: default 'vi'. A component resolves its language from an explicit
|
|
3
|
+
* `lang` prop → nearest [lang] ancestor → document <html lang> → 'vi'. Built-in UI
|
|
4
|
+
* strings live in strings.js (EN + VI parity, enforced by _audit/bilingual-parity.html).
|
|
5
|
+
* Import from a component: import { makeT, resolveLang, formatDate } from "../_i18n/i18n.js"; */
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { strings as STRINGS } from "./strings.js";
|
|
8
|
+
|
|
9
|
+
export function resolveLang(propLang, el) {
|
|
10
|
+
const norm = (l) => (!l ? null : String(l).toLowerCase().startsWith("vi") ? "vi" : "en");
|
|
11
|
+
let l = norm(propLang);
|
|
12
|
+
if (!l && el && el.closest) { const a = el.closest("[lang]"); if (a) l = norm(a.getAttribute("lang")); }
|
|
13
|
+
if (!l && typeof document !== "undefined") l = norm(document.documentElement.getAttribute("lang"));
|
|
14
|
+
return l || "vi";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function tr(component, key, lang) {
|
|
18
|
+
const c = STRINGS[component] || {};
|
|
19
|
+
const table = c[lang] || c.vi || c.en || {};
|
|
20
|
+
if (table[key] != null) return table[key];
|
|
21
|
+
const en = c.en || {};
|
|
22
|
+
return en[key] != null ? en[key] : key;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Bind a component + language once: const t = makeT("Pagination", lang); t("next"). */
|
|
26
|
+
export function makeT(component, lang) { return (key) => tr(component, key, lang); }
|
|
27
|
+
|
|
28
|
+
/** React hook: attach the returned ref to the component root; resolves language from an
|
|
29
|
+
* explicit prop → nearest [lang] ancestor (e.g. a template's VN wrapper) → <html lang> → 'vi'.
|
|
30
|
+
* Corrects to the ancestor value in a layout effect (before paint). */
|
|
31
|
+
export function useLang(propLang) {
|
|
32
|
+
const ref = React.useRef(null);
|
|
33
|
+
const [lang, setLang] = React.useState(() => resolveLang(propLang, null));
|
|
34
|
+
React.useLayoutEffect(() => { setLang(resolveLang(propLang, ref.current)); }, [propLang]);
|
|
35
|
+
return [ref, lang];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const VI_MONTHS = ["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"];
|
|
39
|
+
|
|
40
|
+
/** VN date = DD/MM/YYYY; EN = 02 Jul 2026. */
|
|
41
|
+
export function formatDate(d, lang) {
|
|
42
|
+
const dt = d instanceof Date ? d : new Date(d);
|
|
43
|
+
if (isNaN(dt.getTime())) return "";
|
|
44
|
+
if (lang === "vi") {
|
|
45
|
+
const p = (n) => String(n).padStart(2, "0");
|
|
46
|
+
return p(dt.getDate()) + "/" + p(dt.getMonth() + 1) + "/" + dt.getFullYear();
|
|
47
|
+
}
|
|
48
|
+
return dt.toLocaleDateString("en-GB", { day: "2-digit", month: "short", year: "numeric" });
|
|
49
|
+
}
|
|
50
|
+
export function monthName(i, lang) { return lang === "vi" ? VI_MONTHS[i] : new Date(2000, i, 1).toLocaleDateString("en-US", { month: "long" }); }
|
|
51
|
+
export function formatNumber(n, lang) { if (n == null || isNaN(n)) return ""; return new Intl.NumberFormat(lang === "vi" ? "vi-VN" : "en-US").format(n); }
|
|
52
|
+
/** VN currency = "1.234.567 ₫"; EN = "$1,234,567". */
|
|
53
|
+
export function formatCurrency(n, lang) {
|
|
54
|
+
if (n == null || isNaN(n)) return "";
|
|
55
|
+
return lang === "vi" ? new Intl.NumberFormat("vi-VN").format(n) + "\u00a0₫" : "$" + new Intl.NumberFormat("en-US").format(n);
|
|
56
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/* CyberSkill — central bilingual string registry (v3 Batch 0/1).
|
|
2
|
+
* Every component with BUILT-IN UI text (text the consumer does NOT pass as a prop)
|
|
3
|
+
* registers its strings here, EN + VI. _audit/bilingual-parity.html enforces:
|
|
4
|
+
* • each component has both `en` and `vi`
|
|
5
|
+
* • identical key sets across en/vi (no missing/extra keys)
|
|
6
|
+
* • no empty values
|
|
7
|
+
* Batch 1 wires each component to read these via i18n.js `makeT()` + `useLang()`,
|
|
8
|
+
* replacing hardcoded English. Export is lowercase so the DS compiler does NOT expose
|
|
9
|
+
* it on the component namespace. */
|
|
10
|
+
export const strings = {
|
|
11
|
+
Pagination: {
|
|
12
|
+
en: { label: "Pagination", prev: "Previous page", next: "Next page" },
|
|
13
|
+
vi: { label: "Phân trang", prev: "Trang trước", next: "Trang sau" },
|
|
14
|
+
},
|
|
15
|
+
Breadcrumb: {
|
|
16
|
+
en: { label: "Breadcrumb" },
|
|
17
|
+
vi: { label: "Đường dẫn" },
|
|
18
|
+
},
|
|
19
|
+
CommandPalette: {
|
|
20
|
+
en: { placeholder: "Type a command or search…", empty: "No results found", aria: "Command palette", esc: "Esc" },
|
|
21
|
+
vi: { placeholder: "Nhập lệnh hoặc tìm kiếm…", empty: "Không tìm thấy kết quả", aria: "Bảng lệnh", esc: "Esc" },
|
|
22
|
+
},
|
|
23
|
+
SearchField: {
|
|
24
|
+
en: { placeholder: "Search…", clear: "Clear search" },
|
|
25
|
+
vi: { placeholder: "Tìm kiếm…", clear: "Xóa tìm kiếm" },
|
|
26
|
+
},
|
|
27
|
+
NumberField: {
|
|
28
|
+
en: { decrease: "Decrease", increase: "Increase" },
|
|
29
|
+
vi: { decrease: "Giảm", increase: "Tăng" },
|
|
30
|
+
},
|
|
31
|
+
FileUpload: {
|
|
32
|
+
en: { title: "Drop files here or browse", hint: "PNG, JPG, or PDF up to 10MB" },
|
|
33
|
+
vi: { title: "Kéo tệp vào đây hoặc chọn", hint: "PNG, JPG hoặc PDF, tối đa 10MB" },
|
|
34
|
+
},
|
|
35
|
+
Dialog: {
|
|
36
|
+
en: { close: "Close", confirm: "Confirm", cancel: "Cancel" },
|
|
37
|
+
vi: { close: "Đóng", confirm: "Xác nhận", cancel: "Hủy" },
|
|
38
|
+
},
|
|
39
|
+
Drawer: {
|
|
40
|
+
en: { close: "Close", panel: "Panel" },
|
|
41
|
+
vi: { close: "Đóng", panel: "Bảng" },
|
|
42
|
+
},
|
|
43
|
+
DataTable: {
|
|
44
|
+
en: { empty: "No records" },
|
|
45
|
+
vi: { empty: "Không có bản ghi" },
|
|
46
|
+
},
|
|
47
|
+
ConfidenceMeter: {
|
|
48
|
+
en: { label: "Confidence", low: "Low", medium: "Medium", high: "High" },
|
|
49
|
+
vi: { label: "Độ tin cậy", low: "Thấp", medium: "Trung bình", high: "Cao" },
|
|
50
|
+
},
|
|
51
|
+
Spinner: {
|
|
52
|
+
en: { label: "Loading" },
|
|
53
|
+
vi: { label: "Đang tải" },
|
|
54
|
+
},
|
|
55
|
+
Tag: {
|
|
56
|
+
en: { remove: "Remove" },
|
|
57
|
+
vi: { remove: "Gỡ bỏ" },
|
|
58
|
+
},
|
|
59
|
+
Toast: {
|
|
60
|
+
en: { notifications: "Notifications", dismiss: "Dismiss" },
|
|
61
|
+
vi: { notifications: "Thông báo", dismiss: "Đóng" },
|
|
62
|
+
},
|
|
63
|
+
TypingIndicator: {
|
|
64
|
+
en: { label: "Lumi is typing" },
|
|
65
|
+
vi: { label: "Lumi đang nhập" },
|
|
66
|
+
},
|
|
67
|
+
Editor: {
|
|
68
|
+
en: { toolbar: "Formatting", bold: "Bold", italic: "Italic", list: "Bullet list", area: "Rich text" },
|
|
69
|
+
vi: { toolbar: "Định dạng", bold: "Đậm", italic: "Nghiêng", list: "Danh sách", area: "Văn bản" },
|
|
70
|
+
},
|
|
71
|
+
Terminal: {
|
|
72
|
+
en: { input: "Terminal input" },
|
|
73
|
+
vi: { input: "Ô nhập lệnh" },
|
|
74
|
+
},
|
|
75
|
+
DataGrid: {
|
|
76
|
+
en: { empty: "No records", selectAll: "Select all rows", selectRow: "Select row" },
|
|
77
|
+
vi: { empty: "Không có bản ghi", selectAll: "Chọn tất cả", selectRow: "Chọn dòng" },
|
|
78
|
+
},
|
|
79
|
+
Splitter: {
|
|
80
|
+
en: { label: "Resize panes" },
|
|
81
|
+
vi: { label: "Đổi kích thước khung" },
|
|
82
|
+
},
|
|
83
|
+
HotKeys: {
|
|
84
|
+
en: { title: "Keyboard shortcuts", toggle: "Toggle this sheet" },
|
|
85
|
+
vi: { title: "Phím tắt", toggle: "Bật/tắt bảng này" },
|
|
86
|
+
},
|
|
87
|
+
ColorPicker: {
|
|
88
|
+
en: { label: "Color", hex: "Hex value" },
|
|
89
|
+
vi: { label: "Màu", hex: "Giá trị hex" },
|
|
90
|
+
},
|
|
91
|
+
Tour: {
|
|
92
|
+
en: { skip: "Skip", back: "Back", next: "Next", done: "Done" },
|
|
93
|
+
vi: { skip: "Bỏ qua", back: "Quay lại", next: "Tiếp", done: "Xong" },
|
|
94
|
+
},
|
|
95
|
+
TreeSelect: {
|
|
96
|
+
en: { placeholder: "Select…" },
|
|
97
|
+
vi: { placeholder: "Chọn…" },
|
|
98
|
+
},
|
|
99
|
+
Cascader: {
|
|
100
|
+
en: { placeholder: "Select…" },
|
|
101
|
+
vi: { placeholder: "Chọn…" },
|
|
102
|
+
},
|
|
103
|
+
Transfer: {
|
|
104
|
+
en: { source: "Available", target: "Selected", toTarget: "Move to selected", toSource: "Move to available" },
|
|
105
|
+
vi: { source: "Có sẵn", target: "Đã chọn", toTarget: "Chuyển sang đã chọn", toSource: "Chuyển về có sẵn" },
|
|
106
|
+
},
|
|
107
|
+
Mentions: {
|
|
108
|
+
en: { placeholder: "Add a note — @ to mention" },
|
|
109
|
+
vi: { placeholder: "Thêm ghi chú — gõ @ để nhắc tên" },
|
|
110
|
+
},
|
|
111
|
+
Form: {
|
|
112
|
+
en: { summary: "Please fix the following:", required: "required", requiredField: "This field is required" },
|
|
113
|
+
vi: { summary: "Vui lòng sửa các mục sau:", required: "bắt buộc", requiredField: "Trường này là bắt buộc" },
|
|
114
|
+
},
|
|
115
|
+
BackTop: {
|
|
116
|
+
en: { label: "Back to top" },
|
|
117
|
+
vi: { label: "Về đầu trang" },
|
|
118
|
+
},
|
|
119
|
+
Carousel: {
|
|
120
|
+
en: { prev: "Previous slide", next: "Next slide", slide: "Slide" },
|
|
121
|
+
vi: { prev: "Trang trước", next: "Trang sau", slide: "Trang" },
|
|
122
|
+
},
|
|
123
|
+
Comment: {
|
|
124
|
+
en: { reply: "Reply" },
|
|
125
|
+
vi: { reply: "Trả lời" },
|
|
126
|
+
},
|
|
127
|
+
Image: {
|
|
128
|
+
en: { preview: "Preview image", close: "Close" },
|
|
129
|
+
vi: { preview: "Xem ảnh", close: "Đóng" },
|
|
130
|
+
},
|
|
131
|
+
Toolbar: {
|
|
132
|
+
en: { more: "More actions" },
|
|
133
|
+
vi: { more: "Thao tác khác" },
|
|
134
|
+
},
|
|
135
|
+
Popconfirm: {
|
|
136
|
+
en: { ok: "OK", cancel: "Cancel" },
|
|
137
|
+
vi: { ok: "Đồng ý", cancel: "Hủy" },
|
|
138
|
+
},
|
|
139
|
+
Result: {
|
|
140
|
+
en: { success: "Done", error: "Something went wrong", warning: "Please check", info: "For your information" },
|
|
141
|
+
vi: { success: "Hoàn tất", error: "Đã có lỗi xảy ra", warning: "Vui lòng kiểm tra", info: "Thông tin" },
|
|
142
|
+
},
|
|
143
|
+
InlineEdit: {
|
|
144
|
+
en: { edit: "Edit", empty: "Add text" },
|
|
145
|
+
vi: { edit: "Sửa", empty: "Thêm nội dung" },
|
|
146
|
+
},
|
|
147
|
+
Calendar: {
|
|
148
|
+
en: { prev: "Previous month", next: "Next month" },
|
|
149
|
+
vi: { prev: "Tháng trước", next: "Tháng sau" },
|
|
150
|
+
},
|
|
151
|
+
DatePicker: {
|
|
152
|
+
en: { placeholder: "Select a date" },
|
|
153
|
+
vi: { placeholder: "Chọn ngày" },
|
|
154
|
+
},
|
|
155
|
+
TimePicker: {
|
|
156
|
+
en: { label: "Time" },
|
|
157
|
+
vi: { label: "Giờ" },
|
|
158
|
+
},
|
|
159
|
+
Combobox: {
|
|
160
|
+
en: { placeholder: "Select or type…", empty: "No matches" },
|
|
161
|
+
vi: { placeholder: "Chọn hoặc nhập…", empty: "Không có kết quả phù hợp" },
|
|
162
|
+
},
|
|
163
|
+
InputGroup: {
|
|
164
|
+
en: { clear: "Clear", show: "Show password", hide: "Hide password" },
|
|
165
|
+
vi: { clear: "Xóa", show: "Hiện mật khẩu", hide: "Ẩn mật khẩu" },
|
|
166
|
+
},
|
|
167
|
+
TagInput: {
|
|
168
|
+
en: { placeholder: "Add a tag…", remove: "Remove" },
|
|
169
|
+
vi: { placeholder: "Thêm thẻ…", remove: "Gỡ" },
|
|
170
|
+
},
|
|
171
|
+
Rating: {
|
|
172
|
+
en: { label: "Rating" },
|
|
173
|
+
vi: { label: "Đánh giá" },
|
|
174
|
+
},
|
|
175
|
+
InputOTP: {
|
|
176
|
+
en: { label: "One-time code" },
|
|
177
|
+
vi: { label: "Mã dùng một lần" },
|
|
178
|
+
},
|
|
179
|
+
PromptInput: {
|
|
180
|
+
en: { placeholder: "Type your wish…", send: "Send", hint: "Lumi replies, then hands clear wishes to a human." },
|
|
181
|
+
vi: { placeholder: "Nhập điều ước của bạn…", send: "Gửi", hint: "Lumi trả lời, rồi chuyển điều ước rõ ràng cho con người." },
|
|
182
|
+
},
|
|
183
|
+
HumanReviewGate: {
|
|
184
|
+
en: { aria: "Human review gate", risk: "review required", approve: "Approve", reject: "Reject", reviewer: "Reviewer" },
|
|
185
|
+
vi: { aria: "Cổng kiểm duyệt của con người", risk: "cần xem xét", approve: "Phê duyệt", reject: "Từ chối", reviewer: "Người duyệt" },
|
|
186
|
+
},
|
|
187
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type * as React from "react";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* AI-native disclosure pill (info-blue). Expands to explain what AI did and to
|
|
6
|
+
* list sources — an explainability path, never decoration. Ships localized copy
|
|
7
|
+
* (EN + VN) in production.
|
|
8
|
+
*/
|
|
9
|
+
export interface AIDisclosureBadgeProps {
|
|
10
|
+
label?: string;
|
|
11
|
+
details?: ReactNode;
|
|
12
|
+
sources?: string[];
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function AIDisclosureBadge(props: AIDisclosureBadgeProps): React.ReactElement;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import figma from '@figma/code-connect'
|
|
2
|
+
import { AIDisclosureBadge } from './AIDisclosureBadge.jsx'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Code Connect stub — AIDisclosureBadge
|
|
6
|
+
* Prop maps stay minimal until the matching Figma library component is published;
|
|
7
|
+
* then set nodeId in code-connect/node-map.json and re-run generate-code-connect.
|
|
8
|
+
*/
|
|
9
|
+
figma.connect(AIDisclosureBadge, 'https://www.figma.com/design/CS_FIGMA_FILE_KEY/CyberSkill?node-id=9999-2', {
|
|
10
|
+
example: () => <AIDisclosureBadge />,
|
|
11
|
+
imports: ["import { AIDisclosureBadge } from '@cyberskill/design'"],
|
|
12
|
+
})
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cx } from "../_utils/cx.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* CyberSkill AIDisclosureBadge — a pill that discloses AI involvement and, when
|
|
6
|
+
* expanded, explains what was generated and lists sources. Never decorative:
|
|
7
|
+
* this is an explainability affordance (info-blue), not a style flourish.
|
|
8
|
+
*/
|
|
9
|
+
export function AIDisclosureBadge({
|
|
10
|
+
label = "AI assisted",
|
|
11
|
+
details = "This content was generated or transformed with AI assistance.",
|
|
12
|
+
sources = [],
|
|
13
|
+
className,
|
|
14
|
+
}) {
|
|
15
|
+
const [open, setOpen] = React.useState(false);
|
|
16
|
+
const panelId = React.useId();
|
|
17
|
+
const sourceList = (sources || []).filter(Boolean);
|
|
18
|
+
return (
|
|
19
|
+
<span className={cx("cs-ai-disclosure", className)}>
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
className="cs-ai-disclosure__badge"
|
|
23
|
+
aria-expanded={open}
|
|
24
|
+
aria-controls={panelId}
|
|
25
|
+
onClick={() => setOpen((v) => !v)}
|
|
26
|
+
>
|
|
27
|
+
{label}
|
|
28
|
+
</button>
|
|
29
|
+
{open ? (
|
|
30
|
+
<span id={panelId} role="status" className="cs-ai-disclosure__panel">
|
|
31
|
+
<span className="cs-ai-disclosure__details">{details}</span>
|
|
32
|
+
{sourceList.length ? (
|
|
33
|
+
<span className="cs-ai-disclosure__sources">Sources: {sourceList.join(", ")}</span>
|
|
34
|
+
) : null}
|
|
35
|
+
</span>
|
|
36
|
+
) : null}
|
|
37
|
+
</span>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
**AIDisclosureBadge** — an info-blue pill that discloses AI involvement and expands to explain what was generated and cite sources. It is an accessibility/explainability affordance, not decoration; ship EN + VN copy.
|
|
2
|
+
|
|
3
|
+
```jsx
|
|
4
|
+
<AIDisclosureBadge
|
|
5
|
+
label="AI assisted"
|
|
6
|
+
details="Draft summary generated by Lumi, reviewed by the team."
|
|
7
|
+
sources={["release-notes.md", "task backlog"]}
|
|
8
|
+
/>
|
|
9
|
+
```
|