tiny-essentials 1.29.0 → 1.29.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/changelog/1/29/1.md +11 -0
- package/changelog/1/29/2.md +82 -0
- package/dist/v1/TinyBasicsEs.min.js +1 -1
- package/dist/v1/TinyEssentials.min.js +1 -1
- package/dist/v1/TinyFetchLoader.min.js +1 -0
- package/dist/v1/TinyImageLoader.min.js +1 -0
- package/dist/v1/TinyMediaCache.min.js +1 -0
- package/dist/v1/TinyMediaLoader.min.js +1 -0
- package/dist/v1/basics/index.cjs +5 -0
- package/dist/v1/basics/index.d.mts +2 -1
- package/dist/v1/basics/index.d.mts.map +1 -1
- package/dist/v1/basics/index.mjs +2 -1
- package/dist/v1/basics/media/youtube.cjs +275 -0
- package/dist/v1/basics/media/youtube.d.mts +107 -0
- package/dist/v1/basics/media/youtube.d.mts.map +1 -0
- package/dist/v1/basics/media/youtube.mjs +214 -0
- package/dist/v1/index.cjs +13 -0
- package/dist/v1/index.d.mts +6 -1
- package/dist/v1/index.d.mts.map +1 -1
- package/dist/v1/index.mjs +7 -2
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +0 -1
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +0 -1
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -1
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +0 -1
- package/dist/v1/libs/fs/plugins/OPFS/index.cjs +0 -8
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +0 -8
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -1
- package/dist/v1/libs/fs/plugins/OPFS/index.mjs +0 -8
- package/dist/v1/libs/html/TinyHtml.cjs +1 -1
- package/dist/v1/libs/html/TinyHtml.d.mts +2 -2
- package/dist/v1/libs/html/TinyHtml.d.mts.map +1 -1
- package/dist/v1/libs/html/TinyHtml.mjs +1 -1
- package/dist/v1/libs/html/loader/TinyMediaLoader.cjs +1999 -0
- package/dist/v1/libs/html/loader/TinyMediaLoader.d.mts +999 -0
- package/dist/v1/libs/html/loader/TinyMediaLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/TinyMediaLoader.mjs +1852 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.cjs +77 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.d.mts +103 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.mjs +67 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.cjs +630 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.d.mts +138 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.mjs +576 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.cjs +70 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.d.mts +100 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.mjs +60 -0
- package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.cjs +946 -0
- package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.d.mts +67 -0
- package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.mjs +896 -0
- package/dist/v1/libs/html/loader/formats/TinyFetchLoader.cjs +225 -0
- package/dist/v1/libs/html/loader/formats/TinyFetchLoader.d.mts +149 -0
- package/dist/v1/libs/html/loader/formats/TinyFetchLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/formats/TinyFetchLoader.mjs +197 -0
- package/dist/v1/libs/html/loader/formats/TinyImageLoader.cjs +1454 -0
- package/dist/v1/libs/html/loader/formats/TinyImageLoader.d.mts +200 -0
- package/dist/v1/libs/html/loader/formats/TinyImageLoader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/formats/TinyImageLoader.mjs +1317 -0
- package/dist/v1/libs/html/loader/probe/TinyImageProbe.cjs +668 -0
- package/dist/v1/libs/html/loader/probe/TinyImageProbe.d.mts +83 -0
- package/dist/v1/libs/html/loader/probe/TinyImageProbe.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/probe/TinyImageProbe.mjs +626 -0
- package/dist/v1/libs/html/loader/utils/TinyBufferReader.cjs +277 -0
- package/dist/v1/libs/html/loader/utils/TinyBufferReader.d.mts +118 -0
- package/dist/v1/libs/html/loader/utils/TinyBufferReader.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/utils/TinyBufferReader.mjs +247 -0
- package/dist/v1/libs/html/loader/utils/TinyIsoBox.cjs +128 -0
- package/dist/v1/libs/html/loader/utils/TinyIsoBox.d.mts +49 -0
- package/dist/v1/libs/html/loader/utils/TinyIsoBox.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/utils/TinyIsoBox.mjs +116 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaCache.cjs +796 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaCache.d.mts +354 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaCache.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaCache.mjs +734 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaMirror.cjs +302 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaMirror.d.mts +256 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaMirror.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaMirror.mjs +280 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaProgress.cjs +194 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaProgress.d.mts +138 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaProgress.d.mts.map +1 -0
- package/dist/v1/libs/html/loader/utils/TinyMediaProgress.mjs +175 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +359 -55
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +64 -6
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
- package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +320 -57
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +0 -1
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +0 -1
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -1
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +0 -1
- package/dist/v1/webTemplates/bootstrap/5.3/scss/background/_background-grid.scss +15 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/components/buttons/_buttons-contrast.scss +208 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/components/buttons/_buttons-ghost.scss +89 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/components/icon/_cube-icon.scss +65 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/components/icon/_sphere-pulse.scss +39 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_badges.scss +90 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_bootstrap-overrides.scss +495 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_buttons.scss +390 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_colors.scss +213 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_effects.scss +153 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_forms-tones.scss +69 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_forms.scss +323 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_global.scss +31 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_links.scss +47 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_tables.scss +25 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_theme.scss +21 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_tokens.scss +161 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_utilities.scss +81 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_variables.scss +63 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_form-tone-mixins.scss +236 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_sizing.scss +68 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_tone-mixins.scss +392 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_typography.scss +112 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/background/_tiny_gradient_1.scss +131 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/colors/_pink.scss +47 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +2 -2
- package/docs/v1/Exports.md +33 -2
- package/docs/v1/README.md +9 -0
- package/docs/v1/basics/youtube.md +204 -0
- package/docs/v1/libs/html/loader/TinyFetchLoader.md +114 -0
- package/docs/v1/libs/html/loader/TinyImageLoader.md +141 -0
- package/docs/v1/libs/html/loader/TinyMediaCache.md +166 -0
- package/docs/v1/libs/html/loader/TinyMediaLoader.md +300 -0
- package/docs/v1/libs/tools/TinyPkgExportValidator.md +55 -0
- package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +0 -4
- package/docs/v1/webTemplates/bootstrap/5.3/DeepStrap.md +177 -0
- package/package.json +281 -17
- /package/dist/v1/webTemplates/bootstrap/5.3/scss/input/{Placeholder-Colors-Fix.scss → _placeholder-colors-fix.scss} +0 -0
- /package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/{Spacing-Plus.scss → _spacing-plus.scss} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
@use 'sass:color';
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use 'colors' as *;
|
|
4
|
+
|
|
5
|
+
// ------------------------------------------------------------------ helpers --
|
|
6
|
+
/// @param {Color} $color - Source colour.
|
|
7
|
+
/// @returns {String} Comma separated channels, for legacy `rgba()`.
|
|
8
|
+
@function channels($color) {
|
|
9
|
+
@return #{color.channel($color, 'red', $space: rgb)},
|
|
10
|
+
#{color.channel($color, 'green', $space: rgb)}, #{color.channel($color, 'blue', $space: rgb)};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/// @param {Color} $color - Source colour.
|
|
14
|
+
/// @returns {String} Space separated channels, for `rgb(var(--x) / a)`.
|
|
15
|
+
@function triplet($color) {
|
|
16
|
+
@return #{color.channel($color, 'red', $space: rgb)}
|
|
17
|
+
#{color.channel($color, 'green', $space: rgb)} #{color.channel($color, 'blue', $space: rgb)};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@mixin theme-properties($theme) {
|
|
21
|
+
@each $name, $value in $theme {
|
|
22
|
+
--ui-#{$name}: #{$value};
|
|
23
|
+
--ui-#{$name}-rgb: #{triplet($value)};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
$alphas: (
|
|
28
|
+
'hairline': 0.07,
|
|
29
|
+
'hairline-strong': 0.12,
|
|
30
|
+
'grid-line': 0.022,
|
|
31
|
+
'overlay-1': 0.02,
|
|
32
|
+
'overlay-2': 0.05,
|
|
33
|
+
) !default;
|
|
34
|
+
|
|
35
|
+
/// @param {Map} $alphas - Name to alpha map.
|
|
36
|
+
@mixin alpha-properties($alphas) {
|
|
37
|
+
@each $name, $alpha in $alphas {
|
|
38
|
+
--ui-#{$name}: rgb(var(--ui-heading-rgb) / #{$alpha});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// @param {String} $theme - `dark` or `light`.
|
|
43
|
+
@mixin scrim-properties($theme) {
|
|
44
|
+
--ui-scrim-base: #{triplet(scrim($theme, 'base'))};
|
|
45
|
+
--ui-scrim-caption: #{scrim($theme, 'caption')};
|
|
46
|
+
--ui-scrim-indicator: #{triplet(scrim($theme, 'indicator'))};
|
|
47
|
+
--ui-scrim-ink: #{scrim($theme, 'ink')};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Bridges the active theme into Bootstrap's own custom properties.
|
|
51
|
+
///
|
|
52
|
+
/// @param {Map} $theme - Resolved theme map.
|
|
53
|
+
@mixin bootstrap-bridge($theme) {
|
|
54
|
+
--bs-body-bg: var(--ui-canvas);
|
|
55
|
+
--bs-body-bg-rgb: #{channels(map.get($theme, 'canvas'))};
|
|
56
|
+
--bs-body-color: var(--ui-text);
|
|
57
|
+
--bs-body-color-rgb: var(--ui-text-rgb);
|
|
58
|
+
--bs-emphasis-color: var(--ui-heading);
|
|
59
|
+
--bs-emphasis-color-rgb: var(--ui-heading-rgb);
|
|
60
|
+
--bs-secondary-color: var(--ui-text-muted);
|
|
61
|
+
--bs-secondary-bg: var(--ui-surface);
|
|
62
|
+
--bs-secondary-bg-rgb: #{channels(map.get($theme, 'surface'))};
|
|
63
|
+
--bs-tertiary-bg: var(--ui-surface-raised);
|
|
64
|
+
--bs-tertiary-bg-rgb: #{channels(map.get($theme, 'surface-raised'))};
|
|
65
|
+
--bs-border-color: var(--ui-border);
|
|
66
|
+
--bs-border-color-translucent: var(--ui-hairline);
|
|
67
|
+
--bs-heading-color: var(--ui-heading);
|
|
68
|
+
--bs-link-color: var(--ui-accent);
|
|
69
|
+
--bs-link-color-rgb: var(--ui-accent-rgb);
|
|
70
|
+
--bs-link-hover-color: var(--ui-accent-soft);
|
|
71
|
+
--bs-link-hover-color-rgb: var(--ui-accent-soft-rgb);
|
|
72
|
+
--bs-link-opacity: 1;
|
|
73
|
+
--bs-link-hover-opacity: 1;
|
|
74
|
+
--bs-code-color: var(--ui-info);
|
|
75
|
+
--bs-highlight-bg: rgb(var(--ui-warn-rgb) / 0.24);
|
|
76
|
+
|
|
77
|
+
@each $name, $token in $subtle-tokens {
|
|
78
|
+
--bs-#{$name}: var(--ui-#{$token});
|
|
79
|
+
--bs-#{$name}-rgb: #{channels(map.get($theme, $token))};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
--bs-light: #{palette('slate-050')};
|
|
83
|
+
--bs-light-rgb: #{channels(palette('slate-050'))};
|
|
84
|
+
--bs-dark: #{palette('slate-900')};
|
|
85
|
+
--bs-dark-rgb: #{channels(palette('slate-900'))};
|
|
86
|
+
|
|
87
|
+
@include bootstrap-subtle-bridge();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@mixin bootstrap-subtle-bridge() {
|
|
91
|
+
@each $name, $token in $subtle-tokens {
|
|
92
|
+
--bs-#{$name}-bg-subtle: rgb(var(--ui-#{$token}-rgb) / 0.12);
|
|
93
|
+
--bs-#{$name}-text-emphasis: var(--ui-#{$token});
|
|
94
|
+
--bs-#{$name}-border-subtle: rgb(var(--ui-#{$token}-rgb) / 0.32);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
--bs-light-bg-subtle: var(--ui-surface-raised);
|
|
98
|
+
--bs-light-text-emphasis: var(--ui-heading);
|
|
99
|
+
--bs-light-border-subtle: var(--ui-border);
|
|
100
|
+
|
|
101
|
+
--bs-dark-bg-subtle: var(--ui-canvas);
|
|
102
|
+
--bs-dark-text-emphasis: var(--ui-text);
|
|
103
|
+
--bs-dark-border-subtle: var(--ui-border-strong);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@each $name, $token in $subtle-tokens {
|
|
107
|
+
@include tone-list-group-class($name, $token);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// ------------------------------------------------------------------ shared --
|
|
111
|
+
:root {
|
|
112
|
+
--ui-glass-saturate: 180%;
|
|
113
|
+
--ui-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
114
|
+
--ui-duration: 160ms;
|
|
115
|
+
|
|
116
|
+
--ui-table-header-ink: var(--bs-table-color);
|
|
117
|
+
--ui-neutral-light: #{palette('slate-050')};
|
|
118
|
+
--ui-neutral-light-rgb: #{triplet(palette('slate-050'))};
|
|
119
|
+
--ui-warn-bright: #{palette('amber-500')};
|
|
120
|
+
--ui-btn-mix: #{palette('ink-900')};
|
|
121
|
+
--ui-on-neutral-light: #{palette('slate-950')};
|
|
122
|
+
--ui-neutral-dark: #{palette('slate-900')};
|
|
123
|
+
--ui-neutral-dark-rgb: #{triplet(palette('slate-900'))};
|
|
124
|
+
--ui-on-neutral-dark: #{palette('slate-050')};
|
|
125
|
+
--ui-shade-rgb: #{triplet(palette('ink-000'))};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// -------------------------------------------------------------------- dark --
|
|
129
|
+
:root,
|
|
130
|
+
[data-bs-theme='dark'] {
|
|
131
|
+
color-scheme: dark;
|
|
132
|
+
|
|
133
|
+
@include theme-properties($theme-dark);
|
|
134
|
+
@include alpha-properties($alphas);
|
|
135
|
+
@include scrim-properties('dark');
|
|
136
|
+
|
|
137
|
+
@each $name, $value in $on-dark {
|
|
138
|
+
--ui-on-#{$name}: #{$value};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
--ui-shadow-rgb: #{triplet(map.get($shadow, 'dark'))};
|
|
142
|
+
|
|
143
|
+
@include bootstrap-bridge($theme-dark);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ------------------------------------------------------------------- light --
|
|
147
|
+
[data-bs-theme='light'] {
|
|
148
|
+
color-scheme: light;
|
|
149
|
+
|
|
150
|
+
@include theme-properties($theme-light);
|
|
151
|
+
@include alpha-properties($alphas);
|
|
152
|
+
@include scrim-properties('light');
|
|
153
|
+
|
|
154
|
+
@each $name, $value in $on-light {
|
|
155
|
+
--ui-on-#{$name}: #{$value};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
--ui-shadow-rgb: #{triplet(map.get($shadow, 'light'))};
|
|
159
|
+
|
|
160
|
+
@include bootstrap-bridge($theme-light);
|
|
161
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// ------------------------------------------------------------------- glass --
|
|
2
|
+
.glass,
|
|
3
|
+
.glass-subtle,
|
|
4
|
+
.glass-strong {
|
|
5
|
+
position: relative;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.glass {
|
|
9
|
+
@include glass('default', 'surface');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.glass-subtle {
|
|
13
|
+
@include glass('subtle', 'surface');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.glass-strong {
|
|
17
|
+
@include glass('strong', 'surface');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// --------------------------------------------------------------- elevation --
|
|
21
|
+
@each $level, $shadow in $elevation {
|
|
22
|
+
.elevate-#{$level} {
|
|
23
|
+
box-shadow: $shadow;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// ---------------------------------------------------------------- hairline --
|
|
28
|
+
.hairline {
|
|
29
|
+
border: 1px solid var(--ui-hairline);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.hairline-top {
|
|
33
|
+
box-shadow: inset 0 1px 0 var(--ui-hairline);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.hairline-bottom {
|
|
37
|
+
box-shadow: inset 0 -1px 0 var(--ui-hairline);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ----------------------------------------------------------------- surface --
|
|
41
|
+
.surface {
|
|
42
|
+
background: rgb(var(--ui-surface-rgb) / 0.72);
|
|
43
|
+
border: 1px solid var(--ui-border);
|
|
44
|
+
border-radius: var(--bs-border-radius);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.surface-raised {
|
|
48
|
+
background: rgb(var(--ui-surface-raised-rgb) / 0.72);
|
|
49
|
+
border: 1px solid var(--ui-border);
|
|
50
|
+
border-radius: var(--bs-border-radius);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// -------------------------------------------------------------------- text --
|
|
54
|
+
.text-gradient {
|
|
55
|
+
color: transparent;
|
|
56
|
+
background: linear-gradient(135deg, var(--ui-accent-soft), var(--ui-info));
|
|
57
|
+
background-clip: text;
|
|
58
|
+
-webkit-background-clip: text;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.text-balance {
|
|
62
|
+
text-wrap: balance;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ------------------------------------------------------------------- focus --
|
|
66
|
+
.ring-accent {
|
|
67
|
+
box-shadow: 0 0 0 3px rgb(var(--ui-accent-rgb) / 0.22);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.glow-accent {
|
|
71
|
+
box-shadow: 0 8px 32px -12px rgb(var(--ui-accent-rgb) / 0.9);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ------------------------------------------------------------------ motion --
|
|
75
|
+
@media (prefers-reduced-motion: reduce) {
|
|
76
|
+
.glass,
|
|
77
|
+
.glass-subtle,
|
|
78
|
+
.glass-strong {
|
|
79
|
+
transition: none;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
@use 'colors' as *;
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------- typography --
|
|
4
|
+
$line-height-base: 1.5;
|
|
5
|
+
|
|
6
|
+
// -------------------------------------------------------------- brand colors --
|
|
7
|
+
$primary: theme-color('accent');
|
|
8
|
+
$secondary: theme-color('text-muted');
|
|
9
|
+
$success: theme-color('success');
|
|
10
|
+
$danger: theme-color('error');
|
|
11
|
+
$warning: theme-color('warn');
|
|
12
|
+
$info: theme-color('info');
|
|
13
|
+
$dark: palette('slate-900');
|
|
14
|
+
$light: palette('slate-050');
|
|
15
|
+
|
|
16
|
+
// --------------------------------------------------------------------- body --
|
|
17
|
+
$enable-dark-mode: false;
|
|
18
|
+
$body-bg: theme-color('canvas');
|
|
19
|
+
$body-color: theme-color('text');
|
|
20
|
+
$body-secondary-color: theme-color('text-muted');
|
|
21
|
+
$body-emphasis-color: theme-color('heading');
|
|
22
|
+
$body-tertiary-color: theme-color('text-muted');
|
|
23
|
+
$border-color: theme-color('border');
|
|
24
|
+
$border-color-translucent: rgba(theme-color('border'), 0.55);
|
|
25
|
+
$code-color: theme-color('info');
|
|
26
|
+
|
|
27
|
+
// ------------------------------------------------------------------ shapes ---
|
|
28
|
+
$border-radius: 10px;
|
|
29
|
+
$border-radius-sm: 6px;
|
|
30
|
+
$border-radius-lg: 14px;
|
|
31
|
+
|
|
32
|
+
// ------------------------------------------------------------------ inputs ---
|
|
33
|
+
$input-bg: theme-color('input');
|
|
34
|
+
$input-color: theme-color('text');
|
|
35
|
+
$input-border-color: theme-color('border');
|
|
36
|
+
$input-focus-bg: theme-color('input');
|
|
37
|
+
$input-focus-color: theme-color('text');
|
|
38
|
+
$input-focus-border-color: theme-color('accent');
|
|
39
|
+
$input-placeholder-color: theme-color('text-muted');
|
|
40
|
+
|
|
41
|
+
// ----------------------------------------------------------------- buttons ---
|
|
42
|
+
$btn-focus-width: 2px;
|
|
43
|
+
|
|
44
|
+
// --------------------------------------------------------------- focus ring --
|
|
45
|
+
$focus-ring-color: rgba(theme-color('accent'), 0.5);
|
|
46
|
+
$focus-ring-width: 2px;
|
|
47
|
+
|
|
48
|
+
$colors: (
|
|
49
|
+
'blue': palette('indigo-500'),
|
|
50
|
+
'indigo': palette('indigo-500'),
|
|
51
|
+
'purple': palette('indigo-700'),
|
|
52
|
+
'pink': palette('red-500'),
|
|
53
|
+
'red': palette('red-500'),
|
|
54
|
+
'orange': palette('amber-500'),
|
|
55
|
+
'yellow': palette('amber-500'),
|
|
56
|
+
'green': palette('green-500'),
|
|
57
|
+
'teal': palette('cyan-500'),
|
|
58
|
+
'cyan': palette('cyan-500'),
|
|
59
|
+
'black': palette('ink-000'),
|
|
60
|
+
'white': palette('paper-000'),
|
|
61
|
+
'gray': palette('slate-400'),
|
|
62
|
+
'gray-dark': palette('slate-600'),
|
|
63
|
+
);
|
package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_form-tone-mixins.scss
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Form tone mixins
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
@use 'sass:string';
|
|
6
|
+
@use 'sass:map';
|
|
7
|
+
@use 'sass:color';
|
|
8
|
+
@use 'sass:meta';
|
|
9
|
+
|
|
10
|
+
/// Picks black or white for a mark drawn on top of `$background`.
|
|
11
|
+
///
|
|
12
|
+
/// Uses the WCAG relative luminance coefficients, so the result matches the
|
|
13
|
+
/// perceived brightness instead of the naive channel average.
|
|
14
|
+
///
|
|
15
|
+
/// @param {Color} $background - Colour the mark is painted on.
|
|
16
|
+
/// @return {Color} `#000000` or `#ffffff`.
|
|
17
|
+
@function form-mark-contrast($background) {
|
|
18
|
+
@if meta.type-of($background) != 'color' {
|
|
19
|
+
@error 'Expected a colour, got `#{meta.type-of($background)}`.';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
$luminance: color.channel($background, 'red', $space: rgb) * 0.2126 +
|
|
23
|
+
color.channel($background, 'green', $space: rgb) * 0.7152 +
|
|
24
|
+
color.channel($background, 'blue', $space: rgb) * 0.0722;
|
|
25
|
+
|
|
26
|
+
@return if($luminance > 140, #000000, #ffffff);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// Builds the `background-image` used by a checked checkbox.
|
|
30
|
+
///
|
|
31
|
+
/// Accepts a colour or a hex string, so it can be fed either by a palette
|
|
32
|
+
/// entry or by `form-mark-contrast()`.
|
|
33
|
+
///
|
|
34
|
+
/// @param {Color|String} $color - Hex colour, with or without the leading `#`.
|
|
35
|
+
/// @return {String} A `url()` with the URL-encoded SVG.
|
|
36
|
+
@function form-mark-url($color) {
|
|
37
|
+
$value: #{$color};
|
|
38
|
+
|
|
39
|
+
@if string.slice($value, 1, 1) != '#' {
|
|
40
|
+
@error 'Expected a hex colour, got `#{$color}`.';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
$hex: string.slice($value, 2);
|
|
44
|
+
|
|
45
|
+
@if string.length($hex) != 6 {
|
|
46
|
+
@error 'Expected a 6-digit hex colour, got `#{$color}`.';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@return url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23#{$hex}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// Re-points the three `--form-*` properties to a tone.
|
|
53
|
+
///
|
|
54
|
+
/// @param {String} $tone - Token suffix, without the `--ui-` prefix.
|
|
55
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
56
|
+
@mixin form-tone-properties($tone, $on: $tone) {
|
|
57
|
+
--form-tone: var(--ui-#{$tone});
|
|
58
|
+
--form-tone-rgb: var(--ui-#{$tone}-rgb);
|
|
59
|
+
--form-tone-on: var(--ui-on-#{$on});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
63
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
64
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
65
|
+
@mixin form-select-tone($name, $tone: $name, $on: $tone) {
|
|
66
|
+
.form-select-#{$name} {
|
|
67
|
+
@include form-tone-properties($tone, $on);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
72
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
73
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
74
|
+
/// @param {String|null} $mark - Hex colour of the checkmark. `null` keeps the
|
|
75
|
+
/// Bootstrap default (white).
|
|
76
|
+
@mixin form-check-tone($name, $tone: $name, $on: $tone, $mark: null) {
|
|
77
|
+
.form-check-#{$name},
|
|
78
|
+
.form-check-input-#{$name} {
|
|
79
|
+
@include form-tone-properties($tone, $on);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@if $mark != null {
|
|
83
|
+
$mark-url: form-mark-url($mark);
|
|
84
|
+
|
|
85
|
+
.form-check-#{$name}:not(.form-switch) .form-check-input:checked[type='checkbox'],
|
|
86
|
+
.form-check-input-#{$name}:checked[type='checkbox']:not(.form-switch .form-check-input) {
|
|
87
|
+
background-image: $mark-url;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
93
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
94
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
95
|
+
@mixin form-range-tone($name, $tone: $name, $on: $tone) {
|
|
96
|
+
.form-range-#{$name} {
|
|
97
|
+
@include form-tone-properties($tone, $on);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
102
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
103
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
104
|
+
@mixin form-control-tone($name, $tone: $name, $on: $tone) {
|
|
105
|
+
.form-control-#{$name} {
|
|
106
|
+
@include form-tone-properties($tone, $on);
|
|
107
|
+
|
|
108
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
109
|
+
|
|
110
|
+
&:hover:not(:disabled):not(:focus) {
|
|
111
|
+
border-color: color-mix(in srgb, var(--form-tone) 65%, transparent);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
117
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
118
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
119
|
+
@mixin form-control-color-tone($name, $tone: $name, $on: $tone) {
|
|
120
|
+
.form-control-color-#{$name} {
|
|
121
|
+
@include form-tone-properties($tone, $on);
|
|
122
|
+
|
|
123
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
124
|
+
|
|
125
|
+
&::-webkit-color-swatch-wrapper {
|
|
126
|
+
border-radius: inherit;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
&::-webkit-color-swatch {
|
|
130
|
+
border: 0;
|
|
131
|
+
border-radius: calc(var(--bs-border-radius-sm) - 2px);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
&:hover:not(:disabled):not(:focus) {
|
|
135
|
+
border-color: color-mix(in srgb, var(--form-tone) 65%, transparent);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
141
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
142
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
143
|
+
@mixin form-file-tone($name, $tone: $name, $on: $tone) {
|
|
144
|
+
.form-file-#{$name} {
|
|
145
|
+
@include form-tone-properties($tone, $on);
|
|
146
|
+
|
|
147
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
148
|
+
|
|
149
|
+
&::file-selector-button {
|
|
150
|
+
color: var(--form-tone);
|
|
151
|
+
background-color: rgb(var(--form-tone-rgb) / 0.12);
|
|
152
|
+
border-inline-end: 1px solid color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
153
|
+
transition: background-color var(--ui-duration) var(--ui-ease);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
&:hover:not(:disabled)::file-selector-button {
|
|
157
|
+
background-color: rgb(var(--form-tone-rgb) / 0.2);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
&:focus {
|
|
161
|
+
border-color: var(--form-tone);
|
|
162
|
+
box-shadow: 0 0 0 3px rgb(var(--form-tone-rgb) / 0.2);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
168
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
169
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
170
|
+
@mixin form-input-group-tone($name, $tone: $name, $on: $tone) {
|
|
171
|
+
.input-group-#{$name} {
|
|
172
|
+
@include form-tone-properties($tone, $on);
|
|
173
|
+
|
|
174
|
+
> .input-group-text {
|
|
175
|
+
color: var(--form-tone);
|
|
176
|
+
background-color: rgb(var(--form-tone-rgb) / 0.12);
|
|
177
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
> .form-control,
|
|
181
|
+
> .form-select {
|
|
182
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
183
|
+
|
|
184
|
+
&:focus {
|
|
185
|
+
border-color: var(--form-tone);
|
|
186
|
+
box-shadow: 0 0 0 3px rgb(var(--form-tone-rgb) / 0.2);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
193
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
194
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
195
|
+
@mixin form-floating-tone($name, $tone: $name, $on: $tone) {
|
|
196
|
+
.form-floating-#{$name} {
|
|
197
|
+
@include form-tone-properties($tone, $on);
|
|
198
|
+
|
|
199
|
+
> .form-control,
|
|
200
|
+
> .form-select {
|
|
201
|
+
border-color: color-mix(in srgb, var(--form-tone) 45%, transparent);
|
|
202
|
+
|
|
203
|
+
&:focus {
|
|
204
|
+
border-color: var(--form-tone);
|
|
205
|
+
box-shadow: 0 0 0 3px rgb(var(--form-tone-rgb) / 0.2);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
> label {
|
|
210
|
+
color: color-mix(in srgb, var(--form-tone) 70%, var(--ui-text-muted));
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
> .form-control:focus ~ label,
|
|
214
|
+
> .form-select:focus ~ label {
|
|
215
|
+
color: var(--form-tone);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/// Emits every form control variant for a single tone.
|
|
221
|
+
///
|
|
222
|
+
/// @param {String} $name - Class suffix, e.g. `pink`.
|
|
223
|
+
/// @param {String} $tone - Token suffix for `--ui-*`.
|
|
224
|
+
/// @param {String} $on - Token suffix for `--ui-on-*`.
|
|
225
|
+
/// @param {String|null} $mark - Hex colour of the checkmark. `null` keeps the
|
|
226
|
+
/// Bootstrap default (white).
|
|
227
|
+
@mixin form-tone-plugin($name, $tone: $name, $on: $tone, $mark: null) {
|
|
228
|
+
@include form-control-tone($name, $tone, $on);
|
|
229
|
+
@include form-control-color-tone($name, $tone, $on);
|
|
230
|
+
@include form-file-tone($name, $tone, $on);
|
|
231
|
+
@include form-select-tone($name, $tone, $on);
|
|
232
|
+
@include form-check-tone($name, $tone, $on, $mark);
|
|
233
|
+
@include form-range-tone($name, $tone, $on);
|
|
234
|
+
@include form-input-group-tone($name, $tone, $on);
|
|
235
|
+
@include form-floating-tone($name, $tone, $on);
|
|
236
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Compact sizing (opt-in)
|
|
3
|
+
//
|
|
4
|
+
// Spacing, dimensions and radii only. Colours, backgrounds, animations and
|
|
5
|
+
// transitions stay in the base theme: they are identity, not density.
|
|
6
|
+
//
|
|
7
|
+
// Enable: add `@import 'plugins/sizing-compact';` to _theme.scss.
|
|
8
|
+
// =============================================================================
|
|
9
|
+
|
|
10
|
+
// ------------------------------------------------------------------ navbar --
|
|
11
|
+
.navbar {
|
|
12
|
+
--bs-navbar-padding-y: 0.75rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// ------------------------------------------------------------------ button --
|
|
16
|
+
.btn {
|
|
17
|
+
--bs-btn-padding-y: 0.5rem;
|
|
18
|
+
--bs-btn-padding-x: 0.875rem;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// ---------------------------------------------------------------- dropdown --
|
|
22
|
+
.dropdown-menu {
|
|
23
|
+
padding: 0.3125rem;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// ------------------------------------------------------------------- badge --
|
|
27
|
+
.badge {
|
|
28
|
+
--bs-badge-padding-y: 0.3125rem;
|
|
29
|
+
--bs-badge-padding-x: 0.5rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ------------------------------------------------------------------- forms --
|
|
33
|
+
.form-label,
|
|
34
|
+
.col-form-label {
|
|
35
|
+
margin-bottom: 0.25rem;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.form-control-color {
|
|
39
|
+
width: 2.75rem;
|
|
40
|
+
padding: 0.25rem;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.form-floating > .form-control,
|
|
44
|
+
.form-floating > .form-select {
|
|
45
|
+
height: calc(3rem + 2px);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ---------------------------------------------------------------- carousel --
|
|
49
|
+
.carousel-caption {
|
|
50
|
+
padding: 2.5rem 1.25rem 1rem;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.carousel-indicators [data-bs-target] {
|
|
54
|
+
width: 24px;
|
|
55
|
+
height: 3px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.carousel-control-prev,
|
|
59
|
+
.carousel-control-next {
|
|
60
|
+
width: 3rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ----------------------------------------------------------------- spinner --
|
|
64
|
+
.spinner-border-sm,
|
|
65
|
+
.spinner-grow-sm {
|
|
66
|
+
--bs-spinner-width: 0.875rem;
|
|
67
|
+
--bs-spinner-height: 0.875rem;
|
|
68
|
+
}
|