@oscarpalmer/oui 0.36.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/a11y.css +1 -0
- package/dist/css/badge.css +19 -15
- package/dist/css/button.css +40 -31
- package/dist/css/color-picker.css +377 -0
- package/dist/css/color.css +20 -21
- package/dist/css/combobox.css +140 -34
- package/dist/css/content.css +30 -10
- package/dist/css/floatable.css +12 -10
- package/dist/css/form.css +400 -129
- package/dist/css/listbox.css +43 -17
- package/dist/css/message.css +15 -10
- package/dist/css/mixins/badge.mixins.css +2 -0
- package/dist/css/mixins/button.mixins.css +2 -0
- package/dist/css/mixins/message.mixins.css +1 -0
- package/dist/css/mixins/misc.mixins.css +2 -0
- package/dist/css/mixins/shadow.mixins.css +1 -0
- package/dist/css/reset.css +31 -90
- package/dist/css/splitter.css +3 -3
- package/dist/css/tabs.css +103 -0
- package/dist/js/color-picker.d.mts +213 -0
- package/dist/js/color-picker.mjs +924 -0
- package/dist/js/combobox/dom.combobox.mjs +8 -4
- package/dist/js/combobox/event.combobox.mjs +1 -1
- package/dist/js/combobox/index.d.mts +1 -1
- package/dist/js/combobox/index.mjs +56 -2
- package/dist/js/combobox/misc.combobox.d.mts +1 -1
- package/dist/js/combobox/misc.combobox.mjs +1 -1
- package/dist/js/combobox/state.combobox.d.mts +1 -1
- package/dist/js/combobox/state.combobox.mjs +1 -1
- package/dist/js/dialog.mjs +2 -2
- package/dist/js/floatable/floatable.embedded.mjs +13 -10
- package/dist/js/focus-trap/focus-trap.embedded.mjs +9 -13
- package/dist/js/{index-EfkUSals.d.mts → index-DJdFlTLm.d.mts} +39 -1
- package/dist/js/index.d.mts +4 -2
- package/dist/js/index.mjs +5 -3
- package/dist/js/internal/draggable.mjs +20 -26
- package/dist/js/internal/listbox/listbox.data.mjs +1 -1
- package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
- package/dist/js/internal/listbox/listbox.event.mjs +1 -1
- package/dist/js/internal/listbox/listbox.form.mjs +17 -16
- package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
- package/dist/js/internal/listbox/listbox.state.mjs +4 -4
- package/dist/js/internal/navigable.d.mts +11 -5
- package/dist/js/internal/navigable.mjs +46 -19
- package/dist/js/listbox/event.listbox.mjs +1 -1
- package/dist/js/listbox/index.d.mts +38 -0
- package/dist/js/listbox/index.mjs +56 -2
- package/dist/js/listbox/misc.listbox.mjs +1 -1
- package/dist/js/listbox/state.listbox.mjs +1 -1
- package/dist/js/{listbox.data-BWd0PCy7.mjs → listbox.data-C7CRa5Ya.mjs} +5 -4
- package/dist/js/menu.mjs +1 -1
- package/dist/js/{misc.listbox-BI-XsTOf.mjs → misc.listbox-Cyz2CRDy.mjs} +2 -3
- package/dist/js/movable/movable.embedded.mjs +5 -8
- package/dist/js/popover.mjs +2 -2
- package/dist/js/resizable/resizable.embedded.mjs +21 -31
- package/dist/js/sortable/sortable.embedded.mjs +4 -4
- package/dist/js/splitter.mjs +20 -17
- package/dist/js/{state.combobox-4xq0FPCF.mjs → state.combobox-Qm3FWzYW.mjs} +3 -3
- package/dist/js/tabs.d.mts +25 -0
- package/dist/js/tabs.mjs +237 -0
- package/dist/js/tooltip.mjs +16 -15
- package/package.json +7 -5
- package/src/css/a11y.scss +2 -2
- package/src/css/badge.scss +8 -20
- package/src/css/button.scss +8 -47
- package/src/css/color-picker.scss +344 -0
- package/src/css/color.scss +20 -22
- package/src/css/combobox.scss +29 -57
- package/src/css/content.scss +34 -6
- package/src/css/floatable.scss +22 -19
- package/src/css/form.scss +94 -80
- package/src/css/listbox.scss +6 -34
- package/src/css/message.scss +16 -30
- package/src/css/mixins/badge.mixins.scss +53 -0
- package/src/css/mixins/button.mixins.scss +112 -0
- package/src/css/mixins/input.mixins.scss +114 -0
- package/src/css/mixins/message.mixins.scss +41 -0
- package/src/css/mixins/misc.mixins.scss +48 -0
- package/src/css/mixins/shadow.mixins.scss +57 -0
- package/src/css/reset.scss +39 -88
- package/src/css/splitter.scss +3 -3
- package/src/css/tabs.scss +74 -0
- package/src/js/color-picker.ts +1653 -0
- package/src/js/combobox/dom.combobox.ts +4 -0
- package/src/js/combobox/index.ts +63 -1
- package/src/js/dialog.ts +1 -1
- package/src/js/floatable/floatable.embedded.ts +18 -14
- package/src/js/focus-trap/focus-trap.embedded.ts +11 -19
- package/src/js/index.ts +2 -0
- package/src/js/internal/draggable.ts +29 -33
- package/src/js/internal/listbox/listbox.dom.ts +2 -1
- package/src/js/internal/listbox/listbox.form.ts +32 -22
- package/src/js/internal/listbox/listbox.state.ts +3 -3
- package/src/js/internal/navigable.ts +82 -23
- package/src/js/listbox/index.ts +62 -0
- package/src/js/listbox/state.listbox.ts +0 -2
- package/src/js/movable/movable.embedded.ts +11 -13
- package/src/js/popover.ts +1 -1
- package/src/js/resizable/resizable.embedded.ts +25 -39
- package/src/js/splitter.ts +21 -18
- package/src/js/tabs.ts +441 -0
- package/src/js/tooltip.ts +20 -17
- package/src/css/mixins.scss +0 -194
- /package/dist/css/{mixins.css → mixins/input.mixins.css} +0 -0
package/dist/js/tabs.mjs
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { OuiNavigable, getNavigableOrientation } from "./internal/navigable.mjs";
|
|
2
|
+
import { getAria, setAria } from "@oscarpalmer/toretto/aria";
|
|
3
|
+
import { getAttribute, setAttribute } from "@oscarpalmer/toretto/attribute";
|
|
4
|
+
import { createElement } from "@oscarpalmer/toretto/create";
|
|
5
|
+
//#region src/js/tabs.ts
|
|
6
|
+
var OuiTabsEvent = class extends Event {
|
|
7
|
+
oldIndex;
|
|
8
|
+
newIndex;
|
|
9
|
+
constructor(name, oldIndex, newIndex, cancelable) {
|
|
10
|
+
super(name, {
|
|
11
|
+
cancelable,
|
|
12
|
+
bubbles: true,
|
|
13
|
+
composed: true
|
|
14
|
+
});
|
|
15
|
+
this.oldIndex = oldIndex;
|
|
16
|
+
this.newIndex = newIndex;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var OuiTabsElement = class extends HTMLElement {
|
|
20
|
+
static observedAttributes = ["active"];
|
|
21
|
+
#state;
|
|
22
|
+
get active() {
|
|
23
|
+
return this.#state?.active ?? 0;
|
|
24
|
+
}
|
|
25
|
+
set active(value) {
|
|
26
|
+
setActive(this.#state, value);
|
|
27
|
+
}
|
|
28
|
+
get panel() {
|
|
29
|
+
return this.#state?.panels.elements[this.active];
|
|
30
|
+
}
|
|
31
|
+
get tab() {
|
|
32
|
+
return this.#state?.tabList.tabs[this.active];
|
|
33
|
+
}
|
|
34
|
+
attributeChangedCallback(name, _, value) {
|
|
35
|
+
switch (name) {
|
|
36
|
+
case "active": setActive(this.#state, value);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
connectedCallback() {
|
|
40
|
+
if (this.#state == null) this.#state = initializeTabs(this);
|
|
41
|
+
else attachTabs(this.#state);
|
|
42
|
+
}
|
|
43
|
+
disconnectedCallback() {
|
|
44
|
+
if (this.#state != null) detachTabs(this.#state);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
function attachTabs(state) {
|
|
48
|
+
state.navigable = new OuiNavigable(state.tabList.element, {
|
|
49
|
+
orientation: state.orientation,
|
|
50
|
+
selector: SELECTOR_TAB,
|
|
51
|
+
vertical: false,
|
|
52
|
+
onActivate: (navigable) => {
|
|
53
|
+
const index = state.tabList.tabs.indexOf(navigable.active.element);
|
|
54
|
+
if (index > -1 && index !== state.active) onActivate(state, index);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
const { length } = state.panels.elements;
|
|
58
|
+
for (let index = 0; index < length; index += 1) {
|
|
59
|
+
const panel = state.panels.elements[index];
|
|
60
|
+
panel.hidden = index !== state.active;
|
|
61
|
+
panel.role = "tabpanel";
|
|
62
|
+
if (index === 0) {
|
|
63
|
+
panel.insertAdjacentElement("beforebegin", state.tabList.element);
|
|
64
|
+
panel.insertAdjacentElement("beforebegin", state.content);
|
|
65
|
+
}
|
|
66
|
+
state.content.append(panel);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function createContent(prefix, panels, active) {
|
|
70
|
+
const content = createElement("div", { attribute: { [`${TAGNAME}-content`]: "" } });
|
|
71
|
+
const { length } = panels;
|
|
72
|
+
const hidden = [];
|
|
73
|
+
const roles = [];
|
|
74
|
+
for (let index = 0; index < length; index += 1) {
|
|
75
|
+
const panel = panels[index];
|
|
76
|
+
hidden.push(panel.hidden);
|
|
77
|
+
roles.push(panel.role);
|
|
78
|
+
panel.hidden = index !== active;
|
|
79
|
+
if (panel.id === "") panel.id = `${prefix}_panel_${index}`;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
element: content,
|
|
83
|
+
panels: {
|
|
84
|
+
hidden,
|
|
85
|
+
roles,
|
|
86
|
+
elements: panels
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function createTab(prefix, index, panel, label, selected) {
|
|
91
|
+
return createElement("button", {
|
|
92
|
+
aria: {
|
|
93
|
+
selected,
|
|
94
|
+
controls: panel.id
|
|
95
|
+
},
|
|
96
|
+
attribute: { [`${TAGNAME}-tab`]: "" },
|
|
97
|
+
property: {
|
|
98
|
+
id: `${prefix}_tab_${index}`,
|
|
99
|
+
role: "tab",
|
|
100
|
+
tabIndex: selected ? 0 : -1,
|
|
101
|
+
textContent: label,
|
|
102
|
+
type: "button"
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function createTabList(prefix, panels, labels, active) {
|
|
107
|
+
const element = createElement("div", {
|
|
108
|
+
attribute: { [`${TAGNAME}-tablist`]: "" },
|
|
109
|
+
property: { role: "tablist" }
|
|
110
|
+
});
|
|
111
|
+
const { length } = panels;
|
|
112
|
+
const tabs = [];
|
|
113
|
+
for (let index = 0; index < length; index += 1) {
|
|
114
|
+
const tab = createTab(prefix, index, panels[index], labels[index], index === active);
|
|
115
|
+
element.append(tab);
|
|
116
|
+
tabs.push(tab);
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
element,
|
|
120
|
+
tabs
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function detachTabs(state) {
|
|
124
|
+
state.navigable?.destroy();
|
|
125
|
+
const { length } = state.panels.elements;
|
|
126
|
+
for (let index = 0; index < length; index += 1) {
|
|
127
|
+
const panel = state.panels.elements[index];
|
|
128
|
+
panel.hidden = state.panels.hidden[index];
|
|
129
|
+
panel.role = state.panels.roles[index];
|
|
130
|
+
state.content.before(panel);
|
|
131
|
+
}
|
|
132
|
+
state.tabList.element.remove();
|
|
133
|
+
state.content.remove();
|
|
134
|
+
}
|
|
135
|
+
function getActive(element, max) {
|
|
136
|
+
const attribute = getAttribute(element, "active");
|
|
137
|
+
let index = 0;
|
|
138
|
+
if (attribute != null) {
|
|
139
|
+
const value = Number.parseInt(attribute, 10);
|
|
140
|
+
if (!Number.isNaN(value) && value >= 0) index = value > max ? max : value;
|
|
141
|
+
}
|
|
142
|
+
return index;
|
|
143
|
+
}
|
|
144
|
+
function getId() {
|
|
145
|
+
index += 1;
|
|
146
|
+
return `oui_tabs_${index}`;
|
|
147
|
+
}
|
|
148
|
+
function getLabels(panels) {
|
|
149
|
+
const labels = [];
|
|
150
|
+
const { length } = panels;
|
|
151
|
+
for (let index = 0; index < length; index += 1) {
|
|
152
|
+
const panel = panels[index];
|
|
153
|
+
const labelledBy = getAria(panel, "labelledby");
|
|
154
|
+
if (typeof labelledBy === "string" && labelledBy.trim().length > 0) {
|
|
155
|
+
const label = [];
|
|
156
|
+
const selectors = labelledBy.split(/\s+/);
|
|
157
|
+
for (const selector of selectors) {
|
|
158
|
+
const element = document.getElementById(selector);
|
|
159
|
+
if (element == null) return;
|
|
160
|
+
label.push(element.textContent);
|
|
161
|
+
}
|
|
162
|
+
labels.push(label.join(" "));
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const label = getAria(panel, "label");
|
|
166
|
+
if (typeof label === "string" && label.trim().length > 0) {
|
|
167
|
+
labels.push(label);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
return labels;
|
|
173
|
+
}
|
|
174
|
+
function initializeTabs(element) {
|
|
175
|
+
const panels = [...element.querySelectorAll(SELECTOR_PANEL)];
|
|
176
|
+
if (panels.length === 0) throw new Error(MESSAGE_EMPTY);
|
|
177
|
+
const labels = getLabels(panels);
|
|
178
|
+
if (labels == null) throw new Error(MESSAGE_INVALID);
|
|
179
|
+
let id;
|
|
180
|
+
if (element.id === "") id = getId();
|
|
181
|
+
else id = element.id;
|
|
182
|
+
const active = getActive(element, panels.length - 1);
|
|
183
|
+
const orientation = getNavigableOrientation(element, false, false);
|
|
184
|
+
const content = createContent(id, panels, active);
|
|
185
|
+
const tabList = createTabList(id, panels, labels, active);
|
|
186
|
+
const state = {
|
|
187
|
+
active,
|
|
188
|
+
id,
|
|
189
|
+
orientation,
|
|
190
|
+
tabList,
|
|
191
|
+
content: content.element,
|
|
192
|
+
host: element,
|
|
193
|
+
panels: content.panels
|
|
194
|
+
};
|
|
195
|
+
attachTabs(state);
|
|
196
|
+
return state;
|
|
197
|
+
}
|
|
198
|
+
function onActivate(state, next) {
|
|
199
|
+
const current = state.active;
|
|
200
|
+
const event = new OuiTabsEvent("oui:beforechange", current, next, true);
|
|
201
|
+
state.host.dispatchEvent(event);
|
|
202
|
+
if (event.defaultPrevented) return;
|
|
203
|
+
state.active = next;
|
|
204
|
+
const { length } = state.panels.elements;
|
|
205
|
+
for (let index = 0; index < length; index += 1) {
|
|
206
|
+
const panel = state.panels.elements[index];
|
|
207
|
+
panel.hidden = index !== next;
|
|
208
|
+
setAria(state.tabList.tabs[index], "selected", index === next);
|
|
209
|
+
}
|
|
210
|
+
setAttribute(state.host, "active", next);
|
|
211
|
+
state.host.dispatchEvent(new OuiTabsEvent("oui:change", current, next, false));
|
|
212
|
+
}
|
|
213
|
+
function setActive(state, value) {
|
|
214
|
+
if (state == null) return;
|
|
215
|
+
const max = state.panels.elements.length - 1;
|
|
216
|
+
let index;
|
|
217
|
+
if (typeof value === "number" && !Number.isNaN(value) && value >= 0) index = value > max ? max : value;
|
|
218
|
+
else if (typeof value === "string") {
|
|
219
|
+
const parsed = Number.parseInt(value, 10);
|
|
220
|
+
if (!Number.isNaN(parsed) && parsed >= 0) index = parsed > max ? max : parsed;
|
|
221
|
+
}
|
|
222
|
+
if (index == null) setAttribute(state.host, "active", state.active);
|
|
223
|
+
else if (index !== state.active) {
|
|
224
|
+
state.navigable?.navigate(index, false);
|
|
225
|
+
onActivate(state, index);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const TAGNAME = "oui-tabs";
|
|
229
|
+
const ATTRIBUTE_PANEL = `${TAGNAME}-panel`;
|
|
230
|
+
const MESSAGE_EMPTY = `<${TAGNAME}> must contain at least one [${ATTRIBUTE_PANEL}] child element`;
|
|
231
|
+
const MESSAGE_INVALID = `A [${ATTRIBUTE_PANEL}] child element of <${TAGNAME}> must have a valid 'aria-label' or 'aria-labelledby' attribute`;
|
|
232
|
+
const SELECTOR_PANEL = `:scope > [${ATTRIBUTE_PANEL}]`;
|
|
233
|
+
const SELECTOR_TAB = `[${TAGNAME}-tab]`;
|
|
234
|
+
let index = 0;
|
|
235
|
+
customElements.define(TAGNAME, OuiTabsElement);
|
|
236
|
+
//#endregion
|
|
237
|
+
export { OuiTabsElement, OuiTabsEvent };
|
package/dist/js/tooltip.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createEmbeddedFloatable } from "./floatable/floatable.embedded.mjs";
|
|
2
2
|
import { attributable } from "./internal/attributable.mjs";
|
|
3
3
|
import { getAria } from "@oscarpalmer/toretto/aria";
|
|
4
|
-
import { on } from "@oscarpalmer/toretto/event";
|
|
5
|
-
import { isNullableOrWhitespace } from "@oscarpalmer/atoms/is";
|
|
6
4
|
import { setAttribute } from "@oscarpalmer/toretto/attribute";
|
|
7
|
-
import { findAncestor } from "@oscarpalmer/toretto/find";
|
|
8
5
|
import { createElement } from "@oscarpalmer/toretto/create";
|
|
6
|
+
import { on } from "@oscarpalmer/toretto/event";
|
|
7
|
+
import { findAncestor } from "@oscarpalmer/toretto/find";
|
|
8
|
+
import { isNullableOrWhitespace } from "@oscarpalmer/atoms/is";
|
|
9
9
|
//#region src/js/tooltip.ts
|
|
10
10
|
var OuiTooltip = class {
|
|
11
11
|
#state;
|
|
@@ -103,24 +103,25 @@ function findElements(attribute) {
|
|
|
103
103
|
return elements;
|
|
104
104
|
}
|
|
105
105
|
function getContent() {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
return createElement("div", {
|
|
107
|
+
attribute: {
|
|
108
|
+
[ATTRIBUTE_CONTENT]: "",
|
|
109
|
+
popover: "hint"
|
|
110
|
+
},
|
|
111
|
+
property: {
|
|
112
|
+
role: "tooltip",
|
|
113
|
+
tabIndex: -1
|
|
114
|
+
}
|
|
110
115
|
});
|
|
111
|
-
setAttribute(content, ATTRIBUTE_CONTENT, "");
|
|
112
|
-
return content;
|
|
113
116
|
}
|
|
114
117
|
function getElements(anchor) {
|
|
115
118
|
let elements = findElements(getAria(anchor, "labelledby"));
|
|
116
119
|
if (elements == null || elements.length === 0) elements = findElements(getAria(anchor, "describedby"));
|
|
117
120
|
if (elements != null && elements.length > 0) return elements;
|
|
118
|
-
let
|
|
119
|
-
if (isNullableOrWhitespace(
|
|
120
|
-
if (isNullableOrWhitespace(
|
|
121
|
-
|
|
122
|
-
paragraph.textContent = text;
|
|
123
|
-
return [paragraph];
|
|
121
|
+
let textContent = getAria(anchor, "label");
|
|
122
|
+
if (isNullableOrWhitespace(textContent)) textContent = getAria(anchor, "description");
|
|
123
|
+
if (isNullableOrWhitespace(textContent)) return;
|
|
124
|
+
return [createElement("p", { property: { textContent } })];
|
|
124
125
|
}
|
|
125
126
|
function getState(anchor, elements) {
|
|
126
127
|
const state = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oscarpalmer/oui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "Styles, components, and utilities for building websites and applications.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"css",
|
|
@@ -91,15 +91,17 @@
|
|
|
91
91
|
"clean": "rm -rf ./dist && rm -rf ./postcss",
|
|
92
92
|
"css:build": "vp run postcss:build && vpx sass ./postcss:./dist/css --no-source-map",
|
|
93
93
|
"css:watch": "vpx sass ./postcss:./dist/css --no-source-map --watch",
|
|
94
|
-
"postcss:build": "
|
|
95
|
-
"postcss:
|
|
94
|
+
"postcss:build": "vp run postcss:build:mixins && vp run postcss:build:styles",
|
|
95
|
+
"postcss:build:mixins": "vpx postcss ./src/css/mixins/*.scss -d ./postcss/mixins -u autoprefixer postcss-input-range --parser postcss-scss",
|
|
96
|
+
"postcss:build:styles": "vpx postcss ./src/css/*.scss -d ./postcss -u autoprefixer postcss-input-range --parser postcss-scss",
|
|
97
|
+
"postcss:watch": "vpx postcss ./src/css/**/*.scss -d ./postcss -u autoprefixer postcss-input-range --parser postcss-scss --watch",
|
|
96
98
|
"test": "vpx vitest --coverage",
|
|
97
99
|
"tsdown": "vpx tsdown -c ./tsdown.config.ts --watch",
|
|
98
100
|
"watch": "vp run clean && concurrently \"php -S localhost:3000\" \"vp run postcss:watch\" \"vp run css:watch\" \"vp run tsdown\""
|
|
99
101
|
},
|
|
100
102
|
"dependencies": {
|
|
101
|
-
"@oscarpalmer/atoms": "^0.
|
|
102
|
-
"@oscarpalmer/toretto": "^0.
|
|
103
|
+
"@oscarpalmer/atoms": "^0.189.1",
|
|
104
|
+
"@oscarpalmer/toretto": "^0.52"
|
|
103
105
|
},
|
|
104
106
|
"devDependencies": {
|
|
105
107
|
"@oxlint/plugins": "^1.78",
|
package/src/css/a11y.scss
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! https://github.com/oscarpalmer/oui */
|
|
2
2
|
|
|
3
|
-
@use './mixins' as
|
|
3
|
+
@use './mixins/misc.mixins.scss' as miscMixins;
|
|
4
4
|
|
|
5
5
|
.oui-vh {
|
|
6
6
|
:where(&) {
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
:where(&:not(:active, :focus, :focus-within)) {
|
|
11
|
-
@include
|
|
11
|
+
@include miscMixins.visually-hidden;
|
|
12
12
|
}
|
|
13
13
|
}
|
package/src/css/badge.scss
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*! https://github.com/oscarpalmer/oui */
|
|
2
2
|
|
|
3
|
-
@use './mixins.scss' as
|
|
3
|
+
@use './mixins/badge.mixins.scss' as badgeMixins;
|
|
4
4
|
|
|
5
5
|
.oui {
|
|
6
6
|
:where(&-pill, &-tag) {
|
|
7
|
-
@include
|
|
7
|
+
@include badgeMixins.badge;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
:where(&-pill) {
|
|
@@ -37,38 +37,26 @@
|
|
|
37
37
|
// Colors
|
|
38
38
|
|
|
39
39
|
:where(&-pill--blue, &-tag--blue) {
|
|
40
|
-
|
|
41
|
-
--oui-foreground: var(--oui-blue-8);
|
|
42
|
-
--oui-shadow: var(--oui-blue-6);
|
|
40
|
+
@include badgeMixins.badge-blue;
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
:where(&-pill--green, &-tag--green) {
|
|
46
|
-
|
|
47
|
-
--oui-foreground: var(--oui-green-8);
|
|
48
|
-
--oui-shadow: var(--oui-green-6);
|
|
44
|
+
@include badgeMixins.badge-green;
|
|
49
45
|
}
|
|
50
46
|
|
|
51
47
|
:where(&-pill--orange, &-tag--orange) {
|
|
52
|
-
|
|
53
|
-
--oui-foreground: var(--oui-orange-8);
|
|
54
|
-
--oui-shadow: var(--oui-orange-6);
|
|
48
|
+
@include badgeMixins.badge-orange;
|
|
55
49
|
}
|
|
56
50
|
|
|
57
51
|
:where(&-pill--purple, &-tag--purple) {
|
|
58
|
-
|
|
59
|
-
--oui-foreground: var(--oui-purple-8);
|
|
60
|
-
--oui-shadow: var(--oui-purple-6);
|
|
52
|
+
@include badgeMixins.badge-purple;
|
|
61
53
|
}
|
|
62
54
|
|
|
63
55
|
:where(&-pill--red, &-tag--red) {
|
|
64
|
-
|
|
65
|
-
--oui-foreground: var(--oui-red-8);
|
|
66
|
-
--oui-shadow: var(--oui-red-6);
|
|
56
|
+
@include badgeMixins.badge-red;
|
|
67
57
|
}
|
|
68
58
|
|
|
69
59
|
:where(&-pill--yellow, &-tag--yellow) {
|
|
70
|
-
|
|
71
|
-
--oui-foreground: var(--oui-yellow-8);
|
|
72
|
-
--oui-shadow: var(--oui-yellow-6);
|
|
60
|
+
@include badgeMixins.badge-yellow;
|
|
73
61
|
}
|
|
74
62
|
}
|
package/src/css/button.scss
CHANGED
|
@@ -1,46 +1,34 @@
|
|
|
1
1
|
/*! https://github.com/oscarpalmer/oui */
|
|
2
2
|
|
|
3
|
-
@use './mixins' as
|
|
3
|
+
@use './mixins/button.mixins.scss' as buttonMixins;
|
|
4
4
|
|
|
5
5
|
.oui-button {
|
|
6
6
|
:where(&) {
|
|
7
|
-
@include
|
|
7
|
+
@include buttonMixins.button;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
:where(&--blue) {
|
|
11
|
-
|
|
12
|
-
--oui-foreground-value: var(--oui-blue-8);
|
|
13
|
-
--oui-outline-value: var(--oui-blue-6);
|
|
11
|
+
@include buttonMixins.button-blue;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
:where(&--green) {
|
|
17
|
-
|
|
18
|
-
--oui-foreground-value: var(--oui-green-8);
|
|
19
|
-
--oui-outline-value: var(--oui-green-6);
|
|
15
|
+
@include buttonMixins.button-green;
|
|
20
16
|
}
|
|
21
17
|
|
|
22
18
|
:where(&--orange) {
|
|
23
|
-
|
|
24
|
-
--oui-foreground-value: var(--oui-orange-8);
|
|
25
|
-
--oui-outline-value: var(--oui-orange-6);
|
|
19
|
+
@include buttonMixins.button-orange;
|
|
26
20
|
}
|
|
27
21
|
|
|
28
22
|
:where(&--purple) {
|
|
29
|
-
|
|
30
|
-
--oui-foreground-value: var(--oui-purple-8);
|
|
31
|
-
--oui-outline-value: var(--oui-purple-6);
|
|
23
|
+
@include buttonMixins.button-purple;
|
|
32
24
|
}
|
|
33
25
|
|
|
34
26
|
:where(&--red) {
|
|
35
|
-
|
|
36
|
-
--oui-foreground-value: var(--oui-red-8);
|
|
37
|
-
--oui-outline-value: var(--oui-red-6);
|
|
27
|
+
@include buttonMixins.button-red;
|
|
38
28
|
}
|
|
39
29
|
|
|
40
30
|
:where(&--yellow) {
|
|
41
|
-
|
|
42
|
-
--oui-foreground-value: var(--oui-yellow-8);
|
|
43
|
-
--oui-outline-value: var(--oui-yellow-6);
|
|
31
|
+
@include buttonMixins.button-yellow;
|
|
44
32
|
}
|
|
45
33
|
|
|
46
34
|
:where(&--rounded) {
|
|
@@ -59,31 +47,4 @@
|
|
|
59
47
|
|
|
60
48
|
font-size: 0.75em;
|
|
61
49
|
}
|
|
62
|
-
|
|
63
|
-
:where(&:focus-visible) {
|
|
64
|
-
--oui-outline-percentage: 75%;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@media (hover: hover) {
|
|
68
|
-
:where(&:not([disabled], [aria-disabled='true' i]):hover) {
|
|
69
|
-
--oui-background-percentage: 50%;
|
|
70
|
-
--oui-foreground-percentage: 25%;
|
|
71
|
-
--oui-shadow-percentage: 90%;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
:where(&:not([disabled], [aria-disabled='true' i]):active) {
|
|
76
|
-
box-shadow:
|
|
77
|
-
0 0 0 1px var(--oui-shadow-value),
|
|
78
|
-
inset 0 1px 2px 0 var(--oui-shadow-value),
|
|
79
|
-
inset 0 2px 4px 0 var(--oui-shadow-value);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
:where(&[disabled], &[aria-disabled='true' i]) {
|
|
83
|
-
--oui-background-percentage: 80%;
|
|
84
|
-
--oui-foreground-percentage: 20%;
|
|
85
|
-
--oui-shadow-percentage: 95%;
|
|
86
|
-
|
|
87
|
-
font-style: italic;
|
|
88
|
-
}
|
|
89
50
|
}
|