opui-css 5.1.2 → 5.3.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 (290) hide show
  1. package/CHANGELOG.md +18 -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/Accordion.vue +38 -0
  6. package/components/Accordion/types.astro.ts +4 -0
  7. package/components/Accordion/types.d.vue.ts +15 -0
  8. package/components/Accordion/types.solid.ts +6 -0
  9. package/components/Accordion/types.svelte.ts +7 -0
  10. package/components/Accordion/types.ts +10 -0
  11. package/components/Anchor/Anchor.astro +1 -7
  12. package/components/Anchor/Anchor.vue +41 -0
  13. package/components/Anchor/types.astro.ts +4 -0
  14. package/components/Anchor/types.d.vue.ts +10 -0
  15. package/components/Anchor/types.solid.ts +6 -0
  16. package/components/Anchor/types.svelte.ts +7 -0
  17. package/components/Anchor/types.ts +9 -0
  18. package/components/Avatar/Avatar.astro +4 -13
  19. package/components/Avatar/Avatar.vue +24 -0
  20. package/components/Avatar/types.astro.ts +10 -0
  21. package/components/Avatar/types.d.vue.ts +11 -0
  22. package/components/Avatar/types.solid.ts +11 -0
  23. package/components/Avatar/types.svelte.ts +12 -0
  24. package/components/Avatar/types.ts +29 -0
  25. package/components/Badge/Badge.astro +3 -11
  26. package/components/Badge/Badge.vue +39 -0
  27. package/components/Badge/types.astro.ts +4 -0
  28. package/components/Badge/types.d.vue.ts +10 -0
  29. package/components/Badge/types.solid.ts +4 -0
  30. package/components/Badge/types.svelte.ts +4 -0
  31. package/components/Badge/types.ts +8 -0
  32. package/components/Button/Button.astro +18 -27
  33. package/components/Button/Button.vue +27 -0
  34. package/components/Button/types.astro.ts +6 -0
  35. package/components/Button/types.d.vue.ts +10 -0
  36. package/components/Button/types.solid.ts +8 -0
  37. package/components/Button/types.svelte.ts +6 -0
  38. package/components/Button/types.ts +16 -0
  39. package/components/ButtonGroup/ButtonGroup.astro +1 -8
  40. package/components/ButtonGroup/ButtonGroup.vue +22 -0
  41. package/components/ButtonGroup/types.astro.ts +4 -0
  42. package/components/ButtonGroup/types.d.vue.ts +10 -0
  43. package/components/ButtonGroup/types.solid.ts +4 -0
  44. package/components/ButtonGroup/types.svelte.ts +4 -0
  45. package/components/ButtonGroup/types.ts +7 -0
  46. package/components/Callout/Callout.astro +10 -9
  47. package/components/Callout/Callout.vue +63 -0
  48. package/components/Callout/types.astro.ts +4 -0
  49. package/components/Callout/types.d.vue.ts +10 -0
  50. package/components/Callout/types.solid.ts +6 -0
  51. package/components/Callout/types.svelte.ts +7 -0
  52. package/components/Callout/types.ts +10 -0
  53. package/components/Card/Card.astro +1 -5
  54. package/components/Card/Card.vue +28 -0
  55. package/components/Card/types.astro.ts +4 -0
  56. package/components/Card/types.d.vue.ts +10 -0
  57. package/components/Card/types.solid.ts +6 -0
  58. package/components/Card/types.svelte.ts +7 -0
  59. package/components/Card/types.ts +11 -0
  60. package/components/Checkbox/Checkbox.astro +6 -36
  61. package/components/Checkbox/Checkbox.vue +43 -0
  62. package/components/Checkbox/CheckboxInput.astro +2 -18
  63. package/components/Checkbox/CheckboxInput.vue +32 -0
  64. package/components/Checkbox/types.astro.ts +8 -0
  65. package/components/Checkbox/types.d.vue.ts +11 -0
  66. package/components/Checkbox/types.solid.ts +9 -0
  67. package/components/Checkbox/types.svelte.ts +12 -0
  68. package/components/Checkbox/types.ts +16 -0
  69. package/components/Chip/Chip.astro +6 -12
  70. package/components/Chip/Chip.vue +37 -0
  71. package/components/Chip/types.astro.ts +9 -0
  72. package/components/Chip/types.d.vue.ts +10 -0
  73. package/components/Chip/types.solid.ts +10 -0
  74. package/components/Chip/types.svelte.ts +14 -0
  75. package/components/Chip/types.ts +13 -0
  76. package/components/ClassicSelect/ClassicSelect.astro +5 -28
  77. package/components/ClassicSelect/ClassicSelect.vue +54 -0
  78. package/components/ClassicSelect/types.astro.ts +8 -0
  79. package/components/ClassicSelect/types.d.vue.ts +10 -0
  80. package/components/ClassicSelect/types.solid.ts +5 -0
  81. package/components/ClassicSelect/types.svelte.ts +5 -0
  82. package/components/ClassicSelect/types.ts +15 -0
  83. package/components/DescriptionList/Description.astro +1 -4
  84. package/components/DescriptionList/Description.vue +12 -0
  85. package/components/DescriptionList/DescriptionList.astro +1 -5
  86. package/components/DescriptionList/DescriptionList.vue +23 -0
  87. package/components/DescriptionList/Item.astro +1 -4
  88. package/components/DescriptionList/Item.vue +12 -0
  89. package/components/DescriptionList/Term.astro +1 -4
  90. package/components/DescriptionList/Term.vue +12 -0
  91. package/components/DescriptionList/types.astro.ts +10 -0
  92. package/components/DescriptionList/types.d.vue.ts +10 -0
  93. package/components/DescriptionList/types.solid.ts +4 -0
  94. package/components/DescriptionList/types.svelte.ts +4 -0
  95. package/components/DescriptionList/types.ts +3 -0
  96. package/components/Dialog/Dialog.astro +1 -6
  97. package/components/Dialog/Dialog.vue +35 -0
  98. package/components/Dialog/types.astro.ts +4 -0
  99. package/components/Dialog/types.d.vue.ts +10 -0
  100. package/components/Dialog/types.solid.ts +8 -0
  101. package/components/Dialog/types.svelte.ts +7 -0
  102. package/components/Dialog/types.ts +10 -0
  103. package/components/Divider/Divider.astro +1 -6
  104. package/components/Divider/Divider.vue +12 -0
  105. package/components/Divider/types.astro.ts +4 -0
  106. package/components/Divider/types.d.vue.ts +6 -0
  107. package/components/Divider/types.solid.ts +4 -0
  108. package/components/Divider/types.svelte.ts +4 -0
  109. package/components/Divider/types.ts +3 -0
  110. package/components/Drawer/Drawer.astro +10 -12
  111. package/components/Drawer/Drawer.vue +46 -0
  112. package/components/Drawer/DrawerFooter.astro +1 -4
  113. package/components/Drawer/DrawerFooter.vue +16 -0
  114. package/components/Drawer/DrawerHeader.astro +1 -5
  115. package/components/Drawer/DrawerHeader.vue +36 -0
  116. package/components/Drawer/types.astro.ts +8 -0
  117. package/components/Drawer/types.d.vue.ts +31 -0
  118. package/components/Drawer/types.solid.ts +12 -0
  119. package/components/Drawer/types.svelte.ts +15 -0
  120. package/components/Drawer/types.ts +20 -0
  121. package/components/FieldDescription/FieldDescription.astro +1 -5
  122. package/components/FieldDescription/FieldDescription.vue +12 -0
  123. package/components/FieldDescription/types.astro.ts +4 -0
  124. package/components/FieldDescription/types.d.vue.ts +10 -0
  125. package/components/FieldDescription/types.solid.ts +5 -0
  126. package/components/FieldDescription/types.svelte.ts +4 -0
  127. package/components/FieldDescription/types.ts +1 -0
  128. package/components/FieldGroup/FieldGroup.astro +1 -8
  129. package/components/FieldGroup/FieldGroup.vue +25 -0
  130. package/components/FieldGroup/types.astro.ts +4 -0
  131. package/components/FieldGroup/types.d.vue.ts +12 -0
  132. package/components/FieldGroup/types.solid.ts +5 -0
  133. package/components/FieldGroup/types.svelte.ts +4 -0
  134. package/components/FieldGroup/types.ts +4 -0
  135. package/components/FieldLegend/FieldLegend.astro +4 -8
  136. package/components/FieldLegend/FieldLegend.vue +18 -0
  137. package/components/FieldLegend/types.astro.ts +6 -0
  138. package/components/FieldLegend/types.d.vue.ts +11 -0
  139. package/components/FieldLegend/types.solid.ts +5 -0
  140. package/components/FieldLegend/types.svelte.ts +6 -0
  141. package/components/FieldLegend/types.ts +1 -0
  142. package/components/FieldSet/FieldSet.astro +1 -5
  143. package/components/FieldSet/FieldSet.vue +18 -0
  144. package/components/FieldSet/types.astro.ts +6 -0
  145. package/components/FieldSet/types.d.vue.ts +11 -0
  146. package/components/FieldSet/types.solid.ts +5 -0
  147. package/components/FieldSet/types.svelte.ts +8 -0
  148. package/components/FieldSet/types.ts +5 -0
  149. package/components/Form/Form.astro +1 -6
  150. package/components/Form/Form.vue +14 -0
  151. package/components/Form/types.astro.ts +6 -0
  152. package/components/Form/types.d.vue.ts +11 -0
  153. package/components/Form/types.solid.ts +5 -0
  154. package/components/Form/types.svelte.ts +7 -0
  155. package/components/Form/types.ts +1 -0
  156. package/components/IconButton/IconButton.astro +18 -20
  157. package/components/IconButton/IconButton.vue +24 -0
  158. package/components/IconButton/types.astro.ts +6 -0
  159. package/components/IconButton/types.d.vue.ts +10 -0
  160. package/components/IconButton/types.solid.ts +8 -0
  161. package/components/IconButton/types.svelte.ts +6 -0
  162. package/components/IconButton/types.ts +16 -0
  163. package/components/List/List.astro +1 -8
  164. package/components/List/List.vue +28 -0
  165. package/components/List/types.astro.ts +4 -0
  166. package/components/List/types.d.vue.ts +10 -0
  167. package/components/List/types.solid.ts +4 -0
  168. package/components/List/types.svelte.ts +4 -0
  169. package/components/List/types.ts +7 -0
  170. package/components/ListItem/ListItem.astro +3 -13
  171. package/components/ListItem/ListItem.vue +98 -0
  172. package/components/ListItem/types.astro.ts +10 -0
  173. package/components/ListItem/types.d.vue.ts +10 -0
  174. package/components/ListItem/types.solid.ts +12 -0
  175. package/components/ListItem/types.svelte.ts +14 -0
  176. package/components/ListItem/types.ts +32 -0
  177. package/components/Progress/Progress.astro +1 -11
  178. package/components/Progress/Progress.vue +34 -0
  179. package/components/Progress/types.astro.ts +4 -0
  180. package/components/Progress/types.d.vue.ts +10 -0
  181. package/components/Progress/types.solid.ts +4 -0
  182. package/components/Progress/types.svelte.ts +4 -0
  183. package/components/Progress/types.ts +10 -0
  184. package/components/Radio/Radio.astro +6 -32
  185. package/components/Radio/Radio.vue +41 -0
  186. package/components/Radio/RadioInput.astro +3 -20
  187. package/components/Radio/RadioInput.vue +14 -0
  188. package/components/Radio/types.astro.ts +6 -0
  189. package/components/Radio/types.d.vue.ts +11 -0
  190. package/components/Radio/types.solid.ts +9 -0
  191. package/components/Radio/types.svelte.ts +12 -0
  192. package/components/Radio/types.ts +12 -0
  193. package/components/Range/Range.astro +23 -31
  194. package/components/Range/Range.vue +85 -0
  195. package/components/Range/types.astro.ts +6 -0
  196. package/components/Range/types.d.vue.ts +14 -0
  197. package/components/Range/types.solid.ts +6 -0
  198. package/components/Range/types.svelte.ts +9 -0
  199. package/components/Range/types.ts +25 -0
  200. package/components/Select/Select.astro +41 -39
  201. package/components/Select/Select.vue +85 -0
  202. package/components/Select/types.astro.ts +4 -0
  203. package/components/Select/types.d.vue.ts +17 -0
  204. package/components/Select/types.solid.ts +6 -0
  205. package/components/Select/types.svelte.ts +7 -0
  206. package/components/Select/types.ts +27 -0
  207. package/components/Switch/Switch.astro +14 -39
  208. package/components/Switch/Switch.vue +63 -0
  209. package/components/Switch/SwitchInput.astro +3 -21
  210. package/components/Switch/SwitchInput.vue +14 -0
  211. package/components/Switch/types.astro.ts +5 -0
  212. package/components/Switch/types.d.vue.ts +13 -0
  213. package/components/Switch/types.solid.ts +9 -0
  214. package/components/Switch/types.svelte.ts +9 -0
  215. package/components/Switch/types.ts +16 -0
  216. package/components/Table/Body.astro +1 -3
  217. package/components/Table/Body.vue +5 -0
  218. package/components/Table/Cell.astro +1 -3
  219. package/components/Table/Cell.vue +5 -0
  220. package/components/Table/Column.astro +1 -4
  221. package/components/Table/Column.vue +19 -0
  222. package/components/Table/ColumnGroup.astro +1 -3
  223. package/components/Table/ColumnGroup.vue +5 -0
  224. package/components/Table/Head.astro +1 -3
  225. package/components/Table/Head.vue +5 -0
  226. package/components/Table/HeaderCell.astro +1 -3
  227. package/components/Table/HeaderCell.vue +5 -0
  228. package/components/Table/Row.astro +1 -3
  229. package/components/Table/Row.vue +5 -0
  230. package/components/Table/Table.astro +1 -5
  231. package/components/Table/Table.vue +19 -0
  232. package/components/Table/types.astro.ts +16 -0
  233. package/components/Table/types.d.vue.ts +10 -0
  234. package/components/Table/types.solid.ts +8 -0
  235. package/components/Table/types.svelte.ts +11 -0
  236. package/components/Table/types.ts +9 -0
  237. package/components/Tabs/Tabs.astro +1 -5
  238. package/components/Tabs/Tabs.vue +20 -0
  239. package/components/Tabs/TabsItem.astro +1 -8
  240. package/components/Tabs/TabsItem.vue +39 -0
  241. package/components/Tabs/TabsPanel.astro +1 -6
  242. package/components/Tabs/TabsPanel.vue +31 -0
  243. package/components/Tabs/TabsTab.astro +1 -5
  244. package/components/Tabs/TabsTab.vue +24 -0
  245. package/components/Tabs/types.astro.ts +11 -0
  246. package/components/Tabs/types.d.vue.ts +31 -0
  247. package/components/Tabs/types.solid.ts +12 -0
  248. package/components/Tabs/types.svelte.ts +10 -0
  249. package/components/Tabs/types.ts +19 -0
  250. package/components/TextField/TextField.astro +45 -49
  251. package/components/TextField/TextField.vue +74 -0
  252. package/components/TextField/types.astro.ts +17 -0
  253. package/components/TextField/types.d.vue.ts +20 -0
  254. package/components/TextField/types.solid.ts +22 -0
  255. package/components/TextField/types.svelte.ts +22 -0
  256. package/components/TextField/types.ts +35 -0
  257. package/components/Textarea/Textarea.astro +50 -38
  258. package/components/Textarea/Textarea.vue +64 -0
  259. package/components/Textarea/types.astro.ts +10 -0
  260. package/components/Textarea/types.d.vue.ts +19 -0
  261. package/components/Textarea/types.solid.ts +6 -0
  262. package/components/Textarea/types.svelte.ts +21 -0
  263. package/components/Textarea/types.ts +33 -0
  264. package/components/Toast/Toast.vue +48 -0
  265. package/components/ToggleButton/ToggleButton.astro +1 -11
  266. package/components/ToggleButton/ToggleButton.vue +41 -0
  267. package/components/ToggleButton/types.astro.ts +4 -0
  268. package/components/ToggleButton/types.d.vue.ts +10 -0
  269. package/components/ToggleButton/types.solid.ts +7 -0
  270. package/components/ToggleButton/types.svelte.ts +7 -0
  271. package/components/ToggleButton/types.ts +10 -0
  272. package/components/ToggleGroup/ToggleGroup.astro +1 -8
  273. package/components/ToggleGroup/ToggleGroup.vue +36 -0
  274. package/components/ToggleGroup/types.astro.ts +4 -0
  275. package/components/ToggleGroup/types.d.vue.ts +15 -0
  276. package/components/ToggleGroup/types.solid.ts +4 -0
  277. package/components/ToggleGroup/types.svelte.ts +9 -0
  278. package/components/ToggleGroup/types.ts +15 -0
  279. package/components/Tooltip/Tooltip.astro +2 -9
  280. package/components/Tooltip/Tooltip.vue +22 -0
  281. package/components/Tooltip/types.astro.ts +4 -0
  282. package/components/Tooltip/types.d.vue.ts +10 -0
  283. package/components/Tooltip/types.solid.ts +6 -0
  284. package/components/Tooltip/types.svelte.ts +7 -0
  285. package/components/Tooltip/types.ts +11 -0
  286. package/css/theme.css +0 -1
  287. package/dist/opui.css +0 -1
  288. package/dist/opui.css.map +1 -1
  289. package/package.json +16 -7
  290. package/vue/index.ts +54 -0
