@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.
Files changed (67) hide show
  1. package/.stylelintrc.js +3 -0
  2. package/.turbo/turbo-lint.log +4 -0
  3. package/Base/_Accessibility.scss +32 -0
  4. package/Base/_Base.scss +57 -0
  5. package/Base/_Focus.scss +38 -0
  6. package/Base/_Transition.scss +8 -0
  7. package/Base/_index.scss +4 -0
  8. package/CHANGELOG.md +56 -0
  9. package/Components/_Box.scss +9 -0
  10. package/Components/_BrowserFrame.scss +89 -0
  11. package/Components/_Figure.scss +5 -0
  12. package/Components/_List.scss +19 -0
  13. package/Components/_Prose.scss +82 -0
  14. package/Components/_Scrollbars.scss +40 -0
  15. package/Components/_SimpleSVG.scss +9 -0
  16. package/Components/_index.scss +12 -0
  17. package/Effects/_Backdrop.scss +4 -0
  18. package/Effects/_Elevation.scss +92 -0
  19. package/Effects/_Glow.scss +51 -0
  20. package/Effects/_Gradients.scss +88 -0
  21. package/Effects/_Shadows.scss +51 -0
  22. package/Effects/_SpecialShadows.scss +45 -0
  23. package/Effects/_Text-Outline.scss +25 -0
  24. package/Effects/_index.scss +12 -0
  25. package/Experimental/_SimplePricingPlan.scss +141 -0
  26. package/Forms/_Button.scss +106 -0
  27. package/Forms/_Combobox.scss +49 -0
  28. package/Forms/_FormBase.scss +43 -0
  29. package/Forms/_FormControls.scss +95 -0
  30. package/Forms/_Range.scss +101 -0
  31. package/Forms/_Select.scss +114 -0
  32. package/Forms/_Switch.scss +66 -0
  33. package/Forms/_TextField.scss +116 -0
  34. package/Forms/_Textarea.scss +41 -0
  35. package/Forms/_index.scss +10 -0
  36. package/Typography/_WritingMode.scss +33 -0
  37. package/Typography/_index.scss +1 -0
  38. package/UI/Codepen.scss +11 -0
  39. package/UI/Tweet.scss +5 -0
  40. package/UI/Youtube.scss +13 -0
  41. package/UI/_Accordion.scss +33 -0
  42. package/UI/_Breadcrumbs.scss +24 -0
  43. package/UI/_CQChecker.scss +16 -0
  44. package/UI/_Callout.scss +31 -0
  45. package/UI/_Drawer.scss +28 -0
  46. package/UI/_Dropdown.scss +14 -0
  47. package/UI/_FancyList.scss +30 -0
  48. package/UI/_PerspectiveHover.scss +9 -0
  49. package/UI/_Popover.scss +25 -0
  50. package/UI/_Resizer.scss +43 -0
  51. package/UI/_Spotlight.scss +42 -0
  52. package/UI/_Status.scss +33 -0
  53. package/UI/_Tabs.scss +112 -0
  54. package/UI/_Textwall.scss +22 -0
  55. package/UI/_index.scss +17 -0
  56. package/Utilities/_Shapes.scss +20 -0
  57. package/Utilities/_index.scss +1 -0
  58. package/Variables/_Globals.scss +33 -0
  59. package/Variables/_index.scss +1 -0
  60. package/_Animations.scss +18 -0
  61. package/_Fill.scss +314 -0
  62. package/package.json +18 -0
  63. package/styles.scss +12 -0
  64. package/utils/_index.scss +3 -0
  65. package/utils/_mixins.scss +6 -0
  66. package/utils/functions/_fns.scss +77 -0
  67. package/utils/functions/_fonts.scss +114 -0
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ extends: ['@splendidlabz/stylelint-config'],
3
+ }
@@ -0,0 +1,4 @@
1
+
2
+ > @splendidlabs/scss@1.0.0 lint
3
+ > stylelint '**/*.{css,scss}' --fix
4
+
@@ -0,0 +1,32 @@
1
+ // ========================
2
+ // Remove animations and transitions
3
+ // @see https://hankchizljaw.com/wrote/a-modern-css-reset/
4
+ // ========================
5
+ @layer components {
6
+ @media (prefers-reduced-motion: reduce) {
7
+ * {
8
+ animation-duration: 0.01ms !important;
9
+ animation-iteration-count: 1 !important;
10
+ transition-duration: 0.01ms !important;
11
+ scroll-behavior: auto !important;
12
+ }
13
+ }
14
+
15
+ // ========================
16
+ // Hides content visually.
17
+ // So it's only available to screen readers and bots 🤖
18
+ // Solution by Joe Watkins.
19
+ // @see https://zellwk.com/blog/hide-content-accessibly/
20
+ // ========================
21
+ .sr-only {
22
+ overflow: hidden;
23
+ position: absolute;
24
+ width: 1px;
25
+ height: auto;
26
+ margin: 0;
27
+ padding: 0;
28
+ border: 0;
29
+ clip: rect(0 0 0 0);
30
+ white-space: nowrap;
31
+ }
32
+ }
@@ -0,0 +1,57 @@
1
+ // ========================
2
+ // HTML and Body
3
+ // We don't set a default typography size here because it's better for the user to set it in the root of the project.
4
+ // ========================
5
+ @layer components {
6
+ html {
7
+ font-family: system-ui, sans-serif;
8
+ line-height: var(--leading, 1.5);
9
+ font-variant-ligatures: common-ligatures;
10
+ }
11
+
12
+ body {
13
+ color: var(--text-color);
14
+ background-color: var(--bg-color);
15
+ text-rendering: optimizelegibility;
16
+ }
17
+
18
+ // ========================
19
+ // Nicer Headers
20
+ // ========================
21
+ h1,
22
+ h2,
23
+ h3,
24
+ h4,
25
+ h5,
26
+ h6 {
27
+ font-variant-numeric: oldstyle-nums proportional-nums;
28
+ }
29
+
30
+ // ========================
31
+ // Default form and buttons decorations
32
+ // ========================
33
+ fieldset {
34
+ border: none;
35
+ }
36
+
37
+ a {
38
+ color: var(--text-color, currentcolor);
39
+ text-decoration: none;
40
+
41
+ &:visited {
42
+ color: var(--text-visited-color, var(--text-color, currentcolor));
43
+ }
44
+
45
+ &:hover {
46
+ color: var(--text-hover-color);
47
+ }
48
+
49
+ &:focus {
50
+ color: var(--text-focus-color, var(--text-hover-color));
51
+ }
52
+
53
+ &:active {
54
+ color: var(--text-active-color, var(--text-hover-color));
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,38 @@
1
+ // Might have to rename this file to Outlines instead
2
+ // Setup Outlines for all elements for transitions and animations. If we do this, we don't have to specify each focusable element (which can be a lot).
3
+
4
+ @layer components {
5
+ * {
6
+ outline: var(--outline-width) var(--outline-style) transparent;
7
+ outline-offset: var(--outline-offset);
8
+ }
9
+
10
+ // Styling Focus Visible States
11
+ a,
12
+ button,
13
+ :where([tabindex]:not([tabindex='-1'])) {
14
+ &:focus-visible {
15
+ outline-color: var(--outline-color);
16
+ }
17
+ }
18
+
19
+ .Focus-within {
20
+ &:focus-within {
21
+ outline: var(--outline-width) var(--outline-style) transparent;
22
+ outline-offset: var(--outline-offset);
23
+ }
24
+
25
+ *:focus-visible {
26
+ outline-color: transparent;
27
+ }
28
+ }
29
+
30
+ // TODO: Blog about this.
31
+ // These three properties used to preserve outlines, because overflow cuts off outlines. For scrollable elements.
32
+ // Content-box is necessary. If not, box will cut on the right side.
33
+ .Preserve-outlines {
34
+ box-sizing: content-box;
35
+ margin: calc(var(--outline-width) * -1);
36
+ padding: calc(var(--outline-width));
37
+ }
38
+ }
@@ -0,0 +1,8 @@
1
+ // Prepares every element for transition
2
+ // This doesn't work and creates a lot of problems
3
+ // @layer components {
4
+ // * {
5
+ // transition: none var(--transition-values);
6
+ // transition-property: var(--transition-props);
7
+ // }
8
+ // }
@@ -0,0 +1,4 @@
1
+ @use 'Accessibility';
2
+ @use 'Base';
3
+ @use 'Focus';
4
+ @use 'Transition';
package/CHANGELOG.md ADDED
@@ -0,0 +1,56 @@
1
+ # @splendidlabz/styles
2
+
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - - Changed default button styles
8
+ - Removed `text:balance` from `Prose`
9
+ - Update Callout Styles
10
+
11
+ ## 2.1.3
12
+
13
+ ### Patch Changes
14
+
15
+ - Fix Layouts dependency
16
+
17
+ ## 2.1.2
18
+
19
+ ### Patch Changes
20
+
21
+ - - Update `PopoverContent` and `DrawerContent` default z-index values.
22
+ - `Divider` classes from influencing any class with `Divider` class names by modifying the `*=` class selector to target `Divider-`.
23
+
24
+ ## 2.1.1
25
+
26
+ ### Patch Changes
27
+
28
+ - Prevent Divider class from influencing others with the 'Divider' name
29
+
30
+ ## 2.1.0
31
+
32
+ ### Minor Changes
33
+
34
+ - Add robust before/after element styling with InputGroup
35
+
36
+ ### Patch Changes
37
+
38
+ - Cleanup form base styles
39
+ - 8ef3178: Ensure combobox options use default cursor
40
+
41
+ ## 2.0.0
42
+
43
+ ### Major Changes
44
+
45
+ - 6c6ecec: Cleaned up Layouts by moving non-layout related components and declarations from `@splendidlabz/layouts` to `@splendidlabz/styles`.
46
+
47
+ Changes include:
48
+
49
+ - Moving `Box` and `Shapes` to `@splendidlabz/styles`
50
+ - Moving style-related resets to `@splendidlabz/styles`
51
+ - Moving accessibility preferences to `@splendidlabz/styles`
52
+ - Moving typography preferences to `@splendidlabz/styles`
53
+
54
+ ### Minor Changes
55
+
56
+ - a9128f4: - Add `disabled` and `readonly` input styles
@@ -0,0 +1,9 @@
1
+ @layer components {
2
+ .Box {
3
+ // overflow: hidden;
4
+ padding: 1rem;
5
+ border: var(--border-width, 1px) var(--border-style, solid)
6
+ var(--border-color, black);
7
+ border-radius: var(--radius, 0.5em);
8
+ }
9
+ }
@@ -0,0 +1,89 @@
1
+ // radius
2
+ // bg-frame-header. NEED FALLBACK COLOR
3
+ // bg-frame-content. NEED FALLBACK COLOR
4
+ // border-width
5
+ // border-frame-header
6
+ // border-frame-content
7
+ // border-color
8
+
9
+ // dot-size
10
+ // dot-gap
11
+ // dot-color
12
+ // dot-1-color
13
+ // dot-2-color
14
+ // dot-3-color
15
+
16
+ @layer components {
17
+ :where([class*='BrowserFrame']) {
18
+ .FrameHeader {
19
+ display: flex;
20
+ flex-flow: row;
21
+ align-items: center;
22
+ border: var(--border-width, 1px) solid
23
+ var(--border-frame-header, var(--border-color));
24
+ border-bottom: 0;
25
+ border-radius: var(--radius) var(--radius) 0 0;
26
+ background: var(--bg-frame-header);
27
+ }
28
+
29
+ .FrameHeaderDots {
30
+ display: flex;
31
+ flex-flow: row;
32
+ align-items: center;
33
+ gap: var(--dot-gap, 0.5rem);
34
+ padding: 0.75rem 1rem;
35
+ }
36
+
37
+ .FrameHeaderDot {
38
+ width: var(--dot-size, 0.7rem);
39
+ height: var(--dot-size, 0.7rem);
40
+ border-radius: 50%;
41
+ background-color: var(--dot-color, #424242);
42
+ }
43
+
44
+ .FrameHeaderTabs {
45
+ overflow: hidden;
46
+ align-self: end;
47
+ padding-top: 0.5rem;
48
+
49
+ .Tablist {
50
+ gap: 0.25rem;
51
+ padding-inline: calc(var(--outline-width) * 2);
52
+ }
53
+ }
54
+
55
+ .FrameContent {
56
+ border: var(--border-width, 1px) solid
57
+ var(--border-frame-content, var(--border-color));
58
+ border-radius: 0 0 var(--radius) var(--radius);
59
+ background: var(--bg-frame-content);
60
+
61
+ > :where(.Content) {
62
+ // overflow: auto;
63
+ padding: 1rem;
64
+ }
65
+
66
+ > :where(.Background) svg {
67
+ width: 100%;
68
+ height: 100%;
69
+ }
70
+ }
71
+ }
72
+
73
+ // Colored dots
74
+ .BrowserFrame-colored {
75
+ .FrameHeaderDot {
76
+ &:first-child {
77
+ background-color: var(--dot-1-color, #e2544d);
78
+ }
79
+
80
+ &:nth-child(2) {
81
+ background-color: var(--dot-2-color, #d79f27);
82
+ }
83
+
84
+ &:last-child {
85
+ background-color: var(--dot-3-color, #22a936);
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,5 @@
1
+ figcaption {
2
+ margin-block: 0.5em;
3
+ font-size: 0.8em;
4
+ text-align: center;
5
+ }
@@ -0,0 +1,19 @@
1
+ @layer components {
2
+ // Not sure what is used for now... might be able to delete.
3
+ .List {
4
+ margin-left: 1em;
5
+ list-style-position: outside;
6
+
7
+ > :where(ul, ol) {
8
+ padding-left: 1em;
9
+ }
10
+ }
11
+
12
+ ul[class~='List'] {
13
+ list-style-type: disc;
14
+ }
15
+
16
+ ol[class='List'] {
17
+ list-style: decimal;
18
+ }
19
+ }
@@ -0,0 +1,82 @@
1
+ @layer components {
2
+ // Updating Prose to use Flex too, but this is incomplete
3
+ .Prose {
4
+ display: flex;
5
+ flex-flow: column;
6
+ gap: 1em;
7
+ max-width: 100%;
8
+
9
+ // Using padding instead of margin, so #targets will leave some whitespace above when scolling to the component. (We can also use scroll-margin-top + margin-top... but this is simpler).
10
+ * + :where(h2, h3),
11
+ * + :where(astro-island, astro-slot) > :where(:where(h2, h3):first-child) {
12
+ padding-top: 2em;
13
+ }
14
+
15
+ * + :where(h4, h5, h6),
16
+ *
17
+ + :where(astro-island, astro-slot)
18
+ > :where(:where(h4, h5, h6):first-child) {
19
+ padding-top: 1em;
20
+ }
21
+
22
+ :where(ul, ol) {
23
+ list-style-type: revert-layer;
24
+ }
25
+
26
+ // Basic list styles
27
+ > :where(ul, ol),
28
+ > :where(astro-island, astro-slot) > :where(ul, ol) {
29
+ list-style-position: outside;
30
+ margin-left: 2em;
31
+
32
+ :where(ul, ol) {
33
+ padding-left: 2em;
34
+ }
35
+
36
+ li {
37
+ font-variant-numeric: lining-nums;
38
+ }
39
+
40
+ li + li {
41
+ margin-top: 0.25em;
42
+ }
43
+
44
+ li:has(li) + li {
45
+ margin-top: 0.5em;
46
+ }
47
+
48
+ li > :where(ul, ol) {
49
+ margin-top: 0.25em;
50
+ }
51
+ }
52
+
53
+ code {
54
+ font-size: 0.8em;
55
+ }
56
+
57
+ :not(pre) > code {
58
+ display: inline;
59
+ padding: 0.2em 0.25em;
60
+ border-radius: var(--radius);
61
+ }
62
+
63
+ // Code Styles
64
+ pre {
65
+ padding: 1em;
66
+ border-radius: var(--radius);
67
+
68
+ code {
69
+ background-color: transparent;
70
+ }
71
+ }
72
+
73
+ :where(a) {
74
+ text-decoration: underline;
75
+ }
76
+
77
+ > img {
78
+ border: 1px solid oklch(90% 0 0deg);
79
+ border-radius: var(--radius);
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,40 @@
1
+ // Custom Scrollbars
2
+ :root {
3
+ --scrollbar-width: thin;
4
+ --scrollbar-size: 12px;
5
+ color-scheme: dark light;
6
+
7
+ @media (prefers-color-scheme: light) {
8
+ --scrollbar-thumb-color: #c1c1c1;
9
+ --scrollbar-track-color: #fafafa;
10
+ }
11
+
12
+ @media (prefers-color-scheme: dark) {
13
+ --scrollbar-thumb-color: #6b6b6b;
14
+ --scrollbar-track-color: #2d2d2d;
15
+ }
16
+ }
17
+
18
+ @layer components {
19
+ * {
20
+ scroll-behavior: var(--scroll-behavior, smooth);
21
+ scrollbar-width: var(--scrollbar-width, auto);
22
+ scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-track-color);
23
+
24
+ /* Works on Chrome, Edge, and Safari */
25
+ &::-webkit-scrollbar {
26
+ width: var(--scrollbar-size);
27
+ height: var(--scrollbar-size);
28
+ }
29
+
30
+ &::-webkit-scrollbar-track {
31
+ background: var(--scrollbar-track-color);
32
+ }
33
+
34
+ &::-webkit-scrollbar-thumb {
35
+ border: 3px solid var(--scrollbar-track-color);
36
+ border-radius: 100px;
37
+ background-color: var(--scrollbar-thumb-color);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,9 @@
1
+ @layer components {
2
+ .SimpleSVG {
3
+ :where(path) {
4
+ fill: var(--fill-color);
5
+ stroke: var(--stroke-color); // Fallback to text color
6
+ stroke-width: var(--stroke-width);
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,12 @@
1
+ // ========================
2
+ // Components
3
+ // ========================
4
+ // These can be used without JavaScript
5
+
6
+ @use 'Box';
7
+ @use 'Scrollbars';
8
+ @use 'BrowserFrame';
9
+ @use 'List';
10
+ @use 'Prose';
11
+ @use 'Figure';
12
+ @use 'SimpleSVG';
@@ -0,0 +1,4 @@
1
+ .Backdrop-blur {
2
+ transition-property: backdrop-filter;
3
+ backdrop-filter: blur(var(--blur, 8px));
4
+ }
@@ -0,0 +1,92 @@
1
+ @use './SpecialShadows' as *;
2
+
3
+ @layer components {
4
+ @for $i from 1 through 6 {
5
+ .elevation-#{$i} {
6
+ --shadow-color: rgb(0 0 0 / 8%);
7
+
8
+ @include StackedShadow($elevation: $i);
9
+ }
10
+ }
11
+
12
+ .tw-elevation {
13
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
14
+ }
15
+
16
+ .tw-elevation-2 {
17
+ box-shadow:
18
+ 0 1px 3px 0 rgb(0 0 0 / 10%),
19
+ 0 1px 2px -1px rgb(0 0 0 / 10%);
20
+ }
21
+
22
+ .tw-elevation-3 {
23
+ box-shadow:
24
+ 0 4px 6px -1px rgb(0 0 0 / 10%),
25
+ 0 2px 4px -2px rgb(0 0 0 / 10%);
26
+ }
27
+
28
+ .tw-elevation-4 {
29
+ box-shadow:
30
+ 0 10px 15px -3px rgb(0 0 0 / 10%),
31
+ 0 4px 6px -4px rgb(0 0 0 / 10%);
32
+ }
33
+
34
+ .tw-elevation-5 {
35
+ box-shadow:
36
+ 0 20px 25px -5px rgb(0 0 0 / 10%),
37
+ 0 8px 10px -6px rgb(0 0 0 / 10%);
38
+ }
39
+
40
+ .tw-elevation-6 {
41
+ box-shadow: 0 25px 50px -12px rgb(0 0 0 / 25%);
42
+ }
43
+
44
+ .mui-elevation-1 {
45
+ box-shadow:
46
+ 0 2px 1px -1px rgb(0 0 0 / 20%),
47
+ 0 1px 1px 0 rgb(0 0 0 / 14%),
48
+ 0 1px 3px 0 rgb(0 0 0 / 12%);
49
+ }
50
+
51
+ .mui-elevation-2 {
52
+ box-shadow:
53
+ 0 3px 1px -2px rgb(0 0 0 / 20%),
54
+ 0 2px 2px 0 rgb(0 0 0 / 14%),
55
+ 0 1px 5px 0 rgb(0 0 0 / 12%);
56
+ }
57
+
58
+ .mui-elevation-3 {
59
+ box-shadow:
60
+ 0 3px 3px -2px rgb(0 0 0 / 20%),
61
+ 0 3px 4px 0 rgb(0 0 0 / 14%),
62
+ 0 1px 8px 0 rgb(0 0 0 / 12%);
63
+ }
64
+
65
+ .mui-elevation-4 {
66
+ box-shadow:
67
+ 0 2px 4px -1px rgb(0 0 0 / 20%),
68
+ 0 4px 5px 0 rgb(0 0 0 / 14%),
69
+ 0 1px 10px 0 rgb(0 0 0 / 12%);
70
+ }
71
+
72
+ .mui-elevation-5 {
73
+ box-shadow:
74
+ 0 3px 5px -1px rgb(0 0 0 / 20%),
75
+ 0 5px 8px 0 rgb(0 0 0 / 14%),
76
+ 0 1px 14px 0 rgb(0 0 0 / 12%);
77
+ }
78
+
79
+ .mui-elevation-6 {
80
+ box-shadow:
81
+ 0 3px 5px -1px rgb(0 0 0 / 20%),
82
+ 0 6px 10px 0 rgb(0 0 0 / 14%),
83
+ 0 1px 18px 0 rgb(0 0 0 / 12%);
84
+ }
85
+
86
+ .mui-elevation-7 {
87
+ box-shadow:
88
+ 0 4px 5px -2px rgb(0 0 0 / 20%),
89
+ 0 7px 10px 1px rgb(0 0 0 / 14%),
90
+ 0 2px 16px 1px rgb(0 0 0 / 12%);
91
+ }
92
+ }
@@ -0,0 +1,51 @@
1
+ // Not ready. May be removing this in favour of shadow instead.
2
+ @layer components {
3
+ .glow {
4
+ --shadow-x: 0;
5
+ --shadow-y: 0;
6
+ --shadow-blur: 0.5em;
7
+ --shadow-spread: 0.25em;
8
+ --shadow-alpha: 0.5;
9
+
10
+ position: relative;
11
+
12
+ > * {
13
+ position: relative;
14
+ z-index: 1;
15
+ }
16
+
17
+ &:hover,
18
+ &:focus {
19
+ --shadow-alpha: 1;
20
+ }
21
+
22
+ &::before {
23
+ content: '';
24
+ position: absolute;
25
+ // Required if parent element is inline-block.
26
+ // Not required if parent element is inline-flex
27
+ top: calc(var(--border-width, 0px) * -1);
28
+ left: calc(var(--border-width, 0px) * -1);
29
+ box-sizing: content-box;
30
+ width: 100%;
31
+ height: 100%;
32
+ border: inherit;
33
+ border-radius: inherit;
34
+ box-shadow: var(--shadow-x) var(--shadow-y) var(--shadow-blur)
35
+ var(--shadow-spread) var(--shadow-color);
36
+ opacity: var(--shadow-alpha);
37
+ transition: var(--transition-values);
38
+ transition-property: opacity;
39
+ }
40
+ }
41
+
42
+ .glow-2 {
43
+ --shadow-blur: 1em;
44
+ --shadow-spread: 0.375em;
45
+ }
46
+
47
+ .glow-3 {
48
+ --shadow-blur: 1.5em;
49
+ --shadow-spread: 0.5em;
50
+ }
51
+ }