@homepages/template-kit 0.0.1 → 0.1.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 (90) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/README.md +67 -11
  3. package/dist/base.css +85 -0
  4. package/dist/browser.d.ts +26 -0
  5. package/dist/browser.js +55 -0
  6. package/dist/cli.js +1 -1
  7. package/dist/contracts/image-descriptor.d.ts +17 -0
  8. package/dist/contracts/markers.d.ts +20 -0
  9. package/dist/contracts/markers.js +21 -0
  10. package/dist/contracts/slot-catalog.d.ts +237 -0
  11. package/dist/contracts/slot-catalog.js +247 -0
  12. package/dist/contracts/transforms.d.ts +108 -0
  13. package/dist/contracts/transforms.js +117 -0
  14. package/dist/design-system/breakpoints.d.ts +5 -0
  15. package/dist/design-system/breakpoints.js +14 -0
  16. package/dist/design-system/theme.d.ts +307 -0
  17. package/dist/design-system/theme.js +95 -0
  18. package/dist/eslint/is-client-file.js +79 -0
  19. package/dist/eslint/rules/image-bare-needs-reason.js +38 -0
  20. package/dist/eslint/rules/no-client-directive-in-contract.js +26 -0
  21. package/dist/eslint/rules/no-client-runtime-in-server.js +99 -0
  22. package/dist/eslint/rules/no-css-import-from-render-path.js +23 -0
  23. package/dist/eslint/rules/no-hex.js +111 -0
  24. package/dist/eslint/rules/no-inline-style.js +23 -0
  25. package/dist/eslint/rules/no-nondeterminism.js +44 -0
  26. package/dist/eslint/rules/no-raw-element.js +32 -0
  27. package/dist/eslint/rules/props-from-schema.js +32 -0
  28. package/dist/eslint/rules/serializable-island-props.js +108 -0
  29. package/dist/eslint/rules/slot-marker-literal.js +33 -0
  30. package/dist/eslint.d.ts +4 -8
  31. package/dist/eslint.js +75 -11
  32. package/dist/fixtures/sample-property.d.ts +67 -0
  33. package/dist/fixtures/sample-property.js +707 -0
  34. package/dist/fixtures.d.ts +2 -0
  35. package/dist/fixtures.js +3 -0
  36. package/dist/index.d.ts +28 -12
  37. package/dist/index.js +34 -2
  38. package/dist/island-runtime.d.ts +30 -0
  39. package/dist/island-runtime.js +73 -0
  40. package/dist/islands/contract.d.ts +56 -0
  41. package/dist/islands/contract.js +71 -0
  42. package/dist/islands/marker.d.ts +16 -0
  43. package/dist/islands/marker.js +18 -0
  44. package/dist/package.js +5 -0
  45. package/dist/primitives/Image.d.ts +49 -0
  46. package/dist/primitives/Image.js +95 -0
  47. package/dist/primitives/Section.d.ts +22 -0
  48. package/dist/primitives/Section.js +26 -0
  49. package/dist/primitives/Slot.d.ts +50 -0
  50. package/dist/primitives/Slot.js +39 -0
  51. package/dist/primitives/SlotGroup.d.ts +38 -0
  52. package/dist/primitives/SlotGroup.js +24 -0
  53. package/dist/primitives/SlotItem.d.ts +43 -0
  54. package/dist/primitives/SlotItem.js +38 -0
  55. package/dist/primitives/index.d.ts +7 -0
  56. package/dist/primitives/picture-sources.d.ts +22 -0
  57. package/dist/primitives/picture-sources.js +52 -0
  58. package/dist/schema/fill-spec.d.ts +692 -0
  59. package/dist/schema/fill-spec.js +98 -0
  60. package/dist/schema/fixture-schema.d.ts +143 -0
  61. package/dist/schema/fixture-schema.js +113 -0
  62. package/dist/schema/index.d.ts +16 -0
  63. package/dist/schema/manifest.d.ts +527 -0
  64. package/dist/schema/manifest.js +73 -0
  65. package/dist/schema/property-facts.d.ts +44 -0
  66. package/dist/schema/resolve-variants.d.ts +11 -0
  67. package/dist/schema/resolve-variants.js +15 -0
  68. package/dist/schema/runtime-values.d.ts +45 -0
  69. package/dist/schema/section-nav.d.ts +7 -0
  70. package/dist/schema/section-props.d.ts +69 -0
  71. package/dist/schema/section-schema.d.ts +533 -0
  72. package/dist/schema/section-schema.js +72 -0
  73. package/dist/schema/slot-types.d.ts +117 -0
  74. package/dist/schema/slot-types.js +181 -0
  75. package/dist/schema/source.d.ts +13 -0
  76. package/dist/schema/source.js +12 -0
  77. package/dist/schema/synthesize-nullable.d.ts +18 -0
  78. package/dist/schema/synthesize-nullable.js +47 -0
  79. package/dist/styles.css +131 -9
  80. package/docs/INDEX.md +6 -4
  81. package/docs/eslint.md +90 -0
  82. package/docs/islands.md +150 -0
  83. package/docs/llms.txt +30 -3
  84. package/docs/primitives.md +214 -0
  85. package/docs/schema-system.md +240 -0
  86. package/docs/theme-and-css.md +179 -0
  87. package/package.json +30 -6
  88. package/tsconfig.base.json +16 -0
  89. package/tsconfig.json +2 -13
  90. package/dist/src-dZr5N30y.js +0 -35
