opui-css 5.1.2 → 5.2.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.
Files changed (235) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +4 -5
  3. package/components/AGENTS.md +12 -13
  4. package/components/Accordion/Accordion.astro +5 -9
  5. package/components/Accordion/types.astro.ts +4 -0
  6. package/components/Accordion/types.d.vue.ts +15 -0
  7. package/components/Accordion/types.solid.ts +6 -0
  8. package/components/Accordion/types.svelte.ts +7 -0
  9. package/components/Accordion/types.ts +10 -0
  10. package/components/Anchor/Anchor.astro +1 -7
  11. package/components/Anchor/types.astro.ts +4 -0
  12. package/components/Anchor/types.d.vue.ts +10 -0
  13. package/components/Anchor/types.solid.ts +6 -0
  14. package/components/Anchor/types.svelte.ts +7 -0
  15. package/components/Anchor/types.ts +9 -0
  16. package/components/Avatar/Avatar.astro +4 -13
  17. package/components/Avatar/types.astro.ts +10 -0
  18. package/components/Avatar/types.d.vue.ts +11 -0
  19. package/components/Avatar/types.solid.ts +11 -0
  20. package/components/Avatar/types.svelte.ts +12 -0
  21. package/components/Avatar/types.ts +29 -0
  22. package/components/Badge/Badge.astro +3 -11
  23. package/components/Badge/types.astro.ts +4 -0
  24. package/components/Badge/types.d.vue.ts +10 -0
  25. package/components/Badge/types.solid.ts +4 -0
  26. package/components/Badge/types.svelte.ts +4 -0
  27. package/components/Badge/types.ts +8 -0
  28. package/components/Button/Button.astro +18 -27
  29. package/components/Button/types.astro.ts +6 -0
  30. package/components/Button/types.d.vue.ts +10 -0
  31. package/components/Button/types.solid.ts +8 -0
  32. package/components/Button/types.svelte.ts +6 -0
  33. package/components/Button/types.ts +19 -0
  34. package/components/ButtonGroup/ButtonGroup.astro +1 -8
  35. package/components/ButtonGroup/types.astro.ts +4 -0
  36. package/components/ButtonGroup/types.d.vue.ts +10 -0
  37. package/components/ButtonGroup/types.solid.ts +4 -0
  38. package/components/ButtonGroup/types.svelte.ts +4 -0
  39. package/components/ButtonGroup/types.ts +7 -0
  40. package/components/Callout/Callout.astro +10 -9
  41. package/components/Callout/types.astro.ts +4 -0
  42. package/components/Callout/types.d.vue.ts +10 -0
  43. package/components/Callout/types.solid.ts +6 -0
  44. package/components/Callout/types.svelte.ts +7 -0
  45. package/components/Callout/types.ts +10 -0
  46. package/components/Card/Card.astro +1 -5
  47. package/components/Card/types.astro.ts +4 -0
  48. package/components/Card/types.d.vue.ts +10 -0
  49. package/components/Card/types.solid.ts +6 -0
  50. package/components/Card/types.svelte.ts +7 -0
  51. package/components/Card/types.ts +10 -0
  52. package/components/Checkbox/Checkbox.astro +6 -36
  53. package/components/Checkbox/CheckboxInput.astro +2 -18
  54. package/components/Checkbox/types.astro.ts +8 -0
  55. package/components/Checkbox/types.d.vue.ts +11 -0
  56. package/components/Checkbox/types.solid.ts +9 -0
  57. package/components/Checkbox/types.svelte.ts +12 -0
  58. package/components/Checkbox/types.ts +17 -0
  59. package/components/Chip/Chip.astro +6 -12
  60. package/components/Chip/types.astro.ts +9 -0
  61. package/components/Chip/types.d.vue.ts +10 -0
  62. package/components/Chip/types.solid.ts +10 -0
  63. package/components/Chip/types.svelte.ts +14 -0
  64. package/components/Chip/types.ts +13 -0
  65. package/components/ClassicSelect/ClassicSelect.astro +5 -28
  66. package/components/ClassicSelect/types.astro.ts +8 -0
  67. package/components/ClassicSelect/types.d.vue.ts +10 -0
  68. package/components/ClassicSelect/types.solid.ts +5 -0
  69. package/components/ClassicSelect/types.svelte.ts +5 -0
  70. package/components/ClassicSelect/types.ts +19 -0
  71. package/components/DescriptionList/Description.astro +1 -4
  72. package/components/DescriptionList/DescriptionList.astro +1 -5
  73. package/components/DescriptionList/Item.astro +1 -4
  74. package/components/DescriptionList/Term.astro +1 -4
  75. package/components/DescriptionList/types.astro.ts +10 -0
  76. package/components/DescriptionList/types.d.vue.ts +10 -0
  77. package/components/DescriptionList/types.solid.ts +4 -0
  78. package/components/DescriptionList/types.svelte.ts +4 -0
  79. package/components/DescriptionList/types.ts +3 -0
  80. package/components/Dialog/Dialog.astro +1 -6
  81. package/components/Dialog/types.astro.ts +4 -0
  82. package/components/Dialog/types.d.vue.ts +10 -0
  83. package/components/Dialog/types.solid.ts +8 -0
  84. package/components/Dialog/types.svelte.ts +7 -0
  85. package/components/Dialog/types.ts +9 -0
  86. package/components/Divider/Divider.astro +1 -6
  87. package/components/Divider/types.astro.ts +4 -0
  88. package/components/Divider/types.d.vue.ts +6 -0
  89. package/components/Divider/types.solid.ts +4 -0
  90. package/components/Divider/types.svelte.ts +4 -0
  91. package/components/Divider/types.ts +3 -0
  92. package/components/Drawer/Drawer.astro +1 -9
  93. package/components/Drawer/DrawerFooter.astro +1 -4
  94. package/components/Drawer/DrawerHeader.astro +1 -5
  95. package/components/Drawer/types.astro.ts +8 -0
  96. package/components/Drawer/types.d.vue.ts +29 -0
  97. package/components/Drawer/types.solid.ts +12 -0
  98. package/components/Drawer/types.svelte.ts +15 -0
  99. package/components/Drawer/types.ts +19 -0
  100. package/components/FieldDescription/FieldDescription.astro +1 -5
  101. package/components/FieldDescription/types.astro.ts +4 -0
  102. package/components/FieldDescription/types.d.vue.ts +10 -0
  103. package/components/FieldDescription/types.solid.ts +5 -0
  104. package/components/FieldDescription/types.svelte.ts +4 -0
  105. package/components/FieldDescription/types.ts +1 -0
  106. package/components/FieldGroup/FieldGroup.astro +1 -8
  107. package/components/FieldGroup/types.astro.ts +4 -0
  108. package/components/FieldGroup/types.d.vue.ts +12 -0
  109. package/components/FieldGroup/types.solid.ts +5 -0
  110. package/components/FieldGroup/types.svelte.ts +4 -0
  111. package/components/FieldGroup/types.ts +4 -0
  112. package/components/FieldLegend/FieldLegend.astro +4 -8
  113. package/components/FieldLegend/types.astro.ts +6 -0
  114. package/components/FieldLegend/types.d.vue.ts +11 -0
  115. package/components/FieldLegend/types.solid.ts +5 -0
  116. package/components/FieldLegend/types.svelte.ts +6 -0
  117. package/components/FieldLegend/types.ts +1 -0
  118. package/components/FieldSet/FieldSet.astro +1 -5
  119. package/components/FieldSet/types.astro.ts +6 -0
  120. package/components/FieldSet/types.d.vue.ts +11 -0
  121. package/components/FieldSet/types.solid.ts +5 -0
  122. package/components/FieldSet/types.svelte.ts +8 -0
  123. package/components/FieldSet/types.ts +5 -0
  124. package/components/Form/Form.astro +1 -6
  125. package/components/Form/types.astro.ts +6 -0
  126. package/components/Form/types.d.vue.ts +11 -0
  127. package/components/Form/types.solid.ts +5 -0
  128. package/components/Form/types.svelte.ts +7 -0
  129. package/components/Form/types.ts +1 -0
  130. package/components/IconButton/IconButton.astro +18 -20
  131. package/components/IconButton/types.astro.ts +6 -0
  132. package/components/IconButton/types.d.vue.ts +10 -0
  133. package/components/IconButton/types.solid.ts +8 -0
  134. package/components/IconButton/types.svelte.ts +6 -0
  135. package/components/IconButton/types.ts +16 -0
  136. package/components/List/List.astro +1 -8
  137. package/components/List/types.astro.ts +4 -0
  138. package/components/List/types.d.vue.ts +10 -0
  139. package/components/List/types.solid.ts +4 -0
  140. package/components/List/types.svelte.ts +4 -0
  141. package/components/List/types.ts +7 -0
  142. package/components/ListItem/ListItem.astro +3 -13
  143. package/components/ListItem/types.astro.ts +10 -0
  144. package/components/ListItem/types.d.vue.ts +10 -0
  145. package/components/ListItem/types.solid.ts +12 -0
  146. package/components/ListItem/types.svelte.ts +14 -0
  147. package/components/ListItem/types.ts +32 -0
  148. package/components/Progress/Progress.astro +1 -11
  149. package/components/Progress/types.astro.ts +4 -0
  150. package/components/Progress/types.d.vue.ts +10 -0
  151. package/components/Progress/types.solid.ts +4 -0
  152. package/components/Progress/types.svelte.ts +4 -0
  153. package/components/Progress/types.ts +10 -0
  154. package/components/Radio/Radio.astro +6 -32
  155. package/components/Radio/RadioInput.astro +3 -20
  156. package/components/Radio/types.astro.ts +6 -0
  157. package/components/Radio/types.d.vue.ts +11 -0
  158. package/components/Radio/types.solid.ts +9 -0
  159. package/components/Radio/types.svelte.ts +12 -0
  160. package/components/Radio/types.ts +13 -0
  161. package/components/Range/Range.astro +23 -31
  162. package/components/Range/types.astro.ts +6 -0
  163. package/components/Range/types.d.vue.ts +14 -0
  164. package/components/Range/types.solid.ts +6 -0
  165. package/components/Range/types.svelte.ts +9 -0
  166. package/components/Range/types.ts +30 -0
  167. package/components/Select/Select.astro +42 -34
  168. package/components/Select/types.astro.ts +4 -0
  169. package/components/Select/types.d.vue.ts +17 -0
  170. package/components/Select/types.solid.ts +6 -0
  171. package/components/Select/types.svelte.ts +7 -0
  172. package/components/Select/types.ts +27 -0
  173. package/components/Switch/Switch.astro +14 -39
  174. package/components/Switch/SwitchInput.astro +3 -21
  175. package/components/Switch/types.astro.ts +5 -0
  176. package/components/Switch/types.d.vue.ts +13 -0
  177. package/components/Switch/types.solid.ts +9 -0
  178. package/components/Switch/types.svelte.ts +9 -0
  179. package/components/Switch/types.ts +16 -0
  180. package/components/Table/Body.astro +1 -3
  181. package/components/Table/Cell.astro +1 -3
  182. package/components/Table/Column.astro +1 -4
  183. package/components/Table/ColumnGroup.astro +1 -3
  184. package/components/Table/Head.astro +1 -3
  185. package/components/Table/HeaderCell.astro +1 -3
  186. package/components/Table/Row.astro +1 -3
  187. package/components/Table/Table.astro +1 -5
  188. package/components/Table/types.astro.ts +16 -0
  189. package/components/Table/types.d.vue.ts +10 -0
  190. package/components/Table/types.solid.ts +8 -0
  191. package/components/Table/types.svelte.ts +11 -0
  192. package/components/Table/types.ts +9 -0
  193. package/components/Tabs/Tabs.astro +1 -5
  194. package/components/Tabs/TabsItem.astro +1 -8
  195. package/components/Tabs/TabsPanel.astro +1 -6
  196. package/components/Tabs/TabsTab.astro +1 -5
  197. package/components/Tabs/types.astro.ts +11 -0
  198. package/components/Tabs/types.d.vue.ts +31 -0
  199. package/components/Tabs/types.solid.ts +12 -0
  200. package/components/Tabs/types.svelte.ts +10 -0
  201. package/components/Tabs/types.ts +19 -0
  202. package/components/TextField/TextField.astro +45 -49
  203. package/components/TextField/types.astro.ts +17 -0
  204. package/components/TextField/types.d.vue.ts +18 -0
  205. package/components/TextField/types.solid.ts +22 -0
  206. package/components/TextField/types.svelte.ts +22 -0
  207. package/components/TextField/types.ts +35 -0
  208. package/components/Textarea/Textarea.astro +50 -38
  209. package/components/Textarea/types.astro.ts +10 -0
  210. package/components/Textarea/types.d.vue.ts +18 -0
  211. package/components/Textarea/types.solid.ts +6 -0
  212. package/components/Textarea/types.svelte.ts +21 -0
  213. package/components/Textarea/types.ts +33 -0
  214. package/components/ToggleButton/ToggleButton.astro +1 -11
  215. package/components/ToggleButton/types.astro.ts +4 -0
  216. package/components/ToggleButton/types.d.vue.ts +10 -0
  217. package/components/ToggleButton/types.solid.ts +7 -0
  218. package/components/ToggleButton/types.svelte.ts +7 -0
  219. package/components/ToggleButton/types.ts +10 -0
  220. package/components/ToggleGroup/ToggleGroup.astro +1 -8
  221. package/components/ToggleGroup/types.astro.ts +4 -0
  222. package/components/ToggleGroup/types.d.vue.ts +15 -0
  223. package/components/ToggleGroup/types.solid.ts +4 -0
  224. package/components/ToggleGroup/types.svelte.ts +9 -0
  225. package/components/ToggleGroup/types.ts +15 -0
  226. package/components/Tooltip/Tooltip.astro +2 -9
  227. package/components/Tooltip/types.astro.ts +4 -0
  228. package/components/Tooltip/types.d.vue.ts +10 -0
  229. package/components/Tooltip/types.solid.ts +6 -0
  230. package/components/Tooltip/types.svelte.ts +7 -0
  231. package/components/Tooltip/types.ts +11 -0
  232. package/css/theme.css +0 -1
  233. package/dist/opui.css +0 -1
  234. package/dist/opui.css.map +1 -1
  235. package/package.json +4 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.2.0 - 2026-06-03
