@texuli/spec 0.4.0 → 0.5.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.
package/README.md CHANGED
@@ -14,9 +14,9 @@ by Texuli's Kotlin Multiplatform twin. The package is framework-free: no
14
14
  DOM, no Svelte, no Node APIs and no runtime dependencies.
15
15
 
16
16
  > **Status: 0.x release.** Texuli is in development. The packages are
17
- > published to npm as `0.4.0`, a pre-1.0 release (1.0.0 will be the first
18
- > stable release). Under 0.x, a new minor (`0.5.0`) may contain breaking
19
- > changes, so pin the exact version or use `^0.4.0`, which accepts only 0.4.x.
17
+ > published to npm as `0.5.0`, a pre-1.0 release (1.0.0 will be the first
18
+ > stable release). Under 0.x, a new minor (`0.6.0`) may contain breaking
19
+ > changes, so pin the exact version or use `^0.5.0`, which accepts only 0.5.x.
20
20
 
21
21
  > **New in `0.4.0`.** `@texuli/spec@0.4.0` carries **spec 0.4.0**: spec
22
22
  > 0.3.0 (state, bindings, closed actions, `reorder`, workflow graphs), spec
@@ -56,7 +56,7 @@ import {
56
56
  validateInstance,
57
57
  } from '@texuli/spec';
58
58
 
59
- SPEC_VERSION; // the spec version: '0.4.0'
59
+ SPEC_VERSION; // the spec version: '0.5.0' in @texuli/spec@0.5.0 ('0.4.0' in @texuli/spec@0.4.0)
60
60
  SPEC_COMPONENT_IDS.includes('alert'); // true: the closed component vocabulary
61
61
 
62
62
  // The dialect validator: a closed subset of JSON Schema 2020-12.
@@ -88,7 +88,7 @@ import { type Schema, type SpecCatalog, validateBlueprint } from '@texuli/spec';
88
88
  import { migrateBlueprint } from '@texuli/spec/migrate';
89
89
  import { validateWorkflowGraph } from '@texuli/spec/workflow';
90
90
 
