tyrell-components 1.0.0-TC51 → 1.0.0-TC53

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 (108) hide show
  1. package/css/tyrell-theme.css +25 -2
  2. package/css/tyrell.css +4 -0
  3. package/dist/tyrell-colors-static.css +1 -316
  4. package/dist/tyrell-theme.css +1 -1443
  5. package/dist/tyrell.css +1 -1390
  6. package/dist/tyrell.js +1 -1
  7. package/lib/base/ty-component.js +196 -196
  8. package/lib/components/button.d.ts +1 -1
  9. package/lib/components/button.js +260 -259
  10. package/lib/components/calendar-month.d.ts +2 -2
  11. package/lib/components/calendar-month.js +426 -416
  12. package/lib/components/calendar-navigation.js +238 -238
  13. package/lib/components/calendar.js +605 -602
  14. package/lib/components/checkbox.d.ts +1 -1
  15. package/lib/components/checkbox.js +273 -272
  16. package/lib/components/copy.d.ts +1 -1
  17. package/lib/components/copy.js +279 -278
  18. package/lib/components/date-picker.d.ts +1 -1
  19. package/lib/components/date-picker.js +1103 -1108
  20. package/lib/components/file-upload.js +404 -404
  21. package/lib/components/icon.js +141 -141
  22. package/lib/components/input.d.ts +1 -1
  23. package/lib/components/input.js +593 -596
  24. package/lib/components/modal.js +319 -319
  25. package/lib/components/option.js +167 -167
  26. package/lib/components/popup.js +233 -233
  27. package/lib/components/radio.d.ts +2 -2
  28. package/lib/components/radio.js +407 -406
  29. package/lib/components/resize-observer.js +67 -67
  30. package/lib/components/scroll-container.js +294 -294
  31. package/lib/components/select.d.ts +1 -1
  32. package/lib/components/select.js +1524 -1532
  33. package/lib/components/selected-tags.js +184 -184
  34. package/lib/components/step.js +62 -62
  35. package/lib/components/switch.d.ts +1 -1
  36. package/lib/components/switch.js +214 -213
  37. package/lib/components/tab.js +62 -62
  38. package/lib/components/tabs.d.ts +1 -0
  39. package/lib/components/tabs.js +507 -479
  40. package/lib/components/tag.d.ts +1 -1
  41. package/lib/components/tag.js +236 -235
  42. package/lib/components/textarea.d.ts +1 -1
  43. package/lib/components/textarea.js +457 -456
  44. package/lib/components/tooltip.js +283 -283
  45. package/lib/components/wizard.js +384 -384
  46. package/lib/icons/heroicons/micro.js +392 -392
  47. package/lib/icons/heroicons/mini.js +382 -382
  48. package/lib/icons/heroicons/outline.js +337 -337
  49. package/lib/icons/heroicons/solid.js +407 -407
  50. package/lib/icons/lucide.js +22843 -22843
  51. package/lib/icons/material/filled.js +9653 -9653
  52. package/lib/icons/material/outlined.js +10271 -10271
  53. package/lib/icons/material/round.js +10495 -10495
  54. package/lib/icons/material/sharp.js +9905 -9905
  55. package/lib/icons/material/two-tone.js +12792 -12792
  56. package/lib/index.js +21 -21
  57. package/lib/styles/button.js +176 -288
  58. package/lib/styles/calendar-month.js +123 -183
  59. package/lib/styles/calendar-navigation.js +60 -79
  60. package/lib/styles/calendar.js +8 -9
  61. package/lib/styles/checkbox.js +45 -72
  62. package/lib/styles/copy.js +67 -91
  63. package/lib/styles/custom-scrollbar.js +80 -100
  64. package/lib/styles/date-picker.js +261 -331
  65. package/lib/styles/field-size.d.ts +6 -0
  66. package/lib/styles/field-size.js +91 -0
  67. package/lib/styles/file-upload.js +139 -169
  68. package/lib/styles/icon.js +92 -156
  69. package/lib/styles/input.js +125 -241
  70. package/lib/styles/modal.js +67 -102
  71. package/lib/styles/option.d.ts +1 -1
  72. package/lib/styles/option.js +47 -67
  73. package/lib/styles/popup.js +34 -65
  74. package/lib/styles/radio.js +69 -96
  75. package/lib/styles/resize-observer.js +2 -5
  76. package/lib/styles/scroll-container.js +100 -130
  77. package/lib/styles/select-base.js +525 -778
  78. package/lib/styles/select.js +140 -228
  79. package/lib/styles/step.js +22 -29
  80. package/lib/styles/switch.js +34 -55
  81. package/lib/styles/tab.d.ts +1 -1
  82. package/lib/styles/tab.js +22 -29
  83. package/lib/styles/tabs.d.ts +1 -1
  84. package/lib/styles/tabs.js +175 -237
  85. package/lib/styles/tag.js +135 -188
  86. package/lib/styles/textarea.d.ts +1 -1
  87. package/lib/styles/textarea.js +205 -271
  88. package/lib/styles/tooltip.js +3 -3
  89. package/lib/styles/wizard.js +170 -226
  90. package/lib/types/common.d.ts +2 -0
  91. package/lib/types/common.js +6 -5
  92. package/lib/utils/calendar-utils.js +100 -100
  93. package/lib/utils/custom-scrollbar.js +272 -272
  94. package/lib/utils/flavor-sheet.js +14 -14
  95. package/lib/utils/icon-registry.js +127 -127
  96. package/lib/utils/loader-registry.js +3 -3
  97. package/lib/utils/locale.js +34 -34
  98. package/lib/utils/mobile.js +1 -1
  99. package/lib/utils/number-format.js +54 -54
  100. package/lib/utils/positioning.js +212 -212
  101. package/lib/utils/property-capture.js +36 -36
  102. package/lib/utils/property-manager.js +125 -125
  103. package/lib/utils/resize-observer.js +23 -23
  104. package/lib/utils/scroll-lock.js +57 -57
  105. package/lib/utils/styles.js +17 -17
  106. package/lib/version.d.ts +1 -1
  107. package/lib/version.js +1 -1
  108. package/package.json +4 -4
