@protobase/schema 0.58.8 → 0.59.0

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/dist/model.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { Rollup } from "./computed/rollup.js";
2
2
  import { ImageVariant } from "./files/file-options.js";
3
3
  //#region src/model.d.ts
4
- /** A field's storage type, as `f.*` declares it; see [Field types](website/src/content/docs/reference/data-config.mdx#field-types). */
4
+ /** A field's storage type, as `f.*` declares it; see [Field types](docs/website/src/content/docs/reference/data-config.mdx#field-types). */
5
5
  export type FieldType = 'text' | 'integer' | 'bigint' | 'decimal' | 'boolean' | 'date' | 'timestamp' | 'uuid' | 'enum' | 'json' | 'relation' | 'file' | 'currency' | 'country';
6
6
  /**
7
7
  * A field of a resource as the server and the app see it, built from its `f.*` builder and options; see
8
- * [Field options](website/src/content/docs/reference/data-config.mdx#field-options).
8
+ * [Field options](docs/website/src/content/docs/reference/data-config.mdx#field-options).
9
9
  */
10
10
  export type FieldModel = {
11
11
  /** The field's name: in URLs, the API, filters and sorts. */
@@ -74,7 +74,7 @@ export type FieldModel = {
74
74
  scale: number;
75
75
  };
76
76
  };
