@teacss/classes 0.3.2 → 0.3.4

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
@@ -162,7 +162,7 @@ Responsive and stateful behavior stays in static TeaCSS class values using
162
162
  suffix conditions such as `p:4@md` and `bg-color:blue-600@hover`; recipe props
163
163
  do not introduce responsive objects.
164
164
 
165
- Recipes extend one parent created by the exact same definer. An extending child
165
+ Recipes extend one parent created by the exact same reciper. An extending child
166
166
  may omit `className` to inherit the parent's string or object mode, base
167
167
  fragments, and existing named classes. If a child declares `className`, it must
168
168
  preserve that mode; an object child may add new names:
@@ -202,37 +202,37 @@ retired top-level definition field `styles` and former nested compound selector
202
202
  `parts` are not compatibility aliases; broadcast compounds use
203
203
  `compoundVariants[].classKeys`.
204
204
 
205
- ### Definer creation
205
+ ### Reciper creation
206
206
 
207
- `@teacss/classes` exports the `createDefiner` factory and no pre-bound
208
- definer. Each integration binds its own merger once and exports the
207
+ `@teacss/classes` exports the `createReciper` factory and no pre-bound
208
+ reciper. Each integration binds its own merger once and exports the
209
209
  result under the name appropriate for that integration:
210
210
 
211
211
  ```ts
212
- import { createDefiner, createMerger } from "@teacss/classes";
212
+ import { createReciper, createMerger } from "@teacss/classes";
213
213
 
214
214
  export const merge = createMerger({ conflicts, plugins });
215
- export const recipe = createDefiner({ merge });
215
+ export const recipe = createReciper({ merge });
216
216
 
217
217
  export const libraryButton = recipe({
218
218
  className: "p:2",
219
219
  });
220
220
  ```
221
221
 
222
- `createDefiner` accepts the required `merge` field; there is no default merger
223
- and no `merger` alias. Extension identity belongs to the exact definer function,
224
- not merely to the merger. Its return type is the type-only `RecipeDefiner`
225
- export, so an integration can re-export its definer without inlining the
222
+ `createReciper` accepts the required `merge` field; there is no default merger
223
+ and no `merger` alias. Extension identity belongs to the exact reciper function,
224
+ not merely to the merger. Its return type is the type-only `Reciper`
225
+ export, so an integration can re-export its reciper without inlining the
226
226
  complete generic recipe contract into generated declarations.
227
227
 
228
228
  Libraries that export official recipes for downstream extension peer-depend on
229
- and externalize `teacss`, which owns the official definer. A custom integration
230
- peer-depends on `@teacss/classes` and exports the exact definer used to create
229
+ and externalize `teacss`, which owns the official reciper. A custom integration
230
+ peer-depends on `@teacss/classes` and exports the exact reciper used to create
231
231
  its parents. Consumers deduplicate that owning integration. Recreating a
232
- definer, loading another physical or versioned runtime, or loading the parent
233
- and definer from different provider-package instances breaks extension
232
+ reciper, loading another physical or versioned runtime, or loading the parent
233
+ and reciper from different provider-package instances breaks extension
234
234
  identity even when declarations and merger behavior match. Deduplicating only
235
- `@teacss/classes` does not repair a duplicated custom-definer provider.
235
+ `@teacss/classes` does not repair a duplicated custom-reciper provider.
236
236
  `VariantProps` extraction is type-only and needs no runtime identity; only
237
237
  `extend` has this exact-identity requirement.
238
238
 
package/dist/index.d.ts CHANGED
@@ -1,3 +1,17 @@
1
+ //#region src/attributes.d.ts
2
+ /**
3
+ * Attribute helpers for component authors composing recipes with arbitrary
4
+ * pass-through DOM attributes.
5
+ */
6
+ /**
7
+ * Return a shallow copy of `attributes` without the entries whose names appear
8
+ * in `ownedNames`, compared case-insensitively — HTML attribute names are
9
+ * case-insensitive, so `onClick` and `onclick` collide on the same attribute.
10
+ * Use it to strip component-owned attributes before spreading the rest onto an
11
+ * element. The input object is not mutated; symbol-keyed entries are preserved.
12
+ */
13
+ declare function omitAttributes<T extends object>(attributes: T, ownedNames: readonly string[]): Partial<T>;
14
+ //#endregion
1
15
  //#region src/merge.d.ts
2
16
  type ClassDict = Record<string, any>;
3
17
  type ClassValue = string | number | bigint | null | undefined | boolean | readonly ClassValue[] | ClassDict;
@@ -111,7 +125,7 @@ type ClassProp = {
111
125
  className?: ClassValue;
112
126
  };
113
127
  type RecipeMerger = (this: void, ...inputs: ClassValue[]) => string;
