@antelopejs/interface-dms 0.7.1 → 0.7.3

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 (75) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +70 -68
  3. package/dist/auth/db/models/sessions.model.d.ts +1 -0
  4. package/dist/auth/db/models/userExternalIdentities.model.d.ts +1 -0
  5. package/dist/auth/db/models/users.model.d.ts +1 -0
  6. package/dist/base/block-registry/index.d.ts +1 -0
  7. package/dist/base/block-registry/index.js +1 -0
  8. package/dist/base/block-registry/index.js.map +1 -1
  9. package/dist/base/block-registry/presentation.d.ts +21 -0
  10. package/dist/base/block-registry/presentation.js +108 -0
  11. package/dist/base/block-registry/presentation.js.map +1 -0
  12. package/dist/base/block-types.d.ts +1 -0
  13. package/dist/base/block-types.js +1 -0
  14. package/dist/base/block-types.js.map +1 -1
  15. package/dist/base/live-toggle.d.ts +2 -2
  16. package/dist/base/period-selector.d.ts +2 -2
  17. package/dist/base/placeholder.js +2 -2
  18. package/dist/base/placeholder.js.map +1 -1
  19. package/dist/base/table-view/schema.d.ts +4 -4
  20. package/dist/db/internal/exportJobs.model.d.ts +1 -0
  21. package/dist/db/internal/inviteResolutions.model.d.ts +1 -0
  22. package/dist/db/internal/tenantLifecycle.model.d.ts +1 -0
  23. package/dist/db/models/roles.model.d.ts +1 -0
  24. package/dist/db/models/tenantMembers.model.d.ts +1 -0
  25. package/dist/db/models/tenants.model.d.ts +1 -0
  26. package/dist/db/models/user_invites.model.d.ts +1 -0
  27. package/docs/.navigation.yml +2 -0
  28. package/docs/1.core/.navigation.yml +2 -0
  29. package/docs/1.core/1.introduction.md +169 -0
  30. package/docs/1.core/10.layout-banners.md +133 -0
  31. package/docs/1.core/2.pages-and-modules.md +649 -0
  32. package/docs/1.core/3.components.md +287 -0
  33. package/docs/1.core/4.permissions.md +279 -0
  34. package/docs/1.core/5.tenancy.md +358 -0
  35. package/docs/1.core/6.invites.md +239 -0
  36. package/docs/1.core/7.hooks.md +354 -0
  37. package/docs/1.core/8.realtime.md +147 -0
  38. package/docs/1.core/9.quick-actions.md +115 -0
  39. package/docs/2.auth/.navigation.yml +2 -0
  40. package/docs/2.auth/1.introduction.md +75 -0
  41. package/docs/2.auth/2.authentication.md +222 -0
  42. package/docs/2.auth/3.tokens-and-sessions.md +352 -0
  43. package/docs/2.auth/4.users.md +256 -0
  44. package/docs/2.auth/5.external-identities.md +122 -0
  45. package/docs/3.base/.navigation.yml +2 -0
  46. package/docs/3.base/1.introduction.md +202 -0
  47. package/docs/3.base/10.display-blocks.md +136 -0
  48. package/docs/3.base/2.types.md +402 -0
  49. package/docs/3.base/3.forms.md +349 -0
  50. package/docs/3.base/4.tables.md +608 -0
  51. package/docs/3.base/5.charts-and-widgets.md +466 -0
  52. package/docs/3.base/6.layout.md +437 -0
  53. package/docs/3.base/8.data-types.md +361 -0
  54. package/docs/3.base/9.helpers.md +414 -0
  55. package/docs/4.notifications/.navigation.yml +2 -0
  56. package/docs/4.notifications/1.introduction.md +81 -0
  57. package/docs/4.notifications/2.categories-and-subjects.md +214 -0
  58. package/docs/4.notifications/3.sending.md +285 -0
  59. package/docs/5.html-render/.navigation.yml +2 -0
  60. package/docs/5.html-render/1.introduction.md +386 -0
  61. package/docs/5.html-render/2.built-in-emails.md +157 -0
  62. package/docs/images/emails-admin-invite.png +0 -0
  63. package/docs/images/emails-change-notice.png +0 -0
  64. package/docs/images/emails-change-verification.png +0 -0
  65. package/docs/images/emails-digest-logo-dark.png +0 -0
  66. package/docs/images/emails-digest-logo-light.png +0 -0
  67. package/docs/images/emails-digest.png +0 -0
  68. package/docs/images/emails-export-partial.png +0 -0
  69. package/docs/images/emails-export-ready.png +0 -0
  70. package/docs/images/emails-reset-password.png +0 -0
  71. package/docs/images/emails-two-factor.png +0 -0
  72. package/docs/images/emails-user-validation.png +0 -0
  73. package/docs/index.md +109 -0
  74. package/docs/tsconfig.json +11 -0
  75. package/package.json +25 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,91 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.7.3
