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
package/dist/testing.js
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/umbrella/testing.ts
|
|
22
|
+
var testing_exports = {};
|
|
23
|
+
__export(testing_exports, {
|
|
24
|
+
expandVariantMatrix: () => expandVariantMatrix,
|
|
25
|
+
expectClasses: () => expectClasses,
|
|
26
|
+
expectClassesEqual: () => expectClassesEqual,
|
|
27
|
+
expectEngineMetrics: () => expectEngineMetrics,
|
|
28
|
+
expectNoClasses: () => expectNoClasses,
|
|
29
|
+
getClassList: () => getClassList,
|
|
30
|
+
snapshotVariants: () => snapshotVariants,
|
|
31
|
+
tailwindMatchers: () => tailwindMatchers,
|
|
32
|
+
tailwindMatchersWithMetrics: () => tailwindMatchersWithMetrics,
|
|
33
|
+
testAllVariants: () => testAllVariants,
|
|
34
|
+
toHaveClass: () => toHaveClass,
|
|
35
|
+
toHaveClasses: () => toHaveClasses,
|
|
36
|
+
toHaveEngineMetrics: () => toHaveEngineMetrics,
|
|
37
|
+
toNotHaveClass: () => toNotHaveClass
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(testing_exports);
|
|
4
40
|
|
|
5
41
|
// packages/domain/testing/src/index.ts
|
|
6
42
|
function toHaveClass(className) {
|
|
@@ -162,20 +198,21 @@ var tailwindMatchersWithMetrics = {
|
|
|
162
198
|
toNotHaveClass,
|
|
163
199
|
toHaveEngineMetrics
|
|
164
200
|
};
|
|
165
|
-
|
|
166
|
-
exports
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
201
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
202
|
+
0 && (module.exports = {
|
|
203
|
+
expandVariantMatrix,
|
|
204
|
+
expectClasses,
|
|
205
|
+
expectClassesEqual,
|
|
206
|
+
expectEngineMetrics,
|
|
207
|
+
expectNoClasses,
|
|
208
|
+
getClassList,
|
|
209
|
+
snapshotVariants,
|
|
210
|
+
tailwindMatchers,
|
|
211
|
+
tailwindMatchersWithMetrics,
|
|
212
|
+
testAllVariants,
|
|
213
|
+
toHaveClass,
|
|
214
|
+
toHaveClasses,
|
|
215
|
+
toHaveEngineMetrics,
|
|
216
|
+
toNotHaveClass
|
|
217
|
+
});
|
|
181
218
|
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/testing/src/index.ts"],"names":[],"mappings":"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","file":"testing.js","sourcesContent":["/**\n * tailwind-styled-v4 — Testing Utilities\n *\n * Integrasi dengan Jest / Vitest untuk test komponen tw().\n *\n * @example\n * // vitest.config.ts\n * import { tailwindStyledSetup } from '@tailwind-styled/testing'\n * export default defineConfig({ test: { setupFiles: ['@tailwind-styled/testing/setup'] } })\n *\n * // Button.test.ts\n * import { render } from '@testing-library/react'\n * import { expectClasses, getVariantClass } from '@tailwind-styled/testing'\n *\n * test('Button renders primary variant', () => {\n * const { container } = render(<Button intent=\"primary\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white'])\n * })\n */\n\n// ─── Jest/Vitest custom matchers ─────────────────────────────────────────────\n\n/**\n * Custom matcher: toHaveClass\n * Dipakai langsung atau via expect.extend(tailwindMatchers)\n *\n * @example\n * expect(element).toHaveClass('bg-blue-500')\n */\nexport function toHaveClass(className: string) {\n return (value: { classList?: { contains: (name: string) => boolean } }) => {\n const pass = Boolean(value?.classList?.contains(className))\n return {\n pass,\n message: () => `expected element ${pass ? \"not \" : \"\"}to contain class '${className}'`,\n }\n }\n}\n\n/**\n * Custom matcher: toHaveClasses\n * Cek beberapa class sekaligus\n *\n * @example\n * expect(element).toHaveClasses(['px-4', 'py-2', 'rounded'])\n */\nexport function toHaveClasses(classNames: string[]) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const missing = classNames.filter((c) => !value.classList.contains(c))\n const pass = missing.length === 0\n return {\n pass,\n message: () =>\n pass\n ? `expected element not to have all classes: ${classNames.join(\", \")}`\n : `expected element to have classes: ${missing.join(\", \")}`,\n }\n }\n}\n\n/**\n * Custom matcher: toNotHaveClass\n *\n * @example\n * expect(element).toNotHaveClass('hidden')\n */\nexport function toNotHaveClass(className: string) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const pass = !value.classList.contains(className)\n return {\n pass,\n message: () => `expected element ${pass ? \"\" : \"not \"}to have class '${className}'`,\n }\n }\n}\n\n/** Semua matchers — pakai dengan expect.extend(tailwindMatchers) */\nexport const tailwindMatchers = { toHaveClass, toHaveClasses, toNotHaveClass }\n\n// ─── Helper utilities ────────────────────────────────────────────────────────\n\n/**\n * Assert element punya semua class yang diharapkan.\n * Lebih ergonomis dari `expect(el).toHaveClasses([...])` untuk banyak class.\n *\n * @example\n * const { container } = render(<Button intent=\"primary\" size=\"lg\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white', 'h-12'])\n */\nexport function expectClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectClasses: element is null or undefined\")\n const missing = classes.filter((c) => !element.classList.contains(c))\n if (missing.length > 0) {\n throw new Error(\n `Expected element to have classes: ${missing.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Assert element tidak punya class tertentu.\n *\n * @example\n * expectNoClasses(container.firstChild, ['opacity-50', 'cursor-not-allowed'])\n */\nexport function expectNoClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectNoClasses: element is null or undefined\")\n const found = classes.filter((c) => element.classList.contains(c))\n if (found.length > 0) {\n throw new Error(\n `Expected element NOT to have classes: ${found.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Extract class list dari element sebagai sorted array.\n * Berguna untuk snapshot testing.\n *\n * @example\n * expect(getClassList(element)).toMatchSnapshot()\n */\nexport function getClassList(element: Element | null | undefined): string[] {\n if (!element) return []\n // classList mungkin tidak iterable di test environment (mock object)\n // Fallback ke parsing className string jika Array.from gagal atau hasilkan []\n try {\n const list = Array.from(element.classList)\n if (list.length > 0) return list.sort()\n } catch {}\n // Fallback: parse dari className string\n if (element.className && typeof element.className === \"string\") {\n return element.className.trim().split(/\\s+/).filter(Boolean).sort()\n }\n return []\n}\n\n// ─── Variant snapshot helpers ────────────────────────────────────────────────\n\n/**\n * Buat snapshot dari semua kombinasi variant.\n * Berguna untuk regression testing pada styled components.\n *\n * @example\n * const buttonVariants = snapshotVariants(\n * (props) => {\n * const { container } = render(<Button {...props} />)\n * return container.firstChild?.className ?? ''\n * },\n * [\n * { intent: 'primary', size: 'sm' },\n * { intent: 'primary', size: 'lg' },\n * { intent: 'danger', size: 'sm' },\n * ]\n * )\n * expect(buttonVariants).toMatchSnapshot()\n */\nexport function snapshotVariants<T>(render: (variant: T) => string, variants: T[]) {\n return variants.map((variant) => ({\n variant,\n output: render(variant),\n }))\n}\n\n/**\n * Generate semua kombinasi dari variant matrix.\n *\n * @example\n * const combinations = expandVariantMatrix({\n * intent: ['primary', 'danger'],\n * size: ['sm', 'md', 'lg'],\n * disabled: [true, false],\n * })\n * // → 2 × 3 × 2 = 12 kombinasi\n */\nexport function expandVariantMatrix(\n matrix: Record<string, Array<string | number | boolean>>\n): Array<Record<string, string | number | boolean>> {\n const keys = Object.keys(matrix)\n if (keys.length === 0) return [{}]\n\n const result: Array<Record<string, string | number | boolean>> = []\n\n function walk(index: number, current: Record<string, string | number | boolean>) {\n if (index >= keys.length) {\n result.push({ ...current })\n return\n }\n const key = keys[index]!\n for (const value of matrix[key] ?? []) {\n current[key] = value\n walk(index + 1, current)\n }\n }\n\n walk(0, {})\n return result\n}\n\n/**\n * Test semua kombinasi variant sekaligus — no missing coverage.\n *\n * @example\n * testAllVariants(\n * Button,\n * { intent: ['primary','danger'], size: ['sm','lg'] },\n * (el, variant) => {\n * expect(el).not.toBeNull()\n * if (variant.intent === 'primary') expectClasses(el, ['bg-blue-500'])\n * }\n * )\n */\nexport function testAllVariants(\n matrix: Record<string, Array<string | number | boolean>>,\n testFn: (variant: Record<string, string | number | boolean>) => void\n): void {\n const combinations = expandVariantMatrix(matrix)\n for (const variant of combinations) {\n testFn(variant)\n }\n}\n\n// ─── CSS-in-JS output assertions ─────────────────────────────────────────────\n\n/**\n * Bandingkan dua class string secara semantik (urutan tidak penting).\n *\n * @example\n * expectClassesEqual('px-4 py-2 bg-blue-500', 'bg-blue-500 px-4 py-2') // pass\n */\nexport function expectClassesEqual(actual: string, expected: string): void {\n const actualSet = new Set(actual.trim().split(/\\s+/).filter(Boolean))\n const expectedSet = new Set(expected.trim().split(/\\s+/).filter(Boolean))\n\n const missing = [...expectedSet].filter((c) => !actualSet.has(c))\n const extra = [...actualSet].filter((c) => !expectedSet.has(c))\n\n if (missing.length > 0 || extra.length > 0) {\n const parts: string[] = []\n if (missing.length > 0) parts.push(`Missing: ${missing.join(\", \")}`)\n if (extra.length > 0) parts.push(`Extra: ${extra.join(\", \")}`)\n throw new Error(`Class mismatch:\\n ${parts.join(\"\\n \")}`)\n }\n}\n\n// ─── Engine metrics matchers ──────────────────────────────────────────────────\n\nexport interface EngineMetricsSnapshot {\n totalFiles?: number\n uniqueClasses?: number\n buildTimeMs?: number\n cssBytes?: number\n cacheHits?: number\n cacheMisses?: number\n incrementalRuns?: number\n fullRescans?: number\n}\n\n/**\n * Assert engine metrics snapshot meets minimum thresholds.\n *\n * @example\n * const result = await engine.build()\n * expectEngineMetrics(metrics.snapshot(), {\n * totalFiles: 10,\n * buildTimeMs: 5000, // max\n * })\n */\nexport function expectEngineMetrics(\n metrics: EngineMetricsSnapshot,\n expectations: {\n minFiles?: number\n maxBuildTimeMs?: number\n minUniqueClasses?: number\n cacheHitRateMin?: number // 0–1\n }\n): void {\n if (expectations.minFiles !== undefined) {\n const actual = metrics.totalFiles ?? 0\n if (actual < expectations.minFiles) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minFiles} files, got ${actual}`\n )\n }\n }\n\n if (expectations.maxBuildTimeMs !== undefined) {\n const actual = metrics.buildTimeMs ?? 0\n if (actual > expectations.maxBuildTimeMs) {\n throw new Error(\n `Engine metrics: build took ${actual}ms, expected ≤ ${expectations.maxBuildTimeMs}ms`\n )\n }\n }\n\n if (expectations.minUniqueClasses !== undefined) {\n const actual = metrics.uniqueClasses ?? 0\n if (actual < expectations.minUniqueClasses) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minUniqueClasses} unique classes, got ${actual}`\n )\n }\n }\n\n if (expectations.cacheHitRateMin !== undefined) {\n const hits = metrics.cacheHits ?? 0\n const total = hits + (metrics.cacheMisses ?? 0)\n const rate = total > 0 ? hits / total : 0\n if (rate < expectations.cacheHitRateMin) {\n throw new Error(\n `Engine metrics: cache hit rate ${(rate * 100).toFixed(1)}%, expected ≥ ${(expectations.cacheHitRateMin * 100).toFixed(1)}%`\n )\n }\n }\n}\n\n/**\n * Custom Jest/Vitest matcher: toHaveEngineMetrics\n *\n * @example\n * expect(metrics).toHaveEngineMetrics({ minFiles: 1 })\n */\nexport function toHaveEngineMetrics(expectations: Parameters<typeof expectEngineMetrics>[1]) {\n return (metrics: EngineMetricsSnapshot) => {\n try {\n expectEngineMetrics(metrics, expectations)\n return { pass: true, message: () => \"engine metrics matched expectations\" }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e)\n return { pass: false, message: () => msg }\n }\n }\n}\n\n/** All matchers including engine metrics */\nexport const tailwindMatchersWithMetrics = {\n toHaveClass,\n toHaveClasses,\n toNotHaveClass,\n toHaveEngineMetrics,\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/umbrella/testing.ts","../packages/domain/testing/src/index.ts"],"sourcesContent":["export * from \"@tailwind-styled/testing\"\n","/**\n * tailwind-styled-v4 — Testing Utilities\n *\n * Integrasi dengan Jest / Vitest untuk test komponen tw().\n *\n * @example\n * // vitest.config.ts\n * import { tailwindStyledSetup } from '@tailwind-styled/testing'\n * export default defineConfig({ test: { setupFiles: ['@tailwind-styled/testing/setup'] } })\n *\n * // Button.test.ts\n * import { render } from '@testing-library/react'\n * import { expectClasses, getVariantClass } from '@tailwind-styled/testing'\n *\n * test('Button renders primary variant', () => {\n * const { container } = render(<Button intent=\"primary\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white'])\n * })\n */\n\n// ─── Jest/Vitest custom matchers ─────────────────────────────────────────────\n\n/**\n * Custom matcher: toHaveClass\n * Dipakai langsung atau via expect.extend(tailwindMatchers)\n *\n * @example\n * expect(element).toHaveClass('bg-blue-500')\n */\nexport function toHaveClass(className: string) {\n return (value: { classList?: { contains: (name: string) => boolean } }) => {\n const pass = Boolean(value?.classList?.contains(className))\n return {\n pass,\n message: () => `expected element ${pass ? \"not \" : \"\"}to contain class '${className}'`,\n }\n }\n}\n\n/**\n * Custom matcher: toHaveClasses\n * Cek beberapa class sekaligus\n *\n * @example\n * expect(element).toHaveClasses(['px-4', 'py-2', 'rounded'])\n */\nexport function toHaveClasses(classNames: string[]) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const missing = classNames.filter((c) => !value.classList.contains(c))\n const pass = missing.length === 0\n return {\n pass,\n message: () =>\n pass\n ? `expected element not to have all classes: ${classNames.join(\", \")}`\n : `expected element to have classes: ${missing.join(\", \")}`,\n }\n }\n}\n\n/**\n * Custom matcher: toNotHaveClass\n *\n * @example\n * expect(element).toNotHaveClass('hidden')\n */\nexport function toNotHaveClass(className: string) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const pass = !value.classList.contains(className)\n return {\n pass,\n message: () => `expected element ${pass ? \"\" : \"not \"}to have class '${className}'`,\n }\n }\n}\n\n/** Semua matchers — pakai dengan expect.extend(tailwindMatchers) */\nexport const tailwindMatchers = { toHaveClass, toHaveClasses, toNotHaveClass }\n\n// ─── Helper utilities ────────────────────────────────────────────────────────\n\n/**\n * Assert element punya semua class yang diharapkan.\n * Lebih ergonomis dari `expect(el).toHaveClasses([...])` untuk banyak class.\n *\n * @example\n * const { container } = render(<Button intent=\"primary\" size=\"lg\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white', 'h-12'])\n */\nexport function expectClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectClasses: element is null or undefined\")\n const missing = classes.filter((c) => !element.classList.contains(c))\n if (missing.length > 0) {\n throw new Error(\n `Expected element to have classes: ${missing.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Assert element tidak punya class tertentu.\n *\n * @example\n * expectNoClasses(container.firstChild, ['opacity-50', 'cursor-not-allowed'])\n */\nexport function expectNoClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectNoClasses: element is null or undefined\")\n const found = classes.filter((c) => element.classList.contains(c))\n if (found.length > 0) {\n throw new Error(\n `Expected element NOT to have classes: ${found.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Extract class list dari element sebagai sorted array.\n * Berguna untuk snapshot testing.\n *\n * @example\n * expect(getClassList(element)).toMatchSnapshot()\n */\nexport function getClassList(element: Element | null | undefined): string[] {\n if (!element) return []\n // classList mungkin tidak iterable di test environment (mock object)\n // Fallback ke parsing className string jika Array.from gagal atau hasilkan []\n try {\n const list = Array.from(element.classList)\n if (list.length > 0) return list.sort()\n } catch {}\n // Fallback: parse dari className string\n if (element.className && typeof element.className === \"string\") {\n return element.className.trim().split(/\\s+/).filter(Boolean).sort()\n }\n return []\n}\n\n// ─── Variant snapshot helpers ────────────────────────────────────────────────\n\n/**\n * Buat snapshot dari semua kombinasi variant.\n * Berguna untuk regression testing pada styled components.\n *\n * @example\n * const buttonVariants = snapshotVariants(\n * (props) => {\n * const { container } = render(<Button {...props} />)\n * return container.firstChild?.className ?? ''\n * },\n * [\n * { intent: 'primary', size: 'sm' },\n * { intent: 'primary', size: 'lg' },\n * { intent: 'danger', size: 'sm' },\n * ]\n * )\n * expect(buttonVariants).toMatchSnapshot()\n */\nexport function snapshotVariants<T>(render: (variant: T) => string, variants: T[]) {\n return variants.map((variant) => ({\n variant,\n output: render(variant),\n }))\n}\n\n/**\n * Generate semua kombinasi dari variant matrix.\n *\n * @example\n * const combinations = expandVariantMatrix({\n * intent: ['primary', 'danger'],\n * size: ['sm', 'md', 'lg'],\n * disabled: [true, false],\n * })\n * // → 2 × 3 × 2 = 12 kombinasi\n */\nexport function expandVariantMatrix(\n matrix: Record<string, Array<string | number | boolean>>\n): Array<Record<string, string | number | boolean>> {\n const keys = Object.keys(matrix)\n if (keys.length === 0) return [{}]\n\n const result: Array<Record<string, string | number | boolean>> = []\n\n function walk(index: number, current: Record<string, string | number | boolean>) {\n if (index >= keys.length) {\n result.push({ ...current })\n return\n }\n const key = keys[index]!\n for (const value of matrix[key] ?? []) {\n current[key] = value\n walk(index + 1, current)\n }\n }\n\n walk(0, {})\n return result\n}\n\n/**\n * Test semua kombinasi variant sekaligus — no missing coverage.\n *\n * @example\n * testAllVariants(\n * Button,\n * { intent: ['primary','danger'], size: ['sm','lg'] },\n * (el, variant) => {\n * expect(el).not.toBeNull()\n * if (variant.intent === 'primary') expectClasses(el, ['bg-blue-500'])\n * }\n * )\n */\nexport function testAllVariants(\n matrix: Record<string, Array<string | number | boolean>>,\n testFn: (variant: Record<string, string | number | boolean>) => void\n): void {\n const combinations = expandVariantMatrix(matrix)\n for (const variant of combinations) {\n testFn(variant)\n }\n}\n\n// ─── CSS-in-JS output assertions ─────────────────────────────────────────────\n\n/**\n * Bandingkan dua class string secara semantik (urutan tidak penting).\n *\n * @example\n * expectClassesEqual('px-4 py-2 bg-blue-500', 'bg-blue-500 px-4 py-2') // pass\n */\nexport function expectClassesEqual(actual: string, expected: string): void {\n const actualSet = new Set(actual.trim().split(/\\s+/).filter(Boolean))\n const expectedSet = new Set(expected.trim().split(/\\s+/).filter(Boolean))\n\n const missing = [...expectedSet].filter((c) => !actualSet.has(c))\n const extra = [...actualSet].filter((c) => !expectedSet.has(c))\n\n if (missing.length > 0 || extra.length > 0) {\n const parts: string[] = []\n if (missing.length > 0) parts.push(`Missing: ${missing.join(\", \")}`)\n if (extra.length > 0) parts.push(`Extra: ${extra.join(\", \")}`)\n throw new Error(`Class mismatch:\\n ${parts.join(\"\\n \")}`)\n }\n}\n\n// ─── Engine metrics matchers ──────────────────────────────────────────────────\n\nexport interface EngineMetricsSnapshot {\n totalFiles?: number\n uniqueClasses?: number\n buildTimeMs?: number\n cssBytes?: number\n cacheHits?: number\n cacheMisses?: number\n incrementalRuns?: number\n fullRescans?: number\n}\n\n/**\n * Assert engine metrics snapshot meets minimum thresholds.\n *\n * @example\n * const result = await engine.build()\n * expectEngineMetrics(metrics.snapshot(), {\n * totalFiles: 10,\n * buildTimeMs: 5000, // max\n * })\n */\nexport function expectEngineMetrics(\n metrics: EngineMetricsSnapshot,\n expectations: {\n minFiles?: number\n maxBuildTimeMs?: number\n minUniqueClasses?: number\n cacheHitRateMin?: number // 0–1\n }\n): void {\n if (expectations.minFiles !== undefined) {\n const actual = metrics.totalFiles ?? 0\n if (actual < expectations.minFiles) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minFiles} files, got ${actual}`\n )\n }\n }\n\n if (expectations.maxBuildTimeMs !== undefined) {\n const actual = metrics.buildTimeMs ?? 0\n if (actual > expectations.maxBuildTimeMs) {\n throw new Error(\n `Engine metrics: build took ${actual}ms, expected ≤ ${expectations.maxBuildTimeMs}ms`\n )\n }\n }\n\n if (expectations.minUniqueClasses !== undefined) {\n const actual = metrics.uniqueClasses ?? 0\n if (actual < expectations.minUniqueClasses) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minUniqueClasses} unique classes, got ${actual}`\n )\n }\n }\n\n if (expectations.cacheHitRateMin !== undefined) {\n const hits = metrics.cacheHits ?? 0\n const total = hits + (metrics.cacheMisses ?? 0)\n const rate = total > 0 ? hits / total : 0\n if (rate < expectations.cacheHitRateMin) {\n throw new Error(\n `Engine metrics: cache hit rate ${(rate * 100).toFixed(1)}%, expected ≥ ${(expectations.cacheHitRateMin * 100).toFixed(1)}%`\n )\n }\n }\n}\n\n/**\n * Custom Jest/Vitest matcher: toHaveEngineMetrics\n *\n * @example\n * expect(metrics).toHaveEngineMetrics({ minFiles: 1 })\n */\nexport function toHaveEngineMetrics(expectations: Parameters<typeof expectEngineMetrics>[1]) {\n return (metrics: EngineMetricsSnapshot) => {\n try {\n expectEngineMetrics(metrics, expectations)\n return { pass: true, message: () => \"engine metrics matched expectations\" }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e)\n return { pass: false, message: () => msg }\n }\n }\n}\n\n/** All matchers including engine metrics */\nexport const tailwindMatchersWithMetrics = {\n toHaveClass,\n toHaveClasses,\n toNotHaveClass,\n toHaveEngineMetrics,\n}"],"mappings":"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","names":[]}
|
package/dist/testing.mjs
CHANGED
|
@@ -160,7 +160,20 @@ var tailwindMatchersWithMetrics = {
|
|
|
160
160
|
toNotHaveClass,
|
|
161
161
|
toHaveEngineMetrics
|
|
162
162
|
};
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
export {
|
|
164
|
+
expandVariantMatrix,
|
|
165
|
+
expectClasses,
|
|
166
|
+
expectClassesEqual,
|
|
167
|
+
expectEngineMetrics,
|
|
168
|
+
expectNoClasses,
|
|
169
|
+
getClassList,
|
|
170
|
+
snapshotVariants,
|
|
171
|
+
tailwindMatchers,
|
|
172
|
+
tailwindMatchersWithMetrics,
|
|
173
|
+
testAllVariants,
|
|
174
|
+
toHaveClass,
|
|
175
|
+
toHaveClasses,
|
|
176
|
+
toHaveEngineMetrics,
|
|
177
|
+
toNotHaveClass
|
|
178
|
+
};
|
|
166
179
|
//# sourceMappingURL=testing.mjs.map
|
package/dist/testing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/testing/src/index.ts"],"names":[],"mappings":"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","file":"testing.mjs","sourcesContent":["/**\n * tailwind-styled-v4 — Testing Utilities\n *\n * Integrasi dengan Jest / Vitest untuk test komponen tw().\n *\n * @example\n * // vitest.config.ts\n * import { tailwindStyledSetup } from '@tailwind-styled/testing'\n * export default defineConfig({ test: { setupFiles: ['@tailwind-styled/testing/setup'] } })\n *\n * // Button.test.ts\n * import { render } from '@testing-library/react'\n * import { expectClasses, getVariantClass } from '@tailwind-styled/testing'\n *\n * test('Button renders primary variant', () => {\n * const { container } = render(<Button intent=\"primary\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white'])\n * })\n */\n\n// ─── Jest/Vitest custom matchers ─────────────────────────────────────────────\n\n/**\n * Custom matcher: toHaveClass\n * Dipakai langsung atau via expect.extend(tailwindMatchers)\n *\n * @example\n * expect(element).toHaveClass('bg-blue-500')\n */\nexport function toHaveClass(className: string) {\n return (value: { classList?: { contains: (name: string) => boolean } }) => {\n const pass = Boolean(value?.classList?.contains(className))\n return {\n pass,\n message: () => `expected element ${pass ? \"not \" : \"\"}to contain class '${className}'`,\n }\n }\n}\n\n/**\n * Custom matcher: toHaveClasses\n * Cek beberapa class sekaligus\n *\n * @example\n * expect(element).toHaveClasses(['px-4', 'py-2', 'rounded'])\n */\nexport function toHaveClasses(classNames: string[]) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const missing = classNames.filter((c) => !value.classList.contains(c))\n const pass = missing.length === 0\n return {\n pass,\n message: () =>\n pass\n ? `expected element not to have all classes: ${classNames.join(\", \")}`\n : `expected element to have classes: ${missing.join(\", \")}`,\n }\n }\n}\n\n/**\n * Custom matcher: toNotHaveClass\n *\n * @example\n * expect(element).toNotHaveClass('hidden')\n */\nexport function toNotHaveClass(className: string) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const pass = !value.classList.contains(className)\n return {\n pass,\n message: () => `expected element ${pass ? \"\" : \"not \"}to have class '${className}'`,\n }\n }\n}\n\n/** Semua matchers — pakai dengan expect.extend(tailwindMatchers) */\nexport const tailwindMatchers = { toHaveClass, toHaveClasses, toNotHaveClass }\n\n// ─── Helper utilities ────────────────────────────────────────────────────────\n\n/**\n * Assert element punya semua class yang diharapkan.\n * Lebih ergonomis dari `expect(el).toHaveClasses([...])` untuk banyak class.\n *\n * @example\n * const { container } = render(<Button intent=\"primary\" size=\"lg\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white', 'h-12'])\n */\nexport function expectClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectClasses: element is null or undefined\")\n const missing = classes.filter((c) => !element.classList.contains(c))\n if (missing.length > 0) {\n throw new Error(\n `Expected element to have classes: ${missing.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Assert element tidak punya class tertentu.\n *\n * @example\n * expectNoClasses(container.firstChild, ['opacity-50', 'cursor-not-allowed'])\n */\nexport function expectNoClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectNoClasses: element is null or undefined\")\n const found = classes.filter((c) => element.classList.contains(c))\n if (found.length > 0) {\n throw new Error(\n `Expected element NOT to have classes: ${found.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Extract class list dari element sebagai sorted array.\n * Berguna untuk snapshot testing.\n *\n * @example\n * expect(getClassList(element)).toMatchSnapshot()\n */\nexport function getClassList(element: Element | null | undefined): string[] {\n if (!element) return []\n // classList mungkin tidak iterable di test environment (mock object)\n // Fallback ke parsing className string jika Array.from gagal atau hasilkan []\n try {\n const list = Array.from(element.classList)\n if (list.length > 0) return list.sort()\n } catch {}\n // Fallback: parse dari className string\n if (element.className && typeof element.className === \"string\") {\n return element.className.trim().split(/\\s+/).filter(Boolean).sort()\n }\n return []\n}\n\n// ─── Variant snapshot helpers ────────────────────────────────────────────────\n\n/**\n * Buat snapshot dari semua kombinasi variant.\n * Berguna untuk regression testing pada styled components.\n *\n * @example\n * const buttonVariants = snapshotVariants(\n * (props) => {\n * const { container } = render(<Button {...props} />)\n * return container.firstChild?.className ?? ''\n * },\n * [\n * { intent: 'primary', size: 'sm' },\n * { intent: 'primary', size: 'lg' },\n * { intent: 'danger', size: 'sm' },\n * ]\n * )\n * expect(buttonVariants).toMatchSnapshot()\n */\nexport function snapshotVariants<T>(render: (variant: T) => string, variants: T[]) {\n return variants.map((variant) => ({\n variant,\n output: render(variant),\n }))\n}\n\n/**\n * Generate semua kombinasi dari variant matrix.\n *\n * @example\n * const combinations = expandVariantMatrix({\n * intent: ['primary', 'danger'],\n * size: ['sm', 'md', 'lg'],\n * disabled: [true, false],\n * })\n * // → 2 × 3 × 2 = 12 kombinasi\n */\nexport function expandVariantMatrix(\n matrix: Record<string, Array<string | number | boolean>>\n): Array<Record<string, string | number | boolean>> {\n const keys = Object.keys(matrix)\n if (keys.length === 0) return [{}]\n\n const result: Array<Record<string, string | number | boolean>> = []\n\n function walk(index: number, current: Record<string, string | number | boolean>) {\n if (index >= keys.length) {\n result.push({ ...current })\n return\n }\n const key = keys[index]!\n for (const value of matrix[key] ?? []) {\n current[key] = value\n walk(index + 1, current)\n }\n }\n\n walk(0, {})\n return result\n}\n\n/**\n * Test semua kombinasi variant sekaligus — no missing coverage.\n *\n * @example\n * testAllVariants(\n * Button,\n * { intent: ['primary','danger'], size: ['sm','lg'] },\n * (el, variant) => {\n * expect(el).not.toBeNull()\n * if (variant.intent === 'primary') expectClasses(el, ['bg-blue-500'])\n * }\n * )\n */\nexport function testAllVariants(\n matrix: Record<string, Array<string | number | boolean>>,\n testFn: (variant: Record<string, string | number | boolean>) => void\n): void {\n const combinations = expandVariantMatrix(matrix)\n for (const variant of combinations) {\n testFn(variant)\n }\n}\n\n// ─── CSS-in-JS output assertions ─────────────────────────────────────────────\n\n/**\n * Bandingkan dua class string secara semantik (urutan tidak penting).\n *\n * @example\n * expectClassesEqual('px-4 py-2 bg-blue-500', 'bg-blue-500 px-4 py-2') // pass\n */\nexport function expectClassesEqual(actual: string, expected: string): void {\n const actualSet = new Set(actual.trim().split(/\\s+/).filter(Boolean))\n const expectedSet = new Set(expected.trim().split(/\\s+/).filter(Boolean))\n\n const missing = [...expectedSet].filter((c) => !actualSet.has(c))\n const extra = [...actualSet].filter((c) => !expectedSet.has(c))\n\n if (missing.length > 0 || extra.length > 0) {\n const parts: string[] = []\n if (missing.length > 0) parts.push(`Missing: ${missing.join(\", \")}`)\n if (extra.length > 0) parts.push(`Extra: ${extra.join(\", \")}`)\n throw new Error(`Class mismatch:\\n ${parts.join(\"\\n \")}`)\n }\n}\n\n// ─── Engine metrics matchers ──────────────────────────────────────────────────\n\nexport interface EngineMetricsSnapshot {\n totalFiles?: number\n uniqueClasses?: number\n buildTimeMs?: number\n cssBytes?: number\n cacheHits?: number\n cacheMisses?: number\n incrementalRuns?: number\n fullRescans?: number\n}\n\n/**\n * Assert engine metrics snapshot meets minimum thresholds.\n *\n * @example\n * const result = await engine.build()\n * expectEngineMetrics(metrics.snapshot(), {\n * totalFiles: 10,\n * buildTimeMs: 5000, // max\n * })\n */\nexport function expectEngineMetrics(\n metrics: EngineMetricsSnapshot,\n expectations: {\n minFiles?: number\n maxBuildTimeMs?: number\n minUniqueClasses?: number\n cacheHitRateMin?: number // 0–1\n }\n): void {\n if (expectations.minFiles !== undefined) {\n const actual = metrics.totalFiles ?? 0\n if (actual < expectations.minFiles) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minFiles} files, got ${actual}`\n )\n }\n }\n\n if (expectations.maxBuildTimeMs !== undefined) {\n const actual = metrics.buildTimeMs ?? 0\n if (actual > expectations.maxBuildTimeMs) {\n throw new Error(\n `Engine metrics: build took ${actual}ms, expected ≤ ${expectations.maxBuildTimeMs}ms`\n )\n }\n }\n\n if (expectations.minUniqueClasses !== undefined) {\n const actual = metrics.uniqueClasses ?? 0\n if (actual < expectations.minUniqueClasses) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minUniqueClasses} unique classes, got ${actual}`\n )\n }\n }\n\n if (expectations.cacheHitRateMin !== undefined) {\n const hits = metrics.cacheHits ?? 0\n const total = hits + (metrics.cacheMisses ?? 0)\n const rate = total > 0 ? hits / total : 0\n if (rate < expectations.cacheHitRateMin) {\n throw new Error(\n `Engine metrics: cache hit rate ${(rate * 100).toFixed(1)}%, expected ≥ ${(expectations.cacheHitRateMin * 100).toFixed(1)}%`\n )\n }\n }\n}\n\n/**\n * Custom Jest/Vitest matcher: toHaveEngineMetrics\n *\n * @example\n * expect(metrics).toHaveEngineMetrics({ minFiles: 1 })\n */\nexport function toHaveEngineMetrics(expectations: Parameters<typeof expectEngineMetrics>[1]) {\n return (metrics: EngineMetricsSnapshot) => {\n try {\n expectEngineMetrics(metrics, expectations)\n return { pass: true, message: () => \"engine metrics matched expectations\" }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e)\n return { pass: false, message: () => msg }\n }\n }\n}\n\n/** All matchers including engine metrics */\nexport const tailwindMatchersWithMetrics = {\n toHaveClass,\n toHaveClasses,\n toNotHaveClass,\n toHaveEngineMetrics,\n}"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/testing/src/index.ts"],"sourcesContent":["/**\n * tailwind-styled-v4 — Testing Utilities\n *\n * Integrasi dengan Jest / Vitest untuk test komponen tw().\n *\n * @example\n * // vitest.config.ts\n * import { tailwindStyledSetup } from '@tailwind-styled/testing'\n * export default defineConfig({ test: { setupFiles: ['@tailwind-styled/testing/setup'] } })\n *\n * // Button.test.ts\n * import { render } from '@testing-library/react'\n * import { expectClasses, getVariantClass } from '@tailwind-styled/testing'\n *\n * test('Button renders primary variant', () => {\n * const { container } = render(<Button intent=\"primary\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white'])\n * })\n */\n\n// ─── Jest/Vitest custom matchers ─────────────────────────────────────────────\n\n/**\n * Custom matcher: toHaveClass\n * Dipakai langsung atau via expect.extend(tailwindMatchers)\n *\n * @example\n * expect(element).toHaveClass('bg-blue-500')\n */\nexport function toHaveClass(className: string) {\n return (value: { classList?: { contains: (name: string) => boolean } }) => {\n const pass = Boolean(value?.classList?.contains(className))\n return {\n pass,\n message: () => `expected element ${pass ? \"not \" : \"\"}to contain class '${className}'`,\n }\n }\n}\n\n/**\n * Custom matcher: toHaveClasses\n * Cek beberapa class sekaligus\n *\n * @example\n * expect(element).toHaveClasses(['px-4', 'py-2', 'rounded'])\n */\nexport function toHaveClasses(classNames: string[]) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const missing = classNames.filter((c) => !value.classList.contains(c))\n const pass = missing.length === 0\n return {\n pass,\n message: () =>\n pass\n ? `expected element not to have all classes: ${classNames.join(\", \")}`\n : `expected element to have classes: ${missing.join(\", \")}`,\n }\n }\n}\n\n/**\n * Custom matcher: toNotHaveClass\n *\n * @example\n * expect(element).toNotHaveClass('hidden')\n */\nexport function toNotHaveClass(className: string) {\n return (value: Element | null | undefined) => {\n if (!value) return { pass: false, message: () => \"element is null or undefined\" }\n const pass = !value.classList.contains(className)\n return {\n pass,\n message: () => `expected element ${pass ? \"\" : \"not \"}to have class '${className}'`,\n }\n }\n}\n\n/** Semua matchers — pakai dengan expect.extend(tailwindMatchers) */\nexport const tailwindMatchers = { toHaveClass, toHaveClasses, toNotHaveClass }\n\n// ─── Helper utilities ────────────────────────────────────────────────────────\n\n/**\n * Assert element punya semua class yang diharapkan.\n * Lebih ergonomis dari `expect(el).toHaveClasses([...])` untuk banyak class.\n *\n * @example\n * const { container } = render(<Button intent=\"primary\" size=\"lg\" />)\n * expectClasses(container.firstChild, ['bg-blue-500', 'text-white', 'h-12'])\n */\nexport function expectClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectClasses: element is null or undefined\")\n const missing = classes.filter((c) => !element.classList.contains(c))\n if (missing.length > 0) {\n throw new Error(\n `Expected element to have classes: ${missing.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Assert element tidak punya class tertentu.\n *\n * @example\n * expectNoClasses(container.firstChild, ['opacity-50', 'cursor-not-allowed'])\n */\nexport function expectNoClasses(element: Element | null | undefined, classes: string[]): void {\n if (!element) throw new Error(\"expectNoClasses: element is null or undefined\")\n const found = classes.filter((c) => element.classList.contains(c))\n if (found.length > 0) {\n throw new Error(\n `Expected element NOT to have classes: ${found.join(\", \")}\\n` +\n ` Actual classes: ${element.className}`\n )\n }\n}\n\n/**\n * Extract class list dari element sebagai sorted array.\n * Berguna untuk snapshot testing.\n *\n * @example\n * expect(getClassList(element)).toMatchSnapshot()\n */\nexport function getClassList(element: Element | null | undefined): string[] {\n if (!element) return []\n // classList mungkin tidak iterable di test environment (mock object)\n // Fallback ke parsing className string jika Array.from gagal atau hasilkan []\n try {\n const list = Array.from(element.classList)\n if (list.length > 0) return list.sort()\n } catch {}\n // Fallback: parse dari className string\n if (element.className && typeof element.className === \"string\") {\n return element.className.trim().split(/\\s+/).filter(Boolean).sort()\n }\n return []\n}\n\n// ─── Variant snapshot helpers ────────────────────────────────────────────────\n\n/**\n * Buat snapshot dari semua kombinasi variant.\n * Berguna untuk regression testing pada styled components.\n *\n * @example\n * const buttonVariants = snapshotVariants(\n * (props) => {\n * const { container } = render(<Button {...props} />)\n * return container.firstChild?.className ?? ''\n * },\n * [\n * { intent: 'primary', size: 'sm' },\n * { intent: 'primary', size: 'lg' },\n * { intent: 'danger', size: 'sm' },\n * ]\n * )\n * expect(buttonVariants).toMatchSnapshot()\n */\nexport function snapshotVariants<T>(render: (variant: T) => string, variants: T[]) {\n return variants.map((variant) => ({\n variant,\n output: render(variant),\n }))\n}\n\n/**\n * Generate semua kombinasi dari variant matrix.\n *\n * @example\n * const combinations = expandVariantMatrix({\n * intent: ['primary', 'danger'],\n * size: ['sm', 'md', 'lg'],\n * disabled: [true, false],\n * })\n * // → 2 × 3 × 2 = 12 kombinasi\n */\nexport function expandVariantMatrix(\n matrix: Record<string, Array<string | number | boolean>>\n): Array<Record<string, string | number | boolean>> {\n const keys = Object.keys(matrix)\n if (keys.length === 0) return [{}]\n\n const result: Array<Record<string, string | number | boolean>> = []\n\n function walk(index: number, current: Record<string, string | number | boolean>) {\n if (index >= keys.length) {\n result.push({ ...current })\n return\n }\n const key = keys[index]!\n for (const value of matrix[key] ?? []) {\n current[key] = value\n walk(index + 1, current)\n }\n }\n\n walk(0, {})\n return result\n}\n\n/**\n * Test semua kombinasi variant sekaligus — no missing coverage.\n *\n * @example\n * testAllVariants(\n * Button,\n * { intent: ['primary','danger'], size: ['sm','lg'] },\n * (el, variant) => {\n * expect(el).not.toBeNull()\n * if (variant.intent === 'primary') expectClasses(el, ['bg-blue-500'])\n * }\n * )\n */\nexport function testAllVariants(\n matrix: Record<string, Array<string | number | boolean>>,\n testFn: (variant: Record<string, string | number | boolean>) => void\n): void {\n const combinations = expandVariantMatrix(matrix)\n for (const variant of combinations) {\n testFn(variant)\n }\n}\n\n// ─── CSS-in-JS output assertions ─────────────────────────────────────────────\n\n/**\n * Bandingkan dua class string secara semantik (urutan tidak penting).\n *\n * @example\n * expectClassesEqual('px-4 py-2 bg-blue-500', 'bg-blue-500 px-4 py-2') // pass\n */\nexport function expectClassesEqual(actual: string, expected: string): void {\n const actualSet = new Set(actual.trim().split(/\\s+/).filter(Boolean))\n const expectedSet = new Set(expected.trim().split(/\\s+/).filter(Boolean))\n\n const missing = [...expectedSet].filter((c) => !actualSet.has(c))\n const extra = [...actualSet].filter((c) => !expectedSet.has(c))\n\n if (missing.length > 0 || extra.length > 0) {\n const parts: string[] = []\n if (missing.length > 0) parts.push(`Missing: ${missing.join(\", \")}`)\n if (extra.length > 0) parts.push(`Extra: ${extra.join(\", \")}`)\n throw new Error(`Class mismatch:\\n ${parts.join(\"\\n \")}`)\n }\n}\n\n// ─── Engine metrics matchers ──────────────────────────────────────────────────\n\nexport interface EngineMetricsSnapshot {\n totalFiles?: number\n uniqueClasses?: number\n buildTimeMs?: number\n cssBytes?: number\n cacheHits?: number\n cacheMisses?: number\n incrementalRuns?: number\n fullRescans?: number\n}\n\n/**\n * Assert engine metrics snapshot meets minimum thresholds.\n *\n * @example\n * const result = await engine.build()\n * expectEngineMetrics(metrics.snapshot(), {\n * totalFiles: 10,\n * buildTimeMs: 5000, // max\n * })\n */\nexport function expectEngineMetrics(\n metrics: EngineMetricsSnapshot,\n expectations: {\n minFiles?: number\n maxBuildTimeMs?: number\n minUniqueClasses?: number\n cacheHitRateMin?: number // 0–1\n }\n): void {\n if (expectations.minFiles !== undefined) {\n const actual = metrics.totalFiles ?? 0\n if (actual < expectations.minFiles) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minFiles} files, got ${actual}`\n )\n }\n }\n\n if (expectations.maxBuildTimeMs !== undefined) {\n const actual = metrics.buildTimeMs ?? 0\n if (actual > expectations.maxBuildTimeMs) {\n throw new Error(\n `Engine metrics: build took ${actual}ms, expected ≤ ${expectations.maxBuildTimeMs}ms`\n )\n }\n }\n\n if (expectations.minUniqueClasses !== undefined) {\n const actual = metrics.uniqueClasses ?? 0\n if (actual < expectations.minUniqueClasses) {\n throw new Error(\n `Engine metrics: expected at least ${expectations.minUniqueClasses} unique classes, got ${actual}`\n )\n }\n }\n\n if (expectations.cacheHitRateMin !== undefined) {\n const hits = metrics.cacheHits ?? 0\n const total = hits + (metrics.cacheMisses ?? 0)\n const rate = total > 0 ? hits / total : 0\n if (rate < expectations.cacheHitRateMin) {\n throw new Error(\n `Engine metrics: cache hit rate ${(rate * 100).toFixed(1)}%, expected ≥ ${(expectations.cacheHitRateMin * 100).toFixed(1)}%`\n )\n }\n }\n}\n\n/**\n * Custom Jest/Vitest matcher: toHaveEngineMetrics\n *\n * @example\n * expect(metrics).toHaveEngineMetrics({ minFiles: 1 })\n */\nexport function toHaveEngineMetrics(expectations: Parameters<typeof expectEngineMetrics>[1]) {\n return (metrics: EngineMetricsSnapshot) => {\n try {\n expectEngineMetrics(metrics, expectations)\n return { pass: true, message: () => \"engine metrics matched expectations\" }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e)\n return { pass: false, message: () => msg }\n }\n }\n}\n\n/** All matchers including engine metrics */\nexport const tailwindMatchersWithMetrics = {\n toHaveClass,\n toHaveClasses,\n toNotHaveClass,\n toHaveEngineMetrics,\n}"],"mappings":"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","names":[]}
|
package/dist/theme.d.mts
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
|
-
export { L as LiveTokenEngineBridge, a as LiveTokenSet, T as TokenSubscriber, b as applyTokenSet, c as createUseTokens, g as generateTokenCssString, d as getToken, e as getTokens, l as liveToken, f as liveTokenEngine, s as setToken, h as setTokens, i as subscribeTokens, t as tokenRef, j as tokenVar } from './liveTokenEngine-DKoWRtqH.mjs';
|
|
2
1
|
import { z } from 'zod';
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
type TokenMap = Record<string, string>;
|
|
4
|
+
|
|
5
|
+
type TokenSubscriber = (tokens: TokenMap) => void;
|
|
6
|
+
interface LiveTokenSet {
|
|
7
|
+
vars: Record<string, string>;
|
|
8
|
+
get(name: string): string | undefined;
|
|
9
|
+
set(name: string, value: string): void;
|
|
10
|
+
setAll(tokens: TokenMap): void;
|
|
11
|
+
snapshot(): TokenMap;
|
|
12
|
+
}
|
|
13
|
+
interface LiveTokenEngineBridge {
|
|
14
|
+
getToken(name: string): string | undefined;
|
|
15
|
+
getTokens(): TokenMap;
|
|
16
|
+
setToken(name: string, value: string): void;
|
|
17
|
+
setTokens(tokens: TokenMap): void;
|
|
18
|
+
applyTokenSet(tokens: TokenMap): void;
|
|
19
|
+
subscribeTokens(fn: TokenSubscriber): () => void;
|
|
20
|
+
subscribe?(fn: TokenSubscriber): () => void;
|
|
21
|
+
}
|
|
22
|
+
declare function tokenVar(name: string): string;
|
|
23
|
+
declare function tokenRef(name: string): string;
|
|
24
|
+
declare function liveToken(tokens: TokenMap): LiveTokenSet;
|
|
25
|
+
declare function setToken(name: string, value: string): void;
|
|
26
|
+
declare function setTokens(tokens: TokenMap): void;
|
|
27
|
+
declare function applyTokenSet(tokens: TokenMap): void;
|
|
28
|
+
declare function getToken(name: string): string | undefined;
|
|
29
|
+
declare function getTokens(): TokenMap;
|
|
30
|
+
declare function subscribeTokens(fn: TokenSubscriber): () => void;
|
|
31
|
+
declare function generateTokenCssString(): string;
|
|
32
|
+
declare function createUseTokens(): () => TokenMap;
|
|
33
|
+
declare const liveTokenEngine: LiveTokenEngineBridge;
|
|
34
|
+
declare global {
|
|
35
|
+
interface Window {
|
|
36
|
+
__TW_TOKEN_ENGINE__?: LiveTokenEngineBridge;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
4
39
|
|
|
5
40
|
declare const TokenConfigSchema: z.ZodObject<{
|
|
6
41
|
name: z.ZodString;
|
|
@@ -214,4 +249,4 @@ interface DesignTokens {
|
|
|
214
249
|
*/
|
|
215
250
|
declare function compileDesignTokens(tokens: DesignTokens, prefix?: string): string;
|
|
216
251
|
|
|
217
|
-
export { type DesignTokens, type LiveTokenUpdateInput, LiveTokenUpdateSchema, type MultiThemeConfig, type Theme, type ThemeContract, type ThemeRegistrationInput, ThemeRegistrationSchema, ThemeRegistry, type ThemeTokenMap, type ThemeVars, type TokenConfigInput, TokenConfigSchema, compileDesignTokens, createMultiTheme, createTheme, defineThemeContract, parseLiveTokenUpdate, parseTokenConfig };
|
|
252
|
+
export { type DesignTokens, type LiveTokenEngineBridge, type LiveTokenSet, type LiveTokenUpdateInput, LiveTokenUpdateSchema, type MultiThemeConfig, type Theme, type ThemeContract, type ThemeRegistrationInput, ThemeRegistrationSchema, ThemeRegistry, type ThemeTokenMap, type ThemeVars, type TokenConfigInput, TokenConfigSchema, type TokenMap, type TokenSubscriber, applyTokenSet, compileDesignTokens, createMultiTheme, createTheme, createUseTokens, defineThemeContract, generateTokenCssString, getToken, getTokens, liveToken, liveTokenEngine, parseLiveTokenUpdate, parseTokenConfig, setToken, setTokens, subscribeTokens, tokenRef, tokenVar };
|
package/dist/theme.d.ts
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
|
-
export { L as LiveTokenEngineBridge, a as LiveTokenSet, T as TokenSubscriber, b as applyTokenSet, c as createUseTokens, g as generateTokenCssString, d as getToken, e as getTokens, l as liveToken, f as liveTokenEngine, s as setToken, h as setTokens, i as subscribeTokens, t as tokenRef, j as tokenVar } from './liveTokenEngine-CN9ian1R.js';
|
|
2
1
|
import { z } from 'zod';
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
type TokenMap = Record<string, string>;
|
|
4
|
+
|
|
5
|
+
type TokenSubscriber = (tokens: TokenMap) => void;
|
|
6
|
+
interface LiveTokenSet {
|
|
7
|
+
vars: Record<string, string>;
|
|
8
|
+
get(name: string): string | undefined;
|
|
9
|
+
set(name: string, value: string): void;
|
|
10
|
+
setAll(tokens: TokenMap): void;
|
|
11
|
+
snapshot(): TokenMap;
|
|
12
|
+
}
|
|
13
|
+
interface LiveTokenEngineBridge {
|
|
14
|
+
getToken(name: string): string | undefined;
|
|
15
|
+
getTokens(): TokenMap;
|
|
16
|
+
setToken(name: string, value: string): void;
|
|
17
|
+
setTokens(tokens: TokenMap): void;
|
|
18
|
+
applyTokenSet(tokens: TokenMap): void;
|
|
19
|
+
subscribeTokens(fn: TokenSubscriber): () => void;
|
|
20
|
+
subscribe?(fn: TokenSubscriber): () => void;
|
|
21
|
+
}
|
|
22
|
+
declare function tokenVar(name: string): string;
|
|
23
|
+
declare function tokenRef(name: string): string;
|
|
24
|
+
declare function liveToken(tokens: TokenMap): LiveTokenSet;
|
|
25
|
+
declare function setToken(name: string, value: string): void;
|
|
26
|
+
declare function setTokens(tokens: TokenMap): void;
|
|
27
|
+
declare function applyTokenSet(tokens: TokenMap): void;
|
|
28
|
+
declare function getToken(name: string): string | undefined;
|
|
29
|
+
declare function getTokens(): TokenMap;
|
|
30
|
+
declare function subscribeTokens(fn: TokenSubscriber): () => void;
|
|
31
|
+
declare function generateTokenCssString(): string;
|
|
32
|
+
declare function createUseTokens(): () => TokenMap;
|
|
33
|
+
declare const liveTokenEngine: LiveTokenEngineBridge;
|
|
34
|
+
declare global {
|
|
35
|
+
interface Window {
|
|
36
|
+
__TW_TOKEN_ENGINE__?: LiveTokenEngineBridge;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
4
39
|
|
|
5
40
|
declare const TokenConfigSchema: z.ZodObject<{
|
|
6
41
|
name: z.ZodString;
|
|
@@ -214,4 +249,4 @@ interface DesignTokens {
|
|
|
214
249
|
*/
|
|
215
250
|
declare function compileDesignTokens(tokens: DesignTokens, prefix?: string): string;
|
|
216
251
|
|
|
217
|
-
export { type DesignTokens, type LiveTokenUpdateInput, LiveTokenUpdateSchema, type MultiThemeConfig, type Theme, type ThemeContract, type ThemeRegistrationInput, ThemeRegistrationSchema, ThemeRegistry, type ThemeTokenMap, type ThemeVars, type TokenConfigInput, TokenConfigSchema, compileDesignTokens, createMultiTheme, createTheme, defineThemeContract, parseLiveTokenUpdate, parseTokenConfig };
|
|
252
|
+
export { type DesignTokens, type LiveTokenEngineBridge, type LiveTokenSet, type LiveTokenUpdateInput, LiveTokenUpdateSchema, type MultiThemeConfig, type Theme, type ThemeContract, type ThemeRegistrationInput, ThemeRegistrationSchema, ThemeRegistry, type ThemeTokenMap, type ThemeVars, type TokenConfigInput, TokenConfigSchema, type TokenMap, type TokenSubscriber, applyTokenSet, compileDesignTokens, createMultiTheme, createTheme, createUseTokens, defineThemeContract, generateTokenCssString, getToken, getTokens, liveToken, liveTokenEngine, parseLiveTokenUpdate, parseTokenConfig, setToken, setTokens, subscribeTokens, tokenRef, tokenVar };
|