tailwind-styled-v4 5.0.21 → 5.0.23
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/atomic.js.map +1 -1
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +1 -1
- package/dist/compiler.d.ts +1 -1
- package/dist/compiler.js +17 -16
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +17 -16
- package/dist/compiler.mjs.map +1 -1
- package/dist/engine.js +24 -18
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +24 -18
- package/dist/engine.mjs.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +23 -17
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +23 -17
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +23 -17
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.d.mts +101 -3
- package/dist/plugin-api.d.ts +101 -3
- package/dist/plugin.d.mts +5 -3
- package/dist/plugin.d.ts +5 -3
- package/dist/plugin.js +97 -0
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +77 -1
- package/dist/plugin.mjs.map +1 -1
- package/dist/shared.js +23 -17
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +23 -17
- package/dist/shared.mjs.map +1 -1
- package/dist/turbopackLoader.js +17 -16
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +17 -16
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +23 -17
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +23 -17
- package/dist/vite.mjs.map +1 -1
- package/dist/webpackLoader.js +17 -16
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +17 -16
- package/dist/webpackLoader.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/index-BFqmBxl9.d.mts +0 -102
- package/dist/index-DwNErRJ_.d.ts +0 -102
package/dist/plugin-api.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.mjs';
|
|
1
|
+
import { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.mjs';
|
|
3
2
|
import { z } from 'zod';
|
|
4
3
|
|
|
5
4
|
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
@@ -41,4 +40,103 @@ declare const parseTokenRegistration: (data: unknown) => {
|
|
|
41
40
|
value: string;
|
|
42
41
|
};
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
interface TwClassResult {
|
|
44
|
+
css: string;
|
|
45
|
+
classes: string[];
|
|
46
|
+
}
|
|
47
|
+
interface DesignTokens {
|
|
48
|
+
[key: string]: string | number | DesignTokens;
|
|
49
|
+
}
|
|
50
|
+
interface TwPluginOptions {
|
|
51
|
+
classProcessor?: (classes: string[]) => TwClassResult;
|
|
52
|
+
tokens?: DesignTokens;
|
|
53
|
+
debug?: boolean;
|
|
54
|
+
minify?: boolean;
|
|
55
|
+
}
|
|
56
|
+
type VariantResolver = (selector: string) => string;
|
|
57
|
+
interface UtilityDefinition {
|
|
58
|
+
[property: string]: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface ComponentConfig {
|
|
62
|
+
base: string;
|
|
63
|
+
variants: Record<string, Record<string, string>>;
|
|
64
|
+
compoundVariants: Array<{
|
|
65
|
+
class: string;
|
|
66
|
+
} & CompoundCondition>;
|
|
67
|
+
defaultVariants: Record<string, string>;
|
|
68
|
+
}
|
|
69
|
+
interface TransformMeta {
|
|
70
|
+
componentName: string;
|
|
71
|
+
tag: string;
|
|
72
|
+
}
|
|
73
|
+
type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
|
|
74
|
+
type CssHook = (css: string) => string;
|
|
75
|
+
interface TwContext {
|
|
76
|
+
addVariant(name: string, resolver: VariantResolver): void;
|
|
77
|
+
addUtility(name: string, styles: UtilityDefinition): void;
|
|
78
|
+
addToken(name: string, value: string): void;
|
|
79
|
+
addTransform(fn: TransformFn): void;
|
|
80
|
+
onGenerateCSS(hook: CssHook): void;
|
|
81
|
+
onBuildEnd(hook: () => void | Promise<void>): void;
|
|
82
|
+
getToken(name: string): string | undefined;
|
|
83
|
+
subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
|
|
84
|
+
readonly config: Record<string, unknown>;
|
|
85
|
+
}
|
|
86
|
+
interface TwPlugin {
|
|
87
|
+
name: string;
|
|
88
|
+
setup(ctx: TwContext): void;
|
|
89
|
+
}
|
|
90
|
+
interface PluginRegistry {
|
|
91
|
+
variants: Map<string, VariantResolver>;
|
|
92
|
+
utilities: Map<string, UtilityDefinition>;
|
|
93
|
+
tokens: Map<string, string>;
|
|
94
|
+
transforms: TransformFn[];
|
|
95
|
+
cssHooks: CssHook[];
|
|
96
|
+
buildHooks: Array<() => void | Promise<void>>;
|
|
97
|
+
plugins: Set<string>;
|
|
98
|
+
}
|
|
99
|
+
interface TokenEngineAPI {
|
|
100
|
+
getToken?: (name: string) => string | undefined;
|
|
101
|
+
getTokens?: () => Record<string, string> | undefined;
|
|
102
|
+
subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
103
|
+
subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
104
|
+
}
|
|
105
|
+
declare function resolveTokenEngine(): TokenEngineAPI | undefined;
|
|
106
|
+
declare function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined;
|
|
107
|
+
interface TransformContext {
|
|
108
|
+
filename?: string;
|
|
109
|
+
componentName?: string;
|
|
110
|
+
tag?: string;
|
|
111
|
+
}
|
|
112
|
+
interface TwGlobalRegistry {
|
|
113
|
+
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
114
|
+
tokens: Record<string, string>;
|
|
115
|
+
variants: Map<string, VariantResolver>;
|
|
116
|
+
}
|
|
117
|
+
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
118
|
+
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
119
|
+
declare function registerToken(name: string, value: string): void;
|
|
120
|
+
declare function createPluginRegistry(): PluginRegistry;
|
|
121
|
+
declare function resetGlobalRegistry(): void;
|
|
122
|
+
declare function createPluginContext(registry: PluginRegistry, config?: Record<string, unknown>): TwContext;
|
|
123
|
+
declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
124
|
+
registry: {
|
|
125
|
+
plugins: Set<string>;
|
|
126
|
+
variants: Map<string, VariantResolver>;
|
|
127
|
+
utilities: Map<string, UtilityDefinition>;
|
|
128
|
+
tokens: Map<string, string>;
|
|
129
|
+
};
|
|
130
|
+
use: (plugin: TwPlugin) => void;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
134
|
+
* Used by createTwPlugin() in the plugin package.
|
|
135
|
+
*/
|
|
136
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
137
|
+
declare function use(plugin: TwPlugin): void;
|
|
138
|
+
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
139
|
+
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
140
|
+
declare function presetScrollbar(): TwPlugin;
|
|
141
|
+
|
|
142
|
+
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
package/dist/plugin-api.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.js';
|
|
1
|
+
import { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.js';
|
|
3
2
|
import { z } from 'zod';
|
|
4
3
|
|
|
5
4
|
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
@@ -41,4 +40,103 @@ declare const parseTokenRegistration: (data: unknown) => {
|
|
|
41
40
|
value: string;
|
|
42
41
|
};
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
interface TwClassResult {
|
|
44
|
+
css: string;
|
|
45
|
+
classes: string[];
|
|
46
|
+
}
|
|
47
|
+
interface DesignTokens {
|
|
48
|
+
[key: string]: string | number | DesignTokens;
|
|
49
|
+
}
|
|
50
|
+
interface TwPluginOptions {
|
|
51
|
+
classProcessor?: (classes: string[]) => TwClassResult;
|
|
52
|
+
tokens?: DesignTokens;
|
|
53
|
+
debug?: boolean;
|
|
54
|
+
minify?: boolean;
|
|
55
|
+
}
|
|
56
|
+
type VariantResolver = (selector: string) => string;
|
|
57
|
+
interface UtilityDefinition {
|
|
58
|
+
[property: string]: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface ComponentConfig {
|
|
62
|
+
base: string;
|
|
63
|
+
variants: Record<string, Record<string, string>>;
|
|
64
|
+
compoundVariants: Array<{
|
|
65
|
+
class: string;
|
|
66
|
+
} & CompoundCondition>;
|
|
67
|
+
defaultVariants: Record<string, string>;
|
|
68
|
+
}
|
|
69
|
+
interface TransformMeta {
|
|
70
|
+
componentName: string;
|
|
71
|
+
tag: string;
|
|
72
|
+
}
|
|
73
|
+
type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
|
|
74
|
+
type CssHook = (css: string) => string;
|
|
75
|
+
interface TwContext {
|
|
76
|
+
addVariant(name: string, resolver: VariantResolver): void;
|
|
77
|
+
addUtility(name: string, styles: UtilityDefinition): void;
|
|
78
|
+
addToken(name: string, value: string): void;
|
|
79
|
+
addTransform(fn: TransformFn): void;
|
|
80
|
+
onGenerateCSS(hook: CssHook): void;
|
|
81
|
+
onBuildEnd(hook: () => void | Promise<void>): void;
|
|
82
|
+
getToken(name: string): string | undefined;
|
|
83
|
+
subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
|
|
84
|
+
readonly config: Record<string, unknown>;
|
|
85
|
+
}
|
|
86
|
+
interface TwPlugin {
|
|
87
|
+
name: string;
|
|
88
|
+
setup(ctx: TwContext): void;
|
|
89
|
+
}
|
|
90
|
+
interface PluginRegistry {
|
|
91
|
+
variants: Map<string, VariantResolver>;
|
|
92
|
+
utilities: Map<string, UtilityDefinition>;
|
|
93
|
+
tokens: Map<string, string>;
|
|
94
|
+
transforms: TransformFn[];
|
|
95
|
+
cssHooks: CssHook[];
|
|
96
|
+
buildHooks: Array<() => void | Promise<void>>;
|
|
97
|
+
plugins: Set<string>;
|
|
98
|
+
}
|
|
99
|
+
interface TokenEngineAPI {
|
|
100
|
+
getToken?: (name: string) => string | undefined;
|
|
101
|
+
getTokens?: () => Record<string, string> | undefined;
|
|
102
|
+
subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
103
|
+
subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
104
|
+
}
|
|
105
|
+
declare function resolveTokenEngine(): TokenEngineAPI | undefined;
|
|
106
|
+
declare function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined;
|
|
107
|
+
interface TransformContext {
|
|
108
|
+
filename?: string;
|
|
109
|
+
componentName?: string;
|
|
110
|
+
tag?: string;
|
|
111
|
+
}
|
|
112
|
+
interface TwGlobalRegistry {
|
|
113
|
+
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
114
|
+
tokens: Record<string, string>;
|
|
115
|
+
variants: Map<string, VariantResolver>;
|
|
116
|
+
}
|
|
117
|
+
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
118
|
+
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
119
|
+
declare function registerToken(name: string, value: string): void;
|
|
120
|
+
declare function createPluginRegistry(): PluginRegistry;
|
|
121
|
+
declare function resetGlobalRegistry(): void;
|
|
122
|
+
declare function createPluginContext(registry: PluginRegistry, config?: Record<string, unknown>): TwContext;
|
|
123
|
+
declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
124
|
+
registry: {
|
|
125
|
+
plugins: Set<string>;
|
|
126
|
+
variants: Map<string, VariantResolver>;
|
|
127
|
+
utilities: Map<string, UtilityDefinition>;
|
|
128
|
+
tokens: Map<string, string>;
|
|
129
|
+
};
|
|
130
|
+
use: (plugin: TwPlugin) => void;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
134
|
+
* Used by createTwPlugin() in the plugin package.
|
|
135
|
+
*/
|
|
136
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
137
|
+
declare function use(plugin: TwPlugin): void;
|
|
138
|
+
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
139
|
+
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
140
|
+
declare function presetScrollbar(): TwPlugin;
|
|
141
|
+
|
|
142
|
+
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
package/dist/plugin.d.mts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TwContext, TwPluginOptions } from './plugin-api.mjs';
|
|
2
|
+
export { ComponentConfig, CssHook, DesignTokens, PluginManifestInput, PluginManifestSchema, PluginRegistry, TokenEngineAPI, TokenRegistrationInput, TokenRegistrationSchema, TransformContext, TransformFn, TransformMeta, TransformRegistrationSchema, TwClassResult, TwGlobalRegistry, TwPlugin, TwPluginOptionsInput, TwPluginOptionsSchema, UtilityDefinition, VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use } from './plugin-api.mjs';
|
|
2
3
|
import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
|
|
3
|
-
|
|
4
|
+
export { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.mjs';
|
|
5
|
+
import 'zod';
|
|
4
6
|
|
|
5
7
|
interface TwVitePlugin extends TwContext {
|
|
6
8
|
resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
|
|
@@ -9,4 +11,4 @@ interface TwVitePlugin extends TwContext {
|
|
|
9
11
|
}
|
|
10
12
|
declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
|
|
11
13
|
|
|
12
|
-
export { type TwVitePlugin, createTwPlugin };
|
|
14
|
+
export { TwContext, TwPluginOptions, type TwVitePlugin, createTwPlugin };
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TwContext, TwPluginOptions } from './plugin-api.js';
|
|
2
|
+
export { ComponentConfig, CssHook, DesignTokens, PluginManifestInput, PluginManifestSchema, PluginRegistry, TokenEngineAPI, TokenRegistrationInput, TokenRegistrationSchema, TransformContext, TransformFn, TransformMeta, TransformRegistrationSchema, TwClassResult, TwGlobalRegistry, TwPlugin, TwPluginOptionsInput, TwPluginOptionsSchema, UtilityDefinition, VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use } from './plugin-api.js';
|
|
2
3
|
import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
|
|
3
|
-
|
|
4
|
+
export { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.js';
|
|
5
|
+
import 'zod';
|
|
4
6
|
|
|
5
7
|
interface TwVitePlugin extends TwContext {
|
|
6
8
|
resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
|
|
@@ -9,4 +11,4 @@ interface TwVitePlugin extends TwContext {
|
|
|
9
11
|
}
|
|
10
12
|
declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
|
|
11
13
|
|
|
12
|
-
export { type TwVitePlugin, createTwPlugin };
|
|
14
|
+
export { TwContext, TwPluginOptions, type TwVitePlugin, createTwPlugin };
|
package/dist/plugin.js
CHANGED
|
@@ -34,6 +34,7 @@ var TokenRegistrationSchema = zod.z.object({
|
|
|
34
34
|
value: zod.z.string()
|
|
35
35
|
});
|
|
36
36
|
var parseTwPluginOptions = (options) => parseWithSchema(TwPluginOptionsSchema, options ?? {}, "plugin options are invalid");
|
|
37
|
+
var parsePluginManifest = (plugin) => parseWithSchema(PluginManifestSchema, plugin, "plugin manifest is invalid");
|
|
37
38
|
var parseTokenRegistration = (data) => parseWithSchema(TokenRegistrationSchema, data, "token registration is invalid");
|
|
38
39
|
var PluginNameSchema = zod.z.string().min(1, "Plugin name cannot be empty").regex(
|
|
39
40
|
/^(@[a-z0-9-]+\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,
|
|
@@ -76,6 +77,17 @@ var transformRegistry = {
|
|
|
76
77
|
variants: /* @__PURE__ */ new Map()
|
|
77
78
|
};
|
|
78
79
|
var normalizeTokenName = (name) => name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
80
|
+
function getGlobalRegistry() {
|
|
81
|
+
return transformRegistry;
|
|
82
|
+
}
|
|
83
|
+
function registerTransform(transform) {
|
|
84
|
+
TransformRegistrationSchema.parse(transform);
|
|
85
|
+
transformRegistry.transforms.push(transform);
|
|
86
|
+
}
|
|
87
|
+
function registerToken(name, value) {
|
|
88
|
+
const parsed = parseTokenRegistration({ name, value });
|
|
89
|
+
transformRegistry.tokens[parsed.name] = parsed.value;
|
|
90
|
+
}
|
|
79
91
|
function createPluginRegistry() {
|
|
80
92
|
return {
|
|
81
93
|
variants: /* @__PURE__ */ new Map(),
|
|
@@ -88,6 +100,14 @@ function createPluginRegistry() {
|
|
|
88
100
|
};
|
|
89
101
|
}
|
|
90
102
|
var legacyState = { globalRegistry: createPluginRegistry() };
|
|
103
|
+
function resetGlobalRegistry() {
|
|
104
|
+
transformRegistry.transforms.length = 0;
|
|
105
|
+
transformRegistry.variants.clear();
|
|
106
|
+
for (const key of Object.keys(transformRegistry.tokens)) {
|
|
107
|
+
delete transformRegistry.tokens[key];
|
|
108
|
+
}
|
|
109
|
+
legacyState.globalRegistry = createPluginRegistry();
|
|
110
|
+
}
|
|
91
111
|
function createPluginContext(registry, config = {}) {
|
|
92
112
|
const isLegacyRegistry = registry === legacyState.globalRegistry;
|
|
93
113
|
return {
|
|
@@ -144,9 +164,65 @@ function createPluginContext(registry, config = {}) {
|
|
|
144
164
|
}
|
|
145
165
|
};
|
|
146
166
|
}
|
|
167
|
+
function createTw(config = {}) {
|
|
168
|
+
const registry = createPluginRegistry();
|
|
169
|
+
const ctx = createPluginContext(registry, config);
|
|
170
|
+
const result = ctx;
|
|
171
|
+
result.registry = {
|
|
172
|
+
plugins: registry.plugins,
|
|
173
|
+
variants: registry.variants,
|
|
174
|
+
utilities: registry.utilities,
|
|
175
|
+
tokens: registry.tokens
|
|
176
|
+
};
|
|
177
|
+
result.use = (plugin) => {
|
|
178
|
+
const manifest = parsePluginManifest(plugin);
|
|
179
|
+
manifest.setup(ctx);
|
|
180
|
+
registry.plugins.add(manifest.name);
|
|
181
|
+
};
|
|
182
|
+
if (config.plugins && Array.isArray(config.plugins)) {
|
|
183
|
+
for (const plugin of config.plugins) {
|
|
184
|
+
result.use(parsePluginManifest(plugin));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
147
189
|
function createGlobalPluginContext(config = {}) {
|
|
148
190
|
return createPluginContext(legacyState.globalRegistry, config);
|
|
149
191
|
}
|
|
192
|
+
function use(plugin) {
|
|
193
|
+
const ctx = createPluginContext(legacyState.globalRegistry);
|
|
194
|
+
parsePluginManifest(plugin).setup(ctx);
|
|
195
|
+
}
|
|
196
|
+
function presetTokens(tokens) {
|
|
197
|
+
return {
|
|
198
|
+
name: "preset-tokens",
|
|
199
|
+
setup(ctx) {
|
|
200
|
+
for (const [name, value] of Object.entries(tokens)) {
|
|
201
|
+
ctx.addToken(name, value);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function presetVariants(variants) {
|
|
207
|
+
return {
|
|
208
|
+
name: "preset-variants",
|
|
209
|
+
setup(ctx) {
|
|
210
|
+
for (const [name, resolver] of Object.entries(variants)) {
|
|
211
|
+
ctx.addVariant(name, resolver);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
function presetScrollbar() {
|
|
217
|
+
return {
|
|
218
|
+
name: "preset-scrollbar",
|
|
219
|
+
setup(ctx) {
|
|
220
|
+
ctx.addVariant("scrollbar-thin", () => "::-webkit-scrollbar{width:8px;height:8px}");
|
|
221
|
+
ctx.addVariant("scrollbar-none", () => "::-webkit-scrollbar{display:none}");
|
|
222
|
+
ctx.addUtility("scrollbar-hide", { "-ms-overflow-style": "none", "scrollbar-width": "none" });
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
150
226
|
|
|
151
227
|
// packages/domain/plugin/src/index.ts
|
|
152
228
|
function createTwPlugin(options = {}) {
|
|
@@ -170,6 +246,27 @@ function createTwPlugin(options = {}) {
|
|
|
170
246
|
};
|
|
171
247
|
}
|
|
172
248
|
|
|
249
|
+
exports.PluginManifestSchema = PluginManifestSchema;
|
|
250
|
+
exports.TokenRegistrationSchema = TokenRegistrationSchema;
|
|
251
|
+
exports.TransformRegistrationSchema = TransformRegistrationSchema;
|
|
252
|
+
exports.TwPluginOptionsSchema = TwPluginOptionsSchema;
|
|
253
|
+
exports.createGlobalPluginContext = createGlobalPluginContext;
|
|
254
|
+
exports.createPluginContext = createPluginContext;
|
|
255
|
+
exports.createPluginRegistry = createPluginRegistry;
|
|
256
|
+
exports.createTw = createTw;
|
|
173
257
|
exports.createTwPlugin = createTwPlugin;
|
|
258
|
+
exports.getGlobalRegistry = getGlobalRegistry;
|
|
259
|
+
exports.parsePluginManifest = parsePluginManifest;
|
|
260
|
+
exports.parseTokenRegistration = parseTokenRegistration;
|
|
261
|
+
exports.parseTwPluginOptions = parseTwPluginOptions;
|
|
262
|
+
exports.presetScrollbar = presetScrollbar;
|
|
263
|
+
exports.presetTokens = presetTokens;
|
|
264
|
+
exports.presetVariants = presetVariants;
|
|
265
|
+
exports.readToken = readToken;
|
|
266
|
+
exports.registerToken = registerToken;
|
|
267
|
+
exports.registerTransform = registerTransform;
|
|
268
|
+
exports.resetGlobalRegistry = resetGlobalRegistry;
|
|
269
|
+
exports.resolveTokenEngine = resolveTokenEngine;
|
|
270
|
+
exports.use = use;
|
|
174
271
|
//# sourceMappingURL=plugin.js.map
|
|
175
272
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin.js","sourcesContent":["import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const DesignTokensSchema: z.ZodType<\r\n Record<string, string | number | Record<string, unknown>>\r\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\r\n\r\nexport const TwClassResultSchema = z.object({\r\n css: z.string(),\r\n classes: z.array(z.string()),\r\n})\r\n\r\nexport const TwPluginOptionsSchema = z.object({\r\n classProcessor: z\r\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\r\n .optional(),\r\n tokens: DesignTokensSchema.optional(),\r\n debug: z.boolean().optional(),\r\n minify: z.boolean().optional(),\r\n})\r\n\r\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\r\n\r\nexport const PluginManifestSchema = z.object({\r\n name: z.string().min(1),\r\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\r\n})\r\n\r\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\r\n\r\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\r\n\r\nexport const TokenRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n value: z.string(),\r\n})\r\n\r\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\r\n\r\nexport const parseTwPluginOptions = (options: unknown) =>\r\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\r\n\r\nexport const parsePluginManifest = (plugin: unknown) =>\r\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\nexport const parseTokenRegistration = (data: unknown) =>\r\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\r\n\r\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\r\n\r\n/** Nama plugin harus mengikuti format npm package */\r\nexport const PluginNameSchema = z.string()\r\n .min(1, \"Plugin name cannot be empty\")\r\n .regex(\r\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\r\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\r\n )\r\n\r\n/** Versi semantic versioning */\r\nexport const SemverSchema = z.string()\r\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\r\n\r\n/** Full plugin manifest dengan validasi nama dan versi */\r\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\r\n name: PluginNameSchema,\r\n version: SemverSchema.optional(),\r\n description: z.string().max(200).optional(),\r\n keywords: z.array(z.string()).max(10).optional(),\r\n})\r\n\r\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\r\n\r\n/** Validate full plugin manifest */\r\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\r\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\n/** Validate plugin name only */\r\nexport const validatePluginName = (name: unknown): string =>\r\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\r\n\r\n/** Zod validation for plugin registration payload */\r\nexport const PluginRegistrationPayloadSchema = z.object({\r\n plugin: FullPluginManifestSchema,\r\n config: z.record(z.string(), z.unknown()).optional(),\r\n priority: z.number().int().min(0).max(100).optional(),\r\n})\r\n\r\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\r\n\r\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\r\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\r\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\r\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\r\n\r\nexport interface TwClassResult {\r\n css: string\r\n classes: string[]\r\n}\r\n\r\nexport interface DesignTokens {\r\n [key: string]: string | number | DesignTokens\r\n}\r\n\r\nexport interface TwPluginOptions {\r\n classProcessor?: (classes: string[]) => TwClassResult\r\n tokens?: DesignTokens\r\n debug?: boolean\r\n minify?: boolean\r\n}\r\n\r\nexport type VariantResolver = (selector: string) => string\r\n\r\nexport interface UtilityDefinition {\r\n [property: string]: string\r\n}\r\n\r\nexport type { CompoundCondition, TokenMap }\r\n\r\nexport interface ComponentConfig {\r\n base: string\r\n variants: Record<string, Record<string, string>>\r\n compoundVariants: Array<{ class: string } & CompoundCondition>\r\n defaultVariants: Record<string, string>\r\n}\r\n\r\nexport interface TransformMeta {\r\n componentName: string\r\n tag: string\r\n}\r\n\r\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\r\n\r\nexport type CssHook = (css: string) => string\r\n\r\nexport interface TwContext {\r\n addVariant(name: string, resolver: VariantResolver): void\r\n addUtility(name: string, styles: UtilityDefinition): void\r\n addToken(name: string, value: string): void\r\n addTransform(fn: TransformFn): void\r\n onGenerateCSS(hook: CssHook): void\r\n onBuildEnd(hook: () => void | Promise<void>): void\r\n getToken(name: string): string | undefined\r\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\r\n readonly config: Record<string, unknown>\r\n}\r\n\r\nexport interface TwPlugin {\r\n name: string\r\n setup(ctx: TwContext): void\r\n}\r\n\r\nexport interface PluginRegistry {\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n transforms: TransformFn[]\r\n cssHooks: CssHook[]\r\n buildHooks: Array<() => void | Promise<void>>\r\n plugins: Set<string>\r\n}\r\n\r\nexport interface TokenEngineAPI {\r\n getToken?: (name: string) => string | undefined\r\n getTokens?: () => Record<string, string> | undefined\r\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\r\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\r\n if (engine && typeof engine === \"object\") {\r\n return engine as TokenEngineAPI\r\n }\r\n return undefined\r\n}\r\n\r\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\r\n if (!engine) return undefined\r\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\r\n if (typeof engine.getTokens === \"function\") {\r\n const tokens = engine.getTokens()\r\n return tokens?.[name]\r\n }\r\n return undefined\r\n}\r\n\r\nexport interface TransformContext {\r\n filename?: string\r\n componentName?: string\r\n tag?: string\r\n}\r\n\r\nexport interface TwGlobalRegistry {\r\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\r\n tokens: Record<string, string>\r\n variants: Map<string, VariantResolver>\r\n}\r\n\r\nconst transformRegistry: TwGlobalRegistry = {\r\n transforms: [],\r\n tokens: {},\r\n variants: new Map(),\r\n}\r\n\r\nconst normalizeTokenName = (name: string): string =>\r\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n\r\nexport function getGlobalRegistry(): TwGlobalRegistry {\r\n return transformRegistry\r\n}\r\n\r\nexport function registerTransform(\r\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\r\n): void {\r\n TransformRegistrationSchema.parse(transform)\r\n transformRegistry.transforms.push(transform)\r\n}\r\n\r\nexport function registerToken(name: string, value: string): void {\r\n const parsed = parseTokenRegistration({ name, value })\r\n transformRegistry.tokens[parsed.name] = parsed.value\r\n}\r\n\r\nexport function createPluginRegistry(): PluginRegistry {\r\n return {\r\n variants: new Map(),\r\n utilities: new Map(),\r\n tokens: new Map(),\r\n transforms: [],\r\n cssHooks: [],\r\n buildHooks: [],\r\n plugins: new Set(),\r\n }\r\n}\r\n\r\nconst legacyState = { globalRegistry: createPluginRegistry() }\r\n\r\nexport function resetGlobalRegistry(): void {\r\n transformRegistry.transforms.length = 0\r\n transformRegistry.variants.clear()\r\n for (const key of Object.keys(transformRegistry.tokens)) {\r\n delete transformRegistry.tokens[key]\r\n }\r\n legacyState.globalRegistry = createPluginRegistry()\r\n}\r\n\r\nexport function createPluginContext(\r\n registry: PluginRegistry,\r\n config: Record<string, unknown> = {}\r\n): TwContext {\r\n const isLegacyRegistry = registry === legacyState.globalRegistry\r\n\r\n return {\r\n config,\r\n addVariant(name, resolver) {\r\n registry.variants.set(name, resolver)\r\n if (isLegacyRegistry) {\r\n transformRegistry.variants.set(name, resolver)\r\n }\r\n },\r\n addUtility(name, styles) {\r\n registry.utilities.set(name, styles)\r\n },\r\n addToken(name, value) {\r\n const parsed = parseTokenRegistration({ name, value })\r\n const normalized = normalizeTokenName(parsed.name)\r\n registry.tokens.set(normalized, parsed.value)\r\n if (isLegacyRegistry) {\r\n transformRegistry.tokens[normalized] = parsed.value\r\n }\r\n },\r\n addTransform(fn) {\r\n TransformRegistrationSchema.parse(fn)\r\n registry.transforms.push(fn)\r\n if (isLegacyRegistry) {\r\n transformRegistry.transforms.push((config, ctx) =>\r\n fn(config, {\r\n componentName: ctx.componentName ?? \"\",\r\n tag: ctx.tag ?? \"\",\r\n })\r\n )\r\n }\r\n },\r\n onGenerateCSS(hook) {\r\n registry.cssHooks.push(hook)\r\n },\r\n onBuildEnd(hook) {\r\n registry.buildHooks.push(hook)\r\n },\r\n getToken(name) {\r\n const normalized = normalizeTokenName(name)\r\n // Check local registry first (populated by addToken), then fallback to token engine\r\n const local = registry.tokens.get(normalized)\r\n if (local !== undefined) return local\r\n return readToken(resolveTokenEngine(), normalized)\r\n },\r\n subscribeTokens(callback) {\r\n const engine = resolveTokenEngine()\r\n if (!engine) return () => {}\r\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\r\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\r\n return () => {}\r\n },\r\n }\r\n}\r\n\r\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n} {\r\n const registry = createPluginRegistry()\r\n const ctx = createPluginContext(registry, config)\r\n\r\n const result = ctx as TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n }\r\n\r\n result.registry = {\r\n plugins: registry.plugins,\r\n variants: registry.variants,\r\n utilities: registry.utilities,\r\n tokens: registry.tokens,\r\n }\r\n\r\n result.use = (plugin: TwPlugin) => {\r\n const manifest = parsePluginManifest(plugin)\r\n manifest.setup(ctx)\r\n registry.plugins.add(manifest.name)\r\n }\r\n\r\n if (config.plugins && Array.isArray(config.plugins)) {\r\n for (const plugin of config.plugins) {\r\n result.use(parsePluginManifest(plugin))\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Creates a TwContext that writes through to the global (legacy) registry.\r\n * Used by createTwPlugin() in the plugin package.\r\n */\r\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\r\n return createPluginContext(legacyState.globalRegistry, config)\r\n}\r\n\r\nexport function use(plugin: TwPlugin): void {\r\n const ctx = createPluginContext(legacyState.globalRegistry)\r\n parsePluginManifest(plugin).setup(ctx)\r\n}\r\n\r\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\r\n return {\r\n name: \"preset-tokens\",\r\n setup(ctx) {\r\n for (const [name, value] of Object.entries(tokens)) {\r\n ctx.addToken(name, value)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\r\n return {\r\n name: \"preset-variants\",\r\n setup(ctx) {\r\n for (const [name, resolver] of Object.entries(variants)) {\r\n ctx.addVariant(name, resolver)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetScrollbar(): TwPlugin {\r\n return {\r\n name: \"preset-scrollbar\",\r\n setup(ctx) {\r\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\r\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\r\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\r\n },\r\n }\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type PluginManifestInput,\r\n PluginManifestSchema,\r\n parsePluginManifest,\r\n parseTokenRegistration,\r\n parseTwPluginOptions,\r\n type TokenRegistrationInput,\r\n TokenRegistrationSchema,\r\n TransformRegistrationSchema,\r\n type TwPluginOptionsInput,\r\n TwPluginOptionsSchema,\r\n} from \"./schemas\"","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\r\n\r\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\r\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\r\n\r\nexport interface TwVitePlugin extends TwContext {\r\n resolveId(\r\n this: PluginContext,\r\n source: string,\r\n importer: string\r\n ): Promise<PartialResolvedId | null>\r\n load(this: PluginContext, id: string): Promise<LoadResult | null>\r\n transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>\r\n}\r\n\r\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\r\n parseTwPluginOptions(options)\r\n\r\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\r\n\r\n return {\r\n ...ctx,\r\n async resolveId(source, importer) {\r\n if (!source.startsWith(\"tw.\") && !source.startsWith(\"tw:\")) return null\r\n const importPath = source.replace(/^tw[.:]/, \"\")\r\n const resolved = await this.resolve(importPath, importer, { skipSelf: true })\r\n if (resolved) return { id: resolved.id }\r\n return null\r\n },\r\n async load(_id) {\r\n return null\r\n },\r\n async transform(_code, _id) {\r\n return null\r\n },\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin.js","sourcesContent":["import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const DesignTokensSchema: z.ZodType<\r\n Record<string, string | number | Record<string, unknown>>\r\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\r\n\r\nexport const TwClassResultSchema = z.object({\r\n css: z.string(),\r\n classes: z.array(z.string()),\r\n})\r\n\r\nexport const TwPluginOptionsSchema = z.object({\r\n classProcessor: z\r\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\r\n .optional(),\r\n tokens: DesignTokensSchema.optional(),\r\n debug: z.boolean().optional(),\r\n minify: z.boolean().optional(),\r\n})\r\n\r\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\r\n\r\nexport const PluginManifestSchema = z.object({\r\n name: z.string().min(1),\r\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\r\n})\r\n\r\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\r\n\r\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\r\n\r\nexport const TokenRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n value: z.string(),\r\n})\r\n\r\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\r\n\r\nexport const parseTwPluginOptions = (options: unknown) =>\r\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\r\n\r\nexport const parsePluginManifest = (plugin: unknown) =>\r\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\nexport const parseTokenRegistration = (data: unknown) =>\r\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\r\n\r\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\r\n\r\n/** Nama plugin harus mengikuti format npm package */\r\nexport const PluginNameSchema = z.string()\r\n .min(1, \"Plugin name cannot be empty\")\r\n .regex(\r\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\r\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\r\n )\r\n\r\n/** Versi semantic versioning */\r\nexport const SemverSchema = z.string()\r\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\r\n\r\n/** Full plugin manifest dengan validasi nama dan versi */\r\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\r\n name: PluginNameSchema,\r\n version: SemverSchema.optional(),\r\n description: z.string().max(200).optional(),\r\n keywords: z.array(z.string()).max(10).optional(),\r\n})\r\n\r\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\r\n\r\n/** Validate full plugin manifest */\r\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\r\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\n/** Validate plugin name only */\r\nexport const validatePluginName = (name: unknown): string =>\r\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\r\n\r\n/** Zod validation for plugin registration payload */\r\nexport const PluginRegistrationPayloadSchema = z.object({\r\n plugin: FullPluginManifestSchema,\r\n config: z.record(z.string(), z.unknown()).optional(),\r\n priority: z.number().int().min(0).max(100).optional(),\r\n})\r\n\r\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\r\n\r\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\r\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\r\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\r\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\r\n\r\nexport interface TwClassResult {\r\n css: string\r\n classes: string[]\r\n}\r\n\r\nexport interface DesignTokens {\r\n [key: string]: string | number | DesignTokens\r\n}\r\n\r\nexport interface TwPluginOptions {\r\n classProcessor?: (classes: string[]) => TwClassResult\r\n tokens?: DesignTokens\r\n debug?: boolean\r\n minify?: boolean\r\n}\r\n\r\nexport type VariantResolver = (selector: string) => string\r\n\r\nexport interface UtilityDefinition {\r\n [property: string]: string\r\n}\r\n\r\nexport type { CompoundCondition, TokenMap }\r\n\r\nexport interface ComponentConfig {\r\n base: string\r\n variants: Record<string, Record<string, string>>\r\n compoundVariants: Array<{ class: string } & CompoundCondition>\r\n defaultVariants: Record<string, string>\r\n}\r\n\r\nexport interface TransformMeta {\r\n componentName: string\r\n tag: string\r\n}\r\n\r\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\r\n\r\nexport type CssHook = (css: string) => string\r\n\r\nexport interface TwContext {\r\n addVariant(name: string, resolver: VariantResolver): void\r\n addUtility(name: string, styles: UtilityDefinition): void\r\n addToken(name: string, value: string): void\r\n addTransform(fn: TransformFn): void\r\n onGenerateCSS(hook: CssHook): void\r\n onBuildEnd(hook: () => void | Promise<void>): void\r\n getToken(name: string): string | undefined\r\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\r\n readonly config: Record<string, unknown>\r\n}\r\n\r\nexport interface TwPlugin {\r\n name: string\r\n setup(ctx: TwContext): void\r\n}\r\n\r\nexport interface PluginRegistry {\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n transforms: TransformFn[]\r\n cssHooks: CssHook[]\r\n buildHooks: Array<() => void | Promise<void>>\r\n plugins: Set<string>\r\n}\r\n\r\nexport interface TokenEngineAPI {\r\n getToken?: (name: string) => string | undefined\r\n getTokens?: () => Record<string, string> | undefined\r\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\r\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\r\n if (engine && typeof engine === \"object\") {\r\n return engine as TokenEngineAPI\r\n }\r\n return undefined\r\n}\r\n\r\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\r\n if (!engine) return undefined\r\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\r\n if (typeof engine.getTokens === \"function\") {\r\n const tokens = engine.getTokens()\r\n return tokens?.[name]\r\n }\r\n return undefined\r\n}\r\n\r\nexport interface TransformContext {\r\n filename?: string\r\n componentName?: string\r\n tag?: string\r\n}\r\n\r\nexport interface TwGlobalRegistry {\r\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\r\n tokens: Record<string, string>\r\n variants: Map<string, VariantResolver>\r\n}\r\n\r\nconst transformRegistry: TwGlobalRegistry = {\r\n transforms: [],\r\n tokens: {},\r\n variants: new Map(),\r\n}\r\n\r\nconst normalizeTokenName = (name: string): string =>\r\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n\r\nexport function getGlobalRegistry(): TwGlobalRegistry {\r\n return transformRegistry\r\n}\r\n\r\nexport function registerTransform(\r\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\r\n): void {\r\n TransformRegistrationSchema.parse(transform)\r\n transformRegistry.transforms.push(transform)\r\n}\r\n\r\nexport function registerToken(name: string, value: string): void {\r\n const parsed = parseTokenRegistration({ name, value })\r\n transformRegistry.tokens[parsed.name] = parsed.value\r\n}\r\n\r\nexport function createPluginRegistry(): PluginRegistry {\r\n return {\r\n variants: new Map(),\r\n utilities: new Map(),\r\n tokens: new Map(),\r\n transforms: [],\r\n cssHooks: [],\r\n buildHooks: [],\r\n plugins: new Set(),\r\n }\r\n}\r\n\r\nconst legacyState = { globalRegistry: createPluginRegistry() }\r\n\r\nexport function resetGlobalRegistry(): void {\r\n transformRegistry.transforms.length = 0\r\n transformRegistry.variants.clear()\r\n for (const key of Object.keys(transformRegistry.tokens)) {\r\n delete transformRegistry.tokens[key]\r\n }\r\n legacyState.globalRegistry = createPluginRegistry()\r\n}\r\n\r\nexport function createPluginContext(\r\n registry: PluginRegistry,\r\n config: Record<string, unknown> = {}\r\n): TwContext {\r\n const isLegacyRegistry = registry === legacyState.globalRegistry\r\n\r\n return {\r\n config,\r\n addVariant(name, resolver) {\r\n registry.variants.set(name, resolver)\r\n if (isLegacyRegistry) {\r\n transformRegistry.variants.set(name, resolver)\r\n }\r\n },\r\n addUtility(name, styles) {\r\n registry.utilities.set(name, styles)\r\n },\r\n addToken(name, value) {\r\n const parsed = parseTokenRegistration({ name, value })\r\n const normalized = normalizeTokenName(parsed.name)\r\n registry.tokens.set(normalized, parsed.value)\r\n if (isLegacyRegistry) {\r\n transformRegistry.tokens[normalized] = parsed.value\r\n }\r\n },\r\n addTransform(fn) {\r\n TransformRegistrationSchema.parse(fn)\r\n registry.transforms.push(fn)\r\n if (isLegacyRegistry) {\r\n transformRegistry.transforms.push((config, ctx) =>\r\n fn(config, {\r\n componentName: ctx.componentName ?? \"\",\r\n tag: ctx.tag ?? \"\",\r\n })\r\n )\r\n }\r\n },\r\n onGenerateCSS(hook) {\r\n registry.cssHooks.push(hook)\r\n },\r\n onBuildEnd(hook) {\r\n registry.buildHooks.push(hook)\r\n },\r\n getToken(name) {\r\n const normalized = normalizeTokenName(name)\r\n // Check local registry first (populated by addToken), then fallback to token engine\r\n const local = registry.tokens.get(normalized)\r\n if (local !== undefined) return local\r\n return readToken(resolveTokenEngine(), normalized)\r\n },\r\n subscribeTokens(callback) {\r\n const engine = resolveTokenEngine()\r\n if (!engine) return () => {}\r\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\r\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\r\n return () => {}\r\n },\r\n }\r\n}\r\n\r\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n} {\r\n const registry = createPluginRegistry()\r\n const ctx = createPluginContext(registry, config)\r\n\r\n const result = ctx as TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n }\r\n\r\n result.registry = {\r\n plugins: registry.plugins,\r\n variants: registry.variants,\r\n utilities: registry.utilities,\r\n tokens: registry.tokens,\r\n }\r\n\r\n result.use = (plugin: TwPlugin) => {\r\n const manifest = parsePluginManifest(plugin)\r\n manifest.setup(ctx)\r\n registry.plugins.add(manifest.name)\r\n }\r\n\r\n if (config.plugins && Array.isArray(config.plugins)) {\r\n for (const plugin of config.plugins) {\r\n result.use(parsePluginManifest(plugin))\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Creates a TwContext that writes through to the global (legacy) registry.\r\n * Used by createTwPlugin() in the plugin package.\r\n */\r\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\r\n return createPluginContext(legacyState.globalRegistry, config)\r\n}\r\n\r\nexport function use(plugin: TwPlugin): void {\r\n const ctx = createPluginContext(legacyState.globalRegistry)\r\n parsePluginManifest(plugin).setup(ctx)\r\n}\r\n\r\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\r\n return {\r\n name: \"preset-tokens\",\r\n setup(ctx) {\r\n for (const [name, value] of Object.entries(tokens)) {\r\n ctx.addToken(name, value)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\r\n return {\r\n name: \"preset-variants\",\r\n setup(ctx) {\r\n for (const [name, resolver] of Object.entries(variants)) {\r\n ctx.addVariant(name, resolver)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetScrollbar(): TwPlugin {\r\n return {\r\n name: \"preset-scrollbar\",\r\n setup(ctx) {\r\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\r\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\r\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\r\n },\r\n }\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type PluginManifestInput,\r\n PluginManifestSchema,\r\n parsePluginManifest,\r\n parseTokenRegistration,\r\n parseTwPluginOptions,\r\n type TokenRegistrationInput,\r\n TokenRegistrationSchema,\r\n TransformRegistrationSchema,\r\n type TwPluginOptionsInput,\r\n TwPluginOptionsSchema,\r\n} from \"./schemas\"","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\r\n\r\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\r\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\r\n\r\n// Type-only re-exports — emitted as `export type { }` so Turbopack ESM tracing\r\n// does not try to resolve them as runtime exports from plugin-api.mjs\r\nexport type {\r\n TwClassResult,\r\n DesignTokens,\r\n TwPluginOptions,\r\n VariantResolver,\r\n UtilityDefinition,\r\n ComponentConfig,\r\n TransformMeta,\r\n TransformFn,\r\n CssHook,\r\n TwContext,\r\n TwPlugin,\r\n PluginRegistry,\r\n TokenEngineAPI,\r\n TransformContext,\r\n TwGlobalRegistry,\r\n CompoundCondition,\r\n TokenMap,\r\n PluginManifestInput,\r\n TokenRegistrationInput,\r\n TwPluginOptionsInput,\r\n} from \"@tailwind-styled/plugin-api\"\r\n\r\n// Runtime value re-exports\r\nexport {\r\n resolveTokenEngine,\r\n readToken,\r\n getGlobalRegistry,\r\n registerTransform,\r\n registerToken,\r\n createPluginRegistry,\r\n resetGlobalRegistry,\r\n createPluginContext,\r\n createTw,\r\n createGlobalPluginContext,\r\n use,\r\n presetTokens,\r\n presetVariants,\r\n presetScrollbar,\r\n PluginManifestSchema,\r\n parsePluginManifest,\r\n parseTokenRegistration,\r\n parseTwPluginOptions,\r\n TokenRegistrationSchema,\r\n TransformRegistrationSchema,\r\n TwPluginOptionsSchema,\r\n} from \"@tailwind-styled/plugin-api\"\r\n\r\nexport interface TwVitePlugin extends TwContext {\r\n resolveId(\r\n this: PluginContext,\r\n source: string,\r\n importer: string\r\n ): Promise<PartialResolvedId | null>\r\n load(this: PluginContext, id: string): Promise<LoadResult | null>\r\n transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>\r\n}\r\n\r\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\r\n parseTwPluginOptions(options)\r\n\r\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\r\n\r\n return {\r\n ...ctx,\r\n async resolveId(source, importer) {\r\n if (!source.startsWith(\"tw.\") && !source.startsWith(\"tw:\")) return null\r\n const importPath = source.replace(/^tw[.:]/, \"\")\r\n const resolved = await this.resolve(importPath, importer, { skipSelf: true })\r\n if (resolved) return { id: resolved.id }\r\n return null\r\n },\r\n async load(_id) {\r\n return null\r\n },\r\n async transform(_code, _id) {\r\n return null\r\n },\r\n }\r\n}"]}
|
package/dist/plugin.mjs
CHANGED
|
@@ -32,6 +32,7 @@ var TokenRegistrationSchema = z.object({
|
|
|
32
32
|
value: z.string()
|
|
33
33
|
});
|
|
34
34
|
var parseTwPluginOptions = (options) => parseWithSchema(TwPluginOptionsSchema, options ?? {}, "plugin options are invalid");
|
|
35
|
+
var parsePluginManifest = (plugin) => parseWithSchema(PluginManifestSchema, plugin, "plugin manifest is invalid");
|
|
35
36
|
var parseTokenRegistration = (data) => parseWithSchema(TokenRegistrationSchema, data, "token registration is invalid");
|
|
36
37
|
var PluginNameSchema = z.string().min(1, "Plugin name cannot be empty").regex(
|
|
37
38
|
/^(@[a-z0-9-]+\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,
|
|
@@ -74,6 +75,17 @@ var transformRegistry = {
|
|
|
74
75
|
variants: /* @__PURE__ */ new Map()
|
|
75
76
|
};
|
|
76
77
|
var normalizeTokenName = (name) => name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
78
|
+
function getGlobalRegistry() {
|
|
79
|
+
return transformRegistry;
|
|
80
|
+
}
|
|
81
|
+
function registerTransform(transform) {
|
|
82
|
+
TransformRegistrationSchema.parse(transform);
|
|
83
|
+
transformRegistry.transforms.push(transform);
|
|
84
|
+
}
|
|
85
|
+
function registerToken(name, value) {
|
|
86
|
+
const parsed = parseTokenRegistration({ name, value });
|
|
87
|
+
transformRegistry.tokens[parsed.name] = parsed.value;
|
|
88
|
+
}
|
|
77
89
|
function createPluginRegistry() {
|
|
78
90
|
return {
|
|
79
91
|
variants: /* @__PURE__ */ new Map(),
|
|
@@ -86,6 +98,14 @@ function createPluginRegistry() {
|
|
|
86
98
|
};
|
|
87
99
|
}
|
|
88
100
|
var legacyState = { globalRegistry: createPluginRegistry() };
|
|
101
|
+
function resetGlobalRegistry() {
|
|
102
|
+
transformRegistry.transforms.length = 0;
|
|
103
|
+
transformRegistry.variants.clear();
|
|
104
|
+
for (const key of Object.keys(transformRegistry.tokens)) {
|
|
105
|
+
delete transformRegistry.tokens[key];
|
|
106
|
+
}
|
|
107
|
+
legacyState.globalRegistry = createPluginRegistry();
|
|
108
|
+
}
|
|
89
109
|
function createPluginContext(registry, config = {}) {
|
|
90
110
|
const isLegacyRegistry = registry === legacyState.globalRegistry;
|
|
91
111
|
return {
|
|
@@ -142,9 +162,65 @@ function createPluginContext(registry, config = {}) {
|
|
|
142
162
|
}
|
|
143
163
|
};
|
|
144
164
|
}
|
|
165
|
+
function createTw(config = {}) {
|
|
166
|
+
const registry = createPluginRegistry();
|
|
167
|
+
const ctx = createPluginContext(registry, config);
|
|
168
|
+
const result = ctx;
|
|
169
|
+
result.registry = {
|
|
170
|
+
plugins: registry.plugins,
|
|
171
|
+
variants: registry.variants,
|
|
172
|
+
utilities: registry.utilities,
|
|
173
|
+
tokens: registry.tokens
|
|
174
|
+
};
|
|
175
|
+
result.use = (plugin) => {
|
|
176
|
+
const manifest = parsePluginManifest(plugin);
|
|
177
|
+
manifest.setup(ctx);
|
|
178
|
+
registry.plugins.add(manifest.name);
|
|
179
|
+
};
|
|
180
|
+
if (config.plugins && Array.isArray(config.plugins)) {
|
|
181
|
+
for (const plugin of config.plugins) {
|
|
182
|
+
result.use(parsePluginManifest(plugin));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
145
187
|
function createGlobalPluginContext(config = {}) {
|
|
146
188
|
return createPluginContext(legacyState.globalRegistry, config);
|
|
147
189
|
}
|
|
190
|
+
function use(plugin) {
|
|
191
|
+
const ctx = createPluginContext(legacyState.globalRegistry);
|
|
192
|
+
parsePluginManifest(plugin).setup(ctx);
|
|
193
|
+
}
|
|
194
|
+
function presetTokens(tokens) {
|
|
195
|
+
return {
|
|
196
|
+
name: "preset-tokens",
|
|
197
|
+
setup(ctx) {
|
|
198
|
+
for (const [name, value] of Object.entries(tokens)) {
|
|
199
|
+
ctx.addToken(name, value);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function presetVariants(variants) {
|
|
205
|
+
return {
|
|
206
|
+
name: "preset-variants",
|
|
207
|
+
setup(ctx) {
|
|
208
|
+
for (const [name, resolver] of Object.entries(variants)) {
|
|
209
|
+
ctx.addVariant(name, resolver);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function presetScrollbar() {
|
|
215
|
+
return {
|
|
216
|
+
name: "preset-scrollbar",
|
|
217
|
+
setup(ctx) {
|
|
218
|
+
ctx.addVariant("scrollbar-thin", () => "::-webkit-scrollbar{width:8px;height:8px}");
|
|
219
|
+
ctx.addVariant("scrollbar-none", () => "::-webkit-scrollbar{display:none}");
|
|
220
|
+
ctx.addUtility("scrollbar-hide", { "-ms-overflow-style": "none", "scrollbar-width": "none" });
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
148
224
|
|
|
149
225
|
// packages/domain/plugin/src/index.ts
|
|
150
226
|
function createTwPlugin(options = {}) {
|
|
@@ -168,6 +244,6 @@ function createTwPlugin(options = {}) {
|
|
|
168
244
|
};
|
|
169
245
|
}
|
|
170
246
|
|
|
171
|
-
export { createTwPlugin };
|
|
247
|
+
export { PluginManifestSchema, TokenRegistrationSchema, TransformRegistrationSchema, TwPluginOptionsSchema, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, createTwPlugin, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
|
172
248
|
//# sourceMappingURL=plugin.mjs.map
|
|
173
249
|
//# sourceMappingURL=plugin.mjs.map
|