@ecoma-io/loom 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/LICENSE +202 -0
- package/README.md +180 -0
- package/dist/a11y.d.ts +2 -0
- package/dist/a11y.d.ts.map +1 -0
- package/dist/a11y.js +2 -0
- package/dist/blocks/AppHeader/AppHeader.js +7 -0
- package/dist/blocks/AppHeader/AppHeader.js.map +1 -0
- package/dist/blocks/AppHeader/AppHeader.vue.d.ts +83 -0
- package/dist/blocks/AppHeader/AppHeader.vue.d.ts.map +1 -0
- package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js +96 -0
- package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.js +7 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.js.map +1 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts +42 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts.map +1 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/blocks/DashboardGrid/DashboardGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/EmptyState/EmptyState.js +7 -0
- package/dist/blocks/EmptyState/EmptyState.js.map +1 -0
- package/dist/blocks/EmptyState/EmptyState.vue.d.ts +50 -0
- package/dist/blocks/EmptyState/EmptyState.vue.d.ts.map +1 -0
- package/dist/blocks/EmptyState/EmptyState.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/blocks/EmptyState/EmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/PageHeader/PageHeader.js +7 -0
- package/dist/blocks/PageHeader/PageHeader.js.map +1 -0
- package/dist/blocks/PageHeader/PageHeader.vue.d.ts +54 -0
- package/dist/blocks/PageHeader/PageHeader.vue.d.ts.map +1 -0
- package/dist/blocks/PageHeader/PageHeader.vue_vue_type_script_setup_true_lang.js +68 -0
- package/dist/blocks/PageHeader/PageHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/RowActions/RowActions.js +7 -0
- package/dist/blocks/RowActions/RowActions.js.map +1 -0
- package/dist/blocks/RowActions/RowActions.vue.d.ts +14 -0
- package/dist/blocks/RowActions/RowActions.vue.d.ts.map +1 -0
- package/dist/blocks/RowActions/RowActions.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/blocks/RowActions/RowActions.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/SidebarNav/SidebarNav.js +7 -0
- package/dist/blocks/SidebarNav/SidebarNav.js.map +1 -0
- package/dist/blocks/SidebarNav/SidebarNav.vue.d.ts +40 -0
- package/dist/blocks/SidebarNav/SidebarNav.vue.d.ts.map +1 -0
- package/dist/blocks/SidebarNav/SidebarNav.vue_vue_type_script_setup_true_lang.js +125 -0
- package/dist/blocks/SidebarNav/SidebarNav.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/TitleBar/TitleBar.js +7 -0
- package/dist/blocks/TitleBar/TitleBar.js.map +1 -0
- package/dist/blocks/TitleBar/TitleBar.vue.d.ts +49 -0
- package/dist/blocks/TitleBar/TitleBar.vue.d.ts.map +1 -0
- package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/ToastStack/ToastStack.js +7 -0
- package/dist/blocks/ToastStack/ToastStack.js.map +1 -0
- package/dist/blocks/ToastStack/ToastStack.vue.d.ts +24 -0
- package/dist/blocks/ToastStack/ToastStack.vue.d.ts.map +1 -0
- package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js +38 -0
- package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/icons/BrandMark.d.ts +18 -0
- package/dist/icons/BrandMark.d.ts.map +1 -0
- package/dist/icons/BrandMark.js +47 -0
- package/dist/icons/BrandMark.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/lib/a11y-scope.d.ts +19 -0
- package/dist/lib/a11y-scope.d.ts.map +1 -0
- package/dist/lib/a11y-scope.js +28 -0
- package/dist/lib/a11y-scope.js.map +1 -0
- package/dist/lib/attrs.d.ts +18 -0
- package/dist/lib/attrs.d.ts.map +1 -0
- package/dist/lib/attrs.js +28 -0
- package/dist/lib/attrs.js.map +1 -0
- package/dist/lib/cn.d.ts +9 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +16 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/icon-defaults.d.ts +22 -0
- package/dist/lib/icon-defaults.d.ts.map +1 -0
- package/dist/lib/icon-defaults.js +32 -0
- package/dist/lib/icon-defaults.js.map +1 -0
- package/dist/lib/motion.d.ts +14 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +20 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/props.d.ts +31 -0
- package/dist/lib/props.d.ts.map +1 -0
- package/dist/lib/props.js +37 -0
- package/dist/lib/props.js.map +1 -0
- package/dist/primitives/Avatar/Avatar.js +7 -0
- package/dist/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/primitives/Avatar/Avatar.vue.d.ts +27 -0
- package/dist/primitives/Avatar/Avatar.vue.d.ts.map +1 -0
- package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Badge/Badge.js +7 -0
- package/dist/primitives/Badge/Badge.js.map +1 -0
- package/dist/primitives/Badge/Badge.vue.d.ts +27 -0
- package/dist/primitives/Badge/Badge.vue.d.ts.map +1 -0
- package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Button/Button.js +7 -0
- package/dist/primitives/Button/Button.js.map +1 -0
- package/dist/primitives/Button/Button.vue.d.ts +70 -0
- package/dist/primitives/Button/Button.vue.d.ts.map +1 -0
- package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js +122 -0
- package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Checkbox/Checkbox.js +7 -0
- package/dist/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/primitives/Checkbox/Checkbox.vue.d.ts +34 -0
- package/dist/primitives/Checkbox/Checkbox.vue.d.ts.map +1 -0
- package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +94 -0
- package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Dialog/Dialog.js +7 -0
- package/dist/primitives/Dialog/Dialog.js.map +1 -0
- package/dist/primitives/Dialog/Dialog.vue.d.ts +58 -0
- package/dist/primitives/Dialog/Dialog.vue.d.ts.map +1 -0
- package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js +88 -0
- package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.js +7 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.vue.d.ts +55 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.vue.d.ts.map +1 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js +82 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Field/Field.js +7 -0
- package/dist/primitives/Field/Field.js.map +1 -0
- package/dist/primitives/Field/Field.vue.d.ts +53 -0
- package/dist/primitives/Field/Field.vue.d.ts.map +1 -0
- package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js +84 -0
- package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/InlineError/InlineError.js +7 -0
- package/dist/primitives/InlineError/InlineError.js.map +1 -0
- package/dist/primitives/InlineError/InlineError.vue.d.ts +32 -0
- package/dist/primitives/InlineError/InlineError.vue.d.ts.map +1 -0
- package/dist/primitives/InlineError/InlineError.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/primitives/InlineError/InlineError.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Menubar/Menubar.js +7 -0
- package/dist/primitives/Menubar/Menubar.js.map +1 -0
- package/dist/primitives/Menubar/Menubar.vue.d.ts +41 -0
- package/dist/primitives/Menubar/Menubar.vue.d.ts.map +1 -0
- package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js +184 -0
- package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/NumberField/NumberField.js +7 -0
- package/dist/primitives/NumberField/NumberField.js.map +1 -0
- package/dist/primitives/NumberField/NumberField.vue.d.ts +47 -0
- package/dist/primitives/NumberField/NumberField.vue.d.ts.map +1 -0
- package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js +204 -0
- package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Popover/Popover.js +7 -0
- package/dist/primitives/Popover/Popover.js.map +1 -0
- package/dist/primitives/Popover/Popover.vue.d.ts +61 -0
- package/dist/primitives/Popover/Popover.vue.d.ts.map +1 -0
- package/dist/primitives/Popover/Popover.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/primitives/Popover/Popover.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Progress/Progress.js +7 -0
- package/dist/primitives/Progress/Progress.js.map +1 -0
- package/dist/primitives/Progress/Progress.vue.d.ts +30 -0
- package/dist/primitives/Progress/Progress.vue.d.ts.map +1 -0
- package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/RadioGroup/RadioGroup.js +7 -0
- package/dist/primitives/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts +39 -0
- package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts.map +1 -0
- package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.js +7 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.js.map +1 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts +40 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js +89 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Select/Select.js +7 -0
- package/dist/primitives/Select/Select.js.map +1 -0
- package/dist/primitives/Select/Select.vue.d.ts +56 -0
- package/dist/primitives/Select/Select.vue.d.ts.map +1 -0
- package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js +122 -0
- package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Separator/Separator.js +7 -0
- package/dist/primitives/Separator/Separator.js.map +1 -0
- package/dist/primitives/Separator/Separator.vue.d.ts +19 -0
- package/dist/primitives/Separator/Separator.vue.d.ts.map +1 -0
- package/dist/primitives/Separator/Separator.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/primitives/Separator/Separator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Skeleton/Skeleton.js +7 -0
- package/dist/primitives/Skeleton/Skeleton.js.map +1 -0
- package/dist/primitives/Skeleton/Skeleton.vue.d.ts +16 -0
- package/dist/primitives/Skeleton/Skeleton.vue.d.ts.map +1 -0
- package/dist/primitives/Skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +37 -0
- package/dist/primitives/Skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Slider/Slider.js +7 -0
- package/dist/primitives/Slider/Slider.js.map +1 -0
- package/dist/primitives/Slider/Slider.vue.d.ts +58 -0
- package/dist/primitives/Slider/Slider.vue.d.ts.map +1 -0
- package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js +137 -0
- package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Spinner/Spinner.js +7 -0
- package/dist/primitives/Spinner/Spinner.js.map +1 -0
- package/dist/primitives/Spinner/Spinner.vue.d.ts +21 -0
- package/dist/primitives/Spinner/Spinner.vue.d.ts.map +1 -0
- package/dist/primitives/Spinner/Spinner.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/primitives/Spinner/Spinner.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Surface/Surface.js +7 -0
- package/dist/primitives/Surface/Surface.js.map +1 -0
- package/dist/primitives/Surface/Surface.vue.d.ts +42 -0
- package/dist/primitives/Surface/Surface.vue.d.ts.map +1 -0
- package/dist/primitives/Surface/Surface.vue_vue_type_script_setup_true_lang.js +48 -0
- package/dist/primitives/Surface/Surface.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Switch/Switch.js +7 -0
- package/dist/primitives/Switch/Switch.js.map +1 -0
- package/dist/primitives/Switch/Switch.vue.d.ts +24 -0
- package/dist/primitives/Switch/Switch.vue.d.ts.map +1 -0
- package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Tabs/Tabs.js +7 -0
- package/dist/primitives/Tabs/Tabs.js.map +1 -0
- package/dist/primitives/Tabs/Tabs.vue.d.ts +33 -0
- package/dist/primitives/Tabs/Tabs.vue.d.ts.map +1 -0
- package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/TextField/TextField.js +7 -0
- package/dist/primitives/TextField/TextField.js.map +1 -0
- package/dist/primitives/TextField/TextField.vue.d.ts +58 -0
- package/dist/primitives/TextField/TextField.vue.d.ts.map +1 -0
- package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Textarea/Textarea.js +7 -0
- package/dist/primitives/Textarea/Textarea.js.map +1 -0
- package/dist/primitives/Textarea/Textarea.vue.d.ts +48 -0
- package/dist/primitives/Textarea/Textarea.vue.d.ts.map +1 -0
- package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Toast/Toast.js +7 -0
- package/dist/primitives/Toast/Toast.js.map +1 -0
- package/dist/primitives/Toast/Toast.vue.d.ts +46 -0
- package/dist/primitives/Toast/Toast.vue.d.ts.map +1 -0
- package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Toast/ToastItem.js +7 -0
- package/dist/primitives/Toast/ToastItem.js.map +1 -0
- package/dist/primitives/Toast/ToastItem.vue.d.ts +38 -0
- package/dist/primitives/Toast/ToastItem.vue.d.ts.map +1 -0
- package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js +114 -0
- package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Tooltip/Tooltip.js +7 -0
- package/dist/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/primitives/Tooltip/Tooltip.vue.d.ts +52 -0
- package/dist/primitives/Tooltip/Tooltip.vue.d.ts.map +1 -0
- package/dist/primitives/Tooltip/Tooltip.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/primitives/Tooltip/Tooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/WindowControls/WindowControls.js +7 -0
- package/dist/primitives/WindowControls/WindowControls.js.map +1 -0
- package/dist/primitives/WindowControls/WindowControls.vue.d.ts +41 -0
- package/dist/primitives/WindowControls/WindowControls.vue.d.ts.map +1 -0
- package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js +111 -0
- package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/styles/fonts/Geist-Variable.woff2 +0 -0
- package/dist/styles/fonts/GeistMono-Variable.woff2 +0 -0
- package/dist/styles/fonts/OFL.txt +92 -0
- package/dist/styles/fonts.css +30 -0
- package/dist/styles/global.css +181 -0
- package/dist/styles/theme.css +212 -0
- package/package.json +123 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import Badge_default from "../../primitives/Badge/Badge.js";
|
|
3
|
+
import Separator_default from "../../primitives/Separator/Separator.js";
|
|
4
|
+
import Tooltip_default from "../../primitives/Tooltip/Tooltip.js";
|
|
5
|
+
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, renderList, resolveDynamicComponent, toDisplayString, withCtx } from "vue";
|
|
6
|
+
//#region src/blocks/SidebarNav/SidebarNav.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var _hoisted_1 = ["aria-label"];
|
|
8
|
+
var _hoisted_2 = {
|
|
9
|
+
key: 1,
|
|
10
|
+
class: "select-none px-2 pb-1 pt-2 text-micro font-medium uppercase tracking-wide text-muted-foreground"
|
|
11
|
+
};
|
|
12
|
+
var _hoisted_3 = { class: "flex flex-col gap-0.5" };
|
|
13
|
+
var _hoisted_4 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
"aria-hidden": "true",
|
|
16
|
+
class: "absolute inset-y-1.5 left-0 w-0.5 rounded-full bg-primary"
|
|
17
|
+
};
|
|
18
|
+
var _hoisted_5 = {
|
|
19
|
+
key: 0,
|
|
20
|
+
"aria-hidden": "true",
|
|
21
|
+
class: "absolute inset-y-1.5 left-0 w-0.5 rounded-full bg-primary"
|
|
22
|
+
};
|
|
23
|
+
var _hoisted_6 = { class: "min-w-0 flex-1 truncate" };
|
|
24
|
+
var SidebarNav_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
25
|
+
__name: "SidebarNav",
|
|
26
|
+
props: {
|
|
27
|
+
sections: {},
|
|
28
|
+
collapsed: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: false
|
|
31
|
+
},
|
|
32
|
+
ariaLabel: {}
|
|
33
|
+
},
|
|
34
|
+
emits: ["select"],
|
|
35
|
+
setup(__props, { emit: __emit }) {
|
|
36
|
+
const emit = __emit;
|
|
37
|
+
function tooltipContent(item) {
|
|
38
|
+
return item.badge !== void 0 && item.badge !== null ? `${item.label} · ${item.badge}` : item.label;
|
|
39
|
+
}
|
|
40
|
+
function itemClass(item, collapsed) {
|
|
41
|
+
return cn("relative flex items-center gap-2 rounded-md text-left text-sm outline-none", "transition-colors duration-fast ease-out", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo", collapsed ? "h-9 w-9 justify-center" : "h-9 w-full px-2.5", item.active ? "bg-primary/10 font-medium text-primary" : "text-muted-foreground hover:bg-card hover:text-foreground");
|
|
42
|
+
}
|
|
43
|
+
return (_ctx, _cache) => {
|
|
44
|
+
return openBlock(), createElementBlock("nav", {
|
|
45
|
+
"aria-label": __props.ariaLabel,
|
|
46
|
+
class: normalizeClass(["flex h-full w-full flex-col gap-1 overflow-y-auto overscroll-contain bg-sunken p-2", __props.collapsed && "items-center"])
|
|
47
|
+
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.sections, (section, sectionIndex) => {
|
|
48
|
+
return openBlock(), createElementBlock(Fragment, { key: sectionIndex }, [
|
|
49
|
+
sectionIndex > 0 ? (openBlock(), createBlock(Separator_default, {
|
|
50
|
+
key: 0,
|
|
51
|
+
class: "my-1"
|
|
52
|
+
})) : createCommentVNode("", true),
|
|
53
|
+
section.label && !__props.collapsed ? (openBlock(), createElementBlock("p", _hoisted_2, toDisplayString(section.label), 1)) : createCommentVNode("", true),
|
|
54
|
+
createElementVNode("ul", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(section.items, (item, itemIndex) => {
|
|
55
|
+
return openBlock(), createElementBlock("li", { key: itemIndex }, [__props.collapsed ? (openBlock(), createBlock(Tooltip_default, {
|
|
56
|
+
key: 0,
|
|
57
|
+
content: tooltipContent(item),
|
|
58
|
+
side: "right"
|
|
59
|
+
}, {
|
|
60
|
+
trigger: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(item.href ? "a" : "button"), {
|
|
61
|
+
type: item.href ? void 0 : "button",
|
|
62
|
+
href: item.href,
|
|
63
|
+
"aria-current": item.active ? "page" : void 0,
|
|
64
|
+
"aria-label": item.label,
|
|
65
|
+
class: normalizeClass(itemClass(item, true)),
|
|
66
|
+
onClick: ($event) => emit("select", item)
|
|
67
|
+
}, {
|
|
68
|
+
default: withCtx(() => [item.active ? (openBlock(), createElementBlock("span", _hoisted_4)) : createCommentVNode("", true), item.icon ? (openBlock(), createBlock(resolveDynamicComponent(item.icon), {
|
|
69
|
+
key: 1,
|
|
70
|
+
"aria-hidden": "true",
|
|
71
|
+
class: "shrink-0"
|
|
72
|
+
})) : createCommentVNode("", true)]),
|
|
73
|
+
_: 2
|
|
74
|
+
}, 1032, [
|
|
75
|
+
"type",
|
|
76
|
+
"href",
|
|
77
|
+
"aria-current",
|
|
78
|
+
"aria-label",
|
|
79
|
+
"class",
|
|
80
|
+
"onClick"
|
|
81
|
+
]))]),
|
|
82
|
+
_: 2
|
|
83
|
+
}, 1032, ["content"])) : (openBlock(), createBlock(resolveDynamicComponent(item.href ? "a" : "button"), {
|
|
84
|
+
key: 1,
|
|
85
|
+
type: item.href ? void 0 : "button",
|
|
86
|
+
href: item.href,
|
|
87
|
+
"aria-current": item.active ? "page" : void 0,
|
|
88
|
+
class: normalizeClass(itemClass(item, false)),
|
|
89
|
+
onClick: ($event) => emit("select", item)
|
|
90
|
+
}, {
|
|
91
|
+
default: withCtx(() => [
|
|
92
|
+
item.active ? (openBlock(), createElementBlock("span", _hoisted_5)) : createCommentVNode("", true),
|
|
93
|
+
item.icon ? (openBlock(), createBlock(resolveDynamicComponent(item.icon), {
|
|
94
|
+
key: 1,
|
|
95
|
+
"aria-hidden": "true",
|
|
96
|
+
class: "shrink-0"
|
|
97
|
+
})) : createCommentVNode("", true),
|
|
98
|
+
createElementVNode("span", _hoisted_6, toDisplayString(item.label), 1),
|
|
99
|
+
item.badge !== void 0 ? (openBlock(), createBlock(Badge_default, {
|
|
100
|
+
key: 2,
|
|
101
|
+
variant: "neutral",
|
|
102
|
+
class: "shrink-0"
|
|
103
|
+
}, {
|
|
104
|
+
default: withCtx(() => [createTextVNode(toDisplayString(item.badge), 1)]),
|
|
105
|
+
_: 2
|
|
106
|
+
}, 1024)) : createCommentVNode("", true)
|
|
107
|
+
]),
|
|
108
|
+
_: 2
|
|
109
|
+
}, 1032, [
|
|
110
|
+
"type",
|
|
111
|
+
"href",
|
|
112
|
+
"aria-current",
|
|
113
|
+
"class",
|
|
114
|
+
"onClick"
|
|
115
|
+
]))]);
|
|
116
|
+
}), 128))])
|
|
117
|
+
], 64);
|
|
118
|
+
}), 128))], 10, _hoisted_1);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
//#endregion
|
|
123
|
+
export { SidebarNav_vue_vue_type_script_setup_true_lang_default as default };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=SidebarNav.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarNav.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/blocks/SidebarNav/SidebarNav.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Component } from \"vue\";\n\n/** One destination in the sidebar. */\nexport interface SidebarNavItem {\n /** A Lucide icon component (e.g. `Home` from `@lucide/vue`) — decorative; the label carries the meaning. */\n icon?: Component;\n label: string;\n /** Marks this as the current page — the sole `--primary` accent drawn in the list. */\n active?: boolean;\n /** Renders the item as a real `<a>` instead of a `<button>`. The host owns the router/navigation. */\n href?: string;\n /** Short count/status shown after the label. Hidden in collapsed mode — folded into its tooltip instead. */\n badge?: string | number;\n}\n\n/** A labeled group of items; `label` may be omitted for an unlabeled leading group. */\nexport interface SidebarNavSection {\n label?: string;\n items: SidebarNavItem[];\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Tooltip from \"../../primitives/Tooltip/Tooltip.vue\";\nimport Badge from \"../../primitives/Badge/Badge.vue\";\nimport Separator from \"../../primitives/Separator/Separator.vue\";\nimport { cn } from \"../../lib/cn\";\n\n/**\n * SidebarNav — the primary NAVIGATION chrome: a `<nav>` landmark of sections\n * and destinations, pinned to the sunken plane (the recessed layer of the\n * shell — sunken < background < card, so work surfaces read as lifted and\n * navigation recedes).\n *\n * The active item carries a flat `--primary` fill and an inset accent bar —\n * a human decides which surface they are on, so this is the human/warp force\n * alone. It never mixes in `--agent`: this is navigation chrome, not a place\n * reporting automated work.\n *\n * Presentational only: the host owns routing (`href` renders a real anchor)\n * and which item is `active` — this component does not track a current\n * route itself.\n *\n * Collapsed mode drops to icon-only rows: each item still needs an\n * accessible name once its label text is hidden, so it moves to `aria-label`\n * (Tooltip's own contract is `aria-describedby`, never the *only* source of\n * a name) and its Tooltip doubles as the visible hint. Native `<a>`/`<button>`\n * elements are used throughout, so Enter/Space activation and tab order come\n * from the platform, not custom key handling.\n *\n * Collapsed rows are square (`h-9 w-9`) rather than full-width, so the nav\n * centers its own children in that mode. The host is what narrows the rail,\n * and it may narrow it late or not at all — without the centering, a collapsed\n * nav still sitting in an expanded-width container leaves a column of icons\n * hugging the left edge of a wide empty panel. Centering makes the mode read\n * correctly at every container width, and the host's width animation then only\n * has to tighten what already looks right.\n */\nwithDefaults(\n defineProps<{\n sections: SidebarNavSection[];\n /** Icon-only rail: section headings and item labels hide; each item's name moves into a Tooltip. */\n collapsed?: boolean;\n /** Accessible name for the `<nav>` landmark — the host owns wording (see `AppHeader`'s same prop). */\n ariaLabel?: string;\n }>(),\n { collapsed: false },\n);\n\nconst emit = defineEmits<{ select: [item: SidebarNavItem] }>();\n\nfunction tooltipContent(item: SidebarNavItem): string {\n return item.badge !== undefined && item.badge !== null\n ? `${item.label} · ${item.badge}`\n : item.label;\n}\n\nfunction itemClass(item: SidebarNavItem, collapsed: boolean): string {\n return cn(\n \"relative flex items-center gap-2 rounded-md text-left text-sm outline-none\",\n \"transition-colors duration-fast ease-out\",\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\",\n collapsed ? \"h-9 w-9 justify-center\" : \"h-9 w-full px-2.5\",\n item.active\n ? \"bg-primary/10 font-medium text-primary\"\n : // Hover lifts the row to the raised plane rather than tinting it with\n // `--subtle`. `--subtle` is the neutral hover fill for surfaces sitting\n // on `--background` (96% L), where it lands 2% darker and reads. This\n // nav sits on `--sunken` (93% L) and `--subtle` is 94% — one percent\n // apart, so the hover state was there in the markup and invisible on\n // screen. Lifting to `bg-card` is the elevation rhythm's own answer\n // (sunken < background < card): the row the pointer is on comes\n // forward.\n \"text-muted-foreground hover:bg-card hover:text-foreground\",\n );\n}\n</script>\n\n<template>\n <nav\n :aria-label=\"ariaLabel\"\n class=\"flex h-full w-full flex-col gap-1 overflow-y-auto overscroll-contain bg-sunken p-2\"\n :class=\"collapsed && 'items-center'\"\n >\n <template v-for=\"(section, sectionIndex) in sections\" :key=\"sectionIndex\">\n <Separator v-if=\"sectionIndex > 0\" class=\"my-1\" />\n <p\n v-if=\"section.label && !collapsed\"\n class=\"select-none px-2 pb-1 pt-2 text-micro font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {{ section.label }}\n </p>\n <ul class=\"flex flex-col gap-0.5\">\n <li v-for=\"(item, itemIndex) in section.items\" :key=\"itemIndex\">\n <Tooltip v-if=\"collapsed\" :content=\"tooltipContent(item)\" side=\"right\">\n <template #trigger>\n <component\n :is=\"item.href ? 'a' : 'button'\"\n :type=\"item.href ? undefined : 'button'\"\n :href=\"item.href\"\n :aria-current=\"item.active ? 'page' : undefined\"\n :aria-label=\"item.label\"\n :class=\"itemClass(item, true)\"\n @click=\"emit('select', item)\"\n >\n <span\n v-if=\"item.active\"\n aria-hidden=\"true\"\n class=\"absolute inset-y-1.5 left-0 w-0.5 rounded-full bg-primary\"\n />\n <component :is=\"item.icon\" v-if=\"item.icon\" aria-hidden=\"true\" class=\"shrink-0\" />\n </component>\n </template>\n </Tooltip>\n\n <component\n :is=\"item.href ? 'a' : 'button'\"\n v-else\n :type=\"item.href ? undefined : 'button'\"\n :href=\"item.href\"\n :aria-current=\"item.active ? 'page' : undefined\"\n :class=\"itemClass(item, false)\"\n @click=\"emit('select', item)\"\n >\n <span\n v-if=\"item.active\"\n aria-hidden=\"true\"\n class=\"absolute inset-y-1.5 left-0 w-0.5 rounded-full bg-primary\"\n />\n <component :is=\"item.icon\" v-if=\"item.icon\" aria-hidden=\"true\" class=\"shrink-0\" />\n <span class=\"min-w-0 flex-1 truncate\">{{ item.label }}</span>\n <Badge v-if=\"item.badge !== undefined\" variant=\"neutral\" class=\"shrink-0\">\n {{ item.badge }}\n </Badge>\n </component>\n </li>\n </ul>\n </template>\n </nav>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEA,MAAM,OAAO;EAEb,SAAS,eAAe,MAA8B;GACpD,OAAO,KAAK,UAAU,KAAA,KAAa,KAAK,UAAU,OAC9C,GAAG,KAAK,MAAM,KAAK,KAAK,UACxB,KAAK;EACX;EAEA,SAAS,UAAU,MAAsB,WAA4B;GACnE,OAAO,GACL,8EACA,4CACA,+GACA,YAAY,2BAA2B,qBACvC,KAAK,SACD,2CASA,2DACN;EACF;;GAIE,OAAA,UAAA,GAAA,mBA2DM,OAAA;IA1DH,cAAY,QAAA;IACb,OAAK,eAAA,CAAC,sFACE,QAAA,aAAS,cAAA,CAAA;GAEjB,GAAA,EAAA,UAAA,IAAA,GAAA,mBAqDW,UAAA,MAAA,WArDiC,QAAA,WAA1B,SAAS,iBAAY;IAAqB,OAAA,UAAA,GAAA,mBAAA,UAAA,EAAA,KAAA,aAAY,GAAA;KACrD,eAAY,KAA7B,UAAA,GAAA,YAAkD,mBAAA;;MAAf,OAAM;;KAEjC,QAAQ,SAAK,CAAK,QAAA,aAD1B,UAAA,GAAA,mBAKI,KALJ,YAKI,gBADC,QAAQ,KAAK,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;KAElB,mBA4CK,MA5CL,YA4CK,EA3CH,UAAA,IAAA,GAAA,mBA0CK,UAAA,MAAA,WA1C2B,QAAQ,QAA5B,MAAM,cAAS;MAA3B,OAAA,UAAA,GAAA,mBA0CK,MAAA,EA1C2C,KAAK,UAAS,GAAA,CAC7C,QAAA,aAAf,UAAA,GAAA,YAmBU,iBAAA;;OAnBiB,SAAS,eAAe,IAAI;OAAG,MAAK;;OAClD,SAAO,cAgBJ,EAfZ,UAAA,GAAA,YAeY,wBAdL,KAAK,OAAI,MAAA,QAAA,GAAA;QACb,MAAM,KAAK,OAAO,KAAA,IAAS;QAC3B,MAAM,KAAK;QACX,gBAAc,KAAK,SAAM,SAAY,KAAA;QACrC,cAAY,KAAK;QACjB,OAAK,eAAE,UAAU,MAAI,IAAA,CAAA;QACrB,UAAK,WAAE,KAAI,UAAW,IAAI;;QAE3B,SAAA,cAIE,CAHM,KAAK,UADb,UAAA,GAAA,mBAIE,QAJF,UAIE,KAAA,mBAAA,IAAA,IAAA,GAC+B,KAAK,QAAtC,UAAA,GAAA,YAAkF,wBAAlE,KAAK,IAAI,GAAA;;SAAmB,eAAY;SAAO,OAAM;;;;;;;;;;;;MAK3E,GAAA,MAAA,CAAA,SAAA,CAAA,MAAA,UAAA,GAAA,YAmBY,wBAlBL,KAAK,OAAI,MAAA,QAAA,GAAA;;OAEb,MAAM,KAAK,OAAO,KAAA,IAAS;OAC3B,MAAM,KAAK;OACX,gBAAc,KAAK,SAAM,SAAY,KAAA;OACrC,OAAK,eAAE,UAAU,MAAI,KAAA,CAAA;OACrB,UAAK,WAAE,KAAI,UAAW,IAAI;;OAE3B,SAAA,cAIE;QAHM,KAAK,UADb,UAAA,GAAA,mBAIE,QAJF,UAIE,KAAA,mBAAA,IAAA,IAAA;QAC+B,KAAK,QAAtC,UAAA,GAAA,YAAkF,wBAAlE,KAAK,IAAI,GAAA;;SAAmB,eAAY;SAAO,OAAM;;QACrE,mBAA6D,QAA7D,YAA6D,gBAApB,KAAK,KAAK,GAAA,CAAA;QACtC,KAAK,UAAU,KAAA,KAA5B,UAAA,GAAA,YAEQ,eAAA;;SAF+B,SAAQ;SAAU,OAAM;;SAC7D,SAAA,cAAgB,CAAb,gBAAA,gBAAA,KAAK,KAAK,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import TitleBar_vue_vue_type_script_setup_true_lang_default from "./TitleBar.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/blocks/TitleBar/TitleBar.vue
|
|
3
|
+
var TitleBar_default = TitleBar_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { TitleBar_default as default };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=TitleBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TitleBar.js","names":[],"sources":["../../../src/blocks/TitleBar/TitleBar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * TitleBar — a desktop app's custom window chrome (a block: composed from\n * primitives, domain-aware, but still presentational). Layout:\n *\n * [ ⬡ brand ] [ File View Help ] ····· drag / title ····· [ – ▢ ✕ ]\n *\n * The whole bar is a drag region (`-webkit-app-region: drag`); the interactive\n * clusters (Menubar, WindowControls) opt back out. It owns NO app logic — it\n * re-emits `select` from the menu and the window intents, so the desktop host\n * wires the window bridge around it.\n */\nimport type { MenubarMenu } from \"../../primitives/Menubar/Menubar.vue\";\n</script>\n\n<script setup lang=\"ts\">\nimport Menubar from \"../../primitives/Menubar/Menubar.vue\";\nimport WindowControls, {\n type WindowControlsLabels,\n} from \"../../primitives/WindowControls/WindowControls.vue\";\nimport BrandMark from \"../../icons/BrandMark\";\nimport { optional } from \"../../lib/props\";\n\nwithDefaults(\n defineProps<{\n /** The host app's brand name — required: this block has no identity of its own. */\n appName: string;\n /** Centered subtitle — usually the open project / composition. */\n title?: string;\n menus?: MenubarMenu[];\n isMaximized?: boolean;\n /** Passed through to WindowControls (host-side i18n); omit for its English defaults. */\n windowControlsLabels?: WindowControlsLabels;\n }>(),\n {\n title: \"\",\n menus: () => [],\n isMaximized: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: \"select\", command: string): void;\n (e: \"minimize\"): void;\n (e: \"maximize\"): void;\n (e: \"close\"): void;\n}>();\n</script>\n\n<template>\n <header\n class=\"flex h-9 select-none items-center border-b border-border bg-card text-foreground\"\n style=\"-webkit-app-region: drag\"\n >\n <!-- Brand. Deliberately NOT `no-drag`: nothing here is interactive, and the\n logo corner is the spot people reach for to move a window — opting it\n out of the drag region would take that away and give nothing back.\n Only the clusters that actually take clicks (Menubar, WindowControls)\n opt out. -->\n <div class=\"flex shrink-0 items-center gap-2 pl-3 pr-1.5\">\n <span\n class=\"grid h-4 w-4 place-items-center rounded-[5px] bg-primary text-primary-foreground shadow-sm\"\n aria-hidden=\"true\"\n >\n <!-- stroke bumped for optical balance at tiny size -->\n <BrandMark :size=\"10\" :stroke-width=\"2.5\" />\n </span>\n <span class=\"text-xs font-semibold tracking-tight\">{{ appName }}</span>\n </div>\n\n <!-- Menu bar -->\n <Menubar v-if=\"menus.length\" :menus=\"menus\" @select=\"emit('select', $event)\" />\n\n <!-- Draggable spacer + centered title -->\n <div class=\"flex min-w-0 flex-1 items-center justify-center overflow-hidden px-4\">\n <span v-if=\"title\" class=\"truncate text-xs text-muted-foreground\">{{ title }}</span>\n </div>\n\n <!-- Window controls -->\n <WindowControls\n :is-maximized=\"isMaximized\"\n v-bind=\"optional({ labels: windowControlsLabels })\"\n @minimize=\"emit('minimize')\"\n @maximize=\"emit('maximize')\"\n @close=\"emit('close')\"\n />\n </header>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type WindowControlsLabels } from "../../primitives/WindowControls/WindowControls.vue";
|
|
2
|
+
/**
|
|
3
|
+
* TitleBar — a desktop app's custom window chrome (a block: composed from
|
|
4
|
+
* primitives, domain-aware, but still presentational). Layout:
|
|
5
|
+
*
|
|
6
|
+
* [ ⬡ brand ] [ File View Help ] ····· drag / title ····· [ – ▢ ✕ ]
|
|
7
|
+
*
|
|
8
|
+
* The whole bar is a drag region (`-webkit-app-region: drag`); the interactive
|
|
9
|
+
* clusters (Menubar, WindowControls) opt back out. It owns NO app logic — it
|
|
10
|
+
* re-emits `select` from the menu and the window intents, so the desktop host
|
|
11
|
+
* wires the window bridge around it.
|
|
12
|
+
*/
|
|
13
|
+
import type { MenubarMenu } from "../../primitives/Menubar/Menubar.vue";
|
|
14
|
+
declare const _default: typeof __VLS_export;
|
|
15
|
+
export default _default;
|
|
16
|
+
declare const __VLS_export: import("vue").DefineComponent<{
|
|
17
|
+
/** The host app's brand name — required: this block has no identity of its own. */
|
|
18
|
+
appName: string;
|
|
19
|
+
/** Centered subtitle — usually the open project / composition. */
|
|
20
|
+
title?: string;
|
|
21
|
+
menus?: MenubarMenu[];
|
|
22
|
+
isMaximized?: boolean;
|
|
23
|
+
/** Passed through to WindowControls (host-side i18n); omit for its English defaults. */
|
|
24
|
+
windowControlsLabels?: WindowControlsLabels;
|
|
25
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
26
|
+
select: (command: string) => any;
|
|
27
|
+
close: () => any;
|
|
28
|
+
minimize: () => any;
|
|
29
|
+
maximize: () => any;
|
|
30
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
31
|
+
/** The host app's brand name — required: this block has no identity of its own. */
|
|
32
|
+
appName: string;
|
|
33
|
+
/** Centered subtitle — usually the open project / composition. */
|
|
34
|
+
title?: string;
|
|
35
|
+
menus?: MenubarMenu[];
|
|
36
|
+
isMaximized?: boolean;
|
|
37
|
+
/** Passed through to WindowControls (host-side i18n); omit for its English defaults. */
|
|
38
|
+
windowControlsLabels?: WindowControlsLabels;
|
|
39
|
+
}> & Readonly<{
|
|
40
|
+
onSelect?: (command: string) => any;
|
|
41
|
+
onClose?: () => any;
|
|
42
|
+
onMinimize?: () => any;
|
|
43
|
+
onMaximize?: () => any;
|
|
44
|
+
}>, {
|
|
45
|
+
title: string;
|
|
46
|
+
menus: MenubarMenu[];
|
|
47
|
+
isMaximized: boolean;
|
|
48
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
49
|
+
//# sourceMappingURL=TitleBar.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TitleBar.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/TitleBar/TitleBar.vue"],"names":[],"mappings":"AA4FA,OAAuB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,oDAAoD,CAAC;AAK5D;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;wBACnD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,mFAAmF;aAC1E,MAAM;IACf,kEAAkE;YAC1D,MAAM;YACN,WAAW,EAAE;kBACP,OAAO;IACrB,wFAAwF;2BACjE,oBAAoB;;;;;;;IAP3C,mFAAmF;aAC1E,MAAM;IACf,kEAAkE;YAC1D,MAAM;YACN,WAAW,EAAE;kBACP,OAAO;IACrB,wFAAwF;2BACjE,oBAAoB;;;;;;;WAJnC,MAAM;WACN,WAAW,EAAE;iBACP,OAAO;6EAkMrB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { optional } from "../../lib/props.js";
|
|
2
|
+
import Menubar_default from "../../primitives/Menubar/Menubar.js";
|
|
3
|
+
import WindowControls_default from "../../primitives/WindowControls/WindowControls.js";
|
|
4
|
+
import BrandMark from "../../icons/BrandMark.js";
|
|
5
|
+
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, openBlock, toDisplayString, unref } from "vue";
|
|
6
|
+
//#region src/blocks/TitleBar/TitleBar.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var _hoisted_1 = {
|
|
8
|
+
class: "flex h-9 select-none items-center border-b border-border bg-card text-foreground",
|
|
9
|
+
style: { "-webkit-app-region": "drag" }
|
|
10
|
+
};
|
|
11
|
+
var _hoisted_2 = { class: "flex shrink-0 items-center gap-2 pl-3 pr-1.5" };
|
|
12
|
+
var _hoisted_3 = {
|
|
13
|
+
class: "grid h-4 w-4 place-items-center rounded-[5px] bg-primary text-primary-foreground shadow-sm",
|
|
14
|
+
"aria-hidden": "true"
|
|
15
|
+
};
|
|
16
|
+
var _hoisted_4 = { class: "text-xs font-semibold tracking-tight" };
|
|
17
|
+
var _hoisted_5 = { class: "flex min-w-0 flex-1 items-center justify-center overflow-hidden px-4" };
|
|
18
|
+
var _hoisted_6 = {
|
|
19
|
+
key: 0,
|
|
20
|
+
class: "truncate text-xs text-muted-foreground"
|
|
21
|
+
};
|
|
22
|
+
var TitleBar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
23
|
+
__name: "TitleBar",
|
|
24
|
+
props: {
|
|
25
|
+
appName: {},
|
|
26
|
+
title: { default: "" },
|
|
27
|
+
menus: { default: () => [] },
|
|
28
|
+
isMaximized: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: false
|
|
31
|
+
},
|
|
32
|
+
windowControlsLabels: {}
|
|
33
|
+
},
|
|
34
|
+
emits: [
|
|
35
|
+
"select",
|
|
36
|
+
"minimize",
|
|
37
|
+
"maximize",
|
|
38
|
+
"close"
|
|
39
|
+
],
|
|
40
|
+
setup(__props, { emit: __emit }) {
|
|
41
|
+
const emit = __emit;
|
|
42
|
+
return (_ctx, _cache) => {
|
|
43
|
+
return openBlock(), createElementBlock("header", _hoisted_1, [
|
|
44
|
+
createElementVNode("div", _hoisted_2, [createElementVNode("span", _hoisted_3, [createVNode(unref(BrandMark), {
|
|
45
|
+
size: 10,
|
|
46
|
+
"stroke-width": 2.5
|
|
47
|
+
})]), createElementVNode("span", _hoisted_4, toDisplayString(__props.appName), 1)]),
|
|
48
|
+
__props.menus.length ? (openBlock(), createBlock(Menubar_default, {
|
|
49
|
+
key: 0,
|
|
50
|
+
menus: __props.menus,
|
|
51
|
+
onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event))
|
|
52
|
+
}, null, 8, ["menus"])) : createCommentVNode("", true),
|
|
53
|
+
createElementVNode("div", _hoisted_5, [__props.title ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(__props.title), 1)) : createCommentVNode("", true)]),
|
|
54
|
+
createVNode(WindowControls_default, mergeProps({ "is-maximized": __props.isMaximized }, unref(optional)({ labels: __props.windowControlsLabels }), {
|
|
55
|
+
onMinimize: _cache[1] || (_cache[1] = ($event) => emit("minimize")),
|
|
56
|
+
onMaximize: _cache[2] || (_cache[2] = ($event) => emit("maximize")),
|
|
57
|
+
onClose: _cache[3] || (_cache[3] = ($event) => emit("close"))
|
|
58
|
+
}), null, 16, ["is-maximized"])
|
|
59
|
+
]);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
//#endregion
|
|
64
|
+
export { TitleBar_vue_vue_type_script_setup_true_lang_default as default };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=TitleBar.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TitleBar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/blocks/TitleBar/TitleBar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * TitleBar — a desktop app's custom window chrome (a block: composed from\n * primitives, domain-aware, but still presentational). Layout:\n *\n * [ ⬡ brand ] [ File View Help ] ····· drag / title ····· [ – ▢ ✕ ]\n *\n * The whole bar is a drag region (`-webkit-app-region: drag`); the interactive\n * clusters (Menubar, WindowControls) opt back out. It owns NO app logic — it\n * re-emits `select` from the menu and the window intents, so the desktop host\n * wires the window bridge around it.\n */\nimport type { MenubarMenu } from \"../../primitives/Menubar/Menubar.vue\";\n</script>\n\n<script setup lang=\"ts\">\nimport Menubar from \"../../primitives/Menubar/Menubar.vue\";\nimport WindowControls, {\n type WindowControlsLabels,\n} from \"../../primitives/WindowControls/WindowControls.vue\";\nimport BrandMark from \"../../icons/BrandMark\";\nimport { optional } from \"../../lib/props\";\n\nwithDefaults(\n defineProps<{\n /** The host app's brand name — required: this block has no identity of its own. */\n appName: string;\n /** Centered subtitle — usually the open project / composition. */\n title?: string;\n menus?: MenubarMenu[];\n isMaximized?: boolean;\n /** Passed through to WindowControls (host-side i18n); omit for its English defaults. */\n windowControlsLabels?: WindowControlsLabels;\n }>(),\n {\n title: \"\",\n menus: () => [],\n isMaximized: false,\n },\n);\n\nconst emit = defineEmits<{\n (e: \"select\", command: string): void;\n (e: \"minimize\"): void;\n (e: \"maximize\"): void;\n (e: \"close\"): void;\n}>();\n</script>\n\n<template>\n <header\n class=\"flex h-9 select-none items-center border-b border-border bg-card text-foreground\"\n style=\"-webkit-app-region: drag\"\n >\n <!-- Brand. Deliberately NOT `no-drag`: nothing here is interactive, and the\n logo corner is the spot people reach for to move a window — opting it\n out of the drag region would take that away and give nothing back.\n Only the clusters that actually take clicks (Menubar, WindowControls)\n opt out. -->\n <div class=\"flex shrink-0 items-center gap-2 pl-3 pr-1.5\">\n <span\n class=\"grid h-4 w-4 place-items-center rounded-[5px] bg-primary text-primary-foreground shadow-sm\"\n aria-hidden=\"true\"\n >\n <!-- stroke bumped for optical balance at tiny size -->\n <BrandMark :size=\"10\" :stroke-width=\"2.5\" />\n </span>\n <span class=\"text-xs font-semibold tracking-tight\">{{ appName }}</span>\n </div>\n\n <!-- Menu bar -->\n <Menubar v-if=\"menus.length\" :menus=\"menus\" @select=\"emit('select', $event)\" />\n\n <!-- Draggable spacer + centered title -->\n <div class=\"flex min-w-0 flex-1 items-center justify-center overflow-hidden px-4\">\n <span v-if=\"title\" class=\"truncate text-xs text-muted-foreground\">{{ title }}</span>\n </div>\n\n <!-- Window controls -->\n <WindowControls\n :is-maximized=\"isMaximized\"\n v-bind=\"optional({ labels: windowControlsLabels })\"\n @minimize=\"emit('minimize')\"\n @maximize=\"emit('maximize')\"\n @close=\"emit('close')\"\n />\n </header>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCA,MAAM,OAAO;;GASX,OAAA,UAAA,GAAA,mBAoCS,UApCT,YAoCS;IA3BP,mBASM,OATN,YASM,CARJ,mBAMO,QANP,YAMO,CADL,YAA4C,MAAA,SAAA,GAAA;KAAhC,MAAM;KAAK,gBAAc;IAEvC,CAAA,CAAA,CAAA,GAAA,mBAAuE,QAAvE,YAAuE,gBAAjB,QAAA,OAAO,GAAA,CAAA,CAAA,CAAA;IAIhD,QAAA,MAAM,UAArB,UAAA,GAAA,YAA+E,iBAAA;;KAAjD,OAAO,QAAA;KAAQ,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAW,MAAM;;IAG1E,mBAEM,OAFN,YAEM,CADQ,QAAA,SAAZ,UAAA,GAAA,mBAAoF,QAApF,YAAoF,gBAAf,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA;IAI5E,YAME,wBANF,WAME,EALC,gBAAc,QAAA,YAAW,GAClB,MAAA,QAAA,CAAQ,CAAA,EAAA,QAAW,QAAA,qBAAoB,CAAA,GAAA;KAC9C,YAAQ,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA;KACd,YAAQ,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA;KACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ToastStack_vue_vue_type_script_setup_true_lang_default from "./ToastStack.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/blocks/ToastStack/ToastStack.vue
|
|
3
|
+
var ToastStack_default = ToastStack_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { ToastStack_default as default };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=ToastStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastStack.js","names":[],"sources":["../../../src/blocks/ToastStack/ToastStack.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ToastVariant } from \"../../primitives/Toast/Toast.vue\";\n\n/** One entry of a host-owned toast queue, rendered by `ToastStack`. */\nexport interface ToastStackItem {\n readonly id: string | number;\n readonly title: string;\n readonly description?: string;\n readonly variant?: ToastVariant;\n /** ms before auto-dismiss (default 4000 — a stack turns over faster than a lone toast). */\n readonly duration?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ToastProvider, ToastViewport } from \"reka-ui\";\nimport { optional } from \"../../lib/props\";\nimport ToastItem from \"../../primitives/Toast/ToastItem.vue\";\n\n/**\n * ToastStack — renders a host-owned toast queue through ONE shared\n * provider/viewport, so simultaneous toasts stack vertically with a gap\n * instead of piling onto the same fixed corner (which is what N standalone\n * `Toast`s produce — each bundles its own viewport at the same coordinates).\n *\n * The queue stays the host's: the host passes the visible entries and\n * removes an entry when `dismiss` fires — on close, swipe, Esc, or\n * auto-dismiss alike. This block owns only the shared-viewport treatment.\n * Every rendered item is driven with `open` fixed to `true` — `ToastStack`\n * decides an entry is visible by including it in `items`, never by an\n * item's own open state, so there is no per-item boolean left unset for\n * Vue's absent-prop casting to catch.\n *\n * The viewport's geometry is written for the two ends of the range it\n * actually lands in. Width is `min(92vw, 24rem)`, so a phone gets a\n * near-full-bleed card and a desktop a bounded one. The bottom inset\n * resolves through `env(safe-area-inset-bottom)` — on a device with a home\n * indicator a flat `p-4` puts the newest toast, and its dismiss control,\n * under the system gesture bar. And the stack is height-bounded\n * (`max-h-dvh` + `overflow-hidden`) so a host that hands over more entries\n * than fit pushes the oldest off the top rather than growing a column\n * taller than the screen. `dvh`, not `vh`: mobile browser chrome collapses\n * the visual viewport and `vh` does not follow.\n */\ndefineProps<{\n /** The host's visible toast queue, oldest first. */\n items: readonly ToastStackItem[];\n}>();\n\ndefineEmits<{ dismiss: [id: string | number] }>();\n</script>\n\n<template>\n <ToastProvider>\n <ToastItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :open=\"true\"\n :title=\"item.title\"\n v-bind=\"optional({ description: item.description, variant: item.variant })\"\n :duration=\"item.duration ?? 4000\"\n @update:open=\"(open) => !open && $emit('dismiss', item.id)\"\n />\n\n <ToastViewport\n class=\"fixed bottom-0 right-0 z-[100] flex max-h-dvh w-[min(92vw,24rem)] flex-col gap-2 overflow-hidden p-4 pb-[max(1rem,env(safe-area-inset-bottom))] outline-none\"\n />\n </ToastProvider>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ToastVariant } from "../../primitives/Toast/Toast.vue";
|
|
2
|
+
/** One entry of a host-owned toast queue, rendered by `ToastStack`. */
|
|
3
|
+
export interface ToastStackItem {
|
|
4
|
+
readonly id: string | number;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly description?: string;
|
|
7
|
+
readonly variant?: ToastVariant;
|
|
8
|
+
/** ms before auto-dismiss (default 4000 — a stack turns over faster than a lone toast). */
|
|
9
|
+
readonly duration?: number;
|
|
10
|
+
}
|
|
11
|
+
declare const _default: typeof __VLS_export;
|
|
12
|
+
export default _default;
|
|
13
|
+
declare const __VLS_export: import("vue").DefineComponent<{
|
|
14
|
+
/** The host's visible toast queue, oldest first. */
|
|
15
|
+
items: readonly ToastStackItem[];
|
|
16
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
|
+
dismiss: (id: string | number) => any;
|
|
18
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
19
|
+
/** The host's visible toast queue, oldest first. */
|
|
20
|
+
items: readonly ToastStackItem[];
|
|
21
|
+
}> & Readonly<{
|
|
22
|
+
onDismiss?: (id: string | number) => any;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
//# sourceMappingURL=ToastStack.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastStack.vue.d.ts","sourceRoot":"","sources":["../../../src/blocks/ToastStack/ToastStack.vue"],"names":[],"mappings":"AA6EA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;wBACoB,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IA2BhB,oDAAoD;WAC7C,SAAS,cAAc,EAAE;;;;IADhC,oDAAoD;WAC7C,SAAS,cAAc,EAAE;;;kFAqG9B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { optional } from "../../lib/props.js";
|
|
2
|
+
import ToastItem_default from "../../primitives/Toast/ToastItem.js";
|
|
3
|
+
import { Fragment, createBlock, createElementBlock, createVNode, defineComponent, mergeProps, openBlock, renderList, unref, withCtx } from "vue";
|
|
4
|
+
import { ToastProvider, ToastViewport } from "reka-ui";
|
|
5
|
+
//#region src/blocks/ToastStack/ToastStack.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var ToastStack_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
7
|
+
__name: "ToastStack",
|
|
8
|
+
props: { items: {} },
|
|
9
|
+
emits: ["dismiss"],
|
|
10
|
+
setup(__props) {
|
|
11
|
+
return (_ctx, _cache) => {
|
|
12
|
+
return openBlock(), createBlock(unref(ToastProvider), null, {
|
|
13
|
+
default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
|
|
14
|
+
return openBlock(), createBlock(ToastItem_default, mergeProps({
|
|
15
|
+
key: item.id,
|
|
16
|
+
open: true,
|
|
17
|
+
title: item.title
|
|
18
|
+
}, { ref_for: true }, unref(optional)({
|
|
19
|
+
description: item.description,
|
|
20
|
+
variant: item.variant
|
|
21
|
+
}), {
|
|
22
|
+
duration: item.duration ?? 4e3,
|
|
23
|
+
"onUpdate:open": (open) => !open && _ctx.$emit("dismiss", item.id)
|
|
24
|
+
}), null, 16, [
|
|
25
|
+
"title",
|
|
26
|
+
"duration",
|
|
27
|
+
"onUpdate:open"
|
|
28
|
+
]);
|
|
29
|
+
}), 128)), createVNode(unref(ToastViewport), { class: "fixed bottom-0 right-0 z-[100] flex max-h-dvh w-[min(92vw,24rem)] flex-col gap-2 overflow-hidden p-4 pb-[max(1rem,env(safe-area-inset-bottom))] outline-none" })]),
|
|
30
|
+
_: 1
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
//#endregion
|
|
36
|
+
export { ToastStack_vue_vue_type_script_setup_true_lang_default as default };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=ToastStack.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastStack.vue_vue_type_script_setup_true_lang.js","names":["$emit"],"sources":["../../../src/blocks/ToastStack/ToastStack.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ToastVariant } from \"../../primitives/Toast/Toast.vue\";\n\n/** One entry of a host-owned toast queue, rendered by `ToastStack`. */\nexport interface ToastStackItem {\n readonly id: string | number;\n readonly title: string;\n readonly description?: string;\n readonly variant?: ToastVariant;\n /** ms before auto-dismiss (default 4000 — a stack turns over faster than a lone toast). */\n readonly duration?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ToastProvider, ToastViewport } from \"reka-ui\";\nimport { optional } from \"../../lib/props\";\nimport ToastItem from \"../../primitives/Toast/ToastItem.vue\";\n\n/**\n * ToastStack — renders a host-owned toast queue through ONE shared\n * provider/viewport, so simultaneous toasts stack vertically with a gap\n * instead of piling onto the same fixed corner (which is what N standalone\n * `Toast`s produce — each bundles its own viewport at the same coordinates).\n *\n * The queue stays the host's: the host passes the visible entries and\n * removes an entry when `dismiss` fires — on close, swipe, Esc, or\n * auto-dismiss alike. This block owns only the shared-viewport treatment.\n * Every rendered item is driven with `open` fixed to `true` — `ToastStack`\n * decides an entry is visible by including it in `items`, never by an\n * item's own open state, so there is no per-item boolean left unset for\n * Vue's absent-prop casting to catch.\n *\n * The viewport's geometry is written for the two ends of the range it\n * actually lands in. Width is `min(92vw, 24rem)`, so a phone gets a\n * near-full-bleed card and a desktop a bounded one. The bottom inset\n * resolves through `env(safe-area-inset-bottom)` — on a device with a home\n * indicator a flat `p-4` puts the newest toast, and its dismiss control,\n * under the system gesture bar. And the stack is height-bounded\n * (`max-h-dvh` + `overflow-hidden`) so a host that hands over more entries\n * than fit pushes the oldest off the top rather than growing a column\n * taller than the screen. `dvh`, not `vh`: mobile browser chrome collapses\n * the visual viewport and `vh` does not follow.\n */\ndefineProps<{\n /** The host's visible toast queue, oldest first. */\n items: readonly ToastStackItem[];\n}>();\n\ndefineEmits<{ dismiss: [id: string | number] }>();\n</script>\n\n<template>\n <ToastProvider>\n <ToastItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :open=\"true\"\n :title=\"item.title\"\n v-bind=\"optional({ description: item.description, variant: item.variant })\"\n :duration=\"item.duration ?? 4000\"\n @update:open=\"(open) => !open && $emit('dismiss', item.id)\"\n />\n\n <ToastViewport\n class=\"fixed bottom-0 right-0 z-[100] flex max-h-dvh w-[min(92vw,24rem)] flex-col gap-2 overflow-hidden p-4 pb-[max(1rem,env(safe-area-inset-bottom))] outline-none\"\n />\n </ToastProvider>\n</template>\n"],"mappings":";;;;;;;;;;;GAqDE,OAAA,UAAA,GAAA,YAcgB,MAAA,aAAA,GAAA,MAAA;IAZZ,SAAA,cAAqB,EADvB,UAAA,IAAA,GAAA,mBAQE,UAAA,MAAA,WAPe,QAAA,QAAR,SAAI;KADb,OAAA,UAAA,GAAA,YAQE,mBARF,WAQE;MANC,KAAK,KAAK;MACV,MAAM;MACN,OAAO,KAAK;KACL,GAAA,EAAA,SAAA,KAAA,GAAA,MAAA,QAAA,CAAQ,CAAA;MAAA,aAAgB,KAAK;MAAW,SAAW,KAAK;KAAO,CAAA,GAAA;MACtE,UAAU,KAAK,YAAQ;MACvB,kBAAc,SAAI,CAAM,QAAQA,KAAAA,MAAK,WAAY,KAAK,EAAE;;;;;;IAG3D,CAAA,GAAA,GAAA,IAAA,YAEE,MAAA,aAAA,GAAA,EADA,OAAM,+JAA8J,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrandMark — one face, two forces. The left half is human (an almond eye),
|
|
3
|
+
* the right half is the agent (a rectangular eye), and the dividing line is a
|
|
4
|
+
* nose bridge: both halves belong to the same face, which is the
|
|
5
|
+
* organization.
|
|
6
|
+
*
|
|
7
|
+
* Built with `createLucideIcon` so it takes exactly the props any Lucide icon
|
|
8
|
+
* takes — size, strokeWidth, color — and a consumer cannot tell a custom icon
|
|
9
|
+
* from a stock one. Custom icons live in this folder and follow the same
|
|
10
|
+
* recipe: 24-unit grid geometry, stroke through `currentColor`.
|
|
11
|
+
*
|
|
12
|
+
* The duotone treatment, where the warp and weft halves carry their own
|
|
13
|
+
* colours, is a brand asset rather than an icon. An icon stays monochrome so
|
|
14
|
+
* it can inherit whatever colour it is dropped into.
|
|
15
|
+
*/
|
|
16
|
+
declare const BrandMark: import("@lucide/vue").LucideIcon;
|
|
17
|
+
export default BrandMark;
|
|
18
|
+
//# sourceMappingURL=BrandMark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrandMark.d.ts","sourceRoot":"","sources":["../../src/icons/BrandMark.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,SAAS,kCAgBb,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createLucideIcon } from "@lucide/vue";
|
|
2
|
+
//#region src/icons/BrandMark.ts
|
|
3
|
+
/**
|
|
4
|
+
* BrandMark — one face, two forces. The left half is human (an almond eye),
|
|
5
|
+
* the right half is the agent (a rectangular eye), and the dividing line is a
|
|
6
|
+
* nose bridge: both halves belong to the same face, which is the
|
|
7
|
+
* organization.
|
|
8
|
+
*
|
|
9
|
+
* Built with `createLucideIcon` so it takes exactly the props any Lucide icon
|
|
10
|
+
* takes — size, strokeWidth, color — and a consumer cannot tell a custom icon
|
|
11
|
+
* from a stock one. Custom icons live in this folder and follow the same
|
|
12
|
+
* recipe: 24-unit grid geometry, stroke through `currentColor`.
|
|
13
|
+
*
|
|
14
|
+
* The duotone treatment, where the warp and weft halves carry their own
|
|
15
|
+
* colours, is a brand asset rather than an icon. An icon stays monochrome so
|
|
16
|
+
* it can inherit whatever colour it is dropped into.
|
|
17
|
+
*/
|
|
18
|
+
var BrandMark = createLucideIcon("brand-mark", [
|
|
19
|
+
["rect", {
|
|
20
|
+
x: "3",
|
|
21
|
+
y: "3",
|
|
22
|
+
width: "18",
|
|
23
|
+
height: "18",
|
|
24
|
+
rx: "4"
|
|
25
|
+
}],
|
|
26
|
+
["path", { d: "M12 3c0 2.2-.1 3.9-.3 5.4 1.7 1.1 1.7 3.1 0 4.2.2 1.4.3 2.7.3 3.9V21" }],
|
|
27
|
+
["circle", {
|
|
28
|
+
cx: "7.8",
|
|
29
|
+
cy: "10.6",
|
|
30
|
+
r: "1.3",
|
|
31
|
+
fill: "currentColor",
|
|
32
|
+
stroke: "none"
|
|
33
|
+
}],
|
|
34
|
+
["rect", {
|
|
35
|
+
x: "14.8",
|
|
36
|
+
y: "9.3",
|
|
37
|
+
width: "2.9",
|
|
38
|
+
height: "2.6",
|
|
39
|
+
rx: "0.8",
|
|
40
|
+
fill: "currentColor",
|
|
41
|
+
stroke: "none"
|
|
42
|
+
}]
|
|
43
|
+
]);
|
|
44
|
+
//#endregion
|
|
45
|
+
export { BrandMark as default };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=BrandMark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrandMark.js","names":[],"sources":["../../src/icons/BrandMark.ts"],"sourcesContent":["import { createLucideIcon } from \"@lucide/vue\";\n\n/**\n * BrandMark — one face, two forces. The left half is human (an almond eye),\n * the right half is the agent (a rectangular eye), and the dividing line is a\n * nose bridge: both halves belong to the same face, which is the\n * organization.\n *\n * Built with `createLucideIcon` so it takes exactly the props any Lucide icon\n * takes — size, strokeWidth, color — and a consumer cannot tell a custom icon\n * from a stock one. Custom icons live in this folder and follow the same\n * recipe: 24-unit grid geometry, stroke through `currentColor`.\n *\n * The duotone treatment, where the warp and weft halves carry their own\n * colours, is a brand asset rather than an icon. An icon stays monochrome so\n * it can inherit whatever colour it is dropped into.\n */\nconst BrandMark = createLucideIcon(\"brand-mark\", [\n [\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"4\" }],\n [\"path\", { d: \"M12 3c0 2.2-.1 3.9-.3 5.4 1.7 1.1 1.7 3.1 0 4.2.2 1.4.3 2.7.3 3.9V21\" }],\n [\"circle\", { cx: \"7.8\", cy: \"10.6\", r: \"1.3\", fill: \"currentColor\", stroke: \"none\" }],\n [\n \"rect\",\n {\n x: \"14.8\",\n y: \"9.3\",\n width: \"2.9\",\n height: \"2.6\",\n rx: \"0.8\",\n fill: \"currentColor\",\n stroke: \"none\",\n },\n ],\n]);\n\nexport default BrandMark;\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAM,YAAY,iBAAiB,cAAc;CAC/C,CAAC,QAAQ;EAAE,GAAG;EAAK,GAAG;EAAK,OAAO;EAAM,QAAQ;EAAM,IAAI;CAAI,CAAC;CAC/D,CAAC,QAAQ,EAAE,GAAG,uEAAuE,CAAC;CACtF,CAAC,UAAU;EAAE,IAAI;EAAO,IAAI;EAAQ,GAAG;EAAO,MAAM;EAAgB,QAAQ;CAAO,CAAC;CACpF,CACE,QACA;EACE,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR,IAAI;EACJ,MAAM;EACN,QAAQ;CACV,CACF;AACF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The public surface of `@ecoma-io/loom`.
|
|
3
|
+
*
|
|
4
|
+
* This file is the complete export list, and it is the file to read before
|
|
5
|
+
* hand-rolling a generic affordance in a consuming product — the rule that
|
|
6
|
+
* decides most questions, stated in CONTRIBUTING.md, is checked against
|
|
7
|
+
* exactly this list.
|
|
8
|
+
*
|
|
9
|
+
* Two things deliberately do not appear here. Styles ship as CSS, imported by
|
|
10
|
+
* a host from `@ecoma-io/loom/styles/global.css`. And `WCAG_TAGS` ships from
|
|
11
|
+
* the narrow `@ecoma-io/loom/a11y` entry, so a consumer that compiles no Vue
|
|
12
|
+
* at all can read it without resolving a single component below.
|
|
13
|
+
*/
|
|
14
|
+
export { cn } from "./lib/cn";
|
|
15
|
+
export { applyLoomIconDefaults } from "./lib/icon-defaults";
|
|
16
|
+
export { LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, listStaggerDelay } from "./lib/motion";
|
|
17
|
+
export { default as Avatar } from "./primitives/Avatar/Avatar.vue";
|
|
18
|
+
export type { AvatarSize } from "./primitives/Avatar/Avatar.vue";
|
|
19
|
+
export { default as Badge, badgeVariants } from "./primitives/Badge/Badge.vue";
|
|
20
|
+
export type { BadgeVariant } from "./primitives/Badge/Badge.vue";
|
|
21
|
+
export { default as Button, buttonVariants } from "./primitives/Button/Button.vue";
|
|
22
|
+
export type { ButtonSize, ButtonVariant } from "./primitives/Button/Button.vue";
|
|
23
|
+
export { default as Checkbox } from "./primitives/Checkbox/Checkbox.vue";
|
|
24
|
+
export { default as Dialog } from "./primitives/Dialog/Dialog.vue";
|
|
25
|
+
export type { DialogSize } from "./primitives/Dialog/Dialog.vue";
|
|
26
|
+
export { default as DropdownMenu } from "./primitives/DropdownMenu/DropdownMenu.vue";
|
|
27
|
+
export type { DropdownMenuEntry } from "./primitives/DropdownMenu/DropdownMenu.vue";
|
|
28
|
+
export { default as Field } from "./primitives/Field/Field.vue";
|
|
29
|
+
export { default as InlineError } from "./primitives/InlineError/InlineError.vue";
|
|
30
|
+
export { default as Menubar } from "./primitives/Menubar/Menubar.vue";
|
|
31
|
+
export type { MenubarItem, MenubarMenu } from "./primitives/Menubar/Menubar.vue";
|
|
32
|
+
export { default as NumberField } from "./primitives/NumberField/NumberField.vue";
|
|
33
|
+
export { default as Popover } from "./primitives/Popover/Popover.vue";
|
|
34
|
+
export type { PopoverAlign, PopoverSide } from "./primitives/Popover/Popover.vue";
|
|
35
|
+
export { default as Progress } from "./primitives/Progress/Progress.vue";
|
|
36
|
+
export { default as RadioGroup } from "./primitives/RadioGroup/RadioGroup.vue";
|
|
37
|
+
export type { RadioOption } from "./primitives/RadioGroup/RadioGroup.vue";
|
|
38
|
+
export { default as SegmentedControl } from "./primitives/SegmentedControl/SegmentedControl.vue";
|
|
39
|
+
export type { SegmentedControlOption } from "./primitives/SegmentedControl/SegmentedControl.vue";
|
|
40
|
+
export { default as Select, selectVariants } from "./primitives/Select/Select.vue";
|
|
41
|
+
export type { SelectOption, SelectSize } from "./primitives/Select/Select.vue";
|
|
42
|
+
export { default as Separator } from "./primitives/Separator/Separator.vue";
|
|
43
|
+
export type { SeparatorOrientation } from "./primitives/Separator/Separator.vue";
|
|
44
|
+
export { default as Skeleton, skeletonVariants } from "./primitives/Skeleton/Skeleton.vue";
|
|
45
|
+
export type { SkeletonVariant } from "./primitives/Skeleton/Skeleton.vue";
|
|
46
|
+
export { default as Slider } from "./primitives/Slider/Slider.vue";
|
|
47
|
+
export { default as Spinner, spinnerVariants } from "./primitives/Spinner/Spinner.vue";
|
|
48
|
+
export type { SpinnerSize } from "./primitives/Spinner/Spinner.vue";
|
|
49
|
+
export { default as Surface, surfaceVariants } from "./primitives/Surface/Surface.vue";
|
|
50
|
+
export type { SurfaceElevation, SurfacePad } from "./primitives/Surface/Surface.vue";
|
|
51
|
+
export { default as Switch } from "./primitives/Switch/Switch.vue";
|
|
52
|
+
export { default as Tabs } from "./primitives/Tabs/Tabs.vue";
|
|
53
|
+
export type { TabItem } from "./primitives/Tabs/Tabs.vue";
|
|
54
|
+
export { default as Textarea } from "./primitives/Textarea/Textarea.vue";
|
|
55
|
+
export type { TextareaResize } from "./primitives/Textarea/Textarea.vue";
|
|
56
|
+
export { default as TextField } from "./primitives/TextField/TextField.vue";
|
|
57
|
+
export type { TextFieldSize, TextFieldType } from "./primitives/TextField/TextField.vue";
|
|
58
|
+
export { default as Toast } from "./primitives/Toast/Toast.vue";
|
|
59
|
+
export type { ToastVariant } from "./primitives/Toast/Toast.vue";
|
|
60
|
+
export { default as Tooltip } from "./primitives/Tooltip/Tooltip.vue";
|
|
61
|
+
export type { TooltipSide } from "./primitives/Tooltip/Tooltip.vue";
|
|
62
|
+
export { default as WindowControls } from "./primitives/WindowControls/WindowControls.vue";
|
|
63
|
+
export type { WindowControlsLabels } from "./primitives/WindowControls/WindowControls.vue";
|
|
64
|
+
export { default as AppHeader } from "./blocks/AppHeader/AppHeader.vue";
|
|
65
|
+
export { default as DashboardGrid } from "./blocks/DashboardGrid/DashboardGrid.vue";
|
|
66
|
+
export { default as EmptyState } from "./blocks/EmptyState/EmptyState.vue";
|
|
67
|
+
export { default as PageHeader } from "./blocks/PageHeader/PageHeader.vue";
|
|
68
|
+
export { default as RowActions } from "./blocks/RowActions/RowActions.vue";
|
|
69
|
+
export { default as SidebarNav } from "./blocks/SidebarNav/SidebarNav.vue";
|
|
70
|
+
export type { SidebarNavItem, SidebarNavSection } from "./blocks/SidebarNav/SidebarNav.vue";
|
|
71
|
+
export { default as TitleBar } from "./blocks/TitleBar/TitleBar.vue";
|
|
72
|
+
export { default as ToastStack } from "./blocks/ToastStack/ToastStack.vue";
|
|
73
|
+
export type { ToastStackItem } from "./blocks/ToastStack/ToastStack.vue";
|
|
74
|
+
export { default as BrandMark } from "./icons/BrandMark";
|
|
75
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMxF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnF,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACjG,YAAY,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3F,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACvF,YAAY,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAC3F,YAAY,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAQ3F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5F,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { cn } from "./lib/cn.js";
|
|
2
|
+
import { applyLoomIconDefaults } from "./lib/icon-defaults.js";
|
|
3
|
+
import { LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, listStaggerDelay } from "./lib/motion.js";
|
|
4
|
+
import Avatar_default from "./primitives/Avatar/Avatar.js";
|
|
5
|
+
import { badgeVariants } from "./primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js";
|
|
6
|
+
import Badge_default from "./primitives/Badge/Badge.js";
|
|
7
|
+
import { buttonVariants } from "./primitives/Button/Button.vue_vue_type_script_setup_true_lang.js";
|
|
8
|
+
import Button_default from "./primitives/Button/Button.js";
|
|
9
|
+
import Checkbox_default from "./primitives/Checkbox/Checkbox.js";
|
|
10
|
+
import Dialog_default from "./primitives/Dialog/Dialog.js";
|
|
11
|
+
import DropdownMenu_default from "./primitives/DropdownMenu/DropdownMenu.js";
|
|
12
|
+
import InlineError_default from "./primitives/InlineError/InlineError.js";
|
|
13
|
+
import Field_default from "./primitives/Field/Field.js";
|
|
14
|
+
import Menubar_default from "./primitives/Menubar/Menubar.js";
|
|
15
|
+
import NumberField_default from "./primitives/NumberField/NumberField.js";
|
|
16
|
+
import Popover_default from "./primitives/Popover/Popover.js";
|
|
17
|
+
import Progress_default from "./primitives/Progress/Progress.js";
|
|
18
|
+
import RadioGroup_default from "./primitives/RadioGroup/RadioGroup.js";
|
|
19
|
+
import SegmentedControl_default from "./primitives/SegmentedControl/SegmentedControl.js";
|
|
20
|
+
import { selectVariants } from "./primitives/Select/Select.vue_vue_type_script_setup_true_lang.js";
|
|
21
|
+
import Select_default from "./primitives/Select/Select.js";
|
|
22
|
+
import Separator_default from "./primitives/Separator/Separator.js";
|
|
23
|
+
import { skeletonVariants } from "./primitives/Skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js";
|
|
24
|
+
import Skeleton_default from "./primitives/Skeleton/Skeleton.js";
|
|
25
|
+
import Slider_default from "./primitives/Slider/Slider.js";
|
|
26
|
+
import { spinnerVariants } from "./primitives/Spinner/Spinner.vue_vue_type_script_setup_true_lang.js";
|
|
27
|
+
import Spinner_default from "./primitives/Spinner/Spinner.js";
|
|
28
|
+
import { surfaceVariants } from "./primitives/Surface/Surface.vue_vue_type_script_setup_true_lang.js";
|
|
29
|
+
import Surface_default from "./primitives/Surface/Surface.js";
|
|
30
|
+
import Switch_default from "./primitives/Switch/Switch.js";
|
|
31
|
+
import Tabs_default from "./primitives/Tabs/Tabs.js";
|
|
32
|
+
import Textarea_default from "./primitives/Textarea/Textarea.js";
|
|
33
|
+
import TextField_default from "./primitives/TextField/TextField.js";
|
|
34
|
+
import Toast_default from "./primitives/Toast/Toast.js";
|
|
35
|
+
import Tooltip_default from "./primitives/Tooltip/Tooltip.js";
|
|
36
|
+
import WindowControls_default from "./primitives/WindowControls/WindowControls.js";
|
|
37
|
+
import AppHeader_default from "./blocks/AppHeader/AppHeader.js";
|
|
38
|
+
import DashboardGrid_default from "./blocks/DashboardGrid/DashboardGrid.js";
|
|
39
|
+
import EmptyState_default from "./blocks/EmptyState/EmptyState.js";
|
|
40
|
+
import PageHeader_default from "./blocks/PageHeader/PageHeader.js";
|
|
41
|
+
import RowActions_default from "./blocks/RowActions/RowActions.js";
|
|
42
|
+
import SidebarNav_default from "./blocks/SidebarNav/SidebarNav.js";
|
|
43
|
+
import BrandMark from "./icons/BrandMark.js";
|
|
44
|
+
import TitleBar_default from "./blocks/TitleBar/TitleBar.js";
|
|
45
|
+
import ToastStack_default from "./blocks/ToastStack/ToastStack.js";
|
|
46
|
+
export { AppHeader_default as AppHeader, Avatar_default as Avatar, Badge_default as Badge, BrandMark, Button_default as Button, Checkbox_default as Checkbox, DashboardGrid_default as DashboardGrid, Dialog_default as Dialog, DropdownMenu_default as DropdownMenu, EmptyState_default as EmptyState, Field_default as Field, InlineError_default as InlineError, LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, Menubar_default as Menubar, NumberField_default as NumberField, PageHeader_default as PageHeader, Popover_default as Popover, Progress_default as Progress, RadioGroup_default as RadioGroup, RowActions_default as RowActions, SegmentedControl_default as SegmentedControl, Select_default as Select, Separator_default as Separator, SidebarNav_default as SidebarNav, Skeleton_default as Skeleton, Slider_default as Slider, Spinner_default as Spinner, Surface_default as Surface, Switch_default as Switch, Tabs_default as Tabs, TextField_default as TextField, Textarea_default as Textarea, TitleBar_default as TitleBar, Toast_default as Toast, ToastStack_default as ToastStack, Tooltip_default as Tooltip, WindowControls_default as WindowControls, applyLoomIconDefaults, badgeVariants, buttonVariants, cn, listStaggerDelay, selectVariants, skeletonVariants, spinnerVariants, surfaceVariants };
|