@tenphi/tasty 0.0.0-snapshot.bbd10c7 → 0.0.0-snapshot.bbfcd75
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 +196 -140
- package/dist/babel-Zs1Q03qt.d.ts +83 -0
- package/dist/chunks/async-storage-CG5HnUT5.js +20 -0
- package/dist/chunks/async-storage-CG5HnUT5.js.map +1 -0
- package/dist/chunks/build-config-CUQVwdWF.js +42 -0
- package/dist/chunks/build-config-CUQVwdWF.js.map +1 -0
- package/dist/chunks/collector-B0LTHw6Z.js +208 -0
- package/dist/chunks/collector-B0LTHw6Z.js.map +1 -0
- package/dist/chunks/config-engine-C3pF9EK9.js +267 -0
- package/dist/chunks/config-engine-C3pF9EK9.js.map +1 -0
- package/dist/chunks/css-definitions-D_it4XZH.js +875 -0
- package/dist/chunks/css-definitions-D_it4XZH.js.map +1 -0
- package/dist/chunks/css-resources-BN8apgxt.js +142 -0
- package/dist/chunks/css-resources-BN8apgxt.js.map +1 -0
- package/dist/{debug.js → chunks/debug-C9LeNVoJ.js} +187 -139
- package/dist/chunks/debug-C9LeNVoJ.js.map +1 -0
- package/dist/chunks/dsl-C5yuAn41.js +1373 -0
- package/dist/chunks/dsl-C5yuAn41.js.map +1 -0
- package/dist/chunks/hydration-TRcz5vnk.js +41 -0
- package/dist/chunks/hydration-TRcz5vnk.js.map +1 -0
- package/dist/chunks/react-runtime-O-OUrKLH.js +557 -0
- package/dist/chunks/react-runtime-O-OUrKLH.js.map +1 -0
- package/dist/chunks/runtime-engine-DvnE2g-E.js +2437 -0
- package/dist/chunks/runtime-engine-DvnE2g-E.js.map +1 -0
- package/dist/chunks/runtime-state-BTDqSYBk.js +127 -0
- package/dist/chunks/runtime-state-BTDqSYBk.js.map +1 -0
- package/dist/{utils/merge-styles.js → chunks/shared-utils-DWA4LjIa.js} +55 -55
- package/dist/chunks/shared-utils-DWA4LjIa.js.map +1 -0
- package/dist/chunks/style-engine-C1ECBZxR.js +5131 -0
- package/dist/chunks/style-engine-C1ECBZxR.js.map +1 -0
- package/dist/{zero/extractor.js → chunks/zero-engine-B6EnYcXY.js} +89 -82
- package/dist/chunks/zero-engine-B6EnYcXY.js.map +1 -0
- package/dist/collector-hl5KNH7k.d.ts +165 -0
- package/dist/config-DWL1ZYue.d.ts +1358 -0
- package/dist/core/index.d.ts +5 -34
- package/dist/core/index.js +9 -27
- package/dist/index-D9N9GV24.d.ts +1947 -0
- package/dist/index.d.ts +5 -51
- package/dist/index.js +11 -36
- package/dist/{utils/merge-styles.d.ts → merge-styles-C_oMoJVd.d.ts} +3 -3
- package/dist/ssr/astro-client.js +6 -0
- package/dist/ssr/astro-client.js.map +1 -0
- package/dist/ssr/astro-middleware-extract-static.d.ts +11 -0
- package/dist/ssr/astro-middleware-extract-static.js +9 -0
- package/dist/ssr/astro-middleware-extract-static.js.map +1 -0
- package/dist/ssr/astro-middleware-extract.d.ts +11 -0
- package/dist/ssr/astro-middleware-extract.js +9 -0
- package/dist/ssr/astro-middleware-extract.js.map +1 -0
- package/dist/ssr/astro-middleware-static.d.ts +18 -0
- package/dist/ssr/astro-middleware-static.js +7 -0
- package/dist/ssr/astro-middleware-static.js.map +1 -0
- package/dist/ssr/astro-middleware.d.ts +19 -0
- package/dist/ssr/astro-middleware.js +7 -0
- package/dist/ssr/astro-middleware.js.map +1 -0
- package/dist/ssr/astro.d.ts +117 -11
- package/dist/ssr/astro.js +204 -48
- package/dist/ssr/astro.js.map +1 -1
- package/dist/ssr/index.d.ts +37 -4
- package/dist/ssr/index.js +6 -6
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/next-config.d.ts +66 -0
- package/dist/ssr/next-config.js +124 -0
- package/dist/ssr/next-config.js.map +1 -0
- package/dist/ssr/next.d.ts +14 -5
- package/dist/ssr/next.js +31 -46
- package/dist/ssr/next.js.map +1 -1
- package/dist/static/index.d.ts +91 -5
- package/dist/static/index.js +31 -3
- package/dist/static/index.js.map +1 -0
- package/dist/static/inject.js.map +1 -1
- package/dist/types-jKZNpias.d.ts +1616 -0
- package/dist/zero/babel.d.ts +2 -182
- package/dist/zero/babel.js +82 -113
- package/dist/zero/babel.js.map +1 -1
- package/dist/zero/index.d.ts +81 -3
- package/dist/zero/index.js +2 -3
- package/dist/zero/next.d.ts +1 -1
- package/dist/zero/next.js +0 -31
- package/dist/zero/next.js.map +1 -1
- package/docs/README.md +20 -12
- package/docs/adoption.md +59 -32
- package/docs/ai-agents.md +229 -0
- package/docs/comparison.md +76 -48
- package/docs/configuration.md +566 -69
- package/docs/debug.md +37 -23
- package/docs/design-system.md +63 -32
- package/docs/dsl.md +527 -179
- package/docs/getting-started.md +62 -41
- package/docs/injector.md +157 -51
- package/docs/methodology.md +69 -37
- package/docs/migration-v3.md +285 -0
- package/docs/pipeline.md +744 -0
- package/docs/plugins.md +353 -0
- package/docs/{runtime.md → react-api.md} +176 -67
- package/docs/runtime-benchmarks.md +377 -0
- package/docs/ssr.md +350 -94
- package/docs/styles.md +108 -27
- package/docs/tasty-static.md +149 -87
- package/package.json +121 -23
- package/tasty.config.ts +6 -0
- package/dist/_virtual/_rolldown/runtime.js +0 -7
- package/dist/chunks/cacheKey.js +0 -77
- package/dist/chunks/cacheKey.js.map +0 -1
- package/dist/chunks/definitions.d.ts +0 -37
- package/dist/chunks/definitions.js +0 -258
- package/dist/chunks/definitions.js.map +0 -1
- package/dist/chunks/index.d.ts +0 -1
- package/dist/chunks/renderChunk.d.ts +0 -1
- package/dist/chunks/renderChunk.js +0 -59
- package/dist/chunks/renderChunk.js.map +0 -1
- package/dist/compute-styles.d.ts +0 -31
- package/dist/compute-styles.js +0 -356
- package/dist/compute-styles.js.map +0 -1
- package/dist/config.d.ts +0 -372
- package/dist/config.js +0 -507
- package/dist/config.js.map +0 -1
- package/dist/counter-style/index.js +0 -51
- package/dist/counter-style/index.js.map +0 -1
- package/dist/debug.d.ts +0 -89
- package/dist/debug.js.map +0 -1
- package/dist/font-face/index.js +0 -63
- package/dist/font-face/index.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -7
- package/dist/hooks/useCounterStyle.d.ts +0 -50
- package/dist/hooks/useCounterStyle.js +0 -45
- package/dist/hooks/useCounterStyle.js.map +0 -1
- package/dist/hooks/useFontFace.d.ts +0 -43
- package/dist/hooks/useFontFace.js +0 -69
- package/dist/hooks/useFontFace.js.map +0 -1
- package/dist/hooks/useGlobalStyles.d.ts +0 -30
- package/dist/hooks/useGlobalStyles.js +0 -77
- package/dist/hooks/useGlobalStyles.js.map +0 -1
- package/dist/hooks/useKeyframes.d.ts +0 -56
- package/dist/hooks/useKeyframes.js +0 -63
- package/dist/hooks/useKeyframes.js.map +0 -1
- package/dist/hooks/useProperty.d.ts +0 -79
- package/dist/hooks/useProperty.js +0 -108
- package/dist/hooks/useProperty.js.map +0 -1
- package/dist/hooks/useRawCSS.d.ts +0 -53
- package/dist/hooks/useRawCSS.js +0 -34
- package/dist/hooks/useRawCSS.js.map +0 -1
- package/dist/hooks/useStyles.d.ts +0 -40
- package/dist/hooks/useStyles.js +0 -29
- package/dist/hooks/useStyles.js.map +0 -1
- package/dist/injector/index.d.ts +0 -166
- package/dist/injector/index.js +0 -166
- package/dist/injector/index.js.map +0 -1
- package/dist/injector/injector.d.ts +0 -166
- package/dist/injector/injector.js +0 -464
- package/dist/injector/injector.js.map +0 -1
- package/dist/injector/sheet-manager.d.ts +0 -136
- package/dist/injector/sheet-manager.js +0 -733
- package/dist/injector/sheet-manager.js.map +0 -1
- package/dist/injector/types.d.ts +0 -204
- package/dist/keyframes/index.js +0 -206
- package/dist/keyframes/index.js.map +0 -1
- package/dist/parser/classify.js +0 -319
- package/dist/parser/classify.js.map +0 -1
- package/dist/parser/const.js +0 -60
- package/dist/parser/const.js.map +0 -1
- package/dist/parser/lru.js +0 -109
- package/dist/parser/lru.js.map +0 -1
- package/dist/parser/parser.d.ts +0 -25
- package/dist/parser/parser.js +0 -115
- package/dist/parser/parser.js.map +0 -1
- package/dist/parser/tokenizer.js +0 -69
- package/dist/parser/tokenizer.js.map +0 -1
- package/dist/parser/types.d.ts +0 -51
- package/dist/parser/types.js +0 -46
- package/dist/parser/types.js.map +0 -1
- package/dist/pipeline/conditions.d.ts +0 -134
- package/dist/pipeline/conditions.js +0 -406
- package/dist/pipeline/conditions.js.map +0 -1
- package/dist/pipeline/exclusive.js +0 -230
- package/dist/pipeline/exclusive.js.map +0 -1
- package/dist/pipeline/index.d.ts +0 -55
- package/dist/pipeline/index.js +0 -708
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/materialize.js +0 -1103
- package/dist/pipeline/materialize.js.map +0 -1
- package/dist/pipeline/parseStateKey.d.ts +0 -15
- package/dist/pipeline/parseStateKey.js +0 -446
- package/dist/pipeline/parseStateKey.js.map +0 -1
- package/dist/pipeline/simplify.js +0 -515
- package/dist/pipeline/simplify.js.map +0 -1
- package/dist/pipeline/warnings.js +0 -18
- package/dist/pipeline/warnings.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -2
- package/dist/plugins/okhsl-plugin.d.ts +0 -35
- package/dist/plugins/okhsl-plugin.js +0 -97
- package/dist/plugins/okhsl-plugin.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -76
- package/dist/properties/index.js +0 -222
- package/dist/properties/index.js.map +0 -1
- package/dist/properties/property-type-resolver.d.ts +0 -24
- package/dist/properties/property-type-resolver.js +0 -90
- package/dist/properties/property-type-resolver.js.map +0 -1
- package/dist/ssr/async-storage.d.ts +0 -17
- package/dist/ssr/async-storage.js +0 -34
- package/dist/ssr/async-storage.js.map +0 -1
- package/dist/ssr/collect-auto-properties.js +0 -39
- package/dist/ssr/collect-auto-properties.js.map +0 -1
- package/dist/ssr/collector.d.ts +0 -102
- package/dist/ssr/collector.js +0 -219
- package/dist/ssr/collector.js.map +0 -1
- package/dist/ssr/format-global-rules.js +0 -22
- package/dist/ssr/format-global-rules.js.map +0 -1
- package/dist/ssr/format-keyframes.js +0 -69
- package/dist/ssr/format-keyframes.js.map +0 -1
- package/dist/ssr/format-property.js +0 -49
- package/dist/ssr/format-property.js.map +0 -1
- package/dist/ssr/format-rules.js +0 -73
- package/dist/ssr/format-rules.js.map +0 -1
- package/dist/ssr/hydrate.d.ts +0 -22
- package/dist/ssr/hydrate.js +0 -49
- package/dist/ssr/hydrate.js.map +0 -1
- package/dist/ssr/ssr-collector-ref.js +0 -12
- package/dist/ssr/ssr-collector-ref.js.map +0 -1
- package/dist/states/index.d.ts +0 -49
- package/dist/states/index.js +0 -170
- package/dist/states/index.js.map +0 -1
- package/dist/static/tastyStatic.d.ts +0 -46
- package/dist/static/tastyStatic.js +0 -30
- package/dist/static/tastyStatic.js.map +0 -1
- package/dist/static/types.d.ts +0 -49
- package/dist/static/types.js +0 -24
- package/dist/static/types.js.map +0 -1
- package/dist/styles/border.d.ts +0 -25
- package/dist/styles/border.js +0 -120
- package/dist/styles/border.js.map +0 -1
- package/dist/styles/color.d.ts +0 -14
- package/dist/styles/color.js +0 -26
- package/dist/styles/color.js.map +0 -1
- package/dist/styles/const.js +0 -17
- package/dist/styles/const.js.map +0 -1
- package/dist/styles/createStyle.js +0 -79
- package/dist/styles/createStyle.js.map +0 -1
- package/dist/styles/dimension.js +0 -109
- package/dist/styles/dimension.js.map +0 -1
- package/dist/styles/directional.js +0 -133
- package/dist/styles/directional.js.map +0 -1
- package/dist/styles/display.d.ts +0 -30
- package/dist/styles/display.js +0 -73
- package/dist/styles/display.js.map +0 -1
- package/dist/styles/fade.d.ts +0 -15
- package/dist/styles/fade.js +0 -62
- package/dist/styles/fade.js.map +0 -1
- package/dist/styles/fill.d.ts +0 -42
- package/dist/styles/fill.js +0 -51
- package/dist/styles/fill.js.map +0 -1
- package/dist/styles/flow.d.ts +0 -16
- package/dist/styles/flow.js +0 -12
- package/dist/styles/flow.js.map +0 -1
- package/dist/styles/gap.d.ts +0 -31
- package/dist/styles/gap.js +0 -38
- package/dist/styles/gap.js.map +0 -1
- package/dist/styles/height.d.ts +0 -17
- package/dist/styles/height.js +0 -19
- package/dist/styles/height.js.map +0 -1
- package/dist/styles/index.d.ts +0 -1
- package/dist/styles/index.js +0 -8
- package/dist/styles/index.js.map +0 -1
- package/dist/styles/inset.d.ts +0 -24
- package/dist/styles/inset.js +0 -34
- package/dist/styles/inset.js.map +0 -1
- package/dist/styles/list.d.ts +0 -16
- package/dist/styles/list.js +0 -100
- package/dist/styles/list.js.map +0 -1
- package/dist/styles/margin.d.ts +0 -24
- package/dist/styles/margin.js +0 -32
- package/dist/styles/margin.js.map +0 -1
- package/dist/styles/outline.d.ts +0 -29
- package/dist/styles/outline.js +0 -55
- package/dist/styles/outline.js.map +0 -1
- package/dist/styles/padding.d.ts +0 -24
- package/dist/styles/padding.js +0 -32
- package/dist/styles/padding.js.map +0 -1
- package/dist/styles/placement.d.ts +0 -37
- package/dist/styles/placement.js +0 -74
- package/dist/styles/placement.js.map +0 -1
- package/dist/styles/predefined.d.ts +0 -71
- package/dist/styles/predefined.js +0 -237
- package/dist/styles/predefined.js.map +0 -1
- package/dist/styles/preset.d.ts +0 -52
- package/dist/styles/preset.js +0 -127
- package/dist/styles/preset.js.map +0 -1
- package/dist/styles/radius.d.ts +0 -12
- package/dist/styles/radius.js +0 -83
- package/dist/styles/radius.js.map +0 -1
- package/dist/styles/scrollMargin.d.ts +0 -24
- package/dist/styles/scrollMargin.js +0 -32
- package/dist/styles/scrollMargin.js.map +0 -1
- package/dist/styles/scrollbar.d.ts +0 -25
- package/dist/styles/scrollbar.js +0 -51
- package/dist/styles/scrollbar.js.map +0 -1
- package/dist/styles/shadow.d.ts +0 -14
- package/dist/styles/shadow.js +0 -25
- package/dist/styles/shadow.js.map +0 -1
- package/dist/styles/shared.js +0 -17
- package/dist/styles/shared.js.map +0 -1
- package/dist/styles/transition.d.ts +0 -14
- package/dist/styles/transition.js +0 -159
- package/dist/styles/transition.js.map +0 -1
- package/dist/styles/types.d.ts +0 -564
- package/dist/styles/width.d.ts +0 -17
- package/dist/styles/width.js +0 -19
- package/dist/styles/width.js.map +0 -1
- package/dist/tasty.d.ts +0 -134
- package/dist/tasty.js +0 -240
- package/dist/tasty.js.map +0 -1
- package/dist/types.d.ts +0 -184
- package/dist/utils/cache-wrapper.js +0 -21
- package/dist/utils/cache-wrapper.js.map +0 -1
- package/dist/utils/case-converter.js +0 -8
- package/dist/utils/case-converter.js.map +0 -1
- package/dist/utils/color-math.d.ts +0 -46
- package/dist/utils/color-math.js +0 -749
- package/dist/utils/color-math.js.map +0 -1
- package/dist/utils/color-space.d.ts +0 -5
- package/dist/utils/color-space.js +0 -228
- package/dist/utils/color-space.js.map +0 -1
- package/dist/utils/colors.d.ts +0 -5
- package/dist/utils/colors.js +0 -10
- package/dist/utils/colors.js.map +0 -1
- package/dist/utils/css-types.d.ts +0 -7
- package/dist/utils/dotize.d.ts +0 -26
- package/dist/utils/dotize.js +0 -122
- package/dist/utils/dotize.js.map +0 -1
- package/dist/utils/filter-base-props.d.ts +0 -15
- package/dist/utils/filter-base-props.js +0 -45
- package/dist/utils/filter-base-props.js.map +0 -1
- package/dist/utils/get-display-name.d.ts +0 -7
- package/dist/utils/get-display-name.js +0 -10
- package/dist/utils/get-display-name.js.map +0 -1
- package/dist/utils/has-keys.js +0 -13
- package/dist/utils/has-keys.js.map +0 -1
- package/dist/utils/is-dev-env.js +0 -19
- package/dist/utils/is-dev-env.js.map +0 -1
- package/dist/utils/is-valid-element-type.js +0 -15
- package/dist/utils/is-valid-element-type.js.map +0 -1
- package/dist/utils/merge-styles.js.map +0 -1
- package/dist/utils/mod-attrs.d.ts +0 -6
- package/dist/utils/mod-attrs.js +0 -20
- package/dist/utils/mod-attrs.js.map +0 -1
- package/dist/utils/process-tokens.d.ts +0 -17
- package/dist/utils/process-tokens.js +0 -83
- package/dist/utils/process-tokens.js.map +0 -1
- package/dist/utils/resolve-recipes.d.ts +0 -17
- package/dist/utils/resolve-recipes.js +0 -146
- package/dist/utils/resolve-recipes.js.map +0 -1
- package/dist/utils/selector-transform.js +0 -32
- package/dist/utils/selector-transform.js.map +0 -1
- package/dist/utils/string.js +0 -8
- package/dist/utils/string.js.map +0 -1
- package/dist/utils/styles.d.ts +0 -99
- package/dist/utils/styles.js +0 -220
- package/dist/utils/styles.js.map +0 -1
- package/dist/utils/typography.d.ts +0 -47
- package/dist/utils/typography.js +0 -51
- package/dist/utils/typography.js.map +0 -1
- package/dist/utils/warnings.d.ts +0 -16
- package/dist/utils/warnings.js +0 -16
- package/dist/utils/warnings.js.map +0 -1
- package/dist/zero/css-writer.d.ts +0 -45
- package/dist/zero/css-writer.js +0 -73
- package/dist/zero/css-writer.js.map +0 -1
- package/dist/zero/extractor.d.ts +0 -24
- package/dist/zero/extractor.js.map +0 -1
- package/docs/PIPELINE.md +0 -519
- /package/dist/{chunks/cacheKey.d.ts → ssr/astro-client.d.ts} +0 -0
package/dist/utils/styles.d.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { ProcessedStyle, StyleDetails } from "../parser/types.js";
|
|
2
|
-
import { StyleParser } from "../parser/parser.js";
|
|
3
|
-
import { getNamedColorHex, getRgbValuesFromRgbaString, hexToRgb, strToRgb } from "./color-math.js";
|
|
4
|
-
|
|
5
|
-
//#region src/utils/styles.d.ts
|
|
6
|
-
type StyleValue<T = string> = T | boolean | number | null | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* Normalize a color token value.
|
|
9
|
-
* - Boolean `true` is converted to `'transparent'`
|
|
10
|
-
* - Boolean `false` returns `null` (signals the token should be skipped)
|
|
11
|
-
* - Other values are returned as-is
|
|
12
|
-
*
|
|
13
|
-
* @param value - The raw token value
|
|
14
|
-
* @returns Normalized value or null if the token should be skipped
|
|
15
|
-
*/
|
|
16
|
-
declare function normalizeColorTokenValue<T>(value: T | boolean): T | 'transparent' | null;
|
|
17
|
-
type StyleValueStateMap<T = string> = Record<string, StyleValue<T> | '@inherit'>;
|
|
18
|
-
/**
|
|
19
|
-
* Combined type for style values that can be either a direct value or a state map.
|
|
20
|
-
* Use this for component props that accept style values.
|
|
21
|
-
*/
|
|
22
|
-
type StylePropValue<T = string> = StyleValue<T> | StyleValueStateMap<T>;
|
|
23
|
-
type CSSMap = {
|
|
24
|
-
$?: string | string[];
|
|
25
|
-
} & Record<string, string | string[]>;
|
|
26
|
-
type StyleHandlerResult = CSSMap | CSSMap[] | null | void;
|
|
27
|
-
type RawStyleHandler = (value: StyleValueStateMap) => StyleHandlerResult;
|
|
28
|
-
type StyleHandler = RawStyleHandler & {
|
|
29
|
-
__lookupStyles: string[];
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Handler definition forms for configure() and plugins.
|
|
33
|
-
* - Function only: lookup styles inferred from key name
|
|
34
|
-
* - Single property tuple: ['styleName', handler]
|
|
35
|
-
* - Multi-property tuple: [['style1', 'style2'], handler]
|
|
36
|
-
*/
|
|
37
|
-
type StyleHandlerDefinition = RawStyleHandler | [string, RawStyleHandler] | [string[], RawStyleHandler];
|
|
38
|
-
interface ParsedColor {
|
|
39
|
-
color?: string;
|
|
40
|
-
name?: string;
|
|
41
|
-
opacity?: number;
|
|
42
|
-
}
|
|
43
|
-
type StyleMap = Record<string, StyleValue | StyleValueStateMap>;
|
|
44
|
-
declare const CUSTOM_UNITS: {
|
|
45
|
-
r: string;
|
|
46
|
-
cr: string;
|
|
47
|
-
bw: string;
|
|
48
|
-
ow: string;
|
|
49
|
-
x: string;
|
|
50
|
-
sf: (num: number) => string;
|
|
51
|
-
};
|
|
52
|
-
declare const DIRECTIONS: string[];
|
|
53
|
-
declare function customFunc(name: string, fn: (groups: StyleDetails[]) => string): void;
|
|
54
|
-
/**
|
|
55
|
-
* Get the global StyleParser instance.
|
|
56
|
-
* Used by configure() to apply parser configuration.
|
|
57
|
-
*/
|
|
58
|
-
declare function getGlobalParser(): StyleParser;
|
|
59
|
-
/**
|
|
60
|
-
* Get the current custom functions registry.
|
|
61
|
-
* Used by configure() to merge with new functions.
|
|
62
|
-
*/
|
|
63
|
-
declare function getGlobalFuncs(): Record<string, (groups: StyleDetails[]) => string>;
|
|
64
|
-
/**
|
|
65
|
-
* Set global predefined tokens.
|
|
66
|
-
* Called from configure() after processing token values.
|
|
67
|
-
* Merges with existing tokens (new tokens override existing ones with same key).
|
|
68
|
-
* Keys are normalized to lowercase (parser lowercases input before classification).
|
|
69
|
-
* @internal
|
|
70
|
-
*/
|
|
71
|
-
declare function setGlobalPredefinedTokens(tokens: Record<string, string>): void;
|
|
72
|
-
/**
|
|
73
|
-
* Get the current global predefined tokens.
|
|
74
|
-
* Returns null if no tokens are configured.
|
|
75
|
-
*/
|
|
76
|
-
declare function getGlobalPredefinedTokens(): Record<string, string> | null;
|
|
77
|
-
/**
|
|
78
|
-
* Reset global predefined tokens.
|
|
79
|
-
* Used for testing.
|
|
80
|
-
* @internal
|
|
81
|
-
*/
|
|
82
|
-
declare function resetGlobalPredefinedTokens(): void;
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
* @param {String} value
|
|
86
|
-
* @param {Number} mode
|
|
87
|
-
* @returns {Object<String,String|Array>}
|
|
88
|
-
*/
|
|
89
|
-
declare function parseStyle(value: StyleValue): ProcessedStyle;
|
|
90
|
-
/**
|
|
91
|
-
* Parse color. Find it value, name and opacity.
|
|
92
|
-
* Optimized to avoid heavy parseStyle calls for simple color patterns.
|
|
93
|
-
*/
|
|
94
|
-
declare function parseColor(val: string, ignoreError?: boolean): ParsedColor;
|
|
95
|
-
declare function filterMods(mods: string[], allowedMods: string[]): string[];
|
|
96
|
-
declare function stringifyStyles(styles: unknown): string;
|
|
97
|
-
//#endregion
|
|
98
|
-
export { CSSMap, CUSTOM_UNITS, DIRECTIONS, ParsedColor, RawStyleHandler, StyleHandler, StyleHandlerDefinition, StyleHandlerResult, StyleMap, StylePropValue, StyleValue, StyleValueStateMap, customFunc, filterMods, getGlobalFuncs, getGlobalParser, getGlobalPredefinedTokens, normalizeColorTokenValue, parseColor, parseStyle, resetGlobalPredefinedTokens, setGlobalPredefinedTokens, stringifyStyles };
|
|
99
|
-
//# sourceMappingURL=styles.d.ts.map
|
package/dist/utils/styles.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { getNamedColorHex } from "./color-math.js";
|
|
2
|
-
import { StyleParser } from "../parser/parser.js";
|
|
3
|
-
import { okhslFunc } from "../plugins/okhsl-plugin.js";
|
|
4
|
-
//#region src/utils/styles.ts
|
|
5
|
-
/**
|
|
6
|
-
* Normalize a color token value.
|
|
7
|
-
* - Boolean `true` is converted to `'transparent'`
|
|
8
|
-
* - Boolean `false` returns `null` (signals the token should be skipped)
|
|
9
|
-
* - Other values are returned as-is
|
|
10
|
-
*
|
|
11
|
-
* @param value - The raw token value
|
|
12
|
-
* @returns Normalized value or null if the token should be skipped
|
|
13
|
-
*/
|
|
14
|
-
function normalizeColorTokenValue(value) {
|
|
15
|
-
if (value === true) return "transparent";
|
|
16
|
-
if (value === false) return null;
|
|
17
|
-
return value;
|
|
18
|
-
}
|
|
19
|
-
const COLOR_VAR_PATTERN = /var\(--([a-z0-9-]+)-color/;
|
|
20
|
-
const COLOR_VAR_COMPONENTS_PATTERN = /var\(--([a-z0-9-]+)-color-(?:rgb|hsl|oklch)/;
|
|
21
|
-
const RGB_ALPHA_PATTERN = /\/\s*([0-9.]+)\)/;
|
|
22
|
-
const RE_HEX_COLOR = /^#[0-9a-fA-F]{3,8}$/;
|
|
23
|
-
const RE_VAR_COLOR = /^var\(--[a-z0-9-]+-color/;
|
|
24
|
-
function isSimpleColorFast(val) {
|
|
25
|
-
switch (val.charCodeAt(0)) {
|
|
26
|
-
case 35: return RE_HEX_COLOR.test(val);
|
|
27
|
-
case 114: return val.charCodeAt(1) === 103 && val.charCodeAt(2) === 98;
|
|
28
|
-
case 104: return val.charCodeAt(1) === 115 && val.charCodeAt(2) === 108;
|
|
29
|
-
case 108: return val.charCodeAt(1) === 99 && val.charCodeAt(2) === 104;
|
|
30
|
-
case 111: return val.startsWith("oklch(") || val.startsWith("okhsl(");
|
|
31
|
-
case 118: return RE_VAR_COLOR.test(val);
|
|
32
|
-
case 99: return val === "currentColor" || val === "currentcolor";
|
|
33
|
-
case 116: return val === "transparent";
|
|
34
|
-
default: return getNamedColorHex().has(val.toLowerCase());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
let colorWarningCount = 0;
|
|
38
|
-
const MAX_COLOR_WARNINGS = 10;
|
|
39
|
-
const CUSTOM_UNITS = {
|
|
40
|
-
r: "6px",
|
|
41
|
-
cr: "10px",
|
|
42
|
-
bw: "1px",
|
|
43
|
-
ow: "3px",
|
|
44
|
-
x: "8px",
|
|
45
|
-
sf: function sf(num) {
|
|
46
|
-
return `minmax(0, ${num}fr)`;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const DIRECTIONS = [
|
|
50
|
-
"top",
|
|
51
|
-
"right",
|
|
52
|
-
"bottom",
|
|
53
|
-
"left"
|
|
54
|
-
];
|
|
55
|
-
let __tastyParser = null;
|
|
56
|
-
function getOrCreateParser() {
|
|
57
|
-
if (!__tastyParser) {
|
|
58
|
-
__tastyParser = new StyleParser({ units: CUSTOM_UNITS });
|
|
59
|
-
__tastyParser.setFuncs(__tastyFuncs);
|
|
60
|
-
}
|
|
61
|
-
return __tastyParser;
|
|
62
|
-
}
|
|
63
|
-
const __tastyFuncs = { okhsl: okhslFunc };
|
|
64
|
-
function customFunc(name, fn) {
|
|
65
|
-
__tastyFuncs[name] = fn;
|
|
66
|
-
getOrCreateParser().setFuncs(__tastyFuncs);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Get the global StyleParser instance.
|
|
70
|
-
* Used by configure() to apply parser configuration.
|
|
71
|
-
*/
|
|
72
|
-
function getGlobalParser() {
|
|
73
|
-
return getOrCreateParser();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Get the current custom functions registry.
|
|
77
|
-
* Used by configure() to merge with new functions.
|
|
78
|
-
*/
|
|
79
|
-
function getGlobalFuncs() {
|
|
80
|
-
return __tastyFuncs;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Storage for predefined tokens that are replaced during style parsing.
|
|
84
|
-
* Keys are token names (with $ or # prefix), values are pre-processed CSS values.
|
|
85
|
-
*/
|
|
86
|
-
let __globalPredefinedTokens = null;
|
|
87
|
-
/**
|
|
88
|
-
* Set global predefined tokens.
|
|
89
|
-
* Called from configure() after processing token values.
|
|
90
|
-
* Merges with existing tokens (new tokens override existing ones with same key).
|
|
91
|
-
* Keys are normalized to lowercase (parser lowercases input before classification).
|
|
92
|
-
* @internal
|
|
93
|
-
*/
|
|
94
|
-
function setGlobalPredefinedTokens(tokens) {
|
|
95
|
-
const normalizedTokens = {};
|
|
96
|
-
for (const [key, value] of Object.entries(tokens)) {
|
|
97
|
-
const lowerKey = key.toLowerCase();
|
|
98
|
-
const lowerValue = value.toLowerCase();
|
|
99
|
-
if (lowerKey.startsWith("#") && lowerValue === "#current") {
|
|
100
|
-
console.warn(`Tasty: Using #current to define color token "${key}" is not supported. The #current token represents currentcolor which cannot be used as a base for other tokens.`);
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
normalizedTokens[lowerKey] = value;
|
|
104
|
-
}
|
|
105
|
-
__globalPredefinedTokens = __globalPredefinedTokens ? {
|
|
106
|
-
...__globalPredefinedTokens,
|
|
107
|
-
...normalizedTokens
|
|
108
|
-
} : normalizedTokens;
|
|
109
|
-
getOrCreateParser().clearCache();
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get the current global predefined tokens.
|
|
113
|
-
* Returns null if no tokens are configured.
|
|
114
|
-
*/
|
|
115
|
-
function getGlobalPredefinedTokens() {
|
|
116
|
-
return __globalPredefinedTokens;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Reset global predefined tokens.
|
|
120
|
-
* Used for testing.
|
|
121
|
-
* @internal
|
|
122
|
-
*/
|
|
123
|
-
function resetGlobalPredefinedTokens() {
|
|
124
|
-
__globalPredefinedTokens = null;
|
|
125
|
-
getOrCreateParser().clearCache();
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
*
|
|
129
|
-
* @param {String} value
|
|
130
|
-
* @param {Number} mode
|
|
131
|
-
* @returns {Object<String,String|Array>}
|
|
132
|
-
*/
|
|
133
|
-
function parseStyle(value) {
|
|
134
|
-
let str;
|
|
135
|
-
if (typeof value === "string") str = value;
|
|
136
|
-
else if (typeof value === "number") str = String(value);
|
|
137
|
-
else str = "";
|
|
138
|
-
return getOrCreateParser().process(str);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Parse color. Find it value, name and opacity.
|
|
142
|
-
* Optimized to avoid heavy parseStyle calls for simple color patterns.
|
|
143
|
-
*/
|
|
144
|
-
function parseColor(val, ignoreError = false) {
|
|
145
|
-
if (typeof val !== "string") val = String(val ?? "");
|
|
146
|
-
val = val.trim();
|
|
147
|
-
if (!val) return {};
|
|
148
|
-
const isSimpleColor = isSimpleColorFast(val);
|
|
149
|
-
let firstColor;
|
|
150
|
-
if (isSimpleColor) firstColor = val;
|
|
151
|
-
else {
|
|
152
|
-
const extractedColor = parseStyle(val).groups.find((g) => g.colors.length)?.colors[0];
|
|
153
|
-
if (!extractedColor) {
|
|
154
|
-
if (!ignoreError && colorWarningCount < MAX_COLOR_WARNINGS) {
|
|
155
|
-
console.warn("Tasty: unable to parse color:", val);
|
|
156
|
-
colorWarningCount++;
|
|
157
|
-
if (colorWarningCount === MAX_COLOR_WARNINGS) console.warn("Tasty: color parsing warnings will be suppressed from now on");
|
|
158
|
-
}
|
|
159
|
-
return {};
|
|
160
|
-
}
|
|
161
|
-
firstColor = extractedColor;
|
|
162
|
-
}
|
|
163
|
-
let nameMatch = firstColor.match(COLOR_VAR_PATTERN);
|
|
164
|
-
if (!nameMatch) nameMatch = firstColor.match(COLOR_VAR_COMPONENTS_PATTERN);
|
|
165
|
-
let opacity;
|
|
166
|
-
if (firstColor.startsWith("rgb") || firstColor.startsWith("hsl") || firstColor.startsWith("lch") || firstColor.startsWith("oklch") || firstColor.startsWith("okhsl")) {
|
|
167
|
-
const alphaMatch = firstColor.match(RGB_ALPHA_PATTERN);
|
|
168
|
-
if (alphaMatch) {
|
|
169
|
-
const v = parseFloat(alphaMatch[1]);
|
|
170
|
-
if (!isNaN(v)) opacity = v * 100;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return {
|
|
174
|
-
color: firstColor,
|
|
175
|
-
name: nameMatch ? nameMatch[1] : void 0,
|
|
176
|
-
opacity
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
function filterMods(mods, allowedMods) {
|
|
180
|
-
return mods.filter((mod) => allowedMods.includes(mod));
|
|
181
|
-
}
|
|
182
|
-
const _innerCache = /* @__PURE__ */ new WeakMap();
|
|
183
|
-
const _topLevelCache = /* @__PURE__ */ new WeakMap();
|
|
184
|
-
function stringifyStyles(styles) {
|
|
185
|
-
if (styles == null || typeof styles !== "object") return "";
|
|
186
|
-
const cached = _topLevelCache.get(styles);
|
|
187
|
-
if (cached !== void 0) return cached;
|
|
188
|
-
const obj = styles;
|
|
189
|
-
const keys = Object.keys(obj).sort();
|
|
190
|
-
const parts = [];
|
|
191
|
-
for (const k of keys) {
|
|
192
|
-
const v = obj[k];
|
|
193
|
-
if (v === void 0 || typeof v === "function" || typeof v === "symbol") continue;
|
|
194
|
-
const c0 = k.charCodeAt(0);
|
|
195
|
-
const needsInnerSort = (c0 >= 65 && c0 <= 90 || c0 === 38) && v && typeof v === "object" && !Array.isArray(v);
|
|
196
|
-
let sv;
|
|
197
|
-
if (needsInnerSort) {
|
|
198
|
-
sv = _innerCache.get(v);
|
|
199
|
-
if (sv === void 0) {
|
|
200
|
-
const innerObj = v;
|
|
201
|
-
const innerKeys = Object.keys(innerObj).sort();
|
|
202
|
-
const innerParts = [];
|
|
203
|
-
for (const ik of innerKeys) {
|
|
204
|
-
const ivs = JSON.stringify(innerObj[ik]);
|
|
205
|
-
if (ivs !== void 0) innerParts.push(JSON.stringify(ik) + ":" + ivs);
|
|
206
|
-
}
|
|
207
|
-
sv = "{" + innerParts.join(",") + "}";
|
|
208
|
-
_innerCache.set(v, sv);
|
|
209
|
-
}
|
|
210
|
-
} else sv = JSON.stringify(v);
|
|
211
|
-
parts.push(JSON.stringify(k) + ":" + sv);
|
|
212
|
-
}
|
|
213
|
-
const result = "{" + parts.join(",") + "}";
|
|
214
|
-
_topLevelCache.set(styles, result);
|
|
215
|
-
return result;
|
|
216
|
-
}
|
|
217
|
-
//#endregion
|
|
218
|
-
export { CUSTOM_UNITS, DIRECTIONS, customFunc, filterMods, getGlobalFuncs, getGlobalParser, getGlobalPredefinedTokens, normalizeColorTokenValue, parseColor, parseStyle, resetGlobalPredefinedTokens, setGlobalPredefinedTokens, stringifyStyles };
|
|
219
|
-
|
|
220
|
-
//# sourceMappingURL=styles.js.map
|
package/dist/utils/styles.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","names":[],"sources":["../../src/utils/styles.ts"],"sourcesContent":["import { StyleParser } from '../parser/parser';\nimport { okhslFunc } from '../plugins/okhsl-plugin';\n\nimport type { ProcessedStyle, StyleDetails } from '../parser/types';\n\nimport { getNamedColorHex } from './color-math';\n\nexport {\n getNamedColorHex,\n getRgbValuesFromRgbaString,\n hexToRgb,\n strToRgb,\n} from './color-math';\n\nexport type StyleValue<T = string> = T | boolean | number | null | undefined;\n\n/**\n * Normalize a color token value.\n * - Boolean `true` is converted to `'transparent'`\n * - Boolean `false` returns `null` (signals the token should be skipped)\n * - Other values are returned as-is\n *\n * @param value - The raw token value\n * @returns Normalized value or null if the token should be skipped\n */\nexport function normalizeColorTokenValue<T>(\n value: T | boolean,\n): T | 'transparent' | null {\n if (value === true) {\n return 'transparent';\n }\n if (value === false) {\n return null;\n }\n return value as T;\n}\n\nexport type StyleValueStateMap<T = string> = Record<\n string,\n StyleValue<T> | '@inherit'\n>;\n\n/**\n * Combined type for style values that can be either a direct value or a state map.\n * Use this for component props that accept style values.\n */\nexport type StylePropValue<T = string> = StyleValue<T> | StyleValueStateMap<T>;\n\nexport type CSSMap = { $?: string | string[] } & Record<\n string,\n string | string[]\n>;\n\nexport type StyleHandlerResult = CSSMap | CSSMap[] | null | void;\n\nexport type RawStyleHandler = (value: StyleValueStateMap) => StyleHandlerResult;\n\nexport type StyleHandler = RawStyleHandler & {\n __lookupStyles: string[];\n};\n\n/**\n * Handler definition forms for configure() and plugins.\n * - Function only: lookup styles inferred from key name\n * - Single property tuple: ['styleName', handler]\n * - Multi-property tuple: [['style1', 'style2'], handler]\n */\nexport type StyleHandlerDefinition =\n | RawStyleHandler\n | [string, RawStyleHandler]\n | [string[], RawStyleHandler];\n\nexport interface ParsedColor {\n color?: string;\n name?: string;\n opacity?: number;\n}\n\nexport type StyleMap = Record<string, StyleValue | StyleValueStateMap>;\n\nconst devMode = process.env.NODE_ENV !== 'production';\n\n// Precompiled regex patterns for parseColor optimization\n// Match var(--name-color...) and extract the name, regardless of fallbacks\nconst COLOR_VAR_PATTERN = /var\\(--([a-z0-9-]+)-color/;\nconst COLOR_VAR_COMPONENTS_PATTERN =\n /var\\(--([a-z0-9-]+)-color-(?:rgb|hsl|oklch)/;\nconst RGB_ALPHA_PATTERN = /\\/\\s*([0-9.]+)\\)/;\nconst RE_HEX_COLOR = /^#[0-9a-fA-F]{3,8}$/;\nconst RE_VAR_COLOR = /^var\\(--[a-z0-9-]+-color/;\n\nfunction isSimpleColorFast(val: string): boolean {\n const c0 = val.charCodeAt(0);\n\n switch (c0) {\n case 35: // '#'\n return RE_HEX_COLOR.test(val);\n case 114: // 'r'\n return val.charCodeAt(1) === 103 && val.charCodeAt(2) === 98; // 'rgb'\n case 104: // 'h'\n return val.charCodeAt(1) === 115 && val.charCodeAt(2) === 108; // 'hsl'\n case 108: // 'l'\n return val.charCodeAt(1) === 99 && val.charCodeAt(2) === 104; // 'lch'\n case 111: // 'o'\n return val.startsWith('oklch(') || val.startsWith('okhsl(');\n case 118: // 'v'\n return RE_VAR_COLOR.test(val);\n case 99: // 'c'\n return val === 'currentColor' || val === 'currentcolor';\n case 116: // 't'\n return val === 'transparent';\n default:\n return getNamedColorHex().has(val.toLowerCase());\n }\n}\n\n// Rate limiting for dev warnings to avoid spam\nlet colorWarningCount = 0;\nconst MAX_COLOR_WARNINGS = 10;\n\nexport const CUSTOM_UNITS = {\n r: '6px',\n cr: '10px',\n bw: '1px',\n ow: '3px',\n x: '8px',\n sf: function sf(num: number) {\n return `minmax(0, ${num}fr)`;\n },\n};\n\nexport const DIRECTIONS = ['top', 'right', 'bottom', 'left'];\n\n// Lazy-initialized to break the circular dependency:\n// parser.ts → classify.ts → utils/styles.ts → parser.ts\nlet __tastyParser: StyleParser | null = null;\n\nfunction getOrCreateParser(): StyleParser {\n if (!__tastyParser) {\n __tastyParser = new StyleParser({ units: CUSTOM_UNITS });\n __tastyParser.setFuncs(__tastyFuncs);\n }\n return __tastyParser;\n}\n\n// Registry for user-provided custom functions that the parser can call.\n// It is updated through the `customFunc` helper exported below.\n// okhsl is registered as a built-in function so it works regardless of\n// tree-shaking or module initialization order.\nconst __tastyFuncs: Record<string, (groups: StyleDetails[]) => string> = {\n okhsl: okhslFunc,\n};\n\nexport function customFunc(\n name: string,\n fn: (groups: StyleDetails[]) => string,\n) {\n __tastyFuncs[name] = fn;\n getOrCreateParser().setFuncs(__tastyFuncs);\n}\n\n/**\n * Get the global StyleParser instance.\n * Used by configure() to apply parser configuration.\n */\nexport function getGlobalParser(): StyleParser {\n return getOrCreateParser();\n}\n\n/**\n * Get the current custom functions registry.\n * Used by configure() to merge with new functions.\n */\nexport function getGlobalFuncs(): Record<\n string,\n (groups: StyleDetails[]) => string\n> {\n return __tastyFuncs;\n}\n\n// ============================================================================\n// Global Predefined Tokens\n// ============================================================================\n\n/**\n * Storage for predefined tokens that are replaced during style parsing.\n * Keys are token names (with $ or # prefix), values are pre-processed CSS values.\n */\nlet __globalPredefinedTokens: Record<string, string> | null = null;\n\n/**\n * Set global predefined tokens.\n * Called from configure() after processing token values.\n * Merges with existing tokens (new tokens override existing ones with same key).\n * Keys are normalized to lowercase (parser lowercases input before classification).\n * @internal\n */\nexport function setGlobalPredefinedTokens(\n tokens: Record<string, string>,\n): void {\n // Normalize keys to lowercase for case-insensitive matching\n const normalizedTokens: Record<string, string> = {};\n for (const [key, value] of Object.entries(tokens)) {\n const lowerKey = key.toLowerCase();\n const lowerValue = value.toLowerCase();\n\n // Warn if trying to use bare #current to define other color tokens\n // #current represents currentcolor which cannot be used as a base for recursive token resolution\n // Note: #current.5 (with opacity) is allowed since it resolves to a concrete color-mix value\n if (lowerKey.startsWith('#') && lowerValue === '#current') {\n console.warn(\n `Tasty: Using #current to define color token \"${key}\" is not supported. ` +\n `The #current token represents currentcolor which cannot be used as a base for other tokens.`,\n );\n continue; // Skip this token\n }\n\n normalizedTokens[lowerKey] = value;\n }\n // Merge with existing tokens (consistent with how states, units, funcs are handled)\n __globalPredefinedTokens = __globalPredefinedTokens\n ? { ...__globalPredefinedTokens, ...normalizedTokens }\n : normalizedTokens;\n // Clear parser cache since token values affect parsing\n getOrCreateParser().clearCache();\n}\n\n/**\n * Get the current global predefined tokens.\n * Returns null if no tokens are configured.\n */\nexport function getGlobalPredefinedTokens(): Record<string, string> | null {\n return __globalPredefinedTokens;\n}\n\n/**\n * Reset global predefined tokens.\n * Used for testing.\n * @internal\n */\nexport function resetGlobalPredefinedTokens(): void {\n __globalPredefinedTokens = null;\n // Clear parser cache since token availability affects parsing\n getOrCreateParser().clearCache();\n}\n\n/**\n *\n * @param {String} value\n * @param {Number} mode\n * @returns {Object<String,String|Array>}\n */\nexport function parseStyle(value: StyleValue): ProcessedStyle {\n let str: string;\n\n if (typeof value === 'string') {\n str = value;\n } else if (typeof value === 'number') {\n str = String(value);\n } else {\n // boolean, null, undefined, objects etc. → empty string\n str = '';\n }\n\n return getOrCreateParser().process(str);\n}\n\n/**\n * Parse color. Find it value, name and opacity.\n * Optimized to avoid heavy parseStyle calls for simple color patterns.\n */\nexport function parseColor(val: string, ignoreError = false): ParsedColor {\n // Early return for non-strings or empty values\n if (typeof val !== 'string') {\n val = String(val ?? '');\n }\n\n val = val.trim();\n if (!val) return {};\n\n // Fast path: Check if it's a simple color pattern that doesn't need full parsing\n const isSimpleColor = isSimpleColorFast(val);\n\n let firstColor: string;\n if (isSimpleColor) {\n // For simple colors, use the value directly without parsing\n firstColor = val;\n } else {\n const processed = parseStyle(val);\n const extractedColor = processed.groups.find((g) => g.colors.length)\n ?.colors[0];\n\n if (!extractedColor) {\n // Rate-limited warning to avoid spam\n if (!ignoreError && devMode && colorWarningCount < MAX_COLOR_WARNINGS) {\n console.warn('Tasty: unable to parse color:', val);\n colorWarningCount++;\n if (colorWarningCount === MAX_COLOR_WARNINGS) {\n console.warn(\n 'Tasty: color parsing warnings will be suppressed from now on',\n );\n }\n }\n return {};\n }\n\n firstColor = extractedColor;\n }\n\n // Extract color name (if present) from variable pattern using precompiled regex\n let nameMatch = firstColor.match(COLOR_VAR_PATTERN);\n if (!nameMatch) {\n nameMatch = firstColor.match(COLOR_VAR_COMPONENTS_PATTERN);\n }\n\n let opacity: number | undefined;\n if (\n firstColor.startsWith('rgb') ||\n firstColor.startsWith('hsl') ||\n firstColor.startsWith('lch') ||\n firstColor.startsWith('oklch') ||\n firstColor.startsWith('okhsl')\n ) {\n const alphaMatch = firstColor.match(RGB_ALPHA_PATTERN);\n if (alphaMatch) {\n const v = parseFloat(alphaMatch[1]);\n if (!isNaN(v)) opacity = v * 100;\n }\n }\n\n return {\n color: firstColor,\n name: nameMatch ? nameMatch[1] : undefined,\n opacity,\n };\n}\n\nexport function filterMods(mods: string[], allowedMods: string[]): string[] {\n return mods.filter((mod) => allowedMods.includes(mod));\n}\n\n// ============================================================================\n// Style Stringification\n// ============================================================================\n\nconst _innerCache = new WeakMap();\nconst _topLevelCache = new WeakMap<object, string>();\n\nexport function stringifyStyles(styles: unknown): string {\n if (styles == null || typeof styles !== 'object') return '';\n\n const cached = _topLevelCache.get(styles as object);\n if (cached !== undefined) return cached;\n\n const obj = styles as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n const parts: string[] = [];\n for (const k of keys) {\n const v = obj[k];\n if (v === undefined || typeof v === 'function' || typeof v === 'symbol')\n continue;\n\n const c0 = k.charCodeAt(0);\n const needsInnerSort =\n ((c0 >= 65 && c0 <= 90) || c0 === 38) &&\n v &&\n typeof v === 'object' &&\n !Array.isArray(v);\n\n let sv: string;\n if (needsInnerSort) {\n sv = _innerCache.get(v);\n if (sv === undefined) {\n const innerObj = v as Record<string, unknown>;\n const innerKeys = Object.keys(innerObj).sort();\n const innerParts: string[] = [];\n for (const ik of innerKeys) {\n const ivs = JSON.stringify(innerObj[ik]);\n if (ivs !== undefined)\n innerParts.push(JSON.stringify(ik) + ':' + ivs);\n }\n sv = '{' + innerParts.join(',') + '}';\n _innerCache.set(v, sv);\n }\n } else {\n sv = JSON.stringify(v);\n }\n parts.push(JSON.stringify(k) + ':' + sv);\n }\n const result = '{' + parts.join(',') + '}';\n _topLevelCache.set(styles as object, result);\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { ConfigTokens } from "../styles/types.js";
|
|
2
|
-
|
|
3
|
-
//#region src/utils/typography.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Typography preset configuration.
|
|
6
|
-
* Each preset defines font properties that get expanded into CSS custom properties.
|
|
7
|
-
*
|
|
8
|
-
* Use with `generateTypographyTokens()` to create typography tokens for your design system.
|
|
9
|
-
*/
|
|
10
|
-
interface TypographyPreset {
|
|
11
|
-
fontSize: string;
|
|
12
|
-
lineHeight: string;
|
|
13
|
-
letterSpacing?: string;
|
|
14
|
-
fontWeight: string | number;
|
|
15
|
-
boldFontWeight?: string | number;
|
|
16
|
-
iconSize?: string;
|
|
17
|
-
textTransform?: string;
|
|
18
|
-
fontFamily?: string;
|
|
19
|
-
fontStyle?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Generate typography tokens with $ prefix for CSS custom properties.
|
|
23
|
-
*
|
|
24
|
-
* Each preset generates the following CSS custom properties:
|
|
25
|
-
* - `${name}-font-size`
|
|
26
|
-
* - `${name}-line-height`
|
|
27
|
-
* - `${name}-letter-spacing`
|
|
28
|
-
* - `${name}-font-weight`
|
|
29
|
-
* - `${name}-bold-font-weight` (if defined)
|
|
30
|
-
* - `${name}-icon-size` (if defined)
|
|
31
|
-
* - `${name}-text-transform` (if defined)
|
|
32
|
-
* - `${name}-font-family` (if defined)
|
|
33
|
-
* - `${name}-font-style` (if defined)
|
|
34
|
-
*
|
|
35
|
-
* @param presets - Typography presets object
|
|
36
|
-
* @returns ConfigTokens object with $ prefixed keys
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* const customTokens = generateTypographyTokens({
|
|
40
|
-
* myHeading: { fontSize: '24px', lineHeight: '32px', fontWeight: '700' },
|
|
41
|
-
* body: { fontSize: '16px', lineHeight: '24px', fontWeight: '400' },
|
|
42
|
-
* });
|
|
43
|
-
*/
|
|
44
|
-
declare function generateTypographyTokens(presets: Record<string, TypographyPreset>): ConfigTokens;
|
|
45
|
-
//#endregion
|
|
46
|
-
export { TypographyPreset, generateTypographyTokens };
|
|
47
|
-
//# sourceMappingURL=typography.d.ts.map
|
package/dist/utils/typography.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
//#region src/utils/typography.ts
|
|
2
|
-
const RESERVED_PRESET_NAMES = new Set([
|
|
3
|
-
"strong",
|
|
4
|
-
"bold",
|
|
5
|
-
"italic",
|
|
6
|
-
"icon",
|
|
7
|
-
"tight"
|
|
8
|
-
]);
|
|
9
|
-
/**
|
|
10
|
-
* Generate typography tokens with $ prefix for CSS custom properties.
|
|
11
|
-
*
|
|
12
|
-
* Each preset generates the following CSS custom properties:
|
|
13
|
-
* - `${name}-font-size`
|
|
14
|
-
* - `${name}-line-height`
|
|
15
|
-
* - `${name}-letter-spacing`
|
|
16
|
-
* - `${name}-font-weight`
|
|
17
|
-
* - `${name}-bold-font-weight` (if defined)
|
|
18
|
-
* - `${name}-icon-size` (if defined)
|
|
19
|
-
* - `${name}-text-transform` (if defined)
|
|
20
|
-
* - `${name}-font-family` (if defined)
|
|
21
|
-
* - `${name}-font-style` (if defined)
|
|
22
|
-
*
|
|
23
|
-
* @param presets - Typography presets object
|
|
24
|
-
* @returns ConfigTokens object with $ prefixed keys
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* const customTokens = generateTypographyTokens({
|
|
28
|
-
* myHeading: { fontSize: '24px', lineHeight: '32px', fontWeight: '700' },
|
|
29
|
-
* body: { fontSize: '16px', lineHeight: '24px', fontWeight: '400' },
|
|
30
|
-
* });
|
|
31
|
-
*/
|
|
32
|
-
function generateTypographyTokens(presets) {
|
|
33
|
-
const tokens = {};
|
|
34
|
-
for (const [name, preset] of Object.entries(presets)) {
|
|
35
|
-
if (RESERVED_PRESET_NAMES.has(name)) throw new Error(`Invalid typography preset name "${name}". This name is reserved as a preset modifier.`);
|
|
36
|
-
tokens[`$${name}-font-size`] = preset.fontSize;
|
|
37
|
-
tokens[`$${name}-line-height`] = preset.lineHeight;
|
|
38
|
-
tokens[`$${name}-letter-spacing`] = preset.letterSpacing ?? "0";
|
|
39
|
-
tokens[`$${name}-font-weight`] = preset.fontWeight;
|
|
40
|
-
if (preset.boldFontWeight !== void 0) tokens[`$${name}-bold-font-weight`] = preset.boldFontWeight;
|
|
41
|
-
if (preset.iconSize !== void 0) tokens[`$${name}-icon-size`] = preset.iconSize;
|
|
42
|
-
if (preset.textTransform !== void 0) tokens[`$${name}-text-transform`] = preset.textTransform;
|
|
43
|
-
if (preset.fontFamily !== void 0) tokens[`$${name}-font-family`] = preset.fontFamily;
|
|
44
|
-
if (preset.fontStyle !== void 0) tokens[`$${name}-font-style`] = preset.fontStyle;
|
|
45
|
-
}
|
|
46
|
-
return tokens;
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { generateTypographyTokens };
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=typography.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typography.js","names":[],"sources":["../../src/utils/typography.ts"],"sourcesContent":["import type { ConfigTokens } from '../styles/types';\n\nconst RESERVED_PRESET_NAMES = new Set([\n 'strong',\n 'bold',\n 'italic',\n 'icon',\n 'tight',\n]);\n\n/**\n * Typography preset configuration.\n * Each preset defines font properties that get expanded into CSS custom properties.\n *\n * Use with `generateTypographyTokens()` to create typography tokens for your design system.\n */\nexport interface TypographyPreset {\n fontSize: string;\n lineHeight: string;\n letterSpacing?: string;\n fontWeight: string | number;\n boldFontWeight?: string | number;\n iconSize?: string;\n textTransform?: string;\n fontFamily?: string;\n fontStyle?: string;\n}\n\n/**\n * Generate typography tokens with $ prefix for CSS custom properties.\n *\n * Each preset generates the following CSS custom properties:\n * - `${name}-font-size`\n * - `${name}-line-height`\n * - `${name}-letter-spacing`\n * - `${name}-font-weight`\n * - `${name}-bold-font-weight` (if defined)\n * - `${name}-icon-size` (if defined)\n * - `${name}-text-transform` (if defined)\n * - `${name}-font-family` (if defined)\n * - `${name}-font-style` (if defined)\n *\n * @param presets - Typography presets object\n * @returns ConfigTokens object with $ prefixed keys\n *\n * @example\n * const customTokens = generateTypographyTokens({\n * myHeading: { fontSize: '24px', lineHeight: '32px', fontWeight: '700' },\n * body: { fontSize: '16px', lineHeight: '24px', fontWeight: '400' },\n * });\n */\nexport function generateTypographyTokens(\n presets: Record<string, TypographyPreset>,\n): ConfigTokens {\n const tokens: Record<`$${string}`, string | number> = {};\n\n for (const [name, preset] of Object.entries(presets)) {\n if (RESERVED_PRESET_NAMES.has(name)) {\n throw new Error(\n `Invalid typography preset name \"${name}\". This name is reserved as a preset modifier.`,\n );\n }\n\n tokens[`$${name}-font-size`] = preset.fontSize;\n tokens[`$${name}-line-height`] = preset.lineHeight;\n tokens[`$${name}-letter-spacing`] = preset.letterSpacing ?? '0';\n tokens[`$${name}-font-weight`] = preset.fontWeight;\n\n if (preset.boldFontWeight !== undefined) {\n tokens[`$${name}-bold-font-weight`] = preset.boldFontWeight;\n }\n\n if (preset.iconSize !== undefined) {\n tokens[`$${name}-icon-size`] = preset.iconSize;\n }\n\n if (preset.textTransform !== undefined) {\n tokens[`$${name}-text-transform`] = preset.textTransform;\n }\n\n if (preset.fontFamily !== undefined) {\n tokens[`$${name}-font-family`] = preset.fontFamily;\n }\n\n if (preset.fontStyle !== undefined) {\n tokens[`$${name}-font-style`] = preset.fontStyle;\n }\n }\n\n return tokens as ConfigTokens;\n}\n"],"mappings":";AAEA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;CACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA2CF,SAAgB,yBACd,SACc;CACd,MAAM,SAAgD,EAAE;AAExD,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,QAAQ,EAAE;AACpD,MAAI,sBAAsB,IAAI,KAAK,CACjC,OAAM,IAAI,MACR,mCAAmC,KAAK,gDACzC;AAGH,SAAO,IAAI,KAAK,eAAe,OAAO;AACtC,SAAO,IAAI,KAAK,iBAAiB,OAAO;AACxC,SAAO,IAAI,KAAK,oBAAoB,OAAO,iBAAiB;AAC5D,SAAO,IAAI,KAAK,iBAAiB,OAAO;AAExC,MAAI,OAAO,mBAAmB,KAAA,EAC5B,QAAO,IAAI,KAAK,sBAAsB,OAAO;AAG/C,MAAI,OAAO,aAAa,KAAA,EACtB,QAAO,IAAI,KAAK,eAAe,OAAO;AAGxC,MAAI,OAAO,kBAAkB,KAAA,EAC3B,QAAO,IAAI,KAAK,oBAAoB,OAAO;AAG7C,MAAI,OAAO,eAAe,KAAA,EACxB,QAAO,IAAI,KAAK,iBAAiB,OAAO;AAG1C,MAAI,OAAO,cAAc,KAAA,EACvB,QAAO,IAAI,KAAK,gBAAgB,OAAO;;AAI3C,QAAO"}
|
package/dist/utils/warnings.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
//#region src/utils/warnings.d.ts
|
|
2
|
-
declare function warn(...args: unknown[]): void;
|
|
3
|
-
declare function deprecationWarning(condition: unknown, {
|
|
4
|
-
property,
|
|
5
|
-
name,
|
|
6
|
-
betterAlternative,
|
|
7
|
-
reason
|
|
8
|
-
}: {
|
|
9
|
-
property: string;
|
|
10
|
-
name: string;
|
|
11
|
-
betterAlternative: (() => string) | string;
|
|
12
|
-
reason?: (() => string) | string;
|
|
13
|
-
}): void;
|
|
14
|
-
//#endregion
|
|
15
|
-
export { deprecationWarning, warn };
|
|
16
|
-
//# sourceMappingURL=warnings.d.ts.map
|
package/dist/utils/warnings.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
//#region src/utils/warnings.ts
|
|
2
|
-
const PREFIX = "Tasty";
|
|
3
|
-
function warn(...args) {
|
|
4
|
-
console.warn(`${PREFIX}:`, ...args);
|
|
5
|
-
}
|
|
6
|
-
function deprecationWarning(condition, { property, name, betterAlternative, reason }) {
|
|
7
|
-
if (condition) return;
|
|
8
|
-
console.group(`⚠️ ${PREFIX}: Deprecation in ${name}`);
|
|
9
|
-
warn(`"${property}" is deprecated, consider better alternative: ${typeof betterAlternative === "function" ? betterAlternative() : betterAlternative}`);
|
|
10
|
-
if (reason) warn(`Reason: ${typeof reason === "function" ? reason() : reason}`);
|
|
11
|
-
console.groupEnd();
|
|
12
|
-
}
|
|
13
|
-
//#endregion
|
|
14
|
-
export { deprecationWarning, warn };
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=warnings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"warnings.js","names":[],"sources":["../../src/utils/warnings.ts"],"sourcesContent":["/* eslint-disable no-console */\nconst PREFIX = 'Tasty';\n\nexport function warn(...args: unknown[]) {\n console.warn(`${PREFIX}:`, ...args);\n}\n\nexport function deprecationWarning(\n condition: unknown,\n {\n property,\n name,\n betterAlternative,\n reason,\n }: {\n property: string;\n name: string;\n betterAlternative: (() => string) | string;\n reason?: (() => string) | string;\n },\n) {\n if (condition) return;\n\n if (process.env.NODE_ENV === 'production') {\n return warn(\n `DEPRECATION ${name} \"${property}\" -> ${\n typeof betterAlternative === 'function'\n ? betterAlternative()\n : betterAlternative\n }`,\n );\n }\n\n // we can make deprecations even better if we add the md syntax in the console.\n // anyway, everything down below will be stripped in the production build\n console.group(`⚠️ ${PREFIX}: Deprecation in ${name}`);\n warn(\n `\"${property}\" is deprecated, consider better alternative: ${\n typeof betterAlternative === 'function'\n ? betterAlternative()\n : betterAlternative\n }`,\n );\n if (reason) {\n warn(`Reason: ${typeof reason === 'function' ? reason() : reason}`);\n }\n console.groupEnd();\n}\n"],"mappings":";AACA,MAAM,SAAS;AAEf,SAAgB,KAAK,GAAG,MAAiB;AACvC,SAAQ,KAAK,GAAG,OAAO,IAAI,GAAG,KAAK;;AAGrC,SAAgB,mBACd,WACA,EACE,UACA,MACA,mBACA,UAOF;AACA,KAAI,UAAW;AAcf,SAAQ,MAAM,MAAM,OAAO,mBAAmB,OAAO;AACrD,MACE,IAAI,SAAS,gDACX,OAAO,sBAAsB,aACzB,mBAAmB,GACnB,oBAEP;AACD,KAAI,OACF,MAAK,WAAW,OAAO,WAAW,aAAa,QAAQ,GAAG,SAAS;AAErE,SAAQ,UAAU"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
//#region src/zero/css-writer.d.ts
|
|
2
|
-
interface CSSWriterOptions {
|
|
3
|
-
/** Enable source comments in output (e.g., "from: Button.tsx") */
|
|
4
|
-
devMode?: boolean;
|
|
5
|
-
}
|
|
6
|
-
declare class CSSWriter {
|
|
7
|
-
private cssBlocks;
|
|
8
|
-
private outputPath;
|
|
9
|
-
private devMode;
|
|
10
|
-
constructor(outputPath: string, options?: CSSWriterOptions);
|
|
11
|
-
/**
|
|
12
|
-
* Add CSS block with deduplication key
|
|
13
|
-
* @param key - Unique key for deduplication
|
|
14
|
-
* @param css - CSS content
|
|
15
|
-
* @param source - Optional source file path (used in devMode)
|
|
16
|
-
*/
|
|
17
|
-
add(key: string, css: string, source?: string): void;
|
|
18
|
-
/**
|
|
19
|
-
* Check if a key already exists
|
|
20
|
-
*/
|
|
21
|
-
has(key: string): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Get the number of CSS blocks
|
|
24
|
-
*/
|
|
25
|
-
get size(): number;
|
|
26
|
-
/**
|
|
27
|
-
* Write all collected CSS to the output file
|
|
28
|
-
*/
|
|
29
|
-
write(): void;
|
|
30
|
-
/**
|
|
31
|
-
* Get all CSS as string (for testing or in-memory use)
|
|
32
|
-
*/
|
|
33
|
-
getCSS(): string;
|
|
34
|
-
/**
|
|
35
|
-
* Clear all collected CSS
|
|
36
|
-
*/
|
|
37
|
-
clear(): void;
|
|
38
|
-
/**
|
|
39
|
-
* Get the output path
|
|
40
|
-
*/
|
|
41
|
-
getOutputPath(): string;
|
|
42
|
-
}
|
|
43
|
-
//#endregion
|
|
44
|
-
export { CSSWriter };
|
|
45
|
-
//# sourceMappingURL=css-writer.d.ts.map
|
package/dist/zero/css-writer.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
//#region src/zero/css-writer.ts
|
|
4
|
-
var CSSWriter = class {
|
|
5
|
-
cssBlocks = /* @__PURE__ */ new Map();
|
|
6
|
-
outputPath;
|
|
7
|
-
devMode;
|
|
8
|
-
constructor(outputPath, options = {}) {
|
|
9
|
-
this.outputPath = outputPath;
|
|
10
|
-
this.devMode = options.devMode ?? false;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Add CSS block with deduplication key
|
|
14
|
-
* @param key - Unique key for deduplication
|
|
15
|
-
* @param css - CSS content
|
|
16
|
-
* @param source - Optional source file path (used in devMode)
|
|
17
|
-
*/
|
|
18
|
-
add(key, css, source) {
|
|
19
|
-
this.cssBlocks.set(key, {
|
|
20
|
-
css,
|
|
21
|
-
source
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Check if a key already exists
|
|
26
|
-
*/
|
|
27
|
-
has(key) {
|
|
28
|
-
return this.cssBlocks.has(key);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get the number of CSS blocks
|
|
32
|
-
*/
|
|
33
|
-
get size() {
|
|
34
|
-
return this.cssBlocks.size;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Write all collected CSS to the output file
|
|
38
|
-
*/
|
|
39
|
-
write() {
|
|
40
|
-
const outputDir = path.dirname(this.outputPath);
|
|
41
|
-
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });
|
|
42
|
-
const cssBlocks = [];
|
|
43
|
-
for (const block of this.cssBlocks.values()) if (this.devMode && block.source) cssBlocks.push(`/* from: ${block.source} */\n${block.css}`);
|
|
44
|
-
else cssBlocks.push(block.css);
|
|
45
|
-
const css = cssBlocks.join("\n\n");
|
|
46
|
-
fs.writeFileSync(this.outputPath, `/* Generated by @tenphi/tasty/zero - DO NOT EDIT */\n\n` + css);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get all CSS as string (for testing or in-memory use)
|
|
50
|
-
*/
|
|
51
|
-
getCSS() {
|
|
52
|
-
const cssBlocks = [];
|
|
53
|
-
for (const block of this.cssBlocks.values()) if (this.devMode && block.source) cssBlocks.push(`/* from: ${block.source} */\n${block.css}`);
|
|
54
|
-
else cssBlocks.push(block.css);
|
|
55
|
-
return cssBlocks.join("\n\n");
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Clear all collected CSS
|
|
59
|
-
*/
|
|
60
|
-
clear() {
|
|
61
|
-
this.cssBlocks.clear();
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Get the output path
|
|
65
|
-
*/
|
|
66
|
-
getOutputPath() {
|
|
67
|
-
return this.outputPath;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
//#endregion
|
|
71
|
-
export { CSSWriter };
|
|
72
|
-
|
|
73
|
-
//# sourceMappingURL=css-writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"css-writer.js","names":[],"sources":["../../src/zero/css-writer.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface CSSWriterOptions {\n /** Enable source comments in output (e.g., \"from: Button.tsx\") */\n devMode?: boolean;\n}\n\ninterface CSSBlock {\n css: string;\n source?: string;\n}\n\nexport class CSSWriter {\n private cssBlocks = new Map<string, CSSBlock>();\n private outputPath: string;\n private devMode: boolean;\n\n constructor(outputPath: string, options: CSSWriterOptions = {}) {\n this.outputPath = outputPath;\n this.devMode = options.devMode ?? false;\n }\n\n /**\n * Add CSS block with deduplication key\n * @param key - Unique key for deduplication\n * @param css - CSS content\n * @param source - Optional source file path (used in devMode)\n */\n add(key: string, css: string, source?: string): void {\n this.cssBlocks.set(key, { css, source });\n }\n\n /**\n * Check if a key already exists\n */\n has(key: string): boolean {\n return this.cssBlocks.has(key);\n }\n\n /**\n * Get the number of CSS blocks\n */\n get size(): number {\n return this.cssBlocks.size;\n }\n\n /**\n * Write all collected CSS to the output file\n */\n write(): void {\n const outputDir = path.dirname(this.outputPath);\n\n // Ensure directory exists\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Combine all CSS blocks with optional source comments\n const cssBlocks: string[] = [];\n for (const block of this.cssBlocks.values()) {\n if (this.devMode && block.source) {\n cssBlocks.push(`/* from: ${block.source} */\\n${block.css}`);\n } else {\n cssBlocks.push(block.css);\n }\n }\n const css = cssBlocks.join('\\n\\n');\n\n // Add header comment\n const header = `/* Generated by @tenphi/tasty/zero - DO NOT EDIT */\\n\\n`;\n\n fs.writeFileSync(this.outputPath, header + css);\n }\n\n /**\n * Get all CSS as string (for testing or in-memory use)\n */\n getCSS(): string {\n const cssBlocks: string[] = [];\n for (const block of this.cssBlocks.values()) {\n if (this.devMode && block.source) {\n cssBlocks.push(`/* from: ${block.source} */\\n${block.css}`);\n } else {\n cssBlocks.push(block.css);\n }\n }\n return cssBlocks.join('\\n\\n');\n }\n\n /**\n * Clear all collected CSS\n */\n clear(): void {\n this.cssBlocks.clear();\n }\n\n /**\n * Get the output path\n */\n getOutputPath(): string {\n return this.outputPath;\n }\n}\n"],"mappings":";;;AAaA,IAAa,YAAb,MAAuB;CACrB,4BAAoB,IAAI,KAAuB;CAC/C;CACA;CAEA,YAAY,YAAoB,UAA4B,EAAE,EAAE;AAC9D,OAAK,aAAa;AAClB,OAAK,UAAU,QAAQ,WAAW;;;;;;;;CASpC,IAAI,KAAa,KAAa,QAAuB;AACnD,OAAK,UAAU,IAAI,KAAK;GAAE;GAAK;GAAQ,CAAC;;;;;CAM1C,IAAI,KAAsB;AACxB,SAAO,KAAK,UAAU,IAAI,IAAI;;;;;CAMhC,IAAI,OAAe;AACjB,SAAO,KAAK,UAAU;;;;;CAMxB,QAAc;EACZ,MAAM,YAAY,KAAK,QAAQ,KAAK,WAAW;AAG/C,MAAI,CAAC,GAAG,WAAW,UAAU,CAC3B,IAAG,UAAU,WAAW,EAAE,WAAW,MAAM,CAAC;EAI9C,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,SAAS,KAAK,UAAU,QAAQ,CACzC,KAAI,KAAK,WAAW,MAAM,OACxB,WAAU,KAAK,YAAY,MAAM,OAAO,OAAO,MAAM,MAAM;MAE3D,WAAU,KAAK,MAAM,IAAI;EAG7B,MAAM,MAAM,UAAU,KAAK,OAAO;AAKlC,KAAG,cAAc,KAAK,YAFP,4DAE4B,IAAI;;;;;CAMjD,SAAiB;EACf,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,SAAS,KAAK,UAAU,QAAQ,CACzC,KAAI,KAAK,WAAW,MAAM,OACxB,WAAU,KAAK,YAAY,MAAM,OAAO,OAAO,MAAM,MAAM;MAE3D,WAAU,KAAK,MAAM,IAAI;AAG7B,SAAO,UAAU,KAAK,OAAO;;;;;CAM/B,QAAc;AACZ,OAAK,UAAU,OAAO;;;;;CAMxB,gBAAwB;AACtB,SAAO,KAAK"}
|
package/dist/zero/extractor.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Styles } from "../styles/types.js";
|
|
2
|
-
|
|
3
|
-
//#region src/zero/extractor.d.ts
|
|
4
|
-
interface ExtractedChunk {
|
|
5
|
-
className: string;
|
|
6
|
-
css: string;
|
|
7
|
-
}
|
|
8
|
-
interface ExtractedSelector {
|
|
9
|
-
selector: string;
|
|
10
|
-
css: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Extract styles using chunking (for className mode).
|
|
14
|
-
* Returns multiple classes, one per chunk.
|
|
15
|
-
*/
|
|
16
|
-
declare function extractStylesWithChunks(styles: Styles): ExtractedChunk[];
|
|
17
|
-
/**
|
|
18
|
-
* Extract styles for a specific selector (for global/selector mode).
|
|
19
|
-
* Returns a single CSS block.
|
|
20
|
-
*/
|
|
21
|
-
declare function extractStylesForSelector(selector: string, styles: Styles): ExtractedSelector;
|
|
22
|
-
//#endregion
|
|
23
|
-
export { ExtractedChunk, ExtractedSelector, extractStylesForSelector, extractStylesWithChunks };
|
|
24
|
-
//# sourceMappingURL=extractor.d.ts.map
|