@@ -1,42 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- autoFit?: boolean
5
- class?: string
6
- error?: boolean
7
- description?: string
8
- disabled?: boolean
9
- endText?: string
10
- filled?: boolean
11
- id?: string
12
- label?: string
13
- list?: string
14
- max?: number | string
15
- min?: number | string
16
- name?: string
17
- placeholder?: string
18
- required?: boolean
19
- small?: boolean
20
- spread?: boolean
21
- startText?: string
22
- step?: number | string
23
- type?:
24
- | "color"
25
- | "date"
26
- | "datetime-local"
27
- | "email"
28
- | "file"
29
- | "month"
30
- | "numeric"
31
- | "password"
32
- | "search"
33
- | "tel"
34
- | "text"
35
- | "time"
36
- | "url"
37
- | "week"
38
- value?: string | number
39
- }
2
+ import type { Props } from "./types.astro"
40
3
 
41
4
  export const title = "Text Field"
42
5
 
@@ -87,14 +50,18 @@ const fieldName = name || currentFieldName
87
50
  >
88
51
  {
89
52
  (label || Astro.slots.has("label")) && (
90
- <!-- prettier-ignore -->
91
- <span class="ui-label">{label}<slot name="label" /></span>
53
+ <span class="ui-label">
54
+ {label}
55
+ <slot name="label" />
56
+ </span>
92
57
  )
93
58
  }
