@auvyx/ui 0.0.0-stage → 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 +48 -0
- package/README.md +43 -2
- package/dist/auvyx.bundle.css +5941 -0
- package/dist/auvyx.chart.min.js +2 -0
- package/dist/auvyx.corners.min.js +2 -0
- package/dist/auvyx.css +10880 -0
- package/dist/auvyx.js +3222 -0
- package/dist/auvyx.min.css +2 -0
- package/dist/auvyx.min.js +19 -0
- package/dist/custom-elements.json +948 -0
- package/dist/elements/calendar.min.js +2 -0
- package/dist/elements/context-menu.min.js +2 -0
- package/dist/elements/data-table.min.js +2 -0
- package/dist/elements/date-picker.min.js +2 -0
- package/dist/elements/index.min.js +2 -0
- package/dist/elements/menu.min.js +2 -0
- package/dist/elements/resizable.min.js +2 -0
- package/dist/js/accordion.min.js +2 -0
- package/dist/js/calendar.min.js +2 -0
- package/dist/js/combobox.min.js +2 -0
- package/dist/js/command.min.js +2 -0
- package/dist/js/context-menu.min.js +2 -0
- package/dist/js/copy.min.js +2 -0
- package/dist/js/data-table.min.js +2 -0
- package/dist/js/date-picker.min.js +2 -0
- package/dist/js/drawer.min.js +2 -0
- package/dist/js/dropdown-menu.min.js +2 -0
- package/dist/js/manifest.json +114 -0
- package/dist/js/menu.min.js +2 -0
- package/dist/js/popover.min.js +2 -0
- package/dist/js/resizable.min.js +2 -0
- package/dist/js/select.min.js +2 -0
- package/dist/js/sidebar.min.js +2 -0
- package/dist/js/slider.min.js +2 -0
- package/dist/js/tabs.min.js +2 -0
- package/dist/js/toast.min.js +19 -0
- package/dist/styles/auvyx-luma.min.css +3 -0
- package/dist/styles/auvyx-lyra.min.css +3 -0
- package/dist/styles/auvyx-maia.min.css +3 -0
- package/dist/styles/auvyx-mira.min.css +3 -0
- package/dist/styles/auvyx-nova.min.css +3 -0
- package/dist/styles/auvyx-rhea.min.css +3 -0
- package/dist/styles/auvyx-sera.min.css +3 -0
- package/dist/styles/auvyx-vega.min.css +3 -0
- package/dist/types/elements.d.ts +262 -0
- package/dist/types/react.d.ts +181 -0
- package/dist/types/vue.d.ts +155 -0
- package/dist/ui/accordion.css +91 -0
- package/dist/ui/accordion.js +249 -0
- package/dist/ui/accordion.native.css +24 -0
- package/dist/ui/alert.css +119 -0
- package/dist/ui/aspect-ratio.css +38 -0
- package/dist/ui/attachment.css +211 -0
- package/dist/ui/avatar.css +204 -0
- package/dist/ui/badge.css +183 -0
- package/dist/ui/base.css +1200 -0
- package/dist/ui/breadcrumb.css +90 -0
- package/dist/ui/bubble.css +171 -0
- package/dist/ui/button-group.css +110 -0
- package/dist/ui/button.css +328 -0
- package/dist/ui/calendar.css +260 -0
- package/dist/ui/calendar.js +317 -0
- package/dist/ui/card.css +126 -0
- package/dist/ui/carousel.css +172 -0
- package/dist/ui/chart.css +130 -0
- package/dist/ui/checkbox.css +119 -0
- package/dist/ui/code-block.css +235 -0
- package/dist/ui/combobox.css +500 -0
- package/dist/ui/combobox.js +757 -0
- package/dist/ui/command.css +366 -0
- package/dist/ui/command.js +382 -0
- package/dist/ui/context-menu.css +17 -0
- package/dist/ui/context-menu.js +52 -0
- package/dist/ui/copy.js +56 -0
- package/dist/ui/data-table.css +114 -0
- package/dist/ui/data-table.js +140 -0
- package/dist/ui/date-picker.css +14 -0
- package/dist/ui/date-picker.js +101 -0
- package/dist/ui/dialog.css +363 -0
- package/dist/ui/dialog.native.css +6 -0
- package/dist/ui/drawer.css +238 -0
- package/dist/ui/drawer.js +265 -0
- package/dist/ui/dropdown-menu.css +193 -0
- package/dist/ui/dropdown-menu.js +388 -0
- package/dist/ui/empty.css +111 -0
- package/dist/ui/field.css +293 -0
- package/dist/ui/hover-card.css +85 -0
- package/dist/ui/input-group.css +269 -0
- package/dist/ui/input-otp.css +101 -0
- package/dist/ui/input.css +117 -0
- package/dist/ui/item.css +223 -0
- package/dist/ui/kbd.css +50 -0
- package/dist/ui/label.css +48 -0
- package/dist/ui/manifest.json +667 -0
- package/dist/ui/marker.css +66 -0
- package/dist/ui/menu.js +161 -0
- package/dist/ui/menubar.css +55 -0
- package/dist/ui/message-scroller.css +83 -0
- package/dist/ui/message.css +69 -0
- package/dist/ui/native-select.css +130 -0
- package/dist/ui/navigation-menu.css +166 -0
- package/dist/ui/popover.css +154 -0
- package/dist/ui/popover.js +268 -0
- package/dist/ui/popover.native.css +84 -0
- package/dist/ui/progress.css +29 -0
- package/dist/ui/questionnaire.css +188 -0
- package/dist/ui/radio-group.css +115 -0
- package/dist/ui/resizable.css +94 -0
- package/dist/ui/resizable.js +95 -0
- package/dist/ui/scroll-area.css +43 -0
- package/dist/ui/select.css +289 -0
- package/dist/ui/select.js +646 -0
- package/dist/ui/sheet.css +219 -0
- package/dist/ui/sidebar.css +716 -0
- package/dist/ui/sidebar.js +287 -0
- package/dist/ui/skeleton.css +13 -0
- package/dist/ui/slider.css +184 -0
- package/dist/ui/slider.js +206 -0
- package/dist/ui/switch.css +156 -0
- package/dist/ui/table.css +157 -0
- package/dist/ui/tabs.css +240 -0
- package/dist/ui/tabs.js +288 -0
- package/dist/ui/textarea.css +91 -0
- package/dist/ui/toast.css +110 -0
- package/dist/ui/toast.js +378 -0
- package/dist/ui/toggle-group.css +42 -0
- package/dist/ui/toggle.css +150 -0
- package/dist/ui/tooltip.css +319 -0
- package/dist/ui/trace.css +142 -0
- package/dist/ui/typography.css +184 -0
- package/dist/wc/accordion.min.js +2 -0
- package/dist/wc/combobox.min.js +2 -0
- package/dist/wc/command.min.js +2 -0
- package/dist/wc/drawer.min.js +2 -0
- package/dist/wc/dropdown-menu.min.js +2 -0
- package/dist/wc/manifest.json +154 -0
- package/dist/wc/popover.min.js +2 -0
- package/dist/wc/select.min.js +2 -0
- package/dist/wc/sidebar.min.js +2 -0
- package/dist/wc/slider.min.js +2 -0
- package/dist/wc/tabs.min.js +2 -0
- package/dist/wc/toast.min.js +19 -0
- package/package.json +62 -4
package/dist/ui/menu.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
|
|
2
|
+
(() => {
|
|
3
|
+
// ../elements/src/menu.js
|
|
4
|
+
(() => {
|
|
5
|
+
if (window.__auvyxMenu) return;
|
|
6
|
+
window.__auvyxMenu = true;
|
|
7
|
+
const ITEM = '[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]';
|
|
8
|
+
const MENU_POPOVER = "[data-popover][popover]";
|
|
9
|
+
const isUsable = (el) => !el.disabled && el.getAttribute("aria-disabled") !== "true" && !el.closest("[hidden]");
|
|
10
|
+
const itemsOf = (popover) => [...popover.querySelectorAll(ITEM)].filter(isUsable);
|
|
11
|
+
const triggerOf = (popover) => popover.id ? document.querySelector(`[popovertarget="${CSS.escape(popover.id)}"]`) : null;
|
|
12
|
+
const popoverOf = (trigger) => {
|
|
13
|
+
const id = trigger?.getAttribute("popovertarget");
|
|
14
|
+
return id ? document.getElementById(id) : null;
|
|
15
|
+
};
|
|
16
|
+
const isMenuPopover = (el) => el instanceof HTMLElement && el.matches(MENU_POPOVER) && el.querySelector('[role="menu"]');
|
|
17
|
+
const menubarOf = (el) => el?.closest(".menubar");
|
|
18
|
+
const menubarTriggers = (bar) => [...bar.querySelectorAll(":scope > .dropdown-menu > [popovertarget]")];
|
|
19
|
+
const focusItem = (item) => item?.focus({ preventScroll: true });
|
|
20
|
+
const open = (trigger, focus = "first") => {
|
|
21
|
+
const popover = popoverOf(trigger);
|
|
22
|
+
if (!popover) return;
|
|
23
|
+
popover.dataset.focusOnOpen = focus;
|
|
24
|
+
if (!popover.matches(":popover-open")) popover.showPopover({ source: trigger });
|
|
25
|
+
else focusItem(focus === "last" ? itemsOf(popover).at(-1) : itemsOf(popover)[0]);
|
|
26
|
+
};
|
|
27
|
+
document.addEventListener("toggle", (event) => {
|
|
28
|
+
const popover = event.target;
|
|
29
|
+
if (!(popover instanceof HTMLElement) || !popover.matches(MENU_POPOVER)) return;
|
|
30
|
+
const trigger = triggerOf(popover);
|
|
31
|
+
if (trigger && trigger.hasAttribute("aria-haspopup")) trigger.setAttribute("aria-expanded", String(event.newState === "open"));
|
|
32
|
+
if (event.newState !== "open" || !isMenuPopover(popover)) return;
|
|
33
|
+
const where = popover.dataset.focusOnOpen || "first";
|
|
34
|
+
delete popover.dataset.focusOnOpen;
|
|
35
|
+
if (where === "none") return;
|
|
36
|
+
requestAnimationFrame(() => {
|
|
37
|
+
const items = itemsOf(popover);
|
|
38
|
+
focusItem(where === "last" ? items.at(-1) : items[0]);
|
|
39
|
+
});
|
|
40
|
+
}, true);
|
|
41
|
+
document.addEventListener("keydown", (event) => {
|
|
42
|
+
const target = event.target;
|
|
43
|
+
if (!(target instanceof Element)) return;
|
|
44
|
+
const popover = target.closest(MENU_POPOVER);
|
|
45
|
+
if (popover && isMenuPopover(popover) && target.matches(ITEM)) {
|
|
46
|
+
const items = itemsOf(popover);
|
|
47
|
+
const index = items.indexOf(target);
|
|
48
|
+
const move = { ArrowDown: index + 1, ArrowUp: index - 1, Home: 0, End: items.length - 1 }[event.key];
|
|
49
|
+
if (move !== void 0) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
focusItem(items[(move + items.length) % items.length]);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (event.key === "Tab") {
|
|
55
|
+
popover.hidePopover();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (event.key === "Escape") {
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
popover.hidePopover();
|
|
61
|
+
triggerOf(popover)?.focus({ preventScroll: true });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const bar = menubarOf(triggerOf(popover));
|
|
65
|
+
if (bar && (event.key === "ArrowRight" || event.key === "ArrowLeft")) {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
const triggers = menubarTriggers(bar);
|
|
68
|
+
const at = triggers.indexOf(triggerOf(popover));
|
|
69
|
+
const rtl = getComputedStyle(bar).direction === "rtl";
|
|
70
|
+
const step = event.key === "ArrowRight" !== rtl ? 1 : -1;
|
|
71
|
+
const next = triggers[(at + step + triggers.length) % triggers.length];
|
|
72
|
+
popover.hidePopover();
|
|
73
|
+
open(next);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (target.matches("[popovertarget]")) {
|
|
79
|
+
const menu = popoverOf(target);
|
|
80
|
+
const bar = menubarOf(target);
|
|
81
|
+
if (menu && isMenuPopover(menu) && (event.key === "ArrowDown" || event.key === "ArrowUp")) {
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
open(target, event.key === "ArrowUp" ? "last" : "first");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (bar && (event.key === "ArrowRight" || event.key === "ArrowLeft" || event.key === "Home" || event.key === "End")) {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
const triggers = menubarTriggers(bar);
|
|
89
|
+
const at = triggers.indexOf(target);
|
|
90
|
+
const rtl = getComputedStyle(bar).direction === "rtl";
|
|
91
|
+
const step = event.key === "ArrowRight" !== rtl ? 1 : -1;
|
|
92
|
+
const next = event.key === "Home" ? triggers[0] : event.key === "End" ? triggers.at(-1) : triggers[(at + step + triggers.length) % triggers.length];
|
|
93
|
+
next.focus();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
document.addEventListener("click", (event) => {
|
|
98
|
+
const item = event.target instanceof Element && event.target.closest(ITEM);
|
|
99
|
+
if (!item || !isUsable(item)) return;
|
|
100
|
+
const popover = item.closest(MENU_POPOVER);
|
|
101
|
+
if (!popover) return;
|
|
102
|
+
const role = item.getAttribute("role");
|
|
103
|
+
if (role === "menuitemcheckbox") {
|
|
104
|
+
item.setAttribute("aria-checked", String(item.getAttribute("aria-checked") !== "true"));
|
|
105
|
+
} else if (role === "menuitemradio") {
|
|
106
|
+
const group = item.closest('[role="group"]') || popover;
|
|
107
|
+
group.querySelectorAll('[role="menuitemradio"]').forEach((radio) => radio.setAttribute("aria-checked", String(radio === item)));
|
|
108
|
+
}
|
|
109
|
+
if (item.hasAttribute("popovertarget") || item.hasAttribute("data-keep-open")) return;
|
|
110
|
+
if (role !== "menuitem" && !item.hasAttribute("data-close")) return;
|
|
111
|
+
popover.hidePopover();
|
|
112
|
+
triggerOf(popover)?.focus({ preventScroll: true });
|
|
113
|
+
});
|
|
114
|
+
document.addEventListener("pointerover", (event) => {
|
|
115
|
+
const trigger = event.target instanceof Element && event.target.closest(".menubar > .dropdown-menu > [popovertarget]");
|
|
116
|
+
if (!trigger) return;
|
|
117
|
+
const bar = menubarOf(trigger);
|
|
118
|
+
const openMenu = menubarTriggers(bar).map(popoverOf).find((p) => p?.matches(":popover-open"));
|
|
119
|
+
if (!openMenu || openMenu === popoverOf(trigger)) return;
|
|
120
|
+
openMenu.hidePopover();
|
|
121
|
+
open(trigger, "none");
|
|
122
|
+
});
|
|
123
|
+
const navTimers = /* @__PURE__ */ new WeakMap();
|
|
124
|
+
const clearNav = (li) => clearTimeout(navTimers.get(li));
|
|
125
|
+
document.addEventListener("pointerover", (event) => {
|
|
126
|
+
if (event.pointerType !== "mouse") return;
|
|
127
|
+
const li = event.target instanceof Element && event.target.closest(".navigation-menu > ul > li");
|
|
128
|
+
if (!li) return;
|
|
129
|
+
clearNav(li);
|
|
130
|
+
const trigger = li.querySelector(":scope > [popovertarget]");
|
|
131
|
+
const panel = popoverOf(trigger);
|
|
132
|
+
if (!panel || panel.matches(":popover-open")) return;
|
|
133
|
+
navTimers.set(li, setTimeout(() => {
|
|
134
|
+
panel.dataset.openedByHover = String(Date.now());
|
|
135
|
+
panel.showPopover({ source: trigger });
|
|
136
|
+
}, 120));
|
|
137
|
+
});
|
|
138
|
+
document.addEventListener("pointerout", (event) => {
|
|
139
|
+
if (event.pointerType !== "mouse") return;
|
|
140
|
+
const li = event.target instanceof Element && event.target.closest(".navigation-menu > ul > li");
|
|
141
|
+
if (!li || li.contains(event.relatedTarget)) return;
|
|
142
|
+
clearNav(li);
|
|
143
|
+
const panel = popoverOf(li.querySelector(":scope > [popovertarget]"));
|
|
144
|
+
if (!panel || !panel.dataset.openedByHover) return;
|
|
145
|
+
navTimers.set(li, setTimeout(() => {
|
|
146
|
+
if (panel.matches(":popover-open") && !li.matches(":hover")) panel.hidePopover();
|
|
147
|
+
delete panel.dataset.openedByHover;
|
|
148
|
+
}, 200));
|
|
149
|
+
});
|
|
150
|
+
document.addEventListener("click", (event) => {
|
|
151
|
+
const trigger = event.target instanceof Element && event.target.closest(".navigation-menu > ul > li > [popovertarget]");
|
|
152
|
+
const panel = popoverOf(trigger);
|
|
153
|
+
if (!panel?.dataset.openedByHover) return;
|
|
154
|
+
if (Date.now() - Number(panel.dataset.openedByHover) < 600 && panel.matches(":popover-open")) {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
delete panel.dataset.openedByHover;
|
|
159
|
+
}, true);
|
|
160
|
+
})();
|
|
161
|
+
})();
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* @auvyx/ui menubar | order 52 */
|
|
2
|
+
@layer components {
|
|
3
|
+
.menubar {
|
|
4
|
+
display: flex;
|
|
5
|
+
width: fit-content;
|
|
6
|
+
align-items: center;
|
|
7
|
+
> .dropdown-menu > :is(button, [popovertarget]):first-child {
|
|
8
|
+
display: flex;
|
|
9
|
+
cursor: default;
|
|
10
|
+
align-items: center;
|
|
11
|
+
--tw-outline-style: none;
|
|
12
|
+
outline-style: none;
|
|
13
|
+
-webkit-user-select: none;
|
|
14
|
+
user-select: none;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@layer components {
|
|
20
|
+
.menubar {
|
|
21
|
+
height: calc(var(--spacing) * 9);
|
|
22
|
+
gap: var(--spacing);
|
|
23
|
+
border-radius: var(--auvyx-r-control);
|
|
24
|
+
border-style: var(--tw-border-style);
|
|
25
|
+
border-width: 1px;
|
|
26
|
+
background-color: var(--color-background);
|
|
27
|
+
padding: var(--spacing);
|
|
28
|
+
--tw-shadow: var(--shadow-xs, 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)));
|
|
29
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
30
|
+
}
|
|
31
|
+
.menubar > .dropdown-menu > :is(button, [popovertarget]):first-child {
|
|
32
|
+
border-radius: calc(var(--auvyx-r-control) - 2px);
|
|
33
|
+
padding-inline: calc(var(--spacing) * 2);
|
|
34
|
+
padding-block: var(--spacing);
|
|
35
|
+
font-size: var(--text-sm);
|
|
36
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
|
37
|
+
--tw-font-weight: var(--font-weight-medium);
|
|
38
|
+
font-weight: var(--font-weight-medium);
|
|
39
|
+
&:hover {
|
|
40
|
+
@media (hover: hover) {
|
|
41
|
+
background-color: var(--color-muted);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
&:focus-visible {
|
|
45
|
+
background-color: var(--color-muted);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
.menubar > .dropdown-menu:has(> [data-popover]:popover-open) > :is(button, [popovertarget]):first-child {
|
|
49
|
+
background-color: var(--color-muted);
|
|
50
|
+
}
|
|
51
|
+
.menubar > .dropdown-menu > [data-popover] {
|
|
52
|
+
min-width: calc(var(--spacing) * 36);
|
|
53
|
+
margin-block-start: 0.5rem;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* @auvyx/ui message-scroller | order 47 */
|
|
2
|
+
@layer components {
|
|
3
|
+
.message-scroller {
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
min-height: 0;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
timeline-scope: --bc-message-log;
|
|
10
|
+
> [role='log'] {
|
|
11
|
+
display: flex;
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
min-height: 0;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
flex-direction: column-reverse;
|
|
17
|
+
overflow-y: auto;
|
|
18
|
+
overscroll-behavior: contain;
|
|
19
|
+
--tw-outline-style: none;
|
|
20
|
+
outline-style: none;
|
|
21
|
+
scroll-timeline: --bc-message-log block;
|
|
22
|
+
scrollbar-width: thin;
|
|
23
|
+
> * {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
> :is(a, button):last-child {
|
|
29
|
+
position: absolute;
|
|
30
|
+
inset-inline-start: calc(1/2 * 100%);
|
|
31
|
+
z-index: 10;
|
|
32
|
+
--tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
|
|
33
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
34
|
+
&:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) {
|
|
35
|
+
--tw-translate-x: calc(1 / 2 * 100%);
|
|
36
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
37
|
+
}
|
|
38
|
+
bottom: 1rem;
|
|
39
|
+
animation: bc-message-scroller-jump linear both;
|
|
40
|
+
animation-timeline: --bc-message-log;
|
|
41
|
+
animation-range: 0 4rem;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
@keyframes bc-message-scroller-jump {
|
|
45
|
+
from {
|
|
46
|
+
opacity: 0;
|
|
47
|
+
scale: 0.95;
|
|
48
|
+
visibility: hidden;
|
|
49
|
+
}
|
|
50
|
+
to {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
scale: 1;
|
|
53
|
+
visibility: visible;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
@supports not (animation-timeline: scroll()) {
|
|
57
|
+
.message-scroller > :is(a, button):last-child {
|
|
58
|
+
animation: none;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@layer components {
|
|
64
|
+
.message-scroller > [role='log'] > * {
|
|
65
|
+
gap: calc(var(--spacing) * 8);
|
|
66
|
+
padding: calc(var(--spacing) * 4);
|
|
67
|
+
}
|
|
68
|
+
.message-scroller > :is(a, button):last-child {
|
|
69
|
+
border-radius: calc(infinity * 1px);
|
|
70
|
+
border-style: var(--tw-border-style);
|
|
71
|
+
border-width: 1px;
|
|
72
|
+
border-color: var(--color-border);
|
|
73
|
+
background-color: var(--color-background);
|
|
74
|
+
color: var(--color-foreground);
|
|
75
|
+
--tw-shadow: var(--shadow-sm, 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)));
|
|
76
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
77
|
+
&:hover {
|
|
78
|
+
@media (hover: hover) {
|
|
79
|
+
background-color: var(--color-muted);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* @auvyx/ui message | order 44 */
|
|
2
|
+
@layer components {
|
|
3
|
+
.message-group {
|
|
4
|
+
display: flex;
|
|
5
|
+
min-width: 0;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
}
|
|
8
|
+
.message {
|
|
9
|
+
position: relative;
|
|
10
|
+
display: flex;
|
|
11
|
+
width: 100%;
|
|
12
|
+
min-width: 0;
|
|
13
|
+
&[data-align='end'] {
|
|
14
|
+
flex-direction: row-reverse;
|
|
15
|
+
}
|
|
16
|
+
> .avatar, > img {
|
|
17
|
+
flex-shrink: 0;
|
|
18
|
+
align-self: flex-end;
|
|
19
|
+
}
|
|
20
|
+
> section {
|
|
21
|
+
display: flex;
|
|
22
|
+
width: 100%;
|
|
23
|
+
min-width: 0;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
overflow-wrap: break-word;
|
|
26
|
+
}
|
|
27
|
+
&[data-align='end'] > section > * {
|
|
28
|
+
align-self: flex-end;
|
|
29
|
+
}
|
|
30
|
+
> section > :is(header, footer) {
|
|
31
|
+
display: flex;
|
|
32
|
+
max-width: 100%;
|
|
33
|
+
min-width: 0;
|
|
34
|
+
align-items: center;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@layer components {
|
|
40
|
+
.message-group {
|
|
41
|
+
gap: calc(var(--spacing) * 2);
|
|
42
|
+
}
|
|
43
|
+
.message {
|
|
44
|
+
gap: calc(var(--spacing) * 2);
|
|
45
|
+
font-size: var(--text-sm);
|
|
46
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
|
47
|
+
}
|
|
48
|
+
.message > :is(.avatar, img) {
|
|
49
|
+
min-width: calc(var(--spacing) * 8);
|
|
50
|
+
}
|
|
51
|
+
.message:has(> section > footer) > :is(.avatar, img) {
|
|
52
|
+
--tw-translate-y: calc(var(--spacing) * -8);
|
|
53
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
54
|
+
}
|
|
55
|
+
.message > section {
|
|
56
|
+
gap: calc(var(--spacing) * 2.5);
|
|
57
|
+
}
|
|
58
|
+
.message > section > :is(header, footer) {
|
|
59
|
+
padding-inline: calc(var(--spacing) * 3);
|
|
60
|
+
font-size: var(--text-xs);
|
|
61
|
+
line-height: var(--tw-leading, var(--text-xs--line-height));
|
|
62
|
+
--tw-font-weight: var(--font-weight-medium);
|
|
63
|
+
font-weight: var(--font-weight-medium);
|
|
64
|
+
color: var(--color-muted-foreground);
|
|
65
|
+
}
|
|
66
|
+
.message:has(.bubble[data-variant='ghost']) > section > :is(header, footer) {
|
|
67
|
+
padding-inline: 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/* @auvyx/ui native-select | order 22 */
|
|
2
|
+
@layer components {
|
|
3
|
+
.field > select, select.select {
|
|
4
|
+
min-width: 0;
|
|
5
|
+
appearance: none;
|
|
6
|
+
--tw-outline-style: none;
|
|
7
|
+
outline-style: none;
|
|
8
|
+
-webkit-user-select: none;
|
|
9
|
+
user-select: none;
|
|
10
|
+
&:disabled {
|
|
11
|
+
cursor: not-allowed;
|
|
12
|
+
}
|
|
13
|
+
&:disabled {
|
|
14
|
+
opacity: 50%;
|
|
15
|
+
}
|
|
16
|
+
option, optgroup {
|
|
17
|
+
background-color: Canvas;
|
|
18
|
+
color: CanvasText;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@layer components {
|
|
24
|
+
.field > select, select.select {
|
|
25
|
+
height: calc(var(--spacing) * 9);
|
|
26
|
+
width: fit-content;
|
|
27
|
+
border-radius: var(--radius-md);
|
|
28
|
+
border-style: var(--tw-border-style);
|
|
29
|
+
border-width: 1px;
|
|
30
|
+
border-color: var(--color-input);
|
|
31
|
+
background-color: transparent;
|
|
32
|
+
padding-block: var(--spacing);
|
|
33
|
+
padding-inline-start: calc(var(--spacing) * 2.5);
|
|
34
|
+
padding-inline-end: calc(var(--spacing) * 8);
|
|
35
|
+
font-size: var(--text-base);
|
|
36
|
+
line-height: var(--tw-leading, var(--text-base--line-height));
|
|
37
|
+
--tw-shadow: var(--shadow-xs, 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)));
|
|
38
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
39
|
+
transition-property: color,box-shadow;
|
|
40
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
41
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
42
|
+
& *::selection {
|
|
43
|
+
background-color: var(--color-primary);
|
|
44
|
+
}
|
|
45
|
+
&::selection {
|
|
46
|
+
background-color: var(--color-primary);
|
|
47
|
+
}
|
|
48
|
+
& *::selection {
|
|
49
|
+
color: var(--color-primary-foreground);
|
|
50
|
+
}
|
|
51
|
+
&::selection {
|
|
52
|
+
color: var(--color-primary-foreground);
|
|
53
|
+
}
|
|
54
|
+
&::placeholder {
|
|
55
|
+
color: var(--color-muted-foreground);
|
|
56
|
+
}
|
|
57
|
+
&:focus-visible {
|
|
58
|
+
border-color: var(--color-ring);
|
|
59
|
+
}
|
|
60
|
+
&:focus-visible {
|
|
61
|
+
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
62
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
63
|
+
}
|
|
64
|
+
&:focus-visible {
|
|
65
|
+
--tw-ring-color: var(--color-ring);
|
|
66
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
67
|
+
--tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
&[aria-invalid="true"] {
|
|
71
|
+
border-color: var(--color-destructive);
|
|
72
|
+
}
|
|
73
|
+
&[aria-invalid="true"] {
|
|
74
|
+
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
75
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
76
|
+
}
|
|
77
|
+
&[aria-invalid="true"] {
|
|
78
|
+
--tw-ring-color: var(--color-destructive);
|
|
79
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
80
|
+
--tw-ring-color: color-mix(in oklab, var(--color-destructive) 20%, transparent);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
&[data-size="sm"] {
|
|
84
|
+
height: calc(var(--spacing) * 8);
|
|
85
|
+
}
|
|
86
|
+
@media (width >= 48rem) {
|
|
87
|
+
font-size: var(--text-sm);
|
|
88
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
|
89
|
+
}
|
|
90
|
+
&:is(html.dark *) {
|
|
91
|
+
background-color: var(--color-input);
|
|
92
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
93
|
+
background-color: color-mix(in oklab, var(--color-input) 30%, transparent);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
&:is(html.dark *) {
|
|
97
|
+
&:hover {
|
|
98
|
+
@media (hover: hover) {
|
|
99
|
+
background-color: var(--color-input);
|
|
100
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
101
|
+
background-color: color-mix(in oklab, var(--color-input) 50%, transparent);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
&:is(html.dark *) {
|
|
107
|
+
&[aria-invalid="true"] {
|
|
108
|
+
border-color: var(--color-destructive);
|
|
109
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
110
|
+
border-color: color-mix(in oklab, var(--color-destructive) 50%, transparent);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
&:is(html.dark *) {
|
|
115
|
+
&[aria-invalid="true"] {
|
|
116
|
+
--tw-ring-color: var(--color-destructive);
|
|
117
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
118
|
+
--tw-ring-color: color-mix(in oklab, var(--color-destructive) 40%, transparent);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
background-image: var(--chevron-down-icon-50);
|
|
123
|
+
background-size: 1rem;
|
|
124
|
+
background-position: center right 0.625rem;
|
|
125
|
+
background-repeat: no-repeat;
|
|
126
|
+
}
|
|
127
|
+
:is(.field > select, select.select):dir(rtl) {
|
|
128
|
+
background-position: center left 0.625rem;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/* @auvyx/ui navigation-menu | order 53 */
|
|
2
|
+
@layer components {
|
|
3
|
+
.navigation-menu {
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
max-width: max-content;
|
|
7
|
+
flex: 1;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
> ul {
|
|
11
|
+
margin: 0;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex: 1;
|
|
14
|
+
list-style-type: none;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
padding: 0;
|
|
18
|
+
> li {
|
|
19
|
+
position: relative;
|
|
20
|
+
}
|
|
21
|
+
> li > :is(a, button) {
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
width: max-content;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
--tw-outline-style: none;
|
|
27
|
+
outline-style: none;
|
|
28
|
+
}
|
|
29
|
+
> li > button > svg:last-child {
|
|
30
|
+
position: relative;
|
|
31
|
+
top: 1px;
|
|
32
|
+
margin-inline-start: var(--spacing);
|
|
33
|
+
width: calc(var(--spacing) * 3);
|
|
34
|
+
height: calc(var(--spacing) * 3);
|
|
35
|
+
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
|
|
36
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
37
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
38
|
+
--tw-duration: 300ms;
|
|
39
|
+
transition-duration: 300ms;
|
|
40
|
+
}
|
|
41
|
+
> li:has(> [data-popover]:popover-open) > button > svg:last-child {
|
|
42
|
+
rotate: 180deg;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
[data-popover] > ul {
|
|
46
|
+
margin: 0;
|
|
47
|
+
display: grid;
|
|
48
|
+
list-style-type: none;
|
|
49
|
+
padding: 0;
|
|
50
|
+
grid-template-columns: repeat(var(--nav-cols, 1), minmax(0, var(--nav-col-width, 14rem)));
|
|
51
|
+
}
|
|
52
|
+
[data-popover][data-cols='2'] > ul {
|
|
53
|
+
--nav-cols: 2;
|
|
54
|
+
}
|
|
55
|
+
[data-popover][data-cols='3'] > ul {
|
|
56
|
+
--nav-cols: 3;
|
|
57
|
+
}
|
|
58
|
+
[data-popover] a {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
--tw-outline-style: none;
|
|
62
|
+
outline-style: none;
|
|
63
|
+
> span {
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
display: -webkit-box;
|
|
66
|
+
-webkit-box-orient: vertical;
|
|
67
|
+
-webkit-line-clamp: 2;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
@media (width < 40rem) {
|
|
72
|
+
.navigation-menu [data-popover] > ul {
|
|
73
|
+
--nav-cols: 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@layer components {
|
|
79
|
+
.navigation-menu > ul {
|
|
80
|
+
gap: 0;
|
|
81
|
+
}
|
|
82
|
+
.navigation-menu > ul > li > :is(a, button) {
|
|
83
|
+
height: calc(var(--spacing) * 9);
|
|
84
|
+
border-radius: var(--auvyx-r-control);
|
|
85
|
+
padding-inline: calc(var(--spacing) * 4);
|
|
86
|
+
padding-block: calc(var(--spacing) * 2);
|
|
87
|
+
font-size: var(--text-sm);
|
|
88
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
|
89
|
+
--tw-font-weight: var(--font-weight-medium);
|
|
90
|
+
font-weight: var(--font-weight-medium);
|
|
91
|
+
transition-property: all;
|
|
92
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
93
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
94
|
+
&:hover {
|
|
95
|
+
@media (hover: hover) {
|
|
96
|
+
background-color: var(--color-muted);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
&:focus-visible {
|
|
100
|
+
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
101
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
102
|
+
}
|
|
103
|
+
&:focus-visible {
|
|
104
|
+
--tw-ring-color: var(--color-ring);
|
|
105
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
106
|
+
--tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
&:disabled {
|
|
110
|
+
opacity: 50%;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
.navigation-menu > ul > li:has(> [data-popover]:popover-open) > button {
|
|
114
|
+
background-color: var(--color-muted);
|
|
115
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
116
|
+
background-color: color-mix(in oklab, var(--color-muted) 50%, transparent);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
.navigation-menu [data-popover] {
|
|
120
|
+
border-radius: var(--auvyx-r-surface);
|
|
121
|
+
padding: calc(var(--spacing) * 2);
|
|
122
|
+
--tw-shadow: var(--shadow-sm, 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)));
|
|
123
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
124
|
+
margin-block-start: 0.375rem;
|
|
125
|
+
}
|
|
126
|
+
.navigation-menu [data-popover] > ul {
|
|
127
|
+
gap: var(--spacing);
|
|
128
|
+
}
|
|
129
|
+
.navigation-menu [data-popover] a {
|
|
130
|
+
gap: var(--spacing);
|
|
131
|
+
border-radius: var(--auvyx-r-control);
|
|
132
|
+
padding: calc(var(--spacing) * 2);
|
|
133
|
+
font-size: var(--text-sm);
|
|
134
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
|
135
|
+
transition-property: all;
|
|
136
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
137
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
138
|
+
&:hover {
|
|
139
|
+
@media (hover: hover) {
|
|
140
|
+
background-color: var(--color-muted);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
&:focus-visible {
|
|
144
|
+
background-color: var(--color-muted);
|
|
145
|
+
}
|
|
146
|
+
&:focus-visible {
|
|
147
|
+
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
148
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
149
|
+
}
|
|
150
|
+
&:focus-visible {
|
|
151
|
+
--tw-ring-color: var(--color-ring);
|
|
152
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
153
|
+
--tw-ring-color: color-mix(in oklab, var(--color-ring) 50%, transparent);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
.navigation-menu [data-popover] a > strong {
|
|
158
|
+
--tw-font-weight: var(--font-weight-medium);
|
|
159
|
+
font-weight: var(--font-weight-medium);
|
|
160
|
+
}
|
|
161
|
+
.navigation-menu [data-popover] a > span {
|
|
162
|
+
--tw-leading: var(--leading-snug);
|
|
163
|
+
line-height: var(--leading-snug);
|
|
164
|
+
color: var(--color-muted-foreground);
|
|
165
|
+
}
|
|
166
|
+
}
|