114
- type RecipeDefinerOptions = {
128
+ type ReciperOptions = {
115
129
  readonly apply?: never;
116
130
  readonly bind?: never;
117
131
  readonly call?: never;
@@ -119,7 +133,7 @@ type RecipeDefinerOptions = {
119
133
  readonly merge: RecipeMerger;
120
134
  readonly prototype?: never;
121
135
  };
122
- type ReservedPartName = "class" | "className" | "then" | "toJSON" | "toString" | "valueOf";
136
+ type ReservedSlotName = "class" | "className" | "then" | "toJSON" | "toString" | "valueOf";
123
137
  type ReservedVariantName = "class" | "className" | "classKeys";
124
138
  type StaticallyUnsafeSchemaName = "__proto__";
125
139
  type CanonicalKey<Key> = Key extends string ? Key : Key extends number ? `${Key}` : never;
@@ -135,8 +149,25 @@ type RecordInput = Readonly<Record<string, any>>;
135
149
  type NonRecordInput = readonly unknown[] | ((...args: any[]) => any) | (abstract new (...args: any[]) => any);
136
150
  type VariantSelections<Variants extends VariantSchema> = keyof Variants extends never ? Readonly<Record<symbol, unknown>> : { readonly [Name in keyof Variants]?: VariantSelection<Extract<Variants[Name], string>> | undefined; };
137
151
  type DefinitionVariantSelections<Variants extends VariantSchema> = VariantSelections<Variants> & Readonly<Record<symbol, unknown>>;
152
+ /**
153
+ * Read-only introspection snapshot carried by every recipe function so
154
+ * tooling (dead-token guards, docs generators, Storybook controls) can
155
+ * enumerate the variant space without parsing source. `slots` lists the
156
+ * declared `className` object keys (empty for single-element recipes),
157
+ * `variants` maps each axis to its choice names, `defaultVariants` reports
158
+ * declared defaults (booleans in their normalized `"true"`/`"false"`
159
+ * spelling), and `compoundVariantCount` counts the declared compound
160
+ * entries.
161
+ */
162
+ interface RecipeIntrospection {
163
+ readonly slots: readonly string[];
164
+ readonly variants: Readonly<Record<string, readonly string[]>>;
165
+ readonly defaultVariants: Readonly<Record<string, string>>;
166
+ readonly compoundVariantCount: number;
167
+ }
138
168
  type RecipeCarrier = {
139
169
  readonly [Symbol.unscopables]: never;
170
+ readonly config: RecipeIntrospection;
140
171
  };
141
172
  type IsAny<Value> = 0 extends 1 & Value ? true : false;
142
173
  type IsUnion<Value, Whole = Value> = IsAny<Value> extends true ? false : Value extends Whole ? ([Whole] extends [Value] ? false : true) : never;
@@ -148,15 +179,15 @@ type ValidateNonUnion<Value> = IsAny<Value> extends true ? unknown : true extend
148
179
  type ValidateRecordShape<Value> = IsAny<Value> extends true ? unknown : true extends InvalidRecordShape<Value> ? never : unknown;
149
180
  type ValidateKnownKeys<Value, Keys extends PropertyKey> = IsAny<Value> extends true ? unknown : Exclude<Extract<keyof Value, string | number>, Keys> extends never ? unknown : never;
150
181
  type ValidatePropsInput<Input, Props> = IsAny<Input> extends true ? unknown : true extends InvalidRecordShape<Exclude<Input, undefined>> ? never : Exclude<CanonicalKeys<Exclude<Input, undefined>>, CanonicalKeys<Props>> extends never ? unknown : never;
151
- type PartProps<Variants extends VariantSchema> = keyof Variants extends never ? ClassProp : VariantSelections<Variants> & ClassProp;
182
+ type SlotProps<Variants extends VariantSchema> = keyof Variants extends never ? ClassProp : VariantSelections<Variants> & ClassProp;
152
183
  type SingleRecipeProps<Variants extends VariantSchema> = VariantSelections<Variants> & ClassProp;
153
- type RecipeResult<Parts extends string, Variants extends VariantSchema> = { readonly [Part in Parts]: <const Input>(props?: Input & PartProps<Variants> & NoInfer<ValidatePropsInput<Input, PartProps<Variants>>>) => string; };
154
- type TeaRecipeResult<Parts extends string, Variants extends VariantSchema> = RecipeResult<Parts, Variants>;
184
+ type RecipeResult<Slots extends string, Variants extends VariantSchema> = { readonly [Slot in Slots]: <const Input>(props?: Input & SlotProps<Variants> & NoInfer<ValidatePropsInput<Input, SlotProps<Variants>>>) => string; };
185
+ type TeaRecipeResult<Slots extends string, Variants extends VariantSchema> = RecipeResult<Slots, Variants>;
155
186
  type TeaSingleRecipe<Variants extends VariantSchema> = (<const Input>(props?: Input & SingleRecipeProps<Variants> & NoInfer<ValidatePropsInput<Input, SingleRecipeProps<Variants>>>) => string) & RecipeCarrier;
156
- type TeaMultipartRecipe<Parts extends string, Variants extends VariantSchema> = (<const Input>(props?: Input & VariantSelections<Variants> & NoInfer<ValidatePropsInput<Input, VariantSelections<Variants>>>) => TeaRecipeResult<Parts, Variants>) & RecipeCarrier;
187
+ type TeaMultiElementRecipe<Slots extends string, Variants extends VariantSchema> = (<const Input>(props?: Input & VariantSelections<Variants> & NoInfer<ValidatePropsInput<Input, VariantSelections<Variants>>>) => TeaRecipeResult<Slots, Variants>) & RecipeCarrier;
157
188
  type BrandedRecipe = Function & RecipeCarrier;
158
189
  type SingleBrandedRecipe = BrandedRecipe & ((props?: any) => string);
159
- type MultipartBrandedRecipe = BrandedRecipe & ((props?: any) => Readonly<Record<string, (props?: any) => string>>);
190
+ type MultiElementBrandedRecipe = BrandedRecipe & ((props?: any) => Readonly<Record<string, (props?: any) => string>>);
160
191
  type SchemaFromSelections<Selections> = { readonly [Name in Exclude<Extract<keyof NonNullable<Selections>, string>, keyof ClassProp>]: Extract<NonNullable<Selections>[Name], string>; };
161
192
  type ParentSchema<Parent> = [Parent] extends [RecipeCarrier & ((props?: infer Selections) => infer Result)] ? {
162
193
  readonly classKeys: Result extends string ? never : Extract<keyof Result, string>;
@@ -168,9 +199,9 @@ type ParentSchema<Parent> = [Parent] extends [RecipeCarrier & ((props?: infer Se
168
199
  type ParentClassKeys<Parent> = Extract<ParentSchema<Parent>["classKeys"], string>;
169
200
  type ParentVariants<Parent> = ParentSchema<Parent>["variants"] extends (infer Variants extends VariantSchema) ? Variants : {};
170
201
  type StylesInput = RecordInput;
171
- type PartNames<Styles> = CanonicalKeys<Styles>;
172
- type EffectiveParts<Parent, Styles> = ParentClassKeys<Parent> | PartNames<Styles>;
173
- type PartTargetMap<Parts extends string> = Readonly<Partial<Record<Parts, ClassValue>>>;
202
+ type SlotNames<Styles> = CanonicalKeys<Styles>;
203
+ type EffectiveSlots<Parent, Styles> = ParentClassKeys<Parent> | SlotNames<Styles>;
204
+ type SlotTargetMap<Slots extends string> = Readonly<Partial<Record<Slots, ClassValue>>>;
174
205
  type VariantsInput = RecordInput;
175
206
  type OwnVariantSchema<Variants> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants as CanonicalKey<Name>]: CanonicalKeys<Variants[Name]>; } : {};
176
207
  type VariantChoicesAt<Schema, Name extends PropertyKey> = Extract<Schema extends Readonly<Record<Name, infer Choices>> ? Choices : never, string>;
@@ -180,36 +211,36 @@ type CompoundConditions<Variants extends VariantSchema> = { readonly [Name in ke
180
211
  type SingleCompoundDefinition<Variants extends VariantSchema> = {
181
212
  readonly className: string;
182
213
  } & CompoundConditions<Variants>;
183
- type MultipartCompoundDefinition<Parts extends string, Variants extends VariantSchema> = ({
184
- readonly className: PartTargetMap<NoInfer<Parts>>;
214
+ type MultiElementCompoundDefinition<Slots extends string, Variants extends VariantSchema> = ({
215
+ readonly className: SlotTargetMap<NoInfer<Slots>>;
185
216
  readonly classKeys?: never;
186
217
  } | {
187
218
  readonly className: string;
188
- readonly classKeys: readonly [NoInfer<Parts>, ...NoInfer<Parts>[]];
219
+ readonly classKeys: readonly [NoInfer<Slots>, ...NoInfer<Slots>[]];
189
220
  }) & CompoundConditions<Variants>;
190
- type InvalidPartNames<Styles> = Extract<PartNames<Styles>, ReservedPartName | StaticallyUnsafeSchemaName> | WhitespaceOnlyName<PartNames<Styles>>;
221
+ type InvalidSlotNames<Styles> = Extract<SlotNames<Styles>, ReservedSlotName | StaticallyUnsafeSchemaName> | WhitespaceOnlyName<SlotNames<Styles>>;
191
222
  type InvalidVariantNames<Variants> = Extract<CanonicalKeys<NonNullable<Variants>>, ReservedVariantName | StaticallyUnsafeSchemaName> | WhitespaceOnlyName<CanonicalKeys<NonNullable<Variants>>>;
192
223
  type InvalidChoiceNames<Choices> = Extract<CanonicalKeys<Choices>, StaticallyUnsafeSchemaName>;
193
- type AllowedPartNames<Styles> = InvalidPartNames<Styles> extends never ? unknown : never;
224
+ type AllowedSlotNames<Styles> = InvalidSlotNames<Styles> extends never ? unknown : never;
194
225
  type AllowedVariantNames<Variants> = InvalidVariantNames<Variants> extends never ? unknown : never;
195
- type ValidateStyles<Styles> = PartNames<Styles> extends never ? never : Styles extends Readonly<Record<Extract<keyof Styles, string | number>, ClassValue>> ? unknown : never;
196
- type PartTargetNames<Targets> = Targets extends unknown ? CanonicalKeys<Targets> : never;
197
- type ValidatePartTargetValues<Targets> = Targets extends RecordInput ? { readonly [Name in keyof Targets]: Name extends symbol ? Targets[Name] : Targets[Name] extends ClassValue ? Targets[Name] : never; } : never;
198
- type InvalidPartTargetValueNames<Targets> = Targets extends RecordInput ? { readonly [Name in Extract<keyof Targets, string | number>]-?: IsAny<Targets[Name]> extends true ? never : Targets[Name] extends ClassValue ? never : Name; }[Extract<keyof Targets, string | number>] : never;
199
- type ValidatePartTargets<Targets, Parts extends string> = IsAny<Targets> extends true ? unknown : true extends InvalidRecordShape<Targets> ? never : [Targets] extends [RecordInput] ? (Exclude<PartTargetNames<Targets>, Parts> extends never ? (InvalidPartTargetValueNames<Targets> extends never ? ValidatePartTargetValues<Targets> : never) : never) : never;
226
+ type ValidateStyles<Styles> = SlotNames<Styles> extends never ? never : Styles extends Readonly<Record<Extract<keyof Styles, string | number>, ClassValue>> ? unknown : never;
227
+ type SlotTargetNames<Targets> = Targets extends unknown ? CanonicalKeys<Targets> : never;
228
+ type ValidateSlotTargetValues<Targets> = Targets extends RecordInput ? { readonly [Name in keyof Targets]: Name extends symbol ? Targets[Name] : Targets[Name] extends ClassValue ? Targets[Name] : never; } : never;
229
+ type InvalidSlotTargetValueNames<Targets> = Targets extends RecordInput ? { readonly [Name in Extract<keyof Targets, string | number>]-?: IsAny<Targets[Name]> extends true ? never : Targets[Name] extends ClassValue ? never : Name; }[Extract<keyof Targets, string | number>] : never;
230
+ type ValidateSlotTargets<Targets, Slots extends string> = IsAny<Targets> extends true ? unknown : true extends InvalidRecordShape<Targets> ? never : [Targets] extends [RecordInput] ? (Exclude<SlotTargetNames<Targets>, Slots> extends never ? (InvalidSlotTargetValueNames<Targets> extends never ? ValidateSlotTargetValues<Targets> : never) : never) : never;
200
231
  type ValidateSingleChoices<Choices> = ValidateStableSchema<Choices> extends never ? never : InvalidChoiceNames<Choices> extends never ? CanonicalKeys<Choices> extends never ? never : Choices extends RecordInput ? { readonly [Name in keyof Choices]: Name extends symbol ? Choices[Name] : IsAny<Choices[Name]> extends true ? unknown : [Choices[Name]] extends [string] ? Choices[Name] : never; } : never : never;
201
- type ValidateMultipartChoices<Choices, Parts extends string> = ValidateStableSchema<Choices> extends never ? never : InvalidChoiceNames<Choices> extends never ? CanonicalKeys<Choices> extends never ? never : Choices extends RecordInput ? { readonly [Name in keyof Choices]: ValidatePartTargets<Choices[Name], Parts>; } : never : never;
232
+ type ValidateMultiElementChoices<Choices, Slots extends string> = ValidateStableSchema<Choices> extends never ? never : InvalidChoiceNames<Choices> extends never ? CanonicalKeys<Choices> extends never ? never : Choices extends RecordInput ? { readonly [Name in keyof Choices]: ValidateSlotTargets<Choices[Name], Slots>; } : never : never;
202
233
  type ValidateSingleVariants<Variants> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants]: ValidateSingleChoices<Variants[Name]>; } : unknown;
203
- type ValidateMultipartVariants<Variants, Parts extends string> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants]: ValidateMultipartChoices<Variants[Name], Parts>; } : unknown;
234
+ type ValidateMultiElementVariants<Variants, Slots extends string> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants]: ValidateMultiElementChoices<Variants[Name], Slots>; } : unknown;
204
235
  type ValidateCompoundCondition<Condition> = undefined extends Condition ? never : Condition extends readonly [] ? never : Condition;
205
236
  type ValidateSingleCompoundOutput<Output> = IsAny<Output> extends true ? unknown : [Output] extends [string] ? Output : never;
206
- type ValidateMultipartCompoundOutput<Output, Parts extends string> = PartTargetNames<Output> extends never ? never : ValidatePartTargets<Output, Parts>;
237
+ type ValidateMultiElementCompoundOutput<Output, Slots extends string> = SlotTargetNames<Output> extends never ? never : ValidateSlotTargets<Output, Slots>;
207
238
  type HasDuplicateClassKeys<Targets extends readonly unknown[], Seen = never> = Targets extends readonly [infer Target, ...infer Rest] ? (Extract<Target, Seen> extends never ? HasDuplicateClassKeys<Rest, Seen | Target> : true) : false;
208
- type ValidateCompoundClassKeys<Targets, Parts extends string> = IsAny<Targets> extends true ? unknown : Targets extends readonly [unknown, ...unknown[]] ? (Exclude<Targets[number], Parts> extends never ? (HasDuplicateClassKeys<Targets> extends false ? Targets : never) : never) : never;
239
+ type ValidateCompoundClassKeys<Targets, Slots extends string> = IsAny<Targets> extends true ? unknown : Targets extends readonly [unknown, ...unknown[]] ? (Exclude<Targets[number], Slots> extends never ? (HasDuplicateClassKeys<Targets> extends false ? Targets : never) : never) : never;
209
240
  type ValidateSingleCompoundEntry<Entry, Variants extends VariantSchema> = true extends InvalidRecordShape<Entry> ? never : Entry extends RecordInput ? { readonly [Name in keyof Entry]: Name extends symbol ? Entry[Name] : Name extends "className" ? ValidateSingleCompoundOutput<Entry[Name]> : Name extends string | number ? (CanonicalKey<Name> extends keyof Variants ? ValidateCompoundCondition<Entry[Name]> : never) : never; } : never;
210
- type ValidateMultipartCompoundEntry<Entry, Parts extends string, Variants extends VariantSchema> = true extends InvalidRecordShape<Entry> ? never : Entry extends RecordInput ? "classKeys" extends OptionalSchemaKeys<Entry> ? never : { readonly [Name in keyof Entry]: Name extends symbol ? Entry[Name] : Name extends "className" ? "classKeys" extends keyof Entry ? ValidateSingleCompoundOutput<Entry[Name]> : ValidateMultipartCompoundOutput<Entry[Name], Parts> : Name extends "classKeys" ? ValidateCompoundClassKeys<Entry[Name], Parts> : Name extends string | number ? CanonicalKey<Name> extends keyof Variants ? ValidateCompoundCondition<Entry[Name]> : never : never; } : never;
241
+ type ValidateMultiElementCompoundEntry<Entry, Slots extends string, Variants extends VariantSchema> = true extends InvalidRecordShape<Entry> ? never : Entry extends RecordInput ? "classKeys" extends OptionalSchemaKeys<Entry> ? never : { readonly [Name in keyof Entry]: Name extends symbol ? Entry[Name] : Name extends "className" ? "classKeys" extends keyof Entry ? ValidateSingleCompoundOutput<Entry[Name]> : ValidateMultiElementCompoundOutput<Entry[Name], Slots> : Name extends "classKeys" ? ValidateCompoundClassKeys<Entry[Name], Slots> : Name extends string | number ? CanonicalKey<Name> extends keyof Variants ? ValidateCompoundCondition<Entry[Name]> : never : never; } : never;
211
242
  type ValidateSingleCompounds<Compounds, Variants extends VariantSchema> = Compounds extends readonly unknown[] ? { readonly [Index in keyof Compounds]: ValidateSingleCompoundEntry<Compounds[Index], Variants>; } : unknown;
212
- type ValidateMultipartCompounds<Compounds, Parts extends string, Variants extends VariantSchema> = Compounds extends readonly unknown[] ? { readonly [Index in keyof Compounds]: ValidateMultipartCompoundEntry<Compounds[Index], Parts, Variants>; } : unknown;
243
+ type ValidateMultiElementCompounds<Compounds, Slots extends string, Variants extends VariantSchema> = Compounds extends readonly unknown[] ? { readonly [Index in keyof Compounds]: ValidateMultiElementCompoundEntry<Compounds[Index], Slots, Variants>; } : unknown;
213
244
  type SingleRecipeDefinition<Style extends string, Parent extends SingleBrandedRecipe | undefined, Variants extends VariantsInput | undefined, Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<Parent, Variants>>[] | undefined> = {
214
245
  readonly className: Style;
215
246
  readonly variants?: (Variants & ValidateStableSchema<Exclude<Variants, undefined>> & AllowedVariantNames<Variants> & ValidateSingleVariants<Variants>) | undefined;
@@ -217,11 +248,11 @@ type SingleRecipeDefinition<Style extends string, Parent extends SingleBrandedRe
217
248
  readonly compoundVariants?: (Compounds & ValidateSingleCompounds<Compounds, EffectiveVariants<Parent, Variants>>) | undefined;
218
249
  readonly extend?: (Parent & ValidateNonUnion<Parent>) | undefined;
219
250
  };
220
- type MultipartRecipeDefinition<Styles extends StylesInput, Parent extends MultipartBrandedRecipe | undefined, Variants extends VariantsInput | undefined, Compounds extends readonly MultipartCompoundDefinition<EffectiveParts<Parent, Styles>, EffectiveVariants<Parent, Variants>>[] | undefined> = {
221
- readonly className: Styles & ValidateStyles<Styles> & ValidateStableSchema<Styles> & AllowedPartNames<Styles>;
222
- readonly variants?: (Variants & ValidateStableSchema<Exclude<Variants, undefined>> & AllowedVariantNames<Variants> & ValidateMultipartVariants<Variants, EffectiveParts<Parent, Styles>>) | undefined;
251
+ type MultiElementRecipeDefinition<Styles extends StylesInput, Parent extends MultiElementBrandedRecipe | undefined, Variants extends VariantsInput | undefined, Compounds extends readonly MultiElementCompoundDefinition<EffectiveSlots<Parent, Styles>, EffectiveVariants<Parent, Variants>>[] | undefined> = {
252
+ readonly className: Styles & ValidateStyles<Styles> & ValidateStableSchema<Styles> & AllowedSlotNames<Styles>;
253
+ readonly variants?: (Variants & ValidateStableSchema<Exclude<Variants, undefined>> & AllowedVariantNames<Variants> & ValidateMultiElementVariants<Variants, EffectiveSlots<Parent, Styles>>) | undefined;
223
254
  readonly defaultVariants?: DefinitionVariantSelections<NoInfer<EffectiveVariants<Parent, Variants>>> | undefined;
224
- readonly compoundVariants?: (Compounds & ValidateMultipartCompounds<Compounds, EffectiveParts<Parent, Styles>, EffectiveVariants<Parent, Variants>>) | undefined;
255
+ readonly compoundVariants?: (Compounds & ValidateMultiElementCompounds<Compounds, EffectiveSlots<Parent, Styles>, EffectiveVariants<Parent, Variants>>) | undefined;
225
256
  readonly extend?: (Parent & ValidateNonUnion<Parent>) | undefined;
226
257
  };
227
258
  type RecipeInference<Styles, Parent, Variants, Compounds> = {
@@ -235,22 +266,22 @@ type ExtendedRecipeInference<Styles, Parent, Variants, Compounds> = Omit<RecipeI
235
266
  };
236
267
  type InheritedRecipeInference<Parent, Variants, Compounds> = Omit<ExtendedRecipeInference<never, Parent, Variants, Compounds>, "className">;
237
268
  type InheritedSingleRecipeDefinition<Parent extends SingleBrandedRecipe, Variants extends VariantsInput | undefined, Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<Parent, Variants>>[] | undefined> = Omit<SingleRecipeDefinition<string, Parent, Variants, Compounds>, "className">;
238
- type InheritedMultipartRecipeDefinition<Parent extends MultipartBrandedRecipe, Variants extends VariantsInput | undefined, Compounds extends readonly MultipartCompoundDefinition<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>[] | undefined> = Omit<MultipartRecipeDefinition<{}, Parent, Variants, Compounds>, "className">;
269
+ type InheritedMultiElementRecipeDefinition<Parent extends MultiElementBrandedRecipe, Variants extends VariantsInput | undefined, Compounds extends readonly MultiElementCompoundDefinition<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>[] | undefined> = Omit<MultiElementRecipeDefinition<{}, Parent, Variants, Compounds>, "className">;
239
270
  type RecipeDefinitionField = "className" | "compoundVariants" | "defaultVariants" | "extend" | "variants";
240
271
  type ValidateDefinitionInput<Definition> = ValidateRecordShape<Definition> & ValidateKnownKeys<Definition, RecipeDefinitionField>;
241
272
  type ValidateInheritedDefinitionInput<Definition> = ValidateRecordShape<Definition> & ValidateKnownKeys<Definition, Exclude<RecipeDefinitionField, "className">>;
242
- type RecipeDefiner = {
273
+ type Reciper = {
243
274
  <const Style extends string, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<undefined, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: RecipeInference<Style, undefined, Variants, Compounds> & Definition & NoInfer<SingleRecipeDefinition<Style, undefined, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaSingleRecipe<EffectiveVariants<undefined, Variants>>;
244
275
  <const Parent extends SingleBrandedRecipe, const Style extends string, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: ExtendedRecipeInference<Style, Parent, Variants, Compounds> & Definition & NoInfer<SingleRecipeDefinition<Style, Parent, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaSingleRecipe<EffectiveVariants<Parent, Variants>>;
245
276
  <const Parent extends SingleBrandedRecipe, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: InheritedRecipeInference<Parent, Variants, Compounds> & Definition & NoInfer<InheritedSingleRecipeDefinition<Parent, Variants, Compounds>> & NoInfer<ValidateInheritedDefinitionInput<Definition>>): TeaSingleRecipe<EffectiveVariants<Parent, Variants>>;
246
- <const Styles extends StylesInput, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultipartCompoundDefinition<EffectiveParts<undefined, Styles>, EffectiveVariants<undefined, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: RecipeInference<Styles, undefined, Variants, Compounds> & Definition & NoInfer<MultipartRecipeDefinition<Styles, undefined, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaMultipartRecipe<EffectiveParts<undefined, Styles>, EffectiveVariants<undefined, Variants>>;
247
- <const Parent extends MultipartBrandedRecipe, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultipartCompoundDefinition<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: InheritedRecipeInference<Parent, Variants, Compounds> & Definition & NoInfer<InheritedMultipartRecipeDefinition<Parent, Variants, Compounds>> & NoInfer<ValidateInheritedDefinitionInput<Definition>>): TeaMultipartRecipe<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>;
248
- <const Parent extends MultipartBrandedRecipe, const Styles extends StylesInput, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultipartCompoundDefinition<EffectiveParts<Parent, Styles>, EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: ExtendedRecipeInference<Styles, Parent, Variants, Compounds> & Definition & NoInfer<MultipartRecipeDefinition<Styles, Parent, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaMultipartRecipe<EffectiveParts<Parent, Styles>, EffectiveVariants<Parent, Variants>>;
277
+ <const Styles extends StylesInput, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultiElementCompoundDefinition<EffectiveSlots<undefined, Styles>, EffectiveVariants<undefined, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: RecipeInference<Styles, undefined, Variants, Compounds> & Definition & NoInfer<MultiElementRecipeDefinition<Styles, undefined, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaMultiElementRecipe<EffectiveSlots<undefined, Styles>, EffectiveVariants<undefined, Variants>>;
278
+ <const Parent extends MultiElementBrandedRecipe, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultiElementCompoundDefinition<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: InheritedRecipeInference<Parent, Variants, Compounds> & Definition & NoInfer<InheritedMultiElementRecipeDefinition<Parent, Variants, Compounds>> & NoInfer<ValidateInheritedDefinitionInput<Definition>>): TeaMultiElementRecipe<ParentClassKeys<Parent>, EffectiveVariants<Parent, Variants>>;
279
+ <const Parent extends MultiElementBrandedRecipe, const Styles extends StylesInput, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly MultiElementCompoundDefinition<EffectiveSlots<Parent, Styles>, EffectiveVariants<Parent, Variants>>[] | undefined = undefined, const Definition = unknown>(definition: ExtendedRecipeInference<Styles, Parent, Variants, Compounds> & Definition & NoInfer<MultiElementRecipeDefinition<Styles, Parent, Variants, Compounds>> & NoInfer<ValidateDefinitionInput<Definition>>): TeaMultiElementRecipe<EffectiveSlots<Parent, Styles>, EffectiveVariants<Parent, Variants>>;
249
280
  };
250
281
  type VariantProps<Recipe> = Recipe extends RecipeCarrier & ((props?: infer Props) => unknown) ? VariantSelections<SchemaFromSelections<Props>> : never;
251
- declare function createDefiner<const Options = unknown>(options: {
282
+ declare function createReciper<const Options = unknown>(options: {
252
283
  readonly merge: RecipeMerger;
253
- } & Options & NoInfer<ValidateRecordShape<Options> & ValidateKnownKeys<Options, "merge">>): RecipeDefiner;
254
- declare function createDefiner(options: RecipeDefinerOptions): RecipeDefiner;
284
+ } & Options & NoInfer<ValidateRecordShape<Options> & ValidateKnownKeys<Options, "merge">>): Reciper;
285
+ declare function createReciper(options: ReciperOptions): Reciper;
255
286
  //#endregion
256
- export { type ClassDict, type ClassProp, type ClassValue, type ConflictAtoms, type ConflictMeta, MERGE_OPAQUE, type Merger, type MergerOptions, type MergerPlugin, MergerProtocolError, type MergerProtocolErrorCode, type MergerTokenOccurrence, type MergerTokenView, type OverlapMode, type RecipeDefiner, type ResolveVerdict, type VariantProps, createDefiner, createMerger };
287
+ export { type ClassDict, type ClassProp, type ClassValue, type ConflictAtoms, type ConflictMeta, MERGE_OPAQUE, type Merger, type MergerOptions, type MergerPlugin, MergerProtocolError, type MergerProtocolErrorCode, type MergerTokenOccurrence, type MergerTokenView, type OverlapMode, type RecipeIntrospection, type Reciper, type ResolveVerdict, type VariantProps, createMerger, createReciper, omitAttributes };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- function e(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function t(t,n){let r=t.length;r in t?e(t,r,n):t[r]=n}function n(e){let n=``,r,i=-1,a=-1,o=-1,s=[];for(let c=0;c<e.length;c++){let l=e[c];if(r){l===`\\`?c++:l===r&&(r=void 0);continue}if(n.length>0&&l===`\\`){c++;continue}if(n.length>0&&(l===`"`||l===`'`)){r=l;continue}if(n.length>0&&l===`/`&&e[c+1]===`*`){let t=e.indexOf(`*/`,c+2);if(t<0)break;c=t+1;continue}l===`(`||l===`[`?n+=l===`(`?`)`:`]`:l===n.at(-1)?n=n.slice(0,-1):n.length===0&&(l===`@`?(a===-1&&(a=c),t(s,c)):a===-1&&(l===`:`&&i===-1?i=c:l===`!`&&(o=c)))}let c=a===-1?e.length:a,l=e.slice(0,c),u=!1;o===c-1&&(u=!0,l=l.slice(0,-1));let d=[];for(let n=0;n<s.length;n++){let r=s[n]+1,i=n+1<s.length?s[n+1]:e.length;t(d,e.slice(r,i))}return i!==-1&&i<c?{raw:e,body:l,property:e.slice(0,i),value:l.slice(i+1),keyword:!1,important:u,conditions:d}:{raw:e,body:l,keyword:!0,important:u,conditions:d}}function r(e,t){let n=e.length;n in e?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,value:t,writable:!0}):e[n]=t}function i(e){let t=[],n=[],i=new Map,a=!1,o,s;for(let c=0;c<e.length;c++){let l=e[c];if(n.length===0){l===`\\`?(/\s/.test(e[c+1]??``)&&(o=void 0),c++):/\s/.test(l)?o=void 0:l===`"`||l===`'`?o=o===l?void 0:o??l:!o&&l===`[`&&r(n,c);continue}if((s||a)&&l===`[`&&/[:@\s]/.test(e[c-1])){r(n,c),i.set(c,s??a),a=!1,s=void 0;continue}if(a){l===`*`&&e[c+1]===`/`&&(a=!1,c++);continue}if(s){l===`\\`?c++:l===s&&(s=void 0);continue}if(l===`/`&&e[c+1]===`*`)a=!0,c++;else if(l===`"`||l===`'`)s=l;else if(l===`\\`)c++;else if(l===`[`)r(n,c);else if(l===`]`){let o=n.pop(),l=i.get(o);(/[:@]/.test(e[o-1])||e[c+1]===`:`)&&r(t,{end:c+1,start:o}),l===!0?a=!0:l&&(s=l)}}let c=[];for(let e of t.sort((e,t)=>e.start-t.start||t.end-e.end))(!c.length||e.start>=c.at(-1).end)&&r(c,e);return c}function a(e,t,n){let r=e[t];if(n.blockComment)return r===`*`&&e[t+1]===`/`?(n.blockComment=!1,t+1):t;if(n.quote)return r===`\\`?t+1:(r===n.quote&&(n.quote=void 0),t);if(n.closers.length>0&&r===`/`&&e[t+1]===`*`)return n.blockComment=!0,t+1;if(n.closers.length>0&&(r===`"`||r===`'`))return n.quote=r,t;if(n.closers.length>0&&r===`\\`)return t+1;if(r===`(`||r===`[`)return u(n.closers,r===`(`?`)`:`]`),t;if(r===n.closers.at(-1))return n.closers.pop(),t}function o(e,t,n=e.length){let r={closers:[]};for(let i=t+1;i<n;i++){let t=e[i],n=a(e,i,r);if(n!==void 0){i=n;continue}if(r.closers.length===0){if(t===`}`)return{index:i,kind:`close`};if(t===`{`)return{index:i,kind:`open`}}}return{index:n,kind:`limit`}}const s=/[\s'"`;{},\])]/;function c(e,t,n=e.length){if(e[t]!==`@`)return{conds:``,end:t};let r={closers:[]},i=t;for(;i<n;i++){let t=e[i],n=a(e,i,r);if(n!==void 0){i=n;continue}if(t===`/`&&(e[i+1]===`/`||e[i+1]===`*`)&&r.closers.length===0||s.test(t)&&r.closers.length===0)break}return{conds:e.slice(t,i),end:i}}function l(e){let t=[],n={closers:[]},r=0;for(let i=0;i<e.length;i++){let o=e[i],s=a(e,i,n);if(s!==void 0){i=s;continue}o===`;`&&n.closers.length===0&&(u(t,e.slice(r,i)),r=i+1)}return u(t,e.slice(r)),t.map(e=>e.trim()).filter(Boolean)}function u(e,t){Object.defineProperty(e,e.length,{configurable:!0,enumerable:!0,value:t,writable:!0})}const d=/^(?:--?[\w-]+|[A-Z_$][\w$-]*|@teacss-skip-bracket-[\da-z]{6})$/i;function f(e,t){let n=t;for(;n>0&&/[\w-]/.test(e[n-1]);)n--;if(n===t||e[n-1]!==`:`)return!1;let r=n-1,i=r;for(;i>0&&/[\w$@-]/.test(e[i-1]);)i--;if(!d.test(e.slice(i,r)))return!1;let a=i-1;for(;a>=0&&/\s/.test(e[a]);)a--;return a<0||!`{,?`.includes(e[a])}function p(e){let t=[],n=[],r=[],i=!1,a;for(let o=0;o<e.length;o++){let s=e[o],c=e[o+1];if(n.length===0){s===`(`&&f(e,o)&&u(n,{attached:!0,start:o});continue}if(i)s===`*`&&c===`/`&&(i=!1,o++);else if(a)s===`\\`?o++:s===a&&(a=void 0);else if(s===`\\`)o++;else if(s===`/`&&c===`*`)i=!0,o++;else if(s===`'`||s===`"`||s==="`")a=s;else if(r.length>0)s===`[`||s===`(`?u(r,s===`[`?`]`:`)`):s===r.at(-1)&&r.pop();else if(s===`[`)u(r,`]`);else if(s===`(`)u(n,{attached:f(e,o),start:o});else if(s===`)`){let e=n.pop();e.attached&&u(t,{end:o+1,start:e.start})}}let o=[];for(let e of t.sort((e,t)=>e.start-t.start||t.end-e.end))(o.length===0||e.start>=o.at(-1).end)&&u(o,e);return o}function m(e){if(!e.includes(`{`))return e;let t=``,n=0,r=-1,s=0,u=0,d=e.includes(`[`)?i(e):[],f=e.includes(`(`)?p(e):[],m={closers:[]};for(;n<e.length;){for(;s<d.length&&d[s].end<=n;)s++;for(;u<f.length&&f[u].end<=n;)u++;let i=s<d.length?d[s]:void 0,p=u<f.length?f[u]:void 0,h=i?.start===n?i:p?.start===n?p:void 0;if(h&&m.blockComment!==!0&&m.quote===void 0){t+=e.slice(n,h.end),n=h.end;continue}m.closers.length>0&&/\s/.test(e[n])&&(m.blockComment=!1,m.closers.length=0,m.quote=void 0);let g=a(e,n,m);if(g!==void 0){t+=e.slice(n,g+1),n=g+1;continue}let _=e[n];if(m.closers.length>0||_!==`{`){t+=_,n++;continue}let v=o(e,n);if(v.kind!==`close`){t+=e.slice(n,v.index),n=v.index;continue}let y=v.index,b=e.slice(n+1,y),{conds:x,end:S}=c(e,y+1),C=l(b);if(C.length===0){t+=_,n++;continue}r===n&&t.length>0&&!/\s/.test(t.at(-1))&&(t+=` `),t+=C.map(e=>`${e}${x}`).join(` `),r=S,n=S}return t}function h(e){let t=e.split(/\s+/);return t[0]===``&&t.shift(),t.at(-1)===``&&t.pop(),t}function g(e){if(!e.includes(`[`))return h(e);let t=i(e);if(t.length===0)return h(e);let n=[],a=0,o=-1;for(let i=0;i<e.length;i++){let s=t[a];if(s&&i===s.start){o<0&&(o=i),i=s.end-1,a++;continue}/\s/.test(e[i])?(o>=0&&r(n,e.slice(o,i)),o=-1):o<0&&(o=i)}return o>=0&&r(n,e.slice(o)),n}const _=!1;var v=class extends TypeError{name=`MergerProtocolError`;code;plugin;hook;constructor(e,t,n,r){super(`[TeaCSS merge:${e}] ${t}`),this.code=e,n!==void 0&&(this.plugin=n),r!==void 0&&(this.hook=r)}};function y(){return Object.create(null)}const b=`must have an integer length from 0 through 4294967294`,x=Symbol(`missing-own-value`);function S(e,t){return`value`in t?t.value:t.get===void 0?void 0:Reflect.apply(t.get,e,[])}function C(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return n===void 0?x:S(e,n)}function w(e,t){let n=C(e,t);return n===x?void 0:n}function ee(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function T(e,t){let n=e.length;n in e?ee(e,n,t):e[n]=t}function E(e){let t=C(e,`length`);return typeof t==`number`&&Number.isInteger(t)&&t>=0&&t<4294967295?t:null}function te(e){let t=``,n=E(e);if(n===null)throw new v(`INVALID_ARRAY_LENGTH`,`class-value array ${b}`);for(let r=0;r<n;r++){let n=C(e,r);if(n===x)continue;let i=ne(n);i&&(t+=(t&&` `)+i)}return t}function ne(e){if(!e)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`bigint`)return String(e);if(Array.isArray(e))return te(e);if(typeof e==`object`){let t=e,n=``;for(let e of Reflect.ownKeys(t)){if(typeof e!=`string`)continue;let r=Reflect.getOwnPropertyDescriptor(t,e);r===void 0||!r.enumerable||S(t,r)&&(n+=(n&&` `)+e)}return n}return``}function re(e,t){let n=e;for(let e of t){let t=n.children??=new Map,r=t.get(e);r===void 0&&(r=y(),t.set(e,r)),n=r}return n}function ie(e,t,n){let r=re(e,t);return n?r.keywords??=new Map:r.declarations??=new Map}function ae(e){if(e.length===0)return``;if(e.length===1){let t=C(e,0);return t===x?``:t??``}let t=y(),r=new Uint8Array(e.length),i=new Uint8Array(e.length);for(let a=0;a<e.length;a++){let o=n(e[a]),s=ie(t,o.conditions,o.keyword),c=o.property??o.body,l=s.get(c);r[a]=+!!o.important,l===void 0?s.set(c,a):r[l]!==0&&r[a]===0?i[a]=1:(i[l]=1,s.set(c,a))}let a=[];for(let t=0;t<e.length;t++)i[t]===0&&T(a,e[t]);return a.join(` `)}function oe(e,t){if(typeof e==`string`)return e.length===0?null:[e];if(!Array.isArray(e))return null;let n=E(e);if(n===null||n===0)return null;let r=[],i=null;for(let a=0;a<n;a++){let n=C(e,a);if(n===x||typeof n!=`string`||n.length===0)return null;(i===null?r.includes(n):i.has(n))||(T(r,n),i===null?r.length===(t?64:4)&&(i=new Set(r)):i.add(n))}return t&&r.length>1&&r.sort(),r}function se(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function D(e,t,n,r,i){for(let a of Reflect.ownKeys(t)){if(typeof a!=`string`)continue;let o=Reflect.getOwnPropertyDescriptor(t,a);if(o===void 0||!o.enumerable)continue;let s=oe(S(t,o),!0);if(s===null)throw new v(`INVALID_STATIC_CONFLICT`,`"${r}" ${n} "${a}" must contain at least one non-empty atom`,i);let c=e.get(a);if(c===void 0){e.set(a,{atoms:s,atomSet:s.length>4?new Set(s):null,source:r});continue}if(!se(c.atoms,s))throw new v(`STATIC_CONFLICT_COLLISION`,`static ${n} "${a}" has conflicting atom sets from "${c.source}" and "${r}"`,i)}}function ce(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function O(e){if(!ce(e))return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function le(e,t,n){if(!ce(e))throw new v(`INVALID_CONFLICT_META`,`"${t}" conflicts must be an object`,n);let r=w(e,`keywords`);if(!O(r))throw new v(`INVALID_CONFLICT_META`,`"${t}" keywords must be a record`,n);let i=w(e,`overlaps`);if(!O(i))throw new v(`INVALID_CONFLICT_META`,`"${t}" overlaps must be a record`,n);return{keywords:r,overlaps:i}}function k(e,t,n,r){if(n!==void 0){if(typeof n!=`function`)throw new v(`INVALID_PLUGIN_HOOK`,`plugin "${e}" ${t} must be a function`,e,r);return n}}function ue(e){let t=[],n=[],r=[],i=[],a=[],o=new Set,s=E(e);if(s===null)throw new v(`INVALID_OPTIONS`,`options.plugins must be an array with an integer length from 0 through 4294967294`);for(let c=0;c<s;c++){let s=C(e,c),l=s===x?void 0:s;if(!ce(l))throw new v(`INVALID_PLUGIN_NAME`,`plugin at index ${c} must have a non-empty name`);let u=w(l,`name`);if(typeof u!=`string`||u.length===0)throw new v(`INVALID_PLUGIN_NAME`,`plugin at index ${c} must have a non-empty name`);if(o.has(u))throw new v(`DUPLICATE_PLUGIN_NAME`,`duplicate plugin name "${u}"`,u);o.add(u);let d=w(l,`conflicts`),f=k(u,`tokens`,w(l,`tokens`),`tokens`),p=k(u,`group`,w(l,`group`),`group`),m=k(u,`finalize`,w(l,`finalize`),`finalize`),h=k(u,`resolveFamily`,w(l,`resolveFamily`),`resolveFamily`),g=k(u,`resolve`,w(l,`resolve`),`resolve`);if(h!==void 0&&g===void 0)throw new v(`INVALID_PLUGIN_HOOK`,`plugin "${u}" resolveFamily requires resolve`,u,`resolveFamily`);T(t,{name:u,conflicts:d===void 0?void 0:le(d,u,u)}),f!==void 0&&T(n,{name:u,hook:f}),p!==void 0&&T(r,{name:u,hook:p}),m!==void 0&&T(i,{name:u,hook:m}),g!==void 0&&T(a,{name:u,hook:g,family:h})}return{metadata:t,tokens:n,groups:r,finalizers:i,resolvers:a}}function de(e,t){let n=new Map,r=new Map;e!==void 0&&(D(n,e.keywords,`keyword`,`<options.conflicts>`),D(r,e.overlaps,`declaration`,`<options.conflicts>`));for(let e of t)e.conflicts!==void 0&&(D(n,e.conflicts.keywords,`keyword`,e.name,e.name),D(r,e.conflicts.overlaps,`declaration`,e.name,e.name));return{keywords:n,overlaps:r}}function fe(e){let t=n(e);return{raw:e,prefix:t.property??t.body,body:t.body,value:t.value,keyword:t.keyword,conditions:t.conditions,important:t.important}}function pe(){let e=new Map;return t=>{let n=e.get(t);if(n!==void 0)return n;let r=fe(t);return e.set(t,r),r}}function me(e,t,n){if(t.length===0)return e;let r=e,i={viewToken:n};for(let e of t){let t=e.hook,n=t(r,i),a=`plugin "${e.name}" tokens() must return an array of individual non-empty class tokens`;if(!Array.isArray(n))throw new v(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);let o=[],s=E(n);if(s===null)throw new v(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);for(let t=0;t<s;t++){let r=C(n,t);if(r===x||typeof r!=`string`||r.length===0)throw new v(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);let i=g(r);if(i.length!==1||i[0]!==r)throw new v(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);T(o,r)}r=o}return r}function A(e,t){let n=null;for(let r=0;r<t.length;r++){let i=t[r];if(i.family===void 0)continue;let a=i.family,o=a(e);if(o!==null&&(typeof o!=`string`||o.length===0))throw new v(`INVALID_RESOLVE_FAMILY_RESULT`,`plugin "${i.name}" resolveFamily() must return null or a non-empty string`,i.name,`resolveFamily`);o!==null&&((n??=Array.from({length:t.length},()=>null))[r]=o)}return n}function he(e,t,n,r,i,a){let o=a(e),s;for(let e of n){let n=e.hook,i=n(o);if(i===null)continue;if(i===!1)return s={id:t,view:o,atoms:[],atomSet:null,dynamic:!0,opaque:!0},{...s,resolverFamilies:null};let a=oe(i,!1);if(a===null)throw new v(`INVALID_GROUP_RESULT`,`plugin "${e.name}" group() must return null, MERGE_OPAQUE, or at least one non-empty atom`,e.name,`group`);return s={id:t,view:o,atoms:a,atomSet:a.length>4?new Set(a):null,dynamic:!0,opaque:!1},{...s,resolverFamilies:A(o,r)}}let c=o.keyword?i.keywords.get(o.prefix):i.overlaps.get(o.prefix);return c===void 0?(s={id:t,view:o,atoms:[o.keyword?`@teacss/classes:keyword:${o.prefix}`:`@teacss/classes:declaration:${o.prefix}`],atomSet:null,opaque:!1},{...s,resolverFamilies:A(o,r)}):(s={id:t,view:o,atoms:c.atoms,atomSet:c.atomSet,opaque:!1},{...s,resolverFamilies:A(o,r)})}function ge(e,t){let n=new Map;for(let r of e){if(!r.opaque)continue;let e=n.get(r.view.raw);e!==void 0&&(t[e]=1),n.set(r.view.raw,r.id)}}function j(e,t){return new v(`INVALID_FINALIZER_RESULT`,`plugin "${e}" finalize() returned invalid occurrence id ${typeof t==`bigint`?`${t}n`:typeof t==`number`||typeof t==`boolean`||t==null?String(t):typeof t}`,e,`finalize`)}function _e(e,t){let n=[];for(let r of e)!r.opaque&&t[r.id]===0&&T(n,r);return n}function ve(e,t,n,r){let i=!1,a=r;for(let r of t){let t=r.hook,o=t(a?_e(e,n):e.slice());if(o===null)continue;if(!Array.isArray(o))throw j(r.name,o);let s=E(o);if(s===null)throw new v(`INVALID_FINALIZER_RESULT`,`plugin "${r.name}" finalize() result ${b}`,r.name,`finalize`);if(s===0)continue;let c=new Set;for(let t=0;t<s;t++){let i=C(o,t);if(i===x)throw j(r.name,void 0);let a=i;if(!Number.isInteger(a))throw j(r.name,a);let s=a,l=e[s];if(l===void 0||l.opaque||n[s]!==0||c.has(s))throw j(r.name,a);c.add(s)}for(let e of c)n[e]=1;c.size!==0&&(i=!0,a=!0)}return i}function ye(e,t){return e.atomSet?.has(t)??e.atoms.includes(t)}function be(e,t){return e.dynamic!==!0&&t.dynamic!==!0&&e.view.keyword===t.view.keyword&&e.view.prefix===t.view.prefix}function xe(e,t){if(be(e,t))return!0;if(e.atoms.length<t.atoms.length)return!1;for(let n of t.atoms)if(!ye(e,n))return!1;return!0}function Se(e,t){if(e.atomSet!==null){for(let n of t.atoms)if(e.atomSet.has(n))return!0;return!1}if(t.atomSet!==null){for(let n of e.atoms)if(t.atomSet.has(n))return!0;return!1}for(let n of t.atoms)if(e.atoms.includes(n))return!0;return!1}function Ce(e,t){let n=re(e,t);return n.winners??=new Map}function we(e,t,n){let r=y();for(let i of e){if(i.opaque||t[i.id]!==0)continue;let a=Ce(r,i.view.conditions),o=n?`${i.view.keyword?`keyword`:`declaration`}:${i.view.prefix}`:i.atoms[0],s=a.get(o);if(s===void 0){a.set(o,i.id);continue}e[s].view.important&&!i.view.important?t[i.id]=1:(t[s]=1,a.set(o,i.id))}}function Te(e,t,n,r,i){return e.view.important===t.view.important?n||i===`symmetric`?`earlier`:`none`:t.view.important?n?`earlier`:`none`:r?`later`:`none`}function Ee(e,t,n,r){let i=xe(t,e),a=xe(e,t),o=Te(e,t,i,a,n);for(let n=0;n<r.length;n++){let s=r[n];if(s.family!==void 0){let r=e.resolverFamilies?.[n]??null,i=t.resolverFamilies?.[n]??null;if(r===null||r!==i)continue}let c=s.hook,l=c(e.view,t.view,{covers:i,earlierCoversLater:a,defaultDrop:o});if(l!==null){if(l===`earlier`||l===`later`||l===`none`)return l;throw new v(`INVALID_RESOLVE_RESULT`,`plugin "${s.name}" resolve() must return null, "earlier", "later", or "none"`,s.name,`resolve`)}}return o}function M(e,t,n,r,i){let a=Ee(e,t,n,r);a===`earlier`?i[e.id]=1:a===`later`&&(i[t.id]=1)}function De(e,t,n,r,i){let a=t[e];for(let o=e+1;o<t.length;o++){let e=t[o];se(a.view.conditions,e.view.conditions)&&(!be(a,e)&&!Se(a,e)||M(a,e,n,r,i))}}function Oe(e,t){let n=re(e,t);return n.postings??=new Map}function ke(e){let t=y(),n=[],r=[],i=e.length*(e.length-1)/2,a=0;for(let o=0;o<e.length;o++){let s=e[o],c=Oe(t,s.view.conditions),l=[];T(n,c),T(r,l);for(let e of s.atoms){let t=c.get(e);if(t===void 0&&(t=[],c.set(e,t)),a+=t.length,a>i)return null;T(l,t.length),T(t,o)}}return{postingMaps:n,positions:r,postingPairVisits:a}}function Ae(e,t,n,r){for(let i=0;i<e.length;i++)De(i,e,t,n,r)}function je(e,t,n,r,i,a){if(a!==null){we(e,r,a===`static-prefix`);return}let o=e;if(i){let t=[];for(let n of e)!n.opaque&&r[n.id]===0&&T(t,n);o=t}if(o.length<16){Ae(o,t,n,r);return}let s=ke(o);if(s===null){Ae(o,t,n,r);return}if(s.postingPairVisits===0)return;let c=new Uint32Array(o.length),l=[];for(let e=0;e<o.length;e++){let i=o[e],a=s.postingMaps[e],u=s.positions[e];if(i.atoms.length===1){let e=a.get(i.atoms[0]);for(let a=u[0]+1;a<e.length;a++)M(i,o[e[a]],t,n,r);continue}let d=0;for(let e=0;e<i.atoms.length;e++){let t=a.get(i.atoms[e]);d+=t.length-u[e]-1}if(d>=o.length-e-1){De(e,o,t,n,r);continue}l.length=0;let f=!0,p=e+1;for(let e=0;e<i.atoms.length;e++){let t=a.get(i.atoms[e]);for(let n=u[e]+1;n<t.length;n++){let e=t[n];c[e]!==p&&(c[e]=p,l.length!==0&&e<l[l.length-1]&&(f=!1),T(l,e))}}f||l.sort((e,t)=>e-t);for(let e of l)M(i,o[e],t,n,r)}}function Me(e,t,n,r,i){let a=me(e,r.tokens,i);if(a.length<2&&r.groups.length===0&&r.finalizers.length===0&&r.resolvers.length===0){if(a.length===0)return``;let e=C(a,0);return e===x?``:e??``}let o=[],s=!1,c=a.length>=16&&r.resolvers.every(e=>e.family!==void 0),l=c,u=c,d,f,p=0;for(let e=0;e<a.length;e++){let n=he(a[e],e,r.groups,r.resolvers,t,i);if(n.opaque)s=!0;else if(p++,n.atoms.length!==1&&(l=!1),n.dynamic===!0?u=!1:d===void 0?(d=n.view.prefix,f=n.view.keyword):(n.view.prefix!==d||n.view.keyword!==f)&&(u=!1),n.resolverFamilies!==null){for(let e of n.resolverFamilies)if(e!==null){l=!1,u=!1;break}}T(o,n)}let m=new Uint8Array(o.length);s&&ge(o,m);let h=ve(o,r.finalizers,m,s),g=p<16?null:l?`singleton`:u?`static-prefix`:null;je(o,n,r.resolvers,m,s||h,g);let _=[];for(let e of o)m[e.id]===0&&T(_,e.view.raw);return _.join(` `)}function Ne(e,t,n){let r=C(e,n);if(r===x)return``;if(typeof r==`string`)return r;if(Array.isArray(t)){let e=C(t,n);if(typeof e==`string`)return e}return``}function Pe(e){return typeof e==`number`||typeof e==`bigint`?String(e):ne(e)}function Fe(e,t,n){let r=``,i=E(e);if(i===null)throw new v(`INVALID_ARRAY_LENGTH`,`tagged-template strings ${b}`);for(let a=0;a<i;a++)if(r+=Ne(e,t,a),a+1<i&&a+1<n.length){let e=Pe(n[a+1]);r+=e}return r}function Ie(e={}){if(!O(e))throw new v(`INVALID_OPTIONS`,`options must be an object`);let t=w(e,`conflicts`),n=w(e,`overlap`),r=w(e,`plugins`),i=w(e,`cache`);if(n!==void 0&&n!==`precise`&&n!==`symmetric`)throw new v(`INVALID_OPTIONS`,`options.overlap must be "precise" or "symmetric"`);if(r!==void 0&&!Array.isArray(r))throw new v(`INVALID_OPTIONS`,`options.plugins must be an array`);let a=ue(r===void 0?[]:r),o=de(t===void 0?void 0:le(t,`<options.conflicts>`),a.metadata),s=a.tokens.length!==0||a.groups.length!==0||a.finalizers.length!==0||a.resolvers.length!==0,c=!s&&o.keywords.size===0&&o.overlaps.size===0,l=n??`precise`,u=1500;if(i===!1)u=0;else if(i!==void 0){if(!O(i))throw new v(`INVALID_CACHE_OPTIONS`,`options.cache must be false or an object`);let e=w(i,`max`);if(e!==void 0){if(typeof e!=`number`||!Number.isFinite(e)||!Number.isInteger(e)||e<0)throw new v(`INVALID_CACHE_OPTIONS`,`options.cache.max must be a finite non-negative integer`);u=e}}let d=u>0?new Map:null;function f(e){if(d!==null){let t=d.get(e);if(t!==void 0)return d.delete(e),d.set(e,t),t}let t=g(m(e).trim()),n=c?ae(t):Me(t,o,l,a,s?pe():fe);return d!==null&&(d.set(e,n),d.size>u&&d.delete(d.keys().next().value)),n}function p(...e){let t=e[0],n=Array.isArray(t)?C(t,`raw`):x;return f(Array.isArray(n)?Fe(t,n,e):te(e))}return p}const N=Object.prototype.propertyIsEnumerable,P=`definition.className`,F=`definition.variants`,I=`definition.defaultVariants`,L=`definition.compoundVariants`,R=`createDefiner options`,z=`${R}.merge`,B=`recipe props`,V=`className`,Le=`classKeys`,Re=`null is not allowed`,ze=`required own enumerable field`,Be=new Set([`className`,`variants`,`defaultVariants`,`compoundVariants`,`extend`]),Ve=new Set([`class`,`className`,`then`,`toJSON`,`toString`,`valueOf`]),He=new Set([`class`,`className`,`classKeys`]);function H(e){return e.length>16?new Set(e):void 0}function U(e,t,n){return t?.has(n)??e.includes(n)}function W(e,t){return TypeError(`[TeaCSS recipe] ${e}: ${t}`)}function G(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw W(t,`expected a plain record`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw W(t,`expected Object.prototype or null prototype`);return Object.keys(e)}function Ue(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw W(t,`expected a non-null, non-array object`);return Object.keys(e)}function K(e,t,n){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r===void 0||!r.enumerable)throw W(n,`expected an own enumerable field`);return`value`in r?r.value:r.get===void 0?void 0:Reflect.apply(r.get,e,[])}function We(e,t){let n=Reflect.getOwnPropertyDescriptor(e,`length`),r=n!==void 0&&`value`in n?n.value:void 0;if(typeof r!=`number`||!Number.isInteger(r)||r<0||r>=4294967295)throw W(t,`expected an array with a valid own length`);return r}function Ge(e,t,n){if(!Array.isArray(e))throw W(t,`expected an array`);let r=Object.keys(e),i=We(e,t);if(!n&&i===0)throw W(t,`expected a non-empty array`);if(r.length!==i)throw W(t,`expected a dense own-indexed array`);for(let e of r){let n=Number(e);if(!Number.isInteger(n)||n<0||n>=i||String(n)!==e)throw W(t,`expected a dense own-indexed array`)}let a=X(i);for(let n=0;n<i;n++)a[n]=K(e,n,`${t}[${n}]`);return a}function Ke(e,t){if(e.trim().length===0)throw W(t,`name must contain a non-whitespace character`)}function q(e){let t=te([e]);return t.length===0?void 0:t}function J(e,t,n){if(n===void 0)return;let r=N.call(e,t)?e[t]:void 0;e[t]=r===void 0?[n]:[...r,n]}function qe(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function Y(e,t){let n=e.length;n in e?qe(e,n,t):e[n]=t}function X(e){return Array.from({length:e},()=>void 0)}function Je(){return[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]}const Ye=Je().length;function Xe(e,t,n){t<Ye||!(t in e)?e[t]=n:qe(e,t,n)}function Z(e,t=e.length){let n=X(t),r=Math.min(e.length,t);for(let t=0;t<r;t++){if(!N.call(e,t))continue;let r=e[t];r!==void 0&&(n[t]=[...r])}return n}function Ze(e,t){return e.map(e=>{let n=Object.create(null);for(let r of Object.keys(e.choices))n[r]={fragmentsByPart:Z(e.choices[r].fragmentsByPart,t)};return{name:e.name,choices:n,booleanCapable:e.booleanCapable}})}function Q(e,t,n){if(e===null)return null;if(typeof e==`string`){if(!N.call(t.choices,e))throw W(n,`unknown choice ${JSON.stringify(e)}`);return e}if(typeof e==`number`){if(!Number.isFinite(e))throw W(n,`expected a finite numeric choice`);let r=String(e);if(!N.call(t.choices,r))throw W(n,`unknown choice ${JSON.stringify(r)}`);return r}if(typeof e==`boolean`){if(!t.booleanCapable)throw W(n,`boolean selection requires a true or false choice`);return String(e)}throw W(n,`expected null, a declared string or finite numeric choice, or a supported boolean state`)}function Qe(e,t,n){if(n&&(e=t.partNames.length===0?``:{}),typeof e==`string`){if(t!==void 0&&t.partNames.length>0)throw W(P,`must be a record when extending a multi-element recipe`);let n=t===void 0?X(1):Z(t.baseFragmentsByPart,1);return J(n,0,q(e)),{names:[],indexes:Object.create(null),baseFragments:n}}let r=G(e,P);if(t!==void 0&&t.partNames.length===0)throw W(P,`must be a string when extending a single-element recipe`);if(!n&&r.length===0)throw W(P,`expected at least one named class`);for(let e of r){let t=`${P}.${e}`;if(Ke(e,t),Ve.has(e))throw W(t,`reserved class name`)}let i=t===void 0?[]:[...t.partNames],a=Object.create(null);for(let e=0;e<i.length;e++)a[i[e]]=e;let o=t===void 0?[]:Z(t.baseFragmentsByPart),s=e;for(let e of r){let t=a[e];t===void 0&&(t=i.length,Y(i,e),a[e]=t,Y(o,void 0)),J(o,t,q(K(s,e,`${P}.${e}`)))}return{names:i,indexes:a,baseFragments:o}}function $e(e,t,n,r,i,a){if(n){if(typeof t!=`string`)throw W(i,`expected a primitive string`);J(e,0,q(t));return}let o=G(t,i);if(a&&o.length===0)throw W(i,`expected at least one class target`);let s=t;for(let t of o){let n=r[t];if(n===void 0)throw W(`${i}.${t}`,`unknown class target`);J(e,n,q(K(s,t,`${i}.${t}`)))}}function et(e,t,n,r,i){let a=t===void 0?[]:Ze(t.variants,i),o=Object.create(null);for(let e=0;e<a.length;e++)o[a[e].name]=e;if(e===void 0)return{variants:a,indexes:o};if(e===null)throw W(F,Re);let s=G(e,F),c=e;for(let e of s){let t=`${F}.${e}`;if(Ke(e,t),He.has(e))throw W(t,`reserved variant name`);let s=K(c,e,t),l=G(s,t);if(l.length===0)throw W(t,`expected at least one choice`);let u=s,d=o[e],f;d===void 0?(d=a.length,o[e]=d,f=Object.create(null),Y(a,{name:e,choices:f,booleanCapable:!1})):f=a[d].choices;for(let e of l){let a=`${t}.${e}`,o=K(u,e,a),s=f[e],c=s===void 0?X(i):Z(s.fragmentsByPart,i);$e(c,o,n,r,a,!1),f[e]={fragmentsByPart:c}}a[d]={name:e,choices:f,booleanCapable:N.call(f,`true`)||N.call(f,`false`)}}return{variants:a,indexes:o}}function tt(e,t,n,r){let i=X(n.length);if(t!==void 0){let e=Math.min(t.defaultStates.length,n.length);for(let n=0;n<e;n++)N.call(t.defaultStates,n)&&(i[n]=t.defaultStates[n])}if(e===void 0)return i;if(e===null)throw W(I,Re);let a=G(e,I),o=H(a);for(let e of a)if(r[e]===void 0)throw W(`${I}.${e}`,`unknown variant`);let s=e;for(let e=0;e<n.length;e++){let t=n[e];if(!U(a,o,t.name))continue;let r=`${I}.${t.name}`,c=K(s,t.name,r);c!==void 0&&(i[e]=Q(c,t,r))}return i}function nt(e,t,n){if(!Array.isArray(e)){if(e===void 0)throw W(n,`undefined is not a condition`);return[Q(e,t,n)]}let r=Ge(e,n,!1),i=[];for(let e=0;e<r.length;e++){let a=r[e];if(a===void 0)throw W(`${n}[${e}]`,`undefined is not a condition`);Y(i,Q(a,t,`${n}[${e}]`))}return i}function rt(e,t,n,r,i,a,o){let s=t===void 0?[]:t.compounds.map(e=>({conditions:e.conditions,fragmentsByPart:Z(e.fragmentsByPart,i)}));if(e===void 0)return s;if(e===null)throw W(L,Re);let c=Ge(e,L,!0);for(let e=0;e<c.length;e++){let t=c[e],l=`${L}[${e}]`,u=G(t,l),d=H(u),f=U(u,d,Le);if(!U(u,d,V))throw W(`${l}.className`,n||f?`required own enumerable string`:`required own enumerable class map`);for(let e of u)if(e!==V&&e!==Le&&o[e]===void 0)throw W(`${l}.${e}`,`unknown variant condition`);let p=t,m=[];for(let e=0;e<a.length;e++){let t=a[e];if(!U(u,d,t.name))continue;let n=`${l}.${t.name}`;Y(m,{variantIndex:e,states:nt(K(p,t.name,n),t,n)})}let h=`${l}.className`,g=K(p,V,h),_=X(i);if(f){let e=`${l}.classKeys`;if(n)throw W(e,`only valid for multi-element recipes`);if(typeof g!=`string`)throw W(h,`expected a primitive string when classKeys is present`);let t=Ge(K(p,Le,e),e,!1),i=q(g);for(let n=0;n<t.length;n++){let a=t[n],o=`${e}[${n}]`;if(typeof a!=`string`)throw W(o,`expected a declared class name`);let s=r[a];if(s===void 0)throw W(o,`unknown class target`);if(t.indexOf(a)!==n)throw W(o,`duplicate class target ${JSON.stringify(a)}`);J(_,s,i)}}else $e(_,g,n,r,h,!0);Y(s,{conditions:m,fragmentsByPart:_})}return s}function it(e,t){let n=G(e,`definition`);for(let e of n)if(!Be.has(e))throw W(`definition.${e}`,`unknown field`);let r=e,i;if(n.includes(`extend`)){let e=K(r,`extend`,`definition.extend`);if(e!==void 0&&(typeof e!=`function`||(i=t.get(e))===void 0))throw W(`definition.extend`,`expected a recipe from this exact definer`)}let a=n.includes(V);if(!a&&i===void 0)throw W(P,ze);let o=Qe(a?K(r,V,P):void 0,i,!a),s=o.baseFragments.length,c=o.names.length===0,l=et(n.includes(`variants`)?K(r,`variants`,F):void 0,i,c,o.indexes,s),u=tt(n.includes(`defaultVariants`)?K(r,`defaultVariants`,I):void 0,i,l.variants,l.indexes),d=rt(n.includes(`compoundVariants`)?K(r,`compoundVariants`,L):void 0,i,c,o.indexes,s,l.variants,l.indexes),f=X(s);for(let e of d)for(let t=0;t<s;t++)e.fragmentsByPart[t]!==void 0&&Y(f[t]??=[],e);return{partNames:o.names,baseFragmentsByPart:o.baseFragments,variants:l.variants,defaultStates:u,compounds:d,compoundsByPart:f}}function at(e,t){if(e===void 0)return t.defaultStates;let n=Ue(e,B),r=H(n);if(U(n,r,`class`))throw W(`${B}.class`,`reserved field`);if(U(n,r,V))throw W(`${B}.className`,`caller classes belong to a style resolver`);let i=e,a;for(let e=0;e<t.variants.length;e++){let o=t.variants[e];if(!U(n,r,o.name))continue;let s=`${B}.${o.name}`,c=K(i,o.name,s);c!==void 0&&(a??=[...t.defaultStates],a[e]=Q(c,o,s))}return a??t.defaultStates}function ot(e,t,n){if(t!==void 0){let e=n<Ye||N.call(t,n)?t[n]:void 0;if(e!==void 0)return e}return e[n]}function st(e,t,n){for(let r of e.conditions){let e=ot(t,n,r.variantIndex),i=!1;for(let t of r.states)if(e===t){i=!0;break}if(!i)return!1}return!0}function $(e,t,n){if(n===void 0)return t;for(let r of n)Xe(e,t,r),t++;return t}function ct(e,t,n,r,i,a,o){let s,c;if(r!==void 0){let t=Ue(r,a),n=H(t);if(U(t,n,`class`))throw W(`${a}.class`,`reserved field`);let i=r;for(let r=0;r<e.variants.length;r++){let o=e.variants[r];if(!U(t,n,o.name))continue;let c=`${a}.${o.name}`,l=K(i,o.name,c);l!==void 0&&(s??=Je(),Xe(s,r,Q(l,o,c)))}U(t,n,`className`)&&(c=K(i,`className`,`${a}.className`))}let l=Je(),u=$(l,0,e.baseFragmentsByPart[t]);for(let r=0;r<e.variants.length;r++){let i=ot(n,s,r);if(i==null)continue;let a=e.variants[r].choices[i];a!==void 0&&(u=$(l,u,a.fragmentsByPart[t]))}for(let r of e.compoundsByPart[t]??[])st(r,n,s)&&(u=$(l,u,r.fragmentsByPart[t]));c!==void 0&&(Xe(l,u,c),u++),l.length=u;let d=Reflect.apply(i,void 0,l);if(typeof d!=`string`)throw W(o,`merger must return a primitive string`);return d}function lt(e,t){return e.partNames.length===0?(n=>ct(e,0,e.defaultStates,n,t,B,`recipe result`)):(n=>{let r=at(n,e),i=Object.create(null);for(let n=0;n<e.partNames.length;n++){let a=e.partNames[n];i[a]=i=>ct(e,n,r,i,t,`style props.${a}`,`style result.${a}`)}return i})}function ut(e){let t=G(e,R);for(let e of t)if(e!==`merge`)throw W(R,`unknown field ${JSON.stringify(e)}`);if(!t.includes(`merge`))throw W(z,ze);let n=K(e,`merge`,z);if(typeof n!=`function`)throw W(z,`expected a callable merger`);let r=n,i=new WeakMap;return(e=>{let t=it(e,i),n=lt(t,r);return i.set(n,t),n})}export{_ as MERGE_OPAQUE,v as MergerProtocolError,ut as createDefiner,Ie as createMerger};
1
+ function e(e,t){let n={...e},r=new Set(t.map(e=>e.toLowerCase()));for(let e of Object.keys(n))r.has(e.toLowerCase())&&delete n[e];return n}function t(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function n(e,n){let r=e.length;r in e?t(e,r,n):e[r]=n}function r(e){let t=``,r,i=-1,a=-1,o=-1,s=[];for(let c=0;c<e.length;c++){let l=e[c];if(r){l===`\\`?c++:l===r&&(r=void 0);continue}if(t.length>0&&l===`\\`){c++;continue}if(t.length>0&&(l===`"`||l===`'`)){r=l;continue}if(t.length>0&&l===`/`&&e[c+1]===`*`){let t=e.indexOf(`*/`,c+2);if(t<0)break;c=t+1;continue}l===`(`||l===`[`?t+=l===`(`?`)`:`]`:l===t.at(-1)?t=t.slice(0,-1):t.length===0&&(l===`@`?(a===-1&&(a=c),n(s,c)):a===-1&&(l===`:`&&i===-1?i=c:l===`!`&&(o=c)))}let c=a===-1?e.length:a,l=e.slice(0,c),u=!1;c>0&&o===c-1&&(u=!0,l=l.slice(0,-1));let d=[];for(let t=0;t<s.length;t++){let r=s[t]+1,i=t+1<s.length?s[t+1]:e.length;n(d,e.slice(r,i))}return i!==-1&&i<c?{raw:e,body:l,property:e.slice(0,i),value:l.slice(i+1),keyword:!1,important:u,conditions:d}:{raw:e,body:l,keyword:!0,important:u,conditions:d}}function i(e,t){let n=e.length;n in e?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,value:t,writable:!0}):e[n]=t}function a(e){let t=[],n=[],r=new Map,a=!1,o,s;for(let c=0;c<e.length;c++){let l=e[c];if(n.length===0){l===`\\`?(/\s/.test(e[c+1]??``)&&(o=void 0),c++):/\s/.test(l)?o=void 0:l===`"`||l===`'`?o=o===l?void 0:o??l:!o&&l===`[`&&i(n,c);continue}if((s||a)&&l===`[`&&/[:@\s]/.test(e[c-1])){i(n,c),r.set(c,s??a),a=!1,s=void 0;continue}if(a){l===`*`&&e[c+1]===`/`&&(a=!1,c++);continue}if(s){l===`\\`?c++:l===s&&(s=void 0);continue}if(l===`/`&&e[c+1]===`*`)a=!0,c++;else if(l===`"`||l===`'`)s=l;else if(l===`\\`)c++;else if(l===`[`)i(n,c);else if(l===`]`){let o=n.pop(),l=r.get(o);(/[:@]/.test(e[o-1])||e[c+1]===`:`)&&i(t,{end:c+1,start:o}),l===!0?a=!0:l&&(s=l)}}let c=[];for(let e of t.sort((e,t)=>e.start-t.start||t.end-e.end))(!c.length||e.start>=c.at(-1).end)&&i(c,e);return c}function o(e,t,n){let r=e[t];if(n.blockComment)return r===`*`&&e[t+1]===`/`?(n.blockComment=!1,t+1):t;if(n.quote)return r===`\\`?t+1:(r===n.quote&&(n.quote=void 0),t);if(n.closers.length>0&&r===`/`&&e[t+1]===`*`)return n.blockComment=!0,t+1;if(n.closers.length>0&&(r===`"`||r===`'`))return n.quote=r,t;if(n.closers.length>0&&r===`\\`)return t+1;if(r===`(`||r===`[`)return d(n.closers,r===`(`?`)`:`]`),t;if(r===n.closers.at(-1))return n.closers.pop(),t}function s(e,t,n=e.length){let r={closers:[]};for(let i=t+1;i<n;i++){let t=e[i],n=o(e,i,r);if(n!==void 0){i=n;continue}if(r.closers.length===0){if(t===`}`)return{index:i,kind:`close`};if(t===`{`)return{index:i,kind:`open`}}}return{index:n,kind:`limit`}}const c=/[\s'"`;{},\])]/;function l(e,t,n=e.length){if(e[t]!==`@`)return{conds:``,end:t};let r={closers:[]},i=t;for(;i<n;i++){let t=e[i],n=o(e,i,r);if(n!==void 0){i=n;continue}if(t===`/`&&(e[i+1]===`/`||e[i+1]===`*`)&&r.closers.length===0||c.test(t)&&r.closers.length===0)break}return{conds:e.slice(t,i),end:i}}function u(e){let t=[],n={closers:[]},r=0;for(let i=0;i<e.length;i++){let a=e[i],s=o(e,i,n);if(s!==void 0){i=s;continue}a===`;`&&n.closers.length===0&&(d(t,e.slice(r,i)),r=i+1)}return d(t,e.slice(r)),t.map(e=>e.trim()).filter(Boolean)}function d(e,t){Object.defineProperty(e,e.length,{configurable:!0,enumerable:!0,value:t,writable:!0})}const f=/^(?:--?[\w-]+|[A-Z_$][\w$-]*|@teacss-skip-bracket-[\da-z]{6})$/i;function p(e,t){let n=t;for(;n>0&&/[\w-]/.test(e[n-1]);)n--;if(n===t||e[n-1]!==`:`)return!1;let r=n-1,i=r;for(;i>0&&/[\w$@-]/.test(e[i-1]);)i--;if(!f.test(e.slice(i,r)))return!1;let a=i-1;for(;a>=0&&/\s/.test(e[a]);)a--;return a<0||!`{,?`.includes(e[a])}function m(e){let t=[],n=[],r=[],i=!1,a;for(let o=0;o<e.length;o++){let s=e[o],c=e[o+1];if(n.length===0){s===`(`&&p(e,o)&&d(n,{attached:!0,start:o});continue}if(i)s===`*`&&c===`/`&&(i=!1,o++);else if(a)s===`\\`?o++:s===a&&(a=void 0);else if(s===`\\`)o++;else if(s===`/`&&c===`*`)i=!0,o++;else if(s===`'`||s===`"`||s==="`")a=s;else if(r.length>0)s===`[`||s===`(`?d(r,s===`[`?`]`:`)`):s===r.at(-1)&&r.pop();else if(s===`[`)d(r,`]`);else if(s===`(`)d(n,{attached:p(e,o),start:o});else if(s===`)`){let e=n.pop();e.attached&&d(t,{end:o+1,start:e.start})}}let o=[];for(let e of t.sort((e,t)=>e.start-t.start||t.end-e.end))(o.length===0||e.start>=o.at(-1).end)&&d(o,e);return o}function h(e){if(!e.includes(`{`))return e;let t=``,n=0,r=-1,i=0,c=0,d=e.includes(`[`)?a(e):[],f=e.includes(`(`)?m(e):[],p={closers:[]};for(;n<e.length;){for(;i<d.length&&d[i].end<=n;)i++;for(;c<f.length&&f[c].end<=n;)c++;let a=i<d.length?d[i]:void 0,m=c<f.length?f[c]:void 0,h=a?.start===n?a:m?.start===n?m:void 0;if(h&&p.blockComment!==!0&&p.quote===void 0){t+=e.slice(n,h.end),n=h.end;continue}p.closers.length>0&&/\s/.test(e[n])&&(p.blockComment=!1,p.closers.length=0,p.quote=void 0);let g=o(e,n,p);if(g!==void 0){t+=e.slice(n,g+1),n=g+1;continue}let _=e[n];if(p.closers.length>0||_!==`{`){t+=_,n++;continue}let v=s(e,n);if(v.kind!==`close`){t+=e.slice(n,v.index),n=v.index;continue}let y=v.index,b=e.slice(n+1,y),{conds:x,end:S}=l(e,y+1),C=u(b);if(C.length===0){t+=_,n++;continue}r===n&&t.length>0&&!/\s/.test(t.at(-1))&&(t+=` `),t+=C.map(e=>`${e}${x}`).join(` `),r=S,n=S}return t}function g(e){let t=e.split(/\s+/);return t[0]===``&&t.shift(),t.at(-1)===``&&t.pop(),t}function _(e){if(!e.includes(`[`))return g(e);let t=a(e);if(t.length===0)return g(e);let n=[],r=0,o=-1;for(let a=0;a<e.length;a++){let s=t[r];if(s&&a===s.start){o<0&&(o=a),a=s.end-1,r++;continue}/\s/.test(e[a])?(o>=0&&i(n,e.slice(o,a)),o=-1):o<0&&(o=a)}return o>=0&&i(n,e.slice(o)),n}const v=!1;var y=class extends TypeError{name=`MergerProtocolError`;code;plugin;hook;constructor(e,t,n,r){super(`[TeaCSS merge:${e}] ${t}`),this.code=e,n!==void 0&&(this.plugin=n),r!==void 0&&(this.hook=r)}};function b(){return Object.create(null)}const x=`must have an integer length from 0 through 4294967294`,S=Symbol(`missing-own-value`);function C(e,t){return`value`in t?t.value:t.get===void 0?void 0:Reflect.apply(t.get,e,[])}function w(e,t){let n=Reflect.getOwnPropertyDescriptor(e,t);return n===void 0?S:C(e,n)}function T(e,t){let n=w(e,t);return n===S?void 0:n}function ee(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function E(e,t){let n=e.length;n in e?ee(e,n,t):e[n]=t}function D(e){let t=w(e,`length`);return typeof t==`number`&&Number.isInteger(t)&&t>=0&&t<4294967295?t:null}function O(e){let t=``,n=D(e);if(n===null)throw new y(`INVALID_ARRAY_LENGTH`,`class-value array ${x}`);for(let r=0;r<n;r++){let n=w(e,r);if(n===S)continue;let i=te(n);i&&(t+=(t&&` `)+i)}return t}function te(e){if(!e)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`bigint`)return String(e);if(Array.isArray(e))return O(e);if(typeof e==`object`){let t=e,n=``;for(let e of Reflect.ownKeys(t)){if(typeof e!=`string`)continue;let r=Reflect.getOwnPropertyDescriptor(t,e);r===void 0||!r.enumerable||C(t,r)&&(n+=(n&&` `)+e)}return n}return``}function k(e,t){let n=e;for(let e of t){let t=n.children??=new Map,r=t.get(e);r===void 0&&(r=b(),t.set(e,r)),n=r}return n}function ne(e,t,n){let r=k(e,t);return n?r.keywords??=new Map:r.declarations??=new Map}function re(e){if(e.length===0)return``;if(e.length===1){let t=w(e,0);return t===S?``:t??``}let t=b(),n=new Uint8Array(e.length),i=new Uint8Array(e.length);for(let a=0;a<e.length;a++){let o=r(e[a]),s=ne(t,o.conditions,o.keyword),c=o.property??o.body,l=s.get(c);n[a]=+!!o.important,l===void 0?s.set(c,a):n[l]!==0&&n[a]===0?i[a]=1:(i[l]=1,s.set(c,a))}let a=[];for(let t=0;t<e.length;t++)i[t]===0&&E(a,e[t]);return a.join(` `)}function ie(e,t){if(typeof e==`string`)return e.length===0?null:[e];if(!Array.isArray(e))return null;let n=D(e);if(n===null||n===0)return null;let r=[],i=null;for(let a=0;a<n;a++){let n=w(e,a);if(n===S||typeof n!=`string`||n.length===0)return null;(i===null?r.includes(n):i.has(n))||(E(r,n),i===null?r.length===(t?64:4)&&(i=new Set(r)):i.add(n))}return t&&r.length>1&&r.sort(),r}function ae(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function A(e,t,n,r,i){for(let a of Reflect.ownKeys(t)){if(typeof a!=`string`)continue;let o=Reflect.getOwnPropertyDescriptor(t,a);if(o===void 0||!o.enumerable)continue;let s=ie(C(t,o),!0);if(s===null)throw new y(`INVALID_STATIC_CONFLICT`,`"${r}" ${n} "${a}" must contain at least one non-empty atom`,i);let c=e.get(a);if(c===void 0){e.set(a,{atoms:s,atomSet:s.length>4?new Set(s):null,source:r});continue}if(!ae(c.atoms,s))throw new y(`STATIC_CONFLICT_COLLISION`,`static ${n} "${a}" has conflicting atom sets from "${c.source}" and "${r}"`,i)}}function oe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function j(e){if(!oe(e))return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function se(e,t,n){if(!oe(e))throw new y(`INVALID_CONFLICT_META`,`"${t}" conflicts must be an object`,n);let r=T(e,`keywords`);if(!j(r))throw new y(`INVALID_CONFLICT_META`,`"${t}" keywords must be a record`,n);let i=T(e,`overlaps`);if(!j(i))throw new y(`INVALID_CONFLICT_META`,`"${t}" overlaps must be a record`,n);return{keywords:r,overlaps:i}}function M(e,t,n,r){if(n!==void 0){if(typeof n!=`function`)throw new y(`INVALID_PLUGIN_HOOK`,`plugin "${e}" ${t} must be a function`,e,r);return n}}function ce(e){let t=[],n=[],r=[],i=[],a=[],o=new Set,s=D(e);if(s===null)throw new y(`INVALID_OPTIONS`,`options.plugins must be an array with an integer length from 0 through 4294967294`);for(let c=0;c<s;c++){let s=w(e,c),l=s===S?void 0:s;if(!oe(l))throw new y(`INVALID_PLUGIN_NAME`,`plugin at index ${c} must have a non-empty name`);let u=T(l,`name`);if(typeof u!=`string`||u.length===0)throw new y(`INVALID_PLUGIN_NAME`,`plugin at index ${c} must have a non-empty name`);if(o.has(u))throw new y(`DUPLICATE_PLUGIN_NAME`,`duplicate plugin name "${u}"`,u);o.add(u);let d=T(l,`conflicts`),f=M(u,`tokens`,T(l,`tokens`),`tokens`),p=M(u,`group`,T(l,`group`),`group`),m=M(u,`finalize`,T(l,`finalize`),`finalize`),h=M(u,`resolveFamily`,T(l,`resolveFamily`),`resolveFamily`),g=M(u,`resolve`,T(l,`resolve`),`resolve`);if(h!==void 0&&g===void 0)throw new y(`INVALID_PLUGIN_HOOK`,`plugin "${u}" resolveFamily requires resolve`,u,`resolveFamily`);E(t,{name:u,conflicts:d===void 0?void 0:se(d,u,u)}),f!==void 0&&E(n,{name:u,hook:f}),p!==void 0&&E(r,{name:u,hook:p}),m!==void 0&&E(i,{name:u,hook:m}),g!==void 0&&E(a,{name:u,hook:g,family:h})}return{metadata:t,tokens:n,groups:r,finalizers:i,resolvers:a,allResolversScoped:a.every(e=>e.family!==void 0)}}function le(e,t){let n=new Map,r=new Map;e!==void 0&&(A(n,e.keywords,`keyword`,`<options.conflicts>`),A(r,e.overlaps,`declaration`,`<options.conflicts>`));for(let e of t)e.conflicts!==void 0&&(A(n,e.conflicts.keywords,`keyword`,e.name,e.name),A(r,e.conflicts.overlaps,`declaration`,e.name,e.name));return{keywords:n,overlaps:r}}function ue(e){let t=r(e);return{raw:e,prefix:t.property??t.body,body:t.body,value:t.value,keyword:t.keyword,conditions:t.conditions,important:t.important}}function de(){let e=new Map;return t=>{let n=e.get(t);if(n!==void 0)return n;let r=ue(t);return e.set(t,r),r}}function fe(e,t,n){if(t.length===0)return e;let r=e,i={viewToken:n};for(let e of t){let t=e.hook,n=t(r,i),a=`plugin "${e.name}" tokens() must return an array of individual non-empty class tokens`;if(!Array.isArray(n))throw new y(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);let o=[],s=D(n);if(s===null)throw new y(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);for(let t=0;t<s;t++){let r=w(n,t);if(r===S||typeof r!=`string`||r.length===0)throw new y(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);let i=_(r);if(i.length!==1||i[0]!==r)throw new y(`INVALID_TOKEN_TRANSFORM_RESULT`,a,e.name,`tokens`);E(o,r)}r=o}return r}function pe(e,t){let n=null;for(let r=0;r<t.length;r++){let i=t[r];if(i.family===void 0)continue;let a=i.family,o=a(e);if(o!==null&&(typeof o!=`string`||o.length===0))throw new y(`INVALID_RESOLVE_FAMILY_RESULT`,`plugin "${i.name}" resolveFamily() must return null or a non-empty string`,i.name,`resolveFamily`);o!==null&&((n??=Array.from({length:t.length},()=>null))[r]=o)}return n}function me(e,t,n,r,i,a){let o=a(e);for(let e of n){let n=e.hook,i=n(o);if(i===null)continue;if(i===!1)return{id:t,view:o,atoms:[],atomSet:null,pluginGrouped:!0,opaque:!0,resolverFamilies:null};let a=ie(i,!1);if(a===null)throw new y(`INVALID_GROUP_RESULT`,`plugin "${e.name}" group() must return null, MERGE_OPAQUE, or at least one non-empty atom`,e.name,`group`);return{id:t,view:o,atoms:a,atomSet:a.length>4?new Set(a):null,pluginGrouped:!0,opaque:!1,resolverFamilies:pe(o,r)}}let s=o.keyword?i.keywords.get(o.prefix):i.overlaps.get(o.prefix);return{id:t,view:o,atoms:s===void 0?[o.keyword?`@teacss/classes:keyword:${o.prefix}`:`@teacss/classes:declaration:${o.prefix}`]:s.atoms,atomSet:s===void 0?null:s.atomSet,opaque:!1,resolverFamilies:pe(o,r)}}function he(e,t){let n=new Map;for(let r of e){if(!r.opaque)continue;let e=n.get(r.view.raw);e!==void 0&&(t[e]=1),n.set(r.view.raw,r.id)}}function N(e,t){return new y(`INVALID_FINALIZER_RESULT`,`plugin "${e}" finalize() returned invalid occurrence id ${typeof t==`bigint`?`${t}n`:typeof t==`number`||typeof t==`boolean`||t==null?String(t):typeof t}`,e,`finalize`)}function ge(e,t){let n=[];for(let r of e)!r.opaque&&t[r.id]===0&&E(n,r);return n}function _e(e,t,n,r){let i=!1,a=r;for(let r of t){let t=r.hook,o=t(a?ge(e,n):e.slice());if(o===null)continue;if(!Array.isArray(o))throw N(r.name,o);let s=D(o);if(s===null)throw new y(`INVALID_FINALIZER_RESULT`,`plugin "${r.name}" finalize() result ${x}`,r.name,`finalize`);if(s===0)continue;let c=new Set;for(let t=0;t<s;t++){let i=w(o,t);if(i===S)throw N(r.name,void 0);let a=i;if(!Number.isInteger(a))throw N(r.name,a);let s=a,l=e[s];if(l===void 0||l.opaque||n[s]!==0||c.has(s))throw N(r.name,a);c.add(s)}for(let e of c)n[e]=1;c.size!==0&&(i=!0,a=!0)}return i}function ve(e,t){return e.atomSet?.has(t)??e.atoms.includes(t)}function ye(e,t){return e.pluginGrouped!==!0&&t.pluginGrouped!==!0&&e.view.keyword===t.view.keyword&&e.view.prefix===t.view.prefix}function be(e,t){if(ye(e,t))return!0;if(e.atoms.length<t.atoms.length)return!1;for(let n of t.atoms)if(!ve(e,n))return!1;return!0}function xe(e,t){if(e.atomSet!==null){for(let n of t.atoms)if(e.atomSet.has(n))return!0;return!1}if(t.atomSet!==null){for(let n of e.atoms)if(t.atomSet.has(n))return!0;return!1}for(let n of t.atoms)if(e.atoms.includes(n))return!0;return!1}function Se(e,t){let n=k(e,t);return n.winners??=new Map}function Ce(e,t,n){let r=b();for(let i of e){if(i.opaque||t[i.id]!==0)continue;let a=n?ne(r,i.view.conditions,i.view.keyword):Se(r,i.view.conditions),o=n?i.view.prefix:i.atoms[0],s=a.get(o);if(s===void 0){a.set(o,i.id);continue}e[s].view.important&&!i.view.important?t[i.id]=1:(t[s]=1,a.set(o,i.id))}}function we(e,t,n,r,i){return e.view.important===t.view.important?n||i===`symmetric`?`earlier`:`none`:t.view.important?n?`earlier`:`none`:r?`later`:`none`}function Te(e,t,n,r){let i=be(t,e),a=be(e,t),o=we(e,t,i,a,n);for(let n=0;n<r.length;n++){let s=r[n];if(s.family!==void 0){let r=e.resolverFamilies?.[n]??null,i=t.resolverFamilies?.[n]??null;if(r===null||r!==i)continue}let c=s.hook,l=c(e.view,t.view,{covers:i,earlierCoversLater:a,defaultDrop:o});if(l!==null){if(l===`earlier`||l===`later`||l===`none`)return l;throw new y(`INVALID_RESOLVE_RESULT`,`plugin "${s.name}" resolve() must return null, "earlier", "later", or "none"`,s.name,`resolve`)}}return o}function P(e,t,n,r,i){let a=Te(e,t,n,r);a===`earlier`?i[e.id]=1:a===`later`&&(i[t.id]=1)}function Ee(e,t,n,r,i){let a=t[e];for(let o=e+1;o<t.length;o++){let e=t[o];ae(a.view.conditions,e.view.conditions)&&(!ye(a,e)&&!xe(a,e)||P(a,e,n,r,i))}}function De(e,t){let n=k(e,t);return n.postings??=new Map}function Oe(e){let t=b(),n=[],r=[],i=e.length*(e.length-1)/2,a=0;for(let o=0;o<e.length;o++){let s=e[o],c=De(t,s.view.conditions),l=[];E(n,c),E(r,l);for(let e of s.atoms){let t=c.get(e);if(t===void 0&&(t=[],c.set(e,t)),a+=t.length,a>i)return null;E(l,t.length),E(t,o)}}return{postingMaps:n,positions:r,postingPairVisits:a}}function ke(e,t,n,r){for(let i=0;i<e.length;i++)Ee(i,e,t,n,r)}function Ae(e,t,n,r,i,a){if(a!==null){Ce(e,r,a===`static-prefix`);return}let o=i?ge(e,r):e;if(o.length<16){ke(o,t,n,r);return}let s=Oe(o);if(s===null){ke(o,t,n,r);return}if(s.postingPairVisits===0)return;let c=new Uint32Array(o.length),l=[];for(let e=0;e<o.length;e++){let i=o[e],a=s.postingMaps[e],u=s.positions[e];if(i.atoms.length===1){let e=a.get(i.atoms[0]);for(let a=u[0]+1;a<e.length;a++)P(i,o[e[a]],t,n,r);continue}let d=0;for(let e=0;e<i.atoms.length;e++){let t=a.get(i.atoms[e]);d+=t.length-u[e]-1}if(d>=o.length-e-1){Ee(e,o,t,n,r);continue}l.length=0;let f=!0,p=e+1;for(let e=0;e<i.atoms.length;e++){let t=a.get(i.atoms[e]);for(let n=u[e]+1;n<t.length;n++){let e=t[n];c[e]!==p&&(c[e]=p,l.length!==0&&e<l[l.length-1]&&(f=!1),E(l,e))}}f||l.sort((e,t)=>e-t);for(let e of l)P(i,o[e],t,n,r)}}function je(e,t,n,r,i){let a=fe(e,r.tokens,i);if(a.length<2&&r.groups.length===0&&r.finalizers.length===0&&r.resolvers.length===0){if(a.length===0)return``;let e=w(a,0);return e===S?``:e??``}let o=[],s=!1,c=a.length>=16&&r.allResolversScoped,l=c,u=c,d,f,p=0;for(let e=0;e<a.length;e++){let n=me(a[e],e,r.groups,r.resolvers,t,i);if(n.opaque)s=!0;else if(p++,n.atoms.length!==1&&(l=!1),n.pluginGrouped===!0?u=!1:d===void 0?(d=n.view.prefix,f=n.view.keyword):(n.view.prefix!==d||n.view.keyword!==f)&&(u=!1),n.resolverFamilies!==null){for(let e of n.resolverFamilies)if(e!==null){l=!1,u=!1;break}}E(o,n)}let m=new Uint8Array(o.length);s&&he(o,m);let h=_e(o,r.finalizers,m,s),g=p<16?null:l?`singleton`:u?`static-prefix`:null;Ae(o,n,r.resolvers,m,s||h,g);let _=[];for(let e of o)m[e.id]===0&&E(_,e.view.raw);return _.join(` `)}function Me(e,t,n){let r=w(e,n);if(r===S)return``;if(typeof r==`string`)return r;if(Array.isArray(t)){let e=w(t,n);if(typeof e==`string`)return e}return``}function Ne(e){return typeof e==`number`||typeof e==`bigint`?String(e):te(e)}function Pe(e,t,n){let r=``,i=D(e);if(i===null)throw new y(`INVALID_ARRAY_LENGTH`,`tagged-template strings ${x}`);for(let a=0;a<i;a++)if(r+=Me(e,t,a),a+1<i&&a+1<n.length){let e=Ne(n[a+1]);r+=e}return r}function Fe(e={}){if(!j(e))throw new y(`INVALID_OPTIONS`,`options must be an object`);let t=T(e,`conflicts`),n=T(e,`overlap`),r=T(e,`plugins`),i=T(e,`cache`);if(n!==void 0&&n!==`precise`&&n!==`symmetric`)throw new y(`INVALID_OPTIONS`,`options.overlap must be "precise" or "symmetric"`);if(r!==void 0&&!Array.isArray(r))throw new y(`INVALID_OPTIONS`,`options.plugins must be an array`);let a=ce(r===void 0?[]:r),o=le(t===void 0?void 0:se(t,`<options.conflicts>`),a.metadata),s=a.tokens.length!==0||a.groups.length!==0||a.finalizers.length!==0||a.resolvers.length!==0,c=!s&&o.keywords.size===0&&o.overlaps.size===0,l=n??`precise`,u=1500;if(i===!1)u=0;else if(i!==void 0){if(!j(i))throw new y(`INVALID_CACHE_OPTIONS`,`options.cache must be false or an object`);let e=T(i,`max`);if(e!==void 0){if(typeof e!=`number`||!Number.isFinite(e)||!Number.isInteger(e)||e<0)throw new y(`INVALID_CACHE_OPTIONS`,`options.cache.max must be a finite non-negative integer`);u=e}}let d=u>0?new Map:null;function f(e){if(d!==null){let t=d.get(e);if(t!==void 0)return d.delete(e),d.set(e,t),t}let t=_(h(e).trim()),n=c?re(t):je(t,o,l,a,s?de():ue);return d!==null&&(d.set(e,n),d.size>u&&d.delete(d.keys().next().value)),n}function p(...e){let t=e[0],n=Array.isArray(t)?w(t,`raw`):S;return f(Array.isArray(n)?Pe(t,n,e):O(e))}return p}const F=Object.prototype.propertyIsEnumerable,I=`definition.className`,L=`definition.variants`,R=`definition.defaultVariants`,z=`definition.compoundVariants`,B=`createReciper options`,V=`${B}.merge`,H=`recipe props`,U=`className`,Ie=`classKeys`,Le=`null is not allowed`,Re=`required own enumerable field`,ze=new Set([`className`,`variants`,`defaultVariants`,`compoundVariants`,`extend`]),Be=new Set([`class`,`className`,`then`,`toJSON`,`toString`,`valueOf`]),Ve=new Set([`class`,`className`,`classKeys`]);function W(e){return e.length>16?new Set(e):void 0}function G(e,t,n){return t?.has(n)??e.includes(n)}function K(e,t){return TypeError(`[TeaCSS recipe] ${e}: ${t}`)}function q(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw K(t,`expected a plain record`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw K(t,`expected Object.prototype or null prototype`);return Object.keys(e)}function He(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw K(t,`expected a non-null, non-array object`);return Object.keys(e)}function J(e,t,n){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r===void 0||!r.enumerable)throw K(n,`expected an own enumerable field`);return`value`in r?r.value:r.get===void 0?void 0:Reflect.apply(r.get,e,[])}function Ue(e,t){let n=Reflect.getOwnPropertyDescriptor(e,`length`),r=n!==void 0&&`value`in n?n.value:void 0;if(typeof r!=`number`||!Number.isInteger(r)||r<0||r>=4294967295)throw K(t,`expected an array with a valid own length`);return r}function We(e,t,n){if(!Array.isArray(e))throw K(t,`expected an array`);let r=Object.keys(e),i=Ue(e,t);if(!n&&i===0)throw K(t,`expected a non-empty array`);if(r.length!==i)throw K(t,`expected a dense own-indexed array`);for(let e of r){let n=Number(e);if(!Number.isInteger(n)||n<0||n>=i||String(n)!==e)throw K(t,`expected a dense own-indexed array`)}let a=Z(i);for(let n=0;n<i;n++)a[n]=J(e,n,`${t}[${n}]`);return a}function Ge(e,t){if(e.trim().length===0)throw K(t,`name must contain a non-whitespace character`)}function Y(e){let t=O([e]);return t.length===0?void 0:t}function X(e,t,n){if(n===void 0)return;let r=F.call(e,t)?e[t]:void 0;e[t]=r===void 0?[n]:[...r,n]}function Z(e){let t=Array(e);for(let n=0;n<e;n++)n in t?ee(t,n,void 0):t[n]=void 0;return t}function Ke(){return[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]}const qe=Ke().length;function Je(e,t,n){t<qe||!(t in e)?e[t]=n:ee(e,t,n)}function Q(e,t=e.length){let n=Z(t),r=Math.min(e.length,t);for(let t=0;t<r;t++){if(!F.call(e,t))continue;let r=e[t];r!==void 0&&(n[t]=[...r])}return n}function Ye(e,t){return e.map(e=>{let n=Object.create(null);for(let r of Object.keys(e.choices))n[r]={fragmentsBySlot:Q(e.choices[r].fragmentsBySlot,t)};return{name:e.name,choices:n,booleanCapable:e.booleanCapable}})}function $(e,t,n){if(e===null)return null;if(typeof e==`string`){if(!F.call(t.choices,e))throw K(n,`unknown choice ${JSON.stringify(e)}`);return e}if(typeof e==`number`){if(!Number.isFinite(e))throw K(n,`expected a finite numeric choice`);let r=String(e);if(!F.call(t.choices,r))throw K(n,`unknown choice ${JSON.stringify(r)}`);return r}if(typeof e==`boolean`){if(!t.booleanCapable)throw K(n,`boolean selection requires a true or false choice`);return String(e)}throw K(n,`expected null, a declared string or finite numeric choice, or a supported boolean state`)}function Xe(e,t,n){if(n&&(e=t.slotNames.length===0?``:{}),typeof e==`string`){if(t!==void 0&&t.slotNames.length>0)throw K(I,`must be a record when extending a multi-element recipe`);let n=t===void 0?Z(1):Q(t.baseFragmentsBySlot,1);return X(n,0,Y(e)),{names:[],indexes:Object.create(null),baseFragments:n}}let r=q(e,I);if(t!==void 0&&t.slotNames.length===0)throw K(I,`must be a string when extending a single-element recipe`);if(!n&&r.length===0)throw K(I,`expected at least one named class`);for(let e of r){let t=`${I}.${e}`;if(Ge(e,t),Be.has(e))throw K(t,`reserved class name`)}let i=t===void 0?[]:[...t.slotNames],a=Object.create(null);for(let e=0;e<i.length;e++)a[i[e]]=e;let o=t===void 0?[]:Q(t.baseFragmentsBySlot),s=e;for(let e of r){let t=a[e];t===void 0&&(t=i.length,E(i,e),a[e]=t,E(o,void 0)),X(o,t,Y(J(s,e,`${I}.${e}`)))}return{names:i,indexes:a,baseFragments:o}}function Ze(e,t,n,r,i,a){if(n){if(typeof t!=`string`)throw K(i,`expected a primitive string`);X(e,0,Y(t));return}let o=q(t,i);if(a&&o.length===0)throw K(i,`expected at least one class target`);let s=t;for(let t of o){let n=r[t];if(n===void 0)throw K(`${i}.${t}`,`unknown class target`);X(e,n,Y(J(s,t,`${i}.${t}`)))}}function Qe(e,t,n,r,i){let a=t===void 0?[]:Ye(t.variants,i),o=Object.create(null);for(let e=0;e<a.length;e++)o[a[e].name]=e;if(e===void 0)return{variants:a,indexes:o};if(e===null)throw K(L,Le);let s=q(e,L),c=e;for(let e of s){let t=`${L}.${e}`;if(Ge(e,t),Ve.has(e))throw K(t,`reserved variant name`);let s=J(c,e,t),l=q(s,t);if(l.length===0)throw K(t,`expected at least one choice`);let u=s,d=o[e],f;d===void 0?(d=a.length,o[e]=d,f=Object.create(null),E(a,{name:e,choices:f,booleanCapable:!1})):f=a[d].choices;for(let e of l){let a=`${t}.${e}`,o=J(u,e,a),s=f[e],c=s===void 0?Z(i):Q(s.fragmentsBySlot,i);Ze(c,o,n,r,a,!1),f[e]={fragmentsBySlot:c}}a[d]={name:e,choices:f,booleanCapable:F.call(f,`true`)||F.call(f,`false`)}}return{variants:a,indexes:o}}function $e(e,t,n,r){let i=Z(n.length);if(t!==void 0){let e=Math.min(t.defaultStates.length,n.length);for(let n=0;n<e;n++)F.call(t.defaultStates,n)&&(i[n]=t.defaultStates[n])}if(e===void 0)return i;if(e===null)throw K(R,Le);let a=q(e,R),o=W(a);for(let e of a)if(r[e]===void 0)throw K(`${R}.${e}`,`unknown variant`);let s=e;for(let e=0;e<n.length;e++){let t=n[e];if(!G(a,o,t.name))continue;let r=`${R}.${t.name}`,c=J(s,t.name,r);c!==void 0&&(i[e]=$(c,t,r))}return i}function et(e,t,n){if(!Array.isArray(e)){if(e===void 0)throw K(n,`undefined is not a condition`);return[$(e,t,n)]}let r=We(e,n,!1),i=[];for(let e=0;e<r.length;e++){let a=r[e];if(a===void 0)throw K(`${n}[${e}]`,`undefined is not a condition`);E(i,$(a,t,`${n}[${e}]`))}return i}function tt(e,t,n,r,i,a,o){let s=t===void 0?[]:t.compounds.map(e=>({conditions:e.conditions,fragmentsBySlot:Q(e.fragmentsBySlot,i)}));if(e===void 0)return s;if(e===null)throw K(z,Le);let c=We(e,z,!0);for(let e=0;e<c.length;e++){let t=c[e],l=`${z}[${e}]`,u=q(t,l),d=W(u),f=G(u,d,Ie);if(!G(u,d,U))throw K(`${l}.className`,n||f?`required own enumerable string`:`required own enumerable class map`);for(let e of u)if(e!==U&&e!==Ie&&o[e]===void 0)throw K(`${l}.${e}`,`unknown variant condition`);let p=t,m=[];for(let e=0;e<a.length;e++){let t=a[e];if(!G(u,d,t.name))continue;let n=`${l}.${t.name}`;E(m,{variantIndex:e,states:et(J(p,t.name,n),t,n)})}let h=`${l}.className`,g=J(p,U,h),_=Z(i);if(f){let e=`${l}.classKeys`;if(n)throw K(e,`only valid for multi-element recipes`);if(typeof g!=`string`)throw K(h,`expected a primitive string when classKeys is present`);let t=We(J(p,Ie,e),e,!1),i=Y(g);for(let n=0;n<t.length;n++){let a=t[n],o=`${e}[${n}]`;if(typeof a!=`string`)throw K(o,`expected a declared class name`);let s=r[a];if(s===void 0)throw K(o,`unknown class target`);if(t.indexOf(a)!==n)throw K(o,`duplicate class target ${JSON.stringify(a)}`);X(_,s,i)}}else Ze(_,g,n,r,h,!0);E(s,{conditions:m,fragmentsBySlot:_})}return s}function nt(e,t){let n=q(e,`definition`);for(let e of n)if(!ze.has(e))throw K(`definition.${e}`,`unknown field`);let r=e,i;if(n.includes(`extend`)){let e=J(r,`extend`,`definition.extend`);if(e!==void 0&&(typeof e!=`function`||(i=t.get(e))===void 0))throw K(`definition.extend`,`expected a recipe from this exact reciper`)}let a=n.includes(U);if(!a&&i===void 0)throw K(I,Re);let o=Xe(a?J(r,U,I):void 0,i,!a),s=o.baseFragments.length,c=o.names.length===0,l=Qe(n.includes(`variants`)?J(r,`variants`,L):void 0,i,c,o.indexes,s),u=$e(n.includes(`defaultVariants`)?J(r,`defaultVariants`,R):void 0,i,l.variants,l.indexes),d=tt(n.includes(`compoundVariants`)?J(r,`compoundVariants`,z):void 0,i,c,o.indexes,s,l.variants,l.indexes),f=Z(s);for(let e of d)for(let t=0;t<s;t++)e.fragmentsBySlot[t]!==void 0&&E(f[t]??=[],e);return{slotNames:o.names,baseFragmentsBySlot:o.baseFragments,variants:l.variants,defaultStates:u,compounds:d,compoundsBySlot:f}}function rt(e,t){if(e===void 0)return t.defaultStates;let n=He(e,H),r=W(n);if(G(n,r,`class`))throw K(`${H}.class`,`reserved field`);if(G(n,r,U))throw K(`${H}.className`,`caller classes belong to a style resolver`);let i=e,a;for(let e=0;e<t.variants.length;e++){let o=t.variants[e];if(!G(n,r,o.name))continue;let s=`${H}.${o.name}`,c=J(i,o.name,s);c!==void 0&&(a??=[...t.defaultStates],a[e]=$(c,o,s))}return a??t.defaultStates}function it(e,t,n){if(t!==void 0){let e=n<qe||F.call(t,n)?t[n]:void 0;if(e!==void 0)return e}return e[n]}function at(e,t,n){for(let r of e.conditions){let e=it(t,n,r.variantIndex),i=!1;for(let t of r.states)if(e===t){i=!0;break}if(!i)return!1}return!0}function ot(e,t,n){if(n===void 0)return t;for(let r of n)Je(e,t,r),t++;return t}function st(e,t,n,r,i,a,o){let s,c;if(r!==void 0){let t=He(r,a),n=W(t);if(G(t,n,`class`))throw K(`${a}.class`,`reserved field`);let i=r;for(let r=0;r<e.variants.length;r++){let o=e.variants[r];if(!G(t,n,o.name))continue;let c=`${a}.${o.name}`,l=J(i,o.name,c);l!==void 0&&(s??=Ke(),Je(s,r,$(l,o,c)))}G(t,n,`className`)&&(c=J(i,`className`,`${a}.className`))}let l=Ke(),u=ot(l,0,e.baseFragmentsBySlot[t]);for(let r=0;r<e.variants.length;r++){let i=it(n,s,r);if(i==null)continue;let a=e.variants[r].choices[i];a!==void 0&&(u=ot(l,u,a.fragmentsBySlot[t]))}let d=e.compoundsBySlot[t];if(d!==void 0)for(let e of d)at(e,n,s)&&(u=ot(l,u,e.fragmentsBySlot[t]));c!==void 0&&(Je(l,u,c),u++),l.length=u;let f=Reflect.apply(i,void 0,l);if(typeof f!=`string`)throw K(o,`merger must return a primitive string`);return f}function ct(e,t,n){Object.defineProperty(e,t,{value:n,configurable:!0,enumerable:!0,writable:!0})}function lt(e){let t={};for(let n of e.variants)ct(t,n.name,Object.freeze(Object.keys(n.choices)));let n={};for(let t=0;t<e.variants.length;t++){let r=e.defaultStates[t];typeof r==`string`&&ct(n,e.variants[t].name,r)}return Object.freeze({slots:Object.freeze([...e.slotNames]),variants:Object.freeze(t),defaultVariants:Object.freeze(n),compoundVariantCount:e.compounds.length})}function ut(e,t){return Object.defineProperty(e,"config",{value:lt(t),configurable:!1,enumerable:!1,writable:!1}),e}function dt(e,t){return e.slotNames.length===0?ut((n=>st(e,0,e.defaultStates,n,t,H,`recipe result`)),e):ut((n=>{let r=rt(n,e),i=Object.create(null);for(let n=0;n<e.slotNames.length;n++){let a=e.slotNames[n];i[a]=i=>st(e,n,r,i,t,`style props.${a}`,`style result.${a}`)}return i}),e)}function ft(e){let t=q(e,B);for(let e of t)if(e!==`merge`)throw K(B,`unknown field ${JSON.stringify(e)}`);if(!t.includes(`merge`))throw K(V,Re);let n=J(e,`merge`,V);if(typeof n!=`function`)throw K(V,`expected a callable merger`);let r=n,i=new WeakMap;return(e=>{let t=nt(e,i),n=dt(t,r);return i.set(n,t),n})}export{v as MERGE_OPAQUE,y as MergerProtocolError,Fe as createMerger,ft as createReciper,e as omitAttributes};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teacss/classes",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "TeaCSS class composition — typed recipes, nested class-value joining, and semantic conflict resolution.",
5
5
  "homepage": "https://css.teasim.com",
6
6
  "funding": "https://github.com/sponsors/billgo",
@@ -22,7 +22,7 @@
22
22
  "dev": "tsdown --watch"
23
23
  },
24
24
  "devDependencies": {
25
- "@teacss/core": "0.3.2"
25
+ "@teacss/core": "0.3.4"
26
26
  },
27
27
  "engines": {
28
28
  "node": ">=22.12.0"