@jrgermain/stylesheet 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/index.css +2519 -2579
  2. package/dist/index.css.map +1 -1
  3. package/dist/index.min.css +2 -2
  4. package/dist/index.min.css.map +1 -1
  5. package/package.json +12 -12
  6. package/src/styles/components/accordion.css +136 -0
  7. package/src/styles/components/alert.css +12 -0
  8. package/src/styles/components/{_app.scss → app.css} +108 -57
  9. package/src/styles/components/banner.css +33 -0
  10. package/src/styles/components/{_button.scss → button.css} +145 -24
  11. package/src/styles/components/{_card.scss → card.css} +15 -19
  12. package/src/styles/components/chip.css +217 -0
  13. package/src/styles/components/{_hr.scss → divider.css} +7 -6
  14. package/src/styles/components/drawer.css +111 -0
  15. package/src/styles/components/{_field.scss → field.css} +25 -29
  16. package/src/styles/components/{_layout.scss → flex.css} +5 -25
  17. package/src/styles/components/heading.css +60 -0
  18. package/src/styles/components/highlight.css +39 -0
  19. package/src/styles/components/link.css +41 -0
  20. package/src/styles/components/meter.css +80 -0
  21. package/src/styles/components/modal.css +39 -0
  22. package/src/styles/components/progress.css +73 -0
  23. package/src/styles/components/quote.css +27 -0
  24. package/src/styles/components/{_skeleton.scss → skeleton.css} +17 -18
  25. package/src/styles/components/skip-link.css +44 -0
  26. package/src/styles/components/slider.css +96 -0
  27. package/src/styles/components/{_switch.scss → switch.css} +27 -23
  28. package/src/styles/components/table.css +86 -0
  29. package/src/styles/components/text.css +119 -0
  30. package/src/styles/components/visually-hidden.css +13 -0
  31. package/src/styles/experimental/dialog-animations.css +6 -6
  32. package/src/styles/index.css +32 -0
  33. package/src/styles/shared/base-alert.css +108 -0
  34. package/src/styles/shared/base-dialog.css +85 -0
  35. package/src/styles/shared/dismiss-button.css +27 -0
  36. package/src/styles/utils/reset.css +29 -0
  37. package/src/styles/utils/variables.css +204 -0
  38. package/src/svg/dropdown-invert-thick.svg +4 -0
  39. package/src/svg/dropdown-invert.svg +4 -0
  40. package/src/svg/dropdown-thick.svg +4 -0
  41. package/src/svg/dropdown.svg +1 -1
  42. package/src/tokens.js +141 -0
  43. package/src/styles/_utils.scss +0 -87
  44. package/src/styles/_variables.scss +0 -331
  45. package/src/styles/components/_alert.scss +0 -178
  46. package/src/styles/components/_chip.scss +0 -151
  47. package/src/styles/components/_details.scss +0 -155
  48. package/src/styles/components/_dialog.scss +0 -234
  49. package/src/styles/components/_progress-meter.scss +0 -149
  50. package/src/styles/components/_range.scss +0 -96
  51. package/src/styles/components/_table.scss +0 -82
  52. package/src/styles/components/_text.scss +0 -295
  53. package/src/styles/index.scss +0 -47
