@livenetworks/ashlar 1.3.2
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/README.md +177 -0
- package/js/COMPONENTS.md +1102 -0
- package/js/index.js +41 -0
- package/js/ln-accordion/README.md +137 -0
- package/js/ln-accordion/ln-accordion.js +1 -0
- package/js/ln-accordion/src/ln-accordion.js +41 -0
- package/js/ln-ajax/README.md +91 -0
- package/js/ln-ajax/ln-ajax.js +1 -0
- package/js/ln-ajax/src/ln-ajax.js +277 -0
- package/js/ln-api-connector/README.md +150 -0
- package/js/ln-api-connector/ln-api-connector.js +1 -0
- package/js/ln-api-connector/src/ln-api-connector.js +265 -0
- package/js/ln-autoresize/README.md +80 -0
- package/js/ln-autoresize/ln-autoresize.js +1 -0
- package/js/ln-autoresize/src/ln-autoresize.js +47 -0
- package/js/ln-autosave/README.md +92 -0
- package/js/ln-autosave/ln-autosave.js +1 -0
- package/js/ln-autosave/src/ln-autosave.js +147 -0
- package/js/ln-circular-progress/README.md +161 -0
- package/js/ln-circular-progress/ln-circular-progress.js +1 -0
- package/js/ln-circular-progress/src/ln-circular-progress.js +133 -0
- package/js/ln-confirm/README.md +86 -0
- package/js/ln-confirm/_ln-confirm.scss +13 -0
- package/js/ln-confirm/ln-confirm.js +1 -0
- package/js/ln-confirm/src/ln-confirm.js +131 -0
- package/js/ln-core/crypto.js +83 -0
- package/js/ln-core/helpers.js +411 -0
- package/js/ln-core/index.js +5 -0
- package/js/ln-core/persist.js +71 -0
- package/js/ln-core/positioning.js +207 -0
- package/js/ln-core/reactive.js +74 -0
- package/js/ln-couchdb-connector/README.md +156 -0
- package/js/ln-couchdb-connector/ln-couchdb-connector.js +1 -0
- package/js/ln-couchdb-connector/src/ln-couchdb-connector.js +348 -0
- package/js/ln-data-coordinator/README.md +165 -0
- package/js/ln-data-coordinator/ln-data-coordinator.js +1 -0
- package/js/ln-data-coordinator/src/ln-data-coordinator.js +249 -0
- package/js/ln-data-store/README.md +94 -0
- package/js/ln-data-store/ln-data-store.js +1 -0
- package/js/ln-data-store/src/ln-data-store.js +699 -0
- package/js/ln-data-table/README.md +110 -0
- package/js/ln-data-table/ln-data-table.js +1 -0
- package/js/ln-data-table/ln-data-table.scss +10 -0
- package/js/ln-data-table/src/ln-data-table.js +1103 -0
- package/js/ln-date/README.md +151 -0
- package/js/ln-date/ln-date.js +1 -0
- package/js/ln-date/src/ln-date.js +442 -0
- package/js/ln-dropdown/README.md +117 -0
- package/js/ln-dropdown/ln-dropdown.js +1 -0
- package/js/ln-dropdown/ln-dropdown.scss +15 -0
- package/js/ln-dropdown/src/ln-dropdown.js +174 -0
- package/js/ln-external-links/README.md +341 -0
- package/js/ln-external-links/ln-external-links.js +1 -0
- package/js/ln-external-links/src/ln-external-links.js +116 -0
- package/js/ln-filter/README.md +99 -0
- package/js/ln-filter/ln-filter.js +1 -0
- package/js/ln-filter/ln-filter.scss +7 -0
- package/js/ln-filter/src/ln-filter.js +404 -0
- package/js/ln-form/README.md +101 -0
- package/js/ln-form/ln-form.js +1 -0
- package/js/ln-form/src/ln-form.js +199 -0
- package/js/ln-http/README.md +89 -0
- package/js/ln-http/ln-http.js +1 -0
- package/js/ln-http/src/ln-http.js +219 -0
- package/js/ln-icons/README.md +88 -0
- package/js/ln-icons/ln-icons.js +1 -0
- package/js/ln-icons/src/ln-icons.js +169 -0
- package/js/ln-link/README.md +303 -0
- package/js/ln-link/ln-link.js +1 -0
- package/js/ln-link/src/ln-link.js +196 -0
- package/js/ln-modal/README.md +154 -0
- package/js/ln-modal/ln-modal.js +1 -0
- package/js/ln-modal/ln-modal.scss +11 -0
- package/js/ln-modal/src/ln-modal.js +201 -0
- package/js/ln-nav/README.md +70 -0
- package/js/ln-nav/ln-nav.js +1 -0
- package/js/ln-nav/src/ln-nav.js +177 -0
- package/js/ln-number/README.md +122 -0
- package/js/ln-number/ln-number.js +1 -0
- package/js/ln-number/src/ln-number.js +302 -0
- package/js/ln-popover/README.md +127 -0
- package/js/ln-popover/ln-popover.js +1 -0
- package/js/ln-popover/src/ln-popover.js +288 -0
- package/js/ln-progress/README.md +442 -0
- package/js/ln-progress/ln-progress.js +1 -0
- package/js/ln-progress/src/ln-progress.js +150 -0
- package/js/ln-search/README.md +83 -0
- package/js/ln-search/ln-search.js +1 -0
- package/js/ln-search/ln-search.scss +7 -0
- package/js/ln-search/src/ln-search.js +114 -0
- package/js/ln-sortable/README.md +95 -0
- package/js/ln-sortable/ln-sortable.js +1 -0
- package/js/ln-sortable/src/ln-sortable.js +203 -0
- package/js/ln-table/README.md +101 -0
- package/js/ln-table/ln-table-sort.js +1 -0
- package/js/ln-table/ln-table.js +1 -0
- package/js/ln-table/ln-table.scss +11 -0
- package/js/ln-table/src/ln-table-sort.js +168 -0
- package/js/ln-table/src/ln-table.js +473 -0
- package/js/ln-tabs/README.md +137 -0
- package/js/ln-tabs/ln-tabs.js +1 -0
- package/js/ln-tabs/src/ln-tabs.js +171 -0
- package/js/ln-time/README.md +81 -0
- package/js/ln-time/ln-time.js +1 -0
- package/js/ln-time/src/ln-time.js +192 -0
- package/js/ln-toast/README.md +122 -0
- package/js/ln-toast/ln-toast.js +15 -0
- package/js/ln-toast/src/ln-toast.js +210 -0
- package/js/ln-toast/template.html +14 -0
- package/js/ln-toggle/README.md +137 -0
- package/js/ln-toggle/ln-toggle.js +1 -0
- package/js/ln-toggle/src/ln-toggle.js +139 -0
- package/js/ln-tooltip/README.md +58 -0
- package/js/ln-tooltip/ln-tooltip.js +1 -0
- package/js/ln-tooltip/ln-tooltip.scss +9 -0
- package/js/ln-tooltip/src/ln-tooltip.js +169 -0
- package/js/ln-translations/README.md +96 -0
- package/js/ln-translations/ln-translations.js +1 -0
- package/js/ln-translations/src/ln-translations.js +275 -0
- package/js/ln-upload/README.md +180 -0
- package/js/ln-upload/ln-upload.js +1 -0
- package/js/ln-upload/ln-upload.scss +20 -0
- package/js/ln-upload/src/ln-upload.js +407 -0
- package/js/ln-validate/README.md +108 -0
- package/js/ln-validate/ln-validate.js +1 -0
- package/js/ln-validate/src/ln-validate.js +160 -0
- package/package.json +55 -0
- package/scss/base/_global.scss +83 -0
- package/scss/base/_reset.scss +17 -0
- package/scss/base/_typography.scss +125 -0
- package/scss/components/_accordion.scss +34 -0
- package/scss/components/_ajax.scss +15 -0
- package/scss/components/_alert.scss +5 -0
- package/scss/components/_app-shell.scss +15 -0
- package/scss/components/_avatar.scss +6 -0
- package/scss/components/_breadcrumbs.scss +33 -0
- package/scss/components/_button.scss +20 -0
- package/scss/components/_card.scss +10 -0
- package/scss/components/_chip.scss +5 -0
- package/scss/components/_circular-progress.scss +29 -0
- package/scss/components/_confirm.scss +5 -0
- package/scss/components/_data-table.scss +83 -0
- package/scss/components/_dropdown.scss +25 -0
- package/scss/components/_empty-state.scss +22 -0
- package/scss/components/_form.scss +100 -0
- package/scss/components/_layout.scss +8 -0
- package/scss/components/_link.scss +11 -0
- package/scss/components/_ln-table.scss +60 -0
- package/scss/components/_loader.scss +6 -0
- package/scss/components/_modal.scss +20 -0
- package/scss/components/_nav.scss +9 -0
- package/scss/components/_page-header.scss +10 -0
- package/scss/components/_popover.scss +10 -0
- package/scss/components/_progress.scss +17 -0
- package/scss/components/_prose.scss +5 -0
- package/scss/components/_scrollbar.scss +32 -0
- package/scss/components/_sections.scss +12 -0
- package/scss/components/_sidebar.scss +5 -0
- package/scss/components/_stat-card.scss +5 -0
- package/scss/components/_status-badge.scss +4 -0
- package/scss/components/_stepper.scss +5 -0
- package/scss/components/_table.scss +19 -0
- package/scss/components/_tabs.scss +21 -0
- package/scss/components/_timeline.scss +14 -0
- package/scss/components/_toast.scss +41 -0
- package/scss/components/_toggle.scss +81 -0
- package/scss/components/_tooltip.scss +18 -0
- package/scss/components/_translations.scss +111 -0
- package/scss/components/_upload.scss +51 -0
- package/scss/config/_breakpoints.scss +72 -0
- package/scss/config/_density.scss +117 -0
- package/scss/config/_icons.scss +37 -0
- package/scss/config/_mixins.scss +13 -0
- package/scss/config/_theme.scss +216 -0
- package/scss/config/_tokens.scss +419 -0
- package/scss/config/mixins/_accordion.scss +52 -0
- package/scss/config/mixins/_ajax.scss +39 -0
- package/scss/config/mixins/_alert.scss +82 -0
- package/scss/config/mixins/_app-shell.scss +312 -0
- package/scss/config/mixins/_avatar.scss +109 -0
- package/scss/config/mixins/_borders.scss +36 -0
- package/scss/config/mixins/_breadcrumbs.scss +72 -0
- package/scss/config/mixins/_breakpoints.scss +62 -0
- package/scss/config/mixins/_btn.scss +179 -0
- package/scss/config/mixins/_card.scss +338 -0
- package/scss/config/mixins/_chip.scss +66 -0
- package/scss/config/mixins/_circular-progress.scss +71 -0
- package/scss/config/mixins/_collapsible.scss +24 -0
- package/scss/config/mixins/_colors.scss +46 -0
- package/scss/config/mixins/_confirm.scss +31 -0
- package/scss/config/mixins/_data-table.scss +346 -0
- package/scss/config/mixins/_display.scss +32 -0
- package/scss/config/mixins/_dropdown.scss +143 -0
- package/scss/config/mixins/_empty-state.scss +30 -0
- package/scss/config/mixins/_focus.scss +55 -0
- package/scss/config/mixins/_footer.scss +42 -0
- package/scss/config/mixins/_form.scss +601 -0
- package/scss/config/mixins/_index.scss +58 -0
- package/scss/config/mixins/_interaction.scss +15 -0
- package/scss/config/mixins/_kbd.scss +22 -0
- package/scss/config/mixins/_layout.scss +117 -0
- package/scss/config/mixins/_link.scss +55 -0
- package/scss/config/mixins/_ln-table.scss +420 -0
- package/scss/config/mixins/_loader.scss +26 -0
- package/scss/config/mixins/_modal.scss +66 -0
- package/scss/config/mixins/_motion.scss +19 -0
- package/scss/config/mixins/_nav.scss +273 -0
- package/scss/config/mixins/_page-header.scss +69 -0
- package/scss/config/mixins/_popover.scss +25 -0
- package/scss/config/mixins/_position.scss +32 -0
- package/scss/config/mixins/_progress.scss +56 -0
- package/scss/config/mixins/_prose.scss +127 -0
- package/scss/config/mixins/_shadows.scss +8 -0
- package/scss/config/mixins/_sidebar.scss +95 -0
- package/scss/config/mixins/_sizing.scss +6 -0
- package/scss/config/mixins/_spacing.scss +19 -0
- package/scss/config/mixins/_stat-card.scss +68 -0
- package/scss/config/mixins/_status-badge.scss +83 -0
- package/scss/config/mixins/_stepper.scss +78 -0
- package/scss/config/mixins/_table.scss +215 -0
- package/scss/config/mixins/_tabs.scss +64 -0
- package/scss/config/mixins/_timeline.scss +69 -0
- package/scss/config/mixins/_toast.scss +148 -0
- package/scss/config/mixins/_tooltip.scss +111 -0
- package/scss/config/mixins/_transitions.scss +10 -0
- package/scss/config/mixins/_translations.scss +124 -0
- package/scss/config/mixins/_typography.scss +57 -0
- package/scss/config/mixins/_upload.scss +168 -0
- package/scss/ln-ashlar.scss +62 -0
- package/scss/tabler-icons.txt +5039 -0
- package/scss/utilities/_animations.scss +83 -0
- package/scss/utilities/_utilities.scss +49 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Prototype-tier classes.
|
|
4
|
+
// These classes are provided for prototyping, inspector experimentation,
|
|
5
|
+
// and demo HTML only. In production, apply the corresponding mixin to a
|
|
6
|
+
// semantic selector:
|
|
7
|
+
//
|
|
8
|
+
// #add-user { @include btn; }
|
|
9
|
+
// #users-table ul { @include btn-group; }
|
|
10
|
+
//
|
|
11
|
+
// See CLAUDE.md "Button Architecture" and "Button Groups vs Pill Groups"
|
|
12
|
+
// for the production pattern.
|
|
13
|
+
|
|
14
|
+
.btn { @include btn; }
|
|
15
|
+
.btn-sm { @include btn-sm; }
|
|
16
|
+
.btn-lg { @include btn-lg; }
|
|
17
|
+
|
|
18
|
+
.btn-group {
|
|
19
|
+
@include btn-group;
|
|
20
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-circular-progress] {
|
|
4
|
+
@include circular-progress;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-ln-circular-progress].sm {
|
|
8
|
+
@include circular-progress-sm;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[data-ln-circular-progress].lg {
|
|
12
|
+
@include circular-progress-lg;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[data-ln-circular-progress].xl {
|
|
16
|
+
@include circular-progress-xl;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-ln-circular-progress].success .ln-circular-progress__fill {
|
|
20
|
+
stroke: hsl(var(--color-success));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
[data-ln-circular-progress].error .ln-circular-progress__fill {
|
|
24
|
+
stroke: hsl(var(--color-error));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[data-ln-circular-progress].warning .ln-circular-progress__fill {
|
|
28
|
+
stroke: hsl(var(--color-warning));
|
|
29
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-data-table] {
|
|
4
|
+
@include data-table;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// ─── Sort indicators ──────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
[data-ln-col-sort] {
|
|
10
|
+
@include data-table-sort-button;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
th:hover [data-ln-col-sort] {
|
|
14
|
+
opacity: 0.7;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ln-sort-asc [data-ln-col-sort],
|
|
18
|
+
.ln-sort-desc [data-ln-col-sort] {
|
|
19
|
+
@include data-table-sort-active;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Active-state icon swap — hide the neutral dual-arrow, show the
|
|
23
|
+
// matching directional icon. Mixin defaults all three to "none shown,
|
|
24
|
+
// asc/desc hidden"; we override per active class.
|
|
25
|
+
.ln-sort-asc [data-ln-col-sort] {
|
|
26
|
+
[data-ln-sort-icon="none"] { display: none; }
|
|
27
|
+
[data-ln-sort-icon="asc"] { display: inline-block; }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ln-sort-desc [data-ln-col-sort] {
|
|
31
|
+
[data-ln-sort-icon="none"] { display: none; }
|
|
32
|
+
[data-ln-sort-icon="desc"] { display: inline-block; }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ─── Filter button ────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
[data-ln-col-filter] {
|
|
38
|
+
@include data-table-filter-button;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
th:hover [data-ln-col-filter] {
|
|
42
|
+
opacity: 0.7;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.ln-filter-active {
|
|
46
|
+
@include data-table-filter-active;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ─── Filter dropdown ──────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
.column-filter-dropdown {
|
|
52
|
+
@include data-table-filter-dropdown;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ─── Row action buttons ─────────────────────────────────
|
|
56
|
+
|
|
57
|
+
[data-ln-row-action] {
|
|
58
|
+
@include data-table-row-action;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
[data-ln-row-action="delete"] {
|
|
62
|
+
@include data-table-row-action-delete;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ─── Row interaction states ─────────────────────────────
|
|
66
|
+
|
|
67
|
+
[data-ln-row] {
|
|
68
|
+
@include data-table-row;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ln-row-selected {
|
|
72
|
+
@include data-table-row-selected;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.ln-row-focused {
|
|
76
|
+
@include data-table-row-focused;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ─── Virtual-scroll spacer ──────────────────────────────
|
|
80
|
+
|
|
81
|
+
.ln-data-table__spacer {
|
|
82
|
+
@include data-table-spacer-row;
|
|
83
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-dropdown] {
|
|
4
|
+
@include dropdown;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-ln-dropdown-menu] {
|
|
8
|
+
@include dropdown-menu;
|
|
9
|
+
|
|
10
|
+
// Reset right-alignment when teleported to body to prevent 100% width stretching
|
|
11
|
+
body > & {
|
|
12
|
+
right: auto;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@keyframes ln-dropdown-in {
|
|
17
|
+
from {
|
|
18
|
+
opacity: 0;
|
|
19
|
+
transform: translateY(-4px) scale(0.98);
|
|
20
|
+
}
|
|
21
|
+
to {
|
|
22
|
+
opacity: 1;
|
|
23
|
+
transform: translateY(0) scale(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-empty-state] {
|
|
4
|
+
@include empty-state;
|
|
5
|
+
|
|
6
|
+
svg.ln-icon,
|
|
7
|
+
svg.ln-icon--xl {
|
|
8
|
+
--color-fg: var(--fg-subtle);
|
|
9
|
+
color: var(--color-fg);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
h3 {
|
|
13
|
+
@include typography(heading-sm);
|
|
14
|
+
color: var(--color-fg);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
p {
|
|
18
|
+
@include typography(body-md);
|
|
19
|
+
--color-fg: var(--fg-muted);
|
|
20
|
+
color: var(--color-fg);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// ─── Inputs ─────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
input,
|
|
6
|
+
textarea,
|
|
7
|
+
select {
|
|
8
|
+
@include form-input;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
textarea {
|
|
12
|
+
@include form-textarea;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
select {
|
|
16
|
+
@include form-select;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// ─── Checkbox & Radio ───────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
input[type="checkbox"] {
|
|
22
|
+
@include form-checkbox;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
input[type="radio"] {
|
|
26
|
+
@include form-radio;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ─── Icon input group ───────────────────────────────────────────
|
|
30
|
+
// Semantic trigger: any <label> that directly contains a <svg class="ln-icon">
|
|
31
|
+
// AND a text-ish <input>. Excludes checkbox/radio/file/button types via the
|
|
32
|
+
// :is() allowlist.
|
|
33
|
+
|
|
34
|
+
label:has(> .ln-icon):has(> :is(
|
|
35
|
+
input[type="text"],
|
|
36
|
+
input[type="search"],
|
|
37
|
+
input[type="email"],
|
|
38
|
+
input[type="url"],
|
|
39
|
+
input[type="tel"],
|
|
40
|
+
input[type="password"],
|
|
41
|
+
input[type="number"]
|
|
42
|
+
)) {
|
|
43
|
+
@include form-input-icon-group;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ─── Label & Actions ────────────────────────────────────────────
|
|
47
|
+
|
|
48
|
+
// Non-wrapping labels only — the label sits above/beside its input, not
|
|
49
|
+
// around it. The icon-group pattern owns its full styling and must not
|
|
50
|
+
// inherit block + margin-bottom from here.
|
|
51
|
+
label:not(:has(> input)) {
|
|
52
|
+
@include form-label;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ─── Pill groups — radio & checkbox lists ──────────────────────────
|
|
56
|
+
// Clean class-driven segmented controls and switch panels.
|
|
57
|
+
// No <fieldset> tag dependency to prevent layout collisions.
|
|
58
|
+
|
|
59
|
+
.pills {
|
|
60
|
+
@include pills;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.pills-outline {
|
|
64
|
+
@include pills-outline;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.pills-switch {
|
|
68
|
+
@include pills-switch;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.pill {
|
|
72
|
+
@include pill;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.pill-outline {
|
|
76
|
+
@include pill-outline;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.pill-switch {
|
|
80
|
+
@include pill-switch;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
.form-actions {
|
|
85
|
+
@include form-actions;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// ─── Validation states ─────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
.ln-validate-invalid {
|
|
91
|
+
@include form-validate-invalid;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.ln-validate-valid {
|
|
95
|
+
@include form-validate-valid;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
[data-ln-validate-errors] {
|
|
99
|
+
@include form-validate-errors;
|
|
100
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Prototype-tier class bindings for layout mixins. Production code
|
|
4
|
+
// applies @include on semantic selectors — this class exists for
|
|
5
|
+
// rapid prototyping and inspector experimentation.
|
|
6
|
+
.flat-stack {
|
|
7
|
+
@include flat-stack;
|
|
8
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-table] {
|
|
4
|
+
@include ln-table;
|
|
5
|
+
@include ln-table-column-filter;
|
|
6
|
+
@include ln-table-sort;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// In-thead toolbar — first thead row's colspan th.
|
|
10
|
+
[data-ln-table] thead > tr:first-child:has(> th[colspan]) > th {
|
|
11
|
+
@include ln-table-thead-toolbar;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.ln-table__toolbar {
|
|
15
|
+
@include ln-table-toolbar;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ln-table__toolbar label:has(> input[type="search"]) > input {
|
|
19
|
+
@include ln-table-toolbar-search;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ln-table__count {
|
|
23
|
+
@include ln-table-count;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.table-container {
|
|
27
|
+
@include ln-table-card-mode;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ln-table__footer {
|
|
31
|
+
@include ln-table-footer;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.ln-table__timing {
|
|
35
|
+
@include ln-table-timing;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.ln-table__filters {
|
|
39
|
+
@include ln-table-filters;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ln-table__chips {
|
|
43
|
+
@include ln-table-chips;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.ln-table__chip {
|
|
47
|
+
@include ln-table-chip;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ln-table__clear-all {
|
|
51
|
+
@include ln-table-clear-all;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.ln-table__empty-state {
|
|
55
|
+
@include ln-table-empty-state;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ln-table__spacer {
|
|
59
|
+
@include ln-table-spacer-row;
|
|
60
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
.ln-modal {
|
|
4
|
+
@include modal-overlay;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.ln-modal > form {
|
|
8
|
+
@include modal-panel;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@keyframes ln-modal-slideIn {
|
|
12
|
+
from {
|
|
13
|
+
transform: translateY(-50px);
|
|
14
|
+
opacity: 0;
|
|
15
|
+
}
|
|
16
|
+
to {
|
|
17
|
+
transform: translateY(0);
|
|
18
|
+
opacity: 1;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Sidebar/top navigation — opt-in via `data-ln-nav` (the same attribute that
|
|
4
|
+
// activates the ln-nav JS highlighter). Scoping to an explicit marker prevents
|
|
5
|
+
// this rule from capturing every other `<nav>` on the page (breadcrumbs,
|
|
6
|
+
// pagination, in-page TOCs, etc.) which have their own styling contracts.
|
|
7
|
+
nav[data-ln-nav] {
|
|
8
|
+
@include nav;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Prototype-tier class — available out of the box for prototyping and
|
|
4
|
+
// inspector experimentation. Production projects apply the mixin on
|
|
5
|
+
// their own semantic selector:
|
|
6
|
+
//
|
|
7
|
+
// #my-header { @include page-header; }
|
|
8
|
+
.page-header {
|
|
9
|
+
@include page-header;
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
.progress {
|
|
4
|
+
@include progress;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-ln-progress].success {
|
|
8
|
+
@include progress-success;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[data-ln-progress].error {
|
|
12
|
+
@include progress-error;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[data-ln-progress].warning {
|
|
16
|
+
@include progress-warning;
|
|
17
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
::-webkit-scrollbar {
|
|
4
|
+
width: 8px;
|
|
5
|
+
height: 8px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
::-webkit-scrollbar-track {
|
|
9
|
+
--color-bg: var(--bg-sunken);
|
|
10
|
+
background: var(--color-bg);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
::-webkit-scrollbar-thumb {
|
|
14
|
+
background-color: var(--color-border);
|
|
15
|
+
border-radius: 4px;
|
|
16
|
+
border: 2px solid transparent;
|
|
17
|
+
background-clip: content-box;
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
--color-fg: var(--fg-subtle);
|
|
21
|
+
background-color: var(--color-fg);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
::-webkit-scrollbar-corner {
|
|
26
|
+
background: transparent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
* {
|
|
30
|
+
scrollbar-width: thin;
|
|
31
|
+
scrollbar-color: var(--color-border) var(--bg-sunken);
|
|
32
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Opt-in only — applying to bare `section` is too greedy.
|
|
4
|
+
// `<section>` is a generic semantic container used all over the place
|
|
5
|
+
// (nested groupings inside cards, split layouts, etc.). Binding to the
|
|
6
|
+
// bare element made every `.section-card` also inherit page-section
|
|
7
|
+
// chrome (header margin, bottom border), causing doubled borders and
|
|
8
|
+
// unwanted gaps. Projects that want page-section styling apply the
|
|
9
|
+
// mixin to their own selector.
|
|
10
|
+
.section {
|
|
11
|
+
@include section;
|
|
12
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
table {
|
|
4
|
+
@include table-base;
|
|
5
|
+
@include table-filter-button;
|
|
6
|
+
|
|
7
|
+
tr.section-header td {
|
|
8
|
+
@include table-section-header;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.table-container {
|
|
13
|
+
@include container(table);
|
|
14
|
+
overflow-x: auto;
|
|
15
|
+
|
|
16
|
+
@container table (max-width: 640px) {
|
|
17
|
+
table { @include table-responsive; }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
// Tabs — underline style
|
|
5
|
+
// ==========================================================================
|
|
6
|
+
|
|
7
|
+
[data-ln-tabs] nav {
|
|
8
|
+
@include tabs-nav;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[data-ln-tabs] [data-ln-tab] {
|
|
12
|
+
@include tabs-tab;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[data-ln-tabs] [data-ln-panel] {
|
|
16
|
+
@include tabs-panel;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-ln-tabs] [data-ln-panel].hidden {
|
|
20
|
+
@include hidden;
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
// Prototype-tier class — available out of the box for prototyping and
|
|
4
|
+
// inspector experimentation. Production projects apply the mixin on
|
|
5
|
+
// their own semantic selector:
|
|
6
|
+
//
|
|
7
|
+
// #audit-log { @include timeline; }
|
|
8
|
+
.timeline {
|
|
9
|
+
@include timeline;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
#audit-log {
|
|
13
|
+
@include timeline;
|
|
14
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-toast] {
|
|
4
|
+
@include toast-container;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-ln-toast] > .ln-toast__item {
|
|
8
|
+
@include toast-item;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[data-ln-toast] > .ln-toast__item--in {
|
|
12
|
+
@include toast-item-in;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.ln-toast__item--out {
|
|
16
|
+
@include toast-item-out;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ln-toast__card {
|
|
20
|
+
@include toast-card;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ln-toast__side {
|
|
24
|
+
@include toast-side;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ln-toast__content {
|
|
28
|
+
@include toast-content;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ln-toast__head {
|
|
32
|
+
@include toast-head;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ln-toast__title {
|
|
36
|
+
@include toast-title;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.ln-toast__body {
|
|
40
|
+
@include toast-body;
|
|
41
|
+
}
|