@deskwork/studio 0.20.0 → 0.22.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 (62) hide show
  1. package/dist/pages/dashboard/adjacent-section.d.ts +38 -0
  2. package/dist/pages/dashboard/adjacent-section.d.ts.map +1 -0
  3. package/dist/pages/dashboard/adjacent-section.js +61 -0
  4. package/dist/pages/dashboard/adjacent-section.js.map +1 -0
  5. package/dist/pages/dashboard/adjacent-section.ts +71 -0
  6. package/dist/pages/dashboard/data.d.ts +35 -4
  7. package/dist/pages/dashboard/data.d.ts.map +1 -1
  8. package/dist/pages/dashboard/data.js +69 -5
  9. package/dist/pages/dashboard/data.js.map +1 -1
  10. package/dist/pages/dashboard/data.ts +84 -5
  11. package/dist/pages/dashboard/section.d.ts.map +1 -1
  12. package/dist/pages/dashboard/section.js +7 -0
  13. package/dist/pages/dashboard/section.js.map +1 -1
  14. package/dist/pages/dashboard/section.ts +7 -0
  15. package/dist/pages/dashboard/shortform-section.d.ts +86 -0
  16. package/dist/pages/dashboard/shortform-section.d.ts.map +1 -0
  17. package/dist/pages/dashboard/shortform-section.js +189 -0
  18. package/dist/pages/dashboard/shortform-section.js.map +1 -0
  19. package/dist/pages/dashboard/shortform-section.ts +228 -0
  20. package/dist/pages/dashboard.d.ts.map +1 -1
  21. package/dist/pages/dashboard.js +34 -1
  22. package/dist/pages/dashboard.js.map +1 -1
  23. package/dist/pages/dashboard.ts +40 -1
  24. package/dist/pages/entry-review/index.d.ts.map +1 -1
  25. package/dist/pages/entry-review/index.js +24 -2
  26. package/dist/pages/entry-review/index.js.map +1 -1
  27. package/dist/pages/entry-review/mobile-sheet.d.ts +65 -0
  28. package/dist/pages/entry-review/mobile-sheet.d.ts.map +1 -0
  29. package/dist/pages/entry-review/mobile-sheet.js +170 -0
  30. package/dist/pages/entry-review/mobile-sheet.js.map +1 -0
  31. package/dist/pages/masthead-menu.d.ts +38 -0
  32. package/dist/pages/masthead-menu.d.ts.map +1 -0
  33. package/dist/pages/masthead-menu.js +126 -0
  34. package/dist/pages/masthead-menu.js.map +1 -0
  35. package/dist/pages/masthead-menu.ts +128 -0
  36. package/dist/pages/masthead.d.ts +85 -0
  37. package/dist/pages/masthead.d.ts.map +1 -0
  38. package/dist/pages/masthead.js +99 -0
  39. package/dist/pages/masthead.js.map +1 -0
  40. package/dist/pages/masthead.ts +155 -0
  41. package/dist/pages/mobile-bar.d.ts +72 -0
  42. package/dist/pages/mobile-bar.d.ts.map +1 -0
  43. package/dist/pages/mobile-bar.js +88 -0
  44. package/dist/pages/mobile-bar.js.map +1 -0
  45. package/dist/pages/mobile-bar.ts +129 -0
  46. package/dist/pages/shortform-review-mobile-sheet.d.ts +76 -0
  47. package/dist/pages/shortform-review-mobile-sheet.d.ts.map +1 -0
  48. package/dist/pages/shortform-review-mobile-sheet.js +159 -0
  49. package/dist/pages/shortform-review-mobile-sheet.js.map +1 -0
  50. package/dist/pages/shortform-review-mobile-sheet.ts +185 -0
  51. package/dist/pages/shortform-review.d.ts +18 -0
  52. package/dist/pages/shortform-review.d.ts.map +1 -1
  53. package/dist/pages/shortform-review.js +62 -111
  54. package/dist/pages/shortform-review.js.map +1 -1
  55. package/dist/pages/shortform-review.ts +68 -140
  56. package/dist/pages/shortform.d.ts.map +1 -1
  57. package/dist/pages/shortform.js +0 -1
  58. package/dist/pages/shortform.js.map +1 -1
  59. package/dist/pages/shortform.ts +0 -1
  60. package/dist/server.js +41 -1
  61. package/dist/server.js.map +1 -1
  62. package/package.json +2 -2
@@ -35,6 +35,8 @@ import { getAffordances } from "../../lib/stage-affordances.js";
35
35
  import { html, unsafe, escapeHtml, gloss } from "../html.js";
36
36
  import { layout } from "../layout.js";
37
37
  import { renderEditorialFolio } from "../chrome.js";
