@open-press/core 0.7.1 → 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 (144) hide show
  1. package/README.md +6 -3
  2. package/engine/cli.mjs +8 -8
  3. package/engine/commands/_shared.mjs +37 -15
  4. package/engine/commands/dev.mjs +2 -2
  5. package/engine/commands/image.mjs +29 -0
  6. package/engine/commands/skills-sync.mjs +71 -0
  7. package/engine/commands/typecheck.mjs +63 -1
  8. package/engine/commands/upgrade.mjs +3 -3
  9. package/engine/document-export.mjs +1 -1
  10. package/engine/output/chrome-pdf.mjs +110 -3
  11. package/engine/output/static-server.mjs +87 -9
  12. package/engine/react/comment-endpoint.mjs +13 -39
  13. package/engine/react/comment-marker.mjs +43 -19
  14. package/engine/react/document-entry.mjs +46 -28
  15. package/engine/react/document-export.mjs +328 -164
  16. package/engine/react/http-json.mjs +24 -0
  17. package/engine/react/mdx-compile.mjs +126 -3
  18. package/engine/react/measurement-css.mjs +114 -1
  19. package/engine/react/object-entities.mjs +204 -0
  20. package/engine/react/pagination/allocator.mjs +48 -3
  21. package/engine/react/pagination.mjs +1 -1
  22. package/engine/react/pipeline/allocate.mjs +41 -72
  23. package/engine/react/pipeline/frame-measurement.mjs +6 -0
  24. package/engine/react/press-tree-inspection.mjs +172 -0
  25. package/engine/react/project-asset-endpoint.mjs +6 -24
  26. package/engine/react/source-edit-endpoint.d.mts +10 -0
  27. package/engine/react/source-edit-endpoint.mjs +75 -0
  28. package/engine/react/sources/mdx-resolver.mjs +13 -15
  29. package/engine/react/style-discovery.mjs +23 -8
  30. package/engine/runtime/config.d.mts +8 -0
  31. package/engine/runtime/config.mjs +57 -60
  32. package/engine/runtime/file-utils.mjs +9 -1
  33. package/engine/runtime/file-walk.mjs +22 -0
  34. package/engine/runtime/inspection.mjs +1 -20
  35. package/engine/runtime/page-geometry.mjs +131 -0
  36. package/engine/runtime/path-utils.mjs +20 -0
  37. package/engine/runtime/source-text-tools.d.mts +102 -0
  38. package/engine/runtime/source-text-tools.mjs +551 -16
  39. package/engine/runtime/source-workspace.mjs +16 -34
  40. package/engine/runtime/validation.mjs +19 -10
  41. package/package.json +3 -5
  42. package/src/openpress/app/OpenPressApp.tsx +296 -0
  43. package/src/openpress/{renderer.tsx → app/OpenPressRuntime.tsx} +20 -9
  44. package/src/openpress/app/WorkspaceGalleryPage.tsx +219 -0
  45. package/src/openpress/app/index.ts +2 -0
  46. package/src/openpress/core/Frame.tsx +26 -15
  47. package/src/openpress/core/FrameContext.tsx +10 -3
  48. package/src/openpress/core/MdxArea.tsx +11 -12
  49. package/src/openpress/core/Press.tsx +25 -4
  50. package/src/openpress/core/Workspace.tsx +36 -0
  51. package/src/openpress/core/cn.ts +4 -0
  52. package/src/openpress/core/index.tsx +11 -3
  53. package/src/openpress/core/primitives.tsx +74 -6
  54. package/src/openpress/core/types.ts +94 -41
  55. package/src/openpress/core/useSource.ts +1 -1
  56. package/src/openpress/{anchorMap.ts → document-model/anchorMapModel.ts} +1 -1
  57. package/src/openpress/{indexes.ts → document-model/documentIndexes.ts} +1 -1
  58. package/src/openpress/{types.ts → document-model/documentTypes.ts} +51 -0
  59. package/src/openpress/document-model/index.ts +7 -0
  60. package/src/openpress/document-model/objectEntityModel.ts +55 -0
  61. package/src/openpress/{projectIdentity.ts → document-model/projectIdentityModel.ts} +1 -1
  62. package/src/openpress/{reactDocumentMetadata.ts → document-model/reactDocumentMetadataModel.ts} +1 -1
  63. package/src/openpress/document-model/workspaceManifestModel.ts +57 -0
  64. package/src/openpress/manuscript/index.tsx +49 -7
  65. package/src/openpress/mdx/index.ts +15 -7
  66. package/src/openpress/reader/PageThumbnailsPanel.tsx +168 -0
  67. package/src/openpress/{publicPage.tsx → reader/PublicReaderPage.tsx} +31 -51
  68. package/src/openpress/{workbenchPanels.tsx → reader/ReaderNavigationPanel.tsx} +6 -5
  69. package/src/openpress/reader/index.ts +11 -0
  70. package/src/openpress/reader/pageViewportScaleModel.ts +73 -0
  71. package/src/openpress/reader/readerTypes.ts +4 -0
  72. package/src/openpress/reader/usePageViewportScale.ts +119 -0
  73. package/src/openpress/reader/usePanelState.ts +56 -0
  74. package/src/openpress/reader/useReaderHashSync.ts +61 -0
  75. package/src/openpress/reader/useReaderKeyboardNav.ts +48 -0
  76. package/src/openpress/reader/useReaderRuntime.ts +146 -0
  77. package/src/openpress/reader/useReaderScrollAnchor.ts +64 -0
  78. package/src/openpress/shared/Panel.tsx +77 -0
  79. package/src/openpress/shared/index.ts +4 -0
  80. package/src/openpress/shared/numberUtils.ts +3 -0
  81. package/src/openpress/{runtimeMode.ts → shared/runtimeMode.ts} +0 -11
  82. package/src/openpress/workbench/Workbench.tsx +506 -0
  83. package/src/openpress/workbench/actions/DeploymentControl.tsx +157 -0
  84. package/src/openpress/workbench/actions/ExportImageControl.tsx +96 -0
  85. package/src/openpress/workbench/actions/PageZoomControl.tsx +182 -0
  86. package/src/openpress/workbench/actions/SearchControl.tsx +345 -0
  87. package/src/openpress/workbench/actions/deploymentStatusModel.ts +112 -0
  88. package/src/openpress/workbench/actions/index.ts +6 -0
  89. package/src/openpress/workbench/actions/useDeploymentWorkbench.ts +136 -0
  90. package/src/openpress/workbench/dialog/WorkbenchDialog.tsx +72 -0
  91. package/src/openpress/workbench/dialog/index.ts +1 -0
  92. package/src/openpress/workbench/document/components/DocumentPanel.tsx +127 -0
  93. package/src/openpress/workbench/document/components/InlineSourceEditorLayer.tsx +207 -0
  94. package/src/openpress/workbench/document/components/ReaderStage.tsx +9 -0
  95. package/src/openpress/workbench/document/hooks/useDocumentWorkbenchModel.ts +34 -0
  96. package/src/openpress/workbench/document/hooks/useInlineDocumentEditor.ts +525 -0
  97. package/src/openpress/workbench/document/index.ts +10 -0
  98. package/src/openpress/workbench/index.ts +2 -0
  99. package/src/openpress/workbench/inspector/InlineInspectorLayer.tsx +459 -0
  100. package/src/openpress/workbench/inspector/index.ts +5 -0
  101. package/src/openpress/workbench/inspector/inlineCommentModel.ts +125 -0
  102. package/src/openpress/workbench/inspector/inspectorGeometryModel.ts +160 -0
  103. package/src/openpress/workbench/inspector/inspectorModel.ts +408 -0
  104. package/src/openpress/workbench/inspector/useInspectorComments.ts +254 -0
  105. package/src/openpress/workbench/mentions/MentionSuggestionList.tsx +41 -0
  106. package/src/openpress/workbench/mentions/index.ts +2 -0
  107. package/src/openpress/{composerMentions.ts → workbench/mentions/useComposerMentions.ts} +1 -4
  108. package/src/openpress/workbench/panels/Panel.tsx +1 -0
  109. package/src/openpress/workbench/panels/PendingCommentsPanel.tsx +80 -0
  110. package/src/openpress/workbench/panels/WorkbenchControlPanel.tsx +29 -0
  111. package/src/openpress/workbench/panels/index.ts +3 -0
  112. package/src/openpress/workbench/project/ProjectEntryPanel.tsx +525 -0
  113. package/src/openpress/workbench/project/ProjectPreviewDialog.tsx +35 -0
  114. package/src/openpress/workbench/project/index.ts +2 -0
  115. package/src/openpress/workbench/project/projectPreviewTypes.ts +11 -0
  116. package/src/openpress/workbench/shell/WorkbenchShell.tsx +167 -0
  117. package/src/openpress/workbench/shell/index.ts +1 -0
  118. package/src/openpress/workbench/workbenchFormatters.ts +120 -0
  119. package/src/openpress/workbench/workbenchTypes.ts +35 -0
  120. package/src/styles/openpress/print-route.css +0 -2
  121. package/src/styles/openpress/{project-workspace.css → project-preview-panel.css} +13 -407
  122. package/src/styles/openpress/public-viewer.css +25 -320
  123. package/src/styles/openpress/reader-runtime.css +252 -55
  124. package/src/styles/openpress/responsive.css +145 -270
  125. package/src/styles/openpress/workbench-panels.css +327 -178
  126. package/src/styles/openpress/workbench.css +986 -451
  127. package/src/styles/openpress/workspace-gallery.css +300 -0
  128. package/src/styles/openpress.css +2 -1
  129. package/tsconfig.json +1 -1
  130. package/vite.config.ts +50 -0
  131. package/engine/commands/init.mjs +0 -24
  132. package/engine/init.mjs +0 -90
  133. package/src/openpress/App.tsx +0 -127
  134. package/src/openpress/inspector.ts +0 -282
  135. package/src/openpress/projectWorkspace.tsx +0 -919
  136. package/src/openpress/readerRuntime.ts +0 -230
  137. package/src/openpress/workbench.tsx +0 -1265
  138. package/src/openpress/workbenchTypes.ts +0 -4
  139. /package/src/openpress/{readerPageRegistry.ts → reader/readerPageRegistry.ts} +0 -0
  140. /package/src/openpress/{pageRoute.ts → reader/readerPageRoute.ts} +0 -0
  141. /package/src/openpress/{readerScroll.ts → reader/readerScroll.ts} +0 -0
  142. /package/src/openpress/{readerState.ts → reader/readerStateModel.ts} +0 -0
  143. /package/src/openpress/{frameScheduler.ts → shared/frameScheduler.ts} +0 -0
  144. /package/src/openpress/{projectSources.ts → workbench/project/projectSourceModel.ts} +0 -0
