@dforge-core/dforge-mcp 0.1.0-rc.9 → 0.1.1
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/CHANGELOG.md +132 -0
- package/README.md +84 -27
- package/dist/server.js +2957 -616
- package/docs/creating-modules.md +11 -4
- package/package.json +11 -6
- package/resources/docs/conventions.md +22 -16
- package/resources/docs/dsl-reference.md +767 -0
- package/resources/schemas/entity.schema.json +8 -1
- package/resources/schemas/print-templates.schema.json +82 -0
- package/resources/schemas/reports.schema.json +4 -0
- package/resources/schemas/triggers.schema.json +59 -0
- package/skills/dforge-mcp-author/SKILL.md +269 -69
- package/skills/dforge-mcp-author/examples/matrix-budget/README.md +43 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/entities/budget_category.json +24 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/entities/budget_line.json +56 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/manifest.json +30 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/security/roles.json +9 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/seed-data/01-categories.json +8 -0
- package/skills/dforge-mcp-author/examples/matrix-budget/ui/data_views.json +42 -0
- package/skills/dforge-mcp-author/examples/simple-todo/README.md +38 -0
- package/skills/dforge-mcp-author/examples/simple-todo/entities/todo_item.json +83 -0
- package/skills/dforge-mcp-author/examples/simple-todo/entities/todo_list.json +43 -0
- package/skills/dforge-mcp-author/examples/simple-todo/logic/actions/mark_done.dsl +6 -0
- package/skills/dforge-mcp-author/examples/simple-todo/manifest.json +32 -0
- package/skills/dforge-mcp-author/examples/simple-todo/security/roles.json +10 -0
- package/skills/dforge-mcp-author/examples/simple-todo/seed-data/01-lists.json +17 -0
- package/skills/dforge-mcp-author/examples/simple-todo/ui/actions.json +11 -0
- package/skills/dforge-mcp-author/examples/simple-todo/ui/data_views.json +35 -0
- package/skills/dforge-mcp-author/examples/simple-todo/ui/menus.json +28 -0
- package/skills/dforge-mcp-author/references/action-dsl.md +397 -0
- package/skills/dforge-mcp-author/references/column-types.md +168 -0
- package/skills/dforge-mcp-author/references/conventions.md +177 -0
- package/skills/dforge-mcp-author/references/data-migration.md +270 -0
- package/skills/dforge-mcp-author/references/data-views.md +243 -0
- package/skills/dforge-mcp-author/references/excel-import.md +61 -0
- package/skills/dforge-mcp-author/references/field-types.md +144 -0
- package/skills/dforge-mcp-author/references/filters.md +326 -0
- package/skills/dforge-mcp-author/references/flags.md +73 -0
- package/skills/dforge-mcp-author/references/formulas.md +206 -0
- package/skills/dforge-mcp-author/references/jobs.md +149 -0
- package/skills/dforge-mcp-author/references/manifest.md +123 -0
- package/skills/dforge-mcp-author/references/menus.md +164 -0
- package/skills/dforge-mcp-author/references/number-sequences.md +117 -0
- package/skills/dforge-mcp-author/references/print-templates.md +159 -0
- package/skills/dforge-mcp-author/references/queries.md +312 -0
- package/skills/dforge-mcp-author/references/reports.md +398 -0
- package/skills/dforge-mcp-author/references/schema-import.md +331 -0
- package/skills/dforge-mcp-author/references/security.md +244 -0
- package/skills/dforge-mcp-author/references/settings.md +120 -0
- package/skills/dforge-mcp-author/references/traits.md +153 -0
- package/skills/dforge-mcp-author/references/translations.md +158 -0
- package/skills/dforge-mcp-author/references/validation-checklist.md +183 -0
- package/skills/dforge-mcp-author/scripts/xlsx_to_model.py +198 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Budget lines — the value-source CELL entity. One row per (category, quarter); the matrix edits the amount in place.",
|
|
3
|
+
"dbObject": "budget_line",
|
|
4
|
+
"toString": "{category} {quarter}",
|
|
5
|
+
"traits": ["identity", "audit"],
|
|
6
|
+
"fields": {
|
|
7
|
+
"category_id": {
|
|
8
|
+
"dbDatatype": "cuid",
|
|
9
|
+
"flags": "EM",
|
|
10
|
+
"orderNum": 10,
|
|
11
|
+
"description": "Category ID"
|
|
12
|
+
},
|
|
13
|
+
"category": {
|
|
14
|
+
"columnType": "R",
|
|
15
|
+
"fieldTypeCd": "lookup",
|
|
16
|
+
"flags": "VEM",
|
|
17
|
+
"orderNum": 15,
|
|
18
|
+
"description": "Category",
|
|
19
|
+
"link": {
|
|
20
|
+
"entity": "budget_category",
|
|
21
|
+
"thisKey": "category_id",
|
|
22
|
+
"otherKey": "budget_category_id"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"quarter": {
|
|
26
|
+
"dbDatatype": "varchar",
|
|
27
|
+
"fieldTypeCd": "dropdown",
|
|
28
|
+
"flags": "VEM",
|
|
29
|
+
"maxLen": 2,
|
|
30
|
+
"orderNum": 20,
|
|
31
|
+
"description": "Quarter",
|
|
32
|
+
"params": {
|
|
33
|
+
"options": [
|
|
34
|
+
{ "value": "Q1", "label": "Q1" },
|
|
35
|
+
{ "value": "Q2", "label": "Q2" },
|
|
36
|
+
{ "value": "Q3", "label": "Q3" },
|
|
37
|
+
{ "value": "Q4", "label": "Q4" }
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"amount": {
|
|
42
|
+
"dbDatatype": "numeric",
|
|
43
|
+
"fieldTypeCd": "number",
|
|
44
|
+
"flags": "VEM",
|
|
45
|
+
"orderNum": 30,
|
|
46
|
+
"description": "Amount",
|
|
47
|
+
"params": { "min": 0 }
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"references": {
|
|
51
|
+
"FK_BudgetLine_Category": {
|
|
52
|
+
"from": { "field": "category_id" },
|
|
53
|
+
"to": { "entity": "budget_category", "field": "budget_category_id" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packageFormat": 1,
|
|
3
|
+
"moduleId": "20000000-0000-0000-0000-000000000002",
|
|
4
|
+
"code": "matrix_budget",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"dbSchemaVersion": "0.0.1",
|
|
7
|
+
"displayName": "Matrix Budget",
|
|
8
|
+
"description": "Minimal example demonstrating a matrix (pivot) data view: dataset row axis × dropdown column axis with editable cells",
|
|
9
|
+
"author": { "name": "dForge Examples" },
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"category": "Examples",
|
|
12
|
+
"tags": ["example", "matrix", "budget"],
|
|
13
|
+
"icon": "bi-grid-3x3",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"admin": ">=0.0.1"
|
|
16
|
+
},
|
|
17
|
+
"created": "2026-06-25",
|
|
18
|
+
"updated": "2026-06-25",
|
|
19
|
+
"entities": {
|
|
20
|
+
"budget_category": "./entities/budget_category.json",
|
|
21
|
+
"budget_line": "./entities/budget_line.json"
|
|
22
|
+
},
|
|
23
|
+
"dataViews": "./ui/data_views.json",
|
|
24
|
+
"security": {
|
|
25
|
+
"roles": "./security/roles.json"
|
|
26
|
+
},
|
|
27
|
+
"seedData": [
|
|
28
|
+
"./seed-data/01-categories.json"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entityCode": "budget_category",
|
|
3
|
+
"records": [
|
|
4
|
+
{ "budget_category_id": 2001, "code": "REV", "name": "Revenue" },
|
|
5
|
+
{ "budget_category_id": 2002, "code": "COGS", "name": "Cost of Goods Sold" },
|
|
6
|
+
{ "budget_category_id": 2003, "code": "OPEX", "name": "Operating Expenses" }
|
|
7
|
+
]
|
|
8
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"budget_matrix": {
|
|
3
|
+
"viewType": "matrix",
|
|
4
|
+
"label": "Budget (Category × Quarter)",
|
|
5
|
+
"description": "Editable budget: categories down the side, quarters across the top, the amount edited in each cell.",
|
|
6
|
+
"dataSources": [{
|
|
7
|
+
"entityCode": "budget_line",
|
|
8
|
+
"columns": ["category_id", "quarter", "amount"]
|
|
9
|
+
}],
|
|
10
|
+
"viewConfig": {
|
|
11
|
+
"rowAxis": {
|
|
12
|
+
"kind": "dataset",
|
|
13
|
+
"entity": "budget_category",
|
|
14
|
+
"labelField": "name",
|
|
15
|
+
"sort": [{ "col": "code", "dir": "asc" }]
|
|
16
|
+
},
|
|
17
|
+
"colAxis": {
|
|
18
|
+
"kind": "dropdown",
|
|
19
|
+
"column": "budget_line.quarter"
|
|
20
|
+
},
|
|
21
|
+
"cell": {
|
|
22
|
+
"entity": "budget_line",
|
|
23
|
+
"rowKey": "category_id",
|
|
24
|
+
"colKey": "quarter",
|
|
25
|
+
"fields": ["amount"],
|
|
26
|
+
"editable": true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"budget_categories_grid": {
|
|
31
|
+
"label": "Categories",
|
|
32
|
+
"icon": "bi-tags",
|
|
33
|
+
"dataSources": [{
|
|
34
|
+
"entityCode": "budget_category",
|
|
35
|
+
"columns": [
|
|
36
|
+
{ "column_cd": "code", "width": 100 },
|
|
37
|
+
{ "column_cd": "name", "width": 300 }
|
|
38
|
+
],
|
|
39
|
+
"order": ["code"]
|
|
40
|
+
}]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Simple Todo — Example Module
|
|
2
|
+
|
|
3
|
+
A minimal but complete dForge module. Use it as a reference for:
|
|
4
|
+
|
|
5
|
+
- Module package layout
|
|
6
|
+
- Entity definition with traits, columns, and a reference
|
|
7
|
+
- Data view with a grid
|
|
8
|
+
- Menu with a single leaf item
|
|
9
|
+
- Security role with full CRUD
|
|
10
|
+
- Seed data with numbered files
|
|
11
|
+
- A simple DSL action (mark as done)
|
|
12
|
+
|
|
13
|
+
**Not meant for production** — it's a teaching example.
|
|
14
|
+
|
|
15
|
+
## What it contains
|
|
16
|
+
|
|
17
|
+
| File | Purpose |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `manifest.json` | Module metadata and file listing |
|
|
20
|
+
| `entities/todo_list.json` | Lists that group todos |
|
|
21
|
+
| `entities/todo_item.json` | Individual todo items, with reference to list |
|
|
22
|
+
| `ui/data_views.json` | Two grid views — one for lists, one for items |
|
|
23
|
+
| `ui/menus.json` | Nested menu with "Lists" and "Items" |
|
|
24
|
+
| `ui/actions.json` | Registers the mark-done action |
|
|
25
|
+
| `logic/actions/mark_done.dsl` | The action DSL |
|
|
26
|
+
| `security/roles.json` | `todo_user` role with full CRUD |
|
|
27
|
+
| `seed-data/01-lists.json` | Two seed lists |
|
|
28
|
+
|
|
29
|
+
## Key patterns demonstrated
|
|
30
|
+
|
|
31
|
+
1. **FK+Reference pattern** — `todo_item` has `list_id` (hidden FK) + `list` (visible Reference)
|
|
32
|
+
2. **Traits** — both entities use `["identity", "audit"]`
|
|
33
|
+
3. **toString** — `todo_list` uses `{name}`, `todo_item` uses `{title}`
|
|
34
|
+
4. **`dataSources` array** in data views (never root-level `entityCode`)
|
|
35
|
+
5. **Nested dict menus** with `dataViewCode` on leaves
|
|
36
|
+
6. **`rights` (not `entityRights`)** in roles
|
|
37
|
+
7. **Numbered seed files** for FK ordering
|
|
38
|
+
8. **DSL action** with `canExecute:` gating on `[done] == false`
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Individual todo items",
|
|
3
|
+
"dbObject": "todo_item",
|
|
4
|
+
"toString": "{title}",
|
|
5
|
+
"traits": ["identity", "audit"],
|
|
6
|
+
"fields": {
|
|
7
|
+
"title": {
|
|
8
|
+
"dbDatatype": "varchar",
|
|
9
|
+
"fieldTypeCd": "text",
|
|
10
|
+
"flags": "VEM",
|
|
11
|
+
"maxLen": 200,
|
|
12
|
+
"orderNum": 10,
|
|
13
|
+
"description": "Title"
|
|
14
|
+
},
|
|
15
|
+
"description": {
|
|
16
|
+
"dbDatatype": "text",
|
|
17
|
+
"fieldTypeCd": "textarea",
|
|
18
|
+
"flags": "VE",
|
|
19
|
+
"orderNum": 20,
|
|
20
|
+
"description": "Description"
|
|
21
|
+
},
|
|
22
|
+
"priority": {
|
|
23
|
+
"dbDatatype": "varchar",
|
|
24
|
+
"fieldTypeCd": "dropdown",
|
|
25
|
+
"flags": "VEM",
|
|
26
|
+
"maxLen": 20,
|
|
27
|
+
"orderNum": 30,
|
|
28
|
+
"description": "Priority",
|
|
29
|
+
"params": {
|
|
30
|
+
"options": [
|
|
31
|
+
{ "value": "low", "label": "Low", "color": "#6c757d" },
|
|
32
|
+
{ "value": "medium", "label": "Medium", "color": "#ffc107" },
|
|
33
|
+
{ "value": "high", "label": "High", "color": "#dc3545" }
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"done": {
|
|
38
|
+
"dbDatatype": "bool",
|
|
39
|
+
"fieldTypeCd": "checkbox",
|
|
40
|
+
"flags": "VEM",
|
|
41
|
+
"formula": "false",
|
|
42
|
+
"orderNum": 40,
|
|
43
|
+
"description": "Done"
|
|
44
|
+
},
|
|
45
|
+
"due_date": {
|
|
46
|
+
"dbDatatype": "date",
|
|
47
|
+
"fieldTypeCd": "date",
|
|
48
|
+
"flags": "VE",
|
|
49
|
+
"orderNum": 50,
|
|
50
|
+
"description": "Due Date"
|
|
51
|
+
},
|
|
52
|
+
"list_id": {
|
|
53
|
+
"dbDatatype": "cuid",
|
|
54
|
+
"flags": "EM",
|
|
55
|
+
"orderNum": 60,
|
|
56
|
+
"description": "List ID"
|
|
57
|
+
},
|
|
58
|
+
"list": {
|
|
59
|
+
"columnType": "R",
|
|
60
|
+
"fieldTypeCd": "lookup",
|
|
61
|
+
"flags": "VEM",
|
|
62
|
+
"orderNum": 65,
|
|
63
|
+
"description": "List",
|
|
64
|
+
"link": {
|
|
65
|
+
"entity": "todo_list",
|
|
66
|
+
"thisKey": "list_id",
|
|
67
|
+
"otherKey": "todo_list_id"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"owner_id": {
|
|
71
|
+
"fieldTypeCd": "user",
|
|
72
|
+
"flags": "VE",
|
|
73
|
+
"orderNum": 70,
|
|
74
|
+
"description": "Assigned To"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"references": {
|
|
78
|
+
"FK_TodoItem_List": {
|
|
79
|
+
"from": { "field": "list_id" },
|
|
80
|
+
"to": { "entity": "todo_list", "field": "todo_list_id" }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Lists that group todo items",
|
|
3
|
+
"dbObject": "todo_list",
|
|
4
|
+
"toString": "{name}",
|
|
5
|
+
"traits": ["identity", "audit"],
|
|
6
|
+
"fields": {
|
|
7
|
+
"name": {
|
|
8
|
+
"dbDatatype": "varchar",
|
|
9
|
+
"fieldTypeCd": "text",
|
|
10
|
+
"flags": "VEM",
|
|
11
|
+
"maxLen": 100,
|
|
12
|
+
"orderNum": 10,
|
|
13
|
+
"description": "List Name"
|
|
14
|
+
},
|
|
15
|
+
"color": {
|
|
16
|
+
"dbDatatype": "varchar",
|
|
17
|
+
"fieldTypeCd": "color",
|
|
18
|
+
"flags": "VEM",
|
|
19
|
+
"maxLen": 20,
|
|
20
|
+
"orderNum": 20,
|
|
21
|
+
"description": "Color"
|
|
22
|
+
},
|
|
23
|
+
"description": {
|
|
24
|
+
"dbDatatype": "text",
|
|
25
|
+
"fieldTypeCd": "textarea",
|
|
26
|
+
"flags": "VE",
|
|
27
|
+
"orderNum": 30,
|
|
28
|
+
"description": "Notes"
|
|
29
|
+
},
|
|
30
|
+
"items": {
|
|
31
|
+
"columnType": "S",
|
|
32
|
+
"fieldTypeCd": "grid",
|
|
33
|
+
"flags": "VEM",
|
|
34
|
+
"orderNum": 100,
|
|
35
|
+
"description": "Items",
|
|
36
|
+
"link": {
|
|
37
|
+
"entity": "todo_item",
|
|
38
|
+
"thisKey": "todo_list_id",
|
|
39
|
+
"otherKey": "list_id"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packageFormat": 1,
|
|
3
|
+
"moduleId": "20000000-0000-0000-0000-000000000001",
|
|
4
|
+
"code": "simple_todo",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"dbSchemaVersion": "0.0.1",
|
|
7
|
+
"displayName": "Simple Todo",
|
|
8
|
+
"description": "Minimal example module demonstrating the dForge package format",
|
|
9
|
+
"author": { "name": "dForge Examples" },
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"category": "Examples",
|
|
12
|
+
"tags": ["example", "todo"],
|
|
13
|
+
"icon": "bi-check-square",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"admin": ">=0.0.1"
|
|
16
|
+
},
|
|
17
|
+
"created": "2026-04-08",
|
|
18
|
+
"updated": "2026-04-08",
|
|
19
|
+
"entities": {
|
|
20
|
+
"todo_list": "./entities/todo_list.json",
|
|
21
|
+
"todo_item": "./entities/todo_item.json"
|
|
22
|
+
},
|
|
23
|
+
"dataViews": "./ui/data_views.json",
|
|
24
|
+
"menus": "./ui/menus.json",
|
|
25
|
+
"actions": "./ui/actions.json",
|
|
26
|
+
"security": {
|
|
27
|
+
"roles": "./security/roles.json"
|
|
28
|
+
},
|
|
29
|
+
"seedData": [
|
|
30
|
+
"./seed-data/01-lists.json"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entityCode": "todo_list",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"todo_list_id": 1001,
|
|
6
|
+
"name": "Personal",
|
|
7
|
+
"color": "#4dabf7",
|
|
8
|
+
"description": "Personal tasks and errands"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"todo_list_id": 1002,
|
|
12
|
+
"name": "Work",
|
|
13
|
+
"color": "#51cf66",
|
|
14
|
+
"description": "Work-related tasks"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"todo_list_grid": {
|
|
3
|
+
"label": "All Lists",
|
|
4
|
+
"description": "All todo lists",
|
|
5
|
+
"viewType": "grid",
|
|
6
|
+
"icon": "bi-list-ul",
|
|
7
|
+
"dataSources": [{
|
|
8
|
+
"entityCode": "todo_list",
|
|
9
|
+
"columns": [
|
|
10
|
+
{ "column_cd": "name", "width": 200 },
|
|
11
|
+
{ "column_cd": "color", "width": 80 },
|
|
12
|
+
{ "column_cd": "description", "width": 400 }
|
|
13
|
+
],
|
|
14
|
+
"order": ["name"]
|
|
15
|
+
}]
|
|
16
|
+
},
|
|
17
|
+
"todo_item_grid": {
|
|
18
|
+
"label": "All Items",
|
|
19
|
+
"description": "All todo items across all lists",
|
|
20
|
+
"viewType": "grid",
|
|
21
|
+
"icon": "bi-check-square",
|
|
22
|
+
"dataSources": [{
|
|
23
|
+
"entityCode": "todo_item",
|
|
24
|
+
"columns": [
|
|
25
|
+
{ "column_cd": "title", "width": 300 },
|
|
26
|
+
{ "column_cd": "list", "width": 150 },
|
|
27
|
+
{ "column_cd": "priority", "width": 100 },
|
|
28
|
+
{ "column_cd": "done", "width": 80 },
|
|
29
|
+
{ "column_cd": "due_date", "width": 120 },
|
|
30
|
+
{ "column_cd": "owner_id", "width": 150 }
|
|
31
|
+
],
|
|
32
|
+
"order": ["due_date"]
|
|
33
|
+
}]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"todo_menu": {
|
|
3
|
+
"label": "Todos",
|
|
4
|
+
"items": {
|
|
5
|
+
"lists": {
|
|
6
|
+
"orderNum": 1,
|
|
7
|
+
"label": "Lists & Items",
|
|
8
|
+
"icon": "check-square",
|
|
9
|
+
"children": {
|
|
10
|
+
"all_lists": {
|
|
11
|
+
"itemType": "V",
|
|
12
|
+
"label": "Lists",
|
|
13
|
+
"icon": "list-ul",
|
|
14
|
+
"dataViewCode": "todo_list_grid",
|
|
15
|
+
"orderNum": 1
|
|
16
|
+
},
|
|
17
|
+
"all_items": {
|
|
18
|
+
"itemType": "V",
|
|
19
|
+
"label": "All Items",
|
|
20
|
+
"icon": "check2-square",
|
|
21
|
+
"dataViewCode": "todo_item_grid",
|
|
22
|
+
"orderNum": 2
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|