91
- const migrated = migrateBlueprint(blueprint); // 0.2.0 → 0.3.0 → 0.4.0; never throws
91
+ const migrated = migrateBlueprint(blueprint); // 0.2.0 → 0.3.0 → 0.4.0 → 0.5.0; never throws
92
92
  const result = validateBlueprint(migrated.blueprint, {
93
93
  blueprintSchema: blueprintSchemaJson as Schema,
94
94
  catalog: componentsJson as SpecCatalog,
@@ -190,11 +190,13 @@ catalog hash, and from 0.3.0 may declare the exact spec version it was
190
190
  written for (`spec`; omitted means 0.2.0). `migrateBlueprint`
191
191
  (`@texuli/spec/migrate`) brings an
192
192
  envelope up to the current spec with pure, per-version steps
193
- (`src/migrations/`: `0.2.0 → 0.3.0` and `0.3.0 → 0.4.0`, both of which only
194
- stamp `spec`); a compatible version range is planned, not built. The
195
- repository pins spec `0.4.0` to digest
196
- `fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3` in
197
- `versions.json`.
193
+ (`src/migrations/`: `0.2.0 → 0.3.0`, `0.3.0 → 0.4.0` and `0.4.0 → 0.5.0`,
194
+ each of which only stamps `spec`); a compatible version range is planned,
195
+ not built. `@texuli/spec@0.5.0` carries spec `0.5.0`, which adds the
196
+ `data-cohort-table`, `data-notification-inbox`, `data-filter-builder` and
197
+ `time-field` catalog ids; `@texuli/spec@0.4.0` carried spec `0.4.0` (digest
198
+ `fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3`). Every
199
+ pin is in `versions.json`.
198
200
 
199
201
  The full rules (the digest, `versions.json` pins, regeneration and the
200
202
  conformance harness) are in
@@ -213,7 +213,7 @@ export interface BlueprintEnvelope {
213
213
  /**
214
214
  * The spec version the envelope was written for. Omitted means 0.2.0; migrateBlueprint stamps it.
215
215
  */
216
- spec?: '0.3.0' | '0.4.0';
216
+ spec?: '0.3.0' | '0.4.0' | '0.5.0';
217
217
  /**
218
218
  * Local state declarations (ADR-008), at most 64. Names, counts and per-type rules are checked by
219
219
  * the validator.
@@ -1,3 +1,3 @@
1
1
  // Generated by @texuli/spec from schemas/blueprint.schema.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  export {};
@@ -1,3 +1,3 @@
1
1
  // Generated by @texuli/spec from schemas/catalog.schema.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  export {};
@@ -1,3 +1,3 @@
1
1
  // Generated by @texuli/spec from schemas/diagnostics.schema.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  export {};
@@ -1,3 +1,3 @@
1
1
  // Generated by @texuli/spec from schemas/manifest.schema.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  export {};
@@ -1,7 +1,7 @@
1
1
  /** The built catalog this vocabulary was projected from. */
2
- export declare const SPEC_CATALOG_HASH = "8a449985d45c7bfd1dc2285f3513dfd6ca0e3e38260c0a541fdb7b17e9213006";
2
+ export declare const SPEC_CATALOG_HASH = "4ac7ecedd1c59d1999a9f7eea2f523c7653fececb97258a478f09253f6b6057f";
3
3
  /** Every closed component id, sorted. */
4
- export declare const SPEC_COMPONENT_IDS: readonly ["action-form", "alert", "alert-dialog", "analytics-grid", "app-nav", "badge", "banner", "blocks-code", "blocks-data", "blocks-diagram", "blocks-embed", "blocks-interactive", "blocks-map", "blocks-media", "blocks-structure", "blocks-text", "breadcrumb", "button", "button-group", "callout", "card", "charts-area", "charts-bar", "charts-bubble", "charts-bullet", "charts-canvas-renderer", "charts-cartesian", "charts-combo", "charts-donut", "charts-funnel", "charts-gauge", "charts-geo-map", "charts-geo-point-map", "charts-heatmap", "charts-line", "charts-network", "charts-pie", "charts-progress-ring", "charts-sankey", "charts-scatter", "charts-sparkline", "charts-stacked-bar", "charts-sunburst", "charts-treemap", "chat-message", "chat-thread", "checkbox", "chip", "code", "combobox", "command-palette", "content-layout", "context-menu", "context-menu-trigger", "control-choice", "control-filter", "control-slider", "control-toggle", "data-board", "data-calendar", "data-files", "data-grid", "data-map", "data-timeline", "data-tree-view", "deck-slide", "description", "detail-panel", "dialog", "drawer", "dropdown-menu", "dropdown-menu-content", "dropdown-menu-item", "dropdown-menu-trigger", "empty-state", "error-state", "field", "field-error", "flow-action", "flow-view", "form", "form-field", "form-submit", "host-region", "hover-card", "hover-card-content", "icon-button", "inline-text", "input", "input-group", "kbd", "kpi", "label", "layout-auth-split", "layout-blog", "layout-card", "layout-chrome", "layout-dashboard-grid", "layout-deck", "layout-doc", "layout-docs", "layout-drawer", "layout-dual-sidebar", "layout-editorial", "layout-grid", "layout-host", "layout-landing", "layout-marketing", "layout-page", "layout-pricing", "layout-row", "layout-settings", "layout-sidebar", "layout-split", "layout-stack", "layout-tile", "layout-top-nav", "layout-wizard", "media-composition-canvas", "media-composition-svg", "media-image", "menubar", "menubar-trigger", "multi-select", "nav-icon", "navigation-menu", "pagination", "popover", "popover-content", "radio", "radio-group", "responsive-modal", "screen-outlet", "select", "select-content", "select-group", "select-item", "select-label", "select-portal", "select-separator", "select-trigger", "select-value", "select-viewport", "sheet", "sidebar", "sortable-list", "split-view", "stat", "stepper", "switch", "table", "tag", "text-counter", "textarea", "timeline", "toaster", "tooltip", "workflow-graph"];
4
+ export declare const SPEC_COMPONENT_IDS: readonly ["action-form", "alert", "alert-dialog", "analytics-grid", "app-nav", "badge", "banner", "blocks-code", "blocks-data", "blocks-diagram", "blocks-embed", "blocks-interactive", "blocks-map", "blocks-media", "blocks-structure", "blocks-text", "breadcrumb", "button", "button-group", "callout", "card", "charts-area", "charts-bar", "charts-bubble", "charts-bullet", "charts-canvas-renderer", "charts-cartesian", "charts-combo", "charts-donut", "charts-funnel", "charts-gauge", "charts-geo-map", "charts-geo-point-map", "charts-heatmap", "charts-line", "charts-network", "charts-pie", "charts-progress-ring", "charts-sankey", "charts-scatter", "charts-sparkline", "charts-stacked-bar", "charts-sunburst", "charts-treemap", "chat-message", "chat-thread", "checkbox", "chip", "code", "combobox", "command-palette", "content-layout", "context-menu", "context-menu-trigger", "control-choice", "control-filter", "control-slider", "control-toggle", "data-board", "data-calendar", "data-cohort-table", "data-files", "data-filter-builder", "data-grid", "data-map", "data-notification-inbox", "data-timeline", "data-tree-view", "deck-slide", "description", "detail-panel", "dialog", "drawer", "dropdown-menu", "dropdown-menu-content", "dropdown-menu-item", "dropdown-menu-trigger", "empty-state", "error-state", "field", "field-error", "flow-action", "flow-view", "form", "form-field", "form-submit", "host-region", "hover-card", "hover-card-content", "icon-button", "inline-text", "input", "input-group", "kbd", "kpi", "label", "layout-auth-split", "layout-blog", "layout-card", "layout-chrome", "layout-dashboard-grid", "layout-deck", "layout-doc", "layout-docs", "layout-drawer", "layout-dual-sidebar", "layout-editorial", "layout-grid", "layout-host", "layout-landing", "layout-marketing", "layout-page", "layout-pricing", "layout-row", "layout-settings", "layout-sidebar", "layout-split", "layout-stack", "layout-tile", "layout-top-nav", "layout-wizard", "media-composition-canvas", "media-composition-svg", "media-image", "menubar", "menubar-trigger", "multi-select", "nav-icon", "navigation-menu", "pagination", "popover", "popover-content", "radio", "radio-group", "responsive-modal", "screen-outlet", "select", "select-content", "select-group", "select-item", "select-label", "select-portal", "select-separator", "select-trigger", "select-value", "select-viewport", "sheet", "sidebar", "sortable-list", "split-view", "stat", "stepper", "switch", "table", "tag", "text-counter", "textarea", "time-field", "timeline", "toaster", "tooltip", "workflow-graph"];
5
5
  export type SpecComponentId = (typeof SPEC_COMPONENT_IDS)[number];
6
6
  /** The props a blueprint may set on each component (platform extensions left out). */
7
7
  export interface SpecComponentProps {
@@ -481,12 +481,31 @@ export interface SpecComponentProps {
481
481
  timeZone?: string;
482
482
  view?: 'month' | 'week' | 'day' | 'agenda';
483
483
  };
484
+ 'data-cohort-table': {
485
+ average?: boolean;
486
+ caption: string;
487
+ captionHidden?: boolean;
488
+ density?: 'compact' | 'default' | 'comfortable';
489
+ heat?: boolean;
490
+ locale?: string;
491
+ max?: number;
492
+ periods?: readonly unknown[];
493
+ rows: readonly unknown[];
494
+ valueKind?: 'rate' | 'count';
495
+ };
484
496
  'data-files': {
485
497
  density?: 'comfortable' | 'compact';
486
498
  entries: readonly unknown[];
487
499
  label: string;
488
500
  layout?: 'grid' | 'list';
489
501
  };
502
+ 'data-filter-builder': {
503
+ disabled?: boolean;
504
+ fields: readonly unknown[];
505
+ label: string;
506
+ maxDepth?: number;
507
+ value?: Readonly<Record<string, unknown>>;
508
+ };
490
509
  'data-grid': {
491
510
  caption: string;
492
511
  columns: readonly unknown[];
@@ -500,6 +519,15 @@ export interface SpecComponentProps {
500
519
  listPlacement?: 'side' | 'below';
501
520
  markers: readonly unknown[];
502
521
  };
522
+ 'data-notification-inbox': {
523
+ filter?: 'all' | 'unread';
524
+ headingLevel?: number;
525
+ items: readonly unknown[];
526
+ locale?: string;
527
+ markReadOnOpen?: boolean;
528
+ now?: string;
529
+ timeZone?: string;
530
+ };
503
531
  'data-timeline': {
504
532
  dependencies?: readonly unknown[];
505
533
  label: string;
@@ -1088,6 +1116,20 @@ export interface SpecComponentProps {
1088
1116
  rows?: number;
1089
1117
  value?: string;
1090
1118
  };
1119
+ 'time-field': {
1120
+ description?: string;
1121
+ disabled?: boolean;
1122
+ error?: string;
1123
+ hourCycle?: number;
1124
+ label: string;
1125
+ labels?: Readonly<Record<string, unknown>>;
1126
+ locale?: string;
1127
+ minuteStep?: number;
1128
+ name?: string;
1129
+ required?: boolean;
1130
+ size?: 'sm' | 'md';
1131
+ value?: string;
1132
+ };
1091
1133
  timeline: {
1092
1134
  hrefTrust?: 'developer' | 'untrusted';
1093
1135
  items?: readonly unknown[];
@@ -1,7 +1,7 @@
1
1
  // Generated by @texuli/spec from catalog/components.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  /** The built catalog this vocabulary was projected from. */
4
- export const SPEC_CATALOG_HASH = '8a449985d45c7bfd1dc2285f3513dfd6ca0e3e38260c0a541fdb7b17e9213006';
4
+ export const SPEC_CATALOG_HASH = '4ac7ecedd1c59d1999a9f7eea2f523c7653fececb97258a478f09253f6b6057f';
5
5
  /** Every closed component id, sorted. */
6
6
  export const SPEC_COMPONENT_IDS = [
7
7
  'action-form',
@@ -64,9 +64,12 @@ export const SPEC_COMPONENT_IDS = [
64
64
  'control-toggle',
65
65
  'data-board',
66
66
  'data-calendar',
67
+ 'data-cohort-table',
67
68
  'data-files',
69
+ 'data-filter-builder',
68
70
  'data-grid',
69
71
  'data-map',
72
+ 'data-notification-inbox',
70
73
  'data-timeline',
71
74
  'data-tree-view',
72
75
  'deck-slide',
@@ -158,6 +161,7 @@ export const SPEC_COMPONENT_IDS = [
158
161
  'tag',
159
162
  'text-counter',
160
163
  'textarea',
164
+ 'time-field',
161
165
  'timeline',
162
166
  'toaster',
163
167
  'tooltip',
@@ -1,3 +1,3 @@
1
1
  // Generated by @texuli/spec from schemas/workflow.schema.json. Do not edit: run the spec generator.
2
- // Spec 0.4.0, digest fac29f542b16ddb78ab401c508e5b8346f655991c56e25aa811f4931661a8cb3
2
+ // Spec 0.5.0, digest 1ba15e8b082f68140c4b2768b8fd69c9f760e655dd117fac756f356a71525b2d
3
3
  export {};
@@ -0,0 +1,8 @@
1
+ import type { SpecMigration } from './types.js';
2
+ /**
3
+ * 0.4.0 → 0.5.0 is additive (PLAN_009 catalog coverage): the catalog gains
4
+ * the data-cohort-table, data-notification-inbox and data-filter-builder
5
+ * ids and the app-tier time-field id. Every 0.4.0 envelope is a valid 0.5.0
6
+ * envelope, so the step only stamps `spec`.
7
+ */
8
+ export declare const migration040to050: SpecMigration;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 0.4.0 → 0.5.0 is additive (PLAN_009 catalog coverage): the catalog gains
3
+ * the data-cohort-table, data-notification-inbox and data-filter-builder
4
+ * ids and the app-tier time-field id. Every 0.4.0 envelope is a valid 0.5.0
5
+ * envelope, so the step only stamps `spec`.
6
+ */
7
+ export const migration040to050 = Object.freeze({
8
+ from: '0.4.0',
9
+ to: '0.5.0',
10
+ migrate: (envelope) => ({ ...envelope, spec: '0.5.0' }),
11
+ });
@@ -2,12 +2,14 @@ import { isRecord } from "../dialect.js";
2
2
  import { SPEC_VERSION } from "../version.js";
3
3
  import { migration020to030 } from "./0.2.0-0.3.0.js";
4
4
  import { migration030to040 } from "./0.3.0-0.4.0.js";
5
+ import { migration040to050 } from "./0.4.0-0.5.0.js";
5
6
  /** The version an envelope without `spec` was written for. */
6
7
  export const UNDECLARED_SPEC_VERSION = '0.2.0';
7
8
  /** Every step, in order; each `to` is the next step's `from`. */
8
9
  export const SPEC_MIGRATIONS = Object.freeze([
9
10
  migration020to030,
10
11
  migration030to040,
12
+ migration040to050,
11
13
  ]);
12
14
  /**
13
15
  * Bring a blueprint envelope up to `target` (the current spec by default)
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The semantic version of the spec documents in this package. */
2
- export declare const SPEC_VERSION = "0.4.0";
2
+ export declare const SPEC_VERSION = "0.5.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The semantic version of the spec documents in this package. */
2
- export const SPEC_VERSION = '0.4.0';
2
+ export const SPEC_VERSION = '0.5.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@texuli/spec",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "The schema-first blueprint contract: JSON schemas, the catalog vocabulary, deterministic TypeScript and Kotlin projections, and the conformance harness.",
5
5
  "keywords": [
6
6
  "svelte",