94
59
  {
95
60
  (startTextValue || Astro.slots.has("description")) && (
96
- <!-- prettier-ignore -->
97
- <span class="ui-start-text">{startTextValue}<slot name="description" /></span>
61
+ <span class="ui-start-text">
62
+ {startTextValue}
63
+ <slot name="description" />
64
+ </span>
98
65
  )
99
66
  }
100
67
  <span class="ui-field">
@@ -113,15 +80,44 @@ const fieldName = name || currentFieldName
113
80
  type={type === "numeric" ? "text" : type}
114
81
  value={value}
115
82
  />
116
- {Astro.slots.has("prefix") && <span class="ui-prefix"><slot name="prefix" /></span>}
117
- {Astro.slots.has("suffix") && <span class="ui-suffix"><slot name="suffix" /></span>}
118
- {Astro.slots.has("header") && <span class="ui-header"><slot name="header" /></span>}
119
- {Astro.slots.has("footer") && <span class="ui-footer"><slot name="footer" /></span>}
83
+ {
84
+ Astro.slots.has("prefix") && (
85
+ <span class="ui-prefix">
86
+ <slot name="prefix" />
87
+ </span>
88
+ )
89
+ }
90
+ {
91
+ Astro.slots.has("suffix") && (
92
+ <span class="ui-suffix">
93
+ <slot name="suffix" />
94
+ </span>
95
+ )
96
+ }
97
+ {
98
+ Astro.slots.has("header") && (
99
+ <span class="ui-header">
100
+ <slot name="header" />
101
+ </span>
102
+ )
103
+ }
104
+ {
105
+ Astro.slots.has("footer") && (
106
+ <span class="ui-footer">
107
+ <slot name="footer" />
108
+ </span>
109
+ )
110
+ }
120
111
  </span>