@@ -1,20 +1,42 @@
1
1
  .openpress-reader-app .reader-pages {
2
+ --openpress-page-viewport-scale: 1;
3
+ --openpress-page-gap: 8px;
4
+ display: grid;
5
+ grid-template-columns: calc(var(--openpress-page-width) * var(--openpress-page-viewport-scale, 1));
6
+ justify-content: center;
7
+ align-items: start;
8
+ gap: var(--openpress-page-gap);
2
9
  padding: 30px 24px 56px;
3
10
  }
4
11
 
12
+ .openpress-reader-app .reader-pages[data-openpress-page-layout="spread"] {
13
+ grid-template-columns: repeat(2, calc(var(--openpress-page-width) * var(--openpress-page-viewport-scale, 1)));
14
+ }
15
+
5
16
  .openpress-reader-app .reader-page {
6
17
  scroll-margin-top: 32px;
7
18
  }
8
19
 
9
20
  .openpress-html-page {
10
- width: fit-content;
11
- max-width: 100%;
12
- margin: 0 auto 12px;
21
+ width: calc(var(--openpress-page-width) * var(--openpress-page-viewport-scale, 1));
22
+ max-width: none;
23
+ height: calc(var(--openpress-page-height) * var(--openpress-page-viewport-scale, 1));
24
+ margin: 0;
25
+ flex: 0 0 auto;
13
26
  scroll-margin-top: 72px;
14
27
  }
