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.
- package/CHANGELOG.md +18 -0
- package/README.md +4 -5
- package/components/AGENTS.md +12 -13
- package/components/Accordion/Accordion.astro +5 -9
- package/components/Accordion/Accordion.vue +38 -0
- package/components/Accordion/types.astro.ts +4 -0
- package/components/Accordion/types.d.vue.ts +15 -0
- package/components/Accordion/types.solid.ts +6 -0
- package/components/Accordion/types.svelte.ts +7 -0
- package/components/Accordion/types.ts +10 -0
- package/components/Anchor/Anchor.astro +1 -7
- package/components/Anchor/Anchor.vue +41 -0
- package/components/Anchor/types.astro.ts +4 -0
- package/components/Anchor/types.d.vue.ts +10 -0
- package/components/Anchor/types.solid.ts +6 -0
- package/components/Anchor/types.svelte.ts +7 -0
- package/components/Anchor/types.ts +9 -0
- package/components/Avatar/Avatar.astro +4 -13
- package/components/Avatar/Avatar.vue +24 -0
- package/components/Avatar/types.astro.ts +10 -0
- package/components/Avatar/types.d.vue.ts +11 -0
- package/components/Avatar/types.solid.ts +11 -0
- package/components/Avatar/types.svelte.ts +12 -0
- package/components/Avatar/types.ts +29 -0
- package/components/Badge/Badge.astro +3 -11
- package/components/Badge/Badge.vue +39 -0
- package/components/Badge/types.astro.ts +4 -0
- package/components/Badge/types.d.vue.ts +10 -0
- package/components/Badge/types.solid.ts +4 -0
- package/components/Badge/types.svelte.ts +4 -0
- package/components/Badge/types.ts +8 -0
- package/components/Button/Button.astro +18 -27
- package/components/Button/Button.vue +27 -0
- package/components/Button/types.astro.ts +6 -0
- package/components/Button/types.d.vue.ts +10 -0
- package/components/Button/types.solid.ts +8 -0
- package/components/Button/types.svelte.ts +6 -0
- package/components/Button/types.ts +16 -0
- package/components/ButtonGroup/ButtonGroup.astro +1 -8
- package/components/ButtonGroup/ButtonGroup.vue +22 -0
- package/components/ButtonGroup/types.astro.ts +4 -0
- package/components/ButtonGroup/types.d.vue.ts +10 -0
- package/components/ButtonGroup/types.solid.ts +4 -0
- package/components/ButtonGroup/types.svelte.ts +4 -0
- package/components/ButtonGroup/types.ts +7 -0
- package/components/Callout/Callout.astro +10 -9
- package/components/Callout/Callout.vue +63 -0
- package/components/Callout/types.astro.ts +4 -0
- package/components/Callout/types.d.vue.ts +10 -0
- package/components/Callout/types.solid.ts +6 -0
- package/components/Callout/types.svelte.ts +7 -0
- package/components/Callout/types.ts +10 -0
- package/components/Card/Card.astro +1 -5
- package/components/Card/Card.vue +28 -0
- package/components/Card/types.astro.ts +4 -0
- package/components/Card/types.d.vue.ts +10 -0
- package/components/Card/types.solid.ts +6 -0
- package/components/Card/types.svelte.ts +7 -0
- package/components/Card/types.ts +11 -0
- package/components/Checkbox/Checkbox.astro +6 -36
- package/components/Checkbox/Checkbox.vue +43 -0
- package/components/Checkbox/CheckboxInput.astro +2 -18
- package/components/Checkbox/CheckboxInput.vue +32 -0
- package/components/Checkbox/types.astro.ts +8 -0
- package/components/Checkbox/types.d.vue.ts +11 -0
- package/components/Checkbox/types.solid.ts +9 -0
- package/components/Checkbox/types.svelte.ts +12 -0
- package/components/Checkbox/types.ts +16 -0
- package/components/Chip/Chip.astro +6 -12
- package/components/Chip/Chip.vue +37 -0
- package/components/Chip/types.astro.ts +9 -0
- package/components/Chip/types.d.vue.ts +10 -0
- package/components/Chip/types.solid.ts +10 -0
- package/components/Chip/types.svelte.ts +14 -0
- package/components/Chip/types.ts +13 -0
- package/components/ClassicSelect/ClassicSelect.astro +5 -28
- package/components/ClassicSelect/ClassicSelect.vue +54 -0
- package/components/ClassicSelect/types.astro.ts +8 -0
- package/components/ClassicSelect/types.d.vue.ts +10 -0
- package/components/ClassicSelect/types.solid.ts +5 -0
- package/components/ClassicSelect/types.svelte.ts +5 -0
- package/components/ClassicSelect/types.ts +15 -0
- package/components/DescriptionList/Description.astro +1 -4
- package/components/DescriptionList/Description.vue +12 -0
- package/components/DescriptionList/DescriptionList.astro +1 -5
- package/components/DescriptionList/DescriptionList.vue +23 -0
- package/components/DescriptionList/Item.astro +1 -4
- package/components/DescriptionList/Item.vue +12 -0
- package/components/DescriptionList/Term.astro +1 -4
- package/components/DescriptionList/Term.vue +12 -0
- package/components/DescriptionList/types.astro.ts +10 -0
- package/components/DescriptionList/types.d.vue.ts +10 -0
- package/components/DescriptionList/types.solid.ts +4 -0
- package/components/DescriptionList/types.svelte.ts +4 -0
- package/components/DescriptionList/types.ts +3 -0
- package/components/Dialog/Dialog.astro +1 -6
- package/components/Dialog/Dialog.vue +35 -0
- package/components/Dialog/types.astro.ts +4 -0
- package/components/Dialog/types.d.vue.ts +10 -0
- package/components/Dialog/types.solid.ts +8 -0
- package/components/Dialog/types.svelte.ts +7 -0
- package/components/Dialog/types.ts +10 -0
- package/components/Divider/Divider.astro +1 -6
- package/components/Divider/Divider.vue +12 -0
- package/components/Divider/types.astro.ts +4 -0
- package/components/Divider/types.d.vue.ts +6 -0
- package/components/Divider/types.solid.ts +4 -0
- package/components/Divider/types.svelte.ts +4 -0
- package/components/Divider/types.ts +3 -0
- package/components/Drawer/Drawer.astro +10 -12
- package/components/Drawer/Drawer.vue +46 -0
- package/components/Drawer/DrawerFooter.astro +1 -4
- package/components/Drawer/DrawerFooter.vue +16 -0
- package/components/Drawer/DrawerHeader.astro +1 -5
- package/components/Drawer/DrawerHeader.vue +36 -0
- package/components/Drawer/types.astro.ts +8 -0
- package/components/Drawer/types.d.vue.ts +31 -0
- package/components/Drawer/types.solid.ts +12 -0
- package/components/Drawer/types.svelte.ts +15 -0
- package/components/Drawer/types.ts +20 -0
- package/components/FieldDescription/FieldDescription.astro +1 -5
- package/components/FieldDescription/FieldDescription.vue +12 -0
- package/components/FieldDescription/types.astro.ts +4 -0
- package/components/FieldDescription/types.d.vue.ts +10 -0
- package/components/FieldDescription/types.solid.ts +5 -0
- package/components/FieldDescription/types.svelte.ts +4 -0
- package/components/FieldDescription/types.ts +1 -0
- package/components/FieldGroup/FieldGroup.astro +1 -8
- package/components/FieldGroup/FieldGroup.vue +25 -0
- package/components/FieldGroup/types.astro.ts +4 -0
- package/components/FieldGroup/types.d.vue.ts +12 -0
- package/components/FieldGroup/types.solid.ts +5 -0
- package/components/FieldGroup/types.svelte.ts +4 -0
- package/components/FieldGroup/types.ts +4 -0
- package/components/FieldLegend/FieldLegend.astro +4 -8
- package/components/FieldLegend/FieldLegend.vue +18 -0
- package/components/FieldLegend/types.astro.ts +6 -0
- package/components/FieldLegend/types.d.vue.ts +11 -0
- package/components/FieldLegend/types.solid.ts +5 -0
- package/components/FieldLegend/types.svelte.ts +6 -0
- package/components/FieldLegend/types.ts +1 -0
- package/components/FieldSet/FieldSet.astro +1 -5
- package/components/FieldSet/FieldSet.vue +18 -0
- package/components/FieldSet/types.astro.ts +6 -0
- package/components/FieldSet/types.d.vue.ts +11 -0
- package/components/FieldSet/types.solid.ts +5 -0
- package/components/FieldSet/types.svelte.ts +8 -0
- package/components/FieldSet/types.ts +5 -0
- package/components/Form/Form.astro +1 -6
- package/components/Form/Form.vue +14 -0
- package/components/Form/types.astro.ts +6 -0
- package/components/Form/types.d.vue.ts +11 -0
- package/components/Form/types.solid.ts +5 -0
- package/components/Form/types.svelte.ts +7 -0
- package/components/Form/types.ts +1 -0
- package/components/IconButton/IconButton.astro +18 -20
- package/components/IconButton/IconButton.vue +24 -0
- package/components/IconButton/types.astro.ts +6 -0
- package/components/IconButton/types.d.vue.ts +10 -0
- package/components/IconButton/types.solid.ts +8 -0
- package/components/IconButton/types.svelte.ts +6 -0
- package/components/IconButton/types.ts +16 -0
- package/components/List/List.astro +1 -8
- package/components/List/List.vue +28 -0
- package/components/List/types.astro.ts +4 -0
- package/components/List/types.d.vue.ts +10 -0
- package/components/List/types.solid.ts +4 -0
- package/components/List/types.svelte.ts +4 -0
- package/components/List/types.ts +7 -0
- package/components/ListItem/ListItem.astro +3 -13
- package/components/ListItem/ListItem.vue +98 -0
- package/components/ListItem/types.astro.ts +10 -0
- package/components/ListItem/types.d.vue.ts +10 -0
- package/components/ListItem/types.solid.ts +12 -0
- package/components/ListItem/types.svelte.ts +14 -0
- package/components/ListItem/types.ts +32 -0
- package/components/Progress/Progress.astro +1 -11
- package/components/Progress/Progress.vue +34 -0
- package/components/Progress/types.astro.ts +4 -0
- package/components/Progress/types.d.vue.ts +10 -0
- package/components/Progress/types.solid.ts +4 -0
- package/components/Progress/types.svelte.ts +4 -0
- package/components/Progress/types.ts +10 -0
- package/components/Radio/Radio.astro +6 -32
- package/components/Radio/Radio.vue +41 -0
- package/components/Radio/RadioInput.astro +3 -20
- package/components/Radio/RadioInput.vue +14 -0
- package/components/Radio/types.astro.ts +6 -0
- package/components/Radio/types.d.vue.ts +11 -0
- package/components/Radio/types.solid.ts +9 -0
- package/components/Radio/types.svelte.ts +12 -0
- package/components/Radio/types.ts +12 -0
- package/components/Range/Range.astro +23 -31
- package/components/Range/Range.vue +85 -0
- package/components/Range/types.astro.ts +6 -0
- package/components/Range/types.d.vue.ts +14 -0
- package/components/Range/types.solid.ts +6 -0
- package/components/Range/types.svelte.ts +9 -0
- package/components/Range/types.ts +25 -0
- package/components/Select/Select.astro +41 -39
- package/components/Select/Select.vue +85 -0
- package/components/Select/types.astro.ts +4 -0
- package/components/Select/types.d.vue.ts +17 -0
- package/components/Select/types.solid.ts +6 -0
- package/components/Select/types.svelte.ts +7 -0
- package/components/Select/types.ts +27 -0
- package/components/Switch/Switch.astro +14 -39
- package/components/Switch/Switch.vue +63 -0
- package/components/Switch/SwitchInput.astro +3 -21
- package/components/Switch/SwitchInput.vue +14 -0
- package/components/Switch/types.astro.ts +5 -0
- package/components/Switch/types.d.vue.ts +13 -0
- package/components/Switch/types.solid.ts +9 -0
- package/components/Switch/types.svelte.ts +9 -0
- package/components/Switch/types.ts +16 -0
- package/components/Table/Body.astro +1 -3
- package/components/Table/Body.vue +5 -0
- package/components/Table/Cell.astro +1 -3
- package/components/Table/Cell.vue +5 -0
- package/components/Table/Column.astro +1 -4
- package/components/Table/Column.vue +19 -0
- package/components/Table/ColumnGroup.astro +1 -3
- package/components/Table/ColumnGroup.vue +5 -0
- package/components/Table/Head.astro +1 -3
- package/components/Table/Head.vue +5 -0
- package/components/Table/HeaderCell.astro +1 -3
- package/components/Table/HeaderCell.vue +5 -0
- package/components/Table/Row.astro +1 -3
- package/components/Table/Row.vue +5 -0
- package/components/Table/Table.astro +1 -5
- package/components/Table/Table.vue +19 -0
- package/components/Table/types.astro.ts +16 -0
- package/components/Table/types.d.vue.ts +10 -0
- package/components/Table/types.solid.ts +8 -0
- package/components/Table/types.svelte.ts +11 -0
- package/components/Table/types.ts +9 -0
- package/components/Tabs/Tabs.astro +1 -5
- package/components/Tabs/Tabs.vue +20 -0
- package/components/Tabs/TabsItem.astro +1 -8
- package/components/Tabs/TabsItem.vue +39 -0
- package/components/Tabs/TabsPanel.astro +1 -6
- package/components/Tabs/TabsPanel.vue +31 -0
- package/components/Tabs/TabsTab.astro +1 -5
- package/components/Tabs/TabsTab.vue +24 -0
- package/components/Tabs/types.astro.ts +11 -0
- package/components/Tabs/types.d.vue.ts +31 -0
- package/components/Tabs/types.solid.ts +12 -0
- package/components/Tabs/types.svelte.ts +10 -0
- package/components/Tabs/types.ts +19 -0
- package/components/TextField/TextField.astro +45 -49
- package/components/TextField/TextField.vue +74 -0
- package/components/TextField/types.astro.ts +17 -0
- package/components/TextField/types.d.vue.ts +20 -0
- package/components/TextField/types.solid.ts +22 -0
- package/components/TextField/types.svelte.ts +22 -0
- package/components/TextField/types.ts +35 -0
- package/components/Textarea/Textarea.astro +50 -38
- package/components/Textarea/Textarea.vue +64 -0
- package/components/Textarea/types.astro.ts +10 -0
- package/components/Textarea/types.d.vue.ts +19 -0
- package/components/Textarea/types.solid.ts +6 -0
- package/components/Textarea/types.svelte.ts +21 -0
- package/components/Textarea/types.ts +33 -0
- package/components/Toast/Toast.vue +48 -0
- package/components/ToggleButton/ToggleButton.astro +1 -11
- package/components/ToggleButton/ToggleButton.vue +41 -0
- package/components/ToggleButton/types.astro.ts +4 -0
- package/components/ToggleButton/types.d.vue.ts +10 -0
- package/components/ToggleButton/types.solid.ts +7 -0
- package/components/ToggleButton/types.svelte.ts +7 -0
- package/components/ToggleButton/types.ts +10 -0
- package/components/ToggleGroup/ToggleGroup.astro +1 -8
- package/components/ToggleGroup/ToggleGroup.vue +36 -0
- package/components/ToggleGroup/types.astro.ts +4 -0
- package/components/ToggleGroup/types.d.vue.ts +15 -0
- package/components/ToggleGroup/types.solid.ts +4 -0
- package/components/ToggleGroup/types.svelte.ts +9 -0
- package/components/ToggleGroup/types.ts +15 -0
- package/components/Tooltip/Tooltip.astro +2 -9
- package/components/Tooltip/Tooltip.vue +22 -0
- package/components/Tooltip/types.astro.ts +4 -0
- package/components/Tooltip/types.d.vue.ts +10 -0
- package/components/Tooltip/types.solid.ts +6 -0
- package/components/Tooltip/types.svelte.ts +7 -0
- package/components/Tooltip/types.ts +11 -0
- package/css/theme.css +0 -1
- package/dist/opui.css +0 -1
- package/dist/opui.css.map +1 -1
- package/package.json +16 -7
- package/vue/index.ts +54 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.3.0 - 2026-06-04
|
|
4
|
+
|
|
5
|
+
Vue support! 🎉
|
|
6
|
+
It's a lot of work but hopefully it's all good with them.
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Vue components, importable from `opui-css/vue`.
|
|
11
|
+
- Adjusted types for Vue, Svelte and Solid.
|
|
12
|
+
|
|
13
|
+
## 5.2.0 - 2026-06-03
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- 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).
|
|
18
|
+
|
|
19
|
+
Thank you to [somephic](https://github.com/somephic) for the contribution and discussions!
|
|
20
|
+
|
|
3
21
|
## 5.1.2 - 2026-05-29
|
|
4
22
|
|
|
5
23
|
### 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
|
|
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
|
package/components/AGENTS.md
CHANGED
|
@@ -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**:
|
|
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",
|
|
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 `
|
|
51
|
-
- **REST Support**:
|
|
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
|
|
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
|
-
|
|
32
|
-
<summary id={summaryId} aria-controls={contentId}
|
|
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,38 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useId } from "vue"
|
|
3
|
+
import type { Props, Slots } from "./types.d.vue"
|
|
4
|
+
|
|
5
|
+
const { class: className, name, open, variant } = defineProps<Props>()
|
|
6
|
+
defineSlots<Slots>()
|
|
7
|
+
|
|
8
|
+
const summaryId = useId()
|
|
9
|
+
const contentId = useId()
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<details
|
|
14
|
+
:name="name"
|
|
15
|
+
:class="['ui-accordion', 'ui-card', variant && `ui-${variant}`, className]"
|
|
16
|
+
:open="open"
|
|
17
|
+
>
|
|
18
|
+
<!-- Summary -->
|
|
19
|
+
<summary :id="summaryId" :aria-controls="contentId">
|
|
20
|
+
<slot name="summary"></slot><slot name="marker"></slot>
|
|
21
|
+
</summary>
|
|
22
|
+
|
|
23
|
+
<!-- Content -->
|
|
24
|
+
<div
|
|
25
|
+
:id="contentId"
|
|
26
|
+
class="ui-content"
|
|
27
|
+
role="region"
|
|
28
|
+
:aria-labelledby="summaryId"
|
|
29
|
+
>
|
|
30
|
+
<slot></slot>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- Actions -->
|
|
34
|
+
<div v-if="$slots.actions" class="ui-actions">
|
|
35
|
+
<slot name="actions"></slot>
|
|
36
|
+
</div>
|
|
37
|
+
</details>
|
|
38
|
+
</template>
|
|
@@ -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,41 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useId } from "vue"
|
|
3
|
+
import type { Props, Slots } from "./types.d.vue"
|
|
4
|
+
|
|
5
|
+
const { alignment, id: idProp, trigger = "always" } = defineProps<Props>()
|
|
6
|
+
defineSlots<Slots>()
|
|
7
|
+
|
|
8
|
+
const isHover = trigger === "hover"
|
|
9
|
+
const uid = useId()
|
|
10
|
+
const id = isHover ? (idProp ?? uid) : undefined
|
|
11
|
+
|
|
12
|
+
const insetMap: Record<string, string> = {
|
|
13
|
+
"start start": "auto 100% 100% auto",
|
|
14
|
+
"start end": "auto auto 100% 100%",
|
|
15
|
+
"end start": "100% 100% auto auto",
|
|
16
|
+
"end end": "100% auto auto 100%",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const positionArea = alignment
|
|
20
|
+
? {
|
|
21
|
+
"--anchor-position-area": alignment,
|
|
22
|
+
"--_anchor-inset": insetMap[alignment],
|
|
23
|
+
}
|
|
24
|
+
: {}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<span :class="['ui-anchor', $props.class]" :style="positionArea">
|
|
29
|
+
<span v-if="isHover" :interestfor="id">
|
|
30
|
+
<slot></slot>
|
|
31
|
+
</span>
|
|
32
|
+
<slot v-else></slot>
|
|
33
|
+
<span
|
|
34
|
+
class="ui-anchor-floating"
|
|
35
|
+
:id="id"
|
|
36
|
+
:popover="isHover ? 'hint' : undefined"
|
|
37
|
+
>
|
|
38
|
+
<slot name="anchored"></slot>
|
|
39
|
+
</span>
|
|
40
|
+
</span>
|
|
41
|
+
</template>
|
|
@@ -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
|
+
}
|
|
@@ -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,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { Props, Slots } from "./types.d.vue"
|
|
3
|
+
|
|
4
|
+
const { alt, as, href, isGroup, src, variant } = defineProps<Props>()
|
|
5
|
+
defineSlots<Slots>()
|
|
6
|
+
|
|
7
|
+
const Tag = as || (href ? "a" : "div")
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<component
|
|
12
|
+
:is="Tag"
|
|
13
|
+
:class="[
|
|
14
|
+
{ 'ui-avatar': !isGroup },
|
|
15
|
+
!isGroup && variant && `ui-${variant}`,
|
|
16
|
+
$props.class,
|
|
17
|
+
]"
|
|
18
|
+
:href="href"
|
|
19
|
+
:role="isGroup ? 'group' : undefined"
|
|
20
|
+
>
|
|
21
|
+
<img v-if="src" :src="src" :alt="alt" />
|
|
22
|
+
<slot v-else></slot>
|
|
23
|
+
</component>
|
|
24
|
+
</template>
|
|
@@ -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 { Props as BaseProps } from "./types"
|
|
3
|
+
|
|
4
|
+
export type Props = BaseProps &
|
|
5
|
+
Pick<ImgHTMLAttributes, "alt" | "src"> & {
|
|
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
|
|
2
|
+
import type { Props } from "./types.astro"
|
|
3
3
|
|
|
4
|
-
|
|
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,39 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import Anchor from "../Anchor/Anchor.vue"
|
|
3
|
+
import type { Props, Slots } from "./types.d.vue"
|
|
4
|
+
|
|
5
|
+
const { alignment, color, dot, invisible, label } = defineProps<Props>()
|
|
6
|
+
defineSlots<Slots>()
|
|
7
|
+
|
|
8
|
+
const positionArea =
|
|
9
|
+
alignment === "start-start"
|
|
10
|
+
? "start start"
|
|
11
|
+
: alignment === "end-start"
|
|
12
|
+
? "end start"
|
|
13
|
+
: alignment === "end-end"
|
|
14
|
+
? "end end"
|
|
15
|
+
: undefined
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<Anchor
|
|
20
|
+
:alignment="positionArea"
|
|
21
|
+
:class="[
|
|
22
|
+
'ui-badge',
|
|
23
|
+
{
|
|
24
|
+
'ui-dot': dot,
|
|
25
|
+
'ui-invisible': invisible,
|
|
26
|
+
},
|
|
27
|
+
alignment && `ui-${alignment}`,
|
|
28
|
+
color && `ui-${color}`,
|
|
29
|
+
$props.class,
|
|
30
|
+
]"
|
|
31
|
+
>
|
|
32
|
+
<slot></slot>
|
|
33
|
+
<template #anchored>
|
|
34
|
+
<span class="ui-badge-indicator" :aria-label="label?.toString()">{{
|
|
35
|
+
dot ? "" : label
|
|
36
|
+
}}</span>
|
|
37
|
+
</template>
|
|
38
|
+
</Anchor>
|
|
39
|
+
</template>
|
|
@@ -1,45 +1,36 @@
|
|
|
1
1
|
---
|
|
2
|
-
type
|
|
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
|
-
} =
|
|
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={[
|
|
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}
|
|
33
|
+
{...rest as any}
|
|
34
|
+
>
|
|
35
|
+
<slot />
|
|
36
|
+
</Tag>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { Props, Slots } from "./types.d.vue"
|
|
3
|
+
|
|
4
|
+
const { as, color, disabled, href, size, variant } = defineProps<Props>()
|
|
5
|
+
defineSlots<Slots>()
|
|
6
|
+
|
|
7
|
+
const Tag = as || (href ? "a" : "button")
|
|
8
|
+
const isButton = Tag === "button"
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<component
|
|
13
|
+
:is="Tag"
|
|
14
|
+
:class="[
|
|
15
|
+
'ui-button',
|
|
16
|
+
{ 'ui-disabled': isButton && disabled },
|
|
17
|
+
size && `ui-${size}`,
|
|
18
|
+
variant && `ui-${variant}`,
|
|
19
|
+
color && `ui-${color}`,
|
|
20
|
+
$props.class,
|
|
21
|
+
]"
|
|
22
|
+
:disabled="isButton ? disabled : undefined"
|
|
23
|
+
:href="href"
|
|
24
|
+
>
|
|
25
|
+
<slot></slot>
|
|
26
|
+
</component>
|
|
27
|
+
</template>
|