77
- /** A file field's settings, as `/meta` gives them; see [Files](website/src/content/docs/reference/files.mdx). */
77
+ /** A file field's settings, as `/meta` gives them; see [Files](docs/website/src/content/docs/reference/files.mdx). */
78
78
  export type FileFieldModel = {
79
79
  /** The content types an upload may have, exact or `type/*`; any when empty. */
80
80
  accept: string[];
@@ -97,7 +97,7 @@ export type FileFieldModel = {
97
97
  export type SearchMatch = 'digitsEnd';
98
98
  /**
99
99
  * A resource as the server and the app see it: a table, its fields and what the API does with them, built by
100
- * `resource(...).toModel()`; see [resource()](website/src/content/docs/reference/data-config.mdx#resource).
100
+ * `resource(...).toModel()`; see [resource()](docs/website/src/content/docs/reference/data-config.mdx#resource).
101
101
  */
102
102
  export type ResourceModel = {
103
103
  /** The resource's name: its address (`/api/v1/<name>`, `/<name>` in the admin) and how other config refers to it. */
@@ -161,7 +161,7 @@ export type EventOperation = 'create' | 'update' | 'delete' | 'undelete';
161
161
  * An event a resource declares. It fires for a change whose operation is listed and that passes every condition:
162
162
  * `when` on the record after the change, `from` on the record before it, `becomes` turning true (false or no record
163
163
  * before, true after), one of the `changed` fields changing, and a code predicate when `match` is set. See
164
- * [Declaring events](website/src/content/docs/reference/events.mdx#declaring-events).
164
+ * [Declaring events](docs/website/src/content/docs/reference/events.mdx#declaring-events).
165
165
  */
166
166
  export type EventModel = {
167
167
  /** `<resource>.<name>`, such as `orders.created`. */
@@ -231,7 +231,7 @@ export type TimelineView = {
231
231
  * A place in the app: a resource's list, one of its records, its create form, or a composed page. A record's `key` is
232
232
  * its one value or its parts, as the record API takes them; `readAppPath` gives it back as the API's text form. A create
233
233
  * form's `values` fill in fields of the new record by name, as text (`{ listing_id: '42' }`). A list's `map` is where its
234
- * map display looks, its `calendar` the month or week its calendar display shows, and its `timeline` the period its timeline display shows. See [Addresses](website/src/content/docs/reference/layouts.md#addresses).
234
+ * map display looks, its `calendar` the month or week its calendar display shows, and its `timeline` the period its timeline display shows. See [Addresses](docs/website/src/content/docs/reference/layouts.md#addresses).
235
235
  */
236
236
  export type AppAddress = {
237
237
  /** A resource's list. */
@@ -301,7 +301,7 @@ export type AppAddress = {
301
301
  * `absolute` and `compact` are carried in `/meta` for apps that render their own lists.
302
302
  */
303
303
  export type FieldFormat = 'relative' | 'absolute' | 'compact' | 'percent' | 'badge' | 'code' | 'email' | 'phone' | 'url';
304
- /** A view's hints for one field (`.fields((r) => ...)`); see [Names and columns](website/src/content/docs/reference/ui-config.mdx#names-and-columns). */
304
+ /** A view's hints for one field (`.fields((r) => ...)`); see [Names and columns](docs/website/src/content/docs/reference/ui-config.mdx#names-and-columns). */
305
305
  export type FieldViewModel = {
306
306
  /** What the field is called, instead of its name in words. */
307
307
  label?: string;
@@ -346,13 +346,13 @@ export type FieldViewModel = {
346
346
  /**
347
347
  * When a help line shows: `always`, the default, or only while the record is `editing`: on its form and the create
348
348
  * form, not on the record page's read view or its locked form. See
349
- * [The record page](website/src/content/docs/reference/ui-config.mdx#the-record-page).
349
+ * [The record page](docs/website/src/content/docs/reference/ui-config.mdx#the-record-page).
350
350
  */
351
351
  export type HelpWhen = 'always' | 'editing';
352
352
  /**
353
353
  * When a record page's field or layout item shows: `always`, the default; only while the record is `editing`, on its
354
354
  * form and the create form; or only while `reading` it, on the read view and the locked form. See
355
- * [Form and read view](website/src/content/docs/reference/ui-config.mdx#form-and-read-view).
355
+ * [Form and read view](docs/website/src/content/docs/reference/ui-config.mdx#form-and-read-view).
356
356
  */
357
357
  export type ShowWhen = 'always' | 'editing' | 'reading';
358
358
  /** `ShowWhen`, or an AIP-160 condition over the saved record, as `<Show when>` takes: the item shows while it holds. See "Form and read view" in the UI reference. */
@@ -372,7 +372,7 @@ export type FieldWidgetModel = {
372
372
  * (`map`), or a project component (`custom`) drawing the rows the list page loads. A card's `amount` is the first of its fields with
373
373
  * a value, `footer` its fields with a value joined by bullets, and `flags` boolean fields shown as small badges of their
374
374
  * labels when true. `name` is what the address names (`?display=cards`); `label` and `icon` are its switch's. See
375
- * [List displays](website/src/content/docs/reference/ui-config.mdx#list-displays).
375
+ * [List displays](docs/website/src/content/docs/reference/ui-config.mdx#list-displays).
376
376
  */
377
377
  export type ListDisplayModel = {
378
378
  /** A card per record. */
@@ -503,7 +503,7 @@ export type ListDisplayModel = {
503
503
  * Where a card's further photos come from: the records of `resource` whose relation `field` points at the card's record,
504
504
  * in `sort` order, each shown by its file field `image`. They come with the list's records, in the same request, so
505
505
  * an index on `field` and the sorted fields serves them. See
506
- * [Card photos](website/src/content/docs/reference/ui-config.mdx#card-photos).
506
+ * [Card photos](docs/website/src/content/docs/reference/ui-config.mdx#card-photos).
507
507
  */
508
508
  export type CardPhotosModel = {
509
509
  /** The resource holding the photos. */
@@ -519,7 +519,7 @@ export type CardPhotosModel = {
519
519
  * The button in a card's top right corner that saves its record for the signed-in user: a record of `resource` whose
520
520
  * relation `field` points at the card's record, created on a press and deleted on the next. The resource has an owner,
521
521
  * so each user lists and saves their own. A visitor who is not signed in gets the resource's sign-in prompt instead
522
- * (`.signIn(...)` on its view). See [Favorites](website/src/content/docs/reference/ui-config.mdx#favorites).
522
+ * (`.signIn(...)` on its view). See [Favorites](docs/website/src/content/docs/reference/ui-config.mdx#favorites).
523
523
  */
524
524
  export type CardFavoriteModel = {
525
525
  /** The resource holding the saved records, such as favorites. */
@@ -533,7 +533,7 @@ export type CardFavoriteModel = {
533
533
  * What a visitor who is not signed in is told about a resource they could use once signed in (`.signIn(...)`): on its
534
534
  * list page, in place of the list, and in the dialog of a card's favorite button or a list's "Save search" button
535
535
  * that saves to it. See
536
- * [Sign-in prompts](website/src/content/docs/reference/ui-config.mdx#sign-in-prompts).
536
+ * [Sign-in prompts](docs/website/src/content/docs/reference/ui-config.mdx#sign-in-prompts).
537
537
  */
538
538
  export type SignInPromptModel = {
539
539
  /** The heading, such as "Keep the homes you like". */
@@ -563,7 +563,7 @@ export type SignInViewModel = Pick<ViewModel, 'resource' | 'names' | 'nav'> & {
563
563
  /**
564
564
  * The "Save search" button of a list page: it saves the list's filter as a record of `resource`, the signed-in user's
565
565
  * own, whose view lists them (`.searchesOf(...)`). A visitor who is not signed in gets the resource's sign-in prompt
566
- * instead. See [Saved searches](website/src/content/docs/reference/ui-config.mdx#saved-searches).
566
+ * instead. See [Saved searches](docs/website/src/content/docs/reference/ui-config.mdx#saved-searches).
567
567
  */
568
568
  export type SaveSearchModel = {
569
569
  /** The resource holding the saved searches, whose view has `searchesOf` for this one. */
@@ -574,7 +574,7 @@ export type SaveSearchModel = {
574
574
  /**
575
575
  * What a saved search is (`.searchesOf(...)`): the list page shows each of the user's searches, with its filters, its
576
576
  * `controls`, and the first records of `resource` it finds, newest first, and a link to all of them. See
577
- * [Saved searches](website/src/content/docs/reference/ui-config.mdx#saved-searches).
577
+ * [Saved searches](docs/website/src/content/docs/reference/ui-config.mdx#saved-searches).
578
578
  */
579
579
  export type SearchesOfModel = {
580
580
  /** The resource searched, such as listings. */
@@ -623,7 +623,7 @@ export type ParentAccess = 'read' | 'update';
623
623
  * A record that a resource's records belong to through a relation field, such as an operation's VM: creating, changing,
624
624
  * deleting or undeleting a record needs `access` on the record `field` points at, checked with the caller's own access
625
625
  * rules on that resource; with `read`, every read of its records keeps to those whose parent the caller reads. See
626
- * [Records that belong to another](website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
626
+ * [Records that belong to another](docs/website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
627
627
  */
628
628
  export type ParentModel = {
629
629
  /** The relation field that points at the parent record. */
@@ -649,7 +649,7 @@ export type ListModel = {
649
649
  relatedColumns?: RelatedColumnModel[];
650
650
  /**
651
651
  * The fields among `columns` edited in their cell, by a user who may change the record and the field; see
652
- * [Editing in the list](website/src/content/docs/reference/ui-config.mdx#editing-in-the-list).
652
+ * [Editing in the list](docs/website/src/content/docs/reference/ui-config.mdx#editing-in-the-list).
653
653
  */
654
654
  editable?: string[];
655
655
  /** What dragging changes, each off unless the list turns it on; see `ListDragModel`. */
@@ -657,7 +657,7 @@ export type ListModel = {
657
657
  };
658
658
  /**
659
659
  * What a user may change by dragging in a list, each for a user who may update the field it writes. See
660
- * [Dragging in the list](website/src/content/docs/reference/ui-config.mdx#dragging-in-the-list).
660
+ * [Dragging in the list](docs/website/src/content/docs/reference/ui-config.mdx#dragging-in-the-list).
661
661
  */
662
662
  export type ListDragModel = {
663
663
  /**
@@ -680,7 +680,7 @@ export type ListDragModel = {
680
680
  /**
681
681
  * A list column of the records of another resource that point at each row, directly or through a join resource, as a
682
682
  * dot per record in its status's colour, each opening the record (`c.related(...)`). See
683
- * [Related records in a list](website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
683
+ * [Related records in a list](docs/website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
684
684
  */
685
685
  export type RelatedColumnModel = {
686
686
  /** The column's name in the list's `columns`, which no field of the resource has. */
@@ -704,7 +704,7 @@ export type RelatedColumnModel = {
704
704
  export type DatePreset = 'today' | 'yesterday' | '24h' | '7d' | '30d' | '90d' | 'month' | 'quarter' | 'year';
705
705
  /**
706
706
  * A filter widget above a list (`.filters((r, w) => ...)`), on a filterable field; see
707
- * [Filters and the chart](website/src/content/docs/reference/ui-config.mdx#filters-and-the-chart).
707
+ * [Filters and the chart](docs/website/src/content/docs/reference/ui-config.mdx#filters-and-the-chart).
708
708
  */
709
709
  export type FilterWidgetModel = ({
710
710
  /** A slider between the lowest and highest value. */
@@ -749,7 +749,7 @@ export type RelatedPresentation = 'cards';
749
749
  * Records of another resource on the record page: those whose `field` holds this record's key or, with `through`,
750
750
  * those whose `field` holds one of the `key` values of the `through` records that point at this record (a join table).
751
751
  * With `from`, those whose `field` holds the value of that field of this record.
752
- * See [Related records](website/src/content/docs/reference/ui-config.mdx#related-records).
752
+ * See [Related records](docs/website/src/content/docs/reference/ui-config.mdx#related-records).
753
753
  */
754
754
  export type RelatedModel = {
755
755
  /** A related records section. */
@@ -822,7 +822,7 @@ export type CustomSectionModel = {
822
822
  /**
823
823
  * A map of the record's position, its `latitude` and `longitude` fields in decimal degrees (WGS84), centred on a marker
824
824
  * at `zoom`: in the main column under `title`, or with `sidebar` as a sidebar card. The app draws it with the map style
825
- * its server names, and leaves it out without one. See [Maps](website/src/content/docs/reference/ui-config.mdx#maps).
825
+ * its server names, and leaves it out without one. See [Maps](docs/website/src/content/docs/reference/ui-config.mdx#maps).
826
826
  */
827
827
  export type MapSectionModel = {
828
828
  /** A map section. */
@@ -846,7 +846,7 @@ export type RecordChartRange = '1h' | '24h' | '7d';
846
846
  * Line graphs of numeric fields of the records of `resource` that point at the record through `field`, over their
847
847
  * timestamp `at`: the average or the maximum of each per minute over the last hour, per 5 minutes over the last day
848
848
  * and per hour over the last week, read through the aggregate API with the caller's access. A bucket without a sample
849
- * is a gap. See [Charts of related records](website/src/content/docs/reference/ui-config.mdx#charts-of-related-records).
849
+ * is a gap. See [Charts of related records](docs/website/src/content/docs/reference/ui-config.mdx#charts-of-related-records).
850
850
  */
851
851
  export type RecordChartModel = {
852
852
  /** A chart of related records. */
@@ -870,7 +870,7 @@ export type RecordChartModel = {
870
870
  };
871
871
  /**
872
872
  * The record's changes, newest first, with who made each and the fields before and after: only fields the caller may
873
- * read. Needs `.history()` on the resource. See [Record history](website/src/content/docs/reference/history.mdx).
873
+ * read. Needs `.history()` on the resource. See [Record history](docs/website/src/content/docs/reference/history.mdx).
874
874
  */
875
875
  export type HistorySectionModel = {
876
876
  /** A history section. */
@@ -884,7 +884,7 @@ export type HistorySectionModel = {
884
884
  };
885
885
  /**
886
886
  * The record's comments, oldest first, each with its author and time, and a box to write a new one that mentions people
887
- * with `@`. Needs `.comments()` on the resource. See [Record comments](website/src/content/docs/reference/comments.mdx).
887
+ * with `@`. Needs `.comments()` on the resource. See [Record comments](docs/website/src/content/docs/reference/comments.mdx).
888
888
  */
889
889
  export type CommentsSectionModel = {
890
890
  /** A comments section. */
@@ -896,7 +896,7 @@ export type CommentsSectionModel = {
896
896
  };
897
897
  /** How a section shows its fields on the read view: `facts` as a row of key facts; label/value rows when omitted. */
898
898
  export type SectionPresentation = 'facts';
899
- /** A titled group of fields on the record page; see [The record page](website/src/content/docs/reference/ui-config.mdx#the-record-page). */
899
+ /** A titled group of fields on the record page; see [The record page](docs/website/src/content/docs/reference/ui-config.mdx#the-record-page). */
900
900
  export type SectionModel = {
901
901
  /** A titled group of fields in the main column, editable where the user may write. */
902
902
  kind: 'section';
@@ -916,7 +916,7 @@ export type SectionModel = {
916
916
  /** Whether it shows on the form, the read view or both, or a condition on the saved record that it shows while it holds. */
917
917
  when?: RecordWhen;
918
918
  };
919
- /** An item of the record page (`.layout((r) => ...)` with `l`); see [The record page](website/src/content/docs/reference/ui-config.mdx#the-record-page). */
919
+ /** An item of the record page (`.layout((r) => ...)` with `l`); see [The record page](docs/website/src/content/docs/reference/ui-config.mdx#the-record-page). */
920
920
  export type LayoutItemModel = SectionModel | {
921
921
  /** A read-only summary card beside the main column. */
922
922
  kind: 'sidebar';
@@ -925,7 +925,7 @@ export type LayoutItemModel = SectionModel | {
925
925
  /** Whether it shows on the form, the read view or both, or a condition on the saved record that it shows while it holds. */
926
926
  when?: RecordWhen;
927
927
  } | RelatedModel | GroupModel | CustomSectionModel | MapSectionModel | RecordChartModel | GalleryModel | HistorySectionModel | CommentsSectionModel | TabModel;
928
- /** A titled group of sections and related tables on the record page, closed until opened with `collapsed`; see [Groups](website/src/content/docs/reference/ui-config.mdx#groups). */
928
+ /** A titled group of sections and related tables on the record page, closed until opened with `collapsed`; see [Groups](docs/website/src/content/docs/reference/ui-config.mdx#groups). */
929
929
  export type GroupModel = {
930
930
  /** A group of sections and related tables. */
931
931
  kind: 'group';
@@ -940,7 +940,7 @@ export type GroupModel = {
940
940
  };
941
941
  /** An item a group may hold. */
942
942
  export type GroupItemModel = SectionModel | RelatedModel;
943
- /** A tab of the record page, holding main-column items; a view's tabs stand together as one strip. See [Tabs](website/src/content/docs/reference/ui-config.mdx#tabs). */
943
+ /** A tab of the record page, holding main-column items; a view's tabs stand together as one strip. See [Tabs](docs/website/src/content/docs/reference/ui-config.mdx#tabs). */
944
944
  export type TabModel = {
945
945
  /** A tab of the record page. */
946
946
  kind: 'tab';
@@ -955,7 +955,7 @@ export type TabItemModel = SectionModel | RelatedModel | GroupModel | CustomSect
955
955
  * A record's photos as tiles in the main column under `title`, one large and the next few smaller, opening a lightbox
956
956
  * that steps through them all: first the record's own file field `image`, then the `image` of the records of
957
957
  * `photos.resource` whose relation `photos.field` points at it, in `photos.sort` order, as a cards display's `photos`
958
- * names them. See [Galleries](website/src/content/docs/reference/ui-config.mdx#galleries).
958
+ * names them. See [Galleries](docs/website/src/content/docs/reference/ui-config.mdx#galleries).
959
959
  */
960
960
  export type GalleryModel = {
961
961
  /** A gallery of photos. */
@@ -1039,7 +1039,7 @@ export type ActionRun = {
1039
1039
  /** The field it writes. */
1040
1040
  writes: string;
1041
1041
  };
1042
- /** A named action of a view (`.actions((a) => ...)`); see [Named actions](website/src/content/docs/reference/layouts.md#named-actions). */
1042
+ /** A named action of a view (`.actions((a) => ...)`); see [Named actions](docs/website/src/content/docs/reference/layouts.md#named-actions). */
1043
1043
  export type ActionModel = {
1044
1044
  /** The action's name, which `<Action name="..." />` and handlers use. */
1045
1045
  name: string;
@@ -1078,7 +1078,7 @@ export type ActionModel = {
1078
1078
  * project component edits (`custom`).
1079
1079
  */
1080
1080
  export type ActionInputKind = 'text' | 'integer' | 'decimal' | 'boolean' | 'date' | 'choice' | 'custom';
1081
- /** One input of a named action's dialog (`inputs: (i) => [...]`); see [Named actions](website/src/content/docs/reference/ui-config.mdx#actions-that-ask-for-input). */
1081
+ /** One input of a named action's dialog (`inputs: (i) => [...]`); see [Named actions](docs/website/src/content/docs/reference/ui-config.mdx#actions-that-ask-for-input). */
1082
1082
  export type ActionInputModel = {
1083
1083
  /** The input's name: the key of its answer in the handler's `values`, and how `when` names it. */
1084
1084
  name: string;
@@ -1134,7 +1134,7 @@ export type NavRecentModel = {
1134
1134
  */
1135
1135
  marks?: string;
1136
1136
  };
1137
- /** Where a resource sits in the sidebar (`.nav(...)`); see [Sidebar](website/src/content/docs/reference/sidebar.md). */
1137
+ /** Where a resource sits in the sidebar (`.nav(...)`); see [Sidebar](docs/website/src/content/docs/reference/sidebar.md). */
1138
1138
  export type NavModel = {
1139
1139
  /** Hide the resource from the sidebar, for line or link tables. */
1140
1140
  hidden?: boolean;
@@ -1188,7 +1188,7 @@ export type UserMenuItemModel = {
1188
1188
  /** The entry's icon; `external-link` when omitted. */
1189
1189
  icon?: string;
1190
1190
  };
1191
- /** The menu under the signed-in user (`userMenu(...)`); see [User menu](website/src/content/docs/reference/user-menu.md). */
1191
+ /** The menu under the signed-in user (`userMenu(...)`); see [User menu](docs/website/src/content/docs/reference/user-menu.md). */
1192
1192
  export type UserMenuModel = {
1193
1193
  /** Its entries, in order, before the built-in account pages and "Sign out". */
1194
1194
  items: UserMenuItemModel[];
@@ -1224,7 +1224,7 @@ export type BottomBarItemModel = {
1224
1224
  };
1225
1225
  /**
1226
1226
  * A bottom bar for the users holding one of `roles`; `label` names it in the role view switcher. See
1227
- * [Bottom bar](website/src/content/docs/reference/bottom-bar.md).
1227
+ * [Bottom bar](docs/website/src/content/docs/reference/bottom-bar.md).
1228
1228
  */
1229
1229
  export type BottomBarModel = {
1230
1230
  /** The bar's name, where someone with several switches between them. */
@@ -1259,7 +1259,7 @@ export type TitleFromModel = {
1259
1259
  };
1260
1260
  /**
1261
1261
  * How the admin shows a resource: its names, list, filters, record page and actions, built by `view(...)` and sent to
1262
- * each user in `/meta` without what they cannot see. See [Views](website/src/content/docs/reference/ui-config.mdx).
1262
+ * each user in `/meta` without what they cannot see. See [Views](docs/website/src/content/docs/reference/ui-config.mdx).
1263
1263
  */
1264
1264
  export type ViewModel = {
1265
1265
  /** The resource it shows. */
@@ -1352,7 +1352,7 @@ export type NamedListModel = {
1352
1352
  /**
1353
1353
  * A public form (`.form(...)`): anyone, signed in or not, opens it at `/-/forms/<name>` and creates a record with its
1354
1354
  * fields, through the `anonymous` role's `create`, behind a rate limit and a bot check. See
1355
- * [Public forms](website/src/content/docs/reference/forms.mdx).
1355
+ * [Public forms](docs/website/src/content/docs/reference/forms.mdx).
1356
1356
  */
1357
1357
  export type FormModel = {
1358
1358
  /** Its address in the app, `/-/forms/<name>`; unique across the app. */
@@ -1462,7 +1462,7 @@ export type FilterValue = Literal | NowValue;
1462
1462
  export type CompareOp = '=' | '!=' | '<' | '<=' | '>' | '>=';
1463
1463
  /**
1464
1464
  * A filter's syntax tree: AIP-160 with the functions the API adds (`search`, `similar`, `regex`, `isNull`, `in`); see
1465
- * [Filters](website/src/content/docs/reference/api.md#filters). `F` is how a field is represented: a `FieldPath` when
1465
+ * [Filters](docs/website/src/content/docs/reference/api.md#filters). `F` is how a field is represented: a `FieldPath` when
1466
1466
  * parsed (`FilterExpr`), a `FieldModel` once checked (`CheckedFilter`).
1467
1467
  */
1468
1468
  export type FilterOf<F> = {
@@ -4,7 +4,7 @@ import { Field } from "./field.js";
4
4
  export declare class RelationField<V> extends Field<V> {
5
5
  /**
6
6
  * The columns that hold the other record's key, in the order of that key, for a resource with a key of several
7
- * columns. See [Keys and relations](website/src/content/docs/reference/data-config.mdx#keys-and-relations).
7
+ * columns. See [Keys and relations](docs/website/src/content/docs/reference/data-config.mdx#keys-and-relations).
8
8
  */
9
9
  columns(columns: string[]): Field<V>;
10
10
  }
@@ -4,7 +4,7 @@ import { Field } from "./field.js";
4
4
  var RelationField = class extends Field {
5
5
  /**
6
6
  * The columns that hold the other record's key, in the order of that key, for a resource with a key of several
7
- * columns. See [Keys and relations](website/src/content/docs/reference/data-config.mdx#keys-and-relations).
7
+ * columns. See [Keys and relations](docs/website/src/content/docs/reference/data-config.mdx#keys-and-relations).
8
8
  */
9
9
  columns(columns) {
10
10
  return this.with({ relation: {
@@ -30,7 +30,7 @@ export type TenantOptions = {
30
30
  export type Validator<F> = (record: RecordOf<F>) => Issue<F>[] | undefined;
31
31
  /**
32
32
  * A resource as `resource(name)` builds it. Every method returns a new builder, so a resource is one chain. See
33
- * [resource()](website/src/content/docs/reference/data-config.mdx#resource).
33
+ * [resource()](docs/website/src/content/docs/reference/data-config.mdx#resource).
34
34
  */
35
35
  export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
36
36
  /** @internal */
@@ -72,7 +72,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
72
72
  /**
73
73
  * The field that separates tenants: every query is limited to the caller's tenant, creates set it, and a request body
74
74
  * may not. With `across: 'memberships'`, its lists also read the other tenants the caller is a member of, each as the
75
- * caller's role there allows; see [Lists across organizations](website/src/content/docs/reference/access.mdx#lists-across-organizations).
75
+ * caller's role there allows; see [Lists across organizations](docs/website/src/content/docs/reference/access.mdx#lists-across-organizations).
76
76
  */
77
77
  tenant(pick: (r: FieldRefs<F>) => Ref, options?: TenantOptions): ResourceBuilder<F, K>;
78
78
  /**
@@ -86,7 +86,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
86
86
  * A unique key of the table, as its fields, whose conflict on create opens the record already holding those values:
87
87
  * the API's 409 names that record's key (`existing.key`) to a caller who may read it, and the create form opens it.
88
88
  * The fields must be exactly the columns of a unique index or constraint, such as one over a generated column. See
89
- * [Opening an existing record](website/src/content/docs/reference/data-config.mdx#opening-an-existing-record).
89
+ * [Opening an existing record](docs/website/src/content/docs/reference/data-config.mdx#opening-an-existing-record).
90
90
  *
91
91
  * @example
92
92
  * ```ts
@@ -111,7 +111,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
111
111
  * have an order of their own, as an invoice's items do, sorted in the parent's related section. The field must be
112
112
  * sortable and `within` filterable. With `after`, a record never ranks above the records it depends on through a join
113
113
  * resource (see {@link PositionAfterModel}), which `reorder` checks. See
114
- * [Reordering by hand](website/src/content/docs/reference/ui-config.mdx#reordering-by-hand).
114
+ * [Reordering by hand](docs/website/src/content/docs/reference/ui-config.mdx#reordering-by-hand).
115
115
  *
116
116
  * @example
117
117
  * ```ts
@@ -129,7 +129,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
129
129
  * checked with the caller's own access rules on its resource and locked until the write commits. With `read`, every
130
130
  * read of its records (lists, counts, aggregates, gets and labels) also keeps to those whose parent the caller reads
131
131
  * there. A null relation checks nothing; each call adds a check. See
132
- * [Records that belong to another](website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
132
+ * [Records that belong to another](docs/website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
133
133
  *
134
134
  * @example
135
135
  * ```ts
@@ -139,7 +139,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
139
139
  parent(pick: (r: FieldRefs<F>) => Ref, access: ParentAccess): ResourceBuilder<F, K>;
140
140
  /**
141
141
  * The events changes to its records raise, captured in the database for every write, from the API or elsewhere. See
142
- * [Declaring events](website/src/content/docs/reference/events.mdx#declaring-events).
142
+ * [Declaring events](docs/website/src/content/docs/reference/events.mdx#declaring-events).
143
143
  *
144
144
  * @example
145
145
  * ```ts
@@ -155,19 +155,19 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
155
155
  /**
156
156
  * Keeps every change of its records, from the API or elsewhere: the fields before and after, and who made it. The
157
157
  * record page shows it as History, and admins list every change as Activity. See
158
- * [Record history](website/src/content/docs/reference/history.mdx).
158
+ * [Record history](docs/website/src/content/docs/reference/history.mdx).
159
159
  */
160
160
  history(): ResourceBuilder<F, K>;
161
161
  /**
162
162
  * Lets the people who may read a record comment on it, and mention others who may read it too, who get an email. The
163
163
  * record page shows the thread with `l.comments()`, and admins list every comment as Comments. See
164
- * [Record comments](website/src/content/docs/reference/comments.mdx).
164
+ * [Record comments](docs/website/src/content/docs/reference/comments.mdx).
165
165
  */
166
166
  comments(): ResourceBuilder<F, K>;
167
167
  /**
168
168
  * Refreshes the pages open on its records and lists as soon as they change, from the API or elsewhere: the server
169
169
  * tells each open app which records changed, never their values, and the app reads them again as its user. See
170
- * [Live updates](website/src/content/docs/reference/live.mdx).
170
+ * [Live updates](docs/website/src/content/docs/reference/live.mdx).
171
171
  */
172
172
  live(): ResourceBuilder<F, K>;
173
173
  /** The code predicates (`match`) of its events, by event name. */
@@ -185,7 +185,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
185
185
  /**
186
186
  * Rules per operation (`list`, `read`, `create`, `update`, `delete`). A rule returns `true`, `false`, or a filter that
187
187
  * limits the rows. An operation without a rule needs its capability when the app has roles. See
188
- * [Access](website/src/content/docs/reference/access.mdx).
188
+ * [Access](docs/website/src/content/docs/reference/access.mdx).
189
189
  *
190
190
  * @example
191
191
  * ```ts
@@ -202,7 +202,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
202
202
  * secret another service keeps, or a file of settings built from several. `POST /{resource}/{key}:reveal` with
203
203
  * `{ "field": "<name>" }` answers one for a caller who may read the record, after the same audit event as a field's
204
204
  * reveal. Each call adds names, which no field may have. See
205
- * [Computed reveals](website/src/content/docs/reference/data-config.mdx#computed-reveals).
205
+ * [Computed reveals](docs/website/src/content/docs/reference/data-config.mdx#computed-reveals).
206
206
  *
207
207
  * @example
208
208
  * ```ts
@@ -225,7 +225,7 @@ export declare class ResourceBuilder<F extends FieldsInput = {}, K = never> {
225
225
  /**
226
226
  * A resource: one table of an existing database, its columns as fields, its key and the rules around it. `name` is its
227
227
  * address (`/api/v1/<name>`) and how other config refers to it. See
228
- * [Data config](website/src/content/docs/reference/data-config.mdx).
228
+ * [Data config](docs/website/src/content/docs/reference/data-config.mdx).
229
229
  *
230
230
  * @example
231
231
  * ```ts
package/dist/resource.js CHANGED
@@ -6,7 +6,7 @@ import { z } from "zod";
6
6
  //#region src/resource.ts
7
7
  /**
8
8
  * A resource as `resource(name)` builds it. Every method returns a new builder, so a resource is one chain. See
9
- * [resource()](website/src/content/docs/reference/data-config.mdx#resource).
9
+ * [resource()](docs/website/src/content/docs/reference/data-config.mdx#resource).
10
10
  */
11
11
  var ResourceBuilder = class ResourceBuilder {
12
12
  state;
@@ -53,7 +53,7 @@ var ResourceBuilder = class ResourceBuilder {
53
53
  /**
54
54
  * The field that separates tenants: every query is limited to the caller's tenant, creates set it, and a request body
55
55
  * may not. With `across: 'memberships'`, its lists also read the other tenants the caller is a member of, each as the
56
- * caller's role there allows; see [Lists across organizations](website/src/content/docs/reference/access.mdx#lists-across-organizations).
56
+ * caller's role there allows; see [Lists across organizations](docs/website/src/content/docs/reference/access.mdx#lists-across-organizations).
57
57
  */
58
58
  tenant(pick, options = {}) {
59
59
  return this.next({
@@ -87,7 +87,7 @@ var ResourceBuilder = class ResourceBuilder {
87
87
  * A unique key of the table, as its fields, whose conflict on create opens the record already holding those values:
88
88
  * the API's 409 names that record's key (`existing.key`) to a caller who may read it, and the create form opens it.
89
89
  * The fields must be exactly the columns of a unique index or constraint, such as one over a generated column. See
90
- * [Opening an existing record](website/src/content/docs/reference/data-config.mdx#opening-an-existing-record).
90
+ * [Opening an existing record](docs/website/src/content/docs/reference/data-config.mdx#opening-an-existing-record).
91
91
  *
92
92
  * @example
93
93
  * ```ts
@@ -116,7 +116,7 @@ var ResourceBuilder = class ResourceBuilder {
116
116
  * have an order of their own, as an invoice's items do, sorted in the parent's related section. The field must be
117
117
  * sortable and `within` filterable. With `after`, a record never ranks above the records it depends on through a join
118
118
  * resource (see {@link PositionAfterModel}), which `reorder` checks. See
119
- * [Reordering by hand](website/src/content/docs/reference/ui-config.mdx#reordering-by-hand).
119
+ * [Reordering by hand](docs/website/src/content/docs/reference/ui-config.mdx#reordering-by-hand).
120
120
  *
121
121
  * @example
122
122
  * ```ts
@@ -138,7 +138,7 @@ var ResourceBuilder = class ResourceBuilder {
138
138
  * checked with the caller's own access rules on its resource and locked until the write commits. With `read`, every
139
139
  * read of its records (lists, counts, aggregates, gets and labels) also keeps to those whose parent the caller reads
140
140
  * there. A null relation checks nothing; each call adds a check. See
141
- * [Records that belong to another](website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
141
+ * [Records that belong to another](docs/website/src/content/docs/reference/access.mdx#records-that-belong-to-another).
142
142
  *
143
143
  * @example
144
144
  * ```ts
@@ -153,7 +153,7 @@ var ResourceBuilder = class ResourceBuilder {
153
153
  }
154
154
  /**
155
155
  * The events changes to its records raise, captured in the database for every write, from the API or elsewhere. See
156
- * [Declaring events](website/src/content/docs/reference/events.mdx#declaring-events).
156
+ * [Declaring events](docs/website/src/content/docs/reference/events.mdx#declaring-events).
157
157
  *
158
158
  * @example
159
159
  * ```ts
@@ -171,7 +171,7 @@ var ResourceBuilder = class ResourceBuilder {
171
171
  /**
172
172
  * Keeps every change of its records, from the API or elsewhere: the fields before and after, and who made it. The
173
173
  * record page shows it as History, and admins list every change as Activity. See
174
- * [Record history](website/src/content/docs/reference/history.mdx).
174
+ * [Record history](docs/website/src/content/docs/reference/history.mdx).
175
175
  */
176
176
  history() {
177
177
  return this.next({ history: true });
@@ -179,7 +179,7 @@ var ResourceBuilder = class ResourceBuilder {
179
179
  /**
180
180
  * Lets the people who may read a record comment on it, and mention others who may read it too, who get an email. The
181
181
  * record page shows the thread with `l.comments()`, and admins list every comment as Comments. See
182
- * [Record comments](website/src/content/docs/reference/comments.mdx).
182
+ * [Record comments](docs/website/src/content/docs/reference/comments.mdx).
183
183
  */
184
184
  comments() {
185
185
  return this.next({ comments: true });
@@ -187,7 +187,7 @@ var ResourceBuilder = class ResourceBuilder {
187
187
  /**
188
188
  * Refreshes the pages open on its records and lists as soon as they change, from the API or elsewhere: the server
189
189
  * tells each open app which records changed, never their values, and the app reads them again as its user. See
190
- * [Live updates](website/src/content/docs/reference/live.mdx).
190
+ * [Live updates](docs/website/src/content/docs/reference/live.mdx).
191
191
  */
192
192
  live() {
193
193
  return this.next({ live: true });
@@ -211,7 +211,7 @@ var ResourceBuilder = class ResourceBuilder {
211
211
  /**
212
212
  * Rules per operation (`list`, `read`, `create`, `update`, `delete`). A rule returns `true`, `false`, or a filter that
213
213
  * limits the rows. An operation without a rule needs its capability when the app has roles. See
214
- * [Access](website/src/content/docs/reference/access.mdx).
214
+ * [Access](docs/website/src/content/docs/reference/access.mdx).
215
215
  *
216
216
  * @example
217
217
  * ```ts
@@ -233,7 +233,7 @@ var ResourceBuilder = class ResourceBuilder {
233
233
  * secret another service keeps, or a file of settings built from several. `POST /{resource}/{key}:reveal` with
234
234
  * `{ "field": "<name>" }` answers one for a caller who may read the record, after the same audit event as a field's
235
235
  * reveal. Each call adds names, which no field may have. See
236
- * [Computed reveals](website/src/content/docs/reference/data-config.mdx#computed-reveals).
236
+ * [Computed reveals](docs/website/src/content/docs/reference/data-config.mdx#computed-reveals).
237
237
  *
238
238
  * @example
239
239
  * ```ts
@@ -284,7 +284,7 @@ var ResourceBuilder = class ResourceBuilder {
284
284
  /**
285
285
  * A resource: one table of an existing database, its columns as fields, its key and the rules around it. `name` is its
286
286
  * address (`/api/v1/<name>`) and how other config refers to it. See
287
- * [Data config](website/src/content/docs/reference/data-config.mdx).
287
+ * [Data config](docs/website/src/content/docs/reference/data-config.mdx).
288
288
  *
289
289
  * @example
290
290
  * ```ts
@@ -23,7 +23,7 @@ export type UserMenuSource = {
23
23
  };
24
24
  /**
25
25
  * The pages under the signed-in user, at the bottom of the sidebar, above the built-in "Sign out": `m.resource`,
26
- * `m.page` and `m.link`. Export it from the config module. See [User menu](website/src/content/docs/reference/user-menu.md).
26
+ * `m.page` and `m.link`. Export it from the config module. See [User menu](docs/website/src/content/docs/reference/user-menu.md).
27
27
  */
28
28
  export declare const userMenu: (build: (m: typeof items) => UserMenuItemModel[]) => UserMenuSource;
29
29
  //#endregion
package/dist/user-menu.js CHANGED
@@ -26,7 +26,7 @@ const items = {
26
26
  };
27
27
  /**
28
28
  * The pages under the signed-in user, at the bottom of the sidebar, above the built-in "Sign out": `m.resource`,
29
- * `m.page` and `m.link`. Export it from the config module. See [User menu](website/src/content/docs/reference/user-menu.md).
29
+ * `m.page` and `m.link`. Export it from the config module. See [User menu](docs/website/src/content/docs/reference/user-menu.md).
30
30
  */
31
31
  const userMenu = (build) => {
32
32
  const model = { items: build(items) };
@@ -58,7 +58,7 @@ export declare const actions: {
58
58
  })) => ActionModel;
59
59
  /**
60
60
  * Has the model write the `writes` field of the record from `prompt`, `{field}` replaced by the record's values, as the
61
- * user who clicks; see [AI fields and actions](website/src/content/docs/reference/ai.mdx). The prompt may name the
61
+ * user who clicks; see [AI fields and actions](docs/website/src/content/docs/reference/ai.mdx). The prompt may name the
62
62
  * field it writes, to rewrite or translate it in place.
63
63
  */
64
64
  ai: (name: string, o: ActionOptions & {
@@ -96,7 +96,7 @@ const actions = {
96
96
  },
97
97
  /**
98
98
  * Has the model write the `writes` field of the record from `prompt`, `{field}` replaced by the record's values, as the
99
- * user who clicks; see [AI fields and actions](website/src/content/docs/reference/ai.mdx). The prompt may name the
99
+ * user who clicks; see [AI fields and actions](docs/website/src/content/docs/reference/ai.mdx). The prompt may name the
100
100
  * field it writes, to rewrite or translate it in place.
101
101
  */
102
102
  ai: (name, o) => {
@@ -11,7 +11,7 @@ export declare const columns: {
11
11
  * `through`, through a join resource, as a related section's. Each record is a dot in the colour its `status` value
12
12
  * has in its view's `valueColors`, in `sort` order, and a link to the record, showing its card on hover or focus. The
13
13
  * name must not be a field of the resource. See
14
- * [Related records in a list](website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
14
+ * [Related records in a list](docs/website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
15
15
  */
16
16
  related: (name: string, o: Omit<RelatedColumnModel, "name">) => ListColumn;
17
17
  };
@@ -6,7 +6,7 @@ const columns = {
6
6
  * `through`, through a join resource, as a related section's. Each record is a dot in the colour its `status` value
7
7
  * has in its view's `valueColors`, in `sort` order, and a link to the record, showing its card on hover or focus. The
8
8
  * name must not be a field of the resource. See
9
- * [Related records in a list](website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
9
+ * [Related records in a list](docs/website/src/content/docs/reference/ui-config.mdx#related-records-in-a-list).
10
10
  */
11
11
  related: (name, o) => ({
12
12
  kind: "related",