diff --git a/.gitignore b/.gitignore
index 8b3285e00..a409e24fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,4 +41,6 @@ docs/content/docs/components/*.md
coverage
.nyc_output
-cypress/screenshots
\ No newline at end of file
+cypress/screenshots
+
+.tmp-screenshots
diff --git a/components.d.ts b/components.d.ts
index ae3256f80..2f855fa3d 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -62,6 +62,7 @@ declare module 'vue' {
FormLabel: typeof import('./src/components/FormLabel.vue')['default']
FrappeUIProvider: typeof import('./src/components/Provider/FrappeUIProvider.vue')['default']
FunnelChart: typeof import('./src/components/Charts/FunnelChart.vue')['default']
+ Icon: typeof import('./src/components/Icon/Icon.vue')['default']
IframeNodeView: typeof import('./src/components/TextEditor/extensions/iframe/IframeNodeView.vue')['default']
ImageGroupNodeView: typeof import('./src/components/TextEditor/extensions/image-group/ImageGroupNodeView.vue')['default']
ImageGroupUploadDialog: typeof import('./src/components/TextEditor/extensions/image-group/ImageGroupUploadDialog.vue')['default']
@@ -109,6 +110,7 @@ declare module 'vue' {
OptionIcon: typeof import('./src/components/shared/selection/OptionIcon.vue')['default']
Password: typeof import('./src/components/Password/Password.vue')['default']
PickerShell: typeof import('./src/components/shared/picker/PickerShell.vue')['default']
+ Pill: typeof import('./src/components/Pill/Pill.vue')['default']
Popover: typeof import('./src/components/Popover/Popover.vue')['default']
Progress: typeof import('./src/components/Progress/Progress.vue')['default']
Rating: typeof import('./src/components/Rating/Rating.vue')['default']
@@ -129,7 +131,6 @@ declare module 'vue' {
SuggestionList: typeof import('./src/components/TextEditor/extensions/suggestion/SuggestionList.vue')['default']
Switch: typeof import('./src/components/Switch/Switch.vue')['default']
TabButtons: typeof import('./src/components/TabButtons/TabButtons.vue')['default']
- 'TabButtons.story': typeof import('./src/components/TabButtons/TabButtons.story.vue')['default']
Tabs: typeof import('./src/components/Tabs/Tabs.vue')['default']
Textarea: typeof import('./src/components/Textarea/Textarea.vue')['default']
TextEditor: typeof import('./src/components/TextEditor/TextEditor.vue')['default']
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index 254455a8b..8be13d9c3 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -60,7 +60,10 @@ export default defineConfig({
dark: 'tokyo-night',
light: 'github-light',
},
- codeTransformers: [toClass],
+ // transformerStyleToClass flushes its CSS only at buildEnd, so in dev
+ // the generated shiki.css stays empty and code blocks lose colors —
+ // skip it in dev and let shiki emit inline --shiki-light/dark styles.
+ codeTransformers: isDev ? [] : [toClass],
config(md) {
md.use(componentTransformer)
},
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
index 5d47ce4bf..d56e5e882 100644
--- a/docs/.vitepress/theme/index.ts
+++ b/docs/.vitepress/theme/index.ts
@@ -1,8 +1,33 @@
import type { Theme } from 'vitepress'
-import "../../../src/fonts/Inter/inter.css"
-import "../../css/style.css"
-import "../../css/shiki.css"
+import '../../../src/fonts/Inter/inter.css'
+import '../../css/style.css'
+import '../../css/shiki.css'
import Demo from '../../components/Docs/Demo.vue'
+import ButtonBuilder from '../../components/Docs/ButtonBuilder.vue'
+import BadgeBuilder from '../../components/Docs/BadgeBuilder.vue'
+import PillBuilder from '../../components/Docs/PillBuilder.vue'
+import TabButtonsBuilder from '../../components/Docs/TabButtonsBuilder.vue'
+import AlertBuilder from '../../components/Docs/AlertBuilder.vue'
+import AvatarBuilder from '../../components/Docs/AvatarBuilder.vue'
+import BreadcrumbsBuilder from '../../components/Docs/BreadcrumbsBuilder.vue'
+import CheckboxBuilder from '../../components/Docs/CheckboxBuilder.vue'
+import ComboboxBuilder from '../../components/Docs/ComboboxBuilder.vue'
+import DialogBuilder from '../../components/Docs/DialogBuilder.vue'
+import DividerBuilder from '../../components/Docs/DividerBuilder.vue'
+import DropdownBuilder from '../../components/Docs/DropdownBuilder.vue'
+import ErrorMessageBuilder from '../../components/Docs/ErrorMessageBuilder.vue'
+import FormControlBuilder from '../../components/Docs/FormControlBuilder.vue'
+import MultiSelectBuilder from '../../components/Docs/MultiSelectBuilder.vue'
+import PasswordBuilder from '../../components/Docs/PasswordBuilder.vue'
+import ProgressBuilder from '../../components/Docs/ProgressBuilder.vue'
+import RatingBuilder from '../../components/Docs/RatingBuilder.vue'
+import SelectBuilder from '../../components/Docs/SelectBuilder.vue'
+import SliderBuilder from '../../components/Docs/SliderBuilder.vue'
+import SwitchBuilder from '../../components/Docs/SwitchBuilder.vue'
+import TabsBuilder from '../../components/Docs/TabsBuilder.vue'
+import TextInputBuilder from '../../components/Docs/TextInputBuilder.vue'
+import TextareaBuilder from '../../components/Docs/TextareaBuilder.vue'
+import TooltipBuilder from '../../components/Docs/TooltipBuilder.vue'
import Layout from '../../components/Layout.vue'
if (process.env.NODE_ENV === 'production') {
@@ -10,8 +35,33 @@ if (process.env.NODE_ENV === 'production') {
}
export default {
- Layout,
+ Layout,
enhanceApp({ app, router, siteData }) {
app.component('ComponentPreview', Demo)
+ app.component('ButtonBuilder', ButtonBuilder)
+ app.component('BadgeBuilder', BadgeBuilder)
+ app.component('PillBuilder', PillBuilder)
+ app.component('TabButtonsBuilder', TabButtonsBuilder)
+ app.component('AlertBuilder', AlertBuilder)
+ app.component('AvatarBuilder', AvatarBuilder)
+ app.component('BreadcrumbsBuilder', BreadcrumbsBuilder)
+ app.component('CheckboxBuilder', CheckboxBuilder)
+ app.component('ComboboxBuilder', ComboboxBuilder)
+ app.component('DialogBuilder', DialogBuilder)
+ app.component('DividerBuilder', DividerBuilder)
+ app.component('DropdownBuilder', DropdownBuilder)
+ app.component('ErrorMessageBuilder', ErrorMessageBuilder)
+ app.component('FormControlBuilder', FormControlBuilder)
+ app.component('MultiSelectBuilder', MultiSelectBuilder)
+ app.component('PasswordBuilder', PasswordBuilder)
+ app.component('ProgressBuilder', ProgressBuilder)
+ app.component('RatingBuilder', RatingBuilder)
+ app.component('SelectBuilder', SelectBuilder)
+ app.component('SliderBuilder', SliderBuilder)
+ app.component('SwitchBuilder', SwitchBuilder)
+ app.component('TabsBuilder', TabsBuilder)
+ app.component('TextInputBuilder', TextInputBuilder)
+ app.component('TextareaBuilder', TextareaBuilder)
+ app.component('TooltipBuilder', TooltipBuilder)
},
} satisfies Theme
diff --git a/docs/components/Docs/AlertBuilder.vue b/docs/components/Docs/AlertBuilder.vue
new file mode 100644
index 000000000..f54e27897
--- /dev/null
+++ b/docs/components/Docs/AlertBuilder.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+ {{ generatedCode }}