@nanisoft/prism-ui 0.16.0 → 1.0.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.
Files changed (173) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/blocks/activity-feed-01/activity-feed-01.d.ts +120 -190
  3. package/dist/blocks/activity-feed-01/activity-feed-01.d.ts.map +1 -1
  4. package/dist/blocks/activity-feed-01/activity-feed-01.js +107 -97
  5. package/dist/blocks/activity-feed-01/index.d.ts +1 -1
  6. package/dist/blocks/activity-feed-01/index.d.ts.map +1 -1
  7. package/dist/blocks/auth-form-01/auth-form.d.ts +86 -53
  8. package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -1
  9. package/dist/blocks/auth-form-01/auth-form.js +95 -31
  10. package/dist/blocks/auth-form-01/index.d.ts +1 -1
  11. package/dist/blocks/auth-form-01/index.d.ts.map +1 -1
  12. package/dist/blocks/calendar-01/calendar.d.ts +28 -0
  13. package/dist/blocks/calendar-01/calendar.d.ts.map +1 -1
  14. package/dist/blocks/calendar-01/calendar.js +15 -1
  15. package/dist/blocks/card-index-01/card-index.d.ts +225 -0
  16. package/dist/blocks/card-index-01/card-index.d.ts.map +1 -0
  17. package/dist/blocks/card-index-01/card-index.js +154 -0
  18. package/dist/blocks/card-index-01/index.d.ts +3 -0
  19. package/dist/blocks/card-index-01/index.d.ts.map +1 -0
  20. package/dist/blocks/card-index-01/index.js +1 -0
  21. package/dist/blocks/chart-card-01/chart-card-01.d.ts +23 -21
  22. package/dist/blocks/chart-card-01/chart-card-01.d.ts.map +1 -1
  23. package/dist/blocks/chart-card-01/chart-card-01.js +46 -1
  24. package/dist/blocks/chart-card-01/index.d.ts +1 -1
  25. package/dist/blocks/chart-card-01/index.d.ts.map +1 -1
  26. package/dist/blocks/chart-group-01/chart-group-01.d.ts +3 -3
  27. package/dist/blocks/chart-group-01/chart-group-01.d.ts.map +1 -1
  28. package/dist/blocks/contact-01/contact.d.ts +30 -82
  29. package/dist/blocks/contact-01/contact.d.ts.map +1 -1
  30. package/dist/blocks/contact-01/contact.js +59 -30
  31. package/dist/blocks/contact-01/index.d.ts +1 -1
  32. package/dist/blocks/contact-01/index.d.ts.map +1 -1
  33. package/dist/blocks/dashboard-01/dashboard-01.d.ts +26 -71
  34. package/dist/blocks/dashboard-01/dashboard-01.d.ts.map +1 -1
  35. package/dist/blocks/dashboard-01/dashboard-01.js +34 -23
  36. package/dist/blocks/dashboard-01/index.d.ts +1 -1
  37. package/dist/blocks/dashboard-01/index.d.ts.map +1 -1
  38. package/dist/blocks/data-table-01/data-table.d.ts +276 -59
  39. package/dist/blocks/data-table-01/data-table.d.ts.map +1 -1
  40. package/dist/blocks/data-table-01/data-table.js +217 -35
  41. package/dist/blocks/data-table-01/index.d.ts +1 -1
  42. package/dist/blocks/data-table-01/index.d.ts.map +1 -1
  43. package/dist/blocks/directory-01/directory-01.d.ts +23 -2
  44. package/dist/blocks/directory-01/directory-01.d.ts.map +1 -1
  45. package/dist/blocks/directory-01/directory-01.js +3 -3
  46. package/dist/blocks/empty-state-01/empty-state.d.ts +60 -21
  47. package/dist/blocks/empty-state-01/empty-state.d.ts.map +1 -1
  48. package/dist/blocks/empty-state-01/empty-state.js +52 -17
  49. package/dist/blocks/index-detail-01/index-detail.d.ts +85 -0
  50. package/dist/blocks/index-detail-01/index-detail.d.ts.map +1 -0
  51. package/dist/blocks/index-detail-01/index-detail.js +58 -0
  52. package/dist/blocks/index-detail-01/index.d.ts +3 -0
  53. package/dist/blocks/index-detail-01/index.d.ts.map +1 -0
  54. package/dist/blocks/index-detail-01/index.js +1 -0
  55. package/dist/blocks/index.d.ts +20 -8
  56. package/dist/blocks/index.d.ts.map +1 -1
  57. package/dist/blocks/index.js +7 -0
  58. package/dist/blocks/issue-detail-01/issue-detail.d.ts +18 -0
  59. package/dist/blocks/issue-detail-01/issue-detail.d.ts.map +1 -1
  60. package/dist/blocks/issue-detail-01/issue-detail.js +18 -0
  61. package/dist/blocks/nothing-chosen-01/index.d.ts +3 -0
  62. package/dist/blocks/nothing-chosen-01/index.d.ts.map +1 -0
  63. package/dist/blocks/nothing-chosen-01/index.js +1 -0
  64. package/dist/blocks/nothing-chosen-01/nothing-chosen.d.ts +119 -0
  65. package/dist/blocks/nothing-chosen-01/nothing-chosen.d.ts.map +1 -0
  66. package/dist/blocks/nothing-chosen-01/nothing-chosen.js +79 -0
  67. package/dist/blocks/project-dashboard-01/index.d.ts +1 -1
  68. package/dist/blocks/project-dashboard-01/index.d.ts.map +1 -1
  69. package/dist/blocks/project-dashboard-01/project-dashboard.d.ts +21 -27
  70. package/dist/blocks/project-dashboard-01/project-dashboard.d.ts.map +1 -1
  71. package/dist/blocks/project-dashboard-01/project-dashboard.js +45 -5
  72. package/dist/blocks/provisioning-01/index.d.ts +1 -1
  73. package/dist/blocks/provisioning-01/index.d.ts.map +1 -1
  74. package/dist/blocks/provisioning-01/provisioning.d.ts +9 -97
  75. package/dist/blocks/provisioning-01/provisioning.d.ts.map +1 -1
  76. package/dist/blocks/provisioning-01/provisioning.js +26 -13
  77. package/dist/blocks/record-detail-01/index.d.ts +3 -0
  78. package/dist/blocks/record-detail-01/index.d.ts.map +1 -0
  79. package/dist/blocks/record-detail-01/index.js +1 -0
  80. package/dist/blocks/record-detail-01/record-detail.d.ts +239 -0
  81. package/dist/blocks/record-detail-01/record-detail.d.ts.map +1 -0
  82. package/dist/blocks/record-detail-01/record-detail.js +150 -0
  83. package/dist/blocks/record-form-01/index.d.ts +3 -0
  84. package/dist/blocks/record-form-01/index.d.ts.map +1 -0
  85. package/dist/blocks/record-form-01/index.js +1 -0
  86. package/dist/blocks/record-form-01/record-form.d.ts +148 -0
  87. package/dist/blocks/record-form-01/record-form.d.ts.map +1 -0
  88. package/dist/blocks/record-form-01/record-form.js +107 -0
  89. package/dist/blocks/record-grid-01/index.d.ts +3 -0
  90. package/dist/blocks/record-grid-01/index.d.ts.map +1 -0
  91. package/dist/blocks/record-grid-01/index.js +1 -0
  92. package/dist/blocks/record-grid-01/record-grid.d.ts +145 -0
  93. package/dist/blocks/record-grid-01/record-grid.d.ts.map +1 -0
  94. package/dist/blocks/record-grid-01/record-grid.js +114 -0
  95. package/dist/blocks/record-wizard-01/index.d.ts +3 -0
  96. package/dist/blocks/record-wizard-01/index.d.ts.map +1 -0
  97. package/dist/blocks/record-wizard-01/index.js +1 -0
  98. package/dist/blocks/record-wizard-01/record-wizard.d.ts +152 -0
  99. package/dist/blocks/record-wizard-01/record-wizard.d.ts.map +1 -0
  100. package/dist/blocks/record-wizard-01/record-wizard.js +144 -0
  101. package/dist/blocks/settings-members-01/settings-members.d.ts +2 -1
  102. package/dist/blocks/settings-members-01/settings-members.d.ts.map +1 -1
  103. package/dist/blocks/settings-panel-01/index.d.ts +1 -1
  104. package/dist/blocks/settings-panel-01/index.d.ts.map +1 -1
  105. package/dist/blocks/settings-panel-01/settings-panel.d.ts +165 -67
  106. package/dist/blocks/settings-panel-01/settings-panel.d.ts.map +1 -1
  107. package/dist/blocks/settings-panel-01/settings-panel.js +92 -33
  108. package/dist/blocks/signup-01/index.d.ts +1 -1
  109. package/dist/blocks/signup-01/index.d.ts.map +1 -1
  110. package/dist/blocks/signup-01/signup-01.d.ts +10 -84
  111. package/dist/blocks/signup-01/signup-01.d.ts.map +1 -1
  112. package/dist/blocks/signup-01/signup-01.js +41 -23
  113. package/dist/blocks/stats-01/index.d.ts +5 -5
  114. package/dist/blocks/stats-01/index.d.ts.map +1 -1
  115. package/dist/blocks/stats-01/index.js +4 -4
  116. package/dist/blocks/stats-01/stats.d.ts +49 -14
  117. package/dist/blocks/stats-01/stats.d.ts.map +1 -1
  118. package/dist/blocks/stats-01/stats.js +65 -15
  119. package/dist/blocks/trend-01/index.d.ts +1 -1
  120. package/dist/blocks/trend-01/index.d.ts.map +1 -1
  121. package/dist/blocks/trend-01/trend.d.ts +26 -73
  122. package/dist/blocks/trend-01/trend.d.ts.map +1 -1
  123. package/dist/blocks/trend-01/trend.js +47 -30
  124. package/dist/catalog.d.ts.map +1 -1
  125. package/dist/catalog.js +93 -3
  126. package/dist/components/ui/metric.d.ts +4 -2
  127. package/dist/components/ui/metric.d.ts.map +1 -1
  128. package/dist/index.d.ts +10 -0
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +6 -0
  131. package/dist/lib/field-render.d.ts +107 -0
  132. package/dist/lib/field-render.d.ts.map +1 -0
  133. package/dist/lib/field-render.js +251 -0
  134. package/dist/lib/spec.d.ts +609 -0
  135. package/dist/lib/spec.d.ts.map +1 -0
  136. package/dist/lib/spec.js +1 -0
  137. package/dist/live/index.d.ts +2 -0
  138. package/dist/live/index.d.ts.map +1 -1
  139. package/dist/live/index.js +6 -0
  140. package/dist/live/message-thread-01/index.d.ts +3 -0
  141. package/dist/live/message-thread-01/index.d.ts.map +1 -0
  142. package/dist/live/message-thread-01/index.js +1 -0
  143. package/dist/live/message-thread-01/message-thread.d.ts +282 -0
  144. package/dist/live/message-thread-01/message-thread.d.ts.map +1 -0
  145. package/dist/live/message-thread-01/message-thread.js +221 -0
  146. package/dist/live/run-stream-01/run-stream.d.ts +2 -1
  147. package/dist/live/run-stream-01/run-stream.d.ts.map +1 -1
  148. package/dist/live/run-stream-01/run-stream.js +1 -7
  149. package/dist/live/status.d.ts +27 -0
  150. package/dist/live/status.d.ts.map +1 -0
  151. package/dist/live/status.js +15 -0
  152. package/dist/live/tool-call-row.d.ts +26 -0
  153. package/dist/live/tool-call-row.d.ts.map +1 -0
  154. package/dist/live/tool-call-row.js +60 -0
  155. package/dist/live/tool-ledger-01/tool-ledger.d.ts.map +1 -1
  156. package/dist/live/tool-ledger-01/tool-ledger.js +2 -42
  157. package/dist/pages/contact-page/index.d.ts +7 -7
  158. package/dist/pages/contact-page/index.d.ts.map +1 -1
  159. package/dist/pages/contact-page/index.js +17 -5
  160. package/dist/pages/docs-shell/docs-shell.d.ts +42 -30
  161. package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
  162. package/dist/pages/docs-shell/docs-shell.js +70 -48
  163. package/dist/pages/document-page/document-page.d.ts +146 -0
  164. package/dist/pages/document-page/document-page.d.ts.map +1 -0
  165. package/dist/pages/document-page/document-page.js +80 -0
  166. package/dist/pages/document-page/index.d.ts +3 -0
  167. package/dist/pages/document-page/index.d.ts.map +1 -0
  168. package/dist/pages/document-page/index.js +1 -0
  169. package/dist/pages/index.d.ts +2 -0
  170. package/dist/pages/index.d.ts.map +1 -1
  171. package/dist/pages/index.js +6 -0
  172. package/dist/styles.css +59 -3
  173. package/package.json +7 -2
