@pixerate/editor 0.154.0 → 0.155.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/dist/animation-editor/index.cjs +2 -3
- package/dist/animation-editor/index.js +1 -2
- package/dist/canvas/index.cjs +15 -16
- package/dist/canvas/index.js +2 -3
- package/dist/chart/index.cjs +2 -3
- package/dist/chart/index.js +1 -2
- package/dist/chunk-M4MIZPQI.cjs +393 -0
- package/dist/chunk-NHLYK3AX.js +393 -0
- package/dist/{chunk-XFDQEAOS.cjs → chunk-RQCMSEM5.cjs} +2 -2
- package/dist/{chunk-BCY22GBH.js → chunk-SDHZG5TF.js} +1 -1
- package/dist/{chunk-HVX35M2I.cjs → chunk-WI7QJA7A.cjs} +2 -2
- package/dist/{chunk-4J4MC3F5.js → chunk-YXOW456B.js} +1 -1
- package/dist/diagram/index.cjs +2 -3
- package/dist/diagram/index.js +1 -2
- package/dist/image-editor/controller.d.cts +8 -0
- package/dist/image-editor/controller.d.ts +8 -0
- package/dist/image-editor/editorDocument.d.cts +16 -0
- package/dist/image-editor/editorDocument.d.ts +16 -0
- package/dist/image-editor/index.cjs +102 -52
- package/dist/image-editor/index.d.cts +1 -0
- package/dist/image-editor/index.d.ts +1 -0
- package/dist/image-editor/index.js +51 -1
- package/dist/index.cjs +4 -5
- package/dist/index.js +2 -3
- package/dist/paint-editor/controller.d.cts +8 -0
- package/dist/paint-editor/controller.d.ts +8 -0
- package/dist/paint-editor/editorDocument.d.cts +17 -0
- package/dist/paint-editor/editorDocument.d.ts +17 -0
- package/dist/paint-editor/index.cjs +74 -18
- package/dist/paint-editor/index.d.cts +1 -0
- package/dist/paint-editor/index.d.ts +1 -0
- package/dist/paint-editor/index.js +58 -2
- package/dist/parameters/index.cjs +2 -3
- package/dist/parameters/index.js +1 -2
- package/dist/persistence/assets.d.cts +51 -0
- package/dist/persistence/assets.d.ts +51 -0
- package/dist/persistence/editorDocument.d.cts +12 -0
- package/dist/persistence/editorDocument.d.ts +12 -0
- package/dist/persistence/index.cjs +32 -8
- package/dist/persistence/index.d.cts +1 -0
- package/dist/persistence/index.d.ts +1 -0
- package/dist/persistence/index.js +34 -10
- package/dist/spreadsheet/index.cjs +3 -4
- package/dist/spreadsheet/index.js +2 -3
- package/dist/tokens/index.cjs +3 -4
- package/dist/tokens/index.js +2 -3
- package/dist/vector/index.cjs +2 -3
- package/dist/vector/index.js +1 -2
- package/dist/video-editor/index.cjs +2 -3
- package/dist/video-editor/index.js +1 -2
- package/package.json +1 -1
- package/skills/pixerate-image-editor/SKILL.md +16 -24
- package/skills/pixerate-image-editor/references/smart-objects.md +28 -0
- package/skills/pixerate-paint-editor/SKILL.md +17 -5
- package/dist/chunk-5H2C3QSF.cjs +0 -134
- package/dist/chunk-GNV54DLO.js +0 -134
- package/dist/chunk-L5OWG2NA.cjs +0 -135
- package/dist/chunk-WHKNYFM2.js +0 -135
|
@@ -6,14 +6,21 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var _chunk5H2C3QSFcjs = require('../chunk-5H2C3QSF.cjs');
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
var _chunkM4MIZPQIcjs = require('../chunk-M4MIZPQI.cjs');
|
|
17
24
|
require('../chunk-2BSBFBOA.cjs');
|
|
18
25
|
|
|
19
26
|
// src/persistence/recoveryPolicy.ts
|
|
@@ -667,9 +674,11 @@ function createEditorAutosave(doc, options) {
|
|
|
667
674
|
const revisions = createRevisionTracker({ history: doc, dirty });
|
|
668
675
|
const controller = createAutosaveController({
|
|
669
676
|
...rest,
|
|
677
|
+
// Image and paint documents hold asset references: their bytes are saved and read with them.
|
|
678
|
+
storage: doc.assets ? _chunkM4MIZPQIcjs.withEditorAssets.call(void 0, rest.storage, doc.assets) : rest.storage,
|
|
670
679
|
key: _nullishCoalesce(key, () => ( doc.kind)),
|
|
671
|
-
getSnapshot: () =>
|
|
672
|
-
deserialize: (text) =>
|
|
680
|
+
getSnapshot: () => _chunkM4MIZPQIcjs.toEditorDocumentFile.call(void 0, doc),
|
|
681
|
+
deserialize: (text) => _chunkM4MIZPQIcjs.parseEditorDocument.call(void 0, text, { kind: doc.kind }),
|
|
673
682
|
revision: revisions.revision,
|
|
674
683
|
savedRevision: revisions.savedRevision
|
|
675
684
|
});
|
|
@@ -742,7 +751,7 @@ function createEditorDocumentStore(options) {
|
|
|
742
751
|
const newestFirst = (a, b) => a.savedAt < b.savedAt ? 1 : a.savedAt > b.savedAt ? -1 : 0;
|
|
743
752
|
const readFile = async (key) => {
|
|
744
753
|
const raw = await storage.get(fileKey(key));
|
|
745
|
-
return raw === null ? null :
|
|
754
|
+
return raw === null ? null : _chunkM4MIZPQIcjs.parseEditorDocument.call(void 0, raw);
|
|
746
755
|
};
|
|
747
756
|
return {
|
|
748
757
|
save: (doc, name) => run(async () => {
|
|
@@ -754,7 +763,9 @@ function createEditorDocumentStore(options) {
|
|
|
754
763
|
formatVersion: doc.formatVersion,
|
|
755
764
|
savedAt: new Date(now()).toISOString()
|
|
756
765
|
};
|
|
757
|
-
|
|
766
|
+
const text = JSON.stringify(_chunkM4MIZPQIcjs.toEditorDocumentFile.call(void 0, doc, trimmed));
|
|
767
|
+
if (doc.assets) await _chunkM4MIZPQIcjs.persistEditorAssets.call(void 0, storage, doc.assets, text);
|
|
768
|
+
await storage.set(fileKey(entry.key), text);
|
|
758
769
|
await saveIndex([...(await loadIndex()).filter((item) => item.key !== entry.key), entry]);
|
|
759
770
|
return entry;
|
|
760
771
|
}),
|
|
@@ -765,10 +776,14 @@ function createEditorDocumentStore(options) {
|
|
|
765
776
|
const file = entry ? await readFile(key) : null;
|
|
766
777
|
if (!entry || !file) {
|
|
767
778
|
const keys = (await loadIndex()).filter((item) => item.kind === doc.kind).sort(newestFirst).map((item) => item.key);
|
|
768
|
-
throw new (0,
|
|
779
|
+
throw new (0, _chunkM4MIZPQIcjs.EditorDocumentLoadError)(
|
|
769
780
|
`There is no saved document "${key}". ${keys.length ? `Saved ${doc.kind} documents: ${keys.join(", ")}.` : `No ${doc.kind} documents are saved yet.`}`
|
|
770
781
|
);
|
|
771
782
|
}
|
|
783
|
+
if (doc.assets) {
|
|
784
|
+
const missing = await _chunkM4MIZPQIcjs.preloadEditorAssets.call(void 0, storage, doc.assets, file);
|
|
785
|
+
if (missing.length) throw new (0, _chunkM4MIZPQIcjs.EditorDocumentLoadError)(`The saved document "${key}" refers to ${missing.length} asset${missing.length === 1 ? "" : "s"} that storage no longer has, so it cannot be opened.`);
|
|
786
|
+
}
|
|
772
787
|
const report = doc.loadDocument(file, { history: _nullishCoalesce(openOptions.history, () => ( "reset")) });
|
|
773
788
|
return { ...entry, report };
|
|
774
789
|
}),
|
|
@@ -966,4 +981,13 @@ function createDocumentToolProvider(doc, options = {}) {
|
|
|
966
981
|
|
|
967
982
|
|
|
968
983
|
|
|
969
|
-
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
exports.EDITOR_ASSET_PREFIX = _chunkM4MIZPQIcjs.EDITOR_ASSET_PREFIX; exports.EDITOR_DOCUMENT_FORMAT = _chunkM4MIZPQIcjs.EDITOR_DOCUMENT_FORMAT; exports.EditorDocumentLoadError = _chunkM4MIZPQIcjs.EditorDocumentLoadError; exports.InjectedStorageError = InjectedStorageError; exports.StorageUnavailableError = StorageUnavailableError; exports.collectAssetRefs = _chunkM4MIZPQIcjs.collectAssetRefs; exports.createAutosaveController = createAutosaveController; exports.createDocumentToolProvider = createDocumentToolProvider; exports.createEditorAssetRegistry = _chunkM4MIZPQIcjs.createEditorAssetRegistry; exports.createEditorAutosave = createEditorAutosave; exports.createEditorDocumentStore = createEditorDocumentStore; exports.createIndexedDbAdapter = createIndexedDbAdapter; exports.createLoadReport = _chunkM4MIZPQIcjs.createLoadReport; exports.createLocalStorageAdapter = createLocalStorageAdapter; exports.createMemoryStorage = createMemoryStorage; exports.createOpfsAdapter = createOpfsAdapter; exports.createRecoveryPolicy = createRecoveryPolicy; exports.createRevisionTracker = createRevisionTracker; exports.defineEditorDocument = _chunkM4MIZPQIcjs.defineEditorDocument; exports.exponentialBackoff = exponentialBackoff; exports.externalizeAssets = _chunkM4MIZPQIcjs.externalizeAssets; exports.formatRecoveryMessage = formatRecoveryMessage; exports.hasLoadProblems = _chunkM4MIZPQIcjs.hasLoadProblems; exports.internalizeAssets = _chunkM4MIZPQIcjs.internalizeAssets; exports.isEditorDocumentFile = _chunkM4MIZPQIcjs.isEditorDocumentFile; exports.isIndexedDbAvailable = isIndexedDbAvailable; exports.isInlineAsset = _chunkM4MIZPQIcjs.isInlineAsset; exports.isLocalStorageAvailable = isLocalStorageAvailable; exports.isOpfsAvailable = isOpfsAvailable; exports.loadDocument = _chunkM4MIZPQIcjs.loadDocument; exports.loadSections = _chunkM4MIZPQIcjs.loadSections; exports.migrateDocument = _chunkM4MIZPQIcjs.migrateDocument; exports.parseEditorDocument = _chunkM4MIZPQIcjs.parseEditorDocument; exports.persistEditorAssets = _chunkM4MIZPQIcjs.persistEditorAssets; exports.preloadEditorAssets = _chunkM4MIZPQIcjs.preloadEditorAssets; exports.recoveryMetaKey = recoveryMetaKey; exports.serializeEditorDocument = _chunkM4MIZPQIcjs.serializeEditorDocument; exports.slugifyDocumentName = slugifyDocumentName; exports.toEditorDocumentFile = _chunkM4MIZPQIcjs.toEditorDocumentFile; exports.withEditorAssets = _chunkM4MIZPQIcjs.withEditorAssets; exports.withStorageFailures = withStorageFailures;
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
|
+
EDITOR_ASSET_PREFIX,
|
|
2
3
|
EDITOR_DOCUMENT_FORMAT,
|
|
3
4
|
EditorDocumentLoadError,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
parseEditorDocument,
|
|
7
|
-
serializeEditorDocument,
|
|
8
|
-
toEditorDocumentFile
|
|
9
|
-
} from "../chunk-GNV54DLO.js";
|
|
10
|
-
import {
|
|
5
|
+
collectAssetRefs,
|
|
6
|
+
createEditorAssetRegistry,
|
|
11
7
|
createLoadReport,
|
|
8
|
+
defineEditorDocument,
|
|
9
|
+
externalizeAssets,
|
|
12
10
|
hasLoadProblems,
|
|
11
|
+
internalizeAssets,
|
|
12
|
+
isEditorDocumentFile,
|
|
13
|
+
isInlineAsset,
|
|
13
14
|
loadDocument,
|
|
14
15
|
loadSections,
|
|
15
|
-
migrateDocument
|
|
16
|
-
|
|
16
|
+
migrateDocument,
|
|
17
|
+
parseEditorDocument,
|
|
18
|
+
persistEditorAssets,
|
|
19
|
+
preloadEditorAssets,
|
|
20
|
+
serializeEditorDocument,
|
|
21
|
+
toEditorDocumentFile,
|
|
22
|
+
withEditorAssets
|
|
23
|
+
} from "../chunk-NHLYK3AX.js";
|
|
17
24
|
import "../chunk-HF5QZS7Z.js";
|
|
18
25
|
|
|
19
26
|
// src/persistence/recoveryPolicy.ts
|
|
@@ -667,6 +674,8 @@ function createEditorAutosave(doc, options) {
|
|
|
667
674
|
const revisions = createRevisionTracker({ history: doc, dirty });
|
|
668
675
|
const controller = createAutosaveController({
|
|
669
676
|
...rest,
|
|
677
|
+
// Image and paint documents hold asset references: their bytes are saved and read with them.
|
|
678
|
+
storage: doc.assets ? withEditorAssets(rest.storage, doc.assets) : rest.storage,
|
|
670
679
|
key: key ?? doc.kind,
|
|
671
680
|
getSnapshot: () => toEditorDocumentFile(doc),
|
|
672
681
|
deserialize: (text) => parseEditorDocument(text, { kind: doc.kind }),
|
|
@@ -754,7 +763,9 @@ function createEditorDocumentStore(options) {
|
|
|
754
763
|
formatVersion: doc.formatVersion,
|
|
755
764
|
savedAt: new Date(now()).toISOString()
|
|
756
765
|
};
|
|
757
|
-
|
|
766
|
+
const text = JSON.stringify(toEditorDocumentFile(doc, trimmed));
|
|
767
|
+
if (doc.assets) await persistEditorAssets(storage, doc.assets, text);
|
|
768
|
+
await storage.set(fileKey(entry.key), text);
|
|
758
769
|
await saveIndex([...(await loadIndex()).filter((item) => item.key !== entry.key), entry]);
|
|
759
770
|
return entry;
|
|
760
771
|
}),
|
|
@@ -769,6 +780,10 @@ function createEditorDocumentStore(options) {
|
|
|
769
780
|
`There is no saved document "${key}". ${keys.length ? `Saved ${doc.kind} documents: ${keys.join(", ")}.` : `No ${doc.kind} documents are saved yet.`}`
|
|
770
781
|
);
|
|
771
782
|
}
|
|
783
|
+
if (doc.assets) {
|
|
784
|
+
const missing = await preloadEditorAssets(storage, doc.assets, file);
|
|
785
|
+
if (missing.length) throw new EditorDocumentLoadError(`The saved document "${key}" refers to ${missing.length} asset${missing.length === 1 ? "" : "s"} that storage no longer has, so it cannot be opened.`);
|
|
786
|
+
}
|
|
772
787
|
const report = doc.loadDocument(file, { history: openOptions.history ?? "reset" });
|
|
773
788
|
return { ...entry, report };
|
|
774
789
|
}),
|
|
@@ -934,12 +949,15 @@ function createDocumentToolProvider(doc, options = {}) {
|
|
|
934
949
|
};
|
|
935
950
|
}
|
|
936
951
|
export {
|
|
952
|
+
EDITOR_ASSET_PREFIX,
|
|
937
953
|
EDITOR_DOCUMENT_FORMAT,
|
|
938
954
|
EditorDocumentLoadError,
|
|
939
955
|
InjectedStorageError,
|
|
940
956
|
StorageUnavailableError,
|
|
957
|
+
collectAssetRefs,
|
|
941
958
|
createAutosaveController,
|
|
942
959
|
createDocumentToolProvider,
|
|
960
|
+
createEditorAssetRegistry,
|
|
943
961
|
createEditorAutosave,
|
|
944
962
|
createEditorDocumentStore,
|
|
945
963
|
createIndexedDbAdapter,
|
|
@@ -951,19 +969,25 @@ export {
|
|
|
951
969
|
createRevisionTracker,
|
|
952
970
|
defineEditorDocument,
|
|
953
971
|
exponentialBackoff,
|
|
972
|
+
externalizeAssets,
|
|
954
973
|
formatRecoveryMessage,
|
|
955
974
|
hasLoadProblems,
|
|
975
|
+
internalizeAssets,
|
|
956
976
|
isEditorDocumentFile,
|
|
957
977
|
isIndexedDbAvailable,
|
|
978
|
+
isInlineAsset,
|
|
958
979
|
isLocalStorageAvailable,
|
|
959
980
|
isOpfsAvailable,
|
|
960
981
|
loadDocument,
|
|
961
982
|
loadSections,
|
|
962
983
|
migrateDocument,
|
|
963
984
|
parseEditorDocument,
|
|
985
|
+
persistEditorAssets,
|
|
986
|
+
preloadEditorAssets,
|
|
964
987
|
recoveryMetaKey,
|
|
965
988
|
serializeEditorDocument,
|
|
966
989
|
slugifyDocumentName,
|
|
967
990
|
toEditorDocumentFile,
|
|
991
|
+
withEditorAssets,
|
|
968
992
|
withStorageFailures
|
|
969
993
|
};
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
var
|
|
129
|
+
var _chunkRQCMSEM5cjs = require('../chunk-RQCMSEM5.cjs');
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
|
|
@@ -198,8 +198,7 @@ var _chunk55AKPTLMcjs = require('../chunk-55AKPTLM.cjs');
|
|
|
198
198
|
|
|
199
199
|
|
|
200
200
|
var _chunkN3KJFGXTcjs = require('../chunk-N3KJFGXT.cjs');
|
|
201
|
-
require('../chunk-
|
|
202
|
-
require('../chunk-L5OWG2NA.cjs');
|
|
201
|
+
require('../chunk-M4MIZPQI.cjs');
|
|
203
202
|
require('../chunk-2BSBFBOA.cjs');
|
|
204
203
|
|
|
205
204
|
|
|
@@ -394,4 +393,4 @@ require('../chunk-2BSBFBOA.cjs');
|
|
|
394
393
|
|
|
395
394
|
|
|
396
395
|
|
|
397
|
-
exports.CONDITIONAL_FORMAT_ICON_SETS = _chunkXFDQEAOScjs.CONDITIONAL_FORMAT_ICON_SETS; exports.CONDITIONAL_FORMAT_PRESETS = _chunkXFDQEAOScjs.CONDITIONAL_FORMAT_PRESETS; exports.CONDITIONAL_FORMAT_STYLE_PRESETS = _chunkXFDQEAOScjs.CONDITIONAL_FORMAT_STYLE_PRESETS; exports.CONDITIONAL_FORMAT_TIME_PERIODS = _chunkXFDQEAOScjs.CONDITIONAL_FORMAT_TIME_PERIODS; exports.ConditionalFormatEngine = _chunkXFDQEAOScjs.ConditionalFormatEngine; exports.DATA_VALIDATION_ERROR_STYLE_OPTIONS = _chunkXFDQEAOScjs.DATA_VALIDATION_ERROR_STYLE_OPTIONS; exports.DATA_VALIDATION_OPERATOR_OPTIONS = _chunkXFDQEAOScjs.DATA_VALIDATION_OPERATOR_OPTIONS; exports.DATA_VALIDATION_TYPE_OPTIONS = _chunkXFDQEAOScjs.DATA_VALIDATION_TYPE_OPTIONS; exports.DEFAULT_COLUMN_WIDTH = _chunkXFDQEAOScjs.DEFAULT_COLUMN_WIDTH; exports.DEFAULT_CONDITIONAL_FORMAT_STYLE = _chunkXFDQEAOScjs.DEFAULT_CONDITIONAL_FORMAT_STYLE; exports.DEFAULT_DATA_VALIDATION_MESSAGE = _chunkXFDQEAOScjs.DEFAULT_DATA_VALIDATION_MESSAGE; exports.DEFAULT_DATA_VALIDATION_TITLE = _chunkXFDQEAOScjs.DEFAULT_DATA_VALIDATION_TITLE; exports.DEFAULT_ROW_HEIGHT = _chunkXFDQEAOScjs.DEFAULT_ROW_HEIGHT; exports.DataSourceBinder = _chunkXFDQEAOScjs.DataSourceBinder; exports.DependencyGraph = _chunkXFDQEAOScjs.DependencyGraph; exports.EMPTY_CONDITIONAL_FORMAT_OVERLAY = _chunkXFDQEAOScjs.EMPTY_CONDITIONAL_FORMAT_OVERLAY; exports.FORMULA_ERRORS = _chunk55AKPTLMcjs.FORMULA_ERRORS; exports.FormulaEvaluator = _chunkQZFEX2N4cjs.FormulaEvaluator; exports.FormulaLambda = _chunkQZFEX2N4cjs.FormulaLambda; exports.FormulaParser = _chunkQZFEX2N4cjs.FormulaParser; exports.IntervalIndex = _chunkXFDQEAOScjs.IntervalIndex; exports.MAX_DEFINED_NAME_LENGTH = _chunkXFDQEAOScjs.MAX_DEFINED_NAME_LENGTH; exports.MAX_FORMULA_ARRAY_SIZE = _chunkQZFEX2N4cjs.MAX_FORMULA_ARRAY_SIZE; exports.MAX_LAMBDA_DEPTH = _chunkQZFEX2N4cjs.MAX_LAMBDA_DEPTH; exports.MAX_NUMBER_FORMAT_CODE_CHARS = _chunk55AKPTLMcjs.MAX_NUMBER_FORMAT_CODE_CHARS; exports.MAX_SHEET_NAME_LENGTH = _chunkXFDQEAOScjs.MAX_SHEET_NAME_LENGTH; exports.NUMBER_FORMAT_PRESETS = _chunkXFDQEAOScjs.NUMBER_FORMAT_PRESETS; exports.NumberFormat = _chunk55AKPTLMcjs.NumberFormat; exports.SPREADSHEET_CLIPBOARD_MIME = _chunkXFDQEAOScjs.SPREADSHEET_CLIPBOARD_MIME; exports.SPREADSHEET_COLUMN_HEADER_HEIGHT = _chunkXFDQEAOScjs.SPREADSHEET_COLUMN_HEADER_HEIGHT; exports.SPREADSHEET_DEFAULT_VIEWPORT = _chunkXFDQEAOScjs.SPREADSHEET_DEFAULT_VIEWPORT; exports.SPREADSHEET_GROUP_ROW_HEIGHT = _chunkXFDQEAOScjs.SPREADSHEET_GROUP_ROW_HEIGHT; exports.SPREADSHEET_IMPORT_ADAPTERS = _chunkXFDQEAOScjs.SPREADSHEET_IMPORT_ADAPTERS; exports.SPREADSHEET_ROW_HEADER_WIDTH = _chunkXFDQEAOScjs.SPREADSHEET_ROW_HEADER_WIDTH; exports.SPREADSHEET_TABLE_ACTIONS = _chunkXFDQEAOScjs.SPREADSHEET_TABLE_ACTIONS; exports.SPREADSHEET_VIRTUAL_COLUMN_THRESHOLD = _chunkXFDQEAOScjs.SPREADSHEET_VIRTUAL_COLUMN_THRESHOLD; exports.SPREADSHEET_VIRTUAL_ROW_THRESHOLD = _chunkXFDQEAOScjs.SPREADSHEET_VIRTUAL_ROW_THRESHOLD; exports.SpreadsheetController = _chunkXFDQEAOScjs.SpreadsheetController; exports.WHOLE_COLUMN_END_ROW = _chunkQZFEX2N4cjs.WHOLE_COLUMN_END_ROW; exports.adjustRangeForStructuralChange = _chunkXFDQEAOScjs.adjustRangeForStructuralChange; exports.adjustRangesForStructuralChange = _chunkXFDQEAOScjs.adjustRangesForStructuralChange; exports.aggregateValues = _chunkQZFEX2N4cjs.aggregateValues; exports.applyFormulaSuggestion = _chunkXFDQEAOScjs.applyFormulaSuggestion; exports.bindSpreadsheetTableActions = _chunkXFDQEAOScjs.bindSpreadsheetTableActions; exports.blendConditionalFormatColors = _chunkXFDQEAOScjs.blendConditionalFormatColors; exports.buildSpreadsheetView = _chunkXFDQEAOScjs.buildSpreadsheetView; exports.builtinNumberFormat = _chunk55AKPTLMcjs.builtinNumberFormat; exports.builtinNumberFormatId = _chunk55AKPTLMcjs.builtinNumberFormatId; exports.cellFormatForNumberFormat = _chunkXFDQEAOScjs.cellFormatForNumberFormat; exports.checkFormulaArgumentCount = _chunkQZFEX2N4cjs.checkFormulaArgumentCount; exports.clampMenuPosition = _chunkXFDQEAOScjs.clampMenuPosition; exports.clearNumberFormatCache = _chunk55AKPTLMcjs.clearNumberFormatCache; exports.colNameToIndex = _chunk55AKPTLMcjs.colNameToIndex; exports.columnDependencyKey = _chunkXFDQEAOScjs.columnDependencyKey; exports.compareCellValues = _chunkQZFEX2N4cjs.compareCellValues; exports.compareNumbers = _chunk55AKPTLMcjs.compareNumbers; exports.compareValues = _chunk55AKPTLMcjs.compareValues; exports.computeFillTarget = _chunkQZFEX2N4cjs.computeFillTarget; exports.computeRowGroups = _chunkXFDQEAOScjs.computeRowGroups; exports.conditionalFormatContrastColor = _chunkXFDQEAOScjs.conditionalFormatContrastColor; exports.conditionalFormatIconCount = _chunkXFDQEAOScjs.conditionalFormatIconCount; exports.conditionalFormatNumber = _chunkXFDQEAOScjs.conditionalFormatNumber; exports.conditionalFormatStyleString = _chunkXFDQEAOScjs.conditionalFormatStyleString; exports.copySheetName = _chunkXFDQEAOScjs.copySheetName; exports.createConditionalFormatRule = _chunkXFDQEAOScjs.createConditionalFormatRule; exports.createSpreadsheetClipboardData = _chunkXFDQEAOScjs.createSpreadsheetClipboardData; exports.createSpreadsheetEditorDocument = _chunkXFDQEAOScjs.createSpreadsheetEditorDocument; exports.csvImportAdapter = _chunkXFDQEAOScjs.csvImportAdapter; exports.dateValueToSerial = _chunk55AKPTLMcjs.dateValueToSerial; exports.defaultIconThresholds = _chunkXFDQEAOScjs.defaultIconThresholds; exports.deleteSheetInFormula = _chunkXFDQEAOScjs.deleteSheetInFormula; exports.describeConditionalFormat = _chunkXFDQEAOScjs.describeConditionalFormat; exports.describeDataValidation = _chunkXFDQEAOScjs.describeDataValidation; exports.describeFormulaError = _chunkQZFEX2N4cjs.describeFormulaError; exports.escapeCsvField = _chunkN3KJFGXTcjs.escapeCsvField; exports.evaluateConditionalFormats = _chunkXFDQEAOScjs.evaluateConditionalFormats; exports.extractCellDependencies = _chunkXFDQEAOScjs.extractCellDependencies; exports.extractNameDependencies = _chunkXFDQEAOScjs.extractNameDependencies; exports.extractReferenceDependencies = _chunkXFDQEAOScjs.extractReferenceDependencies; exports.fillSeries = _chunkQZFEX2N4cjs.fillSeries; exports.findDataValidation = _chunkXFDQEAOScjs.findDataValidation; exports.findInvalidCells = _chunkXFDQEAOScjs.findInvalidCells; exports.forEachRangeCell = _chunkXFDQEAOScjs.forEachRangeCell; exports.formatCellDisplay = _chunkXFDQEAOScjs.formatCellDisplay; exports.formatCellForDisplay = _chunkXFDQEAOScjs.formatCellForDisplay; exports.formatGeneralFit = _chunk55AKPTLMcjs.formatGeneralFit; exports.formatNumberFormatValue = _chunk55AKPTLMcjs.formatNumberFormatValue; exports.formatRuleRanges = _chunkXFDQEAOScjs.formatRuleRanges; exports.formatSheetPrefix = _chunkXFDQEAOScjs.formatSheetPrefix; exports.formatTextFunction = _chunk55AKPTLMcjs.formatTextFunction; exports.formatValueWithCode = _chunkXFDQEAOScjs.formatValueWithCode; exports.formulaIdentifiers = _chunkXFDQEAOScjs.formulaIdentifiers; exports.fullSpreadsheetViewWindow = _chunkXFDQEAOScjs.fullSpreadsheetViewWindow; exports.getConditionalFormatCss = _chunkXFDQEAOScjs.getConditionalFormatCss; exports.getConditionalFormatIcon = _chunkXFDQEAOScjs.getConditionalFormatIcon; exports.getDataBarCss = _chunkXFDQEAOScjs.getDataBarCss; exports.getFillDirection = _chunkQZFEX2N4cjs.getFillDirection; exports.getFormulaArgumentSpecIndex = _chunkQZFEX2N4cjs.getFormulaArgumentSpecIndex; exports.getFormulaCaretContext = _chunkXFDQEAOScjs.getFormulaCaretContext; exports.getFormulaFunction = _chunkQZFEX2N4cjs.getFormulaFunction; exports.getFormulaHints = _chunkXFDQEAOScjs.getFormulaHints; exports.getFormulaSignature = _chunkQZFEX2N4cjs.getFormulaSignature; exports.getFormulaSignatureParts = _chunkQZFEX2N4cjs.getFormulaSignatureParts; exports.getNameManagerRows = _chunkXFDQEAOScjs.getNameManagerRows; exports.getRowSection = _chunkXFDQEAOScjs.getRowSection; exports.getSheetTabMenuItems = _chunkXFDQEAOScjs.getSheetTabMenuItems; exports.getSpreadsheetMenuItems = _chunkXFDQEAOScjs.getSpreadsheetMenuItems; exports.getSpreadsheetScrollToCell = _chunkXFDQEAOScjs.getSpreadsheetScrollToCell; exports.getSpreadsheetViewWindow = _chunkXFDQEAOScjs.getSpreadsheetViewWindow; exports.getTableSections = _chunkXFDQEAOScjs.getTableSections; exports.getValidationListValues = _chunkXFDQEAOScjs.getValidationListValues; exports.importFileIntoSpreadsheet = _chunkXFDQEAOScjs.importFileIntoSpreadsheet; exports.indexToColName = _chunk55AKPTLMcjs.indexToColName; exports.isBlankValue = _chunkQZFEX2N4cjs.isBlankValue; exports.isFormulaError = _chunk55AKPTLMcjs.isFormulaError; exports.isFormulaLambda = _chunkQZFEX2N4cjs.isFormulaLambda; exports.isGeneralNumberFormat = _chunkXFDQEAOScjs.isGeneralNumberFormat; exports.isLambdaDefinition = _chunkXFDQEAOScjs.isLambdaDefinition; exports.isSingleCellRange = _chunkQZFEX2N4cjs.isSingleCellRange; exports.listFormulaFunctions = _chunkQZFEX2N4cjs.listFormulaFunctions; exports.mapConditionalFormatFormulas = _chunkXFDQEAOScjs.mapConditionalFormatFormulas; exports.mapDataValidationFormulas = _chunkXFDQEAOScjs.mapDataValidationFormulas; exports.mapFormulaReferences = _chunkXFDQEAOScjs.mapFormulaReferences; exports.matchesFilterRule = _chunkQZFEX2N4cjs.matchesFilterRule; exports.matchesTimePeriod = _chunkXFDQEAOScjs.matchesTimePeriod; exports.measureSpreadsheetView = _chunkXFDQEAOScjs.measureSpreadsheetView; exports.mergeRuleRanges = _chunkXFDQEAOScjs.mergeRuleRanges; exports.nextSheetName = _chunkXFDQEAOScjs.nextSheetName; exports.normalizeRange = _chunkQZFEX2N4cjs.normalizeRange; exports.numberFormatColorToCss = _chunk55AKPTLMcjs.numberFormatColorToCss; exports.numberFormatForCellFormat = _chunkXFDQEAOScjs.numberFormatForCellFormat; exports.numberToText = _chunk55AKPTLMcjs.numberToText; exports.offsetFormulaReferences = _chunkXFDQEAOScjs.offsetFormulaReferences; exports.parseCellInput = _chunk55AKPTLMcjs.parseCellInput; exports.parseCellReference = _chunkQZFEX2N4cjs.parseCellReference; exports.parseCriteria = _chunkQZFEX2N4cjs.parseCriteria; exports.parseCsv = _chunkN3KJFGXTcjs.parseCsv; exports.parseFormula = _chunkQZFEX2N4cjs.parseFormula; exports.parseHtmlTable = _chunkXFDQEAOScjs.parseHtmlTable; exports.parseNumberText = _chunk55AKPTLMcjs.parseNumberText; exports.parseRange = _chunkQZFEX2N4cjs.parseRange; exports.parseRuleRanges = _chunkXFDQEAOScjs.parseRuleRanges; exports.parseSpreadsheetPlaybackRef = _chunkQZFEX2N4cjs.parseSpreadsheetPlaybackRef; exports.parseTsv = _chunkN3KJFGXTcjs.parseTsv; exports.planSpreadsheetToolPlayback = _chunkQZFEX2N4cjs.planSpreadsheetToolPlayback; exports.quoteSheetName = _chunkXFDQEAOScjs.quoteSheetName; exports.rangeContains = _chunkQZFEX2N4cjs.rangeContains; exports.rangeContainsRange = _chunkQZFEX2N4cjs.rangeContainsRange; exports.rangeDependencyKey = _chunkXFDQEAOScjs.rangeDependencyKey; exports.rangesContain = _chunkXFDQEAOScjs.rangesContain; exports.rangesIntersect = _chunkQZFEX2N4cjs.rangesIntersect; exports.readSpreadsheetClipboard = _chunkXFDQEAOScjs.readSpreadsheetClipboard; exports.reanchorRuleFormula = _chunkXFDQEAOScjs.reanchorRuleFormula; exports.rebaseClipboardRows = _chunkXFDQEAOScjs.rebaseClipboardRows; exports.registerFormulaFunction = _chunkQZFEX2N4cjs.registerFormulaFunction; exports.registerSpreadsheetImportAdapters = _chunkXFDQEAOScjs.registerSpreadsheetImportAdapters; exports.remapFormulaReferences = _chunkXFDQEAOScjs.remapFormulaReferences; exports.renameNameInFormula = _chunkXFDQEAOScjs.renameNameInFormula; exports.renameSheetInFormula = _chunkXFDQEAOScjs.renameSheetInFormula; exports.roundFloat = _chunkQZFEX2N4cjs.roundFloat; exports.rowPassesFilters = _chunkXFDQEAOScjs.rowPassesFilters; exports.ruleAnchor = _chunkXFDQEAOScjs.ruleAnchor; exports.ruleFormulaAt = _chunkXFDQEAOScjs.ruleFormulaAt; exports.runSpreadsheetMenuItem = _chunkXFDQEAOScjs.runSpreadsheetMenuItem; exports.sameSpreadsheetViewWindow = _chunkXFDQEAOScjs.sameSpreadsheetViewWindow; exports.searchFormulaFunctions = _chunkQZFEX2N4cjs.searchFormulaFunctions; exports.serialFromYmd = _chunk55AKPTLMcjs.serialFromYmd; exports.serializeCsv = _chunkN3KJFGXTcjs.serializeCsv; exports.serializeHtmlTable = _chunkXFDQEAOScjs.serializeHtmlTable; exports.serializeTsv = _chunkN3KJFGXTcjs.serializeTsv; exports.sheetDropIndex = _chunkXFDQEAOScjs.sheetDropIndex; exports.sheetNameNeedsQuotes = _chunkXFDQEAOScjs.sheetNameNeedsQuotes; exports.shiftFormulaReferences = _chunkXFDQEAOScjs.shiftFormulaReferences; exports.shiftRuleFormula = _chunkXFDQEAOScjs.shiftRuleFormula; exports.shouldVirtualizeSpreadsheet = _chunkXFDQEAOScjs.shouldVirtualizeSpreadsheet; exports.sortCompareValues = _chunk55AKPTLMcjs.sortCompareValues; exports.sortRuleRanges = _chunkXFDQEAOScjs.sortRuleRanges; exports.sortRules = _chunkXFDQEAOScjs.sortRules; exports.subtractRange = _chunkXFDQEAOScjs.subtractRange; exports.subtractRangeFromRanges = _chunkXFDQEAOScjs.subtractRangeFromRanges; exports.toNumber = _chunkQZFEX2N4cjs.toNumber; exports.tokenizeFormula = _chunkQZFEX2N4cjs.tokenizeFormula; exports.transposeFormulaReferences = _chunkXFDQEAOScjs.transposeFormulaReferences; exports.transposeRuleFormula = _chunkXFDQEAOScjs.transposeRuleFormula; exports.transposeRuleRanges = _chunkXFDQEAOScjs.transposeRuleRanges; exports.transposeRules = _chunkXFDQEAOScjs.transposeRules; exports.tsvImportAdapter = _chunkXFDQEAOScjs.tsvImportAdapter; exports.unregisterFormulaFunction = _chunkQZFEX2N4cjs.unregisterFormulaFunction; exports.validateCellInput = _chunkXFDQEAOScjs.validateCellInput; exports.validateDefinedName = _chunkXFDQEAOScjs.validateDefinedName; exports.validateSheetName = _chunkXFDQEAOScjs.validateSheetName; exports.wildcardToRegExp = _chunkQZFEX2N4cjs.wildcardToRegExp;
|
|
396
|
+
exports.CONDITIONAL_FORMAT_ICON_SETS = _chunkRQCMSEM5cjs.CONDITIONAL_FORMAT_ICON_SETS; exports.CONDITIONAL_FORMAT_PRESETS = _chunkRQCMSEM5cjs.CONDITIONAL_FORMAT_PRESETS; exports.CONDITIONAL_FORMAT_STYLE_PRESETS = _chunkRQCMSEM5cjs.CONDITIONAL_FORMAT_STYLE_PRESETS; exports.CONDITIONAL_FORMAT_TIME_PERIODS = _chunkRQCMSEM5cjs.CONDITIONAL_FORMAT_TIME_PERIODS; exports.ConditionalFormatEngine = _chunkRQCMSEM5cjs.ConditionalFormatEngine; exports.DATA_VALIDATION_ERROR_STYLE_OPTIONS = _chunkRQCMSEM5cjs.DATA_VALIDATION_ERROR_STYLE_OPTIONS; exports.DATA_VALIDATION_OPERATOR_OPTIONS = _chunkRQCMSEM5cjs.DATA_VALIDATION_OPERATOR_OPTIONS; exports.DATA_VALIDATION_TYPE_OPTIONS = _chunkRQCMSEM5cjs.DATA_VALIDATION_TYPE_OPTIONS; exports.DEFAULT_COLUMN_WIDTH = _chunkRQCMSEM5cjs.DEFAULT_COLUMN_WIDTH; exports.DEFAULT_CONDITIONAL_FORMAT_STYLE = _chunkRQCMSEM5cjs.DEFAULT_CONDITIONAL_FORMAT_STYLE; exports.DEFAULT_DATA_VALIDATION_MESSAGE = _chunkRQCMSEM5cjs.DEFAULT_DATA_VALIDATION_MESSAGE; exports.DEFAULT_DATA_VALIDATION_TITLE = _chunkRQCMSEM5cjs.DEFAULT_DATA_VALIDATION_TITLE; exports.DEFAULT_ROW_HEIGHT = _chunkRQCMSEM5cjs.DEFAULT_ROW_HEIGHT; exports.DataSourceBinder = _chunkRQCMSEM5cjs.DataSourceBinder; exports.DependencyGraph = _chunkRQCMSEM5cjs.DependencyGraph; exports.EMPTY_CONDITIONAL_FORMAT_OVERLAY = _chunkRQCMSEM5cjs.EMPTY_CONDITIONAL_FORMAT_OVERLAY; exports.FORMULA_ERRORS = _chunk55AKPTLMcjs.FORMULA_ERRORS; exports.FormulaEvaluator = _chunkQZFEX2N4cjs.FormulaEvaluator; exports.FormulaLambda = _chunkQZFEX2N4cjs.FormulaLambda; exports.FormulaParser = _chunkQZFEX2N4cjs.FormulaParser; exports.IntervalIndex = _chunkRQCMSEM5cjs.IntervalIndex; exports.MAX_DEFINED_NAME_LENGTH = _chunkRQCMSEM5cjs.MAX_DEFINED_NAME_LENGTH; exports.MAX_FORMULA_ARRAY_SIZE = _chunkQZFEX2N4cjs.MAX_FORMULA_ARRAY_SIZE; exports.MAX_LAMBDA_DEPTH = _chunkQZFEX2N4cjs.MAX_LAMBDA_DEPTH; exports.MAX_NUMBER_FORMAT_CODE_CHARS = _chunk55AKPTLMcjs.MAX_NUMBER_FORMAT_CODE_CHARS; exports.MAX_SHEET_NAME_LENGTH = _chunkRQCMSEM5cjs.MAX_SHEET_NAME_LENGTH; exports.NUMBER_FORMAT_PRESETS = _chunkRQCMSEM5cjs.NUMBER_FORMAT_PRESETS; exports.NumberFormat = _chunk55AKPTLMcjs.NumberFormat; exports.SPREADSHEET_CLIPBOARD_MIME = _chunkRQCMSEM5cjs.SPREADSHEET_CLIPBOARD_MIME; exports.SPREADSHEET_COLUMN_HEADER_HEIGHT = _chunkRQCMSEM5cjs.SPREADSHEET_COLUMN_HEADER_HEIGHT; exports.SPREADSHEET_DEFAULT_VIEWPORT = _chunkRQCMSEM5cjs.SPREADSHEET_DEFAULT_VIEWPORT; exports.SPREADSHEET_GROUP_ROW_HEIGHT = _chunkRQCMSEM5cjs.SPREADSHEET_GROUP_ROW_HEIGHT; exports.SPREADSHEET_IMPORT_ADAPTERS = _chunkRQCMSEM5cjs.SPREADSHEET_IMPORT_ADAPTERS; exports.SPREADSHEET_ROW_HEADER_WIDTH = _chunkRQCMSEM5cjs.SPREADSHEET_ROW_HEADER_WIDTH; exports.SPREADSHEET_TABLE_ACTIONS = _chunkRQCMSEM5cjs.SPREADSHEET_TABLE_ACTIONS; exports.SPREADSHEET_VIRTUAL_COLUMN_THRESHOLD = _chunkRQCMSEM5cjs.SPREADSHEET_VIRTUAL_COLUMN_THRESHOLD; exports.SPREADSHEET_VIRTUAL_ROW_THRESHOLD = _chunkRQCMSEM5cjs.SPREADSHEET_VIRTUAL_ROW_THRESHOLD; exports.SpreadsheetController = _chunkRQCMSEM5cjs.SpreadsheetController; exports.WHOLE_COLUMN_END_ROW = _chunkQZFEX2N4cjs.WHOLE_COLUMN_END_ROW; exports.adjustRangeForStructuralChange = _chunkRQCMSEM5cjs.adjustRangeForStructuralChange; exports.adjustRangesForStructuralChange = _chunkRQCMSEM5cjs.adjustRangesForStructuralChange; exports.aggregateValues = _chunkQZFEX2N4cjs.aggregateValues; exports.applyFormulaSuggestion = _chunkRQCMSEM5cjs.applyFormulaSuggestion; exports.bindSpreadsheetTableActions = _chunkRQCMSEM5cjs.bindSpreadsheetTableActions; exports.blendConditionalFormatColors = _chunkRQCMSEM5cjs.blendConditionalFormatColors; exports.buildSpreadsheetView = _chunkRQCMSEM5cjs.buildSpreadsheetView; exports.builtinNumberFormat = _chunk55AKPTLMcjs.builtinNumberFormat; exports.builtinNumberFormatId = _chunk55AKPTLMcjs.builtinNumberFormatId; exports.cellFormatForNumberFormat = _chunkRQCMSEM5cjs.cellFormatForNumberFormat; exports.checkFormulaArgumentCount = _chunkQZFEX2N4cjs.checkFormulaArgumentCount; exports.clampMenuPosition = _chunkRQCMSEM5cjs.clampMenuPosition; exports.clearNumberFormatCache = _chunk55AKPTLMcjs.clearNumberFormatCache; exports.colNameToIndex = _chunk55AKPTLMcjs.colNameToIndex; exports.columnDependencyKey = _chunkRQCMSEM5cjs.columnDependencyKey; exports.compareCellValues = _chunkQZFEX2N4cjs.compareCellValues; exports.compareNumbers = _chunk55AKPTLMcjs.compareNumbers; exports.compareValues = _chunk55AKPTLMcjs.compareValues; exports.computeFillTarget = _chunkQZFEX2N4cjs.computeFillTarget; exports.computeRowGroups = _chunkRQCMSEM5cjs.computeRowGroups; exports.conditionalFormatContrastColor = _chunkRQCMSEM5cjs.conditionalFormatContrastColor; exports.conditionalFormatIconCount = _chunkRQCMSEM5cjs.conditionalFormatIconCount; exports.conditionalFormatNumber = _chunkRQCMSEM5cjs.conditionalFormatNumber; exports.conditionalFormatStyleString = _chunkRQCMSEM5cjs.conditionalFormatStyleString; exports.copySheetName = _chunkRQCMSEM5cjs.copySheetName; exports.createConditionalFormatRule = _chunkRQCMSEM5cjs.createConditionalFormatRule; exports.createSpreadsheetClipboardData = _chunkRQCMSEM5cjs.createSpreadsheetClipboardData; exports.createSpreadsheetEditorDocument = _chunkRQCMSEM5cjs.createSpreadsheetEditorDocument; exports.csvImportAdapter = _chunkRQCMSEM5cjs.csvImportAdapter; exports.dateValueToSerial = _chunk55AKPTLMcjs.dateValueToSerial; exports.defaultIconThresholds = _chunkRQCMSEM5cjs.defaultIconThresholds; exports.deleteSheetInFormula = _chunkRQCMSEM5cjs.deleteSheetInFormula; exports.describeConditionalFormat = _chunkRQCMSEM5cjs.describeConditionalFormat; exports.describeDataValidation = _chunkRQCMSEM5cjs.describeDataValidation; exports.describeFormulaError = _chunkQZFEX2N4cjs.describeFormulaError; exports.escapeCsvField = _chunkN3KJFGXTcjs.escapeCsvField; exports.evaluateConditionalFormats = _chunkRQCMSEM5cjs.evaluateConditionalFormats; exports.extractCellDependencies = _chunkRQCMSEM5cjs.extractCellDependencies; exports.extractNameDependencies = _chunkRQCMSEM5cjs.extractNameDependencies; exports.extractReferenceDependencies = _chunkRQCMSEM5cjs.extractReferenceDependencies; exports.fillSeries = _chunkQZFEX2N4cjs.fillSeries; exports.findDataValidation = _chunkRQCMSEM5cjs.findDataValidation; exports.findInvalidCells = _chunkRQCMSEM5cjs.findInvalidCells; exports.forEachRangeCell = _chunkRQCMSEM5cjs.forEachRangeCell; exports.formatCellDisplay = _chunkRQCMSEM5cjs.formatCellDisplay; exports.formatCellForDisplay = _chunkRQCMSEM5cjs.formatCellForDisplay; exports.formatGeneralFit = _chunk55AKPTLMcjs.formatGeneralFit; exports.formatNumberFormatValue = _chunk55AKPTLMcjs.formatNumberFormatValue; exports.formatRuleRanges = _chunkRQCMSEM5cjs.formatRuleRanges; exports.formatSheetPrefix = _chunkRQCMSEM5cjs.formatSheetPrefix; exports.formatTextFunction = _chunk55AKPTLMcjs.formatTextFunction; exports.formatValueWithCode = _chunkRQCMSEM5cjs.formatValueWithCode; exports.formulaIdentifiers = _chunkRQCMSEM5cjs.formulaIdentifiers; exports.fullSpreadsheetViewWindow = _chunkRQCMSEM5cjs.fullSpreadsheetViewWindow; exports.getConditionalFormatCss = _chunkRQCMSEM5cjs.getConditionalFormatCss; exports.getConditionalFormatIcon = _chunkRQCMSEM5cjs.getConditionalFormatIcon; exports.getDataBarCss = _chunkRQCMSEM5cjs.getDataBarCss; exports.getFillDirection = _chunkQZFEX2N4cjs.getFillDirection; exports.getFormulaArgumentSpecIndex = _chunkQZFEX2N4cjs.getFormulaArgumentSpecIndex; exports.getFormulaCaretContext = _chunkRQCMSEM5cjs.getFormulaCaretContext; exports.getFormulaFunction = _chunkQZFEX2N4cjs.getFormulaFunction; exports.getFormulaHints = _chunkRQCMSEM5cjs.getFormulaHints; exports.getFormulaSignature = _chunkQZFEX2N4cjs.getFormulaSignature; exports.getFormulaSignatureParts = _chunkQZFEX2N4cjs.getFormulaSignatureParts; exports.getNameManagerRows = _chunkRQCMSEM5cjs.getNameManagerRows; exports.getRowSection = _chunkRQCMSEM5cjs.getRowSection; exports.getSheetTabMenuItems = _chunkRQCMSEM5cjs.getSheetTabMenuItems; exports.getSpreadsheetMenuItems = _chunkRQCMSEM5cjs.getSpreadsheetMenuItems; exports.getSpreadsheetScrollToCell = _chunkRQCMSEM5cjs.getSpreadsheetScrollToCell; exports.getSpreadsheetViewWindow = _chunkRQCMSEM5cjs.getSpreadsheetViewWindow; exports.getTableSections = _chunkRQCMSEM5cjs.getTableSections; exports.getValidationListValues = _chunkRQCMSEM5cjs.getValidationListValues; exports.importFileIntoSpreadsheet = _chunkRQCMSEM5cjs.importFileIntoSpreadsheet; exports.indexToColName = _chunk55AKPTLMcjs.indexToColName; exports.isBlankValue = _chunkQZFEX2N4cjs.isBlankValue; exports.isFormulaError = _chunk55AKPTLMcjs.isFormulaError; exports.isFormulaLambda = _chunkQZFEX2N4cjs.isFormulaLambda; exports.isGeneralNumberFormat = _chunkRQCMSEM5cjs.isGeneralNumberFormat; exports.isLambdaDefinition = _chunkRQCMSEM5cjs.isLambdaDefinition; exports.isSingleCellRange = _chunkQZFEX2N4cjs.isSingleCellRange; exports.listFormulaFunctions = _chunkQZFEX2N4cjs.listFormulaFunctions; exports.mapConditionalFormatFormulas = _chunkRQCMSEM5cjs.mapConditionalFormatFormulas; exports.mapDataValidationFormulas = _chunkRQCMSEM5cjs.mapDataValidationFormulas; exports.mapFormulaReferences = _chunkRQCMSEM5cjs.mapFormulaReferences; exports.matchesFilterRule = _chunkQZFEX2N4cjs.matchesFilterRule; exports.matchesTimePeriod = _chunkRQCMSEM5cjs.matchesTimePeriod; exports.measureSpreadsheetView = _chunkRQCMSEM5cjs.measureSpreadsheetView; exports.mergeRuleRanges = _chunkRQCMSEM5cjs.mergeRuleRanges; exports.nextSheetName = _chunkRQCMSEM5cjs.nextSheetName; exports.normalizeRange = _chunkQZFEX2N4cjs.normalizeRange; exports.numberFormatColorToCss = _chunk55AKPTLMcjs.numberFormatColorToCss; exports.numberFormatForCellFormat = _chunkRQCMSEM5cjs.numberFormatForCellFormat; exports.numberToText = _chunk55AKPTLMcjs.numberToText; exports.offsetFormulaReferences = _chunkRQCMSEM5cjs.offsetFormulaReferences; exports.parseCellInput = _chunk55AKPTLMcjs.parseCellInput; exports.parseCellReference = _chunkQZFEX2N4cjs.parseCellReference; exports.parseCriteria = _chunkQZFEX2N4cjs.parseCriteria; exports.parseCsv = _chunkN3KJFGXTcjs.parseCsv; exports.parseFormula = _chunkQZFEX2N4cjs.parseFormula; exports.parseHtmlTable = _chunkRQCMSEM5cjs.parseHtmlTable; exports.parseNumberText = _chunk55AKPTLMcjs.parseNumberText; exports.parseRange = _chunkQZFEX2N4cjs.parseRange; exports.parseRuleRanges = _chunkRQCMSEM5cjs.parseRuleRanges; exports.parseSpreadsheetPlaybackRef = _chunkQZFEX2N4cjs.parseSpreadsheetPlaybackRef; exports.parseTsv = _chunkN3KJFGXTcjs.parseTsv; exports.planSpreadsheetToolPlayback = _chunkQZFEX2N4cjs.planSpreadsheetToolPlayback; exports.quoteSheetName = _chunkRQCMSEM5cjs.quoteSheetName; exports.rangeContains = _chunkQZFEX2N4cjs.rangeContains; exports.rangeContainsRange = _chunkQZFEX2N4cjs.rangeContainsRange; exports.rangeDependencyKey = _chunkRQCMSEM5cjs.rangeDependencyKey; exports.rangesContain = _chunkRQCMSEM5cjs.rangesContain; exports.rangesIntersect = _chunkQZFEX2N4cjs.rangesIntersect; exports.readSpreadsheetClipboard = _chunkRQCMSEM5cjs.readSpreadsheetClipboard; exports.reanchorRuleFormula = _chunkRQCMSEM5cjs.reanchorRuleFormula; exports.rebaseClipboardRows = _chunkRQCMSEM5cjs.rebaseClipboardRows; exports.registerFormulaFunction = _chunkQZFEX2N4cjs.registerFormulaFunction; exports.registerSpreadsheetImportAdapters = _chunkRQCMSEM5cjs.registerSpreadsheetImportAdapters; exports.remapFormulaReferences = _chunkRQCMSEM5cjs.remapFormulaReferences; exports.renameNameInFormula = _chunkRQCMSEM5cjs.renameNameInFormula; exports.renameSheetInFormula = _chunkRQCMSEM5cjs.renameSheetInFormula; exports.roundFloat = _chunkQZFEX2N4cjs.roundFloat; exports.rowPassesFilters = _chunkRQCMSEM5cjs.rowPassesFilters; exports.ruleAnchor = _chunkRQCMSEM5cjs.ruleAnchor; exports.ruleFormulaAt = _chunkRQCMSEM5cjs.ruleFormulaAt; exports.runSpreadsheetMenuItem = _chunkRQCMSEM5cjs.runSpreadsheetMenuItem; exports.sameSpreadsheetViewWindow = _chunkRQCMSEM5cjs.sameSpreadsheetViewWindow; exports.searchFormulaFunctions = _chunkQZFEX2N4cjs.searchFormulaFunctions; exports.serialFromYmd = _chunk55AKPTLMcjs.serialFromYmd; exports.serializeCsv = _chunkN3KJFGXTcjs.serializeCsv; exports.serializeHtmlTable = _chunkRQCMSEM5cjs.serializeHtmlTable; exports.serializeTsv = _chunkN3KJFGXTcjs.serializeTsv; exports.sheetDropIndex = _chunkRQCMSEM5cjs.sheetDropIndex; exports.sheetNameNeedsQuotes = _chunkRQCMSEM5cjs.sheetNameNeedsQuotes; exports.shiftFormulaReferences = _chunkRQCMSEM5cjs.shiftFormulaReferences; exports.shiftRuleFormula = _chunkRQCMSEM5cjs.shiftRuleFormula; exports.shouldVirtualizeSpreadsheet = _chunkRQCMSEM5cjs.shouldVirtualizeSpreadsheet; exports.sortCompareValues = _chunk55AKPTLMcjs.sortCompareValues; exports.sortRuleRanges = _chunkRQCMSEM5cjs.sortRuleRanges; exports.sortRules = _chunkRQCMSEM5cjs.sortRules; exports.subtractRange = _chunkRQCMSEM5cjs.subtractRange; exports.subtractRangeFromRanges = _chunkRQCMSEM5cjs.subtractRangeFromRanges; exports.toNumber = _chunkQZFEX2N4cjs.toNumber; exports.tokenizeFormula = _chunkQZFEX2N4cjs.tokenizeFormula; exports.transposeFormulaReferences = _chunkRQCMSEM5cjs.transposeFormulaReferences; exports.transposeRuleFormula = _chunkRQCMSEM5cjs.transposeRuleFormula; exports.transposeRuleRanges = _chunkRQCMSEM5cjs.transposeRuleRanges; exports.transposeRules = _chunkRQCMSEM5cjs.transposeRules; exports.tsvImportAdapter = _chunkRQCMSEM5cjs.tsvImportAdapter; exports.unregisterFormulaFunction = _chunkQZFEX2N4cjs.unregisterFormulaFunction; exports.validateCellInput = _chunkRQCMSEM5cjs.validateCellInput; exports.validateDefinedName = _chunkRQCMSEM5cjs.validateDefinedName; exports.validateSheetName = _chunkRQCMSEM5cjs.validateSheetName; exports.wildcardToRegExp = _chunkQZFEX2N4cjs.wildcardToRegExp;
|
|
@@ -126,7 +126,7 @@ import {
|
|
|
126
126
|
validateCellInput,
|
|
127
127
|
validateDefinedName,
|
|
128
128
|
validateSheetName
|
|
129
|
-
} from "../chunk-
|
|
129
|
+
} from "../chunk-YXOW456B.js";
|
|
130
130
|
import {
|
|
131
131
|
FormulaEvaluator,
|
|
132
132
|
FormulaLambda,
|
|
@@ -198,8 +198,7 @@ import {
|
|
|
198
198
|
serializeCsv,
|
|
199
199
|
serializeTsv
|
|
200
200
|
} from "../chunk-WJSD3MAZ.js";
|
|
201
|
-
import "../chunk-
|
|
202
|
-
import "../chunk-WHKNYFM2.js";
|
|
201
|
+
import "../chunk-NHLYK3AX.js";
|
|
203
202
|
import "../chunk-HF5QZS7Z.js";
|
|
204
203
|
export {
|
|
205
204
|
CONDITIONAL_FORMAT_ICON_SETS,
|
package/dist/tokens/index.cjs
CHANGED
|
@@ -52,9 +52,8 @@
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
var
|
|
56
|
-
require('../chunk-
|
|
57
|
-
require('../chunk-L5OWG2NA.cjs');
|
|
55
|
+
var _chunkWI7QJA7Acjs = require('../chunk-WI7QJA7A.cjs');
|
|
56
|
+
require('../chunk-M4MIZPQI.cjs');
|
|
58
57
|
require('../chunk-2BSBFBOA.cjs');
|
|
59
58
|
|
|
60
59
|
|
|
@@ -118,4 +117,4 @@ var _chunkA6QWKBJPcjs = require('../chunk-A6QWKBJP.cjs');
|
|
|
118
117
|
|
|
119
118
|
|
|
120
119
|
|
|
121
|
-
exports.EMPTY_TOKEN_STATE =
|
|
120
|
+
exports.EMPTY_TOKEN_STATE = _chunkWI7QJA7Acjs.EMPTY_TOKEN_STATE; exports.TOKEN_SCOPES_BY_TYPE = _chunkWI7QJA7Acjs.TOKEN_SCOPES_BY_TYPE; exports.TOKEN_TYPES = _chunkWI7QJA7Acjs.TOKEN_TYPES; exports.TokenError = _chunkWI7QJA7Acjs.TokenError; exports.TokenStore = _chunkWI7QJA7Acjs.TokenStore; exports.W3C_TOKENS_EXTENSION = _chunkWI7QJA7Acjs.W3C_TOKENS_EXTENSION; exports.addTokenMode = _chunkWI7QJA7Acjs.addTokenMode; exports.checkTokenAlias = _chunkWI7QJA7Acjs.checkTokenAlias; exports.coerceTokenLiteral = _chunkWI7QJA7Acjs.coerceTokenLiteral; exports.createTokenCollection = _chunkWI7QJA7Acjs.createTokenCollection; exports.createTokenStore = _chunkWI7QJA7Acjs.createTokenStore; exports.createTokenVariable = _chunkWI7QJA7Acjs.createTokenVariable; exports.createTokensEditorDocument = _chunkWI7QJA7Acjs.createTokensEditorDocument; exports.cssString = _chunkWI7QJA7Acjs.cssString; exports.defaultTokenId = _chunkWI7QJA7Acjs.defaultTokenId; exports.defaultTokenValue = _chunkWI7QJA7Acjs.defaultTokenValue; exports.deleteTokenCollection = _chunkWI7QJA7Acjs.deleteTokenCollection; exports.deleteTokenVariables = _chunkWI7QJA7Acjs.deleteTokenVariables; exports.exportTokensCss = _chunkWI7QJA7Acjs.exportTokensCss; exports.exportW3CTokens = _chunkWI7QJA7Acjs.exportW3CTokens; exports.exportW3CTokensJson = _chunkWI7QJA7Acjs.exportW3CTokensJson; exports.findTokenCollection = _chunkWI7QJA7Acjs.findTokenCollection; exports.findTokenMode = _chunkWI7QJA7Acjs.findTokenMode; exports.findTokenVariable = _chunkWI7QJA7Acjs.findTokenVariable; exports.formatTokenCssValue = _chunkWI7QJA7Acjs.formatTokenCssValue; exports.formatTokenValue = _chunkWI7QJA7Acjs.formatTokenValue; exports.getCollectionVariables = _chunkWI7QJA7Acjs.getCollectionVariables; exports.getCurrentMode = _chunkWI7QJA7Acjs.getCurrentMode; exports.getDefaultMode = _chunkWI7QJA7Acjs.getDefaultMode; exports.getTokenCollection = _chunkWI7QJA7Acjs.getTokenCollection; exports.getTokenCssName = _chunkWI7QJA7Acjs.getTokenCssName; exports.getTokenCssVariables = _chunkWI7QJA7Acjs.getTokenCssVariables; exports.getTokenVariable = _chunkWI7QJA7Acjs.getTokenVariable; exports.hexToRgba = _chunkA6QWKBJPcjs.hexToRgba; exports.importW3CTokens = _chunkWI7QJA7Acjs.importW3CTokens; exports.isTokenAlias = _chunkWI7QJA7Acjs.isTokenAlias; exports.isTokenInScope = _chunkWI7QJA7Acjs.isTokenInScope; exports.isTokenScopeKnown = _chunkWI7QJA7Acjs.isTokenScopeKnown; exports.literalTokenType = _chunkWI7QJA7Acjs.literalTokenType; exports.moveTokenMode = _chunkWI7QJA7Acjs.moveTokenMode; exports.normalizeTokenColor = _chunkA6QWKBJPcjs.normalizeTokenColor; exports.normalizeTokenName = _chunkWI7QJA7Acjs.normalizeTokenName; exports.normalizeTokenScopes = _chunkWI7QJA7Acjs.normalizeTokenScopes; exports.parseTokenState = _chunkWI7QJA7Acjs.parseTokenState; exports.prepareTokenValue = _chunkWI7QJA7Acjs.prepareTokenValue; exports.removeTokenMode = _chunkWI7QJA7Acjs.removeTokenMode; exports.renameTokenCollection = _chunkWI7QJA7Acjs.renameTokenCollection; exports.renameTokenMode = _chunkWI7QJA7Acjs.renameTokenMode; exports.renameTokenVariable = _chunkWI7QJA7Acjs.renameTokenVariable; exports.resolveToken = _chunkWI7QJA7Acjs.resolveToken; exports.resolveTokenInMode = _chunkWI7QJA7Acjs.resolveTokenInMode; exports.resolveTokenValue = _chunkWI7QJA7Acjs.resolveTokenValue; exports.rgbaToHex = _chunkA6QWKBJPcjs.rgbaToHex; exports.setTokenValue = _chunkWI7QJA7Acjs.setTokenValue; exports.tokenSlug = _chunkWI7QJA7Acjs.tokenSlug; exports.updateTokenVariable = _chunkWI7QJA7Acjs.updateTokenVariable;
|
package/dist/tokens/index.js
CHANGED
|
@@ -52,9 +52,8 @@ import {
|
|
|
52
52
|
setTokenValue,
|
|
53
53
|
tokenSlug,
|
|
54
54
|
updateTokenVariable
|
|
55
|
-
} from "../chunk-
|
|
56
|
-
import "../chunk-
|
|
57
|
-
import "../chunk-WHKNYFM2.js";
|
|
55
|
+
} from "../chunk-SDHZG5TF.js";
|
|
56
|
+
import "../chunk-NHLYK3AX.js";
|
|
58
57
|
import "../chunk-HF5QZS7Z.js";
|
|
59
58
|
import {
|
|
60
59
|
hexToRgba,
|
package/dist/vector/index.cjs
CHANGED
|
@@ -560,8 +560,7 @@ require('../chunk-NIBFDFYW.cjs');
|
|
|
560
560
|
require('../chunk-UWEQ55MY.cjs');
|
|
561
561
|
|
|
562
562
|
|
|
563
|
-
var
|
|
564
|
-
require('../chunk-L5OWG2NA.cjs');
|
|
563
|
+
var _chunkM4MIZPQIcjs = require('../chunk-M4MIZPQI.cjs');
|
|
565
564
|
require('../chunk-2BSBFBOA.cjs');
|
|
566
565
|
|
|
567
566
|
|
|
@@ -18732,7 +18731,7 @@ function checkVectorDocument(document) {
|
|
|
18732
18731
|
});
|
|
18733
18732
|
}
|
|
18734
18733
|
function createVectorEditorDocument(controller) {
|
|
18735
|
-
return
|
|
18734
|
+
return _chunkM4MIZPQIcjs.defineEditorDocument.call(void 0, {
|
|
18736
18735
|
kind: "vector",
|
|
18737
18736
|
get: () => controller.toJSON(),
|
|
18738
18737
|
load: (document, { history }) => {
|
package/dist/vector/index.js
CHANGED
|
@@ -560,8 +560,7 @@ import "../chunk-SIFAIGB3.js";
|
|
|
560
560
|
import "../chunk-VDGBHYC7.js";
|
|
561
561
|
import {
|
|
562
562
|
defineEditorDocument
|
|
563
|
-
} from "../chunk-
|
|
564
|
-
import "../chunk-WHKNYFM2.js";
|
|
563
|
+
} from "../chunk-NHLYK3AX.js";
|
|
565
564
|
import "../chunk-HF5QZS7Z.js";
|
|
566
565
|
import {
|
|
567
566
|
HistoryManager
|
|
@@ -147,8 +147,7 @@ var _chunkRUZQMYXHcjs = require('../chunk-RUZQMYXH.cjs');
|
|
|
147
147
|
require('../chunk-WOFXZ3XU.cjs');
|
|
148
148
|
|
|
149
149
|
|
|
150
|
-
var
|
|
151
|
-
require('../chunk-L5OWG2NA.cjs');
|
|
150
|
+
var _chunkM4MIZPQIcjs = require('../chunk-M4MIZPQI.cjs');
|
|
152
151
|
require('../chunk-2BSBFBOA.cjs');
|
|
153
152
|
|
|
154
153
|
|
|
@@ -4871,7 +4870,7 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4871
4870
|
|
|
4872
4871
|
// src/video-editor/editorDocument.ts
|
|
4873
4872
|
function createVideoEditorDocument(controller) {
|
|
4874
|
-
return
|
|
4873
|
+
return _chunkM4MIZPQIcjs.defineEditorDocument.call(void 0, {
|
|
4875
4874
|
kind: "video",
|
|
4876
4875
|
get: () => controller.getProject(),
|
|
4877
4876
|
load: (document2, { history }) => {
|
|
@@ -147,8 +147,7 @@ import {
|
|
|
147
147
|
import "../chunk-V2ZCJRDM.js";
|
|
148
148
|
import {
|
|
149
149
|
defineEditorDocument
|
|
150
|
-
} from "../chunk-
|
|
151
|
-
import "../chunk-WHKNYFM2.js";
|
|
150
|
+
} from "../chunk-NHLYK3AX.js";
|
|
152
151
|
import "../chunk-HF5QZS7Z.js";
|
|
153
152
|
import {
|
|
154
153
|
HistoryManager
|
package/package.json
CHANGED
|
@@ -96,30 +96,10 @@ batching.
|
|
|
96
96
|
|
|
97
97
|
### Smart objects
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
nothing.
|
|
104
|
-
2. **Read it**: `get_smart_object` gives the contents (size, kind, instances), the placement
|
|
105
|
-
(corners, warp, and scale / rotate in percent and degrees of the contents' own size) and the
|
|
106
|
-
smart filters with their ids.
|
|
107
|
-
3. **Transform**: `set_smart_object_transform` sets the transform absolutely (scale 100 = the
|
|
108
|
-
contents' own size, `x`, `y` = where its centre goes; or `corners`, `matrix`, and a `warp` in
|
|
109
|
-
contents pixels, `null` to remove). `transform_layer`, `warp_layer`, `flip_layer` and
|
|
110
|
-
`rotate_layer_90` also work on a smart object, relative to its current placement, and never
|
|
111
|
-
degrade it. `offset_layer` moves it by whole pixels.
|
|
112
|
-
4. **Filter non-destructively**: `add_smart_filter` (`develop` or `blur`, each with its own
|
|
113
|
-
`blend` and `opacity`; kinds can repeat), then `update_smart_filter`, `move_smart_filter`,
|
|
114
|
-
`remove_smart_filter` and `set_smart_filters_enabled`. `set_smart_filter_mask` limits where the
|
|
115
|
-
filters show; paint it with `paint_stroke` / `fill_pixels` `channel: "filter-mask"`.
|
|
116
|
-
5. **Contents**: `copy_smart_object` with `linked: true` shares the contents (edit once, both
|
|
117
|
-
change), `linked: false` makes them independent. `edit_smart_object_contents` opens the
|
|
118
|
-
contents as their own document: every tool then works inside them until
|
|
119
|
-
`close_smart_object_contents` (`save: false` discards). `replace_smart_object_contents` swaps
|
|
120
|
-
in a new image for every linked instance; `export_smart_object_contents` returns the file.
|
|
121
|
-
6. **Finish**: `rasterize_smart_object` only when the user wants plain pixels to paint on; the
|
|
122
|
-
placement and filters are then gone.
|
|
99
|
+
Convert a pixel layer with `convert_to_smart_object` before repeated or uncertain transforms and
|
|
100
|
+
filters: from then on everything re-renders from the contents and nothing degrades. Read
|
|
101
|
+
[references/smart-objects.md](references/smart-objects.md) for the steps (reading, transforming,
|
|
102
|
+
smart filters, linked contents, rasterizing).
|
|
123
103
|
|
|
124
104
|
### Shapes and text
|
|
125
105
|
|
|
@@ -413,6 +393,18 @@ in the source frame at the document's bit depth, colour mode and profile. Read
|
|
|
413
393
|
| `add_effect_layer` | Add a layer drawn by a generator, overlay or title effect at the document's size and bit depth (`values`, `time`, `name`, `aboveId` / `belowId`, `opacity`, `blend`). Returns the layer id. |
|
|
414
394
|
| `apply_selection_as_mask` | Mask a layer with the current selection: pass `layerId` to mask an existing layer, or `kind` (plus optional `params`) to create a new masked layer in one step. `density` 0..1 and `feather` px soften the mask non-destructively. Returns `layerId`, kind, mask info and the selection summary. |
|
|
415
395
|
|
|
396
|
+
### Save and open
|
|
397
|
+
|
|
398
|
+
The host may add the shared document tools (see `pixerate-agent-tools`). An image document is the saved state (layers, adjustments, crop, selection...) with layer pixels, masks and patterns as asset references; the source image stays the host's.
|
|
399
|
+
|
|
400
|
+
| Tool | Use |
|
|
401
|
+
| --- | --- |
|
|
402
|
+
| `get_image_document` | Take a copy of the whole image document as `{ kind, formatVersion, revision, document }` before a risky change, or to hand it on. Images in it are asset references (`pixerate-asset:...`), never pixel data, so it stays small. To look at the pixels use `render_preview` or `capture_view`. |
|
|
403
|
+
| `load_image_document` | Put back a copy from `get_image_document` in this session (its `document`, or the whole result). Checked first: a document whose assets are not loaded, or from a newer build, is refused and nothing changes. One undo step (`undo_image` brings the previous document back). To change part of the image use the layer and adjustment tools. |
|
|
404
|
+
| `save_image_document` | Save the image document and its assets under a `name` in the host's storage (the same name replaces that copy). Returns the `key`. Only listed when the host has storage. Save when the user asks, not after every edit. |
|
|
405
|
+
| `list_saved_image_documents` | List saved image documents (`key`, `name`, `savedAt`), newest first. |
|
|
406
|
+
| `open_saved_image_document` | Replace the image document with a saved one by `key`; its assets are read from storage first. Ask before opening over changes the user has not saved. |
|
|
407
|
+
|
|
416
408
|
## Pitfalls
|
|
417
409
|
|
|
418
410
|
- Agent playback (if on) opens each write's panel, then traces `points`, drags boxes or visits the layers and sliders named; results are unchanged.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Smart objects
|
|
2
|
+
|
|
3
|
+
How to work with smart objects in the image editor (see the main skill for the tool reference).
|
|
4
|
+
|
|
5
|
+
1. **Convert before repeated or uncertain changes**: `convert_to_smart_object` (one pixel layer, or
|
|
6
|
+
several siblings that nest as a layer document). A converted pixel layer looks exactly the same
|
|
7
|
+
and keeps its id; its filters become smart filters. From then on every transform and filter is
|
|
8
|
+
re-rendered from the contents, so scaling down and back up, or rotating twelve times, loses
|
|
9
|
+
nothing.
|
|
10
|
+
2. **Read it**: `get_smart_object` gives the contents (size, kind, instances), the placement
|
|
11
|
+
(corners, warp, and scale / rotate in percent and degrees of the contents' own size) and the
|
|
12
|
+
smart filters with their ids.
|
|
13
|
+
3. **Transform**: `set_smart_object_transform` sets the transform absolutely (scale 100 = the
|
|
14
|
+
contents' own size, `x`, `y` = where its centre goes; or `corners`, `matrix`, and a `warp` in
|
|
15
|
+
contents pixels, `null` to remove). `transform_layer`, `warp_layer`, `flip_layer` and
|
|
16
|
+
`rotate_layer_90` also work on a smart object, relative to its current placement, and never
|
|
17
|
+
degrade it. `offset_layer` moves it by whole pixels.
|
|
18
|
+
4. **Filter non-destructively**: `add_smart_filter` (`develop` or `blur`, each with its own
|
|
19
|
+
`blend` and `opacity`; kinds can repeat), then `update_smart_filter`, `move_smart_filter`,
|
|
20
|
+
`remove_smart_filter` and `set_smart_filters_enabled`. `set_smart_filter_mask` limits where the
|
|
21
|
+
filters show; paint it with `paint_stroke` / `fill_pixels` `channel: "filter-mask"`.
|
|
22
|
+
5. **Contents**: `copy_smart_object` with `linked: true` shares the contents (edit once, both
|
|
23
|
+
change), `linked: false` makes them independent. `edit_smart_object_contents` opens the
|
|
24
|
+
contents as their own document: every tool then works inside them until
|
|
25
|
+
`close_smart_object_contents` (`save: false` discards). `replace_smart_object_contents` swaps
|
|
26
|
+
in a new image for every linked instance; `export_smart_object_contents` returns the file.
|
|
27
|
+
6. **Finish**: `rasterize_smart_object` only when the user wants plain pixels to paint on; the
|
|
28
|
+
placement and filters are then gone.
|
|
@@ -85,7 +85,7 @@ is never part of a layer. Coordinates are document pixels, (0, 0) top-left, y do
|
|
|
85
85
|
9. **Watercolour** is its own way of working (see "Wet media" below): wet the paper or not,
|
|
86
86
|
lay washes light to dark, let them flow (`advance_wet_paint`), dry them (`dry_paint`), glaze.
|
|
87
87
|
10. **Deliver**: `export_image` (PNG, or JPEG / WebP in a browser), `export_psd` for Photoshop,
|
|
88
|
-
`
|
|
88
|
+
`save_paint_document` to keep the painting with its strokes (when the host has storage).
|
|
89
89
|
|
|
90
90
|
## Best practices
|
|
91
91
|
|
|
@@ -412,8 +412,20 @@ for the controls and presets.
|
|
|
412
412
|
| `export_psd` | Export a PSD with every layer, the paper as a locked bottom layer, and the composite. Pigment and painterly modes are written as their nearest standard mode (`list_blend_modes` `psd`). Returns base64, size, `psb` and `warnings`. |
|
|
413
413
|
| `export_time_lapse` | Repaint the painting from its recorded strokes and events as a time-lapse: `frames` (about how many), `fps`, `maxSide`, `wetStepsPerFrame` (frames while wet paint flows), `holdMs`. Returns a contact sheet image, the frame count, size, duration, a video project of the frames and the ffmpeg command that renders `timelapse.mp4`; `includeFrames` adds every frame as base64 PNG. Changes nothing. |
|
|
414
414
|
| `export_high_res` | Repaint the painting from its strokes at `scale` 1..8 (brushes, grain, fills and wet events scaled): a PNG with real detail instead of upscaled pixels. Returns base64, size. Layers not painted with strokes come out empty. |
|
|
415
|
-
| `save_document` |
|
|
416
|
-
| `open_document` |
|
|
415
|
+
| `save_document` | Deprecated, kept for one minor version: use `get_paint_document` or `save_paint_document`. Returns the document JSON with PNG data URLs inline (large). |
|
|
416
|
+
| `open_document` | Deprecated, kept for one minor version: use `load_paint_document` or `open_saved_paint_document`. Opens a document JSON from `save_document`, clearing the undo history. |
|
|
417
|
+
|
|
418
|
+
### Save and open
|
|
419
|
+
|
|
420
|
+
The host may add the shared document tools (see `pixerate-agent-tools`). A paint document is the saved painting (canvas, paper, layers, thick paint, guides, swatches, mixing pad and recorded strokes) with every image as an asset reference; wet paint is saved dry.
|
|
421
|
+
|
|
422
|
+
| Tool | Use |
|
|
423
|
+
| --- | --- |
|
|
424
|
+
| `get_paint_document` | Take a copy of the whole painting as `{ kind, formatVersion, revision, document }` before a risky change, or to hand it on. Images in it are asset references (`pixerate-asset:...`), never pixel data, so it stays small. To look at the pixels use `render_preview` or `export_image`. |
|
|
425
|
+
| `load_paint_document` | Put back a copy from `get_paint_document` in this session (its `document`, or the whole result). Checked first: a document whose assets are not loaded, or from a newer build, is refused and nothing changes. Opening clears the undo history (`undoable: false`), so get a copy first if the user may want the current painting back. Refused while a stroke or a wet-paint step is in progress. To change part of the painting use the layer and painting tools. |
|
|
426
|
+
| `save_paint_document` | Save the painting and its assets under a `name` in the host's storage (the same name replaces that copy). Returns the `key`. Only listed when the host has storage. Save when the user asks, not after every edit. |
|
|
427
|
+
| `list_saved_paint_documents` | List saved paintings (`key`, `name`, `savedAt`), newest first. |
|
|
428
|
+
| `open_saved_paint_document` | Replace the painting with a saved one by `key`; its assets are read from storage first. Ask before opening over changes the user has not saved. |
|
|
417
429
|
|
|
418
430
|
## Pitfalls
|
|
419
431
|
|
|
@@ -458,5 +470,5 @@ for the controls and presets.
|
|
|
458
470
|
- **Effects are pixels in replays.** Effect paper, effect layers, effect fills and baked light
|
|
459
471
|
need the provider when they are made; replays and time-lapses do not repeat them. Add them
|
|
460
472
|
after the painting, or keep the effect layer and redraw it.
|
|
461
|
-
- **Recorded strokes are kept in saved documents
|
|
462
|
-
|
|
473
|
+
- **Recorded strokes are kept in saved documents** (`save_paint_document`, `get_paint_document`),
|
|
474
|
+
so a painting can be replayed and repainted at a higher resolution.
|