@once-ui-system/core 1.8.5 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/ai/catalog.json +166 -78
- package/ai/components/Accordion.json +1 -1
- package/ai/components/BarChart.json +34 -3
- package/ai/components/Book.json +128 -0
- package/ai/components/Button.json +1 -1
- package/ai/components/Card.json +1 -0
- package/ai/components/Carousel.json +1 -1
- package/ai/components/ChartHeader.json +2 -1
- package/ai/components/ChartStatus.json +2 -1
- package/ai/components/Checkbox.json +2 -2
- package/ai/components/CodeBlock.json +23 -2
- package/ai/components/ColorInput.json +1 -1
- package/ai/components/DataTooltip.json +3 -2
- package/ai/components/DatePicker.json +2 -2
- package/ai/components/Dialog.json +1 -1
- package/ai/components/DropdownWrapper.json +6 -4
- package/ai/components/Effect.json +133 -0
- package/ai/components/Fade.json +1 -1
- package/ai/components/Feedback.json +1 -1
- package/ai/components/IconButton.json +1 -1
- package/ai/components/InfoTip.json +125 -0
- package/ai/components/Input.json +5 -4
- package/ai/components/Legend.json +2 -1
- package/ai/components/LineBarChart.json +34 -3
- package/ai/components/LineChart.json +39 -3
- package/ai/components/LinearGauge.json +3 -2
- package/ai/components/LinearGradient.json +2 -1
- package/ai/components/Logo.json +2 -2
- package/ai/components/Media.json +1 -1
- package/ai/components/MediaUpload.json +21 -2
- package/ai/components/Modal.json +1 -1
- package/ai/components/NavGroup.json +130 -0
- package/ai/components/NavIcon.json +1 -1
- package/ai/components/NavItem.json +14 -0
- package/ai/components/Option.json +2 -2
- package/ai/components/Particle.json +1 -1
- package/ai/components/PieChart.json +32 -3
- package/ai/components/ProgressBar.json +1 -1
- package/ai/components/Pulse.json +1 -1
- package/ai/components/RadialGauge.json +4 -3
- package/ai/components/RadialGradient.json +2 -1
- package/ai/components/RadioButton.json +1 -1
- package/ai/components/RevealFx.json +1 -1
- package/ai/components/Scrubber.json +136 -0
- package/ai/components/SegmentedControl.json +3 -3
- package/ai/components/Setting.json +128 -0
- package/ai/components/SettingAxes.json +127 -0
- package/ai/components/SettingGroup.json +129 -0
- package/ai/components/ShineFx.json +1 -1
- package/ai/components/Skeleton.json +2 -3
- package/ai/components/SplitView.json +2 -0
- package/ai/components/StylePanel.json +4 -2
- package/ai/components/Swatch.json +11 -0
- package/ai/components/Swiper.json +1 -1
- package/ai/components/Switch.json +1 -1
- package/ai/components/Tag.json +1 -1
- package/ai/components/Textarea.json +6 -5
- package/ai/components/ThemeSwitcher.json +3 -0
- package/ai/components/Toast.json +1 -1
- package/ai/components/ToggleButton.json +2 -1
- package/ai/eval-tasks.md +10 -1
- package/ai/examples/app-shell.tsx +111 -0
- package/ai/examples/auth.tsx +2 -3
- package/ai/examples/blocks/Dashboard1.tsx +25 -36
- package/ai/examples/blocks/Feed3.tsx +8 -8
- package/ai/examples/blocks/Footer1.tsx +5 -3
- package/ai/examples/blocks/Footer2.tsx +3 -3
- package/ai/examples/blocks/Footer3.tsx +1 -1
- package/ai/examples/blocks/Footer4.tsx +6 -5
- package/ai/examples/blocks/Header1.tsx +7 -6
- package/ai/examples/blocks/Header2.tsx +1 -1
- package/ai/examples/blocks/Header3.tsx +7 -7
- package/ai/examples/blocks/Header4.tsx +6 -7
- package/ai/examples/blocks/Productivity1.tsx +1 -1
- package/ai/examples/blocks/Roadmap1.tsx +3 -3
- package/ai/examples/blocks/Sidebar1.tsx +1 -1
- package/ai/examples/blocks/Sidebar2.tsx +1 -1
- package/ai/examples/blocks/Sidebar4.tsx +1 -1
- package/ai/examples/blocks/Streaming1.tsx +4 -4
- package/ai/examples/blocks/Table1.tsx +9 -9
- package/ai/examples/blocks/Waitlist1.tsx +5 -5
- package/ai/examples/blocks/content/resources.ts +3 -1
- package/ai/examples/dashboard.tsx +13 -14
- package/ai/examples/marketing-hero.tsx +4 -4
- package/ai/examples/pricing.tsx +7 -8
- package/ai/examples/settings.tsx +7 -7
- package/ai/gotchas.json +99 -25
- package/ai/layouts.md +154 -0
- package/ai/manifest.json +3 -2
- package/ai/recipes.md +50 -5
- package/ai/rules.compact.md +26 -5
- package/ai/rules.md +84 -14
- package/ai/spec.json +634 -176
- package/ai/tasks/settings.json +1 -1
- package/dist/AGENTS.md +1 -1
- package/dist/ai/catalog.json +166 -78
- package/dist/ai/components/Accordion.json +1 -1
- package/dist/ai/components/BarChart.json +34 -3
- package/dist/ai/components/Book.json +128 -0
- package/dist/ai/components/Button.json +1 -1
- package/dist/ai/components/Card.json +1 -0
- package/dist/ai/components/Carousel.json +1 -1
- package/dist/ai/components/ChartHeader.json +2 -1
- package/dist/ai/components/ChartStatus.json +2 -1
- package/dist/ai/components/Checkbox.json +2 -2
- package/dist/ai/components/CodeBlock.json +23 -2
- package/dist/ai/components/ColorInput.json +1 -1
- package/dist/ai/components/DataTooltip.json +3 -2
- package/dist/ai/components/DatePicker.json +2 -2
- package/dist/ai/components/Dialog.json +1 -1
- package/dist/ai/components/DropdownWrapper.json +6 -4
- package/dist/ai/components/Effect.json +133 -0
- package/dist/ai/components/Fade.json +1 -1
- package/dist/ai/components/Feedback.json +1 -1
- package/dist/ai/components/IconButton.json +1 -1
- package/dist/ai/components/InfoTip.json +125 -0
- package/dist/ai/components/Input.json +5 -4
- package/dist/ai/components/Legend.json +2 -1
- package/dist/ai/components/LineBarChart.json +34 -3
- package/dist/ai/components/LineChart.json +39 -3
- package/dist/ai/components/LinearGauge.json +3 -2
- package/dist/ai/components/LinearGradient.json +2 -1
- package/dist/ai/components/Logo.json +2 -2
- package/dist/ai/components/Media.json +1 -1
- package/dist/ai/components/MediaUpload.json +21 -2
- package/dist/ai/components/Modal.json +1 -1
- package/dist/ai/components/NavGroup.json +130 -0
- package/dist/ai/components/NavIcon.json +1 -1
- package/dist/ai/components/NavItem.json +14 -0
- package/dist/ai/components/Option.json +2 -2
- package/dist/ai/components/Particle.json +1 -1
- package/dist/ai/components/PieChart.json +32 -3
- package/dist/ai/components/ProgressBar.json +1 -1
- package/dist/ai/components/Pulse.json +1 -1
- package/dist/ai/components/RadialGauge.json +4 -3
- package/dist/ai/components/RadialGradient.json +2 -1
- package/dist/ai/components/RadioButton.json +1 -1
- package/dist/ai/components/RevealFx.json +1 -1
- package/dist/ai/components/Scrubber.json +136 -0
- package/dist/ai/components/SegmentedControl.json +3 -3
- package/dist/ai/components/Setting.json +128 -0
- package/dist/ai/components/SettingAxes.json +127 -0
- package/dist/ai/components/SettingGroup.json +129 -0
- package/dist/ai/components/ShineFx.json +1 -1
- package/dist/ai/components/Skeleton.json +2 -3
- package/dist/ai/components/SplitView.json +2 -0
- package/dist/ai/components/StylePanel.json +4 -2
- package/dist/ai/components/Swatch.json +11 -0
- package/dist/ai/components/Swiper.json +1 -1
- package/dist/ai/components/Switch.json +1 -1
- package/dist/ai/components/Tag.json +1 -1
- package/dist/ai/components/Textarea.json +6 -5
- package/dist/ai/components/ThemeSwitcher.json +3 -0
- package/dist/ai/components/Toast.json +1 -1
- package/dist/ai/components/ToggleButton.json +2 -1
- package/dist/ai/eval-tasks.md +10 -1
- package/dist/ai/gotchas.json +99 -25
- package/dist/ai/layouts.md +154 -0
- package/dist/ai/manifest.json +3 -2
- package/dist/ai/recipes.md +50 -5
- package/dist/ai/rules.compact.md +26 -5
- package/dist/ai/rules.md +84 -14
- package/dist/ai/spec.json +634 -176
- package/dist/ai/tasks/settings.json +1 -1
- package/dist/components/Accordion.d.ts +2 -1
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion.js.map +1 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Background.d.ts +6 -6
- package/dist/components/Background.d.ts.map +1 -1
- package/dist/components/Book.d.ts +28 -0
- package/dist/components/Book.d.ts.map +1 -0
- package/dist/components/Book.js +24 -0
- package/dist/components/Book.js.map +1 -0
- package/dist/components/Book.module.scss +45 -0
- package/dist/components/Button.d.ts +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +4 -4
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.d.ts +8 -0
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/Card.js +10 -2
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Card.module.scss +11 -1
- package/dist/components/Carousel.d.ts +7 -1
- package/dist/components/Carousel.d.ts.map +1 -1
- package/dist/components/Carousel.js +7 -7
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Carousel.module.scss +1 -8
- package/dist/components/Checkbox.d.ts +3 -3
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox.js +5 -5
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/ClientFlex.d.ts.map +1 -1
- package/dist/components/ClientFlex.js +5 -10
- package/dist/components/ClientFlex.js.map +1 -1
- package/dist/components/ClientGrid.d.ts.map +1 -1
- package/dist/components/ClientGrid.js +2 -7
- package/dist/components/ClientGrid.js.map +1 -1
- package/dist/components/ColorInput.d.ts +1 -1
- package/dist/components/ColorInput.d.ts.map +1 -1
- package/dist/components/ColorInput.js +7 -13
- package/dist/components/ColorInput.js.map +1 -1
- package/dist/components/CompareImage.d.ts.map +1 -1
- package/dist/components/CompareImage.js +2 -2
- package/dist/components/CompareImage.js.map +1 -1
- package/dist/components/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput.js +10 -1
- package/dist/components/DateInput.js.map +1 -1
- package/dist/components/DatePicker.d.ts +2 -2
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker.js +21 -14
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/DateRangeInput.js +3 -3
- package/dist/components/DateRangeInput.js.map +1 -1
- package/dist/components/Dialog.d.ts +1 -1
- package/dist/components/Dialog.d.ts.map +1 -1
- package/dist/components/Dialog.js +14 -14
- package/dist/components/Dialog.js.map +1 -1
- package/dist/components/DropdownWrapper.d.ts +8 -3
- package/dist/components/DropdownWrapper.d.ts.map +1 -1
- package/dist/components/DropdownWrapper.js +17 -6
- package/dist/components/DropdownWrapper.js.map +1 -1
- package/dist/components/Effect.d.ts +41 -0
- package/dist/components/Effect.d.ts.map +1 -0
- package/dist/components/Effect.js +30 -0
- package/dist/components/Effect.js.map +1 -0
- package/dist/components/ElementType.d.ts +2 -1
- package/dist/components/ElementType.d.ts.map +1 -1
- package/dist/components/ElementType.js +4 -2
- package/dist/components/ElementType.js.map +1 -1
- package/dist/components/EmojiPicker.d.ts.map +1 -1
- package/dist/components/EmojiPicker.js +1 -1
- package/dist/components/EmojiPicker.js.map +1 -1
- package/dist/components/Feedback.d.ts +1 -1
- package/dist/components/Feedback.d.ts.map +1 -1
- package/dist/components/Feedback.js +2 -2
- package/dist/components/Feedback.js.map +1 -1
- package/dist/components/Flex.d.ts.map +1 -1
- package/dist/components/Flex.js +46 -5
- package/dist/components/Flex.js.map +1 -1
- package/dist/components/Icon.d.ts.map +1 -1
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/IconButton.d.ts +1 -1
- package/dist/components/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton.js +4 -4
- package/dist/components/IconButton.js.map +1 -1
- package/dist/components/InfoTip.d.ts +17 -0
- package/dist/components/InfoTip.d.ts.map +1 -0
- package/dist/components/InfoTip.js +12 -0
- package/dist/components/InfoTip.js.map +1 -0
- package/dist/components/Input.d.ts +11 -5
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Input.js +32 -16
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Input.module.scss +313 -1
- package/dist/components/InteractiveDetails.d.ts.map +1 -1
- package/dist/components/InteractiveDetails.js +1 -1
- package/dist/components/InteractiveDetails.js.map +1 -1
- package/dist/components/Kbd.d.ts.map +1 -1
- package/dist/components/Kbd.js +4 -1
- package/dist/components/Kbd.js.map +1 -1
- package/dist/components/Logo.d.ts +16 -4
- package/dist/components/Logo.d.ts.map +1 -1
- package/dist/components/Logo.js +32 -14
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/Media.d.ts +9 -2
- package/dist/components/Media.d.ts.map +1 -1
- package/dist/components/Media.js +25 -16
- package/dist/components/Media.js.map +1 -1
- package/dist/components/MediaAudioPlayer.d.ts +29 -0
- package/dist/components/MediaAudioPlayer.d.ts.map +1 -0
- package/dist/components/MediaAudioPlayer.js +115 -0
- package/dist/components/MediaAudioPlayer.js.map +1 -0
- package/dist/components/MediaAudioPlayer.module.scss +38 -0
- package/dist/components/Modal.d.ts +1 -1
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Modal.js +10 -10
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/NavGroup.d.ts +33 -0
- package/dist/components/NavGroup.d.ts.map +1 -0
- package/dist/components/NavGroup.js +27 -0
- package/dist/components/NavGroup.js.map +1 -0
- package/dist/components/NavIcon.d.ts +1 -1
- package/dist/components/NavIcon.d.ts.map +1 -1
- package/dist/components/NavIcon.js +2 -2
- package/dist/components/NavIcon.js.map +1 -1
- package/dist/components/NavItem.d.ts +24 -0
- package/dist/components/NavItem.d.ts.map +1 -0
- package/dist/components/NavItem.js +18 -0
- package/dist/components/NavItem.js.map +1 -0
- package/dist/components/NumberInput.js +1 -1
- package/dist/components/NumberInput.js.map +1 -1
- package/dist/components/OgCard.d.ts.map +1 -1
- package/dist/components/OgCard.js +7 -4
- package/dist/components/OgCard.js.map +1 -1
- package/dist/components/Option.d.ts +3 -3
- package/dist/components/Option.d.ts.map +1 -1
- package/dist/components/Option.js +2 -2
- package/dist/components/Option.js.map +1 -1
- package/dist/components/Particle.d.ts +2 -2
- package/dist/components/Particle.d.ts.map +1 -1
- package/dist/components/PasswordInput.d.ts.map +1 -1
- package/dist/components/PasswordInput.js +2 -2
- package/dist/components/PasswordInput.js.map +1 -1
- package/dist/components/ProgressBar.d.ts +1 -1
- package/dist/components/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar.js +2 -2
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/Pulse.d.ts +1 -1
- package/dist/components/Pulse.d.ts.map +1 -1
- package/dist/components/Pulse.js +2 -2
- package/dist/components/Pulse.js.map +1 -1
- package/dist/components/RadioButton.d.ts +2 -2
- package/dist/components/RadioButton.d.ts.map +1 -1
- package/dist/components/RadioButton.js +1 -1
- package/dist/components/RadioButton.js.map +1 -1
- package/dist/components/RevealFx.d.ts +2 -1
- package/dist/components/RevealFx.d.ts.map +1 -1
- package/dist/components/RevealFx.js +8 -8
- package/dist/components/RevealFx.js.map +1 -1
- package/dist/components/ScrollContainer.d.ts.map +1 -1
- package/dist/components/ScrollContainer.js +1 -1
- package/dist/components/ScrollContainer.js.map +1 -1
- package/dist/components/Scrubber.d.ts +70 -0
- package/dist/components/Scrubber.d.ts.map +1 -0
- package/dist/components/Scrubber.js +161 -0
- package/dist/components/Scrubber.js.map +1 -0
- package/dist/components/SegmentedControl.d.ts +4 -4
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +11 -11
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Select.js +48 -15
- package/dist/components/Select.js.map +1 -1
- package/dist/components/ServerFlex.d.ts +0 -1
- package/dist/components/ServerFlex.d.ts.map +1 -1
- package/dist/components/ServerFlex.js +99 -52
- package/dist/components/ServerFlex.js.map +1 -1
- package/dist/components/ServerGrid.d.ts +0 -1
- package/dist/components/ServerGrid.d.ts.map +1 -1
- package/dist/components/ServerGrid.js +11 -9
- package/dist/components/ServerGrid.js.map +1 -1
- package/dist/components/Setting.d.ts +50 -0
- package/dist/components/Setting.d.ts.map +1 -0
- package/dist/components/Setting.js +43 -0
- package/dist/components/Setting.js.map +1 -0
- package/dist/components/ShineFx.d.ts +1 -0
- package/dist/components/ShineFx.d.ts.map +1 -1
- package/dist/components/ShineFx.js +2 -2
- package/dist/components/ShineFx.js.map +1 -1
- package/dist/components/Skeleton.d.ts +16 -3
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton.js +2 -2
- package/dist/components/Skeleton.js.map +1 -1
- package/dist/components/Skeleton.module.scss +14 -51
- package/dist/components/SplitView.d.ts +23 -3
- package/dist/components/SplitView.d.ts.map +1 -1
- package/dist/components/SplitView.js +90 -58
- package/dist/components/SplitView.js.map +1 -1
- package/dist/components/StyleOverlay.d.ts.map +1 -1
- package/dist/components/StyleOverlay.js +1 -1
- package/dist/components/StyleOverlay.js.map +1 -1
- package/dist/components/StylePanel.d.ts +47 -6
- package/dist/components/StylePanel.d.ts.map +1 -1
- package/dist/components/StylePanel.js +16 -189
- package/dist/components/StylePanel.js.map +1 -1
- package/dist/components/StylePanel.module.scss +6 -1
- package/dist/components/StylePanelSections.d.ts +117 -0
- package/dist/components/StylePanelSections.d.ts.map +1 -0
- package/dist/components/StylePanelSections.js +175 -0
- package/dist/components/StylePanelSections.js.map +1 -0
- package/dist/components/Swiper.d.ts +7 -1
- package/dist/components/Swiper.d.ts.map +1 -1
- package/dist/components/Swiper.js +7 -7
- package/dist/components/Swiper.js.map +1 -1
- package/dist/components/Switch.d.ts +2 -2
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Switch.js +4 -4
- package/dist/components/Switch.js.map +1 -1
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Table.js +4 -4
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tag.d.ts +1 -1
- package/dist/components/Tag.d.ts.map +1 -1
- package/dist/components/Tag.js +2 -2
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/Textarea.d.ts +15 -5
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea.js +31 -17
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeSwitcher.d.ts +14 -1
- package/dist/components/ThemeSwitcher.d.ts.map +1 -1
- package/dist/components/ThemeSwitcher.js +19 -9
- package/dist/components/ThemeSwitcher.js.map +1 -1
- package/dist/components/ThemeSwitcher.module.scss +54 -0
- package/dist/components/Toast.d.ts +1 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toast.js +2 -2
- package/dist/components/Toast.js.map +1 -1
- package/dist/components/ToggleButton.d.ts +9 -2
- package/dist/components/ToggleButton.d.ts.map +1 -1
- package/dist/components/ToggleButton.js +5 -5
- package/dist/components/ToggleButton.js.map +1 -1
- package/dist/components/User.js +1 -1
- package/dist/components/User.js.map +1 -1
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -0
- package/dist/components/index.js.map +1 -1
- package/dist/contexts/AdapterProvider.d.ts +50 -0
- package/dist/contexts/AdapterProvider.d.ts.map +1 -0
- package/dist/contexts/AdapterProvider.js +91 -0
- package/dist/contexts/AdapterProvider.js.map +1 -0
- package/dist/contexts/IconProvider.d.ts +2 -2
- package/dist/contexts/IconProvider.d.ts.map +1 -1
- package/dist/contexts/IconProvider.js +2 -2
- package/dist/contexts/IconProvider.js.map +1 -1
- package/dist/contexts/LayoutProvider.d.ts +0 -2
- package/dist/contexts/LayoutProvider.d.ts.map +1 -1
- package/dist/contexts/LayoutProvider.js +15 -10
- package/dist/contexts/LayoutProvider.js.map +1 -1
- package/dist/contexts/ThemeProvider.d.ts +29 -1
- package/dist/contexts/ThemeProvider.d.ts.map +1 -1
- package/dist/contexts/ThemeProvider.js +42 -15
- package/dist/contexts/ThemeProvider.js.map +1 -1
- package/dist/contexts/index.d.ts +3 -2
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/contexts/index.js +3 -2
- package/dist/contexts/index.js.map +1 -1
- package/dist/css/styles.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/data/emoji-data.json +8 -10
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/icons/ATTRIBUTION.md +19 -0
- package/dist/icons/data.d.ts +1919 -0
- package/dist/icons/data.d.ts.map +1 -0
- package/dist/icons/data.js +102 -0
- package/dist/icons/data.js.map +1 -0
- package/dist/icons/renderIcon.d.ts +26 -0
- package/dist/icons/renderIcon.d.ts.map +1 -0
- package/dist/icons/renderIcon.js +22 -0
- package/dist/icons/renderIcon.js.map +1 -0
- package/dist/icons.d.ts +35 -4
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +13 -60
- package/dist/icons.js.map +1 -1
- package/dist/modules/code/CodeBlock.impl.d.ts +2 -1
- package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
- package/dist/modules/code/CodeBlock.impl.js +7 -2
- package/dist/modules/code/CodeBlock.impl.js.map +1 -1
- package/dist/modules/data/ChartHeader.d.ts.map +1 -1
- package/dist/modules/data/ChartHeader.js +1 -1
- package/dist/modules/data/ChartHeader.js.map +1 -1
- package/dist/modules/data/DataTooltip.d.ts +1 -1
- package/dist/modules/data/DataTooltip.d.ts.map +1 -1
- package/dist/modules/data/DataTooltip.js +2 -2
- package/dist/modules/data/DataTooltip.js.map +1 -1
- package/dist/modules/data/LinearGauge.d.ts +3 -2
- package/dist/modules/data/LinearGauge.d.ts.map +1 -1
- package/dist/modules/data/LinearGauge.js +1 -1
- package/dist/modules/data/LinearGauge.js.map +1 -1
- package/dist/modules/data/PieChart.impl.d.ts +1 -1
- package/dist/modules/data/PieChart.impl.d.ts.map +1 -1
- package/dist/modules/data/PieChart.impl.js +4 -1
- package/dist/modules/data/PieChart.impl.js.map +1 -1
- package/dist/modules/data/RadialGauge.d.ts +3 -2
- package/dist/modules/data/RadialGauge.d.ts.map +1 -1
- package/dist/modules/data/RadialGauge.js +1 -1
- package/dist/modules/data/RadialGauge.js.map +1 -1
- package/dist/modules/data/interfaces.d.ts +12 -3
- package/dist/modules/data/interfaces.d.ts.map +1 -1
- package/dist/modules/index.d.ts +1 -4
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +9 -3
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/media/MediaUpload.impl.d.ts +1 -1
- package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -1
- package/dist/modules/media/MediaUpload.impl.js +1 -1
- package/dist/modules/media/MediaUpload.impl.js.map +1 -1
- package/dist/modules/navigation/Kbar.d.ts +5 -4
- package/dist/modules/navigation/Kbar.d.ts.map +1 -1
- package/dist/modules/navigation/Kbar.js +32 -35
- package/dist/modules/navigation/Kbar.js.map +1 -1
- package/dist/modules/navigation/MegaMenu.d.ts +5 -3
- package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
- package/dist/modules/navigation/MegaMenu.js +24 -12
- package/dist/modules/navigation/MegaMenu.js.map +1 -1
- package/dist/modules/navigation/MobileMegaMenu.d.ts +3 -2
- package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -1
- package/dist/modules/navigation/MobileMegaMenu.js +1 -1
- package/dist/modules/navigation/MobileMegaMenu.js.map +1 -1
- package/dist/modules/seo/Meta.d.ts +40 -2
- package/dist/modules/seo/Meta.d.ts.map +1 -1
- package/dist/modules/seo/Meta.js.map +1 -1
- package/dist/modules/seo/Schema.d.ts.map +1 -1
- package/dist/modules/seo/Schema.js +1 -2
- package/dist/modules/seo/Schema.js.map +1 -1
- package/dist/next/index.d.ts +35 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +56 -0
- package/dist/next/index.js.map +1 -0
- package/dist/package.json +52 -7
- package/dist/scripts/init-agent.js +156 -0
- package/dist/scripts/validate-ai-code.js +431 -0
- package/dist/server/og-utils.d.ts +9 -3
- package/dist/server/og-utils.d.ts.map +1 -1
- package/dist/server/og-utils.js +15 -9
- package/dist/server/og-utils.js.map +1 -1
- package/dist/styles/breakpoints.scss +16 -5
- package/dist/test/setup.js +21 -0
- package/dist/test/setup.js.map +1 -1
- package/dist/types.d.ts +13 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/colorScheme.d.ts +35 -0
- package/dist/utils/colorScheme.d.ts.map +1 -0
- package/dist/utils/colorScheme.js +140 -0
- package/dist/utils/colorScheme.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/navMatch.d.ts +21 -0
- package/dist/utils/navMatch.d.ts.map +1 -0
- package/dist/utils/navMatch.js +26 -0
- package/dist/utils/navMatch.js.map +1 -0
- package/package.json +66 -11
- package/scripts/validate-ai-code.js +309 -27
- package/dist/css/styles.css.map +0 -1
- package/dist/css/tokens.css.map +0 -1
- package/dist/hooks/useResponsiveClasses.d.ts +0 -9
- package/dist/hooks/useResponsiveClasses.d.ts.map +0 -1
- package/dist/hooks/useResponsiveClasses.js +0 -293
- package/dist/hooks/useResponsiveClasses.js.map +0 -1
- package/dist/styles/background.scss +0 -423
- package/dist/styles/border.scss +0 -546
- package/dist/styles/color.scss +0 -183
- package/dist/styles/display.scss +0 -391
- package/dist/styles/flex.scss +0 -518
- package/dist/styles/global.scss +0 -36
- package/dist/styles/grid.scss +0 -293
- package/dist/styles/index.scss +0 -14
- package/dist/styles/position.scss +0 -1549
- package/dist/styles/shadow.scss +0 -19
- package/dist/styles/size.scss +0 -53
- package/dist/styles/spacing.scss +0 -1505
- package/dist/styles/typography.scss +0 -223
- package/dist/styles/utilities.scss +0 -23
- package/dist/tokens/border.scss +0 -95
- package/dist/tokens/data.scss +0 -107
- package/dist/tokens/function.scss +0 -742
- package/dist/tokens/index.scss +0 -8
- package/dist/tokens/layout.scss +0 -275
- package/dist/tokens/scheme.scss +0 -352
- package/dist/tokens/shadow.scss +0 -7
- package/dist/tokens/theme.scss +0 -657
- package/dist/tokens/typography.scss +0 -118
- package/next-env.d.ts +0 -5
- package/scripts/copy-files.js +0 -103
- package/scripts/generate-ai-spec.js +0 -464
- package/scripts/generate-emoji-data.js +0 -128
- package/scss.d.ts +0 -4
- package/tsconfig.vitest.json +0 -20
- package/vitest.config.ts +0 -19
|
@@ -68,18 +68,18 @@ export const Waitlist1 = () => {
|
|
|
68
68
|
</Badge>
|
|
69
69
|
</RevealFx>
|
|
70
70
|
<Column horizontal="center" align="center" gap="24">
|
|
71
|
-
<RevealFx horizontal="center" delay={
|
|
71
|
+
<RevealFx horizontal="center" delay={400}>
|
|
72
72
|
<Heading variant="display-strong-xl" onBackground="neutral-strong">
|
|
73
73
|
The all-in-one course platform
|
|
74
74
|
</Heading>
|
|
75
75
|
</RevealFx>
|
|
76
|
-
<RevealFx horizontal="center" delay={
|
|
76
|
+
<RevealFx horizontal="center" delay={600}>
|
|
77
77
|
<Text onBackground="neutral-medium" variant="heading-default-xl">
|
|
78
78
|
Launch and sell your courses with ease. We handle enrollment, payments and analytics. You focus on creating.
|
|
79
79
|
</Text>
|
|
80
80
|
</RevealFx>
|
|
81
81
|
</Column>
|
|
82
|
-
<RevealFx horizontal="center" delay={
|
|
82
|
+
<RevealFx horizontal="center" delay={800}>
|
|
83
83
|
<AvatarGroup
|
|
84
84
|
reverse
|
|
85
85
|
size="m"
|
|
@@ -110,14 +110,14 @@ export const Waitlist1 = () => {
|
|
|
110
110
|
</Row>
|
|
111
111
|
</RevealFx>
|
|
112
112
|
) : (
|
|
113
|
-
<RevealFx key="subscribed" direction="column" horizontal="center" delay={
|
|
113
|
+
<RevealFx key="subscribed" direction="column" horizontal="center" delay={1000} gap="16" data-border="rounded">
|
|
114
114
|
<Input
|
|
115
115
|
id="email"
|
|
116
116
|
placeholder="Enter email"
|
|
117
117
|
value={email}
|
|
118
118
|
validate={(value) => validateEmail(value as string)}
|
|
119
119
|
onChange={(e) => setEmail(e.target.value)}
|
|
120
|
-
|
|
120
|
+
suffix={
|
|
121
121
|
<IconButton size="l" style={{marginRight: "-0.5rem"}} icon="send" onClick={() => subscribe()}/>
|
|
122
122
|
}
|
|
123
123
|
/>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { IconName } from "@once-ui-system/core";
|
|
2
|
+
|
|
3
|
+
export const social: { icon: IconName; label: string; href: string }[] = [
|
|
2
4
|
{ icon: "link", label: "Discord", href: "https://discord.com/invite/5EyAQ4eNdS" },
|
|
3
5
|
{ icon: "link", label: "GitHub", href: "https://github.com/once-ui-system" },
|
|
4
6
|
{ icon: "document", label: "Email", href: "mailto:demo@email.com" },
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { useEffect, useRef, useState } from "react";
|
|
8
8
|
import {
|
|
9
|
+
Button,
|
|
9
10
|
Column,
|
|
10
11
|
CountFx,
|
|
11
12
|
Grid,
|
|
@@ -37,9 +38,9 @@ const activity = {
|
|
|
37
38
|
{ content: "Time", key: "time" },
|
|
38
39
|
],
|
|
39
40
|
rows: [
|
|
40
|
-
["Plan upgraded to Pro", "jane@acme.co", <Tag size="s"
|
|
41
|
-
["New signup", "alex@studio.io", <Tag size="s"
|
|
42
|
-
["Payment failed", "ops@build.dev", <Tag size="s"
|
|
41
|
+
["Plan upgraded to Pro", "jane@acme.co", <Tag size="s" scheme="success">Completed</Tag>, "2m ago"],
|
|
42
|
+
["New signup", "alex@studio.io", <Tag size="s" scheme="brand">New</Tag>, "14m ago"],
|
|
43
|
+
["Payment failed", "ops@build.dev", <Tag size="s" scheme="danger">Action</Tag>, "1h ago"],
|
|
43
44
|
],
|
|
44
45
|
};
|
|
45
46
|
|
|
@@ -54,7 +55,7 @@ export function DashboardExample() {
|
|
|
54
55
|
|
|
55
56
|
return (
|
|
56
57
|
<Column as="main" fillWidth horizontal="center" paddingY="48" paddingX="24" gap="40">
|
|
57
|
-
<Column
|
|
58
|
+
<Column maxWidth="l" gap="40">
|
|
58
59
|
<Row fillWidth horizontal="between" vertical="end" gap="24" s={{ direction: "column", horizontal: "start" }}>
|
|
59
60
|
<Column gap="8">
|
|
60
61
|
<Text variant="label-default-s" onBackground="brand-medium">
|
|
@@ -65,8 +66,8 @@ export function DashboardExample() {
|
|
|
65
66
|
</Heading>
|
|
66
67
|
</Column>
|
|
67
68
|
<SegmentedControl
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
value={range}
|
|
70
|
+
onChange={setRange}
|
|
70
71
|
buttons={[
|
|
71
72
|
{ value: "7d", label: "7 days" },
|
|
72
73
|
{ value: "30d", label: "30 days" },
|
|
@@ -77,8 +78,8 @@ export function DashboardExample() {
|
|
|
77
78
|
|
|
78
79
|
<Grid ref={statsRef} columns="4" gap="16" m={{ columns: 2 }} s={{ columns: 1 }}>
|
|
79
80
|
{stats.map((stat, index) => (
|
|
80
|
-
<RevealFx key={stat.label} fill
|
|
81
|
-
<Column background="surface" border
|
|
81
|
+
<RevealFx key={stat.label} fill revealed={seen} translateY="8" delay={index * 100}>
|
|
82
|
+
<Column background="surface" border radius="l" padding="24" gap="16">
|
|
82
83
|
<Row fillWidth horizontal="between" vertical="center">
|
|
83
84
|
<Text variant="label-default-s" onBackground="neutral-weak">
|
|
84
85
|
{stat.label}
|
|
@@ -108,7 +109,7 @@ export function DashboardExample() {
|
|
|
108
109
|
</Grid>
|
|
109
110
|
|
|
110
111
|
<Grid columns="2" gap="24" s={{ columns: 1 }}>
|
|
111
|
-
<Column background="surface" border
|
|
112
|
+
<Column background="surface" border radius="l" padding="24" gap="16" minHeight={32}>
|
|
112
113
|
<Heading as="h2" variant="heading-strong-s">
|
|
113
114
|
Revenue trend
|
|
114
115
|
</Heading>
|
|
@@ -119,7 +120,7 @@ export function DashboardExample() {
|
|
|
119
120
|
</Text>
|
|
120
121
|
</Column>
|
|
121
122
|
</Column>
|
|
122
|
-
<Column background="surface" border
|
|
123
|
+
<Column background="surface" border radius="l" padding="24" gap="16" minHeight={32}>
|
|
123
124
|
<Heading as="h2" variant="heading-strong-s">
|
|
124
125
|
Signups by channel
|
|
125
126
|
</Heading>
|
|
@@ -132,14 +133,12 @@ export function DashboardExample() {
|
|
|
132
133
|
</Column>
|
|
133
134
|
</Grid>
|
|
134
135
|
|
|
135
|
-
<Column background="surface" border
|
|
136
|
+
<Column background="surface" border radius="l" padding="24" gap="24">
|
|
136
137
|
<Row fillWidth horizontal="between" vertical="center">
|
|
137
138
|
<Heading as="h2" variant="heading-strong-s">
|
|
138
139
|
Recent activity
|
|
139
140
|
</Heading>
|
|
140
|
-
<
|
|
141
|
-
View all
|
|
142
|
-
</Text>
|
|
141
|
+
<Button variant="tertiary" size="s" label="View all" />
|
|
143
142
|
</Row>
|
|
144
143
|
<Line />
|
|
145
144
|
<Table fillWidth data={activity} />
|
|
@@ -84,13 +84,13 @@ export function MarketingHeroExample() {
|
|
|
84
84
|
</Heading>
|
|
85
85
|
</Column>
|
|
86
86
|
</RevealFx>
|
|
87
|
-
<RevealFx delay={
|
|
87
|
+
<RevealFx delay={100} translateY="16">
|
|
88
88
|
<Text variant="body-default-l" onBackground="neutral-weak" align="center">
|
|
89
89
|
Build semantic layouts with Row, Column and Grid. Add 100+ pre-styled components.
|
|
90
90
|
Manage themes in a single file.
|
|
91
91
|
</Text>
|
|
92
92
|
</RevealFx>
|
|
93
|
-
<RevealFx delay={
|
|
93
|
+
<RevealFx delay={200} translateY="16">
|
|
94
94
|
<Row gap="12" s={{ direction: "column" }}>
|
|
95
95
|
<Button arrowIcon>View docs</Button>
|
|
96
96
|
<Button variant="secondary" suffixIcon="arrowUpRight">
|
|
@@ -103,7 +103,7 @@ export function MarketingHeroExample() {
|
|
|
103
103
|
|
|
104
104
|
{/* Feature grid — left-aligned section header, not repeated centered blocks */}
|
|
105
105
|
<Column fillWidth horizontal="center">
|
|
106
|
-
<Column
|
|
106
|
+
<Column maxWidth="l" gap="40">
|
|
107
107
|
<Column gap="12" maxWidth={32}>
|
|
108
108
|
<Text variant="label-default-s" onBackground="brand-medium">
|
|
109
109
|
Components
|
|
@@ -117,7 +117,7 @@ export function MarketingHeroExample() {
|
|
|
117
117
|
<Column
|
|
118
118
|
key={feature.title}
|
|
119
119
|
background="surface"
|
|
120
|
-
border
|
|
120
|
+
border
|
|
121
121
|
radius="l"
|
|
122
122
|
padding="24"
|
|
123
123
|
gap="16"
|
package/ai/examples/pricing.tsx
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { useEffect, useRef, useState } from "react";
|
|
8
8
|
import {
|
|
9
|
-
AccordionGroup,
|
|
10
9
|
Background,
|
|
11
10
|
BlobFx,
|
|
12
11
|
Button,
|
|
@@ -96,14 +95,14 @@ export function PricingExample() {
|
|
|
96
95
|
</Column>
|
|
97
96
|
|
|
98
97
|
<Column fillWidth horizontal="center">
|
|
99
|
-
<Column
|
|
98
|
+
<Column maxWidth="l" gap="40">
|
|
100
99
|
<Row fillWidth horizontal="between" vertical="end" gap="24" s={{ direction: "column", horizontal: "start" }}>
|
|
101
100
|
<Heading as="h2" variant="display-strong-xs">
|
|
102
101
|
Three plans, one decision
|
|
103
102
|
</Heading>
|
|
104
103
|
<SegmentedControl
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
value={billing}
|
|
105
|
+
onChange={(value) => setBilling(value as Billing)}
|
|
107
106
|
buttons={[
|
|
108
107
|
{ value: "monthly", label: "Monthly" },
|
|
109
108
|
{ value: "yearly", label: "Yearly −20%" },
|
|
@@ -113,7 +112,7 @@ export function PricingExample() {
|
|
|
113
112
|
|
|
114
113
|
<Grid ref={tiersRef} columns="3" gap="24" s={{ columns: 1 }}>
|
|
115
114
|
{tiers.map((tier, index) => (
|
|
116
|
-
<RevealFx key={tier.name} fill
|
|
115
|
+
<RevealFx key={tier.name} fill revealed={tiersSeen} translateY="8" delay={index * 100}>
|
|
117
116
|
<Column
|
|
118
117
|
fill
|
|
119
118
|
background="surface"
|
|
@@ -146,7 +145,7 @@ export function PricingExample() {
|
|
|
146
145
|
<Heading as="h3" variant="heading-strong-m">
|
|
147
146
|
{tier.name}
|
|
148
147
|
</Heading>
|
|
149
|
-
{tier.highlighted && <Tag
|
|
148
|
+
{tier.highlighted && <Tag scheme="brand" size="s" label="Most popular" />}
|
|
150
149
|
</Row>
|
|
151
150
|
<Text variant="body-default-s" onBackground="neutral-weak">
|
|
152
151
|
{tier.description}
|
|
@@ -182,7 +181,7 @@ export function PricingExample() {
|
|
|
182
181
|
</Column>
|
|
183
182
|
|
|
184
183
|
<Column fillWidth horizontal="center" background="neutral-alpha-weak" paddingY="80" paddingX="24">
|
|
185
|
-
<Column
|
|
184
|
+
<Column maxWidth="l" gap="40">
|
|
186
185
|
<Heading as="h2" variant="display-strong-xs">
|
|
187
186
|
Every feature, side by side
|
|
188
187
|
</Heading>
|
|
@@ -204,7 +203,7 @@ export function PricingExample() {
|
|
|
204
203
|
</Column>
|
|
205
204
|
|
|
206
205
|
<Column fillWidth horizontal="center">
|
|
207
|
-
<Column
|
|
206
|
+
<Column maxWidth="l" radius="xl" border overflow="hidden" padding="64" center>
|
|
208
207
|
<BlobFx position="absolute" top="0" left="0" fill opacity={60} seed={2} />
|
|
209
208
|
<Column zIndex={1} center gap="24" maxWidth={40}>
|
|
210
209
|
<Heading as="h2" variant="display-strong-s" align="center">
|
package/ai/examples/settings.tsx
CHANGED
|
@@ -29,7 +29,7 @@ const sections = [
|
|
|
29
29
|
export function SettingsExample() {
|
|
30
30
|
return (
|
|
31
31
|
<Column as="main" fillWidth horizontal="center" paddingY="48" paddingX="24">
|
|
32
|
-
<Column
|
|
32
|
+
<Column maxWidth="l" gap="40">
|
|
33
33
|
<Column gap="12">
|
|
34
34
|
<Text variant="label-default-s" onBackground="brand-medium">
|
|
35
35
|
Settings
|
|
@@ -46,7 +46,7 @@ export function SettingsExample() {
|
|
|
46
46
|
gap="4"
|
|
47
47
|
padding="16"
|
|
48
48
|
background="surface"
|
|
49
|
-
border
|
|
49
|
+
border
|
|
50
50
|
radius="l"
|
|
51
51
|
s={{ hide: true }}
|
|
52
52
|
>
|
|
@@ -66,7 +66,7 @@ export function SettingsExample() {
|
|
|
66
66
|
}
|
|
67
67
|
rightPanel={
|
|
68
68
|
<Column flex={1} gap="24">
|
|
69
|
-
<Column background="surface" border
|
|
69
|
+
<Column background="surface" border radius="l" padding="24" gap="24">
|
|
70
70
|
<Heading as="h2" variant="heading-strong-m">
|
|
71
71
|
Profile
|
|
72
72
|
</Heading>
|
|
@@ -97,7 +97,7 @@ export function SettingsExample() {
|
|
|
97
97
|
</Row>
|
|
98
98
|
</Column>
|
|
99
99
|
|
|
100
|
-
<Column background="surface" border
|
|
100
|
+
<Column background="surface" border radius="l" padding="24" gap="24">
|
|
101
101
|
<Heading as="h2" variant="heading-strong-m">
|
|
102
102
|
Notifications
|
|
103
103
|
</Heading>
|
|
@@ -108,7 +108,7 @@ export function SettingsExample() {
|
|
|
108
108
|
Release notes and changelog
|
|
109
109
|
</Text>
|
|
110
110
|
</Column>
|
|
111
|
-
<Switch
|
|
111
|
+
<Switch checked onToggle={() => {}} />
|
|
112
112
|
</Row>
|
|
113
113
|
<Line />
|
|
114
114
|
<Row fillWidth horizontal="between" vertical="center">
|
|
@@ -118,9 +118,9 @@ export function SettingsExample() {
|
|
|
118
118
|
Tips, templates, and community highlights
|
|
119
119
|
</Text>
|
|
120
120
|
</Column>
|
|
121
|
-
<Switch
|
|
121
|
+
<Switch checked={false} onToggle={() => {}} />
|
|
122
122
|
</Row>
|
|
123
|
-
<Checkbox label="Weekly digest"
|
|
123
|
+
<Checkbox label="Weekly digest" checked />
|
|
124
124
|
</Column>
|
|
125
125
|
|
|
126
126
|
<Column background="surface" border="danger-alpha-medium" radius="l" padding="24" gap="16">
|
package/ai/gotchas.json
CHANGED
|
@@ -1,86 +1,160 @@
|
|
|
1
1
|
{
|
|
2
2
|
"Background.gradient.width": {
|
|
3
3
|
"rule": "Quarter-percent units: 400 = 100% of container. Soft glows use width 100–200, not 500.",
|
|
4
|
-
"components": [
|
|
4
|
+
"components": [
|
|
5
|
+
"Background"
|
|
6
|
+
]
|
|
5
7
|
},
|
|
6
8
|
"Background.gradient.x": {
|
|
7
9
|
"rule": "x/y are percent positions of the container (50/50 = center).",
|
|
8
|
-
"components": [
|
|
10
|
+
"components": [
|
|
11
|
+
"Background"
|
|
12
|
+
]
|
|
9
13
|
},
|
|
10
14
|
"Background.absolute": {
|
|
11
15
|
"rule": "Every absolute decorative layer needs top=\"0\" left=\"0\" or it offsets by parent padding.",
|
|
12
|
-
"components": [
|
|
16
|
+
"components": [
|
|
17
|
+
"Background",
|
|
18
|
+
"MatrixFx",
|
|
19
|
+
"BlobFx"
|
|
20
|
+
]
|
|
13
21
|
},
|
|
14
22
|
"Card.interactive": {
|
|
15
|
-
"rule": "Card is for interactive surfaces only (href or onClick). Static panels use Column + background=\"surface\" border
|
|
16
|
-
"components": [
|
|
23
|
+
"rule": "Card is for interactive surfaces only (href or onClick). Static panels use Column + background=\"surface\" border radius=\"l\".",
|
|
24
|
+
"components": [
|
|
25
|
+
"Card"
|
|
26
|
+
]
|
|
17
27
|
},
|
|
18
28
|
"Fade.edge": {
|
|
19
29
|
"rule": "Fade is an edge overlay strip on scroll containers, not a content wrapper.",
|
|
20
|
-
"components": [
|
|
30
|
+
"components": [
|
|
31
|
+
"Fade"
|
|
32
|
+
]
|
|
21
33
|
},
|
|
22
34
|
"RevealFx.delay": {
|
|
23
|
-
"rule": "delay is in
|
|
24
|
-
"components": [
|
|
35
|
+
"rule": "delay is in milliseconds — stagger with delay={index * 100}, never index * 0.1 (that was 1.8.x; 2.0 reads 0.1 as a tenth of a millisecond, i.e. no stagger).",
|
|
36
|
+
"components": [
|
|
37
|
+
"RevealFx",
|
|
38
|
+
"ShineFx"
|
|
39
|
+
]
|
|
25
40
|
},
|
|
26
41
|
"RevealFx.translateY": {
|
|
27
42
|
"rule": "translateY as a number is in rem. Use translateY={1} or token \"16\" (1rem); 16 means 16rem.",
|
|
28
|
-
"components": [
|
|
43
|
+
"components": [
|
|
44
|
+
"RevealFx"
|
|
45
|
+
]
|
|
29
46
|
},
|
|
30
47
|
"LogoCloud.columns": {
|
|
31
48
|
"rule": "LogoCloud extends Grid — always set columns and responsive overrides or logos stack in one column.",
|
|
32
|
-
"components": [
|
|
49
|
+
"components": [
|
|
50
|
+
"LogoCloud"
|
|
51
|
+
]
|
|
33
52
|
},
|
|
34
53
|
"StatusIndicator.color": {
|
|
35
54
|
"rule": "StatusIndicator uses color=\"green\" | \"red\" | \"orange\" | \"gray\" etc. — not variant or semantic scheme names.",
|
|
36
|
-
"components": [
|
|
55
|
+
"components": [
|
|
56
|
+
"StatusIndicator"
|
|
57
|
+
]
|
|
37
58
|
},
|
|
38
59
|
"Icon.names": {
|
|
39
|
-
"rule": "Icon names must come from
|
|
40
|
-
"components": [
|
|
60
|
+
"rule": "Icon names must come from iconNames in spec.json, which is a real union in 2.0 (an unregistered name is a type error, not a blank space). Do not guess a plausible name, and do not cast one with `as IconName` to silence the check. Brand marks are not in the set — an app registers those itself by augmenting IconLibraryOverrides.",
|
|
61
|
+
"components": [
|
|
62
|
+
"Icon",
|
|
63
|
+
"Button",
|
|
64
|
+
"IconButton"
|
|
65
|
+
]
|
|
41
66
|
},
|
|
42
67
|
"Badge.duplicate": {
|
|
43
68
|
"rule": "Do not pass the same text as both title prop and children — it renders twice.",
|
|
44
|
-
"components": [
|
|
69
|
+
"components": [
|
|
70
|
+
"Badge"
|
|
71
|
+
]
|
|
45
72
|
},
|
|
46
73
|
"Tag.duplicate": {
|
|
47
74
|
"rule": "Do not pass the same text as both label prop and children — it renders twice.",
|
|
48
|
-
"components": [
|
|
75
|
+
"components": [
|
|
76
|
+
"Tag"
|
|
77
|
+
]
|
|
49
78
|
},
|
|
50
79
|
"color.tokens": {
|
|
51
80
|
"rule": "Colors are semantic tokens ({scheme}-{weight}), never hex/rgb. background also accepts surface | overlay | page | transparent.",
|
|
52
|
-
"components": [
|
|
81
|
+
"components": [
|
|
82
|
+
"Column",
|
|
83
|
+
"Row",
|
|
84
|
+
"Text",
|
|
85
|
+
"Button"
|
|
86
|
+
]
|
|
53
87
|
},
|
|
54
88
|
"color.background-weak": {
|
|
55
89
|
"rule": "*-background-weak is nearly the page color — invisible as accent. Use alpha tokens (brand-alpha-medium) for glows.",
|
|
56
|
-
"components": [
|
|
90
|
+
"components": [
|
|
91
|
+
"Background"
|
|
92
|
+
]
|
|
57
93
|
},
|
|
58
94
|
"layout.shorthands": {
|
|
59
95
|
"rule": "Use fill not fillWidth fillHeight; center not horizontal=\"center\" vertical=\"center\"; Row/Column not Flex direction=.",
|
|
60
|
-
"components": [
|
|
96
|
+
"components": [
|
|
97
|
+
"Row",
|
|
98
|
+
"Column",
|
|
99
|
+
"Flex",
|
|
100
|
+
"Grid"
|
|
101
|
+
]
|
|
61
102
|
},
|
|
62
103
|
"layout.defaults": {
|
|
63
|
-
"rule": "Never write props equal to defaults: position=\"relative\", direction on Row/Column, variant=\"primary\" on Button.",
|
|
64
|
-
"components": [
|
|
104
|
+
"rule": "Never write props equal to defaults or implied by another prop on the element: position=\"relative\", direction on Row/Column, variant=\"primary\" on Button, fillWidth beside maxWidth (maxWidth already fills the width), minWidth={0} beside fillWidth (fillWidth already sets min-width: 0).",
|
|
105
|
+
"components": [
|
|
106
|
+
"Row",
|
|
107
|
+
"Column",
|
|
108
|
+
"Grid",
|
|
109
|
+
"Button"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
"border.default": {
|
|
113
|
+
"rule": "Bare border (and borderTop, borderBottom, borderX, …) draws the default border. Do not write border=\"neutral-alpha-weak\" to get it; name a colour only to deviate, e.g. border=\"brand-alpha-medium\".",
|
|
114
|
+
"components": [
|
|
115
|
+
"Row",
|
|
116
|
+
"Column",
|
|
117
|
+
"Card"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
"zIndex.scope": {
|
|
121
|
+
"rule": "zIndex is for an isolated stacking group: an absolute decorative layer and its content sibling (zIndex={1}), or a sticky header over its pane. Never on a lone element, never a page-wide ladder of 3 / 5 / 9 — restructure the tree instead.",
|
|
122
|
+
"components": [
|
|
123
|
+
"Row",
|
|
124
|
+
"Column",
|
|
125
|
+
"Background"
|
|
126
|
+
]
|
|
65
127
|
},
|
|
66
128
|
"section.gaps": {
|
|
67
129
|
"rule": "Gap between page sections: 80–160 (typical 104). Inside sections: 24–40.",
|
|
68
|
-
"components": [
|
|
130
|
+
"components": [
|
|
131
|
+
"Column"
|
|
132
|
+
]
|
|
69
133
|
},
|
|
70
134
|
"heading.scale": {
|
|
71
135
|
"rule": "Hero = display-strong-l/xl; section titles = display-strong-xs/s — never heading-* for section titles.",
|
|
72
|
-
"components": [
|
|
136
|
+
"components": [
|
|
137
|
+
"Heading"
|
|
138
|
+
]
|
|
73
139
|
},
|
|
74
140
|
"animation.budget": {
|
|
75
141
|
"rule": "Entry animation budget: hero + at most 1–2 key moments. Animate coherent blocks all-or-none within a sibling set.",
|
|
76
|
-
"components": [
|
|
142
|
+
"components": [
|
|
143
|
+
"RevealFx",
|
|
144
|
+
"CountFx"
|
|
145
|
+
]
|
|
77
146
|
},
|
|
78
147
|
"CountFx.trigger": {
|
|
79
148
|
"rule": "CountFx has no trigger prop — drive value from useInViewport latch instead.",
|
|
80
|
-
"components": [
|
|
149
|
+
"components": [
|
|
150
|
+
"CountFx"
|
|
151
|
+
]
|
|
81
152
|
},
|
|
82
153
|
"overflow.hero": {
|
|
83
154
|
"rule": "overflow=\"hidden\" on full-bleed sections clips glows into hard bands — only use when parent has radius.",
|
|
84
|
-
"components": [
|
|
155
|
+
"components": [
|
|
156
|
+
"Column",
|
|
157
|
+
"Background"
|
|
158
|
+
]
|
|
85
159
|
}
|
|
86
160
|
}
|
package/ai/layouts.md
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Once UI — application layouts
|
|
2
|
+
|
|
3
|
+
Recipes for the shells a product sits inside, as opposed to the decoration in
|
|
4
|
+
`recipes.md`. Each is the shape a working product converged on, not a sketch.
|
|
5
|
+
|
|
6
|
+
Use them verbatim, then adjust. The values that look arbitrary usually are not —
|
|
7
|
+
the notes say which ones matter and why.
|
|
8
|
+
|
|
9
|
+
All three compile: they are also `ai/examples/app-shell.tsx`, which `pnpm
|
|
10
|
+
typecheck` covers, so a renamed prop breaks the recipe rather than leaving it
|
|
11
|
+
quietly wrong.
|
|
12
|
+
|
|
13
|
+
## 1. App shell with a sidebar
|
|
14
|
+
|
|
15
|
+
The one agents get wrong most often. A dashboard built without this scrolls the
|
|
16
|
+
whole document, so the header and sidebar slide away and the nav has to be
|
|
17
|
+
scrolled back to.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<Column fill horizontal="center" flex={1}>
|
|
21
|
+
<Header /> {/* 56px tall */}
|
|
22
|
+
<Row fill paddingX="8">
|
|
23
|
+
<Sidebar s={{ hide: true }} maxWidth={18} fitHeight position="sticky" top="56" />
|
|
24
|
+
<Row fill horizontal="center" topRadius="l" overflow="hidden">
|
|
25
|
+
<Row
|
|
26
|
+
height="calc(100dvh - var(--static-space-56))"
|
|
27
|
+
overflowY="auto"
|
|
28
|
+
topRadius="l"
|
|
29
|
+
horizontal="center"
|
|
30
|
+
fillWidth
|
|
31
|
+
background="surface">
|
|
32
|
+
<Column maxWidth="xl" gap="m" paddingY="32" fitHeight>
|
|
33
|
+
{children}
|
|
34
|
+
</Column>
|
|
35
|
+
</Row>
|
|
36
|
+
</Row>
|
|
37
|
+
</Row>
|
|
38
|
+
</Column>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
What each part is doing:
|
|
42
|
+
|
|
43
|
+
- **The pane scrolls, not the page.** `height: calc(100dvh - <header>)` plus
|
|
44
|
+
`overflowY="auto"` is what keeps the header and sidebar in place. `dvh`, not
|
|
45
|
+
`vh` — on mobile `vh` ignores the browser chrome and the pane runs off-screen.
|
|
46
|
+
- **`position="sticky" top="56"`** on the sidebar, matching the header height.
|
|
47
|
+
`fitHeight` so it does not stretch and fight the sticky.
|
|
48
|
+
- **`topRadius="l"` + `background="surface"`** is what makes the content read as
|
|
49
|
+
a panel sitting on the page rather than the page itself. The radius is on the
|
|
50
|
+
top only, since the bottom is off-screen.
|
|
51
|
+
- **`s={{ hide: true }}`** rather than a media query. The mobile nav is a
|
|
52
|
+
separate surface, not this one reflowed.
|
|
53
|
+
- **`maxWidth="xl"`** inside the pane. A dashboard is wider than a document;
|
|
54
|
+
`"m"` is for reading.
|
|
55
|
+
|
|
56
|
+
## 2. Data-driven navigation
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import { NavGroup, NavItem, selectNavHref } from "@once-ui-system/core";
|
|
60
|
+
|
|
61
|
+
const current = selectNavHref(pathname, nav.flatMap((i) =>
|
|
62
|
+
i.items ? i.items.map((s) => s.href) : [i.href],
|
|
63
|
+
));
|
|
64
|
+
|
|
65
|
+
<Column fill gap="4" paddingX="8">
|
|
66
|
+
{nav.map((item) =>
|
|
67
|
+
item.items ? (
|
|
68
|
+
<NavGroup
|
|
69
|
+
key={item.key}
|
|
70
|
+
label={item.label}
|
|
71
|
+
icon={item.icon}
|
|
72
|
+
defaultOpen={item.items.some((s) => s.href === current)}>
|
|
73
|
+
{item.items.map((sub) => (
|
|
74
|
+
<NavItem
|
|
75
|
+
key={sub.href}
|
|
76
|
+
href={sub.href}
|
|
77
|
+
label={sub.label}
|
|
78
|
+
badge={sub.badge}
|
|
79
|
+
selected={sub.href === current}
|
|
80
|
+
/>
|
|
81
|
+
))}
|
|
82
|
+
</NavGroup>
|
|
83
|
+
) : (
|
|
84
|
+
<NavItem
|
|
85
|
+
key={item.href}
|
|
86
|
+
href={item.href}
|
|
87
|
+
icon={item.icon}
|
|
88
|
+
label={item.label}
|
|
89
|
+
selected={item.href === current}
|
|
90
|
+
/>
|
|
91
|
+
),
|
|
92
|
+
)}
|
|
93
|
+
</Column>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- **`selectNavHref` over `===` or `startsWith`.** An equality check leaves a
|
|
97
|
+
nested route (`/settings/billing/invoices/42`) with nothing highlighted; a
|
|
98
|
+
prefix check lights the parent up alongside its child. It returns the longest
|
|
99
|
+
href that matches, which is the right one.
|
|
100
|
+
- **Compute `current` once** for the whole tree, not per item — a child needs to
|
|
101
|
+
know about its siblings to know it is the deepest match.
|
|
102
|
+
- **`defaultOpen` from the match**, so the group holding the current page is open
|
|
103
|
+
on arrival.
|
|
104
|
+
- Child items take **no icon**. The rail inside `NavGroup` carries the hierarchy;
|
|
105
|
+
a second column of icons competes with it.
|
|
106
|
+
|
|
107
|
+
## 3. Editor shell
|
|
108
|
+
|
|
109
|
+
Two panes and a timeline — the shape of a video editor, a page builder, a
|
|
110
|
+
diff view.
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
<Column fill>
|
|
114
|
+
<SplitView
|
|
115
|
+
fill
|
|
116
|
+
leftPanel={<Column fill overflowY="auto">{/* layers, blocks, files */}</Column>}
|
|
117
|
+
rightPanel={<Column fill overflowY="auto">{/* canvas, preview */}</Column>}
|
|
118
|
+
defaultSplit={0.28}
|
|
119
|
+
minSplit={0.2}
|
|
120
|
+
maxSplit={0.6}
|
|
121
|
+
collapseBelow="s"
|
|
122
|
+
labels={{ left: "Layers", right: "Canvas" }}
|
|
123
|
+
/>
|
|
124
|
+
<Scrubber
|
|
125
|
+
duration={duration}
|
|
126
|
+
value={time}
|
|
127
|
+
onChange={setTime}
|
|
128
|
+
tracks={tracks}
|
|
129
|
+
onGestureStart={pause}
|
|
130
|
+
/>
|
|
131
|
+
</Column>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- **`overflowY="auto"` on each panel, not on the SplitView.** The divider needs
|
|
135
|
+
the container to stay put while the panes scroll independently.
|
|
136
|
+
- **`collapseBelow` + `labels`.** Below the breakpoint the split becomes tabs, and
|
|
137
|
+
`labels` is what they say. Without it the tabs are unlabelled.
|
|
138
|
+
- **`onGestureStart` pauses playback.** Scrubbing while playing fights the
|
|
139
|
+
playhead — the drag sets a time, playback immediately moves it.
|
|
140
|
+
- **The timeline is a sibling of the split, not inside it.** It spans both panes,
|
|
141
|
+
and putting it in one makes the divider drag it.
|
|
142
|
+
|
|
143
|
+
## Anti-patterns
|
|
144
|
+
|
|
145
|
+
- A dashboard with no scrolling pane — the whole document scrolls and the nav
|
|
146
|
+
leaves with it.
|
|
147
|
+
- `100vh` in an app shell. Use `100dvh`; `vh` is wrong on mobile the moment the
|
|
148
|
+
browser chrome shows or hides.
|
|
149
|
+
- A sticky sidebar without `fitHeight` — it stretches to the row and the sticky
|
|
150
|
+
never engages.
|
|
151
|
+
- `pathname === href` or `startsWith` for nav selection. Use `selectNavHref`.
|
|
152
|
+
- Icons on both a NavGroup and its children — two columns of icons, no hierarchy.
|
|
153
|
+
- `overflow` on the SplitView instead of on its panels — the divider stops
|
|
154
|
+
tracking the pointer.
|
package/ai/manifest.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
3
|
-
"generated": "2026-09-
|
|
2
|
+
"version": "2.0.0-alpha.1",
|
|
3
|
+
"generated": "2026-09-17",
|
|
4
4
|
"files": {
|
|
5
5
|
"spec": "spec.json",
|
|
6
6
|
"catalog": "catalog.json",
|
|
7
7
|
"rules": "rules.compact.md",
|
|
8
8
|
"rulesFull": "rules.md",
|
|
9
9
|
"recipes": "recipes.md",
|
|
10
|
+
"layouts": "layouts.md",
|
|
10
11
|
"gotchas": "gotchas.json",
|
|
11
12
|
"tasks": "tasks/index.json",
|
|
12
13
|
"examples": "examples/",
|