@rolemodel/optics 0.5.1 → 1.1.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.
@@ -42,7 +42,7 @@
42
42
  width: var(--_op-confirm-dialog-width);
43
43
  border-radius: var(--op-radius-medium);
44
44
  background-color: var(--op-color-background);
45
- box-shadow: var(--op-border-all) var(--op-border-color);
45
+ box-shadow: var(--op-border-all) var(--op-color-border);
46
46
  color: var(--op-color-on-background);
47
47
  contain: paint;
48
48
  font-size: var(--op-font-medium);
@@ -63,7 +63,7 @@
63
63
  }
64
64
 
65
65
  .confirm-dialog__body {
66
- box-shadow: var(--op-border-all) var(--op-border-color);
66
+ box-shadow: var(--op-border-all) var(--op-color-border);
67
67
  }
68
68
 
69
69
  .confirm-dialog__footer {
@@ -12,7 +12,7 @@
12
12
  --__op-divider-height: var(--_op-divider-height-small);
13
13
  --__op-divider-padding: 0;
14
14
 
15
- background-color: var(--op-border-color);
15
+ background-color: var(--op-color-border);
16
16
 
17
17
  // Size Modifiers
18
18
  &.divider--small {
@@ -139,6 +139,7 @@
139
139
 
140
140
  &[type='color'] {
141
141
  padding: var(--op-space-2x-small);
142
+ cursor: pointer;
142
143
 
143
144
  &::-webkit-color-swatch-wrapper {
144
145
  padding: 0;
@@ -159,21 +160,33 @@
159
160
  padding-block: 0;
160
161
 
161
162
  &::file-selector-button {
162
- @extend %btn-global;
163
-
164
- --__op-btn-height: var(--_op-btn-height-small);
165
- --__op-btn-font-size: var(--_op-btn-font-small);
166
- --__op-btn-padding: var(--_op-btn-padding-small);
167
-
163
+ --__op-btn-base-height: var(--op-input-height-small);
164
+ --__op-btn-height: var(--__op-btn-base-height);
165
+
166
+ display: inline-flex;
167
+ min-height: var(--__op-btn-height);
168
+ align-items: center;
169
+ justify-content: center;
170
+ padding: 0 var(--op-space-x-small);
168
171
  border: none;
172
+ border-radius: var(--op-radius-medium);
173
+ appearance: none;
169
174
  background-color: var(--op-color-neutral-plus-eight);
170
175
  box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-four);
171
176
  color: var(--op-color-neutral-on-plus-eight);
177
+ cursor: pointer;
178
+ font-size: var(--op-font-x-small);
179
+ font-weight: var(--op-font-weight-normal);
180
+ gap: var(--op-space-x-small);
172
181
  margin-block: calc((var(--__op-form-control-height) / 2) - (var(--__op-btn-height) / 2));
182
+ text-align: center;
183
+ text-decoration: none;
184
+ transition: var(--op-transition-input);
185
+ white-space: nowrap;
173
186
  }
174
187
 
175
188
  &.form-control--small::file-selector-button {
176
- --__op-btn-height: calc(var(--_op-btn-height-small) - var(--op-space-x-small));
189
+ --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
177
190
  }
178
191
  }
179
192
 
@@ -3,7 +3,7 @@
3
3
  // from Googles CDN like we do for our other fonts
4
4
  // https://developers.google.com/fonts/docs/material_symbols#variable_font_with_google_fonts
5
5
 
6
- @import 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200';
6
+ @import 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block';
7
7
 
8
8
  .material-symbols-outlined,
9
9
  .material-symbols {
@@ -46,7 +46,7 @@
46
46
  width: var(--_op-modal-width);
47
47
  border-radius: var(--op-radius-medium);
48
48
  background-color: var(--op-color-background);
49
- box-shadow: var(--op-border-all) var(--op-border-color);
49
+ box-shadow: var(--op-border-all) var(--op-color-border);
50
50
  color: var(--op-color-on-background);
51
51
  contain: paint;
52
52
  font-size: var(--op-font-medium);
@@ -71,7 +71,7 @@
71
71
 
72
72
  .modal__body {
73
73
  max-height: var(--_op-modal-max-height);
74
- box-shadow: var(--op-border-all) var(--op-border-color);
74
+ box-shadow: var(--op-border-all) var(--op-color-border);
75
75
  overflow-y: auto;
76
76
  }
77
77
 
@@ -17,11 +17,11 @@
17
17
 
18
18
  // Modifiers
19
19
  &.side-panel--border-left {
20
- box-shadow: var(--op-border-left) var(--op-border-color);
20
+ box-shadow: var(--op-border-left) var(--op-color-border);
21
21
  }
22
22
 
23
23
  &.side-panel--border-right {
24
- box-shadow: var(--op-border-right) var(--op-border-color);
24
+ box-shadow: var(--op-border-right) var(--op-color-border);
25
25
  }
26
26
 
27
27
  &.side-panel--border-left.side-panel--border-right {
@@ -69,6 +69,7 @@
69
69
  --__op-sidebar-width: var(--_op-sidebar-drawer-width);
70
70
  --__op-sidebar-brand-width: var(--_op-sidebar-drawer-brand-width);
71
71
 
72
+ z-index: var(--op-z-index-sidebar);
72
73
  display: flex;
73
74
  width: var(--__op-sidebar-width);
74
75
  min-width: var(--__op-sidebar-width);
@@ -12,13 +12,13 @@
12
12
  width: 100%;
13
13
  border-radius: var(--op-radius-medium);
14
14
  border-collapse: collapse;
15
- box-shadow: var(--op-border-all) var(--op-border-color);
15
+ box-shadow: var(--op-border-all) var(--op-color-border);
16
16
  contain: paint;
17
17
  table-layout: auto;
18
18
 
19
19
  thead {
20
20
  background-color: var(--op-color-neutral-plus-eight);
21
- box-shadow: inset var(--op-border-top) var(--op-border-color);
21
+ box-shadow: inset var(--op-border-top) var(--op-color-border);
22
22
  color: var(--op-color-neutral-on-plus-eight);
23
23
 
24
24
  // This Currently does not work in Firefox since it does not support :has yet, but fails gracefully.
@@ -47,11 +47,11 @@
47
47
  }
48
48
 
49
49
  tr:not(:last-child) {
50
- box-shadow: inset var(--op-border-top) var(--op-border-color);
50
+ box-shadow: inset var(--op-border-top) var(--op-color-border);
51
51
  }
52
52
 
53
53
  tfoot tr {
54
- box-shadow: var(--op-border-top) var(--op-border-color);
54
+ box-shadow: var(--op-border-top) var(--op-color-border);
55
55
  }
56
56
 
57
57
  // Layout Modifiers
@@ -1,3 +1,5 @@
1
+ // Inspired by https://blog.logrocket.com/creating-beautiful-tooltips-with-only-css/
2
+
1
3
  %tooltip-global {
2
4
  // Public API
3
5
  --_op-tooltip-max-width: calc(50 * var(--op-size-unit)); // 200px
@@ -1,5 +1,14 @@
1
- @import 'https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap';
2
- @import 'https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400;1,700&display=swap';
1
+ @import 'https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wdth,wght@0,62.5..100,100..900;1,62.5..100,100..900&family=Noto+Serif:ital,wdth,wght@0,62.5..100,100..900;1,62.5..100,100..900&display=swap';
2
+
3
+ // Noto Sans supports:
4
+ // font-weight: {anything between 100 and 900}
5
+ // font-stretch: {anything between 62.5% and 100%}
6
+ // font-style: {normal or italic}
7
+
8
+ // Noto Serif supports:
9
+ // font-weight: {anything between 100 and 900}
10
+ // font-stretch: {anything between 62.5% and 100%}
11
+ // font-style: {normal or italic}
3
12
 
4
13
  // Using Mixins allows us to include them at a component level
5
14
  // as needed and override them.
@@ -128,11 +137,11 @@ $breakpoint-x-large: 1440px; // medium laptop
128
137
  * @tokens Border Color
129
138
  * @presenter Color
130
139
  */
131
- --op-border-color: var(--op-color-neutral-plus-five);
140
+ --op-color-border: var(--op-color-neutral-plus-five);
132
141
  }
133
142
 
134
143
  @mixin box-shadows {
135
- // E.G. box-shadow: var(--op-border-top) var(--op-border-color);
144
+ // E.G. box-shadow: var(--op-border-top) var(--op-color-border);
136
145
 
137
146
  /**
138
147
  * @tokens Border Shadow
@@ -144,8 +153,8 @@ $breakpoint-x-large: 1440px; // medium laptop
144
153
  --op-border-right: var(--op-border-width) 0 0 0;
145
154
  --op-border-bottom: 0 var(--op-border-width) 0 0;
146
155
  --op-border-left: calc(-1 * var(--op-border-width)) 0 0 0;
147
- --op-border-y: var(--op-border-top) var(--op-border-color), var(--op-border-bottom) var(--op-border-color);
148
- --op-border-x: var(--op-border-left) var(--op-border-color), var(--op-border-right) var(--op-border-color);
156
+ --op-border-y: var(--op-border-top) var(--op-color-border), var(--op-border-bottom) var(--op-color-border);
157
+ --op-border-x: var(--op-border-left) var(--op-color-border), var(--op-border-right) var(--op-color-border);
149
158
  }
150
159
 
151
160
  @mixin font-scales {
@@ -240,7 +249,8 @@ $breakpoint-x-large: 1440px; // medium laptop
240
249
  * @tokens Font Family
241
250
  * @presenter FontFamily
242
251
  */
243
- --op-font-family: 'Noto Sans', 'Noto Serif', sans-serif;
252
+ --op-font-family: 'Noto Sans', sans-serif;
253
+ --op-font-family-alt: 'Noto Serif', serif;
244
254
  }
245
255
 
246
256
  @mixin spacing-scales {
@@ -287,7 +297,7 @@ $breakpoint-x-large: 1440px; // medium laptop
287
297
  */
288
298
  --op-z-index-header: 500;
289
299
  --op-z-index-footer: 500;
290
- --op-z-index-drawer: 700;
300
+ --op-z-index-sidebar: 700;
291
301
  --op-z-index-dialog: 800;
292
302
  --op-z-index-dialog-backdrop: 801;
293
303
  --op-z-index-dialog-content: 802;
@@ -447,6 +447,9 @@
447
447
  }
448
448
 
449
449
  @mixin encoded-images {
450
+ /**
451
+ * @tokens Encoded Images
452
+ */
450
453
  --op-encoded-images-dropdown-arrow: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9IiNmZmYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik02IDguMzc1MDFMMCAyLjM3NTAxTDEuNCAwLjk3NTAwNkw2IDUuNTc1MDFMMTAuNiAwLjk3NTAwNkwxMiAyLjM3NTAxTDYgOC4zNzUwMVoiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==');
451
454
  }
452
455
 
@@ -0,0 +1,20 @@
1
+ %aligned-header {
2
+ // Public API (allowed to be overridden)
3
+ --_op-line-height: var(--op-line-height-base);
4
+ --_op-font-size: var(--op-font-4x-large);
5
+
6
+ font-size: var(--_op-font-size);
7
+ font-weight: var(--op-font-weight-semi-bold);
8
+ line-height: var(--_op-line-height);
9
+
10
+ .aligned-header__centered-suffix {
11
+ display: inline-flex;
12
+ height: calc(var(--_op-line-height) * var(--_op-font-size));
13
+ align-items: center;
14
+ vertical-align: top;
15
+ }
16
+ }
17
+
18
+ .aligned-header {
19
+ @extend %aligned-header;
20
+ }
@@ -593,6 +593,7 @@
593
593
  }
594
594
  }
595
595
  },
596
+ "border": "var(--op-color-neutral-plus-five)",
596
597
  "background": "var(--op-color-neutral-plus-eight)",
597
598
  "on-background": "var(--op-color-neutral-on-plus-eight)"
598
599
  },
