@getvitops/emdash 2.0.0-alpha.0 → 2.0.0-alpha.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +18 -16
  3. package/dist/index.d.mts +26 -6
  4. package/dist/index.d.mts.map +1 -1
  5. package/dist/index.mjs +578 -129
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +5 -5
  8. package/src/astro/Nothing.astro +3 -0
  9. package/src/astro/WidgetArea.astro +113 -0
  10. package/src/astro/blocks/Accordion.astro +2 -1
  11. package/src/astro/blocks/ActionLink.astro +2 -1
  12. package/src/astro/blocks/Badges.astro +67 -0
  13. package/src/astro/blocks/Banner.astro +3 -2
  14. package/src/astro/blocks/Callout.astro +3 -8
  15. package/src/astro/blocks/Cards.astro +6 -4
  16. package/src/astro/blocks/Carousel.astro +2 -0
  17. package/src/astro/blocks/CopyButton.astro +3 -2
  18. package/src/astro/blocks/Details.astro +2 -1
  19. package/src/astro/blocks/Embed.astro +2 -1
  20. package/src/astro/blocks/Entries.astro +2 -1
  21. package/src/astro/blocks/Form.astro +20 -1
  22. package/src/astro/blocks/Gallery.astro +2 -0
  23. package/src/astro/blocks/Hero.astro +27 -11
  24. package/src/astro/blocks/ImageCompare.astro +2 -1
  25. package/src/astro/blocks/Logos.astro +10 -7
  26. package/src/astro/blocks/Marquee.astro +2 -1
  27. package/src/astro/blocks/Nav.astro +2 -2
  28. package/src/astro/blocks/NavTree.astro +1 -1
  29. package/src/astro/blocks/Pricing.astro +2 -2
  30. package/src/astro/blocks/Reviews.astro +3 -3
  31. package/src/astro/blocks/Section.astro +17 -13
  32. package/src/astro/blocks/Stats.astro +5 -4
  33. package/src/astro/blocks/Steps.astro +5 -5
  34. package/src/astro/blocks/WidgetArea.astro +21 -0
  35. package/src/astro/blocks/attrs.test.ts +74 -0
  36. package/src/astro/blocks/attrs.ts +116 -0
  37. package/src/astro/blocks/cycle.container.test.ts +73 -0
  38. package/src/astro/blocks/form.sample.ts +8 -2
  39. package/src/astro/blocks/form.ts +16 -5
  40. package/src/astro/blocks/nav.ts +1 -1
  41. package/src/astro/blocks/render.container.test.ts +131 -19
  42. package/src/astro/blocks/tone.test.ts +10 -0
  43. package/src/astro/blocks/tone.ts +48 -6
  44. package/src/astro/blocks/unrendered.ts +23 -0
  45. package/src/astro/blocks/value.test.ts +27 -1
  46. package/src/astro/blocks/value.ts +16 -0
  47. package/src/astro/index.ts +38 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,83 @@
1
1
  # @getvitops/emdash
2
2
 