@@ -0,0 +1,98 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/schema/fill-spec.ts
4
+ const Bindable = (literal) => z.union([literal, z.object({ bind: z.string().regex(/^(options|template)\.[a-zA-Z0-9_]+$/) }).strict()]);
5
+ const ImageAssignDecision = z.object({
6
+ id: z.string(),
7
+ type: z.literal("image-assign"),
8
+ tag_query: z.string().optional(),
9
+ selection_prompt: z.string().optional(),
10
+ from_fact: z.string().optional(),
11
+ produces: z.array(z.string()).min(1)
12
+ }).strict();
13
+ const ImageCollectionDecision = z.object({
14
+ id: z.string(),
15
+ type: z.literal("image-collection"),
16
+ tag_query: z.string().optional(),
17
+ mode: z.enum(["spread", "walkthrough"]).optional(),
18
+ count: z.object({
19
+ min: z.number().int().nonnegative(),
20
+ max: z.number().int().positive()
21
+ }).strict().optional(),
22
+ selection_prompt: z.string(),
23
+ produces: z.array(z.string()).min(1)
24
+ }).strict();
25
+ const TextBlockDecision = z.object({
26
+ id: z.string(),
27
+ type: z.literal("text-block"),
28
+ length_cap: Bindable(z.number().int().positive()),
29
+ structure: Bindable(z.enum([
30
+ "single_sentence",
31
+ "paragraph",
32
+ "bullet_list"
33
+ ])),
34
+ perspective: z.enum([
35
+ "first",
36
+ "second",
37
+ "third"
38
+ ]).optional(),
39
+ voice_prompt: z.string(),
40
+ content_prompt: z.string().optional(),
41
+ produces: z.array(z.string()).min(1)
42
+ }).strict();
43
+ const TextSeedDecision = z.object({
44
+ id: z.string(),
45
+ type: z.literal("text-seed"),
46
+ source: z.string().regex(/^\$\{(facts|options|template)\.[a-zA-Z0-9_.]+\}$/),
47
+ produces: z.array(z.string()).min(1)
48
+ }).strict();
49
+ const ListExtractDecision = z.object({
50
+ id: z.string(),
51
+ type: z.literal("list-extract"),
52
+ iterate: z.string().optional(),
53
+ item_count: Bindable(z.number().int().positive()).optional(),
54
+ per_item_length_cap: Bindable(z.number().int().positive()).optional(),
55
+ structure_hint: z.string(),
56
+ voice_prompt: z.string(),
57
+ content_prompt: z.string().optional(),
58
+ produces: z.array(z.string()).min(1)
59
+ }).strict();
60
+ const StructuredListDecision = z.object({
61
+ id: z.string(),
62
+ type: z.literal("structured-list"),
63
+ iterate: z.string().optional(),
64
+ item_count: Bindable(z.number().int().positive()).optional(),
65
+ item_fields: z.record(z.string(), z.string()),
66
+ structure_hint: z.string(),
67
+ voice_prompt: z.string(),
68
+ content_prompt: z.string().optional(),
69
+ system_prompt: z.string().optional(),
70
+ route_by: z.string().optional(),
71
+ per_field_cap: z.record(z.string(), z.number().int().positive()).optional(),
72
+ per_field_min: z.record(z.string(), z.number().int().positive()).optional(),
73
+ produces: z.array(z.string()).min(1),
74
+ catalog: z.array(z.object({
75
+ key: z.string(),
76
+ label: z.string(),
77
+ icon: z.string(),
78
+ aliases: z.array(z.string()).default([]),
79
+ slot: z.string().optional()
80
+ }).strict()).optional(),
81
+ per_category_max: z.number().int().positive().optional(),
82
+ min: z.number().int().nonnegative().optional()
83
+ }).strict();
84
+ const Decision = z.discriminatedUnion("type", [
85
+ ImageAssignDecision,
86
+ ImageCollectionDecision,
87
+ TextBlockDecision,
88
+ TextSeedDecision,
89
+ ListExtractDecision,
90
+ StructuredListDecision
91
+ ]);
92
+ const FillSpec = z.object({
93
+ reads: z.array(z.string()).default([]),
94
+ decisions: z.array(Decision)
95
+ }).strict();
96
+
97
+ //#endregion
98
+ export { Decision, FillSpec };
@@ -0,0 +1,143 @@
1
+ import { SchemaForSynth } from "./synthesize-nullable.js";
2
+ import { z } from "zod";
3
+ //#region src/schema/fixture-schema.d.ts
4
+ declare const FixtureOverride: z.ZodObject<{
5
+ label: z.ZodOptional<z.ZodString>;
6
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
8
+ anchors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
9
+ variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ options?: Record<string, unknown> | undefined;
12
+ label?: string | undefined;
13
+ variants?: Record<string, string> | undefined;
14
+ slots?: Record<string, unknown> | undefined;
15
+ anchors?: Record<string, string> | undefined;
16
+ }, {
17
+ options?: Record<string, unknown> | undefined;
18
+ label?: string | undefined;
19
+ variants?: Record<string, string> | undefined;
20
+ slots?: Record<string, unknown> | undefined;
21
+ anchors?: Record<string, string> | undefined;
22
+ }>;
23
+ declare const FixtureModuleShape: z.ZodObject<{
24
+ base: z.ZodObject<{
25
+ slots: z.ZodRecord<z.ZodString, z.ZodUnknown>;
26
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
27
+ anchors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
28
+ variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ slots: Record<string, unknown>;
31
+ options?: Record<string, unknown> | undefined;
32
+ variants?: Record<string, string> | undefined;
33
+ anchors?: Record<string, string> | undefined;
34
+ }, {
35
+ slots: Record<string, unknown>;
36
+ options?: Record<string, unknown> | undefined;
37
+ variants?: Record<string, string> | undefined;
38
+ anchors?: Record<string, string> | undefined;
39
+ }>;
40
+ option_matrix: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
+ label: z.ZodOptional<z.ZodString>;
42
+ options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ options: Record<string, unknown>;
45
+ label?: string | undefined;
46
+ }, {
47
+ options: Record<string, unknown>;
48
+ label?: string | undefined;
49
+ }>, "many">>;
50
+ states: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
51
+ label: z.ZodOptional<z.ZodString>;
52
+ slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
53
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
54
+ anchors: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
55
+ variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
56
+ }, "strip", z.ZodTypeAny, {
57
+ options?: Record<string, unknown> | undefined;
58
+ label?: string | undefined;
59
+ variants?: Record<string, string> | undefined;
60
+ slots?: Record<string, unknown> | undefined;
61
+ anchors?: Record<string, string> | undefined;
62
+ }, {
63
+ options?: Record<string, unknown> | undefined;
64
+ label?: string | undefined;
65
+ variants?: Record<string, string> | undefined;
66
+ slots?: Record<string, unknown> | undefined;
67
+ anchors?: Record<string, string> | undefined;
68
+ }>>>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ base: {
71
+ slots: Record<string, unknown>;
72
+ options?: Record<string, unknown> | undefined;
73
+ variants?: Record<string, string> | undefined;
74
+ anchors?: Record<string, string> | undefined;
75
+ };
76
+ option_matrix?: {
77
+ options: Record<string, unknown>;
78
+ label?: string | undefined;
79
+ }[] | undefined;
80
+ states?: Record<string, {
81
+ options?: Record<string, unknown> | undefined;
82
+ label?: string | undefined;
83
+ variants?: Record<string, string> | undefined;
84
+ slots?: Record<string, unknown> | undefined;
85
+ anchors?: Record<string, string> | undefined;
86
+ }> | undefined;
87
+ }, {
88
+ base: {
89
+ slots: Record<string, unknown>;
90
+ options?: Record<string, unknown> | undefined;
91
+ variants?: Record<string, string> | undefined;
92
+ anchors?: Record<string, string> | undefined;
93
+ };
94
+ option_matrix?: {
95
+ options: Record<string, unknown>;
96
+ label?: string | undefined;
97
+ }[] | undefined;
98
+ states?: Record<string, {
99
+ options?: Record<string, unknown> | undefined;
100
+ label?: string | undefined;
101
+ variants?: Record<string, string> | undefined;
102
+ slots?: Record<string, unknown> | undefined;
103
+ anchors?: Record<string, string> | undefined;
104
+ }> | undefined;
105
+ }>;
106
+ type FixtureModule = z.infer<typeof FixtureModuleShape>;
107
+ type FixtureOverride = z.infer<typeof FixtureOverride>;
108
+ type ResolvedFixture = {
109
+ id: string;
110
+ label: string;
111
+ props: {
112
+ slots: Record<string, unknown>;
113
+ options: Record<string, unknown>;
114
+ nav: {
115
+ selfAnchor: string;
116
+ anchors: Record<string, unknown>;
117
+ };
118
+ variants: Record<string, string>;
119
+ };
120
+ };
121
+ type VariantAxes = Record<string, {
122
+ cases: string[];
123
+ default: string;
124
+ }>;
125
+ type SchemaForBuild = {
126
+ slots: Record<string, unknown>;
127
+ meta?: {
128
+ variants?: VariantAxes | undefined;
129
+ } | undefined;
130
+ variants?: VariantAxes | undefined;
131
+ };
132
+ declare function buildFixtureSet(input: {
133
+ schema: SchemaForBuild;
134
+ module: FixtureModule;
135
+ selfAnchor?: string;
136
+ }): ResolvedFixture[];
137
+ declare function buildInvariantFixtures(input: {
138
+ schema: SchemaForBuild & SchemaForSynth;
139
+ module: FixtureModule;
140
+ selfAnchor?: string;
141
+ }): ResolvedFixture[];
142
+ //#endregion
143
+ export { FixtureModule, FixtureModuleShape, FixtureOverride, ResolvedFixture, buildFixtureSet, buildInvariantFixtures };
@@ -0,0 +1,113 @@
1
+ import { synthesizeNullableFixtures } from "./synthesize-nullable.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/schema/fixture-schema.ts
5
+ const FixtureOverride = z.object({
6
+ label: z.string().optional(),
7
+ slots: z.record(z.string(), z.unknown()).optional(),
8
+ options: z.record(z.string(), z.unknown()).optional(),
9
+ anchors: z.record(z.string(), z.string()).optional(),
10
+ variants: z.record(z.string(), z.string()).optional()
11
+ });
12
+ const FixtureModuleShape = z.object({
13
+ base: z.object({
14
+ slots: z.record(z.string(), z.unknown()),
15
+ options: z.record(z.string(), z.unknown()).optional(),
16
+ anchors: z.record(z.string(), z.string()).optional(),
17
+ variants: z.record(z.string(), z.string()).optional()
18
+ }),
19
+ option_matrix: z.array(z.object({
20
+ label: z.string().optional(),
21
+ options: z.record(z.string(), z.unknown())
22
+ })).optional(),
23
+ states: z.record(z.string(), FixtureOverride).optional()
24
+ });
25
+ function resolveBaseVariants(schema, module) {
26
+ const axisDefaults = {};
27
+ const declaredVariants = schema.meta?.variants ?? schema.variants ?? {};
28
+ for (const [axis, def] of Object.entries(declaredVariants)) axisDefaults[axis] = def.default;
29
+ return {
30
+ ...axisDefaults,
31
+ ...module.base.variants ?? {}
32
+ };
33
+ }
34
+ function buildFixtureSet(input) {
35
+ const { schema, module, selfAnchor = "" } = input;
36
+ const baseSlots = module.base.slots;
37
+ const baseOptions = module.base.options ?? {};
38
+ const baseAnchors = module.base.anchors ?? {};
39
+ const baseVariants = resolveBaseVariants(schema, module);
40
+ const out = [];
41
+ out.push({
42
+ id: "typical",
43
+ label: "Typical (base content)",
44
+ props: {
45
+ slots: { ...baseSlots },
46
+ options: { ...baseOptions },
47
+ nav: {
48
+ selfAnchor,
49
+ anchors: { ...baseAnchors }
50
+ },
51
+ variants: { ...baseVariants }
52
+ }
53
+ });
54
+ if (module.option_matrix) module.option_matrix.forEach((entry, i) => {
55
+ const id = entry.label ? `option_${slugify(entry.label)}` : `option_${i + 1}`;
56
+ out.push({
57
+ id,
58
+ label: entry.label ?? `Option variant ${i + 1}`,
59
+ props: {
60
+ slots: { ...baseSlots },
61
+ options: {
62
+ ...baseOptions,
63
+ ...entry.options
64
+ },
65
+ nav: {
66
+ selfAnchor,
67
+ anchors: { ...baseAnchors }
68
+ },
69
+ variants: { ...baseVariants }
70
+ }
71
+ });
72
+ });
73
+ if (module.states) for (const [id, override] of Object.entries(module.states)) out.push({
74
+ id,
75
+ label: override.label ?? id,
76
+ props: {
77
+ slots: {
78
+ ...baseSlots,
79
+ ...override.slots ?? {}
80
+ },
81
+ options: {
82
+ ...baseOptions,
83
+ ...override.options ?? {}
84
+ },
85
+ nav: {
86
+ selfAnchor,
87
+ anchors: {
88
+ ...baseAnchors,
89
+ ...override.anchors ?? {}
90
+ }
91
+ },
92
+ variants: {
93
+ ...baseVariants,
94
+ ...override.variants ?? {}
95
+ }
96
+ }
97
+ });
98
+ return out;
99
+ }
100
+ function slugify(s) {
101
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
102
+ }
103
+ function buildInvariantFixtures(input) {
104
+ const { schema, module, selfAnchor = "" } = input;
105
+ return [...buildFixtureSet({
106
+ schema,
107
+ module,
108
+ selfAnchor
109
+ }), ...synthesizeNullableFixtures(schema, module, selfAnchor)];
110
+ }
111
+
112
+ //#endregion
113
+ export { FixtureModuleShape, buildFixtureSet, buildInvariantFixtures, resolveBaseVariants };
@@ -0,0 +1,16 @@
1
+ import { ResponsiveImage, ResponsiveSource } from "../contracts/image-descriptor.js";
2
+ import { Coordinates, FloorplanAssignment, PropertyFacts, UnitRow } from "./property-facts.js";
3
+ import { COLLECTIONS, CONTENT_SLOT_TYPES, CollectionField, CollectionIdKey, CollectionOwnership, ContentSlotType, DECISION_TYPES, DERIVED_INPUT_FIELDS, DecisionType, DerivedInputName, FORMATTER_NAMES, FormatterName, REFERRAL_FIELDS, REFERRAL_IMAGE_FIELDS, REF_SLOT_TYPES, RefSlotType, ReferralField, ReferralImageField, SLOT_TYPES, SOURCE_FIELDS, SlotType, SourceFieldContainer, SourceFieldDescriptor, SourceFieldName, SourceFieldValueType, WritebackTarget, collectionForSlot } from "../contracts/slot-catalog.js";
4
+ import { AddressParts, TRANSFORMS, TRANSFORM_NAMES, TransformDescriptor, TransformFn, TransformInput, TransformName, TransformUnit } from "../contracts/transforms.js";
5
+ import { VariantSelectorFn, VariantsMeta, makeResolveVariants } from "./resolve-variants.js";
6
+ import { ContentSlot, SLOT_TYPE_DESCRIPTORS, Slot, SlotDef, defaultForSlotType, slotDefTypes } from "./slot-types.js";
7
+ import { VERIFICATION_WIDTHS, VerificationWidth } from "../design-system/breakpoints.js";
8
+ import { FrameConfig, ImageCollectionValue, ImageValue, PoiRow } from "./runtime-values.js";
9
+ import { SectionNav } from "./section-nav.js";
10
+ import { OptionValue, SectionProps, SlotValue } from "./section-props.js";
11
+ import { derived, direct } from "./source.js";
12
+ import { OptionDef, SectionMeta, SectionMetaShape, SectionSchema, SectionSchemaResolved, SectionSchemaShape, SlotGroupDef, SlotGroupDefShape } from "./section-schema.js";
13
+ import { Decision, FillSpec, FillSpecShape } from "./fill-spec.js";
14
+ import { FixtureModule, FixtureModuleShape, FixtureOverride, ResolvedFixture, buildFixtureSet, buildInvariantFixtures } from "./fixture-schema.js";
15
+ import { TemplateManifest, TemplateManifestShape } from "./manifest.js";
16
+ export { type AddressParts, COLLECTIONS, CONTENT_SLOT_TYPES, type CollectionField, type CollectionIdKey, type CollectionOwnership, ContentSlot, type ContentSlotType, type Coordinates, DECISION_TYPES, DERIVED_INPUT_FIELDS, Decision, type DecisionType, type DerivedInputName, FORMATTER_NAMES, FillSpec, type FillSpecShape, type FixtureModule, FixtureModuleShape, type FixtureOverride, type FloorplanAssignment, type FormatterName, type FrameConfig, type ImageCollectionValue, type ImageValue, OptionDef, type OptionValue, type PoiRow, type PropertyFacts, REFERRAL_FIELDS, REFERRAL_IMAGE_FIELDS, REF_SLOT_TYPES, type RefSlotType, type ReferralField, type ReferralImageField, type ResolvedFixture, type ResponsiveImage, type ResponsiveSource, SLOT_TYPES, SLOT_TYPE_DESCRIPTORS, SOURCE_FIELDS, SectionMeta, type SectionMetaShape, type SectionNav, type SectionProps, SectionSchema, type SectionSchemaResolved, type SectionSchemaShape, type Slot, SlotDef, SlotGroupDef, type SlotGroupDefShape, type SlotType, type SlotValue, type SourceFieldContainer, type SourceFieldDescriptor, type SourceFieldName, type SourceFieldValueType, TRANSFORMS, TRANSFORM_NAMES, TemplateManifest, type TemplateManifestShape, type TransformDescriptor, type TransformFn, type TransformInput, type TransformName, type TransformUnit, type UnitRow, VERIFICATION_WIDTHS, type VariantSelectorFn, type VariantsMeta, type VerificationWidth, type WritebackTarget, buildFixtureSet, buildInvariantFixtures, collectionForSlot, defaultForSlotType, derived, direct, makeResolveVariants, slotDefTypes };