@eslamdevui/ui 3.2.0-beta.2 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/.nuxt/ui/auth-form.ts +20 -0
  2. package/.nuxt/ui/banner.ts +105 -0
  3. package/.nuxt/ui/blog-post.ts +140 -0
  4. package/.nuxt/ui/blog-posts.ts +14 -0
  5. package/.nuxt/ui/changelog-version.ts +41 -0
  6. package/.nuxt/ui/changelog-versions.ts +8 -0
  7. package/.nuxt/ui/chat-palette.ts +8 -0
  8. package/.nuxt/ui/content/content-navigation.ts +6 -4
  9. package/.nuxt/ui/content-navigation.ts +6 -4
  10. package/.nuxt/ui/footer-columns.ts +28 -0
  11. package/.nuxt/ui/footer.ts +11 -0
  12. package/.nuxt/ui/header.ts +30 -0
  13. package/.nuxt/ui/index.ts +32 -1
  14. package/.nuxt/ui/main.ts +3 -0
  15. package/.nuxt/ui/page-accordion.ts +7 -0
  16. package/.nuxt/ui/page-anchors.ts +30 -0
  17. package/.nuxt/ui/page-aside.ts +10 -0
  18. package/.nuxt/ui/page-body.ts +3 -0
  19. package/.nuxt/ui/page-card.ts +276 -0
  20. package/.nuxt/ui/page-columns.ts +3 -0
  21. package/.nuxt/ui/page-cta.ts +72 -0
  22. package/.nuxt/ui/page-feature.ts +31 -0
  23. package/.nuxt/ui/page-grid.ts +3 -0
  24. package/.nuxt/ui/page-header.ts +18 -0
  25. package/.nuxt/ui/page-hero.ts +46 -0
  26. package/.nuxt/ui/page-links.ts +25 -0
  27. package/.nuxt/ui/page-list.ts +8 -0
  28. package/.nuxt/ui/page-logos.ts +15 -0
  29. package/.nuxt/ui/page-marquee.ts +66 -0
  30. package/.nuxt/ui/page-section.ts +88 -0
  31. package/.nuxt/ui/page.ts +32 -0
  32. package/.nuxt/ui/pricing-plan.ts +101 -0
  33. package/.nuxt/ui/pricing-plans.ts +27 -0
  34. package/.nuxt/ui/pricing-table.ts +51 -0
  35. package/.nuxt/ui/user.ts +106 -0
  36. package/LICENSE.md +9 -9
  37. package/README.md +147 -147
  38. package/cli/commands/make/component.mjs +95 -95
  39. package/cli/commands/make/index.mjs +14 -14
  40. package/cli/commands/make/locale.mjs +64 -64
  41. package/cli/index.mjs +15 -15
  42. package/cli/package.json +13 -13
  43. package/cli/templates.mjs +236 -236
  44. package/cli/utils.mjs +31 -31
  45. package/dist/module.json +1 -1
  46. package/dist/module.mjs +2 -2
  47. package/dist/runtime/components/Accordion.vue +36 -36
  48. package/dist/runtime/components/Alert.vue +46 -46
  49. package/dist/runtime/components/App.vue +10 -10
  50. package/dist/runtime/components/AuthForm.vue +195 -0
  51. package/dist/runtime/components/AuthForm.vue.d.ts +85 -0
  52. package/dist/runtime/components/Avatar.vue +27 -27
  53. package/dist/runtime/components/AvatarGroup.vue +4 -4
  54. package/dist/runtime/components/Badge.vue +16 -16
  55. package/dist/runtime/components/Banner.vue +113 -0
  56. package/dist/runtime/components/Banner.vue.d.ts +68 -0
  57. package/dist/runtime/components/BlogPost.vue +141 -0
  58. package/dist/runtime/components/BlogPost.vue.d.ts +59 -0
  59. package/dist/runtime/components/BlogPosts.vue +33 -0
  60. package/dist/runtime/components/BlogPosts.vue.d.ts +30 -0
  61. package/dist/runtime/components/Breadcrumb.vue +32 -32
  62. package/dist/runtime/components/Button.vue +28 -28
  63. package/dist/runtime/components/ButtonGroup.vue +3 -3
  64. package/dist/runtime/components/Calendar.vue +74 -74
  65. package/dist/runtime/components/Card.vue +13 -13
  66. package/dist/runtime/components/Carousel.vue +58 -58
  67. package/dist/runtime/components/ChangelogVersion.vue +165 -0
  68. package/dist/runtime/components/ChangelogVersion.vue.d.ts +58 -0
  69. package/dist/runtime/components/ChangelogVersions.vue +54 -0
  70. package/dist/runtime/components/ChangelogVersions.vue.d.ts +74 -0
  71. package/dist/runtime/components/ChatMessage.vue +35 -35
  72. package/dist/runtime/components/ChatMessages.vue +55 -55
  73. package/dist/runtime/components/ChatPalette.vue +32 -0
  74. package/dist/runtime/components/ChatPalette.vue.d.ts +24 -0
  75. package/dist/runtime/components/ChatPrompt.vue +26 -26
  76. package/dist/runtime/components/ChatPrompt.vue.d.ts +1 -1
  77. package/dist/runtime/components/ChatPromptSubmit.vue +10 -10
  78. package/dist/runtime/components/Checkbox.vue +33 -33
  79. package/dist/runtime/components/CheckboxGroup.vue +32 -32
  80. package/dist/runtime/components/Chip.vue +11 -11
  81. package/dist/runtime/components/Collapsible.vue +9 -9
  82. package/dist/runtime/components/ColorPicker.vue +30 -30
  83. package/dist/runtime/components/CommandPalette.vue +117 -117
  84. package/dist/runtime/components/CommandPalette.vue.d.ts +3 -3
  85. package/dist/runtime/components/Container.vue +3 -3
  86. package/dist/runtime/components/ContextMenu.vue +22 -22
  87. package/dist/runtime/components/ContextMenuContent.vue +105 -105
  88. package/dist/runtime/components/DashboardGroup.vue +3 -3
  89. package/dist/runtime/components/DashboardNavbar.vue +40 -40
  90. package/dist/runtime/components/DashboardPanel.vue +27 -27
  91. package/dist/runtime/components/DashboardResizeHandle.vue +7 -7
  92. package/dist/runtime/components/DashboardSearch.vue +20 -20
  93. package/dist/runtime/components/DashboardSearchButton.vue +43 -43
  94. package/dist/runtime/components/DashboardSidebar.vue +74 -74
  95. package/dist/runtime/components/DashboardSidebarCollapse.vue +7 -7
  96. package/dist/runtime/components/DashboardSidebarToggle.vue +7 -7
  97. package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +1 -1
  98. package/dist/runtime/components/Drawer.vue +55 -55
  99. package/dist/runtime/components/DropdownMenu.vue +24 -24
  100. package/dist/runtime/components/DropdownMenuContent.vue +107 -107
  101. package/dist/runtime/components/Error.vue +22 -22
  102. package/dist/runtime/components/Error.vue.d.ts +1 -1
  103. package/dist/runtime/components/Footer.vue +44 -0
  104. package/dist/runtime/components/Footer.vue.d.ts +29 -0
  105. package/dist/runtime/components/FooterColumns.vue +68 -0
  106. package/dist/runtime/components/FooterColumns.vue.d.ts +52 -0
  107. package/dist/runtime/components/Form.vue +8 -8
  108. package/dist/runtime/components/FormField.vue +37 -37
  109. package/dist/runtime/components/Header.vue +137 -0
  110. package/dist/runtime/components/Header.vue.d.ts +72 -0
  111. package/dist/runtime/components/Icon.vue +1 -1
  112. package/dist/runtime/components/Input.vue +34 -34
  113. package/dist/runtime/components/InputMenu.vue +163 -163
  114. package/dist/runtime/components/InputMenu.vue.d.ts +3 -3
  115. package/dist/runtime/components/InputNumber.vue +49 -49
  116. package/dist/runtime/components/InputTags.vue +55 -55
  117. package/dist/runtime/components/Kbd.vue +5 -5
  118. package/dist/runtime/components/Link.vue +14 -14
  119. package/dist/runtime/components/LinkBase.vue +8 -8
  120. package/dist/runtime/components/Main.vue +23 -0
  121. package/dist/runtime/components/Main.vue.d.ts +20 -0
  122. package/dist/runtime/components/Modal.vue +69 -69
  123. package/dist/runtime/components/NavigationMenu.vue +166 -166
  124. package/dist/runtime/components/OverlayProvider.vue +9 -9
  125. package/dist/runtime/components/Page.vue +37 -0
  126. package/dist/runtime/components/Page.vue.d.ts +25 -0
  127. package/dist/runtime/components/PageAccordion.vue +26 -0
  128. package/dist/runtime/components/PageAccordion.vue.d.ts +21 -0
  129. package/dist/runtime/components/PageAnchors.vue +50 -0
  130. package/dist/runtime/components/PageAnchors.vue.d.ts +42 -0
  131. package/dist/runtime/components/PageAside.vue +36 -0
  132. package/dist/runtime/components/PageAside.vue.d.ts +27 -0
  133. package/dist/runtime/components/PageBody.vue +23 -0
  134. package/dist/runtime/components/PageBody.vue.d.ts +18 -0
  135. package/dist/runtime/components/PageCTA.vue +58 -0
  136. package/dist/runtime/components/PageCTA.vue.d.ts +49 -0
  137. package/dist/runtime/components/PageCard.vue +121 -0
  138. package/dist/runtime/components/PageCard.vue.d.ts +71 -0
  139. package/dist/runtime/components/PageColumns.vue +23 -0
  140. package/dist/runtime/components/PageColumns.vue.d.ts +18 -0
  141. package/dist/runtime/components/PageFeature.vue +71 -0
  142. package/dist/runtime/components/PageFeature.vue.d.ts +43 -0
  143. package/dist/runtime/components/PageGrid.vue +23 -0
  144. package/dist/runtime/components/PageGrid.vue.d.ts +18 -0
  145. package/dist/runtime/components/PageHeader.vue +58 -0
  146. package/dist/runtime/components/PageHeader.vue.d.ts +35 -0
  147. package/dist/runtime/components/PageHero.vue +67 -0
  148. package/dist/runtime/components/PageHero.vue.d.ts +49 -0
  149. package/dist/runtime/components/PageLinks.vue +55 -0
  150. package/dist/runtime/components/PageLinks.vue.d.ts +44 -0
  151. package/dist/runtime/components/PageList.vue +24 -0
  152. package/dist/runtime/components/PageList.vue.d.ts +21 -0
  153. package/dist/runtime/components/PageLogos.vue +64 -0
  154. package/dist/runtime/components/PageLogos.vue.d.ts +32 -0
  155. package/dist/runtime/components/PageMarquee.vue +40 -0
  156. package/dist/runtime/components/PageMarquee.vue.d.ts +30 -0
  157. package/dist/runtime/components/PageSection.vue +88 -0
  158. package/dist/runtime/components/PageSection.vue.d.ts +64 -0
  159. package/dist/runtime/components/Pagination.vue +47 -47
  160. package/dist/runtime/components/PinInput.vue +20 -20
  161. package/dist/runtime/components/Popover.vue +17 -17
  162. package/dist/runtime/components/PricingPlan.vue +129 -0
  163. package/dist/runtime/components/PricingPlan.vue.d.ts +109 -0
  164. package/dist/runtime/components/PricingPlans.vue +45 -0
  165. package/dist/runtime/components/PricingPlans.vue.d.ts +41 -0
  166. package/dist/runtime/components/PricingTable.vue +235 -0
  167. package/dist/runtime/components/PricingTable.vue.d.ts +98 -0
  168. package/dist/runtime/components/Progress.vue +19 -19
  169. package/dist/runtime/components/RadioGroup.vue +43 -43
  170. package/dist/runtime/components/Select.vue +96 -96
  171. package/dist/runtime/components/SelectMenu.vue +130 -130
  172. package/dist/runtime/components/SelectMenu.vue.d.ts +3 -3
  173. package/dist/runtime/components/Separator.vue +15 -15
  174. package/dist/runtime/components/Skeleton.vue +10 -10
  175. package/dist/runtime/components/Slideover.vue +76 -76
  176. package/dist/runtime/components/Slider.vue +27 -27
  177. package/dist/runtime/components/Stepper.vue +51 -51
  178. package/dist/runtime/components/Switch.vue +33 -33
  179. package/dist/runtime/components/Table.vue +77 -77
  180. package/dist/runtime/components/Tabs.vue +38 -37
  181. package/dist/runtime/components/Textarea.vue +33 -33
  182. package/dist/runtime/components/Timeline.vue +38 -38
  183. package/dist/runtime/components/Toast.vue +69 -69
  184. package/dist/runtime/components/Toaster.vue +28 -28
  185. package/dist/runtime/components/Tooltip.vue +19 -19
  186. package/dist/runtime/components/Tree.vue +60 -60
  187. package/dist/runtime/components/User.vue +69 -0
  188. package/dist/runtime/components/User.vue.d.ts +46 -0
  189. package/dist/runtime/components/color-mode/ColorModeAvatar.vue +2 -2
  190. package/dist/runtime/components/color-mode/ColorModeButton.vue +16 -16
  191. package/dist/runtime/components/color-mode/ColorModeImage.vue +2 -2
  192. package/dist/runtime/components/color-mode/ColorModeSelect.vue +19 -19
  193. package/dist/runtime/components/color-mode/ColorModeSwitch.vue +19 -19
  194. package/dist/runtime/components/content/ContentNavigation.vue +109 -109
  195. package/dist/runtime/components/content/ContentSearch.vue +25 -25
  196. package/dist/runtime/components/content/ContentSearchButton.vue +38 -38
  197. package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +58 -12
  198. package/dist/runtime/components/content/ContentSurround.vue +31 -31
  199. package/dist/runtime/components/content/ContentSurround.vue.d.ts +52 -59
  200. package/dist/runtime/components/content/ContentToc.vue +88 -76
  201. package/dist/runtime/components/content/ContentToc.vue.d.ts +86 -88
  202. package/dist/runtime/components/locale/LocaleSelect.vue +20 -20
  203. package/dist/runtime/components/prose/A.vue +3 -3
  204. package/dist/runtime/components/prose/Accordion.vue +5 -5
  205. package/dist/runtime/components/prose/AccordionItem.vue +5 -5
  206. package/dist/runtime/components/prose/Badge.vue +3 -3
  207. package/dist/runtime/components/prose/Blockquote.vue +3 -3
  208. package/dist/runtime/components/prose/Callout.vue +27 -27
  209. package/dist/runtime/components/prose/Card.vue +43 -43
  210. package/dist/runtime/components/prose/CardGroup.vue +3 -3
  211. package/dist/runtime/components/prose/Code.vue +3 -3
  212. package/dist/runtime/components/prose/CodeCollapse.vue +16 -16
  213. package/dist/runtime/components/prose/CodeGroup.vue +15 -15
  214. package/dist/runtime/components/prose/CodeIcon.vue +1 -1
  215. package/dist/runtime/components/prose/CodePreview.vue +9 -9
  216. package/dist/runtime/components/prose/CodeTree.vue +61 -61
  217. package/dist/runtime/components/prose/Collapsible.vue +15 -15
  218. package/dist/runtime/components/prose/Em.vue +1 -1
  219. package/dist/runtime/components/prose/Field.vue +23 -23
  220. package/dist/runtime/components/prose/FieldGroup.vue +3 -3
  221. package/dist/runtime/components/prose/H1.vue +6 -6
  222. package/dist/runtime/components/prose/H2.vue +10 -10
  223. package/dist/runtime/components/prose/H3.vue +10 -10
  224. package/dist/runtime/components/prose/H4.vue +6 -6
  225. package/dist/runtime/components/prose/Hr.vue +1 -1
  226. package/dist/runtime/components/prose/Icon.vue +1 -1
  227. package/dist/runtime/components/prose/Img.vue +8 -8
  228. package/dist/runtime/components/prose/Kbd.vue +1 -1
  229. package/dist/runtime/components/prose/Li.vue +3 -3
  230. package/dist/runtime/components/prose/Ol.vue +3 -3
  231. package/dist/runtime/components/prose/P.vue +3 -3
  232. package/dist/runtime/components/prose/Pre.vue +20 -20
  233. package/dist/runtime/components/prose/Script.vue +3 -3
  234. package/dist/runtime/components/prose/Steps.vue +3 -3
  235. package/dist/runtime/components/prose/Strong.vue +3 -3
  236. package/dist/runtime/components/prose/Table.vue +5 -5
  237. package/dist/runtime/components/prose/Tabs.vue +14 -14
  238. package/dist/runtime/components/prose/TabsItem.vue +5 -5
  239. package/dist/runtime/components/prose/Tbody.vue +3 -3
  240. package/dist/runtime/components/prose/Td.vue +3 -3
  241. package/dist/runtime/components/prose/Th.vue +3 -3
  242. package/dist/runtime/components/prose/Thead.vue +3 -3
  243. package/dist/runtime/components/prose/Tr.vue +3 -3
  244. package/dist/runtime/components/prose/Ul.vue +3 -3
  245. package/dist/runtime/components/prose/callout/Caution.vue +3 -3
  246. package/dist/runtime/components/prose/callout/Note.vue +3 -3
  247. package/dist/runtime/components/prose/callout/Tip.vue +3 -3
  248. package/dist/runtime/components/prose/callout/Warning.vue +3 -3
  249. package/dist/runtime/inertia/components/Link.vue +12 -12
  250. package/dist/runtime/inertia/components/LinkBase.vue +15 -15
  251. package/dist/runtime/types/app.config.d.ts +6 -6
  252. package/dist/runtime/types/index.d.ts +33 -0
  253. package/dist/runtime/types/index.js +33 -0
  254. package/dist/runtime/vue/components/Icon.vue +1 -1
  255. package/dist/runtime/vue/components/Link.vue +31 -31
  256. package/dist/runtime/vue/components/color-mode/ColorModeButton.vue +7 -7
  257. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +7 -7
  258. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue +7 -7
  259. package/dist/shared/{ui.DQZ75GCP.mjs → ui.DErCA3YU.mjs} +1247 -50
  260. package/dist/unplugin.mjs +1 -1
  261. package/dist/vite.mjs +1 -1
  262. package/package.json +1 -1
  263. package/vue-plugin.d.ts +5 -5
  264. package/.nuxt/ui/prose.ts +0 -321