15
28
 
16
- /* Snap alignment only in paged mode. Reading mode lets pages grow to
17
- natural height; snap-stop would yank long sections back to the page top. */
29
+ .openpress-html-page__html {
30
+ display: block;
31
+ width: var(--openpress-page-width);
32
+ max-width: none;
33
+ height: var(--openpress-page-height);
34
+ min-height: var(--openpress-page-height);
35
+ transform: scale(var(--openpress-page-viewport-scale, 1));
36
+ transform-origin: top left;
37
+ }
38
+
39
+ /* Page Scale Model keeps document pages fixed-size, so page-by-page snap is the default. */
18
40
  [data-openpress-view-mode="paged"] .openpress-html-page,
19
41
  .openpress-reader-app:not([data-openpress-view-mode]) .openpress-html-page {
20
42
  scroll-snap-align: start;
@@ -39,6 +61,15 @@
39
61
  white-space: nowrap;
40
62
  }
41
63
 
64
+ .openpress-reader-app[data-openpress-inspector-mode="on"] .openpress-html-page__html {
65
+ /* Inspector mode is a click-to-select-block flow. Disable text selection
66
+ across the rendered page so drag-selects / Cmd+A don't paint the whole
67
+ page with the browser ::selection color — most visible on covers and
68
+ back-covers where there's little text and lots of background. */
69
+ user-select: none;
70
+ -webkit-user-select: none;
71
+ }
72
+
42
73
  .openpress-reader-app[data-openpress-inspector-mode="on"] .openpress-html-page__html [data-openpress-block-id] {
43
74
  cursor: crosshair;
44
75
  }