@@ -623,15 +624,14 @@
623
624
  "width": "1px",
624
625
  "width-large": "2px",
625
626
  "width-x-large": "4px",
626
- "color": "var(--op-color-neutral-plus-five)",
627
627
  "none": "0 0 0 0",
628
628
  "all": "0 0 0 var(--op-border-width)",
629
629
  "top": "0 calc(-1 * var(--op-border-width)) 0 0",
630
630
  "right": "var(--op-border-width) 0 0 0",
631
631
  "bottom": "0 var(--op-border-width) 0 0",
632
632
  "left": "calc(-1 * var(--op-border-width)) 0 0 0",
633
- "y": "var(--op-border-top) var(--op-border-color), var(--op-border-bottom) var(--op-border-color)",
634
- "x": "var(--op-border-left) var(--op-border-color), var(--op-border-right) var(--op-border-color)"
633
+ "y": "var(--op-border-top) var(--op-color-border), var(--op-border-bottom) var(--op-color-border)",
634
+ "x": "var(--op-border-left) var(--op-color-border), var(--op-border-right) var(--op-color-border)"
635
635
  },
636
636
  "font": {
637
637
  "scale-unit": "1rem",
@@ -659,7 +659,7 @@
659
659
  "extra-bold": "800",
660
660
  "black": "900"
661
661
  },
