@ankhorage/studio 0.0.9 → 0.0.11
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/insertModalModel.d.ts +24 -0
- package/dist/insertModalModel.d.ts.map +1 -0
- package/dist/insertModalModel.js +58 -0
- package/dist/insertModalModel.js.map +1 -0
- package/dist/localizationConfig.d.ts +7 -0
- package/dist/localizationConfig.d.ts.map +1 -0
- package/dist/localizationConfig.js +19 -0
- package/dist/localizationConfig.js.map +1 -0
- package/package.json +9 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { UiNode } from '@ankhorage/contracts';
|
|
2
|
+
import type { InsertCatalogEntry, StudioComponentMetaRegistry } from './index';
|
|
3
|
+
export interface InsertCategoryGroup {
|
|
4
|
+
category: string;
|
|
5
|
+
label: string;
|
|
6
|
+
entries: InsertCatalogEntry[];
|
|
7
|
+
}
|
|
8
|
+
export declare function filterInsertCatalogEntries(entries: InsertCatalogEntry[], query: string): InsertCatalogEntry[];
|
|
9
|
+
export declare function groupInsertEntries(args: {
|
|
10
|
+
entries: InsertCatalogEntry[];
|
|
11
|
+
getCategoryLabel: (category: string) => string;
|
|
12
|
+
}): InsertCategoryGroup[];
|
|
13
|
+
export declare function resolveNodeLabel(args: {
|
|
14
|
+
node: UiNode | null;
|
|
15
|
+
componentMeta: StudioComponentMetaRegistry;
|
|
16
|
+
fallbackLabel?: string;
|
|
17
|
+
}): string;
|
|
18
|
+
export declare function getPlacementHint(args: {
|
|
19
|
+
entry: InsertCatalogEntry;
|
|
20
|
+
rootNode: UiNode | null;
|
|
21
|
+
findNode: (root: UiNode, id: string) => UiNode | null;
|
|
22
|
+
componentMeta: StudioComponentMetaRegistry;
|
|
23
|
+
}): string | null;
|
|
24
|
+
//# sourceMappingURL=insertModalModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insertModalModel.d.ts","sourceRoot":"","sources":["../src/insertModalModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CActB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAChD,GAAG,mBAAmB,EAAE,CAsBxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,2BAA2B,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAKT;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,2BAA2B,CAAC;CAC5C,GAAG,MAAM,GAAG,IAAI,CAwBhB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export function filterInsertCatalogEntries(entries, query) {
|
|
2
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
3
|
+
if (normalizedQuery.length === 0) {
|
|
4
|
+
return entries;
|
|
5
|
+
}
|
|
6
|
+
return entries.filter((entry) => {
|
|
7
|
+
const description = entry.description?.toLowerCase() ?? '';
|
|
8
|
+
return (entry.label.toLowerCase().includes(normalizedQuery) ||
|
|
9
|
+
entry.rootType.toLowerCase().includes(normalizedQuery) ||
|
|
10
|
+
description.includes(normalizedQuery));
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function groupInsertEntries(args) {
|
|
14
|
+
const { entries, getCategoryLabel } = args;
|
|
15
|
+
const groups = [];
|
|
16
|
+
const byCategory = new Map();
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const existing = byCategory.get(entry.category);
|
|
19
|
+
if (existing) {
|
|
20
|
+
existing.entries.push(entry);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const group = {
|
|
24
|
+
category: entry.category,
|
|
25
|
+
label: getCategoryLabel(entry.category),
|
|
26
|
+
entries: [entry],
|
|
27
|
+
};
|
|
28
|
+
byCategory.set(entry.category, group);
|
|
29
|
+
groups.push(group);
|
|
30
|
+
}
|
|
31
|
+
return groups;
|
|
32
|
+
}
|
|
33
|
+
export function resolveNodeLabel(args) {
|
|
34
|
+
const { node, componentMeta, fallbackLabel = 'selection' } = args;
|
|
35
|
+
if (!node)
|
|
36
|
+
return fallbackLabel;
|
|
37
|
+
return node.alias ?? componentMeta[node.type]?.blueprint?.label ?? node.type;
|
|
38
|
+
}
|
|
39
|
+
export function getPlacementHint(args) {
|
|
40
|
+
const { entry, rootNode, findNode, componentMeta } = args;
|
|
41
|
+
if (entry.status !== 'enabled' || !entry.placement || !rootNode) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const { placement } = entry;
|
|
45
|
+
const targetId = placement.kind === 'inside'
|
|
46
|
+
? placement.parentId
|
|
47
|
+
: (placement.referenceId ?? placement.parentId);
|
|
48
|
+
const targetNode = findNode(rootNode, targetId);
|
|
49
|
+
const targetLabel = resolveNodeLabel({ node: targetNode, componentMeta });
|
|
50
|
+
if (placement.kind === 'before') {
|
|
51
|
+
return `Inserts before ${targetLabel}`;
|
|
52
|
+
}
|
|
53
|
+
if (placement.kind === 'after') {
|
|
54
|
+
return `Inserts after ${targetLabel}`;
|
|
55
|
+
}
|
|
56
|
+
return `Inserts inside ${targetLabel}`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=insertModalModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insertModalModel.js","sourceRoot":"","sources":["../src/insertModalModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface StudioLocalizationConfig {
|
|
2
|
+
locales?: string[];
|
|
3
|
+
}
|
|
4
|
+
export declare function isStringArray(value: unknown): value is string[];
|
|
5
|
+
export declare function isStringRecord(value: unknown): value is Record<string, string>;
|
|
6
|
+
export declare function readLocalizationConfig(value: unknown): StudioLocalizationConfig | null;
|
|
7
|
+
//# sourceMappingURL=localizationConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localizationConfig.d.ts","sourceRoot":"","sources":["../src/localizationConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,GAAG,IAAI,CAUtF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function isStringArray(value) {
|
|
5
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
6
|
+
}
|
|
7
|
+
export function isStringRecord(value) {
|
|
8
|
+
return isRecord(value) && Object.values(value).every((item) => typeof item === 'string');
|
|
9
|
+
}
|
|
10
|
+
export function readLocalizationConfig(value) {
|
|
11
|
+
if (!isRecord(value)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (value.locales === undefined) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
return isStringArray(value.locales) ? { locales: value.locales } : null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=localizationConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localizationConfig.js","sourceRoot":"","sources":["../src/localizationConfig.ts"],"names":[],"mappings":"AAIA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/studio",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"description": "Studio authoring package for Ankhorage apps",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ankhorage/studio#readme",
|
|
@@ -32,6 +32,14 @@
|
|
|
32
32
|
"types": "./dist/canvasDropZones.d.ts",
|
|
33
33
|
"import": "./dist/canvasDropZones.js"
|
|
34
34
|
},
|
|
35
|
+
"./insertModalModel": {
|
|
36
|
+
"types": "./dist/insertModalModel.d.ts",
|
|
37
|
+
"import": "./dist/insertModalModel.js"
|
|
38
|
+
},
|
|
39
|
+
"./localizationConfig": {
|
|
40
|
+
"types": "./dist/localizationConfig.d.ts",
|
|
41
|
+
"import": "./dist/localizationConfig.js"
|
|
42
|
+
},
|
|
35
43
|
"./manifestNavigatorPreviewModel": {
|
|
36
44
|
"types": "./dist/manifestNavigatorPreviewModel.d.ts",
|
|
37
45
|
"import": "./dist/manifestNavigatorPreviewModel.js"
|