@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.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/demo.app.yml +4 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/main.menu.yml +30 -0
- package/dist/modules/kitchen-sink/kitchen_sink.data.yml +18 -0
- package/dist/modules/kitchen-sink/kitchen_sink.object.yml +154 -0
- package/dist/modules/projects/pages/create_project_wizard.page.yml +244 -0
- package/dist/modules/projects/pages/project_detail.page.yml +258 -0
- package/dist/modules/projects/project_approval.workflow.yml +51 -0
- package/dist/modules/projects/project_status.report.yml +39 -0
- package/dist/modules/projects/projects.action.d.ts +104 -0
- package/dist/modules/projects/projects.action.js +363 -0
- package/dist/modules/projects/projects.action.js.map +1 -0
- package/dist/modules/projects/projects.data.yml +13 -0
- package/dist/modules/projects/projects.form.yml +41 -0
- package/dist/modules/projects/projects.hook.d.ts +15 -0
- package/dist/modules/projects/projects.hook.js +302 -0
- package/dist/modules/projects/projects.hook.js.map +1 -0
- package/dist/modules/projects/projects.object.yml +148 -0
- package/dist/modules/projects/projects.permission.yml +141 -0
- package/dist/modules/projects/projects.validation.yml +37 -0
- package/dist/modules/projects/projects.view.yml +35 -0
- package/dist/modules/tasks/tasks.data.yml +23 -0
- package/dist/modules/tasks/tasks.object.yml +34 -0
- package/dist/modules/tasks/tasks.permission.yml +167 -0
- package/dist/pages/dashboard.page.yml +206 -0
- package/dist/pages/landing.page.yml +275 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/kitchen_sink.d.ts +99 -0
- package/dist/types/kitchen_sink.js +3 -0
- package/dist/types/kitchen_sink.js.map +1 -0
- package/dist/types/projects.d.ts +47 -0
- package/dist/types/projects.js +3 -0
- package/dist/types/projects.js.map +1 -0
- package/dist/types/tasks.d.ts +31 -0
- package/dist/types/tasks.js +3 -0
- package/dist/types/tasks.js.map +1 -0
- 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,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"}
|