@electrovir/color 1.7.11 → 2.0.0-beta.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 (32) hide show
  1. package/dist/data/color-class/color.d.ts +2 -1
  2. package/dist/data/color-class/color.js +9 -9
  3. package/dist/data/contrast/contrast.js +6 -4
  4. package/dist/demo/all-book-pages.js +1 -10
  5. package/dist/demo/top-level-pages.d.ts +0 -1
  6. package/dist/demo/top-level-pages.js +0 -4
  7. package/dist/demo/vir-demo.element.js +5 -3
  8. package/dist/index.d.ts +0 -10
  9. package/dist/index.js +0 -10
  10. package/package.json +27 -29
  11. package/dist/data/local-storage.client.d.ts +0 -4
  12. package/dist/data/local-storage.client.js +0 -6
  13. package/dist/elements/vir-all-color-space-sliders.element.d.ts +0 -11
  14. package/dist/elements/vir-all-color-space-sliders.element.js +0 -53
  15. package/dist/elements/vir-all-spaces-color-picker.element.d.ts +0 -15
  16. package/dist/elements/vir-all-spaces-color-picker.element.js +0 -69
  17. package/dist/elements/vir-color-details.element.d.ts +0 -14
  18. package/dist/elements/vir-color-details.element.js +0 -151
  19. package/dist/elements/vir-color-format-sliders.element.d.ts +0 -14
  20. package/dist/elements/vir-color-format-sliders.element.js +0 -58
  21. package/dist/elements/vir-color-pair-contrast-summary.element.d.ts +0 -9
  22. package/dist/elements/vir-color-pair-contrast-summary.element.js +0 -307
  23. package/dist/elements/vir-color-pair.element.d.ts +0 -17
  24. package/dist/elements/vir-color-pair.element.js +0 -197
  25. package/dist/elements/vir-color-picker.element.d.ts +0 -20
  26. package/dist/elements/vir-color-picker.element.js +0 -270
  27. package/dist/elements/vir-color-slider.element.d.ts +0 -14
  28. package/dist/elements/vir-color-slider.element.js +0 -118
  29. package/dist/elements/vir-color-swatch.element.d.ts +0 -20
  30. package/dist/elements/vir-color-swatch.element.js +0 -48
  31. package/dist/elements/vir-contrast-indicator.element.d.ts +0 -10
  32. package/dist/elements/vir-contrast-indicator.element.js +0 -96