121
112
  {
122
- (endText || Astro.slots.has("end-text") || Astro.slots.has("supporting-text")) && (
123
- <!-- prettier-ignore -->
124
- <span class="ui-end-text">{endText}<slot name="end-text" /><slot name="supporting-text" /></span>
113
+ (endText ||
114
+ Astro.slots.has("end-text") ||
115
+ Astro.slots.has("supporting-text")) && (
116
+ <span class="ui-end-text">
117
+ {endText}
118
+ <slot name="end-text" />
119
+ <slot name="supporting-text" />
120
+ </span>
125
121
  )
126
122
  }
127
123
  <slot />
@@ -0,0 +1,74 @@
1
+ <script setup lang="ts">
2
+ import { useId, computed } from "vue"
3
+ import type { Props, Slots } from "./types.d.vue"
4
+
5
+ defineOptions({
6
+ inheritAttrs: false,
7
+ })
8
+
9
+ const props = withDefaults(defineProps<Props>(), {
10
+ type: "text",
11
+ })
12
+ defineSlots<Slots>()
13
+ const modelValue = defineModel<string | number>()
14
+
15
+ const fieldId = props.id || useId()
16
+ const startTextValue = computed(() => props.description || props.startText)
17
+ </script>
18
+
19
+ <template>
20
+ <label
21
+ :class="[
22
+ 'ui-text-field',
23
+ {
24
+ 'ui-auto-fit': props.autoFit,
25
+ 'ui-filled': props.filled,
26
+ 'ui-spread': props.spread,
27
+ 'ui-small': props.small,
28
+ },
29
+ props.class,
30
+ ]"
31
+ :data-invalid="props.error || undefined"
32
+ >
33
+ <span v-if="props.label || $slots.label" class="ui-label">
34
+ <slot name="label">{{ props.label }}</slot>
35
+ </span>
36
+
37
+ <span v-if="startTextValue || $slots.description" class="ui-start-text">
38
+ <slot name="description">{{ startTextValue }}</slot>
39
+ </span>
40
+
41
+ <span class="ui-field">
42
+ <input
43
+ :id="fieldId"
44
+ :inputmode="props.type === 'numeric' ? 'numeric' : undefined"
45
+ :pattern="props.type === 'numeric' ? '[0-9]*' : undefined"
46
+ :type="props.type === 'numeric' ? 'text' : props.type"
47
+ v-bind="$attrs"
48
+ v-model="modelValue"
49
+ />
50
+ <span class="ui-prefix" v-if="$slots.prefix"
51
+ ><slot name="prefix"></slot
52
+ ></span>
53
+ <span class="ui-suffix" v-if="$slots.suffix"
54
+ ><slot name="suffix"></slot
55
+ ></span>
56
+ <span class="ui-header" v-if="$slots.header"
57
+ ><slot name="header"></slot
58
+ ></span>
59
+ <span class="ui-footer" v-if="$slots.footer"
60
+ ><slot name="footer"></slot
61
+ ></span>
62
+ </span>
63
+
64
+ <span
65
+ v-if="props.endText || $slots['end-text'] || $slots['supporting-text']"
66
+ class="ui-end-text"
67
+ >
68
+ <slot name="end-text">{{ props.endText }}</slot
69
+ ><slot name="supporting-text"></slot>
70
+ </span>
71
+
72
+ <slot></slot>
73
+ </label>
74
+ </template>
@@ -0,0 +1,17 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ type InputProps = {
5
+ // Add 'numeric' as valid input type
6
+ type?: HTMLAttributes<"input">["type"] | "numeric"
7
+ } &
8
+ // include the rest
9
+ Pick<HTMLAttributes<"input">, Exclude<Base.InputProps, "type">>
10
+
11
+ export type Props =
12
+ // Unique component props
13
+ Base.Props &
14
+ // All html label attributes
15
+ HTMLAttributes<"label"> &
16
+ // Input attributes
17
+ InputProps
@@ -0,0 +1,20 @@
1
+ import type { HTMLAttributes, InputHTMLAttributes, Slot } from "vue"
2
+ import type { Props as BaseProps } from "./types"
3
+
4
+ export type Props = BaseProps & {
5
+ class?: HTMLAttributes["class"]
6
+ id?: HTMLAttributes["id"]
7
+ type?: InputHTMLAttributes["type"] | "numeric"
8
+ }
9
+
10
+ export type Slots = {
11
+ default?: Slot
12
+ description?: Slot
13
+ "end-text"?: Slot
14
+ footer?: Slot
15
+ header?: Slot
16
+ label?: Slot
17
+ prefix?: Slot
18
+ "supporting-text"?: Slot
19
+ suffix?: Slot
20
+ }
@@ -0,0 +1,22 @@
1
+ import type * as Base from "./types"
2
+ import type { JSX } from "solid-js"
3
+
4
+ export type Props = Base.Props &
5
+ Omit<JSX.InputHTMLAttributes<HTMLInputElement>, "type"> & {
6
+ type?:
7
+ | "text"
8
+ | "password"
9
+ | "email"
10
+ | "number"
11
+ | "numeric"
12
+ | "search"
13
+ | "tel"
14
+ | "url"
15
+ | "date"
16
+ | "time"
17
+ | "datetime-local"
18
+ | "month"
19
+ | "week"
20
+ | "color"
21
+ | string
22
+ } & Partial<Base.Slots<JSX.Element>>
@@ -0,0 +1,22 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+ import type { Snippet } from "svelte"
4
+
5
+ type InputProps = {
6
+ // Add 'numeric' as valid input type
7
+ type?: SvelteHTMLElements["input"]["type"] | "numeric"
8
+ } &
9
+ // include the rest
10
+ Pick<SvelteHTMLElements["input"], Exclude<Base.InputProps, "type">>
11
+
12
+ type Snippets = Base.Slots<Snippet>
13
+
14
+ export type Props =
15
+ // Unique component props, except snippets
16
+ Omit<Base.Props, keyof Snippets> &
17
+ // All html label attributes, (except prefix)
18
+ Omit<SvelteHTMLElements["label"], "prefix"> &
19
+ // Input attributes
20
+ InputProps &
21
+ // Snippets
22
+ Snippets
@@ -0,0 +1,35 @@
1
+ export type Props = {
2
+ autoFit?: boolean
3
+ error?: boolean
4
+ description?: string
5
+ endText?: string
6
+ filled?: boolean
7
+ label?: string
8
+ small?: boolean
9
+ spread?: boolean
10
+ startText?: string
11
+ }
12
+
13
+ export type Slots<S> = {
14
+ description: string | S
15
+ endText: string | S
16
+ footer: string | S
17
+ header: string | S
18
+ label: string | S
19
+ prefix: string | S
20
+ startText: string | S
21
+ suffix: string | S
22
+ supportingText: string | S
23
+ }
24
+
25
+ export type InputProps =
26
+ | "disabled"
27
+ | "list"
28
+ | "max"
29
+ | "min"
30
+ | "name"
31
+ | "placeholder"
32
+ | "required"
33
+ | "step"
34
+ | "type"
35
+ | "value"
@@ -1,26 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- autoFit?: boolean
5
- class?: string
6
- cols?: number
7
- description?: string
8
- disabled?: boolean
9
- error?: boolean
10
- filled?: boolean
11
- id?: string
12
- label?: string
13
- maxlength?: number
14
- minlength?: number
15
- name?: string
16
- spread?: boolean
17
- placeholder?: string
18
- required?: boolean
19
- rows?: number
20
- small?: boolean
21
- endText?: string
22
- value?: string
23
- }
2
+ import type { Props } from "./types.astro"
24
3
 
