@splendidlabz/styles 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.stylelintrc.js +3 -0
- package/.turbo/turbo-lint.log +4 -0
- package/Base/_Accessibility.scss +32 -0
- package/Base/_Base.scss +57 -0
- package/Base/_Focus.scss +38 -0
- package/Base/_Transition.scss +8 -0
- package/Base/_index.scss +4 -0
- package/CHANGELOG.md +56 -0
- package/Components/_Box.scss +9 -0
- package/Components/_BrowserFrame.scss +89 -0
- package/Components/_Figure.scss +5 -0
- package/Components/_List.scss +19 -0
- package/Components/_Prose.scss +82 -0
- package/Components/_Scrollbars.scss +40 -0
- package/Components/_SimpleSVG.scss +9 -0
- package/Components/_index.scss +12 -0
- package/Effects/_Backdrop.scss +4 -0
- package/Effects/_Elevation.scss +92 -0
- package/Effects/_Glow.scss +51 -0
- package/Effects/_Gradients.scss +88 -0
- package/Effects/_Shadows.scss +51 -0
- package/Effects/_SpecialShadows.scss +45 -0
- package/Effects/_Text-Outline.scss +25 -0
- package/Effects/_index.scss +12 -0
- package/Experimental/_SimplePricingPlan.scss +141 -0
- package/Forms/_Button.scss +106 -0
- package/Forms/_Combobox.scss +49 -0
- package/Forms/_FormBase.scss +43 -0
- package/Forms/_FormControls.scss +95 -0
- package/Forms/_Range.scss +101 -0
- package/Forms/_Select.scss +114 -0
- package/Forms/_Switch.scss +66 -0
- package/Forms/_TextField.scss +116 -0
- package/Forms/_Textarea.scss +41 -0
- package/Forms/_index.scss +10 -0
- package/Typography/_WritingMode.scss +33 -0
- package/Typography/_index.scss +1 -0
- package/UI/Codepen.scss +11 -0
- package/UI/Tweet.scss +5 -0
- package/UI/Youtube.scss +13 -0
- package/UI/_Accordion.scss +33 -0
- package/UI/_Breadcrumbs.scss +24 -0
- package/UI/_CQChecker.scss +16 -0
- package/UI/_Callout.scss +31 -0
- package/UI/_Drawer.scss +28 -0
- package/UI/_Dropdown.scss +14 -0
- package/UI/_FancyList.scss +30 -0
- package/UI/_PerspectiveHover.scss +9 -0
- package/UI/_Popover.scss +25 -0
- package/UI/_Resizer.scss +43 -0
- package/UI/_Spotlight.scss +42 -0
- package/UI/_Status.scss +33 -0
- package/UI/_Tabs.scss +112 -0
- package/UI/_Textwall.scss +22 -0
- package/UI/_index.scss +17 -0
- package/Utilities/_Shapes.scss +20 -0
- package/Utilities/_index.scss +1 -0
- package/Variables/_Globals.scss +33 -0
- package/Variables/_index.scss +1 -0
- package/_Animations.scss +18 -0
- package/_Fill.scss +314 -0
- package/package.json +18 -0
- package/styles.scss +12 -0
- package/utils/_index.scss +3 -0
- package/utils/_mixins.scss +6 -0
- package/utils/functions/_fns.scss +77 -0
- package/utils/functions/_fonts.scss +114 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// WIP. Not included.
|
|
2
|
+
// Simple - https://codepen.io/ibaslogic/pen/oNQMWrM
|
|
3
|
+
// Simple 2 - https://stackblitz.com/edit/multi-range-slider?file=src%2Fstyle.css,src%2Fcomponents%2FmultiRangeSlider%2FMultiRangeSlider.js
|
|
4
|
+
// Complex but more real - https://codepen.io/vsync/pen/mdEJMLv
|
|
5
|
+
// Ana tudor collection - https://codepen.io/collection/DgYaMj/?cursor=eyJwYWdlIjo4fQ==
|
|
6
|
+
@layer components {
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
input[type='range'] {
|
|
10
|
+
appearance: none;
|
|
11
|
+
width: 100%;
|
|
12
|
+
|
|
13
|
+
/* New additions */
|
|
14
|
+
height: 6px;
|
|
15
|
+
border-radius: 15px;
|
|
16
|
+
outline: none;
|
|
17
|
+
background: #ccc;
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Thumb: webkit */
|
|
22
|
+
input[type='range']::-webkit-slider-thumb {
|
|
23
|
+
/* removing default appearance */
|
|
24
|
+
appearance: none;
|
|
25
|
+
width: 15px;
|
|
26
|
+
|
|
27
|
+
/* creating a custom design */
|
|
28
|
+
height: 15px;
|
|
29
|
+
border: none;
|
|
30
|
+
border-radius: 50%;
|
|
31
|
+
background-color: #f50;
|
|
32
|
+
|
|
33
|
+
/* box-shadow: -407px 0 0 400px #f50; emove this line */
|
|
34
|
+
transition: 0.2s ease-in-out;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Thumb: Firefox */
|
|
38
|
+
input[type='range']::-moz-range-thumb {
|
|
39
|
+
width: 15px;
|
|
40
|
+
height: 15px;
|
|
41
|
+
border: none;
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
background-color: #f50;
|
|
44
|
+
|
|
45
|
+
/* box-shadow: -407px 0 0 400px #f50; emove this line */
|
|
46
|
+
transition: 0.2s ease-in-out;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Hover, active & focus Thumb: Webkit */
|
|
50
|
+
|
|
51
|
+
input[type='range']::-webkit-slider-thumb:hover {
|
|
52
|
+
box-shadow: 0 0 0 10px rgb(255 85 0 / 10%);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
input[type='range']:active::-webkit-slider-thumb {
|
|
56
|
+
box-shadow: 0 0 0 13px rgb(255 85 0 / 20%);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
input[type='range']:focus::-webkit-slider-thumb {
|
|
60
|
+
box-shadow: 0 0 0 13px rgb(255 85 0 / 20%);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Hover, active & focus Thumb: Firfox */
|
|
64
|
+
|
|
65
|
+
input[type='range']::-moz-range-thumb:hover {
|
|
66
|
+
box-shadow: 0 0 0 10px rgb(255 85 0 / 10%);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
input[type='range']:active::-moz-range-thumb {
|
|
70
|
+
box-shadow: 0 0 0 13px rgb(255 85 0 / 20%);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
input[type='range']:focus::-moz-range-thumb {
|
|
74
|
+
box-shadow: 0 0 0 13px rgb(255 85 0 / 20%);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* =============
|
|
78
|
+
Adding tick marks
|
|
79
|
+
========================= */
|
|
80
|
+
.range-slider {
|
|
81
|
+
flex: 1;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.sliderticks {
|
|
85
|
+
display: flex;
|
|
86
|
+
justify-content: space-between;
|
|
87
|
+
padding: 0 10px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.sliderticks span {
|
|
91
|
+
display: flex;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
width: 1px;
|
|
94
|
+
height: 10px;
|
|
95
|
+
line-height: 40px;
|
|
96
|
+
background: #d3d3d3;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* =============
|
|
100
|
+
End tick marks
|
|
101
|
+
========================= */
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.Select {
|
|
3
|
+
:where(select) {
|
|
4
|
+
appearance: none;
|
|
5
|
+
color: var(--text-color);
|
|
6
|
+
background: var(--bg-color);
|
|
7
|
+
|
|
8
|
+
&:hover {
|
|
9
|
+
border-color: var(--border-hover-color, var(--border-color));
|
|
10
|
+
color: var(--text-hover-color, var(--text-color));
|
|
11
|
+
background-color: var(--bg-hover-color, var(--bg-color));
|
|
12
|
+
|
|
13
|
+
:where(svg path) {
|
|
14
|
+
fill: var(
|
|
15
|
+
--fill-hover-color,
|
|
16
|
+
var(--text-hover-color, var(--fill-color, var(--text-color)))
|
|
17
|
+
);
|
|
18
|
+
stroke: var(
|
|
19
|
+
--stroke-hover-color,
|
|
20
|
+
var(--text-hover-color, var(--stroke-color, var(--text-color)))
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Fallback to hover color
|
|
26
|
+
&:focus {
|
|
27
|
+
border-color: var(
|
|
28
|
+
--border-focus-color,
|
|
29
|
+
var(--border-hover-color, var(--border-color))
|
|
30
|
+
);
|
|
31
|
+
color: var(
|
|
32
|
+
--text-focus-color,
|
|
33
|
+
var(--text-hover-color, var(--text-color))
|
|
34
|
+
);
|
|
35
|
+
background-color: var(
|
|
36
|
+
--bg-focus-color,
|
|
37
|
+
var(--bg-hover-color, var(--bg-color))
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
:where(svg path) {
|
|
41
|
+
fill: var(
|
|
42
|
+
--fill-focus-color,
|
|
43
|
+
var(
|
|
44
|
+
--text-focus-color,
|
|
45
|
+
var(
|
|
46
|
+
--fill-hover-color,
|
|
47
|
+
var(--text-hover-color, var(--fill-color, var(--text-color)))
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
stroke: var(
|
|
52
|
+
--stroke-focus-color,
|
|
53
|
+
var(
|
|
54
|
+
--text-focus-color,
|
|
55
|
+
var(
|
|
56
|
+
--stroke-hover-color,
|
|
57
|
+
var(--text-hover-color, var(--stroke-color, var(--text-color)))
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
:where(select[multiple]),
|
|
66
|
+
:where(select[multiple]:focus) {
|
|
67
|
+
overflow: auto;
|
|
68
|
+
padding: 0;
|
|
69
|
+
|
|
70
|
+
:where(option) {
|
|
71
|
+
padding: 0.375em 0.75em;
|
|
72
|
+
color: var(--text-color);
|
|
73
|
+
background-image: linear-gradient(
|
|
74
|
+
0deg,
|
|
75
|
+
var(--bg-color) 0%,
|
|
76
|
+
var(--bg-color) 100%
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:where(option:hover) {
|
|
81
|
+
color: var(--text-hover-color, var(--text-color));
|
|
82
|
+
background-image: linear-gradient(
|
|
83
|
+
0deg,
|
|
84
|
+
var(--bg-hover-color, var(--bg-color)) 0%,
|
|
85
|
+
var(--bg-hover-color, var(--bg-color)) 100%
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:where(option:focus) {
|
|
90
|
+
color: var(
|
|
91
|
+
--text-focus-color,
|
|
92
|
+
var(--text-hover-color, var(--text-color))
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
background-image: linear-gradient(
|
|
96
|
+
0deg,
|
|
97
|
+
var(--bg-focus-color, var(--bg-hover-color, var(--bg-color))) 0%,
|
|
98
|
+
var(--bg-focus-color, var(--bg-hover-color, var(--bg-color))) 100%
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:where(option:checked) {
|
|
103
|
+
color: var(--text-selected-color);
|
|
104
|
+
background-image: linear-gradient(
|
|
105
|
+
0deg,
|
|
106
|
+
var(--bg-selected-color,) 0%,
|
|
107
|
+
var(--bg-selected-color,) 100%
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// The :selected state of the options is fairly customizable in Chrome, somewhat in Firefox, and not at all in Safari. See the CodePen demo for a section that can be uncommented to preview this.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
// ========================
|
|
3
|
+
// Switches
|
|
4
|
+
// Inspiration: https://tailwindui.com/components/application-ui/forms/toggles
|
|
5
|
+
// Variables Used
|
|
6
|
+
// --transition-values
|
|
7
|
+
|
|
8
|
+
// Local Variables
|
|
9
|
+
// --height
|
|
10
|
+
// --aspectRatio
|
|
11
|
+
// --gap
|
|
12
|
+
// --toggleFill: white;
|
|
13
|
+
// --bg-color: #aaa;
|
|
14
|
+
// --onStateBg: teal;
|
|
15
|
+
// ========================
|
|
16
|
+
// Border-width must have a unit here for this to work.
|
|
17
|
+
.Switch {
|
|
18
|
+
--width: 3.5em;
|
|
19
|
+
--height: 1.2em;
|
|
20
|
+
--inner-margin: 0.2em;
|
|
21
|
+
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
|
|
24
|
+
input[type='checkbox'] {
|
|
25
|
+
appearance: none;
|
|
26
|
+
display: grid;
|
|
27
|
+
align-items: center;
|
|
28
|
+
width: var(--width);
|
|
29
|
+
padding: 0;
|
|
30
|
+
border-width: var(--border-width, 1px);
|
|
31
|
+
border-style: var(--border-style, solid);
|
|
32
|
+
border-color: var(--border-color, black);
|
|
33
|
+
border-radius: var(--height);
|
|
34
|
+
background-color: var(--bg-color, #eee);
|
|
35
|
+
transition: background-color var(--transition-values);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
input[type='checkbox']:checked {
|
|
39
|
+
background-color: var(--bg-color, teal);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// This is the part that moves
|
|
43
|
+
input[type='checkbox']::before {
|
|
44
|
+
--translateX: calc(
|
|
45
|
+
var(--width) - var(--height) - var(--inner-margin) * 2 - var(
|
|
46
|
+
--border-width,
|
|
47
|
+
1px
|
|
48
|
+
) * 2
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
content: '';
|
|
52
|
+
box-sizing: content-box;
|
|
53
|
+
width: var(--height);
|
|
54
|
+
height: var(--height);
|
|
55
|
+
margin: var(--inner-margin);
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
background-color: white;
|
|
58
|
+
box-shadow: var(--shadow);
|
|
59
|
+
transition: transform var(--transition-values);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
input[type='checkbox']:checked::before {
|
|
63
|
+
transform: translateX(var(--translateX));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
// Applies to TextInput, Textarea and Select
|
|
3
|
+
:where(.TextField) {
|
|
4
|
+
--padding: 0.5rem 0.75rem;
|
|
5
|
+
|
|
6
|
+
> * {
|
|
7
|
+
display: block;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
:where(.Label) {
|
|
11
|
+
color: var(--text-color, inherit);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:where(.Hint) {
|
|
15
|
+
opacity: 0.5;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:where(.Error) {
|
|
19
|
+
color: red;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
* + .InputGroup {
|
|
24
|
+
margin-top: 0.25rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.InputGroup {
|
|
28
|
+
border-width: var(--border-width);
|
|
29
|
+
border-color: var(--border-color);
|
|
30
|
+
border-radius: var(--radius);
|
|
31
|
+
|
|
32
|
+
// Allow all inner items to use the same padding values
|
|
33
|
+
> *,
|
|
34
|
+
> :where(astro-slot, astro-content, astro-island) > * {
|
|
35
|
+
padding: var(--padding);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Allows focus outline to wrap around input when it's used standalone without before and after elements
|
|
39
|
+
> :where(.Field) {
|
|
40
|
+
border-radius: inherit;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.InputGroup:not(.Stack) {
|
|
45
|
+
display: flex;
|
|
46
|
+
|
|
47
|
+
// Before elements
|
|
48
|
+
// -------------------
|
|
49
|
+
> *:has(~ :where(.Field)),
|
|
50
|
+
> *:has(~ :where(.Field)):where(astro-slot, astro-content, astro-island)
|
|
51
|
+
> * {
|
|
52
|
+
flex-shrink: 0;
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
border-width: 0;
|
|
56
|
+
border-radius: 0;
|
|
57
|
+
border-start-start-radius: calc(var(--radius) - var(--border-width));
|
|
58
|
+
border-end-start-radius: calc(var(--radius) - var(--border-width));
|
|
59
|
+
|
|
60
|
+
// The input
|
|
61
|
+
& + :where(.Field) {
|
|
62
|
+
border-start-start-radius: 0;
|
|
63
|
+
border-end-start-radius: 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// After elements
|
|
68
|
+
// ------------------
|
|
69
|
+
> :where(.Field) ~ *,
|
|
70
|
+
> :where(.Field) ~ *:where(astro-slot, astro-content, astro-island) > * {
|
|
71
|
+
flex-shrink: 0;
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
border-width: 0;
|
|
75
|
+
border-radius: 0;
|
|
76
|
+
border-start-end-radius: calc(var(--radius) - var(--border-width));
|
|
77
|
+
border-end-end-radius: calc(var(--radius) - var(--border-width));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// The input
|
|
81
|
+
> :where(.Field:has(~ *)) {
|
|
82
|
+
border-start-end-radius: 0;
|
|
83
|
+
border-end-end-radius: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Raise position for nicer focus
|
|
87
|
+
> * {
|
|
88
|
+
position: relative;
|
|
89
|
+
|
|
90
|
+
&:focus,
|
|
91
|
+
&:focus-visible {
|
|
92
|
+
z-index: 2;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Use this when you want the button or arrow to be floating over the input element. When doing this, make sure you set a minimum width for the input! (or InputGroup)
|
|
98
|
+
.InputGroup.Stack {
|
|
99
|
+
// Before elements
|
|
100
|
+
// -------------------
|
|
101
|
+
*:has(~ :where(.Field)),
|
|
102
|
+
*:has(~ :where(.Field)):where(astro-slot, astro-content, astro-island) > * {
|
|
103
|
+
z-index: 2;
|
|
104
|
+
display: flex;
|
|
105
|
+
place-self: center start;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// After elements
|
|
109
|
+
// ------------------
|
|
110
|
+
:where(.Field) ~ *,
|
|
111
|
+
:where(.Field) ~ *:where(astro-slot, astro-content, astro-island) > * {
|
|
112
|
+
display: flex;
|
|
113
|
+
place-self: center end;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
textarea {
|
|
2
|
+
min-height: 9em;
|
|
3
|
+
resize: vertical;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
@layer components {
|
|
7
|
+
.Textarea {
|
|
8
|
+
// Field is used in TextField for padding and border-radius. We use this to prevent reworking those styles
|
|
9
|
+
.Stack.Field {
|
|
10
|
+
display: grid; // Field has display block. This enforces grid again.
|
|
11
|
+
padding: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.Field {
|
|
15
|
+
padding: var(--padding);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
textarea {
|
|
19
|
+
border-radius: inherit;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.Replica {
|
|
23
|
+
// This is how textarea text behaves
|
|
24
|
+
white-space: pre-wrap;
|
|
25
|
+
// Hidden from view, clicks, and screen readers
|
|
26
|
+
visibility: hidden;
|
|
27
|
+
|
|
28
|
+
&::after {
|
|
29
|
+
content: attr(data-replicated-value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.Textarea-autogrow {
|
|
35
|
+
textarea {
|
|
36
|
+
// Prevents user from resizing so it doesn't screw up the auto resizing
|
|
37
|
+
resize: none;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
// Prevents the whole text from rotating like a noob
|
|
3
|
+
[class*='Writing'] {
|
|
4
|
+
transition: none;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.Writing-normal {
|
|
8
|
+
writing-mode: horizontal-tb;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.Writing-rotateLeft {
|
|
12
|
+
writing-mode: vertical-rl;
|
|
13
|
+
text-orientation: sideways;
|
|
14
|
+
transform: rotate(180deg);
|
|
15
|
+
// transform: scale( -1, -1 ); // This is the alternative if we don't want to use rotate (though I'm not sure if there is a specific reason why.
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.Writing-rotateRight {
|
|
19
|
+
writing-mode: vertical-rl;
|
|
20
|
+
text-orientation: sideways;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.Writing-downwards,
|
|
24
|
+
.Writing-downwards-lr {
|
|
25
|
+
writing-mode: vertical-lr;
|
|
26
|
+
text-orientation: upright;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.Writing-downwards-rl {
|
|
30
|
+
writing-mode: vertical-rl;
|
|
31
|
+
text-orientation: upright;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@use 'WritingMode';
|
package/UI/Codepen.scss
ADDED
package/UI/Tweet.scss
ADDED
package/UI/Youtube.scss
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.Accordion {
|
|
3
|
+
svg {
|
|
4
|
+
transition: var(--transition-values);
|
|
5
|
+
transition-property: var(--transition-props);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
:where([aria-expanded='true'] svg) {
|
|
9
|
+
transform: rotate(90deg);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.AccordionBtn {
|
|
14
|
+
display: flex;
|
|
15
|
+
justify-content: space-between;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: 0.5em;
|
|
18
|
+
width: 100%;
|
|
19
|
+
padding: 0.75rem;
|
|
20
|
+
border: 0;
|
|
21
|
+
text-align: left;
|
|
22
|
+
|
|
23
|
+
// astro-slot signifies the title, except it's a slot
|
|
24
|
+
&:where(:has(svg + span)),
|
|
25
|
+
&:where(:has(svg + astro-slot)) {
|
|
26
|
+
justify-content: start;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.AccordionContent {
|
|
31
|
+
padding: 0.75rem;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.Breadcrumbs {
|
|
3
|
+
--gap: 0.2em;
|
|
4
|
+
font-size: 0.8rem;
|
|
5
|
+
|
|
6
|
+
ul,
|
|
7
|
+
ol {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-flow: row wrap;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: var(--gap);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.Crumb {
|
|
15
|
+
display: flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--gap);
|
|
18
|
+
|
|
19
|
+
[aria-current] {
|
|
20
|
+
opacity: 0.7;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
package/UI/_Callout.scss
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// --text-callout-header
|
|
2
|
+
// --bg-callout-header
|
|
3
|
+
// Changing font: Just use .CalloutHeader + fontFamily
|
|
4
|
+
|
|
5
|
+
@layer components {
|
|
6
|
+
.Callout {
|
|
7
|
+
border: var(--border-width) var(--border-style) var(--border-color);
|
|
8
|
+
border-radius: var(--radius);
|
|
9
|
+
font-size: 0.85em;
|
|
10
|
+
|
|
11
|
+
> * {
|
|
12
|
+
padding: 0.85rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:where(.CalloutHeader) {
|
|
16
|
+
padding-block: 0.375rem;
|
|
17
|
+
border-bottom: 1px solid var(--divider-color, var(--border-color));
|
|
18
|
+
border-top-left-radius: inherit;
|
|
19
|
+
border-top-right-radius: inherit;
|
|
20
|
+
color: var(--text-callout-header, var(--text-color));
|
|
21
|
+
background: var(--bg-callout-header, var(--bg-color));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:where(.CalloutContent) {
|
|
25
|
+
border-bottom-left-radius: inherit;
|
|
26
|
+
border-bottom-right-radius: inherit;
|
|
27
|
+
color: var(--text-callout-content, var(--text-color));
|
|
28
|
+
background: var(--bg-callout-content, var(--bg-color));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
package/UI/_Drawer.scss
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
[class*='DrawerBackdrop'] {
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 100;
|
|
6
|
+
background-color: oklch(0% 0 0deg / 50%);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.DrawerBackdrop-blur {
|
|
10
|
+
transition-property: background, backdrop-filter;
|
|
11
|
+
backdrop-filter: blur(8px);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Note to self:
|
|
15
|
+
// Need to create another Class to contain default z-index for Absolute Drawers — so this doesn't show above it.
|
|
16
|
+
.DrawerContent {
|
|
17
|
+
position: fixed;
|
|
18
|
+
overflow-y: auto;
|
|
19
|
+
z-index: 100;
|
|
20
|
+
padding: 1rem;
|
|
21
|
+
color: var(--text-color);
|
|
22
|
+
background-color: var(--bg-color);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.DrawerCloseButton {
|
|
26
|
+
padding: 0.5rem;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.FancyList {
|
|
3
|
+
--svg-width: 1em;
|
|
4
|
+
--svg-height: 1lh;
|
|
5
|
+
|
|
6
|
+
display: grid;
|
|
7
|
+
grid-template-columns: auto 1fr;
|
|
8
|
+
column-gap: var(--gap, 0.5em);
|
|
9
|
+
|
|
10
|
+
:where(li) {
|
|
11
|
+
grid-column: 1 / -1;
|
|
12
|
+
display: grid;
|
|
13
|
+
grid-template-columns: subgrid;
|
|
14
|
+
// align-items: center; // Items are not aligned center so multi-row lists work.
|
|
15
|
+
|
|
16
|
+
// Positions the Emoji
|
|
17
|
+
// This is kind of brute-forced at the moment.
|
|
18
|
+
:where(.emoji),
|
|
19
|
+
> :where(astro-slot, astro-island) > :where(.emoji) {
|
|
20
|
+
font-size: 0.75em;
|
|
21
|
+
line-height: 1lh;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Balance with other list styles in .Prose
|
|
27
|
+
.Prose > :where(.FancyList) {
|
|
28
|
+
margin-left: calc(2em - var(--svg-width, 1em) - var(--gap, 0.5em));
|
|
29
|
+
}
|
|
30
|
+
}
|