4
+
5
+ ### Changed
6
+
7
+ - Broke out types for components into their own files. All frameworks now have their own types file. Yes you read that right, there will be more frameworks soon. Svelte, Vue and Solid are coming soon (in that order).
8
+
9
+ Thank you to [somephic](https://github.com/somephic) for the contribution and discussions!
10
+
3
11
  ## 5.1.2 - 2026-05-29
4
12
 
5
13
  ### Fixed
package/README.md CHANGED
@@ -36,7 +36,10 @@ import { Button, Card } from "opui-css/astro"
36
36
  Drop a pre-bundled stylesheet into any page and use the documented class names:
37
37
 
38
38
  ```html
39
- <link rel="stylesheet" href="https://unpkg.com/opui-css/dist/opui.css" />
39
+ <link
40
+ rel="stylesheet"
41
+ href="https://cdn.jsdelivr.net/npm/opui-css/dist/opui.css"
42
+ />
40
43
 
41
44
  <button class="ui-button ui-primary">Click me</button>
42
45
  ```
@@ -78,10 +81,6 @@ Wrap your own styles in a layer above `utils` (or unlayered) to override.
78
81
  | `opui-css/astro` | All Astro components |
79
82
  | `opui-css/components/*` | Individual Astro component sources |
80
83
 
81
- ## Contributing
82
-
83
- See [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the component-authoring pattern.
84
-
85
84
  ## License
86
85
 
87
86
  [MIT](./LICENSE) © Felix Bohlin
@@ -8,7 +8,7 @@ This guide defines the standards for implementing reusable Astro UI components i
8
8
 
9
9
  When implementing or updating a component, ensure:
10
10
  - [ ] **Title Export**: `export const title = "Component Name"` is present.
11
- - [ ] **Props Type**: Used `type Props = { ... }` (avoid interfaces).
11
+ - [ ] **Props Type**: Imported `Props` from `./types.astro` (avoid interfaces).
12
12
  - [ ] **Sorting**: Props, Destructuring, and Classes are sorted alphabetically.
13
13
  - [ ] **Rest Props**: `...rest` is captured and spread onto the root element.
14
14
  - [ ] **Class Management**: Used `class:list` for all class manipulations.
@@ -20,18 +20,17 @@ When implementing or updating a component, ensure:
20
20
 
21
21
  ## 1. Frontmatter Structure
22
22
 
23
+ Every component uses layered type files:
24
+
25
+ - `types.ts` — shared, framework-agnostic props (component-specific only; no `HTMLAttributes`)
26
+ - `types.astro.ts` — Astro props = base + `HTMLAttributes<element>`
27
+ - `types.d.vue.ts` / `types.svelte.ts` / `types.solid.ts` — framework-specific extensions (for merge parity)
28
+
23
29
  Every component must follow this exact frontmatter layout:
24
30
 
25
31
  ```astro
26
32
  ---
27
- type Props = {
28
- [key: string]: any // Required for ...rest support
29
- class?: string
30
- disabled?: boolean
31
- label?: string
32
- size?: "small" | "large"
33
- variant?: "outlined" | "tonal" | "filled"
34
- }
33
+ import type { Props } from "./types.astro"
35
34
 
36
35
  export const title = "My Component"
37
36
 
@@ -40,15 +39,15 @@ const {
40
39
  disabled,
41
40
  label,
42
41
  size,
43
- variant = "outlined", // Default values in destructuring
42
+ variant = "outlined",
44
43
  ...rest
45
44
  } = Astro.props
46
45
  ---
47
46
  ```
48
47
 
49
48
  ### Key Rules:
50
- - **Alphabetical Sorting**: Sort property definitions in `type Props` and variables in the destructuring statement.
51
- - **REST Support**: Always include `[key: string]: any` in props and `...rest` in destructuring.
49
+ - **Alphabetical Sorting**: Sort property definitions in `types.ts` and variables in the destructuring statement.
50
+ - **REST Support**: Use `HTMLAttributes` in `types.astro.ts` and `...rest` in destructuring. Do not add `[key: string]: any` to `types.ts` — native attributes belong in the framework type files.
52
51
  - **Title Export**: This is mandatory for documentation generation.
53
52
 
54
53
  ---
@@ -137,7 +136,7 @@ Use named slots for specific functional areas. Check for existence before render
137
136
  Most inputs should be wrapped in a `<label>` to provide a larger hit area and built-in accessibility.
138
137
 
139
138
  ```astro
140
- <label class:list={["ui-field", { "ui-disabled": disabled, "ui-critical": error }]}>
139
+ <label class:list={["ui-field", { "ui-disabled": disabled }]} data-invalid={error || undefined}>
141
140
  <span class="ui-label">{label}</span>
142
141
  <input type="text" {...rest} />
143
142
  {endText && <span class="ui-end-text">{endText}</span>}
@@ -1,11 +1,5 @@
1
1
  ---
2
- type Props = {
3
- class?: string
4
- name?: string
5
- open?: boolean
6
- variant?: "default" | "outlined" | "elevated" | "tonal"
7
- [key: string]: any
8
- }
2
+ import type { Props } from "./types.astro"
9
3
 
10
4
  export const title = "Accordion"
11
5
 
@@ -28,8 +22,10 @@ const contentId = $id("content")
28
22
  {...rest}
29
23
  >
30
24
  <!-- Summary -->
31
- <!-- prettier-ignore -->
32
- <summary id={summaryId} aria-controls={contentId}><slot name="summary" /><slot name="marker" /></summary>
25
+
26
+ <summary id={summaryId} aria-controls={contentId}
27
+ ><slot name="summary" /><slot name="marker" /></summary
28
+ >
33
29
 
34
30
  <!-- Content -->
35
31
  <div
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props & HTMLAttributes<"details">
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ name?: string
7
+ open?: boolean
8
+ }
9
+
10
+ export type Slots = {
11
+ actions?: Slot
12
+ default?: Slot
13
+ marker?: Slot
14
+ summary?: Slot
15
+ }
@@ -0,0 +1,6 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props &
5
+ Base.Slots<JSX.Element> &
6
+ JSX.DetailsHtmlAttributes<HTMLDetailsElement>
@@ -0,0 +1,7 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+ import type { Snippet } from "svelte"
4
+
5
+ type Snippets = Base.Slots<Snippet>
6
+
7
+ export type Props = Base.Props & Snippets & SvelteHTMLElements["details"]
@@ -0,0 +1,10 @@
1
+ export type Props = {
2
+ variant?: "default" | "outlined" | "elevated" | "tonal"
3
+ }
4
+
5
+ export type Slots<S> = {
6
+ actions?: S
7
+ children: S
8
+ marker?: S
9
+ summary: string | S
10
+ }
@@ -1,11 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- alignment?: string
5
- class?: string
6
- id?: string
7
- trigger?: "always" | "hover"
8
- }
2
+ import type { Props } from "./types.astro"
9
3
 
10
4
  export const title = "Anchor"
11
5
 
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props & HTMLAttributes<"span">
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps, Slots as BaseSlots } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ }
7
+
8
+ export type Slots = BaseSlots<Slot> & {
9
+ default?: Slot
10
+ }
@@ -0,0 +1,6 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props &
5
+ Partial<Base.Slots<JSX.Element>> &
6
+ JSX.HTMLAttributes<HTMLSpanElement>
@@ -0,0 +1,7 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+ import type { Snippet } from "svelte"
4
+
5
+ type Snippets = Base.Slots<Snippet>
6
+
7
+ export type Props = Base.Props & Snippets & SvelteHTMLElements["span"]
@@ -0,0 +1,9 @@
1
+ export type Props = {
2
+ [key: string]: any
3
+ alignment?: string
4
+ trigger?: "always" | "hover"
5
+ }
6
+
7
+ export type Slots<S> = {
8
+ anchored?: S
9
+ }
@@ -1,14 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- alt?: string
5
- as?: "div" | "a" | "button" | string
6
- class?: string
7
- href?: string
8
- isGroup?: boolean
9
- src?: string
10
- variant?: "squared" | "rounded" | "squircle"
11
- }
2
+ import type { Props } from "./types.astro"
12
3
 
13
4
  export const title = "Avatar"
14
5
 
@@ -23,10 +14,9 @@ const {
23
14
  ...rest
24
15
  } = Astro.props
25
16
 
26
- const Tag = as || (href ? "a" : "div")
17
+ const Tag = (as || (href ? "a" : "div")) as any
27
18
  ---
28
19
 
29
- <!-- prettier-ignore -->
30
20
  <Tag
31
21
  class:list={[
32
22
  { "ui-avatar": !isGroup },
@@ -35,4 +25,5 @@ const Tag = as || (href ? "a" : "div")
35
25
  ]}
36
26
  href={href}
37
27
  role={isGroup ? "group" : undefined}
38
- {...rest}>{src ? <img src={src} alt={alt} /> : <slot />}</Tag>
28
+ {...rest}>{src ? <img src={src} alt={alt} /> : <slot />}</Tag
29
+ >
@@ -0,0 +1,10 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props &
5
+ Pick<HTMLAttributes<"img">, Base.ImageProps> &
6
+ (
7
+ | ({ as?: "div" } & HTMLAttributes<"div">)
8
+ | ({ as?: "button" } & HTMLAttributes<"button">)
9
+ | ({ as?: "a" } & HTMLAttributes<"a">)
10
+ )
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ImgHTMLAttributes, Slot } from "vue"
2
+ import type { ImageProps, Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps &
5
+ Pick<ImgHTMLAttributes, ImageProps> & {
6
+ class?: HTMLAttributes["class"]
7
+ }
8
+
9
+ export type Slots = {
10
+ default?: Slot
11
+ }
@@ -0,0 +1,11 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props &
5
+ Base.Slots<JSX.Element> &
6
+ Pick<JSX.ImgHTMLAttributes<HTMLImageElement>, Base.ImageProps> &
7
+ (
8
+ | ({ as?: "div" } & JSX.HTMLAttributes<HTMLDivElement>)
9
+ | ({ as?: "button" } & JSX.ButtonHTMLAttributes<HTMLButtonElement>)
10
+ | ({ as?: "a" } & JSX.AnchorHTMLAttributes<HTMLAnchorElement>)
11
+ )
@@ -0,0 +1,12 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+ import type { Snippet } from "svelte"
4
+
5
+ export type Props = Base.Props &
6
+ Base.Slots<Snippet> &
7
+ Pick<SvelteHTMLElements["img"], Base.ImageProps> &
8
+ (
9
+ | ({ as?: "div" } & SvelteHTMLElements["div"])
10
+ | ({ as?: "button" } & SvelteHTMLElements["button"])
11
+ | ({ as?: "a" } & SvelteHTMLElements["a"])
12
+ )
@@ -0,0 +1,29 @@
1
+ export type Props = {
2
+ command?: string
3
+ commandfor?: string
4
+ interestfor?: string
5
+ isGroup?: boolean
6
+ variant?: "squared" | "rounded" | "squircle"
7
+ } & (
8
+ | {
9
+ as?: "div"
10
+ href: never
11
+ disabled?: never
12
+ }
13
+ | {
14
+ as?: "a"
15
+ href: string
16
+ disabled?: never
17
+ }
18
+ | {
19
+ as?: "button"
20
+ href?: never
21
+ disabled?: boolean
22
+ }
23
+ )
24
+
25
+ export type Slots<S> = {
26
+ children?: S
27
+ }
28
+
29
+ export type ImageProps = "src" | "alt"
@@ -1,15 +1,7 @@
1
1
  ---
2
- import Anchor from "../Anchor/Anchor.astro"
2
+ import type { Props } from "./types.astro"
3
3
 
4
- type Props = {
5
- [key: string]: any
6
- alignment?: "start-start" | "end-start" | "end-end"
7
- class?: string
8
- color?: "critical" | "info" | "neutral" | "success" | "warning"
9
- dot?: boolean
10
- invisible?: boolean
11
- label?: string | number
12
- }
4
+ import Anchor from "../Anchor/Anchor.astro"
13
5
 
14
6
  export const title = "Badge"
15
7
 
@@ -45,7 +37,7 @@ const positionArea =
45
37
  className,
46
38
  color && `ui-${color}`,
47
39
  ]}
48
- {...rest}
40
+ {...rest as any}
49
41
  >
50
42
  <slot />
51
43
  <span
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props & HTMLAttributes<"span">
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ }
7
+
8
+ export type Slots = {
9
+ default?: Slot
10
+ }
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props & JSX.HTMLAttributes<HTMLSpanElement>
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+
4
+ export type Props = Base.Props & SvelteHTMLElements["span"]
@@ -0,0 +1,8 @@
1
+ export type Props = {
2
+ [key: string]: any
3
+ alignment?: "start-start" | "end-start" | "end-end"
4
+ color?: "critical" | "info" | "neutral" | "success" | "warning"
5
+ dot?: boolean
6
+ invisible?: boolean
7
+ label?: string | number
8
+ }
@@ -1,45 +1,36 @@
1
1
  ---
2
- type CommonProps = {
3
- [key: string]: any
4
- as?: string
5
- class?: string
6
- color?: "critical" | "primary"
7
- size?: "x-small" | "small" | "large"
8
- variant?: "outlined" | "tonal" | "filled"
9
- }
10
-
11
- type AnchorProps = CommonProps & {
12
- disabled?: never
13
- href: string
14
- }
15
-
16
- type ButtonProps = CommonProps & {
17
- disabled?: boolean
18
- href?: undefined
19
- }
20
-
21
- type Props = AnchorProps | ButtonProps
2
+ import type { Props } from "./types.astro"
22
3
 
23
4
  export const title = "Button"
24
5
 
6
+ const props = Astro.props as Props
25
7
  const {
26
8
  as,
27
9
  class: className,
28
10
  color,
29
- disabled,
30
- href,
31
11
  size,
32
12
  variant,
13
+ disabled,
14
+ href,
33
15
  ...rest
34
- } = Astro.props
16
+ } = props
35
17
 
36
- const Tag = as || (href ? "a" : "button")
18
+ const Tag = (as || (href ? "a" : "button")) as any
37
19
  const isButton = Tag === "button"
38
20
  ---
39
21
 
40
- <!-- prettier-ignore -->
41
22
  <Tag
42
- class:list={["ui-button", { "ui-disabled": isButton && disabled }, size && `ui-${size}`, variant && `ui-${variant}`, color && `ui-${color}`, className]}
23
+ class:list={[
24
+ "ui-button",
25
+ { "ui-disabled": isButton && disabled },
26
+ size && `ui-${size}`,
27
+ variant && `ui-${variant}`,
28
+ color && `ui-${color}`,
29
+ className,
30
+ ]}
43
31
  disabled={isButton ? disabled : undefined}
44
32
  href={href}
45
- {...rest}><slot /></Tag>
33
+ {...rest as any}
34
+ >
35
+ <slot />
36
+ </Tag>
@@ -0,0 +1,6 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props =
5
+ | (Base.Props & { as?: "button" } & HTMLAttributes<"button">)
6
+ | (Base.Props & { as?: "a" } & HTMLAttributes<"a">)
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ }
7
+
8
+ export type Slots = {
9
+ default?: Slot
10
+ }
@@ -0,0 +1,8 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props &
5
+ (
6
+ | ({ as?: "button" } & JSX.ButtonHTMLAttributes<HTMLButtonElement>)
7
+ | ({ as?: "a" } & JSX.AnchorHTMLAttributes<HTMLAnchorElement>)
8
+ )
@@ -0,0 +1,6 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+
4
+ export type Props =
5
+ | (Base.Props & { as?: "button" } & SvelteHTMLElements["button"])
6
+ | (Base.Props & { as?: "a" } & SvelteHTMLElements["a"])
@@ -0,0 +1,19 @@
1
+ export type Props = {
2
+ color?: "critical" | "primary"
3
+ command?: string
4
+ commandfor?: string
5
+ interestfor?: string
6
+ size?: "x-small" | "small" | "large"
7
+ variant?: "outlined" | "tonal" | "filled"
8
+ } & (
9
+ | {
10
+ as?: "a"
11
+ href: string
12
+ disabled?: never
13
+ }
14
+ | {
15
+ as?: "button"
16
+ href?: never
17
+ disabled?: boolean
18
+ }
19
+ )
@@ -1,12 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- class?: string
5
- color?: "critical" | "primary"
6
- orientation?: "vertical"
7
- size?: "small" | "large"
8
- variant?: "outlined" | "tonal" | "filled"
9
- }
2
+ import type { Props } from "./types.astro"
10
3
 
11
4
  export const title = "Button Group"
12
5
 
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props & HTMLAttributes<"div">
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ }
7
+
8
+ export type Slots = {
9
+ default?: Slot
10
+ }
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props & JSX.HTMLAttributes<HTMLDivElement>
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+
4
+ export type Props = Base.Props & SvelteHTMLElements["div"]
@@ -0,0 +1,7 @@
1
+ export type Props = {
2
+ [key: string]: any
3
+ color?: "critical" | "primary"
4
+ orientation?: "vertical"
5
+ size?: "small" | "large"
6
+ variant?: "outlined" | "tonal" | "filled"
7
+ }
@@ -1,10 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- class?: string
5
- severity?: "critical" | "info" | "neutral" | "success" | "warning"
6
- variant?: "tonal" | "outlined"
7
- }
2
+ import type { Props } from "./types.astro"
8
3
 
9
4
  export const title = "Callout"
10
5
 
@@ -13,7 +8,12 @@ const { class: className, severity, variant, ...rest } = Astro.props
13
8
 
14
9
  <article
15
10
  role="note"
16
- class:list={["ui-callout", variant && `ui-${variant}`, severity && `ui-${severity}`, className]}
11
+ class:list={[
12
+ "ui-callout",
13
+ variant && `ui-${variant}`,
14
+ severity && `ui-${severity}`,
15
+ className,
16
+ ]}
17
17
  {...rest}
18
18
  >
19
19
  <slot name="icon">
@@ -66,8 +66,9 @@ const { class: className, severity, variant, ...rest } = Astro.props
66
66
  <div class="ui-content">
67
67
  {
68
68
  Astro.slots.has("title") && (
69
- <!-- prettier-ignore -->
70
- <h3 class="ui-title"><slot name="title" /></h3>
69
+ <h3 class="ui-title">
70
+ <slot name="title" />
71
+ </h3>
71
72
  )
72
73
  }
73
74
  <slot />
@@ -0,0 +1,4 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props = Base.Props & HTMLAttributes<"article">
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps, Slots as BaseSlots } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ }
7
+
8
+ export type Slots = BaseSlots<Slot> & {
9
+ default?: Slot
10
+ }