@jskit-ai/users-web 0.1.4

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 (97) hide show
  1. package/package.descriptor.mjs +507 -0
  2. package/package.json +31 -0
  3. package/src/client/components/ConsoleSettingsClientElement.vue +24 -0
  4. package/src/client/components/MembersAdminClientElement.vue +404 -0
  5. package/src/client/components/ProfileClientElement.vue +242 -0
  6. package/src/client/components/UsersProfileSurfaceSwitchMenuItem.vue +39 -0
  7. package/src/client/components/UsersShellMenuLinkItem.vue +140 -0
  8. package/src/client/components/UsersSurfaceAwareMenuLinkItem.vue +87 -0
  9. package/src/client/components/UsersWorkspaceMembersMenuItem.vue +36 -0
  10. package/src/client/components/UsersWorkspacePermissionMenuItem.vue +90 -0
  11. package/src/client/components/UsersWorkspaceSelector.vue +237 -0
  12. package/src/client/components/UsersWorkspaceSettingsMenuItem.vue +39 -0
  13. package/src/client/components/UsersWorkspaceToolsWidget.vue +23 -0
  14. package/src/client/components/WorkspaceMembersClientElement.vue +663 -0
  15. package/src/client/components/WorkspaceSettingsClientElement.vue +230 -0
  16. package/src/client/components/WorkspacesClientElement.vue +514 -0
  17. package/src/client/composables/accountSettingsAvatarUploadRuntime.js +241 -0
  18. package/src/client/composables/accountSettingsInvitesRuntime.js +88 -0
  19. package/src/client/composables/accountSettingsRuntimeConstants.js +77 -0
  20. package/src/client/composables/accountSettingsRuntimeHelpers.js +75 -0
  21. package/src/client/composables/errorMessageHelpers.js +66 -0
  22. package/src/client/composables/internal/useOperationScope.js +144 -0
  23. package/src/client/composables/modelStateHelpers.js +49 -0
  24. package/src/client/composables/operationUiHelpers.js +121 -0
  25. package/src/client/composables/operationValidationHelpers.js +52 -0
  26. package/src/client/composables/refValueHelpers.js +19 -0
  27. package/src/client/composables/scopeHelpers.js +145 -0
  28. package/src/client/composables/useAccess.js +109 -0
  29. package/src/client/composables/useAccountSettingsRuntime.js +533 -0
  30. package/src/client/composables/useAddEdit.js +135 -0
  31. package/src/client/composables/useAddEditCore.js +137 -0
  32. package/src/client/composables/useBootstrapQuery.js +52 -0
  33. package/src/client/composables/useCommand.js +112 -0
  34. package/src/client/composables/useCommandCore.js +130 -0
  35. package/src/client/composables/useEndpointResource.js +104 -0
  36. package/src/client/composables/useFieldErrorBag.js +61 -0
  37. package/src/client/composables/useList.js +85 -0
  38. package/src/client/composables/useListCore.js +65 -0
  39. package/src/client/composables/usePagedCollection.js +125 -0
  40. package/src/client/composables/usePaths.js +108 -0
  41. package/src/client/composables/useRealtimeQueryInvalidation.js +105 -0
  42. package/src/client/composables/useScopeRuntime.js +107 -0
  43. package/src/client/composables/useSurfaceRouteContext.js +31 -0
  44. package/src/client/composables/useUiFeedback.js +96 -0
  45. package/src/client/composables/useView.js +89 -0
  46. package/src/client/composables/useViewCore.js +104 -0
  47. package/src/client/composables/useWorkspaceRouteContext.js +28 -0
  48. package/src/client/composables/useWorkspaceSurfaceId.js +43 -0
  49. package/src/client/index.js +7 -0
  50. package/src/client/lib/bootstrap.js +95 -0
  51. package/src/client/lib/httpClient.js +67 -0
  52. package/src/client/lib/menuIcons.js +192 -0
  53. package/src/client/lib/permissions.js +34 -0
  54. package/src/client/lib/profileSurfaceMenuLinks.js +142 -0
  55. package/src/client/lib/surfaceAccessPolicy.js +350 -0
  56. package/src/client/lib/theme.js +99 -0
  57. package/src/client/lib/workspaceLinkResolver.js +207 -0
  58. package/src/client/lib/workspaceSurfaceContext.js +82 -0
  59. package/src/client/lib/workspaceSurfacePaths.js +163 -0
  60. package/src/client/providers/UsersWebClientProvider.js +85 -0
  61. package/src/client/runtime/bootstrapPlacementRouteGuards.js +371 -0
  62. package/src/client/runtime/bootstrapPlacementRuntime.js +413 -0
  63. package/src/client/runtime/bootstrapPlacementRuntimeConstants.js +32 -0
  64. package/src/client/runtime/bootstrapPlacementRuntimeHelpers.js +157 -0
  65. package/src/client/support/contractGuards.js +34 -0
  66. package/src/client/support/realtimeWorkspace.js +12 -0
  67. package/src/client/support/runtimeNormalization.js +27 -0
  68. package/src/client/support/workspaceQueryKeys.js +15 -0
  69. package/templates/packages/main/src/client/components/AccountPendingInvitesCue.vue +162 -0
  70. package/templates/src/components/WorkspaceNotFoundCard.vue +33 -0
  71. package/templates/src/components/account/settings/AccountSettingsClientElement.vue +153 -0
  72. package/templates/src/components/account/settings/AccountSettingsInvitesSection.vue +77 -0
  73. package/templates/src/components/account/settings/AccountSettingsNotificationsSection.vue +55 -0
  74. package/templates/src/components/account/settings/AccountSettingsPreferencesSection.vue +125 -0
  75. package/templates/src/components/account/settings/AccountSettingsProfileSection.vue +94 -0
  76. package/templates/src/composables/useWorkspaceNotFoundState.js +48 -0
  77. package/templates/src/pages/account/index.vue +17 -0
  78. package/templates/src/pages/admin/members/index.vue +7 -0
  79. package/templates/src/pages/admin/workspace/settings/index.vue +16 -0
  80. package/templates/src/pages/console/settings/index.vue +16 -0
  81. package/templates/src/surfaces/admin/index.vue +29 -0
  82. package/templates/src/surfaces/admin/root.vue +20 -0
  83. package/templates/src/surfaces/app/index.vue +27 -0
  84. package/templates/src/surfaces/app/root.vue +20 -0
  85. package/test/bootstrap.test.js +38 -0
  86. package/test/bootstrapPlacementRuntime.test.js +991 -0
  87. package/test/errorMessageHelpers.test.js +28 -0
  88. package/test/exportsContract.test.js +39 -0
  89. package/test/menuIcons.test.js +33 -0
  90. package/test/permissions.test.js +35 -0
  91. package/test/profileSurfaceMenuLinks.test.js +207 -0
  92. package/test/refValueHelpers.test.js +14 -0
  93. package/test/scopeHelpers.test.js +57 -0
  94. package/test/surfaceAccessPolicy.test.js +129 -0
  95. package/test/theme.test.js +95 -0
  96. package/test/workspaceLinkResolver.test.js +61 -0
  97. package/test/workspaceSurfacePaths.test.js +39 -0