@@ -0,0 +1,146 @@
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
+ import { ActivityFeed01 } from '../../blocks/activity-feed-01/index.js';
3
+ import { Compare01 } from '../../blocks/compare-01/index.js';
4
+ import { DataTable01 } from '../../blocks/data-table-01/index.js';
5
+ import { MemberList01 } from '../../blocks/member-list-01/index.js';
6
+ import { RecordDetail01 } from '../../blocks/record-detail-01/index.js';
7
+ /**
8
+ * A props type with the heading level removed, distributed over a union.
9
+ *
10
+ * `Omit` does not distribute over a union: `Omit<A | B, K>` keeps only the keys
11
+ * the two arms share, so `Omit<DataTable01Props, 'headingLevel'>` would drop the
12
+ * selection arm's own members and a caller could no longer pass `selectable`. The
13
+ * conditional distributes, so each arm loses only its heading level.
14
+ */
15
+ type WithoutHeading<T> = T extends unknown ? Omit<T, 'headingLevel'> : never;
16
+ /**
17
+ * The document read in full, plus its body.
18
+ *
19
+ * It is the props of `RecordDetail01` minus the two the Page decides for it. The
20
+ * `title`, `eyebrow`, `description`, `fields`, `actions` and `relations` are the
21
+ * record's own, unchanged, so the Page mints no document type: a document is a
22
+ * record, and the record detail is the Block that draws one. `headingLevel` is
23
+ * removed because the Page owns the document's `h1`, and `children` is replaced by
24
+ * `body` so the Page can hold the body to the reading measure rather than pass it
25
+ * through untouched.
26
+ */
27
+ export type DocumentPageDocument = Omit<ComponentProps<typeof RecordDetail01>, 'headingLevel' | 'children'> & {
28
+ /**
29
+ * The document's body: the authored copy between the document's facts and its
30
+ * regions.
31
+ *
32
+ * The Page wraps it in `Prose`, so the measure and the block rhythm are the
33
+ * system's and the words are the caller's. Omit it for a document that is only
34
+ * its facts and its regions.
35
+ */
36
+ body?: ReactNode;
37
+ };
38
+ /**
39
+ * One region beside the document body, as the caller's own content.
40
+ *
41
+ * **The union is by arrangement and not by subject matter, and that is the whole
42
+ * of what keeps the Page from minting a document type.** A `version`, a `comment`
43
+ * and a `source` are each a product's word for its own record, and a member naming
44
+ * one of them on a Prism type would promise that every consumer's document holds
45
+ * those things. What the Page knows is which settled Block draws a region: an
46
+ * `activity` is `ActivityFeed01`, a `table` is `DataTable01`, `members` is
47
+ * `MemberList01` and `comparison` is `Compare01`. A version list and a source list
48
+ * are both a `table` with the caller's own columns; a comment thread is `members`
49
+ * or a `table`; the evidence matrix is `comparison`. So the six document variants
50
+ * and the research workspace are one Page under different content, exactly as the
51
+ * decision recorded, and the difference between them is which region the caller
52
+ * put in the list.
53
+ *
54
+ * `key` is the caller's stable key for the region, because a region list is an
55
+ * ordered list and React needs an identity per entry that survives a reorder.
56
+ */
57
+ export type DocumentPageRegion = {
58
+ key: string;
59
+ block: 'activity';
60
+ props: WithoutHeading<ComponentProps<typeof ActivityFeed01>>;
61
+ } | {
62
+ key: string;
63
+ block: 'table';
64
+ props: WithoutHeading<ComponentProps<typeof DataTable01>>;
65
+ } | {
66
+ key: string;
67
+ block: 'members';
68
+ props: WithoutHeading<ComponentProps<typeof MemberList01>>;
69
+ } | {
70
+ key: string;
71
+ block: 'comparison';
72
+ props: WithoutHeading<ComponentProps<typeof Compare01>>;
73
+ };
74
+ /**
75
+ * The props a DocumentPage takes.
76
+ *
77
+ * The document is one prop and the regions are another, because the document read
78
+ * in full is the whole of the page and the regions are what the caller opens
79
+ * beside its body. Every word, value, column, member and arm is the caller's: the
80
+ * Page ships no sentence, holds no document, fetches nothing and owns no editor,
81
+ * no share, no export and no permission.
82
+ */
83
+ export type DocumentPageProps = {
84
+ /** The document read in full, with its body. The Page gives it the page's `h1`. */
85
+ document: DocumentPageDocument;
86
+ /**
87
+ * The regions beside the body, in the order a reader should meet them. Omit the
88
+ * prop for a document that is only its body, which is the deliverable case.
89
+ */
90
+ regions?: readonly DocumentPageRegion[];
91
+ /**
92
+ * Layout only, exactly as on every Component. Changing a Prism-owned visual
93
+ * property from here is prohibited.
94
+ */
95
+ className?: string;
96
+ };
97
+ /**
98
+ * A whole document screen: the document read in full with its body, and one or
99
+ * more regions beside it.
100
+ *
101
+ * **This is a Page authored beside `DocsShell`, and neither of that Page's two
102
+ * rules is relaxed.** `DocsShell` states that a section is a label and not a
103
+ * control, and that a group with no index is a label and not a route. Both are
104
+ * statements about a documentation site's navigation tree, where a section is a
105
+ * topic a reader may reach in any order. This workspace never asks that question:
106
+ * its status is a state of a region of one document and belongs to the Block that
107
+ * draws the region, and its route is the document's own contents. So the two are
108
+ * separate Items, no consumer of `DocsShell` is affected, and this Page owns the
109
+ * document's `h1` because a route renders it for a document and nothing frames it.
110
+ *
111
+ * **One Page draws all seven screens, because the difference between the six
112
+ * document variants and the research workspace is content rather than
113
+ * structure.** The record is the same thing in every one of them: an authored
114
+ * document with a title, a body and a set of things attached to it. What separates
115
+ * them is which region is open beside the body, which is the caller's content, so
116
+ * a version list, a comment thread, a source list, an output list and an evidence
117
+ * matrix are regions of one Page rather than six Items. The Page is the
118
+ * arrangement that places the document and one or more of those regions, and it
119
+ * ships none of their words.
120
+ *
121
+ * **It composes settled Items and mints no document, version, comment or source
122
+ * type.** The document read in full is `RecordDetail01`, and the body is `Prose`.
123
+ * A version list is `ActivityFeed01` or a `table` region; a comment thread is a
124
+ * `members` region or a `table`; a source list and an output list are `table`
125
+ * regions with the caller's per-row destination; the evidence comparison matrix is
126
+ * `Compare01` as a `comparison` region. Nothing here declares a shape named after
127
+ * a product's record, because a document is a record and every attached thing is
128
+ * the caller's own rows.
129
+ *
130
+ * **The editor, the fetch, the retention, the share, the export and the permission
131
+ * are the consumer's.** The Page owns no editor, so an annotation anchored to a
132
+ * passage, a version created, a comment resolved and a document sent are all
133
+ * behaviour and all the caller's. It fetches nothing, so it holds no document, no
134
+ * version history and no source; it owns no retention, no archive and no recovery,
135
+ * which are properties of the caller's store; and it owns no permission, because
136
+ * who may read or comment is the caller's store. Every figure, word and node is a
137
+ * prop.
138
+ *
139
+ * It is a client Component because the Blocks it composes hold state: a table
140
+ * holds its selection and a member list attaches a handler. That is a property of
141
+ * this composition and not of the data, and the caller still owns every row, every
142
+ * callback and every word.
143
+ */
144
+ export declare function DocumentPage({ document, regions, className }: DocumentPageProps): import("react").JSX.Element;
145
+ export default DocumentPage;
146
+ //# sourceMappingURL=document-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-page.d.ts","sourceRoot":"","sources":["../../../src/pages/document-page/document-page.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAK9D;;;;;;;GAOG;AACH,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,KAAK,CAAA;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,cAAc,CAAC,OAAO,cAAc,CAAC,EACrC,cAAc,GAAG,UAAU,CAC5B,GAAG;IACF;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC,CAAA;CAC7D,GACD;IACE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAC1D,GACD;IACE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;CAC3D,GACD;IACE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC,CAAA;CACxD,CAAA;AAEL;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mFAAmF;IACnF,QAAQ,EAAE,oBAAoB,CAAA;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BA2B/E;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment } from 'react';
4
+ import { ActivityFeed01 } from '../../blocks/activity-feed-01/index.js';
5
+ import { Compare01 } from '../../blocks/compare-01/index.js';
6
+ import { DataTable01 } from '../../blocks/data-table-01/index.js';
7
+ import { MemberList01 } from '../../blocks/member-list-01/index.js';
8
+ import { RecordDetail01 } from '../../blocks/record-detail-01/index.js';
9
+ import { Prose } from '../../components/ui/prose.js';
10
+ import { Section } from '../../components/ui/section.js';
11
+ import { cn } from '../../lib/utils.js';
12
+ /**
13
+ * One region, drawn by the Block its arrangement names.
14
+ *
15
+ * The heading level is set here rather than taken from the caller, so every region
16
+ * is a section one level under the document's `h1` and the outline cannot be
17
+ * flattened by a caller who passed the wrong level to a Block.
18
+ */
19
+ function renderRegion(region) {
20
+ if (region.block === 'activity')
21
+ return _jsx(ActivityFeed01, { ...region.props, headingLevel: "h2" });
22
+ if (region.block === 'table')
23
+ return _jsx(DataTable01, { ...region.props, headingLevel: "h2" });
24
+ if (region.block === 'members')
25
+ return _jsx(MemberList01, { ...region.props, headingLevel: "h2" });
26
+ return _jsx(Compare01, { ...region.props, headingLevel: "h2" });
27
+ }
28
+ /**
29
+ * A whole document screen: the document read in full with its body, and one or
30
+ * more regions beside it.
31
+ *
32
+ * **This is a Page authored beside `DocsShell`, and neither of that Page's two
33
+ * rules is relaxed.** `DocsShell` states that a section is a label and not a
34
+ * control, and that a group with no index is a label and not a route. Both are
35
+ * statements about a documentation site's navigation tree, where a section is a
36
+ * topic a reader may reach in any order. This workspace never asks that question:
37
+ * its status is a state of a region of one document and belongs to the Block that
38
+ * draws the region, and its route is the document's own contents. So the two are
39
+ * separate Items, no consumer of `DocsShell` is affected, and this Page owns the
40
+ * document's `h1` because a route renders it for a document and nothing frames it.
41
+ *
42
+ * **One Page draws all seven screens, because the difference between the six
43
+ * document variants and the research workspace is content rather than
44
+ * structure.** The record is the same thing in every one of them: an authored
45
+ * document with a title, a body and a set of things attached to it. What separates
46
+ * them is which region is open beside the body, which is the caller's content, so
47
+ * a version list, a comment thread, a source list, an output list and an evidence
48
+ * matrix are regions of one Page rather than six Items. The Page is the
49
+ * arrangement that places the document and one or more of those regions, and it
50
+ * ships none of their words.
51
+ *
52
+ * **It composes settled Items and mints no document, version, comment or source
53
+ * type.** The document read in full is `RecordDetail01`, and the body is `Prose`.
54
+ * A version list is `ActivityFeed01` or a `table` region; a comment thread is a
55
+ * `members` region or a `table`; a source list and an output list are `table`
56
+ * regions with the caller's per-row destination; the evidence comparison matrix is
57
+ * `Compare01` as a `comparison` region. Nothing here declares a shape named after
58
+ * a product's record, because a document is a record and every attached thing is
59
+ * the caller's own rows.
60
+ *
61
+ * **The editor, the fetch, the retention, the share, the export and the permission
62
+ * are the consumer's.** The Page owns no editor, so an annotation anchored to a
63
+ * passage, a version created, a comment resolved and a document sent are all
64
+ * behaviour and all the caller's. It fetches nothing, so it holds no document, no
65
+ * version history and no source; it owns no retention, no archive and no recovery,
66
+ * which are properties of the caller's store; and it owns no permission, because
67
+ * who may read or comment is the caller's store. Every figure, word and node is a
68
+ * prop.
69
+ *
70
+ * It is a client Component because the Blocks it composes hold state: a table
71
+ * holds its selection and a member list attaches a handler. That is a property of
72
+ * this composition and not of the data, and the caller still owns every row, every
73
+ * callback and every word.
74
+ */
75
+ export function DocumentPage({ document, regions, className }) {
76
+ const { body, ...record } = document;
77
+ const list = regions ?? [];
78
+ return (_jsx(Section, { "data-slot": "document-page", className: cn(className), children: _jsxs("article", { "data-slot": "document-page-article", className: "flex flex-col gap-12", children: [_jsx(RecordDetail01, { ...record, headingLevel: "h1", children: body === undefined ? null : _jsx(Prose, { children: body }) }), list.length === 0 ? null : (_jsx("div", { "data-slot": "document-page-regions", className: "flex flex-col gap-12", children: list.map((region) => (_jsx(Fragment, { children: renderRegion(region) }, region.key))) }))] }) }));
79
+ }
80
+ export default DocumentPage;
@@ -0,0 +1,3 @@
1
+ export { DocumentPage, default } from './document-page.js';
2
+ export type { DocumentPageProps, DocumentPageDocument, DocumentPageRegion, } from './document-page.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/document-page/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACvD,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { DocumentPage, default } from './document-page.js';
@@ -25,6 +25,8 @@ export { BlogPostPage } from './blog-post-page/index.js';
25
25
  export type { BlogPostPageProps, BlogPostTag, BlogPostNeighbour, BlogPostTrailLabels } from './blog-post-page/index.js';