25
4
  export const title = "Textarea"
26
5
 
@@ -66,17 +45,21 @@ const fieldName = name || currentFieldName
66
45
  data-invalid={error || undefined}
67
46
  {...rest}
68
47
  >
69
- {
70
- (label || Astro.slots.has("label")) && (
71
- <!-- prettier-ignore -->
72
- <span class="ui-label">{label}<slot name="label" /></span>
48
+ {
49
+ (label || Astro.slots.has("label")) && (
50
+ <span class="ui-label">
51
+ {label}
52
+ <slot name="label" />
53
+ </span>
73
54
  )
74
55
  }
75
56
 
76
- {
77
- (description || Astro.slots.has("description")) && (
78
- <!-- prettier-ignore -->
79
- <span class="ui-start-text">{description}<slot name="description" /></span>
57
+ {
58
+ (description || Astro.slots.has("description")) && (
59
+ <span class="ui-start-text">
60
+ {description}
61
+ <slot name="description" />
62
+ </span>
80
63
  )
81
64
  }
82
65
  <span class="ui-field">
@@ -91,15 +74,44 @@ const fieldName = name || currentFieldName
91
74
  required={required}
92
75
  rows={rows}
93
76
  value={value}></textarea>
94
- {Astro.slots.has("prefix") && <span class="ui-prefix"><slot name="prefix" /></span>}
95
- {Astro.slots.has("suffix") && <span class="ui-suffix"><slot name="suffix" /></span>}
96
- {Astro.slots.has("header") && <span class="ui-header"><slot name="header" /></span>}
97
- {Astro.slots.has("footer") && <span class="ui-footer"><slot name="footer" /></span>}
98
- </span>
99
77
  {
100
- (endText || Astro.slots.has("end-text") || Astro.slots.has("supporting-text")) && (
101
- <!-- prettier-ignore -->
102
- <span class="ui-end-text">{endText}<slot name="end-text" /><slot name="supporting-text" /></span>
78
+ Astro.slots.has("prefix") && (
79
+ <span class="ui-prefix">
80
+ <slot name="prefix" />
81
+ </span>
82
+ )
83
+ }
84
+ {
85
+ Astro.slots.has("suffix") && (
86
+ <span class="ui-suffix">
87
+ <slot name="suffix" />
88
+ </span>
89
+ )
90
+ }
91
+ {
92
+ Astro.slots.has("header") && (
93
+ <span class="ui-header">
94
+ <slot name="header" />
95
+ </span>
96
+ )
97
+ }
98
+ {
99
+ Astro.slots.has("footer") && (
100
+ <span class="ui-footer">
101
+ <slot name="footer" />
102
+ </span>
103
+ )
104
+ }
105
+ </span>
106
+ {
107
+ (endText ||
108
+ Astro.slots.has("end-text") ||
109
+ Astro.slots.has("supporting-text")) && (
110
+ <span class="ui-end-text">
111
+ {endText}
112
+ <slot name="end-text" />
113
+ <slot name="supporting-text" />
114
+ </span>
103
115
  )
104
116
  }
105
117
  <slot />
@@ -0,0 +1,64 @@
1
+ <script setup lang="ts">
2
+ import { useId } from "vue"
3
+ import type { Props, Slots } from "./types.d.vue"
4
+
5
+ defineOptions({
6
+ inheritAttrs: false,
7
+ })
8
+
9
+ const props = defineProps<Props>()
10
+ defineSlots<Slots>()
11
+ const modelValue = defineModel<string>()
12
+
13
+ const fieldId = props.id || useId()
14
+ </script>
15
+
16
+ <template>
17
+ <label
18
+ :class="[
19
+ 'ui-textarea',
20
+ {
21
+ 'ui-auto-fit': props.autoFit,
22
+ 'ui-filled': props.filled,
23
+ 'ui-spread': props.spread,
24
+ 'ui-small': props.small,
25
+ },
26
+ props.class,
27
+ ]"
28
+ :data-invalid="props.error || undefined"
29
+ >
30
+ <span v-if="props.label || $slots.label" class="ui-label">
31
+ <slot name="label">{{ props.label }}</slot>
32
+ </span>
33
+
34
+ <span v-if="props.description || $slots.description" class="ui-start-text">
35
+ <slot name="description">{{ props.description }}</slot>
36
+ </span>
37
+
38
+ <span class="ui-field">
39
+ <textarea :id="fieldId" v-bind="$attrs" v-model="modelValue"></textarea>
40
+ <span class="ui-prefix" v-if="$slots.prefix"
41
+ ><slot name="prefix"></slot
42
+ ></span>
43
+ <span class="ui-suffix" v-if="$slots.suffix"
44
+ ><slot name="suffix"></slot
45
+ ></span>
46
+ <span class="ui-header" v-if="$slots.header"
47
+ ><slot name="header"></slot
48
+ ></span>
49
+ <span class="ui-footer" v-if="$slots.footer"
50
+ ><slot name="footer"></slot
51
+ ></span>
52
+ </span>
53
+
54
+ <span
55
+ v-if="props.endText || $slots['end-text'] || $slots['supporting-text']"
56
+ class="ui-end-text"
57
+ >
58
+ <slot name="end-text">{{ props.endText }}</slot
59
+ ><slot name="supporting-text"></slot>
60
+ </span>
61
+
62
+ <slot></slot>
63
+ </label>
64
+ </template>
@@ -0,0 +1,10 @@
1
+ import type * as Base from "./types"
2
+ import type { HTMLAttributes } from "astro/types"
3
+
4
+ export type Props =
5
+ // Unique component props
6
+ Base.Props &
7
+ // All html label attributes
8
+ HTMLAttributes<"label"> &
9
+ // Some input attributes for spreading
10
+ Pick<HTMLAttributes<"textarea">, Base.TextareaProps>
@@ -0,0 +1,19 @@
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
+ id?: HTMLAttributes["id"]
7
+ }
8
+
9
+ export type Slots = {
10
+ default?: Slot
11
+ description?: Slot
12
+ "end-text"?: Slot
13
+ footer?: Slot
14
+ header?: Slot
15
+ label?: Slot
16
+ prefix?: Slot
17
+ "supporting-text"?: Slot
18
+ suffix?: Slot
19
+ }
@@ -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
+ JSX.TextareaHTMLAttributes<HTMLTextAreaElement> &
6
+ Partial<Base.Slots<JSX.Element>>
@@ -0,0 +1,21 @@
1
+ import type * as Base from "./types"
2
+ import type { SvelteHTMLElements } from "svelte/elements"
3
+ import type { Snippet } from "svelte"
4
+
5
+ type InputProps = {
6
+ type?: SvelteHTMLElements["input"]["type"] | "numeric"
7
+ }
8
+
9
+ type Snippets = Base.Slots<Snippet>
10
+
11
+ export type Props =
12
+ // Unique component props, except snippets
13
+ Omit<Base.Props, keyof Snippets> &
14
+ // All html label attributes, (except prefix)
15
+ Omit<SvelteHTMLElements["label"], "prefix"> &
16
+ // Some input attributes for spreading
17
+ Pick<SvelteHTMLElements["textarea"], Base.TextareaProps> &
18
+ // Special input type attribute with 'numeric'
19
+ InputProps &
20
+ // Snippets
21
+ Snippets
@@ -0,0 +1,33 @@
1
+ export type Props = {
2
+ autoFit?: boolean
3
+ description?: string
4
+ error?: boolean
5
+ filled?: boolean
6
+ label?: string
7
+ spread?: boolean
8
+ small?: boolean
9
+ endText?: string
10
+ }
11
+
12
+ export type Slots<S> = {
13
+ description?: string | S
14
+ footer?: string | S
15
+ header?: string | S
16
+ label?: string | S
17
+ prefix?: string | S
18
+ startText?: string | S
19
+ suffix?: string | S
20
+ endText?: string | S
21
+ supportingText?: string | S
22
+ }
23
+
24
+ export type TextareaProps =
25
+ | "cols"
26
+ | "disabled"
27
+ | "maxlength"
28
+ | "minlength"
29
+ | "name"
30
+ | "placeholder"
31
+ | "required"
32
+ | "rows"
33
+ | "value"
@@ -0,0 +1,48 @@
1
+ <script setup lang="ts">
2
+ import { onMounted } from "vue"
3
+ import { initToastManager } from "../../css/js/toast.js"
4
+
5
+ onMounted(() => {
6
+ initToastManager()
7
+ })
8
+ </script>
9
+
10
+ <template>
11
+ <output
12
+ aria-live="polite"
13
+ id="toast-manager"
14
+ popover="manual"
15
+ role="status"
16
+ ></output>
17
+
18
+ <template id="toast-template">
19
+ <div class="ui-toast" role="alert">
20
+ <span class="ui-icon" data-toast-icon></span>
21
+ <div class="ui-content">
22
+ <div class="ui-title" data-toast-title></div>
23
+ <div class="ui-description" data-toast-description></div>
24
+ </div>
25
+ <button
26
+ aria-label="Close"
27
+ class="ui-close-button"
28
+ data-toast-close
29
+ type="button"
30
+ >
31
+ <svg
32
+ fill="none"
33
+ height="20"
34
+ stroke="currentColor"
35
+ stroke-linecap="round"
36
+ stroke-linejoin="round"
37
+ stroke-width="2"
38
+ viewBox="0 0 24 24"
39
+ width="20"
40
+ xmlns="http://www.w3.org/2000/svg"
41
+ >
42
+ <path d="M18 6 6 18"></path>
43
+ <path d="m6 6 12 12"></path>
44
+ </svg>
45
+ </button>
46
+ </div>
47
+ </template>
48
+ </template>
@@ -1,15 +1,5 @@
1
1
  ---
2
- type Props = {
3
- [key: string]: any
4
- class?: string
5
- disabled?: boolean
6
- label?: string
7
- name?: string
8
- pressed?: boolean
9
- size?: "small" | "x-small"
10
- type?: "checkbox" | "radio"
11
- value?: string
12
- }
2
+ import type { Props } from "./types.astro"
13
3
 
14
4
  export const title = "Toggle Button"
15
5