@lapis-notes/lapis-plugin-docs 0.0.0-stage → 0.1.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 (196) hide show
  1. package/README.md +188 -2
  2. package/dist/docs/DocsBlockMarkdownEditor.svelte +37 -0
  3. package/dist/docs/DocsBlockMarkdownEditor.svelte.d.ts +13 -0
  4. package/dist/docs/DocsBlockRefPicker.svelte +75 -0
  5. package/dist/docs/DocsBlockRefPicker.svelte.d.ts +11 -0
  6. package/dist/docs/DocsBookEditor.svelte +141 -0
  7. package/dist/docs/DocsBookEditor.svelte.d.ts +10 -0
  8. package/dist/docs/DocsBookNavigation.svelte +838 -0
  9. package/dist/docs/DocsBookNavigation.svelte.d.ts +11 -0
  10. package/dist/docs/DocsBooksColumn.svelte +82 -0
  11. package/dist/docs/DocsBooksColumn.svelte.d.ts +10 -0
  12. package/dist/docs/DocsCardBackMatter.svelte +32 -0
  13. package/dist/docs/DocsCardBackMatter.svelte.d.ts +10 -0
  14. package/dist/docs/DocsCardBlockExtra.svelte +43 -0
  15. package/dist/docs/DocsCardBlockExtra.svelte.d.ts +9 -0
  16. package/dist/docs/DocsCardPreviewFlip.svelte +143 -0
  17. package/dist/docs/DocsCardPreviewFlip.svelte.d.ts +17 -0
  18. package/dist/docs/DocsCardPreviewStack.svelte +135 -0
  19. package/dist/docs/DocsCardPreviewStack.svelte.d.ts +13 -0
  20. package/dist/docs/DocsCardPrompt.svelte +33 -0
  21. package/dist/docs/DocsCardPrompt.svelte.d.ts +8 -0
  22. package/dist/docs/DocsCardReviewAnswer.svelte +45 -0
  23. package/dist/docs/DocsCardReviewAnswer.svelte.d.ts +8 -0
  24. package/dist/docs/DocsCardTagChips.svelte +19 -0
  25. package/dist/docs/DocsCardTagChips.svelte.d.ts +7 -0
  26. package/dist/docs/DocsCardsPanel.svelte +232 -0
  27. package/dist/docs/DocsCardsPanel.svelte.d.ts +17 -0
  28. package/dist/docs/DocsCardsReview.css +1050 -0
  29. package/dist/docs/DocsChapterFooter.svelte +248 -0
  30. package/dist/docs/DocsChapterFooter.svelte.d.ts +11 -0
  31. package/dist/docs/DocsChapterScrollRing.svelte +101 -0
  32. package/dist/docs/DocsChapterScrollRing.svelte.d.ts +6 -0
  33. package/dist/docs/DocsDisplayPanel.css +627 -0
  34. package/dist/docs/DocsDisplayPanel.svelte +78 -0
  35. package/dist/docs/DocsDisplayPanel.svelte.d.ts +16 -0
  36. package/dist/docs/DocsEditorPanel.css +325 -0
  37. package/dist/docs/DocsEditorPanel.svelte +570 -0
  38. package/dist/docs/DocsEditorPanel.svelte.d.ts +22 -0
  39. package/dist/docs/DocsFlipCard.svelte +68 -0
  40. package/dist/docs/DocsFlipCard.svelte.d.ts +8 -0
  41. package/dist/docs/DocsFolderDirectoryList.svelte +206 -0
  42. package/dist/docs/DocsFolderDirectoryList.svelte.d.ts +14 -0
  43. package/dist/docs/DocsFolderPanel.css +357 -0
  44. package/dist/docs/DocsFolderPanel.svelte +102 -0
  45. package/dist/docs/DocsFolderPanel.svelte.d.ts +17 -0
  46. package/dist/docs/DocsLinksPanel.css +61 -0
  47. package/dist/docs/DocsLinksPanel.svelte +55 -0
  48. package/dist/docs/DocsLinksPanel.svelte.d.ts +11 -0
  49. package/dist/docs/DocsMarkdownField.svelte +93 -0
  50. package/dist/docs/DocsMarkdownField.svelte.d.ts +11 -0
  51. package/dist/docs/DocsMarkdownPreview.svelte +278 -0
  52. package/dist/docs/DocsMarkdownPreview.svelte.d.ts +17 -0
  53. package/dist/docs/DocsReviewPanel.svelte +63 -0
  54. package/dist/docs/DocsReviewPanel.svelte.d.ts +11 -0
  55. package/dist/docs/DocsRichBlock.svelte +291 -0
  56. package/dist/docs/DocsRichBlock.svelte.d.ts +13 -0
  57. package/dist/docs/DocsRichDisplay.svelte +316 -0
  58. package/dist/docs/DocsRichDisplay.svelte.d.ts +14 -0
  59. package/dist/docs/DocsSlidesPreview.css +243 -0
  60. package/dist/docs/DocsSlidesPreview.svelte +206 -0
  61. package/dist/docs/DocsSlidesPreview.svelte.d.ts +10 -0
  62. package/dist/docs/DocsWorkspace.css +570 -0
  63. package/dist/docs/DocsWorkspace.svelte +831 -0
  64. package/dist/docs/DocsWorkspace.svelte.d.ts +48 -0
  65. package/dist/docs/DocsWorkspaceToolbar.svelte +211 -0
  66. package/dist/docs/DocsWorkspaceToolbar.svelte.d.ts +27 -0
  67. package/dist/docs/candidates/ChoiceMenu.svelte +114 -0
  68. package/dist/docs/candidates/ChoiceMenu.svelte.d.ts +10 -0
  69. package/dist/docs/candidates/FlipCardDeck.svelte +800 -0
  70. package/dist/docs/candidates/FlipCardDeck.svelte.d.ts +36 -0
  71. package/dist/docs/candidates/MarkdownFloatingToc.svelte +313 -0
  72. package/dist/docs/candidates/MarkdownFloatingToc.svelte.d.ts +14 -0
  73. package/dist/docs/candidates/SearchableChoicePicker.css +161 -0
  74. package/dist/docs/candidates/SearchableChoicePicker.svelte +208 -0
  75. package/dist/docs/candidates/SearchableChoicePicker.svelte.d.ts +19 -0
  76. package/dist/docs/candidates/StructuredTable.svelte +98 -0
  77. package/dist/docs/candidates/StructuredTable.svelte.d.ts +8 -0
  78. package/dist/docs/candidates/StructuredTableEditor.svelte +374 -0
  79. package/dist/docs/candidates/StructuredTableEditor.svelte.d.ts +12 -0
  80. package/dist/docs/candidates/TagEditor.svelte +31 -0
  81. package/dist/docs/candidates/TagEditor.svelte.d.ts +14 -0
  82. package/dist/docs/candidates/WorkspaceHistoryControls.svelte +112 -0
  83. package/dist/docs/candidates/WorkspaceHistoryControls.svelte.d.ts +8 -0
  84. package/dist/docs/candidates/markdown-floating-toc.css +151 -0
  85. package/dist/docs/candidates/markdown-floating-toc.d.ts +1 -0
  86. package/dist/docs/candidates/markdown-floating-toc.js +1 -0
  87. package/dist/docs/docs-anki-import.d.ts +34 -0
  88. package/dist/docs/docs-anki-import.js +516 -0
  89. package/dist/docs/docs-book-view-model.d.ts +9 -0
  90. package/dist/docs/docs-book-view-model.js +71 -0
  91. package/dist/docs/docs-card-answer-markdown.d.ts +1 -0
  92. package/dist/docs/docs-card-answer-markdown.js +63 -0
  93. package/dist/docs/docs-card-display.d.ts +10 -0
  94. package/dist/docs/docs-card-display.js +18 -0
  95. package/dist/docs/docs-display-focus.d.ts +7 -0
  96. package/dist/docs/docs-display-focus.js +42 -0
  97. package/dist/docs/docs-document-surface.d.ts +7 -0
  98. package/dist/docs/docs-document-surface.js +25 -0
  99. package/dist/docs/docs-folder-directory.d.ts +21 -0
  100. package/dist/docs/docs-folder-directory.js +56 -0
  101. package/dist/docs/docs-link-mode.d.ts +16 -0
  102. package/dist/docs/docs-link-mode.js +94 -0
  103. package/dist/docs/docs-workspace-helpers.d.ts +25 -0
  104. package/dist/docs/docs-workspace-helpers.js +195 -0
  105. package/dist/docs/docs.tokens.css +13 -0
  106. package/dist/docs/import-anki-package.d.ts +10 -0
  107. package/dist/docs/import-anki-package.js +30 -0
  108. package/dist/docs/lapis-markdown-extensions.d.ts +9 -0
  109. package/dist/docs/lapis-markdown-extensions.js +128 -0
  110. package/dist/docs/pin-reading-chrome.d.ts +4 -0
  111. package/dist/docs/pin-reading-chrome.js +32 -0
  112. package/dist/docs/sidebar/DocsFoldersSidebar.svelte +134 -0
  113. package/dist/docs/sidebar/DocsFoldersSidebar.svelte.d.ts +15 -0
  114. package/dist/docs/sidebar/DocsLinksSidebar.svelte +105 -0
  115. package/dist/docs/sidebar/DocsLinksSidebar.svelte.d.ts +11 -0
  116. package/dist/docs/sidebar/DocsSidebar.css +346 -0
  117. package/dist/docs/sidebar/DocsSidebar.svelte +430 -0
  118. package/dist/docs/sidebar/DocsSidebar.svelte.d.ts +18 -0
  119. package/dist/docs/sidebar/DocsSidebarHost.svelte +139 -0
  120. package/dist/docs/sidebar/DocsSidebarHost.svelte.d.ts +12 -0
  121. package/dist/docs/sidebar/DocsTagsSidebar.svelte +176 -0
  122. package/dist/docs/sidebar/DocsTagsSidebar.svelte.d.ts +12 -0
  123. package/dist/docs/sidebar/docs-book-note-tree.d.ts +23 -0
  124. package/dist/docs/sidebar/docs-book-note-tree.js +88 -0
  125. package/dist/docs/sidebar/docs-note-sort.d.ts +26 -0
  126. package/dist/docs/sidebar/docs-note-sort.js +54 -0
  127. package/dist/docs/sidebar/docs-sidebar-filters.d.ts +17 -0
  128. package/dist/docs/sidebar/docs-sidebar-filters.js +74 -0
  129. package/dist/docs/sidebar/docs-sidebar-ui-storage.d.ts +24 -0
  130. package/dist/docs/sidebar/docs-sidebar-ui-storage.js +87 -0
  131. package/dist/docs/sidebar/docs-source-folder-tree.d.ts +16 -0
  132. package/dist/docs/sidebar/docs-source-folder-tree.js +143 -0
  133. package/dist/docs/sidebar/docs-tag-tree.d.ts +17 -0
  134. package/dist/docs/sidebar/docs-tag-tree.js +84 -0
  135. package/dist/docs-cards-view.d.ts +18 -0
  136. package/dist/docs-cards-view.js +52 -0
  137. package/dist/docs-document-view.d.ts +24 -0
  138. package/dist/docs-document-view.js +127 -0
  139. package/dist/docs-document-workspace.svelte +215 -0
  140. package/dist/docs-document-workspace.svelte.d.ts +16 -0
  141. package/dist/docs-index.d.ts +5 -0
  142. package/dist/docs-index.js +49 -0
  143. package/dist/docs-path.d.ts +6 -0
  144. package/dist/docs-path.js +10 -0
  145. package/dist/docs-plugin.d.ts +21 -0
  146. package/dist/docs-plugin.js +140 -0
  147. package/dist/docs-repository.d.ts +15 -0
  148. package/dist/docs-repository.js +75 -0
  149. package/dist/docs-review-view.d.ts +18 -0
  150. package/dist/docs-review-view.js +52 -0
  151. package/dist/docs-settings-tab.d.ts +8 -0
  152. package/dist/docs-settings-tab.js +25 -0
  153. package/dist/docs-settings.d.ts +17 -0
  154. package/dist/docs-settings.js +38 -0
  155. package/dist/docs-view.d.ts +22 -0
  156. package/dist/docs-view.js +51 -0
  157. package/dist/docs-workspace.svelte +394 -0
  158. package/dist/docs-workspace.svelte.d.ts +15 -0
  159. package/dist/index.d.ts +12 -0
  160. package/dist/index.js +12 -0
  161. package/dist/model/book.d.ts +6 -0
  162. package/dist/model/book.js +101 -0
  163. package/dist/model/coding-runtime.d.ts +4 -0
  164. package/dist/model/coding-runtime.js +9 -0
  165. package/dist/model/docs-card-context.d.ts +32 -0
  166. package/dist/model/docs-card-context.js +89 -0
  167. package/dist/model/docs-card-preview-stack-motion.d.ts +51 -0
  168. package/dist/model/docs-card-preview-stack-motion.js +94 -0
  169. package/dist/model/docs-media-context.d.ts +9 -0
  170. package/dist/model/docs-media-context.js +18 -0
  171. package/dist/model/docs-note-list.d.ts +8 -0
  172. package/dist/model/docs-note-list.js +25 -0
  173. package/dist/model/docs-relative-media.d.ts +30 -0
  174. package/dist/model/docs-relative-media.js +116 -0
  175. package/dist/model/docs-review-constants.d.ts +4 -0
  176. package/dist/model/docs-review-constants.js +13 -0
  177. package/dist/model/fsrs.d.ts +14 -0
  178. package/dist/model/fsrs.js +153 -0
  179. package/dist/model/graph.d.ts +12 -0
  180. package/dist/model/graph.js +169 -0
  181. package/dist/model/index.d.ts +14 -0
  182. package/dist/model/index.js +14 -0
  183. package/dist/model/markdown-normalize.d.ts +11 -0
  184. package/dist/model/markdown-normalize.js +755 -0
  185. package/dist/model/markdown.d.ts +167 -0
  186. package/dist/model/markdown.js +365 -0
  187. package/dist/model/sample.d.ts +7 -0
  188. package/dist/model/sample.js +524 -0
  189. package/dist/model/types.d.ts +328 -0
  190. package/dist/model/types.js +1 -0
  191. package/dist/model/workspace.d.ts +6 -0
  192. package/dist/model/workspace.js +81 -0
  193. package/dist/storybook.css +52 -0
  194. package/dist/styles.css +1 -0
  195. package/manifest.json +11 -0
  196. package/package.json +147 -4