26
26
  export { DocsShell } from './docs-shell/index.js';
27
27
  export type { DocsShellProps, DocsNavEntry, DocsNavPage, DocsNavGroup, DocsNavDivider, DocsPagerLabels, } from './docs-shell/index.js';
28
+ export { DocumentPage } from './document-page/index.js';
29
+ export type { DocumentPageProps, DocumentPageDocument, DocumentPageRegion, } from './document-page/index.js';
28
30
  export { AboutPage } from './about-page/index.js';
29
31
  export { CareersPage } from './careers-page/index.js';
30
32
  export { ChangelogPage } from './changelog-page/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAA;AAOrB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAA;AAQrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AAOxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA"}
@@ -18,6 +18,12 @@ export { AuthPage } from './auth-page/index.js';
18
18
  export { NotFoundPage } from './not-found-page/index.js';
19
19
  export { BlogPostPage } from './blog-post-page/index.js';
20
20
  export { DocsShell } from './docs-shell/index.js';
21
+ /*
22
+ * The document and research workspace. A Page authored beside `DocsShell`, so
23
+ * neither of that Page's two rules is relaxed: a section stays a label and not a
24
+ * control, and a group with no index stays a label and not a route. It composes
25
+ * settled Items and mints no document, version, comment or source type. */
26
+ export { DocumentPage } from './document-page/index.js';
21
27
  /*
22
28
  * the ten screens the 2026-09 expansion added.
23
29
  * Derived by the maintainer rather than authored: each entry is read out of the Item own
package/dist/styles.css CHANGED
@@ -428,9 +428,6 @@
428
428
  .my-1 {
429
429
  margin-block: var(--spacing-1);
430
430
  }
431
- .my-6 {
432
- margin-block: var(--spacing-6);
433
- }
434
431
  .-ms-px {
435
432
  margin-inline-start: -1px;
436
433
  }
@@ -482,6 +479,9 @@
482
479
  .mt-auto {
483
480
  margin-top: auto;
484
481
  }
482
+ .mb-0 {
483
+ margin-bottom: var(--spacing-0);
484
+ }
485
485
  .mb-1 {
486
486
  margin-bottom: var(--spacing-1);
487
487
  }
@@ -1121,6 +1121,9 @@
1121
1121
  .grid-cols-\[minmax\(0\,1fr\)_auto\] {
1122
1122
  grid-template-columns: minmax(0,1fr) auto;
1123
1123
  }
1124
+ .grid-cols-\[minmax\(0\,2fr\)_minmax\(0\,3fr\)\] {
1125
+ grid-template-columns: minmax(0,2fr) minmax(0,3fr);
1126
+ }
1124
1127
  .flex-col {
1125
1128
  flex-direction: column;
1126
1129
  }
@@ -1253,6 +1256,16 @@
1253
1256
  .gap-y-8 {
1254
1257
  row-gap: var(--spacing-8);
1255
1258
  }
1259
+ :where(.divide-y > :not(:last-child)) {
1260
+ --tw-divide-y-reverse: 0;
1261
+ border-bottom-style: var(--tw-border-style);
1262
+ border-top-style: var(--tw-border-style);
1263
+ border-top-width: calc(1px * var(--tw-divide-y-reverse));
1264
+ border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
1265
+ }
1266
+ :where(.divide-border > :not(:last-child)) {
1267
+ border-color: var(--border);
1268
+ }
1256
1269
  .self-center {
1257
1270
  align-self: center;
1258
1271
  }
@@ -1872,6 +1885,9 @@
1872
1885
  .px-8 {
1873
1886
  padding-inline: var(--spacing-8);
1874
1887
  }
1888
+ .py-0 {
1889
+ padding-block: var(--spacing-0);
1890
+ }
1875
1891
  .py-0\.5 {
1876
1892
  padding-block: var(--spacing-0\.5);
1877
1893
  }
@@ -2004,12 +2020,18 @@
2004
2020
  .text-center {
2005
2021
  text-align: center;
2006
2022
  }
2023
+ .text-end {
2024
+ text-align: end;
2025
+ }
2007
2026
  .text-left {
2008
2027
  text-align: left;
2009
2028
  }
2010
2029
  .text-right {
2011
2030
  text-align: right;
2012
2031
  }
2032
+ .text-start {
2033
+ text-align: start;
2034
+ }
2013
2035
  .align-bottom {
2014
2036
  vertical-align: bottom;
2015
2037
  }
@@ -3324,12 +3346,21 @@
3324
3346
  }
3325
3347
  }
3326
3348
  @media (width >= 64rem) {
3349
+ .lg\:absolute {
3350
+ position: absolute;
3351
+ }
3327
3352
  .lg\:sticky {
3328
3353
  position: sticky;
3329
3354
  }
3355
+ .lg\:inset-x-0 {
3356
+ inset-inline: var(--spacing-0);
3357
+ }
3330
3358
  .lg\:top-20 {
3331
3359
  top: var(--spacing-20);
3332
3360
  }
3361
+ .lg\:bottom-0 {
3362
+ bottom: var(--spacing-0);
3363
+ }
3333
3364
  .lg\:order-1 {
3334
3365
  order: 1;
3335
3366
  }
@@ -3372,6 +3403,9 @@
3372
3403
  .lg\:hidden {
3373
3404
  display: none;
3374
3405
  }
3406
+ .lg\:h-8 {
3407
+ height: var(--spacing-8);
3408
+ }
3375
3409
  .lg\:max-h-\[calc\(100svh-7rem\)\] {
3376
3410
  max-height: calc(100svh - 7rem);
3377
3411
  }
@@ -3461,6 +3495,18 @@
3461
3495
  border-left-style: var(--tw-border-style);
3462
3496
  border-left-width: 1px;
3463
3497
  }
3498
+ .lg\:bg-gradient-to-t {
3499
+ --tw-gradient-position: to top in oklab;
3500
+ background-image: linear-gradient(var(--tw-gradient-stops));
3501
+ }
3502
+ .lg\:from-background {
3503
+ --tw-gradient-from: var(--background);
3504
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
3505
+ }
3506
+ .lg\:to-transparent {
3507
+ --tw-gradient-to: transparent;
3508
+ --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
3509
+ }
3464
3510
  .lg\:p-6 {
3465
3511
  padding: var(--spacing-6);
3466
3512
  }
@@ -3831,6 +3877,10 @@
3831
3877
  .\[\&_ul\]\:pl-6 ul {
3832
3878
  padding-left: var(--spacing-6);
3833
3879
  }
3880
+ .\[\&\+\&\]\:border-t + .\[\&\+\&\]\:border-t {
3881
+ border-top-style: var(--tw-border-style);
3882
+ border-top-width: 1px;
3883
+ }
3834
3884
  .\[\&\:\:-webkit-search-cancel-button\]\:appearance-none::-webkit-search-cancel-button {
3835
3885
  appearance: none;
3836
3886
  }
@@ -4576,6 +4626,11 @@
4576
4626
  syntax: "*";
4577
4627
  inherits: false;
4578
4628
  }
4629
+ @property --tw-divide-y-reverse {
4630
+ syntax: "*";
4631
+ inherits: false;
4632
+ initial-value: 0;
4633
+ }
4579
4634
  @property --tw-border-style {
4580
4635
  syntax: "*";
4581
4636
  inherits: false;
@@ -4863,6 +4918,7 @@
4863
4918
  --tw-rotate-z: initial;
4864
4919
  --tw-skew-x: initial;
4865
4920
  --tw-skew-y: initial;
4921
+ --tw-divide-y-reverse: 0;
4866
4922
  --tw-border-style: solid;
4867
4923
  --tw-gradient-position: initial;
4868
4924
  --tw-gradient-from: #0000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanisoft/prism-ui",
3
- "version": "0.16.0",
3
+ "version": "1.0.0",
4
4
  "type": "module",
5
5
  "description": "Prism's React component, block and page library.",
6
6
  "license": "MIT",
@@ -64,6 +64,10 @@
64
64
  "types": "./dist/catalog.d.ts",
65
65
  "default": "./dist/catalog.js"
66
66
  },
67
+ "./spec": {
68
+ "types": "./dist/lib/spec.d.ts",
69
+ "default": "./dist/lib/spec.js"
70
+ },
67
71
  "./styles.css": "./dist/styles.css",
68
72
  "./gates": {
69
73
  "default": "./gates/index.mjs"
@@ -124,7 +128,7 @@
124
128
  "sync": "node scripts/sync-registry.mjs",
125
129
  "validate": "node scripts/validate-registry.mjs",
126
130
  "build": "node scripts/build.mjs && pnpm sync && pnpm validate && node scripts/check-catalogue.mjs && shadcn build && node scripts/check-surface.mjs && node scripts/check-focus-indicators.mjs && node scripts/check-item-docs.mjs && node scripts/check-block-copy.mjs && node scripts/check-item-category.mjs && node scripts/check-block-imports.mjs",
127
- "check": "node scripts/validate-registry.mjs && node scripts/check-catalogue.mjs && node scripts/check-surface.mjs && node scripts/check-focus-indicators.mjs && node scripts/check-breakpoint-variants.mjs && node scripts/check-container-namespace.mjs && node scripts/check-pack-boundary.mjs && node scripts/check-vector-ink.mjs && node scripts/check-client-budget.mjs && node scripts/check-theme-resolution.mjs && node scripts/check-boot-budget.mjs && node scripts/check-item-docs.mjs && node scripts/check-block-copy.mjs && node scripts/check-item-category.mjs && node scripts/check-block-imports.mjs && node scripts/check-gate-kit.mjs && node scripts/check-typeface.mjs && node scripts/check-variant-ink.mjs",
131
+ "check": "node scripts/validate-registry.mjs && node scripts/check-catalogue.mjs && node scripts/check-surface.mjs && node scripts/check-focus-indicators.mjs && node scripts/check-breakpoint-variants.mjs && node scripts/check-container-namespace.mjs && node scripts/check-pack-boundary.mjs && node scripts/check-vector-ink.mjs && node scripts/check-client-budget.mjs && node scripts/check-theme-resolution.mjs && node scripts/check-boot-budget.mjs && node scripts/check-item-docs.mjs && node scripts/check-block-copy.mjs && node scripts/check-item-category.mjs && node scripts/check-block-imports.mjs && node scripts/check-spec-unions.mjs && node scripts/check-gate-kit.mjs && node scripts/check-typeface.mjs && node scripts/check-variant-ink.mjs",
128
132
  "check:gate-kit": "node scripts/check-gate-kit.mjs",
129
133
  "check:vector-ink": "node scripts/check-vector-ink.mjs",
130
134
  "check:client-budget": "node scripts/check-client-budget.mjs",
@@ -139,6 +143,7 @@
139
143
  "check:block-copy": "node scripts/check-block-copy.mjs",
140
144
  "check:item-category": "node scripts/check-item-category.mjs",
141
145
  "check:block-imports": "node scripts/check-block-imports.mjs",
146
+ "check:spec-unions": "node scripts/check-spec-unions.mjs",
142
147
  "test": "vitest run",
143
148
  "typecheck": "tsc --noEmit",
144
149
  "check:typeface": "node scripts/check-typeface.mjs",