@pixerate/editor-svelte 0.22.0 → 0.24.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.
- package/README.md +6 -2
- package/dist/MergePreview.svelte +201 -0
- package/dist/MergePreview.svelte.d.ts +25 -0
- package/dist/MergePreview.svelte.d.ts.map +1 -0
- package/dist/StylesGallery.svelte +169 -0
- package/dist/StylesGallery.svelte.d.ts +27 -0
- package/dist/StylesGallery.svelte.d.ts.map +1 -0
- package/dist/TemplateRenderer.svelte +4 -10
- package/dist/TemplateRenderer.svelte.d.ts.map +1 -1
- package/dist/canvas/TokenBindingPicker.svelte +93 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts +20 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts.map +1 -0
- package/dist/canvas/TokenModeSwitcher.svelte +55 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts +18 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts +4 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts +68 -0
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasAutoLayout.svelte.js +78 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts +31 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasTokens.svelte.js +50 -0
- package/dist/canvas/index.d.ts +7 -0
- package/dist/canvas/index.d.ts.map +1 -1
- package/dist/canvas/index.js +10 -0
- package/dist/fileImport.svelte.d.ts +8 -1
- package/dist/fileImport.svelte.d.ts.map +1 -1
- package/dist/fileImport.svelte.js +11 -1
- package/dist/find-replace/FindReplaceBar.svelte +203 -0
- package/dist/find-replace/FindReplaceBar.svelte.d.ts +15 -0
- package/dist/find-replace/FindReplaceBar.svelte.d.ts.map +1 -0
- package/dist/find-replace/findReplace.svelte.d.ts +27 -0
- package/dist/find-replace/findReplace.svelte.d.ts.map +1 -0
- package/dist/find-replace/findReplace.svelte.js +79 -0
- package/dist/find-replace/index.d.ts +6 -0
- package/dist/find-replace/index.d.ts.map +1 -0
- package/dist/find-replace/index.js +2 -0
- package/dist/generation/AssetMentionChips.svelte +130 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts +21 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts.map +1 -0
- package/dist/generation/GenerationHistory.svelte +161 -0
- package/dist/generation/GenerationHistory.svelte.d.ts +28 -0
- package/dist/generation/GenerationHistory.svelte.d.ts.map +1 -0
- package/dist/generation/GenerationSettings.svelte +174 -0
- package/dist/generation/GenerationSettings.svelte.d.ts +23 -0
- package/dist/generation/GenerationSettings.svelte.d.ts.map +1 -0
- package/dist/generation/JobProgress.svelte +53 -0
- package/dist/generation/JobProgress.svelte.d.ts +17 -0
- package/dist/generation/JobProgress.svelte.d.ts.map +1 -0
- package/dist/generation/index.d.ts +17 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +7 -0
- package/dist/generation/plan.svelte.d.ts +16 -0
- package/dist/generation/plan.svelte.d.ts.map +1 -0
- package/dist/generation/plan.svelte.js +26 -0
- package/dist/generation/progress.svelte.d.ts +25 -0
- package/dist/generation/progress.svelte.d.ts.map +1 -0
- package/dist/generation/progress.svelte.js +36 -0
- package/dist/generation/records.svelte.d.ts +18 -0
- package/dist/generation/records.svelte.d.ts.map +1 -0
- package/dist/generation/records.svelte.js +66 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte +309 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts +11 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts.map +1 -0
- package/dist/image-editor/ControlSlider.svelte +39 -0
- package/dist/image-editor/ControlSlider.svelte.d.ts +13 -0
- package/dist/image-editor/ControlSlider.svelte.d.ts.map +1 -0
- package/dist/image-editor/CurvesEditor.svelte +105 -0
- package/dist/image-editor/CurvesEditor.svelte.d.ts +13 -0
- package/dist/image-editor/CurvesEditor.svelte.d.ts.map +1 -0
- package/dist/image-editor/Histogram.svelte +49 -0
- package/dist/image-editor/Histogram.svelte.d.ts +12 -0
- package/dist/image-editor/Histogram.svelte.d.ts.map +1 -0
- package/dist/image-editor/ImageEditor.svelte +104 -141
- package/dist/image-editor/ImageEditor.svelte.d.ts.map +1 -1
- package/dist/image-editor/RefineEdgePanel.svelte +180 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts +13 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts.map +1 -0
- package/dist/image-editor/SelectionOptionsBar.svelte +135 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts +15 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts.map +1 -0
- package/dist/image-editor/imageEditorState.svelte.d.ts +14 -1
- package/dist/image-editor/imageEditorState.svelte.d.ts.map +1 -1
- package/dist/image-editor/imageEditorState.svelte.js +40 -0
- package/dist/image-editor/index.d.ts +18 -0
- package/dist/image-editor/index.d.ts.map +1 -1
- package/dist/image-editor/index.js +6 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/merge.svelte.d.ts +51 -0
- package/dist/merge.svelte.d.ts.map +1 -0
- package/dist/merge.svelte.js +117 -0
- package/dist/paragraphStyles.svelte.d.ts +30 -0
- package/dist/paragraphStyles.svelte.d.ts.map +1 -0
- package/dist/paragraphStyles.svelte.js +44 -0
- package/dist/persistence/RecoveryPrompt.svelte +57 -0
- package/dist/persistence/RecoveryPrompt.svelte.d.ts +18 -0
- package/dist/persistence/RecoveryPrompt.svelte.d.ts.map +1 -0
- package/dist/persistence/autosave.svelte.d.ts +63 -0
- package/dist/persistence/autosave.svelte.d.ts.map +1 -0
- package/dist/persistence/autosave.svelte.js +110 -0
- package/dist/persistence/index.d.ts +6 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +2 -0
- package/dist/review/TrackedChangesList.svelte +67 -0
- package/dist/review/TrackedChangesList.svelte.d.ts +13 -0
- package/dist/review/TrackedChangesList.svelte.d.ts.map +1 -0
- package/dist/review/documentCompare.svelte.d.ts +21 -0
- package/dist/review/documentCompare.svelte.d.ts.map +1 -0
- package/dist/review/documentCompare.svelte.js +23 -0
- package/dist/review/index.d.ts +4 -0
- package/dist/review/index.d.ts.map +1 -1
- package/dist/review/index.js +2 -0
- package/dist/review/review.svelte.d.ts +6 -0
- package/dist/review/review.svelte.d.ts.map +1 -1
- package/dist/review/review.svelte.js +3 -0
- package/dist/spreadsheet/FormulaBar.svelte +13 -4
- package/dist/spreadsheet/FormulaBar.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/FormulaHints.svelte +7 -5
- package/dist/spreadsheet/FormulaHints.svelte.d.ts +3 -0
- package/dist/spreadsheet/FormulaHints.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/NameManager.svelte +165 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts +11 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SheetTabs.svelte +161 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts +10 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte +184 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte +13 -5
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts +5 -1
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte +141 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte +199 -11
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts +2 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte +92 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/index.d.ts +9 -0
- package/dist/spreadsheet/index.d.ts.map +1 -1
- package/dist/spreadsheet/index.js +5 -0
- package/dist/spreadsheet/spreadsheet.svelte.d.ts +57 -2
- package/dist/spreadsheet/spreadsheet.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/spreadsheet.svelte.js +105 -6
- package/dist/tokens/TokenSwatch.svelte +14 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts +8 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts.map +1 -0
- package/dist/tokens/TokensPanel.svelte +323 -0
- package/dist/tokens/TokensPanel.svelte.d.ts +14 -0
- package/dist/tokens/TokensPanel.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.d.ts +31 -0
- package/dist/tokens/createTokens.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.js +43 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +3 -0
- package/package.json +26 -2
|
@@ -13,6 +13,8 @@ export function createReactiveSpreadsheet(options = {}) {
|
|
|
13
13
|
let selectedRange = $state(null);
|
|
14
14
|
let editingCell = $state(null);
|
|
15
15
|
let draftValue = $state('');
|
|
16
|
+
// Invalid input waiting for the user (data validation alert).
|
|
17
|
+
let validationPrompt = $state.raw(null);
|
|
16
18
|
const controller = new SpreadsheetController({
|
|
17
19
|
...options,
|
|
18
20
|
document: options.document,
|
|
@@ -43,6 +45,39 @@ export function createReactiveSpreadsheet(options = {}) {
|
|
|
43
45
|
// transpose, CSV, clipboard). The controller reports their changes through
|
|
44
46
|
// onDocumentChange / onSelectionChange, which update the state above.
|
|
45
47
|
const tableActions = bindSpreadsheetTableActions(controller);
|
|
48
|
+
// Conditional formatting of every formatted cell (re-evaluated incrementally).
|
|
49
|
+
const conditionalFormatOverlay = $derived.by(() => {
|
|
50
|
+
void doc;
|
|
51
|
+
return controller.getConditionalFormatOverlay();
|
|
52
|
+
});
|
|
53
|
+
// Input breaking a data validation rule is not committed: the editor stays
|
|
54
|
+
// open and `validationPrompt` holds the alert until it is resolved.
|
|
55
|
+
function syncEditing() {
|
|
56
|
+
editingCell = controller.editingCell;
|
|
57
|
+
draftValue = controller.draftValue;
|
|
58
|
+
validationPrompt = controller.validationPrompt;
|
|
59
|
+
activeCell = controller.activeCell;
|
|
60
|
+
selectedRange = controller.selectedRange;
|
|
61
|
+
doc = { ...controller.document };
|
|
62
|
+
}
|
|
63
|
+
// Sheet tabs and defined names. Every workbook change notifies through
|
|
64
|
+
// onDocumentChange, so they follow `doc`.
|
|
65
|
+
const sheets = $derived.by(() => {
|
|
66
|
+
void doc;
|
|
67
|
+
return controller.getSheets();
|
|
68
|
+
});
|
|
69
|
+
const names = $derived.by(() => {
|
|
70
|
+
void doc;
|
|
71
|
+
return controller.getNames();
|
|
72
|
+
});
|
|
73
|
+
// Switching sheets commits the edit in progress.
|
|
74
|
+
function afterSheetSwitch() {
|
|
75
|
+
doc = { ...controller.document };
|
|
76
|
+
activeCell = controller.activeCell;
|
|
77
|
+
selectedRange = controller.selectedRange;
|
|
78
|
+
editingCell = controller.editingCell;
|
|
79
|
+
draftValue = controller.draftValue;
|
|
80
|
+
}
|
|
46
81
|
return {
|
|
47
82
|
get document() {
|
|
48
83
|
return doc;
|
|
@@ -62,6 +97,18 @@ export function createReactiveSpreadsheet(options = {}) {
|
|
|
62
97
|
get draftValue() {
|
|
63
98
|
return draftValue;
|
|
64
99
|
},
|
|
100
|
+
/** The sheets in tab order (see `SpreadsheetController.getSheets`). */
|
|
101
|
+
get sheets() {
|
|
102
|
+
return sheets;
|
|
103
|
+
},
|
|
104
|
+
get activeSheetId() {
|
|
105
|
+
void doc;
|
|
106
|
+
return controller.activeSheetId;
|
|
107
|
+
},
|
|
108
|
+
/** Defined names (see `SpreadsheetController.getNames`). */
|
|
109
|
+
get names() {
|
|
110
|
+
return names;
|
|
111
|
+
},
|
|
65
112
|
set draftValue(val) {
|
|
66
113
|
draftValue = val;
|
|
67
114
|
controller.draftValue = val;
|
|
@@ -89,11 +136,27 @@ export function createReactiveSpreadsheet(options = {}) {
|
|
|
89
136
|
editingCell = controller.editingCell;
|
|
90
137
|
draftValue = controller.draftValue;
|
|
91
138
|
},
|
|
139
|
+
get conditionalFormatOverlay() {
|
|
140
|
+
return conditionalFormatOverlay;
|
|
141
|
+
},
|
|
142
|
+
get validationPrompt() {
|
|
143
|
+
return validationPrompt;
|
|
144
|
+
},
|
|
92
145
|
commitEditing(val) {
|
|
93
|
-
controller.commitEditing(val);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
146
|
+
const result = controller.commitEditing(val);
|
|
147
|
+
syncEditing();
|
|
148
|
+
return result;
|
|
149
|
+
},
|
|
150
|
+
/** Commits input from outside the cell editor (formula bar, list dropdown) with validation. */
|
|
151
|
+
commitCellInput(rowId, colId, raw) {
|
|
152
|
+
const result = controller.commitCellInput(rowId, colId, raw);
|
|
153
|
+
syncEditing();
|
|
154
|
+
return result;
|
|
155
|
+
},
|
|
156
|
+
/** Answers the validation alert: accept (warning / information), retry or cancel. */
|
|
157
|
+
resolveValidationPrompt(action) {
|
|
158
|
+
controller.resolveValidationPrompt(action);
|
|
159
|
+
syncEditing();
|
|
97
160
|
},
|
|
98
161
|
cancelEditing() {
|
|
99
162
|
controller.cancelEditing();
|
|
@@ -161,13 +224,49 @@ export function createReactiveSpreadsheet(options = {}) {
|
|
|
161
224
|
controller.importFromTsv(data);
|
|
162
225
|
doc = { ...controller.document };
|
|
163
226
|
},
|
|
227
|
+
// Undo can switch to the sheet the step belongs to.
|
|
164
228
|
undo() {
|
|
165
229
|
controller.undo();
|
|
166
|
-
|
|
230
|
+
afterSheetSwitch();
|
|
167
231
|
},
|
|
168
232
|
redo() {
|
|
169
233
|
controller.redo();
|
|
170
|
-
|
|
234
|
+
afterSheetSwitch();
|
|
235
|
+
},
|
|
236
|
+
setActiveSheet(idOrName) {
|
|
237
|
+
const changed = controller.setActiveSheet(idOrName);
|
|
238
|
+
afterSheetSwitch();
|
|
239
|
+
return changed;
|
|
240
|
+
},
|
|
241
|
+
addSheet(options) {
|
|
242
|
+
const id = controller.addSheet(options);
|
|
243
|
+
afterSheetSwitch();
|
|
244
|
+
return id;
|
|
245
|
+
},
|
|
246
|
+
renameSheet(idOrName, newName) {
|
|
247
|
+
controller.renameSheet(idOrName, newName);
|
|
248
|
+
},
|
|
249
|
+
moveSheet(idOrName, toIndex) {
|
|
250
|
+
return controller.moveSheet(idOrName, toIndex);
|
|
251
|
+
},
|
|
252
|
+
deleteSheet(idOrName) {
|
|
253
|
+
const deleted = controller.deleteSheet(idOrName);
|
|
254
|
+
afterSheetSwitch();
|
|
255
|
+
return deleted;
|
|
256
|
+
},
|
|
257
|
+
duplicateSheet(idOrName, options) {
|
|
258
|
+
const id = controller.duplicateSheet(idOrName, options);
|
|
259
|
+
afterSheetSwitch();
|
|
260
|
+
return id;
|
|
261
|
+
},
|
|
262
|
+
defineName(name, refersTo, options) {
|
|
263
|
+
controller.defineName(name, refersTo, options);
|
|
264
|
+
},
|
|
265
|
+
renameName(oldName, newName, options) {
|
|
266
|
+
controller.renameName(oldName, newName, options);
|
|
267
|
+
},
|
|
268
|
+
deleteName(name, options) {
|
|
269
|
+
return controller.deleteName(name, options);
|
|
171
270
|
},
|
|
172
271
|
...tableActions
|
|
173
272
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
color: string;
|
|
4
|
+
class?: string;
|
|
5
|
+
}
|
|
6
|
+
let { color, class: className = '' }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<span
|
|
10
|
+
data-token-swatch={color}
|
|
11
|
+
class="inline-block h-4 w-4 shrink-0 rounded border border-border {className}"
|
|
12
|
+
style="background: linear-gradient({color}, {color}), repeating-conic-gradient(#ccc 0 25%, #fff 0 50%) 0 0 / 8px 8px"
|
|
13
|
+
aria-hidden="true"
|
|
14
|
+
></span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenSwatch.svelte.d.ts","sourceRoot":"","sources":["../../src/tokens/TokenSwatch.svelte.ts"],"names":[],"mappings":"AAGE,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
TOKEN_TYPES,
|
|
4
|
+
TokenError,
|
|
5
|
+
getCollectionVariables,
|
|
6
|
+
getTokenVariable,
|
|
7
|
+
isTokenAlias,
|
|
8
|
+
resolveTokenInMode,
|
|
9
|
+
type TokenMode,
|
|
10
|
+
type TokenState,
|
|
11
|
+
type TokenStore,
|
|
12
|
+
type TokenType,
|
|
13
|
+
type TokenVariable
|
|
14
|
+
} from '@pixerate/editor/tokens';
|
|
15
|
+
import { untrack } from 'svelte';
|
|
16
|
+
import TokenSwatch from './TokenSwatch.svelte';
|
|
17
|
+
|
|
18
|
+
interface Props {
|
|
19
|
+
store: TokenStore;
|
|
20
|
+
/** Selected collection (controlled); defaults to the first. */
|
|
21
|
+
collectionId?: string;
|
|
22
|
+
oncollectionchange?: (collectionId: string) => void;
|
|
23
|
+
/** Called with refused edits (also shown in the panel). */
|
|
24
|
+
onerror?: (error: Error) => void;
|
|
25
|
+
class?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let { store, collectionId, oncollectionchange, onerror, class: className = '' }: Props = $props();
|
|
29
|
+
|
|
30
|
+
// Re-read the store on every change; follows a replaced `store` prop too.
|
|
31
|
+
let version = $state(0);
|
|
32
|
+
const tokenState: TokenState = $derived((void version, store.getState()));
|
|
33
|
+
$effect(() => {
|
|
34
|
+
const current = store;
|
|
35
|
+
return untrack(() =>
|
|
36
|
+
current.subscribe(() => {
|
|
37
|
+
version += 1;
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
let ownSelection = $state<string | undefined>(undefined);
|
|
43
|
+
let error = $state<string | null>(null);
|
|
44
|
+
let newCollection = $state('');
|
|
45
|
+
let newMode = $state('');
|
|
46
|
+
let newName = $state('');
|
|
47
|
+
let newType = $state<TokenType>('color');
|
|
48
|
+
|
|
49
|
+
const collection = $derived(
|
|
50
|
+
tokenState.collections.find((c) => c.id === (collectionId ?? ownSelection)) ?? tokenState.collections[0]
|
|
51
|
+
);
|
|
52
|
+
const variables = $derived(collection ? getCollectionVariables(tokenState, collection.id) : []);
|
|
53
|
+
const canUndo = $derived((void version, store.canUndo()));
|
|
54
|
+
const canRedo = $derived((void version, store.canRedo()));
|
|
55
|
+
|
|
56
|
+
const input =
|
|
57
|
+
'w-full min-w-0 rounded border border-border bg-background px-1.5 py-0.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-primary';
|
|
58
|
+
const button = 'rounded border border-border px-2 py-0.5 text-xs hover:bg-muted disabled:opacity-40';
|
|
59
|
+
|
|
60
|
+
function select(id: string) {
|
|
61
|
+
ownSelection = id;
|
|
62
|
+
oncollectionchange?.(id);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function run(fn: () => void): boolean {
|
|
66
|
+
try {
|
|
67
|
+
fn();
|
|
68
|
+
error = null;
|
|
69
|
+
return true;
|
|
70
|
+
} catch (e) {
|
|
71
|
+
const err = e as Error;
|
|
72
|
+
error = err instanceof TokenError ? err.message : String(err);
|
|
73
|
+
onerror?.(err);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Commit-on-blur handlers for an input showing `value`; refused edits reset the input. */
|
|
79
|
+
function committer(value: string, apply: (next: string) => void) {
|
|
80
|
+
return {
|
|
81
|
+
onblur: (e: FocusEvent) => {
|
|
82
|
+
const el = e.currentTarget as HTMLInputElement;
|
|
83
|
+
if (el.value === value) return;
|
|
84
|
+
if (!run(() => apply(el.value))) el.value = value;
|
|
85
|
+
},
|
|
86
|
+
onkeydown: (e: KeyboardEvent) => {
|
|
87
|
+
const el = e.currentTarget as HTMLInputElement;
|
|
88
|
+
if (e.key === 'Enter') el.blur();
|
|
89
|
+
if (e.key === 'Escape') {
|
|
90
|
+
el.value = value;
|
|
91
|
+
el.blur();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function aliasCandidates(variable: TokenVariable) {
|
|
98
|
+
return tokenState.variables.filter((v) => v.type === variable.type && v.id !== variable.id);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function setAlias(variable: TokenVariable, mode: TokenMode, target: string) {
|
|
102
|
+
const resolved = resolveTokenInMode(tokenState, variable.id, mode.id);
|
|
103
|
+
run(() => store.setValue(variable.id, target ? { alias: target } : resolved, mode.id));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function typeIcon(type: TokenType) {
|
|
107
|
+
return type === 'color' ? '◐' : type === 'number' ? '#' : type === 'string' ? 'T' : '⊘';
|
|
108
|
+
}
|
|
109
|
+
</script>
|
|
110
|
+
|
|
111
|
+
<div data-tokens-panel="" class="flex flex-col gap-2 text-xs text-foreground {className}">
|
|
112
|
+
<div class="flex flex-wrap items-center gap-2">
|
|
113
|
+
{#if tokenState.collections.length > 0}
|
|
114
|
+
<select
|
|
115
|
+
aria-label="Collection"
|
|
116
|
+
class="rounded border border-border bg-background px-1.5 py-0.5 text-xs"
|
|
117
|
+
value={collection?.id ?? ''}
|
|
118
|
+
onchange={(e) => select(e.currentTarget.value)}
|
|
119
|
+
>
|
|
120
|
+
{#each tokenState.collections as c (c.id)}
|
|
121
|
+
<option value={c.id}>{c.name}</option>
|
|
122
|
+
{/each}
|
|
123
|
+
</select>
|
|
124
|
+
{/if}
|
|
125
|
+
<form
|
|
126
|
+
class="flex items-center gap-1"
|
|
127
|
+
onsubmit={(e) => {
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
run(() => {
|
|
130
|
+
const created = store.createCollection(newCollection, ['Light', 'Dark']);
|
|
131
|
+
newCollection = '';
|
|
132
|
+
select(created.id);
|
|
133
|
+
});
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
<input class={input} placeholder="New collection" aria-label="New collection name" bind:value={newCollection} />
|
|
137
|
+
<button type="submit" class={button} disabled={!newCollection.trim()}>Add</button>
|
|
138
|
+
</form>
|
|
139
|
+
<span class="ml-auto flex gap-1">
|
|
140
|
+
<button type="button" class={button} disabled={!canUndo} onclick={() => store.undo()} aria-label="Undo token edit">Undo</button>
|
|
141
|
+
<button type="button" class={button} disabled={!canRedo} onclick={() => store.redo()} aria-label="Redo token edit">Redo</button>
|
|
142
|
+
</span>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
{#if error}
|
|
146
|
+
<div role="alert" class="rounded border border-red-500/40 bg-red-500/10 px-2 py-1 text-red-500">{error}</div>
|
|
147
|
+
{/if}
|
|
148
|
+
|
|
149
|
+
{#if collection}
|
|
150
|
+
{@const c = collection}
|
|
151
|
+
<div class="flex items-center gap-1">
|
|
152
|
+
<input class={input} value={c.name} aria-label="Collection name" {...committer(c.name, (name) => store.renameCollection(c.id, name))} />
|
|
153
|
+
<button type="button" class={button} onclick={() => run(() => store.deleteCollection(c.id))} aria-label="Delete collection {c.name}">
|
|
154
|
+
Delete
|
|
155
|
+
</button>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="overflow-x-auto">
|
|
158
|
+
<table class="w-full border-collapse">
|
|
159
|
+
<thead>
|
|
160
|
+
<tr class="border-b border-border text-left text-muted-foreground">
|
|
161
|
+
<th class="px-1 py-1 font-medium">Name</th>
|
|
162
|
+
{#each c.modes as mode, index (mode.id)}
|
|
163
|
+
<th class="px-1 py-1 font-medium" data-mode-id={mode.id}>
|
|
164
|
+
<div class="flex items-center gap-1">
|
|
165
|
+
<input
|
|
166
|
+
class={input}
|
|
167
|
+
value={mode.name}
|
|
168
|
+
aria-label="Mode {mode.name} name"
|
|
169
|
+
{...committer(mode.name, (name) => store.renameMode(c.id, mode.id, name))}
|
|
170
|
+
/>
|
|
171
|
+
{#if index === 0}
|
|
172
|
+
<span title="Default mode" class="text-[10px] uppercase">default</span>
|
|
173
|
+
{:else}
|
|
174
|
+
<button
|
|
175
|
+
type="button"
|
|
176
|
+
class="px-1 hover:text-foreground"
|
|
177
|
+
title="Make default"
|
|
178
|
+
aria-label="Make {mode.name} the default mode"
|
|
179
|
+
onclick={() => run(() => store.setDefaultMode(c.id, mode.id))}>★</button
|
|
180
|
+
>
|
|
181
|
+
{/if}
|
|
182
|
+
{#if c.modes.length > 1}
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
class="px-1 hover:text-foreground"
|
|
186
|
+
aria-label="Remove mode {mode.name}"
|
|
187
|
+
onclick={() => run(() => store.removeMode(c.id, mode.id))}>×</button
|
|
188
|
+
>
|
|
189
|
+
{/if}
|
|
190
|
+
</div>
|
|
191
|
+
</th>
|
|
192
|
+
{/each}
|
|
193
|
+
<th class="px-1 py-1">
|
|
194
|
+
<form
|
|
195
|
+
class="flex items-center gap-1"
|
|
196
|
+
onsubmit={(e) => {
|
|
197
|
+
e.preventDefault();
|
|
198
|
+
run(() => {
|
|
199
|
+
store.addMode(c.id, newMode);
|
|
200
|
+
newMode = '';
|
|
201
|
+
});
|
|
202
|
+
}}
|
|
203
|
+
>
|
|
204
|
+
<input class={input} placeholder="Mode" aria-label="New mode name" bind:value={newMode} />
|
|
205
|
+
<button type="submit" class={button} disabled={!newMode.trim()} aria-label="Add mode">+</button>
|
|
206
|
+
</form>
|
|
207
|
+
</th>
|
|
208
|
+
</tr>
|
|
209
|
+
</thead>
|
|
210
|
+
<tbody>
|
|
211
|
+
{#each variables as variable (variable.id)}
|
|
212
|
+
<tr class="border-b border-border/50" data-token-row={variable.id}>
|
|
213
|
+
<td class="px-1 py-1">
|
|
214
|
+
<div class="flex items-center gap-1">
|
|
215
|
+
<span class="w-4 text-center text-muted-foreground" title={variable.type}>{typeIcon(variable.type)}</span>
|
|
216
|
+
<input
|
|
217
|
+
class={input}
|
|
218
|
+
value={variable.name}
|
|
219
|
+
aria-label="Variable {variable.name} name"
|
|
220
|
+
{...committer(variable.name, (name) => store.renameVariable(variable.id, name))}
|
|
221
|
+
/>
|
|
222
|
+
</div>
|
|
223
|
+
</td>
|
|
224
|
+
{#each c.modes as mode (mode.id)}
|
|
225
|
+
{@const value = variable.valuesByMode[mode.id]}
|
|
226
|
+
{@const alias = isTokenAlias(value) ? value.alias : ''}
|
|
227
|
+
{@const resolved = resolveTokenInMode(tokenState, variable.id, mode.id)}
|
|
228
|
+
<td class="px-1 py-1 align-middle" data-variable-id={variable.id} data-mode-id={mode.id}>
|
|
229
|
+
<div class="flex items-center gap-1">
|
|
230
|
+
{#if alias}
|
|
231
|
+
<span class="flex min-w-0 flex-1 items-center gap-1 text-xs" data-token-alias={alias}>
|
|
232
|
+
{#if variable.type === 'color' && resolved !== undefined}<TokenSwatch color={String(resolved)} />{/if}
|
|
233
|
+
<span class="truncate">→ {getTokenVariable(tokenState, alias)?.name ?? alias}</span>
|
|
234
|
+
</span>
|
|
235
|
+
{:else}
|
|
236
|
+
<span class="min-w-0 flex-1">
|
|
237
|
+
{#if variable.type === 'color'}
|
|
238
|
+
<span class="flex items-center gap-1">
|
|
239
|
+
<label class="relative">
|
|
240
|
+
<TokenSwatch color={String(value)} />
|
|
241
|
+
<input
|
|
242
|
+
type="color"
|
|
243
|
+
aria-label="{variable.name} colour"
|
|
244
|
+
class="absolute inset-0 h-full w-full cursor-pointer opacity-0"
|
|
245
|
+
value={String(value).slice(0, 7)}
|
|
246
|
+
onchange={(e) => run(() => store.setValue(variable.id, e.currentTarget.value + String(value).slice(7), mode.id))}
|
|
247
|
+
/>
|
|
248
|
+
</label>
|
|
249
|
+
<input
|
|
250
|
+
class={input}
|
|
251
|
+
value={String(value)}
|
|
252
|
+
aria-label="{variable.name} value"
|
|
253
|
+
{...committer(String(value), (next) => store.setValue(variable.id, next, mode.id))}
|
|
254
|
+
/>
|
|
255
|
+
</span>
|
|
256
|
+
{:else if variable.type === 'boolean'}
|
|
257
|
+
<input
|
|
258
|
+
type="checkbox"
|
|
259
|
+
aria-label="{variable.name} value"
|
|
260
|
+
checked={value === true}
|
|
261
|
+
onchange={(e) => run(() => store.setValue(variable.id, e.currentTarget.checked, mode.id))}
|
|
262
|
+
/>
|
|
263
|
+
{:else}
|
|
264
|
+
<input
|
|
265
|
+
class={input}
|
|
266
|
+
value={String(value)}
|
|
267
|
+
inputmode={variable.type === 'number' ? 'decimal' : undefined}
|
|
268
|
+
aria-label="{variable.name} value"
|
|
269
|
+
{...committer(String(value), (next) => store.setValue(variable.id, next, mode.id))}
|
|
270
|
+
/>
|
|
271
|
+
{/if}
|
|
272
|
+
</span>
|
|
273
|
+
{/if}
|
|
274
|
+
<select
|
|
275
|
+
aria-label="{variable.name} alias in {mode.name}"
|
|
276
|
+
class="w-5 shrink-0 rounded border border-border bg-background text-xs"
|
|
277
|
+
title="Alias"
|
|
278
|
+
value={alias}
|
|
279
|
+
onchange={(e) => setAlias(variable, mode, e.currentTarget.value)}
|
|
280
|
+
>
|
|
281
|
+
<option value="">Value</option>
|
|
282
|
+
{#each aliasCandidates(variable) as candidate (candidate.id)}
|
|
283
|
+
<option value={candidate.id}>→ {candidate.name}</option>
|
|
284
|
+
{/each}
|
|
285
|
+
</select>
|
|
286
|
+
</div>
|
|
287
|
+
</td>
|
|
288
|
+
{/each}
|
|
289
|
+
<td class="px-1 py-1 text-right">
|
|
290
|
+
<button
|
|
291
|
+
type="button"
|
|
292
|
+
class="px-1 text-muted-foreground hover:text-foreground"
|
|
293
|
+
aria-label="Delete variable {variable.name}"
|
|
294
|
+
onclick={() => run(() => store.deleteVariables(variable.id))}>×</button
|
|
295
|
+
>
|
|
296
|
+
</td>
|
|
297
|
+
</tr>
|
|
298
|
+
{/each}
|
|
299
|
+
</tbody>
|
|
300
|
+
</table>
|
|
301
|
+
</div>
|
|
302
|
+
<form
|
|
303
|
+
class="flex items-center gap-1"
|
|
304
|
+
onsubmit={(e) => {
|
|
305
|
+
e.preventDefault();
|
|
306
|
+
run(() => {
|
|
307
|
+
store.createVariable({ collectionId: c.id, name: newName, type: newType });
|
|
308
|
+
newName = '';
|
|
309
|
+
});
|
|
310
|
+
}}
|
|
311
|
+
>
|
|
312
|
+
<input class={input} placeholder="color/bg" aria-label="New variable name" bind:value={newName} />
|
|
313
|
+
<select aria-label="New variable type" class="rounded border border-border bg-background px-1 py-0.5 text-xs" bind:value={newType}>
|
|
314
|
+
{#each TOKEN_TYPES as t (t)}
|
|
315
|
+
<option value={t}>{t}</option>
|
|
316
|
+
{/each}
|
|
317
|
+
</select>
|
|
318
|
+
<button type="submit" class={button} disabled={!newName.trim()}>Add variable</button>
|
|
319
|
+
</form>
|
|
320
|
+
{:else}
|
|
321
|
+
<p class="text-muted-foreground">No collections yet.</p>
|
|
322
|
+
{/if}
|
|
323
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type TokenStore } from '@pixerate/editor/tokens';
|
|
2
|
+
interface Props {
|
|
3
|
+
store: TokenStore;
|
|
4
|
+
/** Selected collection (controlled); defaults to the first. */
|
|
5
|
+
collectionId?: string;
|
|
6
|
+
oncollectionchange?: (collectionId: string) => void;
|
|
7
|
+
/** Called with refused edits (also shown in the panel). */
|
|
8
|
+
onerror?: (error: Error) => void;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
|
+
declare const TokensPanel: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type TokensPanel = ReturnType<typeof TokensPanel>;
|
|
13
|
+
export default TokensPanel;
|
|
14
|
+
//# sourceMappingURL=TokensPanel.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokensPanel.svelte.d.ts","sourceRoot":"","sources":["../../src/tokens/TokensPanel.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EASH,KAAK,UAAU,EAGhB,MAAM,yBAAyB,CAAC;AAKjC,UAAU,KAAK;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8OH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type TokenCssOptions, type TokenModeContext, type TokenState, type TokenStore } from "@pixerate/editor/tokens";
|
|
2
|
+
export interface CreateTokensOptions {
|
|
3
|
+
/** Modes for `cssVariables` (collection id → mode id), or a getter for reactive modes. */
|
|
4
|
+
modes?: TokenModeContext | (() => TokenModeContext | undefined);
|
|
5
|
+
/** Options for `css` and `cssVariables` (prefix, attribute, …). */
|
|
6
|
+
css?: TokenCssOptions;
|
|
7
|
+
}
|
|
8
|
+
export interface SvelteTokens {
|
|
9
|
+
readonly store: TokenStore;
|
|
10
|
+
/** The store's state (reactive). */
|
|
11
|
+
readonly state: TokenState;
|
|
12
|
+
/** Resolved custom properties for `modes` (reactive), e.g. for `style:` directives. */
|
|
13
|
+
readonly cssVariables: Record<string, string>;
|
|
14
|
+
/** `cssVariables` as a `style` attribute string (reactive). */
|
|
15
|
+
readonly style: string;
|
|
16
|
+
/** A stylesheet with every mode (reactive). */
|
|
17
|
+
readonly css: string;
|
|
18
|
+
readonly canUndo: boolean;
|
|
19
|
+
readonly canRedo: boolean;
|
|
20
|
+
undo(): void;
|
|
21
|
+
redo(): void;
|
|
22
|
+
/** Stops listening to the store. */
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Svelte 5 rune: subscribes to a `TokenStore` and exposes its state plus CSS custom properties
|
|
27
|
+
* for app theming (`<div style={tokens.style}>`, or inject `tokens.css` and switch the
|
|
28
|
+
* `data-mode` attribute).
|
|
29
|
+
*/
|
|
30
|
+
export declare function createTokens(store: TokenStore, options?: CreateTokensOptions): SvelteTokens;
|
|
31
|
+
//# sourceMappingURL=createTokens.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTokens.svelte.d.ts","sourceRoot":"","sources":["../../src/tokens/createTokens.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,KAAK,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAChE,mEAAmE;IACnE,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,uFAAuF;IACvF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,oCAAoC;IACpC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAoC/F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { exportTokensCss, getTokenCssVariables, } from "@pixerate/editor/tokens";
|
|
2
|
+
/**
|
|
3
|
+
* Svelte 5 rune: subscribes to a `TokenStore` and exposes its state plus CSS custom properties
|
|
4
|
+
* for app theming (`<div style={tokens.style}>`, or inject `tokens.css` and switch the
|
|
5
|
+
* `data-mode` attribute).
|
|
6
|
+
*/
|
|
7
|
+
export function createTokens(store, options = {}) {
|
|
8
|
+
let state = $state.raw(store.getState());
|
|
9
|
+
const unsubscribe = store.subscribe((event) => {
|
|
10
|
+
state = event.state;
|
|
11
|
+
});
|
|
12
|
+
const modes = () => (typeof options.modes === "function" ? options.modes() : options.modes);
|
|
13
|
+
const cssVariables = $derived(getTokenCssVariables(state, modes(), options.css));
|
|
14
|
+
const css = $derived(exportTokensCss(state, options.css));
|
|
15
|
+
return {
|
|
16
|
+
store,
|
|
17
|
+
get state() {
|
|
18
|
+
return state;
|
|
19
|
+
},
|
|
20
|
+
get cssVariables() {
|
|
21
|
+
return cssVariables;
|
|
22
|
+
},
|
|
23
|
+
get style() {
|
|
24
|
+
return Object.entries(cssVariables)
|
|
25
|
+
.map(([name, value]) => `${name}: ${value}`)
|
|
26
|
+
.join("; ");
|
|
27
|
+
},
|
|
28
|
+
get css() {
|
|
29
|
+
return css;
|
|
30
|
+
},
|
|
31
|
+
get canUndo() {
|
|
32
|
+
void state;
|
|
33
|
+
return store.canUndo();
|
|
34
|
+
},
|
|
35
|
+
get canRedo() {
|
|
36
|
+
void state;
|
|
37
|
+
return store.canRedo();
|
|
38
|
+
},
|
|
39
|
+
undo: () => void store.undo(),
|
|
40
|
+
redo: () => void store.redo(),
|
|
41
|
+
destroy: unsubscribe,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ComponentProps } from "svelte";
|
|
2
|
+
import type TokensPanelComponent from "./TokensPanel.svelte";
|
|
3
|
+
export { default as TokensPanel } from "./TokensPanel.svelte";
|
|
4
|
+
export { default as TokenSwatch } from "./TokenSwatch.svelte";
|
|
5
|
+
export * from "./createTokens.svelte.js";
|
|
6
|
+
export type TokensPanelProps = ComponentProps<typeof TokensPanelComponent>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,oBAAoB,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,cAAc,0BAA0B,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixerate/editor-svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "Svelte bindings and prompt/rich-text components for @pixerate/editor",
|
|
5
5
|
"author": "Pixerate",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,6 +38,21 @@
|
|
|
38
38
|
"svelte": "./dist/commands/index.js",
|
|
39
39
|
"default": "./dist/commands/index.js"
|
|
40
40
|
},
|
|
41
|
+
"./persistence": {
|
|
42
|
+
"types": "./dist/persistence/index.d.ts",
|
|
43
|
+
"svelte": "./dist/persistence/index.js",
|
|
44
|
+
"default": "./dist/persistence/index.js"
|
|
45
|
+
},
|
|
46
|
+
"./generation": {
|
|
47
|
+
"types": "./dist/generation/index.d.ts",
|
|
48
|
+
"svelte": "./dist/generation/index.js",
|
|
49
|
+
"default": "./dist/generation/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./tokens": {
|
|
52
|
+
"types": "./dist/tokens/index.d.ts",
|
|
53
|
+
"svelte": "./dist/tokens/index.js",
|
|
54
|
+
"default": "./dist/tokens/index.js"
|
|
55
|
+
},
|
|
41
56
|
"./package.json": "./package.json"
|
|
42
57
|
},
|
|
43
58
|
"typesVersions": {
|
|
@@ -53,6 +68,15 @@
|
|
|
53
68
|
],
|
|
54
69
|
"commands": [
|
|
55
70
|
"./dist/commands/index.d.ts"
|
|
71
|
+
],
|
|
72
|
+
"persistence": [
|
|
73
|
+
"./dist/persistence/index.d.ts"
|
|
74
|
+
],
|
|
75
|
+
"generation": [
|
|
76
|
+
"./dist/generation/index.d.ts"
|
|
77
|
+
],
|
|
78
|
+
"tokens": [
|
|
79
|
+
"./dist/tokens/index.d.ts"
|
|
56
80
|
]
|
|
57
81
|
}
|
|
58
82
|
},
|
|
@@ -67,7 +91,7 @@
|
|
|
67
91
|
"@tiptap/extension-bubble-menu": "^2.11.5",
|
|
68
92
|
"@tiptap/extension-placeholder": "^2.11.5",
|
|
69
93
|
"@tiptap/starter-kit": "^2.11.5",
|
|
70
|
-
"@pixerate/editor": "0.
|
|
94
|
+
"@pixerate/editor": "0.25.0"
|
|
71
95
|
},
|
|
72
96
|
"peerDependencies": {
|
|
73
97
|
"@dagrejs/dagre": "^1.1.4",
|