@objectql/starter-basic 1.6.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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/demo.app.yml +4 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +18 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/main.menu.yml +30 -0
  8. package/dist/modules/kitchen-sink/kitchen_sink.data.yml +18 -0
  9. package/dist/modules/kitchen-sink/kitchen_sink.object.yml +154 -0
  10. package/dist/modules/projects/pages/create_project_wizard.page.yml +244 -0
  11. package/dist/modules/projects/pages/project_detail.page.yml +258 -0
  12. package/dist/modules/projects/project_approval.workflow.yml +51 -0
  13. package/dist/modules/projects/project_status.report.yml +39 -0
  14. package/dist/modules/projects/projects.action.d.ts +104 -0
  15. package/dist/modules/projects/projects.action.js +363 -0
  16. package/dist/modules/projects/projects.action.js.map +1 -0
  17. package/dist/modules/projects/projects.data.yml +13 -0
  18. package/dist/modules/projects/projects.form.yml +41 -0
  19. package/dist/modules/projects/projects.hook.d.ts +15 -0
  20. package/dist/modules/projects/projects.hook.js +302 -0
  21. package/dist/modules/projects/projects.hook.js.map +1 -0
  22. package/dist/modules/projects/projects.object.yml +148 -0
  23. package/dist/modules/projects/projects.permission.yml +141 -0
  24. package/dist/modules/projects/projects.validation.yml +37 -0
  25. package/dist/modules/projects/projects.view.yml +35 -0
  26. package/dist/modules/tasks/tasks.data.yml +23 -0
  27. package/dist/modules/tasks/tasks.object.yml +34 -0
  28. package/dist/modules/tasks/tasks.permission.yml +167 -0
  29. package/dist/pages/dashboard.page.yml +206 -0
  30. package/dist/pages/landing.page.yml +275 -0
  31. package/dist/types/index.d.ts +3 -0
  32. package/dist/types/index.js +20 -0
  33. package/dist/types/index.js.map +1 -0
  34. package/dist/types/kitchen_sink.d.ts +99 -0
  35. package/dist/types/kitchen_sink.js +3 -0
  36. package/dist/types/kitchen_sink.js.map +1 -0
  37. package/dist/types/projects.d.ts +47 -0
  38. package/dist/types/projects.js +3 -0
  39. package/dist/types/projects.js.map +1 -0
  40. package/dist/types/tasks.d.ts +31 -0
  41. package/dist/types/tasks.js +3 -0
  42. package/dist/types/tasks.js.map +1 -0
  43. package/package.json +38 -0