@@ -0,0 +1,29 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ margin: 0;
6
+ }
7
+
8
+ :where(:focus-visible) {
9
+ outline: var(--border-m) solid var(--color-brand-5);
10
+ }
11
+
12
+ html {
13
+ text-size-adjust: none;
14
+ color-scheme: light dark;
15
+ }
16
+
17
+ body {
18
+ margin: 0;
19
+ background-color: var(--color-body);
20
+ color: var(--color-body-text);
21
+ }
22
+
23
+ img,
24
+ picture,
25
+ video,
26
+ iframe {
27
+ max-width: 100%;
28
+ display: block;
29
+ }
@@ -0,0 +1,204 @@
1
+ :root,
2
+ ::backdrop {
3
+ /* Brand */
4
+ --color-brand-1: light-dark(#08003b, #e5edff);
5
+ --color-brand-2: light-dark(#190074, #bbc9ff);
6
+ --color-brand-3: light-dark(#290fa3, #93a4ff);
7
+ --color-brand-4: light-dark(#3c35cb, #6f7dff);
8
+ --color-brand-5: #545be7;
9
+ --color-brand-6: light-dark(#6f7dff, #3c35cb);
10
+ --color-brand-7: light-dark(#93a4ff, #290fa3);
11
+ --color-brand-8: light-dark(#bbc9ff, #190074);
12
+ --color-brand-9: light-dark(#e5edff, #08003b);
13
+ --color-brand-transparent: light-dark(#545be766, #545be780);
14
+ --color-brand-extra-transparent: light-dark(#545be733, #545be759);
15
+
16
+ /* Red */
17
+ --color-red-1: light-dark(#240000, #ffe3dc);
18
+ --color-red-2: light-dark(#4d0000, #ffb4a5);
19
+ --color-red-3: light-dark(#7a0000, #ff7c68);
20
+ --color-red-4: light-dark(#a90000, #f0503d);
21
+ --color-red-5: #cc2a1b;
22
+ --color-red-6: light-dark(#f0503d, #a90000);
23
+ --color-red-7: light-dark(#ff7c68, #7a0000);
24
+ --color-red-8: light-dark(#ffb4a5, #4d0000);
25
+ --color-red-9: light-dark(#ffe3dc, #240000);
26
+ --color-red-transparent: light-dark(#cc2a1b66, #cc2a1b80);
27
+ --color-red-extra-transparent: light-dark(#cc2a1b33, #cc2a1b59);
28
+
29
+ /* Orange */
30
+ --color-orange-1: light-dark(#1c0300, #ffe6cc);
31
+ --color-orange-2: light-dark(#3e1200, #ffb87e);
32
+ --color-orange-3: light-dark(#632500, #f98f3a);
33
+ --color-orange-4: light-dark(#8b3a00, #d76f04);
34
+ --color-orange-5: #b45100;
35
+ --color-orange-6: light-dark(#d76f04, #8b3a00);
36
+ --color-orange-7: light-dark(#f98f3a, #632500);
37
+ --color-orange-8: light-dark(#ffb87e, #3e1200);
38
+ --color-orange-9: light-dark(#ffe6cc, #1c0300);
39
+ --color-orange-transparent: light-dark(#b4510066, #b4510080);
40
+ --color-orange-extra-transparent: light-dark(#b4510033, #b4510059);
41
+
42
+ /* Yellow */
43
+ --color-yellow-1: light-dark(#140900, #f8edc1);
44
+ --color-yellow-2: light-dark(#2f1e00, #efcb72);
45
+ --color-yellow-3: light-dark(#4e3700, #dfb22b);
46
+ --color-yellow-4: light-dark(#7a5700, #c89808);
47
+ --color-yellow-5: #a57c00;
48
+ --color-yellow-6: light-dark(#c89808, #7a5700);
49
+ --color-yellow-7: light-dark(#dfb22b, #4e3700);
50
+ --color-yellow-8: light-dark(#efcb72, #2f1e00);
51
+ --color-yellow-9: light-dark(#f8edc1, #140900);
52
+ --color-yellow-transparent: light-dark(#a57c0066, #a57c0080);
53
+ --color-yellow-extra-transparent: light-dark(#a57c0033, #a57c0059);
54
+
55
+ /* Green */
56
+ --color-green-1: light-dark(#011000, #dafbc4);
57
+ --color-green-2: light-dark(#0c2a00, #a4e472);
58
+ --color-green-3: light-dark(#1d4600, #7dc53a);
59
+ --color-green-4: light-dark(#2f6500, #5fa500);
60
+ --color-green-5: #438500;
61
+ --color-green-6: light-dark(#5fa500, #2f6500);
62
+ --color-green-7: light-dark(#7dc53a, #1d4600);
63
+ --color-green-8: light-dark(#a4e472, #0c2a00);
64
+ --color-green-9: light-dark(#dafbc4, #011000);
65
+ --color-green-transparent: light-dark(#43850066, #43850080);
66
+ --color-green-extra-transparent: light-dark(#43850033, #43850059);
67
+
68
+ /* Sky */
69
+ --color-sky-1: light-dark(#001011, #caf9f8);
70
+ --color-sky-2: light-dark(#002a2b, #76e2e2);
71
+ --color-sky-3: light-dark(#004747, #00c8c9);
72
+ --color-sky-4: light-dark(#006566, #00a7a8);
73
+ --color-sky-5: #008586;
74
+ --color-sky-6: light-dark(#00a7a8, #006566);
75
+ --color-sky-7: light-dark(#00c8c9, #004747);
76
+ --color-sky-8: light-dark(#76e2e2, #002a2b);
77
+ --color-sky-9: light-dark(#caf9f8, #001011);
78
+ --color-sky-transparent: light-dark(#00858666, #00858680);
79
+ --color-sky-extra-transparent: light-dark(#00858633, #00858659);
80
+
81
+ /* Blue */
82
+ --color-blue-1: light-dark(#00003e, #ddf0ff);
83
+ --color-blue-2: light-dark(#00007a, #a9cfff);
84
+ --color-blue-3: light-dark(#002b97, #74adff);
85
+ --color-blue-4: light-dark(#004abd, #3988ff);
86
+ --color-blue-5: #1c69e3;
87
+ --color-blue-6: light-dark(#3988ff, #004abd);
88
+ --color-blue-7: light-dark(#74adff, #002b97);
89
+ --color-blue-8: light-dark(#a9cfff, #00007a);
90
+ --color-blue-9: light-dark(#ddf0ff, #00003e);
91
+ --color-blue-transparent: light-dark(#1c69e366, #1c69e380);
92
+ --color-blue-extra-transparent: light-dark(#1c69e333, #1c69e359);
93
+
94
+ /* Purple */
95
+ --color-purple-1: light-dark(#170029, #fbe4ff);
96
+ --color-purple-2: light-dark(#370054, #e8b6ff);
97
+ --color-purple-3: light-dark(#5a0085, #ce8dfc);
98
+ --color-purple-4: light-dark(#7819a8, #b562ea);
99
+ --color-purple-5: #9640ca;
100
+ --color-purple-6: light-dark(#b562ea, #7819a8);
101
+ --color-purple-7: light-dark(#ce8dfc, #5a0085);
102
+ --color-purple-8: light-dark(#e8b6ff, #370054);
103
+ --color-purple-9: light-dark(#fbe4ff, #170029);
104
+ --color-purple-transparent: light-dark(#9640ca66, #9640ca80);
105
+ --color-purple-extra-transparent: light-dark(#9640ca33, #9640ca59);
106
+
107
+ /* Magenta */
108
+ --color-magenta-1: light-dark(#21000c, #ffe1f0);
109
+ --color-magenta-2: light-dark(#480023, #ffadd0);
110
+ --color-magenta-3: light-dark(#73003d, #fe7cb1);
111
+ --color-magenta-4: light-dark(#9b0058, #e45193);
112
+ --color-magenta-5: #c32775;
113
+ --color-magenta-6: light-dark(#e45193, #9b0058);
114
+ --color-magenta-7: light-dark(#fe7cb1, #73003d);
115
+ --color-magenta-8: light-dark(#ffadd0, #480023);
116
+ --color-magenta-9: light-dark(#ffe1f0, #21000c);
117
+ --color-magenta-transparent: light-dark(#c3277566, #c3277580);
118
+ --color-magenta-extra-transparent: light-dark(#c3277533, #c3277559);
119
+
120
+ /* Gray */
121
+ --color-gray-1: light-dark(#090b0f, #eceff4);
122
+ --color-gray-2: light-dark(#202226, #cbced3);
123
+ --color-gray-3: light-dark(#383b3f, #abaeb3);
124
+ --color-gray-4: light-dark(#53555a, #8d8f94);
125
+ --color-gray-5: #6f7276;
126
+ --color-gray-6: light-dark(#8d8f94, #53555a);
127
+ --color-gray-7: light-dark(#abaeb3, #383b3f);
128
+ --color-gray-8: light-dark(#cbced3, #202226);
129
+ --color-gray-9: light-dark(#eceff4, #090b0f);
130
+ --color-gray-transparent: light-dark(#6f727666, #6f727680);
131
+ --color-gray-extra-transparent: light-dark(#6f727633, #6f727659);
132
+
133
+ /* Semantic colors */
134
+ --color-body: light-dark(#f9fafc, #14161a);
135
+ --color-body-alt: light-dark(#fff, #010203);
136
+ --color-body-text: light-dark(#030305, #fff);
137
+ --color-body-text-alt: light-dark(#404247, #ccced0);
138
+ --color-shadow: light-dark(#45484c26, #00000166);
139
+ --color-outline: light-dark(#d8dbe0, #434549);
140
+
141
+ /* Font sizes */
142
+ --font-size-xs: clamp(0.6944rem, 0.6855rem + 0.0446vw, 0.72rem);
143
+ --font-size-s: clamp(0.8331rem, 0.8099rem + 0.1163vw, 0.9rem);
144
+ --font-size-m: clamp(1rem, 0.9565rem + 0.2174vw, 1.125rem);
145
+ --font-size-l: clamp(1.2rem, 1.1283rem + 0.3587vw, 1.4063rem);
146
+ --font-size-xl: clamp(1.44rem, 1.3293rem + 0.5533vw, 1.7581rem);
147
+ --font-size-2xl: clamp(1.7281rem, 1.5649rem + 0.8163vw, 2.1975rem);
148
+ --font-size-3xl: clamp(2.0738rem, 1.8396rem + 1.1707vw, 2.7469rem);
149
+ --font-size-4xl: clamp(2.4881rem, 2.1594rem + 1.6435vw, 3.4331rem);
150
+
151
+ /* Font weights */
152
+ --font-weight-light: 300;
153
+ --font-weight-normal: 400;
154
+ --font-weight-semibold: 600;
155
+ --font-weight-bold: 700;
156
+ --font-weight-black: 900;
157
+
158
+ /* Font families */
159
+ --font-family-body: "Avenir Next", avenir, corbel, source-sans-pro,
160
+ "DejaVu Sans", ui-sans-serif, sans-serif;
161
+ --font-family-heading: seravek, "Gill Sans Nova", verdana, "DejaVu Sans",
162
+ source-sans-pro, ui-sans-serif, sans-serif;
163
+ --font-family-mono: ui-monospace, "Source Code Pro", ui-monospace, monospace;
164
+
165
+ /* Spacing */
166
+ --space-3xs: clamp(4px, 3.6528px + 0.1087vw, 5px);
167
+ --space-2xs: clamp(8px, 7.6528px + 0.1087vw, 9px);
168
+ --space-xs: clamp(12px, 11.304px + 0.2174vw, 14px);
169
+ --space-s: clamp(16px, 15.304px + 0.2174vw, 18px);
170
+ --space-m: clamp(24px, 22.9568px + 0.3261vw, 27px);
171
+ --space-l: clamp(32px, 30.608px + 0.4348vw, 36px);
172
+ --space-xl: clamp(48px, 45.9136px + 0.6522vw, 54px);
173
+ --space-2xl: clamp(64px, 61.2176px + 0.8696vw, 72px);
174
+ --space-3xl: clamp(96px, 91.8256px + 1.3043vw, 108px);
175
+
176
+ /* Between xs and m based on screen width */
177
+ --space-body: clamp(12px, 6.7824px + 1.6304vw, 27px);
178
+
179
+ /* Radii */
180
+ --radius-none: 0;
181
+ --radius-s: 3px;
182
+ --radius-m: 6px;
183
+ --radius-l: 12px;
184
+ --radius-xl: 24px;
185
+ --radius-2xl: 64px;
186
+ --radius-full: 9999px;
187
+
188
+ /* Shadows */
189
+ --shadow-none: none;
190
+ --shadow-s: 0 1px 3px -1px var(--color-shadow);
191
+ --shadow-m: 0 1px 7px -1px var(--color-shadow);
192
+ --shadow-l: var(--shadow-s), 0 1px 11px -1px var(--color-shadow);
193
+ --shadow-xl: var(--shadow-m), 0 1px 15px -1px var(--color-shadow);
194
+
195
+ /* Border widths */
196
+ --border-none: 0;
197
+ --border-s: 1px;
198
+ --border-m: 2px;
199
+ --border-l: 5px;
200
+ --border-xl: 8px;
201
+
202
+ /* Opacity */
203
+ --opacity-disabled: light-dark(0.65, 0.5);
204
+ }
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
3
+ d="m6 9l6 6l6-6" />
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"
3
+ d="m6 9l6 6l6-6" />
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path fill="none" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
3
+ d="m6 9l6 6l6-6" />
4
+ </svg>
@@ -1,4 +1,4 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
- <path fill="none" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
2
+ <path fill="none" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"
3
3
  d="m6 9l6 6l6-6" />
4
4
  </svg>
package/src/tokens.js ADDED
@@ -0,0 +1,141 @@
1
+ export const colors = {
2
+ brand: {
3
+ 1: "var(--color-brand-1)",
4
+ 2: "var(--color-brand-2)",
5
+ 3: "var(--color-brand-3)",
6
+ 4: "var(--color-brand-4)",
7
+ 5: "var(--color-brand-5)",
8
+ 6: "var(--color-brand-6)",
9
+ 7: "var(--color-brand-7)",
10
+ 8: "var(--color-brand-8)",
11
+ 9: "var(--color-brand-9)",
12
+ transparent: "var(--color-brand-transparent)",
13
+ extraTransparent: "var(--color-brand-extra-transparent)",
14
+ },
15
+ red: {
16
+ 1: "var(--color-red-1)",
17
+ 2: "var(--color-red-2)",
18
+ 3: "var(--color-red-3)",
19
+ 4: "var(--color-red-4)",
20
+ 5: "var(--color-red-5)",
21
+ 6: "var(--color-red-6)",
22
+ 7: "var(--color-red-7)",
23
+ 8: "var(--color-red-8)",
24
+ 9: "var(--color-red-9)",
25
+ transparent: "var(--color-red-transparent)",
26
+ extraTransparent: "var(--color-red-extra-transparent)",
27
+ },
28
+ orange: {
29
+ 1: "var(--color-orange-1)",
30
+ 2: "var(--color-orange-2)",
31
+ 3: "var(--color-orange-3)",
32
+ 4: "var(--color-orange-4)",
33
+ 5: "var(--color-orange-5)",
34
+ 6: "var(--color-orange-6)",
35
+ 7: "var(--color-orange-7)",
36
+ 8: "var(--color-orange-8)",
37
+ 9: "var(--color-orange-9)",
38
+ transparent: "var(--color-orange-transparent)",
39
+ extraTransparent: "var(--color-orange-extra-transparent)",
40
+ },
41
+ yellow: {
42
+ 1: "var(--color-yellow-1)",
43
+ 2: "var(--color-yellow-2)",
44
+ 3: "var(--color-yellow-3)",
45
+ 4: "var(--color-yellow-4)",
46
+ 5: "var(--color-yellow-5)",
47
+ 6: "var(--color-yellow-6)",
48
+ 7: "var(--color-yellow-7)",
49
+ 8: "var(--color-yellow-8)",
50
+ 9: "var(--color-yellow-9)",
51
+ transparent: "var(--color-yellow-transparent)",
52
+ extraTransparent: "var(--color-yellow-extra-transparent)",
53
+ },
54
+ green: {
55
+ 1: "var(--color-green-1)",
56
+ 2: "var(--color-green-2)",
57
+ 3: "var(--color-green-3)",
58
+ 4: "var(--color-green-4)",
59
+ 5: "var(--color-green-5)",
60
+ 6: "var(--color-green-6)",
61
+ 7: "var(--color-green-7)",
62
+ 8: "var(--color-green-8)",
63
+ 9: "var(--color-green-9)",
64
+ transparent: "var(--color-green-transparent)",
65
+ extraTransparent: "var(--color-green-extra-transparent)",
66
+ },
67
+ sky: {
68
+ 1: "var(--color-sky-1)",
69
+ 2: "var(--color-sky-2)",
70
+ 3: "var(--color-sky-3)",
71
+ 4: "var(--color-sky-4)",
72
+ 5: "var(--color-sky-5)",
73
+ 6: "var(--color-sky-6)",
74
+ 7: "var(--color-sky-7)",
75
+ 8: "var(--color-sky-8)",
76
+ 9: "var(--color-sky-9)",
77
+ transparent: "var(--color-sky-transparent)",
78
+ extraTransparent: "var(--color-sky-extra-transparent)",
79
+ },
80
+ blue: {
81
+ 1: "var(--color-blue-1)",
82
+ 2: "var(--color-blue-2)",
83
+ 3: "var(--color-blue-3)",
84
+ 4: "var(--color-blue-4)",
85
+ 5: "var(--color-blue-5)",
86
+ 6: "var(--color-blue-6)",
87
+ 7: "var(--color-blue-7)",
88
+ 8: "var(--color-blue-8)",
89
+ 9: "var(--color-blue-9)",
90
+ transparent: "var(--color-blue-transparent)",
91
+ extraTransparent: "var(--color-blue-extra-transparent)",
92
+ },
93
+ purple: {
94
+ 1: "var(--color-purple-1)",
95
+ 2: "var(--color-purple-2)",
96
+ 3: "var(--color-purple-3)",
97
+ 4: "var(--color-purple-4)",
98
+ 5: "var(--color-purple-5)",
99
+ 6: "var(--color-purple-6)",
100
+ 7: "var(--color-purple-7)",
101
+ 8: "var(--color-purple-8)",
102
+ 9: "var(--color-purple-9)",
103
+ transparent: "var(--color-purple-transparent)",
104
+ extraTransparent: "var(--color-purple-extra-transparent)",
105
+ },
106
+ magenta: {
107
+ 1: "var(--color-magenta-1)",
108
+ 2: "var(--color-magenta-2)",
109
+ 3: "var(--color-magenta-3)",
110
+ 4: "var(--color-magenta-4)",
111
+ 5: "var(--color-magenta-5)",
112
+ 6: "var(--color-magenta-6)",
113
+ 7: "var(--color-magenta-7)",
114
+ 8: "var(--color-magenta-8)",
115
+ 9: "var(--color-magenta-9)",
116
+ transparent: "var(--color-magenta-transparent)",
117
+ extraTransparent: "var(--color-magenta-extra-transparent)",
118
+ },
119
+ gray: {
120
+ 1: "var(--color-gray-1)",
121
+ 2: "var(--color-gray-2)",
122
+ 3: "var(--color-gray-3)",
123
+ 4: "var(--color-gray-4)",
124
+ 5: "var(--color-gray-5)",
125
+ 6: "var(--color-gray-6)",
126
+ 7: "var(--color-gray-7)",
127
+ 8: "var(--color-gray-8)",
128
+ 9: "var(--color-gray-9)",
129
+ transparent: "var(--color-gray-transparent)",
130
+ extraTransparent: "var(--color-gray-extra-transparent)",
131
+ },
132
+ body: 'var(--color-body)',
133
+ bodyAlt: 'var(--color-body-alt)',
134
+ bodyText: 'var(--color-body-text)',
135
+ bodyTextAlt: 'var(--color-body-text-alt)',
136
+ shadow: 'var(--color-shadow)',
137
+ outline: 'var(--color-outline)',
138
+ };
139
+
140
+ export const fontSizes = {
141
+
@@ -1,87 +0,0 @@
1
- @use "sass:string";
2
- @use "sass:list";
3
-
4
- // Adapted from https://css-tricks.com/snippets/sass/str-replace-function/
5
- @function replace-all($string, $search, $replace) {
6
- $index: string.index($string, $search);
7
-
8
- @if $index {
9
- /* stylelint-disable-next-line scss/operator-no-newline-after */
10
- @return string.slice($string, 1, $index - 1) + $replace +
11
- replace-all(
12
- string.slice($string, $index + string.length($search)),
13
- $search,
14
- $replace
15
- );
16
- }
17
-
18
- @return $string;
19
- }
20
-
21
- @function svg-to-data-url($svg) {
22
- $svg: replace-all($svg, "%", "%25");
23
- $svg: replace-all($svg, '"', "'");
24
- $svg: replace-all($svg, "#", "%23");
25
- $svg: replace-all($svg, "<", "%3C");
26
- $svg: replace-all($svg, ">", "%3E");
27
- $svg: replace-all($svg, "[", "%5B");
28
- $svg: replace-all($svg, "]", "%5D");
29
- $svg: replace-all($svg, "^", "%5E");
30
- $svg: replace-all($svg, "`", "%60");
31
- $svg: replace-all($svg, "{", "%7B");
32
- $svg: replace-all($svg, "|", "%7C");
33
- $svg: replace-all($svg, "}", "%7D");
34
-
35
- // The below characters are tolerated by browsers, so don't NEED to be escaped:
36
- // $svg: replace-all($svg, " ", "%20");
37
- // $svg: replace-all($svg, "!", "%21");
38
- // $svg: replace-all($svg, "$", "%24");
39
- // $svg: replace-all($svg, "&", "%26");
40
- // $svg: replace-all($svg, "'", "%27");
41
- // $svg: replace-all($svg, "(", "%28");
42
- // $svg: replace-all($svg, ")", "%29");
43
- // $svg: replace-all($svg, "*", "%2A");
44
- // $svg: replace-all($svg, "+", "%2B");
45
- // $svg: replace-all($svg, ",", "%2C");
46
- // $svg: replace-all($svg, "-", "%2D");
47
- // $svg: replace-all($svg, ".", "%2E");
48
- // $svg: replace-all($svg, "/", "%2F");
49
- // $svg: replace-all($svg, ":", "%3A");
50
- // $svg: replace-all($svg, ";", "%3B");
51
- // $svg: replace-all($svg, "=", "%3D");
52
- // $svg: replace-all($svg, "?", "%3F");
53
- // $svg: replace-all($svg, "@", "%40");
54
- // $svg: replace-all($svg, "\\", "%5C");
55
- // $svg: replace-all($svg, "_", "%5F");
56
- // $svg: replace-all($svg, "~", "%7F");
57
-
58
- @return 'url("data:image/svg+xml,#{$svg}")';
59
- }
60
-
61
- @mixin transition($properties, $duration: 200ms, $timing-function: "ease") {
62
- $properties-string: "";
63
-
64
- @if type-of($properties) != list and type-of($properties) != string {
65
- @error 'Properties must be a string or list of strings';
66
- }
67
-
68
- @each $property in $properties {
69
- @if $properties-string != "" {
70
- $properties-string: $properties-string + ", ";
71
- }
72
-
73
- $properties-string: $properties-string + $property;
74
- }
75
-
76
- @if list.length($properties) == 1 {
77
- transition: #{string.unquote($properties-string)}
78
- $duration
79
- #{string.unquote($timing-function)};
80
- }
81
-
82
- @if list.length($properties) > 1 {
83
- transition-property: string.unquote($properties-string);
84
- transition-duration: $duration;
85
- transition-timing-function: string.unquote($timing-function);
86
- }
87
- }