@splendidlabz/styles 4.0.0-alpha.1 → 4.0.0-beta.3

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 (62) hide show
  1. package/package.json +4 -8
  2. package/src/components/astro/fancylist.css +28 -0
  3. package/src/components/astro/index.css +2 -0
  4. package/src/{primitives → components/css}/card.css +8 -3
  5. package/src/{primitives → components/css}/indent-list.css +6 -6
  6. package/src/{primitives → components/css}/prose.css +17 -9
  7. package/src/{effects/stroke.css → components/css/simple-svg.css} +10 -0
  8. package/src/{primitives → components/css}/table.css +12 -3
  9. package/src/components/css/writing-mode.css +41 -0
  10. package/src/components/index.css +3 -6
  11. package/src/components/svelte/breadcrumbs.css +31 -0
  12. package/src/components/{browserframe.css → svelte/browserframe.css} +6 -6
  13. package/src/components/svelte/callout.css +33 -0
  14. package/src/components/svelte/index.css +10 -0
  15. package/src/components/svelte/resizer.css +44 -0
  16. package/src/components/svelte/status.css +37 -0
  17. package/src/components/{tabs.css → svelte/tabs.css} +2 -2
  18. package/src/effects/gradients.css +10 -6
  19. package/src/effects/index.css +1 -1
  20. package/src/{addons → effects}/scrollbars.css +25 -5
  21. package/src/effects/shadows.css +116 -0
  22. package/src/effects/text.css +37 -5
  23. package/src/form/checkbox-and-radio.css +1 -1
  24. package/src/form/input.css +2 -2
  25. package/src/form/textarea.css +1 -0
  26. package/src/generic/anchors-and-buttons.css +3 -2
  27. package/src/generic/form.css +2 -2
  28. package/src/layouts/macro/{flex-grid.css → grid-flex.css} +8 -7
  29. package/src/layouts/macro/grid.css +5 -12
  30. package/src/layouts/macro/index.css +1 -1
  31. package/src/layouts/macro/subgrid.css +3 -4
  32. package/src/layouts/macro/wrap.css +1 -1
  33. package/src/layouts/micro/breakout.css +14 -7
  34. package/src/layouts/micro/divider.css +3 -12
  35. package/src/layouts/micro/micro.css +0 -6
  36. package/src/layouts/micro/scrollable.css +2 -14
  37. package/src/layouts/micro/stack.css +1 -0
  38. package/src/layouts/position/edge.css +264 -25
  39. package/src/layouts/position/fixed.css +57 -30
  40. package/src/layouts/position/nudge.css +47 -28
  41. package/src/layouts/position/pos.css +51 -69
  42. package/src/layouts/position/sticky.css +6 -2
  43. package/src/layouts/shell/shell-grid.css +1 -1
  44. package/src/styles.css +1 -1
  45. package/src/tools/border.css +53 -3
  46. package/src/tools/outlines.css +13 -25
  47. package/src/tools/pigment.css +2 -2
  48. package/src/variables/variables.css +3 -3
  49. package/src/addons/index.css +0 -1
  50. package/src/astro/index.css +0 -1
  51. package/src/primitives/simple-svg.css +0 -7
  52. package/src/primitives/writing-mode.css +0 -51
  53. /package/src/{astro → components/astro}/textwall.css +0 -0
  54. /package/src/{primitives → components/css}/break-word.css +0 -0
  55. /package/src/{primitives → components/css}/hero-heading.css +0 -0
  56. /package/src/{primitives → components/css}/index.css +0 -0
  57. /package/src/{primitives → components/css}/shapes.css +0 -0
  58. /package/src/{primitives → components/css}/text.css +0 -0
  59. /package/src/components/{accordion.css → svelte/accordion.css} +0 -0
  60. /package/src/components/{drawer.css → svelte/drawer.css} +0 -0
  61. /package/src/components/{modal.css → svelte/modal.css} +0 -0
  62. /package/src/components/{popover.css → svelte/popover.css} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splendidlabz/styles",
3
- "version": "4.0.0-alpha.1",
3
+ "version": "4.0.0-beta.3",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "author": "Zell Liew <zellwk@gmail.com>",
@@ -10,12 +10,8 @@
10
10
  ],
