tailwind-styled-v4 5.0.36 → 5.0.38
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/analyzer.d.mts +152 -5
- package/dist/analyzer.d.ts +152 -5
- package/dist/analyzer.js +213 -161
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +118 -82
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.d.mts +30 -3
- package/dist/animate.d.ts +30 -3
- package/dist/animate.js +131 -87
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +28 -14
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js +105 -68
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +40 -13
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +577 -426
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +466 -304
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +5 -0
- package/dist/compiler.d.ts +5 -0
- package/dist/compiler.js +826 -508
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +287 -29
- package/dist/compiler.mjs.map +1 -1
- package/dist/dashboard.js +71 -41
- package/dist/dashboard.js.map +1 -1
- package/dist/dashboard.mjs +12 -6
- package/dist/dashboard.mjs.map +1 -1
- package/dist/devtools.d.mts +88 -2
- package/dist/devtools.d.ts +88 -2
- package/dist/devtools.js +333 -289
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +26 -11
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.d.mts +557 -6
- package/dist/engine.d.ts +557 -6
- package/dist/engine.js +679 -502
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +467 -307
- package/dist/engine.mjs.map +1 -1
- package/dist/index.d.mts +180 -127
- package/dist/index.d.ts +180 -127
- package/dist/index.js +1329 -7441
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1266 -7385
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +318 -243
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +256 -181
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.d.mts +4 -2
- package/dist/plugin-api.d.ts +4 -2
- package/dist/plugin-api.js +93 -49
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs +26 -6
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +103 -62
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +53 -35
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.d.mts +165 -5
- package/dist/plugin.d.ts +165 -5
- package/dist/plugin.js +115 -50
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +44 -6
- package/dist/plugin.mjs.map +1 -1
- package/dist/preset.js +47 -15
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs +13 -5
- package/dist/preset.mjs.map +1 -1
- package/dist/rspack.js +82 -50
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +20 -12
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime-css.js +62 -24
- package/dist/runtime-css.js.map +1 -1
- package/dist/runtime-css.mjs +15 -7
- package/dist/runtime-css.mjs.map +1 -1
- package/dist/runtime.d.mts +38 -3
- package/dist/runtime.d.ts +38 -3
- package/dist/runtime.js +97 -44
- package/dist/runtime.js.map +1 -1
- package/dist/runtime.mjs +31 -8
- package/dist/runtime.mjs.map +1 -1
- package/dist/scanner.d.mts +58 -4
- package/dist/scanner.d.ts +58 -4
- package/dist/scanner.js +163 -120
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +67 -39
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.d.mts +185 -3
- package/dist/shared.d.ts +185 -3
- package/dist/shared.js +441 -295
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +253 -122
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.d.mts +2 -2
- package/dist/storybook-addon.d.ts +2 -2
- package/dist/storybook-addon.js +39 -10
- package/dist/storybook-addon.js.map +1 -1
- package/dist/storybook-addon.mjs +8 -3
- package/dist/storybook-addon.mjs.map +1 -1
- package/dist/svelte.d.mts +2 -1
- package/dist/svelte.d.ts +2 -1
- package/dist/svelte.js +88 -64
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +28 -13
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +68 -37
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +8 -7
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +55 -18
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +16 -3
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.d.mts +38 -3
- package/dist/theme.d.ts +38 -3
- package/dist/theme.js +131 -74
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +42 -13
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +150 -116
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +124 -81
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +560 -421
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +460 -302
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +561 -446
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +433 -321
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +4 -1
- package/dist/vue.d.ts +4 -1
- package/dist/vue.js +95 -70
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +30 -14
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +110 -78
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +45 -17
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.linux-x64-gnu.node +0 -0
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +3 -1
- package/dist/analyzeWorkspace-B1_XRfdl.d.ts +0 -134
- package/dist/analyzeWorkspace-hYfu4Hg3.d.mts +0 -134
- package/dist/index-DQI6O24n.d.mts +0 -464
- package/dist/index-NDINUhLN.d.mts +0 -90
- package/dist/index-NDINUhLN.d.ts +0 -90
- package/dist/index-UkYbyBkR.d.ts +0 -464
- package/dist/liveTokenEngine-CN9ian1R.d.ts +0 -38
- package/dist/liveTokenEngine-DKoWRtqH.d.mts +0 -38
- package/dist/schemas-DR-SLxZZ.d.mts +0 -59
- package/dist/schemas-DR-SLxZZ.d.ts +0 -59
- package/dist/trace-Dz4vmZdy.d.mts +0 -96
- package/dist/trace-Dz4vmZdy.d.ts +0 -96
- package/dist/types-DXr2PmGP.d.mts +0 -31
- package/dist/types-DXr2PmGP.d.ts +0 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/plugin-registry/registry.json","../packages/domain/plugin-registry/src/index.ts"],"names":["exports"],"mappings":"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","file":"plugin-registry.mjs","sourcesContent":["{\n \"version\": \"5.0.0\",\n \"updatedAt\": \"2026-03-23\",\n \"official\": [\n {\n \"name\": \"@tailwind-styled/plugin-animation\",\n \"description\": \"Animation presets and keyframes — enter/exit transitions, spring physics, scroll-triggered\",\n \"version\": \"5.0.0\",\n \"tags\": [\"animation\", \"motion\", \"transition\", \"keyframes\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/packages/animate\",\n \"install\": \"npm install @tailwind-styled/plugin-animation@5.0.0\",\n \"integrity\": \"sha256-abc123\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-typography\",\n \"description\": \"Prose and typography utilities — headings, body, code blocks, with dark mode\",\n \"version\": \"5.0.0\",\n \"tags\": [\"typography\", \"prose\", \"markdown\", \"content\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-typography@5.0.0\",\n \"integrity\": \"sha256-def456\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-forms\",\n \"description\": \"Form input styling helpers — reset, validation states, custom checkboxes/radios\",\n \"version\": \"5.0.0\",\n \"tags\": [\"forms\", \"inputs\", \"validation\", \"checkbox\", \"radio\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-forms@5.0.0\",\n \"integrity\": \"sha256-ghi789\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-container-queries\",\n \"description\": \"Container query utilities — @container breakpoints for component-level responsiveness\",\n \"version\": \"5.0.0\",\n \"tags\": [\"container-queries\", \"responsive\", \"layout\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-container-queries@5.0.0\",\n \"integrity\": \"sha256-jkl012\"\n }\n ],\n \"community\": [\n {\n \"name\": \"tailwind-styled-animate\",\n \"description\": \"Community animation variants — bounce, pulse, wiggle, and more\",\n \"version\": \"0.1.0\",\n \"tags\": [\"animation\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-animate\"\n },\n {\n \"name\": \"tailwind-styled-icons\",\n \"description\": \"SVG icon system integrated with tw() variant API\",\n \"version\": \"0.1.0\",\n \"tags\": [\"icons\", \"svg\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-icons\"\n }\n ]\n}\n","import { spawnSync } from \"node:child_process\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, readFileSync } from \"node:fs\"\nimport { createRequire } from \"node:module\"\nimport { join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\n// ── Native bridge (lazy-loaded to avoid circular deps) ──────────────────────\ntype NativePluginRegistry = {\n pluginSearch: (pluginsJson: string, query: string) => string\n pluginValidateName: (name: string) => boolean\n pluginVerifyIntegrity: (content: string, expectedIntegrity: string) => boolean\n pluginSemverHasUpdate: (current: string, latest: string) => boolean\n pluginCheckAllUpdates: (installedJson: string, registryJson: string) => string\n}\nlet _native: NativePluginRegistry | null | undefined = undefined\nfunction getNative(): NativePluginRegistry | null {\n if (_native !== undefined) return _native\n try {\n const runtimeDir = typeof __dirname === \"string\" && __dirname.length > 0\n ? __dirname\n : typeof import.meta !== \"undefined\" && import.meta.url\n ? fileURLToPath(new URL(\".\", import.meta.url))\n : process.cwd()\n const req = createRequire(join(runtimeDir, \"noop.cjs\"))\n const _pa = `${process.platform}-${process.arch}`\n const _paGnu = _pa === \"linux-x64\" ? \"linux-x64-gnu\" : _pa === \"linux-arm64\" ? \"linux-arm64-gnu\" : _pa\n const candidates = [\n // npm install case: dist/../native/\n resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_pa}.node`),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_paGnu}.node`),\n resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // cwd fallback\n resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\n resolve(process.cwd(), \"native\", \"tailwind_styled_parser.node\"),\n // monorepo dev: 4-level up\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // 3-level fallback\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n ]\n for (const c of candidates) {\n try {\n const mod = req(c) as Record<string, unknown>\n if (typeof mod?.pluginSearch === \"function\") {\n return (_native = mod as unknown as NativePluginRegistry)\n }\n } catch { /* continue */ }\n }\n } catch { /* ignore */ }\n return (_native = null)\n}\n\nconst PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\\/)?[a-z0-9-]+(@[0-9]+\\.[0-9]+\\.[0-9]+)?$/\n\nexport interface PluginInfo {\n name: string\n description: string\n version: string\n tags: string[]\n official?: boolean\n docs?: string\n install?: string\n integrity?: string\n}\n\ninterface RegistryData {\n version: string\n official: PluginInfo[]\n community: PluginInfo[]\n}\n\nexport interface InstallResult {\n plugin: string\n installed: boolean\n command: string\n exitCode: number\n}\n\nexport type PluginRegistryErrorCode =\n | \"INVALID_PLUGIN_NAME\"\n | \"PLUGIN_NOT_FOUND\"\n | \"EXTERNAL_CONFIRMATION_REQUIRED\"\n | \"INSTALL_COMMAND_FAILED\"\n | \"INSTALL_FAILED\"\n | \"NETWORK_ERROR\"\n | \"REGISTRY_LOAD_FAILED\"\n\nexport interface PluginRegistryErrorPayload {\n code: PluginRegistryErrorCode\n message: string\n context?: Record<string, unknown>\n}\n\nexport class PluginRegistryError extends Error {\n readonly code: PluginRegistryErrorCode\n readonly context?: Record<string, unknown>\n\n constructor(payload: PluginRegistryErrorPayload) {\n super(payload.message)\n this.name = \"PluginRegistryError\"\n this.code = payload.code\n this.context = payload.context\n }\n\n toObject(): PluginRegistryErrorPayload {\n return {\n code: this.code,\n message: this.message,\n context: this.context,\n }\n }\n}\n\nexport interface InstallOptions {\n dryRun?: boolean\n npmBin?: string\n allowExternal?: boolean\n confirmExternal?: boolean\n}\n\nexport interface RegistryOptions {\n registryUrl?: string\n}\n\nexport class PluginRegistry {\n private readonly plugins: PluginInfo[]\n private readonly registryVersion: string\n\n constructor(registryData?: RegistryData, options: RegistryOptions = {}) {\n if (options.registryUrl) {\n this.plugins = []\n this.registryVersion = \"0.0.0\"\n } else {\n const data = registryData\n const version = data?.version ?? \"4.2.0\"\n const official = (data?.official ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: true,\n docs: item.docs,\n install: item.install,\n integrity: item.integrity,\n }))\n const community = (data?.community ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: false,\n }))\n this.plugins = [...official, ...community]\n this.registryVersion = version\n }\n }\n\n static async loadFromUrl(url: string): Promise<PluginRegistry> {\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to fetch registry: ${response.status} ${response.statusText}`,\n context: { url, status: response.status },\n })\n }\n const data = (await response.json()) as RegistryData\n return new PluginRegistry(data, { registryUrl: url })\n } catch (error) {\n if (error instanceof PluginRegistryError) throw error\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to load registry: ${error instanceof Error ? error.message : String(error)}`,\n context: { url },\n })\n }\n }\n\n getVersion(): string {\n return this.registryVersion\n }\n\n search(query: string): PluginInfo[] {\n const native = getNative()\n if (native) {\n return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query)) as PluginInfo[]\n }\n const q = query.trim().toLowerCase()\n if (!q) return [...this.plugins]\n return this.plugins.filter((plugin) =>\n plugin.name.toLowerCase().includes(q) ||\n plugin.description.toLowerCase().includes(q) ||\n plugin.tags.some((tag) => tag.toLowerCase().includes(q))\n )\n }\n\n getAll(): PluginInfo[] {\n return [...this.plugins]\n }\n\n getByName(pluginName: string): PluginInfo | undefined {\n const nameWithoutVersion = pluginName.split(\"@\").slice(0, 2).join(\"@\")\n return this.plugins.find((plugin) => plugin.name === nameWithoutVersion)\n }\n\n install(pluginName: string, options: InstallOptions = {}): InstallResult {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n\n const native = getNative()\n const isValidName = native\n ? native.pluginValidateName(pluginName)\n : PLUGIN_NAME_REGEX.test(pluginName)\n\n if (!isValidName) {\n throw new PluginRegistryError({\n code: \"INVALID_PLUGIN_NAME\",\n message: `Nama plugin tidak valid: '${pluginName}'.`,\n context: {\n pluginName,\n expectedPattern: String(PLUGIN_NAME_REGEX),\n },\n })\n }\n\n const knownPlugin = this.getByName(pluginName)\n const isExternal = !knownPlugin\n\n if (isExternal && !options.allowExternal) {\n throw new PluginRegistryError({\n code: \"PLUGIN_NOT_FOUND\",\n message: `Plugin '${pluginName}' tidak ditemukan di registry. Coba cari dengan 'tw-plugin search <keyword>'.`,\n context: {\n pluginName,\n allowExternal: false,\n },\n })\n }\n\n if (isExternal && options.allowExternal && !options.confirmExternal) {\n throw new PluginRegistryError({\n code: \"EXTERNAL_CONFIRMATION_REQUIRED\",\n message: `Plugin eksternal '${pluginName}' butuh konfirmasi. Jalankan ulang dengan --allow-external --yes.`,\n context: {\n pluginName,\n allowExternal: true,\n },\n })\n }\n\n const command = `${npmBin} install ${pluginName}`\n if (options.dryRun) {\n return { plugin: pluginName, installed: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"install\", pluginName], { stdio: \"inherit\" })\n if (child.error) {\n throw new PluginRegistryError({\n code: \"INSTALL_COMMAND_FAILED\",\n message: `Gagal menjalankan perintah install: ${command}`,\n context: {\n pluginName,\n command,\n reason: child.error.message,\n },\n })\n }\n\n if (child.status !== 0) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Install gagal (${child.status ?? 1}): ${command}`,\n context: {\n pluginName,\n command,\n exitCode: child.status ?? 1,\n },\n })\n }\n\n return {\n plugin: pluginName,\n installed: true,\n command,\n exitCode: 0,\n }\n }\n\n uninstall(\n pluginName: string,\n options: { dryRun?: boolean; npmBin?: string } = {}\n ): {\n plugin: string\n uninstalled: boolean\n command: string\n exitCode: number\n } {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n const command = `${npmBin} uninstall ${pluginName}`\n\n if (options.dryRun) {\n return { plugin: pluginName, uninstalled: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"uninstall\", pluginName], { stdio: \"inherit\" })\n if (child.status !== 0 && child.status !== null) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Uninstall gagal (${child.status}): ${command}`,\n context: { pluginName, command, exitCode: child.status },\n })\n }\n\n return {\n plugin: pluginName,\n uninstalled: true,\n command,\n exitCode: child.status ?? 0,\n }\n }\n\n verifyIntegrity(pluginName: string): { ok: boolean; reason?: string } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { ok: false, reason: `Plugin '${pluginName}' not in registry` }\n if (!plugin.integrity) {\n return { ok: true, reason: \"no checksum registered (skip)\" }\n }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { ok: false, reason: \"plugin not installed\" }\n const content = readFileSync(pkgPath, \"utf8\")\n const native = getNative()\n const ok = native\n ? native.pluginVerifyIntegrity(content, plugin.integrity!)\n : (() => {\n const hash = `sha256-${createHash(\"sha256\").update(content).digest(\"base64\")}`\n return hash === plugin.integrity\n })()\n return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` }\n } catch (e: unknown) {\n return {\n ok: false,\n reason: `Integrity check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkForUpdate(pluginName: string): {\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { hasUpdate: false, error: \"plugin not installed\" }\n const current = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n const latest = plugin.version\n const native = getNative()\n const hasUpdate = native\n ? native.pluginSemverHasUpdate(current as string, latest)\n : (() => {\n const parseV = (v: string) => v.replace(/[^0-9.]/g, \"\").split(\".\").map(Number)\n const [ca, cb, cc] = parseV(current as string)\n const [la, lb, lc] = parseV(latest)\n return la > ca || (la === ca && lb > cb) || (la === ca && lb === cb && lc > cc)\n })()\n return { hasUpdate, current: current as string, latest }\n } catch (e: unknown) {\n return {\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkAllUpdates(): Array<{\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }> {\n return this.plugins.map((p) => ({ name: p.name, ...this.checkForUpdate(p.name) }))\n }\n}\n\nconst _state = { defaultRegistry: null as PluginRegistry | null }\n\nexport function getRegistry(): PluginRegistry {\n if (!_state.defaultRegistry) {\n const registryData = require(\"../registry.json\") as RegistryData\n _state.defaultRegistry = new PluginRegistry(registryData)\n }\n return _state.defaultRegistry\n}\n\nexport const registry = getRegistry()"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/plugin-registry/registry.json","../packages/domain/plugin-registry/src/index.ts"],"sourcesContent":["{\n \"version\": \"5.0.0\",\n \"updatedAt\": \"2026-03-23\",\n \"official\": [\n {\n \"name\": \"@tailwind-styled/plugin-animation\",\n \"description\": \"Animation presets and keyframes — enter/exit transitions, spring physics, scroll-triggered\",\n \"version\": \"5.0.0\",\n \"tags\": [\"animation\", \"motion\", \"transition\", \"keyframes\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/packages/animate\",\n \"install\": \"npm install @tailwind-styled/plugin-animation@5.0.0\",\n \"integrity\": \"sha256-abc123\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-typography\",\n \"description\": \"Prose and typography utilities — headings, body, code blocks, with dark mode\",\n \"version\": \"5.0.0\",\n \"tags\": [\"typography\", \"prose\", \"markdown\", \"content\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-typography@5.0.0\",\n \"integrity\": \"sha256-def456\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-forms\",\n \"description\": \"Form input styling helpers — reset, validation states, custom checkboxes/radios\",\n \"version\": \"5.0.0\",\n \"tags\": [\"forms\", \"inputs\", \"validation\", \"checkbox\", \"radio\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-forms@5.0.0\",\n \"integrity\": \"sha256-ghi789\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-container-queries\",\n \"description\": \"Container query utilities — @container breakpoints for component-level responsiveness\",\n \"version\": \"5.0.0\",\n \"tags\": [\"container-queries\", \"responsive\", \"layout\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-container-queries@5.0.0\",\n \"integrity\": \"sha256-jkl012\"\n }\n ],\n \"community\": [\n {\n \"name\": \"tailwind-styled-animate\",\n \"description\": \"Community animation variants — bounce, pulse, wiggle, and more\",\n \"version\": \"0.1.0\",\n \"tags\": [\"animation\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-animate\"\n },\n {\n \"name\": \"tailwind-styled-icons\",\n \"description\": \"SVG icon system integrated with tw() variant API\",\n \"version\": \"0.1.0\",\n \"tags\": [\"icons\", \"svg\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-icons\"\n }\n ]\n}\n","import { spawnSync } from \"node:child_process\"\nimport { existsSync, readFileSync } from \"node:fs\"\nimport { createRequire } from \"node:module\"\nimport { join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\n// ── Native bridge (lazy-loaded to avoid circular deps) ──────────────────────\ntype NativePluginRegistry = {\n pluginSearch: (pluginsJson: string, query: string) => string\n pluginValidateName: (name: string) => boolean\n pluginVerifyIntegrity: (content: string, expectedIntegrity: string) => boolean\n pluginSemverHasUpdate: (current: string, latest: string) => boolean\n pluginCheckAllUpdates: (installedJson: string, registryJson: string) => string\n}\nlet _native: NativePluginRegistry | null | undefined = undefined\nfunction getNative(): NativePluginRegistry | null {\n if (_native !== undefined) return _native\n try {\n const runtimeDir = typeof __dirname === \"string\" && __dirname.length > 0\n ? __dirname\n : typeof import.meta !== \"undefined\" && import.meta.url\n ? fileURLToPath(new URL(\".\", import.meta.url))\n : process.cwd()\n const req = createRequire(join(runtimeDir, \"noop.cjs\"))\n const _pa = `${process.platform}-${process.arch}`\n const _paGnu = _pa === \"linux-x64\" ? \"linux-x64-gnu\" : _pa === \"linux-arm64\" ? \"linux-arm64-gnu\" : _pa\n const candidates = [\n // npm install case: dist/../native/\n resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_pa}.node`),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_paGnu}.node`),\n resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // cwd fallback\n resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\n resolve(process.cwd(), \"native\", \"tailwind_styled_parser.node\"),\n // monorepo dev: 4-level up\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // 3-level fallback\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n ]\n for (const c of candidates) {\n try {\n const mod = req(c) as Record<string, unknown>\n if (typeof mod?.pluginSearch === \"function\") {\n return (_native = mod as unknown as NativePluginRegistry)\n }\n } catch { /* continue */ }\n }\n } catch { /* ignore */ }\n return (_native = null)\n}\n\nconst NATIVE_UNAVAILABLE_MESSAGE =\n \"[tailwind-styled/plugin-registry] Native binding is required but not available.\\n\" +\n \"Please ensure you have run: npm run build:rust\"\n\n/**\n * Native-only accessor. Throws if the Rust binding is missing.\n * The TS layer is a thin wrapper — no JS fallbacks (native-first philosophy).\n */\nfunction requireNative(): NativePluginRegistry {\n const native = getNative()\n if (!native) throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\n return native\n}\n\nconst PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\\/)?[a-z0-9-]+(@[0-9]+\\.[0-9]+\\.[0-9]+)?$/\n\nexport interface PluginInfo {\n name: string\n description: string\n version: string\n tags: string[]\n official?: boolean\n docs?: string\n install?: string\n integrity?: string\n}\n\ninterface RegistryData {\n version: string\n official: PluginInfo[]\n community: PluginInfo[]\n}\n\nexport interface InstallResult {\n plugin: string\n installed: boolean\n command: string\n exitCode: number\n}\n\nexport type PluginRegistryErrorCode =\n | \"INVALID_PLUGIN_NAME\"\n | \"PLUGIN_NOT_FOUND\"\n | \"EXTERNAL_CONFIRMATION_REQUIRED\"\n | \"INSTALL_COMMAND_FAILED\"\n | \"INSTALL_FAILED\"\n | \"NETWORK_ERROR\"\n | \"REGISTRY_LOAD_FAILED\"\n\nexport interface PluginRegistryErrorPayload {\n code: PluginRegistryErrorCode\n message: string\n context?: Record<string, unknown>\n}\n\nexport class PluginRegistryError extends Error {\n readonly code: PluginRegistryErrorCode\n readonly context?: Record<string, unknown>\n\n constructor(payload: PluginRegistryErrorPayload) {\n super(payload.message)\n this.name = \"PluginRegistryError\"\n this.code = payload.code\n this.context = payload.context\n }\n\n toObject(): PluginRegistryErrorPayload {\n return {\n code: this.code,\n message: this.message,\n context: this.context,\n }\n }\n}\n\nexport interface InstallOptions {\n dryRun?: boolean\n npmBin?: string\n allowExternal?: boolean\n confirmExternal?: boolean\n}\n\nexport interface RegistryOptions {\n registryUrl?: string\n}\n\nexport class PluginRegistry {\n private readonly plugins: PluginInfo[]\n private readonly registryVersion: string\n\n constructor(registryData?: RegistryData, options: RegistryOptions = {}) {\n if (options.registryUrl) {\n this.plugins = []\n this.registryVersion = \"0.0.0\"\n } else {\n const data = registryData\n const version = data?.version ?? \"4.2.0\"\n const official = (data?.official ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: true,\n docs: item.docs,\n install: item.install,\n integrity: item.integrity,\n }))\n const community = (data?.community ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: false,\n }))\n this.plugins = [...official, ...community]\n this.registryVersion = version\n }\n }\n\n static async loadFromUrl(url: string): Promise<PluginRegistry> {\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to fetch registry: ${response.status} ${response.statusText}`,\n context: { url, status: response.status },\n })\n }\n const data = (await response.json()) as RegistryData\n return new PluginRegistry(data, { registryUrl: url })\n } catch (error) {\n if (error instanceof PluginRegistryError) throw error\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to load registry: ${error instanceof Error ? error.message : String(error)}`,\n context: { url },\n })\n }\n }\n\n getVersion(): string {\n return this.registryVersion\n }\n\n search(query: string): PluginInfo[] {\n const native = requireNative()\n return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query)) as PluginInfo[]\n }\n\n getAll(): PluginInfo[] {\n return [...this.plugins]\n }\n\n getByName(pluginName: string): PluginInfo | undefined {\n const nameWithoutVersion = pluginName.split(\"@\").slice(0, 2).join(\"@\")\n return this.plugins.find((plugin) => plugin.name === nameWithoutVersion)\n }\n\n install(pluginName: string, options: InstallOptions = {}): InstallResult {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n\n const native = requireNative()\n const isValidName = native.pluginValidateName(pluginName)\n\n if (!isValidName) {\n throw new PluginRegistryError({\n code: \"INVALID_PLUGIN_NAME\",\n message: `Nama plugin tidak valid: '${pluginName}'.`,\n context: {\n pluginName,\n expectedPattern: String(PLUGIN_NAME_REGEX),\n },\n })\n }\n\n const knownPlugin = this.getByName(pluginName)\n const isExternal = !knownPlugin\n\n if (isExternal && !options.allowExternal) {\n throw new PluginRegistryError({\n code: \"PLUGIN_NOT_FOUND\",\n message: `Plugin '${pluginName}' tidak ditemukan di registry. Coba cari dengan 'tw-plugin search <keyword>'.`,\n context: {\n pluginName,\n allowExternal: false,\n },\n })\n }\n\n if (isExternal && options.allowExternal && !options.confirmExternal) {\n throw new PluginRegistryError({\n code: \"EXTERNAL_CONFIRMATION_REQUIRED\",\n message: `Plugin eksternal '${pluginName}' butuh konfirmasi. Jalankan ulang dengan --allow-external --yes.`,\n context: {\n pluginName,\n allowExternal: true,\n },\n })\n }\n\n const command = `${npmBin} install ${pluginName}`\n if (options.dryRun) {\n return { plugin: pluginName, installed: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"install\", pluginName], { stdio: \"inherit\" })\n if (child.error) {\n throw new PluginRegistryError({\n code: \"INSTALL_COMMAND_FAILED\",\n message: `Gagal menjalankan perintah install: ${command}`,\n context: {\n pluginName,\n command,\n reason: child.error.message,\n },\n })\n }\n\n if (child.status !== 0) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Install gagal (${child.status ?? 1}): ${command}`,\n context: {\n pluginName,\n command,\n exitCode: child.status ?? 1,\n },\n })\n }\n\n return {\n plugin: pluginName,\n installed: true,\n command,\n exitCode: 0,\n }\n }\n\n uninstall(\n pluginName: string,\n options: { dryRun?: boolean; npmBin?: string } = {}\n ): {\n plugin: string\n uninstalled: boolean\n command: string\n exitCode: number\n } {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n const command = `${npmBin} uninstall ${pluginName}`\n\n if (options.dryRun) {\n return { plugin: pluginName, uninstalled: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"uninstall\", pluginName], { stdio: \"inherit\" })\n if (child.status !== 0 && child.status !== null) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Uninstall gagal (${child.status}): ${command}`,\n context: { pluginName, command, exitCode: child.status },\n })\n }\n\n return {\n plugin: pluginName,\n uninstalled: true,\n command,\n exitCode: child.status ?? 0,\n }\n }\n\n verifyIntegrity(pluginName: string): { ok: boolean; reason?: string } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { ok: false, reason: `Plugin '${pluginName}' not in registry` }\n if (!plugin.integrity) {\n return { ok: true, reason: \"no checksum registered (skip)\" }\n }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { ok: false, reason: \"plugin not installed\" }\n const content = readFileSync(pkgPath, \"utf8\")\n const native = requireNative()\n const ok = native.pluginVerifyIntegrity(content, plugin.integrity!)\n return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` }\n } catch (e: unknown) {\n return {\n ok: false,\n reason: `Integrity check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkForUpdate(pluginName: string): {\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { hasUpdate: false, error: \"plugin not installed\" }\n const current = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n const latest = plugin.version\n const native = requireNative()\n const hasUpdate = native.pluginSemverHasUpdate(current as string, latest)\n return { hasUpdate, current: current as string, latest }\n } catch (e: unknown) {\n return {\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkAllUpdates(): Array<{\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }> {\n type UpdateResult = {\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }\n const native = requireNative()\n\n // FS I/O stays in JS — gather installed versions for every registry plugin.\n const installed: Array<{ name: string; version: string }> = []\n const byName = new Map<string, UpdateResult>()\n for (const p of this.plugins) {\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", p.name, \"package.json\")\n if (!existsSync(pkgPath)) {\n byName.set(p.name, { name: p.name, hasUpdate: false, error: \"plugin not installed\" })\n continue\n }\n const version = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n installed.push({ name: p.name, version: version as string })\n } catch (e: unknown) {\n byName.set(p.name, {\n name: p.name,\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n })\n }\n }\n\n // Single native batch call does all semver comparisons (1 FFI crossing, not N).\n const results = JSON.parse(\n native.pluginCheckAllUpdates(JSON.stringify(installed), JSON.stringify(this.plugins))\n ) as UpdateResult[]\n for (const r of results) byName.set(r.name, r)\n\n // Preserve registry order.\n return this.plugins.map((p) => byName.get(p.name)).filter((r): r is UpdateResult => r !== undefined)\n }\n}\n\nconst _state = { defaultRegistry: null as PluginRegistry | null }\n\nexport function getRegistry(): PluginRegistry {\n if (!_state.defaultRegistry) {\n const registryData = require(\"../registry.json\") as RegistryData\n _state.defaultRegistry = new PluginRegistry(registryData)\n }\n return _state.defaultRegistry\n}\n\nexport const registry = getRegistry()"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA,MACE,SAAW;AAAA,MACX,WAAa;AAAA,MACb,UAAY;AAAA,QACV;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,aAAa,UAAU,cAAc,WAAW;AAAA,UACzD,MAAQ;AAAA,UACR,SAAW;AAAA,UACX,WAAa;AAAA,QACf;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,cAAc,SAAS,YAAY,SAAS;AAAA,UACrD,MAAQ;AAAA,UACR,SAAW;AAAA,UACX,WAAa;AAAA,QACf;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,SAAS,UAAU,cAAc,YAAY,OAAO;AAAA,UAC7D,MAAQ;AAAA,UACR,SAAW;AAAA,UACX,WAAa;AAAA,QACf;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,qBAAqB,cAAc,QAAQ;AAAA,UACpD,MAAQ;AAAA,UACR,SAAW;AAAA,UACX,WAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,WAAa;AAAA,QACX;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,aAAa,WAAW;AAAA,UACjC,QAAU;AAAA,UACV,SAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,SAAW;AAAA,UACX,MAAQ,CAAC,SAAS,OAAO,WAAW;AAAA,UACpC,QAAU;AAAA,UACV,SAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3DA,SAAS,iBAAiB;AAC1B,SAAS,YAAY,oBAAoB;AACzC,SAAS,qBAAqB;AAC9B,SAAS,MAAM,eAAe;AAC9B,SAAS,qBAAqB;AAU9B,IAAI,UAAmD;AACvD,SAAS,YAAyC;AAChD,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI;AACF,UAAM,aAAa,OAAO,cAAc,YAAY,UAAU,SAAS,IACnE,YACA,OAAO,gBAAgB,eAAe,YAAY,MAChD,cAAc,IAAI,IAAI,KAAK,YAAY,GAAG,CAAC,IAC3C,QAAQ,IAAI;AAClB,UAAM,MAAM,cAAc,KAAK,YAAY,UAAU,CAAC;AACtD,UAAM,MAAM,GAAG,QAAQ,QAAQ,IAAI,QAAQ,IAAI;AAC/C,UAAM,SAAS,QAAQ,cAAc,kBAAkB,QAAQ,gBAAgB,oBAAoB;AACnG,UAAM,aAAa;AAAA;AAAA,MAEjB,QAAQ,YAAY,MAAM,UAAU,6BAA6B;AAAA,MACjE,QAAQ,YAAY,MAAM,UAAU,0BAA0B,GAAG,OAAO;AAAA,MACxE,QAAQ,YAAY,MAAM,UAAU,0BAA0B,MAAM,OAAO;AAAA,MAC3E,QAAQ,YAAY,MAAM,UAAU,6BAA6B;AAAA;AAAA,MAEjE,QAAQ,QAAQ,IAAI,GAAG,UAAU,6BAA6B;AAAA,MAC9D,QAAQ,QAAQ,IAAI,GAAG,UAAU,6BAA6B;AAAA;AAAA,MAE9D,QAAQ,YAAY,MAAM,MAAM,MAAM,MAAM,UAAU,6BAA6B;AAAA,MACnF,QAAQ,YAAY,MAAM,MAAM,MAAM,MAAM,UAAU,6BAA6B;AAAA;AAAA,MAEnF,QAAQ,YAAY,MAAM,MAAM,MAAM,UAAU,6BAA6B;AAAA,MAC7E,QAAQ,YAAY,MAAM,MAAM,MAAM,UAAU,6BAA6B;AAAA,IAC/E;AACA,eAAW,KAAK,YAAY;AAC1B,UAAI;AACF,cAAM,MAAM,IAAI,CAAC;AACjB,YAAI,OAAO,KAAK,iBAAiB,YAAY;AAC3C,iBAAQ,UAAU;AAAA,QACpB;AAAA,MACF,QAAQ;AAAA,MAAiB;AAAA,IAC3B;AAAA,EACF,QAAQ;AAAA,EAAe;AACvB,SAAQ,UAAU;AACpB;AAEA,IAAM,6BACJ;AAOF,SAAS,gBAAsC;AAC7C,QAAM,SAAS,UAAU;AACzB,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,0BAA0B;AACvD,SAAO;AACT;AAEA,IAAM,oBAAoB;AAyCnB,IAAM,sBAAN,cAAkC,MAAM;AAAA,EACpC;AAAA,EACA;AAAA,EAET,YAAY,SAAqC;AAC/C,UAAM,QAAQ,OAAO;AACrB,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAuC;AACrC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACF;AAaO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EACT;AAAA,EACA;AAAA,EAEjB,YAAY,cAA6B,UAA2B,CAAC,GAAG;AACtE,QAAI,QAAQ,aAAa;AACvB,WAAK,UAAU,CAAC;AAChB,WAAK,kBAAkB;AAAA,IACzB,OAAO;AACL,YAAM,OAAO;AACb,YAAM,UAAU,MAAM,WAAW;AACjC,YAAM,YAAY,MAAM,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QACrD,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,SAAS,KAAK;AAAA,QACd,MAAM,CAAC,GAAG,KAAK,IAAI;AAAA,QACnB,UAAU;AAAA,QACV,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,WAAW,KAAK;AAAA,MAClB,EAAE;AACF,YAAM,aAAa,MAAM,aAAa,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,QACvD,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,SAAS,KAAK;AAAA,QACd,MAAM,CAAC,GAAG,KAAK,IAAI;AAAA,QACnB,UAAU;AAAA,MACZ,EAAE;AACF,WAAK,UAAU,CAAC,GAAG,UAAU,GAAG,SAAS;AACzC,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,aAAa,YAAY,KAAsC;AAC7D,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG;AAChC,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,oBAAoB;AAAA,UAC5B,MAAM;AAAA,UACN,SAAS,6BAA6B,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,UAC5E,SAAS,EAAE,KAAK,QAAQ,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACH;AACA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,aAAO,IAAI,gBAAe,MAAM,EAAE,aAAa,IAAI,CAAC;AAAA,IACtD,SAAS,OAAO;AACd,UAAI,iBAAiB,oBAAqB,OAAM;AAChD,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAC3F,SAAS,EAAE,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,aAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,OAA6B;AAClC,UAAM,SAAS,cAAc;AAC7B,WAAO,KAAK,MAAM,OAAO,aAAa,KAAK,UAAU,KAAK,OAAO,GAAG,KAAK,CAAC;AAAA,EAC5E;AAAA,EAEA,SAAuB;AACrB,WAAO,CAAC,GAAG,KAAK,OAAO;AAAA,EACzB;AAAA,EAEA,UAAU,YAA4C;AACpD,UAAM,qBAAqB,WAAW,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACrE,WAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,kBAAkB;AAAA,EACzE;AAAA,EAEA,QAAQ,YAAoB,UAA0B,CAAC,GAAkB;AACvE,UAAM,SAAS,QAAQ,UAAU,QAAQ,IAAI,qBAAqB;AAElE,UAAM,SAAS,cAAc;AAC7B,UAAM,cAAc,OAAO,mBAAmB,UAAU;AAExD,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,6BAA6B,UAAU;AAAA,QAChD,SAAS;AAAA,UACP;AAAA,UACA,iBAAiB,OAAO,iBAAiB;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,cAAc,KAAK,UAAU,UAAU;AAC7C,UAAM,aAAa,CAAC;AAEpB,QAAI,cAAc,CAAC,QAAQ,eAAe;AACxC,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,WAAW,UAAU;AAAA,QAC9B,SAAS;AAAA,UACP;AAAA,UACA,eAAe;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,cAAc,QAAQ,iBAAiB,CAAC,QAAQ,iBAAiB;AACnE,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,qBAAqB,UAAU;AAAA,QACxC,SAAS;AAAA,UACP;AAAA,UACA,eAAe;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,UAAU,GAAG,MAAM,YAAY,UAAU;AAC/C,QAAI,QAAQ,QAAQ;AAClB,aAAO,EAAE,QAAQ,YAAY,WAAW,MAAM,SAAS,UAAU,EAAE;AAAA,IACrE;AAEA,UAAM,QAAQ,UAAU,QAAQ,CAAC,WAAW,UAAU,GAAG,EAAE,OAAO,UAAU,CAAC;AAC7E,QAAI,MAAM,OAAO;AACf,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,uCAAuC,OAAO;AAAA,QACvD,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA,QAAQ,MAAM,MAAM;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,MAAM,WAAW,GAAG;AACtB,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,kBAAkB,MAAM,UAAU,CAAC,MAAM,OAAO;AAAA,QACzD,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA,UAAU,MAAM,UAAU;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,UACE,YACA,UAAiD,CAAC,GAMlD;AACA,UAAM,SAAS,QAAQ,UAAU,QAAQ,IAAI,qBAAqB;AAClE,UAAM,UAAU,GAAG,MAAM,cAAc,UAAU;AAEjD,QAAI,QAAQ,QAAQ;AAClB,aAAO,EAAE,QAAQ,YAAY,aAAa,MAAM,SAAS,UAAU,EAAE;AAAA,IACvE;AAEA,UAAM,QAAQ,UAAU,QAAQ,CAAC,aAAa,UAAU,GAAG,EAAE,OAAO,UAAU,CAAC;AAC/E,QAAI,MAAM,WAAW,KAAK,MAAM,WAAW,MAAM;AAC/C,YAAM,IAAI,oBAAoB;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS,oBAAoB,MAAM,MAAM,MAAM,OAAO;AAAA,QACtD,SAAS,EAAE,YAAY,SAAS,UAAU,MAAM,OAAO;AAAA,MACzD,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb;AAAA,MACA,UAAU,MAAM,UAAU;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,gBAAgB,YAAsD;AACpE,UAAM,SAAS,KAAK,UAAU,UAAU;AACxC,QAAI,CAAC,OAAQ,QAAO,EAAE,IAAI,OAAO,QAAQ,WAAW,UAAU,oBAAoB;AAClF,QAAI,CAAC,OAAO,WAAW;AACrB,aAAO,EAAE,IAAI,MAAM,QAAQ,gCAAgC;AAAA,IAC7D;AACA,QAAI;AACF,YAAM,UAAU,KAAK,QAAQ,IAAI,GAAG,gBAAgB,YAAY,cAAc;AAC9E,UAAI,CAAC,WAAW,OAAO,EAAG,QAAO,EAAE,IAAI,OAAO,QAAQ,uBAAuB;AAC7E,YAAM,UAAU,aAAa,SAAS,MAAM;AAC5C,YAAM,SAAS,cAAc;AAC7B,YAAM,KAAK,OAAO,sBAAsB,SAAS,OAAO,SAAU;AAClE,aAAO,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,OAAO,QAAQ,gCAAgC,OAAO,SAAS,GAAG;AAAA,IACrG,SAAS,GAAY;AACnB,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,QAAQ,2BAA2B,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe,YAKb;AACA,UAAM,SAAS,KAAK,UAAU,UAAU;AACxC,QAAI,CAAC,OAAQ,QAAO,EAAE,WAAW,OAAO,OAAO,WAAW,UAAU,oBAAoB;AACxF,QAAI;AACF,YAAM,UAAU,KAAK,QAAQ,IAAI,GAAG,gBAAgB,YAAY,cAAc;AAC9E,UAAI,CAAC,WAAW,OAAO,EAAG,QAAO,EAAE,WAAW,OAAO,OAAO,uBAAuB;AACnF,YAAM,UAAU,KAAK,MAAM,aAAa,SAAS,MAAM,CAAC,EAAE,WAAW;AACrE,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,cAAc;AAC7B,YAAM,YAAY,OAAO,sBAAsB,SAAmB,MAAM;AACxE,aAAO,EAAE,WAAW,SAA4B,OAAO;AAAA,IACzD,SAAS,GAAY;AACnB,aAAO;AAAA,QACL,WAAW;AAAA,QACX,OAAO,wBAAwB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAMG;AAQD,UAAM,SAAS,cAAc;AAG7B,UAAM,YAAsD,CAAC;AAC7D,UAAM,SAAS,oBAAI,IAA0B;AAC7C,eAAW,KAAK,KAAK,SAAS;AAC5B,UAAI;AACF,cAAM,UAAU,KAAK,QAAQ,IAAI,GAAG,gBAAgB,EAAE,MAAM,cAAc;AAC1E,YAAI,CAAC,WAAW,OAAO,GAAG;AACxB,iBAAO,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,OAAO,OAAO,uBAAuB,CAAC;AACpF;AAAA,QACF;AACA,cAAM,UAAU,KAAK,MAAM,aAAa,SAAS,MAAM,CAAC,EAAE,WAAW;AACrE,kBAAU,KAAK,EAAE,MAAM,EAAE,MAAM,QAA2B,CAAC;AAAA,MAC7D,SAAS,GAAY;AACnB,eAAO,IAAI,EAAE,MAAM;AAAA,UACjB,MAAM,EAAE;AAAA,UACR,WAAW;AAAA,UACX,OAAO,wBAAwB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,QAC3E,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,UAAU,KAAK;AAAA,MACnB,OAAO,sBAAsB,KAAK,UAAU,SAAS,GAAG,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,IACtF;AACA,eAAW,KAAK,QAAS,QAAO,IAAI,EAAE,MAAM,CAAC;AAG7C,WAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,OAAO,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,MAAyB,MAAM,MAAS;AAAA,EACrG;AACF;AAEA,IAAM,SAAS,EAAE,iBAAiB,KAA8B;AAEzD,SAAS,cAA8B;AAC5C,MAAI,CAAC,OAAO,iBAAiB;AAC3B,UAAM,eAAe;AACrB,WAAO,kBAAkB,IAAI,eAAe,YAAY;AAAA,EAC1D;AACA,SAAO,OAAO;AAChB;AAEO,IAAM,WAAW,YAAY;","names":[]}
|
package/dist/plugin.d.mts
CHANGED
|
@@ -1,8 +1,168 @@
|
|
|
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';
|
|
3
1
|
import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
type TokenMap = Record<string, string>;
|
|
5
|
+
type CompoundCondition = Record<string, string | number | boolean>;
|
|
6
|
+
|
|
7
|
+
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
8
|
+
classProcessor: z.ZodOptional<z.ZodFunction<z.ZodTuple<readonly [z.ZodArray<z.ZodString>], null>, z.ZodObject<{
|
|
9
|
+
css: z.ZodString;
|
|
10
|
+
classes: z.ZodArray<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>>>;
|
|
12
|
+
tokens: z.ZodOptional<z.ZodType<Record<string, string | number | Record<string, unknown>>, unknown, z.core.$ZodTypeInternals<Record<string, string | number | Record<string, unknown>>, unknown>>>;
|
|
13
|
+
debug: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
minify: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>;
|
|
17
|
+
declare const PluginManifestSchema: z.ZodObject<{
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
setup: z.ZodFunction<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
type PluginManifestInput = z.infer<typeof PluginManifestSchema>;
|
|
22
|
+
declare const TransformRegistrationSchema: z.ZodFunction<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
23
|
+
declare const TokenRegistrationSchema: z.ZodObject<{
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
value: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>;
|
|
28
|
+
declare const parseTwPluginOptions: (options: unknown) => {
|
|
29
|
+
classProcessor?: z.core.$InferOuterFunctionType<z.ZodTuple<readonly [z.ZodArray<z.ZodString>], null>, z.ZodObject<{
|
|
30
|
+
css: z.ZodString;
|
|
31
|
+
classes: z.ZodArray<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>> | undefined;
|
|
33
|
+
tokens?: Record<string, string | number | Record<string, unknown>> | undefined;
|
|
34
|
+
debug?: boolean | undefined;
|
|
35
|
+
minify?: boolean | undefined;
|
|
36
|
+
};
|
|
37
|
+
declare const parsePluginManifest: (plugin: unknown) => {
|
|
38
|
+
name: string;
|
|
39
|
+
setup: z.core.$InferOuterFunctionType<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
40
|
+
};
|
|
41
|
+
declare const parseTokenRegistration: (data: unknown) => {
|
|
42
|
+
name: string;
|
|
43
|
+
value: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
interface TwClassResult {
|
|
47
|
+
css: string;
|
|
48
|
+
classes: string[];
|
|
49
|
+
}
|
|
50
|
+
interface DesignTokens {
|
|
51
|
+
[key: string]: string | number | DesignTokens;
|
|
52
|
+
}
|
|
53
|
+
interface TwPluginOptions {
|
|
54
|
+
classProcessor?: (classes: string[]) => TwClassResult;
|
|
55
|
+
tokens?: DesignTokens;
|
|
56
|
+
debug?: boolean;
|
|
57
|
+
minify?: boolean;
|
|
58
|
+
}
|
|
59
|
+
type VariantResolver = (selector: string) => string;
|
|
60
|
+
interface UtilityDefinition {
|
|
61
|
+
[property: string]: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ComponentConfig {
|
|
65
|
+
base: string;
|
|
66
|
+
variants: Record<string, Record<string, string>>;
|
|
67
|
+
compoundVariants: Array<{
|
|
68
|
+
class: string;
|
|
69
|
+
} & CompoundCondition>;
|
|
70
|
+
defaultVariants: Record<string, string>;
|
|
71
|
+
}
|
|
72
|
+
interface TransformMeta {
|
|
73
|
+
componentName: string;
|
|
74
|
+
tag: string;
|
|
75
|
+
}
|
|
76
|
+
type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
|
|
77
|
+
type CssHook = (css: string) => string;
|
|
78
|
+
interface TwContext {
|
|
79
|
+
addVariant(name: string, resolver: VariantResolver): void;
|
|
80
|
+
addUtility(name: string, styles: UtilityDefinition): void;
|
|
81
|
+
addToken(name: string, value: string): void;
|
|
82
|
+
addTransform(fn: TransformFn): void;
|
|
83
|
+
onGenerateCSS(hook: CssHook): void;
|
|
84
|
+
onBuildEnd(hook: () => void | Promise<void>): void;
|
|
85
|
+
getToken(name: string): string | undefined;
|
|
86
|
+
subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
|
|
87
|
+
readonly config: Record<string, unknown>;
|
|
88
|
+
}
|
|
89
|
+
interface TwPlugin {
|
|
90
|
+
name: string;
|
|
91
|
+
setup(ctx: TwContext): void;
|
|
92
|
+
}
|
|
93
|
+
interface PluginRegistry {
|
|
94
|
+
variants: Map<string, VariantResolver>;
|
|
95
|
+
utilities: Map<string, UtilityDefinition>;
|
|
96
|
+
tokens: Map<string, string>;
|
|
97
|
+
transforms: TransformFn[];
|
|
98
|
+
cssHooks: CssHook[];
|
|
99
|
+
buildHooks: Array<() => void | Promise<void>>;
|
|
100
|
+
plugins: Set<string>;
|
|
101
|
+
}
|
|
102
|
+
interface TokenEngineAPI {
|
|
103
|
+
getToken?: (name: string) => string | undefined;
|
|
104
|
+
getTokens?: () => Record<string, string> | undefined;
|
|
105
|
+
subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
106
|
+
subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
107
|
+
}
|
|
108
|
+
declare function resolveTokenEngine(): TokenEngineAPI | undefined;
|
|
109
|
+
declare function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined;
|
|
110
|
+
interface TransformContext {
|
|
111
|
+
filename?: string;
|
|
112
|
+
componentName?: string;
|
|
113
|
+
tag?: string;
|
|
114
|
+
}
|
|
115
|
+
interface TwGlobalRegistry {
|
|
116
|
+
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
117
|
+
tokens: Record<string, string>;
|
|
118
|
+
variants: Map<string, VariantResolver>;
|
|
119
|
+
}
|
|
120
|
+
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
121
|
+
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
122
|
+
declare function registerToken(name: string, value: string): void;
|
|
123
|
+
declare function createPluginRegistry(): PluginRegistry;
|
|
124
|
+
declare function resetGlobalRegistry(): void;
|
|
125
|
+
declare function createPluginContext(registry: PluginRegistry, config?: Record<string, unknown>): TwContext;
|
|
126
|
+
declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
127
|
+
registry: {
|
|
128
|
+
plugins: Set<string>;
|
|
129
|
+
variants: Map<string, VariantResolver>;
|
|
130
|
+
utilities: Map<string, UtilityDefinition>;
|
|
131
|
+
tokens: Map<string, string>;
|
|
132
|
+
};
|
|
133
|
+
use: (plugin: TwPlugin) => void;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
137
|
+
* Used by createTwPlugin() in the plugin package.
|
|
138
|
+
*/
|
|
139
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
140
|
+
declare function use(plugin: TwPlugin): void;
|
|
141
|
+
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
142
|
+
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
143
|
+
declare function presetScrollbar(): TwPlugin;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Plugin hooks for tailwind-styled-v4
|
|
147
|
+
*
|
|
148
|
+
* Hooks allow plugins to intercept and modify the CSS generation pipeline.
|
|
149
|
+
*/
|
|
150
|
+
interface PluginHookContext {
|
|
151
|
+
source: string;
|
|
152
|
+
filename: string;
|
|
153
|
+
extractedConfigs?: unknown[];
|
|
154
|
+
cssOutput?: string;
|
|
155
|
+
}
|
|
156
|
+
type PluginHook = (ctx: PluginHookContext) => PluginHookContext | Promise<PluginHookContext>;
|
|
157
|
+
interface PluginHooks {
|
|
158
|
+
beforeExtract?: PluginHook;
|
|
159
|
+
afterExtract?: PluginHook;
|
|
160
|
+
beforeGenerate?: PluginHook;
|
|
161
|
+
afterGenerate?: PluginHook;
|
|
162
|
+
}
|
|
163
|
+
declare function registerPluginHooks(hooks: PluginHooks): void;
|
|
164
|
+
declare function getPluginHooks(): PluginHooks;
|
|
165
|
+
declare function applyHooks(hookName: keyof PluginHooks, ctx: PluginHookContext): Promise<PluginHookContext>;
|
|
6
166
|
|
|
7
167
|
interface TwVitePlugin extends TwContext {
|
|
8
168
|
resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
|
|
@@ -11,4 +171,4 @@ interface TwVitePlugin extends TwContext {
|
|
|
11
171
|
}
|
|
12
172
|
declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
|
|
13
173
|
|
|
14
|
-
export { TwContext, TwPluginOptions, type TwVitePlugin, createTwPlugin };
|
|
174
|
+
export { type ComponentConfig, type CompoundCondition, type CssHook, type DesignTokens, type PluginHook, type PluginHookContext, type PluginHooks, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, type 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 TwVitePlugin, type UtilityDefinition, type VariantResolver, applyHooks, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, createTwPlugin, getGlobalRegistry, getPluginHooks, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerPluginHooks, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,8 +1,168 @@
|
|
|
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';
|
|
3
1
|
import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
type TokenMap = Record<string, string>;
|
|
5
|
+
type CompoundCondition = Record<string, string | number | boolean>;
|
|
6
|
+
|
|
7
|
+
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
8
|
+
classProcessor: z.ZodOptional<z.ZodFunction<z.ZodTuple<readonly [z.ZodArray<z.ZodString>], null>, z.ZodObject<{
|
|
9
|
+
css: z.ZodString;
|
|
10
|
+
classes: z.ZodArray<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>>>;
|
|
12
|
+
tokens: z.ZodOptional<z.ZodType<Record<string, string | number | Record<string, unknown>>, unknown, z.core.$ZodTypeInternals<Record<string, string | number | Record<string, unknown>>, unknown>>>;
|
|
13
|
+
debug: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
minify: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>;
|
|
17
|
+
declare const PluginManifestSchema: z.ZodObject<{
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
setup: z.ZodFunction<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
type PluginManifestInput = z.infer<typeof PluginManifestSchema>;
|
|
22
|
+
declare const TransformRegistrationSchema: z.ZodFunction<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
23
|
+
declare const TokenRegistrationSchema: z.ZodObject<{
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
value: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>;
|
|
28
|
+
declare const parseTwPluginOptions: (options: unknown) => {
|
|
29
|
+
classProcessor?: z.core.$InferOuterFunctionType<z.ZodTuple<readonly [z.ZodArray<z.ZodString>], null>, z.ZodObject<{
|
|
30
|
+
css: z.ZodString;
|
|
31
|
+
classes: z.ZodArray<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>> | undefined;
|
|
33
|
+
tokens?: Record<string, string | number | Record<string, unknown>> | undefined;
|
|
34
|
+
debug?: boolean | undefined;
|
|
35
|
+
minify?: boolean | undefined;
|
|
36
|
+
};
|
|
37
|
+
declare const parsePluginManifest: (plugin: unknown) => {
|
|
38
|
+
name: string;
|
|
39
|
+
setup: z.core.$InferOuterFunctionType<z.ZodTuple<readonly [z.ZodUnknown], null>, z.ZodUnknown>;
|
|
40
|
+
};
|
|
41
|
+
declare const parseTokenRegistration: (data: unknown) => {
|
|
42
|
+
name: string;
|
|
43
|
+
value: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
interface TwClassResult {
|
|
47
|
+
css: string;
|
|
48
|
+
classes: string[];
|
|
49
|
+
}
|
|
50
|
+
interface DesignTokens {
|
|
51
|
+
[key: string]: string | number | DesignTokens;
|
|
52
|
+
}
|
|
53
|
+
interface TwPluginOptions {
|
|
54
|
+
classProcessor?: (classes: string[]) => TwClassResult;
|
|
55
|
+
tokens?: DesignTokens;
|
|
56
|
+
debug?: boolean;
|
|
57
|
+
minify?: boolean;
|
|
58
|
+
}
|
|
59
|
+
type VariantResolver = (selector: string) => string;
|
|
60
|
+
interface UtilityDefinition {
|
|
61
|
+
[property: string]: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ComponentConfig {
|
|
65
|
+
base: string;
|
|
66
|
+
variants: Record<string, Record<string, string>>;
|
|
67
|
+
compoundVariants: Array<{
|
|
68
|
+
class: string;
|
|
69
|
+
} & CompoundCondition>;
|
|
70
|
+
defaultVariants: Record<string, string>;
|
|
71
|
+
}
|
|
72
|
+
interface TransformMeta {
|
|
73
|
+
componentName: string;
|
|
74
|
+
tag: string;
|
|
75
|
+
}
|
|
76
|
+
type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
|
|
77
|
+
type CssHook = (css: string) => string;
|
|
78
|
+
interface TwContext {
|
|
79
|
+
addVariant(name: string, resolver: VariantResolver): void;
|
|
80
|
+
addUtility(name: string, styles: UtilityDefinition): void;
|
|
81
|
+
addToken(name: string, value: string): void;
|
|
82
|
+
addTransform(fn: TransformFn): void;
|
|
83
|
+
onGenerateCSS(hook: CssHook): void;
|
|
84
|
+
onBuildEnd(hook: () => void | Promise<void>): void;
|
|
85
|
+
getToken(name: string): string | undefined;
|
|
86
|
+
subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
|
|
87
|
+
readonly config: Record<string, unknown>;
|
|
88
|
+
}
|
|
89
|
+
interface TwPlugin {
|
|
90
|
+
name: string;
|
|
91
|
+
setup(ctx: TwContext): void;
|
|
92
|
+
}
|
|
93
|
+
interface PluginRegistry {
|
|
94
|
+
variants: Map<string, VariantResolver>;
|
|
95
|
+
utilities: Map<string, UtilityDefinition>;
|
|
96
|
+
tokens: Map<string, string>;
|
|
97
|
+
transforms: TransformFn[];
|
|
98
|
+
cssHooks: CssHook[];
|
|
99
|
+
buildHooks: Array<() => void | Promise<void>>;
|
|
100
|
+
plugins: Set<string>;
|
|
101
|
+
}
|
|
102
|
+
interface TokenEngineAPI {
|
|
103
|
+
getToken?: (name: string) => string | undefined;
|
|
104
|
+
getTokens?: () => Record<string, string> | undefined;
|
|
105
|
+
subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
106
|
+
subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void;
|
|
107
|
+
}
|
|
108
|
+
declare function resolveTokenEngine(): TokenEngineAPI | undefined;
|
|
109
|
+
declare function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined;
|
|
110
|
+
interface TransformContext {
|
|
111
|
+
filename?: string;
|
|
112
|
+
componentName?: string;
|
|
113
|
+
tag?: string;
|
|
114
|
+
}
|
|
115
|
+
interface TwGlobalRegistry {
|
|
116
|
+
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
117
|
+
tokens: Record<string, string>;
|
|
118
|
+
variants: Map<string, VariantResolver>;
|
|
119
|
+
}
|
|
120
|
+
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
121
|
+
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
122
|
+
declare function registerToken(name: string, value: string): void;
|
|
123
|
+
declare function createPluginRegistry(): PluginRegistry;
|
|
124
|
+
declare function resetGlobalRegistry(): void;
|
|
125
|
+
declare function createPluginContext(registry: PluginRegistry, config?: Record<string, unknown>): TwContext;
|
|
126
|
+
declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
127
|
+
registry: {
|
|
128
|
+
plugins: Set<string>;
|
|
129
|
+
variants: Map<string, VariantResolver>;
|
|
130
|
+
utilities: Map<string, UtilityDefinition>;
|
|
131
|
+
tokens: Map<string, string>;
|
|
132
|
+
};
|
|
133
|
+
use: (plugin: TwPlugin) => void;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
137
|
+
* Used by createTwPlugin() in the plugin package.
|
|
138
|
+
*/
|
|
139
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
140
|
+
declare function use(plugin: TwPlugin): void;
|
|
141
|
+
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
142
|
+
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
143
|
+
declare function presetScrollbar(): TwPlugin;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Plugin hooks for tailwind-styled-v4
|
|
147
|
+
*
|
|
148
|
+
* Hooks allow plugins to intercept and modify the CSS generation pipeline.
|
|
149
|
+
*/
|
|
150
|
+
interface PluginHookContext {
|
|
151
|
+
source: string;
|
|
152
|
+
filename: string;
|
|
153
|
+
extractedConfigs?: unknown[];
|
|
154
|
+
cssOutput?: string;
|
|
155
|
+
}
|
|
156
|
+
type PluginHook = (ctx: PluginHookContext) => PluginHookContext | Promise<PluginHookContext>;
|
|
157
|
+
interface PluginHooks {
|
|
158
|
+
beforeExtract?: PluginHook;
|
|
159
|
+
afterExtract?: PluginHook;
|
|
160
|
+
beforeGenerate?: PluginHook;
|
|
161
|
+
afterGenerate?: PluginHook;
|
|
162
|
+
}
|
|
163
|
+
declare function registerPluginHooks(hooks: PluginHooks): void;
|
|
164
|
+
declare function getPluginHooks(): PluginHooks;
|
|
165
|
+
declare function applyHooks(hookName: keyof PluginHooks, ctx: PluginHookContext): Promise<PluginHookContext>;
|
|
6
166
|
|
|
7
167
|
interface TwVitePlugin extends TwContext {
|
|
8
168
|
resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
|
|
@@ -11,4 +171,4 @@ interface TwVitePlugin extends TwContext {
|
|
|
11
171
|
}
|
|
12
172
|
declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
|
|
13
173
|
|
|
14
|
-
export { TwContext, TwPluginOptions, type TwVitePlugin, createTwPlugin };
|
|
174
|
+
export { type ComponentConfig, type CompoundCondition, type CssHook, type DesignTokens, type PluginHook, type PluginHookContext, type PluginHooks, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, type 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 TwVitePlugin, type UtilityDefinition, type VariantResolver, applyHooks, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, createTwPlugin, getGlobalRegistry, getPluginHooks, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerPluginHooks, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|