@@ -0,0 +1,627 @@
1
+ .docs-reading-anchor {
2
+ position: absolute;
3
+ z-index: 5;
4
+ margin: 0;
5
+ pointer-events: none;
6
+ }
7
+
8
+ .docs-reading-edge {
9
+ position: absolute;
10
+ top: 50%;
11
+ right: max(
12
+ calc(0.8rem + var(--markdown-floating-toc-scrollbar-offset, 1rem)),
13
+ calc(env(safe-area-inset-right) + var(--markdown-floating-toc-scrollbar-offset, 1rem))
14
+ );
15
+ z-index: 35;
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: flex-end;
19
+ gap: 0.45rem;
20
+ transform: translateY(-50%);
21
+ pointer-events: none;
22
+ }
23
+
24
+ .docs-reading-edge > .markdown-floating-toc {
25
+ position: relative;
26
+ top: auto;
27
+ right: auto;
28
+ height: auto;
29
+ min-height: 0;
30
+ transform: none;
31
+ }
32
+
33
+ .docs-reading-edge .markdown-floating-toc__rail {
34
+ position: relative;
35
+ top: auto;
36
+ right: auto;
37
+ margin-left: auto;
38
+ transform: none;
39
+ }
40
+
41
+ .docs-reading-edge .docs-chapter-scroll-ring {
42
+ margin-right: calc((var(--markdown-floating-toc-gutter, 1.45rem) - 2.35rem) / 2);
43
+ }
44
+
45
+ .docs-display-view {
46
+ position: relative;
47
+ min-height: 0;
48
+ flex: 1;
49
+ background:
50
+ linear-gradient(
51
+ 135deg,
52
+ color-mix(in srgb, #4f46e5 8%, transparent),
53
+ transparent 18rem
54
+ ),
55
+ linear-gradient(
56
+ 315deg,
57
+ color-mix(in srgb, #10b981 7%, transparent),
58
+ transparent 16rem
59
+ ),
60
+ color-mix(in srgb, var(--docs-surface) 92%, var(--docs-subtle));
61
+ }
62
+
63
+ .docs-display-view__content {
64
+ display: flex;
65
+ min-height: 100%;
66
+ flex-direction: column;
67
+ gap: 1rem;
68
+ padding: 1rem 1.5rem 1rem 1rem;
69
+ }
70
+
71
+ .docs-display-preview {
72
+ width: min(100%, 74rem);
73
+ max-width: none;
74
+ margin: 0 auto;
75
+ color: var(--foreground, #111);
76
+ font-size: 0.95rem;
77
+ line-height: 1.65;
78
+ padding: 0;
79
+ }
80
+
81
+ .docs-display-view--slides {
82
+ overflow: hidden;
83
+ }
84
+
85
+ .docs-display-view--slides .docs-display-view__content {
86
+ min-height: 100%;
87
+ }
88
+
89
+ .docs-display-preview--slides {
90
+ display: flex;
91
+ flex: 1 1 auto;
92
+ min-height: 0;
93
+ width: min(100%, 86rem);
94
+ padding-bottom: 0;
95
+ }
96
+
97
+ .docs-rich-outline a:hover,
98
+ .docs-rich-outline a:focus-visible,
99
+ .docs-rich-resource a:hover,
100
+ .docs-rich-resource a:focus-visible {
101
+ outline: 0;
102
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--docs-accent) 18%, transparent);
103
+ }
104
+
105
+ .docs-rich-document {
106
+ --markdown-floating-toc-scrollbar-offset: 1rem;
107
+ position: relative;
108
+ display: grid;
109
+ gap: 1.25rem;
110
+ padding-inline-end: calc(
111
+ var(--markdown-floating-toc-gutter, 1.45rem) + var(--markdown-floating-toc-scrollbar-offset, 1rem)
112
+ );
113
+ }
114
+
115
+ .docs-rich-hero,
116
+ .docs-rich-outline,
117
+ .docs-rich-block {
118
+ border: 1px solid color-mix(in srgb, var(--docs-border) 82%, transparent);
119
+ border-radius: 0.75rem;
120
+ background: color-mix(in srgb, var(--docs-surface) 94%, transparent);
121
+ box-shadow: 0 18px 45px color-mix(in srgb, #000 7%, transparent);
122
+ }
123
+
124
+ .docs-rich-hero {
125
+ display: grid;
126
+ gap: 0.9rem;
127
+ overflow: hidden;
128
+ padding: clamp(1.25rem, 4vw, 2.5rem);
129
+ }
130
+
131
+ .docs-rich-hero__eyebrow,
132
+ .docs-rich-goal,
133
+ .docs-rich-block__header,
134
+ .docs-rich-point-list li,
135
+ .docs-rich-note,
136
+ .docs-rich-resource {
137
+ display: flex;
138
+ align-items: center;
139
+ }
140
+
141
+ .docs-rich-hero__eyebrow,
142
+ .docs-rich-block__header p,
143
+ .docs-rich-goal span,
144
+ .docs-rich-outline p {
145
+ color: var(--docs-muted);
146
+ font-size: 0.72rem;
147
+ font-weight: 800;
148
+ letter-spacing: 0.04em;
149
+ text-transform: uppercase;
150
+ }
151
+
152
+ .docs-rich-hero__eyebrow {
153
+ gap: 0.4rem;
154
+ color: color-mix(in srgb, var(--docs-accent) 82%, var(--foreground));
155
+ }
156
+
157
+ .docs-rich-hero__eyebrow svg,
158
+ .docs-rich-goal svg,
159
+ .docs-rich-block__icon svg,
160
+ .docs-rich-point-list svg,
161
+ .docs-rich-note svg,
162
+ .docs-rich-resource svg {
163
+ width: 1rem;
164
+ height: 1rem;
165
+ flex: none;
166
+ }
167
+
168
+ .docs-rich-hero h1 {
169
+ max-width: 15ch;
170
+ margin: 0;
171
+ font-size: clamp(2rem, 4vw, 3.8rem);
172
+ font-weight: 850;
173
+ letter-spacing: 0;
174
+ line-height: 1;
175
+ text-wrap: balance;
176
+ }
177
+
178
+ .docs-rich-hero__summary {
179
+ max-width: 48rem;
180
+ margin: 0;
181
+ color: color-mix(in srgb, var(--foreground) 78%, var(--docs-muted));
182
+ font-size: clamp(1rem, 2vw, 1.2rem);
183
+ line-height: 1.65;
184
+ }
185
+
186
+ .docs-rich-goal {
187
+ max-width: 46rem;
188
+ gap: 0.75rem;
189
+ border: 1px solid color-mix(in srgb, #10b981 28%, var(--docs-border));
190
+ border-radius: 0.65rem;
191
+ background: color-mix(in srgb, #10b981 9%, var(--docs-surface));
192
+ padding: 0.85rem 1rem;
193
+ }
194
+
195
+ .docs-rich-goal svg {
196
+ color: #059669;
197
+ }
198
+
199
+ .docs-rich-goal p {
200
+ margin: 0.12rem 0 0;
201
+ font-size: 0.95rem;
202
+ font-weight: 650;
203
+ line-height: 1.45;
204
+ }
205
+
206
+ .docs-rich-tags {
207
+ display: flex;
208
+ flex-wrap: wrap;
209
+ gap: 0.45rem;
210
+ }
211
+
212
+ .docs-rich-tags span {
213
+ border-radius: 999px;
214
+ background: color-mix(in srgb, var(--docs-accent) 10%, transparent);
215
+ color: color-mix(in srgb, var(--docs-accent) 86%, var(--foreground));
216
+ font-size: 0.75rem;
217
+ font-weight: 800;
218
+ padding: 0.26rem 0.6rem;
219
+ }
220
+
221
+ .docs-rich-outline {
222
+ display: grid;
223
+ grid-template-columns: minmax(9rem, 12rem) 1fr;
224
+ gap: 1rem;
225
+ padding: 1rem;
226
+ }
227
+
228
+ .docs-rich-outline p,
229
+ .docs-rich-outline span,
230
+ .docs-rich-block__header p,
231
+ .docs-rich-panel h3,
232
+ .docs-rich-grid h3,
233
+ .docs-rich-story-grid h3,
234
+ .docs-rich-meta-grid h3 {
235
+ margin: 0;
236
+ }
237
+
238
+ .docs-rich-outline > div > span {
239
+ color: var(--docs-muted);
240
+ font-size: 0.82rem;
241
+ }
242
+
243
+ .docs-rich-outline ol {
244
+ display: grid;
245
+ grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
246
+ gap: 0.55rem;
247
+ margin: 0;
248
+ padding: 0;
249
+ list-style: none;
250
+ }
251
+
252
+ .docs-rich-outline a {
253
+ display: grid;
254
+ grid-template-columns: auto 1fr;
255
+ gap: 0.15rem 0.55rem;
256
+ min-height: 3.5rem;
257
+ border: 1px solid color-mix(in srgb, var(--docs-border) 76%, transparent);
258
+ border-radius: 0.55rem;
259
+ color: inherit;
260
+ text-decoration: none;
261
+ padding: 0.65rem;
262
+ }
263
+
264
+ .docs-rich-outline a > span {
265
+ grid-row: span 2;
266
+ display: grid;
267
+ width: 1.65rem;
268
+ height: 1.65rem;
269
+ place-items: center;
270
+ border-radius: 999px;
271
+ background: color-mix(in srgb, #f59e0b 16%, transparent);
272
+ color: #b45309;
273
+ font-size: 0.72rem;
274
+ font-weight: 850;
275
+ }
276
+
277
+ .docs-rich-outline strong,
278
+ .docs-rich-outline small {
279
+ min-width: 0;
280
+ overflow-wrap: anywhere;
281
+ }
282
+
283
+ .docs-rich-outline strong {
284
+ font-size: 0.85rem;
285
+ line-height: 1.25;
286
+ }
287
+
288
+ .docs-rich-outline small {
289
+ color: var(--docs-muted);
290
+ font-size: 0.72rem;
291
+ font-weight: 700;
292
+ }
293
+
294
+ .docs-rich-blocks {
295
+ display: grid;
296
+ gap: 1rem;
297
+ }
298
+
299
+ .docs-rich-block {
300
+ --block-accent: var(--docs-accent);
301
+ --docs-rich-header-icon: 2.35rem;
302
+ --docs-rich-header-gap: 0.75rem;
303
+ display: grid;
304
+ gap: 1rem;
305
+ overflow: hidden;
306
+ padding: clamp(1rem, 3vw, 1.5rem);
307
+ }
308
+
309
+ .docs-rich-block--concept,
310
+ .docs-rich-block--story {
311
+ --block-accent: #7c3aed;
312
+ }
313
+
314
+ .docs-rich-block--procedure,
315
+ .docs-rich-block--resources {
316
+ --block-accent: #0891b2;
317
+ }
318
+
319
+ .docs-rich-block--prompt,
320
+ .docs-rich-block--callout {
321
+ --block-accent: #dc2626;
322
+ }
323
+
324
+ .docs-rich-block--code,
325
+ .docs-rich-block--table {
326
+ --block-accent: #059669;
327
+ }
328
+
329
+ .docs-rich-block--markdown {
330
+ --block-accent: #2563eb;
331
+ }
332
+
333
+ .docs-rich-block--markdown:not(:has(.docs-rich-block__header)) {
334
+ gap: 0.75rem;
335
+ padding-block: 0.35rem;
336
+ }
337
+
338
+ .docs-rich-block__header {
339
+ gap: var(--docs-rich-header-gap);
340
+ }
341
+
342
+ .docs-rich-block:has(> .docs-rich-block__header) > .docs-markdown-preview-root {
343
+ padding-inline-start: calc(var(--docs-rich-header-icon) + var(--docs-rich-header-gap));
344
+ }
345
+
346
+ .docs-rich-block__icon {
347
+ display: grid;
348
+ width: var(--docs-rich-header-icon);
349
+ height: var(--docs-rich-header-icon);
350
+ flex: none;
351
+ place-items: center;
352
+ border-radius: 0.65rem;
353
+ background: color-mix(in srgb, var(--block-accent) 12%, transparent);
354
+ color: var(--block-accent);
355
+ }
356
+
357
+ .docs-rich-block h2 {
358
+ margin: 0.15rem 0 0;
359
+ font-size: clamp(1.28rem, 2vw, 1.75rem);
360
+ font-weight: 850;
361
+ letter-spacing: 0;
362
+ line-height: 1.15;
363
+ text-wrap: balance;
364
+ }
365
+
366
+ .docs-rich-flow {
367
+ display: grid;
368
+ gap: 0.85rem;
369
+ }
370
+
371
+ .docs-rich-lede {
372
+ margin: 0;
373
+ color: color-mix(in srgb, var(--foreground) 82%, var(--docs-muted));
374
+ font-size: 1rem;
375
+ font-weight: 650;
376
+ line-height: 1.65;
377
+ }
378
+
379
+ .docs-rich-point-list,
380
+ .docs-rich-grid ul,
381
+ .docs-rich-meta-grid ul {
382
+ margin: 0;
383
+ padding: 0;
384
+ list-style: none;
385
+ }
386
+
387
+ .docs-rich-point-list {
388
+ display: grid;
389
+ gap: 0.55rem;
390
+ }
391
+
392
+ .docs-rich-point-list li {
393
+ gap: 0.5rem;
394
+ border-bottom: 1px solid color-mix(in srgb, var(--docs-border) 68%, transparent);
395
+ font-weight: 650;
396
+ padding-bottom: 0.55rem;
397
+ }
398
+
399
+ .docs-rich-point-list svg {
400
+ color: #10b981;
401
+ }
402
+
403
+ .docs-rich-steps {
404
+ display: grid;
405
+ gap: 0.75rem;
406
+ }
407
+
408
+ .docs-rich-step {
409
+ display: grid;
410
+ grid-template-columns: auto 1fr;
411
+ gap: 0.75rem;
412
+ }
413
+
414
+ .docs-rich-step span {
415
+ display: grid;
416
+ width: 1.8rem;
417
+ height: 1.8rem;
418
+ place-items: center;
419
+ border-radius: 999px;
420
+ background: color-mix(in srgb, var(--block-accent) 14%, transparent);
421
+ color: var(--block-accent);
422
+ font-size: 0.75rem;
423
+ font-weight: 850;
424
+ }
425
+
426
+ .docs-rich-step p {
427
+ margin: 0;
428
+ padding-top: 0.12rem;
429
+ }
430
+
431
+ .docs-rich-note,
432
+ .docs-rich-panel,
433
+ .docs-rich-grid > div,
434
+ .docs-rich-story-grid > div,
435
+ .docs-rich-meta-grid > div,
436
+ .docs-rich-callout {
437
+ border: 1px solid color-mix(in srgb, var(--block-accent) 18%, var(--docs-border));
438
+ border-radius: 0.65rem;
439
+ background: color-mix(in srgb, var(--block-accent) 6%, var(--docs-surface));
440
+ padding: 0.85rem;
441
+ }
442
+
443
+ .docs-rich-note {
444
+ align-items: flex-start;
445
+ gap: 0.65rem;
446
+ }
447
+
448
+ .docs-rich-note svg {
449
+ margin-top: 0.08rem;
450
+ color: var(--block-accent);
451
+ }
452
+
453
+ .docs-rich-grid,
454
+ .docs-rich-story-grid,
455
+ .docs-rich-meta-grid,
456
+ .docs-rich-resource-grid {
457
+ display: grid;
458
+ grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
459
+ gap: 0.75rem;
460
+ }
461
+
462
+ .docs-rich-panel h3,
463
+ .docs-rich-grid h3,
464
+ .docs-rich-story-grid h3,
465
+ .docs-rich-meta-grid h3 {
466
+ color: color-mix(in srgb, var(--block-accent) 76%, var(--foreground));
467
+ font-size: 0.78rem;
468
+ font-weight: 850;
469
+ text-transform: uppercase;
470
+ }
471
+
472
+ .docs-rich-grid ul,
473
+ .docs-rich-meta-grid ul {
474
+ display: grid;
475
+ gap: 0.35rem;
476
+ margin-top: 0.5rem;
477
+ }
478
+
479
+ .docs-rich-grid li,
480
+ .docs-rich-meta-grid li {
481
+ position: relative;
482
+ padding-left: 0.9rem;
483
+ }
484
+
485
+ .docs-rich-grid li::before,
486
+ .docs-rich-meta-grid li::before {
487
+ position: absolute;
488
+ top: 0.65em;
489
+ left: 0;
490
+ width: 0.35rem;
491
+ height: 0.35rem;
492
+ border-radius: 999px;
493
+ background: var(--block-accent);
494
+ content: '';
495
+ }
496
+
497
+ .docs-rich-panel--answer {
498
+ border-color: color-mix(in srgb, #10b981 24%, var(--docs-border));
499
+ background: color-mix(in srgb, #10b981 7%, var(--docs-surface));
500
+ }
501
+
502
+ .docs-rich-block pre {
503
+ overflow-x: auto;
504
+ margin: 0;
505
+ border-radius: 0.7rem;
506
+ background: color-mix(in srgb, var(--foreground) 9%, transparent);
507
+ color: inherit;
508
+ padding: 1rem;
509
+ }
510
+
511
+ .docs-rich-block pre:has(> .mira-code-block) {
512
+ background: transparent;
513
+ border-radius: 0;
514
+ padding: 0;
515
+ }
516
+
517
+ .docs-rich-block code {
518
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
519
+ font-size: 0.86rem;
520
+ }
521
+
522
+ .docs-rich-table-wrap {
523
+ overflow-x: auto;
524
+ }
525
+
526
+ .docs-rich-table-wrap table {
527
+ width: 100%;
528
+ border-collapse: collapse;
529
+ overflow: hidden;
530
+ border-radius: 0.65rem;
531
+ font-size: 0.88rem;
532
+ }
533
+
534
+ .docs-rich-table-wrap th,
535
+ .docs-rich-table-wrap td {
536
+ border-bottom: 1px solid color-mix(in srgb, var(--docs-border) 75%, transparent);
537
+ text-align: left;
538
+ vertical-align: top;
539
+ padding: 0.7rem;
540
+ }
541
+
542
+ .docs-rich-table-wrap th {
543
+ background: color-mix(in srgb, var(--block-accent) 10%, transparent);
544
+ color: color-mix(in srgb, var(--block-accent) 76%, var(--foreground));
545
+ font-size: 0.75rem;
546
+ font-weight: 850;
547
+ text-transform: uppercase;
548
+ }
549
+
550
+ .docs-rich-callout {
551
+ display: grid;
552
+ gap: 0.35rem;
553
+ --block-accent: #2563eb;
554
+ }
555
+
556
+ .docs-rich-callout--tip {
557
+ --block-accent: #059669;
558
+ }
559
+
560
+ .docs-rich-callout--warning {
561
+ --block-accent: #d97706;
562
+ }
563
+
564
+ .docs-rich-callout--critical {
565
+ --block-accent: #dc2626;
566
+ }
567
+
568
+ .docs-rich-callout strong {
569
+ color: color-mix(in srgb, var(--block-accent) 82%, var(--foreground));
570
+ font-size: 0.82rem;
571
+ }
572
+
573
+ .docs-rich-story-grid p,
574
+ .docs-rich-meta-grid p,
575
+ .docs-rich-resource p {
576
+ margin: 0.35rem 0 0;
577
+ }
578
+
579
+ .docs-rich-resource {
580
+ align-items: flex-start;
581
+ gap: 0.65rem;
582
+ border: 1px solid color-mix(in srgb, var(--block-accent) 18%, var(--docs-border));
583
+ border-radius: 0.65rem;
584
+ padding: 0.85rem;
585
+ }
586
+
587
+ .docs-rich-resource svg,
588
+ .docs-rich-resource a {
589
+ color: var(--block-accent);
590
+ }
591
+
592
+ .docs-rich-resource a {
593
+ font-weight: 850;
594
+ text-decoration: none;
595
+ }
596
+
597
+ .docs-rich-additional {
598
+ margin-top: 0.25rem;
599
+ }
600
+
601
+ .docs-rich-document .application-markdown-preview :is(.carta-renderer, .carta-viewer) {
602
+ gap: 0.85rem;
603
+ line-height: 1.65;
604
+ }
605
+
606
+ .docs-rich-document .application-markdown-preview :is(h1, h2, h3) {
607
+ text-wrap: balance;
608
+ }
609
+
610
+ @media (max-width: 720px) {
611
+ .docs-display-view {
612
+ padding: 0.75rem;
613
+ }
614
+
615
+ .docs-rich-outline {
616
+ grid-template-columns: 1fr;
617
+ }
618
+ }
619
+
620
+ @media (prefers-reduced-motion: reduce) {
621
+ .docs-display-view *,
622
+ .docs-display-view *::before,
623
+ .docs-display-view *::after {
624
+ transition-duration: 0.01ms !important;
625
+ animation-duration: 0.01ms !important;
626
+ }
627
+ }
@@ -0,0 +1,78 @@
1
+ <script lang="ts">
2
+ import * as ScrollArea from "@lapismd/design-core/shadcn/scroll-area";
3
+ import type { DocsBookChapterNavigation, DocsBookNavigation, DocsNote } from '../model';
4
+ import DocsMarkdownPreview from './DocsMarkdownPreview.svelte';
5
+ import DocsRichDisplay from './DocsRichDisplay.svelte';
6
+ import DocsSlidesPreview from './DocsSlidesPreview.svelte';
7
+ import { clampDisplaySlideIndex } from './docs-display-focus';
8
+ import './DocsDisplayPanel.css';
9
+ import type { DisplayMode } from './docs-workspace-helpers';
10
+
11
+ let {
12
+ displayMode = $bindable('document'),
13
+ note,
14
+ renderedDisplayMarkdown,
15
+ bookNavigation = null,
16
+ chapterNavigation = null,
17
+ saving = false,
18
+ onToggleChapterComplete = () => {},
19
+ onOpenNote = () => {}
20
+ }: {
21
+ displayMode: DisplayMode;
22
+ note: DocsNote | null;
23
+ renderedDisplayMarkdown: string;
24
+ bookNavigation?: DocsBookNavigation | null;
25
+ chapterNavigation?: DocsBookChapterNavigation | null;
26
+ saving?: boolean;
27
+ onToggleChapterComplete?: (completed: boolean) => void | Promise<void>;
28
+ onOpenNote?: (noteId: string) => void;
29
+ } = $props();
30
+
31
+ let focusSlideIndex = $state(0);
32
+ let trackedNoteId = $state<string | null>(null);
33
+
34
+ $effect(() => {
35
+ const noteId = note?.id ?? null;
36
+ if (noteId === trackedNoteId) {
37
+ focusSlideIndex = clampDisplaySlideIndex(focusSlideIndex, note);
38
+ return;
39
+ }
40
+ trackedNoteId = noteId;
41
+ focusSlideIndex = 0;
42
+ });
43
+ </script>
44
+
45
+ <ScrollArea.Root
46
+ class={`docs-display-view${displayMode === 'slides' ? ' docs-display-view--slides' : ''}`}
47
+ >
48
+ <section class="docs-display-view__content">
49
+ <div class="docs-display-preview" class:docs-display-preview--slides={displayMode === 'slides'}>
50
+ {#if displayMode === 'slides'}
51
+ <DocsSlidesPreview
52
+ markdown={renderedDisplayMarkdown}
53
+ {note}
54
+ bind:activeSlide={focusSlideIndex}
55
+ />
56
+ {:else if note}
57
+ <DocsRichDisplay
58
+ {note}
59
+ focusSlideIndex={focusSlideIndex}
60
+ {bookNavigation}
61
+ {chapterNavigation}
62
+ {saving}
63
+ onFocusSlideIndexChange={(index) => {
64
+ focusSlideIndex = clampDisplaySlideIndex(index, note);
65
+ }}
66
+ {onToggleChapterComplete}
67
+ {onOpenNote}
68
+ />
69
+ {:else}
70
+ <DocsMarkdownPreview
71
+ value={renderedDisplayMarkdown}
72
+ empty="No display content yet."
73
+ sourcePath=""
74
+ />
75
+ {/if}
76
+ </div>
77
+ </section>
78
+ </ScrollArea.Root>
@@ -0,0 +1,16 @@
1
+ import type { DocsBookChapterNavigation, DocsBookNavigation, DocsNote } from '../model';
2
+ import './DocsDisplayPanel.css';
3
+ import type { DisplayMode } from './docs-workspace-helpers';
4
+ type $$ComponentProps = {
5
+ displayMode: DisplayMode;
6
+ note: DocsNote | null;
7
+ renderedDisplayMarkdown: string;
8
+ bookNavigation?: DocsBookNavigation | null;
9
+ chapterNavigation?: DocsBookChapterNavigation | null;
10
+ saving?: boolean;
11
+ onToggleChapterComplete?: (completed: boolean) => void | Promise<void>;
12
+ onOpenNote?: (noteId: string) => void;
13
+ };
14
+ declare const DocsDisplayPanel: import("svelte").Component<$$ComponentProps, {}, "displayMode">;
15
+ type DocsDisplayPanel = ReturnType<typeof DocsDisplayPanel>;
16
+ export default DocsDisplayPanel;