@teacss/classes 0.3.3 → 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 +15 -15
- package/dist/index.d.ts +61 -47
- package/dist/index.js +1 -1
- package/package.json +2 -2
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
|
|
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
|
-
###
|
|
205
|
+
### Reciper creation
|
|
206
206
|
|
|
207
|
-
`@teacss/classes` exports the `
|
|
208
|
-
|
|
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 {
|
|
212
|
+
import { createReciper, createMerger } from "@teacss/classes";
|
|
213
213
|
|
|
214
214
|
export const merge = createMerger({ conflicts, plugins });
|
|
215
|
-
export const recipe =
|
|
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
|
-
`
|
|
223
|
-
and no `merger` alias. Extension identity belongs to the exact
|
|
224
|
-
not merely to the merger. Its return type is the type-only `
|
|
225
|
-
export, so an integration can re-export its
|
|
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
|
|
230
|
-
peer-depends on `@teacss/classes` and exports the exact
|
|
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
|
-
|
|
233
|
-
and
|
|
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-
|
|
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
|
|
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
|
|
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;
|
|
@@ -138,18 +152,18 @@ type DefinitionVariantSelections<Variants extends VariantSchema> = VariantSelect
|
|
|
138
152
|
/**
|
|
139
153
|
* Read-only introspection snapshot carried by every recipe function so
|
|
140
154
|
* tooling (dead-token guards, docs generators, Storybook controls) can
|
|
141
|
-
* enumerate the variant space without parsing source.
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
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.
|
|
147
161
|
*/
|
|
148
162
|
interface RecipeIntrospection {
|
|
149
|
-
readonly
|
|
163
|
+
readonly slots: readonly string[];
|
|
150
164
|
readonly variants: Readonly<Record<string, readonly string[]>>;
|
|
151
165
|
readonly defaultVariants: Readonly<Record<string, string>>;
|
|
152
|
-
readonly
|
|
166
|
+
readonly compoundVariantCount: number;
|
|
153
167
|
}
|
|
154
168
|
type RecipeCarrier = {
|
|
155
169
|
readonly [Symbol.unscopables]: never;
|
|
@@ -165,15 +179,15 @@ type ValidateNonUnion<Value> = IsAny<Value> extends true ? unknown : true extend
|
|
|
165
179
|
type ValidateRecordShape<Value> = IsAny<Value> extends true ? unknown : true extends InvalidRecordShape<Value> ? never : unknown;
|
|
166
180
|
type ValidateKnownKeys<Value, Keys extends PropertyKey> = IsAny<Value> extends true ? unknown : Exclude<Extract<keyof Value, string | number>, Keys> extends never ? unknown : never;
|
|
167
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;
|
|
168
|
-
type
|
|
182
|
+
type SlotProps<Variants extends VariantSchema> = keyof Variants extends never ? ClassProp : VariantSelections<Variants> & ClassProp;
|
|
169
183
|
type SingleRecipeProps<Variants extends VariantSchema> = VariantSelections<Variants> & ClassProp;
|
|
170
|
-
type RecipeResult<
|
|
171
|
-
type TeaRecipeResult<
|
|
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>;
|
|
172
186
|
type TeaSingleRecipe<Variants extends VariantSchema> = (<const Input>(props?: Input & SingleRecipeProps<Variants> & NoInfer<ValidatePropsInput<Input, SingleRecipeProps<Variants>>>) => string) & RecipeCarrier;
|
|
173
|
-
type
|
|
187
|
+
type TeaMultiElementRecipe<Slots extends string, Variants extends VariantSchema> = (<const Input>(props?: Input & VariantSelections<Variants> & NoInfer<ValidatePropsInput<Input, VariantSelections<Variants>>>) => TeaRecipeResult<Slots, Variants>) & RecipeCarrier;
|
|
174
188
|
type BrandedRecipe = Function & RecipeCarrier;
|
|
175
189
|
type SingleBrandedRecipe = BrandedRecipe & ((props?: any) => string);
|
|
176
|
-
type
|
|
190
|
+
type MultiElementBrandedRecipe = BrandedRecipe & ((props?: any) => Readonly<Record<string, (props?: any) => string>>);
|
|
177
191
|
type SchemaFromSelections<Selections> = { readonly [Name in Exclude<Extract<keyof NonNullable<Selections>, string>, keyof ClassProp>]: Extract<NonNullable<Selections>[Name], string>; };
|
|
178
192
|
type ParentSchema<Parent> = [Parent] extends [RecipeCarrier & ((props?: infer Selections) => infer Result)] ? {
|
|
179
193
|
readonly classKeys: Result extends string ? never : Extract<keyof Result, string>;
|
|
@@ -185,9 +199,9 @@ type ParentSchema<Parent> = [Parent] extends [RecipeCarrier & ((props?: infer Se
|
|
|
185
199
|
type ParentClassKeys<Parent> = Extract<ParentSchema<Parent>["classKeys"], string>;
|
|
186
200
|
type ParentVariants<Parent> = ParentSchema<Parent>["variants"] extends (infer Variants extends VariantSchema) ? Variants : {};
|
|
187
201
|
type StylesInput = RecordInput;
|
|
188
|
-
type
|
|
189
|
-
type
|
|
190
|
-
type
|
|
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>>>;
|
|
191
205
|
type VariantsInput = RecordInput;
|
|
192
206
|
type OwnVariantSchema<Variants> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants as CanonicalKey<Name>]: CanonicalKeys<Variants[Name]>; } : {};
|
|
193
207
|
type VariantChoicesAt<Schema, Name extends PropertyKey> = Extract<Schema extends Readonly<Record<Name, infer Choices>> ? Choices : never, string>;
|
|
@@ -197,36 +211,36 @@ type CompoundConditions<Variants extends VariantSchema> = { readonly [Name in ke
|
|
|
197
211
|
type SingleCompoundDefinition<Variants extends VariantSchema> = {
|
|
198
212
|
readonly className: string;
|
|
199
213
|
} & CompoundConditions<Variants>;
|
|
200
|
-
type
|
|
201
|
-
readonly className:
|
|
214
|
+
type MultiElementCompoundDefinition<Slots extends string, Variants extends VariantSchema> = ({
|
|
215
|
+
readonly className: SlotTargetMap<NoInfer<Slots>>;
|
|
202
216
|
readonly classKeys?: never;
|
|
203
217
|
} | {
|
|
204
218
|
readonly className: string;
|
|
205
|
-
readonly classKeys: readonly [NoInfer<
|
|
219
|
+
readonly classKeys: readonly [NoInfer<Slots>, ...NoInfer<Slots>[]];
|
|
206
220
|
}) & CompoundConditions<Variants>;
|
|
207
|
-
type
|
|
221
|
+
type InvalidSlotNames<Styles> = Extract<SlotNames<Styles>, ReservedSlotName | StaticallyUnsafeSchemaName> | WhitespaceOnlyName<SlotNames<Styles>>;
|
|
208
222
|
type InvalidVariantNames<Variants> = Extract<CanonicalKeys<NonNullable<Variants>>, ReservedVariantName | StaticallyUnsafeSchemaName> | WhitespaceOnlyName<CanonicalKeys<NonNullable<Variants>>>;
|
|
209
223
|
type InvalidChoiceNames<Choices> = Extract<CanonicalKeys<Choices>, StaticallyUnsafeSchemaName>;
|
|
210
|
-
type
|
|
224
|
+
type AllowedSlotNames<Styles> = InvalidSlotNames<Styles> extends never ? unknown : never;
|
|
211
225
|
type AllowedVariantNames<Variants> = InvalidVariantNames<Variants> extends never ? unknown : never;
|
|
212
|
-
type ValidateStyles<Styles> =
|
|
213
|
-
type
|
|
214
|
-
type
|
|
215
|
-
type
|
|
216
|
-
type
|
|
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;
|
|
217
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;
|
|
218
|
-
type
|
|
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;
|
|
219
233
|
type ValidateSingleVariants<Variants> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants]: ValidateSingleChoices<Variants[Name]>; } : unknown;
|
|
220
|
-
type
|
|
234
|
+
type ValidateMultiElementVariants<Variants, Slots extends string> = [Variants] extends [VariantsInput] ? { readonly [Name in keyof Variants]: ValidateMultiElementChoices<Variants[Name], Slots>; } : unknown;
|
|
221
235
|
type ValidateCompoundCondition<Condition> = undefined extends Condition ? never : Condition extends readonly [] ? never : Condition;
|
|
222
236
|
type ValidateSingleCompoundOutput<Output> = IsAny<Output> extends true ? unknown : [Output] extends [string] ? Output : never;
|
|
223
|
-
type
|
|
237
|
+
type ValidateMultiElementCompoundOutput<Output, Slots extends string> = SlotTargetNames<Output> extends never ? never : ValidateSlotTargets<Output, Slots>;
|
|
224
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;
|
|
225
|
-
type ValidateCompoundClassKeys<Targets,
|
|
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;
|
|
226
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;
|
|
227
|
-
type
|
|
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;
|
|
228
242
|
type ValidateSingleCompounds<Compounds, Variants extends VariantSchema> = Compounds extends readonly unknown[] ? { readonly [Index in keyof Compounds]: ValidateSingleCompoundEntry<Compounds[Index], Variants>; } : unknown;
|
|
229
|
-
type
|
|
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;
|
|
230
244
|
type SingleRecipeDefinition<Style extends string, Parent extends SingleBrandedRecipe | undefined, Variants extends VariantsInput | undefined, Compounds extends readonly SingleCompoundDefinition<EffectiveVariants<Parent, Variants>>[] | undefined> = {
|
|
231
245
|
readonly className: Style;
|
|
232
246
|
readonly variants?: (Variants & ValidateStableSchema<Exclude<Variants, undefined>> & AllowedVariantNames<Variants> & ValidateSingleVariants<Variants>) | undefined;
|
|
@@ -234,11 +248,11 @@ type SingleRecipeDefinition<Style extends string, Parent extends SingleBrandedRe
|
|
|
234
248
|
readonly compoundVariants?: (Compounds & ValidateSingleCompounds<Compounds, EffectiveVariants<Parent, Variants>>) | undefined;
|
|
235
249
|
readonly extend?: (Parent & ValidateNonUnion<Parent>) | undefined;
|
|
236
250
|
};
|
|
237
|
-
type
|
|
238
|
-
readonly className: Styles & ValidateStyles<Styles> & ValidateStableSchema<Styles> &
|
|
239
|
-
readonly variants?: (Variants & ValidateStableSchema<Exclude<Variants, undefined>> & AllowedVariantNames<Variants> &
|
|
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;
|
|
240
254
|
readonly defaultVariants?: DefinitionVariantSelections<NoInfer<EffectiveVariants<Parent, Variants>>> | undefined;
|
|
241
|
-
readonly compoundVariants?: (Compounds &
|
|
255
|
+
readonly compoundVariants?: (Compounds & ValidateMultiElementCompounds<Compounds, EffectiveSlots<Parent, Styles>, EffectiveVariants<Parent, Variants>>) | undefined;
|
|
242
256
|
readonly extend?: (Parent & ValidateNonUnion<Parent>) | undefined;
|
|
243
257
|
};
|
|
244
258
|
type RecipeInference<Styles, Parent, Variants, Compounds> = {
|
|
@@ -252,22 +266,22 @@ type ExtendedRecipeInference<Styles, Parent, Variants, Compounds> = Omit<RecipeI
|
|
|
252
266
|
};
|
|
253
267
|
type InheritedRecipeInference<Parent, Variants, Compounds> = Omit<ExtendedRecipeInference<never, Parent, Variants, Compounds>, "className">;
|
|
254
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">;
|
|
255
|
-
type
|
|
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">;
|
|
256
270
|
type RecipeDefinitionField = "className" | "compoundVariants" | "defaultVariants" | "extend" | "variants";
|
|
257
271
|
type ValidateDefinitionInput<Definition> = ValidateRecordShape<Definition> & ValidateKnownKeys<Definition, RecipeDefinitionField>;
|
|
258
272
|
type ValidateInheritedDefinitionInput<Definition> = ValidateRecordShape<Definition> & ValidateKnownKeys<Definition, Exclude<RecipeDefinitionField, "className">>;
|
|
259
|
-
type
|
|
273
|
+
type Reciper = {
|
|
260
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>>;
|
|
261
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>>;
|
|
262
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>>;
|
|
263
|
-
<const Styles extends StylesInput, const Variants extends VariantsInput | undefined = undefined, const Compounds extends readonly
|
|
264
|
-
<const Parent extends
|
|
265
|
-
<const Parent extends
|
|
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>>;
|
|
266
280
|
};
|
|
267
281
|
type VariantProps<Recipe> = Recipe extends RecipeCarrier & ((props?: infer Props) => unknown) ? VariantSelections<SchemaFromSelections<Props>> : never;
|
|
268
|
-
declare function
|
|
282
|
+
declare function createReciper<const Options = unknown>(options: {
|
|
269
283
|
readonly merge: RecipeMerger;
|
|
270
|
-
} & Options & NoInfer<ValidateRecordShape<Options> & ValidateKnownKeys<Options, "merge">>):
|
|
271
|
-
declare function
|
|
284
|
+
} & Options & NoInfer<ValidateRecordShape<Options> & ValidateKnownKeys<Options, "merge">>): Reciper;
|
|
285
|
+
declare function createReciper(options: ReciperOptions): Reciper;
|
|
272
286
|
//#endregion
|
|
273
|
-
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
|
|
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;c>0&&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 D(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=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 D(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 ne(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 re(e,t,n){let r=ne(e,t);return n?r.keywords??=new Map:r.declarations??=new Map}function ie(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=re(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 ae(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 oe(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 O(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=ae(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(!oe(c.atoms,s))throw new v(`STATIC_CONFLICT_COLLISION`,`static ${n} "${a}" has conflicting atom sets from "${c.source}" and "${r}"`,i)}}function se(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function k(e){if(!se(e))return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function ce(e,t,n){if(!se(e))throw new v(`INVALID_CONFLICT_META`,`"${t}" conflicts must be an object`,n);let r=w(e,`keywords`);if(!k(r))throw new v(`INVALID_CONFLICT_META`,`"${t}" keywords must be a record`,n);let i=w(e,`overlaps`);if(!k(i))throw new v(`INVALID_CONFLICT_META`,`"${t}" overlaps must be a record`,n);return{keywords:r,overlaps:i}}function A(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 le(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(!se(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=A(u,`tokens`,w(l,`tokens`),`tokens`),p=A(u,`group`,w(l,`group`),`group`),m=A(u,`finalize`,w(l,`finalize`),`finalize`),h=A(u,`resolveFamily`,w(l,`resolveFamily`),`resolveFamily`),g=A(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:ce(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 ue(e,t){let n=new Map,r=new Map;e!==void 0&&(O(n,e.keywords,`keyword`,`<options.conflicts>`),O(r,e.overlaps,`declaration`,`<options.conflicts>`));for(let e of t)e.conflicts!==void 0&&(O(n,e.conflicts.keywords,`keyword`,e.name,e.name),O(r,e.conflicts.overlaps,`declaration`,e.name,e.name));return{keywords:n,overlaps:r}}function de(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 fe(){let e=new Map;return t=>{let n=e.get(t);if(n!==void 0)return n;let r=de(t);return e.set(t,r),r}}function pe(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 j(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 me(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=ae(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:j(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:j(o,r)}):(s={id:t,view:o,atoms:c.atoms,atomSet:c.atomSet,opaque:!1},{...s,resolverFamilies:j(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 M(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 ge(e,t){let n=[];for(let r of e)!r.opaque&&t[r.id]===0&&T(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 M(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 M(r.name,void 0);let a=i;if(!Number.isInteger(a))throw M(r.name,a);let s=a,l=e[s];if(l===void 0||l.opaque||n[s]!==0||c.has(s))throw M(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.dynamic!==!0&&t.dynamic!==!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=ne(e,t);return n.winners??=new Map}function Ce(e,t,n){let r=y();for(let i of e){if(i.opaque||t[i.id]!==0)continue;let a=Se(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 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 v(`INVALID_RESOLVE_RESULT`,`plugin "${s.name}" resolve() must return null, "earlier", "later", or "none"`,s.name,`resolve`)}}return o}function N(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];oe(a.view.conditions,e.view.conditions)&&(!ye(a,e)&&!xe(a,e)||N(a,e,n,r,i))}}function De(e,t){let n=ne(e,t);return n.postings??=new Map}function Oe(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=De(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 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=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){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++)N(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),T(l,e))}}f||l.sort((e,t)=>e-t);for(let e of l)N(i,o[e],t,n,r)}}function je(e,t,n,r,i){let a=pe(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=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.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&&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&&T(_,e.view.raw);return _.join(` `)}function Me(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 Ne(e){return typeof e==`number`||typeof e==`bigint`?String(e):te(e)}function Pe(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+=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(!k(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=le(r===void 0?[]:r),o=ue(t===void 0?void 0:ce(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(!k(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?ie(t):je(t,o,l,a,s?fe():de);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)?Pe(t,n,e):D(e))}return p}const P=Object.prototype.propertyIsEnumerable,F=`definition.className`,I=`definition.variants`,L=`definition.defaultVariants`,R=`definition.compoundVariants`,z=`createDefiner options`,Ie=`${z}.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=D([e]);return t.length===0?void 0:t}function J(e,t,n){if(n===void 0)return;let r=P.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(!P.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(!P.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(!P.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(F,`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,F);if(t!==void 0&&t.partNames.length===0)throw W(F,`must be a string when extending a single-element recipe`);if(!n&&r.length===0)throw W(F,`expected at least one named class`);for(let e of r){let t=`${F}.${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,`${F}.${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(I,Re);let s=G(e,I),c=e;for(let e of s){let t=`${I}.${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:P.call(f,`true`)||P.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++)P.call(t.defaultStates,n)&&(i[n]=t.defaultStates[n])}if(e===void 0)return i;if(e===null)throw W(L,Re);let a=G(e,L),o=H(a);for(let e of a)if(r[e]===void 0)throw W(`${L}.${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=`${L}.${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(R,Re);let c=Ge(e,R,!0);for(let e=0;e<c.length;e++){let t=c[e],l=`${R}[${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(F,ze);let o=Qe(a?K(r,V,F):void 0,i,!a),s=o.baseFragments.length,c=o.names.length===0,l=et(n.includes(`variants`)?K(r,`variants`,I):void 0,i,c,o.indexes,s),u=tt(n.includes(`defaultVariants`)?K(r,`defaultVariants`,L):void 0,i,l.variants,l.indexes),d=rt(n.includes(`compoundVariants`)?K(r,`compoundVariants`,R):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||P.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,n){Object.defineProperty(e,t,{value:n,configurable:!0,enumerable:!0,writable:!0})}function ut(e){let t={};for(let n of e.variants)lt(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`&<(n,e.variants[t].name,r)}return Object.freeze({elements:Object.freeze([...e.partNames]),variants:Object.freeze(t),defaultVariants:Object.freeze(n),compoundVariants:e.compounds.length})}function dt(e,t){return Object.defineProperty(e,"config",{value:ut(t),configurable:!1,enumerable:!1,writable:!1}),e}function ft(e,t){return e.partNames.length===0?dt((n=>ct(e,0,e.defaultStates,n,t,B,`recipe result`)),e):dt((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}),e)}function pt(e){let t=G(e,z);for(let e of t)if(e!==`merge`)throw W(z,`unknown field ${JSON.stringify(e)}`);if(!t.includes(`merge`))throw W(Ie,ze);let n=K(e,`merge`,Ie);if(typeof n!=`function`)throw W(Ie,`expected a callable merger`);let r=n,i=new WeakMap;return(e=>{let t=it(e,i),n=ft(t,r);return i.set(n,t),n})}export{_ as MERGE_OPAQUE,v as MergerProtocolError,pt as createDefiner,Fe 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.
|
|
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.
|
|
25
|
+
"@teacss/core": "0.3.4"
|
|
26
26
|
},
|
|
27
27
|
"engines": {
|
|
28
28
|
"node": ">=22.12.0"
|