@once-ui-system/core 1.8.3 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +8 -0
- package/ai/examples/app-shell.tsx +111 -0
- package/ai/examples/auth.tsx +1 -1
- package/ai/examples/blocks/Dashboard1.tsx +17 -28
- package/ai/examples/blocks/Feed3.tsx +4 -4
- 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/Header3.tsx +7 -7
- package/ai/examples/blocks/Header4.tsx +5 -5
- package/ai/examples/blocks/Sidebar4.tsx +1 -1
- package/ai/examples/blocks/Streaming1.tsx +4 -4
- package/ai/examples/blocks/Table1.tsx +6 -6
- package/ai/examples/blocks/Waitlist1.tsx +5 -5
- package/ai/examples/blocks/content/resources.ts +3 -1
- package/ai/examples/dashboard.tsx +8 -9
- package/ai/examples/marketing-hero.tsx +2 -2
- package/ai/examples/pricing.tsx +4 -5
- package/ai/examples/settings.tsx +3 -3
- package/ai/gotchas.json +80 -23
- package/ai/layouts.md +154 -0
- package/ai/manifest.json +3 -2
- package/ai/recipes.md +49 -4
- package/ai/rules.compact.md +18 -3
- package/ai/rules.md +68 -10
- package/ai/spec.json +634 -176
- 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 +8 -0
- package/dist/ai/gotchas.json +80 -23
- package/dist/ai/layouts.md +154 -0
- package/dist/ai/manifest.json +3 -2
- package/dist/ai/recipes.md +49 -4
- package/dist/ai/rules.compact.md +18 -3
- package/dist/ai/rules.md +68 -10
- package/dist/ai/spec.json +634 -176
- 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.js +1 -1
- 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 +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 +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/FadingLettersFx.d.ts +1 -1
- package/dist/components/FadingLettersFx.d.ts.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/Heading.d.ts +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/InfiniteScroll.d.ts +1 -1
- package/dist/components/InfiniteScroll.d.ts.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 +1 -1
- package/dist/components/OgCard.js +3 -3
- 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/ScrollToTop.d.ts +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 +1 -1
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Table.js +2 -2
- 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/Text.d.ts +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/ThemeInit.d.ts.map +1 -1
- package/dist/components/ThemeInit.js +6 -4
- package/dist/components/ThemeInit.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/DataThemeProvider.d.ts +1 -1
- package/dist/contexts/DataThemeProvider.d.ts.map +1 -1
- package/dist/contexts/IconProvider.d.ts +3 -3
- 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 +0 -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 +4 -3
- 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 +4 -3
- 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 +2 -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 +213 -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 +74 -10
- 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
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
@use "../styles/breakpoints.scss" as breakpoints;
|
|
2
|
-
|
|
3
|
-
:root {
|
|
4
|
-
/* FONT WEIGHT */
|
|
5
|
-
--font-weight-thin: 100;
|
|
6
|
-
--font-weight-extraLight: 200;
|
|
7
|
-
--font-weight-light: 300;
|
|
8
|
-
--font-weight-normal: 400;
|
|
9
|
-
--font-weight-medium: 500;
|
|
10
|
-
--font-weight-semiBold: 600;
|
|
11
|
-
--font-weight-bold: 700;
|
|
12
|
-
--font-weight-extraBold: 800;
|
|
13
|
-
|
|
14
|
-
--font-weight-body-default: var(--font-weight-normal);
|
|
15
|
-
--font-weight-body-strong: var(--font-weight-bold);
|
|
16
|
-
--font-weight-label-default: var(--font-weight-normal);
|
|
17
|
-
--font-weight-label-strong: var(--font-weight-semiBold);
|
|
18
|
-
--font-weight-code-default: var(--font-weight-normal);
|
|
19
|
-
--font-weight-code-strong: var(--font-weight-bold);
|
|
20
|
-
--font-weight-heading-default: var(--font-weight-normal);
|
|
21
|
-
--font-weight-heading-strong: var(--font-weight-semiBold);
|
|
22
|
-
--font-weight-display-default: var(--font-weight-light);
|
|
23
|
-
--font-weight-display-normal: var(--font-weight-normal);
|
|
24
|
-
--font-weight-display-medium: var(--font-weight-medium);
|
|
25
|
-
--font-weight-display-strong: var(--font-weight-semiBold);
|
|
26
|
-
|
|
27
|
-
/* FONT SIZE */
|
|
28
|
-
--font-size-display-xl: 5rem;
|
|
29
|
-
--font-size-display-l: 4rem;
|
|
30
|
-
--font-size-display-m: 3rem;
|
|
31
|
-
--font-size-display-s: 2.5rem;
|
|
32
|
-
--font-size-display-xs: 2rem;
|
|
33
|
-
|
|
34
|
-
--font-size-heading-xl: 1.5rem;
|
|
35
|
-
--font-size-heading-l: 1.33rem;
|
|
36
|
-
--font-size-heading-m: 1.25rem;
|
|
37
|
-
--font-size-heading-s: 1.125rem;
|
|
38
|
-
--font-size-heading-xs: 1rem;
|
|
39
|
-
|
|
40
|
-
--font-size-body-xl: 1.25rem;
|
|
41
|
-
--font-size-body-l: 1.125rem;
|
|
42
|
-
--font-size-body-m: 1rem;
|
|
43
|
-
--font-size-body-s: 0.875rem;
|
|
44
|
-
--font-size-body-xs: 0.75rem;
|
|
45
|
-
|
|
46
|
-
--font-size-label-xl: 1.125rem;
|
|
47
|
-
--font-size-label-l: 1rem;
|
|
48
|
-
--font-size-label-m: 0.925rem;
|
|
49
|
-
--font-size-label-s: 0.825rem;
|
|
50
|
-
--font-size-label-xs: 0.75rem;
|
|
51
|
-
|
|
52
|
-
/* LINE HEIGHT */
|
|
53
|
-
--line-height-display-xl: 5rem;
|
|
54
|
-
--line-height-display-l: 4.25rem;
|
|
55
|
-
--line-height-display-m: 3.25rem;
|
|
56
|
-
--line-height-display-s: 3rem;
|
|
57
|
-
--line-height-display-xs: 2.5rem;
|
|
58
|
-
|
|
59
|
-
--line-height-heading-xl: 2rem;
|
|
60
|
-
--line-height-heading-l: 1.75rem;
|
|
61
|
-
--line-height-heading-m: 1.5rem;
|
|
62
|
-
--line-height-heading-s: 1.5rem;
|
|
63
|
-
--line-height-heading-xs: 1.25rem;
|
|
64
|
-
|
|
65
|
-
--line-height-body-xl: 1.75rem;
|
|
66
|
-
--line-height-body-l: 1.5rem;
|
|
67
|
-
--line-height-body-m: 1.5rem;
|
|
68
|
-
--line-height-body-s: 1.125rem;
|
|
69
|
-
--line-height-body-xs: 1rem;
|
|
70
|
-
|
|
71
|
-
--line-height-label-xl: 1.5rem;
|
|
72
|
-
--line-height-label-l: 1.25rem;
|
|
73
|
-
--line-height-label-m: 1.25rem;
|
|
74
|
-
--line-height-label-s: 1rem;
|
|
75
|
-
--line-height-label-xs: 0.875rem;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
@include breakpoints.m {
|
|
79
|
-
:root {
|
|
80
|
-
/* FONT SIZE */
|
|
81
|
-
--font-size-display-xl: 3.5rem;
|
|
82
|
-
--font-size-display-l: 3.25rem;
|
|
83
|
-
--font-size-display-m: 2.75rem;
|
|
84
|
-
--font-size-display-s: 2.25rem;
|
|
85
|
-
--font-size-display-xs: 1.75rem;
|
|
86
|
-
|
|
87
|
-
--font-size-heading-xl: 1.33rem;
|
|
88
|
-
--font-size-heading-l: 1.25rem;
|
|
89
|
-
--font-size-heading-m: 1.125rem;
|
|
90
|
-
|
|
91
|
-
/* LINE HEIGHT */
|
|
92
|
-
--line-height-display-xl: 3.75rem;
|
|
93
|
-
--line-height-display-l: 3.5rem;
|
|
94
|
-
--line-height-display-m: 3rem;
|
|
95
|
-
--line-height-display-s: 2.5rem;
|
|
96
|
-
--line-height-display-xs: 2rem;
|
|
97
|
-
|
|
98
|
-
--line-height-heading-xl: 1.75rem;
|
|
99
|
-
--line-height-heading-l: 1.5rem;
|
|
100
|
-
--line-height-heading-m: 1.25rem;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
@include breakpoints.s {
|
|
105
|
-
:root {
|
|
106
|
-
/* FONT SIZE */
|
|
107
|
-
--font-size-display-xl: 2.75rem;
|
|
108
|
-
--font-size-display-l: 2.5rem;
|
|
109
|
-
--font-size-display-m: 2.25rem;
|
|
110
|
-
--font-size-display-s: 2rem;
|
|
111
|
-
|
|
112
|
-
/* LINE HEIGHT */
|
|
113
|
-
--line-height-display-xl: 3rem;
|
|
114
|
-
--line-height-display-l: 2.75rem;
|
|
115
|
-
--line-height-display-m: 2.5rem;
|
|
116
|
-
--line-height-display-s: 2.5rem;
|
|
117
|
-
}
|
|
118
|
-
}
|
package/next-env.d.ts
DELETED
package/scripts/copy-files.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
const fs = require("fs");
|
|
2
|
-
const path = require("path");
|
|
3
|
-
|
|
4
|
-
// Function to copy directory recursively
|
|
5
|
-
function copyDir(src, dest) {
|
|
6
|
-
// Create destination directory if it doesn't exist
|
|
7
|
-
if (!fs.existsSync(dest)) {
|
|
8
|
-
fs.mkdirSync(dest, { recursive: true });
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// Read source directory
|
|
12
|
-
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
13
|
-
|
|
14
|
-
for (const entry of entries) {
|
|
15
|
-
const srcPath = path.join(src, entry.name);
|
|
16
|
-
const destPath = path.join(dest, entry.name);
|
|
17
|
-
|
|
18
|
-
if (entry.isDirectory()) {
|
|
19
|
-
// Recursively copy directory
|
|
20
|
-
copyDir(srcPath, destPath);
|
|
21
|
-
} else {
|
|
22
|
-
// Copy file if it's not a TypeScript file (TS files are handled by tsc)
|
|
23
|
-
const ext = path.extname(entry.name).toLowerCase();
|
|
24
|
-
if (![".ts", ".tsx"].includes(ext)) {
|
|
25
|
-
fs.copyFileSync(srcPath, destPath);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Copy all style files and other assets
|
|
32
|
-
const srcDir = path.resolve(__dirname, "../src");
|
|
33
|
-
const destDir = path.resolve(__dirname, "../dist");
|
|
34
|
-
|
|
35
|
-
// Copy package.json with modifications
|
|
36
|
-
const packageJson = require("../package.json");
|
|
37
|
-
|
|
38
|
-
// Remove unnecessary fields for the published package
|
|
39
|
-
const fieldsToRemove = ["scripts", "devDependencies", "overrides"];
|
|
40
|
-
|
|
41
|
-
fieldsToRemove.forEach((field) => {
|
|
42
|
-
delete packageJson[field];
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Move some dependencies to peerDependencies
|
|
46
|
-
const peerDeps = {
|
|
47
|
-
react: packageJson.dependencies.react,
|
|
48
|
-
"react-dom": packageJson.dependencies["react-dom"],
|
|
49
|
-
next: packageJson.dependencies.next,
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
// Add peer dependencies
|
|
53
|
-
packageJson.peerDependencies = {
|
|
54
|
-
...peerDeps,
|
|
55
|
-
react: ">=18.0.0",
|
|
56
|
-
"react-dom": ">=18.0.0",
|
|
57
|
-
next: ">=13.0.0",
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
// Remove peer deps from dependencies
|
|
61
|
-
Object.keys(peerDeps).forEach((dep) => {
|
|
62
|
-
delete packageJson.dependencies[dep];
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Write the modified package.json to dist
|
|
66
|
-
fs.writeFileSync(path.resolve(destDir, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
67
|
-
|
|
68
|
-
// Copy README and AGENTS.md
|
|
69
|
-
if (fs.existsSync(path.resolve(__dirname, "../README.md"))) {
|
|
70
|
-
fs.copyFileSync(path.resolve(__dirname, "../README.md"), path.resolve(destDir, "README.md"));
|
|
71
|
-
}
|
|
72
|
-
if (fs.existsSync(path.resolve(__dirname, "../AGENTS.md"))) {
|
|
73
|
-
fs.copyFileSync(path.resolve(__dirname, "../AGENTS.md"), path.resolve(destDir, "AGENTS.md"));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Copy CLI scripts and agent templates for npm publish
|
|
77
|
-
const scriptsDir = path.resolve(destDir, "scripts");
|
|
78
|
-
fs.mkdirSync(scriptsDir, { recursive: true });
|
|
79
|
-
for (const script of ["init-agent.js", "validate-ai-code.js"]) {
|
|
80
|
-
fs.copyFileSync(
|
|
81
|
-
path.resolve(__dirname, script),
|
|
82
|
-
path.join(scriptsDir, script),
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
const agentSrc = path.resolve(__dirname, "../agent");
|
|
86
|
-
const agentDest = path.resolve(destDir, "agent");
|
|
87
|
-
if (fs.existsSync(agentSrc)) {
|
|
88
|
-
copyDir(agentSrc, agentDest);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Copy style files
|
|
92
|
-
console.log("Copying style files and other assets...");
|
|
93
|
-
copyDir(srcDir, destDir);
|
|
94
|
-
|
|
95
|
-
// Copy AI harness artifacts for npm publish
|
|
96
|
-
const aiDir = path.resolve(__dirname, "../ai");
|
|
97
|
-
const aiDest = path.resolve(destDir, "ai");
|
|
98
|
-
if (fs.existsSync(aiDir)) {
|
|
99
|
-
console.log("Copying AI artifacts...");
|
|
100
|
-
copyDir(aiDir, aiDest);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
console.log("Files copied successfully!");
|
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generates ai/spec.json — a compressed, machine-readable description of every
|
|
3
|
-
* exported component: own props (with types and defaults), shared prop mixins
|
|
4
|
-
* (encoded once), and token aliases.
|
|
5
|
-
*
|
|
6
|
-
* Compression strategy:
|
|
7
|
-
* - Props declared in src/interfaces.ts are grouped into "mixins" and emitted
|
|
8
|
-
* once; components only reference mixin names.
|
|
9
|
-
* - Props inherited from React/DOM typings (node_modules) are omitted.
|
|
10
|
-
* - Wrapper components (e.g. Row extends ComponentProps<typeof Flex>) get an
|
|
11
|
-
* "extends" reference instead of repeating the base component's props.
|
|
12
|
-
* - Each prop is a single string: "type", "type = default", or "!type" (required).
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const fs = require("fs");
|
|
16
|
-
const path = require("path");
|
|
17
|
-
|
|
18
|
-
const ROOT = path.join(__dirname, "..");
|
|
19
|
-
const SRC = path.join(ROOT, "src");
|
|
20
|
-
const OUT_DIR = path.join(ROOT, "ai");
|
|
21
|
-
const OUT_FILE = path.join(OUT_DIR, "spec.json");
|
|
22
|
-
|
|
23
|
-
const BARRELS = [
|
|
24
|
-
{ file: path.join(SRC, "components", "index.ts"), group: "components" },
|
|
25
|
-
{ file: path.join(SRC, "modules", "index.ts"), group: "modules" },
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
// Internal/low-level exports that AI should not use directly
|
|
29
|
-
const EXCLUDE = new Set([
|
|
30
|
-
"ServerFlex",
|
|
31
|
-
"ClientFlex",
|
|
32
|
-
"ServerGrid",
|
|
33
|
-
"ClientGrid",
|
|
34
|
-
"ElementType",
|
|
35
|
-
"FocusTrap",
|
|
36
|
-
"ScrollLock",
|
|
37
|
-
"ThemeInit",
|
|
38
|
-
"ArrowNavigation",
|
|
39
|
-
"Meta",
|
|
40
|
-
]);
|
|
41
|
-
|
|
42
|
-
// Token aliases worth defining once in the spec (read from types.ts source)
|
|
43
|
-
const TOKEN_ALIASES = [
|
|
44
|
-
"SpacingToken",
|
|
45
|
-
"StaticSpacingToken",
|
|
46
|
-
"ResponsiveSpacingToken",
|
|
47
|
-
"TShirtSizes",
|
|
48
|
-
"ColorScheme",
|
|
49
|
-
"ColorWeight",
|
|
50
|
-
"Colors",
|
|
51
|
-
"RadiusSize",
|
|
52
|
-
"ShadowSize",
|
|
53
|
-
"TextVariant",
|
|
54
|
-
"TextType",
|
|
55
|
-
"TextWeight",
|
|
56
|
-
"TextSize",
|
|
57
|
-
"gridSize",
|
|
58
|
-
"opacity",
|
|
59
|
-
"flex",
|
|
60
|
-
"CSSUnit",
|
|
61
|
-
];
|
|
62
|
-
|
|
63
|
-
function loadTsConfig(ts) {
|
|
64
|
-
const configPath = path.join(ROOT, "tsconfig.json");
|
|
65
|
-
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
66
|
-
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, ROOT);
|
|
67
|
-
return parsed.options;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function isInNodeModules(decl) {
|
|
71
|
-
return decl.getSourceFile().fileName.includes("node_modules");
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function normalize(p) {
|
|
75
|
-
return p.replace(/\\/g, "/");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** Strip quotes from string literal default values */
|
|
79
|
-
function cleanDefault(text) {
|
|
80
|
-
const t = text.trim();
|
|
81
|
-
if (/^["'].*["']$/.test(t)) return t.slice(1, -1);
|
|
82
|
-
return t;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** Compact a type-node source text: collapse whitespace, strip leading pipe */
|
|
86
|
-
function typeText(node) {
|
|
87
|
-
if (!node) return "unknown";
|
|
88
|
-
return node
|
|
89
|
-
.getText()
|
|
90
|
-
.replace(/\s*\n\s*/g, " ")
|
|
91
|
-
.replace(/\s{2,}/g, " ")
|
|
92
|
-
.replace(/^\|\s*/, "");
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async function main() {
|
|
96
|
-
const ts = await import("typescript");
|
|
97
|
-
const options = loadTsConfig(ts);
|
|
98
|
-
const rootNames = BARRELS.map((b) => b.file).filter(fs.existsSync);
|
|
99
|
-
const program = ts.createProgram(rootNames, options);
|
|
100
|
-
const checker = program.getTypeChecker();
|
|
101
|
-
|
|
102
|
-
const interfacesFile = normalize(path.join(SRC, "interfaces.ts"));
|
|
103
|
-
|
|
104
|
-
const mixinsUsed = new Map(); // mixinName -> Map<propName, propString>
|
|
105
|
-
const components = {};
|
|
106
|
-
const warnings = [];
|
|
107
|
-
|
|
108
|
-
/** Resolve the function node (arrow/function expr) implementing a component */
|
|
109
|
-
function getComponentFunction(decl) {
|
|
110
|
-
if (ts.isFunctionDeclaration(decl)) return decl;
|
|
111
|
-
if (ts.isVariableDeclaration(decl) && decl.initializer) {
|
|
112
|
-
let init = decl.initializer;
|
|
113
|
-
// unwrap forwardRef(...) / memo(forwardRef(...))
|
|
114
|
-
while (ts.isCallExpression(init)) {
|
|
115
|
-
const arg = init.arguments[0];
|
|
116
|
-
if (!arg) return undefined;
|
|
117
|
-
init = arg;
|
|
118
|
-
}
|
|
119
|
-
if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) return init;
|
|
120
|
-
}
|
|
121
|
-
return undefined;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** Extract destructuring defaults from a component function's first param */
|
|
125
|
-
function getDefaults(fn) {
|
|
126
|
-
const defaults = {};
|
|
127
|
-
if (!fn || !fn.parameters.length) return defaults;
|
|
128
|
-
const param = fn.parameters[0];
|
|
129
|
-
if (!ts.isObjectBindingPattern(param.name)) return defaults;
|
|
130
|
-
for (const el of param.name.elements) {
|
|
131
|
-
if (el.initializer && ts.isIdentifier(el.propertyName ?? el.name)) {
|
|
132
|
-
const key = (el.propertyName ?? el.name).getText();
|
|
133
|
-
defaults[key] = cleanDefault(el.initializer.getText());
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return defaults;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/** Get the props type for a component declaration */
|
|
140
|
-
function getPropsType(decl) {
|
|
141
|
-
// forwardRef<Ref, Props>(...)
|
|
142
|
-
if (ts.isVariableDeclaration(decl) && decl.initializer && ts.isCallExpression(decl.initializer)) {
|
|
143
|
-
const call = decl.initializer;
|
|
144
|
-
if (call.typeArguments && call.typeArguments.length >= 2) {
|
|
145
|
-
return checker.getTypeFromTypeNode(call.typeArguments[1]);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// const X: React.FC<Props> = ...
|
|
149
|
-
if (ts.isVariableDeclaration(decl) && decl.type && ts.isTypeReferenceNode(decl.type)) {
|
|
150
|
-
const typeName = decl.type.typeName.getText();
|
|
151
|
-
if (
|
|
152
|
-
/(^|\.)(FC|FunctionComponent)$/.test(typeName) &&
|
|
153
|
-
decl.type.typeArguments &&
|
|
154
|
-
decl.type.typeArguments.length >= 1
|
|
155
|
-
) {
|
|
156
|
-
return checker.getTypeFromTypeNode(decl.type.typeArguments[0]);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const fn = getComponentFunction(decl);
|
|
160
|
-
if (fn && fn.parameters.length && fn.parameters[0].type) {
|
|
161
|
-
return checker.getTypeFromTypeNode(fn.parameters[0].type);
|
|
162
|
-
}
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/** Build the prop string: "type", "type = default", "!type" (required) */
|
|
167
|
-
function propString(propSymbol, decl, defaults) {
|
|
168
|
-
const name = propSymbol.getName();
|
|
169
|
-
let type = "unknown";
|
|
170
|
-
if (
|
|
171
|
-
(ts.isPropertySignature(decl) || ts.isPropertyDeclaration(decl)) &&
|
|
172
|
-
decl.type
|
|
173
|
-
) {
|
|
174
|
-
type = typeText(decl.type);
|
|
175
|
-
} else {
|
|
176
|
-
type = checker.typeToString(checker.getTypeOfSymbol(propSymbol));
|
|
177
|
-
}
|
|
178
|
-
const optional = (propSymbol.flags & ts.SymbolFlags.Optional) !== 0;
|
|
179
|
-
let out = optional ? type : `!${type}`;
|
|
180
|
-
if (defaults && defaults[name] !== undefined) {
|
|
181
|
-
out += ` = ${defaults[name]}`;
|
|
182
|
-
}
|
|
183
|
-
return out;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function processExport(name, symbol, group) {
|
|
187
|
-
if (EXCLUDE.has(name)) return;
|
|
188
|
-
if (!/^[A-Z]/.test(name)) return; // components only
|
|
189
|
-
|
|
190
|
-
let target = symbol;
|
|
191
|
-
if (target.flags & ts.SymbolFlags.Alias) {
|
|
192
|
-
target = checker.getAliasedSymbol(target);
|
|
193
|
-
}
|
|
194
|
-
const decl = target.valueDeclaration ?? (target.declarations && target.declarations[0]);
|
|
195
|
-
if (!decl) return;
|
|
196
|
-
if (!ts.isVariableDeclaration(decl) && !ts.isFunctionDeclaration(decl)) return;
|
|
197
|
-
|
|
198
|
-
const propsType = getPropsType(decl);
|
|
199
|
-
if (!propsType) {
|
|
200
|
-
warnings.push(`No props type resolved for ${name}; skipped`);
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// For union props (e.g. ButtonProps | AnchorProps) merge member properties
|
|
205
|
-
const typesToScan = propsType.isUnion() ? propsType.types : [propsType];
|
|
206
|
-
const seen = new Map(); // propName -> symbol
|
|
207
|
-
for (const t of typesToScan) {
|
|
208
|
-
for (const p of checker.getPropertiesOfType(t)) {
|
|
209
|
-
if (!seen.has(p.getName())) seen.set(p.getName(), p);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const fn = getComponentFunction(decl);
|
|
214
|
-
const defaults = getDefaults(fn);
|
|
215
|
-
|
|
216
|
-
const ownFile = normalize(decl.getSourceFile().fileName);
|
|
217
|
-
const mixins = new Set();
|
|
218
|
-
const extendsComponents = new Set();
|
|
219
|
-
const props = {};
|
|
220
|
-
|
|
221
|
-
for (const [propName, propSym] of seen) {
|
|
222
|
-
const pDecl = propSym.valueDeclaration ?? (propSym.declarations && propSym.declarations[0]);
|
|
223
|
-
if (!pDecl) continue;
|
|
224
|
-
if (isInNodeModules(pDecl)) continue; // React/DOM inherited noise
|
|
225
|
-
|
|
226
|
-
const declFile = normalize(pDecl.getSourceFile().fileName);
|
|
227
|
-
|
|
228
|
-
if (declFile === interfacesFile) {
|
|
229
|
-
// shared mixin prop: attribute to parent interface, emit once globally
|
|
230
|
-
const parent = pDecl.parent && ts.isInterfaceDeclaration(pDecl.parent) ? pDecl.parent.name.getText() : null;
|
|
231
|
-
if (parent) {
|
|
232
|
-
mixins.add(parent);
|
|
233
|
-
if (!mixinsUsed.has(parent)) mixinsUsed.set(parent, new Map());
|
|
234
|
-
if (!mixinsUsed.get(parent).has(propName)) {
|
|
235
|
-
mixinsUsed.get(parent).set(propName, propString(propSym, pDecl, {}));
|
|
236
|
-
}
|
|
237
|
-
// keep component-level default override visible
|
|
238
|
-
if (defaults[propName] !== undefined) {
|
|
239
|
-
props[propName] = propString(propSym, pDecl, defaults);
|
|
240
|
-
}
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (declFile !== ownFile && declFile.includes("/src/")) {
|
|
246
|
-
// declared in another component's file → wrapper relationship
|
|
247
|
-
const base = path.basename(declFile).replace(/\.(tsx|ts)$/, "");
|
|
248
|
-
extendsComponents.add(base);
|
|
249
|
-
continue;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
props[propName] = propString(propSym, pDecl, defaults);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
const entry = { group };
|
|
256
|
-
if (extendsComponents.size) entry.extends = [...extendsComponents];
|
|
257
|
-
if (mixins.size) entry.mixins = [...mixins].sort();
|
|
258
|
-
if (Object.keys(props).length) entry.props = props;
|
|
259
|
-
components[name] = entry;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
for (const barrel of BARRELS) {
|
|
263
|
-
if (!fs.existsSync(barrel.file)) continue;
|
|
264
|
-
const sf = program.getSourceFile(barrel.file);
|
|
265
|
-
if (!sf) continue;
|
|
266
|
-
const moduleSymbol = checker.getSymbolAtLocation(sf);
|
|
267
|
-
if (!moduleSymbol) continue;
|
|
268
|
-
for (const exp of checker.getExportsOfModule(moduleSymbol)) {
|
|
269
|
-
processExport(exp.getName(), exp, barrel.group);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// Emit interfaces.ts types referenced by name in prop strings (e.g. FlexBreakpointProps)
|
|
274
|
-
const interfacesSf = program.getSourceFile(path.join(SRC, "interfaces.ts"));
|
|
275
|
-
if (interfacesSf) {
|
|
276
|
-
const declared = new Map();
|
|
277
|
-
interfacesSf.forEachChild((node) => {
|
|
278
|
-
if (ts.isInterfaceDeclaration(node)) declared.set(node.name.getText(), node);
|
|
279
|
-
});
|
|
280
|
-
const allPropStrings = [];
|
|
281
|
-
for (const c of Object.values(components)) {
|
|
282
|
-
if (c.props) allPropStrings.push(...Object.values(c.props));
|
|
283
|
-
}
|
|
284
|
-
for (const m of mixinsUsed.values()) {
|
|
285
|
-
allPropStrings.push(...m.values());
|
|
286
|
-
}
|
|
287
|
-
const blob = allPropStrings.join("\n");
|
|
288
|
-
for (const [ifaceName, node] of declared) {
|
|
289
|
-
if (mixinsUsed.has(ifaceName)) continue;
|
|
290
|
-
if (!new RegExp(`\\b${ifaceName}\\b`).test(blob)) continue;
|
|
291
|
-
const propsMap = new Map();
|
|
292
|
-
for (const member of node.members) {
|
|
293
|
-
if (!ts.isPropertySignature(member) || !member.name) continue;
|
|
294
|
-
const pName = member.name.getText();
|
|
295
|
-
const optional = !!member.questionToken;
|
|
296
|
-
const t = typeText(member.type);
|
|
297
|
-
propsMap.set(pName, optional ? t : `!${t}`);
|
|
298
|
-
}
|
|
299
|
-
mixinsUsed.set(ifaceName, propsMap);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Token aliases from types.ts (compact source text)
|
|
304
|
-
const tokens = {};
|
|
305
|
-
const typesSf = program.getSourceFile(path.join(SRC, "types.ts"));
|
|
306
|
-
if (typesSf) {
|
|
307
|
-
typesSf.forEachChild((node) => {
|
|
308
|
-
if (ts.isTypeAliasDeclaration(node) && TOKEN_ALIASES.includes(node.name.getText())) {
|
|
309
|
-
tokens[node.name.getText()] = typeText(node.type);
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// IconName erases to string (Record<string, IconType>) — emit actual keys from icons.ts
|
|
315
|
-
const iconsSf = program.getSourceFile(path.join(SRC, "icons.ts"));
|
|
316
|
-
if (iconsSf) {
|
|
317
|
-
iconsSf.forEachChild((node) => {
|
|
318
|
-
if (!ts.isVariableStatement(node)) return;
|
|
319
|
-
for (const decl of node.declarationList.declarations) {
|
|
320
|
-
if (decl.name.getText() !== "iconLibrary" || !decl.initializer) continue;
|
|
321
|
-
if (!ts.isObjectLiteralExpression(decl.initializer)) continue;
|
|
322
|
-
const names = decl.initializer.properties
|
|
323
|
-
.map((p) => (p.name ? p.name.getText() : null))
|
|
324
|
-
.filter(Boolean);
|
|
325
|
-
tokens.IconName = names.map((n) => `"${n}"`).join(" | ");
|
|
326
|
-
}
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
const mixins = {};
|
|
331
|
-
for (const [name, propsMap] of [...mixinsUsed.entries()].sort()) {
|
|
332
|
-
mixins[name] = Object.fromEntries(propsMap);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8"));
|
|
336
|
-
const spec = {
|
|
337
|
-
name: pkg.name,
|
|
338
|
-
version: pkg.version,
|
|
339
|
-
generated: new Date().toISOString().split("T")[0],
|
|
340
|
-
format:
|
|
341
|
-
"props are 'type', 'type = default', or '!type' (required). Components with 'mixins' also accept all props of those mixins. 'extends' means all props of that component are accepted.",
|
|
342
|
-
tokens,
|
|
343
|
-
mixins,
|
|
344
|
-
components,
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
fs.mkdirSync(OUT_DIR, { recursive: true });
|
|
348
|
-
fs.writeFileSync(OUT_FILE, JSON.stringify(spec, null, 1));
|
|
349
|
-
|
|
350
|
-
emitArtifacts(spec, pkg.version);
|
|
351
|
-
|
|
352
|
-
const count = Object.keys(components).length;
|
|
353
|
-
console.log(`AI spec generated: ${count} components -> ${path.relative(ROOT, OUT_FILE)}`);
|
|
354
|
-
if (warnings.length) {
|
|
355
|
-
console.log(`Warnings (${warnings.length}):`);
|
|
356
|
-
for (const w of warnings) console.log(` - ${w}`);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/** Post-process Row/Column and emit sliced agent artifacts */
|
|
361
|
-
function emitArtifacts(spec, version) {
|
|
362
|
-
const shorthands = {
|
|
363
|
-
fill: { replaces: "fillWidth fillHeight", on: ["Row", "Column", "Flex", "Grid"] },
|
|
364
|
-
fit: { replaces: "fitWidth fitHeight", on: ["Row", "Column", "Flex", "Grid"] },
|
|
365
|
-
center: { replaces: 'horizontal="center" vertical="center"', on: ["Row", "Column", "Flex"] },
|
|
366
|
-
layout: {
|
|
367
|
-
Column: { preferOver: 'Flex direction="column"' },
|
|
368
|
-
Row: { preferOver: 'Flex direction="row"' },
|
|
369
|
-
Flex: { useWhen: "direction changes at breakpoints only" },
|
|
370
|
-
},
|
|
371
|
-
};
|
|
372
|
-
|
|
373
|
-
if (spec.components.Row) {
|
|
374
|
-
spec.components.Row.preset = { direction: "row" };
|
|
375
|
-
spec.components.Row.preferOver = 'Flex with direction="row"';
|
|
376
|
-
}
|
|
377
|
-
if (spec.components.Column) {
|
|
378
|
-
spec.components.Column.preset = { direction: "column" };
|
|
379
|
-
spec.components.Column.preferOver = 'Flex with direction="column"';
|
|
380
|
-
}
|
|
381
|
-
spec.shorthands = shorthands;
|
|
382
|
-
|
|
383
|
-
fs.writeFileSync(OUT_FILE, JSON.stringify(spec, null, 1));
|
|
384
|
-
|
|
385
|
-
const seedPath = path.join(OUT_DIR, "catalog.seed.json");
|
|
386
|
-
const seed = fs.existsSync(seedPath)
|
|
387
|
-
? JSON.parse(fs.readFileSync(seedPath, "utf8"))
|
|
388
|
-
: {};
|
|
389
|
-
|
|
390
|
-
const catalog = { version, generated: spec.generated, components: {} };
|
|
391
|
-
for (const [name, entry] of Object.entries(spec.components)) {
|
|
392
|
-
const meta = seed[name] || {};
|
|
393
|
-
catalog.components[name] = {
|
|
394
|
-
group: entry.group,
|
|
395
|
-
extends: entry.extends,
|
|
396
|
-
purpose: meta.purpose || `${name} component`,
|
|
397
|
-
tags: meta.tags || [entry.group],
|
|
398
|
-
...(meta.avoid ? { avoid: meta.avoid } : {}),
|
|
399
|
-
...(meta.preferOver ? { preferOver: meta.preferOver } : {}),
|
|
400
|
-
...(meta.pairsWith ? { pairsWith: meta.pairsWith } : {}),
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
fs.writeFileSync(path.join(OUT_DIR, "catalog.json"), JSON.stringify(catalog, null, 1));
|
|
404
|
-
|
|
405
|
-
const componentsDir = path.join(OUT_DIR, "components");
|
|
406
|
-
fs.mkdirSync(componentsDir, { recursive: true });
|
|
407
|
-
for (const [name, entry] of Object.entries(spec.components)) {
|
|
408
|
-
const slice = {
|
|
409
|
-
name,
|
|
410
|
-
...entry,
|
|
411
|
-
mixinsRef: entry.mixins || [],
|
|
412
|
-
tokensRef: Object.keys(entry.mixins || []).length ? "see spec.json mixins" : undefined,
|
|
413
|
-
};
|
|
414
|
-
if (slice.mixins) {
|
|
415
|
-
slice.resolvedMixins = {};
|
|
416
|
-
for (const mixin of slice.mixins) {
|
|
417
|
-
if (spec.mixins[mixin]) slice.resolvedMixins[mixin] = spec.mixins[mixin];
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
fs.writeFileSync(path.join(componentsDir, `${name}.json`), JSON.stringify(slice, null, 1));
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
const manifest = {
|
|
424
|
-
version,
|
|
425
|
-
generated: spec.generated,
|
|
426
|
-
files: {
|
|
427
|
-
spec: "spec.json",
|
|
428
|
-
catalog: "catalog.json",
|
|
429
|
-
rules: "rules.compact.md",
|
|
430
|
-
rulesFull: "rules.md",
|
|
431
|
-
recipes: "recipes.md",
|
|
432
|
-
gotchas: "gotchas.json",
|
|
433
|
-
tasks: "tasks/index.json",
|
|
434
|
-
examples: "examples/",
|
|
435
|
-
blocks: "examples/blocks/manifest.json",
|
|
436
|
-
components: "components/",
|
|
437
|
-
},
|
|
438
|
-
bootstrap: ["rules.compact.md", "catalog.json"],
|
|
439
|
-
resolve: "tasks/index.json",
|
|
440
|
-
};
|
|
441
|
-
fs.writeFileSync(path.join(OUT_DIR, "manifest.json"), JSON.stringify(manifest, null, 1));
|
|
442
|
-
|
|
443
|
-
syncDocsPublic();
|
|
444
|
-
console.log(`AI artifacts: catalog + ${Object.keys(spec.components).length} component slices`);
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
function syncDocsPublic() {
|
|
448
|
-
const docsAi = path.join(ROOT, "../../apps/docs/public/ai");
|
|
449
|
-
if (!fs.existsSync(path.dirname(docsAi))) return;
|
|
450
|
-
copyDir(OUT_DIR, docsAi);
|
|
451
|
-
console.log(`Synced AI artifacts -> ${path.relative(ROOT, docsAi)}`);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
function copyDir(src, dest) {
|
|
455
|
-
if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
|
|
456
|
-
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
457
|
-
const srcPath = path.join(src, entry.name);
|
|
458
|
-
const destPath = path.join(dest, entry.name);
|
|
459
|
-
if (entry.isDirectory()) copyDir(srcPath, destPath);
|
|
460
|
-
else fs.copyFileSync(srcPath, destPath);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
main().catch((e) => { console.error(e); process.exit(1); });
|