gutterpress 0.11.23-beta.1 → 0.11.23-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api/index.js +5 -5
- package/dist/{build-dg8a566j.js → build-3e18wnqj.js} +8 -8
- package/dist/{cli-vhav8g82.js → cli-0ep11b0q.js} +1 -1
- package/dist/{cli-e31jshz6.js → cli-88arpdke.js} +2 -2
- package/dist/{cli-1fy1pm9d.js → cli-9n9kg58f.js} +1 -1
- package/dist/{cli-k087gj0p.js → cli-pd2cje5b.js} +122 -11
- package/dist/{cli-989eg8jz.js → cli-pnrararp.js} +11 -10
- package/dist/{cli-ttj95aex.js → cli-tgnyvra3.js} +13 -3
- package/dist/{cli-31anr0r9.js → cli-v0evdpdf.js} +68 -28
- package/dist/{cli-s1zt779w.js → cli-x7gcdg6w.js} +1 -1
- package/dist/cli.js +12 -12
- package/dist/{doctor-g4a42tcz.js → doctor-2f4s9dyn.js} +3 -3
- package/dist/engine/compiler/postprocess.d.ts +3 -0
- package/dist/engine/shared/pdf-inspect.d.ts +33 -0
- package/dist/{engine-jvkcahr1.js → engine-c4pxz79g.js} +1 -1
- package/dist/{engine-wgkaqjsc.js → engine-cs5g2ez0.js} +2 -2
- package/dist/{ext-w9d5ftcg.js → ext-70gv86v5.js} +8 -8
- package/dist/{extension-restore-5x4mj79d.js → extension-restore-chj5nx3t.js} +2 -2
- package/dist/{extension-restore-as0g38p1.js → extension-restore-pd87p8r2.js} +4 -4
- package/dist/{gutterpress-agent-d29ry3ak.js → gutterpress-agent-wyryqehx.js} +13 -4
- package/dist/{gutterpress-viewer-ze691rrd.js → gutterpress-viewer-ywkf49q5.js} +38 -153
- package/dist/{index-c6y0p7jy.js → index-0k43evt0.js} +66 -22
- package/dist/{index-fk2kpf2t.js → index-2t1gdma7.js} +121 -10
- package/dist/{index-cw03e9p4.js → index-7j3hkwya.js} +68 -28
- package/dist/{index-a4j3xcfp.js → index-80vg3ed6.js} +13 -3
- package/dist/{index-798jt0qc.js → index-swfdgn2n.js} +2 -2
- package/dist/{index-rj5vrhz6.js → index-ytjkvwy5.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/lib/markdown/gutterpress-css.d.ts +1 -1
- package/dist/lib/source-provider.d.ts +27 -0
- package/dist/lib/version-changes.d.ts +14 -4
- package/dist/{new-jtk028rf.js → new-d61n5cn0.js} +8 -8
- package/dist/{plugins-bcbe7xs8.js → plugins-0hhw6s17.js} +1 -1
- package/dist/{plugins-zsm6wv79.js → plugins-e0n46s6m.js} +3 -3
- package/dist/{preflight-cs6mj1d6.js → preflight-fjayhjr5.js} +8 -8
- package/dist/{preview-d1j1g4qf.js → preview-h815jrfb.js} +8 -8
- package/dist/{publish-7yw4jyrt.js → publish-ft39zgma.js} +8 -8
- package/dist/render.js +12 -2
- package/dist/{source-provider-n7vehh6t.js → source-provider-j1w7byeq.js} +5 -1
- package/dist/{source-provider-tgzet3j5.js → source-provider-tjaf303m.js} +5 -1
- package/dist/test-helpers/vocabulary.d.ts +12 -0
- package/dist/{validate-rkcdnzhw.js → validate-b201dbrb.js} +8 -8
- package/package.json +1 -1
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
* carrying gp-left could start shifting; that is standards-tracking per
|
|
152
152
|
* CLAUDE.md ("Chrome wins once it ships"), not a bug in the author's book.
|
|
153
153
|
*/
|
|
154
|
-
export declare const GUTTERPRESS_CSS = "\n/* gp-* author image/block vocabulary. One vocabulary, gp-* only \u2014 the\n pre-vocabulary utility names (.center/.float-left/.float-right/\n .full-width/.full-bleed) were REMOVED when gp-* shipped; books rename\n the classes in their markdown (see the migration note). Source ORDER is\n the contract \u2014 see the doctrine comment above. */\n\n/* flow positions */\n.gp-left {\n float: left;\n margin: 0 var(--gp-gap, 1em) var(--gp-gap, 1em) 0;\n max-width: 50%;\n}\n.gp-right {\n float: right;\n margin: 0 0 var(--gp-gap, 1em) var(--gp-gap, 1em);\n max-width: 50%;\n}\n.gp-center {\n display: block;\n float: none;\n margin-left: auto;\n margin-right: auto;\n max-width: 100%;\n}\n.gp-full {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n@page gp-full-bleed { margin-left: 0; margin-right: 0; }\n.gp-bleed {\n display: block;\n float: none;\n break-before: page;\n page: gp-full-bleed;\n max-width: none;\n width: 100%;\n margin-left: 0;\n margin-right: 0;\n}\n\n/* sizes \u2014 AFTER the flow positions so max-width:100% lifts the floats' 50%\n cap at equal specificity */\n.gp-size-10 { width: 10%; max-width: 100%; }\n.gp-size-20 { width: 20%; max-width: 100%; }\n.gp-size-30 { width: 30%; max-width: 100%; }\n.gp-size-40 { width: 40%; max-width: 100%; }\n.gp-size-50 { width: 50%; max-width: 100%; }\n.gp-size-60 { width: 60%; max-width: 100%; }\n.gp-size-70 { width: 70%; max-width: 100%; }\n.gp-size-80 { width: 80%; max-width: 100%; }\n.gp-size-90 { width: 90%; max-width: 100%; }\n\n/* float clearance presets \u2014 consumed by var(--gp-gap) in the float rules\n above and by .gp-shape's shape-margin below; --gp-gap itself is\n author-settable CSS */\n.gp-tight { --gp-gap: 0.5em; }\n.gp-loose { --gp-gap: 2em; }\n\n/* column runs \u2014 plain CSS Multi-column, emitted by the core @columns marker\n (markers.js): @columns [1-5] ... @end-columns is the ONE way to lay\n content out in columns, and @column-break moves to the next column.\n The classes below are the CSS that marker emits, not author vocabulary.\n\n Permanent vocabulary, not a shim: Chromium implements multicol natively\n and these rules are the standard properties verbatim, so there is no\n spec gap here to remove later. Deliberately minimal \u2014 column-fill is\n NOT set (the CSS initial balance applies).\n Themes style a run through two tokens instead of writing column rules:\n --gp-column-gap default 1.5em\n --gp-column-rule default none (any column-rule shorthand value)\n Both hooks sit at zero specificity (:where), so any author rule wins.\n .gp-columns is two columns on its own; a count class (bare @columns\n emits gp-columns-2) wins because it comes later at the same specificity. */\n:where(.gp-columns, .gp-columns-1, .gp-columns-2, .gp-columns-3, .gp-columns-4, .gp-columns-5) {\n column-gap: var(--gp-column-gap, 1.5em);\n column-rule: var(--gp-column-rule, none);\n}\n.gp-columns { columns: 2; }\n.gp-columns-1 { columns: 1; }\n.gp-columns-2 { columns: 2; }\n.gp-columns-3 { columns: 3; }\n.gp-columns-4 { columns: 4; }\n.gp-columns-5 { columns: 5; }\n\n/* fragmentation controls \u2014 generic pagination utilities for any element,\n independent of the column vocabulary above (a book reached for\n these just as often outside a multicol run: keeping a card whole,\n forcing a section to start a fresh page). Standard properties only \u2014\n this project is Chromium-only (CLAUDE.md), so there are no legacy\n page-break-* twins to also emit. One name each. */\n.gp-no-break { break-inside: avoid; }\n.gp-break-before { break-before: page; }\n\n/* shape wrap \u2014 text follows the image's alpha silhouette instead of its\n rectangular box. shape-outside only applies to floats, so this is inert\n without .gp-left/.gp-right (and under .gp-pin, which un-floats). The\n shape URL cannot be written in CSS (url() contexts can't read attr()),\n so the image renderer rule (images.ts) mirrors the src into an inline\n --gp-shape:url(...) custom property whenever it sees this class --\n authors only ever type the class. threshold 0.2 ignores near-transparent\n anti-aliasing halos; shape-margin shares the float-gap vocabulary. */\nimg.gp-shape {\n shape-outside: var(--gp-shape);\n shape-image-threshold: 0.2;\n shape-margin: var(--gp-gap, 1em);\n}\n\n/* pin \u2014 within the nearest positioned ancestor (.page/.spread, rule above).\n The four insets are the pin box: 0 (the text block's edge) unless an\n engine set --gp-pin-<edge> on the page root for an edge a pin uses (the\n art-safe line). Non-auto insets and the explicit centers are\n load-bearing; see doctrine comment. */\n.gp-pin {\n position: absolute;\n top: var(--gp-pin-top, 0px);\n right: var(--gp-pin-right, 0px);\n bottom: var(--gp-pin-bottom, 0px);\n left: var(--gp-pin-left, 0px);\n align-self: center;\n justify-self: center;\n margin: 0;\n max-width: 100%;\n}\n\n/* pin edge modifiers \u2014 AFTER .gp-pin to beat its center defaults;\n justify-self is inert on in-flow floats, so gp-left/gp-right safely do\n double duty as flow float + pin edge */\n.gp-top { align-self: start; }\n.gp-bottom { align-self: end; }\n.gp-left { justify-self: start; }\n.gp-right { justify-self: end; }\n\n/* the escape hatch \u2014 the paper's edge, past the printer's safe area: the\n pin box loses its art-safe insets. Set on the pin itself, so it beats the\n values the page root hands down. */\n.gp-pin.gp-flush {\n --gp-pin-top: 0px;\n --gp-pin-right: 0px;\n --gp-pin-bottom: 0px;\n --gp-pin-left: 0px;\n}\n\n/* wrapper-margin neutralization (same pattern and rationale as the\n .gp-bleed paragraph-margin note in the doctrine comment; for pin, the\n emptied paragraph would otherwise leave a phantom margin gap in flow) */\n:where(p:has(> img.gp-bleed:only-child)) { margin: 0; }\n:where(p:has(> img.gp-pin:only-child)) { margin: 0; }\n\n/* depth \u2014 a named ladder for z-index, so books stop hand-tuning bare\n integers. A real book measured 21 z-index declarations using only four\n distinct values (-1, 0, 1, 2), each written literally at its use site.\n The custom properties are the author-settable surface (a book needing a\n deeper stack raises them once); the classes are the shorthand.\n\n NOT named \"layer\": CSS Paged Media 3 \u00A73.1 already defines \"page layers\"\n (page background, canvas, borders, contents, margin boxes) and those are\n parts of the PAGE BOX, not a z-ladder for content. Reusing the word for a\n different concept would collide with the spec vocabulary this project\n tracks. The pin EDGE modifiers already own .gp-top/.gp-bottom, so the\n ladder avoids those words too.\n\n .gp-behind is the one that earns its place: it puts a pinned image UNDER\n the page's text, which is otherwise impossible to express without a bare\n negative z-index. \"Above\" needs no class \u2014 an out-of-flow pin already\n paints above in-flow content.\n\n Two things silently defeat .gp-behind, neither visible at the use site:\n - a stacking context on the .page/.spread ancestor (z-index, isolation,\n opacity, filter, transform on it traps the negative layer inside).\n Core keeps .page/.spread at 'position: relative; z-index: auto'\n precisely so they are not stacking contexts.\n - a clipping ancestor (overflow other than visible) \u2014 but only where\n the art actually overhangs that ancestor's clip box on a clipped\n axis: the overhang is cut off, the same mechanism that clips a\n .gp-bleed plate back to the wrapper's width. Clipping never reorders\n layers \u2014 within-bounds art under a clipping .page prints whole and\n still behind (measured; see the build audit's comment in\n engine/compiler/build.ts), and a static wrapper's overflow never\n binds an abspos .gp-pin at all.\n The build-time engine.layer.trapped audit reports both against the live\n ancestor chain. printsafe/page-containment is only an early source hint for\n declarations written directly on .page/.spread. */\n:root {\n --gp-z-behind: -1;\n --gp-z-base: 0;\n --gp-z-raised: 1;\n --gp-z-front: 2;\n}\n.gp-behind { z-index: var(--gp-z-behind); }\n.gp-base { z-index: var(--gp-z-base); }\n.gp-raised { z-index: var(--gp-z-raised); }\n.gp-front { z-index: var(--gp-z-front); }\n\n/* GFM-style alert/callout boxes (#237) \u2014 the DOM gfm-alerts.ts emits from\n \"> [!TYPE]\" blockquote syntax when a project opts into the bundled\n gutterpress-gfm-alerts feature (BUILTIN_OPTIONAL_PLUGINS, renderer.ts).\n The plugin is optional and inert by default; these rules are equally\n inert wherever the classes never appear, exactly like every other\n utility above, so shipping them costs nothing to a book that has not\n turned the feature on.\n\n This is authored-COMPONENT vocabulary, not the @marker structural family\n (markers.js/MARKER_CSS) \u2014 CLAUDE.md \u00A76 splits the two core CSS blocks by\n ROLE, and an author-facing box an author invokes via inline syntax is the\n same role as every other gp-* utility here, not page/chapter/section DOM.\n\n Deliberately minimal (CLAUDE.md \"thin over capable\" / the issue's own\n \"a rule and a label\"): a left border plus a bold label, :where()'d to\n zero specificity so a theme's own (unlayered) rule for any of these\n classes wins outright regardless of selector weight \u2014 see the\n cascade-layers note atop this file. Five semantic accent colors (the same\n NOTE/TIP/IMPORTANT/WARNING/CAUTION hues GitHub's own alerts use \u2014 a\n long-established, non-proprietary convention, not DC branding) are\n exposed as :root custom properties, the same author-settable-surface\n pattern as the --gp-z-* ladder above: a book retints every alert of one\n type by overriding a single property, no specificity fight required.\n --gp-alert-color cascades from the type modifier down to .gp-alert-title\n through ordinary CSS inheritance (the title is always a DOM descendant of\n the box), so it is set in exactly five places, not ten. */\n:root {\n --gp-alert-note-color: #0969da;\n --gp-alert-tip-color: #1a7f37;\n --gp-alert-important-color: #8250df;\n --gp-alert-warning-color: #9a6700;\n --gp-alert-caution-color: #cf222e;\n}\n:where(.gp-alert) {\n margin: 1em 0;\n padding: 0.5em 1em;\n border-left: 0.25em solid var(--gp-alert-color, currentColor);\n}\n:where(.gp-alert-title) {\n margin: 0 0 0.5em;\n font-weight: bold;\n color: var(--gp-alert-color, inherit);\n}\n:where(.gp-alert-note) { --gp-alert-color: var(--gp-alert-note-color); }\n:where(.gp-alert-tip) { --gp-alert-color: var(--gp-alert-tip-color); }\n:where(.gp-alert-important) { --gp-alert-color: var(--gp-alert-important-color); }\n:where(.gp-alert-warning) { --gp-alert-color: var(--gp-alert-warning-color); }\n:where(.gp-alert-caution) { --gp-alert-color: var(--gp-alert-caution-color); }\n\n/* Math (the bundled gutterpress-math feature, math.ts): MathJax's own rules\n for the <mjx-container> SVG output it emits, from its SVG output jax's\n stylesheet, less the ones for its interactive menu and tooltips. Inert in\n a book without formulas. */\nmjx-container[jax=\"SVG\"] { direction: ltr; }\nmjx-container[jax=\"SVG\"] > svg { overflow: visible; min-height: 1px; min-width: 1px; }\nmjx-container[jax=\"SVG\"] > svg a { fill: blue; stroke: blue; }\nmjx-container[jax=\"SVG\"][display=\"true\"] { display: block; text-align: center; margin: 1em 0; }\nmjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"] { display: flex; }\nmjx-container[jax=\"SVG\"][justify=\"left\"] { text-align: left; }\nmjx-container[jax=\"SVG\"][justify=\"right\"] { text-align: right; }\nmjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c] { stroke-width: 3; }\nmjx-assistive-mml {\n position: absolute !important;\n top: 0px; left: 0px;\n clip: rect(1px, 1px, 1px, 1px);\n padding: 1px 0px 0px 0px !important;\n border: 0px !important;\n display: block !important;\n width: auto !important;\n overflow: hidden !important;\n user-select: none;\n}\nmjx-assistive-mml[display=\"block\"] { width: 100% !important; }\ng[data-mml-node=\"merror\"] > g { fill: red; stroke: red; }\ng[data-mml-node=\"merror\"] > rect[data-background] { fill: yellow; stroke: none; }\ng[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line] { stroke-width: 70px; fill: none; }\ng[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame] { stroke-width: 70px; fill: none; }\ng[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed { stroke-dasharray: 140; }\ng[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted { stroke-linecap: round; stroke-dasharray: 0,140; }\ng[data-mml-node=\"mtable\"] > g > svg { overflow: visible; }\n";
|
|
154
|
+
export declare const GUTTERPRESS_CSS = "\n/* gp-* author image/block vocabulary. One vocabulary, gp-* only \u2014 the\n pre-vocabulary utility names (.center/.float-left/.float-right/\n .full-width/.full-bleed) were REMOVED when gp-* shipped; books rename\n the classes in their markdown (see the migration note). Source ORDER is\n the contract \u2014 see the doctrine comment above. */\n\n/* flow positions */\n.gp-left {\n float: left;\n margin: 0 var(--gp-gap, 1em) var(--gp-gap, 1em) 0;\n max-width: 50%;\n}\n.gp-right {\n float: right;\n margin: 0 0 var(--gp-gap, 1em) var(--gp-gap, 1em);\n max-width: 50%;\n}\n.gp-center {\n display: block;\n float: none;\n margin-left: auto;\n margin-right: auto;\n max-width: 100%;\n}\n.gp-full {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n@page gp-full-bleed { margin-left: 0; margin-right: 0; }\n.gp-bleed {\n display: block;\n float: none;\n break-before: page;\n page: gp-full-bleed;\n max-width: none;\n width: 100%;\n margin-left: 0;\n margin-right: 0;\n}\n\n/* sizes \u2014 AFTER the flow positions so max-width:100% lifts the floats' 50%\n cap at equal specificity */\n.gp-size-10 { width: 10%; max-width: 100%; }\n.gp-size-20 { width: 20%; max-width: 100%; }\n.gp-size-30 { width: 30%; max-width: 100%; }\n.gp-size-40 { width: 40%; max-width: 100%; }\n.gp-size-50 { width: 50%; max-width: 100%; }\n.gp-size-60 { width: 60%; max-width: 100%; }\n.gp-size-70 { width: 70%; max-width: 100%; }\n.gp-size-80 { width: 80%; max-width: 100%; }\n.gp-size-90 { width: 90%; max-width: 100%; }\n\n/* float clearance presets \u2014 consumed by var(--gp-gap) in the float rules\n above and by .gp-shape's shape-margin below; --gp-gap itself is\n author-settable CSS */\n.gp-tight { --gp-gap: 0.5em; }\n.gp-loose { --gp-gap: 2em; }\n\n/* column runs \u2014 plain CSS Multi-column, emitted by the core @columns marker\n (markers.js): @columns [1-5] ... @end-columns is the ONE way to lay\n content out in columns, and @column-break moves to the next column.\n The classes below are the CSS that marker emits, not author vocabulary.\n\n Permanent vocabulary, not a shim: Chromium implements multicol natively\n and these rules are the standard properties verbatim, so there is no\n spec gap here to remove later. Deliberately minimal \u2014 column-fill is\n NOT set (the CSS initial balance applies).\n Themes style a run through two tokens instead of writing column rules:\n --gp-column-gap default 1.5em\n --gp-column-rule default none (any column-rule shorthand value)\n Both hooks sit at zero specificity (:where), so any author rule wins.\n .gp-columns is two columns on its own; a count class (bare @columns\n emits gp-columns-2) wins because it comes later at the same specificity. */\n:where(.gp-columns, .gp-columns-1, .gp-columns-2, .gp-columns-3, .gp-columns-4, .gp-columns-5) {\n column-gap: var(--gp-column-gap, 1.5em);\n column-rule: var(--gp-column-rule, none);\n}\n.gp-columns { columns: 2; }\n.gp-columns-1 { columns: 1; }\n.gp-columns-2 { columns: 2; }\n.gp-columns-3 { columns: 3; }\n.gp-columns-4 { columns: 4; }\n.gp-columns-5 { columns: 5; }\n\n/* fragmentation controls \u2014 generic pagination utilities for any element,\n independent of the column vocabulary above (a book reached for\n these just as often outside a multicol run: keeping a card whole,\n forcing a section to start a fresh page). Standard properties only \u2014\n this project is Chromium-only (CLAUDE.md), so there are no legacy\n page-break-* twins to also emit. One name each. */\n.gp-no-break { break-inside: avoid; }\n.gp-break-before { break-before: page; }\n\n/* shape wrap \u2014 text follows the image's alpha silhouette instead of its\n rectangular box. shape-outside only applies to floats, so this is inert\n without .gp-left/.gp-right (and under .gp-pin, which un-floats). The\n shape URL cannot be written in CSS (url() contexts can't read attr()),\n so the image renderer rule (images.ts) mirrors the src into an inline\n --gp-shape:url(...) custom property whenever it sees this class --\n authors only ever type the class. threshold 0.2 ignores near-transparent\n anti-aliasing halos; shape-margin shares the float-gap vocabulary. */\nimg.gp-shape {\n shape-outside: var(--gp-shape);\n shape-image-threshold: 0.2;\n shape-margin: var(--gp-gap, 1em);\n}\n\n/* pin \u2014 within the nearest positioned ancestor (.page/.spread, rule above).\n The four insets are the pin box: 0 (the text block's edge) unless an\n engine set --gp-pin-<edge> on the page root for an edge a pin uses (the\n art-safe line). Non-auto insets and the explicit centers are\n load-bearing; see doctrine comment. */\n.gp-pin {\n position: absolute;\n top: var(--gp-pin-top, 0px);\n right: var(--gp-pin-right, 0px);\n bottom: var(--gp-pin-bottom, 0px);\n left: var(--gp-pin-left, 0px);\n align-self: center;\n justify-self: center;\n margin: 0;\n max-width: 100%;\n}\n\n/* pin edge modifiers \u2014 AFTER .gp-pin to beat its center defaults;\n justify-self is inert on in-flow floats, so gp-left/gp-right safely do\n double duty as flow float + pin edge */\n.gp-top { align-self: start; }\n.gp-bottom { align-self: end; }\n.gp-left { justify-self: start; }\n.gp-right { justify-self: end; }\n\n/* the escape hatch \u2014 the paper's edge, past the printer's safe area: the\n pin box loses its art-safe insets. Set on the pin itself, so it beats the\n values the page root hands down. */\n.gp-pin.gp-flush {\n --gp-pin-top: 0px;\n --gp-pin-right: 0px;\n --gp-pin-bottom: 0px;\n --gp-pin-left: 0px;\n}\n\n/* wrapper-margin neutralization (same pattern and rationale as the\n .gp-bleed paragraph-margin note in the doctrine comment; for pin, the\n emptied paragraph would otherwise leave a phantom margin gap in flow) */\n:where(p:has(> img.gp-bleed:only-child)) { margin: 0; }\n:where(p:has(> img.gp-pin:only-child)) { margin: 0; }\n\n/* depth \u2014 a named ladder for z-index, so books stop hand-tuning bare\n integers. A real book measured 21 z-index declarations using only four\n distinct values (-1, 0, 1, 2), each written literally at its use site.\n The custom properties are the author-settable surface (a book needing a\n deeper stack raises them once); the classes are the shorthand.\n\n NOT named \"layer\": CSS Paged Media 3 \u00A73.1 already defines \"page layers\"\n (page background, canvas, borders, contents, margin boxes) and those are\n parts of the PAGE BOX, not a z-ladder for content. Reusing the word for a\n different concept would collide with the spec vocabulary this project\n tracks. The pin EDGE modifiers already own .gp-top/.gp-bottom, so the\n ladder avoids those words too.\n\n .gp-behind is the one that earns its place: it puts a pinned image UNDER\n the page's text, which is otherwise impossible to express without a bare\n negative z-index. \"Above\" needs no class \u2014 an out-of-flow pin already\n paints above in-flow content.\n\n Two things silently defeat .gp-behind, neither visible at the use site:\n - a stacking context on the .page/.spread ancestor (z-index, isolation,\n opacity, filter, transform on it traps the negative layer inside).\n Core keeps .page/.spread at 'position: relative; z-index: auto'\n precisely so they are not stacking contexts.\n - a clipping ancestor (overflow other than visible) \u2014 but only where\n the art actually overhangs that ancestor's clip box on a clipped\n axis: the overhang is cut off, the same mechanism that clips a\n .gp-bleed plate back to the wrapper's width. Clipping never reorders\n layers \u2014 within-bounds art under a clipping .page prints whole and\n still behind (measured; see the build audit's comment in\n engine/compiler/build.ts), and a static wrapper's overflow never\n binds an abspos .gp-pin at all.\n The build-time engine.layer.trapped audit reports both against the live\n ancestor chain. printsafe/page-containment is only an early source hint for\n declarations written directly on .page/.spread. */\n:root {\n --gp-z-behind: -1;\n --gp-z-base: 0;\n --gp-z-raised: 1;\n --gp-z-front: 2;\n}\n.gp-behind { z-index: var(--gp-z-behind); }\n.gp-base { z-index: var(--gp-z-base); }\n.gp-raised { z-index: var(--gp-z-raised); }\n.gp-front { z-index: var(--gp-z-front); }\n\n/* GFM-style alert/callout boxes (#237) \u2014 the DOM gfm-alerts.ts emits from\n \"> [!TYPE]\" blockquote syntax when a project opts into the bundled\n gutterpress-gfm-alerts feature (BUILTIN_OPTIONAL_PLUGINS, renderer.ts).\n The plugin is optional and inert by default; these rules are equally\n inert wherever the classes never appear, exactly like every other\n utility above, so shipping them costs nothing to a book that has not\n turned the feature on.\n\n This is authored-COMPONENT vocabulary, not the @marker structural family\n (markers.js/MARKER_CSS) \u2014 CLAUDE.md \u00A76 splits the two core CSS blocks by\n ROLE, and an author-facing box an author invokes via inline syntax is the\n same role as every other gp-* utility here, not page/chapter/section DOM.\n\n Deliberately minimal (CLAUDE.md \"thin over capable\" / the issue's own\n \"a rule and a label\"): a left border plus a bold label, :where()'d to\n zero specificity so a theme's own (unlayered) rule for any of these\n classes wins outright regardless of selector weight \u2014 see the\n cascade-layers note atop this file. Five semantic accent colors (the same\n NOTE/TIP/IMPORTANT/WARNING/CAUTION hues GitHub's own alerts use \u2014 a\n long-established, non-proprietary convention, not DC branding) are\n exposed as :root custom properties, the same author-settable-surface\n pattern as the --gp-z-* ladder above: a book retints every alert of one\n type by overriding a single property, no specificity fight required.\n --gp-alert-color cascades from the type modifier down to .gp-alert-title\n through ordinary CSS inheritance (the title is always a DOM descendant of\n the box), so it is set in exactly five places, not ten. */\n:root {\n --gp-alert-note-color: #0969da;\n --gp-alert-tip-color: #1a7f37;\n --gp-alert-important-color: #8250df;\n --gp-alert-warning-color: #9a6700;\n --gp-alert-caution-color: #cf222e;\n}\n:where(.gp-alert) {\n margin: 1em 0;\n padding: 0.5em 1em;\n border-left: 0.25em solid var(--gp-alert-color, currentColor);\n}\n:where(.gp-alert-title) {\n margin: 0 0 0.5em;\n font-weight: bold;\n color: var(--gp-alert-color, inherit);\n}\n:where(.gp-alert-note) { --gp-alert-color: var(--gp-alert-note-color); }\n:where(.gp-alert-tip) { --gp-alert-color: var(--gp-alert-tip-color); }\n:where(.gp-alert-important) { --gp-alert-color: var(--gp-alert-important-color); }\n:where(.gp-alert-warning) { --gp-alert-color: var(--gp-alert-warning-color); }\n:where(.gp-alert-caution) { --gp-alert-color: var(--gp-alert-caution-color); }\n\n/* Math (the bundled gutterpress-math feature, math.ts): MathJax's own rules\n for the <mjx-container> SVG output it emits, from its SVG output jax's\n stylesheet, less the ones for its interactive menu and tooltips, plus one\n bound of ours on the hidden MathML copy (#469, below). Inert in a book\n without formulas. */\nmjx-container[jax=\"SVG\"] { direction: ltr; }\nmjx-container[jax=\"SVG\"] > svg { overflow: visible; min-height: 1px; min-width: 1px; }\nmjx-container[jax=\"SVG\"] > svg a { fill: blue; stroke: blue; }\nmjx-container[jax=\"SVG\"][display=\"true\"] { display: block; text-align: center; margin: 1em 0; }\nmjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"] { display: flex; }\nmjx-container[jax=\"SVG\"][justify=\"left\"] { text-align: left; }\nmjx-container[jax=\"SVG\"][justify=\"right\"] { text-align: right; }\nmjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c] { stroke-width: 3; }\nmjx-assistive-mml {\n position: absolute !important;\n top: 0px; left: 0px;\n clip: rect(1px, 1px, 1px, 1px);\n padding: 1px 0px 0px 0px !important;\n border: 0px !important;\n display: block !important;\n width: auto !important;\n /* Ours (#469). The browser lays the copy out in whatever math font it has,\n so it can be wider than the formula's SVG; ending a line, it crossed the\n column edge and Chromium shrank the whole print to fit. MathJax makes the\n container position: relative with the copy at its top left, so 100% is\n the formula's width. Clip and overflow still hide the copy and its MathML\n still reaches screen readers; only its box changes. Not the 1px\n visually-hidden box MathJax 2 used: its docs note VoiceOver on iOS could\n not reach a formula by touch in it. */\n max-width: 100% !important;\n overflow: hidden !important;\n user-select: none;\n}\nmjx-assistive-mml[display=\"block\"] { width: 100% !important; }\ng[data-mml-node=\"merror\"] > g { fill: red; stroke: red; }\ng[data-mml-node=\"merror\"] > rect[data-background] { fill: yellow; stroke: none; }\ng[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line] { stroke-width: 70px; fill: none; }\ng[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame] { stroke-width: 70px; fill: none; }\ng[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed { stroke-dasharray: 140; }\ng[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted { stroke-linecap: round; stroke-dasharray: 0,140; }\ng[data-mml-node=\"mtable\"] > g > svg { overflow: visible; }\n";
|
|
155
155
|
/**
|
|
156
156
|
* GP_CLASSES — every class an author may legitimately write with a `gp-`
|
|
157
157
|
* prefix: the `.gp-*` selectors in `GUTTERPRESS_CSS` above, the two
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ReadCommitResult } from "isomorphic-git";
|
|
1
2
|
import type { ProjectCapabilities, ProjectSource } from "./project-source.ts";
|
|
2
3
|
/**
|
|
3
4
|
* isomorphic-git object cache scoped to ONE operation and released with it.
|
|
@@ -182,6 +183,32 @@ export declare function hasPendingChanges(dir: string, cache?: GitCache): Promis
|
|
|
182
183
|
* as dirty (the WORKDIR-vs-STAGE-only check silently drops it).
|
|
183
184
|
*/
|
|
184
185
|
export declare function hasUncommittedChanges(dir: string, cache?: GitCache): Promise<boolean>;
|
|
186
|
+
/**
|
|
187
|
+
* A walk back through a repo's history in the order `git.log` lists it (the
|
|
188
|
+
* newest commit time first), visiting each commit once (#472). `git.log` has
|
|
189
|
+
* no visited set: after a merge it lists a commit again, with everything older,
|
|
190
|
+
* and the repeats used up a page. Starting the next page's log at the last id
|
|
191
|
+
* also dropped the side of a merge that id does not descend from. Shared with
|
|
192
|
+
* the online-only versions (`commitsAhead`, #477), which walks two tips at once.
|
|
193
|
+
*/
|
|
194
|
+
export interface HistoryWalk {
|
|
195
|
+
/** Commits read but not listed yet, sorted so the newest is last. */
|
|
196
|
+
tips: ReadCommitResult[];
|
|
197
|
+
/** Every commit ever put in `tips`. */
|
|
198
|
+
queued: Set<string>;
|
|
199
|
+
/** `.git/shallow`: commits whose parents a shallow clone does not have. */
|
|
200
|
+
shallow: Set<string>;
|
|
201
|
+
/** Commits read ahead (see {@link nextInHistory}), not queued yet. */
|
|
202
|
+
readAhead: Map<string, ReadCommitResult>;
|
|
203
|
+
}
|
|
204
|
+
/** A walk back from `heads` (the history of each of them, together). */
|
|
205
|
+
export declare function startHistoryWalk(dir: string, cache: GitCache, heads: string[]): Promise<HistoryWalk>;
|
|
206
|
+
/**
|
|
207
|
+
* The walk's next commit, newest first; undefined once the history is done.
|
|
208
|
+
* `needed` is how many more commits the page needs, to bound a read-ahead
|
|
209
|
+
* (none for 1: a caller that cannot tell how far it will go reads one by one).
|
|
210
|
+
*/
|
|
211
|
+
export declare function nextInHistory(dir: string, walk: HistoryWalk, cache: GitCache, needed: number): Promise<ReadCommitResult | undefined>;
|
|
185
212
|
/**
|
|
186
213
|
* Lock-free snapshot of the full working tree (stage everything + commit).
|
|
187
214
|
*
|
|
@@ -45,14 +45,24 @@ export declare function listVersionChanges(projectDir: string, oid: string): Pro
|
|
|
45
45
|
export declare function describeVersions(projectDir: string, entries: SnapshotEntry[]): Promise<VersionEntry[]>;
|
|
46
46
|
/**
|
|
47
47
|
* The commits reachable from `fromOid` that `baseOid`'s history does not
|
|
48
|
-
* have
|
|
49
|
-
*
|
|
48
|
+
* have (`git rev-list fromOid ^baseOid`), each once, newest first in the
|
|
49
|
+
* order Version history lists versions, up to `limit`. None when the two
|
|
50
|
+
* share no history: that is another book's online copy, which Sync refuses.
|
|
51
|
+
*
|
|
52
|
+
* One walk back from both tips, newest commit time first (#477). What
|
|
53
|
+
* `baseOid` reaches is marked, and a marked commit marks its parents, even
|
|
54
|
+
* ones already walked: a commit both tips reach is never listed, by whatever
|
|
55
|
+
* path `fromOid` reaches it (a criss-cross merge has two merge bases). The
|
|
56
|
+
* walk goes on while an unmarked commit is queued, so a version dated before
|
|
57
|
+
* the commits it builds on (a collaborator's clock behind) is still found;
|
|
58
|
+
* then until every marked commit queued is {@link CLOCK_SKEW_SECONDS} older
|
|
59
|
+
* than the oldest version listed.
|
|
50
60
|
*/
|
|
51
|
-
export declare function commitsAhead(dir: string, fromOid: string, baseOid: string, cache?:
|
|
61
|
+
export declare function commitsAhead(dir: string, fromOid: string, baseOid: string, cache?: Record<string, unknown>, limit?: number): Promise<SnapshotEntry[]>;
|
|
52
62
|
/**
|
|
53
63
|
* What is online that this computer has not got: fetch the book's branch
|
|
54
64
|
* (remote-tracking ref only — no merge, no checkout, safe on a dirty tree)
|
|
55
|
-
* and describe the commits
|
|
65
|
+
* and describe the commits this computer has not got. Quiet on every failure,
|
|
56
66
|
* reporting why, like `checkRemoteUpdates`.
|
|
57
67
|
*/
|
|
58
68
|
export declare function listOnlineVersions(options: {
|
|
@@ -3,18 +3,18 @@ import {
|
|
|
3
3
|
EXTENSION_KINDS,
|
|
4
4
|
scaffoldExtension,
|
|
5
5
|
scaffoldProject
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-pnrararp.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveGhostscript
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-0ep11b0q.js";
|
|
10
10
|
import"./cli-ht1bcqdd.js";
|
|
11
|
-
import"./cli-
|
|
11
|
+
import"./cli-pd2cje5b.js";
|
|
12
12
|
import"./cli-5crpmz42.js";
|
|
13
13
|
import"./cli-eyyggect.js";
|
|
14
14
|
import {
|
|
15
15
|
isToolAvailable
|
|
16
16
|
} from "./cli-asap4t1z.js";
|
|
17
|
-
import"./cli-
|
|
17
|
+
import"./cli-v0evdpdf.js";
|
|
18
18
|
import"./cli-v5mp7a6q.js";
|
|
19
19
|
import {
|
|
20
20
|
PRESET_IDS,
|
|
@@ -22,15 +22,15 @@ import {
|
|
|
22
22
|
TARGET_IDS,
|
|
23
23
|
loadManifest,
|
|
24
24
|
resolveConfig
|
|
25
|
-
} from "./cli-
|
|
26
|
-
import"./cli-
|
|
27
|
-
import"./cli-
|
|
25
|
+
} from "./cli-88arpdke.js";
|
|
26
|
+
import"./cli-tgnyvra3.js";
|
|
27
|
+
import"./cli-9n9kg58f.js";
|
|
28
28
|
import {
|
|
29
29
|
UsageError,
|
|
30
30
|
rejectExtraPositionals,
|
|
31
31
|
rejectUnknownFlags
|
|
32
32
|
} from "./cli-d8xjns66.js";
|
|
33
|
-
import"./cli-
|
|
33
|
+
import"./cli-x7gcdg6w.js";
|
|
34
34
|
import"./cli-65gy8ask.js";
|
|
35
35
|
import {
|
|
36
36
|
EXIT_CODES
|
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
loadPlugins,
|
|
9
9
|
loadPluginsWithCss,
|
|
10
10
|
loadPublishFunction
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
11
|
+
} from "./cli-tgnyvra3.js";
|
|
12
|
+
import"./cli-9n9kg58f.js";
|
|
13
|
+
import"./cli-x7gcdg6w.js";
|
|
14
14
|
import"./cli-y28j019d.js";
|
|
15
15
|
import"./cli-37x76zdn.js";
|
|
16
16
|
export {
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeValidation,
|
|
3
3
|
reportMissingTools
|
|
4
|
-
} from "./cli-
|
|
5
|
-
import"./cli-
|
|
4
|
+
} from "./cli-pnrararp.js";
|
|
5
|
+
import"./cli-0ep11b0q.js";
|
|
6
6
|
import"./cli-ht1bcqdd.js";
|
|
7
|
-
import"./cli-
|
|
7
|
+
import"./cli-pd2cje5b.js";
|
|
8
8
|
import"./cli-5crpmz42.js";
|
|
9
9
|
import"./cli-eyyggect.js";
|
|
10
10
|
import"./cli-asap4t1z.js";
|
|
11
|
-
import"./cli-
|
|
11
|
+
import"./cli-v0evdpdf.js";
|
|
12
12
|
import"./cli-v5mp7a6q.js";
|
|
13
13
|
import {
|
|
14
14
|
publishTargetFor
|
|
15
|
-
} from "./cli-
|
|
16
|
-
import"./cli-
|
|
15
|
+
} from "./cli-88arpdke.js";
|
|
16
|
+
import"./cli-tgnyvra3.js";
|
|
17
17
|
import {
|
|
18
18
|
log
|
|
19
|
-
} from "./cli-
|
|
19
|
+
} from "./cli-9n9kg58f.js";
|
|
20
20
|
import {
|
|
21
21
|
UsageError,
|
|
22
22
|
rejectExtraPositionals,
|
|
23
23
|
rejectUnknownFlags
|
|
24
24
|
} from "./cli-d8xjns66.js";
|
|
25
|
-
import"./cli-
|
|
25
|
+
import"./cli-x7gcdg6w.js";
|
|
26
26
|
import"./cli-65gy8ask.js";
|
|
27
27
|
import {
|
|
28
28
|
BuildError,
|
|
@@ -3,23 +3,23 @@ import {
|
|
|
3
3
|
runBuild,
|
|
4
4
|
splitOutPath,
|
|
5
5
|
startPreviewServer
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
6
|
+
} from "./cli-pnrararp.js";
|
|
7
|
+
import"./cli-0ep11b0q.js";
|
|
8
8
|
import {
|
|
9
9
|
previewArgs
|
|
10
10
|
} from "./cli-75qkn0k5.js";
|
|
11
11
|
import"./cli-ht1bcqdd.js";
|
|
12
|
-
import"./cli-
|
|
12
|
+
import"./cli-pd2cje5b.js";
|
|
13
13
|
import"./cli-5crpmz42.js";
|
|
14
14
|
import"./cli-eyyggect.js";
|
|
15
15
|
import"./cli-asap4t1z.js";
|
|
16
|
-
import"./cli-
|
|
16
|
+
import"./cli-v0evdpdf.js";
|
|
17
17
|
import"./cli-v5mp7a6q.js";
|
|
18
|
-
import"./cli-
|
|
19
|
-
import"./cli-
|
|
18
|
+
import"./cli-88arpdke.js";
|
|
19
|
+
import"./cli-tgnyvra3.js";
|
|
20
20
|
import {
|
|
21
21
|
log
|
|
22
|
-
} from "./cli-
|
|
22
|
+
} from "./cli-9n9kg58f.js";
|
|
23
23
|
import {
|
|
24
24
|
UsageError,
|
|
25
25
|
parseFormat,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
rejectUnknownFlags,
|
|
29
29
|
resolvePort
|
|
30
30
|
} from "./cli-d8xjns66.js";
|
|
31
|
-
import"./cli-
|
|
31
|
+
import"./cli-x7gcdg6w.js";
|
|
32
32
|
import"./cli-65gy8ask.js";
|
|
33
33
|
import {
|
|
34
34
|
BuildError
|
|
@@ -10,30 +10,30 @@ import {
|
|
|
10
10
|
resolvePublishFormat,
|
|
11
11
|
resolvePublishProvider,
|
|
12
12
|
runPublish
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-pnrararp.js";
|
|
14
14
|
import {
|
|
15
15
|
FileTokenStore
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-0ep11b0q.js";
|
|
17
17
|
import"./cli-ht1bcqdd.js";
|
|
18
|
-
import"./cli-
|
|
18
|
+
import"./cli-pd2cje5b.js";
|
|
19
19
|
import"./cli-5crpmz42.js";
|
|
20
20
|
import"./cli-eyyggect.js";
|
|
21
21
|
import"./cli-asap4t1z.js";
|
|
22
|
-
import"./cli-
|
|
22
|
+
import"./cli-v0evdpdf.js";
|
|
23
23
|
import"./cli-v5mp7a6q.js";
|
|
24
24
|
import {
|
|
25
25
|
loadManifestWithPath
|
|
26
|
-
} from "./cli-
|
|
27
|
-
import"./cli-
|
|
26
|
+
} from "./cli-88arpdke.js";
|
|
27
|
+
import"./cli-tgnyvra3.js";
|
|
28
28
|
import {
|
|
29
29
|
log
|
|
30
|
-
} from "./cli-
|
|
30
|
+
} from "./cli-9n9kg58f.js";
|
|
31
31
|
import {
|
|
32
32
|
UsageError,
|
|
33
33
|
rejectExtraPositionals,
|
|
34
34
|
rejectUnknownFlags
|
|
35
35
|
} from "./cli-d8xjns66.js";
|
|
36
|
-
import"./cli-
|
|
36
|
+
import"./cli-x7gcdg6w.js";
|
|
37
37
|
import"./cli-65gy8ask.js";
|
|
38
38
|
import {
|
|
39
39
|
BuildError,
|
package/dist/render.js
CHANGED
|
@@ -1431,8 +1431,9 @@ img.gp-shape {
|
|
|
1431
1431
|
|
|
1432
1432
|
/* Math (the bundled gutterpress-math feature, math.ts): MathJax's own rules
|
|
1433
1433
|
for the <mjx-container> SVG output it emits, from its SVG output jax's
|
|
1434
|
-
stylesheet, less the ones for its interactive menu and tooltips
|
|
1435
|
-
|
|
1434
|
+
stylesheet, less the ones for its interactive menu and tooltips, plus one
|
|
1435
|
+
bound of ours on the hidden MathML copy (#469, below). Inert in a book
|
|
1436
|
+
without formulas. */
|
|
1436
1437
|
mjx-container[jax="SVG"] { direction: ltr; }
|
|
1437
1438
|
mjx-container[jax="SVG"] > svg { overflow: visible; min-height: 1px; min-width: 1px; }
|
|
1438
1439
|
mjx-container[jax="SVG"] > svg a { fill: blue; stroke: blue; }
|
|
@@ -1449,6 +1450,15 @@ mjx-assistive-mml {
|
|
|
1449
1450
|
border: 0px !important;
|
|
1450
1451
|
display: block !important;
|
|
1451
1452
|
width: auto !important;
|
|
1453
|
+
/* Ours (#469). The browser lays the copy out in whatever math font it has,
|
|
1454
|
+
so it can be wider than the formula's SVG; ending a line, it crossed the
|
|
1455
|
+
column edge and Chromium shrank the whole print to fit. MathJax makes the
|
|
1456
|
+
container position: relative with the copy at its top left, so 100% is
|
|
1457
|
+
the formula's width. Clip and overflow still hide the copy and its MathML
|
|
1458
|
+
still reaches screen readers; only its box changes. Not the 1px
|
|
1459
|
+
visually-hidden box MathJax 2 used: its docs note VoiceOver on iOS could
|
|
1460
|
+
not reach a formula by touch in it. */
|
|
1461
|
+
max-width: 100% !important;
|
|
1452
1462
|
overflow: hidden !important;
|
|
1453
1463
|
user-select: none;
|
|
1454
1464
|
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
isNoChangesError,
|
|
17
17
|
listRevisions,
|
|
18
18
|
listWorkdirChanges,
|
|
19
|
+
nextInHistory,
|
|
19
20
|
providerFor,
|
|
20
21
|
readRevisionRefs,
|
|
21
22
|
resolveGitAuthor,
|
|
@@ -24,10 +25,11 @@ import {
|
|
|
24
25
|
snapshotStagingMarkerPath,
|
|
25
26
|
snapshotWorkingTreeUnlocked,
|
|
26
27
|
stageChanges,
|
|
28
|
+
startHistoryWalk,
|
|
27
29
|
switchBranch,
|
|
28
30
|
whenGitIdle,
|
|
29
31
|
withRepoLock
|
|
30
|
-
} from "./cli-
|
|
32
|
+
} from "./cli-v0evdpdf.js";
|
|
31
33
|
import"./cli-v5mp7a6q.js";
|
|
32
34
|
import"./cli-y28j019d.js";
|
|
33
35
|
import"./cli-37x76zdn.js";
|
|
@@ -35,6 +37,7 @@ export {
|
|
|
35
37
|
withRepoLock,
|
|
36
38
|
whenGitIdle,
|
|
37
39
|
switchBranch,
|
|
40
|
+
startHistoryWalk,
|
|
38
41
|
stageChanges,
|
|
39
42
|
snapshotWorkingTreeUnlocked,
|
|
40
43
|
snapshotStagingMarkerPath,
|
|
@@ -43,6 +46,7 @@ export {
|
|
|
43
46
|
resolveGitAuthor,
|
|
44
47
|
readRevisionRefs,
|
|
45
48
|
providerFor,
|
|
49
|
+
nextInHistory,
|
|
46
50
|
listWorkdirChanges,
|
|
47
51
|
listRevisions,
|
|
48
52
|
isNoChangesError,
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
isNoChangesError,
|
|
17
17
|
listRevisions,
|
|
18
18
|
listWorkdirChanges,
|
|
19
|
+
nextInHistory,
|
|
19
20
|
providerFor,
|
|
20
21
|
readRevisionRefs,
|
|
21
22
|
resolveGitAuthor,
|
|
@@ -24,10 +25,11 @@ import {
|
|
|
24
25
|
snapshotStagingMarkerPath,
|
|
25
26
|
snapshotWorkingTreeUnlocked,
|
|
26
27
|
stageChanges,
|
|
28
|
+
startHistoryWalk,
|
|
27
29
|
switchBranch,
|
|
28
30
|
whenGitIdle,
|
|
29
31
|
withRepoLock
|
|
30
|
-
} from "./index-
|
|
32
|
+
} from "./index-7j3hkwya.js";
|
|
31
33
|
import"./index-5x42amh8.js";
|
|
32
34
|
import"./index-v5mp7a6q.js";
|
|
33
35
|
import"./index-37x76zdn.js";
|
|
@@ -35,6 +37,7 @@ export {
|
|
|
35
37
|
withRepoLock,
|
|
36
38
|
whenGitIdle,
|
|
37
39
|
switchBranch,
|
|
40
|
+
startHistoryWalk,
|
|
38
41
|
stageChanges,
|
|
39
42
|
snapshotWorkingTreeUnlocked,
|
|
40
43
|
snapshotStagingMarkerPath,
|
|
@@ -43,6 +46,7 @@ export {
|
|
|
43
46
|
resolveGitAuthor,
|
|
44
47
|
readRevisionRefs,
|
|
45
48
|
providerFor,
|
|
49
|
+
nextInHistory,
|
|
46
50
|
listWorkdirChanges,
|
|
47
51
|
listRevisions,
|
|
48
52
|
isNoChangesError,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words a writer never sees, as ONE list for every vocabulary test (#448).
|
|
3
|
+
*
|
|
4
|
+
* TEST-ONLY, like testkit.ts. The rules are docs/ux-design-contract.md's
|
|
5
|
+
* "Vocabulary (what an Author reads)"; this is the list the tests hold
|
|
6
|
+
* writer-facing strings to, so a word is banned in one place. Each test keeps
|
|
7
|
+
* its own exceptions (an author's own note, the SSH hint's `git@…` address).
|
|
8
|
+
*/
|
|
9
|
+
/** Matched against lowercased text. */
|
|
10
|
+
export declare const BANNED_TERMS: readonly RegExp[];
|
|
11
|
+
/** The banned terms `text` uses (lowercased); empty when it reads right. */
|
|
12
|
+
export declare function bannedTermsIn(text: string): string[];
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeAndReport
|
|
3
|
-
} from "./cli-
|
|
4
|
-
import"./cli-
|
|
3
|
+
} from "./cli-pnrararp.js";
|
|
4
|
+
import"./cli-0ep11b0q.js";
|
|
5
5
|
import"./cli-ht1bcqdd.js";
|
|
6
|
-
import"./cli-
|
|
6
|
+
import"./cli-pd2cje5b.js";
|
|
7
7
|
import"./cli-5crpmz42.js";
|
|
8
8
|
import"./cli-eyyggect.js";
|
|
9
9
|
import"./cli-asap4t1z.js";
|
|
10
|
-
import"./cli-
|
|
10
|
+
import"./cli-v0evdpdf.js";
|
|
11
11
|
import"./cli-v5mp7a6q.js";
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
12
|
+
import"./cli-88arpdke.js";
|
|
13
|
+
import"./cli-tgnyvra3.js";
|
|
14
14
|
import {
|
|
15
15
|
log
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-9n9kg58f.js";
|
|
17
17
|
import {
|
|
18
18
|
UsageError,
|
|
19
19
|
rejectExtraPositionals,
|
|
20
20
|
rejectUnknownFlags
|
|
21
21
|
} from "./cli-d8xjns66.js";
|
|
22
|
-
import"./cli-
|
|
22
|
+
import"./cli-x7gcdg6w.js";
|
|
23
23
|
import"./cli-65gy8ask.js";
|
|
24
24
|
import {
|
|
25
25
|
BuildError,
|
package/package.json
CHANGED