@@ -1,127 +1,127 @@
1
1
  export class PropertyManager {
2
- constructor(config) {
3
- this._props = new Map();
4
- this._config = config;
5
- this._initializeDefaults();
6
- }
7
- _initializeDefaults() {
8
- for (const [name, config] of Object.entries(this._config)) {
9
- if (config.default !== undefined) {
10
- this._props.set(name, config.default);
11
- }
12
- }
13
- }
14
- hasConfig(name) {
15
- return name in this._config;
16
- }
17
- updateProperty(name, value, source = 'property') {
18
- const config = this._config[name];
19
- if (!config) {
20
- console.warn(`[PropertyManager] Unknown property: ${name}`);
21
- return null;
22
- }
23
- const oldValue = this._props.get(name);
24
- const coercedValue = this._coerceValue(name, value, config);
25
- if (!this._validateValue(name, coercedValue, config)) {
26
- console.warn(`[PropertyManager] Invalid value for ${name}:`, coercedValue);
27
- return null;
28
- }
29
- if (this._valuesEqual(oldValue, coercedValue)) {
30
- return null;
31
- }
32
- this._props.set(name, coercedValue);
33
- const change = {
34
- name,
35
- oldValue,
36
- newValue: coercedValue,
37
- source
38
- };
39
- return change;
40
- }
41
- _coerceValue(name, value, config) {
42
- if (config.coerce) {
43
- return config.coerce(value);
44
- }
45
- if (value === null || value === undefined) {
46
- return config.default ?? null;
47
- }
48
- switch (config.type) {
49
- case 'boolean':
50
- if (typeof value === 'string') {
51
- if (value === '')
52
- return true;
53
- const normalized = value.toLowerCase().trim();
54
- if (normalized === 'false' || normalized === '0')
55
- return false;
56
- return true;
57
- }
58
- return Boolean(value);
59
- case 'number':
60
- const num = Number(value);
61
- return isNaN(num) ? (config.default ?? 0) : num;
62
- case 'string':
63
- return String(value);
64
- case 'object':
65
- case 'array':
66
- if (typeof value === 'string') {
67
- try {
68
- return JSON.parse(value);
69
- }
70
- catch {
71
- console.warn(`[PropertyManager] Failed to parse ${name}:`, value);
72
- return config.default ?? (config.type === 'array' ? [] : {});
73
- }
74
- }
75
- return value;
76
- default:
77
- return value;
78
- }
79
- }
80
- _validateValue(name, value, config) {
81
- if (config.validate) {
82
- return config.validate(value);
83
- }
84
- return true;
85
- }
86
- _valuesEqual(a, b) {
87
- if (typeof a !== 'object' || typeof b !== 'object') {
88
- return a === b;
89
- }
90
- if (a === null || b === null) {
91
- return a === b;
92
- }
93
- try {
94
- return JSON.stringify(a) === JSON.stringify(b);
95
- }
96
- catch {
97
- return false;
98
- }
99
- }
100
- get(name) {
101
- return this._props.get(name);
102
- }
103
- getAll() {
104
- return Object.fromEntries(this._props);
105
- }
106
- getConfig(name) {
107
- return this._config[name];
108
- }
109
- isVisual(name) {
110
- return this._config[name]?.visual ?? false;
111
- }
112
- isFormValue(name) {
113
- return this._config[name]?.formValue ?? false;
114
- }
115
- shouldEmitChange(name) {
116
- return this._config[name]?.emitChange ?? false;
117
- }
118
- handleAlias(aliasName, value) {
119
- for (const [propName, config] of Object.entries(this._config)) {
120
- if (config.aliases && aliasName in config.aliases) {
121
- const aliasedValue = config.aliases[aliasName];
122
- return this.updateProperty(propName, aliasedValue, 'attribute');
123
- }
124
- }
125
- return null;
126
- }
2
+ constructor(config) {
3
+ this._props = new Map();
4
+ this._config = config;
5
+ this._initializeDefaults();
6
+ }
7
+ _initializeDefaults() {
8
+ for (const [name, config] of Object.entries(this._config)) {
9
+ if (config.default !== undefined) {
10
+ this._props.set(name, config.default);
11
+ }
12
+ }
13
+ }
14
+ hasConfig(name) {
15
+ return name in this._config;
16
+ }
17
+ updateProperty(name, value, source = 'property') {
18
+ const config = this._config[name];
19
+ if (!config) {
20
+ console.warn(`[PropertyManager] Unknown property: ${name}`);
21
+ return null;
22
+ }
23
+ const oldValue = this._props.get(name);
24
+ const coercedValue = this._coerceValue(name, value, config);
25
+ if (!this._validateValue(name, coercedValue, config)) {
26
+ console.warn(`[PropertyManager] Invalid value for ${name}:`, coercedValue);
27
+ return null;
28
+ }
29
+ if (this._valuesEqual(oldValue, coercedValue)) {
30
+ return null;
31
+ }
32
+ this._props.set(name, coercedValue);
33
+ const change = {
34
+ name,
35
+ oldValue,
36
+ newValue: coercedValue,
37
+ source
38
+ };
39
+ return change;
40
+ }
41
+ _coerceValue(name, value, config) {
42
+ if (config.coerce) {
43
+ return config.coerce(value);
44
+ }
45
+ if (value === null || value === undefined) {
46
+ return config.default ?? null;
47
+ }
48
+ switch (config.type) {
49
+ case 'boolean':
50
+ if (typeof value === 'string') {
51
+ if (value === '')
52
+ return true;
53
+ const normalized = value.toLowerCase().trim();
54
+ if (normalized === 'false' || normalized === '0')
55
+ return false;
56
+ return true;
57
+ }
58
+ return Boolean(value);
59
+ case 'number':
60
+ const num = Number(value);
61
+ return isNaN(num) ? (config.default ?? 0) : num;
62
+ case 'string':
63
+ return String(value);
64
+ case 'object':
65
+ case 'array':
66
+ if (typeof value === 'string') {
67
+ try {
68
+ return JSON.parse(value);
69
+ }
70
+ catch {
71
+ console.warn(`[PropertyManager] Failed to parse ${name}:`, value);
72
+ return config.default ?? (config.type === 'array' ? [] : {});
73
+ }
74
+ }
75
+ return value;
76
+ default:
77
+ return value;
78
+ }
79
+ }
80
+ _validateValue(name, value, config) {
81
+ if (config.validate) {
82
+ return config.validate(value);
83
+ }
84
+ return true;
85
+ }
86
+ _valuesEqual(a, b) {
87
+ if (typeof a !== 'object' || typeof b !== 'object') {
88
+ return a === b;
89
+ }
90
+ if (a === null || b === null) {
91
+ return a === b;
92
+ }
93
+ try {
94
+ return JSON.stringify(a) === JSON.stringify(b);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ get(name) {
101
+ return this._props.get(name);
102
+ }
103
+ getAll() {
104
+ return Object.fromEntries(this._props);
105
+ }
106
+ getConfig(name) {
107
+ return this._config[name];
108
+ }
109
+ isVisual(name) {
110
+ return this._config[name]?.visual ?? false;
111
+ }
112
+ isFormValue(name) {
113
+ return this._config[name]?.formValue ?? false;
114
+ }
115
+ shouldEmitChange(name) {
116
+ return this._config[name]?.emitChange ?? false;
117
+ }
118
+ handleAlias(aliasName, value) {
119
+ for (const [propName, config] of Object.entries(this._config)) {
120
+ if (config.aliases && aliasName in config.aliases) {
121
+ const aliasedValue = config.aliases[aliasName];
122
+ return this.updateProperty(propName, aliasedValue, 'attribute');
123
+ }
124
+ }
125
+ return null;
126
+ }
127
127
  }
@@ -1,35 +1,35 @@
1
1
  const sizes = new Map();
2
2
  const callbacks = new Map();
3
3
  export function getSize(id) {
4
- return sizes.get(id);
4
+ return sizes.get(id);
5
5
  }
6
6
  export function onResize(id, callback) {
7
- if (!callbacks.has(id)) {
8
- callbacks.set(id, new Set());
9
- }
10
- callbacks.get(id).add(callback);
11
- const current = sizes.get(id);
12
- if (current)
13
- callback(current);
14
- return () => {
15
- callbacks.get(id)?.delete(callback);
16
- if (callbacks.get(id)?.size === 0) {
17
- callbacks.delete(id);
18
- }
19
- };
7
+ if (!callbacks.has(id)) {
8
+ callbacks.set(id, new Set());
9
+ }
10
+ callbacks.get(id).add(callback);
11
+ const current = sizes.get(id);
12
+ if (current)
13
+ callback(current);
14
+ return () => {
15
+ callbacks.get(id)?.delete(callback);
16
+ if (callbacks.get(id)?.size === 0) {
17
+ callbacks.delete(id);
18
+ }
19
+ };
20
20
  }
21
21
  export function getAllSizes() {
22
- return Object.fromEntries(sizes);
22
+ return Object.fromEntries(sizes);
23
23
  }
24
24
  export function updateSize(id, width, height) {
25
- sizes.set(id, { width, height });
26
- const cbs = callbacks.get(id);
27
- if (cbs) {
28
- const size = { width, height };
29
- cbs.forEach(cb => cb(size));
30
- }
25
+ sizes.set(id, { width, height });
26
+ const cbs = callbacks.get(id);
27
+ if (cbs) {
28
+ const size = { width, height };
29
+ cbs.forEach(cb => cb(size));
30
+ }
31
31
  }
32
32
  export function removeSize(id) {
33
- sizes.delete(id);
34
- callbacks.delete(id);
33
+ sizes.delete(id);
34
+ callbacks.delete(id);
35
35
  }
@@ -1,89 +1,89 @@
1
1
  const lockState = {
2
- locked: false,
3
- scrollY: 0,
4
- activeLocks: new Set(),
2
+ locked: false,
3
+ scrollY: 0,
4
+ activeLocks: new Set(),
5
5
  };
6
6
  function getBodyEl() {
7
- return document.body;
7
+ return document.body;
8
8
  }
9
9
  function getDocEl() {
10
- return document.documentElement;
10
+ return document.documentElement;
11
11
  }
12
12
  function getScrollY() {
13
- return window.scrollY || getDocEl().scrollTop || 0;
13
+ return window.scrollY || getDocEl().scrollTop || 0;
14
14
  }
15
15
  function getScrollbarWidth() {
16
- return window.innerWidth - getDocEl().clientWidth;
16
+ return window.innerWidth - getDocEl().clientWidth;
17
17
  }
18
18
  function lockBodyFixed() {
19
- if (lockState.locked)
20
- return;
21
- const scrollbarWidth = getScrollbarWidth();
22
- const docEl = getDocEl();
23
- if (window.tyScrollDebug) {
24
- console.log('🔒 Locking body scroll:', { scrollbarWidth });
25
- }
26
- lockState.scrollY = getScrollY();
27
- lockState.locked = true;
28
- docEl.style.overflow = 'hidden';
29
- if (scrollbarWidth > 0) {
30
- docEl.style.paddingRight = `${scrollbarWidth}px`;
31
- }
32
- docEl.classList.add('ty-scroll-locked');
19
+ if (lockState.locked)
20
+ return;
21
+ const scrollbarWidth = getScrollbarWidth();
22
+ const docEl = getDocEl();
23
+ if (window.tyScrollDebug) {
24
+ console.log('🔒 Locking body scroll:', { scrollbarWidth });
25
+ }
26
+ lockState.scrollY = getScrollY();
27
+ lockState.locked = true;
28
+ docEl.style.overflow = 'hidden';
29
+ if (scrollbarWidth > 0) {
30
+ docEl.style.paddingRight = `${scrollbarWidth}px`;
31
+ }
32
+ docEl.classList.add('ty-scroll-locked');
33
33
  }
34
34
  function unlockBodyFixed() {
35
- if (!lockState.locked)
36
- return;
37
- const docEl = getDocEl();
38
- if (window.tyScrollDebug) {
39
- console.log('🔓 Unlocking body scroll');
40
- }
41
- docEl.classList.remove('ty-scroll-locked');
42
- docEl.style.overflow = '';
43
- docEl.style.paddingRight = '';
44
- lockState.locked = false;
35
+ if (!lockState.locked)
36
+ return;
37
+ const docEl = getDocEl();
38
+ if (window.tyScrollDebug) {
39
+ console.log('🔓 Unlocking body scroll');
40
+ }
41
+ docEl.classList.remove('ty-scroll-locked');
42
+ docEl.style.overflow = '';
43
+ docEl.style.paddingRight = '';
44
+ lockState.locked = false;
45
45
  }
46
46
  export function lockScroll(componentId) {
47
- if (lockState.activeLocks.has(componentId))
48
- return;
49
- lockState.activeLocks.add(componentId);
50
- if (lockState.activeLocks.size === 1) {
51
- lockBodyFixed();
52
- }
47
+ if (lockState.activeLocks.has(componentId))
48
+ return;
49
+ lockState.activeLocks.add(componentId);
50
+ if (lockState.activeLocks.size === 1) {
51
+ lockBodyFixed();
52
+ }
53
53
  }
54
54
  export function unlockScroll(componentId) {
55
- if (!lockState.activeLocks.has(componentId))
56
- return;
57
- lockState.activeLocks.delete(componentId);
58
- if (lockState.activeLocks.size === 0) {
59
- unlockBodyFixed();
60
- }
55
+ if (!lockState.activeLocks.has(componentId))
56
+ return;
57
+ lockState.activeLocks.delete(componentId);
58
+ if (lockState.activeLocks.size === 0) {
59
+ unlockBodyFixed();
60
+ }
61
61
  }
62
62
  export function forceUnlockAll() {
63
- lockState.activeLocks.clear();
64
- unlockBodyFixed();
63
+ lockState.activeLocks.clear();
64
+ unlockBodyFixed();
65
65
  }
66
66
  export function enableDebug() {
67
- console.log('🔍 CSS Scroll lock debugging enabled');
68
- window.tyScrollDebug = true;
67
+ console.log('🔍 CSS Scroll lock debugging enabled');
68
+ window.tyScrollDebug = true;
69
69
  }
70
70
  export function disableDebug() {
71
- console.log('🔍 CSS Scroll lock debugging disabled');
72
- window.tyScrollDebug = false;
71
+ console.log('🔍 CSS Scroll lock debugging disabled');
72
+ window.tyScrollDebug = false;
73
73
  }
74
74
  export function getActiveLocks() {
75
- return new Set(lockState.activeLocks);
75
+ return new Set(lockState.activeLocks);
76
76
  }
77
77
  export function isLocked() {
78
- return lockState.locked;
78
+ return lockState.locked;
79
79
  }
80
80
  export function isLockedBy(componentId) {
81
- return lockState.activeLocks.has(componentId);
81
+ return lockState.activeLocks.has(componentId);
82
82
  }
83
83
  export function getLockState() {
84
- return {
85
- locked: lockState.locked,
86
- scrollY: lockState.scrollY,
87
- activeLocks: Array.from(lockState.activeLocks),
88
- };
84
+ return {
85
+ locked: lockState.locked,
86
+ scrollY: lockState.scrollY,
87
+ activeLocks: Array.from(lockState.activeLocks),
88
+ };
89
89
  }
@@ -1,22 +1,22 @@
1
1
  const styleCache = new Map();
2
2
  export function ensureStyles(shadowRoot, styleContent) {
3
- const { css, id } = styleContent;
4
- let sheet;
5
- if (id && styleCache.has(id)) {
6
- sheet = styleCache.get(id);
7
- }
8
- else {
9
- sheet = new CSSStyleSheet();
10
- sheet.replaceSync(css);
11
- if (id) {
12
- styleCache.set(id, sheet);
13
- }
14
- }
15
- const existing = shadowRoot.adoptedStyleSheets || [];
16
- if (!existing.includes(sheet)) {
17
- shadowRoot.adoptedStyleSheets = [...existing, sheet];
18
- }
3
+ const { css, id } = styleContent;
4
+ let sheet;
5
+ if (id && styleCache.has(id)) {
6
+ sheet = styleCache.get(id);
7
+ }
8
+ else {
9
+ sheet = new CSSStyleSheet();
10
+ sheet.replaceSync(css);
11
+ if (id) {
12
+ styleCache.set(id, sheet);
13
+ }
14
+ }
15
+ const existing = shadowRoot.adoptedStyleSheets || [];
16
+ if (!existing.includes(sheet)) {
17
+ shadowRoot.adoptedStyleSheets = [...existing, sheet];
18
+ }
19
19
  }
20
20
  export function buildClassList(...classes) {
21
- return classes.filter(Boolean).join(' ');
21
+ return classes.filter(Boolean).join(' ');
22
22
  }
package/lib/version.d.ts CHANGED
@@ -4,4 +4,4 @@
4
4
  * This is automatically synced with package.json during build.
5
5
  * Use `npm version` to bump versions.
6
6
  */
7
- export declare const VERSION = "1.0.0-TC51";
7
+ export declare const VERSION = "1.0.0-TC53";
package/lib/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = '1.0.0-TC51';
1
+ export const VERSION = '1.0.0-TC53';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tyrell-components",
3
- "version": "1.0.0-TC51",
3
+ "version": "1.0.0-TC53",
4
4
  "description": "Tyrell Components - Framework-agnostic web components with semantic design system",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -134,9 +134,9 @@
134
134
  "scripts": {
135
135
  "dev": "vite",
136
136
  "generate:version": "node scripts/generate-version.js",
137
- "build:lib": "npm run generate:version && tsc --project tsconfig.lib.json && tsc --project tsconfig.lib.dts.json",
138
- "build:cdn": "npm run generate:version && vite build --config vite.config.cdn.ts && cp css/tyrell.css dist/tyrell.css && cp css/tyrell-theme.css dist/tyrell-theme.css && cp css/tyrell-colors-static.css dist/tyrell-colors-static.css",
139
- "build:dev": "npm run generate:version && vite build --config vite.config.dev.ts && cp css/tyrell.css dist/tyrell.css && cp css/tyrell-theme.css dist/tyrell-theme.css && cp css/tyrell-colors-static.css dist/tyrell-colors-static.css",
137
+ "build:lib": "npm run generate:version && tsc --project tsconfig.lib.json && tsc --project tsconfig.lib.dts.json && node scripts/strip-lib-comments.mjs",
138
+ "build:cdn": "npm run generate:version && vite build --config vite.config.cdn.ts && esbuild css/tyrell.css css/tyrell-theme.css css/tyrell-colors-static.css --minify --outdir=dist",
139
+ "build:dev": "npm run generate:version && vite build --config vite.config.dev.ts && esbuild css/tyrell.css css/tyrell-theme.css css/tyrell-colors-static.css --minify --outdir=dist",
140
140
  "build:dev:watch": "vite build --config vite.config.dev.ts --watch",
141
141
  "build": "npm run build:lib && npm run build:cdn",
142
142
  "prepublishOnly": "npm run build",