38
+ import { renderMasthead } from "../masthead.js";
39
+ import { renderMastheadMenu } from "../masthead-menu.js";
38
40
  import { renderScrapbookDrawer } from "../review-scrapbook-drawer.js";
39
41
  import { loadEntryReviewData } from "./data.js";
40
42
  import { renderVersionsStrip } from "./version-strip.js";
@@ -42,7 +44,8 @@ import { renderEditToolbar } from "./edit-toolbar.js";
42
44
  import { renderEditPanes } from "./edit-panes.js";
43
45
  import { renderOutlineDrawer } from "./outline-drawer.js";
44
46
  import { renderMarginalia, renderMarginaliaTab } from "./marginalia.js";
45
- import { renderMobileBar, renderMobileSheet, renderStripModeSegment, renderStripEditExit } from "./mobile-bar.js";
47
+ import { renderMobileBar } from "../mobile-bar.js";
48
+ import { renderMobileSheet, renderStripModeSegment, renderStripEditExit, getEntryReviewBarCells, } from "./mobile-sheet.js";
46
49
  import { renderDecisionStrip } from "./decision-strip.js";
47
50
  import { renderShortcutsOverlay } from "./shortcuts.js";
48
51
  import { renderEntryNotFound } from "./not-found.js";
@@ -150,6 +153,22 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
150
153
  const historicalBadge = data.historical
151
154
  ? unsafe(html `<span class="er-strip-historical" title="Historical version (read-only)">historical · v${data.historical.versionNumber}</span>`)
152
155
  : unsafe('');
156
+ // v7 universal masthead (mobile-only at this commit). The kicker
157
+ // reads `entry · <stage> · № <version>`; the slug occupies the
158
+ // bottom row; the inline meta carries the historical badge when a
159
+ // historical view is active. Step 2.2.8 retires the er-strip-back
160
+ // redundant with the masthead's `←`.
161
+ const versionLabel = state.currentVersion !== null
162
+ ? `№ ${state.currentVersion}`
163
+ : '№ —';
164
+ const mastheadKicker = `entry · ${stageLabel.toLowerCase()} · ${versionLabel}`;
165
+ const mastheadMeta = data.historical
166
+ ? `historical · v${data.historical.versionNumber}`
167
+ : undefined;
168
+ const mastheadOpts = mastheadMeta === undefined
169
+ ? { kicker: mastheadKicker, slug: data.entry.slug, isHub: false }
170
+ : { kicker: mastheadKicker, slug: data.entry.slug, metaInline: mastheadMeta, isHub: false };
171
+ const masthead = renderMasthead(mastheadOpts);
153
172
  // The page-grid composes the article column + the marginalia rail.
154
173
  // Mirrors the legacy longform layout (`.er-page-grid` with the
155
174
  // `.er-draft-frame` + `.er-page-gutter` + `.er-marginalia` triplet).
@@ -177,6 +196,8 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
177
196
  });
