@once-ui-system/core 1.7.10 → 1.7.12
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/ai/catalog.json +1650 -0
- package/ai/catalog.seed.json +411 -0
- package/ai/components/Accordion.json +136 -0
- package/ai/components/AccordionGroup.json +128 -0
- package/ai/components/Animation.json +146 -0
- package/ai/components/Arrow.json +128 -0
- package/ai/components/AutoScroll.json +130 -0
- package/ai/components/Avatar.json +133 -0
- package/ai/components/AvatarGroup.json +129 -0
- package/ai/components/Background.json +131 -0
- package/ai/components/Badge.json +132 -0
- package/ai/components/Banner.json +122 -0
- package/ai/components/BarChart.json +123 -0
- package/ai/components/BlobFx.json +125 -0
- package/ai/components/BlockQuote.json +132 -0
- package/ai/components/Button.json +26 -0
- package/ai/components/Card.json +129 -0
- package/ai/components/Carousel.json +134 -0
- package/ai/components/CelebrationFx.json +132 -0
- package/ai/components/ChartHeader.json +130 -0
- package/ai/components/ChartStatus.json +12 -0
- package/ai/components/Checkbox.json +13 -0
- package/ai/components/Chip.json +132 -0
- package/ai/components/CodeBlock.json +122 -0
- package/ai/components/ColorInput.json +13 -0
- package/ai/components/Column.json +128 -0
- package/ai/components/CompareImage.json +126 -0
- package/ai/components/ContextMenu.json +22 -0
- package/ai/components/CountFx.json +82 -0
- package/ai/components/CountdownFx.json +11 -0
- package/ai/components/Cursor.json +9 -0
- package/ai/components/CursorCard.json +128 -0
- package/ai/components/DataTooltip.json +15 -0
- package/ai/components/DateInput.json +21 -0
- package/ai/components/DatePicker.json +143 -0
- package/ai/components/DateRangeInput.json +18 -0
- package/ai/components/DateRangePicker.json +129 -0
- package/ai/components/Dialog.json +134 -0
- package/ai/components/DialogProvider.json +8 -0
- package/ai/components/Dropdown.json +128 -0
- package/ai/components/DropdownWrapper.json +28 -0
- package/ai/components/EmojiPicker.json +129 -0
- package/ai/components/EmojiPickerDropdown.json +13 -0
- package/ai/components/Fade.json +130 -0
- package/ai/components/FadingLettersFx.json +77 -0
- package/ai/components/Feedback.json +132 -0
- package/ai/components/Flex.json +125 -0
- package/ai/components/FlipFx.json +133 -0
- package/ai/components/GlitchFx.json +128 -0
- package/ai/components/Grid.json +121 -0
- package/ai/components/Heading.json +75 -0
- package/ai/components/HeadingLink.json +127 -0
- package/ai/components/HeadingNav.json +124 -0
- package/ai/components/HoloFx.json +128 -0
- package/ai/components/Hover.json +130 -0
- package/ai/components/HoverCard.json +122 -0
- package/ai/components/Icon.json +132 -0
- package/ai/components/IconButton.json +22 -0
- package/ai/components/InfiniteScroll.json +130 -0
- package/ai/components/InlineCode.json +126 -0
- package/ai/components/Input.json +24 -0
- package/ai/components/InteractiveDetails.json +14 -0
- package/ai/components/Kbar.json +10 -0
- package/ai/components/Kbd.json +127 -0
- package/ai/components/Legend.json +14 -0
- package/ai/components/LetterFx.json +14 -0
- package/ai/components/Line.json +125 -0
- package/ai/components/LineBarChart.json +123 -0
- package/ai/components/LineChart.json +123 -0
- package/ai/components/LinearGauge.json +130 -0
- package/ai/components/LinearGradient.json +15 -0
- package/ai/components/List.json +127 -0
- package/ai/components/ListItem.json +77 -0
- package/ai/components/Logo.json +16 -0
- package/ai/components/LogoCloud.json +124 -0
- package/ai/components/Mask.json +131 -0
- package/ai/components/MasonryGrid.json +132 -0
- package/ai/components/MatrixFx.json +135 -0
- package/ai/components/Media.json +142 -0
- package/ai/components/MediaUpload.json +122 -0
- package/ai/components/MegaMenu.json +125 -0
- package/ai/components/MobileMegaMenu.json +125 -0
- package/ai/components/Modal.json +12 -0
- package/ai/components/NavIcon.json +127 -0
- package/ai/components/NumberInput.json +16 -0
- package/ai/components/OTPInput.json +13 -0
- package/ai/components/OgCard.json +135 -0
- package/ai/components/Option.json +137 -0
- package/ai/components/Particle.json +135 -0
- package/ai/components/PasswordInput.json +8 -0
- package/ai/components/PieChart.json +123 -0
- package/ai/components/ProgressBar.json +131 -0
- package/ai/components/Pulse.json +129 -0
- package/ai/components/RadialGauge.json +134 -0
- package/ai/components/RadialGradient.json +16 -0
- package/ai/components/RadioButton.json +17 -0
- package/ai/components/RevealFx.json +131 -0
- package/ai/components/Row.json +128 -0
- package/ai/components/Schema.json +17 -0
- package/ai/components/ScrollContainer.json +126 -0
- package/ai/components/ScrollToTop.json +124 -0
- package/ai/components/Scroller.json +128 -0
- package/ai/components/SegmentedControl.json +132 -0
- package/ai/components/Select.json +21 -0
- package/ai/components/ShineFx.json +80 -0
- package/ai/components/Skeleton.json +129 -0
- package/ai/components/Slider.json +17 -0
- package/ai/components/SmartLink.json +17 -0
- package/ai/components/Spinner.json +127 -0
- package/ai/components/SplitView.json +129 -0
- package/ai/components/StatusIndicator.json +128 -0
- package/ai/components/StyleOverlay.json +126 -0
- package/ai/components/StylePanel.json +125 -0
- package/ai/components/Swiper.json +130 -0
- package/ai/components/Switch.json +20 -0
- package/ai/components/Table.json +125 -0
- package/ai/components/Tag.json +129 -0
- package/ai/components/TagInput.json +12 -0
- package/ai/components/Text.json +72 -0
- package/ai/components/Textarea.json +24 -0
- package/ai/components/ThemeSwitcher.json +122 -0
- package/ai/components/TiltFx.json +126 -0
- package/ai/components/Timeline.json +126 -0
- package/ai/components/Toast.json +13 -0
- package/ai/components/Toaster.json +14 -0
- package/ai/components/ToggleButton.json +24 -0
- package/ai/components/Tooltip.json +129 -0
- package/ai/components/TypeFx.json +15 -0
- package/ai/components/User.json +15 -0
- package/ai/components/UserMenu.json +16 -0
- package/ai/components/WeatherFx.json +133 -0
- package/ai/examples/auth.tsx +105 -0
- package/ai/examples/blocks/Background6.tsx +25 -0
- package/ai/examples/blocks/Chat1.tsx +70 -0
- package/ai/examples/blocks/Dashboard1.tsx +404 -0
- package/ai/examples/blocks/Feed3.tsx +151 -0
- package/ai/examples/blocks/Footer1.tsx +30 -0
- package/ai/examples/blocks/Footer2.tsx +96 -0
- package/ai/examples/blocks/Footer3.tsx +127 -0
- package/ai/examples/blocks/Footer4.tsx +406 -0
- package/ai/examples/blocks/Header1.tsx +370 -0
- package/ai/examples/blocks/Header2.tsx +98 -0
- package/ai/examples/blocks/Header3.tsx +133 -0
- package/ai/examples/blocks/Header4.tsx +123 -0
- package/ai/examples/blocks/Productivity1.tsx +318 -0
- package/ai/examples/blocks/Roadmap1.tsx +133 -0
- package/ai/examples/blocks/Sidebar1.tsx +34 -0
- package/ai/examples/blocks/Sidebar2.tsx +17 -0
- package/ai/examples/blocks/Sidebar4.tsx +92 -0
- package/ai/examples/blocks/Sidebar5.tsx +73 -0
- package/ai/examples/blocks/Streaming1.tsx +353 -0
- package/ai/examples/blocks/Table1.tsx +303 -0
- package/ai/examples/blocks/Waitlist1.tsx +141 -0
- package/ai/examples/blocks/content/chat1content.ts +65 -0
- package/ai/examples/blocks/content/resources.ts +5 -0
- package/ai/examples/blocks/content/roadmap1content.ts +51 -0
- package/ai/examples/blocks/manifest.json +191 -0
- package/ai/examples/dashboard.tsx +150 -0
- package/ai/examples/marketing-hero.tsx +152 -0
- package/ai/examples/pricing.tsx +219 -0
- package/ai/examples/settings.tsx +140 -0
- package/ai/gotchas.json +85 -0
- package/ai/manifest.json +21 -0
- package/ai/rules.compact.md +73 -0
- package/ai/spec.json +2679 -2701
- package/ai/tasks/auth.json +23 -0
- package/ai/tasks/chat.json +28 -0
- package/ai/tasks/dashboard.json +39 -0
- package/ai/tasks/index.json +12 -0
- package/ai/tasks/marketing-hero.json +38 -0
- package/ai/tasks/pricing.json +42 -0
- package/ai/tasks/roadmap.json +22 -0
- package/ai/tasks/settings.json +34 -0
- package/dist/ai/catalog.json +1650 -0
- package/dist/ai/catalog.seed.json +411 -0
- package/dist/ai/components/Accordion.json +136 -0
- package/dist/ai/components/AccordionGroup.json +128 -0
- package/dist/ai/components/Animation.json +146 -0
- package/dist/ai/components/Arrow.json +128 -0
- package/dist/ai/components/AutoScroll.json +130 -0
- package/dist/ai/components/Avatar.json +133 -0
- package/dist/ai/components/AvatarGroup.json +129 -0
- package/dist/ai/components/Background.json +131 -0
- package/dist/ai/components/Badge.json +132 -0
- package/dist/ai/components/Banner.json +122 -0
- package/dist/ai/components/BarChart.json +123 -0
- package/dist/ai/components/BlobFx.json +125 -0
- package/dist/ai/components/BlockQuote.json +132 -0
- package/dist/ai/components/Button.json +26 -0
- package/dist/ai/components/Card.json +129 -0
- package/dist/ai/components/Carousel.json +134 -0
- package/dist/ai/components/CelebrationFx.json +132 -0
- package/dist/ai/components/ChartHeader.json +130 -0
- package/dist/ai/components/ChartStatus.json +12 -0
- package/dist/ai/components/Checkbox.json +13 -0
- package/dist/ai/components/Chip.json +132 -0
- package/dist/ai/components/CodeBlock.json +122 -0
- package/dist/ai/components/ColorInput.json +13 -0
- package/dist/ai/components/Column.json +128 -0
- package/dist/ai/components/CompareImage.json +126 -0
- package/dist/ai/components/ContextMenu.json +22 -0
- package/dist/ai/components/CountFx.json +82 -0
- package/dist/ai/components/CountdownFx.json +11 -0
- package/dist/ai/components/Cursor.json +9 -0
- package/dist/ai/components/CursorCard.json +128 -0
- package/dist/ai/components/DataTooltip.json +15 -0
- package/dist/ai/components/DateInput.json +21 -0
- package/dist/ai/components/DatePicker.json +143 -0
- package/dist/ai/components/DateRangeInput.json +18 -0
- package/dist/ai/components/DateRangePicker.json +129 -0
- package/dist/ai/components/Dialog.json +134 -0
- package/dist/ai/components/DialogProvider.json +8 -0
- package/dist/ai/components/Dropdown.json +128 -0
- package/dist/ai/components/DropdownWrapper.json +28 -0
- package/dist/ai/components/EmojiPicker.json +129 -0
- package/dist/ai/components/EmojiPickerDropdown.json +13 -0
- package/dist/ai/components/Fade.json +130 -0
- package/dist/ai/components/FadingLettersFx.json +77 -0
- package/dist/ai/components/Feedback.json +132 -0
- package/dist/ai/components/Flex.json +125 -0
- package/dist/ai/components/FlipFx.json +133 -0
- package/dist/ai/components/GlitchFx.json +128 -0
- package/dist/ai/components/Grid.json +121 -0
- package/dist/ai/components/Heading.json +75 -0
- package/dist/ai/components/HeadingLink.json +127 -0
- package/dist/ai/components/HeadingNav.json +124 -0
- package/dist/ai/components/HoloFx.json +128 -0
- package/dist/ai/components/Hover.json +130 -0
- package/dist/ai/components/HoverCard.json +122 -0
- package/dist/ai/components/Icon.json +132 -0
- package/dist/ai/components/IconButton.json +22 -0
- package/dist/ai/components/InfiniteScroll.json +130 -0
- package/dist/ai/components/InlineCode.json +126 -0
- package/dist/ai/components/Input.json +24 -0
- package/dist/ai/components/InteractiveDetails.json +14 -0
- package/dist/ai/components/Kbar.json +10 -0
- package/dist/ai/components/Kbd.json +127 -0
- package/dist/ai/components/Legend.json +14 -0
- package/dist/ai/components/LetterFx.json +14 -0
- package/dist/ai/components/Line.json +125 -0
- package/dist/ai/components/LineBarChart.json +123 -0
- package/dist/ai/components/LineChart.json +123 -0
- package/dist/ai/components/LinearGauge.json +130 -0
- package/dist/ai/components/LinearGradient.json +15 -0
- package/dist/ai/components/List.json +127 -0
- package/dist/ai/components/ListItem.json +77 -0
- package/dist/ai/components/Logo.json +16 -0
- package/dist/ai/components/LogoCloud.json +124 -0
- package/dist/ai/components/Mask.json +131 -0
- package/dist/ai/components/MasonryGrid.json +132 -0
- package/dist/ai/components/MatrixFx.json +135 -0
- package/dist/ai/components/Media.json +142 -0
- package/dist/ai/components/MediaUpload.json +122 -0
- package/dist/ai/components/MegaMenu.json +125 -0
- package/dist/ai/components/MobileMegaMenu.json +125 -0
- package/dist/ai/components/Modal.json +12 -0
- package/dist/ai/components/NavIcon.json +127 -0
- package/dist/ai/components/NumberInput.json +16 -0
- package/dist/ai/components/OTPInput.json +13 -0
- package/dist/ai/components/OgCard.json +135 -0
- package/dist/ai/components/Option.json +137 -0
- package/dist/ai/components/Particle.json +135 -0
- package/dist/ai/components/PasswordInput.json +8 -0
- package/dist/ai/components/PieChart.json +123 -0
- package/dist/ai/components/ProgressBar.json +131 -0
- package/dist/ai/components/Pulse.json +129 -0
- package/dist/ai/components/RadialGauge.json +134 -0
- package/dist/ai/components/RadialGradient.json +16 -0
- package/dist/ai/components/RadioButton.json +17 -0
- package/dist/ai/components/RevealFx.json +131 -0
- package/dist/ai/components/Row.json +128 -0
- package/dist/ai/components/Schema.json +17 -0
- package/dist/ai/components/ScrollContainer.json +126 -0
- package/dist/ai/components/ScrollToTop.json +124 -0
- package/dist/ai/components/Scroller.json +128 -0
- package/dist/ai/components/SegmentedControl.json +132 -0
- package/dist/ai/components/Select.json +21 -0
- package/dist/ai/components/ShineFx.json +80 -0
- package/dist/ai/components/Skeleton.json +129 -0
- package/dist/ai/components/Slider.json +17 -0
- package/dist/ai/components/SmartLink.json +17 -0
- package/dist/ai/components/Spinner.json +127 -0
- package/dist/ai/components/SplitView.json +129 -0
- package/dist/ai/components/StatusIndicator.json +128 -0
- package/dist/ai/components/StyleOverlay.json +126 -0
- package/dist/ai/components/StylePanel.json +125 -0
- package/dist/ai/components/Swiper.json +130 -0
- package/dist/ai/components/Switch.json +20 -0
- package/dist/ai/components/Table.json +125 -0
- package/dist/ai/components/Tag.json +129 -0
- package/dist/ai/components/TagInput.json +12 -0
- package/dist/ai/components/Text.json +72 -0
- package/dist/ai/components/Textarea.json +24 -0
- package/dist/ai/components/ThemeSwitcher.json +122 -0
- package/dist/ai/components/TiltFx.json +126 -0
- package/dist/ai/components/Timeline.json +126 -0
- package/dist/ai/components/Toast.json +13 -0
- package/dist/ai/components/Toaster.json +14 -0
- package/dist/ai/components/ToggleButton.json +24 -0
- package/dist/ai/components/Tooltip.json +129 -0
- package/dist/ai/components/TypeFx.json +15 -0
- package/dist/ai/components/User.json +15 -0
- package/dist/ai/components/UserMenu.json +16 -0
- package/dist/ai/components/WeatherFx.json +133 -0
- package/dist/ai/eval-tasks.md +71 -0
- package/dist/ai/examples/blocks/manifest.json +191 -0
- package/dist/ai/gotchas.json +85 -0
- package/dist/ai/manifest.json +21 -0
- package/dist/ai/recipes.md +149 -0
- package/dist/ai/rules.compact.md +73 -0
- package/dist/ai/rules.md +217 -0
- package/dist/ai/spec.json +2680 -0
- package/dist/ai/tasks/auth.json +23 -0
- package/dist/ai/tasks/chat.json +28 -0
- package/dist/ai/tasks/dashboard.json +39 -0
- package/dist/ai/tasks/index.json +12 -0
- package/dist/ai/tasks/marketing-hero.json +38 -0
- package/dist/ai/tasks/pricing.json +42 -0
- package/dist/ai/tasks/roadmap.json +22 -0
- package/dist/ai/tasks/settings.json +34 -0
- 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/Accordion.module.scss +1 -0
- package/dist/components/AccordionGroup.d.ts +2 -1
- package/dist/components/AccordionGroup.d.ts.map +1 -1
- package/dist/components/AccordionGroup.js +17 -1
- package/dist/components/AccordionGroup.js.map +1 -1
- package/dist/components/Avatar.d.ts +2 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/AvatarGroup.d.ts +2 -1
- package/dist/components/AvatarGroup.d.ts.map +1 -1
- package/dist/components/AvatarGroup.js.map +1 -1
- package/dist/components/Button.d.ts +7 -5
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +3 -3
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Button.module.scss +233 -111
- package/dist/components/Carousel.d.ts.map +1 -1
- package/dist/components/Carousel.js +14 -3
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/ColorInput.d.ts.map +1 -1
- package/dist/components/ColorInput.js +11 -11
- package/dist/components/ColorInput.js.map +1 -1
- package/dist/components/CompareImage.d.ts.map +1 -1
- package/dist/components/CompareImage.js +24 -23
- package/dist/components/CompareImage.js.map +1 -1
- package/dist/components/CompareImage.module.scss +0 -2
- package/dist/components/CursorCard.d.ts.map +1 -1
- package/dist/components/CursorCard.js.map +1 -1
- package/dist/components/CursorCard.module.scss +1 -1
- package/dist/components/DatePicker.d.ts +2 -1
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker.js +11 -15
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/DateRangePicker.d.ts +2 -1
- package/dist/components/DateRangePicker.d.ts.map +1 -1
- package/dist/components/DateRangePicker.js.map +1 -1
- package/dist/components/DropdownWrapper.d.ts.map +1 -1
- package/dist/components/DropdownWrapper.js +9 -9
- package/dist/components/DropdownWrapper.js.map +1 -1
- package/dist/components/ElementType.d.ts +5 -6
- package/dist/components/ElementType.d.ts.map +1 -1
- package/dist/components/ElementType.js.map +1 -1
- package/dist/components/EmojiPicker.d.ts +2 -2
- package/dist/components/EmojiPickerDropdown.d.ts +2 -2
- package/dist/components/Feedback.d.ts.map +1 -1
- package/dist/components/Feedback.js +1 -1
- package/dist/components/Feedback.js.map +1 -1
- package/dist/components/Heading.d.ts +3 -3
- package/dist/components/Heading.d.ts.map +1 -1
- package/dist/components/Heading.js +6 -3
- package/dist/components/Heading.js.map +1 -1
- package/dist/components/Icon.d.ts +2 -2
- package/dist/components/Icon.d.ts.map +1 -1
- package/dist/components/IconButton.d.ts +7 -5
- package/dist/components/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton.js +2 -2
- package/dist/components/IconButton.js.map +1 -1
- package/dist/components/Input.d.ts +2 -1
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Input.module.scss +1 -196
- package/dist/components/Logo.d.ts +2 -1
- package/dist/components/Logo.d.ts.map +1 -1
- package/dist/components/MatrixFx.d.ts.map +1 -1
- package/dist/components/MatrixFx.js +521 -481
- package/dist/components/MatrixFx.js.map +1 -1
- package/dist/components/Media.d.ts.map +1 -1
- package/dist/components/Media.js +5 -1
- package/dist/components/Media.js.map +1 -1
- package/dist/components/ProgressBar.d.ts +1 -0
- package/dist/components/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar.js +9 -3
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/Pulse.d.ts +1 -0
- 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/Scroller.js +1 -1
- package/dist/components/Scroller.js.map +1 -1
- package/dist/components/ServerFlex.d.ts +2 -2
- package/dist/components/ServerFlex.d.ts.map +1 -1
- package/dist/components/ServerFlex.js +4 -1
- package/dist/components/ServerFlex.js.map +1 -1
- package/dist/components/ServerGrid.d.ts +2 -2
- package/dist/components/ServerGrid.d.ts.map +1 -1
- package/dist/components/SmartLink.d.ts +5 -4
- package/dist/components/SmartLink.d.ts.map +1 -1
- package/dist/components/SmartLink.js.map +1 -1
- package/dist/components/Spinner.d.ts +2 -1
- package/dist/components/Spinner.d.ts.map +1 -1
- package/dist/components/Spinner.js.map +1 -1
- package/dist/components/SplitView.d.ts +1 -1
- package/dist/components/SplitView.d.ts.map +1 -1
- package/dist/components/SplitView.js +1 -1
- package/dist/components/SplitView.js.map +1 -1
- package/dist/components/StatusIndicator.d.ts +2 -1
- package/dist/components/StatusIndicator.d.ts.map +1 -1
- package/dist/components/StatusIndicator.js.map +1 -1
- package/dist/components/Swiper.d.ts.map +1 -1
- package/dist/components/Swiper.js +3 -3
- package/dist/components/Swiper.js.map +1 -1
- package/dist/components/Tag.d.ts +2 -2
- package/dist/components/Tag.d.ts.map +1 -1
- package/dist/components/Text.d.ts +3 -3
- package/dist/components/Text.d.ts.map +1 -1
- package/dist/components/Text.js +6 -3
- package/dist/components/Text.js.map +1 -1
- package/dist/components/Textarea.d.ts +2 -1
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/Toast.d.ts +1 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toast.js +2 -0
- package/dist/components/Toast.js.map +1 -1
- package/dist/components/Toaster.d.ts +1 -1
- package/dist/components/Toaster.d.ts.map +1 -1
- package/dist/components/ToggleButton.d.ts +6 -5
- package/dist/components/ToggleButton.d.ts.map +1 -1
- package/dist/components/ToggleButton.js.map +1 -1
- package/dist/components/ToggleButton.module.scss +19 -0
- package/dist/components/index.d.ts +0 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +0 -3
- package/dist/components/index.js.map +1 -1
- package/dist/contexts/ToastProvider.d.ts +1 -1
- package/dist/contexts/ToastProvider.d.ts.map +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/tokens.css.map +1 -1
- package/dist/interfaces.d.ts +9 -10
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/modules/code/CodeBlock.impl.d.ts +2 -0
- package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
- package/dist/modules/code/CodeBlock.impl.js +48 -16
- package/dist/modules/code/CodeBlock.impl.js.map +1 -1
- package/dist/modules/code/index.d.ts +3 -0
- package/dist/modules/code/index.d.ts.map +1 -0
- package/dist/modules/code/index.js +2 -0
- package/dist/modules/code/index.js.map +1 -0
- package/dist/modules/data/BarChart.impl.d.ts +2 -2
- 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.map +1 -1
- package/dist/modules/data/Legend.d.ts +1 -1
- package/dist/modules/data/Legend.d.ts.map +1 -1
- package/dist/modules/data/Legend.js.map +1 -1
- package/dist/modules/data/LineBarChart.impl.d.ts +2 -2
- package/dist/modules/data/LinearGauge.d.ts +1 -2
- package/dist/modules/data/LinearGauge.d.ts.map +1 -1
- package/dist/modules/data/RadialGauge.d.ts +1 -2
- package/dist/modules/data/RadialGauge.d.ts.map +1 -1
- package/dist/modules/data/interfaces.d.ts +4 -4
- package/dist/modules/index.d.ts +3 -4
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +3 -4
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/media/index.d.ts +3 -0
- package/dist/modules/media/index.d.ts.map +1 -0
- package/dist/modules/media/index.js +2 -0
- package/dist/modules/media/index.js.map +1 -0
- package/dist/modules/navigation/HeadingLink.d.ts +1 -2
- package/dist/modules/navigation/HeadingLink.d.ts.map +1 -1
- package/dist/modules/navigation/HeadingNav.d.ts +2 -2
- package/dist/modules/navigation/HeadingNav.d.ts.map +1 -1
- package/dist/modules/navigation/HeadingNav.js.map +1 -1
- package/dist/modules/navigation/Kbar.d.ts +6 -5
- package/dist/modules/navigation/Kbar.d.ts.map +1 -1
- package/dist/modules/navigation/Kbar.js +20 -12
- package/dist/modules/navigation/Kbar.js.map +1 -1
- package/dist/modules/navigation/MobileMegaMenu.d.ts +4 -4
- package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -1
- package/dist/modules/navigation/index.d.ts +2 -2
- package/dist/modules/navigation/index.d.ts.map +1 -1
- package/dist/modules/navigation/index.js +2 -2
- package/dist/modules/navigation/index.js.map +1 -1
- package/dist/modules/seo/index.d.ts +5 -0
- package/dist/modules/seo/index.d.ts.map +1 -0
- package/dist/modules/seo/index.js +3 -0
- package/dist/modules/seo/index.js.map +1 -0
- package/dist/package.json +13 -2
- package/dist/tokens/theme.scss +20 -2
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/dropdownState.d.ts +4 -0
- package/dist/utils/dropdownState.d.ts.map +1 -0
- package/dist/utils/dropdownState.js +9 -0
- package/dist/utils/dropdownState.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +139 -127
- package/LICENSE.md +0 -21
- package/next-env.d.ts +0 -5
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Once UI — AI generation eval suite
|
|
2
|
+
|
|
3
|
+
Fixed prompt set for measuring harness effectiveness. Run each task with and
|
|
4
|
+
without the harness (rules.md + spec.json), ideally across two models, and
|
|
5
|
+
score with the checklist below. Add a regression task whenever a new pitfall
|
|
6
|
+
is found in the wild.
|
|
7
|
+
|
|
8
|
+
## Tasks
|
|
9
|
+
|
|
10
|
+
1. **Analytics dashboard** — KPI stat cards (trend indicators), a line chart, a bar chart, recent-activity list. Tests: data components, `CountFx`, grid responsiveness.
|
|
11
|
+
2. **Settings page** — sidebar sections, profile form (avatar upload, inputs, selects), danger zone. Tests: form controls, `MediaUpload`, surface recipes.
|
|
12
|
+
3. **Pricing page** — three tiers, highlighted middle tier, feature comparison table, FAQ accordion. Tests: `Card`, `Badge`, `Table`, `Accordion`, proportional emphasis.
|
|
13
|
+
4. **Chat UI** — message list with avatars, streaming indicator, input bar with emoji picker, command palette hint. Tests: `EmojiPickerDropdown`, `Kbd`, `Spinner`, scroll containers.
|
|
14
|
+
5. **Marketing hero** — headline with text effect, CTA pair, social proof logos, background effect. Tests: effects usage (`LetterFx`/`TypeFx`/`RevealFx`, `Background`/`MatrixFx`/`BlobFx`), restraint.
|
|
15
|
+
6. **Auth flow** — login with password + OTP step in a stacked dialog. Tests: `Dialog` `stack`, `OTPInput`, `PasswordInput`, validation states.
|
|
16
|
+
7. **E-commerce product card grid** — image, price, tag, hover actions, skeleton loading state. Tests: `Card`, `Media`, `Skeleton`, `Tag`, hover patterns.
|
|
17
|
+
8. **Onboarding checklist** — progress bar, step list with status indicators, celebratory completion. Tests: `ProgressBar`, `StatusIndicator`, `CelebrationFx`.
|
|
18
|
+
9. **Data table page** — sortable table, filters row (segmented control, date range, search), pagination. Tests: `Table`, `SegmentedControl`, `DateRangePicker`, toolbar composition.
|
|
19
|
+
10. **User profile popover** — avatar trigger, `UserMenu`/`HoverCard` with stats and actions. Tests: overlay components, `AvatarGroup`.
|
|
20
|
+
11. **Changelog/timeline page** — versioned entries on a `Timeline`, tags per release, copyable code snippets. Tests: `Timeline`, `CodeBlock`, `InlineCode`.
|
|
21
|
+
12. **Feedback widget** — floating trigger, dialog with rating chips, textarea, toast on submit. Tests: `Chip` selection, `useToast`/`Feedback`, positioning.
|
|
22
|
+
|
|
23
|
+
## Scoring checklist (per task)
|
|
24
|
+
|
|
25
|
+
Mechanical (count occurrences):
|
|
26
|
+
|
|
27
|
+
- [ ] Compiles / no invented props or components
|
|
28
|
+
- [ ] Redundant-default props (`position="relative"`, `variant="primary"` on Button, ...) — target: 0
|
|
29
|
+
- [ ] Shorthand violations (`fillWidth fillHeight` instead of `fill`, `horizontal+vertical center` instead of `center`, `Flex direction=` instead of `Row`/`Column`) — target: 0
|
|
30
|
+
- [ ] `style={{}}` uses where a token prop exists — target: 0
|
|
31
|
+
- [ ] Raw HTML elements where a component exists (`img`, `a`, `button`) — target: 0
|
|
32
|
+
- [ ] Hex/rgb colors — target: 0
|
|
33
|
+
- [ ] Distinct Once UI components used — higher is better (task-appropriate)
|
|
34
|
+
|
|
35
|
+
Judgment (1–5):
|
|
36
|
+
|
|
37
|
+
- [ ] Proportionality: spacing rhythm, type scale, surface hierarchy look like real Once UI
|
|
38
|
+
- [ ] Component appropriateness: purpose-built components chosen over generic primitives
|
|
39
|
+
- [ ] Responsiveness: breakpoint props used where layout should adapt
|
|
40
|
+
- [ ] Restraint: effects enhance rather than dominate
|
|
41
|
+
|
|
42
|
+
## Pitfall log
|
|
43
|
+
|
|
44
|
+
Record every recurring failure here; each entry should become a rule in
|
|
45
|
+
`rules.md` or a gold example, plus stay in this list as a regression check.
|
|
46
|
+
|
|
47
|
+
| Date | Pitfall observed | Fix applied |
|
|
48
|
+
|------|------------------|-------------|
|
|
49
|
+
| 2026-06-12 | `position="relative"` written despite being default | rules.md #3 |
|
|
50
|
+
| 2026-06-12 | `fillWidth fillHeight` instead of `fill` | rules.md #2 |
|
|
51
|
+
| 2026-06-12 | `horizontal="center" vertical="center"` instead of `center` | rules.md #2 |
|
|
52
|
+
| 2026-06-12 | Only ~10 common components used, defaults only | rules.md #12–13 |
|
|
53
|
+
| 2026-06-12 | Section gaps too small (48), page feels cramped | rules.md #17 |
|
|
54
|
+
| 2026-06-12 | Section headings too small (`heading-strong-m`), hero undersized | rules.md #18 |
|
|
55
|
+
| 2026-06-12 | Testimonial quote (BlockQuote default) larger than section title | rules.md #19 |
|
|
56
|
+
| 2026-06-12 | Identical centered heading+subtitle on every section (dated); Tag+sparkle eyebrow | rules.md #20 |
|
|
57
|
+
| 2026-06-12 | Absolute Background missing `top="0" left="0"` → offset by parent padding | rules.md #21, recipes.md |
|
|
58
|
+
| 2026-06-12 | Gradient `width: 500` (125% of container); units misunderstood | rules.md #22 |
|
|
59
|
+
| 2026-06-12 | `brand-background-weak` glow at `opacity: 30` — invisible vs page | rules.md #23, recipes.md |
|
|
60
|
+
| 2026-06-12 | `RevealFx delay={index * 80}` (seconds!) and `translateY={16}` (16rem!) | rules.md #24, recipes.md #7 |
|
|
61
|
+
| 2026-06-12 | `LogoCloud` without `columns` → single-column stack | rules.md #25 |
|
|
62
|
+
| 2026-06-12 | No decorative components used beyond one gradient; flat result | recipes.md + rules.md #26 |
|
|
63
|
+
| 2026-06-12 | RevealFx on every section (dated, eye-grabbing); mount-timed animations finish off-screen | rules.md #27–29, recipes.md #7 |
|
|
64
|
+
| 2026-06-12 | Hero gradient clipped: ambient layer inside narrow `maxWidth` container with `overflow="hidden"` | rules.md #21b, recipes.md #1 |
|
|
65
|
+
| 2026-06-12 | Reveal on hero text fragments + lone highlighted card (incoherent grouping) | rules.md #28b |
|
|
66
|
+
| 2026-06-12 | `Card` used for static panels (tiers, testimonials, stats) | rules.md #12 |
|
|
67
|
+
| 2026-06-12 | Arbitrary `maxWidth` numbers; no container-width convention | rules.md #15 |
|
|
68
|
+
| 2026-06-12 | Design intent (style/layout/color/decoration/imagery) guessed instead of asked | rules.md "Before you build" |
|
|
69
|
+
| 2026-06-12 | Invented icon names (`more`, `bell`, `arrowRight`) | rules.md #14b, IconName list in spec.json |
|
|
70
|
+
| 2026-06-12 | `Badge title` + children rendered same text twice ("2 unread2") | rules.md #14c |
|
|
71
|
+
| 2026-06-12 | `Fade` wrapped the whole message list → washed-out content | rules.md #14d |
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"description": "Once UI Pro block references for agent codegen — canonical composition patterns at production quality. Reference-only; not all blocks are runnable standalone.",
|
|
4
|
+
"usage": "Load the block matching your task intent. Mimic structure and prop patterns; adapt data and copy.",
|
|
5
|
+
"blocks": [
|
|
6
|
+
{
|
|
7
|
+
"id": "Header1",
|
|
8
|
+
"file": "Header1.tsx",
|
|
9
|
+
"title": "App header with MegaMenu + Kbar",
|
|
10
|
+
"tags": ["navigation", "header", "marketing"],
|
|
11
|
+
"components": ["MegaMenu", "MobileMegaMenu", "Kbar", "Logo", "UserMenu", "NavIcon", "SmartLink"],
|
|
12
|
+
"patterns": ["sticky header", "mega menu sections with featured links", "command palette ⌘K"],
|
|
13
|
+
"tasks": ["marketing-hero", "dashboard"],
|
|
14
|
+
"standalone": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "Header2",
|
|
18
|
+
"file": "Header2.tsx",
|
|
19
|
+
"title": "Minimal marketing header",
|
|
20
|
+
"tags": ["navigation", "header", "marketing"],
|
|
21
|
+
"components": ["Logo", "Row", "Button", "SmartLink"],
|
|
22
|
+
"tasks": ["marketing-hero"],
|
|
23
|
+
"standalone": true
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "Header3",
|
|
27
|
+
"file": "Header3.tsx",
|
|
28
|
+
"title": "Streaming/media header",
|
|
29
|
+
"tags": ["navigation", "header", "streaming"],
|
|
30
|
+
"components": ["Logo", "IconButton", "UserMenu"],
|
|
31
|
+
"tasks": ["streaming"],
|
|
32
|
+
"standalone": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "Header4",
|
|
36
|
+
"file": "Header4.tsx",
|
|
37
|
+
"title": "Compact docs-style header",
|
|
38
|
+
"tags": ["navigation", "header", "docs"],
|
|
39
|
+
"components": ["Logo", "UserMenu", "ToggleButton", "SmartLink"],
|
|
40
|
+
"tasks": ["settings"],
|
|
41
|
+
"standalone": true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "Footer1",
|
|
45
|
+
"file": "Footer1.tsx",
|
|
46
|
+
"title": "Minimal footer bar",
|
|
47
|
+
"tags": ["footer"],
|
|
48
|
+
"components": ["Row", "IconButton", "Text"],
|
|
49
|
+
"standalone": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "Footer2",
|
|
53
|
+
"file": "Footer2.tsx",
|
|
54
|
+
"title": "Footer with CTA",
|
|
55
|
+
"tags": ["footer", "marketing"],
|
|
56
|
+
"components": ["Column", "Button", "SmartLink"],
|
|
57
|
+
"standalone": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "Footer3",
|
|
61
|
+
"file": "Footer3.tsx",
|
|
62
|
+
"title": "Multi-column sitemap footer",
|
|
63
|
+
"tags": ["footer", "marketing"],
|
|
64
|
+
"components": ["Grid", "SmartLink", "Tag", "Logo", "IconButton"],
|
|
65
|
+
"patterns": ["5-column nav grid with responsive collapse"],
|
|
66
|
+
"tasks": ["marketing-hero"],
|
|
67
|
+
"standalone": true
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "Footer4",
|
|
71
|
+
"file": "Footer4.tsx",
|
|
72
|
+
"title": "Premium footer with TypeFx + Particle",
|
|
73
|
+
"tags": ["footer", "marketing", "effect"],
|
|
74
|
+
"components": ["Background", "Particle", "TypeFx", "Mask", "Avatar", "Tag"],
|
|
75
|
+
"patterns": ["animated wordmark", "particle decoration", "masked gradient"],
|
|
76
|
+
"tasks": ["marketing-hero"],
|
|
77
|
+
"standalone": true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "Waitlist1",
|
|
81
|
+
"file": "Waitlist1.tsx",
|
|
82
|
+
"title": "Waitlist / coming-soon hero",
|
|
83
|
+
"tags": ["marketing", "hero", "waitlist"],
|
|
84
|
+
"components": ["RevealFx", "CountFx", "AvatarGroup", "Input", "Badge", "Background"],
|
|
85
|
+
"patterns": ["custom cursor SVG", "subscriber count animation", "email capture with validation"],
|
|
86
|
+
"tasks": ["marketing-hero"],
|
|
87
|
+
"related": ["Background6.tsx"],
|
|
88
|
+
"standalone": true
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "Dashboard1",
|
|
92
|
+
"file": "Dashboard1.tsx",
|
|
93
|
+
"title": "Full analytics dashboard shell",
|
|
94
|
+
"tags": ["dashboard", "data"],
|
|
95
|
+
"components": ["Card", "LineChart", "Grid", "Scroller", "StatusIndicator", "Table1"],
|
|
96
|
+
"patterns": ["StatCard with sparkline chart overlay", "activity feed with Card rows", "orders table"],
|
|
97
|
+
"tasks": ["dashboard"],
|
|
98
|
+
"compose": ["Sidebar1.tsx", "Header1.tsx", "Table1.tsx"],
|
|
99
|
+
"standalone": false
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "Table1",
|
|
103
|
+
"file": "Table1.tsx",
|
|
104
|
+
"title": "Data table with search, pagination, selection",
|
|
105
|
+
"tags": ["data", "dashboard", "table"],
|
|
106
|
+
"components": ["Input", "Checkbox", "DropdownWrapper", "CountFx", "IconButton", "ToggleButton"],
|
|
107
|
+
"patterns": ["custom render columns", "selectable rows", "items per page"],
|
|
108
|
+
"tasks": ["dashboard", "chat"],
|
|
109
|
+
"standalone": true
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "Chat1",
|
|
113
|
+
"file": "Chat1.tsx",
|
|
114
|
+
"title": "Three-pane chat layout",
|
|
115
|
+
"tags": ["chat", "layout"],
|
|
116
|
+
"components": ["SplitView pattern via Row", "Sidebar4", "Feed3", "Sidebar5", "Table1"],
|
|
117
|
+
"patterns": ["channel sidebar + feed + members panel", "view switching"],
|
|
118
|
+
"tasks": ["chat"],
|
|
119
|
+
"compose": ["Feed3.tsx", "Sidebar4.tsx", "Sidebar5.tsx"],
|
|
120
|
+
"standalone": false
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "Feed3",
|
|
124
|
+
"file": "Feed3.tsx",
|
|
125
|
+
"title": "Chat message feed + composer",
|
|
126
|
+
"tags": ["chat", "social"],
|
|
127
|
+
"components": ["Avatar", "Textarea", "EmojiPickerDropdown", "Media", "OgCard", "IconButton"],
|
|
128
|
+
"patterns": ["thread messages without bubbles", "attachment grid", "reactions row", "emoji picker prefix"],
|
|
129
|
+
"tasks": ["chat"],
|
|
130
|
+
"standalone": true
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "Sidebar4",
|
|
134
|
+
"file": "Sidebar4.tsx",
|
|
135
|
+
"title": "Chat channel sidebar",
|
|
136
|
+
"tags": ["chat", "sidebar", "navigation"],
|
|
137
|
+
"components": ["Scroller", "ToggleButton", "Fade", "Media", "Avatar"],
|
|
138
|
+
"patterns": ["cover image header with Fade strip", "grouped channel list", "user status footer"],
|
|
139
|
+
"tasks": ["chat"],
|
|
140
|
+
"standalone": true
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "Sidebar5",
|
|
144
|
+
"file": "Sidebar5.tsx",
|
|
145
|
+
"title": "Chat members panel",
|
|
146
|
+
"tags": ["chat", "sidebar"],
|
|
147
|
+
"components": ["Card", "Avatar", "DropdownWrapper", "Heading"],
|
|
148
|
+
"tasks": ["chat"],
|
|
149
|
+
"standalone": true
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "Roadmap1",
|
|
153
|
+
"file": "Roadmap1.tsx",
|
|
154
|
+
"title": "Kanban-style product roadmap",
|
|
155
|
+
"tags": ["roadmap", "content", "community"],
|
|
156
|
+
"components": ["Card", "StatusIndicator", "User", "Scroller"],
|
|
157
|
+
"patterns": ["horizontal column scroll", "Card for linked tasks / Column for static", "brand dot product header"],
|
|
158
|
+
"tasks": ["roadmap"],
|
|
159
|
+
"standalone": true
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"id": "Streaming1",
|
|
163
|
+
"file": "Streaming1.tsx",
|
|
164
|
+
"title": "Video streaming page",
|
|
165
|
+
"tags": ["streaming", "media", "marketing"],
|
|
166
|
+
"components": ["Media", "Carousel", "ProgressBar", "Fade", "Scroller"],
|
|
167
|
+
"patterns": ["floating controls portal", "episode carousel", "hero video player"],
|
|
168
|
+
"compose": ["Header3.tsx", "Footer2.tsx"],
|
|
169
|
+
"standalone": false
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "Productivity1",
|
|
173
|
+
"file": "Productivity1.tsx",
|
|
174
|
+
"title": "Issue board / kanban productivity",
|
|
175
|
+
"tags": ["productivity", "dashboard"],
|
|
176
|
+
"components": ["Card", "AvatarGroup", "IconButton", "Scroller"],
|
|
177
|
+
"patterns": ["horizontal issue columns", "Card task items with avatars"],
|
|
178
|
+
"compose": ["Sidebar2.tsx"],
|
|
179
|
+
"standalone": false
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"byTask": {
|
|
183
|
+
"marketing-hero": ["Waitlist1", "Header1", "Footer4", "Footer3"],
|
|
184
|
+
"dashboard": ["Dashboard1", "Table1", "Header1", "Sidebar1"],
|
|
185
|
+
"chat": ["Chat1", "Feed3", "Sidebar4", "Sidebar5", "Table1"],
|
|
186
|
+
"settings": ["Header4", "Sidebar1"],
|
|
187
|
+
"pricing": ["Header2", "Footer2"],
|
|
188
|
+
"auth": ["Header2"],
|
|
189
|
+
"roadmap": ["Roadmap1"]
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Background.gradient.width": {
|
|
3
|
+
"rule": "Quarter-percent units: 400 = 100% of container. Soft glows use width 100–200, not 500.",
|
|
4
|
+
"components": ["Background"]
|
|
5
|
+
},
|
|
6
|
+
"Background.gradient.x": {
|
|
7
|
+
"rule": "x/y are percent positions of the container (50/50 = center).",
|
|
8
|
+
"components": ["Background"]
|
|
9
|
+
},
|
|
10
|
+
"Background.absolute": {
|
|
11
|
+
"rule": "Every absolute decorative layer needs top=\"0\" left=\"0\" or it offsets by parent padding.",
|
|
12
|
+
"components": ["Background", "MatrixFx", "BlobFx"]
|
|
13
|
+
},
|
|
14
|
+
"Card.interactive": {
|
|
15
|
+
"rule": "Card is for interactive surfaces only (href or onClick). Static panels use Column + background=\"surface\" border=\"neutral-alpha-weak\" radius=\"l\".",
|
|
16
|
+
"components": ["Card"]
|
|
17
|
+
},
|
|
18
|
+
"Fade.edge": {
|
|
19
|
+
"rule": "Fade is an edge overlay strip on scroll containers, not a content wrapper.",
|
|
20
|
+
"components": ["Fade"]
|
|
21
|
+
},
|
|
22
|
+
"RevealFx.delay": {
|
|
23
|
+
"rule": "delay is in seconds — stagger with delay={index * 0.1}, never index * 80.",
|
|
24
|
+
"components": ["RevealFx"]
|
|
25
|
+
},
|
|
26
|
+
"RevealFx.translateY": {
|
|
27
|
+
"rule": "translateY as a number is in rem. Use translateY={1} or token \"16\" (1rem); 16 means 16rem.",
|
|
28
|
+
"components": ["RevealFx"]
|
|
29
|
+
},
|
|
30
|
+
"LogoCloud.columns": {
|
|
31
|
+
"rule": "LogoCloud extends Grid — always set columns and responsive overrides or logos stack in one column.",
|
|
32
|
+
"components": ["LogoCloud"]
|
|
33
|
+
},
|
|
34
|
+
"StatusIndicator.color": {
|
|
35
|
+
"rule": "StatusIndicator uses color=\"green\" | \"red\" | \"orange\" | \"gray\" etc. — not variant or semantic scheme names.",
|
|
36
|
+
"components": ["StatusIndicator"]
|
|
37
|
+
},
|
|
38
|
+
"rule": "Icon names must come from IconName in spec.json — never invent names like more, bell, arrowRight.",
|
|
39
|
+
"components": ["Icon", "Button", "IconButton"]
|
|
40
|
+
},
|
|
41
|
+
"Badge.duplicate": {
|
|
42
|
+
"rule": "Do not pass the same text as both title prop and children — it renders twice.",
|
|
43
|
+
"components": ["Badge"]
|
|
44
|
+
},
|
|
45
|
+
"Tag.duplicate": {
|
|
46
|
+
"rule": "Do not pass the same text as both label prop and children — it renders twice.",
|
|
47
|
+
"components": ["Tag"]
|
|
48
|
+
},
|
|
49
|
+
"color.tokens": {
|
|
50
|
+
"rule": "Colors are semantic tokens ({scheme}-{weight}), never hex/rgb. background also accepts surface | overlay | page | transparent.",
|
|
51
|
+
"components": ["Column", "Row", "Text", "Button"]
|
|
52
|
+
},
|
|
53
|
+
"color.background-weak": {
|
|
54
|
+
"rule": "*-background-weak is nearly the page color — invisible as accent. Use alpha tokens (brand-alpha-medium) for glows.",
|
|
55
|
+
"components": ["Background"]
|
|
56
|
+
},
|
|
57
|
+
"layout.shorthands": {
|
|
58
|
+
"rule": "Use fill not fillWidth fillHeight; center not horizontal=\"center\" vertical=\"center\"; Row/Column not Flex direction=.",
|
|
59
|
+
"components": ["Row", "Column", "Flex", "Grid"]
|
|
60
|
+
},
|
|
61
|
+
"layout.defaults": {
|
|
62
|
+
"rule": "Never write props equal to defaults: position=\"relative\", direction on Row/Column, variant=\"primary\" on Button.",
|
|
63
|
+
"components": ["Row", "Column", "Button"]
|
|
64
|
+
},
|
|
65
|
+
"section.gaps": {
|
|
66
|
+
"rule": "Gap between page sections: 80–160 (typical 104). Inside sections: 24–40.",
|
|
67
|
+
"components": ["Column"]
|
|
68
|
+
},
|
|
69
|
+
"heading.scale": {
|
|
70
|
+
"rule": "Hero = display-strong-l/xl; section titles = display-strong-xs/s — never heading-* for section titles.",
|
|
71
|
+
"components": ["Heading"]
|
|
72
|
+
},
|
|
73
|
+
"animation.budget": {
|
|
74
|
+
"rule": "Entry animation budget: hero + at most 1–2 key moments. Animate coherent blocks all-or-none within a sibling set.",
|
|
75
|
+
"components": ["RevealFx", "CountFx"]
|
|
76
|
+
},
|
|
77
|
+
"CountFx.trigger": {
|
|
78
|
+
"rule": "CountFx has no trigger prop — drive value from useInViewport latch instead.",
|
|
79
|
+
"components": ["CountFx"]
|
|
80
|
+
},
|
|
81
|
+
"overflow.hero": {
|
|
82
|
+
"rule": "overflow=\"hidden\" on full-bleed sections clips glows into hard bands — only use when parent has radius.",
|
|
83
|
+
"components": ["Column", "Background"]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.7.12",
|
|
3
|
+
"generated": "2026-07-05",
|
|
4
|
+
"files": {
|
|
5
|
+
"spec": "spec.json",
|
|
6
|
+
"catalog": "catalog.json",
|
|
7
|
+
"rules": "rules.compact.md",
|
|
8
|
+
"rulesFull": "rules.md",
|
|
9
|
+
"recipes": "recipes.md",
|
|
10
|
+
"gotchas": "gotchas.json",
|
|
11
|
+
"tasks": "tasks/index.json",
|
|
12
|
+
"examples": "examples/",
|
|
13
|
+
"blocks": "examples/blocks/manifest.json",
|
|
14
|
+
"components": "components/"
|
|
15
|
+
},
|
|
16
|
+
"bootstrap": [
|
|
17
|
+
"rules.compact.md",
|
|
18
|
+
"catalog.json"
|
|
19
|
+
],
|
|
20
|
+
"resolve": "tasks/index.json"
|
|
21
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Once UI — decoration recipes
|
|
2
|
+
|
|
3
|
+
Curated decorative patterns that keep pages premium without going over the top.
|
|
4
|
+
Use them verbatim, then adjust values. All units follow rules.md #21–24.
|
|
5
|
+
|
|
6
|
+
## Budget (hard limits)
|
|
7
|
+
|
|
8
|
+
- **One ambient background layer per section**, and only in sections that anchor the page (hero, highlighted card, final CTA). Plain sections stay plain — contrast is what makes the decorated ones read as premium.
|
|
9
|
+
- **Continuous motion** (MatrixFx flicker, BlobFx drift) in at most **two places per page**, never adjacent.
|
|
10
|
+
- **One accent family per page.** Decorations use `brand-*` (or `neutral-*`); never mix brand + accent + schemes in decoration.
|
|
11
|
+
- Every decorative layer: `position="absolute" top="0" left="0" fill pointerEvents="none"`, content sibling `zIndex={1}`, parent `overflow="hidden"`.
|
|
12
|
+
|
|
13
|
+
## 1. Hero glow + dots
|
|
14
|
+
|
|
15
|
+
Soft brand glow from the top edge with a subtle dot texture. The workhorse ambient layer.
|
|
16
|
+
|
|
17
|
+
Placement matters: the wrapper is **full-bleed** (`fillWidth`, outside any `maxWidth` column) and has **no** `overflow="hidden"` — the gradient fades out via `colorEnd: "static-transparent"`. Clipping it inside a narrow container produces a hard-edged band.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<Column fillWidth horizontal="center" paddingY="80">
|
|
21
|
+
<Background
|
|
22
|
+
position="absolute" top="0" left="0" fill pointerEvents="none"
|
|
23
|
+
gradient={{
|
|
24
|
+
display: true,
|
|
25
|
+
colorStart: "brand-alpha-medium",
|
|
26
|
+
colorEnd: "static-transparent",
|
|
27
|
+
x: 50, y: 0,
|
|
28
|
+
width: 150, height: 80,
|
|
29
|
+
opacity: 60,
|
|
30
|
+
}}
|
|
31
|
+
dots={{ display: true, color: "neutral-alpha-weak", size: "2", opacity: 40 }}
|
|
32
|
+
/>
|
|
33
|
+
<Column zIndex={1} horizontal="center" gap="24" maxWidth={48}>
|
|
34
|
+
{/* hero content */}
|
|
35
|
+
</Column>
|
|
36
|
+
</Column>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 2. MatrixFx hero strip (with fade-out)
|
|
40
|
+
|
|
41
|
+
Animated matrix field behind a hero, faded into the page with a `page-background` gradient so it doesn't compete with content. Pair exactly like this:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<Column fillWidth minHeight="s" center overflow="hidden">
|
|
45
|
+
<MatrixFx
|
|
46
|
+
position="absolute" top="0" left="0" fill
|
|
47
|
+
flicker size={1.5} spacing={8}
|
|
48
|
+
colors={["brand-solid-strong"]}
|
|
49
|
+
bulge={{ type: "wave", duration: 3, intensity: 20, repeat: true }}
|
|
50
|
+
/>
|
|
51
|
+
<Background
|
|
52
|
+
position="absolute" top="0" left="0" fill pointerEvents="none"
|
|
53
|
+
gradient={{ display: true, colorStart: "page-background", x: 0, y: 50, width: 150, height: 300 }}
|
|
54
|
+
/>
|
|
55
|
+
<Column zIndex={1} center gap="16" padding="48">
|
|
56
|
+
{/* hero content */}
|
|
57
|
+
</Column>
|
|
58
|
+
</Column>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 3. Highlighted card glow
|
|
62
|
+
|
|
63
|
+
For the emphasized item in a set (e.g. "most popular" pricing tier). Border + top glow, nothing else:
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
<Card fillWidth padding="24" radius="l" background="surface" border="brand-alpha-medium" overflow="hidden">
|
|
67
|
+
<Background
|
|
68
|
+
position="absolute" top="0" left="0" fill pointerEvents="none"
|
|
69
|
+
gradient={{
|
|
70
|
+
display: true,
|
|
71
|
+
colorStart: "brand-alpha-medium",
|
|
72
|
+
colorEnd: "static-transparent",
|
|
73
|
+
x: 50, y: 0,
|
|
74
|
+
width: 200, height: 60,
|
|
75
|
+
opacity: 50,
|
|
76
|
+
}}
|
|
77
|
+
/>
|
|
78
|
+
<Column zIndex={1} gap="20" fillWidth>
|
|
79
|
+
{/* card content */}
|
|
80
|
+
</Column>
|
|
81
|
+
</Card>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 4. BlobFx ambient panel
|
|
85
|
+
|
|
86
|
+
Self-contained drifting brand/accent blobs (already blurred and pointer-transparent). Use behind a final CTA or feature visual — counts as continuous motion:
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
<Card fillWidth radius="l" border="neutral-alpha-weak" overflow="hidden" padding="48">
|
|
90
|
+
<BlobFx position="absolute" top="0" left="0" fill opacity={60} seed={2} />
|
|
91
|
+
<Column zIndex={1} center gap="24">
|
|
92
|
+
{/* CTA content */}
|
|
93
|
+
</Column>
|
|
94
|
+
</Card>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 5. Technical texture (lines / grid)
|
|
98
|
+
|
|
99
|
+
Diagonal lines or grid texture for footers of cards, table headers, "engineering" flavored strips. No motion:
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
<Background
|
|
103
|
+
position="absolute" top="0" left="0" fill pointerEvents="none"
|
|
104
|
+
lines={{ display: true, color: "neutral-alpha-weak", angle: -45, size: "4" }}
|
|
105
|
+
/>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 6. Section divider
|
|
109
|
+
|
|
110
|
+
Between major sections when the gap alone isn't enough — a short line, optionally with an eyebrow:
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
<Column fillWidth horizontal="center" gap="16">
|
|
114
|
+
<Line width="40" />
|
|
115
|
+
</Column>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 7. Reveal stagger (entry, not ambient)
|
|
119
|
+
|
|
120
|
+
Entrance animation for **one** key set per page (rules.md #27–28), viewport-triggered and latched so it plays once, when actually seen (rules.md #29):
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
124
|
+
const inViewport = useInViewport(ref);
|
|
125
|
+
const [seen, setSeen] = useState(false);
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
if (inViewport) setSeen(true);
|
|
128
|
+
}, [inViewport]);
|
|
129
|
+
|
|
130
|
+
<Grid ref={ref} columns="3" gap="16" s={{ columns: 1 }}>
|
|
131
|
+
{items.map((item, index) => (
|
|
132
|
+
<RevealFx key={item.id} trigger={seen} translateY="8" delay={index * 0.1}>
|
|
133
|
+
<Card ... />
|
|
134
|
+
</RevealFx>
|
|
135
|
+
))}
|
|
136
|
+
</Grid>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
For stats, drive `CountFx` value from the same latch: `<CountFx value={seen ? 2400 : 0} separator="," />`.
|
|
140
|
+
|
|
141
|
+
## Anti-patterns
|
|
142
|
+
|
|
143
|
+
- Glow with `colorStart: "brand-background-weak"` — invisible against the page; use alpha tokens.
|
|
144
|
+
- `width: 500` gradients — that's 125% of the container blown past its edges; stay ≤ 200 for glows.
|
|
145
|
+
- Background layers without `top="0" left="0"` inside padded parents — misaligned.
|
|
146
|
+
- Decorating every section — if everything glows, nothing does.
|
|
147
|
+
- Two different Fx components fighting in one viewport (MatrixFx + BlobFx side by side).
|
|
148
|
+
- `overflow="hidden"` on a full-bleed section (no radius) — clips the glow into a hard-edged band.
|
|
149
|
+
- Animating one item out of a sibling set (only the highlighted card) — stagger all or animate none.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Once UI — compact codegen rules
|
|
2
|
+
|
|
3
|
+
Load with task bundle from `@once-ui-system/core/ai/tasks/{intent}.json`. For production-quality composition, read matching Pro blocks from `examples/blocks/manifest.json`. Fetch component slices on demand.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
| Write | Never write |
|
|
8
|
+
|-------|-------------|
|
|
9
|
+
| `<Column gap="16">` | `<Flex direction="column">` |
|
|
10
|
+
| `<Row gap="16">` | `<Flex direction="row">` |
|
|
11
|
+
| `fill` | `fillWidth fillHeight` |
|
|
12
|
+
| `fit` | `fitWidth fitHeight` |
|
|
13
|
+
| `center` | `horizontal="center" vertical="center"` |
|
|
14
|
+
|
|
15
|
+
- `Flex` only when direction changes at breakpoints: `<Row s={{ direction: "column" }}>`
|
|
16
|
+
- Page skeleton: `Column as="main" fillWidth horizontal="center"` → content `Column maxWidth="l"` → sections
|
|
17
|
+
- Section gaps: `"104"` between sections, `"24"`–`"40"` inside. Never `"48"` between major sections.
|
|
18
|
+
- Responsive: breakpoint props `xl l m s xs` — never media queries for layout
|
|
19
|
+
|
|
20
|
+
## Surfaces
|
|
21
|
+
|
|
22
|
+
Static panel recipe (pricing tiers, stats, settings sections):
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="16">
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `Card` = interactive only (`href` or `onClick`). Static panels = Column + surface recipe.
|
|
29
|
+
- Colors: `{scheme}-{weight}` or `{scheme}-alpha-{weight}`. Never hex/rgb.
|
|
30
|
+
- `background` also: `surface | overlay | page | transparent`
|
|
31
|
+
|
|
32
|
+
## Typography
|
|
33
|
+
|
|
34
|
+
- Hero: `display-strong-l` or `display-strong-xl`
|
|
35
|
+
- Section titles: `display-strong-xs` or `display-strong-s` — not `heading-*`
|
|
36
|
+
- Eyebrow: `<Text variant="label-default-s" onBackground="brand-medium">`
|
|
37
|
+
- Text on layout: `textVariant` + `onBackground` on Row/Column instead of nesting Text
|
|
38
|
+
|
|
39
|
+
## Decoration
|
|
40
|
+
|
|
41
|
+
Absolute layers always: `position="absolute" top="0" left="0" fill pointerEvents="none"`, content `zIndex={1}`.
|
|
42
|
+
|
|
43
|
+
- Gradient `width`: quarter-percent (400 = 100%). Glows: 100–200.
|
|
44
|
+
- Glow colors: `brand-alpha-medium`, not `brand-background-weak`
|
|
45
|
+
- Ambient layers on full-bleed section wrapper, outside `maxWidth` column
|
|
46
|
+
- Budget: one ambient layer per section; motion in hero + one CTA max
|
|
47
|
+
|
|
48
|
+
## Motion
|
|
49
|
+
|
|
50
|
+
- `RevealFx delay` in **seconds**: `delay={index * 0.1}`
|
|
51
|
+
- `RevealFx translateY`: number = rem; prefer `"8"`–`"16"` tokens
|
|
52
|
+
- Viewport-trigger with `useInViewport` + latch; `CountFx` driven by `value`, no trigger prop
|
|
53
|
+
- Animate all siblings in a set or none — never one lone animated card
|
|
54
|
+
|
|
55
|
+
## Components
|
|
56
|
+
|
|
57
|
+
| Need | Use |
|
|
58
|
+
|------|-----|
|
|
59
|
+
| Image | `Media` |
|
|
60
|
+
| Link | `SmartLink` / `Button href` |
|
|
61
|
+
| Status dot | `StatusIndicator` |
|
|
62
|
+
| Loading | `Spinner` / `Skeleton` |
|
|
63
|
+
| Scroll fade | `Fade` as edge strip, not wrapper |
|
|
64
|
+
| Icons | `IconName` from spec only |
|
|
65
|
+
| Logos grid | `LogoCloud` with `columns` set |
|
|
66
|
+
|
|
67
|
+
## Defaults — omit these
|
|
68
|
+
|
|
69
|
+
`position="relative"`, `direction` on Row/Column, `variant="primary"` on Button, `size="m"` when default.
|
|
70
|
+
|
|
71
|
+
## Before building
|
|
72
|
+
|
|
73
|
+
If design intent unclear, ask: content style, layout width, color approach, decoration level, imagery. Default: restrained, centered `maxWidth="m"`, single brand accent, one subtle gradient, no placeholder images.
|