@elastic/distillate 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/collector.js +129 -58
- package/dist/cjs/collector.js.map +1 -1
- package/dist/cjs/dom_sink.js +2 -2
- package/dist/cjs/dom_sink.js.map +1 -1
- package/dist/cjs/emotion.js.map +1 -1
- package/dist/cjs/engine.js +24 -8
- package/dist/cjs/engine.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sink.js +9 -0
- package/dist/cjs/sink.js.map +1 -0
- package/dist/collector.d.ts +18 -1
- package/dist/collector.d.ts.map +1 -1
- package/dist/collector.js +129 -58
- package/dist/collector.js.map +1 -1
- package/dist/dom_sink.d.ts +8 -12
- package/dist/dom_sink.d.ts.map +1 -1
- package/dist/dom_sink.js +2 -2
- package/dist/dom_sink.js.map +1 -1
- package/dist/emotion.d.ts +3 -6
- package/dist/emotion.d.ts.map +1 -1
- package/dist/emotion.js.map +1 -1
- package/dist/engine.d.ts +26 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +24 -8
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/sink.d.ts +16 -0
- package/dist/sink.d.ts.map +1 -0
- package/dist/sink.js +8 -0
- package/dist/sink.js.map +1 -0
- package/docs/concepts/collection.md +1 -1
- package/docs/getting-started/installation.md +5 -5
- package/docs/guides/react-renderer.md +45 -1
- package/docs/reference/api/emotion.md +58 -140
- package/docs/reference/api/index-1.md +452 -245
- package/docs/reference/api/testing.md +6 -6
- package/docs/reference/entry-points.md +18 -4
- package/docs/reference/okf-map.md +2 -1
- package/package.json +1 -1
- package/src/collector.ts +145 -59
- package/src/dom_sink.ts +9 -10
- package/src/emotion.ts +3 -6
- package/src/engine.ts +59 -9
- package/src/index.ts +14 -1
- package/src/sink.ts +25 -0
package/dist/cjs/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { StylesCollector, type StylesCollectorOptions } from './collector';\nimport type {\n DistilleryEnvironment,\n DistilleryOptions,\n ThemeVarDefinition,\n} from './environment';\nimport { assertCssIdentSegment } from './idents';\nimport {\n createStyleNameResolver,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleNameResolverOptions,\n} from './names';\nimport { renderStyles, type RenderStylesOptions } from './runtime';\nimport {\n createStyleModuleWithEnvironment,\n type PrimitiveStyleAuthoringApi,\n readableVarOwnersFromEnvironment,\n type ResolvedStyles,\n type StyleAuthoringApi,\n StyleRegistry,\n type StylesModule,\n type StylesObject,\n} from './styles';\nimport {\n deriveTheme,\n requireThemeVariation,\n resolveThemeValues,\n resolveThemeVariations,\n type ThemeTree,\n type TokensOf,\n type ValuesOf,\n} from './theme';\n\n/** One component library's binding: environment, registry, and pre-bound operations. Destructure-safe (no `this`). */\nexport interface Distillery<\n TTokens = unknown,\n TTheme extends ThemeTree = ThemeTree,\n> {\n /** Resolved environment (tokens, prefix, derived theme vars). */\n readonly environment: DistilleryEnvironment<TTokens>;\n /** Derived token tree, same object as `environment.tokens`. */\n readonly tokens: TTokens;\n /** Derived theme-var registry, same object as `environment.themeVars`. */\n readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;\n /** Nested literal values for one scheme. Optional `variation` is a name from `variations`. */\n readonly resolveValues: (\n scheme: 'light' | 'dark',\n variation?: string\n ) => ValuesOf<TTheme>;\n /** The module registry accumulating collected handles and rules. */\n readonly registry: StyleRegistry;\n /** When `true`, collectors warn about no-op handles. */\n readonly dev: boolean;\n /** Named handle tree plus tokens. */\n readonly createStyleModule: <TStyles extends StylesObject>(\n name: string,\n factory: (api: StyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Named handles plus tokens only. */\n readonly primitiveStyles: <TStyles extends StylesObject>(\n name: string,\n factory: (api: PrimitiveStyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Collector for one render. Class-name resolution collects as a side effect. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly artifactCollector: (\n names: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Collector preloaded with every registered module. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly stylesheetCollector: (\n names?: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Emits collected CSS for this environment. */\n readonly renderStyles: (\n collector: StylesCollector,\n resolver?: StyleNameResolver,\n options?: RenderStylesOptions\n ) => string;\n /** Creates a standalone name resolver using this distillery's prefix. */\n readonly createNameResolver: (\n options: Omit<StyleNameResolverOptions, 'prefix'>\n ) => StyleNameResolver;\n}\n\n/**\n * Binds the engine to one library's prefix and theme tree.\n *\n * @param options Brand prefix, theme scope, and authoring theme tree.\n * @throws If `prefix` is not a CSS identifier segment, if a theme key contains a hyphen, if a `lightDark` value is not a CSS `<color>`, if a named variation disagrees with the base, or if `themeVars` / `sharedVars` claim the same readable custom-property name.\n */\nexport const createDistillery = <const TTheme extends ThemeTree>(\n options: DistilleryOptions<TTheme>\n): Distillery<TokensOf<TTheme>, TTheme> => {\n const {\n prefix,\n themeScope,\n theme,\n sharedVars: sharedVarList,\n variations,\n dev = false,\n } = options;\n assertCssIdentSegment(prefix, 'Distillery prefix');\n const { tokens, themeVars } = deriveTheme(prefix, theme);\n const sharedVars = sharedVarList\n ? Object.freeze(new Set(sharedVarList))\n : undefined;\n const resolvedVariations = resolveThemeVariations(\n prefix,\n theme,\n themeVars,\n variations\n );\n const environment: DistilleryEnvironment<TokensOf<TTheme>> = {\n prefix,\n themeScope,\n themeVars: Object.freeze(themeVars),\n tokens,\n ...(sharedVars ? { sharedVars } : {}),\n ...(Object.keys(resolvedVariations).length > 0\n ? { variations: resolvedVariations }\n : {}),\n };\n const registry = new StyleRegistry(\n prefix,\n readableVarOwnersFromEnvironment(environment),\n sharedVars ?? new Set()\n );\n\n return {\n environment,\n tokens,\n themeVars: environment.themeVars,\n resolveValues: (scheme, variation) =>\n resolveThemeValues(\n theme,\n themeVars,\n scheme,\n variation === undefined\n ? undefined\n : requireThemeVariation(environment.variations, variation)\n ),\n registry,\n dev,\n createStyleModule: (name, factory) =>\n createStyleModuleWithEnvironment(environment, registry, name, factory),\n primitiveStyles: (name, factory) =>\n createStyleModuleWithEnvironment(\n environment,\n registry,\n name,\n ({ css: style, tokens: moduleTokens }) =>\n factory({ style, tokens: moduleTokens })\n ),\n artifactCollector: (names, options) =>\n new StylesCollector({\n target: 'artifact',\n names,\n registry,\n prefix,\n dev,\n ...(options?.warn ? { warn: options.warn } : {}),\n }),\n stylesheetCollector: (names = 'readable', options) => {\n const collector = new StylesCollector({\n target: 'stylesheet',\n names,\n registry,\n prefix,\n dev,\n ...(options?.warn ? { warn: options.warn } : {}),\n });\n for (const module of registry.modules) {\n collector.useAllEntries(module);\n }\n return collector;\n },\n renderStyles: (collector, resolver, renderOptions) =>\n renderStyles(environment, collector, resolver, renderOptions),\n createNameResolver: (resolverOptions) =>\n createStyleNameResolver({ ...resolverOptions, prefix }),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { StylesCollector, type StylesCollectorOptions } from './collector';\nimport type {\n DistilleryEnvironment,\n DistilleryOptions,\n ThemeVarDefinition,\n} from './environment';\nimport { assertCssIdentSegment } from './idents';\nimport {\n createStyleNameResolver,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleNameResolverOptions,\n} from './names';\nimport { renderStyles, type RenderStylesOptions } from './runtime';\nimport type { StyleSink } from './sink';\nimport {\n createStyleModuleWithEnvironment,\n type PrimitiveStyleAuthoringApi,\n readableVarOwnersFromEnvironment,\n type ResolvedStyles,\n type StyleAuthoringApi,\n type StyleHandle,\n StyleRegistry,\n type StylesModule,\n type StylesObject,\n} from './styles';\nimport {\n deriveTheme,\n requireThemeVariation,\n resolveThemeValues,\n resolveThemeVariations,\n type ThemeTree,\n type TokensOf,\n type ValuesOf,\n} from './theme';\n\n/** Sink, render options, and warning sink for {@link Distillery.liveCollection}. */\nexport interface LiveCollectionOptions {\n /** Invalidated whenever the collection grows. Nothing is written before the first handle. */\n sink?: StyleSink;\n /** Options forwarded to `renderStyles` by `css()`. */\n render?: RenderStylesOptions;\n /** Warning sink for no-op handles. Used only when the distillery has `dev: true`. */\n warn?: (message: string) => void;\n}\n\n/**\n * Readable collection filled by one live render.\n *\n * Readable only: compact names depend on the complete collected set and need two passes.\n */\nexport interface LiveCollection {\n /** Underlying readable artifact collector. Mutations here (e.g. `use(globalModule)`, `useThemeVar`) also invalidate the sink. */\n readonly collector: StylesCollector;\n /** Collects `handles` and returns their readable class names, space-separated. */\n readonly resolveClassName: (...handles: StyleHandle[]) => string;\n /** Renders the CSS collected so far. */\n readonly css: () => string;\n}\n\n/** One component library's binding: environment, registry, and pre-bound operations. Destructure-safe (no `this`). */\nexport interface Distillery<\n TTokens = unknown,\n TTheme extends ThemeTree = ThemeTree,\n> {\n /** Resolved environment (tokens, prefix, derived theme vars). */\n readonly environment: DistilleryEnvironment<TTokens>;\n /** Derived token tree, same object as `environment.tokens`. */\n readonly tokens: TTokens;\n /** Derived theme-var registry, same object as `environment.themeVars`. */\n readonly themeVars: Readonly<Record<string, ThemeVarDefinition>>;\n /** Nested literal values for one scheme. Optional `variation` is a name from `variations`. */\n readonly resolveValues: (\n scheme: 'light' | 'dark',\n variation?: string\n ) => ValuesOf<TTheme>;\n /** The module registry accumulating collected handles and rules. */\n readonly registry: StyleRegistry;\n /** When `true`, collectors warn about no-op handles. */\n readonly dev: boolean;\n /** Named handle tree plus tokens. */\n readonly createStyleModule: <TStyles extends StylesObject>(\n name: string,\n factory: (api: StyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Named handles plus tokens only. */\n readonly primitiveStyles: <TStyles extends StylesObject>(\n name: string,\n factory: (api: PrimitiveStyleAuthoringApi<TTokens>) => TStyles\n ) => StylesModule<ResolvedStyles<TStyles>>;\n /** Collector for one render. Class-name resolution collects as a side effect. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly artifactCollector: (\n names: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Collector preloaded with every registered module. No-op warnings require `dev: true`; pass `{ warn }` to capture them. */\n readonly stylesheetCollector: (\n names?: StyleNameMode,\n options?: Pick<StylesCollectorOptions, 'warn'>\n ) => StylesCollector;\n /** Readable collection for one live render; keeps `sink` current as handles resolve. */\n readonly liveCollection: (options?: LiveCollectionOptions) => LiveCollection;\n /** Emits collected CSS for this environment. */\n readonly renderStyles: (\n collector: StylesCollector,\n resolver?: StyleNameResolver,\n options?: RenderStylesOptions\n ) => string;\n /** Creates a standalone name resolver using this distillery's prefix. */\n readonly createNameResolver: (\n options: Omit<StyleNameResolverOptions, 'prefix'>\n ) => StyleNameResolver;\n}\n\n/**\n * Binds the engine to one library's prefix and theme tree.\n *\n * @param options Brand prefix, theme scope, and authoring theme tree.\n * @throws If `prefix` is not a CSS identifier segment, if a theme key contains a hyphen, if a `lightDark` value is not a CSS `<color>`, if a named variation disagrees with the base, or if `themeVars` / `sharedVars` claim the same readable custom-property name.\n */\nexport const createDistillery = <const TTheme extends ThemeTree>(\n options: DistilleryOptions<TTheme>\n): Distillery<TokensOf<TTheme>, TTheme> => {\n const {\n prefix,\n themeScope,\n theme,\n sharedVars: sharedVarList,\n variations,\n dev = false,\n } = options;\n assertCssIdentSegment(prefix, 'Distillery prefix');\n const { tokens, themeVars } = deriveTheme(prefix, theme);\n const sharedVars = sharedVarList\n ? Object.freeze(new Set(sharedVarList))\n : undefined;\n const resolvedVariations = resolveThemeVariations(\n prefix,\n theme,\n themeVars,\n variations\n );\n const environment: DistilleryEnvironment<TokensOf<TTheme>> = {\n prefix,\n themeScope,\n themeVars: Object.freeze(themeVars),\n tokens,\n ...(sharedVars ? { sharedVars } : {}),\n ...(Object.keys(resolvedVariations).length > 0\n ? { variations: resolvedVariations }\n : {}),\n };\n const registry = new StyleRegistry(\n prefix,\n readableVarOwnersFromEnvironment(environment),\n sharedVars ?? new Set()\n );\n\n const artifactCollector = (\n names: StyleNameMode,\n collectorOptions?: Pick<StylesCollectorOptions, 'warn'>\n ): StylesCollector =>\n new StylesCollector({\n target: 'artifact',\n names,\n registry,\n prefix,\n dev,\n ...(collectorOptions?.warn ? { warn: collectorOptions.warn } : {}),\n });\n\n return {\n environment,\n tokens,\n themeVars: environment.themeVars,\n resolveValues: (scheme, variation) =>\n resolveThemeValues(\n theme,\n themeVars,\n scheme,\n variation === undefined\n ? undefined\n : requireThemeVariation(environment.variations, variation)\n ),\n registry,\n dev,\n createStyleModule: (name, factory) =>\n createStyleModuleWithEnvironment(environment, registry, name, factory),\n primitiveStyles: (name, factory) =>\n createStyleModuleWithEnvironment(\n environment,\n registry,\n name,\n ({ css: style, tokens: moduleTokens }) =>\n factory({ style, tokens: moduleTokens })\n ),\n artifactCollector,\n stylesheetCollector: (names = 'readable', options) => {\n const collector = new StylesCollector({\n target: 'stylesheet',\n names,\n registry,\n prefix,\n dev,\n ...(options?.warn ? { warn: options.warn } : {}),\n });\n for (const module of registry.modules) {\n collector.useAllEntries(module);\n }\n return collector;\n },\n liveCollection: ({ sink, render, warn } = {}) => {\n const collector = artifactCollector('readable', warn ? { warn } : {});\n const css = (): string =>\n renderStyles(environment, collector, undefined, render);\n if (sink) {\n collector.subscribe(() => sink.invalidate(css));\n }\n return {\n collector,\n resolveClassName: (...handles) =>\n collector\n .useHandles(handles)\n .map((handle) => handle.readableName)\n .join(' '),\n css,\n };\n },\n renderStyles: (collector, resolver, renderOptions) =>\n renderStyles(environment, collector, resolver, renderOptions),\n createNameResolver: (resolverOptions) =>\n createStyleNameResolver({ ...resolverOptions, prefix }),\n };\n};\n"]}
|
package/dist/cjs/index.js
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* 2.0.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.variants = exports.StyleRegistry = exports.rule = exports.media = exports.mapDomain = exports.decls = exports.css = exports.container = exports.combineClassNames = exports.renderStyles = exports.StylesCollector = exports.cssVarName = exports.createStyleNameResolver = exports.themeToken = exports.scaleToken = exports.lightDark = exports.isScaleToken = exports.isCssToken = exports.isContextualCssVarName = exports.isContextualCssVar = exports.cq = exports.contextualVar = exports.zipSchemes = exports.resolveThemeValues = exports.createDistillery = void 0;
|
|
9
|
+
exports.variants = exports.StyleRegistry = exports.rule = exports.media = exports.mapDomain = exports.decls = exports.css = exports.container = exports.combineClassNames = exports.renderStyles = exports.StylesCollector = exports.cssVarName = exports.createStyleNameResolver = exports.themeToken = exports.scaleToken = exports.lightDark = exports.isScaleToken = exports.isCssToken = exports.isContextualCssVarName = exports.isContextualCssVar = exports.cq = exports.contextualVar = exports.zipSchemes = exports.resolveThemeValues = exports.createDomSink = exports.createDistillery = void 0;
|
|
10
10
|
var engine_1 = require("./engine");
|
|
11
11
|
Object.defineProperty(exports, "createDistillery", { enumerable: true, get: function () { return engine_1.createDistillery; } });
|
|
12
|
+
var dom_sink_1 = require("./dom_sink");
|
|
13
|
+
Object.defineProperty(exports, "createDomSink", { enumerable: true, get: function () { return dom_sink_1.createDomSink; } });
|
|
12
14
|
var theme_1 = require("./theme");
|
|
13
15
|
Object.defineProperty(exports, "resolveThemeValues", { enumerable: true, get: function () { return theme_1.resolveThemeValues; } });
|
|
14
16
|
Object.defineProperty(exports, "zipSchemes", { enumerable: true, get: function () { return theme_1.zipSchemes; } });
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mCAKkB;AAJhB,0GAAA,gBAAgB,OAAA;AAKlB,uCAMoB;AALlB,yGAAA,aAAa,OAAA;AAYf,iCAaiB;AAZf,2GAAA,kBAAkB,OAAA;AAClB,mGAAA,UAAU,OAAA;AAYZ,mCAekB;AAdhB,uGAAA,aAAa,OAAA;AACb,4FAAA,EAAE,OAAA;AACF,4GAAA,kBAAkB,OAAA;AAClB,gHAAA,sBAAsB,OAAA;AACtB,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,mGAAA,SAAS,OAAA;AACT,oGAAA,UAAU,OAAA;AACV,oGAAA,UAAU,OAAA;AAOZ,iCAOiB;AANf,gHAAA,uBAAuB,OAAA;AACvB,mGAAA,UAAU,OAAA;AAMZ,yCAA2E;AAAlE,4GAAA,eAAe,OAAA;AACxB,qCAImB;AAHjB,uGAAA,YAAY,OAAA;AAId,mCAmCkB;AAlChB,2GAAA,iBAAiB,OAAA;AACjB,mGAAA,SAAS,OAAA;AACT,6FAAA,GAAG,OAAA;AACH,+FAAA,KAAK,OAAA;AACL,mGAAA,SAAS,OAAA;AACT,+FAAA,KAAK,OAAA;AACL,8FAAA,IAAI,OAAA;AACJ,uGAAA,aAAa,OAAA;AACb,kGAAA,QAAQ,OAAA","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nexport {\n createDistillery,\n type Distillery,\n type LiveCollection,\n type LiveCollectionOptions,\n} from './engine';\nexport {\n createDomSink,\n type CreateDomSinkOptions,\n type DocumentLike,\n type StyleElementLike,\n type StyleParentLike,\n} from './dom_sink';\nexport type { StyleSink } from './sink';\nexport {\n type DistilleryEnvironment,\n type DistilleryOptions,\n type ThemeVarDefinition,\n} from './environment';\nexport {\n resolveThemeValues,\n zipSchemes,\n type DeepPartialTheme,\n type MediaThemeVariation,\n type PathsOf,\n type ResolvedThemeVariation,\n type SchemeValueTree,\n type ThemeTree,\n type ThemeVariation,\n type TokensOf,\n type ValuesOf,\n type Zipped,\n} from './theme';\nexport {\n contextualVar,\n cq,\n isContextualCssVar,\n isContextualCssVarName,\n isCssToken,\n isScaleToken,\n lightDark,\n scaleToken,\n themeToken,\n type ContextualCssVar,\n type ContextualCssVarName,\n type CssToken,\n type ScaleToken,\n type SchemePair,\n} from './tokens';\nexport {\n createStyleNameResolver,\n cssVarName,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleNameResolverOptions,\n type StyleTarget,\n} from './names';\nexport { StylesCollector, type StylesCollectorOptions } from './collector';\nexport {\n renderStyles,\n type RenderStylesOptions,\n type ThemeAlternate,\n} from './runtime';\nexport {\n combineClassNames,\n container,\n css,\n decls,\n mapDomain,\n media,\n rule,\n StyleRegistry,\n variants,\n type ContextualVarPath,\n type CssValue,\n type CssVarPath,\n type Declarations,\n type DeclarationSegment,\n type DefaultGroupDeps,\n type DefaultKeyDeps,\n type LocalVarDefaultMarker,\n type LocalVarGroup,\n type LocalVarMarker,\n type LocalVarOverrideMarker,\n type LocalVarRef,\n type PrimitiveStyleAuthoringApi,\n type ResolvedStyles,\n type RuleOptions,\n type StyleAuthoringApi,\n type StyleDeps,\n type StyleEntry,\n type StyleHandle,\n type StyleMedia,\n type StyleRegistrySnapshot,\n type StyleRule,\n type StylesModule,\n type StylesObject,\n type StyleSelectorResolver,\n} from './styles';\n"]}
|
package/dist/cjs/sink.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/sink.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\n/** Receives stylesheet invalidation from a live collection or Emotion compat modules. */\nexport interface StyleSink {\n /** Marks the sink dirty. `render` produces the current stylesheet when it flushes. */\n invalidate(render: () => string): void;\n}\n\n/** Minimal interface for a DOM `<style>` element. */\nexport interface StyleElementLike {\n /** Current stylesheet text, or `null` before the first flush. */\n textContent: string | null;\n}\n\n/** Node that receives a managed `<style>` element, e.g. `document.head` or a `ShadowRoot`. */\nexport interface StyleParentLike {\n // Method syntax (bivariant) so DOM `Node.appendChild<T extends Node>` assigns.\n /** Appends the managed style element. */\n appendChild(node: StyleElementLike): void;\n}\n"]}
|
package/dist/collector.d.ts
CHANGED
|
@@ -31,6 +31,9 @@ export declare class StylesCollector {
|
|
|
31
31
|
private readonly handles;
|
|
32
32
|
private readonly themeDeps;
|
|
33
33
|
private readonly varDeps;
|
|
34
|
+
private readonly listeners;
|
|
35
|
+
private depth;
|
|
36
|
+
private dirty;
|
|
34
37
|
constructor({ target, names, registry, prefix, dev, warn, }: StylesCollectorOptions);
|
|
35
38
|
/**
|
|
36
39
|
* Collects a module's non-variant entries, or one explicit entry.
|
|
@@ -40,6 +43,7 @@ export declare class StylesCollector {
|
|
|
40
43
|
* @param value Module (all non-variant entries), a single entry, or an array of entries.
|
|
41
44
|
*/
|
|
42
45
|
use(value: StylesModule | StyleEntry | readonly StyleEntry[]): void;
|
|
46
|
+
private useValue;
|
|
43
47
|
/**
|
|
44
48
|
* Collects every entry on `module`, including variants. Used by the stylesheet target.
|
|
45
49
|
*
|
|
@@ -49,7 +53,7 @@ export declare class StylesCollector {
|
|
|
49
53
|
/**
|
|
50
54
|
* Collects handles and auto-includes rules whose selector deps are all present.
|
|
51
55
|
*
|
|
52
|
-
* Media blocks
|
|
56
|
+
* Media blocks gain inner rules whose deps are met and keep rules already collected.
|
|
53
57
|
*
|
|
54
58
|
* @param handles Handles resolved during this render pass (e.g. from `resolveClassName`).
|
|
55
59
|
* @returns Handles that were retained. Empty untargeted handles are omitted in compact mode.
|
|
@@ -57,6 +61,15 @@ export declare class StylesCollector {
|
|
|
57
61
|
useHandles(handles: readonly StyleHandle[]): readonly StyleHandle[];
|
|
58
62
|
/** Collects `auto` rules on `module` whose every selector dependency is already collected. */
|
|
59
63
|
useRulesWhenDepsMet(module: StylesModule): void;
|
|
64
|
+
/**
|
|
65
|
+
* Calls `listener` after a public mutation adds an entry, handle, theme var, or contextual var.
|
|
66
|
+
*
|
|
67
|
+
* Fires at most once per outermost call; nested calls such as `use([a, b])` batch into it.
|
|
68
|
+
*
|
|
69
|
+
* @param listener Called with no arguments after the collection grows.
|
|
70
|
+
* @returns Unsubscribes `listener`.
|
|
71
|
+
*/
|
|
72
|
+
subscribe(listener: () => void): () => void;
|
|
60
73
|
private tryActivateDependent;
|
|
61
74
|
private allDepsMet;
|
|
62
75
|
/** Marks a theme token path as reachable so it appears in the emitted theme block, even if no collected declaration reads it. */
|
|
@@ -80,5 +93,9 @@ export declare class StylesCollector {
|
|
|
80
93
|
private retainHandle;
|
|
81
94
|
private addEntry;
|
|
82
95
|
private addDeclarationDeps;
|
|
96
|
+
private addDeps;
|
|
97
|
+
private setEntry;
|
|
98
|
+
private setHandle;
|
|
99
|
+
private batch;
|
|
83
100
|
}
|
|
84
101
|
//# sourceMappingURL=collector.d.ts.map
|
package/dist/collector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,iBAAiB,EAIjB,UAAU,EACV,WAAW,EAEX,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAC;AA0DlB,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,wDAAwD;IACxD,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,aAAa,CAAC;IACrB,mGAAmG;IACnG,QAAQ,EAAE,aAAa,CAAC;IACxB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,kGAAkG;IAClG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,0DAA0D;AAC1D,qBAAa,eAAe;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"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"}
|
package/dist/collector.js
CHANGED
|
@@ -64,6 +64,9 @@ export class StylesCollector {
|
|
|
64
64
|
handles = new Map();
|
|
65
65
|
themeDeps = new Set();
|
|
66
66
|
varDeps = new Set();
|
|
67
|
+
listeners = new Set();
|
|
68
|
+
depth = 0;
|
|
69
|
+
dirty = false;
|
|
67
70
|
constructor({ target, names, registry, prefix, dev = false, warn = (message) => console.warn(message), }) {
|
|
68
71
|
this.target = target;
|
|
69
72
|
this.names = names;
|
|
@@ -80,6 +83,9 @@ export class StylesCollector {
|
|
|
80
83
|
* @param value Module (all non-variant entries), a single entry, or an array of entries.
|
|
81
84
|
*/
|
|
82
85
|
use(value) {
|
|
86
|
+
this.batch(() => this.useValue(value));
|
|
87
|
+
}
|
|
88
|
+
useValue(value) {
|
|
83
89
|
if (isReadonlyArray(value)) {
|
|
84
90
|
value.forEach((entry) => this.use(entry));
|
|
85
91
|
return;
|
|
@@ -96,7 +102,7 @@ export class StylesCollector {
|
|
|
96
102
|
if (entry.kind === 'handle' && !this.retainHandle(entry)) {
|
|
97
103
|
continue;
|
|
98
104
|
}
|
|
99
|
-
this.
|
|
105
|
+
this.setEntry(entry);
|
|
100
106
|
if (entry.kind === 'handle' || entry.kind === 'rule') {
|
|
101
107
|
this.addDeclarationDeps(entry.declarations);
|
|
102
108
|
}
|
|
@@ -113,7 +119,7 @@ export class StylesCollector {
|
|
|
113
119
|
if (!this.retainHandle(handle)) {
|
|
114
120
|
continue;
|
|
115
121
|
}
|
|
116
|
-
this.
|
|
122
|
+
this.setHandle(handle);
|
|
117
123
|
}
|
|
118
124
|
return;
|
|
119
125
|
}
|
|
@@ -125,67 +131,86 @@ export class StylesCollector {
|
|
|
125
131
|
* @param module Module whose entries should all be collected.
|
|
126
132
|
*/
|
|
127
133
|
useAllEntries(module) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
this.batch(() => {
|
|
135
|
+
for (const entry of module.entries) {
|
|
136
|
+
if (entry.kind === 'handle' && !this.retainHandle(entry)) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
this.setEntry(entry);
|
|
131
140
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
141
|
+
for (const handle of module.handleList) {
|
|
142
|
+
if (!this.retainHandle(handle)) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
this.setHandle(handle);
|
|
137
146
|
}
|
|
138
|
-
this.
|
|
139
|
-
}
|
|
140
|
-
module.themeDeps.forEach((path) => this.themeDeps.add(path));
|
|
141
|
-
module.varDeps.forEach((path) => this.varDeps.add(path));
|
|
147
|
+
this.addDeps(module.themeDeps, module.varDeps);
|
|
148
|
+
});
|
|
142
149
|
}
|
|
143
150
|
/**
|
|
144
151
|
* Collects handles and auto-includes rules whose selector deps are all present.
|
|
145
152
|
*
|
|
146
|
-
* Media blocks
|
|
153
|
+
* Media blocks gain inner rules whose deps are met and keep rules already collected.
|
|
147
154
|
*
|
|
148
155
|
* @param handles Handles resolved during this render pass (e.g. from `resolveClassName`).
|
|
149
156
|
* @returns Handles that were retained. Empty untargeted handles are omitted in compact mode.
|
|
150
157
|
*/
|
|
151
158
|
useHandles(handles) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
for (const handle of retained) {
|
|
166
|
-
const module = this.registry.module(handle.moduleName);
|
|
167
|
-
if (!module) {
|
|
168
|
-
continue;
|
|
159
|
+
return this.batch(() => {
|
|
160
|
+
const retained = [];
|
|
161
|
+
for (const handle of handles) {
|
|
162
|
+
if (!this.retainHandle(handle)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
retained.push(handle);
|
|
166
|
+
if (this.handles.has(handle.key)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
this.setEntry(handle);
|
|
170
|
+
this.setHandle(handle);
|
|
171
|
+
this.addDeclarationDeps(handle.declarations);
|
|
169
172
|
}
|
|
170
|
-
for (const
|
|
171
|
-
this.
|
|
173
|
+
for (const handle of retained) {
|
|
174
|
+
const module = this.registry.module(handle.moduleName);
|
|
175
|
+
if (!module) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
for (const dependent of dependentEntries(module, handle.key)) {
|
|
179
|
+
this.tryActivateDependent(dependent);
|
|
180
|
+
}
|
|
172
181
|
}
|
|
173
|
-
|
|
174
|
-
|
|
182
|
+
return retained;
|
|
183
|
+
});
|
|
175
184
|
}
|
|
176
185
|
/** Collects `auto` rules on `module` whose every selector dependency is already collected. */
|
|
177
186
|
useRulesWhenDepsMet(module) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.
|
|
187
|
+
this.batch(() => {
|
|
188
|
+
for (const entry of module.entries) {
|
|
189
|
+
if (entry.kind !== 'rule') {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (this.entries.has(entryKey(entry))) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (this.allDepsMet(entry.dependsOn)) {
|
|
196
|
+
this.addEntry(entry);
|
|
197
|
+
}
|
|
187
198
|
}
|
|
188
|
-
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Calls `listener` after a public mutation adds an entry, handle, theme var, or contextual var.
|
|
203
|
+
*
|
|
204
|
+
* Fires at most once per outermost call; nested calls such as `use([a, b])` batch into it.
|
|
205
|
+
*
|
|
206
|
+
* @param listener Called with no arguments after the collection grows.
|
|
207
|
+
* @returns Unsubscribes `listener`.
|
|
208
|
+
*/
|
|
209
|
+
subscribe(listener) {
|
|
210
|
+
this.listeners.add(listener);
|
|
211
|
+
return () => {
|
|
212
|
+
this.listeners.delete(listener);
|
|
213
|
+
};
|
|
189
214
|
}
|
|
190
215
|
tryActivateDependent(entry) {
|
|
191
216
|
if (entry.kind === 'rule') {
|
|
@@ -202,15 +227,16 @@ export class StylesCollector {
|
|
|
202
227
|
return;
|
|
203
228
|
}
|
|
204
229
|
if (entry.kind === 'media') {
|
|
205
|
-
|
|
206
|
-
|
|
230
|
+
// Add newly live rules; keep rules already collected (e.g. by `use`).
|
|
231
|
+
const existing = this.entries.get(entryKey(entry));
|
|
232
|
+
const collected = new Set(existing?.kind === 'media' ? existing.rules : []);
|
|
233
|
+
const rules = entry.rules.filter((rule) => collected.has(rule) || (rule.auto && this.allDepsMet(rule.dependsOn)));
|
|
234
|
+
if (rules.length === collected.size) {
|
|
207
235
|
return;
|
|
208
236
|
}
|
|
209
|
-
const filtered =
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
this.entries.set(entryKey(filtered), filtered);
|
|
213
|
-
for (const rule of liveRules) {
|
|
237
|
+
const filtered = rules.length === entry.rules.length ? entry : { ...entry, rules };
|
|
238
|
+
this.setEntry(filtered);
|
|
239
|
+
for (const rule of rules) {
|
|
214
240
|
this.addDeclarationDeps(rule.declarations);
|
|
215
241
|
}
|
|
216
242
|
}
|
|
@@ -225,7 +251,7 @@ export class StylesCollector {
|
|
|
225
251
|
}
|
|
226
252
|
/** Marks a theme token path as reachable so it appears in the emitted theme block, even if no collected declaration reads it. */
|
|
227
253
|
useThemeVar(path) {
|
|
228
|
-
this.
|
|
254
|
+
this.batch(() => this.addDeps([path], []));
|
|
229
255
|
}
|
|
230
256
|
/** Creates a {@link StyleNameResolver} scoped to this collector's current dep set. */
|
|
231
257
|
createResolver() {
|
|
@@ -348,9 +374,9 @@ export class StylesCollector {
|
|
|
348
374
|
if (entry.kind === 'handle' && !this.retainHandle(entry)) {
|
|
349
375
|
return;
|
|
350
376
|
}
|
|
351
|
-
this.
|
|
377
|
+
this.setEntry(entry);
|
|
352
378
|
if (entry.kind === 'handle') {
|
|
353
|
-
this.
|
|
379
|
+
this.setHandle(entry);
|
|
354
380
|
this.addDeclarationDeps(entry.declarations);
|
|
355
381
|
return;
|
|
356
382
|
}
|
|
@@ -363,8 +389,53 @@ export class StylesCollector {
|
|
|
363
389
|
}
|
|
364
390
|
}
|
|
365
391
|
addDeclarationDeps(declarations) {
|
|
366
|
-
declarations.deps.theme
|
|
367
|
-
|
|
392
|
+
this.addDeps(declarations.deps.theme, declarations.deps.vars);
|
|
393
|
+
}
|
|
394
|
+
addDeps(theme, vars) {
|
|
395
|
+
const before = this.themeDeps.size + this.varDeps.size;
|
|
396
|
+
for (const path of theme) {
|
|
397
|
+
this.themeDeps.add(path);
|
|
398
|
+
}
|
|
399
|
+
for (const path of vars) {
|
|
400
|
+
this.varDeps.add(path);
|
|
401
|
+
}
|
|
402
|
+
if (this.themeDeps.size + this.varDeps.size !== before) {
|
|
403
|
+
this.dirty = true;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// A media entry changes when it gains inner rules.
|
|
407
|
+
setEntry(entry) {
|
|
408
|
+
const key = entryKey(entry);
|
|
409
|
+
const existing = this.entries.get(key);
|
|
410
|
+
this.entries.set(key, entry);
|
|
411
|
+
if (!existing ||
|
|
412
|
+
(existing.kind === 'media' &&
|
|
413
|
+
entry.kind === 'media' &&
|
|
414
|
+
existing.rules.length !== entry.rules.length)) {
|
|
415
|
+
this.dirty = true;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
setHandle(handle) {
|
|
419
|
+
if (!this.handles.has(handle.key)) {
|
|
420
|
+
this.dirty = true;
|
|
421
|
+
}
|
|
422
|
+
this.handles.set(handle.key, handle);
|
|
423
|
+
}
|
|
424
|
+
// Listeners run once the outermost public mutation returns.
|
|
425
|
+
batch(mutate) {
|
|
426
|
+
this.depth += 1;
|
|
427
|
+
try {
|
|
428
|
+
return mutate();
|
|
429
|
+
}
|
|
430
|
+
finally {
|
|
431
|
+
this.depth -= 1;
|
|
432
|
+
if (this.depth === 0 && this.dirty) {
|
|
433
|
+
this.dirty = false;
|
|
434
|
+
for (const listener of [...this.listeners]) {
|
|
435
|
+
listener();
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
368
439
|
}
|
|
369
440
|
}
|
|
370
441
|
const includeAllDefaults = (defaults, theme, vars) => {
|
package/dist/collector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { isLocalVarOverrideMarker } from './local_vars';\nimport {\n createStyleNameResolver,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleTarget,\n} from './names';\nimport type {\n ContextualVarPath,\n CssVarPath,\n Declarations,\n DefaultGroupDeps,\n StyleEntry,\n StyleHandle,\n StyleMedia,\n StyleRegistry,\n StyleRule,\n StylesModule,\n} from './styles';\nimport { isEmptyDeclarations } from './styles/declarations';\n\nconst warnedHandles = new WeakSet<StyleHandle>();\n\nconst dependentEntriesCache = new WeakMap<\n StylesModule,\n Map<string, StyleEntry[]>\n>();\n\nconst dependentEntries = (\n module: StylesModule,\n handleKey: string\n): readonly StyleEntry[] => {\n let cached = dependentEntriesCache.get(module);\n if (!cached) {\n cached = new Map<string, StyleEntry[]>();\n for (const entry of module.entries) {\n if (entry.kind === 'rule') {\n if (!entry.auto) {\n continue;\n }\n for (const dep of entry.dependsOn) {\n appendDependent(cached, dep, entry);\n }\n continue;\n }\n if (entry.kind === 'media') {\n const deps = new Set<string>();\n for (const nested of entry.rules) {\n if (!nested.auto) {\n continue;\n }\n nested.dependsOn.forEach((key) => deps.add(key));\n }\n for (const dep of deps) {\n appendDependent(cached, dep, entry);\n }\n }\n }\n dependentEntriesCache.set(module, cached);\n }\n return cached.get(handleKey) ?? [];\n};\n\nconst appendDependent = (\n cache: Map<string, StyleEntry[]>,\n key: string,\n entry: StyleEntry\n): void => {\n const list = cache.get(key);\n if (list) {\n list.push(entry);\n return;\n }\n cache.set(key, [entry]);\n};\n\n/** Target, naming mode, registry, and prefix for one {@link StylesCollector}. */\nexport interface StylesCollectorOptions {\n /** Target context (e.g. `artifact` or `stylesheet`). */\n target: StyleTarget;\n /** Desired name mode (`compact` or `readable`). */\n names: StyleNameMode;\n /** Registry modules were authored against; used for auto-collection and compact-name snapshots. */\n registry: StyleRegistry;\n /** Brand prefix forwarded to the name resolver. */\n prefix: string;\n /** When `true`, emit no-op-handle warnings through `warn`. Inherited from `createDistillery({ dev })`. */\n dev?: boolean;\n /** Warning sink for no-op handles. Used only when `dev` is `true`. Defaults to `console.warn`. */\n warn?: (message: string) => void;\n}\n\n/** Reachable entries for one render or one stylesheet. */\nexport class StylesCollector {\n /** The target collection mode. */\n readonly target: StyleTarget;\n /** The naming mode (compact vs readable). */\n readonly names: StyleNameMode;\n /** Associated registry. */\n readonly registry: StyleRegistry;\n /** Emitted class name prefix. */\n readonly prefix: string;\n private readonly dev: boolean;\n private readonly warn: (message: string) => void;\n private readonly entries = new Map<string, StyleEntry>();\n private readonly handles = new Map<string, StyleHandle>();\n private readonly themeDeps = new Set<string>();\n private readonly varDeps = new Set<ContextualVarPath>();\n\n constructor({\n target,\n names,\n registry,\n prefix,\n dev = false,\n warn = (message) => console.warn(message),\n }: StylesCollectorOptions) {\n this.target = target;\n this.names = names;\n this.registry = registry;\n this.prefix = prefix;\n this.dev = dev;\n this.warn = warn;\n }\n\n /**\n * Collects a module's non-variant entries, or one explicit entry.\n *\n * Variant entries stay off this path; collect them via `useHandles`.\n *\n * @param value Module (all non-variant entries), a single entry, or an array of entries.\n */\n use(value: StylesModule | StyleEntry | readonly StyleEntry[]): void {\n if (isReadonlyArray(value)) {\n value.forEach((entry) => this.use(entry));\n return;\n }\n\n if (isStylesModule(value)) {\n // Aggregate deps from non-variant entries only. The module-level\n // `themeDeps`/`varDeps` snapshot would also include variant entries'\n // deps, which would push their var paths into the resolver's compact\n // registry and steal short names from actually-rendered handles.\n for (const entry of value.entries) {\n if (entry.variant) {\n continue;\n }\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n continue;\n }\n this.entries.set(entryKey(entry), entry);\n if (entry.kind === 'handle' || entry.kind === 'rule') {\n this.addDeclarationDeps(entry.declarations);\n } else {\n for (const inner of entry.rules) {\n this.addDeclarationDeps(inner.declarations);\n }\n }\n }\n for (const handle of value.handleList) {\n if (handle.variant) {\n continue;\n }\n if (!this.retainHandle(handle)) {\n continue;\n }\n this.handles.set(handle.key, handle);\n }\n return;\n }\n\n this.addEntry(value);\n }\n\n /**\n * Collects every entry on `module`, including variants. Used by the stylesheet target.\n *\n * @param module Module whose entries should all be collected.\n */\n useAllEntries(module: StylesModule): void {\n for (const entry of module.entries) {\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n continue;\n }\n this.entries.set(entryKey(entry), entry);\n }\n for (const handle of module.handleList) {\n if (!this.retainHandle(handle)) {\n continue;\n }\n this.handles.set(handle.key, handle);\n }\n module.themeDeps.forEach((path) => this.themeDeps.add(path));\n module.varDeps.forEach((path) => this.varDeps.add(path));\n }\n\n /**\n * Collects handles and auto-includes rules whose selector deps are all present.\n *\n * Media blocks include only inner rules whose deps are met.\n *\n * @param handles Handles resolved during this render pass (e.g. from `resolveClassName`).\n * @returns Handles that were retained. Empty untargeted handles are omitted in compact mode.\n */\n useHandles(handles: readonly StyleHandle[]): readonly StyleHandle[] {\n const retained: StyleHandle[] = [];\n for (const handle of handles) {\n if (!this.retainHandle(handle)) {\n continue;\n }\n retained.push(handle);\n if (this.handles.has(handle.key)) {\n continue;\n }\n this.entries.set(entryKey(handle), handle);\n this.handles.set(handle.key, handle);\n this.addDeclarationDeps(handle.declarations);\n }\n for (const handle of retained) {\n const module = this.registry.module(handle.moduleName);\n if (!module) {\n continue;\n }\n for (const dependent of dependentEntries(module, handle.key)) {\n this.tryActivateDependent(dependent);\n }\n }\n return retained;\n }\n\n /** Collects `auto` rules on `module` whose every selector dependency is already collected. */\n useRulesWhenDepsMet(module: StylesModule): void {\n for (const entry of module.entries) {\n if (entry.kind !== 'rule') {\n continue;\n }\n if (this.entries.has(entryKey(entry))) {\n continue;\n }\n if (this.allDepsMet(entry.dependsOn)) {\n this.addEntry(entry);\n }\n }\n }\n\n private tryActivateDependent(entry: StyleEntry): void {\n if (entry.kind === 'rule') {\n if (!entry.auto) {\n return;\n }\n if (this.entries.has(entryKey(entry))) {\n return;\n }\n if (!this.allDepsMet(entry.dependsOn)) {\n return;\n }\n this.addEntry(entry);\n return;\n }\n if (entry.kind === 'media') {\n const liveRules = entry.rules.filter(\n (rule) => rule.auto && this.allDepsMet(rule.dependsOn)\n );\n if (liveRules.length === 0) {\n return;\n }\n const filtered: StyleMedia =\n liveRules.length === entry.rules.length\n ? entry\n : { ...entry, rules: liveRules };\n this.entries.set(entryKey(filtered), filtered);\n for (const rule of liveRules) {\n this.addDeclarationDeps(rule.declarations);\n }\n }\n }\n\n private allDepsMet(dependsOn: ReadonlySet<string>): boolean {\n for (const dep of dependsOn) {\n if (!this.handles.has(dep)) {\n return false;\n }\n }\n return true;\n }\n\n /** Marks a theme token path as reachable so it appears in the emitted theme block, even if no collected declaration reads it. */\n useThemeVar(path: string): void {\n this.themeDeps.add(path);\n }\n\n /** Creates a {@link StyleNameResolver} scoped to this collector's current dep set. */\n createResolver(): StyleNameResolver {\n const finalized = this.finalizeDeps();\n const snapshot = this.registry.freeze({\n classKeys:\n this.names === 'compact'\n ? [...this.handles.keys()]\n : this.registry.classKeys,\n cssVarKeys: cssVarKeysFrom(finalized),\n });\n return createStyleNameResolver({\n names: this.names,\n prefix: this.prefix,\n classKeys: snapshot.classKeys,\n cssVarKeys: snapshot.cssVarKeys,\n });\n }\n\n /** Collected style entries sorted for emission (base rules before all `@media`/`@container` blocks). */\n get collectedEntries(): readonly StyleEntry[] {\n return [...this.entries.values()].sort(compareEntriesForEmission);\n }\n\n /** Theme token paths that survive reachability; emitted in the theme scope block. */\n get collectedThemeDeps(): ReadonlySet<string> {\n return this.finalizeDeps().theme;\n }\n\n /** Contextual var paths that survive reachability; used by the runtime for compact-name substitution. */\n get collectedVarDeps(): ReadonlySet<ContextualVarPath> {\n return this.finalizeDeps().vars;\n }\n\n // Reachability-aware default-emission set used by the runtime. For a\n // given handle and `${group}` site, returns the keys whose declarations\n // should ship: union of group-keys appearing in `handle.declarations.deps.refs`\n // and in `deps.refs` of every collected rule/media-inner-rule whose\n // selector targets `handle`.\n /**\n * Returns the variable keys within `groupPath` that are reachable from `handle` or from any collected rule targeting it.\n *\n * @param handle Handle whose declaration refs and dependent rules are consulted.\n * @param groupPath Group prefix path (e.g. `vars/chip/look`).\n */\n reachableDefaults(\n handle: StyleHandle,\n groupPath: `vars/${string}`\n ): ReadonlySet<string> {\n const groupPrefix = `${groupPath}/`;\n const reachable = new Set<string>();\n const harvest = (refs: ReadonlySet<ContextualVarPath>): void => {\n for (const path of refs) {\n if (path.startsWith(groupPrefix)) {\n reachable.add(path.slice(groupPrefix.length));\n }\n }\n };\n\n harvest(handle.declarations.deps.refs);\n\n for (const entry of this.entries.values()) {\n if (entry.kind === 'rule') {\n if (entry.dependsOn.has(handle.key)) {\n harvest(entry.declarations.deps.refs);\n }\n continue;\n }\n if (entry.kind === 'media') {\n for (const innerRule of entry.rules) {\n if (innerRule.dependsOn.has(handle.key)) {\n harvest(innerRule.declarations.deps.refs);\n }\n }\n }\n }\n\n return reachable;\n }\n\n // Computes the final theme/var dep sets, folding in default-marker\n // contributions only for keys that survive reachability. Called once per\n // `createResolver()` and per `collectedThemeDeps`/`collectedVarDeps`\n // access; collection mutations between calls re-derive the result.\n private finalizeDeps(): {\n theme: ReadonlySet<string>;\n vars: ReadonlySet<ContextualVarPath>;\n } {\n const theme = new Set<string>(this.themeDeps);\n const vars = new Set<ContextualVarPath>(this.varDeps);\n\n for (const handle of this.handles.values()) {\n for (const group of handle.declarations.deps.defaults) {\n const reachable = this.reachableDefaults(handle, group.groupPath);\n for (const item of group.keys) {\n if (!reachable.has(item.key)) {\n continue;\n }\n vars.add(item.path);\n item.valueDeps.theme.forEach((path) => theme.add(path));\n item.valueDeps.vars.forEach((path) => vars.add(path));\n }\n }\n }\n\n // Default markers inside rule / media-inner-rule declarations don't have\n // a host handle to anchor reachability against. The runtime emits every\n // listed key when rendering such a declaration, so we mirror that here\n // and include all of them in the registry.\n for (const entry of this.entries.values()) {\n if (entry.kind === 'rule') {\n includeAllDefaults(entry.declarations.deps.defaults, theme, vars);\n continue;\n }\n if (entry.kind === 'media') {\n for (const inner of entry.rules) {\n includeAllDefaults(inner.declarations.deps.defaults, theme, vars);\n }\n }\n }\n\n return { theme, vars };\n }\n\n private retainHandle(handle: StyleHandle): boolean {\n if (!isEmptyDeclarations(handle.declarations)) {\n return true;\n }\n if (this.registry.targetsHandle(handle.key)) {\n return true;\n }\n if (this.dev && !warnedHandles.has(handle)) {\n warnedHandles.add(handle);\n this.warn(\n `Style module \"${handle.moduleName}\" handle \"${handle.localName}\" has no declarations and no rule targets it; delete the empty template.`\n );\n }\n return this.names !== 'compact';\n }\n\n private addEntry(entry: StyleEntry): void {\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n return;\n }\n this.entries.set(entryKey(entry), entry);\n if (entry.kind === 'handle') {\n this.handles.set(entry.key, entry);\n this.addDeclarationDeps(entry.declarations);\n return;\n }\n if (entry.kind === 'rule') {\n this.addDeclarationDeps(entry.declarations);\n return;\n }\n for (const rule of entry.rules) {\n this.addDeclarationDeps(rule.declarations);\n }\n }\n\n private addDeclarationDeps(declarations: Declarations): void {\n declarations.deps.theme.forEach((path) => this.themeDeps.add(path));\n declarations.deps.vars.forEach((path) => this.varDeps.add(path));\n }\n}\n\nconst includeAllDefaults = (\n defaults: ReadonlyArray<DefaultGroupDeps>,\n theme: Set<string>,\n vars: Set<ContextualVarPath>\n): void => {\n for (const group of defaults) {\n for (const item of group.keys) {\n vars.add(item.path);\n item.valueDeps.theme.forEach((path) => theme.add(path));\n item.valueDeps.vars.forEach((path) => vars.add(path));\n }\n }\n};\n\nconst cssVarKeysFrom = (finalized: {\n theme: ReadonlySet<string>;\n vars: ReadonlySet<ContextualVarPath>;\n}): readonly CssVarPath[] => {\n const keys = new Set<CssVarPath>();\n finalized.theme.forEach((path) => keys.add(path));\n finalized.vars.forEach((path) => keys.add(path));\n return [...keys].sort();\n};\n\nconst entryKey = (entry: StyleEntry): string => {\n if (entry.kind === 'media') {\n return `media/${entry.key}`;\n }\n return entry.key;\n};\n\nconst mediaSortRank = (entry: StyleEntry): number =>\n entry.kind === 'media' ? 1 : 0;\n\nconst localVarOverrideRank = (entry: StyleEntry): number => {\n if (entry.kind === 'media') {\n return 0;\n }\n return entry.declarations.css.some(isLocalVarOverrideMarker) ? 1 : 0;\n};\n\n// Base entries before every `@media`/`@container` block (no specificity). See finding `media-block-ordering`.\n// `${group.set()}` after `${group}` defaults so a stacked override class wins. See finding `local-var-override-ordering`.\nconst compareEntriesForEmission = (a: StyleEntry, b: StyleEntry): number => {\n const rankDelta = mediaSortRank(a) - mediaSortRank(b);\n if (rankDelta !== 0) {\n return rankDelta;\n }\n const varDelta = localVarOverrideRank(a) - localVarOverrideRank(b);\n if (varDelta !== 0) {\n return varDelta;\n }\n if (a.moduleName !== b.moduleName) {\n return a.moduleName.localeCompare(b.moduleName);\n }\n return a.key.localeCompare(b.key);\n};\n\nconst isReadonlyArray = <T>(value: unknown): value is readonly T[] =>\n Array.isArray(value);\n\nconst isStylesModule = (\n value: StylesModule | StyleHandle | StyleRule | StyleMedia\n): value is StylesModule => 'handles' in value && 'handleList' in value;\n"]}
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { isLocalVarOverrideMarker } from './local_vars';\nimport {\n createStyleNameResolver,\n type StyleNameMode,\n type StyleNameResolver,\n type StyleTarget,\n} from './names';\nimport type {\n ContextualVarPath,\n CssVarPath,\n Declarations,\n DefaultGroupDeps,\n StyleEntry,\n StyleHandle,\n StyleMedia,\n StyleRegistry,\n StyleRule,\n StylesModule,\n} from './styles';\nimport { isEmptyDeclarations } from './styles/declarations';\n\nconst warnedHandles = new WeakSet<StyleHandle>();\n\nconst dependentEntriesCache = new WeakMap<\n StylesModule,\n Map<string, StyleEntry[]>\n>();\n\nconst dependentEntries = (\n module: StylesModule,\n handleKey: string\n): readonly StyleEntry[] => {\n let cached = dependentEntriesCache.get(module);\n if (!cached) {\n cached = new Map<string, StyleEntry[]>();\n for (const entry of module.entries) {\n if (entry.kind === 'rule') {\n if (!entry.auto) {\n continue;\n }\n for (const dep of entry.dependsOn) {\n appendDependent(cached, dep, entry);\n }\n continue;\n }\n if (entry.kind === 'media') {\n const deps = new Set<string>();\n for (const nested of entry.rules) {\n if (!nested.auto) {\n continue;\n }\n nested.dependsOn.forEach((key) => deps.add(key));\n }\n for (const dep of deps) {\n appendDependent(cached, dep, entry);\n }\n }\n }\n dependentEntriesCache.set(module, cached);\n }\n return cached.get(handleKey) ?? [];\n};\n\nconst appendDependent = (\n cache: Map<string, StyleEntry[]>,\n key: string,\n entry: StyleEntry\n): void => {\n const list = cache.get(key);\n if (list) {\n list.push(entry);\n return;\n }\n cache.set(key, [entry]);\n};\n\n/** Target, naming mode, registry, and prefix for one {@link StylesCollector}. */\nexport interface StylesCollectorOptions {\n /** Target context (e.g. `artifact` or `stylesheet`). */\n target: StyleTarget;\n /** Desired name mode (`compact` or `readable`). */\n names: StyleNameMode;\n /** Registry modules were authored against; used for auto-collection and compact-name snapshots. */\n registry: StyleRegistry;\n /** Brand prefix forwarded to the name resolver. */\n prefix: string;\n /** When `true`, emit no-op-handle warnings through `warn`. Inherited from `createDistillery({ dev })`. */\n dev?: boolean;\n /** Warning sink for no-op handles. Used only when `dev` is `true`. Defaults to `console.warn`. */\n warn?: (message: string) => void;\n}\n\n/** Reachable entries for one render or one stylesheet. */\nexport class StylesCollector {\n /** The target collection mode. */\n readonly target: StyleTarget;\n /** The naming mode (compact vs readable). */\n readonly names: StyleNameMode;\n /** Associated registry. */\n readonly registry: StyleRegistry;\n /** Emitted class name prefix. */\n readonly prefix: string;\n private readonly dev: boolean;\n private readonly warn: (message: string) => void;\n private readonly entries = new Map<string, StyleEntry>();\n private readonly handles = new Map<string, StyleHandle>();\n private readonly themeDeps = new Set<string>();\n private readonly varDeps = new Set<ContextualVarPath>();\n private readonly listeners = new Set<() => void>();\n private depth = 0;\n private dirty = false;\n\n constructor({\n target,\n names,\n registry,\n prefix,\n dev = false,\n warn = (message) => console.warn(message),\n }: StylesCollectorOptions) {\n this.target = target;\n this.names = names;\n this.registry = registry;\n this.prefix = prefix;\n this.dev = dev;\n this.warn = warn;\n }\n\n /**\n * Collects a module's non-variant entries, or one explicit entry.\n *\n * Variant entries stay off this path; collect them via `useHandles`.\n *\n * @param value Module (all non-variant entries), a single entry, or an array of entries.\n */\n use(value: StylesModule | StyleEntry | readonly StyleEntry[]): void {\n this.batch(() => this.useValue(value));\n }\n\n private useValue(\n value: StylesModule | StyleEntry | readonly StyleEntry[]\n ): void {\n if (isReadonlyArray(value)) {\n value.forEach((entry) => this.use(entry));\n return;\n }\n\n if (isStylesModule(value)) {\n // Aggregate deps from non-variant entries only. The module-level\n // `themeDeps`/`varDeps` snapshot would also include variant entries'\n // deps, which would push their var paths into the resolver's compact\n // registry and steal short names from actually-rendered handles.\n for (const entry of value.entries) {\n if (entry.variant) {\n continue;\n }\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n continue;\n }\n this.setEntry(entry);\n if (entry.kind === 'handle' || entry.kind === 'rule') {\n this.addDeclarationDeps(entry.declarations);\n } else {\n for (const inner of entry.rules) {\n this.addDeclarationDeps(inner.declarations);\n }\n }\n }\n for (const handle of value.handleList) {\n if (handle.variant) {\n continue;\n }\n if (!this.retainHandle(handle)) {\n continue;\n }\n this.setHandle(handle);\n }\n return;\n }\n\n this.addEntry(value);\n }\n\n /**\n * Collects every entry on `module`, including variants. Used by the stylesheet target.\n *\n * @param module Module whose entries should all be collected.\n */\n useAllEntries(module: StylesModule): void {\n this.batch(() => {\n for (const entry of module.entries) {\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n continue;\n }\n this.setEntry(entry);\n }\n for (const handle of module.handleList) {\n if (!this.retainHandle(handle)) {\n continue;\n }\n this.setHandle(handle);\n }\n this.addDeps(module.themeDeps, module.varDeps);\n });\n }\n\n /**\n * Collects handles and auto-includes rules whose selector deps are all present.\n *\n * Media blocks gain inner rules whose deps are met and keep rules already collected.\n *\n * @param handles Handles resolved during this render pass (e.g. from `resolveClassName`).\n * @returns Handles that were retained. Empty untargeted handles are omitted in compact mode.\n */\n useHandles(handles: readonly StyleHandle[]): readonly StyleHandle[] {\n return this.batch(() => {\n const retained: StyleHandle[] = [];\n for (const handle of handles) {\n if (!this.retainHandle(handle)) {\n continue;\n }\n retained.push(handle);\n if (this.handles.has(handle.key)) {\n continue;\n }\n this.setEntry(handle);\n this.setHandle(handle);\n this.addDeclarationDeps(handle.declarations);\n }\n for (const handle of retained) {\n const module = this.registry.module(handle.moduleName);\n if (!module) {\n continue;\n }\n for (const dependent of dependentEntries(module, handle.key)) {\n this.tryActivateDependent(dependent);\n }\n }\n return retained;\n });\n }\n\n /** Collects `auto` rules on `module` whose every selector dependency is already collected. */\n useRulesWhenDepsMet(module: StylesModule): void {\n this.batch(() => {\n for (const entry of module.entries) {\n if (entry.kind !== 'rule') {\n continue;\n }\n if (this.entries.has(entryKey(entry))) {\n continue;\n }\n if (this.allDepsMet(entry.dependsOn)) {\n this.addEntry(entry);\n }\n }\n });\n }\n\n /**\n * Calls `listener` after a public mutation adds an entry, handle, theme var, or contextual var.\n *\n * Fires at most once per outermost call; nested calls such as `use([a, b])` batch into it.\n *\n * @param listener Called with no arguments after the collection grows.\n * @returns Unsubscribes `listener`.\n */\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private tryActivateDependent(entry: StyleEntry): void {\n if (entry.kind === 'rule') {\n if (!entry.auto) {\n return;\n }\n if (this.entries.has(entryKey(entry))) {\n return;\n }\n if (!this.allDepsMet(entry.dependsOn)) {\n return;\n }\n this.addEntry(entry);\n return;\n }\n if (entry.kind === 'media') {\n // Add newly live rules; keep rules already collected (e.g. by `use`).\n const existing = this.entries.get(entryKey(entry));\n const collected = new Set<StyleRule>(\n existing?.kind === 'media' ? existing.rules : []\n );\n const rules = entry.rules.filter(\n (rule) =>\n collected.has(rule) || (rule.auto && this.allDepsMet(rule.dependsOn))\n );\n if (rules.length === collected.size) {\n return;\n }\n const filtered: StyleMedia =\n rules.length === entry.rules.length ? entry : { ...entry, rules };\n this.setEntry(filtered);\n for (const rule of rules) {\n this.addDeclarationDeps(rule.declarations);\n }\n }\n }\n\n private allDepsMet(dependsOn: ReadonlySet<string>): boolean {\n for (const dep of dependsOn) {\n if (!this.handles.has(dep)) {\n return false;\n }\n }\n return true;\n }\n\n /** Marks a theme token path as reachable so it appears in the emitted theme block, even if no collected declaration reads it. */\n useThemeVar(path: string): void {\n this.batch(() => this.addDeps([path], []));\n }\n\n /** Creates a {@link StyleNameResolver} scoped to this collector's current dep set. */\n createResolver(): StyleNameResolver {\n const finalized = this.finalizeDeps();\n const snapshot = this.registry.freeze({\n classKeys:\n this.names === 'compact'\n ? [...this.handles.keys()]\n : this.registry.classKeys,\n cssVarKeys: cssVarKeysFrom(finalized),\n });\n return createStyleNameResolver({\n names: this.names,\n prefix: this.prefix,\n classKeys: snapshot.classKeys,\n cssVarKeys: snapshot.cssVarKeys,\n });\n }\n\n /** Collected style entries sorted for emission (base rules before all `@media`/`@container` blocks). */\n get collectedEntries(): readonly StyleEntry[] {\n return [...this.entries.values()].sort(compareEntriesForEmission);\n }\n\n /** Theme token paths that survive reachability; emitted in the theme scope block. */\n get collectedThemeDeps(): ReadonlySet<string> {\n return this.finalizeDeps().theme;\n }\n\n /** Contextual var paths that survive reachability; used by the runtime for compact-name substitution. */\n get collectedVarDeps(): ReadonlySet<ContextualVarPath> {\n return this.finalizeDeps().vars;\n }\n\n // Reachability-aware default-emission set used by the runtime. For a\n // given handle and `${group}` site, returns the keys whose declarations\n // should ship: union of group-keys appearing in `handle.declarations.deps.refs`\n // and in `deps.refs` of every collected rule/media-inner-rule whose\n // selector targets `handle`.\n /**\n * Returns the variable keys within `groupPath` that are reachable from `handle` or from any collected rule targeting it.\n *\n * @param handle Handle whose declaration refs and dependent rules are consulted.\n * @param groupPath Group prefix path (e.g. `vars/chip/look`).\n */\n reachableDefaults(\n handle: StyleHandle,\n groupPath: `vars/${string}`\n ): ReadonlySet<string> {\n const groupPrefix = `${groupPath}/`;\n const reachable = new Set<string>();\n const harvest = (refs: ReadonlySet<ContextualVarPath>): void => {\n for (const path of refs) {\n if (path.startsWith(groupPrefix)) {\n reachable.add(path.slice(groupPrefix.length));\n }\n }\n };\n\n harvest(handle.declarations.deps.refs);\n\n for (const entry of this.entries.values()) {\n if (entry.kind === 'rule') {\n if (entry.dependsOn.has(handle.key)) {\n harvest(entry.declarations.deps.refs);\n }\n continue;\n }\n if (entry.kind === 'media') {\n for (const innerRule of entry.rules) {\n if (innerRule.dependsOn.has(handle.key)) {\n harvest(innerRule.declarations.deps.refs);\n }\n }\n }\n }\n\n return reachable;\n }\n\n // Computes the final theme/var dep sets, folding in default-marker\n // contributions only for keys that survive reachability. Called once per\n // `createResolver()` and per `collectedThemeDeps`/`collectedVarDeps`\n // access; collection mutations between calls re-derive the result.\n private finalizeDeps(): {\n theme: ReadonlySet<string>;\n vars: ReadonlySet<ContextualVarPath>;\n } {\n const theme = new Set<string>(this.themeDeps);\n const vars = new Set<ContextualVarPath>(this.varDeps);\n\n for (const handle of this.handles.values()) {\n for (const group of handle.declarations.deps.defaults) {\n const reachable = this.reachableDefaults(handle, group.groupPath);\n for (const item of group.keys) {\n if (!reachable.has(item.key)) {\n continue;\n }\n vars.add(item.path);\n item.valueDeps.theme.forEach((path) => theme.add(path));\n item.valueDeps.vars.forEach((path) => vars.add(path));\n }\n }\n }\n\n // Default markers inside rule / media-inner-rule declarations don't have\n // a host handle to anchor reachability against. The runtime emits every\n // listed key when rendering such a declaration, so we mirror that here\n // and include all of them in the registry.\n for (const entry of this.entries.values()) {\n if (entry.kind === 'rule') {\n includeAllDefaults(entry.declarations.deps.defaults, theme, vars);\n continue;\n }\n if (entry.kind === 'media') {\n for (const inner of entry.rules) {\n includeAllDefaults(inner.declarations.deps.defaults, theme, vars);\n }\n }\n }\n\n return { theme, vars };\n }\n\n private retainHandle(handle: StyleHandle): boolean {\n if (!isEmptyDeclarations(handle.declarations)) {\n return true;\n }\n if (this.registry.targetsHandle(handle.key)) {\n return true;\n }\n if (this.dev && !warnedHandles.has(handle)) {\n warnedHandles.add(handle);\n this.warn(\n `Style module \"${handle.moduleName}\" handle \"${handle.localName}\" has no declarations and no rule targets it; delete the empty template.`\n );\n }\n return this.names !== 'compact';\n }\n\n private addEntry(entry: StyleEntry): void {\n if (entry.kind === 'handle' && !this.retainHandle(entry)) {\n return;\n }\n this.setEntry(entry);\n if (entry.kind === 'handle') {\n this.setHandle(entry);\n this.addDeclarationDeps(entry.declarations);\n return;\n }\n if (entry.kind === 'rule') {\n this.addDeclarationDeps(entry.declarations);\n return;\n }\n for (const rule of entry.rules) {\n this.addDeclarationDeps(rule.declarations);\n }\n }\n\n private addDeclarationDeps(declarations: Declarations): void {\n this.addDeps(declarations.deps.theme, declarations.deps.vars);\n }\n\n private addDeps(\n theme: Iterable<string>,\n vars: Iterable<ContextualVarPath>\n ): void {\n const before = this.themeDeps.size + this.varDeps.size;\n for (const path of theme) {\n this.themeDeps.add(path);\n }\n for (const path of vars) {\n this.varDeps.add(path);\n }\n if (this.themeDeps.size + this.varDeps.size !== before) {\n this.dirty = true;\n }\n }\n\n // A media entry changes when it gains inner rules.\n private setEntry(entry: StyleEntry): void {\n const key = entryKey(entry);\n const existing = this.entries.get(key);\n this.entries.set(key, entry);\n if (\n !existing ||\n (existing.kind === 'media' &&\n entry.kind === 'media' &&\n existing.rules.length !== entry.rules.length)\n ) {\n this.dirty = true;\n }\n }\n\n private setHandle(handle: StyleHandle): void {\n if (!this.handles.has(handle.key)) {\n this.dirty = true;\n }\n this.handles.set(handle.key, handle);\n }\n\n // Listeners run once the outermost public mutation returns.\n private batch<T>(mutate: () => T): T {\n this.depth += 1;\n try {\n return mutate();\n } finally {\n this.depth -= 1;\n if (this.depth === 0 && this.dirty) {\n this.dirty = false;\n for (const listener of [...this.listeners]) {\n listener();\n }\n }\n }\n }\n}\n\nconst includeAllDefaults = (\n defaults: ReadonlyArray<DefaultGroupDeps>,\n theme: Set<string>,\n vars: Set<ContextualVarPath>\n): void => {\n for (const group of defaults) {\n for (const item of group.keys) {\n vars.add(item.path);\n item.valueDeps.theme.forEach((path) => theme.add(path));\n item.valueDeps.vars.forEach((path) => vars.add(path));\n }\n }\n};\n\nconst cssVarKeysFrom = (finalized: {\n theme: ReadonlySet<string>;\n vars: ReadonlySet<ContextualVarPath>;\n}): readonly CssVarPath[] => {\n const keys = new Set<CssVarPath>();\n finalized.theme.forEach((path) => keys.add(path));\n finalized.vars.forEach((path) => keys.add(path));\n return [...keys].sort();\n};\n\nconst entryKey = (entry: StyleEntry): string => {\n if (entry.kind === 'media') {\n return `media/${entry.key}`;\n }\n return entry.key;\n};\n\nconst mediaSortRank = (entry: StyleEntry): number =>\n entry.kind === 'media' ? 1 : 0;\n\nconst localVarOverrideRank = (entry: StyleEntry): number => {\n if (entry.kind === 'media') {\n return 0;\n }\n return entry.declarations.css.some(isLocalVarOverrideMarker) ? 1 : 0;\n};\n\n// Base entries before every `@media`/`@container` block (no specificity). See finding `media-block-ordering`.\n// `${group.set()}` after `${group}` defaults so a stacked override class wins. See finding `local-var-override-ordering`.\nconst compareEntriesForEmission = (a: StyleEntry, b: StyleEntry): number => {\n const rankDelta = mediaSortRank(a) - mediaSortRank(b);\n if (rankDelta !== 0) {\n return rankDelta;\n }\n const varDelta = localVarOverrideRank(a) - localVarOverrideRank(b);\n if (varDelta !== 0) {\n return varDelta;\n }\n if (a.moduleName !== b.moduleName) {\n return a.moduleName.localeCompare(b.moduleName);\n }\n return a.key.localeCompare(b.key);\n};\n\nconst isReadonlyArray = <T>(value: unknown): value is readonly T[] =>\n Array.isArray(value);\n\nconst isStylesModule = (\n value: StylesModule | StyleHandle | StyleRule | StyleMedia\n): value is StylesModule => 'handles' in value && 'handleList' in value;\n"]}
|