@@ -54,6 +85,85 @@
54
85
  background: color-mix(in srgb, var(--openpress-accent, #df4b21) 16%, transparent);
55
86
  }
56
87
 
88
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"] {
89
+ border-radius: 3px;
90
+ background: transparent;
91
+ cursor: text;
92
+ caret-color: var(--openpress-accent, #df4b21);
93
+ outline: none;
94
+ transition:
95
+ background 140ms ease,
96
+ box-shadow 140ms ease,
97
+ color 140ms ease;
98
+ }
99
+
100
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"]:hover {
101
+ background:
102
+ linear-gradient(90deg, color-mix(in srgb, var(--openpress-accent, #df4b21) 9%, transparent), transparent 88%),
103
+ color-mix(in srgb, var(--openpress-accent, #df4b21) 5%, transparent);
104
+ box-shadow: inset 0 -0.18em 0 color-mix(in srgb, var(--openpress-accent, #df4b21) 16%, transparent);
105
+ }
106
+
107
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"][data-openpress-editing="true"],
108
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"]:focus {
109
+ background:
110
+ linear-gradient(90deg, color-mix(in srgb, var(--openpress-accent, #df4b21) 13%, transparent), transparent 90%),
111
+ color-mix(in srgb, var(--openpress-accent, #df4b21) 7%, transparent);
112
+ box-shadow: inset 0 -0.2em 0 color-mix(in srgb, var(--openpress-accent, #df4b21) 20%, transparent);
113
+ }
114
+
115
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"][data-openpress-edit-state="saving"] {
116
+ background:
117
+ linear-gradient(
118
+ 90deg,
119
+ color-mix(in srgb, var(--openpress-accent, #df4b21) 7%, transparent) 0%,
120
+ color-mix(in srgb, var(--openpress-accent, #df4b21) 18%, transparent) 45%,
121
+ color-mix(in srgb, var(--openpress-accent, #df4b21) 7%, transparent) 90%
122
+ );
123
+ background-size: 220% 100%;
124
+ box-shadow: none;
125
+ color: transparent;
126
+ text-shadow: none;
127
+ animation: openpress-inline-edit-skeleton 920ms linear infinite;
128
+ pointer-events: none;
129
+ user-select: none;
130
+ }
131
+
132
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"][data-openpress-edit-state="saved"] {
133
+ background: color-mix(in srgb, #22c55e 14%, transparent);
134
+ box-shadow: inset 0 -0.18em 0 color-mix(in srgb, #22c55e 24%, transparent);
135
+ }
136
+
137
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-editable-block="true"][data-openpress-edit-state="failed"] {
138
+ background: color-mix(in srgb, #ef4444 12%, transparent);
139
+ box-shadow: inset 0 -0.18em 0 color-mix(in srgb, #ef4444 24%, transparent);
140
+ }
141
+
142
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-source-editable-block="true"] {
143
+ cursor: pointer;
144
+ outline: 1px dashed transparent;
145
+ outline-offset: 5px;
146
+ transition:
147
+ background 140ms ease,
148
+ outline-color 140ms ease;
149
+ }
150
+
151
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-source-editable-block="true"]:hover,
152
+ .openpress-reader-app[data-openpress-edit-mode="on"] .openpress-html-page__html [data-openpress-source-editable-block="true"]:focus {
153
+ outline-color: color-mix(in srgb, var(--openpress-accent, #df4b21) 42%, transparent);
154
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 7%, transparent);
155
+ }
156
+
157
+ @keyframes openpress-inline-edit-skeleton {
158
+ from {
159
+ background-position: 120% 0;
160
+ }
161
+
162
+ to {
163
+ background-position: -120% 0;
164
+ }
165
+ }
166
+
57
167
  .openpress-inline-inspector-layer {
58
168
  position: fixed;
59
169
  inset: 0;
@@ -61,6 +171,11 @@
61
171
  pointer-events: none;
62
172
  }
63
173
 
174
+ .openpress-inline-inspector-layer[data-openpress-composer-lock-events="true"] .openpress-inline-insert-target,
175
+ .openpress-inline-inspector-layer[data-openpress-composer-lock-events="true"] .openpress-inline-comment-marker {
176
+ pointer-events: none;
177
+ }
178
+
64
179
  .openpress-inline-insert-target {
65
180
  position: fixed;
66
181
  z-index: 91;
@@ -97,33 +212,50 @@
97
212
  position: fixed;
98
213
  z-index: 132;
99
214
  display: grid;
100
- width: 32px;
101
- height: 32px;
102
- place-items: center;
103
- border: 3px solid #f8fbff;
104
- border-radius: 999px;
215
+ place-items: start center;
216
+ border: 0;
217
+ border-radius: 0;
105
218
  padding: 0;
106
- background: var(--openpress-accent, #df4b21);
107
- color: white;
219
+ background: transparent;
220
+ color: #fff;
108
221
  font: inherit;
109
- font-size: 14px;
222
+ font-size: 12px;
110
223
  font-weight: 800;
111
224
  line-height: 1;
112
225
  cursor: pointer;
113
226
  pointer-events: auto;
227
+ transition: transform 160ms ease, opacity 160ms ease;
228
+ }
229
+
230
+ .openpress-inline-comment-marker__index {
231
+ position: relative;
232
+ display: grid;
233
+ width: 28px;
234
+ height: 28px;
235
+ place-items: center;
236
+ border: 3px solid #f8fbff;
237
+ border-radius: 999px;
238
+ background: var(--openpress-accent, #df4b21);
114
239
  box-shadow: 0 10px 26px rgb(0 0 0 / 24%);
115
- transition: transform 160ms ease, box-shadow 160ms ease, background-color 160ms ease;
116
240
  }
117
241
 
118
242
  .openpress-inline-comment-marker:hover,
119
243
  .openpress-inline-comment-marker:focus-visible {
120
244
  transform: translateY(-1px);
245
+ opacity: 0.9;
246
+ outline: none;
247
+ }
248
+
249
+ .openpress-inline-comment-marker:focus-visible .openpress-inline-comment-marker__index {
121
250
  outline: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 64%, white);
122
251
  outline-offset: 2px;
123
- box-shadow: 0 14px 32px rgb(0 0 0 / 30%);
124
252
  }
125
253
 
126
- .openpress-inline-comment-marker[data-openpress-marker-state="saved"] {
254
+ .openpress-inline-comment-marker[data-openpress-marker-state="draft"] .openpress-inline-comment-marker__index {
255
+ background: #1b7cff;
256
+ }
257
+
258
+ .openpress-inline-comment-marker[data-openpress-marker-state="saved"] .openpress-inline-comment-marker__index {
127
259
  background: color-mix(in srgb, var(--openpress-accent, #df4b21) 92%, #5f2a16);
128
260
  }
129
261
 
@@ -399,14 +531,14 @@
399
531
  color: rgb(132 211 164 / 88%);
400
532
  }
401
533
 
402
- .openpress-comments-workspace {
534
+ .openpress-comments-panel {
403
535
  min-height: 100%;
404
536
  padding: 34px clamp(22px, 4vw, 56px) 56px;
405
537
  background: #111312;
406
538
  color: #e8e8e4;
407
539
  }
408
540
 
409
- .openpress-comments-workspace__header {
541
+ .openpress-comments-panel__header {
410
542
  display: flex;
411
543
  align-items: flex-end;
412
544
  justify-content: space-between;
@@ -415,7 +547,7 @@
415
547
  border-bottom: 1px solid rgb(255 255 255 / 9%);
416
548
  }
417
549
 
418
- .openpress-comments-workspace__header h1 {
550
+ .openpress-comments-panel__header h1 {
419
551
  margin: 4px 0 6px;
420
552
  color: rgb(242 242 240 / 94%);
421
553
  font-family: var(--openpress-font-serif);
@@ -425,29 +557,29 @@
425
557
  letter-spacing: 0;
426
558
  }
427
559
 
428
- .openpress-comments-workspace__header p,
429
- .openpress-comments-workspace__eyebrow {
560
+ .openpress-comments-panel__header p,
561
+ .openpress-comments-panel__eyebrow {
430
562
  margin: 0;
431
563
  color: rgb(160 166 173 / 72%);
432
564
  font-size: 12px;
433
565
  line-height: 1.4;
434
566
  }
435
567
 
436
- .openpress-comments-workspace__eyebrow {
568
+ .openpress-comments-panel__eyebrow {
437
569
  display: block;
438
570
  font-weight: 700;
439
571
  letter-spacing: 0.06em;
440
572
  text-transform: uppercase;
441
573
  }
442
574
 
443
- .openpress-comments-workspace__actions {
575
+ .openpress-comments-panel__actions {
444
576
  display: flex;
445
577
  flex-wrap: wrap;
446
578
  gap: 8px;
447
579
  justify-content: flex-end;
448
580
  }
449
581
 
450
- .openpress-comments-workspace button {
582
+ .openpress-comments-panel button {
451
583
  display: inline-flex;
452
584
  min-height: 34px;
453
585
  align-items: center;
@@ -464,22 +596,22 @@
464
596
  cursor: pointer;
465
597
  }
466
598
 
467
- .openpress-comments-workspace button:hover:not(:disabled) {
599
+ .openpress-comments-panel button:hover:not(:disabled) {
468
600
  border-color: rgb(255 255 255 / 20%);
469
601
  background: rgb(255 255 255 / 8%);
470
602
  }
471
603
 
472
- .openpress-comments-workspace button:disabled {
604
+ .openpress-comments-panel button:disabled {
473
605
  cursor: not-allowed;
474
606
  opacity: 0.46;
475
607
  }
476
608
 
477
- .openpress-comments-workspace button svg {
609
+ .openpress-comments-panel button svg {
478
610
  width: 14px;
479
611
  height: 14px;
480
612
  }
481
613
 
482
- .openpress-comments-workspace__error {
614
+ .openpress-comments-panel__error {
483
615
  margin: 18px 0 0;
484
616
  border-left: 3px solid rgb(248 113 113 / 76%);
485
617
  padding: 8px 0 8px 12px;
@@ -488,7 +620,7 @@
488
620
  line-height: 1.45;
489
621
  }
490
622
 
491
- .openpress-comments-workspace__empty {
623
+ .openpress-comments-panel__empty {
492
624
  margin-top: 22px;
493
625
  border: 1px dashed rgb(255 255 255 / 13%);
494
626
  border-radius: 8px;
@@ -587,21 +719,21 @@
587
719
  line-height: 1.2;
588
720
  }
589
721
 
590
- .openpress-comments-workspace--panel {
722
+ .openpress-comments-panel--embedded {
591
723
  min-height: 0;
592
724
  overflow: auto;
593
725
  padding: 6px 22px 18px;
594
726
  background: transparent;
595
727
  }
596
728
 
597
- .openpress-comments-workspace--panel .openpress-comments-workspace__header {
729
+ .openpress-comments-panel--embedded .openpress-comments-panel__header {
598
730
  display: grid;
599
731
  gap: 10px;
600
732
  align-items: start;
601
733
  padding-bottom: 12px;
602
734
  }
603
735
 
604
- .openpress-comments-workspace--panel .openpress-comments-workspace__header h1 {
736
+ .openpress-comments-panel--embedded .openpress-comments-panel__header h1 {
605
737
  margin: 2px 0 3px;
606
738
  font-family: inherit;
607
739
  font-size: 14px;
@@ -609,23 +741,23 @@
609
741
  line-height: 1.35;
610
742
  }
611
743
 
612
- .openpress-comments-workspace--panel .openpress-comments-workspace__header p,
613
- .openpress-comments-workspace--panel .openpress-comments-workspace__eyebrow {
744
+ .openpress-comments-panel--embedded .openpress-comments-panel__header p,
745
+ .openpress-comments-panel--embedded .openpress-comments-panel__eyebrow {
614
746
  font-size: 11px;
615
747
  }
616
748
 
617
- .openpress-comments-workspace--panel .openpress-comments-workspace__actions {
749
+ .openpress-comments-panel--embedded .openpress-comments-panel__actions {
618
750
  justify-content: flex-start;
619
751
  }
620
752
 
621
- .openpress-comments-workspace--panel .openpress-comments-workspace__actions button {
753
+ .openpress-comments-panel--embedded .openpress-comments-panel__actions button {
622
754
  width: 34px;
623
755
  min-height: 30px;
624
756
  padding: 0;
625
757
  font-size: 11px;
626
758
  }
627
759
 
628
- .openpress-comments-workspace--panel .openpress-comments-workspace__actions button span {
760
+ .openpress-comments-panel--embedded .openpress-comments-panel__actions button span {
629
761
  position: absolute;
630
762
  width: 1px;
631
763
  height: 1px;
@@ -634,30 +766,91 @@
634
766
  white-space: nowrap;
635
767
  }
636
768
 
637
- .openpress-comments-workspace--panel .openpress-comments-list {
638
- gap: 10px;
639
- margin-top: 10px;
769
+ .openpress-comments-panel--embedded .openpress-comments-list {
770
+ gap: 0;
771
+ margin-top: 6px;
640
772
  }
641
773
 
642
- .openpress-comments-workspace--panel .openpress-comment-entry {
643
- grid-template-columns: minmax(0, 1fr);
644
- gap: 10px;
645
- padding: 12px;
774
+ .openpress-comments-panel--embedded .openpress-comment-entry {
775
+ grid-template-columns: minmax(0, 1fr) 24px;
776
+ gap: 8px;
777
+ align-items: center;
778
+ border: 0;
779
+ border-top: 1px solid rgb(255 255 255 / 7%);
780
+ border-radius: 0;
781
+ padding: 8px 0;
782
+ background: transparent;
646
783
  }
647
784
 
648
- .openpress-comments-workspace--panel .openpress-comment-entry__note {
649
- font-size: 12px;
650
- line-height: 1.45;
785
+ .openpress-comments-panel--embedded .openpress-comment-entry__note {
786
+ overflow: hidden;
787
+ display: -webkit-box;
788
+ color: rgb(232 232 228 / 86%);
789
+ font-size: 11.5px;
790
+ font-weight: 520;
791
+ line-height: 1.35;
792
+ -webkit-box-orient: vertical;
793
+ -webkit-line-clamp: 2;
651
794
  }
652
795
 
653
- .openpress-comments-workspace--panel .openpress-comment-entry button {
654
- width: fit-content;
655
- min-height: 30px;
656
- padding: 6px 8px;
657
- font-size: 11px;
796
+ .openpress-comments-panel--embedded .openpress-comment-entry__meta {
797
+ margin-top: 4px;
798
+ gap: 6px;
799
+ color: rgb(150 156 163 / 54%);
800
+ font-size: 10px;
801
+ line-height: 1.25;
802
+ }
803
+
804
+ .openpress-comments-panel--embedded .openpress-comment-entry__meta code {
805
+ border: 0;
806
+ padding: 0;
807
+ background: transparent;
808
+ color: inherit;
809
+ }
810
+
811
+ .openpress-comments-panel--embedded .openpress-comment-entry__jump {
812
+ display: grid;
813
+ width: 100%;
814
+ min-width: 0;
815
+ min-height: 0;
816
+ justify-items: start;
817
+ border: 0;
818
+ border-radius: 4px;
819
+ padding: 0;
820
+ background: transparent;
821
+ color: inherit;
822
+ font: inherit;
823
+ text-align: left;
824
+ }
825
+
826
+ .openpress-comments-panel--embedded .openpress-comment-entry__jump:hover {
827
+ background: transparent;
828
+ color: rgb(242 242 240 / 96%);
829
+ }
830
+
831
+ .openpress-comments-panel--embedded .openpress-comment-entry__clear {
832
+ width: 24px;
833
+ min-height: 24px;
834
+ border: 0;
835
+ border-radius: 4px;
836
+ padding: 0;
837
+ background: transparent;
838
+ color: rgb(150 156 163 / 64%);
839
+ font-size: 0;
840
+ }
841
+
842
+ .openpress-comments-panel--embedded .openpress-comment-entry__clear:hover:not(:disabled) {
843
+ border: 0;
844
+ background: rgb(255 255 255 / 5%);
845
+ color: rgb(242 242 240 / 90%);
846
+ }
847
+
848
+ .openpress-comments-panel--embedded .openpress-comment-entry__clear svg {
849
+ width: 13px;
850
+ height: 13px;
658
851
  }
659
852
 
660
- .openpress-comments-workspace--panel .openpress-comments-workspace__empty {
853
+ .openpress-comments-panel--embedded .openpress-comments-panel__empty {
661
854
  margin-top: 10px;
662
855
  padding: 14px;
663
856
  font-size: 12px;
@@ -665,10 +858,14 @@
665
858
 
666
859
  .openpress-html-page__html .reader-page {
667
860
  display: block;
668
- width: min(var(--openpress-page-width), calc(100cqw - 48px));
669
- height: calc(min(var(--openpress-page-width), calc(100cqw - 48px)) * var(--openpress-page-height-ratio, 1.4142857143));
861
+ width: var(--openpress-page-width);
862
+ max-width: none;
863
+ height: var(--openpress-page-height);
864
+ min-height: var(--openpress-page-height);
865
+ max-height: none;
670
866
  aspect-ratio: var(--openpress-page-aspect-ratio, 210 / 297);
671
867
  margin: 0;
868
+ overflow: hidden;
672
869
  box-shadow: 0 16px 48px rgb(0 0 0 / 24%);
673
870
  }
674
871