@@ -0,0 +1,507 @@
1
+ export default Object.freeze({
2
+ packageVersion: 1,
3
+ packageId: "@jskit-ai/users-web",
4
+ version: "0.1.4",
5
+ description: "Users web module: workspace selector shell element plus workspace/profile/members UI elements.",
6
+ dependsOn: [
7
+ "@jskit-ai/http-runtime",
8
+ "@jskit-ai/shell-web",
9
+ "@jskit-ai/users-core"
10
+ ],
11
+ capabilities: {
12
+ provides: [
13
+ "users.web"
14
+ ],
15
+ requires: [
16
+ "runtime.web-placement",
17
+ "users.server-routes"
18
+ ]
19
+ },
20
+ runtime: {
21
+ server: {
22
+ providers: []
23
+ },
24
+ client: {
25
+ providers: [
26
+ {
27
+ entrypoint: "src/client/providers/UsersWebClientProvider.js",
28
+ export: "UsersWebClientProvider"
29
+ }
30
+ ]
31
+ }
32
+ },
33
+ metadata: {
34
+ client: {
35
+ optimizeDeps: {
36
+ include: [
37
+ "@uppy/core",
38
+ "@uppy/dashboard",
39
+ "@uppy/image-editor",
40
+ "@uppy/compressor",
41
+ "@uppy/xhr-upload"
42
+ ]
43
+ }
44
+ },
45
+ apiSummary: {
46
+ surfaces: [
47
+ {
48
+ subpath: "./client",
49
+ summary: "Exports users-web client provider registration surface."
50
+ },
51
+ {
52
+ subpath: "./client/providers/UsersWebClientProvider",
53
+ summary: "Exports users-web client provider class."
54
+ },
55
+ {
56
+ subpath: "./client/components/ProfileClientElement",
57
+ summary: "Exports profile settings client element scaffold component."
58
+ },
59
+ {
60
+ subpath: "./client/components/WorkspacesClientElement",
61
+ summary: "Exports workspace chooser client element component."
62
+ },
63
+ {
64
+ subpath: "./client/components/WorkspaceMembersClientElement",
65
+ summary: "Exports workspace members admin client element component."
66
+ },
67
+ {
68
+ subpath: "./client/composables/useAddEdit",
69
+ summary: "Exports add/edit operation composable."
70
+ },
71
+ {
72
+ subpath: "./client/composables/useList",
73
+ summary: "Exports list operation composable."
74
+ },
75
+ {
76
+ subpath: "./client/composables/useCommand",
77
+ summary: "Exports command operation composable."
78
+ },
79
+ {
80
+ subpath: "./client/composables/useView",
81
+ summary: "Exports read/view operation composable."
82
+ },
83
+ {
84
+ subpath: "./client/composables/usePagedCollection",
85
+ summary: "Exports paged collection query composable."
86
+ },
87
+ {
88
+ subpath: "./client/composables/usePaths",
89
+ summary: "Exports surface/workspace path resolver composable."
90
+ },
91
+ {
92
+ subpath: "./client/composables/useAccountSettingsRuntime",
93
+ summary: "Exports account settings runtime composable for app-owned settings UI."
94
+ },
95
+ {
96
+ subpath: "./client/composables/useWorkspaceRouteContext",
97
+ summary: "Exports workspace route context composable."
98
+ },
99
+ {
100
+ subpath: "./client/support/realtimeWorkspace",
101
+ summary: "Exports workspace realtime event helpers."
102
+ }
103
+ ],
104
+ containerTokens: {
105
+ server: [],
106
+ client: [
107
+ "users.web.workspace.selector",
108
+ "users.web.workspace.tools.widget",
109
+ "users.web.shell.menu-link-item",
110
+ "users.web.shell.surface-aware-menu-link-item",
111
+ "users.web.profile.menu.surface-switch-item",
112
+ "users.web.workspace-settings.menu-item",
113
+ "users.web.workspace-members.menu-item",
114
+ "users.web.profile.element",
115
+ "users.web.members-admin.element",
116
+ "users.web.workspace-settings.element",
117
+ "users.web.bootstrap-placement.runtime"
118
+ ]
119
+ }
120
+ },
121
+ ui: {
122
+ placements: {
123
+ outlets: [
124
+ {
125
+ host: "workspace-tools",
126
+ position: "primary-menu",
127
+ surfaces: ["admin"],
128
+ source: "src/client/components/UsersWorkspaceToolsWidget.vue"
129
+ },
130
+ {
131
+ host: "workspace-settings",
132
+ position: "forms",
133
+ surfaces: ["admin"],
134
+ source: "templates/src/pages/admin/workspace/settings/index.vue"
135
+ },
136
+ {
137
+ host: "console-settings",
138
+ position: "forms",
139
+ surfaces: ["console"],
140
+ source: "templates/src/pages/console/settings/index.vue"
141
+ }
142
+ ],
143
+ contributions: [
144
+ {
145
+ id: "users.workspace.selector",
146
+ host: "shell-layout",
147
+ position: "top-left",
148
+ surfaces: ["*"],
149
+ order: 200,
150
+ componentToken: "users.web.workspace.selector",
151
+ when: "auth.authenticated === true",
152
+ source: "mutations.text#users-web-placement-block"
153
+ },
154
+ {
155
+ id: "users.account.invites.cue",
156
+ host: "shell-layout",
157
+ position: "top-right",
158
+ surfaces: ["*"],
159
+ order: 850,
160
+ componentToken: "local.main.account.pending-invites.cue",
161
+ when: "auth.authenticated === true",
162
+ source: "mutations.text#users-web-placement-block"
163
+ },
164
+ {
165
+ id: "users.profile.menu.surface-switch",
166
+ host: "auth-profile-menu",
167
+ position: "primary-menu",
168
+ surfaces: ["*"],
169
+ order: 100,
170
+ componentToken: "users.web.profile.menu.surface-switch-item",
171
+ when: "auth.authenticated === true",
172
+ source: "mutations.text#users-web-profile-surface-switch-placement"
173
+ },
174
+ {
175
+ id: "users.profile.menu.settings",
176
+ host: "auth-profile-menu",
177
+ position: "primary-menu",
178
+ surfaces: ["*"],
179
+ order: 500,
180
+ componentToken: "users.web.shell.menu-link-item",
181
+ when: "auth.authenticated === true",
182
+ source: "mutations.text#users-web-profile-settings-placement"
183
+ },
184
+ {
185
+ id: "users.workspace.tools.widget",
186
+ host: "shell-layout",
187
+ position: "top-right",
188
+ surfaces: ["admin"],
189
+ order: 900,
190
+ componentToken: "users.web.workspace.tools.widget",
191
+ source: "mutations.text#users-web-placement-block"
192
+ },
193
+ {
194
+ id: "users.workspace.menu.workspace-settings",
195
+ host: "workspace-tools",
196
+ position: "primary-menu",
197
+ surfaces: ["admin"],
198
+ order: 100,
199
+ componentToken: "users.web.workspace-settings.menu-item",
200
+ source: "mutations.text#users-web-placement-block"
201
+ },
202
+ {
203
+ id: "users.workspace.menu.members",
204
+ host: "workspace-tools",
205
+ position: "primary-menu",
206
+ surfaces: ["admin"],
207
+ order: 200,
208
+ componentToken: "users.web.workspace-members.menu-item",
209
+ source: "mutations.text#users-web-placement-block"
210
+ },
211
+ {
212
+ id: "users.console.menu.settings",
213
+ host: "shell-layout",
214
+ position: "primary-menu",
215
+ surfaces: ["console"],
216
+ order: 100,
217
+ componentToken: "users.web.shell.menu-link-item",
218
+ when: "auth.authenticated === true",
219
+ source: "mutations.text#users-web-console-settings-placement"
220
+ },
221
+ {
222
+ id: "users.workspace.settings.form",
223
+ host: "workspace-settings",
224
+ position: "forms",
225
+ surfaces: ["admin"],
226
+ order: 100,
227
+ componentToken: "users.web.workspace-settings.element",
228
+ source: "mutations.text#users-web-workspace-settings-form-placement"
229
+ }
230
+ ]
231
+ }
232
+ }
233
+ },
234
+ mutations: {
235
+ dependencies: {
236
+ runtime: {
237
+ "@tanstack/vue-query": "^5.90.5",
238
+ "@mdi/js": "^7.4.47",
239
+ "@uppy/compressor": "^3.1.0",
240
+ "@uppy/core": "^5.2.0",
241
+ "@uppy/dashboard": "^5.1.1",
242
+ "@uppy/image-editor": "^4.2.0",
243
+ "@uppy/xhr-upload": "^5.1.1",
244
+ "@jskit-ai/http-runtime": "0.1.4",
245
+ "@jskit-ai/realtime": "0.1.4",
246
+ "@jskit-ai/kernel": "0.1.4",
247
+ "@jskit-ai/shell-web": "0.1.4",
248
+ "@jskit-ai/users-core": "0.1.4",
249
+ "vuetify": "^4.0.0"
250
+ },
251
+ dev: {}
252
+ },
253
+ packageJson: {
254
+ scripts: {}
255
+ },
256
+ procfile: {},
257
+ files: [
258
+ {
259
+ from: "templates/src/pages/account/index.vue",
260
+ to: "src/pages/account/index.vue",
261
+ reason: "Install app-owned account surface root page scaffold.",
262
+ category: "users-web",
263
+ id: "users-web-page-account-root"
264
+ },
265
+ {
266
+ from: "templates/src/components/account/settings/AccountSettingsClientElement.vue",
267
+ to: "src/components/account/settings/AccountSettingsClientElement.vue",
268
+ reason: "Install app-owned account settings container component scaffold.",
269
+ category: "users-web",
270
+ id: "users-web-component-account-settings-root"
271
+ },
272
+ {
273
+ from: "templates/src/components/account/settings/AccountSettingsProfileSection.vue",
274
+ to: "src/components/account/settings/AccountSettingsProfileSection.vue",
275
+ reason: "Install app-owned account settings profile section scaffold.",
276
+ category: "users-web",
277
+ id: "users-web-component-account-settings-profile"
278
+ },
279
+ {
280
+ from: "templates/src/components/account/settings/AccountSettingsPreferencesSection.vue",
281
+ to: "src/components/account/settings/AccountSettingsPreferencesSection.vue",
282
+ reason: "Install app-owned account settings preferences section scaffold.",
283
+ category: "users-web",
284
+ id: "users-web-component-account-settings-preferences"
285
+ },
286
+ {
287
+ from: "templates/src/components/account/settings/AccountSettingsNotificationsSection.vue",
288
+ to: "src/components/account/settings/AccountSettingsNotificationsSection.vue",
289
+ reason: "Install app-owned account settings notifications section scaffold.",
290
+ category: "users-web",
291
+ id: "users-web-component-account-settings-notifications"
292
+ },
293
+ {
294
+ from: "templates/src/components/account/settings/AccountSettingsInvitesSection.vue",
295
+ to: "src/components/account/settings/AccountSettingsInvitesSection.vue",
296
+ reason: "Install app-owned account settings invites section scaffold.",
297
+ category: "users-web",
298
+ id: "users-web-component-account-settings-invites"
299
+ },
300
+ {
301
+ from: "templates/packages/main/src/client/components/AccountPendingInvitesCue.vue",
302
+ to: "packages/main/src/client/components/AccountPendingInvitesCue.vue",
303
+ reason: "Install app-owned account pending invites cue component scaffold.",
304
+ category: "users-web",
305
+ id: "users-web-main-component-account-pending-invites-cue"
306
+ },
307
+ {
308
+ from: "templates/src/components/WorkspaceNotFoundCard.vue",
309
+ to: "src/components/WorkspaceNotFoundCard.vue",
310
+ reason: "Install app-owned workspace not-found card component used by workspace-dependent surfaces.",
311
+ category: "users-web",
312
+ id: "users-web-component-workspace-not-found-card",
313
+ when: {
314
+ config: "tenancyMode",
315
+ in: ["personal", "workspace"]
316
+ }
317
+ },
318
+ {
319
+ from: "templates/src/composables/useWorkspaceNotFoundState.js",
320
+ to: "src/composables/useWorkspaceNotFoundState.js",
321
+ reason: "Install app-owned workspace bootstrap status composable for workspace-dependent surfaces.",
322
+ category: "users-web",
323
+ id: "users-web-composable-workspace-not-found-state",
324
+ when: {
325
+ config: "tenancyMode",
326
+ in: ["personal", "workspace"]
327
+ }
328
+ },
329
+ {
330
+ from: "templates/src/surfaces/app/root.vue",
331
+ toSurface: "app",
332
+ toSurfaceRoot: true,
333
+ reason: "Install workspace app surface wrapper shell for users-web.",
334
+ category: "users-web",
335
+ id: "users-web-page-app-wrapper",
336
+ when: {
337
+ config: "tenancyMode",
338
+ in: ["personal", "workspace"]
339
+ }
340
+ },
341
+ {
342
+ from: "templates/src/surfaces/app/index.vue",
343
+ toSurface: "app",
344
+ toSurfacePath: "index.vue",
345
+ reason: "Install workspace app surface starter page scaffold for users-web.",
346
+ category: "users-web",
347
+ id: "users-web-page-app-index",
348
+ when: {
349
+ config: "tenancyMode",
350
+ in: ["personal", "workspace"]
351
+ }
352
+ },
353
+ {
354
+ from: "templates/src/surfaces/admin/root.vue",
355
+ toSurface: "admin",
356
+ toSurfaceRoot: true,
357
+ reason: "Install workspace admin surface wrapper shell for users-web.",
358
+ category: "users-web",
359
+ id: "users-web-page-admin-wrapper",
360
+ when: {
361
+ config: "tenancyMode",
362
+ in: ["personal", "workspace"]
363
+ }
364
+ },
365
+ {
366
+ from: "templates/src/surfaces/admin/index.vue",
367
+ toSurface: "admin",
368
+ toSurfacePath: "index.vue",
369
+ reason: "Install workspace admin surface starter page scaffold for users-web.",
370
+ category: "users-web",
371
+ id: "users-web-page-admin-index",
372
+ when: {
373
+ config: "tenancyMode",
374
+ in: ["personal", "workspace"]
375
+ }
376
+ },
377
+ {
378
+ from: "templates/src/pages/admin/members/index.vue",
379
+ toSurface: "admin",
380
+ toSurfacePath: "members/index.vue",
381
+ reason: "Install admin members starter page scaffold for users-web members UI.",
382
+ category: "users-web",
383
+ id: "users-web-page-admin-members",
384
+ when: {
385
+ config: "tenancyMode",
386
+ in: ["personal", "workspace"]
387
+ }
388
+ },
389
+ {
390
+ from: "templates/src/pages/admin/workspace/settings/index.vue",
391
+ toSurface: "admin",
392
+ toSurfacePath: "workspace/settings/index.vue",
393
+ reason: "Install workspace settings page scaffold for users-web workspace admin UI.",
394
+ category: "users-web",
395
+ id: "users-web-page-admin-workspace-settings",
396
+ when: {
397
+ config: "tenancyMode",
398
+ in: ["personal", "workspace"]
399
+ }
400
+ },
401
+ {
402
+ from: "templates/src/pages/console/settings/index.vue",
403
+ toSurface: "console",
404
+ toSurfacePath: "settings/index.vue",
405
+ reason: "Install console settings page scaffold for users-web console UI.",
406
+ category: "users-web",
407
+ id: "users-web-page-console-settings"
408
+ },
409
+ ],
410
+ text: [
411
+ {
412
+ op: "append-text",
413
+ file: "config/public.js",
414
+ position: "bottom",
415
+ skipIfContains: "config.surfaceDefinitions.account = {",
416
+ value:
417
+ "\nconfig.surfaceDefinitions.account = {\n id: \"account\",\n label: \"Account\",\n pagesRoot: \"account\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n origin: \"\"\n};\n",
418
+ reason: "Register account surface definition in public surface config.",
419
+ category: "users-web",
420
+ id: "users-web-surface-config-account"
421
+ },
422
+ {
423
+ op: "append-text",
424
+ file: "src/placement.js",
425
+ position: "bottom",
426
+ skipIfContains: "id: \"users.workspace.selector\"",
427
+ value: "\naddPlacement({\n id: \"users.workspace.selector\",\n host: \"shell-layout\",\n position: \"top-left\",\n surfaces: [\"*\"],\n order: 200,\n componentToken: \"users.web.workspace.selector\",\n props: {\n allowOnNonWorkspaceSurface: true,\n targetSurfaceId: \"app\"\n },\n when: ({ auth }) => {\n return Boolean(auth?.authenticated);\n }\n});\n\naddPlacement({\n id: \"users.account.invites.cue\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"*\"],\n order: 850,\n componentToken: \"local.main.account.pending-invites.cue\",\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n\naddPlacement({\n id: \"users.workspace.tools.widget\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"admin\"],\n order: 900,\n componentToken: \"users.web.workspace.tools.widget\"\n});\n\naddPlacement({\n id: \"users.workspace.menu.workspace-settings\",\n host: \"workspace-tools\",\n position: \"primary-menu\",\n surfaces: [\"admin\"],\n order: 100,\n componentToken: \"users.web.workspace-settings.menu-item\"\n});\n\naddPlacement({\n id: \"users.workspace.menu.members\",\n host: \"workspace-tools\",\n position: \"primary-menu\",\n surfaces: [\"admin\"],\n order: 200,\n componentToken: \"users.web.workspace-members.menu-item\"\n});\n",
428
+ reason: "Append users-web placement entries into app-owned placement registry.",
429
+ category: "users-web",
430
+ id: "users-web-placement-block",
431
+ when: {
432
+ config: "tenancyMode",
433
+ in: ["personal", "workspace"]
434
+ }
435
+ },
436
+ {
437
+ op: "append-text",
438
+ file: "packages/main/src/client/providers/MainClientProvider.js",
439
+ position: "top",
440
+ skipIfContains: "import AccountPendingInvitesCue from \"../components/AccountPendingInvitesCue.vue\";",
441
+ value: "import AccountPendingInvitesCue from \"../components/AccountPendingInvitesCue.vue\";\n",
442
+ reason: "Bind app-owned account pending invites cue component into local main client provider imports.",
443
+ category: "users-web",
444
+ id: "users-web-main-client-provider-account-invites-import"
445
+ },
446
+ {
447
+ op: "append-text",
448
+ file: "packages/main/src/client/providers/MainClientProvider.js",
449
+ position: "bottom",
450
+ skipIfContains: "registerMainClientComponent(\"local.main.account.pending-invites.cue\", () => AccountPendingInvitesCue);",
451
+ value:
452
+ "\nregisterMainClientComponent(\"local.main.account.pending-invites.cue\", () => AccountPendingInvitesCue);\n",
453
+ reason: "Bind app-owned account pending invites cue component token into local main client provider registry.",
454
+ category: "users-web",
455
+ id: "users-web-main-client-provider-account-invites-register"
456
+ },
457
+ {
458
+ op: "append-text",
459
+ file: "src/placement.js",
460
+ position: "bottom",
461
+ skipIfContains: "id: \"users.profile.menu.surface-switch\"",
462
+ value:
463
+ "\naddPlacement({\n id: \"users.profile.menu.surface-switch\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 100,\n componentToken: \"users.web.profile.menu.surface-switch-item\",\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
464
+ reason: "Append users-web profile surface switch placement into app-owned placement registry.",
465
+ category: "users-web",
466
+ id: "users-web-profile-surface-switch-placement"
467
+ },
468
+ {
469
+ op: "append-text",
470
+ file: "src/placement.js",
471
+ position: "bottom",
472
+ skipIfContains: "id: \"users.profile.menu.settings\"",
473
+ value:
474
+ "\naddPlacement({\n id: \"users.profile.menu.settings\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 500,\n componentToken: \"users.web.shell.menu-link-item\",\n props: {\n label: \"Settings\",\n to: \"/account\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
475
+ reason: "Append users-web profile settings menu placement into app-owned placement registry.",
476
+ category: "users-web",
477
+ id: "users-web-profile-settings-placement"
478
+ },
479
+ {
480
+ op: "append-text",
481
+ file: "src/placement.js",
482
+ position: "bottom",
483
+ skipIfContains: "id: \"users.console.menu.settings\"",
484
+ value:
485
+ "\naddPlacement({\n id: \"users.console.menu.settings\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: [\"console\"],\n order: 100,\n componentToken: \"users.web.shell.menu-link-item\",\n props: {\n label: \"Settings\",\n to: \"/console/settings\",\n icon: \"mdi-cog-outline\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
486
+ reason: "Append users-web console settings menu placement into app-owned placement registry.",
487
+ category: "users-web",
488
+ id: "users-web-console-settings-placement"
489
+ },
490
+ {
491
+ op: "append-text",
492
+ file: "src/placement.js",
493
+ position: "bottom",
494
+ skipIfContains: "id: \"users.workspace.settings.form\"",
495
+ value:
496
+ "\naddPlacement({\n id: \"users.workspace.settings.form\",\n host: \"workspace-settings\",\n position: \"forms\",\n surfaces: [\"admin\"],\n order: 100,\n componentToken: \"users.web.workspace-settings.element\"\n});\n",
497
+ reason: "Append users-web workspace settings form placement into app-owned placement registry.",
498
+ category: "users-web",
499
+ id: "users-web-workspace-settings-form-placement",
500
+ when: {
501
+ config: "tenancyMode",
502
+ in: ["personal", "workspace"]
503
+ }
504
+ }
505
+ ]
506
+ }
507
+ });
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@jskit-ai/users-web",
3
+ "version": "0.1.4",
4
+ "type": "module",
5
+ "scripts": {
6
+ "test": "node --test"
7
+ },
8
+ "exports": {
9
+ "./client": "./src/client/index.js",
10
+ "./client/components/WorkspaceMembersClientElement": "./src/client/components/WorkspaceMembersClientElement.vue",
11
+ "./client/composables/useAddEdit": "./src/client/composables/useAddEdit.js",
12
+ "./client/composables/useList": "./src/client/composables/useList.js",
13
+ "./client/composables/useCommand": "./src/client/composables/useCommand.js",
14
+ "./client/composables/useView": "./src/client/composables/useView.js",
15
+ "./client/composables/usePagedCollection": "./src/client/composables/usePagedCollection.js",
16
+ "./client/composables/useAccountSettingsRuntime": "./src/client/composables/useAccountSettingsRuntime.js",
17
+ "./client/composables/usePaths": "./src/client/composables/usePaths.js",
18
+ "./client/composables/useWorkspaceRouteContext": "./src/client/composables/useWorkspaceRouteContext.js",
19
+ "./client/support/realtimeWorkspace": "./src/client/support/realtimeWorkspace.js"
20
+ },
21
+ "dependencies": {
22
+ "@tanstack/vue-query": "^5.90.5",
23
+ "@mdi/js": "^7.4.47",
24
+ "@jskit-ai/users-core": "0.1.4",
25
+ "@jskit-ai/realtime": "0.1.4",
26
+ "@jskit-ai/http-runtime": "0.1.4",
27
+ "@jskit-ai/kernel": "0.1.4",
28
+ "@jskit-ai/shell-web": "0.1.4",
29
+ "vuetify": "^4.0.0"
30
+ }
31
+ }
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <v-container fluid class="console-home pa-0">
3
+ <v-row class="ma-0" justify="center">
4
+ <v-col cols="12" sm="10" md="9" lg="7">
5
+ <v-sheet class="pa-6 pa-sm-8" rounded="lg" border>
6
+ <h1 class="text-h5 text-sm-h4 mb-3">Console settings</h1>
7
+ <p class="text-body-2 text-sm-body-1 mb-0">
8
+ No console settings are provided by <code>@jskit-ai/users-web</code>. Install a module that contributes
9
+ forms to <code>console.settings.forms</code>.
10
+ </p>
11
+ </v-sheet>
12
+ </v-col>
13
+ </v-row>
14
+ </v-container>
15
+ </template>
16
+
17
+ <style scoped>
18
+ .console-home {
19
+ min-height: min(100vh, 700px);
20
+ display: grid;
21
+ align-content: start;
22
+ padding-top: clamp(16px, 4vh, 48px);
23
+ }
24
+ </style>