178
197
  const body = html `
179
198
  <div data-review-ui="longform" class="er-review-shell">
199
+ ${masthead}
200
+ ${renderMastheadMenu()}
180
201
  ${renderEditorialFolio('longform', folioSpine)}
181
202
  <div class="er-strip">
182
203
  <div class="er-strip-inner">
@@ -204,7 +225,7 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
204
225
  <button class="er-pencil-btn" data-add-comment-btn hidden type="button">Mark</button>
205
226
  ${renderOutlineDrawer(outlineHtml, tocEntries)}
206
227
  ${scrapbookDrawer}
207
- ${renderMobileBar()}
228
+ ${renderMobileBar({ contextual: getEntryReviewBarCells() })}
208
229
  ${renderMobileSheet()}
209
230
  <div class="er-toast" data-toast hidden></div>
210
231
  ${renderShortcutsOverlay()}
@@ -221,6 +242,7 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
221
242
  '/static/css/blog-figure.css',
222
243
  '/static/css/review-viewport.css',
223
244
  '/static/css/scrap-row.css',
245
+ '/static/css/mobile-shell.css',
224
246
  ],
225
247
  bodyAttrs: 'data-review-ui="entry-review"',
226
248
  bodyHtml: body,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Entry-review-specific mobile sheet host + strip affordances.
3
+ *
4
+ * Renders the bottom-sheet container with the five named slots
5
+ * (outline / notes / actions / scrapbook / format) the entry-review
6
+ * surface composes against, plus the two phone-only strip affordances
7
+ * (Source/Preview pill, ✕ Done exit) that live in the top strip when
8
+ * editing on phone.
9
+ *
10
+ * The mobile-BAR helper itself is universal — it moved to
11
+ * `../mobile-bar.ts` and accepts a list of `Cell`s the caller supplies
12
+ * to describe each tab. The entry-review consumer composes the
13
+ * pre-refactor 6-cell configuration via `getEntryReviewBarCells()`
14
+ * below.
15
+ *
16
+ * Design references:
17
+ * - Review tabs: plugins/deskwork-studio/public/mockups/mobile-1-bottom-sheet.html
18
+ * - Editor tabs: plugins/deskwork-studio/public/mockups/editor-2-press-check-tabbar.html
19
+ *
20
+ * The sheet has five content slots. The client controller
21
+ * (`entry-review/mobile-sheet-bar.ts`) populates each at first open.
22
+ * Slot sources:
23
+ * - outline: clone of `.er-outline-drawer-body`
24
+ * - notes: actual `[data-sidebar-list]` element MOVED in on phone
25
+ * (preserves event listeners; see mobile-sheet-bar.ts)
26
+ * - actions: rendered fresh from the decision verbs
27
+ * - format: the press-check key grid rendered server-side below
28
+ */
29
+ import { type RawHtml } from '../html.ts';
30
+ import type { Cell } from '../mobile-bar.ts';
31
+ /**
32
+ * The entry-review bar's contextual cell list. Six cells; CSS hides
33
+ * the off-mode cells via the `er-mobile-tab--review` /
34
+ * `er-mobile-tab--edit` modifiers (gated on
35
+ * `body[data-edit-mode="editing"]`).
36
+ *
37
+ * - Review mode visible: Outline · Notes · Scrapbook · Actions
38
+ * - Edit mode visible: Format · Notes · Save
39
+ *
40
+ * The Notes tab is mode `'both'` — review notes the operator leaves
41
+ * carry across into edit. The Scrapbook tab uses the kraft-tone count
42
+ * badge to distinguish folio context from action peers.
43
+ */
44
+ export declare function getEntryReviewBarCells(): readonly Cell[];
45
+ export declare function renderMobileSheet(): RawHtml;
46
+ /**
47
+ * Phone-only Source/Preview pill rendered into the top strip when in
48
+ * edit mode. Uses the same `data-edit-view` attribute as the desktop
49
+ * edit toolbar so `editModeBtns` (queried via that attribute in
50
+ * entry-review-client.ts) auto-binds clicks. CSS reveals it only on
51
+ * phone + edit mode; the desktop edit toolbar is hidden in that
52
+ * combination.
53
+ */
54
+ export declare function renderStripModeSegment(): RawHtml;
55
+ /**
56
+ * Phone-only "✕ Done" exit affordance in the strip. Visible only when
57
+ * editing on phone (CSS-gated). Click dispatches into the existing
58
+ * toggle-edit handler — preserves the confirmDiscard prompt when the
59
+ * buffer is dirty, immediate exit when clean. Sits alongside the
60
+ * existing back-link (which continues to navigate home regardless of
61
+ * mode) so the operator always has both "leave editor" and "leave
62
+ * page" affordances available.
63
+ */
64
+ export declare function renderStripEditExit(): RawHtml;
65
+ //# sourceMappingURL=mobile-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-sheet.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/mobile-sheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,IAAI,SAAS,IAAI,EAAE,CA2CxD;AA2BD,wBAAgB,iBAAiB,IAAI,OAAO,CA2B3C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAM7C"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Entry-review-specific mobile sheet host + strip affordances.
3
+ *
4
+ * Renders the bottom-sheet container with the five named slots
5
+ * (outline / notes / actions / scrapbook / format) the entry-review
6
+ * surface composes against, plus the two phone-only strip affordances
7
+ * (Source/Preview pill, ✕ Done exit) that live in the top strip when
8
+ * editing on phone.
9
+ *
10
+ * The mobile-BAR helper itself is universal — it moved to
11
+ * `../mobile-bar.ts` and accepts a list of `Cell`s the caller supplies
12
+ * to describe each tab. The entry-review consumer composes the
13
+ * pre-refactor 6-cell configuration via `getEntryReviewBarCells()`
14
+ * below.
15
+ *
16
+ * Design references:
17
+ * - Review tabs: plugins/deskwork-studio/public/mockups/mobile-1-bottom-sheet.html
18
+ * - Editor tabs: plugins/deskwork-studio/public/mockups/editor-2-press-check-tabbar.html
19
+ *
20
+ * The sheet has five content slots. The client controller
21
+ * (`entry-review/mobile-sheet-bar.ts`) populates each at first open.
22
+ * Slot sources:
23
+ * - outline: clone of `.er-outline-drawer-body`
24
+ * - notes: actual `[data-sidebar-list]` element MOVED in on phone
25
+ * (preserves event listeners; see mobile-sheet-bar.ts)
26
+ * - actions: rendered fresh from the decision verbs
27
+ * - format: the press-check key grid rendered server-side below
28
+ */
29
+ import { html, unsafe } from "../html.js";
30
+ /**
31
+ * The entry-review bar's contextual cell list. Six cells; CSS hides
32
+ * the off-mode cells via the `er-mobile-tab--review` /
33
+ * `er-mobile-tab--edit` modifiers (gated on
34
+ * `body[data-edit-mode="editing"]`).
35
+ *
36
+ * - Review mode visible: Outline · Notes · Scrapbook · Actions
37
+ * - Edit mode visible: Format · Notes · Save
38
+ *
39
+ * The Notes tab is mode `'both'` — review notes the operator leaves
40
+ * carry across into edit. The Scrapbook tab uses the kraft-tone count
41
+ * badge to distinguish folio context from action peers.
42
+ */
43
+ export function getEntryReviewBarCells() {
44
+ return [
45
+ {
46
+ glyph: '§',
47
+ label: 'Outline',
48
+ mode: 'review',
49
+ action: { kind: 'sheet', name: 'outline' },
50
+ },
51
+ {
52
+ glyph: '¶',
53
+ label: 'Format',
54
+ mode: 'edit',
55
+ action: { kind: 'sheet', name: 'format' },
56
+ },
57
+ {
58
+ glyph: '✎',
59
+ label: 'Notes',
60
+ mode: 'both',
61
+ action: { kind: 'sheet', name: 'notes' },
62
+ count: { dataAttr: 'data-notes-count' },
63
+ },
64
+ {
65
+ glyph: '▦',
66
+ label: 'Scrapbook',
67
+ mode: 'review',
68
+ action: { kind: 'sheet', name: 'scrapbook' },
69
+ count: { dataAttr: 'data-scrapbook-count', tone: 'kraft' },
70
+ modifierClass: 'er-mobile-tab--scrapbook',
71
+ },
72
+ {
73
+ glyph: '⊕',
74
+ label: 'Actions',
75
+ mode: 'review',
76
+ action: { kind: 'sheet', name: 'actions' },
77
+ },
78
+ {
79
+ glyph: '⊕',
80
+ label: 'Save',
81
+ mode: 'edit',
82
+ action: { kind: 'direct', action: 'save' },
83
+ modifierClass: 'er-mobile-tab--save',
84
+ },
85
+ ];
86
+ }
87
+ function renderFormatGrid() {
88
+ return html `
89
+ <div class="er-fkey-section">Headings</div>
90
+ <div class="er-fkey-grid">
91
+ <button type="button" class="er-fkey er-fkey--h1" data-fkey="h1"><span class="er-fkey-face">H1</span><span class="er-fkey-label">Title</span></button>
92
+ <button type="button" class="er-fkey er-fkey--h2" data-fkey="h2"><span class="er-fkey-face">H2</span><span class="er-fkey-label">Section</span></button>
93
+ <button type="button" class="er-fkey er-fkey--h3" data-fkey="h3"><span class="er-fkey-face">H3</span><span class="er-fkey-label">Sub</span></button>
94
+ <button type="button" class="er-fkey er-fkey--hr" data-fkey="hr"><span class="er-fkey-face">— · — · —</span><span class="er-fkey-label">Rule</span></button>
95
+ </div>
96
+ <div class="er-fkey-section">Inline</div>
97
+ <div class="er-fkey-grid">
98
+ <button type="button" class="er-fkey er-fkey--bold" data-fkey="bold"><span class="er-fkey-face"><strong>B</strong></span><span class="er-fkey-label">Bold</span></button>
99
+ <button type="button" class="er-fkey er-fkey--em" data-fkey="em"><span class="er-fkey-face"><em>I</em></span><span class="er-fkey-label">Italic</span></button>
100
+ <button type="button" class="er-fkey er-fkey--code" data-fkey="code"><span class="er-fkey-face">\` \`</span><span class="er-fkey-label">Code</span></button>
101
+ <button type="button" class="er-fkey er-fkey--link" data-fkey="link"><span class="er-fkey-face">link</span><span class="er-fkey-label">Link</span></button>
102
+ </div>
103
+ <div class="er-fkey-section">Block</div>
104
+ <div class="er-fkey-grid">
105
+ <button type="button" class="er-fkey er-fkey--list" data-fkey="list"><span class="er-fkey-face">— ·<br>— ·</span><span class="er-fkey-label">List</span></button>
106
+ <button type="button" class="er-fkey er-fkey--ol" data-fkey="ol"><span class="er-fkey-face">1·<br>2·</span><span class="er-fkey-label">Numbered</span></button>
107
+ <button type="button" class="er-fkey er-fkey--quote" data-fkey="quote"><span class="er-fkey-face">"</span><span class="er-fkey-label">Quote</span></button>
108
+ <button type="button" class="er-fkey er-fkey--fence" data-fkey="fence"><span class="er-fkey-face">\`\`\`</span><span class="er-fkey-label">Code block</span></button>
109
+ </div>`;
110
+ }
111
+ export function renderMobileSheet() {
112
+ return unsafe(html `
113
+ <section
114
+ class="er-mobile-sheet"
115
+ id="er-mobile-sheet"
116
+ data-mobile-sheet-host
117
+ hidden
118
+ aria-label="Surface sheet"
119
+ role="dialog"
120
+ aria-modal="false"
121
+ >
122
+ <button class="er-mobile-sheet-handle" data-mobile-sheet-handle type="button" aria-label="Drag to dismiss the sheet">
123
+ <span class="er-mobile-sheet-handle-bar" aria-hidden="true"></span>
124
+ </button>
125
+ <header class="er-mobile-sheet-head">
126
+ <span class="er-mobile-sheet-kicker" data-mobile-sheet-kicker></span>
127
+ <span class="er-mobile-sheet-meta" data-mobile-sheet-meta></span>
128
+ <button class="er-mobile-sheet-close" data-mobile-sheet-close type="button" aria-label="Close sheet">×</button>
129
+ </header>
130
+ <div class="er-mobile-sheet-body" data-mobile-sheet-body>
131
+ <div class="er-mobile-sheet-slot" data-mobile-sheet-slot="outline" hidden></div>
132
+ <div class="er-mobile-sheet-slot" data-mobile-sheet-slot="notes" hidden></div>
133
+ <div class="er-mobile-sheet-slot" data-mobile-sheet-slot="actions" hidden></div>
134
+ <div class="er-mobile-sheet-slot er-mobile-sheet-slot--scrapbook" data-mobile-sheet-slot="scrapbook" hidden></div>
135
+ <div class="er-mobile-sheet-slot er-mobile-sheet-slot--format" data-mobile-sheet-slot="format" hidden>${unsafe(renderFormatGrid())}</div>
136
+ </div>
137
+ </section>`);
138
+ }
139
+ /**
140
+ * Phone-only Source/Preview pill rendered into the top strip when in
141
+ * edit mode. Uses the same `data-edit-view` attribute as the desktop
142
+ * edit toolbar so `editModeBtns` (queried via that attribute in
143
+ * entry-review-client.ts) auto-binds clicks. CSS reveals it only on
144
+ * phone + edit mode; the desktop edit toolbar is hidden in that
145
+ * combination.
146
+ */
147
+ export function renderStripModeSegment() {
148
+ return unsafe(html `
149
+ <span class="er-strip-mode-mobile" data-strip-mode-mobile aria-hidden="true">
150
+ <button type="button" class="er-strip-mode-btn" data-edit-view="source" aria-pressed="true">Source</button>
151
+ <button type="button" class="er-strip-mode-btn" data-edit-view="preview" aria-pressed="false">Preview</button>
152
+ </span>`);
153
+ }
154
+ /**
155
+ * Phone-only "✕ Done" exit affordance in the strip. Visible only when
156
+ * editing on phone (CSS-gated). Click dispatches into the existing
157
+ * toggle-edit handler — preserves the confirmDiscard prompt when the
158
+ * buffer is dirty, immediate exit when clean. Sits alongside the
159
+ * existing back-link (which continues to navigate home regardless of
160
+ * mode) so the operator always has both "leave editor" and "leave
161
+ * page" affordances available.
162
+ */
163
+ export function renderStripEditExit() {
164
+ return unsafe(html `
165
+ <button type="button" class="er-strip-edit-done" data-strip-edit-done aria-label="Exit editor">
166
+ <span class="er-strip-edit-done-glyph" aria-hidden="true">✕</span>
167
+ <span class="er-strip-edit-done-label">Done</span>
168
+ </button>`);
169
+ }
170
+ //# sourceMappingURL=mobile-sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-sheet.js","sourceRoot":"","sources":["../../../src/pages/entry-review/mobile-sheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,YAAY,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SAC3C;QACD;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1C;QACD;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YACxC,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;SACxC;QACD;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;YAC5C,KAAK,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1D,aAAa,EAAE,0BAA0B;SAC1C;QACD;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SAC3C;QACD;YACE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;YAC1C,aAAa,EAAE,qBAAqB;SACrC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;WAqBF,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;gHAuB4F,MAAM,CAAC,gBAAgB,EAAE,CAAC;;eAE3H,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAC,IAAI,CAAA;;;;YAIR,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAA;;;;cAIN,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Server-side renderer for the masthead `⋮` popover menu (Step 2.2.7).
3
+ *
4
+ * Per `DESIGN-STANDARDS.md § Menu reveal pattern · popover, not slide-up
5
+ * sheet`, the masthead's `⋮` opens a dropdown popover anchored UNDER the
6
+ * glyph, with an up-pointing arrow registered to the glyph's
7
+ * x-position. The popover does NOT use Phase 2.1's `createSlideUpSheet`
8
+ * — that primitive is reserved for bottom-anchored affordances.
9
+ *
10
+ * The HTML scaffold emitted here lives hidden in the DOM until the
11
+ * companion client controller (`mobile-shell/masthead-popover.ts`)
12
+ * toggles it open. The scaffold has three sections, in order:
13
+ *
14
+ * 1. Operator help · Manual + Keyboard shortcuts
15
+ * 2. Configure · Configure studio (Phase 4 placeholder)
16
+ * 3. Connect · File an issue + About deskwork
17
+ *
18
+ * Companion CSS lives in `mobile-shell.css` under the
19
+ * `.er-masthead-popover-*` class vocabulary. The popover is mobile-only
20
+ * (≤600px) — desktop keeps existing per-surface chrome.
21
+ *
22
+ * Mirrors the v7 mockup's `.v7-popover` block faithfully (renamed
23
+ * `v7-` → `er-masthead-popover-` to match the project's BEM-ish
24
+ * namespace).
25
+ */
26
+ import { type RawHtml } from './html.ts';
27
+ /**
28
+ * Render the popover scaffold + scrim. Returns RawHtml so callers can
29
+ * embed it directly in their page template literals. The element is
30
+ * hidden by default; the client controller sets `hidden=false` to open.
31
+ *
32
+ * The scrim is a sibling element placed BEFORE the popover so it sits
33
+ * underneath in stacking order. Both elements share the
34
+ * `data-er-masthead-popover` / `data-er-masthead-popover-scrim` hooks
35
+ * the client controller uses to wire dismiss handlers.
36
+ */
37
+ export declare function renderMastheadMenu(): RawHtml;
38
+ //# sourceMappingURL=masthead-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masthead-menu.d.ts","sourceRoot":"","sources":["../../src/pages/masthead-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAKvD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAsF5C"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Server-side renderer for the masthead `⋮` popover menu (Step 2.2.7).
3
+ *
4
+ * Per `DESIGN-STANDARDS.md § Menu reveal pattern · popover, not slide-up
5
+ * sheet`, the masthead's `⋮` opens a dropdown popover anchored UNDER the
6
+ * glyph, with an up-pointing arrow registered to the glyph's
7
+ * x-position. The popover does NOT use Phase 2.1's `createSlideUpSheet`
8
+ * — that primitive is reserved for bottom-anchored affordances.
9
+ *
10
+ * The HTML scaffold emitted here lives hidden in the DOM until the
11
+ * companion client controller (`mobile-shell/masthead-popover.ts`)
12
+ * toggles it open. The scaffold has three sections, in order:
13
+ *
14
+ * 1. Operator help · Manual + Keyboard shortcuts
15
+ * 2. Configure · Configure studio (Phase 4 placeholder)
16
+ * 3. Connect · File an issue + About deskwork
17
+ *
18
+ * Companion CSS lives in `mobile-shell.css` under the
19
+ * `.er-masthead-popover-*` class vocabulary. The popover is mobile-only
20
+ * (≤600px) — desktop keeps existing per-surface chrome.
21
+ *
22
+ * Mirrors the v7 mockup's `.v7-popover` block faithfully (renamed
23
+ * `v7-` → `er-masthead-popover-` to match the project's BEM-ish
24
+ * namespace).
25
+ */
26
+ import { html, unsafe } from "./html.js";
27
+ const MANUAL_HREF = '/dev/editorial-help';
28
+ const ISSUE_HREF = 'https://github.com/audiocontrol-org/deskwork/issues/new';
29
+ /**
30
+ * Render the popover scaffold + scrim. Returns RawHtml so callers can
31
+ * embed it directly in their page template literals. The element is
32
+ * hidden by default; the client controller sets `hidden=false` to open.
33
+ *
34
+ * The scrim is a sibling element placed BEFORE the popover so it sits
35
+ * underneath in stacking order. Both elements share the
36
+ * `data-er-masthead-popover` / `data-er-masthead-popover-scrim` hooks
37
+ * the client controller uses to wire dismiss handlers.
38
+ */
39
+ export function renderMastheadMenu() {
40
+ return unsafe(html `
41
+ <div
42
+ class="er-masthead-popover-scrim"
43
+ data-er-masthead-popover-scrim
44
+ hidden
45
+ ></div>
46
+ <div
47
+ class="er-masthead-popover"
48
+ data-er-masthead-popover
49
+ role="dialog"
50
+ aria-labelledby="masthead-menu-trigger"
51
+ hidden
52
+ >
53
+ <div class="er-masthead-popover-section">
54
+ <div class="er-masthead-popover-section-label">Operator help</div>
55
+ <a
56
+ class="er-masthead-popover-item"
57
+ href="${MANUAL_HREF}"
58
+ >
59
+ <span class="er-masthead-popover-item-glyph">§</span>
60
+ <span class="er-masthead-popover-item-body">
61
+ <span class="er-masthead-popover-item-label">Manual</span>
62
+ <span class="er-masthead-popover-item-route">${MANUAL_HREF}</span>
63
+ </span>
64
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
65
+ </a>
66
+ <button
67
+ type="button"
68
+ class="er-masthead-popover-item"
69
+ data-er-masthead-popover-action="shortcuts"
70
+ >
71
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--blue">⌘</span>
72
+ <span class="er-masthead-popover-item-body">
73
+ <span class="er-masthead-popover-item-label">Keyboard shortcuts</span>
74
+ <span class="er-masthead-popover-item-route">opens overlay</span>
75
+ </span>
76
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
77
+ </button>
78
+ </div>
79
+ <div class="er-masthead-popover-section">
80
+ <div class="er-masthead-popover-section-label">Configure</div>
81
+ <button
82
+ type="button"
83
+ class="er-masthead-popover-item er-masthead-popover-item--future"
84
+ data-er-masthead-popover-action="configure"
85
+ data-disabled="true"
86
+ aria-disabled="true"
87
+ tabindex="-1"
88
+ >
89
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--kraft">⊞</span>
90
+ <span class="er-masthead-popover-item-body">
91
+ <span class="er-masthead-popover-item-label">Configure studio</span>
92
+ <span class="er-masthead-popover-item-route">.deskwork/config.json <span class="er-masthead-popover-item-future-tag">phase 4</span></span>
93
+ </span>
94
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
95
+ </button>
96
+ </div>
97
+ <div class="er-masthead-popover-section">
98
+ <div class="er-masthead-popover-section-label">Connect</div>
99
+ <a
100
+ class="er-masthead-popover-item"
101
+ href="${ISSUE_HREF}"
102
+ target="_blank"
103
+ rel="noopener noreferrer"
104
+ >
105
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--blue">✎</span>
106
+ <span class="er-masthead-popover-item-body">
107
+ <span class="er-masthead-popover-item-label">File an issue</span>
108
+ <span class="er-masthead-popover-item-route">github · new tab</span>
109
+ </span>
110
+ <span class="er-masthead-popover-item-arrow er-masthead-popover-item-arrow--external" aria-hidden="true">↗</span>
111
+ </a>
112
+ <a
113
+ class="er-masthead-popover-item"
114
+ href="${MANUAL_HREF}"
115
+ >
116
+ <span class="er-masthead-popover-item-glyph">❡</span>
117
+ <span class="er-masthead-popover-item-body">
118
+ <span class="er-masthead-popover-item-label">About deskwork</span>
119
+ <span class="er-masthead-popover-item-route">manual · GPL-3.0</span>
120
+ </span>
121
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
122
+ </a>
123
+ </div>
124
+ </div>`);
125
+ }
126
+ //# sourceMappingURL=masthead-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masthead-menu.js","sourceRoot":"","sources":["../../src/pages/masthead-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAC1C,MAAM,UAAU,GAAG,yDAAyD,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;kBAiBF,WAAW;;;;;2DAK8B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuCpD,UAAU;;;;;;;;;;;;;kBAaV,WAAW;;;;;;;;;;WAUlB,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Server-side renderer for the masthead `⋮` popover menu (Step 2.2.7).
3
+ *
4
+ * Per `DESIGN-STANDARDS.md § Menu reveal pattern · popover, not slide-up
5
+ * sheet`, the masthead's `⋮` opens a dropdown popover anchored UNDER the
6
+ * glyph, with an up-pointing arrow registered to the glyph's
7
+ * x-position. The popover does NOT use Phase 2.1's `createSlideUpSheet`
8
+ * — that primitive is reserved for bottom-anchored affordances.
9
+ *
10
+ * The HTML scaffold emitted here lives hidden in the DOM until the
11
+ * companion client controller (`mobile-shell/masthead-popover.ts`)
12
+ * toggles it open. The scaffold has three sections, in order:
13
+ *
14
+ * 1. Operator help · Manual + Keyboard shortcuts
15
+ * 2. Configure · Configure studio (Phase 4 placeholder)
16
+ * 3. Connect · File an issue + About deskwork
17
+ *
18
+ * Companion CSS lives in `mobile-shell.css` under the
19
+ * `.er-masthead-popover-*` class vocabulary. The popover is mobile-only
20
+ * (≤600px) — desktop keeps existing per-surface chrome.
21
+ *
22
+ * Mirrors the v7 mockup's `.v7-popover` block faithfully (renamed
23
+ * `v7-` → `er-masthead-popover-` to match the project's BEM-ish
24
+ * namespace).
25
+ */
26
+
27
+ import { html, unsafe, type RawHtml } from './html.ts';
28
+
29
+ const MANUAL_HREF = '/dev/editorial-help';
30
+ const ISSUE_HREF = 'https://github.com/audiocontrol-org/deskwork/issues/new';
31
+
32
+ /**
33
+ * Render the popover scaffold + scrim. Returns RawHtml so callers can
34
+ * embed it directly in their page template literals. The element is
35
+ * hidden by default; the client controller sets `hidden=false` to open.
36
+ *
37
+ * The scrim is a sibling element placed BEFORE the popover so it sits
38
+ * underneath in stacking order. Both elements share the
39
+ * `data-er-masthead-popover` / `data-er-masthead-popover-scrim` hooks
40
+ * the client controller uses to wire dismiss handlers.
41
+ */
42
+ export function renderMastheadMenu(): RawHtml {
43
+ return unsafe(html`
44
+ <div
45
+ class="er-masthead-popover-scrim"
46
+ data-er-masthead-popover-scrim
47
+ hidden
48
+ ></div>
49
+ <div
50
+ class="er-masthead-popover"
51
+ data-er-masthead-popover
52
+ role="dialog"
53
+ aria-labelledby="masthead-menu-trigger"
54
+ hidden
55
+ >
56
+ <div class="er-masthead-popover-section">
57
+ <div class="er-masthead-popover-section-label">Operator help</div>
58
+ <a
59
+ class="er-masthead-popover-item"
60
+ href="${MANUAL_HREF}"
61
+ >
62
+ <span class="er-masthead-popover-item-glyph">§</span>
63
+ <span class="er-masthead-popover-item-body">
64
+ <span class="er-masthead-popover-item-label">Manual</span>
65
+ <span class="er-masthead-popover-item-route">${MANUAL_HREF}</span>
66
+ </span>
67
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
68
+ </a>
69
+ <button
70
+ type="button"
71
+ class="er-masthead-popover-item"
72
+ data-er-masthead-popover-action="shortcuts"
73
+ >
74
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--blue">⌘</span>
75
+ <span class="er-masthead-popover-item-body">
76
+ <span class="er-masthead-popover-item-label">Keyboard shortcuts</span>
77
+ <span class="er-masthead-popover-item-route">opens overlay</span>
78
+ </span>
79
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
80
+ </button>
81
+ </div>
82
+ <div class="er-masthead-popover-section">
83
+ <div class="er-masthead-popover-section-label">Configure</div>
84
+ <button
85
+ type="button"
86
+ class="er-masthead-popover-item er-masthead-popover-item--future"
87
+ data-er-masthead-popover-action="configure"
88
+ data-disabled="true"
89
+ aria-disabled="true"
90
+ tabindex="-1"
91
+ >
92
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--kraft">⊞</span>
93
+ <span class="er-masthead-popover-item-body">
94
+ <span class="er-masthead-popover-item-label">Configure studio</span>
95
+ <span class="er-masthead-popover-item-route">.deskwork/config.json <span class="er-masthead-popover-item-future-tag">phase 4</span></span>
96
+ </span>
97
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
98
+ </button>
99
+ </div>
100
+ <div class="er-masthead-popover-section">
101
+ <div class="er-masthead-popover-section-label">Connect</div>
102
+ <a
103
+ class="er-masthead-popover-item"
104
+ href="${ISSUE_HREF}"
105
+ target="_blank"
106
+ rel="noopener noreferrer"
107
+ >
108
+ <span class="er-masthead-popover-item-glyph er-masthead-popover-item-glyph--blue">✎</span>
109
+ <span class="er-masthead-popover-item-body">
110
+ <span class="er-masthead-popover-item-label">File an issue</span>
111
+ <span class="er-masthead-popover-item-route">github · new tab</span>
112
+ </span>
113
+ <span class="er-masthead-popover-item-arrow er-masthead-popover-item-arrow--external" aria-hidden="true">↗</span>
114
+ </a>
115
+ <a
116
+ class="er-masthead-popover-item"
117
+ href="${MANUAL_HREF}"
118
+ >
119
+ <span class="er-masthead-popover-item-glyph">❡</span>
120
+ <span class="er-masthead-popover-item-body">
121
+ <span class="er-masthead-popover-item-label">About deskwork</span>
122
+ <span class="er-masthead-popover-item-route">manual · GPL-3.0</span>
123
+ </span>
124
+ <span class="er-masthead-popover-item-arrow" aria-hidden="true">›</span>
125
+ </a>
126
+ </div>
127
+ </div>`);
128
+ }