4
+
5
+ [compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.7.2...v0.7.3)
6
+
7
+ ### 🚀 Enhancements
8
+
9
+ - **preview:** Share simple options and document real outcomes ([#339](https://github.com/AntelopeJS/dms/pull/339))
10
+
11
+ ### 🩹 Fixes
12
+
13
+ - **docs:** Use a sandbox-compatible temporary build database ([#326](https://github.com/AntelopeJS/dms/pull/326))
14
+ - Install DMS frontend with the root workspace ([#322](https://github.com/AntelopeJS/dms/pull/322))
15
+ - **modules:** Top-align card content and place readouts below descriptions ([#328](https://github.com/AntelopeJS/dms/pull/328))
16
+ - **modules:** Reuse registered names in the store ([#330](https://github.com/AntelopeJS/dms/pull/330))
17
+ - **playground:** Use the workspace CLI and compatible core interface ([#331](https://github.com/AntelopeJS/dms/pull/331))
18
+
19
+ ### 📖 Documentation
20
+
21
+ - Create the DMS demo through the CLI in quickstart ([#327](https://github.com/AntelopeJS/dms/pull/327))
22
+
23
+ ### 🏡 Chore
24
+
25
+ - **release:** @antelopejs/dms v0.9.3 ([1aaf5404](https://github.com/AntelopeJS/dms/commit/1aaf5404))
26
+ - **docs:** Capture temporary MongoDB startup diagnostics ([#325](https://github.com/AntelopeJS/dms/pull/325))
27
+ - **playground:** Refresh compatible dependencies ([#329](https://github.com/AntelopeJS/dms/pull/329))
28
+
29
+ ### ❤️ Contributors
30
+
31
+ - Antony Rizzitelli <rizzitelli.antony@pm.me>
32
+
33
+ ## v0.7.2
34
+
35
+ [compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.7.1...v0.7.2)
36
+
37
+ ### 🚀 Enhancements
38
+
39
+ - **preview:** Live block preview page, block catalog and screenshots for the docs ([#280](https://github.com/AntelopeJS/dms/pull/280))
40
+
41
+ ### 🔥 Performance
42
+
43
+ - **layout:** Bundle the Geist fonts and preload only the text face ([#311](https://github.com/AntelopeJS/dms/pull/311))
44
+ - **table:** Drag with SortableJS through useSortable instead of vuedraggable ([#312](https://github.com/AntelopeJS/dms/pull/312))
45
+ - **table-view:** Share a source read between the list and a counter asking the same ([#313](https://github.com/AntelopeJS/dms/pull/313))
46
+
47
+ ### 🩹 Fixes
48
+
49
+ - **deps:** Move to @antelopejs/core 1.15.2, @antelopejs/interface-core 0.2.3 and @antelopejs/interface-dms 0.7.1 ([#303](https://github.com/AntelopeJS/dms/pull/303))
50
+ - **docs:** Regenerate the block catalog for dms 0.9.2 ([#315](https://github.com/AntelopeJS/dms/pull/315))
51
+ - **form:** Leave a failed record read's toast to the browser ([#304](https://github.com/AntelopeJS/dms/pull/304))
52
+ - **page:** Leave a page's layout out of the components its preload looks up ([#306](https://github.com/AntelopeJS/dms/pull/306))
53
+ - **settings:** Suggest the reader's time zone in a server-rendered region page ([#308](https://github.com/AntelopeJS/dms/pull/308))
54
+ - **frontend:** Set the async data scope before any module's plugin reads ([#305](https://github.com/AntelopeJS/dms/pull/305))
55
+ - **blocks:** Have refreshPageBlocks() wait for the charts and tables it refreshes ([#307](https://github.com/AntelopeJS/dms/pull/307))
56
+
57
+ ### 📖 Documentation
58
+
59
+ - **dms:** Restructure docs with per-block pages, live previews and an AI section ([#277](https://github.com/AntelopeJS/dms/pull/277))
60
+ - Remove the DMS 0.9 upgrade page ([#316](https://github.com/AntelopeJS/dms/pull/316))
61
+ - **dms:** Document running the DMS inside AdonisJS ([#318](https://github.com/AntelopeJS/dms/pull/318))
62
+ - Make the DMS 0.9 upgrade notes accurate and complete ([#310](https://github.com/AntelopeJS/dms/pull/310))
63
+ - Streamline agent guidance ([#317](https://github.com/AntelopeJS/dms/pull/317))
64
+ - Colocate the DMS consumer reference with its interface ([#320](https://github.com/AntelopeJS/dms/pull/320))
65
+ - Make dense guide sections easier to scan ([#321](https://github.com/AntelopeJS/dms/pull/321))
66
+
67
+ ### 📦 Build
68
+
69
+ - **dms:** Leave tests and tooling out of the published package ([#314](https://github.com/AntelopeJS/dms/pull/314))
70
+
71
+ ### 🏡 Chore
72
+
73
+ - **release:** @antelopejs/dms v0.9.2 ([beb09f9d](https://github.com/AntelopeJS/dms/commit/beb09f9d))
74
+ - **release:** Propagate published dependency floors ([#323](https://github.com/AntelopeJS/dms/pull/323))
75
+
76
+ ### ✅ Tests
77
+
78
+ - **live:** Hold the page's data refresh while paused, not a user's ([#309](https://github.com/AntelopeJS/dms/pull/309))
79
+
80
+ ### 🤖 CI
81
+
82
+ - **docs:** Build and verify the hosted preview playground ([#319](https://github.com/AntelopeJS/dms/pull/319))
83
+
84
+ ### ❤️ Contributors
85
+
86
+ - Antony Rizzitelli <rizzitelli.antony@pm.me>
87
+ - Alessandro Aloisio
88
+
3
89
  ## v0.7.1
4
90
 
5
91
  [compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.7.0...v0.7.1)
package/README.md CHANGED
@@ -1,76 +1,78 @@
1
- # `@antelopejs/interface-dms`
2
-
3
1
  <div align="center">
4
- <a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-Apache--2.0-blue?style=for-the-badge&labelColor=000000"></a>
5
- <a href="https://antelopejs.com"><img src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000" alt="Documentation"></a>
2
+
3
+ # @antelopejs/interface-dms
4
+
5
+ <a href="https://www.npmjs.com/package/@antelopejs/interface-dms"><img alt="npm" src="https://img.shields.io/npm/v/@antelopejs/interface-dms?style=for-the-badge&labelColor=000000&color=000000"></a>
6
+ <a href="./LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@antelopejs/interface-dms?style=for-the-badge&labelColor=000000&color=000000"></a>
7
+ <a href="https://discord.gg/sjK28QHrA7"><img alt="Discord" src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000"></a>
8
+ <a href="https://dms.antelopejs.com/docs/interfaces"><img alt="Documentation" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a>
9
+
10
+ The public contracts of the AntelopeJS DMS: pages and components, permissions and tenancy, authentication, notifications and HTML rendering.
11
+
6
12
  </div>
7
13
 
8
- The public contracts of the AntelopeJS DMS: pages and components, permissions
9
- and tenancy, authentication, notifications and HTML rendering. A module that
10
- extends the DMS imports them from here and never from `@antelopejs/dms`, so it
11
- compiles against the contract rather than against the implementation.
14
+ ## What it does
15
+
16
+ - Declares pages, categories, modules and page extensions (`/page`), and the blocks they carry: forms, tables, charts and layouts (`/base`).
17
+ - Registers permissions, guards routes, and scopes data to a tenant (`/permissions`, `/guards`, `/tenant-scoped-model`…).
18
+ - Authenticates requests and manages users, sessions and external identities (`/auth`).
19
+ - Declares notification categories and sends notifications (`/notifications`), and renders HTML templates server-side (`/html-render`).
20
+ - Lets a module compile against the contract rather than against the implementation, [`@antelopejs/dms`](https://www.npmjs.com/package/@antelopejs/dms).
21
+
22
+ ## Install
23
+
24
+ Add the interface to the module that extends the DMS:
12
25
 
13
26
  ```bash
14
27
  pnpm add @antelopejs/interface-dms
15
28
  ```
16
29
 
17
- ## Entry points
18
-
19
- | Import | What it holds |
20
- | --------------------------------------- | ---------------------------------------------------------- |
21
- | `@antelopejs/interface-dms` | the `dms` interface itself: pages, permissions, tenancy, hooks |
22
- | `@antelopejs/interface-dms/<module>` | one module of it -- `/page`, `/permissions`, `/hooks`, `/db`, ... |
23
- | `@antelopejs/interface-dms/auth` | authentication: users, sessions, external identities |
24
- | `@antelopejs/interface-dms/base` | the component library: forms, tables, charts, layouts |
25
- | `@antelopejs/interface-dms/notifications` | notification categories, subjects and delivery |
26
- | `@antelopejs/interface-dms/html-render` | server-side HTML templates |
27
-
28
- `/auth`, `/base` and `/notifications` take subpaths of their own
29
- (`/auth/db`, `/auth/password`, `/base/table-view`, `/base/data-types`, `/notifications/builder`,
30
- ...). The reference documentation lives in the runtime package, under
31
- `docs/07.interfaces/`.
32
-
33
- ## One copy, always
34
-
35
- Every AntelopeJS interface is a peer dependency, and so is this one in effect:
36
- the host and every module have to resolve **the same installed copy**.
37
-
38
- That is stricter here than the usual "duplicate dependencies waste space". This
39
- package holds live state, not just types -- the page, category and extension
40
- registries, the permission tree, the hook registry, the data-type and block
41
- registries, the component slot resolvers -- and the interface proxies a module
42
- registers into are identified per loaded instance. A second copy gets its own
43
- empty registries and its own proxies: pages register into a tree nobody reads,
44
- permissions never reach the roles form, and hooks never fire. Nothing throws.
45
-
46
- `@antelopejs/core` checks this before constructing modules and fails with
47
- `Incompatible interface package resolution` when a consumer resolves a copy
48
- other than the canonical one, so a mismatch is caught at startup rather than
49
- diagnosed later. Depend on it with a wide range -- `>=0.0.1 <1.0.0`, raising the lower bound
50
- to the version you actually need rather than pinning an upper one -- so package
51
- managers can deduplicate, and never vendor or bundle this package into a module.
52
- `@antelopejs/dms`, which implements this interface, is the exception: it caps its
53
- range below the next minor, so a breaking minor of this package never reaches an
54
- older DMS.
55
-
56
- One more consequence worth knowing when writing a module: the runtime hands a
57
- module a per-context view of the values it receives through an interface, so
58
- reference equality does not survive the round trip. Compare registrations on a
59
- field, never with `===`.
60
-
61
- The same goes for *finding* a registration again, not just comparing two. A
62
- view has to be resolved back to the registered object by its token before it can
63
- be used as a key: `RegisteringProxy` looks its entries up by object reference,
64
- so unregistering with the view a module holds matches nothing and leaves the
65
- registration live -- silently, exactly like a second copy would. `RegisterPage`
66
- and `RegisterCategory` resolve their argument through `RegistrationIdentity`
67
- (`page/internal/registry`) for that reason; anything else keyed on a value
68
- that crossed the boundary has to do the same. The same trap catches structural comparisons:
69
- `isDeepStrictEqual` and `assert.deepStrictEqual` both refuse two views that hold
70
- equal values, so compare plain data, field by field or after a JSON round trip.
71
-
72
- ## Releasing
73
-
74
- Release this package before releasing a `@antelopejs/dms` version that needs it,
75
- and upgrade it first on the consumer side. It has its own workflow
76
- (`Release DMS interface`); releasing the runtime never releases it.
30
+ Depend on it with a wide range, such as `>=0.7.0 <1.0.0`, and never bundle or vendor it: the host and every module must resolve the same installed copy, since the package holds live registries. `@antelopejs/core` fails at startup with `Incompatible interface package resolution` when a module resolves another copy.
31
+
32
+ ## Quick start
33
+
34
+ ```ts
35
+ import { PageController, RegisterPage, pagesCategory } from "@antelopejs/interface-dms/page";
36
+ import { KpiCard } from "@antelopejs/interface-dms/base/kpi-card";
37
+
38
+ @RegisterPage()
39
+ export class SalesPage extends PageController("sales", {
40
+ displayName: "Sales",
41
+ icon: "i-ph-chart-line",
42
+ category: pagesCategory,
43
+ }) {
44
+ static revenue = KpiCard({ title: "Revenue", fetchUrl: "/api/sales/revenue" });
45
+ }
46
+ ```
47
+
48
+ | Import | What it holds |
49
+ | --- | --- |
50
+ | `@antelopejs/interface-dms` | the core surface: pages, permissions, tenancy, hooks |
51
+ | `@antelopejs/interface-dms/<module>` | one module of it: `/page`, `/permissions`, `/hooks`, `/db`… |
52
+ | `@antelopejs/interface-dms/auth` | authentication: users, sessions, external identities |
53
+ | `@antelopejs/interface-dms/base` | the component library: forms, tables, charts, layouts |
54
+ | `@antelopejs/interface-dms/notifications` | notification categories, subjects and delivery |
55
+ | `@antelopejs/interface-dms/html-render` | server-side HTML templates |
56
+
57
+ ## Compatibility
58
+
59
+ | `@antelopejs/interface-dms` | `@antelopejs/dms` (implementation) |
60
+ | --- | --- |
61
+ | 0.7 | 0.9 |
62
+ | 0.6 | 0.8 |
63
+
64
+ ## Documentation
65
+
66
+ - [The DMS interface](./docs/index.md): the canonical consumer reference, shipped with this package and published at [docs/interfaces](https://dms.antelopejs.com/docs/interfaces)
67
+ - [Core](./docs/1.core/1.introduction.md), [Auth](./docs/2.auth/1.introduction.md), [Base](./docs/3.base/1.introduction.md), [Notifications](./docs/4.notifications/1.introduction.md), [HTML Render](./docs/5.html-render/1.introduction.md)
68
+ - [Pages and components](https://dms.antelopejs.com/docs/building/pages-and-components): the task-by-task guide
69
+
70
+ An importable file is not necessarily a supported API. Paths under `internal/`, symbols tagged `@internal`, and `internal` namespaces are implementation wiring, even when the wildcard export makes them reachable. Use the public declarations and contracts documented here.
71
+
72
+ ## Contributing
73
+
74
+ This package lives in the [`AntelopeJS/dms`](https://github.com/AntelopeJS/dms) pnpm workspace, next to the runtime that implements it. Read [CONTRIBUTING.md](https://github.com/AntelopeJS/dms/blob/main/CONTRIBUTING.md), the [repository README](https://github.com/AntelopeJS/dms#contributing) and [AGENTS.md](https://github.com/AntelopeJS/dms/blob/main/AGENTS.md), which covers what is public and what is internal. Release this package (**Release DMS interface**) before a `@antelopejs/dms` version that needs it.
75
+
76
+ ## License
77
+
78
+ [Apache-2.0](./LICENSE)
@@ -20,6 +20,7 @@ declare const SessionModel_base: {
20
20
  delete(id: string): Promise<number>;
21
21
  };
22
22
  readonly schemaName: string;
23
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<Session>;
23
24
  fromPlainData(obj: any): Session;
24
25
  fromDatabase(obj: any): Session | undefined;
25
26
  toDatabase(obj: any): Record<string, any>;
@@ -17,6 +17,7 @@ declare const UserExternalIdentityModel_base: {
17
17
  delete(id: string): Promise<number>;
18
18
  };
19
19
  readonly schemaName: string;
20
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<UserExternalIdentity>;
20
21
  fromPlainData(obj: any): UserExternalIdentity;
21
22
  fromDatabase(obj: any): UserExternalIdentity | undefined;
22
23
  toDatabase(obj: any): Record<string, any>;
@@ -20,6 +20,7 @@ declare const UserModel_base: {
20
20
  delete(id: string): Promise<number>;
21
21
  };
22
22
  readonly schemaName: string;
23
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<User>;
23
24
  fromPlainData(obj: any): User;
24
25
  fromDatabase(obj: any): User | undefined;
25
26
  toDatabase(obj: any): Record<string, any>;
@@ -1,3 +1,4 @@
1
1
  export * from "./helpers";
2
+ export * from "./presentation";
2
3
  export * from "./registry";
3
4
  export * from "./types";
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./helpers"), exports);
18
+ __exportStar(require("./presentation"), exports);
18
19
  __exportStar(require("./registry"), exports);
19
20
  __exportStar(require("./types"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/block-registry/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/block-registry/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,iDAA+B;AAC/B,6CAA2B;AAC3B,0CAAwB"}
@@ -0,0 +1,21 @@
1
+ import type { BlockOptionUi, BlockTypeDescriptor } from "./types";
2
+ /** The hints needed to decide whether an editor offers an option in simple mode. */
3
+ export interface SimpleBlockOption {
4
+ ui?: Pick<BlockOptionUi, "hidden" | "advanced" | "derivedFrom"> & {
5
+ group?: string;
6
+ };
7
+ }
8
+ /** Shared simple-mode policy; data binding remains available in the builder. */
9
+ export declare function IsSimpleBlockOption(option: SimpleBlockOption): boolean;
10
+ /**
11
+ * Dotted paths a standalone preview can edit without replacing data or opaque
12
+ * values. Objects are descended into, never offered as JSON. Only enum arrays
13
+ * in presentation/behavior groups and closed-key scalar records are editable
14
+ * collections; rows, slots and other structural collections remain fixed.
15
+ * Scalar unions have typed controls; a rich union with an explicit scalar
16
+ * widget (e.g. translated text or chart color) offers that scalar only.
17
+ *
18
+ * Fixed factory options exclude their entire top-level subtree. The returned
19
+ * paths reference `config`; consumers must not keep another copy of the schema.
20
+ */
21
+ export declare function BlockPresentationPaths(descriptor: Pick<BlockTypeDescriptor, "config" | "fixedOptions">): string[];
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsSimpleBlockOption = IsSimpleBlockOption;
4
+ exports.BlockPresentationPaths = BlockPresentationPaths;
5
+ /** Shared simple-mode policy; data binding remains available in the builder. */
6
+ function IsSimpleBlockOption(option) {
7
+ const ui = option.ui;
8
+ return (!ui?.hidden && !ui?.advanced && !ui?.derivedFrom && ui?.group !== "advanced");
9
+ }
10
+ const PRESENTATION_WIDGETS = new Set([
11
+ "text",
12
+ "textarea",
13
+ "number",
14
+ "range",
15
+ "switch",
16
+ "select",
17
+ "segmented",
18
+ "icon",
19
+ "color",
20
+ "url",
21
+ ]);
22
+ function isPresentation(option) {
23
+ return (IsSimpleBlockOption(option) &&
24
+ option.ui?.group !== "data" &&
25
+ !option.truncated &&
26
+ (!option.ui?.widget || PRESENTATION_WIDGETS.has(option.ui.widget)));
27
+ }
28
+ // A scalar widget can replace a union's structured value, so a restricted
29
+ // descendant in any branch forbids offering that parent too.
30
+ function hasRestrictedHints(option) {
31
+ if (!IsSimpleBlockOption(option) ||
32
+ option.ui?.group === "data" ||
33
+ (option.ui?.widget && !PRESENTATION_WIDGETS.has(option.ui.widget)))
34
+ return true;
35
+ const children = [
36
+ ...Object.values(option.properties ?? {}),
37
+ ...[option.items, option.values, option.keys].filter((child) => !!child),
38
+ ...(option.oneOf ?? []),
39
+ ...(option.allOf ?? []),
40
+ ...(option.prefixItems ?? []),
41
+ ];
42
+ return children.some(hasRestrictedHints);
43
+ }
44
+ function isScalar(option) {
45
+ if (option.truncated || option.allOf || option.prefixItems)
46
+ return false;
47
+ return (["string", "number", "boolean"].includes(option.type) ||
48
+ (option.type === "union" &&
49
+ !!option.oneOf?.length &&
50
+ option.oneOf.every(isScalar)));
51
+ }
52
+ function hasValueEditor(option) {
53
+ if (hasRestrictedHints(option))
54
+ return false;
55
+ if (isScalar(option))
56
+ return true;
57
+ if (option.type === "array") {
58
+ // Content collections can carry demonstration rows even when enum-valued.
59
+ return (["appearance", "behavior", "layout", "features"].includes(option.ui?.group ?? "") &&
60
+ !!option.items?.enum?.length &&
61
+ isScalar(option.items));
62
+ }
63
+ if (option.type === "record") {
64
+ return (!!option.keys?.enum?.length && !!option.values && isScalar(option.values));
65
+ }
66
+ // Rich text and palettes can still use the scalar widget their schema declares.
67
+ return (option.type === "union" &&
68
+ !!option.ui?.widget &&
69
+ !!option.oneOf?.some(isScalar));
70
+ }
71
+ /**
72
+ * Dotted paths a standalone preview can edit without replacing data or opaque
73
+ * values. Objects are descended into, never offered as JSON. Only enum arrays
74
+ * in presentation/behavior groups and closed-key scalar records are editable
75
+ * collections; rows, slots and other structural collections remain fixed.
76
+ * Scalar unions have typed controls; a rich union with an explicit scalar
77
+ * widget (e.g. translated text or chart color) offers that scalar only.
78
+ *
79
+ * Fixed factory options exclude their entire top-level subtree. The returned
80
+ * paths reference `config`; consumers must not keep another copy of the schema.
81
+ */
82
+ function BlockPresentationPaths(descriptor) {
83
+ const paths = [];
84
+ const walk = (config, prefix) => {
85
+ for (const [key, option] of Object.entries(config)) {
86
+ // Dots and prototype keys cannot be represented safely by path editors.
87
+ if (key.includes(".") ||
88
+ ["__proto__", "constructor", "prototype"].includes(key))
89
+ continue;
90
+ if (!prefix && Object.hasOwn(descriptor.fixedOptions ?? {}, key))
91
+ continue;
92
+ if (!isPresentation(option))
93
+ continue;
94
+ const path = prefix ? `${prefix}.${key}` : key;
95
+ if (option.allOf || option.prefixItems)
96
+ continue;
97
+ if (option.type === "object" && option.properties) {
98
+ walk(option.properties, path);
99
+ continue;
100
+ }
101
+ if (hasValueEditor(option))
102
+ paths.push(path);
103
+ }
104
+ };
105
+ walk(descriptor.config, "");
106
+ return paths;
107
+ }
108
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/base/block-registry/presentation.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ import "./grid";
22
22
  import "./guard";
23
23
  import "./key-value-list";
24
24
  import "./kpi-card";
25
+ import "./live-toggle";
25
26
  import "./meter";
26
27
  import "./nav-card-grid";
27
28
  import "./period-selector";
@@ -38,6 +38,7 @@ require("./grid");
38
38
  require("./guard");
39
39
  require("./key-value-list");
40
40
  require("./kpi-card");
41
+ require("./live-toggle");
41
42
  require("./meter");
42
43
  require("./nav-card-grid");
43
44
  require("./period-selector");
@@ -1 +1 @@
1
- {"version":3,"file":"block-types.js","sourceRoot":"","sources":["../../src/base/block-types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;GAWG;AACH,2BAAyB;AACzB,oBAAkB;AAClB,kBAAgB;AAChB,oCAAkC;AAClC,wBAAsB;AACtB,wBAAsB;AACtB,yBAAuB;AACvB,+BAA6B;AAC7B,kBAAgB;AAChB,mBAAiB;AACjB,4BAA0B;AAC1B,sBAAoB;AACpB,mBAAiB;AACjB,2BAAyB;AACzB,6BAA2B;AAC3B,yBAAuB;AACvB,kCAAgC;AAChC,qBAAmB;AACnB,mBAAiB;AACjB,wBAAsB;AACtB,iBAAe;AACf,+BAA6B;AAC7B,2BAAyB;AAEzB,2EAA2E;AAC3E,6DAA6D;AAC7D,iDAA+B;AAC/B,2DAAyC;AACzC,4DAA0C;AAC1C,yDAAuC"}
1
+ {"version":3,"file":"block-types.js","sourceRoot":"","sources":["../../src/base/block-types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;GAWG;AACH,2BAAyB;AACzB,oBAAkB;AAClB,kBAAgB;AAChB,oCAAkC;AAClC,wBAAsB;AACtB,wBAAsB;AACtB,yBAAuB;AACvB,+BAA6B;AAC7B,kBAAgB;AAChB,mBAAiB;AACjB,4BAA0B;AAC1B,sBAAoB;AACpB,yBAAuB;AACvB,mBAAiB;AACjB,2BAAyB;AACzB,6BAA2B;AAC3B,yBAAuB;AACvB,kCAAgC;AAChC,qBAAmB;AACnB,mBAAiB;AACjB,wBAAsB;AACtB,iBAAe;AACf,+BAA6B;AAC7B,2BAAyB;AAEzB,2EAA2E;AAC3E,6DAA6D;AAC7D,iDAA+B;AAC/B,2DAAyC;AACzC,4DAA0C;AAC1C,yDAAuC"}
@@ -58,11 +58,11 @@ export declare const LiveToggleSchema: z.ZodObject<{
58
58
  }, "strip", z.ZodTypeAny, {
59
59
  variant?: "segmented" | "pill" | undefined;
60
60
  align?: "left" | "right" | "center" | undefined;
61
- missedLabel?: string | undefined;
62
61
  showUpdatedAt?: boolean | undefined;
62
+ missedLabel?: string | undefined;
63
63
  }, {
64
64
  variant?: "segmented" | "pill" | undefined;
65
65
  align?: "left" | "right" | "center" | undefined;
66
- missedLabel?: string | undefined;
67
66
  showUpdatedAt?: boolean | undefined;
67
+ missedLabel?: string | undefined;
68
68
  }>;
@@ -141,13 +141,13 @@ export declare const PeriodSelectorSchema: z.ZodObject<{
141
141
  size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
142
142
  variant?: "default" | "segmented" | undefined;
143
143
  rememberKey?: string | undefined;
144
+ align?: "left" | "right" | "center" | undefined;
144
145
  defaultPreset?: "custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year" | undefined;
145
146
  defaultComparison?: "custom" | "none" | "previous-period" | "previous-year" | undefined;
146
147
  presets?: ("custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year")[] | undefined;
147
148
  comparisons?: ("custom" | "none" | "previous-period" | "previous-year")[] | undefined;
148
149
  presetLabels?: Partial<Record<"custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year", string>> | undefined;
149
150
  comparisonLabels?: Partial<Record<"custom" | "none" | "previous-period" | "previous-year", string>> | undefined;
150
- align?: "left" | "right" | "center" | undefined;
151
151
  showRangeLabel?: boolean | undefined;
152
152
  rangeLabel?: "relative" | "absolute" | undefined;
153
153
  comparisonControl?: "hidden" | "menu" | "toggle" | undefined;
@@ -157,13 +157,13 @@ export declare const PeriodSelectorSchema: z.ZodObject<{
157
157
  id?: string | undefined;
158
158
  variant?: "default" | "segmented" | undefined;
159
159
  rememberKey?: string | undefined;
160
+ align?: "left" | "right" | "center" | undefined;
160
161
  defaultPreset?: "custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year" | undefined;
161
162
  defaultComparison?: "custom" | "none" | "previous-period" | "previous-year" | undefined;
162
163
  presets?: ("custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year")[] | undefined;
163
164
  comparisons?: ("custom" | "none" | "previous-period" | "previous-year")[] | undefined;
164
165
  presetLabels?: Partial<Record<"custom" | "all" | "last-hour" | "last-24h" | "today" | "yesterday" | "last-7-days" | "last-30-days" | "last-90-days" | "this-month" | "last-month" | "this-quarter" | "last-quarter" | "ytd" | "last-year", string>> | undefined;
165
166
  comparisonLabels?: Partial<Record<"custom" | "none" | "previous-period" | "previous-year", string>> | undefined;
166
- align?: "left" | "right" | "center" | undefined;
167
167
  showRangeLabel?: boolean | undefined;
168
168
  rangeLabel?: "relative" | "absolute" | undefined;
169
169
  comparisonControl?: "hidden" | "menu" | "toggle" | undefined;
@@ -15,11 +15,11 @@ exports.PlaceholderSchema = zod_1.z.object({
15
15
  height: (0, block_registry_1.ui)(zod_1.z
16
16
  .string()
17
17
  .optional()
18
- .describe("How tall the box is, such as 200px; left empty, it fills its place."), { label: "Height", group: "appearance" }),
18
+ .describe("How tall the box is, such as 200px; left empty, it fills its place."), { label: "Height", group: "appearance", advanced: true }),
19
19
  width: (0, block_registry_1.ui)(zod_1.z
20
20
  .string()
21
21
  .optional()
22
- .describe("How wide the box is, such as 300px; left empty, it fills its column."), { label: "Width", group: "appearance" }),
22
+ .describe("How wide the box is, such as 300px; left empty, it fills its column."), { label: "Width", group: "appearance", advanced: true }),
23
23
  });
24
24
  /**
25
25
  * Placeholder - Development Placeholder Component
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../src/base/placeholder.ts"],"names":[],"mappings":";;;AAiEA,kCASC;AA1ED,4CAAgD;AAChD,6BAAwB;AACxB,qDAA+E;AAE/E,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAwBrD,yCAAyC;AAC5B,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,IAAA,mBAAE,EAAC,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE;QACtE,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,SAAS;KACjB,CAAC;IACF,MAAM,EAAE,IAAA,mBAAE,EACR,OAAC;SACE,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE,EACH,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CACzC;IACD,KAAK,EAAE,IAAA,mBAAE,EACP,OAAC;SACE,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE,CACvE,EACH,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CACxC;CACF,CAA+C,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,SAAgB,WAAW,CACzB,OAA4B;IAE5B,OAAO,IAAI,4BAAgB,CAAqB,0BAA0B,CAAC;SACxE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;SACvB,IAAI,CAAC;QACJ,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;KACvB,CAAC,CAAC;AACP,CAAC;AAED,IAAA,kCAAiB,EAAC;IAChB,IAAI,EAAE,aAAa;IACnB,aAAa,EAAE,0BAA0B;IACzC,MAAM,EAAE,yBAAiB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE,QAAQ;KAChB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../src/base/placeholder.ts"],"names":[],"mappings":";;;AAiEA,kCASC;AA1ED,4CAAgD;AAChD,6BAAwB;AACxB,qDAA+E;AAE/E,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAwBrD,yCAAyC;AAC5B,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,IAAA,mBAAE,EAAC,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE;QACtE,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,SAAS;KACjB,CAAC;IACF,MAAM,EAAE,IAAA,mBAAE,EACR,OAAC;SACE,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE,EACH,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CACzD;IACD,KAAK,EAAE,IAAA,mBAAE,EACP,OAAC;SACE,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE,CACvE,EACH,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CACxD;CACF,CAA+C,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,SAAgB,WAAW,CACzB,OAA4B;IAE5B,OAAO,IAAI,4BAAgB,CAAqB,0BAA0B,CAAC;SACxE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;SACvB,IAAI,CAAC;QACJ,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;KACvB,CAAC,CAAC;AACP,CAAC;AAED,IAAA,kCAAiB,EAAC;IAChB,IAAI,EAAE,aAAa;IACnB,aAAa,EAAE,0BAA0B;IACzC,MAAM,EAAE,yBAAiB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE,QAAQ;KAChB;CACF,CAAC,CAAC"}
@@ -839,17 +839,17 @@ export declare const TableViewSchema: z.ZodObject<{
839
839
  whileSorted: z.ZodOptional<z.ZodBoolean>;
840
840
  missedLabel: z.ZodOptional<z.ZodString>;
841
841
  }, "strip", z.ZodTypeAny, {
842
+ missedLabel?: string | undefined;
842
843
  whileRowOpen?: boolean | undefined;
843
844
  whileScrolled?: boolean | undefined;
844
845
  whileSearching?: boolean | undefined;
845
846
  whileSorted?: boolean | undefined;
846
- missedLabel?: string | undefined;
847
847
  }, {
848
+ missedLabel?: string | undefined;
848
849
  whileRowOpen?: boolean | undefined;
849
850
  whileScrolled?: boolean | undefined;
850
851
  whileSearching?: boolean | undefined;
851
852
  whileSorted?: boolean | undefined;
852
- missedLabel?: string | undefined;
853
853
  }>]>>;
854
854
  kanban: z.ZodOptional<z.ZodObject<{
855
855
  groupByField: z.ZodString;
@@ -1137,11 +1137,11 @@ export declare const TableViewSchema: z.ZodObject<{
1137
1137
  strictRuleValidation?: boolean | undefined;
1138
1138
  realtimeTopic?: string | string[] | undefined;
1139
1139
  liveHold?: boolean | {
1140
+ missedLabel?: string | undefined;
1140
1141
  whileRowOpen?: boolean | undefined;
1141
1142
  whileScrolled?: boolean | undefined;
1142
1143
  whileSearching?: boolean | undefined;
1143
1144
  whileSorted?: boolean | undefined;
1144
- missedLabel?: string | undefined;
1145
1145
  } | undefined;
1146
1146
  defaultDisplay?: string | undefined;
1147
1147
  guards?: TableViewGuards<Record<string, unknown>> | undefined;
@@ -1352,11 +1352,11 @@ export declare const TableViewSchema: z.ZodObject<{
1352
1352
  realtime?: boolean | undefined;
1353
1353
  realtimeTopic?: string | string[] | undefined;
1354
1354
  liveHold?: boolean | {
1355
+ missedLabel?: string | undefined;
1355
1356
  whileRowOpen?: boolean | undefined;
1356
1357
  whileScrolled?: boolean | undefined;
1357
1358
  whileSearching?: boolean | undefined;
1358
1359
  whileSorted?: boolean | undefined;
1359
- missedLabel?: string | undefined;
1360
1360
  } | undefined;
1361
1361
  defaultDisplay?: string | undefined;
1362
1362
  guards?: TableViewGuards<Record<string, unknown>> | undefined;
@@ -24,6 +24,7 @@ declare const ExportJobModel_base: {
24
24
  delete(id: string): Promise<number>;
25
25
  };
26
26
  readonly schemaName: string;
27
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<ExportJob>;
27
28
  fromPlainData(obj: any): ExportJob;
28
29
  fromDatabase(obj: any): ExportJob | undefined;
29
30
  toDatabase(obj: any): Record<string, any>;
@@ -13,6 +13,7 @@ declare const InviteResolutionsModel_base: {
13
13
  delete(id: string): Promise<number>;
14
14
  };
15
15
  readonly schemaName: string;
16
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<InviteResolution>;
16
17
  fromPlainData(obj: any): InviteResolution;
17
18
  fromDatabase(obj: any): InviteResolution | undefined;
18
19
  toDatabase(obj: any): Record<string, any>;
@@ -12,6 +12,7 @@ declare const TenantLifecycleModel_base: {
12
12
  delete(id: string): Promise<number>;
13
13
  };
14
14
  readonly schemaName: string;
15
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<TenantLifecycle>;
15
16
  fromPlainData(obj: any): TenantLifecycle;
16
17
  fromDatabase(obj: any): TenantLifecycle | undefined;
17
18
  toDatabase(obj: any): Record<string, any>;
@@ -12,6 +12,7 @@ declare const RoleModel_base: {
12
12
  delete(id: string): Promise<number>;
13
13
  };
14
14
  readonly schemaName: string;
15
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<Role>;
15
16
  fromPlainData(obj: any): Role;
16
17
  fromDatabase(obj: any): Role | undefined;
17
18
  toDatabase(obj: any): Record<string, any>;
@@ -12,6 +12,7 @@ declare const TenantMemberModel_base: {
12
12
  delete(id: string): Promise<number>;
13
13
  };
14
14
  readonly schemaName: string;
15
+ readonly tableClass: import("@antelopejs/interface-database-decorators").Constructible<TenantMember>;
15
16
  fromPlainData(obj: any): TenantMember;
16
17
  fromDatabase(obj: any): TenantMember | undefined;
17
18
  toDatabase(obj: any): Record<string, any>;