@sentropic/design-system-vue 0.1.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/dist/Accordion.d.ts +66 -0
- package/dist/Accordion.d.ts.map +1 -0
- package/dist/Accordion.js +69 -0
- package/dist/Accordion.js.map +1 -0
- package/dist/Alert.d.ts +59 -0
- package/dist/Alert.d.ts.map +1 -0
- package/dist/Alert.js +36 -0
- package/dist/Alert.js.map +1 -0
- package/dist/AreaChart.d.ts +66 -0
- package/dist/AreaChart.d.ts.map +1 -0
- package/dist/AreaChart.js +54 -0
- package/dist/AreaChart.js.map +1 -0
- package/dist/AspectRatio.d.ts +29 -0
- package/dist/AspectRatio.d.ts.map +1 -0
- package/dist/AspectRatio.js +20 -0
- package/dist/AspectRatio.js.map +1 -0
- package/dist/Badge.d.ts +30 -0
- package/dist/Badge.d.ts.map +1 -0
- package/dist/Badge.js +16 -0
- package/dist/Badge.js.map +1 -0
- package/dist/BarChart.d.ts +66 -0
- package/dist/BarChart.d.ts.map +1 -0
- package/dist/BarChart.js +47 -0
- package/dist/BarChart.js.map +1 -0
- package/dist/Breadcrumb.d.ts +43 -0
- package/dist/Breadcrumb.d.ts.map +1 -0
- package/dist/Breadcrumb.js +29 -0
- package/dist/Breadcrumb.js.map +1 -0
- package/dist/Button.d.ts +61 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +36 -0
- package/dist/Button.js.map +1 -0
- package/dist/Card.d.ts +29 -0
- package/dist/Card.d.ts.map +1 -0
- package/dist/Card.js +16 -0
- package/dist/Card.js.map +1 -0
- package/dist/ChatComposer.d.ts +51 -0
- package/dist/ChatComposer.d.ts.map +1 -0
- package/dist/ChatComposer.js +47 -0
- package/dist/ChatComposer.js.map +1 -0
- package/dist/ChatMessage.d.ts +71 -0
- package/dist/ChatMessage.d.ts.map +1 -0
- package/dist/ChatMessage.js +47 -0
- package/dist/ChatMessage.js.map +1 -0
- package/dist/ChatThread.d.ts +60 -0
- package/dist/ChatThread.d.ts.map +1 -0
- package/dist/ChatThread.js +41 -0
- package/dist/ChatThread.js.map +1 -0
- package/dist/Checkbox.d.ts +101 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +45 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/CodeSnippet.d.ts +38 -0
- package/dist/CodeSnippet.d.ts.map +1 -0
- package/dist/CodeSnippet.js +20 -0
- package/dist/CodeSnippet.js.map +1 -0
- package/dist/Combobox.d.ts +109 -0
- package/dist/Combobox.d.ts.map +1 -0
- package/dist/Combobox.js +152 -0
- package/dist/Combobox.js.map +1 -0
- package/dist/ContentSwitcher.d.ts +67 -0
- package/dist/ContentSwitcher.d.ts.map +1 -0
- package/dist/ContentSwitcher.js +42 -0
- package/dist/ContentSwitcher.js.map +1 -0
- package/dist/CopyButton.d.ts +72 -0
- package/dist/CopyButton.d.ts.map +1 -0
- package/dist/CopyButton.js +28 -0
- package/dist/CopyButton.js.map +1 -0
- package/dist/DataTable.d.ts +100 -0
- package/dist/DataTable.d.ts.map +1 -0
- package/dist/DataTable.js +42 -0
- package/dist/DataTable.js.map +1 -0
- package/dist/DatePicker.d.ts +53 -0
- package/dist/DatePicker.d.ts.map +1 -0
- package/dist/DatePicker.js +46 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DonutChart.d.ts +66 -0
- package/dist/DonutChart.d.ts.map +1 -0
- package/dist/DonutChart.js +42 -0
- package/dist/DonutChart.js.map +1 -0
- package/dist/Drawer.d.ts +62 -0
- package/dist/Drawer.d.ts.map +1 -0
- package/dist/Drawer.js +77 -0
- package/dist/Drawer.js.map +1 -0
- package/dist/Dropdown.d.ts +76 -0
- package/dist/Dropdown.d.ts.map +1 -0
- package/dist/Dropdown.js +81 -0
- package/dist/Dropdown.js.map +1 -0
- package/dist/EmptyState.d.ts +48 -0
- package/dist/EmptyState.d.ts.map +1 -0
- package/dist/EmptyState.js +33 -0
- package/dist/EmptyState.js.map +1 -0
- package/dist/FileUploader.d.ts +57 -0
- package/dist/FileUploader.d.ts.map +1 -0
- package/dist/FileUploader.js +39 -0
- package/dist/FileUploader.js.map +1 -0
- package/dist/Footer.d.ts +67 -0
- package/dist/Footer.d.ts.map +1 -0
- package/dist/Footer.js +39 -0
- package/dist/Footer.js.map +1 -0
- package/dist/ForceGraph.d.ts +86 -0
- package/dist/ForceGraph.d.ts.map +1 -0
- package/dist/ForceGraph.js +62 -0
- package/dist/ForceGraph.js.map +1 -0
- package/dist/Form.d.ts +42 -0
- package/dist/Form.d.ts.map +1 -0
- package/dist/Form.js +32 -0
- package/dist/Form.js.map +1 -0
- package/dist/FormGroup.d.ts +38 -0
- package/dist/FormGroup.d.ts.map +1 -0
- package/dist/FormGroup.js +23 -0
- package/dist/FormGroup.js.map +1 -0
- package/dist/Header.d.ts +89 -0
- package/dist/Header.d.ts.map +1 -0
- package/dist/Header.js +54 -0
- package/dist/Header.js.map +1 -0
- package/dist/Highlight.d.ts +40 -0
- package/dist/Highlight.d.ts.map +1 -0
- package/dist/Highlight.js +25 -0
- package/dist/Highlight.js.map +1 -0
- package/dist/IconButton.d.ts +61 -0
- package/dist/IconButton.d.ts.map +1 -0
- package/dist/IconButton.js +30 -0
- package/dist/IconButton.js.map +1 -0
- package/dist/InlineLoading.d.ts +40 -0
- package/dist/InlineLoading.d.ts.map +1 -0
- package/dist/InlineLoading.js +26 -0
- package/dist/InlineLoading.js.map +1 -0
- package/dist/Input.d.ts +126 -0
- package/dist/Input.d.ts.map +1 -0
- package/dist/Input.js +60 -0
- package/dist/Input.js.map +1 -0
- package/dist/LanguageSelector.d.ts +54 -0
- package/dist/LanguageSelector.d.ts.map +1 -0
- package/dist/LanguageSelector.js +34 -0
- package/dist/LanguageSelector.js.map +1 -0
- package/dist/LineChart.d.ts +66 -0
- package/dist/LineChart.d.ts.map +1 -0
- package/dist/LineChart.js +50 -0
- package/dist/LineChart.js.map +1 -0
- package/dist/Link.d.ts +59 -0
- package/dist/Link.d.ts.map +1 -0
- package/dist/Link.js +21 -0
- package/dist/Link.js.map +1 -0
- package/dist/LoadingState.d.ts +50 -0
- package/dist/LoadingState.d.ts.map +1 -0
- package/dist/LoadingState.js +28 -0
- package/dist/LoadingState.js.map +1 -0
- package/dist/Menu.d.ts +68 -0
- package/dist/Menu.d.ts.map +1 -0
- package/dist/Menu.js +95 -0
- package/dist/Menu.js.map +1 -0
- package/dist/MenuPopover.d.ts +52 -0
- package/dist/MenuPopover.d.ts.map +1 -0
- package/dist/MenuPopover.js +28 -0
- package/dist/MenuPopover.js.map +1 -0
- package/dist/MenuTriggerButton.d.ts +39 -0
- package/dist/MenuTriggerButton.d.ts.map +1 -0
- package/dist/MenuTriggerButton.js +22 -0
- package/dist/MenuTriggerButton.js.map +1 -0
- package/dist/MessageActions.d.ts +46 -0
- package/dist/MessageActions.d.ts.map +1 -0
- package/dist/MessageActions.js +30 -0
- package/dist/MessageActions.js.map +1 -0
- package/dist/MessageStatusBadge.d.ts +50 -0
- package/dist/MessageStatusBadge.d.ts.map +1 -0
- package/dist/MessageStatusBadge.js +44 -0
- package/dist/MessageStatusBadge.js.map +1 -0
- package/dist/Modal.d.ts +51 -0
- package/dist/Modal.d.ts.map +1 -0
- package/dist/Modal.js +66 -0
- package/dist/Modal.js.map +1 -0
- package/dist/MultiSelect.d.ts +88 -0
- package/dist/MultiSelect.d.ts.map +1 -0
- package/dist/MultiSelect.js +101 -0
- package/dist/MultiSelect.js.map +1 -0
- package/dist/NumberInput.d.ts +124 -0
- package/dist/NumberInput.d.ts.map +1 -0
- package/dist/NumberInput.js +65 -0
- package/dist/NumberInput.js.map +1 -0
- package/dist/OrderedList.d.ts +33 -0
- package/dist/OrderedList.d.ts.map +1 -0
- package/dist/OrderedList.js +52 -0
- package/dist/OrderedList.js.map +1 -0
- package/dist/OverflowMenu.d.ts +73 -0
- package/dist/OverflowMenu.d.ts.map +1 -0
- package/dist/OverflowMenu.js +57 -0
- package/dist/OverflowMenu.js.map +1 -0
- package/dist/Pagination.d.ts +70 -0
- package/dist/Pagination.d.ts.map +1 -0
- package/dist/Pagination.js +58 -0
- package/dist/Pagination.js.map +1 -0
- package/dist/PaginationNav.d.ts +59 -0
- package/dist/PaginationNav.d.ts.map +1 -0
- package/dist/PaginationNav.js +37 -0
- package/dist/PaginationNav.js.map +1 -0
- package/dist/PasswordInput.d.ts +94 -0
- package/dist/PasswordInput.d.ts.map +1 -0
- package/dist/PasswordInput.js +69 -0
- package/dist/PasswordInput.js.map +1 -0
- package/dist/Popover.d.ts +52 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +66 -0
- package/dist/Popover.js.map +1 -0
- package/dist/ProgressBar.d.ts +81 -0
- package/dist/ProgressBar.d.ts.map +1 -0
- package/dist/ProgressBar.js +62 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressIndicator.d.ts +46 -0
- package/dist/ProgressIndicator.d.ts.map +1 -0
- package/dist/ProgressIndicator.js +31 -0
- package/dist/ProgressIndicator.js.map +1 -0
- package/dist/Quote.d.ts +39 -0
- package/dist/Quote.d.ts.map +1 -0
- package/dist/Quote.js +29 -0
- package/dist/Quote.js.map +1 -0
- package/dist/Radio.d.ts +101 -0
- package/dist/Radio.d.ts.map +1 -0
- package/dist/Radio.js +46 -0
- package/dist/Radio.js.map +1 -0
- package/dist/ScatterPlot.d.ts +65 -0
- package/dist/ScatterPlot.d.ts.map +1 -0
- package/dist/ScatterPlot.js +41 -0
- package/dist/ScatterPlot.js.map +1 -0
- package/dist/Search.d.ts +85 -0
- package/dist/Search.d.ts.map +1 -0
- package/dist/Search.js +54 -0
- package/dist/Search.js.map +1 -0
- package/dist/Select.d.ts +108 -0
- package/dist/Select.d.ts.map +1 -0
- package/dist/Select.js +58 -0
- package/dist/Select.js.map +1 -0
- package/dist/SideNav.d.ts +44 -0
- package/dist/SideNav.d.ts.map +1 -0
- package/dist/SideNav.js +22 -0
- package/dist/SideNav.js.map +1 -0
- package/dist/SkeletonText.d.ts +39 -0
- package/dist/SkeletonText.d.ts.map +1 -0
- package/dist/SkeletonText.js +24 -0
- package/dist/SkeletonText.js.map +1 -0
- package/dist/SkipLink.d.ts +29 -0
- package/dist/SkipLink.d.ts.map +1 -0
- package/dist/SkipLink.js +17 -0
- package/dist/SkipLink.js.map +1 -0
- package/dist/Slider.d.ts +93 -0
- package/dist/Slider.d.ts.map +1 -0
- package/dist/Slider.js +45 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Sparkline.d.ts +49 -0
- package/dist/Sparkline.d.ts.map +1 -0
- package/dist/Sparkline.js +42 -0
- package/dist/Sparkline.js.map +1 -0
- package/dist/StackedBarChart.d.ts +68 -0
- package/dist/StackedBarChart.d.ts.map +1 -0
- package/dist/StackedBarChart.js +55 -0
- package/dist/StackedBarChart.js.map +1 -0
- package/dist/StreamingMessage.d.ts +57 -0
- package/dist/StreamingMessage.d.ts.map +1 -0
- package/dist/StreamingMessage.js +25 -0
- package/dist/StreamingMessage.js.map +1 -0
- package/dist/StructuredList.d.ts +44 -0
- package/dist/StructuredList.d.ts.map +1 -0
- package/dist/StructuredList.js +20 -0
- package/dist/StructuredList.js.map +1 -0
- package/dist/Switch.d.ts +91 -0
- package/dist/Switch.d.ts.map +1 -0
- package/dist/Switch.js +48 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Table.d.ts +53 -0
- package/dist/Table.d.ts.map +1 -0
- package/dist/Table.js +29 -0
- package/dist/Table.js.map +1 -0
- package/dist/Tabs.d.ts +67 -0
- package/dist/Tabs.d.ts.map +1 -0
- package/dist/Tabs.js +124 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tag.d.ts +53 -0
- package/dist/Tag.d.ts.map +1 -0
- package/dist/Tag.js +21 -0
- package/dist/Tag.js.map +1 -0
- package/dist/Textarea.d.ts +113 -0
- package/dist/Textarea.d.ts.map +1 -0
- package/dist/Textarea.js +60 -0
- package/dist/Textarea.js.map +1 -0
- package/dist/ThemeProvider.d.ts +30 -0
- package/dist/ThemeProvider.d.ts.map +1 -0
- package/dist/ThemeProvider.js +43 -0
- package/dist/ThemeProvider.js.map +1 -0
- package/dist/Tile.d.ts +70 -0
- package/dist/Tile.d.ts.map +1 -0
- package/dist/Tile.js +30 -0
- package/dist/Tile.js.map +1 -0
- package/dist/TileGroup.d.ts +67 -0
- package/dist/TileGroup.d.ts.map +1 -0
- package/dist/TileGroup.js +48 -0
- package/dist/TileGroup.js.map +1 -0
- package/dist/Toast.d.ts +90 -0
- package/dist/Toast.d.ts.map +1 -0
- package/dist/Toast.js +80 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toggle.d.ts +102 -0
- package/dist/Toggle.d.ts.map +1 -0
- package/dist/Toggle.js +49 -0
- package/dist/Toggle.js.map +1 -0
- package/dist/Toggletip.d.ts +61 -0
- package/dist/Toggletip.d.ts.map +1 -0
- package/dist/Toggletip.js +53 -0
- package/dist/Toggletip.js.map +1 -0
- package/dist/Tooltip.d.ts +39 -0
- package/dist/Tooltip.d.ts.map +1 -0
- package/dist/Tooltip.js +37 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/TreeView.d.ts +64 -0
- package/dist/TreeView.d.ts.map +1 -0
- package/dist/TreeView.js +40 -0
- package/dist/TreeView.js.map +1 -0
- package/dist/UnorderedList.d.ts +33 -0
- package/dist/UnorderedList.d.ts.map +1 -0
- package/dist/UnorderedList.js +36 -0
- package/dist/UnorderedList.js.map +1 -0
- package/dist/classNames.d.ts +2 -0
- package/dist/classNames.d.ts.map +1 -0
- package/dist/classNames.js +4 -0
- package/dist/classNames.js.map +1 -0
- package/dist/index.d.ts +162 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +6366 -0
- package/package.json +50 -0
package/dist/Menu.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type MenuActionItem = {
|
|
2
|
+
id?: string;
|
|
3
|
+
label: unknown;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
variant?: "default" | "danger";
|
|
6
|
+
onClick?: () => void;
|
|
7
|
+
};
|
|
8
|
+
export type MenuDividerItem = {
|
|
9
|
+
type: "divider";
|
|
10
|
+
id?: string;
|
|
11
|
+
};
|
|
12
|
+
export type MenuGroupItem = {
|
|
13
|
+
type: "group";
|
|
14
|
+
id?: string;
|
|
15
|
+
label: unknown;
|
|
16
|
+
items: MenuActionItem[];
|
|
17
|
+
};
|
|
18
|
+
export type MenuItem = MenuActionItem | MenuDividerItem | MenuGroupItem;
|
|
19
|
+
export type MenuProps = {
|
|
20
|
+
items: MenuItem[];
|
|
21
|
+
dense?: boolean;
|
|
22
|
+
role?: string;
|
|
23
|
+
class?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare const Menu: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
26
|
+
items: {
|
|
27
|
+
type: () => MenuItem[];
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
dense: {
|
|
31
|
+
type: BooleanConstructor;
|
|
32
|
+
default: boolean;
|
|
33
|
+
};
|
|
34
|
+
role: {
|
|
35
|
+
type: StringConstructor;
|
|
36
|
+
default: undefined;
|
|
37
|
+
};
|
|
38
|
+
class: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
42
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
43
|
+
[key: string]: any;
|
|
44
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "select"[], "select", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
45
|
+
items: {
|
|
46
|
+
type: () => MenuItem[];
|
|
47
|
+
required: true;
|
|
48
|
+
};
|
|
49
|
+
dense: {
|
|
50
|
+
type: BooleanConstructor;
|
|
51
|
+
default: boolean;
|
|
52
|
+
};
|
|
53
|
+
role: {
|
|
54
|
+
type: StringConstructor;
|
|
55
|
+
default: undefined;
|
|
56
|
+
};
|
|
57
|
+
class: {
|
|
58
|
+
type: StringConstructor;
|
|
59
|
+
default: undefined;
|
|
60
|
+
};
|
|
61
|
+
}>> & Readonly<{
|
|
62
|
+
onSelect?: ((...args: any[]) => any) | undefined;
|
|
63
|
+
}>, {
|
|
64
|
+
class: string;
|
|
65
|
+
role: string;
|
|
66
|
+
dense: boolean;
|
|
67
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
68
|
+
//# sourceMappingURL=Menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../src/Menu.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;AASxE,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAOF,eAAO,MAAM,IAAI;;cAGW,MAAM,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;cAAhB,MAAM,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;4EAmG1C,CAAC"}
|
package/dist/Menu.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { defineComponent, h, ref } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
function isDivider(item) {
|
|
4
|
+
return "type" in item && item.type === "divider";
|
|
5
|
+
}
|
|
6
|
+
function isGroup(item) {
|
|
7
|
+
return "type" in item && item.type === "group";
|
|
8
|
+
}
|
|
9
|
+
function moveIndex(index, max, delta) {
|
|
10
|
+
if (max <= 0)
|
|
11
|
+
return -1;
|
|
12
|
+
return (index + delta + max) % max;
|
|
13
|
+
}
|
|
14
|
+
export const Menu = defineComponent({
|
|
15
|
+
name: "Menu",
|
|
16
|
+
props: {
|
|
17
|
+
items: { type: Array, required: true },
|
|
18
|
+
dense: { type: Boolean, default: false },
|
|
19
|
+
role: { type: String, default: undefined },
|
|
20
|
+
class: { type: String, default: undefined },
|
|
21
|
+
},
|
|
22
|
+
emits: ["select"],
|
|
23
|
+
setup(props, { emit, attrs }) {
|
|
24
|
+
const rootRef = ref(null);
|
|
25
|
+
const handleItemKeyDown = (event, item) => {
|
|
26
|
+
const root = rootRef.value;
|
|
27
|
+
const focusable = Array.from(root?.querySelectorAll('[role="menuitem"]:not(:disabled)') ?? []);
|
|
28
|
+
const currentIndex = focusable.indexOf(event.currentTarget);
|
|
29
|
+
const focusAt = (index) => focusable[index]?.focus();
|
|
30
|
+
if (event.key === "ArrowDown") {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
focusAt(moveIndex(currentIndex, focusable.length, 1));
|
|
33
|
+
}
|
|
34
|
+
else if (event.key === "ArrowUp") {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
focusAt(moveIndex(currentIndex < 0 ? focusable.length : currentIndex, focusable.length, -1));
|
|
37
|
+
}
|
|
38
|
+
else if (event.key === "Home") {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
focusAt(0);
|
|
41
|
+
}
|
|
42
|
+
else if (event.key === "End") {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
focusAt(focusable.length - 1);
|
|
45
|
+
}
|
|
46
|
+
else if (event.key === "Enter" || event.key === " ") {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
if (!item.disabled)
|
|
49
|
+
emit("select", item);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
return () => {
|
|
53
|
+
const children = props.items.map((item, index) => {
|
|
54
|
+
if (isDivider(item)) {
|
|
55
|
+
return h("div", {
|
|
56
|
+
key: item.id ?? index,
|
|
57
|
+
class: "st-menu__divider",
|
|
58
|
+
role: "separator",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (isGroup(item)) {
|
|
62
|
+
return h("section", { key: item.id ?? index, class: "st-menu__group" }, [
|
|
63
|
+
h("h3", {}, item.label),
|
|
64
|
+
...item.items.map((child) => h("button", {
|
|
65
|
+
key: child.id ?? String(child.label),
|
|
66
|
+
type: "button",
|
|
67
|
+
role: "menuitem",
|
|
68
|
+
class: "st-menu__item",
|
|
69
|
+
disabled: child.disabled,
|
|
70
|
+
onClick: () => emit("select", child),
|
|
71
|
+
onKeydown: (event) => handleItemKeyDown(event, child),
|
|
72
|
+
}, h("span", { class: "st-menu__itemLabel" }, child.label))),
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
const actionItem = item;
|
|
76
|
+
return h("button", {
|
|
77
|
+
key: actionItem.id ?? String(actionItem.label) ?? index,
|
|
78
|
+
type: "button",
|
|
79
|
+
role: "menuitem",
|
|
80
|
+
disabled: actionItem.disabled,
|
|
81
|
+
class: classNames("st-menu__item", actionItem.variant === "danger" && "st-menu__item--danger"),
|
|
82
|
+
onClick: () => emit("select", actionItem),
|
|
83
|
+
onKeydown: (event) => handleItemKeyDown(event, actionItem),
|
|
84
|
+
}, h("span", { class: "st-menu__itemLabel" }, actionItem.label));
|
|
85
|
+
});
|
|
86
|
+
return h("div", {
|
|
87
|
+
...attrs,
|
|
88
|
+
ref: rootRef,
|
|
89
|
+
class: classNames("st-menu", props.dense && "st-menu--dense", props.class),
|
|
90
|
+
role: props.role ?? "menu",
|
|
91
|
+
}, children);
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=Menu.js.map
|
package/dist/Menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../src/Menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { MenuItem } from "./Menu.js";
|
|
2
|
+
export type MenuPopoverPlacement = "top-start" | "top-end" | "bottom-start" | "bottom-end";
|
|
3
|
+
export type MenuPopoverProps = {
|
|
4
|
+
items?: MenuItem[];
|
|
5
|
+
open?: boolean;
|
|
6
|
+
placement?: MenuPopoverPlacement;
|
|
7
|
+
class?: string;
|
|
8
|
+
};
|
|
9
|
+
export type { MenuItem };
|
|
10
|
+
export declare const MenuPopover: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
11
|
+
items: {
|
|
12
|
+
type: () => MenuItem[];
|
|
13
|
+
default: () => never[];
|
|
14
|
+
};
|
|
15
|
+
open: {
|
|
16
|
+
type: BooleanConstructor;
|
|
17
|
+
default: boolean;
|
|
18
|
+
};
|
|
19
|
+
placement: {
|
|
20
|
+
type: () => MenuPopoverPlacement;
|
|
21
|
+
default: string;
|
|
22
|
+
};
|
|
23
|
+
class: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
default: undefined;
|
|
26
|
+
};
|
|
27
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
30
|
+
items: {
|
|
31
|
+
type: () => MenuItem[];
|
|
32
|
+
default: () => never[];
|
|
33
|
+
};
|
|
34
|
+
open: {
|
|
35
|
+
type: BooleanConstructor;
|
|
36
|
+
default: boolean;
|
|
37
|
+
};
|
|
38
|
+
placement: {
|
|
39
|
+
type: () => MenuPopoverPlacement;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
class: {
|
|
43
|
+
type: StringConstructor;
|
|
44
|
+
default: undefined;
|
|
45
|
+
};
|
|
46
|
+
}>> & Readonly<{}>, {
|
|
47
|
+
items: MenuItem[];
|
|
48
|
+
class: string;
|
|
49
|
+
open: boolean;
|
|
50
|
+
placement: MenuPopoverPlacement;
|
|
51
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
52
|
+
//# sourceMappingURL=MenuPopover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,CAAC;AAE3F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,eAAO,MAAM,WAAW;;cAGI,MAAM,QAAQ,EAAE;;;;;;;;cAEX,MAAM,oBAAoB;;;;;;;;;;;cAF/B,MAAM,QAAQ,EAAE;;;;;;;;cAEX,MAAM,oBAAoB;;;;;;;;;;;;4EA8BzD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
import { Menu } from "./Menu.js";
|
|
4
|
+
export const MenuPopover = defineComponent({
|
|
5
|
+
name: "MenuPopover",
|
|
6
|
+
props: {
|
|
7
|
+
items: { type: Array, default: () => [] },
|
|
8
|
+
open: { type: Boolean, default: true },
|
|
9
|
+
placement: { type: String, default: "bottom-start" },
|
|
10
|
+
class: { type: String, default: undefined },
|
|
11
|
+
},
|
|
12
|
+
setup(props, { slots, attrs }) {
|
|
13
|
+
return () => {
|
|
14
|
+
return h("div", {
|
|
15
|
+
...attrs,
|
|
16
|
+
class: classNames("st-menuPopover", `st-menuPopover--${props.placement}`, props.class),
|
|
17
|
+
}, [
|
|
18
|
+
slots.trigger?.(),
|
|
19
|
+
props.open
|
|
20
|
+
? h("div", { class: "st-menuPopover__content" }, props.items && props.items.length
|
|
21
|
+
? h(Menu, { items: props.items, role: "presentation" })
|
|
22
|
+
: slots.default?.())
|
|
23
|
+
: null,
|
|
24
|
+
]);
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=MenuPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,KAAyB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAC7D,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QACtC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAoC,EAAE,OAAO,EAAE,cAAc,EAAE;QAClF,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,CACN,KAAK,EACL;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,UAAU,CACf,gBAAgB,EAChB,mBAAmB,KAAK,CAAC,SAAS,EAAE,EACpC,KAAK,CAAC,KAAK,CACZ;aACF,EACD;gBACE,KAAK,CAAC,OAAO,EAAE,EAAE;gBACjB,KAAK,CAAC,IAAI;oBACR,CAAC,CAAC,CAAC,CACC,KAAK,EACL,EAAE,KAAK,EAAE,yBAAyB,EAAE,EACpC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM;wBAC/B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;wBACvD,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CACtB;oBACH,CAAC,CAAC,IAAI;aACT,CACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type MenuTriggerButtonProps = {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
class?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const MenuTriggerButton: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
7
|
+
open: {
|
|
8
|
+
type: BooleanConstructor;
|
|
9
|
+
default: boolean;
|
|
10
|
+
};
|
|
11
|
+
disabled: {
|
|
12
|
+
type: BooleanConstructor;
|
|
13
|
+
default: boolean;
|
|
14
|
+
};
|
|
15
|
+
class: {
|
|
16
|
+
type: StringConstructor;
|
|
17
|
+
default: undefined;
|
|
18
|
+
};
|
|
19
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
22
|
+
open: {
|
|
23
|
+
type: BooleanConstructor;
|
|
24
|
+
default: boolean;
|
|
25
|
+
};
|
|
26
|
+
disabled: {
|
|
27
|
+
type: BooleanConstructor;
|
|
28
|
+
default: boolean;
|
|
29
|
+
};
|
|
30
|
+
class: {
|
|
31
|
+
type: StringConstructor;
|
|
32
|
+
default: undefined;
|
|
33
|
+
};
|
|
34
|
+
}>> & Readonly<{}>, {
|
|
35
|
+
class: string;
|
|
36
|
+
disabled: boolean;
|
|
37
|
+
open: boolean;
|
|
38
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
39
|
+
//# sourceMappingURL=MenuTriggerButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuTriggerButton.d.ts","sourceRoot":"","sources":["../src/MenuTriggerButton.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAyB5B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
export const MenuTriggerButton = defineComponent({
|
|
4
|
+
name: "MenuTriggerButton",
|
|
5
|
+
props: {
|
|
6
|
+
open: { type: Boolean, default: false },
|
|
7
|
+
disabled: { type: Boolean, default: false },
|
|
8
|
+
class: { type: String, default: undefined },
|
|
9
|
+
},
|
|
10
|
+
setup(props, { slots, attrs }) {
|
|
11
|
+
return () => {
|
|
12
|
+
return h("button", {
|
|
13
|
+
...attrs,
|
|
14
|
+
type: "button",
|
|
15
|
+
class: classNames("st-menuTriggerButton st-button st-button--secondary st-button--sm", props.class),
|
|
16
|
+
"aria-expanded": props.open,
|
|
17
|
+
disabled: props.disabled,
|
|
18
|
+
}, slots.default?.());
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=MenuTriggerButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuTriggerButton.js","sourceRoot":"","sources":["../src/MenuTriggerButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;IAC/C,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QACvC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,CACN,QAAQ,EACR;gBACE,GAAG,KAAK;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,UAAU,CACf,mEAAmE,EACnE,KAAK,CAAC,KAAK,CACZ;gBACD,eAAe,EAAE,KAAK,CAAC,IAAI;gBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,EACD,KAAK,CAAC,OAAO,EAAE,EAAE,CAClB,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type MessageActionVariant = "default" | "danger";
|
|
2
|
+
export type MessageAction = {
|
|
3
|
+
id?: string;
|
|
4
|
+
label: unknown;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
variant?: MessageActionVariant;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
};
|
|
9
|
+
export type MessageActionsProps = {
|
|
10
|
+
actions: MessageAction[];
|
|
11
|
+
visibility?: "always" | "hover";
|
|
12
|
+
class?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const MessageActions: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
15
|
+
actions: {
|
|
16
|
+
type: () => MessageAction[];
|
|
17
|
+
required: true;
|
|
18
|
+
};
|
|
19
|
+
visibility: {
|
|
20
|
+
type: () => "always" | "hover";
|
|
21
|
+
default: string;
|
|
22
|
+
};
|
|
23
|
+
class: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
default: undefined;
|
|
26
|
+
};
|
|
27
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
30
|
+
actions: {
|
|
31
|
+
type: () => MessageAction[];
|
|
32
|
+
required: true;
|
|
33
|
+
};
|
|
34
|
+
visibility: {
|
|
35
|
+
type: () => "always" | "hover";
|
|
36
|
+
default: string;
|
|
37
|
+
};
|
|
38
|
+
class: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
42
|
+
}>> & Readonly<{}>, {
|
|
43
|
+
class: string;
|
|
44
|
+
visibility: "always" | "hover";
|
|
45
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
46
|
+
//# sourceMappingURL=MessageActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageActions.d.ts","sourceRoot":"","sources":["../src/MessageActions.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,cAAc;;cAGG,MAAM,aAAa,EAAE;;;;cAE7B,MAAM,QAAQ,GAAG,OAAO;;;;;;;;;;;cAFhB,MAAM,aAAa,EAAE;;;;cAE7B,MAAM,QAAQ,GAAG,OAAO;;;;;;;;;;4EAsC5C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
export const MessageActions = defineComponent({
|
|
4
|
+
name: "MessageActions",
|
|
5
|
+
props: {
|
|
6
|
+
actions: { type: Array, required: true },
|
|
7
|
+
visibility: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: "always",
|
|
10
|
+
},
|
|
11
|
+
class: { type: String, default: undefined },
|
|
12
|
+
},
|
|
13
|
+
setup(props, { attrs }) {
|
|
14
|
+
return () => {
|
|
15
|
+
const visibility = props.visibility ?? "always";
|
|
16
|
+
return h("nav", {
|
|
17
|
+
...attrs,
|
|
18
|
+
class: classNames("st-messageActions", visibility === "hover" && "st-messageActions--hoverOnly", props.class),
|
|
19
|
+
"aria-label": "Message actions",
|
|
20
|
+
}, props.actions.map((action, index) => h("button", {
|
|
21
|
+
key: action.id ?? index,
|
|
22
|
+
type: "button",
|
|
23
|
+
class: classNames("st-button st-button--ghost st-button--sm", action.variant === "danger" && "st-button--danger"),
|
|
24
|
+
disabled: action.disabled,
|
|
25
|
+
onClick: action.onClick,
|
|
26
|
+
}, action.label)));
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=MessageActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageActions.js","sourceRoot":"","sources":["../src/MessageActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiB7C,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;IAC5C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,KAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjE,UAAU,EAAE;YACV,IAAI,EAAE,MAAkC;YACxC,OAAO,EAAE,QAAQ;SAClB;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,OAAO,GAAG,EAAE;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC;YAChD,OAAO,CAAC,CACN,KAAK,EACL;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,UAAU,CACf,mBAAmB,EACnB,UAAU,KAAK,OAAO,IAAI,8BAA8B,EACxD,KAAK,CAAC,KAAK,CACZ;gBACD,YAAY,EAAE,iBAAiB;aAChC,EACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAClC,CAAC,CACC,QAAQ,EACR;gBACE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,KAAK;gBACvB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,UAAU,CACf,0CAA0C,EAC1C,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,mBAAmB,CACnD;gBACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,EACD,MAAM,CAAC,KAAe,CACvB,CACF,CACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ChatMessageStatus } from "./ChatMessage.js";
|
|
2
|
+
export type MessageStatusBadgeTone = "neutral" | "info" | "success" | "warning" | "error";
|
|
3
|
+
export type MessageStatusBadgeProps = {
|
|
4
|
+
status: ChatMessageStatus;
|
|
5
|
+
tone?: MessageStatusBadgeTone;
|
|
6
|
+
labels?: Partial<Record<ChatMessageStatus, unknown>>;
|
|
7
|
+
class?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const MessageStatusBadge: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
10
|
+
status: {
|
|
11
|
+
type: () => ChatMessageStatus;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
tone: {
|
|
15
|
+
type: () => MessageStatusBadgeTone;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
18
|
+
labels: {
|
|
19
|
+
type: () => Partial<Record<ChatMessageStatus, unknown>>;
|
|
20
|
+
default: undefined;
|
|
21
|
+
};
|
|
22
|
+
class: {
|
|
23
|
+
type: StringConstructor;
|
|
24
|
+
default: undefined;
|
|
25
|
+
};
|
|
26
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
29
|
+
status: {
|
|
30
|
+
type: () => ChatMessageStatus;
|
|
31
|
+
required: true;
|
|
32
|
+
};
|
|
33
|
+
tone: {
|
|
34
|
+
type: () => MessageStatusBadgeTone;
|
|
35
|
+
default: undefined;
|
|
36
|
+
};
|
|
37
|
+
labels: {
|
|
38
|
+
type: () => Partial<Record<ChatMessageStatus, unknown>>;
|
|
39
|
+
default: undefined;
|
|
40
|
+
};
|
|
41
|
+
class: {
|
|
42
|
+
type: StringConstructor;
|
|
43
|
+
default: undefined;
|
|
44
|
+
};
|
|
45
|
+
}>> & Readonly<{}>, {
|
|
46
|
+
class: string;
|
|
47
|
+
tone: MessageStatusBadgeTone;
|
|
48
|
+
labels: Partial<Record<ChatMessageStatus, unknown>>;
|
|
49
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
50
|
+
//# sourceMappingURL=MessageStatusBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageStatusBadge.d.ts","sourceRoot":"","sources":["../src/MessageStatusBadge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1F,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;cAGD,MAAM,iBAAiB;;;;cACzB,MAAM,sBAAsB;;;;cAElC,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;cAHzC,MAAM,iBAAiB;;;;cACzB,MAAM,sBAAsB;;;;cAElC,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;4EA6CrE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { defineComponent, h } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
export const MessageStatusBadge = defineComponent({
|
|
4
|
+
name: "MessageStatusBadge",
|
|
5
|
+
props: {
|
|
6
|
+
status: { type: String, required: true },
|
|
7
|
+
tone: { type: String, default: undefined },
|
|
8
|
+
labels: {
|
|
9
|
+
type: Object,
|
|
10
|
+
default: undefined,
|
|
11
|
+
},
|
|
12
|
+
class: { type: String, default: undefined },
|
|
13
|
+
},
|
|
14
|
+
setup(props, { attrs }) {
|
|
15
|
+
return () => {
|
|
16
|
+
const status = props.status;
|
|
17
|
+
const normalized = status === "sent"
|
|
18
|
+
? "completed"
|
|
19
|
+
: status === "streaming"
|
|
20
|
+
? "processing"
|
|
21
|
+
: status === "error"
|
|
22
|
+
? "failed"
|
|
23
|
+
: status;
|
|
24
|
+
const resolvedTone = props.tone ??
|
|
25
|
+
(normalized === "completed"
|
|
26
|
+
? "success"
|
|
27
|
+
: normalized === "failed"
|
|
28
|
+
? "error"
|
|
29
|
+
: normalized === "processing"
|
|
30
|
+
? "info"
|
|
31
|
+
: "neutral");
|
|
32
|
+
const label = (props.labels?.[status] ?? props.labels?.[normalized]) ??
|
|
33
|
+
(normalized.charAt(0).toUpperCase() + normalized.slice(1));
|
|
34
|
+
return h("span", {
|
|
35
|
+
...attrs,
|
|
36
|
+
class: classNames("st-messageStatusBadge", `st-badge st-badge--${resolvedTone}`, props.class),
|
|
37
|
+
}, [
|
|
38
|
+
h("span", { class: "st-messageStatusBadge__dot", "aria-hidden": "true" }),
|
|
39
|
+
label,
|
|
40
|
+
]);
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=MessageStatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageStatusBadge.js","sourceRoot":"","sources":["../src/MessageStatusBadge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;IAChD,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAiC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAsC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC1E,MAAM,EAAE;YACN,IAAI,EAAE,MAA2D;YACjE,OAAO,EAAE,SAAS;SACnB;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,MAAM,UAAU,GACd,MAAM,KAAK,MAAM;gBACf,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,MAAM,KAAK,WAAW;oBACtB,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,MAAM,KAAK,OAAO;wBAClB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,MAAM,CAAC;YACjB,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI;gBACV,CAAC,UAAU,KAAK,WAAW;oBACzB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,UAAU,KAAK,QAAQ;wBACvB,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,UAAU,KAAK,YAAY;4BAC3B,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,SAAS,CAAC,CAAC;YACrB,MAAM,KAAK,GACT,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,UAA+B,CAAC,CAAC;gBAC3E,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,CACN,MAAM,EACN;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,UAAU,CACf,uBAAuB,EACvB,sBAAsB,YAAY,EAAE,EACpC,KAAK,CAAC,KAAK,CACZ;aACF,EACD;gBACE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;gBACzE,KAAe;aAChB,CACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/dist/Modal.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type ModalProps = {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const Modal: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
open: {
|
|
9
|
+
type: BooleanConstructor;
|
|
10
|
+
default: boolean;
|
|
11
|
+
};
|
|
12
|
+
title: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: undefined;
|
|
15
|
+
};
|
|
16
|
+
description: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: undefined;
|
|
19
|
+
};
|
|
20
|
+
class: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
default: undefined;
|
|
23
|
+
};
|
|
24
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
}> | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "close"[], "close", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
27
|
+
open: {
|
|
28
|
+
type: BooleanConstructor;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
title: {
|
|
32
|
+
type: StringConstructor;
|
|
33
|
+
default: undefined;
|
|
34
|
+
};
|
|
35
|
+
description: {
|
|
36
|
+
type: StringConstructor;
|
|
37
|
+
default: undefined;
|
|
38
|
+
};
|
|
39
|
+
class: {
|
|
40
|
+
type: StringConstructor;
|
|
41
|
+
default: undefined;
|
|
42
|
+
};
|
|
43
|
+
}>> & Readonly<{
|
|
44
|
+
onClose?: ((...args: any[]) => any) | undefined;
|
|
45
|
+
}>, {
|
|
46
|
+
class: string;
|
|
47
|
+
title: string;
|
|
48
|
+
open: boolean;
|
|
49
|
+
description: string;
|
|
50
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
51
|
+
//# sourceMappingURL=Modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../src/Modal.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAgFhB,CAAC"}
|
package/dist/Modal.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { defineComponent, h, onUnmounted, ref, watch } from "vue";
|
|
2
|
+
import { classNames } from "./classNames.js";
|
|
3
|
+
export const Modal = defineComponent({
|
|
4
|
+
name: "Modal",
|
|
5
|
+
props: {
|
|
6
|
+
open: { type: Boolean, default: false },
|
|
7
|
+
title: { type: String, default: undefined },
|
|
8
|
+
description: { type: String, default: undefined },
|
|
9
|
+
class: { type: String, default: undefined },
|
|
10
|
+
},
|
|
11
|
+
emits: ["close"],
|
|
12
|
+
setup(props, { emit, slots, attrs }) {
|
|
13
|
+
const dialogRef = ref(null);
|
|
14
|
+
const onKeyDown = (event) => {
|
|
15
|
+
if (event.key === "Escape") {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
emit("close");
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
watch(() => props.open, (open) => {
|
|
21
|
+
if (open) {
|
|
22
|
+
document.body.style.overflow = "hidden";
|
|
23
|
+
document.addEventListener("keydown", onKeyDown);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
document.body.style.overflow = "";
|
|
27
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
onUnmounted(() => {
|
|
31
|
+
document.body.style.overflow = "";
|
|
32
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
33
|
+
});
|
|
34
|
+
return () => {
|
|
35
|
+
if (!props.open)
|
|
36
|
+
return null;
|
|
37
|
+
return h("div", { class: "st-modal__backdrop" }, h("section", {
|
|
38
|
+
...attrs,
|
|
39
|
+
ref: dialogRef,
|
|
40
|
+
class: classNames("st-modal", props.class),
|
|
41
|
+
role: "dialog",
|
|
42
|
+
"aria-modal": "true",
|
|
43
|
+
"aria-label": props.title || "Modal",
|
|
44
|
+
tabindex: -1,
|
|
45
|
+
}, [
|
|
46
|
+
h("div", { class: "st-modal__header" }, [
|
|
47
|
+
props.title ? h("h2", { class: "st-modal__title" }, props.title) : null,
|
|
48
|
+
h("button", {
|
|
49
|
+
type: "button",
|
|
50
|
+
class: "st-modal__close",
|
|
51
|
+
"aria-label": "Close",
|
|
52
|
+
onClick: () => emit("close"),
|
|
53
|
+
}, "x"),
|
|
54
|
+
]),
|
|
55
|
+
props.description
|
|
56
|
+
? h("p", { class: "st-modal__description" }, props.description)
|
|
57
|
+
: null,
|
|
58
|
+
h("div", { class: "st-modal__body" }, slots.default?.()),
|
|
59
|
+
slots.footer
|
|
60
|
+
? h("div", { class: "st-modal__footer" }, slots.footer())
|
|
61
|
+
: null,
|
|
62
|
+
]));
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=Modal.js.map
|