662
- "family": "'Noto Sans', 'Noto Serif', sans-serif"
662
+ "family": "'Noto Sans', sans-serif"
663
663
  },
664
664
  "line-height": {
665
665
  "none": "0",
@@ -719,7 +719,7 @@
719
719
  "z-index": {
720
720
  "header": "500",
721
721
  "footer": "500",
722
- "drawer": "700",
722
+ "sidebar": "700",
723
723
  "dialog": "800",
724
724
  "dialog-backdrop": "801",
725
725
  "dialog-content": "802",
package/package.json CHANGED
@@ -1,23 +1,24 @@
1
1
  {
2
2
  "name": "@rolemodel/optics",
3
- "version": "0.5.1",
3
+ "version": "1.1.0",
4
+ "packageManager": "yarn@4.2.2",
4
5
  "description": "Optics is an scss package that provides base styles and components that can be integrated and customized in a variety of projects.",
5
6
  "main": "dist/scss/optics.scss",
6
7
  "scripts": {
7
8
  "test": "exit 0",
8
- "build": "npm run build:css && npm run build:scss && npm run build:tokens",
9
+ "build": "yarn build:css && yarn build:scss && yarn build:tokens",
9
10
  "build:css": "sass src/optics.scss dist/css/optics.css --load-path=node_modules/",
10
11
  "build:scss": "rsync -a src/ dist/scss --exclude stories",
11
12
  "build:tokens": "node build_token_json --source=src/core/tokens --output=dist/tokens/tokens.json",
12
- "storybook": "storybook dev -p 6006",
13
- "build-storybook": "storybook build",
14
- "lint": "npm run lint:js && npm run lint:css",
15
- "lint-fix": "npm run lint:js --fix && npm run lint:css --fix",
13
+ "storybook": "storybook dev -p 6006 --docs",
14
+ "build-storybook": "storybook build --docs",
15
+ "lint": "yarn lint:js && yarn lint:css",
16
+ "lint-fix": "yarn lint:js --fix && yarn lint:css --fix",
16
17
  "lint:js": "eslint 'src/stories/**/*.js'",
17
18
  "lint:css": "stylelint 'src/**/*.(scss|css)'",
18
19
  "prettier": "prettier -w .",
19
20
  "prettier-check": "prettier -c .",
20
- "sanity-check": "npm run lint && npm run prettier && npm run build && npm run build-storybook && rm -rf ./dist && rm -rf ./storybook-static",
21
+ "sanity-check": "yarn lint && yarn prettier && yarn build && yarn build-storybook && rm -rf ./dist && rm -rf ./storybook-static",
21
22
  "generate": "node ./tools/generate.js"
22
23
  },
23
24
  "repository": {
@@ -45,38 +46,38 @@
45
46
  "modern-css-reset": "^1.4.0"
46
47
  },
47
48
  "devDependencies": {
48
- "@babel/preset-env": "^7.21.5",
49
- "@storybook/addon-essentials": "^7.1.0",
50
- "@storybook/addon-links": "^7.1.0",
51
- "@storybook/addon-mdx-gfm": "^7.1.0",
52
- "@storybook/addon-styling": "^1.3.4",
53
- "@storybook/blocks": "^7.1.0",
54
- "@storybook/html": "^7.1.0",
55
- "@storybook/html-webpack5": "^7.1.0",
56
- "@storybook/testing-library": "^0.2.0",
49
+ "@babel/preset-env": "^7.23.9",
50
+ "@storybook/addon-essentials": "^8.1.3",
51
+ "@storybook/blocks": "^8.1.3",
52
+ "@storybook/html": "^8.1.3",
53
+ "@storybook/html-vite": "^8.1.3",
54
+ "@storybook/manager-api": "^8.1.3",
55
+ "@storybook/preview-api": "^8.1.3",
56
+ "@storybook/test": "^8.1.3",
57
+ "@storybook/theming": "^8.1.3",
57
58
  "eslint": "^8.45.0",
58
- "eslint-config-prettier": "^8.8.0",
59
+ "eslint-config-prettier": "^9.1.0",
59
60
  "eslint-config-standard": "^17.1.0",
60
61
  "eslint-plugin-import": "^2.27.5",
61
62
  "eslint-plugin-n": "^16.0.1",
62
63
  "eslint-plugin-promise": "^6.1.1",
63
64
  "eslint-plugin-storybook": "^0.6.13",
64
65
  "generate-template-files": "^3.2.1",
65
- "postcss-scss": "^4.0.6",
66
+ "postcss": "^8.4.38",
67
+ "postcss-scss": "^4.0.9",
66
68
  "prettier": "^3.0.0",
67
- "react": "^18.2.0",
68
- "react-dom": "^18.2.0",
69
- "sass": "^1.64.0",
70
- "sass-loader": "^13.3.2",
71
- "storybook": "^7.1.0",
72
- "storybook-design-token": "^3.0.0-beta.3",
69
+ "sass": "^1.77.2",
70
+ "sass-loader": "^14.1.0",
71
+ "storybook": "^8.1.3",
72
+ "storybook-design-token": "^3.1.0",
73
73
  "style-loader": "^3.3.3",
74
- "stylelint": "^15.10.1",
75
- "stylelint-config-idiomatic-order": "^9.0.0",
74
+ "stylelint": "^16.2.1",
75
+ "stylelint-config-idiomatic-order": "^10.0.0",
76
76
  "stylelint-config-prettier-scss": "^1.0.0",
77
- "stylelint-config-standard-scss": "^10.0.0",
78
- "stylelint-prettier": "^4.0.0",
79
- "stylelint-scss": "^5.0.1"
77
+ "stylelint-config-standard-scss": "^13.0.0",
78
+ "stylelint-prettier": "^5.0.0",
79
+ "stylelint-scss": "^6.1.0",
80
+ "vite": "^5.2.11"
80
81
  },
81
82
  "peerDependencies": {
82
83
  "tom-select": "^2.0.0"