@dxos/lit-theme-editor 0.8.2-main.10c050d

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 (87) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +3 -0
  3. package/dist/src/dx-theme-editor/dx-range-spinbutton.d.ts +16 -0
  4. package/dist/src/dx-theme-editor/dx-range-spinbutton.d.ts.map +1 -0
  5. package/dist/src/dx-theme-editor/dx-range-spinbutton.js +127 -0
  6. package/dist/src/dx-theme-editor/dx-range-spinbutton.js.map +1 -0
  7. package/dist/src/dx-theme-editor/dx-theme-editor-alias-colors.d.ts +21 -0
  8. package/dist/src/dx-theme-editor/dx-theme-editor-alias-colors.d.ts.map +1 -0
  9. package/dist/src/dx-theme-editor/dx-theme-editor-alias-colors.js +267 -0
  10. package/dist/src/dx-theme-editor/dx-theme-editor-alias-colors.js.map +1 -0
  11. package/dist/src/dx-theme-editor/dx-theme-editor-physical-colors.d.ts +19 -0
  12. package/dist/src/dx-theme-editor/dx-theme-editor-physical-colors.d.ts.map +1 -0
  13. package/dist/src/dx-theme-editor/dx-theme-editor-physical-colors.js +163 -0
  14. package/dist/src/dx-theme-editor/dx-theme-editor-physical-colors.js.map +1 -0
  15. package/dist/src/dx-theme-editor/dx-theme-editor-semantic-colors.d.ts +32 -0
  16. package/dist/src/dx-theme-editor/dx-theme-editor-semantic-colors.d.ts.map +1 -0
  17. package/dist/src/dx-theme-editor/dx-theme-editor-semantic-colors.js +474 -0
  18. package/dist/src/dx-theme-editor/dx-theme-editor-semantic-colors.js.map +1 -0
  19. package/dist/src/dx-theme-editor/dx-theme-editor.d.ts +16 -0
  20. package/dist/src/dx-theme-editor/dx-theme-editor.d.ts.map +1 -0
  21. package/dist/src/dx-theme-editor/dx-theme-editor.js +160 -0
  22. package/dist/src/dx-theme-editor/dx-theme-editor.js.map +1 -0
  23. package/dist/src/dx-theme-editor/dx-theme-editor.lit-stories.d.ts +22 -0
  24. package/dist/src/dx-theme-editor/dx-theme-editor.lit-stories.d.ts.map +1 -0
  25. package/dist/src/dx-theme-editor/dx-theme-editor.lit-stories.js +27 -0
  26. package/dist/src/dx-theme-editor/dx-theme-editor.lit-stories.js.map +1 -0
  27. package/dist/src/dx-theme-editor/index.d.ts +5 -0
  28. package/dist/src/dx-theme-editor/index.d.ts.map +1 -0
  29. package/dist/src/dx-theme-editor/index.js +8 -0
  30. package/dist/src/dx-theme-editor/index.js.map +1 -0
  31. package/dist/src/dx-theme-editor/util.d.ts +8 -0
  32. package/dist/src/dx-theme-editor/util.d.ts.map +1 -0
  33. package/dist/src/dx-theme-editor/util.js +61 -0
  34. package/dist/src/dx-theme-editor/util.js.map +1 -0
  35. package/dist/src/index.d.ts +2 -0
  36. package/dist/src/index.d.ts.map +1 -0
  37. package/dist/src/index.js +5 -0
  38. package/dist/src/index.js.map +1 -0
  39. package/dist/tsconfig.tsbuildinfo +1 -0
  40. package/dist/types/src/dx-theme-editor/dx-range-spinbutton.d.ts +16 -0
  41. package/dist/types/src/dx-theme-editor/dx-range-spinbutton.d.ts.map +1 -0
  42. package/dist/types/src/dx-theme-editor/dx-range-spinbutton.js +127 -0
  43. package/dist/types/src/dx-theme-editor/dx-range-spinbutton.js.map +1 -0
  44. package/dist/types/src/dx-theme-editor/dx-theme-editor-alias-colors.d.ts +21 -0
  45. package/dist/types/src/dx-theme-editor/dx-theme-editor-alias-colors.d.ts.map +1 -0
  46. package/dist/types/src/dx-theme-editor/dx-theme-editor-alias-colors.js +267 -0
  47. package/dist/types/src/dx-theme-editor/dx-theme-editor-alias-colors.js.map +1 -0
  48. package/dist/types/src/dx-theme-editor/dx-theme-editor-physical-colors.d.ts +19 -0
  49. package/dist/types/src/dx-theme-editor/dx-theme-editor-physical-colors.d.ts.map +1 -0
  50. package/dist/types/src/dx-theme-editor/dx-theme-editor-physical-colors.js +163 -0
  51. package/dist/types/src/dx-theme-editor/dx-theme-editor-physical-colors.js.map +1 -0
  52. package/dist/types/src/dx-theme-editor/dx-theme-editor-semantic-colors.d.ts +32 -0
  53. package/dist/types/src/dx-theme-editor/dx-theme-editor-semantic-colors.d.ts.map +1 -0
  54. package/dist/types/src/dx-theme-editor/dx-theme-editor-semantic-colors.js +474 -0
  55. package/dist/types/src/dx-theme-editor/dx-theme-editor-semantic-colors.js.map +1 -0
  56. package/dist/types/src/dx-theme-editor/dx-theme-editor.d.ts +16 -0
  57. package/dist/types/src/dx-theme-editor/dx-theme-editor.d.ts.map +1 -0
  58. package/dist/types/src/dx-theme-editor/dx-theme-editor.js +160 -0
  59. package/dist/types/src/dx-theme-editor/dx-theme-editor.js.map +1 -0
  60. package/dist/types/src/dx-theme-editor/dx-theme-editor.lit-stories.d.ts +22 -0
  61. package/dist/types/src/dx-theme-editor/dx-theme-editor.lit-stories.d.ts.map +1 -0
  62. package/dist/types/src/dx-theme-editor/dx-theme-editor.lit-stories.js +27 -0
  63. package/dist/types/src/dx-theme-editor/dx-theme-editor.lit-stories.js.map +1 -0
  64. package/dist/types/src/dx-theme-editor/index.d.ts +5 -0
  65. package/dist/types/src/dx-theme-editor/index.d.ts.map +1 -0
  66. package/dist/types/src/dx-theme-editor/index.js +8 -0
  67. package/dist/types/src/dx-theme-editor/index.js.map +1 -0
  68. package/dist/types/src/dx-theme-editor/util.d.ts +8 -0
  69. package/dist/types/src/dx-theme-editor/util.d.ts.map +1 -0
  70. package/dist/types/src/dx-theme-editor/util.js +61 -0
  71. package/dist/types/src/dx-theme-editor/util.js.map +1 -0
  72. package/dist/types/src/index.d.ts +2 -0
  73. package/dist/types/src/index.d.ts.map +1 -0
  74. package/dist/types/src/index.js +5 -0
  75. package/dist/types/src/index.js.map +1 -0
  76. package/dist/types/tsconfig.tsbuildinfo +1 -0
  77. package/package.json +40 -0
  78. package/src/dx-theme-editor/dx-range-spinbutton.ts +124 -0
  79. package/src/dx-theme-editor/dx-theme-editor-alias-colors.ts +305 -0
  80. package/src/dx-theme-editor/dx-theme-editor-physical-colors.ts +179 -0
  81. package/src/dx-theme-editor/dx-theme-editor-semantic-colors.ts +558 -0
  82. package/src/dx-theme-editor/dx-theme-editor.lit-stories.ts +37 -0
  83. package/src/dx-theme-editor/dx-theme-editor.pcss +299 -0
  84. package/src/dx-theme-editor/dx-theme-editor.ts +158 -0
  85. package/src/dx-theme-editor/index.ts +8 -0
  86. package/src/dx-theme-editor/util.ts +66 -0
  87. package/src/index.ts +5 -0