3
+ ## 2.0.0-alpha.2
4
+
5
+ ### Major Changes
6
+
7
+ - 0a47856: **Breaking: every block type is now `vitops_<name>`** (`vitops_cards`, `vitops_hero`, `vitops_actionLink`, …), where the Portable Text blocks were `vitops.<name>` and the section block type was already `vitops_section`. EmDash validates a block type's slug as `[a-z][a-z0-9_]*`, so `vitops.section` was never possible and the toolkit had two styles for one kind of thing. Underscore is the one form valid everywhere, so it is now the only one.
8
+
9
+ Migration: in stored content and in `seed/seed.json`, rename `_type` values from `vitops.<name>` to `vitops_<name>`; in `PortableText` `components`, rename the keys the same way; the `blocks: { include, exclude }` option takes full type names, so rename those too. `vt_*` names in a site are that site's own types and are unaffected. A search-and-replace of `vitops.(actionLink|imageCompare|copyButton|banner|details|carousel|gallery|cards|accordion|hero|marquee|logos|steps|stats|callout|entries|pricing|embed|form|reviews|nav|badges|widgetArea)` with `vitops_$1` covers it. `vitops emdash build` reports any block left on the old name as having no component.
10
+
11
+ ### Minor Changes
12
+
13
+ - 0a47856: Build correctness and gaps from the second upstream round.
14
+
15
+ - **`@getvitops/emdash`: fixes a circular import that emptied the plugin block map in the static build.** `Section.astro` and `WidgetArea.astro` imported `emdash/ui` statically, which imports `virtual:emdash/block-components`, which is `@getvitops/emdash/astro` again. Depending on import order, every `vitops_*` block inside a section body was dropped from prerendered pages with only a `PortableText [components.type] is missing …` warning. Both now import it lazily, and a test fails if any renderer imports `emdash/ui` statically. No code change needed in sites.
16
+ - **`@getvitops/cli`: `vitops emdash build`** runs `astro build` and then `check-prerender`, and fails when the build reports a block type with no component (reported once per type). The template's `build`, `deploy` and `deploy:dev` scripts use it; existing sites replace `astro build && vitops emdash check-prerender` with `vitops emdash build`. `check-prerender` also warns (fails with `--strict`) on a page without exactly one `<h1>`.
17
+ - **`@getvitops/emdash`: `vitops_hero` and `vitops_section` heading level** accepts `h1`–`h6` and `p` (a heading that is styled but not in the outline). The hero defaults to `h1`; set the level to `2` on a page whose layout already renders an `h1` (the template's seed does).
18
+ - **`@getvitops/emdash`: `vitops_logos`** shows an entry's name as text (`.logos__name`) when it has no image. `@getvitops/core` adds the rule (all formats).
19
+ - **`@getvitops/emdash`: an empty content widget** (no text, no blocks) no longer renders its title, and an area whose widgets are all empty renders nothing.
20
+ - **`@getvitops/create`:** the template's `pages` collection gets `urlPattern: "/{slug}"` (the sitemap listed `/pages/<slug>`, which 404s; existing sites change it under Content Types), and `.gitignore` ignores only `src/styles/tailwind.css` and `tokens.json`, so site CSS kept in `src/styles/` is committed.
21
+ - **`@getvitops/emdash`: per-item colour.** The rows of `vitops_cards`, `vitops_stats`, `vitops_steps` and the hero's `cards` take their own `tone` / `color` (blank inherits the block's), so one block can hold a pine item and an amber one. Hero cards also take an `eyebrow` and a button (`ctaLabel` / `ctaHref`; with a button the card is no longer a stretched link).
22
+ - **`@getvitops/generator` / `@getvitops/emdash`: solid fills read.** The generator emits `--color-<hue>-<step>-on` for every step of every hue, the foreground for a fill at that step picked by the same APCA rule as `text-on-<role>` (css and tailwind formats, a plain `:root`, not `@theme`). A block fill chosen by `color` (hue and step) uses it instead of a fixed white..
23
+ - **`@getvitops/core`: `.counter__value.sr-only`** hides itself, so a build that never emitted the `.sr-only` utility no longer shows a counting figure twice (all formats).
24
+ - **`@getvitops/astro` / `@getvitops/core`: `SiteFooter` groups.** A top-level item of the `footer-sitemap` menu with children becomes a column (its label is the heading, its children the links, one level only); childless items stay in the flat list. Each column is a named `<nav>`.
25
+ - **`@getvitops/astro`: planned links and header buttons.** A menu item with `draft` in its CSS classes stays in the menu but is not rendered (at every level, in the header and the footer). `<SiteNav>` has an `actions` slot for header buttons that are not menu items, and an item with `cta` in its CSS classes renders as a button.
26
+ - **`@getvitops/cli`: `check-prerender` warnings** (fail with `--strict`): links to pages the build did not produce, a form with no delivery address (no `site.notifications.email`, location `email` or `site.crm`), and form fields missing from every `site.templates` form entry (the generated privacy policy reads those). It reads `./site.json`, or `--site=<path>`. `vitops setup … --dry-run` is accepted as `--dry`.
27
+ - **`@getvitops/emdash` / `@getvitops/astro`: "tick any number" form field** (`vitops_form` field kind `checkboxes`): a fieldset of checkboxes sharing one name. The conversion route joins repeated values (`IT, Marketing`) instead of keeping the last. The "required" toggle is not applied to the group (HTML cannot require one of several).
28
+ - **`@getvitops/core`: size hooks.** `.steps__title`, `.stats__figure` and `.card__title` read `--steps-title-size` (default one step below `heading`), `--stats-figure-size` and `--card-title-size`, set on the block through its `style` field. They set the `--heading-fs` / `--display-fs` properties the type-role utilities already read, so no extra class or prop is needed (all formats).
29
+ - **`@getvitops/create`:** the template's `site.json` lists its contact form under `site.templates`, so the privacy policy inventory and the new check agree.
30
+ - **`@getvitops/emdash`: `theme` on every block, on widget areas and on your own markup.** A `theme` select (`<role>` tinted, `<role>:solid` filled, populated from the site's roles by a new `themes/list` route) is a common field on every `vitops_*` block, applied to the block's own root with the role's computed readable text. `<VitopsWidgetArea theme="…">` takes the same, and `themeAttrs('surface')` gives `{ class, style }` for a layout `<body>`. `vitops_section`'s existing `theme` now goes through the same path.
31
+ - **`@getvitops/cli` / `@getvitops/emdash`: pages with a dropped block fail the build.** `vitops_section` and widget areas emit an invisible `<template data-vitops-unrendered="…">` for any body block with no renderer, and `check-prerender` fails the page naming the types (nested bodies only; `vitops emdash build` also scans the build log, which covers top-level bodies). A regression test imports the plugin entry first with a mock of the real virtual module, so the old import cycle fails it.
32
+ - **`@getvitops/emdash`: `formTemplateFromBlock(block)`** turns a saved `vitops_form` value into a `site.templates` form entry (names as submitted, a `checkboxes` field as a `checkbox` with options), to paste into `site.json` so the generated privacy policy lists what the form collects. The build cannot read the CMS database, so this is run by hand; `check-prerender` warns when fields are missing.
33
+ - **`@getvitops/utils`: `hasFormDelivery`** (`@getvitops/utils/notify`): the one test for "has this form anywhere to go", used by `check-prerender`.
34
+ - **`@getvitops/emdash`:** a `color` hue tint now flips with the colour scheme (`light-dark()`); hero option cards sit at `h2` under an `h1` hero; menu items also accept `hidden: true` (same as the `draft` class); `vitops docs blocks` documents `theme`, the per-row colours, the `--<role>-fs` type-size hook and the form checks.
35
+ - **`@getvitops/create`:** the template redirects `/home` to `/`, and the guides use `vp exec` instead of `vpx`.
36
+
37
+ ### Patch Changes
38
+
39
+ - 0a47856: New package `@getvitops/skills`: agent skills for sites built with the toolchain (`custom-blocks`, `content-and-deploys`, `contact-form`, `csp`). The emdash template depends on it and runs `skills experimental_sync` on `prepare`, which links them into `.agents/skills/` and `.claude/skills/`, so they update with `vp update` instead of being copied at scaffold time. Existing sites: `vp add @getvitops/skills && vp add -D skills`, set `prepare` to `vp config && skills experimental_sync -y -a claude-code --no-frozen-lockfile`, gitignore the four linked names, and delete the site's own copies of those four skills (the sync never replaces a directory it did not create).
40
+
41
+ The emdash template's `AGENTS.md` is shortened to the always-relevant rules. Deploy and content mechanics (where each kind of data is the truth, prerendering, publish-triggered rebuilds, refreshing dev), the contact form, and the CSP move into those skills. Corrects the nesting guidance: a block type with a `portableText` field (such as `vitops_section`) holds other blocks, while `vitops_*` Portable Text blocks do not. Adds guidance for agents to record reusable toolkit gaps in `UPSTREAM.md`. The generated stylesheet is no longer described as always `tailwind.css`.
42
+
43
+ - Updated dependencies [0a47856]
44
+ - Updated dependencies [0a47856]
45
+ - @getvitops/generator@8.3.0-alpha.2
46
+ - @getvitops/utils@8.3.0-alpha.2
47
+
48
+ ## 2.0.0-alpha.1
49
+
50
+ ### Minor Changes
51
+
52
+ - 24c568b: Escape hatches on every block, a section theme, widget areas, a badges block, Tailwind scanning of package renderers, and a sturdier `vitops audit`.
53
+
54
+ **@getvitops/emdash**
55
+
56
+ - Every `vitops.*` block and `vitops_section` gains three fields: `anchor` (rendered as the `id`, so `#contact` works), `className` (`class_name` on the section type: block-type slugs are lowercase) and `style`. `style` takes CSS custom properties only (`--p-card: 2rem`); any other declaration, and any value containing `url(`, `@`, `{`, `}` or a backslash, is dropped. With the `tailwind` format a class typed in the CMS only works if the site already uses it. They are applied to the block's own outermost element (the grid `<ul>` for `vitops.cards`), never an extra wrapper, so a block's markup is the same whether or not an editor fills them in.
57
+ - `vitops_section` gains a `theme` select: a role, or `<role>:solid`, with readable text chosen by the generator's contrast rules. It overrides `tone`/`color`/`solid`, which stay for existing content. Other site roles still go through `tone`.
58
+ - New `vitops.badges` block (a row of `.badge` or `.tag` labels, each with an optional tone, icon and link) and `vitops.widgetArea` block, plus `<VitopsWidgetArea name level />` from `@getvitops/emdash/astro`. A widget area is content defined once under Widgets and shown wherever it is placed. An area cannot hold another area, and an area containing a `core:*` component widget is rendered by EmDash's own renderer.
59
+ - Existing sites: re-run the block-type seed only on a new database; on an existing one add the `theme`, `anchor`, `className` and `style` fields to the `vitops_section` block type in the admin.
60
+
61
+ **@getvitops/create**: the emdash template seeds `announcement` and `pre-footer` widget areas, renders them in `Layout.astro`, and documents when to use a Section, a block or a widget area. Sites scaffolded earlier add the two `<VitopsWidgetArea>` lines and the `widgetAreas` seed entries by hand.
62
+
63
+ **@getvitops/generator / astro / vite** (`tailwind` format only): the Astro integration now adds `@source` lines for `@getvitops/astro` and `@getvitops/emdash`, because Tailwind v4 does not scan `node_modules`; utilities used only by their renderers (`font-display`, `font-caption`, `font-footnote`) were never emitted and the page silently rendered at body size. New `sources` option on `generate()` and the Vite plugin. A site's `src/package-classes.txt` workaround can be deleted. css and bricks: no change.
64
+
65
+ **@getvitops/cli**: `vitops emdash check-prerender` now also warns when a page uses a type-role class (`font-display`, …) the built CSS has no rule for; `--strict` makes it fail. `vitops audit` checks for its optional packages and a Chromium binary before starting the preview server (so a failed run no longer leaves port 4398 busy), stops the server on Ctrl+C and termination, and takes its page list from the built sitemap, then the menus; the guessed defaults (`/privacy`, `/contact`, …) are used only when neither exists.
66
+
67
+ **@getvitops/utils**: the audit helpers behind the above (`preflight`, `fetchSitemapPaths`, `sitemapLocs`, `pathsFromSitemapLocs`).
68
+
69
+ **@getvitops/core** (all formats): new `.block-anchor` rule gives an anchored block `scroll-margin-top: var(--header-offset, 5rem)`; set `--header-offset` to a sticky header's height. New `widget-area.css` partial. No other consumer-facing change.
70
+
71
+ The other fixed-group packages: no consumer-facing change beyond the above.
72
+
73
+ **Also fixed in the emdash template** (`site.json`): it defined only the `display`, `heading` and `body` type roles while the blocks use `title`, `eyebrow`, `lead`, `caption` and `footnote`, so those rendered at body size with no rule behind them. The roles are added with the reference design system's specs. A site scaffolded earlier adds the same five entries under `designSystem.themes.default.typography.roles`; `vitops emdash check-prerender` now names any that are missing.
74
+
75
+ ### Patch Changes
76
+
77
+ - Updated dependencies [24c568b]
78
+ - @getvitops/generator@8.3.0-alpha.1
79
+ - @getvitops/utils@8.3.0-alpha.1
80
+
3
81
  ## 2.0.0-alpha.0
4
82
 
5
83
  ### Minor Changes
package/README.md CHANGED
@@ -129,16 +129,16 @@ export default defineConfig({
129
129
 
130
130
  | Slash-menu entry | `_type` | Renders |
131
131
  | ---------------- | --------------------- | ---------------------------------------------------------- |
132
- | Link or button | `vitops.actionLink` | sprite-icon `<a>`, styled `.link`/`.btn`/`.cta` |
133
- | Image compare | `vitops.imageCompare` | `<wc-image-compare>` before/after slider |
134
- | Copy snippet | `vitops.copyButton` | `<wc-copy>` with code/inline fallback |
135
- | Banner | `vitops.banner` | `<wc-dismissable>` banner with tone colours |
136
- | Disclosure | `vitops.details` | native `<details>`/`<summary>` |
137
- | Accordion | `vitops.accordion` | a group of `<details>`; optionally one-open-at-a-time |
138
- | Carousel | `vitops.carousel` | `@getvitops/astro`'s `<Carousel />` over a Slides repeater |
139
- | Gallery | `vitops.gallery` | `<Gallery />` — thumbnail grid opening a lightbox carousel |
140
- | Cards | `vitops.cards` | `<Cards />` — a grid of `.card`s, whole-card click with JS |
141
- | Marquee | `vitops.marquee` | `<Marquee />` — a continuously scrolling row |
132
+ | Link or button | `vitops_actionLink` | sprite-icon `<a>`, styled `.link`/`.btn`/`.cta` |
133
+ | Image compare | `vitops_imageCompare` | `<wc-image-compare>` before/after slider |
134
+ | Copy snippet | `vitops_copyButton` | `<wc-copy>` with code/inline fallback |
135
+ | Banner | `vitops_banner` | `<wc-dismissable>` banner with tone colours |
136
+ | Disclosure | `vitops_details` | native `<details>`/`<summary>` |
137
+ | Accordion | `vitops_accordion` | a group of `<details>`; optionally one-open-at-a-time |
138
+ | Carousel | `vitops_carousel` | `@getvitops/astro`'s `<Carousel />` over a Slides repeater |
139
+ | Gallery | `vitops_gallery` | `<Gallery />` — thumbnail grid opening a lightbox carousel |
140
+ | Cards | `vitops_cards` | `<Cards />` — a grid of `.card`s, whole-card click with JS |
141
+ | Marquee | `vitops_marquee` | `<Marquee />` — a continuously scrolling row |
142
142
 
143
143
  All blocks render accessible markup that works without JavaScript; the
144
144
  web components progressively enhance it. Each is a thin adapter over the matching
@@ -155,7 +155,7 @@ URLs with any other scheme (`javascript:`, `data:`) are dropped at render time.
155
155
  ```js
156
156
  vitopsEmdash({
157
157
  blocks: {
158
- exclude: ['vitops.marquee'], // or `include: [...]` as an allowlist
158
+ exclude: ['vitops_marquee'], // or `include: [...]` as an allowlist
159
159
  extra: [
160
160
  {
161
161
  type: 'acme.pricing',
@@ -168,12 +168,12 @@ vitopsEmdash({
168
168
  ```
169
169
 
170
170
  `extra` adds **editor** definitions only. This plugin cannot render a block it has never heard of,
171
- so the site maps each of its own types to a component, and can replace a `vitops.*` renderer the same way:
171
+ so the site maps each of its own types to a component, and can replace a `vitops_*` renderer the same way:
172
172
 
173
173
  ```astro
174
174
  <PortableText
175
175
  value={page.data.content}
176
- components={{ type: { 'acme.pricing': PricingTable, 'vitops.cards': MyCards } }}
176
+ components={{ type: { 'acme.pricing': PricingTable, 'vitops_cards': MyCards } }}
177
177
  />
178
178
  ```
179
179
 
@@ -197,15 +197,17 @@ guarded — but wasteful).
197
197
 
198
198
  ## Patterns that contain other blocks
199
199
 
200
- A Portable Text block cannot hold other blocks — a repeater's rows are scalar fields. So a section
201
- with columns, a hero, or a card holding a button is not a `vitops.*` block. Two routes:
200
+ A `vitops_*` Portable Text block holds only scalar fields and repeaters, so it cannot hold other
201
+ blocks. A block _type_ with a `portableText` field can: `vitops_section`'s `body` holds any blocks,
202
+ so a section containing cards or stats is a section whose body holds `vitops_cards` or
203
+ `vitops_stats`. For a hero or a card holding a button, two routes:
202
204
 
203
205
  - A **`blocks` field** (EmDash's typed page-composition field): define block types such as `hero` or
204
206
  `split` in the seed, and map each to an Astro component built from `@getvitops/astro`
205
207
  (`Subgrid`, `Cards`, the `.split` classes) with `defineBlockComponents`.
206
208
  - **Sections** (`/section`): compose the pattern once as reusable content and let editors insert copies.
207
209
 
208
- EmDash's built-in `columns` block renders its children with marks only, so a `vitops.*` block placed
210
+ EmDash's built-in `columns` block renders its children with marks only, so a `vitops_*` block placed
209
211
  inside one does not render. Use a `blocks` field for layout instead.
210
212
 
211
213
  Not yet blocks: tree, entries, reviews (`ReviewCard` reads `.vitops/reviews.json`, which needs a
package/dist/index.d.mts CHANGED
@@ -10,9 +10,9 @@ type PortableTextBlockDef = Omit<PortableTextBlockConfig, 'fields'> & {
10
10
  export declare const BLOCKS: PortableTextBlockDef[];
11
11
  /** Which Vitops blocks a site's editor offers, and any it adds of its own. */
12
12
  interface BlockSelection {
13
- /** Offer only these `vitops.*` types. Unknown names throw — a typo must not silently offer nothing. */
13
+ /** Offer only these `vitops_*` types. Unknown names throw — a typo must not silently offer nothing. */
14
14
  include?: string[];
15
- /** Drop these `vitops.*` types. Applied after `include`. */
15
+ /** Drop these `vitops_*` types. Applied after `include`. */
16
16
  exclude?: string[];
17
17
  /**
18
18
  * The site's own blocks. These are EDITOR definitions only: the plugin cannot render a
@@ -47,9 +47,29 @@ interface DesignSystemEditorOptions {
47
47
  * it cannot describe a field the editor doesn't offer.
48
48
  */
49
49
  export declare function renderBlocksDoc(blocks?: readonly PortableTextBlockDef[]): string;
50
- /** Block-type slugs may not contain a dot, so `vitops.section` is stored as `vitops_section`. */
50
+ /** The `fields` row shape of a `site.templates` form entry (`FormFieldSchema`). */
51
+ interface FormTemplateField {
52
+ name: string;
53
+ type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'checkbox';
54
+ label: string;
55
+ required?: boolean;
56
+ options?: {
57
+ label: string;
58
+ value: string;
59
+ }[];
60
+ }
61
+ interface FormTemplate {
62
+ type: 'form';
63
+ action: string;
64
+ method: 'post';
65
+ honeypot: true;
66
+ fields: FormTemplateField[];
67
+ }
68
+ /** `block` is a saved `vitops_form` value (the object with `fields`, `action`, …). */
69
+ export declare function formTemplateFromBlock(block: unknown): FormTemplate;
70
+ /** Block-type slugs may not contain a dot, so `vitops_section` is stored as `vitops_section`. */
51
71
  export declare const SECTION_SLUG = "vitops_section";
52
- /** `vitops.section`: kicker, heading, lead-in, tone/backdrop, optional heading-left layout, and a body of blocks. */
72
+ /** `vitops_section`: kicker, heading, lead-in, tone/backdrop, optional heading-left layout, and a body of blocks. */
53
73
  export declare const SECTION_BLOCK_TYPE: ApplySeedBlockTypeInput;
54
74
  /**
55
75
  * Every block type this plugin ships, in the shape `seed.json`'s `blockTypes` takes. Spread
@@ -135,7 +155,7 @@ export interface VitopsEmdashOptions {
135
155
  */
136
156
  designSystemEditor?: DesignSystemEditorOptions | false;
137
157
  /**
138
- * Which blocks the editor offers. All of the `vitops.*` blocks by default. Use `exclude` to
158
+ * Which blocks the editor offers. All of the `vitops_*` blocks by default. Use `exclude` to
139
159
  * drop one a client should not see, `include` for an allowlist, and `extra` to add the
140
160
  * site's own — whose renderers the site supplies, see {@link BlockSelection}.
141
161
  */
@@ -155,5 +175,5 @@ export interface VitopsEmdashOptions {
155
175
  export declare function vitopsEmdash(options?: VitopsEmdashOptions): PluginDescriptor;
156
176
  /** Runtime side — EmDash imports and calls this from the descriptor's entrypoint. */
157
177
  export declare function createPlugin(options?: VitopsEmdashOptions): import("emdash").ResolvedPlugin<import("emdash").PluginStorageConfig>;
158
- export { type BlockKitFieldDef, type BlockSelection, type DesignSystemEditorOptions, type HostingTarget, type PortableTextBlockDef, type VitopsHosting, type VitopsHostingOptions, createPlugin as default };
178
+ export { type BlockKitFieldDef, type BlockSelection, type DesignSystemEditorOptions, type FormTemplate, type FormTemplateField, type HostingTarget, type PortableTextBlockDef, type VitopsHosting, type VitopsHostingOptions, createPlugin as default };
159
179
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/blocks.ts","../src/design-system-route.ts","../src/blocks-doc.ts","../src/block-types.ts","../src/astro/blocks/tone.ts","../src/hosting.ts","../src/index.ts"],"mappings":";;;KAuBY,mBAAmB,QAC7B,YAAY;EAEV;;KAWQ,uBAAuB,KAAK;EACtC,SAAS;;qBAmDE,QAAQ;;UA62BJ;;EAEf;;EAEA;;;;;;;EAOA,QAAQ;;;;;;;;wBASM,aAAa,YAAW,iBAAsB;UCn6B7C;;;;;;;;EAQf;;EAEA;;;;;;;wBC9Bc,gBAAgB,kBAAiB;;qBCZpC;;qBAqCA,oBAAoB;;;;;;wBAejB,oBAAoB;;wBCzBpB,UAAU;UAcT;;EAEf;;EAEA;;;;;;;;wBASc,YAAY,gBAAgB,kBAAkB;KC7ClD;UAIK;;EAEf,SAAS;EACT;;IAEE;;IAEA;;IAEA;;;;;;;IAOA;;EAEF;;IAEE;;IAEA;;IAEA;;IAEA;;;UAIa;EACf,QAAQ;EACR,SAAS;;EAET;;EAEA;;wBAoBoB,cAAc,UAAS,uBAA4B,QAAQ;iBCzBhE;;;;;;;;;;;EAWf;;EAEA;;;;;;;;;EASA,qBAAqB;;;;;;EAMrB,SAAS;;;;;;;EAOT;;;;;;wBAOc,aAAa,UAAS,sBAA2B;;wBAmBjD,aAAa,UAAS,uCAAwB,gCAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/blocks.ts","../src/design-system-route.ts","../src/blocks-doc.ts","../src/form-template.ts","../src/block-types.ts","../src/astro/blocks/tone.ts","../src/hosting.ts","../src/index.ts"],"mappings":";;;KAwBY,mBAAmB,QAC7B,YAAY;EAEV;;KAWQ,uBAAuB,KAAK;EACtC,SAAS;;qBAqlCE,QAAQ;;UAMJ;;EAEf;;EAEA;;;;;;;EAOA,QAAQ;;;;;;;;wBASM,aAAa,YAAW,iBAAsB;UC/lC7C;;;;;;;;EAQf;;EAEA;;;;;;;wBC9Bc,gBAAgB,kBAAiB;;UCjBhC;EACf;EACA;EACA;EACA;EACA;IAAY;IAAe;;;UAGZ;EACf;EACA;EACA;EACA;EACA,QAAQ;;;wBAIM,sBAAsB,iBAAiB;;qBCZ1C;;qBAoEA,oBAAoB;;;;;;wBAejB,oBAAoB;;wBCrDpB,UAAU;UAcT;;EAEf;;EAEA;;;;;;;;wBASc,YAAY,gBAAgB,kBAAkB;KChDlD;UAIK;;EAEf,SAAS;EACT;;IAEE;;IAEA;;IAEA;;;;;;;IAOA;;EAEF;;IAEE;;IAEA;;IAEA;;IAEA;;;UAIa;EACf,QAAQ;EACR,SAAS;;EAET;;EAEA;;wBAoBoB,cAAc,UAAS,uBAA4B,QAAQ;iBCfhE;;;;;;;;;;;EAWf;;EAEA;;;;;;;;;EASA,qBAAqB;;;;;;EAMrB,SAAS;;;;;;;EAOT;;;;;;wBAOc,aAAa,UAAS,sBAA2B;;wBAmBjD,aAAa,UAAS,uCAAwB,gCAAA"}