@@ -0,0 +1,34 @@
1
+ label: Task
2
+ icon: checkbox-circle-line
3
+ fields:
4
+ name:
5
+ type: text
6
+ required: true
7
+ index: true # Simple index
8
+
9
+ project:
10
+ reference_to: projects
11
+
12
+ due_date:
13
+ type: date
14
+
15
+ completed:
16
+ type: boolean
17
+ defaultValue: false
18
+ index: true # Helpful for finding pending tasks
19
+
20
+ priority:
21
+ options:
22
+ - low
23
+ - medium
24
+ - high
25
+ defaultValue: medium
26
+
27
+ assigned_to:
28
+ type: text
29
+ label: Assignee
30
+
31
+ estimated_hours:
32
+ type: number
33
+ label: Estimated Hours
34
+
@@ -0,0 +1,167 @@
1
+ name: tasks_permission
2
+ object: tasks
3
+ description: "Advanced permission rules for Task object demonstrating complex scenarios"
4
+
5
+ # Roles (defined in demo.app.yml, referenced here)
6
+ # This list documents which system roles have permissions on this object
7
+ roles:
8
+ - admin
9
+ - project_manager
10
+ - team_lead
11
+ - developer
12
+ - viewer
13
+
14
+ # Object-level permissions (CRUD)
15
+ object_permissions:
16
+ create: [admin, project_manager, team_lead, developer]
17
+ read: [admin, project_manager, team_lead, developer, viewer]
18
+ update: [admin, project_manager, team_lead, developer]
19
+ delete: [admin, project_manager, team_lead]
20
+ view_all: [admin, project_manager]
21
+ modify_all: [admin]
22
+
23
+ # Field-level security
24
+ field_permissions:
25
+ estimated_hours:
26
+ read: [admin, project_manager, team_lead]
27
+ update: [admin, project_manager, team_lead]
28
+
29
+ priority:
30
+ read: [admin, project_manager, team_lead, developer, viewer]
31
+ update: [admin, project_manager, team_lead]
32
+
33
+ assigned_to:
34
+ read: [admin, project_manager, team_lead, developer, viewer]
35
+ update: [admin, project_manager, team_lead]
36
+
37
+ # Record-level rules with complex conditions
38
+ record_rules:
39
+ - name: assignee_full_access
40
+ priority: 100
41
+ description: Assignee has full access to assigned tasks
42
+ condition:
43
+ type: simple
44
+ field: assigned_to
45
+ operator: "="
46
+ value: $current_user.id
47
+ permissions:
48
+ read: true
49
+ update: true
50
+ delete: false
51
+
52
+ - name: team_lead_access
53
+ priority: 90
54
+ description: Team leads can access all tasks in their team's projects
55
+ condition:
56
+ type: lookup
57
+ object: projects
58
+ via: project
59
+ condition:
60
+ type: simple
61
+ field: owner
62
+ operator: "="
63
+ value: $current_user.id
64
+ permissions:
65
+ read: true
66
+ update: true
67
+ delete: true
68
+
69
+ - name: completed_tasks_readonly
70
+ priority: 50
71
+ description: Completed tasks are read-only for non-admins
72
+ condition:
73
+ type: simple
74
+ field: completed
75
+ operator: "="
76
+ value: true
77
+ permissions:
78
+ read: true
79
+ update: false
80
+ delete: false
81
+
82
+ - name: high_priority_manager_only
83
+ priority: 80
84
+ description: Only managers can edit high priority tasks
85
+ condition:
86
+ type: simple
87
+ field: priority
88
+ operator: "="
89
+ value: high
90
+ permissions:
91
+ read: true
92
+ update: false
93
+ delete: false
94
+
95
+ # Sharing rules
96
+ sharing_rules:
97
+ - name: manual_collaboration
98
+ type: manual
99
+ description: Users can share tasks with collaborators
100
+ enabled: true
101
+ permissions:
102
+ read: true
103
+ update: true
104
+ delete: false
105
+
106
+ - name: project_team_sharing
107
+ type: criteria
108
+ description: All project team members can see related tasks
109
+ condition:
110
+ type: simple
111
+ field: project
112
+ operator: "!="
113
+ value: null
114
+ shared_with:
115
+ type: role
116
+ roles: [developer, team_lead]
117
+ permissions:
118
+ read: true
119
+ update: false
120
+
121
+ # Row-level security
122
+ row_level_security:
123
+ enabled: true
124
+ default_rule:
125
+ field: assigned_to
126
+ operator: "="
127
+ value: $current_user.id
128
+ exceptions:
129
+ - role: admin
130
+ bypass: true
131
+ - role: project_manager
132
+ bypass: true
133
+ - role: team_lead
134
+ condition:
135
+ type: lookup
136
+ object: projects
137
+ via: project
138
+ condition:
139
+ type: simple
140
+ field: owner
141
+ operator: "="
142
+ value: $current_user.id
143
+
144
+ # Field masking for sensitive data
145
+ field_masking:
146
+ estimated_hours:
147
+ mask_format: "XX.X hours" # Mask numeric values appropriately
148
+ visible_to: [admin, project_manager, team_lead]
149
+
150
+ # Audit configuration
151
+ audit:
152
+ enabled: true
153
+ events:
154
+ - permission_grant
155
+ - permission_revoke
156
+ - access_denied
157
+ - sensitive_field_access
158
+ retention_days: 180
159
+ alerts:
160
+ - event: access_denied
161
+ threshold: 10
162
+ window_minutes: 15
163
+ notify: [admin, project_manager]
164
+ - event: sensitive_field_access
165
+ threshold: 50
166
+ window_minutes: 60
167
+ notify: [admin]
@@ -0,0 +1,206 @@
1
+ # Dashboard Page Example
2
+ # A comprehensive dashboard showing project metrics and tasks
3
+
4
+ name: dashboard
5
+ label: Project Dashboard
6
+ description: Overview of projects, tasks, and key metrics
7
+ icon: dashboard
8
+ layout: dashboard
9
+
10
+ # Page-level permissions
11
+ permissions:
12
+ view: ['admin', 'manager', 'user']
13
+ edit: ['admin', 'manager']
14
+
15
+ # SEO metadata
16
+ meta:
17
+ title: Project Dashboard - ObjectQL Demo
18
+ description: Real-time overview of project status and team performance
19
+
20
+ # Real-time updates
21
+ realtime: true
22
+
23
+ # Components arranged in a grid layout
24
+ components:
25
+ # KPI Metrics Row
26
+ - id: total_projects
27
+ type: metric
28
+ label: Total Projects
29
+ data_source:
30
+ object: projects
31
+ query:
32
+ op: count
33
+ config:
34
+ format: number
35
+ icon: folder
36
+ color: blue
37
+ grid:
38
+ x: 0
39
+ y: 0
40
+ w: 3
41
+ h: 2
42
+
43
+ - id: active_tasks
44
+ type: metric
45
+ label: Active Tasks
46
+ data_source:
47
+ object: tasks
48
+ filters:
49
+ - ['status', 'in', ['in_progress', 'pending']]
50
+ query:
51
+ op: count
52
+ config:
53
+ format: number
54
+ icon: check-circle
55
+ color: green
56
+ grid:
57
+ x: 3
58
+ y: 0
59
+ w: 3
60
+ h: 2
61
+
62
+ - id: overdue_tasks
63
+ type: metric
64
+ label: Overdue Tasks
65
+ data_source:
66
+ object: tasks
67
+ filters:
68
+ - ['due_date', '<', '{{today}}']
69
+ - 'and'
70
+ - ['status', '!=', 'completed']
71
+ query:
72
+ op: count
73
+ config:
74
+ format: number
75
+ icon: alert-circle
76
+ color: red
77
+ grid:
78
+ x: 6
79
+ y: 0
80
+ w: 3
81
+ h: 2
82
+
83
+ - id: completion_rate
84
+ type: metric
85
+ label: Completion Rate
86
+ data_source:
87
+ object: tasks
88
+ query:
89
+ op: aggregate
90
+ function: avg
91
+ field: completed
92
+ config:
93
+ format: percent
94
+ icon: trending-up
95
+ color: purple
96
+ grid:
97
+ x: 9
98
+ y: 0
99
+ w: 3
100
+ h: 2
101
+
102
+ # Charts Row
103
+ - id: projects_by_status
104
+ type: chart
105
+ label: Projects by Status
106
+ data_source:
107
+ object: projects
108
+ fields: ['status']
109
+ query:
110
+ op: group_by
111
+ field: status
112
+ aggregate: count
113
+ config:
114
+ chart_type: pie
115
+ colors: ['#10b981', '#3b82f6', '#f59e0b', '#ef4444']
116
+ grid:
117
+ x: 0
118
+ y: 2
119
+ w: 6
120
+ h: 4
121
+
122
+ - id: tasks_timeline
123
+ type: chart
124
+ label: Tasks Completion Timeline
125
+ data_source:
126
+ object: tasks
127
+ fields: ['created_at', 'completed_at']
128
+ query:
129
+ op: time_series
130
+ field: created_at
131
+ interval: week
132
+ config:
133
+ chart_type: line
134
+ show_trend: true
135
+ grid:
136
+ x: 6
137
+ y: 2
138
+ w: 6
139
+ h: 4
140
+
141
+ # Recent Tasks List
142
+ - id: recent_tasks
143
+ type: data_grid
144
+ label: Recent Tasks
145
+ data_source:
146
+ object: tasks
147
+ fields: ['name', 'status', 'priority', 'due_date', 'assigned_to']
148
+ sort: [['created_at', 'desc']]
149
+ limit: 10
150
+ expand:
151
+ assigned_to:
152
+ fields: ['name', 'email']
153
+ config:
154
+ columns:
155
+ - field: name
156
+ label: Task Name
157
+ width: 300
158
+ - field: status
159
+ label: Status
160
+ width: 120
161
+ badge: true
162
+ - field: priority
163
+ label: Priority
164
+ width: 100
165
+ - field: due_date
166
+ label: Due Date
167
+ width: 120
168
+ format: date
169
+ - field: assigned_to.name
170
+ label: Assigned To
171
+ width: 150
172
+ row_actions:
173
+ - label: View
174
+ action: navigate
175
+ path: /tasks/{{id}}
176
+ - label: Edit
177
+ action: open_modal
178
+ modal: edit_task
179
+ enable_search: true
180
+ enable_filters: true
181
+ grid:
182
+ x: 0
183
+ y: 6
184
+ w: 12
185
+ h: 6
186
+
187
+ # Page-level actions
188
+ actions:
189
+ refresh_data:
190
+ type: refresh
191
+ success_message: Data refreshed successfully
192
+
193
+ export_dashboard:
194
+ type: custom
195
+ handler: exportDashboardData
196
+ confirm: Export dashboard data to CSV?
197
+
198
+ # AI context for understanding this page
199
+ ai_context:
200
+ intent: Provide a comprehensive overview of project and task status
201
+ persona: Project managers and team leads
202
+ tasks:
203
+ - Monitor project progress
204
+ - Identify overdue tasks
205
+ - Track team performance
206
+ - Export data for reporting
@@ -0,0 +1,275 @@
1
+ # Custom Landing Page
2
+ # A canvas layout for flexible positioning
3
+
4
+ name: landing_page
5
+ label: Welcome
6
+ description: Custom landing page with free-form layout
7
+ icon: home
8
+ layout: canvas
9
+
10
+ # Public page - no authentication required
11
+ permissions:
12
+ view: ['*']
13
+
14
+ # Components with absolute positioning
15
+ components:
16
+ # Hero Section
17
+ - id: hero_section
18
+ type: container
19
+ style:
20
+ position: absolute
21
+ top: 0
22
+ left: 0
23
+ width: 100%
24
+ height: 400px
25
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)
26
+ padding: 60px 20px
27
+ components:
28
+ - id: hero_title
29
+ type: text
30
+ config:
31
+ content: Welcome to ObjectQL
32
+ format: markdown
33
+ style:
34
+ font_size: 48px
35
+ font_weight: bold
36
+ color: white
37
+ text_align: center
38
+ margin: 0 0 20px 0
39
+
40
+ - id: hero_subtitle
41
+ type: text
42
+ config:
43
+ content: One Protocol, Any Database, AI-Ready
44
+ format: text
45
+ style:
46
+ font_size: 24px
47
+ color: white
48
+ text_align: center
49
+ opacity: 0.9
50
+
51
+ - id: cta_button
52
+ type: button
53
+ label: Get Started
54
+ config:
55
+ variant: primary
56
+ size: large
57
+ style:
58
+ margin: 40px auto 0
59
+ display: block
60
+ width: 200px
61
+ actions:
62
+ on_click:
63
+ type: navigate
64
+ path: /dashboard
65
+
66
+ # Features Grid
67
+ - id: features_section
68
+ type: container
69
+ style:
70
+ position: absolute
71
+ top: 450px
72
+ left: 50%
73
+ transform: translateX(-50%)
74
+ width: 90%
75
+ max_width: 1200px
76
+ components:
77
+ - id: features_title
78
+ type: text
79
+ config:
80
+ content: '## Key Features'
81
+ format: markdown
82
+ style:
83
+ text_align: center
84
+ margin: 0 0 40px 0
85
+
86
+ - id: features_grid
87
+ type: container
88
+ style:
89
+ display: grid
90
+ grid_template_columns: repeat(3, 1fr)
91
+ gap: 30px
92
+ components:
93
+ - id: feature_1
94
+ type: container
95
+ style:
96
+ padding: 30px
97
+ background: white
98
+ border_radius: 8px
99
+ box_shadow: 0 2px 8px rgba(0,0,0,0.1)
100
+ components:
101
+ - id: feature_1_icon
102
+ type: image
103
+ config:
104
+ src: /icons/database.svg
105
+ alt: Database
106
+ style:
107
+ width: 64px
108
+ height: 64px
109
+ margin: 0 auto 20px
110
+ - id: feature_1_title
111
+ type: text
112
+ config:
113
+ content: '**Universal Engine**'
114
+ format: markdown
115
+ style:
116
+ text_align: center
117
+ margin: 0 0 10px 0
118
+ - id: feature_1_desc
119
+ type: text
120
+ config:
121
+ content: Run on MongoDB or PostgreSQL with the same API
122
+ format: text
123
+ style:
124
+ text_align: center
125
+ color: '#666'
126
+
127
+ - id: feature_2
128
+ type: container
129
+ style:
130
+ padding: 30px
131
+ background: white
132
+ border_radius: 8px
133
+ box_shadow: 0 2px 8px rgba(0,0,0,0.1)
134
+ components:
135
+ - id: feature_2_icon
136
+ type: image
137
+ config:
138
+ src: /icons/ai.svg
139
+ alt: AI
140
+ style:
141
+ width: 64px
142
+ height: 64px
143
+ margin: 0 auto 20px
144
+ - id: feature_2_title
145
+ type: text
146
+ config:
147
+ content: '**AI-Native**'
148
+ format: markdown
149
+ style:
150
+ text_align: center
151
+ margin: 0 0 10px 0
152
+ - id: feature_2_desc
153
+ type: text
154
+ config:
155
+ content: JSON-based queries perfect for LLM integration
156
+ format: text
157
+ style:
158
+ text_align: center
159
+ color: '#666'
160
+
161
+ - id: feature_3
162
+ type: container
163
+ style:
164
+ padding: 30px
165
+ background: white
166
+ border_radius: 8px
167
+ box_shadow: 0 2px 8px rgba(0,0,0,0.1)
168
+ components:
169
+ - id: feature_3_icon
170
+ type: image
171
+ config:
172
+ src: /icons/metadata.svg
173
+ alt: Metadata
174
+ style:
175
+ width: 64px
176
+ height: 64px
177
+ margin: 0 auto 20px
178
+ - id: feature_3_title
179
+ type: text
180
+ config:
181
+ content: '**Metadata-Driven**'
182
+ format: markdown
183
+ style:
184
+ text_align: center
185
+ margin: 0 0 10px 0
186
+ - id: feature_3_desc
187
+ type: text
188
+ config:
189
+ content: Define schemas in YAML with built-in validation
190
+ format: text
191
+ style:
192
+ text_align: center
193
+ color: '#666'
194
+
195
+ # Stats Section
196
+ - id: stats_section
197
+ type: container
198
+ style:
199
+ position: absolute
200
+ top: 900px
201
+ left: 0
202
+ width: 100%
203
+ background: '#f7fafc'
204
+ padding: 60px 20px
205
+ components:
206
+ - id: stats_grid
207
+ type: container
208
+ style:
209
+ display: grid
210
+ grid_template_columns: repeat(4, 1fr)
211
+ gap: 40px
212
+ max_width: 1200px
213
+ margin: 0 auto
214
+ components:
215
+ - id: stat_1
216
+ type: metric
217
+ label: Objects Created
218
+ data_source:
219
+ object: objects
220
+ query:
221
+ op: count
222
+ config:
223
+ format: number
224
+ size: large
225
+ color: blue
226
+
227
+ - id: stat_2
228
+ type: metric
229
+ label: Total Records
230
+ data_source:
231
+ object: records
232
+ query:
233
+ op: count
234
+ config:
235
+ format: number
236
+ size: large
237
+ color: green
238
+
239
+ - id: stat_3
240
+ type: metric
241
+ label: API Calls Today
242
+ config:
243
+ value: 12453
244
+ format: number
245
+ size: large
246
+ color: purple
247
+
248
+ - id: stat_4
249
+ type: metric
250
+ label: Uptime
251
+ config:
252
+ value: 99.9
253
+ format: percent
254
+ size: large
255
+ color: orange
256
+
257
+ # Responsive overrides
258
+ responsive:
259
+ mobile:
260
+ # Override grid layouts to single column
261
+ visible: true
262
+ tablet:
263
+ visible: true
264
+
265
+ # No real-time updates needed for landing page
266
+ realtime: false
267
+
268
+ # AI context
269
+ ai_context:
270
+ intent: Introduce users to ObjectQL and showcase key features
271
+ persona: New visitors and potential users
272
+ tasks:
273
+ - Learn about ObjectQL
274
+ - Understand key features
275
+ - Navigate to dashboard
@@ -0,0 +1,3 @@
1
+ export * from './kitchen_sink';
2
+ export * from './projects';
3
+ export * from './tasks';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./kitchen_sink"), exports);
18
+ __exportStar(require("./projects"), exports);
19
+ __exportStar(require("./tasks"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,6CAA2B;AAC3B,0CAAwB"}