@@ -0,0 +1,160 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ import { LitElement, html } from 'lit';
11
+ import { customElement, state } from 'lit/decorators.js';
12
+ import { classMap } from 'lit/directives/class-map.js';
13
+ import './dx-theme-editor-physical-colors';
14
+ import './dx-theme-editor-semantic-colors';
15
+ import './dx-theme-editor-alias-colors';
16
+ import { reset, restore, tokenSetUpdateEvent } from './util';
17
+ let DxThemeEditor = class DxThemeEditor extends LitElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.activeTab = 'physical';
21
+ this.currentTokenSet = restore();
22
+ this.handleTokenSetUpdate = () => {
23
+ this.currentTokenSet = restore();
24
+ this.requestUpdate();
25
+ };
26
+ }
27
+ handleTabClick(tab) {
28
+ this.activeTab = tab;
29
+ }
30
+ connectedCallback() {
31
+ super.connectedCallback();
32
+ window.addEventListener(tokenSetUpdateEvent, this.handleTokenSetUpdate);
33
+ }
34
+ disconnectedCallback() {
35
+ super.disconnectedCallback();
36
+ window.removeEventListener(tokenSetUpdateEvent, this.handleTokenSetUpdate);
37
+ }
38
+ render() {
39
+ return html `
40
+ <div class="theme-editor-container">
41
+ <div class="tabs-container" role="tablist">
42
+ <button
43
+ id="tab-physical"
44
+ class=${classMap({ 'dx-focus-ring': true, tab: true, active: this.activeTab === 'physical' })}
45
+ role="tab"
46
+ aria-selected=${this.activeTab === 'physical'}
47
+ aria-controls="panel-physical"
48
+ @click=${() => this.handleTabClick('physical')}
49
+ >
50
+ Physical
51
+ </button>
52
+ <button
53
+ id="tab-semantic"
54
+ class=${classMap({ 'dx-focus-ring': true, tab: true, active: this.activeTab === 'semantic' })}
55
+ role="tab"
56
+ aria-selected=${this.activeTab === 'semantic'}
57
+ aria-controls="panel-semantic"
58
+ @click=${() => this.handleTabClick('semantic')}
59
+ >
60
+ Semantic
61
+ </button>
62
+ <button
63
+ id="tab-alias"
64
+ class=${classMap({ 'dx-focus-ring': true, tab: true, active: this.activeTab === 'alias' })}
65
+ role="tab"
66
+ aria-selected=${this.activeTab === 'alias'}
67
+ aria-controls="panel-alias"
68
+ @click=${() => this.handleTabClick('alias')}
69
+ >
70
+ Alias
71
+ </button>
72
+ <button
73
+ id="tab-json"
74
+ class=${classMap({ 'dx-focus-ring': true, tab: true, active: this.activeTab === 'json' })}
75
+ role="tab"
76
+ aria-selected=${this.activeTab === 'json'}
77
+ aria-controls="panel-json"
78
+ @click=${() => this.handleTabClick('json')}
79
+ >
80
+ JSON
81
+ </button>
82
+ <button
83
+ id="tab-reset"
84
+ class=${classMap({ 'dx-focus-ring': true, tab: true, active: this.activeTab === 'reset' })}
85
+ role="tab"
86
+ aria-selected=${this.activeTab === 'reset'}
87
+ aria-controls="panel-reset"
88
+ @click=${() => this.handleTabClick('reset')}
89
+ >
90
+ Reset
91
+ </button>
92
+ </div>
93
+
94
+ <div
95
+ id="panel-physical"
96
+ class=${classMap({ 'tab-panel': true, active: this.activeTab === 'physical' })}
97
+ role="tabpanel"
98
+ aria-labelledby="tab-physical"
99
+ ?hidden=${this.activeTab !== 'physical'}
100
+ >
101
+ <dx-theme-editor-physical-colors></dx-theme-editor-physical-colors>
102
+ </div>
103
+
104
+ <div
105
+ id="panel-semantic"
106
+ class=${classMap({ 'tab-panel': true, active: this.activeTab === 'semantic' })}
107
+ role="tabpanel"
108
+ aria-labelledby="tab-semantic"
109
+ ?hidden=${this.activeTab !== 'semantic'}
110
+ >
111
+ <dx-theme-editor-semantic-colors></dx-theme-editor-semantic-colors>
112
+ </div>
113
+
114
+ <div
115
+ id="panel-alias"
116
+ class=${classMap({ 'tab-panel': true, active: this.activeTab === 'alias' })}
117
+ role="tabpanel"
118
+ aria-labelledby="tab-alias"
119
+ ?hidden=${this.activeTab !== 'alias'}
120
+ >
121
+ <dx-theme-editor-alias-colors></dx-theme-editor-alias-colors>
122
+ </div>
123
+
124
+ <div
125
+ id="panel-json"
126
+ class=${classMap({ 'tab-panel': true, active: this.activeTab === 'json' })}
127
+ role="tabpanel"
128
+ aria-labelledby="tab-json"
129
+ ?hidden=${this.activeTab !== 'json'}
130
+ >
131
+ <textarea readonly>${JSON.stringify(this.currentTokenSet, null, 2)}</textarea>
132
+ </div>
133
+
134
+ <div
135
+ id="panel-reset"
136
+ class=${classMap({ 'tab-panel': true, active: this.activeTab === 'reset' })}
137
+ role="tabpanel"
138
+ aria-labelledby="tab-reset"
139
+ ?hidden=${this.activeTab !== 'reset'}
140
+ >
141
+ <button class="dx-button dx-focus-ring" data-variant="destructive" @click=${() => reset()}>Reset</button>
142
+ </div>
143
+ </div>
144
+ `;
145
+ }
146
+ createRenderRoot() {
147
+ return this;
148
+ }
149
+ };
150
+ __decorate([
151
+ state()
152
+ ], DxThemeEditor.prototype, "activeTab", void 0);
153
+ __decorate([
154
+ state()
155
+ ], DxThemeEditor.prototype, "currentTokenSet", void 0);
156
+ DxThemeEditor = __decorate([
157
+ customElement('dx-theme-editor')
158
+ ], DxThemeEditor);
159
+ export { DxThemeEditor };
160
+ //# sourceMappingURL=dx-theme-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx-theme-editor.js","sourceRoot":"","sources":["../../../../src/dx-theme-editor/dx-theme-editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import './dx-theme-editor.ts';
2
+ import './dx-theme-editor-physical-colors.ts';
3
+ import './dx-theme-editor-semantic-colors.ts';
4
+ import './dx-theme-editor-alias-colors.ts';
5
+ import './dx-theme-editor.pcss';
6
+ import '@dxos/lit-ui';
7
+ import { type DxThemeEditorProps } from './dx-theme-editor';
8
+ import { type DxThemeEditorAliasColorsProps } from './dx-theme-editor-alias-colors';
9
+ import { type DxThemeEditorPhysicalColorsProps } from './dx-theme-editor-physical-colors';
10
+ import { type DxThemeEditorSemanticColorsProps } from './dx-theme-editor-semantic-colors';
11
+ declare const _default: {
12
+ title: string;
13
+ parameters: {
14
+ layout: string;
15
+ };
16
+ };
17
+ export default _default;
18
+ export declare const CombinedThemeEditor: (props: DxThemeEditorProps) => import("lit").TemplateResult<1>;
19
+ export declare const PhysicalColors: (props: DxThemeEditorPhysicalColorsProps) => import("lit").TemplateResult<1>;
20
+ export declare const SemanticColors: (props: DxThemeEditorSemanticColorsProps) => import("lit").TemplateResult<1>;
21
+ export declare const AliasColors: (props: DxThemeEditorAliasColorsProps) => import("lit").TemplateResult<1>;
22
+ //# sourceMappingURL=dx-theme-editor.lit-stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx-theme-editor.lit-stories.d.ts","sourceRoot":"","sources":["../../../../src/dx-theme-editor/dx-theme-editor.lit-stories.ts"],"names":[],"mappings":"AAIA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sCAAsC,CAAC;AAC9C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,wBAAwB,CAAC;AAChC,OAAO,cAAc,CAAC;AAGtB,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;;;;;;;AAE1F,wBAGE;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,kBAAkB,oCAE5D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,gCAAgC,oCAErE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,gCAAgC,oCAErE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,6BAA6B,oCAE/D,CAAC"}
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ import './dx-theme-editor.ts';
5
+ import './dx-theme-editor-physical-colors.ts';
6
+ import './dx-theme-editor-semantic-colors.ts';
7
+ import './dx-theme-editor-alias-colors.ts';
8
+ import './dx-theme-editor.pcss';
9
+ import '@dxos/lit-ui';
10
+ import { html } from 'lit';
11
+ export default {
12
+ title: 'dx-theme-editor',
13
+ parameters: { layout: 'fullscreen' },
14
+ };
15
+ export const CombinedThemeEditor = (props) => {
16
+ return html `<dx-theme-editor></dx-theme-editor>`;
17
+ };
18
+ export const PhysicalColors = (props) => {
19
+ return html `<dx-theme-editor-physical-colors></dx-theme-editor-physical-colors>`;
20
+ };
21
+ export const SemanticColors = (props) => {
22
+ return html `<dx-theme-editor-semantic-colors></dx-theme-editor-semantic-colors>`;
23
+ };
24
+ export const AliasColors = (props) => {
25
+ return html `<dx-theme-editor-alias-colors></dx-theme-editor-alias-colors>`;
26
+ };
27
+ //# sourceMappingURL=dx-theme-editor.lit-stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx-theme-editor.lit-stories.js","sourceRoot":"","sources":["../../../../src/dx-theme-editor/dx-theme-editor.lit-stories.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sCAAsC,CAAC;AAC9C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,mCAAmC,CAAC;AAC3C,OAAO,wBAAwB,CAAC;AAChC,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAO3B,eAAe;IACb,KAAK,EAAE,iBAAiB;IACxB,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAyB,EAAE,EAAE;IAC/D,OAAO,IAAI,CAAA,qCAAqC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAuC,EAAE,EAAE;IACxE,OAAO,IAAI,CAAA,qEAAqE,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAuC,EAAE,EAAE;IACxE,OAAO,IAAI,CAAA,qEAAqE,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoC,EAAE,EAAE;IAClE,OAAO,IAAI,CAAA,+DAA+D,CAAC;AAC7E,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './dx-theme-editor';
2
+ export * from './dx-theme-editor-physical-colors';
3
+ export * from './dx-theme-editor-semantic-colors';
4
+ export * from './dx-theme-editor-alias-colors';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dx-theme-editor/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ export * from './dx-theme-editor';
5
+ export * from './dx-theme-editor-physical-colors';
6
+ export * from './dx-theme-editor-semantic-colors';
7
+ export * from './dx-theme-editor-alias-colors';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/dx-theme-editor/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type TokenSet } from '@ch-ui/tokens';
2
+ export declare const tokenSetUpdateEvent = "dx-theme-editor-token-set-update";
3
+ export declare const notifyTokenSetUpdate: () => void;
4
+ export declare const save: (value: string) => unknown;
5
+ export declare const restore: () => TokenSet;
6
+ export declare const saveAndRender: (tokenSet?: TokenSet) => void;
7
+ export declare const reset: () => void;
8
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/dx-theme-editor/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO9D,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,eAAO,MAAM,oBAAoB,YAEhC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,YAcjC,CAAC;AAEF,eAAO,MAAM,OAAO,QAE4D,QAC/E,CAAC;AAIF,eAAO,MAAM,aAAa,GAAI,WAAW,QAAQ,SAqBhD,CAAC;AAEF,eAAO,MAAM,KAAK,YAGjB,CAAC"}
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ import { renderTokenSet } from '@ch-ui/tokens';
5
+ import { log } from '@dxos/log';
6
+ import { userDefaultTokenSet } from '@dxos/react-ui-theme';
7
+ const storageKey = 'dxos.org/dx-theme-editor/user-tokens';
8
+ export const tokenSetUpdateEvent = 'dx-theme-editor-token-set-update';
9
+ export const notifyTokenSetUpdate = () => {
10
+ window.dispatchEvent(new CustomEvent(tokenSetUpdateEvent));
11
+ };
12
+ export const save = (value) => {
13
+ let nextValue = null;
14
+ try {
15
+ nextValue = JSON.stringify(JSON.parse(value));
16
+ }
17
+ catch (err) {
18
+ log.warn('Invalid JSON', err);
19
+ return err;
20
+ }
21
+ if (nextValue) {
22
+ localStorage.setItem(storageKey, nextValue);
23
+ log.debug('Saved');
24
+ notifyTokenSetUpdate();
25
+ return null;
26
+ }
27
+ };
28
+ export const restore = () => {
29
+ const storedTokenSet = localStorage.getItem(storageKey);
30
+ return (storedTokenSet ? JSON.parse(storedTokenSet) : userDefaultTokenSet);
31
+ };
32
+ const styleNodeId = `${storageKey}/style`;
33
+ export const saveAndRender = (tokenSet) => {
34
+ let tokens = '';
35
+ try {
36
+ const nextTokens = tokenSet !== null && tokenSet !== void 0 ? tokenSet : restore();
37
+ localStorage.setItem(storageKey, JSON.stringify(nextTokens));
38
+ tokens = `@layer user-tokens { ${renderTokenSet(nextTokens)} }`;
39
+ }
40
+ catch (err) {
41
+ return log.warn('Failed to render', err);
42
+ }
43
+ if (tokens) {
44
+ const styleNode = document.getElementById(styleNodeId);
45
+ if (styleNode) {
46
+ styleNode.textContent = tokens;
47
+ }
48
+ else {
49
+ const newStyleNode = document.createElement('style');
50
+ newStyleNode.id = styleNodeId;
51
+ newStyleNode.textContent = tokens;
52
+ document.head.appendChild(newStyleNode);
53
+ }
54
+ notifyTokenSetUpdate();
55
+ }
56
+ };
57
+ export const reset = () => {
58
+ saveAndRender(userDefaultTokenSet);
59
+ notifyTokenSetUpdate();
60
+ };
61
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/dx-theme-editor/util.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,OAAO,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,UAAU,GAAG,sCAAsC,CAAC;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE;IACpC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC5C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,oBAAoB,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAa,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,UAAU,QAAQ,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,EAAE;IACnD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,OAAO,EAAE,CAAC;QACzC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,wBAAwB,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,YAAY,CAAC,EAAE,GAAG,WAAW,CAAC;YAC9B,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;QACD,oBAAoB,EAAE,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE;IACxB,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACnC,oBAAoB,EAAE,CAAC;AACzB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './dx-theme-editor';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ export * from './dx-theme-editor';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":"5.8.3"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@dxos/lit-theme-editor",
3
+ "version": "0.8.2-main.10c050d",
4
+ "description": "A component for editing the user tokens layer of dxos-theme.",
5
+ "homepage": "https://dxos.org",
6
+ "bugs": "https://github.com/dxos/dxos/issues",
7
+ "license": "MIT",
8
+ "author": "DXOS.org",
9
+ "sideEffects": true,
10
+ "type": "module",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/types/src/index.d.ts",
14
+ "browser": "./dist/src/index.js",
15
+ "node": "./dist/src/index.js"
16
+ },
17
+ "./dx-theme-editor.pcss": "./src/dx-theme-editor/dx-theme-editor.pcss"
18
+ },
19
+ "main": "dist/src/index.js",
20
+ "types": "dist/src/index.d.ts",
21
+ "files": [
22
+ "src",
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "@ch-ui/colors": "1.2.0",
27
+ "@ch-ui/tokens": "2.4.0",
28
+ "lit": "^3.2.0",
29
+ "@dxos/lit-ui": "0.8.2-main.10c050d",
30
+ "@dxos/log": "0.8.2-main.10c050d",
31
+ "@dxos/react-ui-theme": "0.8.2-main.10c050d",
32
+ "@dxos/react-hooks": "0.8.2-main.10c050d"
33
+ },
34
+ "devDependencies": {
35
+ "@dxos/test-utils": "0.8.2-main.10c050d"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ }
40
+ }
@@ -0,0 +1,124 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { LitElement, html } from 'lit';
6
+ import { customElement, property } from 'lit/decorators.js';
7
+ import { classMap } from 'lit/directives/class-map.js';
8
+ import { styleMap } from 'lit/directives/style-map.js';
9
+
10
+ export type DxRangeSpinbuttonVariant = 'reverse-range' | 'reverse-order' | 'torsion';
11
+
12
+ @customElement('dx-range-spinbutton')
13
+ export class DxRangeSpinbutton extends LitElement {
14
+ @property({ type: String })
15
+ label: string = '';
16
+
17
+ @property({ type: String })
18
+ min: string | number = 0;
19
+
20
+ @property({ type: String })
21
+ max: string | number = 100;
22
+
23
+ @property({ type: String })
24
+ step: string | number = 1;
25
+
26
+ @property({ type: String })
27
+ value: string | number = 0;
28
+
29
+ @property({ type: String })
30
+ headingId: string = '';
31
+
32
+ @property({ type: String })
33
+ variant?: DxRangeSpinbuttonVariant;
34
+
35
+ private handleInput(e: Event): void {
36
+ const value = (e.target as HTMLInputElement).value;
37
+ this.value = value;
38
+
39
+ // For torsion variant, calculate and apply styles
40
+ if (this.variant === 'torsion') {
41
+ const controlInputsDiv = (e.target as HTMLElement).closest('.control-inputs');
42
+ if (controlInputsDiv) {
43
+ const styles = this.calculateTorsionStyles(Number(value), Number(this.min), Number(this.max));
44
+ Object.entries(styles).forEach(([key, value]) => {
45
+ (controlInputsDiv as HTMLElement).style.setProperty(key, value);
46
+ });
47
+ }
48
+ }
49
+
50
+ // Dispatch custom event
51
+ this.dispatchEvent(
52
+ new CustomEvent('value-changed', {
53
+ detail: { value: parseFloat(value) },
54
+ bubbles: true,
55
+ composed: true,
56
+ }),
57
+ );
58
+ }
59
+
60
+ private calculateTorsionStyles(value: number, min: number, max: number): Record<string, string> {
61
+ // Calculate the width per step
62
+ const totalSteps = Math.abs(min) + Math.abs(max);
63
+ const widthPerStep = 100 / totalSteps; // Using percentage for width
64
+
65
+ // Calculate the width of the before element
66
+ const beforeWidth = `${Math.abs(value) * widthPerStep}%`;
67
+
68
+ // Calculate the position of the before element
69
+ let beforeLeft = '50%';
70
+ if (value < 0) {
71
+ beforeLeft = `calc(50% - ${beforeWidth})`;
72
+ }
73
+
74
+ return {
75
+ '--before-width': beforeWidth,
76
+ '--before-left': beforeLeft,
77
+ };
78
+ }
79
+
80
+ override render() {
81
+ const controlId = `${this.headingId}-${this.label.toLowerCase().replace(/[^a-z0-9]/g, '-')}`;
82
+
83
+ // For torsion variant, calculate initial styles
84
+ const isTorsion = this.variant === 'torsion';
85
+ const initialStyles = isTorsion
86
+ ? this.calculateTorsionStyles(Number(this.value), Number(this.min), Number(this.max))
87
+ : {};
88
+
89
+ return html`
90
+ <label class="control-label" id="${controlId}-label" for="${controlId}-range">${this.label}:</label>
91
+ <div
92
+ class="${classMap({ 'control-inputs': true, ...(this.variant && { [this.variant]: true }) })}"
93
+ style=${isTorsion ? styleMap(initialStyles) : undefined}
94
+ >
95
+ <input
96
+ id="${controlId}-range"
97
+ type="range"
98
+ min="${this.min}"
99
+ max="${this.max}"
100
+ step="${this.step}"
101
+ class="range-input dx-focus-ring"
102
+ .value=${this.value.toString()}
103
+ @input=${this.handleInput}
104
+ aria-labelledby="${this.headingId} ${controlId}-label"
105
+ />
106
+ <input
107
+ id="${controlId}-number"
108
+ type="number"
109
+ min="${this.min}"
110
+ max="${this.max}"
111
+ step="${this.step}"
112
+ class="number-input dx-input dx-focus-ring"
113
+ .value=${this.value.toString()}
114
+ @input=${this.handleInput}
115
+ aria-labelledby="${this.headingId} ${controlId}-label"
116
+ />
117
+ </div>
118
+ `;
119
+ }
120
+
121
+ override createRenderRoot(): this {
122
+ return this;
123
+ }
124
+ }