package/cli/templates.mjs CHANGED
@@ -1,236 +1,236 @@
1
- import { splitByCase, upperFirst, camelCase, kebabCase } from 'scule'
2
-
3
- const playground = ({ name, pro }) => {
4
- const upperName = splitByCase(name)
5
- .map(p => upperFirst(p))
6
- .join('')
7
- const kebabName = kebabCase(name)
8
-
9
- return {
10
- filename: `playground/app/pages/components/${kebabName}.vue`,
11
- contents: pro
12
- ? undefined
13
- : `
14
- <template>
15
- <div>
16
- <U${upperName} />
17
- </div>
18
- </template>
19
- `
20
- }
21
- }
22
-
23
- const component = ({ name, primitive, pro, prose, content }) => {
24
- const upperName = splitByCase(name)
25
- .map(p => upperFirst(p))
26
- .join('')
27
- const camelName = camelCase(name)
28
- const kebabName = kebabCase(name)
29
- const key = pro ? 'uiPro' : 'ui'
30
- const path = pro ? 'ui-pro' : 'ui'
31
-
32
- return {
33
- filename: `src/runtime/components/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${upperName}.vue`,
34
- contents: primitive
35
- ? `
36
- <script lang="ts">
37
- import type { AppConfig } from '@nuxt/schema'
38
- ${pro ? `import type { ComponentConfig } from '@eslamdevui/ui'` : ''}
39
- import theme from '#build/${path}/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}'
40
- ${!pro ? `import type { ComponentConfig } from '../types/utils'` : ''}
41
-
42
- type ${upperName} = ComponentConfig<typeof theme, AppConfig, ${upperName}${pro ? `, '${key}'` : ''}>
43
-
44
- export interface ${upperName}Props {
45
- /**
46
- * The element or component this component should render as.
47
- * @defaultValue 'div'
48
- */
49
- as?: any
50
- class?: any
51
- ui?: ${upperName}['slots']
52
- }
53
-
54
- export interface ${upperName}Slots {
55
- default(props?: {}): any
56
- }
57
- </script>
58
-
59
- <script setup lang="ts">
60
- import { computed } from 'vue'
61
- import { Primitive } from 'reka-ui'
62
- import { useAppConfig } from '#imports'
63
- import { tv } from '../utils/tv'
64
-
65
- const props = defineProps<${upperName}Props>()
66
- defineSlots<${upperName}Slots>()
67
-
68
- const appConfig = useAppConfig() as ${upperName}['AppConfig']
69
-
70
- const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.${pro ? 'uiPro' : 'ui'}?.${camelName} || {}) })())
71
- </script>
72
-
73
- <template>
74
- <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
75
- <slot />
76
- </Primitive>
77
- </template>
78
- `
79
- : `
80
- <script lang="ts">
81
- import type { ${upperName}RootProps, ${upperName}RootEmits } from 'reka-ui'
82
- import type { AppConfig } from '@nuxt/schema'
83
- ${pro ? `import type { ComponentConfig } from '@eslamdevui/ui'` : ''}
84
- import theme from '#build/${path}/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}'
85
- ${!pro ? `import type { ComponentConfig } from '../types/utils'` : ''}
86
-
87
- type ${upperName} = ComponentConfig<typeof theme, AppConfig, ${upperName}${pro ? `, '${key}'` : ''}>
88
-
89
- export interface ${upperName}Props extends Pick<${upperName}RootProps> {
90
- class?: any
91
- ui?: ${upperName}['slots']
92
- }
93
-
94
- export interface ${upperName}Emits extends ${upperName}RootEmits {}
95
-
96
- export interface ${upperName}Slots {}
97
- </script>
98
-
99
- <script setup lang="ts">
100
- import { computed } from 'vue'
101
- import { ${upperName}Root, useForwardPropsEmits } from 'reka-ui'
102
- import { reactivePick } from '@vueuse/core'
103
- import { useAppConfig } from '#imports'
104
- import { tv } from '../utils/tv'
105
-
106
- const props = defineProps<${upperName}Props>()
107
- const emits = defineEmits<${upperName}Emits>()
108
- const slots = defineSlots<${upperName}Slots>()
109
-
110
- const appConfig = useAppConfig() as ${upperName}['AppConfig']
111
-
112
- const rootProps = useForwardPropsEmits(reactivePick(props), emits)
113
-
114
- const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.${pro ? 'uiPro' : 'ui'}?.${camelName} || {}) })())
115
- </script>
116
-
117
- <template>
118
- <${upperName}Root v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })" />
119
- </template>
120
- `
121
- }
122
- }
123
-
124
- const theme = ({ name, prose, content }) => {
125
- const kebabName = kebabCase(name)
126
-
127
- return {
128
- filename: `src/theme/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}.ts`,
129
- contents: prose
130
- ? `
131
- export default {
132
- base: ''
133
- }
134
- `
135
- : `
136
- export default {
137
- slots: {
138
- root: ''
139
- }
140
- }
141
- `
142
- }
143
- }
144
-
145
- const test = ({ name, prose, content }) => {
146
- const upperName = splitByCase(name)
147
- .map(p => upperFirst(p))
148
- .join('')
149
-
150
- return {
151
- filename: `test/components/${content ? 'content/' : ''}${upperName}.spec.ts`,
152
- contents: prose
153
- ? undefined
154
- : `
155
- import { describe, it, expect } from 'vitest'
156
- import ${upperName}, { type ${upperName}Props, type ${upperName}Slots } from '../../${content ? '../' : ''}src/runtime/components/${content ? 'content/' : ''}${upperName}.vue'
157
- import ComponentRender from '../${content ? '../' : ''}component-render'
158
-
159
- describe('${upperName}', () => {
160
- it.each([
161
- // Props
162
- ['with as', { props: { as: 'section' } }],
163
- ['with class', { props: { class: '' } }],
164
- ['with ui', { props: { ui: {} } }],
165
- // Slots
166
- ['with default slot', { slots: { default: () => 'Default slot' } }]
167
- ])('renders %s correctly', async (nameOrHtml: string, options: { props?: ${upperName}Props, slots?: Partial<${upperName}Slots> }) => {
168
- const html = await ComponentRender(nameOrHtml, options, ${upperName})
169
- expect(html).toMatchSnapshot()
170
- })
171
- })
172
- `
173
- }
174
- }
175
-
176
- const docs = ({ name, pro, primitive }) => {
177
- const kebabName = kebabCase(name)
178
- const upperName = splitByCase(name)
179
- .map(p => upperFirst(p))
180
- .join('')
181
-
182
- return {
183
- filename: `docs/content/3.components/${kebabName}.md`,
184
- contents: `---
185
- title: ${upperName}
186
- description: ''${
187
- pro
188
- ? `
189
- module: ui-pro`
190
- : ''
191
- }
192
- links:${
193
- primitive
194
- ? ''
195
- : `
196
- - label: ${upperName}
197
- icon: i-custom-reka-ui
198
- to: https://reka-ui.com/docs/components/${kebabName}`
199
- }
200
- - label: GitHub
201
- icon: i-simple-icons-github
202
- to: https://github.com/MohamedEslam04/${pro ? 'ui-pro' : 'ui'}/tree/v3/src/runtime/components/${upperName}.vue
203
- ---
204
-
205
- ## Usage
206
-
207
- ## Examples
208
-
209
- ## API
210
-
211
- ### Props
212
-
213
- :component-props${pro ? '{pro}' : ''}
214
-
215
- ### Slots
216
-
217
- :component-slots${pro ? '{pro}' : ''}
218
-
219
- ### Emits
220
-
221
- :component-emits${pro ? '{pro}' : ''}
222
-
223
- ## Theme
224
-
225
- :component-theme${pro ? '{pro}' : ''}
226
- `
227
- }
228
- }
229
-
230
- export default {
231
- playground,
232
- component,
233
- theme,
234
- test,
235
- docs
236
- }
1
+ import { splitByCase, upperFirst, camelCase, kebabCase } from 'scule'
2
+
3
+ const playground = ({ name, pro }) => {
4
+ const upperName = splitByCase(name)
5
+ .map(p => upperFirst(p))
6
+ .join('')
7
+ const kebabName = kebabCase(name)
8
+
9
+ return {
10
+ filename: `playground/app/pages/components/${kebabName}.vue`,
11
+ contents: pro
12
+ ? undefined
13
+ : `
14
+ <template>
15
+ <div>
16
+ <U${upperName} />
17
+ </div>
18
+ </template>
19
+ `
20
+ }
21
+ }
22
+
23
+ const component = ({ name, primitive, pro, prose, content }) => {
24
+ const upperName = splitByCase(name)
25
+ .map(p => upperFirst(p))
26
+ .join('')
27
+ const camelName = camelCase(name)
28
+ const kebabName = kebabCase(name)
29
+ const key = pro ? 'uiPro' : 'ui'
30
+ const path = pro ? 'ui-pro' : 'ui'
31
+
32
+ return {
33
+ filename: `src/runtime/components/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${upperName}.vue`,
34
+ contents: primitive
35
+ ? `
36
+ <script lang="ts">
37
+ import type { AppConfig } from '@nuxt/schema'
38
+ ${pro ? `import type { ComponentConfig } from '@eslamdevui/ui'` : ''}
39
+ import theme from '#build/${path}/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}'
40
+ ${!pro ? `import type { ComponentConfig } from '../types/utils'` : ''}
41
+
42
+ type ${upperName} = ComponentConfig<typeof theme, AppConfig, ${upperName}${pro ? `, '${key}'` : ''}>
43
+
44
+ export interface ${upperName}Props {
45
+ /**
46
+ * The element or component this component should render as.
47
+ * @defaultValue 'div'
48
+ */
49
+ as?: any
50
+ class?: any
51
+ ui?: ${upperName}['slots']
52
+ }
53
+
54
+ export interface ${upperName}Slots {
55
+ default(props?: {}): any
56
+ }
57
+ </script>
58
+
59
+ <script setup lang="ts">
60
+ import { computed } from 'vue'
61
+ import { Primitive } from 'reka-ui'
62
+ import { useAppConfig } from '#imports'
63
+ import { tv } from '../utils/tv'
64
+
65
+ const props = defineProps<${upperName}Props>()
66
+ defineSlots<${upperName}Slots>()
67
+
68
+ const appConfig = useAppConfig() as ${upperName}['AppConfig']
69
+
70
+ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.${pro ? 'uiPro' : 'ui'}?.${camelName} || {}) })())
71
+ </script>
72
+
73
+ <template>
74
+ <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
75
+ <slot />
76
+ </Primitive>
77
+ </template>
78
+ `
79
+ : `
80
+ <script lang="ts">
81
+ import type { ${upperName}RootProps, ${upperName}RootEmits } from 'reka-ui'
82
+ import type { AppConfig } from '@nuxt/schema'
83
+ ${pro ? `import type { ComponentConfig } from '@eslamdevui/ui'` : ''}
84
+ import theme from '#build/${path}/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}'
85
+ ${!pro ? `import type { ComponentConfig } from '../types/utils'` : ''}
86
+
87
+ type ${upperName} = ComponentConfig<typeof theme, AppConfig, ${upperName}${pro ? `, '${key}'` : ''}>
88
+
89
+ export interface ${upperName}Props extends Pick<${upperName}RootProps> {
90
+ class?: any
91
+ ui?: ${upperName}['slots']
92
+ }
93
+
94
+ export interface ${upperName}Emits extends ${upperName}RootEmits {}
95
+
96
+ export interface ${upperName}Slots {}
97
+ </script>
98
+
99
+ <script setup lang="ts">
100
+ import { computed } from 'vue'
101
+ import { ${upperName}Root, useForwardPropsEmits } from 'reka-ui'
102
+ import { reactivePick } from '@vueuse/core'
103
+ import { useAppConfig } from '#imports'
104
+ import { tv } from '../utils/tv'
105
+
106
+ const props = defineProps<${upperName}Props>()
107
+ const emits = defineEmits<${upperName}Emits>()
108
+ const slots = defineSlots<${upperName}Slots>()
109
+
110
+ const appConfig = useAppConfig() as ${upperName}['AppConfig']
111
+
112
+ const rootProps = useForwardPropsEmits(reactivePick(props), emits)
113
+
114
+ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.${pro ? 'uiPro' : 'ui'}?.${camelName} || {}) })())
115
+ </script>
116
+
117
+ <template>
118
+ <${upperName}Root v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })" />
119
+ </template>
120
+ `
121
+ }
122
+ }
123
+
124
+ const theme = ({ name, prose, content }) => {
125
+ const kebabName = kebabCase(name)
126
+
127
+ return {
128
+ filename: `src/theme/${prose ? 'prose/' : ''}${content ? 'content/' : ''}${kebabName}.ts`,
129
+ contents: prose
130
+ ? `
131
+ export default {
132
+ base: ''
133
+ }
134
+ `
135
+ : `
136
+ export default {
137
+ slots: {
138
+ root: ''
139
+ }
140
+ }
141
+ `
142
+ }
143
+ }
144
+
145
+ const test = ({ name, prose, content }) => {
146
+ const upperName = splitByCase(name)
147
+ .map(p => upperFirst(p))
148
+ .join('')
149
+
150
+ return {
151
+ filename: `test/components/${content ? 'content/' : ''}${upperName}.spec.ts`,
152
+ contents: prose
153
+ ? undefined
154
+ : `
155
+ import { describe, it, expect } from 'vitest'
156
+ import ${upperName}, { type ${upperName}Props, type ${upperName}Slots } from '../../${content ? '../' : ''}src/runtime/components/${content ? 'content/' : ''}${upperName}.vue'
157
+ import ComponentRender from '../${content ? '../' : ''}component-render'
158
+
159
+ describe('${upperName}', () => {
160
+ it.each([
161
+ // Props
162
+ ['with as', { props: { as: 'section' } }],
163
+ ['with class', { props: { class: '' } }],
164
+ ['with ui', { props: { ui: {} } }],
165
+ // Slots
166
+ ['with default slot', { slots: { default: () => 'Default slot' } }]
167
+ ])('renders %s correctly', async (nameOrHtml: string, options: { props?: ${upperName}Props, slots?: Partial<${upperName}Slots> }) => {
168
+ const html = await ComponentRender(nameOrHtml, options, ${upperName})
169
+ expect(html).toMatchSnapshot()
170
+ })
171
+ })
172
+ `
173
+ }
174
+ }
175
+
176
+ const docs = ({ name, pro, primitive }) => {
177
+ const kebabName = kebabCase(name)
178
+ const upperName = splitByCase(name)
179
+ .map(p => upperFirst(p))
180
+ .join('')
181
+
182
+ return {
183
+ filename: `docs/content/3.components/${kebabName}.md`,
184
+ contents: `---
185
+ title: ${upperName}
186
+ description: ''${
187
+ pro
188
+ ? `
189
+ module: ui-pro`
190
+ : ''
191
+ }
192
+ links:${
193
+ primitive
194
+ ? ''
195
+ : `
196
+ - label: ${upperName}
197
+ icon: i-custom-reka-ui
198
+ to: https://reka-ui.com/docs/components/${kebabName}`
199
+ }
200
+ - label: GitHub
201
+ icon: i-simple-icons-github
202
+ to: https://github.com/MohamedEslam04/${pro ? 'ui-pro' : 'ui'}/tree/v3/src/runtime/components/${upperName}.vue
203
+ ---
204
+
205
+ ## Usage
206
+
207
+ ## Examples
208
+
209
+ ## API
210
+
211
+ ### Props
212
+
213
+ :component-props${pro ? '{pro}' : ''}
214
+
215
+ ### Slots
216
+
217
+ :component-slots${pro ? '{pro}' : ''}
218
+
219
+ ### Emits
220
+
221
+ :component-emits${pro ? '{pro}' : ''}
222
+
223
+ ## Theme
224
+
225
+ :component-theme${pro ? '{pro}' : ''}
226
+ `
227
+ }
228
+ }
229
+
230
+ export default {
231
+ playground,
232
+ component,
233
+ theme,
234
+ test,
235
+ docs
236
+ }
package/cli/utils.mjs CHANGED
@@ -1,31 +1,31 @@
1
- import { promises as fsp } from 'node:fs'
2
-
3
- export async function sortFile(path) {
4
- const file = await fsp.readFile(path, 'utf-8')
5
-
6
- const lines = file.trim().split('\n').sort()
7
-
8
- await fsp.writeFile(path, lines.join('\n') + '\n')
9
- }
10
-
11
- export async function appendFile(path, contents) {
12
- const file = await fsp.readFile(path, 'utf-8')
13
-
14
- if (!file.includes(contents)) {
15
- await fsp.writeFile(path, file.trim() + '\n' + contents + '\n')
16
- }
17
- }
18
-
19
- export function normalizeLocale(locale) {
20
- if (!locale) {
21
- return ''
22
- }
23
-
24
- if (locale.includes('_')) {
25
- return locale.split('_')
26
- .map((part, index) => index === 0 ? part.toLowerCase() : part.toUpperCase())
27
- .join('-')
28
- }
29
-
30
- return locale.toLowerCase()
31
- }
1
+ import { promises as fsp } from 'node:fs'
2
+
3
+ export async function sortFile(path) {
4
+ const file = await fsp.readFile(path, 'utf-8')
5
+
6
+ const lines = file.trim().split('\n').sort()
7
+
8
+ await fsp.writeFile(path, lines.join('\n') + '\n')
9
+ }
10
+
11
+ export async function appendFile(path, contents) {
12
+ const file = await fsp.readFile(path, 'utf-8')
13
+
14
+ if (!file.includes(contents)) {
15
+ await fsp.writeFile(path, file.trim() + '\n' + contents + '\n')
16
+ }
17
+ }
18
+
19
+ export function normalizeLocale(locale) {
20
+ if (!locale) {
21
+ return ''
22
+ }
23
+
24
+ if (locale.includes('_')) {
25
+ return locale.split('_')
26
+ .map((part, index) => index === 0 ? part.toLowerCase() : part.toUpperCase())
27
+ .join('-')
28
+ }
29
+
30
+ return locale.toLowerCase()
31
+ }
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eslamdevui/ui",
3
- "version": "3.2.0-beta.2",
3
+ "version": "3.2.1",
4
4
  "docs": "https://ui.nuxt.com/getting-started/installation/nuxt",
5
5
  "configKey": "ui",
6
6
  "compatibility": {
package/dist/module.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { defu } from 'defu';
2
2
  import { defineNuxtModule, createResolver, addVitePlugin, addPlugin, hasNuxtModule, addComponentsDir, addImportsDir, installModule } from '@nuxt/kit';
3
- import { d as defaultOptions, r as resolveColors, a as getDefaultUiConfig, b as addTemplates } from './shared/ui.DQZ75GCP.mjs';
3
+ import { d as defaultOptions, r as resolveColors, a as getDefaultUiConfig, b as addTemplates } from './shared/ui.DErCA3YU.mjs';
4
4
  import '../dist/runtime/utils/index.js';
5
5
  import 'node:url';
6
6
  import 'scule';
@@ -8,7 +8,7 @@ import 'tailwindcss/colors';
8
8
  import 'knitwork';
9
9
 
10
10
  const name = "@eslamdevui/ui";
11
- const version = "3.2.0-beta.2";
11
+ const version = "3.2.1";
12
12
 
13
13
  const module = defineNuxtModule({
14
14
  meta: {
@@ -34,40 +34,40 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.accordion ||
34
34
  </script>
35
35
 
36
36
  <template>
37
- <AccordionRoot v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })">
38
- <AccordionItem
39
- v-for="(item, index) in props.items"
40
- v-slot="{ open }"
41
- :key="index"
42
- :value="item.value || String(index)"
43
- :disabled="item.disabled"
44
- :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
45
- >
46
- <AccordionHeader as="div" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })">
47
- <AccordionTrigger :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })">
48
- <slot name="leading" :item="item" :index="index" :open="open">
49
- <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item?.ui?.leadingIcon] })" />
50
- </slot>
51
-
52
- <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
53
- <slot :item="item" :index="index" :open="open">{{ get(item, props.labelKey) }}</slot>
54
- </span>
55
-
56
- <slot name="trailing" :item="item" :index="index" :open="open">
57
- <UIcon :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })" />
58
- </slot>
59
- </AccordionTrigger>
60
- </AccordionHeader>
61
-
62
- <AccordionContent v-if="item.content || !!slots.content || item.slot && !!slots[item.slot] || !!slots.body || item.slot && !!slots[`${item.slot}-body`]" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
63
- <slot :name="item.slot || 'content'" :item="item" :index="index" :open="open">
64
- <div :class="ui.body({ class: [props.ui?.body, item.ui?.body] })">
65
- <slot :name="item.slot ? `${item.slot}-body` : 'body'" :item="item" :index="index" :open="open">
66
- {{ item.content }}
67
- </slot>
68
- </div>
69
- </slot>
70
- </AccordionContent>
71
- </AccordionItem>
72
- </AccordionRoot>
37
+ <AccordionRoot v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })">
38
+ <AccordionItem
39
+ v-for="(item, index) in props.items"
40
+ v-slot="{ open }"
41
+ :key="index"
42
+ :value="item.value || String(index)"
43
+ :disabled="item.disabled"
44
+ :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
45
+ >
46
+ <AccordionHeader as="div" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })">
47
+ <AccordionTrigger :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })">
48
+ <slot name="leading" :item="item" :index="index" :open="open">
49
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item?.ui?.leadingIcon] })" />
50
+ </slot>
51
+
52
+ <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
53
+ <slot :item="item" :index="index" :open="open">{{ get(item, props.labelKey) }}</slot>
54
+ </span>
55
+
56
+ <slot name="trailing" :item="item" :index="index" :open="open">
57
+ <UIcon :name="item.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })" />
58
+ </slot>
59
+ </AccordionTrigger>
60
+ </AccordionHeader>
61
+
62
+ <AccordionContent v-if="item.content || !!slots.content || item.slot && !!slots[item.slot] || !!slots.body || item.slot && !!slots[`${item.slot}-body`]" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
63
+ <slot :name="item.slot || 'content'" :item="item" :index="index" :open="open">
64
+ <div :class="ui.body({ class: [props.ui?.body, item.ui?.body] })">
65
+ <slot :name="item.slot ? `${item.slot}-body` : 'body'" :item="item" :index="index" :open="open">
66
+ {{ item.content }}
67
+ </slot>
68
+ </div>
69
+ </slot>
70
+ </AccordionContent>
71
+ </AccordionItem>
72
+ </AccordionRoot>
73
73
  </template>