@@ -1,58 +0,0 @@
1
- /* node:coverage disable */
2
- import { getObjectTypedKeys } from '@augment-vir/common';
3
- import { css, defineElement, defineElementEvent, html, listen, nothing } from 'element-vir';
4
- import { noNativeSpacing } from 'vira/dist/styles/native-styles.js';
5
- import { colorFormats, } from '../data/color-class/color-formats.js';
6
- import { VirColorSlider } from './vir-color-slider.element.js';
7
- /**
8
- * Color sliders for all coordinates within a specific color format.
9
- *
10
- * @category Elements
11
- */
12
- export const VirColorFormatSliders = defineElement()({
13
- tagName: 'vir-color-format-sliders',
14
- styles: css `
15
- :host {
16
- display: flex;
17
- flex-direction: column;
18
- }
19
-
20
- h3 {
21
- ${noNativeSpacing};
22
- }
23
- `,
24
- events: {
25
- colorChange: defineElementEvent(),
26
- },
27
- render({ inputs, dispatch, events }) {
28
- const colorFormat = colorFormats[inputs.colorFormatName];
29
- const coordinateTemplates = getObjectTypedKeys(colorFormat.coords).map((colorCoordinate) => {
30
- return html `
31
- <${VirColorSlider.assign({
32
- color: inputs.color,
33
- colorCoordinateName: colorCoordinate,
34
- colorFormatName: inputs.colorFormatName,
35
- })}
36
- ${listen(VirColorSlider.events.valueChange, (event) => {
37
- const newColor = inputs.color.clone();
38
- newColor.set({
39
- [inputs.colorFormatName]: {
40
- [colorCoordinate]: event.detail,
41
- },
42
- });
43
- const newValue = newColor.toCss()[colorFormat.conversionFormat];
44
- dispatch(new events.colorChange(newValue));
45
- })}
46
- ></${VirColorSlider}>
47
- `;
48
- });
49
- return html `
50
- ${inputs.showFormatName
51
- ? html `
52
- <h3>${inputs.colorFormatName}</h3>
53
- `
54
- : nothing}
55
- ${coordinateTemplates}
56
- `;
57
- },
58
- });
@@ -1,9 +0,0 @@
1
- /**
2
- * A huge summary of a color pair's contrast levels, font sizes, font weights, etc.
3
- *
4
- * @category Elements
5
- */
6
- export declare const VirColorPairContrastSummary: import("element-vir").DeclarativeElementDefinition<"vir-color-pair-contrast-summary", {
7
- foregroundColor: string;
8
- backgroundColor: string;
9
- }, {}, {}, "vir-color-pair-contrast-summary-", "vir-color-pair-contrast-summary-", readonly [], readonly []>;
@@ -1,307 +0,0 @@
1
- /* node:coverage disable */
2
- import { assertWrap } from '@augment-vir/assert';
3
- import { getObjectTypedEntries, round } from '@augment-vir/common';
4
- import { classMap, css, defineElement, html, unsafeCSS } from 'element-vir';
5
- import { ViraBoldText } from 'vira/dist/elements/vira-bold-text.element.js';
6
- import { viraFontCssVars } from 'vira/dist/styles/font.js';
7
- import { noNativeSpacing } from 'vira/dist/styles/native-styles.js';
8
- import { defineTable } from 'vira/dist/util/define-table.js';
9
- import { Color } from '../data/color-class/color.js';
10
- import { calculateContrast, calculateFontSizes, contrastLevelLabel, contrastLevels, fontWeightByName, } from '../data/contrast/contrast.js';
11
- import { VirColorSwatch } from './vir-color-swatch.element.js';
12
- import { VirContrastIndicator } from './vir-contrast-indicator.element.js';
13
- /**
14
- * A huge summary of a color pair's contrast levels, font sizes, font weights, etc.
15
- *
16
- * @category Elements
17
- */
18
- export const VirColorPairContrastSummary = defineElement()({
19
- tagName: 'vir-color-pair-contrast-summary',
20
- styles: css `
21
- :host {
22
- display: flex;
23
- justify-content: center;
24
- align-items: center;
25
- gap: 32px;
26
- }
27
-
28
- /* Color overlay styles */
29
- .color-overlay {
30
- display: flex;
31
- align-items: center;
32
- max-width: 100%;
33
- gap: 8px;
34
- }
35
-
36
- .constant-size-wrapper {
37
- display: flex;
38
- align-items: baseline;
39
- gap: 5cqmin;
40
- font-size: 20cqmin;
41
- }
42
-
43
- .square {
44
- margin: 12px 0;
45
- width: 20cqmin;
46
- height: 20cqmin;
47
- background-color: currentColor;
48
- }
49
-
50
- .foreground-content {
51
- display: flex;
52
- flex-direction: column;
53
- position: relative;
54
- }
55
-
56
- .needed-size {
57
- display: flex;
58
- justify-content: center;
59
- top: 100%;
60
- left: 0;
61
- text-align: center;
62
- position: absolute;
63
- width: 100%;
64
- }
65
-
66
- ${VirContrastIndicator} {
67
- width: 100%;
68
- }
69
-
70
- .color-overlay td {
71
- padding: 4px 8px;
72
- font-weight: bold;
73
- }
74
-
75
- .color-overlay th {
76
- padding: 4px 8px;
77
- text-align: end;
78
- font-weight: normal;
79
- }
80
-
81
- /* Text weights styles */
82
- .text-weights td {
83
- padding: 4px;
84
- }
85
-
86
- .size-display {
87
- height: 50px;
88
- width: 100px;
89
- overflow: hidden;
90
- display: flex;
91
- align-items: center;
92
- }
93
-
94
- .cell-size {
95
- width: 5em;
96
- }
97
-
98
- /* Contrast levels styles */
99
- .contrast-levels td {
100
- padding: 4px;
101
- }
102
-
103
- .contrast-levels tr {
104
- opacity: 0.4;
105
- }
106
-
107
- .contrast-levels .selected-row {
108
- opacity: 1;
109
- font-weight: bold;
110
- }
111
-
112
- pre {
113
- ${noNativeSpacing};
114
- font-family: ${viraFontCssVars['vira-monospace'].value};
115
- }
116
-
117
- .monospace-font {
118
- font-family: ${viraFontCssVars['vira-monospace'].value};
119
- }
120
- `,
121
- render({ inputs }) {
122
- const contrast = calculateContrast({
123
- background: new Color(inputs.backgroundColor).toCss().rgb,
124
- foreground: new Color(inputs.foregroundColor).toCss().rgb,
125
- });
126
- const { rows: colorPairRows } = defineTable({
127
- headers: [
128
- {
129
- key: 'colorLayer',
130
- },
131
- {
132
- key: 'colorValue',
133
- },
134
- ],
135
- originalData: getObjectTypedEntries({
136
- 'Foreground:': new Color(inputs.foregroundColor).toFormattedStrings().hexString,
137
- 'Background:': new Color(inputs.backgroundColor).toFormattedStrings().hexString,
138
- 'Contrast:': `${contrast.contrast} Lc`.padEnd(9, ' '),
139
- }),
140
- dataMap: ([colorLayer, value,]) => {
141
- return {
142
- colorLayer,
143
- colorValue: html `
144
- <pre>${value}</pre>
145
- `,
146
- };
147
- },
148
- });
149
- const { rows: weightRows } = defineTable({
150
- headers: [
151
- {
152
- key: 'weight',
153
- },
154
- {
155
- key: 'size',
156
- },
157
- ],
158
- originalData: Object.entries(contrast.fontSizes).map(([weight, size,]) => {
159
- return {
160
- weight: Number(weight),
161
- size,
162
- };
163
- }),
164
- dataMap: ({ size, weight }) => {
165
- return {
166
- size: `${round(size, {
167
- digits: 1,
168
- })}px`,
169
- weight: html `
170
- <span
171
- style=${css `
172
- font-weight: ${weight};
173
- `}
174
- >
175
- ${weight}
176
- </span>
177
- `,
178
- };
179
- },
180
- });
181
- const { rows: levelRows } = defineTable({
182
- headers: [
183
- {
184
- key: 'boundaryLc',
185
- },
186
- {
187
- key: 'levelName',
188
- },
189
- ],
190
- originalData: contrastLevels,
191
- dataMap: (contrastLevel) => {
192
- return {
193
- boundaryLc: `${contrastLevel.min} Lc`,
194
- levelName: contrastLevelLabel[contrastLevel.name],
195
- };
196
- },
197
- });
198
- return html `
199
- <div class="color-overlay">
200
- <${VirColorSwatch.assign({
201
- backgroundColor: inputs.backgroundColor,
202
- foregroundColor: inputs.foregroundColor,
203
- })}>
204
- <div class="foreground-content">
205
- <div class="constant-size-wrapper">
206
- <div class="square"></div>
207
- <b>Aa</b>
208
- </div>
209
- <div class="needed-size">
210
- <span
211
- style=${css `
212
- font-size: ${contrast.fontSizes[fontWeightByName.Normal]}px;
213
- line-height: ${contrast.fontSizes[fontWeightByName.Normal] *
214
- 0.77}px;
215
- visibility: ${unsafeCSS(contrast.fontSizes[fontWeightByName.Normal] > 900
216
- ? 'hidden'
217
- : 'visible')};
218
- `}
219
- >
220
- Min Size
221
- </span>
222
- </div>
223
- </div>
224
- </${VirColorSwatch}>
225
- <div class="details">
226
- <table>
227
- <tbody>
228
- ${colorPairRows.map((row) => {
229
- const cells = row.cells.map((cell, index) => {
230
- const element = index ? 'td' : 'th';
231
- return html `
232
- <${element}>${cell.content}</${element}>
233
- `;
234
- });
235
- return html `
236
- <tr>${cells}</tr>
237
- `;
238
- })}
239
- </tbody>
240
- </table>
241
-
242
- <${VirContrastIndicator.assign({
243
- contrast,
244
- fontWeight: fontWeightByName.Normal,
245
- })}></${VirContrastIndicator}>
246
- </div>
247
- </div>
248
-
249
- <table class="text-weights">
250
- ${weightRows.map((row) => {
251
- const cells = row.cells.map((cell) => {
252
- return html `
253
- <td class="cell-${cell.key} monospace-font">${cell.content}</td>
254
- `;
255
- });
256
- return html `
257
- <tr>
258
- ${cells}
259
- <td>
260
- <div
261
- class="size-display"
262
- style=${css `
263
- background-color: ${unsafeCSS(inputs.backgroundColor)};
264
- color: ${unsafeCSS(inputs.foregroundColor)};
265
- font-weight: ${row.data.weight};
266
- font-size: ${row.data.size}px;
267
- `}
268
- >
269
- <span>Text</span>
270
- </div>
271
- </td>
272
- </tr>
273
- `;
274
- })}
275
- </table>
276
-
277
- <table class="contrast-levels">
278
- ${levelRows.map((row) => {
279
- const isSelectedRow = contrast.contrastLevel.name === row.data.name;
280
- const cells = row.cells.map((cell) => {
281
- return html `
282
- <td><${ViraBoldText.assign({
283
- bold: isSelectedRow,
284
- text: assertWrap.isString(cell.content),
285
- })}><${ViraBoldText}></td>
286
- `;
287
- });
288
- const title = [
289
- row.data.description,
290
- '\nFont weights to font sizes:',
291
- JSON.stringify(calculateFontSizes(row.data.min), null, 4),
292
- ].join('\n');
293
- return html `
294
- <tr
295
- title=${title}
296
- class=${classMap({
297
- 'selected-row': isSelectedRow,
298
- })}
299
- >
300
- ${cells}
301
- </tr>
302
- `;
303
- })}
304
- </table>
305
- `;
306
- },
307
- });
@@ -1,17 +0,0 @@
1
- import { type ColorPair } from '../data/color-css.js';
2
- import { type FontWeight } from '../data/contrast/contrast.js';
3
- /**
4
- * Showcase a foreground/backend color pair.
5
- *
6
- * @category Elements
7
- */
8
- export declare const VirColorPair: import("element-vir").DeclarativeElementDefinition<"vir-color-pair", {
9
- color: Readonly<ColorPair>;
10
- showVarValues: boolean;
11
- showVarNames: boolean;
12
- showContrast: boolean;
13
- fontWeight: FontWeight;
14
- }, {
15
- previewElement: undefined | HTMLElement;
16
- forceShowEverything: boolean;
17
- }, {}, "vir-color-pair-no-contrast-tips", "vir-color-pair-", readonly [], readonly []>;
@@ -1,197 +0,0 @@
1
- /* node:coverage disable */
2
- import { assertWrap, check } from '@augment-vir/assert';
3
- import { css, defineElement, html, listen, nothing, onDomCreated, unsafeCSS } from 'element-vir';
4
- import { viraFontCssVars } from 'vira/dist/styles/font.js';
5
- import { noNativeFormStyles, noNativeSpacing } from 'vira/dist/styles/native-styles.js';
6
- import { calculateContrast } from '../data/contrast/contrast.js';
7
- import { VirContrastIndicator } from './vir-contrast-indicator.element.js';
8
- /**
9
- * Showcase a foreground/backend color pair.
10
- *
11
- * @category Elements
12
- */
13
- export const VirColorPair = defineElement()({
14
- tagName: 'vir-color-pair',
15
- state() {
16
- return {
17
- previewElement: undefined,
18
- forceShowEverything: false,
19
- };
20
- },
21
- hostClasses: {
22
- 'vir-color-pair-no-contrast-tips': ({ inputs, state }) => !inputs.showContrast && !state.forceShowEverything,
23
- },
24
- styles: ({ hostClasses }) => css `
25
- :host {
26
- display: flex;
27
- flex-direction: column;
28
- align-items: center;
29
- max-width: 100%;
30
- }
31
-
32
- .color-preview {
33
- ${noNativeFormStyles};
34
- cursor: pointer;
35
- font-size: 32px;
36
- padding-left: 12px;
37
- padding-right: 0;
38
- border: 1px solid #ccc;
39
- border-radius: 8px;
40
- display: flex;
41
- gap: 8px;
42
- align-items: baseline;
43
-
44
- & b {
45
- margin: 12px 0;
46
- font-weight: bold;
47
- text-decoration: underline;
48
- }
49
-
50
- & .square {
51
- margin: 12px 0;
52
- width: 24px;
53
- height: 24px;
54
- background-color: currentColor;
55
- }
56
- }
57
- ${hostClasses['vir-color-pair-no-contrast-tips'].selector} {
58
- & .needed-size-wrapper {
59
- display: none;
60
- }
61
-
62
- & .color-preview {
63
- padding: 4px 24px;
64
- }
65
- }
66
-
67
- .needed-size-wrapper {
68
- align-self: stretch;
69
- width: 56px;
70
- position: relative;
71
- overflow: hidden;
72
- border-left: 1px solid #ccc;
73
- }
74
-
75
- .needed-size {
76
- top: 0;
77
- height: 100%;
78
- display: flex;
79
- align-items: center;
80
- left: 6px;
81
- position: absolute;
82
-
83
- & span {
84
- margin: 0 auto;
85
- }
86
- }
87
-
88
- .css-var-names {
89
- font-family: ${viraFontCssVars['vira-monospace'].value};
90
- display: flex;
91
- max-width: 100%;
92
- flex-direction: column;
93
- opacity: 0.6;
94
- margin-top: 4px;
95
- }
96
-
97
- p {
98
- ${noNativeSpacing};
99
- display: flex;
100
- gap: 0;
101
- flex-wrap: wrap;
102
-
103
- & span:last-child {
104
- margin-left: 1ex;
105
- }
106
- }
107
-
108
- ${VirContrastIndicator} {
109
- margin-top: 1px;
110
- }
111
- `,
112
- render({ state, updateState, inputs }) {
113
- const colorRows = [
114
- 'foreground',
115
- 'background',
116
- ].map((layerKey) => {
117
- const keyString = [
118
- inputs.color[layerKey].name,
119
- inputs.showVarValues || state.forceShowEverything ? ':' : '',
120
- ]
121
- .filter(check.isTruthy)
122
- .join('');
123
- const valueTemplate = inputs.showVarValues || state.forceShowEverything
124
- ? html `
125
- <span>${inputs.color[layerKey].default}</span>
126
- `
127
- : nothing;
128
- return html `
129
- <p>
130
- <span>${keyString}</span>
131
- ${valueTemplate}
132
- </p>
133
- `;
134
- });
135
- const cssVarNamesTemplate = inputs.showVarNames || state.forceShowEverything
136
- ? html `
137
- <div class="css-var-names">${colorRows}</div>
138
- `
139
- : nothing;
140
- const contrast = state.previewElement
141
- ? calculateContrast({
142
- foreground: globalThis
143
- .getComputedStyle(state.previewElement)
144
- .getPropertyValue('color'),
145
- background: globalThis
146
- .getComputedStyle(state.previewElement)
147
- .getPropertyValue('background-color'),
148
- })
149
- : undefined;
150
- const contrastTemplate = contrast && (inputs.showContrast || state.forceShowEverything)
151
- ? html `
152
- <${VirContrastIndicator.assign({
153
- contrast,
154
- fontWeight: inputs.fontWeight,
155
- })}></${VirContrastIndicator}>
156
- `
157
- : nothing;
158
- return html `
159
- <button
160
- ${listen('click', () => {
161
- updateState({
162
- forceShowEverything: !state.forceShowEverything,
163
- });
164
- })}
165
- ${onDomCreated((element) => {
166
- updateState({
167
- previewElement: assertWrap.instanceOf(element, HTMLElement),
168
- });
169
- })}
170
- class="color-preview"
171
- style=${css `
172
- color: ${unsafeCSS(inputs.color.foreground.default)};
173
- background: ${unsafeCSS(inputs.color.background.default)};
174
- `}
175
- >
176
- <div class="square"></div>
177
- <b>Aa</b>
178
- <div class="needed-size-wrapper">
179
- <span class="needed-size">
180
- <span
181
- style=${css `
182
- visibility: ${unsafeCSS((contrast?.fontSizes[400] || Infinity) > 150
183
- ? 'hidden'
184
- : 'visible')};
185
- font-weight: ${inputs.fontWeight};
186
- font-size: ${contrast ? contrast.fontSizes[400] : 14}px;
187
- `}
188
- >
189
- Min
190
- </span>
191
- </span>
192
- </div>
193
- </button>
194
- ${contrastTemplate} ${cssVarNamesTemplate}
195
- `;
196
- },
197
- });
@@ -1,20 +0,0 @@
1
- import { type PartialWithUndefined } from '@augment-vir/common';
2
- import { Color } from '../data/color-class/color.js';
3
- /**
4
- * A color picker element with a swatch that opens a popup with color format sliders.
5
- *
6
- * Set the width and height of the swatch using the provided CSS variables.
7
- *
8
- * @category Elements
9
- */
10
- export declare const VirColorPicker: import("element-vir").DeclarativeElementDefinition<"vir-color-picker", Readonly<{
11
- color: string | Readonly<Color> | undefined;
12
- } & PartialWithUndefined<{
13
- alwaysShowPicker: boolean;
14
- showHexValue: boolean;
15
- }>>, {
16
- selectedFormatName: "hsl" | "hwb" | "lab" | "lch" | "oklab" | "oklch" | "rgb" | "hex";
17
- rawInput: undefined | string;
18
- }, {
19
- colorChange: import("element-vir").DefineEvent<string>;
20
- }, "vir-color-picker-always-show", "vir-color-picker-swatch-width" | "vir-color-picker-swatch-height", readonly [], readonly []>;