@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.
Files changed (143) hide show
  1. package/LICENSE +48 -0
  2. package/README.md +43 -2
  3. package/dist/auvyx.bundle.css +5941 -0
  4. package/dist/auvyx.chart.min.js +2 -0
  5. package/dist/auvyx.corners.min.js +2 -0
  6. package/dist/auvyx.css +10880 -0
  7. package/dist/auvyx.js +3222 -0
  8. package/dist/auvyx.min.css +2 -0
  9. package/dist/auvyx.min.js +19 -0
  10. package/dist/custom-elements.json +948 -0
  11. package/dist/elements/calendar.min.js +2 -0
  12. package/dist/elements/context-menu.min.js +2 -0
  13. package/dist/elements/data-table.min.js +2 -0
  14. package/dist/elements/date-picker.min.js +2 -0
  15. package/dist/elements/index.min.js +2 -0
  16. package/dist/elements/menu.min.js +2 -0
  17. package/dist/elements/resizable.min.js +2 -0
  18. package/dist/js/accordion.min.js +2 -0
  19. package/dist/js/calendar.min.js +2 -0
  20. package/dist/js/combobox.min.js +2 -0
  21. package/dist/js/command.min.js +2 -0
  22. package/dist/js/context-menu.min.js +2 -0
  23. package/dist/js/copy.min.js +2 -0
  24. package/dist/js/data-table.min.js +2 -0
  25. package/dist/js/date-picker.min.js +2 -0
  26. package/dist/js/drawer.min.js +2 -0
  27. package/dist/js/dropdown-menu.min.js +2 -0
  28. package/dist/js/manifest.json +114 -0
  29. package/dist/js/menu.min.js +2 -0
  30. package/dist/js/popover.min.js +2 -0
  31. package/dist/js/resizable.min.js +2 -0
  32. package/dist/js/select.min.js +2 -0
  33. package/dist/js/sidebar.min.js +2 -0
  34. package/dist/js/slider.min.js +2 -0
  35. package/dist/js/tabs.min.js +2 -0
  36. package/dist/js/toast.min.js +19 -0
  37. package/dist/styles/auvyx-luma.min.css +3 -0
  38. package/dist/styles/auvyx-lyra.min.css +3 -0
  39. package/dist/styles/auvyx-maia.min.css +3 -0
  40. package/dist/styles/auvyx-mira.min.css +3 -0
  41. package/dist/styles/auvyx-nova.min.css +3 -0
  42. package/dist/styles/auvyx-rhea.min.css +3 -0
  43. package/dist/styles/auvyx-sera.min.css +3 -0
  44. package/dist/styles/auvyx-vega.min.css +3 -0
  45. package/dist/types/elements.d.ts +262 -0
  46. package/dist/types/react.d.ts +181 -0
  47. package/dist/types/vue.d.ts +155 -0
  48. package/dist/ui/accordion.css +91 -0
  49. package/dist/ui/accordion.js +249 -0
  50. package/dist/ui/accordion.native.css +24 -0
  51. package/dist/ui/alert.css +119 -0
  52. package/dist/ui/aspect-ratio.css +38 -0
  53. package/dist/ui/attachment.css +211 -0
  54. package/dist/ui/avatar.css +204 -0
  55. package/dist/ui/badge.css +183 -0
  56. package/dist/ui/base.css +1200 -0
  57. package/dist/ui/breadcrumb.css +90 -0
  58. package/dist/ui/bubble.css +171 -0
  59. package/dist/ui/button-group.css +110 -0
  60. package/dist/ui/button.css +328 -0
  61. package/dist/ui/calendar.css +260 -0
  62. package/dist/ui/calendar.js +317 -0
  63. package/dist/ui/card.css +126 -0
  64. package/dist/ui/carousel.css +172 -0
  65. package/dist/ui/chart.css +130 -0
  66. package/dist/ui/checkbox.css +119 -0
  67. package/dist/ui/code-block.css +235 -0
  68. package/dist/ui/combobox.css +500 -0
  69. package/dist/ui/combobox.js +757 -0
  70. package/dist/ui/command.css +366 -0
  71. package/dist/ui/command.js +382 -0
  72. package/dist/ui/context-menu.css +17 -0
  73. package/dist/ui/context-menu.js +52 -0
  74. package/dist/ui/copy.js +56 -0
  75. package/dist/ui/data-table.css +114 -0
  76. package/dist/ui/data-table.js +140 -0
  77. package/dist/ui/date-picker.css +14 -0
  78. package/dist/ui/date-picker.js +101 -0
  79. package/dist/ui/dialog.css +363 -0
  80. package/dist/ui/dialog.native.css +6 -0
  81. package/dist/ui/drawer.css +238 -0
  82. package/dist/ui/drawer.js +265 -0
  83. package/dist/ui/dropdown-menu.css +193 -0
  84. package/dist/ui/dropdown-menu.js +388 -0
  85. package/dist/ui/empty.css +111 -0
  86. package/dist/ui/field.css +293 -0
  87. package/dist/ui/hover-card.css +85 -0
  88. package/dist/ui/input-group.css +269 -0
  89. package/dist/ui/input-otp.css +101 -0
  90. package/dist/ui/input.css +117 -0
  91. package/dist/ui/item.css +223 -0
  92. package/dist/ui/kbd.css +50 -0
  93. package/dist/ui/label.css +48 -0
  94. package/dist/ui/manifest.json +667 -0
  95. package/dist/ui/marker.css +66 -0
  96. package/dist/ui/menu.js +161 -0
  97. package/dist/ui/menubar.css +55 -0
  98. package/dist/ui/message-scroller.css +83 -0
  99. package/dist/ui/message.css +69 -0
  100. package/dist/ui/native-select.css +130 -0
  101. package/dist/ui/navigation-menu.css +166 -0
  102. package/dist/ui/popover.css +154 -0
  103. package/dist/ui/popover.js +268 -0
  104. package/dist/ui/popover.native.css +84 -0
  105. package/dist/ui/progress.css +29 -0
  106. package/dist/ui/questionnaire.css +188 -0
  107. package/dist/ui/radio-group.css +115 -0
  108. package/dist/ui/resizable.css +94 -0
  109. package/dist/ui/resizable.js +95 -0
  110. package/dist/ui/scroll-area.css +43 -0
  111. package/dist/ui/select.css +289 -0
  112. package/dist/ui/select.js +646 -0
  113. package/dist/ui/sheet.css +219 -0
  114. package/dist/ui/sidebar.css +716 -0
  115. package/dist/ui/sidebar.js +287 -0
  116. package/dist/ui/skeleton.css +13 -0
  117. package/dist/ui/slider.css +184 -0
  118. package/dist/ui/slider.js +206 -0
  119. package/dist/ui/switch.css +156 -0
  120. package/dist/ui/table.css +157 -0
  121. package/dist/ui/tabs.css +240 -0
  122. package/dist/ui/tabs.js +288 -0
  123. package/dist/ui/textarea.css +91 -0
  124. package/dist/ui/toast.css +110 -0
  125. package/dist/ui/toast.js +378 -0
  126. package/dist/ui/toggle-group.css +42 -0
  127. package/dist/ui/toggle.css +150 -0
  128. package/dist/ui/tooltip.css +319 -0
  129. package/dist/ui/trace.css +142 -0
  130. package/dist/ui/typography.css +184 -0
  131. package/dist/wc/accordion.min.js +2 -0
  132. package/dist/wc/combobox.min.js +2 -0
  133. package/dist/wc/command.min.js +2 -0
  134. package/dist/wc/drawer.min.js +2 -0
  135. package/dist/wc/dropdown-menu.min.js +2 -0
  136. package/dist/wc/manifest.json +154 -0
  137. package/dist/wc/popover.min.js +2 -0
  138. package/dist/wc/select.min.js +2 -0
  139. package/dist/wc/sidebar.min.js +2 -0
  140. package/dist/wc/slider.min.js +2 -0
  141. package/dist/wc/tabs.min.js +2 -0
  142. package/dist/wc/toast.min.js +19 -0
  143. package/package.json +62 -4
@@ -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
+ }