11
11
  "exports": {
12
12
  ".": "./src/styles.css",
13
- "./astro": "./src/astro/index.css",
14
13
  "./components": "./src/components/index.css",
15
- "./addons": "./src/addons/index.css",
16
- "./no-tw": "./dist/no-tw/styles.css",
17
- "./no-tw/*": "./dist/no-tw/*.css",
18
- "./*": "./src/*.css",
14
+ "./layouts/no-tw": "./dist/no-tw/styles.css",
19
15
  "./scripts": "./scripts/index.js"
20
16
  },
21
17
  "scripts": {
@@ -27,10 +23,10 @@
27
23
  "build": "npm run build-styles & npm run build-layouts"
28
24
  },
29
25
  "dependencies": {
30
- "@splendidlabz/utils": "1.5.0-alpha.4"
26
+ "@splendidlabz/utils": "1.5.0-beta.5"
31
27
  },
32
28
  "devDependencies": {
33
- "@splendidlabz/stylelint-config": "3.0.0-alpha.4",
29
+ "@splendidlabz/stylelint-config": "3.0.0-beta.5",
34
30
  "@tailwindcss/cli": "^4.1.3",
35
31
  "lightningcss-cli": "^1.29.3",
36
32
  "tailwindcss": "^4.1.3",
@@ -0,0 +1,28 @@
1
+ @utility fancylist {
2
+ & {
3
+ --svg-width: 1em;
4
+ --svg-height: 1lh;
5
+ display: grid;
6
+ grid-template-columns: auto 1fr;
7
+ column-gap: 0.5em;
8
+
9
+ :where(li) {
10
+ grid-column: 1 / -1;
11
+ display: grid;
12
+ grid-template-columns: subgrid;
13
+
14
+ /* Positions the Emoji */
15
+
16
+ /* This is kind of brute-forced at the moment. */
17
+ :where(.emoji),
18
+ > :where(astro-slot, astro-island) > :where(.emoji) {
19
+ font-size: 0.75em;
20
+ line-height: 1lh;
21
+ }
22
+ }
23
+ }
24
+
25
+ .prose & {
26
+ margin-left: 0;
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ @import './textwall.css';
2
+ @import './fancylist.css';
@@ -1,6 +1,6 @@
1
1
  @utility card {
2
2
  & {
3
- padding: var(--padding, 1rem);
3
+ padding: var(--padding, 1rlh);
4
4
  border: var(--border-width) var(--border-style) var(--border-color);
5
5
  border-radius: var(--radius);
6
6
  }
@@ -12,8 +12,13 @@
12
12
 
13
13
  > *,
14
14
  :where(astro-slot, astro-island, astro-content) > * {
15
- margin: var(--nudge, 0);
16
- padding: var(--padding, 1rem);
15
+ @apply nudge;
16
+ padding: var(--padding, 1rlh);
17
+ }
18
+
19
+ /* Inner Card Split */
20
+ > .card-split {
21
+ border: 0;
17
22
  }
18
23
 
19
24
  &.card-split {
@@ -1,5 +1,5 @@
1
- @utility indent-list-scaffold {
2
- --indent-list-depth: 0;
1
+ @utility indentlist-scaffold {
2
+ --indentlist-depth: 0;
3
3
 
4
4
  li li {
5
5
  margin-inline-start: var(--indent, 1em);
@@ -35,17 +35,17 @@
35
35
  }
36
36
  }
37
37
 
38
- @utility indent-list {
39
- @apply indent-list-scaffold;
38
+ @utility indentlist {
39
+ @apply indentlist-scaffold;
40
40
 
41
41
  li {
42
42
  list-style-type: disc;
43
43
  }
44
44
  }
45
45
 
46
- @utility indent-list-guides {
46
+ @utility indentlist-guides {
47
47
  & {
48
- @apply indent-list-scaffold;
48
+ @apply indentlist-scaffold;
49
49
 
50
50
  li li {
51
51
  position: relative;
@@ -6,21 +6,29 @@
6
6
  max-width: 100%;
7
7
 
8
8
  /* Using padding instead of margin, so #targets will leave some whitespace above when scrolling to the component. (We can also use scroll-margin-top + margin-top... but this is simpler). */
9
- * + :where(h2, h3),
10
- * + :where(astro-island, astro-slot) > :where(:where(h2, h3):first-child) {
11
- margin-top: 2lh;
12
- scroll-margin-top: 2lh;
9
+ > * + :where(h2),
10
+ > * + :where(astro-island, astro-slot) > :where(:where(h2):first-child) {
11
+ margin-top: 1.5rlh;
12
+ scroll-margin-top: 1.5rlh;
13
13
  }
14
14
 
15
- * + :where(h4, h5, h6),
16
- *
15
+ > * + :where(h3),
16
+ > * + :where(astro-island, astro-slot) > :where(:where(h3):first-child) {
17
+ margin-top: 1rlh;
18
+ margin-bottom: -0.5rlh;
19
+ scroll-margin-top: 1rlh;
20
+ }
21
+
22
+ > * + :where(h4, h5, h6),
23
+ > *
17
24
  + :where(astro-island, astro-slot)
18
25
  > :where(:where(h4, h5, h6):first-child) {
19
- margin-top: 1lh;
20
- scroll-margin-top: 2lh;
26
+ margin-top: 1rlh;
27
+ margin-bottom: -1rlh;
28
+ scroll-margin-top: 1rlh;
21
29
  }
22
30
 
23
- :where(ul, ol) {
31
+ :where(ul) {
24
32
  list-style-type: initial;
25
33
  }
26
34
 
@@ -1,3 +1,13 @@
1
+ /* stylelint-disable declaration-block-no-duplicate-custom-properties */
2
+
3
+ @utility simple-svg {
4
+ * {
5
+ fill: var(--fill-color);
6
+ stroke: var(--stroke-color); /* Fallback to text color */
7
+ stroke-width: var(--stroke-width);
8
+ }
9
+ }
10
+
1
11
  /*********************
2
12
  * Stroke *
3
13
  * Allows spl-stroke-<length> to create --stroke-width
@@ -47,9 +47,18 @@
47
47
  }
48
48
 
49
49
  @utility table-cell {
50
- text-align: left;
51
- padding: var(--padding, var(--padding-x, 0.375rem))
52
- var(--padding, var(--padding-y, 0.5rem));
50
+ --cell-padding-x: 0.5rlh;
51
+ --cell-padding-y: 0.5rlh;
52
+
53
+ & {
54
+ padding-block: var(--cell-padding-y);
55
+ padding-inline-end: var(--cell-padding-x);
56
+ text-align: left;
57
+
58
+ &:last-child {
59
+ padding-inline-end: 0;
60
+ }
61
+ }
53
62
  }
54
63
 
55
64
  @utility table-center {
@@ -0,0 +1,41 @@
1
+ @utility writing-normal {
2
+ writing-mode: horizontal-tb;
3
+ }
4
+
5
+ @utility writing-rotate-left {
6
+ & {
7
+ writing-mode: vertical-rl;
8
+ text-orientation: sideways;
9
+
10
+ /* transform: rotate(180deg); */
11
+ /* transform: scale(-1, -1); */
12
+
13
+ /* // This is the alternative if we don't want to use rotate */
14
+ }
15
+ }
16
+
17
+ @utility writing-rotate-right {
18
+ & {
19
+ writing-mode: vertical-rl;
20
+ text-orientation: sideways;
21
+ }
22
+ }
23
+
24
+ @utility writing-downwards {
25
+ & {
26
+ writing-mode: vertical-lr;
27
+ text-orientation: upright;
28
+ }
29
+ }
30
+
31
+ /* Alias for writing-downwards */
32
+ @utility writing-downards-lr {
33
+ @apply writing-downwards;
34
+ }
35
+
36
+ @utility writing-downwards-rl {
37
+ & {
38
+ writing-mode: vertical-rl;
39
+ text-orientation: upright;
40
+ }
41
+ }
@@ -1,6 +1,3 @@
1
- @import './drawer.css';
2
- @import './accordion.css';
3
- @import './popover.css';
4
- @import './modal.css';
5
- @import './tabs.css';
6
- @import './browserframe.css';
1
+ @import './css/index.css';
2
+ @import './astro/index.css';
3
+ @import './svelte/index.css';
@@ -0,0 +1,31 @@
1
+ /*********************
2
+ * Breadcrumbs *
3
+ *********************/
4
+ @utility breadcrumbs {
5
+ :where(ul, ol) {
6
+ @apply flow items-center;
7
+ gap: 0.25em;
8
+ }
9
+ }
10
+
11
+ /*********************
12
+ * Crumb *
13
+ *********************/
14
+
15
+ @layer base {
16
+ .crumb [aria-current] {
17
+ @apply pigment;
18
+ --border-radius: 0;
19
+ --border-color: transparent;
20
+
21
+ /* opacity: 0.7; */
22
+ }
23
+ }
24
+
25
+ @utility crumb {
26
+ & {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: inherit;
30
+ }
31
+ }
@@ -31,7 +31,7 @@ dot-3-color */
31
31
  flex-flow: row;
32
32
  align-items: center;
33
33
  gap: var(--dot-gap, 0.5rem);
34
- padding: var(--dot-padding, 0.5lh 0.75lh);
34
+ padding: var(--dot-padding, 0.75rem 1rem);
35
35
  }
36
36
 
37
37
  .frame-dot {
@@ -67,18 +67,18 @@ dot-3-color */
67
67
  }
68
68
  }
69
69
 
70
- .BrowserFrame-colored {
71
- .FrameHeaderDot {
70
+ @utility browserframe-colored {
71
+ .frame-dot {
72
72
  &:first-child {
73
- background-color: var(--dot-1-color, #e2544d);
73
+ --dot-color: var(--dot-1-color, #e2544d);
74
74
  }
75
75
 
76
76
  &:nth-child(2) {
77
- background-color: var(--dot-2-color, #d79f27);
77
+ --dot-color: var(--dot-2-color, #d79f27);
78
78
  }
79
79
 
80
80
  &:last-child {
81
- background-color: var(--dot-3-color, #22a936);
81
+ --dot-color: var(--dot-3-color, #22a936);
82
82
  }
83
83
  }
84
84
  }
@@ -0,0 +1,33 @@
1
+ /*********************
2
+ * Callout *
3
+ Variables:
4
+ --text-callout-header
5
+ --bg-callout-header
6
+ *********************/
7
+
8
+ @utility callout {
9
+ & {
10
+ @apply border-scaffold;
11
+ font-size: 0.85em;
12
+
13
+ > * {
14
+ padding: 1rem;
15
+ }
16
+
17
+ :where(.callout-header) {
18
+ padding-block: 0.375rem;
19
+ border-bottom: 1px solid var(--divider-color, var(--border-color));
20
+ border-top-left-radius: inherit;
21
+ border-top-right-radius: inherit;
22
+ color: var(--text-callout-header, var(--text-color));
23
+ background: var(--bg-callout-header, var(--bg-color));
24
+ }
25
+
26
+ :where(.callout-content) {
27
+ border-bottom-left-radius: inherit;
28
+ border-bottom-right-radius: inherit;
29
+ color: var(--text-callout-content, var(--text-color));
30
+ background: var(--bg-callout-content, var(--bg-color));
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,10 @@
1
+ @import './accordion.css';
2
+ @import './breadcrumbs.css';
3
+ @import './browserframe.css';
4
+ @import './drawer.css';
5
+ @import './modal.css';
6
+ @import './popover.css';
7
+ @import './tabs.css';
8
+ @import './callout.css';
9
+ @import './status.css';
10
+ @import './resizer.css';
@@ -0,0 +1,44 @@
1
+ @utility resizer {
2
+ --size: 4px;
3
+ background-color: var(--bg-color, transparent);
4
+
5
+ &:hover {
6
+ background-color: var(--bg-hover-color, pink);
7
+ }
8
+ }
9
+
10
+ @utility resizer-horizontal {
11
+ cursor: ew-resize;
12
+ top: 0;
13
+ bottom: 0;
14
+ width: var(--size, 4px);
15
+ }
16
+
17
+ @utility resizer-vertical {
18
+ cursor: ns-resize;
19
+ left: 0;
20
+ right: 0;
21
+ height: var(--size, 4px);
22
+ }
23
+
24
+ @utility resizer-bottom {
25
+ :where([class*='stack']) > & {
26
+ place-self: end stretch;
27
+ }
28
+
29
+ :where([class*='relative']) > & {
30
+ position: absolute;
31
+ bottom: 0;
32
+ }
33
+ }
34
+
35
+ @utility resizer-right {
36
+ :where([class*='stack']) > & {
37
+ place-self: stretch end;
38
+ }
39
+
40
+ :where([class*='relative']) > & {
41
+ position: absolute;
42
+ right: 0;
43
+ }
44
+ }
@@ -0,0 +1,37 @@
1
+ @utility status {
2
+ & {
3
+ @apply border-scaffold;
4
+ margin-top: 1rem;
5
+ padding: 1rem;
6
+ color: var(--text-color);
7
+ background-color: var(--bg-color);
8
+
9
+ &:empty {
10
+ display: none;
11
+ }
12
+ }
13
+ }
14
+
15
+ @utility status-info {
16
+ & {
17
+ --border-color: #d1d5db;
18
+ --bg-color: #f9fafb;
19
+ --text-color: #111827;
20
+ }
21
+ }
22
+
23
+ @utility status-error {
24
+ & {
25
+ --border-color: #fca5a5;
26
+ --bg-color: #fef2f2;
27
+ --text-color: #b91c1c;
28
+ }
29
+ }
30
+
31
+ @utility status-success {
32
+ & {
33
+ --border-color: #86efac;
34
+ --bg-color: #f0fdf4;
35
+ --text-color: #15803d;
36
+ }
37
+ }
@@ -8,7 +8,7 @@
8
8
  @utility tab {
9
9
  & {
10
10
  align-items: start;
11
- padding: 0.25lh 0.5lh;
11
+ padding: 0.25rlh 0.5rlh;
12
12
  text-align: left;
13
13
  }
14
14
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  @utility tabpanel {
28
28
  :where(&) {
29
- padding: 0.75lh;
29
+ padding: 1rlh;
30
30
  }
31
31
  }
32
32
 
@@ -1,6 +1,6 @@
1
1
  @property --gradient-angle {
2
- syntax: '<angle>';
3
- initial-value: 0deg;
2
+ syntax: '<angle> | to [left | right | top | bottom] | to [top | bottom] [left | right]';
3
+ initial-value: to bottom;
4
4
  inherits: false;
5
5
  }
6
6
 
@@ -9,7 +9,7 @@
9
9
  :root {
10
10
  /* --gradient: ; */
11
11
  --gradient-alpha: 1;
12
- --gradient-angle: 90deg;
12
+ --gradient-angle: to bottom;
13
13
  --gradient-position: center; /* For radial and conic gradients */
14
14
  --gradient-shape: ; /* For radial and conic gradients */
15
15
  --gradient-size: ; /* For radial gradient */
@@ -36,6 +36,10 @@
36
36
  }
37
37
  }
38
38
 
39
+ @utility linear-gradient {
40
+ @apply gradient;
41
+ }
42
+
39
43
  @utility radial-gradient {
40
44
  & {
41
45
  @apply tw-gradient;
@@ -71,17 +75,17 @@
71
75
  * Repeating Gradients *
72
76
  * Needs more testing
73
77
  *********************/
74
- @utility repeating-gradient {
78
+ @utility repeating-linear-gradient {
75
79
  & {
76
80
  background-image: repeating-linear-gradient(
77
81
  var(--gradient-angle),
78
- var(--tw-gradient-stops, var(--gradient))
82
+ var(--gradient)
79
83
  );
80
84
 
81
85
  @supports (linear-gradient(in oklab)) {
82
86
  background-image: repeating-linear-gradient(
83
87
  var(--gradient-angle) in var(--color-space) var(--hue-interpolation),
84
- var(--tw-gradient-stops, var(--gradient))
88
+ var(--gradient)
85
89
  );
86
90
  }
87
91
  }
@@ -5,4 +5,4 @@
5
5
  @import './shadows.css';
6
6
  @import './text.css';
7
7
  @import './frosted-glass.css';
8
- @import './stroke.css';
8
+ @import './scrollbars.css';
@@ -5,18 +5,22 @@
5
5
  --scrollbar-width: auto;
6
6
  --scrollbar-size: 14px;
7
7
  --scroll-behavior: smooth;
8
+ --scrollbar-thumb-color-light: #c1c1c1;
9
+ --scrollbar-track-color-light: #fafafa;
10
+ --scrollbar-thumb-color-dark: #6b6b6b;
11
+ --scrollbar-track-color-dark: #2d2d2d;
8
12
  }
9
13
 
10
- @layer base {
14
+ @utility scrollbars-on {
11
15
  :root {
12
16
  @media (prefers-color-scheme: light) {
13
- --scrollbar-thumb-color: #c1c1c1;
14
- --scrollbar-track-color: #fafafa;
17
+ --scrollbar-thumb-color: var(--scrollbar-thumb-color-light);
18
+ --scrollbar-track-color: var(--scrollbar-track-color-light);
15
19
  }
16
20
 
17
21
  @media (prefers-color-scheme: dark) {
18
- --scrollbar-thumb-color: #6b6b6b;
19
- --scrollbar-track-color: #2d2d2d;
22
+ --scrollbar-thumb-color: var(--scrollbar-thumb-color-dark);
23
+ --scrollbar-track-color: var(--scrollbar-track-color-dark);
20
24
  }
21
25
  }
22
26
 
@@ -58,3 +62,19 @@
58
62
  --scrollbar-width: none;
59
63
  --scrollbar-size: 0;
60
64
  }
65
+
66
+ /* prettier-ignore */
67
+ @utility scrollbar-thumb-* {
68
+ --scrollbar-thumb-color: --value(--color-*, [color]);
69
+ --scrollbar-thumb-color: oklch(
70
+ from --value(--color-*, [color]) l c h / --modifier(integer) %
71
+ );
72
+ }
73
+
74
+ /* prettier-ignore */
75
+ @utility scrollbar-track-* {
76
+ --scrollbar-track-color: --value(--color-*, [color]);
77
+ --scrollbar-track-color: oklch(
78
+ from --value(--color-*, [color]) l c h / --modifier(integer) %
79
+ );
80
+ }
@@ -38,3 +38,119 @@
38
38
  filter: drop-shadow(var(--drop-shadow, var(--drop-shadow-string)));
39
39
  }
40
40
  }
41
+
42
+ /* Shadow Functional Utilities */
43
+ @utility sx-* {
44
+ --shadow-x: --value([length]);
45
+ }
46
+
47
+ @utility sy-* {
48
+ --shadow-y: --value([length]);
49
+ }
50
+
51
+ @utility sb-* {
52
+ --shadow-blur: --value([length]);
53
+ }
54
+
55
+ /* prettier-ignore */
56
+ @utility sc-* {
57
+ --shadow-color: --value(--color-*, [color]);
58
+ --shadow-color: oklch(from --value(--color-*, [color]) l c h / --modifier(integer)%);
59
+ }
60
+
61
+ @utility ss-* {
62
+ --shadow-spread: --value([length]);
63
+ }
64
+
65
+ @utility sa-* {
66
+ --shadow-alpha: --value([number]);
67
+ }
68
+
69
+ @utility sxm-* {
70
+ --shadow-x-multiple: --value([number]);
71
+ }
72
+
73
+ @utility sym-* {
74
+ --shadow-y-multiple: --value([number]);
75
+ }
76
+
77
+ @utility sbm-* {
78
+ --shadow-blur-multiple: --value([number]);
79
+ }
80
+
81
+ /*********************
82
+ * Text Shadow Utilities *
83
+ *********************/
84
+
85
+ @utility tsx-* {
86
+ --text-shadow-x: --value([length]);
87
+ }
88
+
89
+ @utility tsy-* {
90
+ --text-shadow-y: --value([length]);
91
+ }
92
+
93
+ @utility tsb-* {
94
+ --text-shadow-blur: --value([length]);
95
+ }
96
+
97
+ @utility tsc-* {
98
+ --text-shadow-color: --value(--color- *, [color]);
99
+ --text-shadow-color: oklch(
100
+ from --value(--color- *, [color]) l c h / --modifier(integer) %
101
+ );
102
+ }
103
+
104
+ @utility tsxm-* {
105
+ --text-shadow-x-multiple: --value([number]);
106
+ }
107
+
108
+ @utility tsym-* {
109
+ --text-shadow-y-multiple: --value([number]);
110
+ }
111
+
112
+ @utility tsbm-* {
113
+ --text-shadow-blur-multiple: --value([number]);
114
+ }
115
+
116
+ /*********************
117
+ * Drop Shadow Utilities *
118
+ *********************/
119
+ @utility dsx-* {
120
+ --drop-shadow-x: --value([length]);
121
+ }
122
+
123
+ @utility dsy-* {
124
+ --drop-shadow-y: --value([length]);
125
+ }
126
+
127
+ @utility dsb-* {
128
+ --drop-shadow-blur: --value([length]);
129
+ }
130
+
131
+ @utility dsc-* {
132
+ --drop-shadow-color: --value(--color- *, [color]);
133
+ --drop-shadow-color: oklch(
134
+ from --value(--color- *, [color]) l c h / --modifier(integer) %
135
+ );
136
+ }
137
+
138
+ @utility dsa-* {
139
+ --drop-shadow-alpha: --value([number]);
140
+ }
141
+
142
+ @utility dsxm-* {
143
+ --drop-shadow-x-multiple: --value([number]);
144
+ }
145
+
146
+ @utility dsym-* {
147
+ --drop-shadow-y-multiple: --value([number]);
148
+ }
149
+
150
+ @utility dsbm-* {
151
+ --drop-shadow-blur-multiple: --value([number]);
152
+ }
153
+
154
+ @utility dsxm-* {
155
+ --drop-shadow-x-multiple: --value([number]);
156
+ }