@awesome-markdown/board-ui 1.6.0 → 2.0.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/board/Board.d.ts.map +1 -1
- package/dist/board/Board.js +79 -66
- package/dist/board/Board.js.map +1 -1
- package/dist/board/Cell.d.ts.map +1 -1
- package/dist/board/Cell.js +11 -6
- package/dist/board/Cell.js.map +1 -1
- package/dist/board/HomelessItemCard.d.ts.map +1 -1
- package/dist/board/HomelessItemCard.js +2 -1
- package/dist/board/HomelessItemCard.js.map +1 -1
- package/dist/board/ItemCard.d.ts.map +1 -1
- package/dist/board/ItemCard.js +9 -16
- package/dist/board/ItemCard.js.map +1 -1
- package/dist/board/dnd/mutateDragDrop.d.ts +3 -5
- package/dist/board/dnd/mutateDragDrop.d.ts.map +1 -1
- package/dist/board/dnd/mutateDragDrop.js +36 -55
- package/dist/board/dnd/mutateDragDrop.js.map +1 -1
- package/dist/board/layout/AxisBehavior.d.ts +2 -1
- package/dist/board/layout/AxisBehavior.d.ts.map +1 -1
- package/dist/board/layout/AxisBehavior.js +9 -5
- package/dist/board/layout/AxisBehavior.js.map +1 -1
- package/dist/board/layout/AxisDrawer.d.ts.map +1 -1
- package/dist/board/layout/AxisDrawer.js +1 -1
- package/dist/board/layout/AxisDrawer.js.map +1 -1
- package/dist/board/layout/filter-draft.d.ts.map +1 -1
- package/dist/board/layout/filter-draft.js +3 -1
- package/dist/board/layout/filter-draft.js.map +1 -1
- package/dist/components/ItemRecovery.d.ts +9 -0
- package/dist/components/ItemRecovery.d.ts.map +1 -0
- package/dist/components/ItemRecovery.js +48 -0
- package/dist/components/ItemRecovery.js.map +1 -0
- package/dist/components/PropertyTree.d.ts +18 -0
- package/dist/components/PropertyTree.d.ts.map +1 -0
- package/dist/components/PropertyTree.js +109 -0
- package/dist/components/PropertyTree.js.map +1 -0
- package/dist/lib/item-board.d.ts +0 -3
- package/dist/lib/item-board.d.ts.map +1 -1
- package/dist/lib/item-board.js +0 -7
- package/dist/lib/item-board.js.map +1 -1
- package/dist/lib/patch-visible-item.d.ts +4 -0
- package/dist/lib/patch-visible-item.d.ts.map +1 -0
- package/dist/lib/patch-visible-item.js +10 -0
- package/dist/lib/patch-visible-item.js.map +1 -0
- package/dist/lib/property-display.d.ts +2 -3
- package/dist/lib/property-display.d.ts.map +1 -1
- package/dist/lib/property-display.js +15 -10
- package/dist/lib/property-display.js.map +1 -1
- package/dist/lib/property-tree.d.ts +23 -0
- package/dist/lib/property-tree.d.ts.map +1 -0
- package/dist/lib/property-tree.js +109 -0
- package/dist/lib/property-tree.js.map +1 -0
- package/dist/pages/ItemEditorPage.d.ts.map +1 -1
- package/dist/pages/ItemEditorPage.js +185 -204
- package/dist/pages/ItemEditorPage.js.map +1 -1
- package/package.json +6 -5
- package/styles.css +766 -146
- package/dist/components/BoardAssigneeField.d.ts +0 -10
- package/dist/components/BoardAssigneeField.d.ts.map +0 -1
- package/dist/components/BoardAssigneeField.js +0 -37
- package/dist/components/BoardAssigneeField.js.map +0 -1
- package/dist/components/DeleteItemConfirmDialog.d.ts +0 -14
- package/dist/components/DeleteItemConfirmDialog.d.ts.map +0 -1
- package/dist/components/DeleteItemConfirmDialog.js +0 -46
- package/dist/components/DeleteItemConfirmDialog.js.map +0 -1
- package/dist/components/ItemEditorActions.d.ts +0 -15
- package/dist/components/ItemEditorActions.d.ts.map +0 -1
- package/dist/components/ItemEditorActions.js +0 -48
- package/dist/components/ItemEditorActions.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-board.js","sourceRoot":"","sources":["../../src/lib/item-board.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"item-board.js","sourceRoot":"","sources":["../../src/lib/item-board.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,SAAkB;IACtE,IAAI,CAAC,SAAS;QAAE,OAAO,UAAU,QAAQ,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,OAAO,UAAU,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Item, Mutation, PersistenceProvider } from '@awesome-markdown/contracts';
|
|
2
|
+
/** Acquire an opaque revision only if the visible source is still authoritative. */
|
|
3
|
+
export declare function patchVisibleItem(provider: PersistenceProvider, visible: Item, mutations: Mutation[]): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=patch-visible-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-visible-item.d.ts","sourceRoot":"","sources":["../../src/lib/patch-visible-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvF,oFAAoF;AACpF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Acquire an opaque revision only if the visible source is still authoritative. */
|
|
2
|
+
export async function patchVisibleItem(provider, visible, mutations) {
|
|
3
|
+
const current = await provider.getItem(visible.slug);
|
|
4
|
+
if (!current)
|
|
5
|
+
throw new Error('Item was deleted. Reload the board.');
|
|
6
|
+
if (JSON.stringify(current.item) !== JSON.stringify(visible))
|
|
7
|
+
throw new Error('Item changed. Reload the board before moving it.');
|
|
8
|
+
await provider.patchItem(visible.slug, { revision: current.revision, mutations });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=patch-visible-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-visible-item.js","sourceRoot":"","sources":["../../src/lib/patch-visible-item.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA6B,EAC7B,OAAa,EACb,SAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -3,8 +3,7 @@ import type { Item, PropertyDisplay } from '@awesome-markdown/contracts';
|
|
|
3
3
|
/**
|
|
4
4
|
* Resolves a property's value for an item on a given board.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* item's top-level property of the same name.
|
|
6
|
+
* Card layouts name explicit configuration paths; property names impose no schema.
|
|
8
7
|
*/
|
|
9
8
|
export declare function resolveItemProperty(item: Item, boardSlug: string, property: string): unknown;
|
|
10
9
|
interface PropertyValueProps {
|
|
@@ -13,6 +12,6 @@ interface PropertyValueProps {
|
|
|
13
12
|
layout: PropertyDisplay;
|
|
14
13
|
}
|
|
15
14
|
/** Renders a single configured property according to its `visualStyle`. */
|
|
16
|
-
export declare function PropertyValueDisplay({ item, boardSlug, layout }: PropertyValueProps): React.ReactElement | null;
|
|
15
|
+
export declare function PropertyValueDisplay({ item, boardSlug, layout, }: PropertyValueProps): React.ReactElement | null;
|
|
17
16
|
export {};
|
|
18
17
|
//# sourceMappingURL=property-display.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-display.d.ts","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGzE
|
|
1
|
+
{"version":3,"file":"property-display.d.ts","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGzE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5F;AAiBD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA2FhD"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { resolvePath } from '@awesome-markdown/filter-engine';
|
|
4
4
|
/**
|
|
5
5
|
* Resolves a property's value for an item on a given board.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* item's top-level property of the same name.
|
|
7
|
+
* Card layouts name explicit configuration paths; property names impose no schema.
|
|
9
8
|
*/
|
|
10
9
|
export function resolveItemProperty(item, boardSlug, property) {
|
|
11
|
-
|
|
12
|
-
if (boardEntry && property in boardEntry)
|
|
13
|
-
return boardEntry[property];
|
|
14
|
-
return item[property];
|
|
10
|
+
return resolvePath(property, item, { board: boardSlug });
|
|
15
11
|
}
|
|
16
12
|
function formatValue(value) {
|
|
17
13
|
if (value === undefined || value === null)
|
|
@@ -21,13 +17,22 @@ function formatValue(value) {
|
|
|
21
17
|
return String(value);
|
|
22
18
|
}
|
|
23
19
|
function initials(value) {
|
|
24
|
-
const parts = value
|
|
20
|
+
const parts = value
|
|
21
|
+
.trim()
|
|
22
|
+
.split(/[\s_-]+/)
|
|
23
|
+
.filter(Boolean);
|
|
25
24
|
const chars = parts.length > 1 ? [parts[0][0], parts[1][0]] : [value.slice(0, 2)];
|
|
26
25
|
return chars.join('').toUpperCase();
|
|
27
26
|
}
|
|
28
27
|
/** Renders a single configured property according to its `visualStyle`. */
|
|
29
|
-
export function PropertyValueDisplay({ item, boardSlug, layout }) {
|
|
30
|
-
|
|
28
|
+
export function PropertyValueDisplay({ item, boardSlug, layout, }) {
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = resolveItemProperty(item, boardSlug, layout.property);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return _jsx("span", { role: "alert", children: error instanceof Error ? error.message : String(error) });
|
|
35
|
+
}
|
|
31
36
|
const text = formatValue(raw);
|
|
32
37
|
if (text === '')
|
|
33
38
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-display.js","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"property-display.js","sourceRoot":"","sources":["../../src/lib/property-display.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Item, PropertyValue, Mutation } from '@awesome-markdown/contracts';
|
|
2
|
+
export type ValueType = 'text' | 'number' | 'boolean' | 'null' | 'group' | 'list';
|
|
3
|
+
export interface ValueNode {
|
|
4
|
+
id: string;
|
|
5
|
+
type: ValueType;
|
|
6
|
+
text: string;
|
|
7
|
+
checked: boolean;
|
|
8
|
+
entries: {
|
|
9
|
+
key: string;
|
|
10
|
+
node: ValueNode;
|
|
11
|
+
}[];
|
|
12
|
+
}
|
|
13
|
+
export declare const protectedRoot: (key: string) => boolean;
|
|
14
|
+
export declare function valueNode(value: PropertyValue): ValueNode;
|
|
15
|
+
export declare function defaultNode(type: ValueType): ValueNode;
|
|
16
|
+
export declare function propertiesNode(item: Item): ValueNode;
|
|
17
|
+
export declare function numericValue(text: string): number;
|
|
18
|
+
export declare function nodeValue(node: ValueNode): PropertyValue;
|
|
19
|
+
export declare function updateNode(root: ValueNode, id: string, change: (node: ValueNode) => ValueNode): ValueNode;
|
|
20
|
+
export declare function validName(name: string, parent: ValueNode, root: boolean): string;
|
|
21
|
+
export declare function draftItem(item: Item, properties: ValueNode, body: string): Item;
|
|
22
|
+
export declare function draftMutations(before: Item, after: Item): Mutation[];
|
|
23
|
+
//# sourceMappingURL=property-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-tree.d.ts","sourceRoot":"","sources":["../../src/lib/property-tree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEjF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,OACU,CAAC;AACvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAsBzD;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAUtD;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAEpD;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,CAexD;AACD,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,GACrC,SAAS,CAMX;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAOhF;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAS/E;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,CAYpE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { SYSTEM_KEYS, unsafeKey, parseSafeYaml } from '@awesome-markdown/contracts';
|
|
2
|
+
let sequence = 0;
|
|
3
|
+
export const protectedRoot = (key) => key === 'body' || SYSTEM_KEYS.some((k) => k === key);
|
|
4
|
+
export function valueNode(value) {
|
|
5
|
+
const node = {
|
|
6
|
+
id: `property-${++sequence}`,
|
|
7
|
+
type: 'null',
|
|
8
|
+
text: '',
|
|
9
|
+
checked: false,
|
|
10
|
+
entries: [],
|
|
11
|
+
};
|
|
12
|
+
if (typeof value === 'string') {
|
|
13
|
+
node.type = 'text';
|
|
14
|
+
node.text = value;
|
|
15
|
+
}
|
|
16
|
+
else if (typeof value === 'number') {
|
|
17
|
+
node.type = 'number';
|
|
18
|
+
node.text = String(value);
|
|
19
|
+
}
|
|
20
|
+
else if (typeof value === 'boolean') {
|
|
21
|
+
node.type = 'boolean';
|
|
22
|
+
node.checked = value;
|
|
23
|
+
}
|
|
24
|
+
else if (value !== null) {
|
|
25
|
+
node.type = Array.isArray(value) ? 'list' : 'group';
|
|
26
|
+
node.entries = Object.entries(value).map(([key, child]) => ({ key, node: valueNode(child) }));
|
|
27
|
+
}
|
|
28
|
+
return node;
|
|
29
|
+
}
|
|
30
|
+
export function defaultNode(type) {
|
|
31
|
+
const values = {
|
|
32
|
+
text: '',
|
|
33
|
+
number: 0,
|
|
34
|
+
boolean: false,
|
|
35
|
+
null: null,
|
|
36
|
+
group: {},
|
|
37
|
+
list: [],
|
|
38
|
+
};
|
|
39
|
+
return valueNode(values[type]);
|
|
40
|
+
}
|
|
41
|
+
export function propertiesNode(item) {
|
|
42
|
+
return valueNode(Object.fromEntries(Object.entries(item).filter(([key]) => !protectedRoot(key))));
|
|
43
|
+
}
|
|
44
|
+
export function numericValue(text) {
|
|
45
|
+
if (!/^[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?$/i.test(text.trim()))
|
|
46
|
+
throw new Error('Complete the number before saving or exporting.');
|
|
47
|
+
const number = Number(text);
|
|
48
|
+
if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number)))
|
|
49
|
+
throw new Error('Use a finite number and safe integer, or store this value as text.');
|
|
50
|
+
parseSafeYaml(`value: ${text.trim()}`);
|
|
51
|
+
return number;
|
|
52
|
+
}
|
|
53
|
+
export function nodeValue(node) {
|
|
54
|
+
switch (node.type) {
|
|
55
|
+
case 'text':
|
|
56
|
+
return node.text;
|
|
57
|
+
case 'number':
|
|
58
|
+
return numericValue(node.text);
|
|
59
|
+
case 'boolean':
|
|
60
|
+
return node.checked;
|
|
61
|
+
case 'null':
|
|
62
|
+
return null;
|
|
63
|
+
case 'list':
|
|
64
|
+
return node.entries.map((entry) => nodeValue(entry.node));
|
|
65
|
+
case 'group':
|
|
66
|
+
return Object.fromEntries(node.entries.map((entry) => [entry.key, nodeValue(entry.node)]));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function updateNode(root, id, change) {
|
|
70
|
+
if (root.id === id)
|
|
71
|
+
return change(root);
|
|
72
|
+
return {
|
|
73
|
+
...root,
|
|
74
|
+
entries: root.entries.map((entry) => ({ ...entry, node: updateNode(entry.node, id, change) })),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function validName(name, parent, root) {
|
|
78
|
+
const key = name.trim();
|
|
79
|
+
if (!key || unsafeKey(key) || (root && protectedRoot(key)))
|
|
80
|
+
throw new Error('Choose a nonblank, safe property name; root metadata and body are reserved.');
|
|
81
|
+
if (parent.entries.some((entry) => entry.key === key))
|
|
82
|
+
throw new Error('A property with this name already exists here.');
|
|
83
|
+
return key;
|
|
84
|
+
}
|
|
85
|
+
export function draftItem(item, properties, body) {
|
|
86
|
+
const data = nodeValue(properties);
|
|
87
|
+
// Preserve the entry snapshot's root order, replacing values without renaming keys.
|
|
88
|
+
const result = Object.fromEntries(Object.entries(item).filter(([key]) => protectedRoot(key) || Object.hasOwn(data, key)));
|
|
89
|
+
for (const [key, value] of Object.entries(data))
|
|
90
|
+
result[key] = value;
|
|
91
|
+
if (body !== (item.body ?? '') || Object.hasOwn(item, 'body'))
|
|
92
|
+
result.body = body;
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
export function draftMutations(before, after) {
|
|
96
|
+
const mutations = [];
|
|
97
|
+
for (const key of Object.keys(before)) {
|
|
98
|
+
if (!protectedRoot(key) && !Object.hasOwn(after, key))
|
|
99
|
+
mutations.push({ op: 'delete', path: [key] });
|
|
100
|
+
}
|
|
101
|
+
for (const [key, value] of Object.entries(after)) {
|
|
102
|
+
if (SYSTEM_KEYS.some((k) => k === key))
|
|
103
|
+
continue;
|
|
104
|
+
if (JSON.stringify(value) !== JSON.stringify(before[key]))
|
|
105
|
+
mutations.push({ op: 'set', path: [key], value });
|
|
106
|
+
}
|
|
107
|
+
return mutations;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=property-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-tree.js","sourceRoot":"","sources":["../../src/lib/property-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemEditorPage.d.ts","sourceRoot":"","sources":["../../src/pages/ItemEditorPage.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ItemEditorPage.d.ts","sourceRoot":"","sources":["../../src/pages/ItemEditorPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAmB3D,wBAAgB,cAAc,IAAI,KAAK,CAAC,YAAY,CAwVnD"}
|