css-in-js-engine-pb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/atomicCache.d.ts +9 -0
  2. package/dist/atomicCache.d.ts.map +1 -0
  3. package/dist/atomicCache.js +25 -0
  4. package/dist/index.d.ts +7 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +5 -0
  7. package/dist/insertOnce.d.ts +2 -0
  8. package/dist/insertOnce.d.ts.map +1 -0
  9. package/dist/insertOnce.js +22 -0
  10. package/dist/makeResetStyles.d.ts +3 -0
  11. package/dist/makeResetStyles.d.ts.map +1 -0
  12. package/dist/makeResetStyles.js +45 -0
  13. package/dist/makeStaticStyles.d.ts +3 -0
  14. package/dist/makeStaticStyles.d.ts.map +1 -0
  15. package/dist/makeStaticStyles.js +71 -0
  16. package/dist/makeStyles.d.ts +3 -0
  17. package/dist/makeStyles.d.ts.map +1 -0
  18. package/dist/makeStyles.js +19 -0
  19. package/dist/mergeClasses.d.ts +2 -0
  20. package/dist/mergeClasses.d.ts.map +1 -0
  21. package/dist/mergeClasses.js +18 -0
  22. package/dist/resolveStyleRules.d.ts +4 -0
  23. package/dist/resolveStyleRules.d.ts.map +1 -0
  24. package/dist/resolveStyleRules.js +47 -0
  25. package/dist/shorthands/borderBottom.d.ts +1 -0
  26. package/dist/shorthands/borderBottom.d.ts.map +1 -0
  27. package/dist/shorthands/borderBottom.js +1 -0
  28. package/dist/shorthands/borderColor.d.ts +1 -0
  29. package/dist/shorthands/borderColor.d.ts.map +1 -0
  30. package/dist/shorthands/borderColor.js +1 -0
  31. package/dist/shorthands/borderLeft.d.ts +1 -0
  32. package/dist/shorthands/borderLeft.d.ts.map +1 -0
  33. package/dist/shorthands/borderLeft.js +1 -0
  34. package/dist/shorthands/borderRadius.d.ts +1 -0
  35. package/dist/shorthands/borderRadius.d.ts.map +1 -0
  36. package/dist/shorthands/borderRadius.js +1 -0
  37. package/dist/shorthands/borderRight.d.ts +1 -0
  38. package/dist/shorthands/borderRight.d.ts.map +1 -0
  39. package/dist/shorthands/borderRight.js +1 -0
  40. package/dist/shorthands/borderStyle.d.ts +1 -0
  41. package/dist/shorthands/borderStyle.d.ts.map +1 -0
  42. package/dist/shorthands/borderStyle.js +1 -0
  43. package/dist/shorthands/borderTop.d.ts +1 -0
  44. package/dist/shorthands/borderTop.d.ts.map +1 -0
  45. package/dist/shorthands/borderTop.js +1 -0
  46. package/dist/shorthands/borderWidth.d.ts +1 -0
  47. package/dist/shorthands/borderWidth.d.ts.map +1 -0
  48. package/dist/shorthands/borderWidth.js +1 -0
  49. package/dist/shorthands/index.d.ts +1 -0
  50. package/dist/shorthands/index.d.ts.map +1 -0
  51. package/dist/shorthands/index.js +1 -0
  52. package/dist/types.d.ts +14 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +1 -0
  55. package/dist/utils/css.d.ts +5 -0
  56. package/dist/utils/css.d.ts.map +1 -0
  57. package/dist/utils/css.js +18 -0
  58. package/dist/utils/hash.d.ts +3 -0
  59. package/dist/utils/hash.d.ts.map +1 -0
  60. package/dist/utils/hash.js +10 -0
  61. package/package.json +20 -0
@@ -0,0 +1,9 @@
1
+ export interface AtomicInsertResult {
2
+ className: string;
3
+ ruleText?: string;
4
+ }
5
+ export declare class AtomicRuleCache {
6
+ private cache;
7
+ getOrCreate(selector: string, declaration: string, atRule?: string): AtomicInsertResult;
8
+ }
9
+ //# sourceMappingURL=atomicCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicCache.d.ts","sourceRoot":"","sources":["../src/atomicCache.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,KAAK,CAAqC;IAElD,WAAW,CACP,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GAChB,kBAAkB;CAyBxB"}
@@ -0,0 +1,25 @@
1
+ import { makeAtomicClassName } from './utils/hash';
2
+ import { prefixSelector } from './utils/css';
3
+ export class AtomicRuleCache {
4
+ constructor() {
5
+ this.cache = new Map();
6
+ }
7
+ getOrCreate(selector, declaration, atRule) {
8
+ const key = atRule
9
+ ? `${atRule}|${selector}|${declaration}`
10
+ : `${selector}|${declaration}`;
11
+ const cached = this.cache.get(key);
12
+ if (cached) {
13
+ return { className: cached };
14
+ }
15
+ const className = makeAtomicClassName(key);
16
+ const baseRule = selector === '&'
17
+ ? `.${className}{${declaration}}`
18
+ : `${prefixSelector(selector, className)}{${declaration}}`;
19
+ const ruleText = atRule
20
+ ? `${atRule}{${baseRule}}`
21
+ : baseRule;
22
+ this.cache.set(key, className);
23
+ return { className, ruleText };
24
+ }
25
+ }
@@ -0,0 +1,7 @@
1
+ export { mergeClasses } from './mergeClasses';
2
+ export { makeStyles } from './makeStyles';
3
+ export { makeStaticStyles } from './makeStaticStyles';
4
+ export { makeResetStyles } from './makeResetStyles';
5
+ export declare const shorthands: {};
6
+ export type { StyleRule, CSSValue, StylesBySlots, ClassNamesBySlot, } from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,UAAU,IAEtB,CAAC;AAEF,YAAY,EACR,SAAS,EACT,QAAQ,EACR,aAAa,EACb,gBAAgB,GACnB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { mergeClasses } from './mergeClasses';
2
+ export { makeStyles } from './makeStyles';
3
+ export { makeStaticStyles } from './makeStaticStyles';
4
+ export { makeResetStyles } from './makeResetStyles';
5
+ export const shorthands = {};
@@ -0,0 +1,2 @@
1
+ export declare function insertRulesOnce(rules: string[]): void;
2
+ //# sourceMappingURL=insertOnce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertOnce.d.ts","sourceRoot":"","sources":["../src/insertOnce.ts"],"names":[],"mappings":"AAcA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAU9C"}
@@ -0,0 +1,22 @@
1
+ const insertedRules = new Set();
2
+ let styleEl = null;
3
+ let sheet = null;
4
+ function ensureSheet() {
5
+ if (!sheet) {
6
+ styleEl = document.createElement('style');
7
+ document.head.appendChild(styleEl);
8
+ sheet = styleEl.sheet;
9
+ }
10
+ return sheet;
11
+ }
12
+ export function insertRulesOnce(rules) {
13
+ if (rules.length === 0)
14
+ return;
15
+ const sheet = ensureSheet();
16
+ for (const rule of rules) {
17
+ if (insertedRules.has(rule))
18
+ continue;
19
+ sheet.insertRule(rule, sheet.cssRules.length);
20
+ insertedRules.add(rule);
21
+ }
22
+ }
@@ -0,0 +1,3 @@
1
+ import type { StyleRule } from './types';
2
+ export declare function makeResetStyles(styles: StyleRule): () => string;
3
+ //# sourceMappingURL=makeResetStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeResetStyles.d.ts","sourceRoot":"","sources":["../src/makeResetStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAgDzC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,SAGX,MAAM,CAa3C"}
@@ -0,0 +1,45 @@
1
+ import { camelToKebab, resolveValue } from './utils/css';
2
+ import { hashString } from './utils/hash';
3
+ import { insertRulesOnce } from './insertOnce';
4
+ const resetCache = new Map();
5
+ function stringifyResetRule(selector, styles, atRule) {
6
+ const rules = [];
7
+ const decls = [];
8
+ for (const key in styles) {
9
+ const val = styles[key];
10
+ if (val == null)
11
+ continue;
12
+ if (key.startsWith('@') && typeof val === 'object') {
13
+ const nested = stringifyResetRule(selector, val, key);
14
+ rules.push(...nested);
15
+ continue;
16
+ }
17
+ if (key.startsWith(':') && typeof val === 'object') {
18
+ const nested = stringifyResetRule(`${selector}${key}`, val, atRule);
19
+ rules.push(...nested);
20
+ continue;
21
+ }
22
+ if (typeof val !== 'object') {
23
+ decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);
24
+ }
25
+ }
26
+ if (decls.length) {
27
+ const rule = `${selector}{${decls.join(';')}}`;
28
+ rules.unshift(atRule ? `${atRule}{${rule}}` : rule);
29
+ }
30
+ return rules;
31
+ }
32
+ export function makeResetStyles(styles) {
33
+ const signature = JSON.stringify(styles);
34
+ return function useResetStyles() {
35
+ const cached = resetCache.get(signature);
36
+ if (cached)
37
+ return cached;
38
+ const className = `r${hashString(signature)}`;
39
+ const selector = `.${className}`;
40
+ const rules = stringifyResetRule(selector, styles);
41
+ insertRulesOnce(rules);
42
+ resetCache.set(signature, className);
43
+ return className;
44
+ };
45
+ }
@@ -0,0 +1,3 @@
1
+ import type { StyleRule } from './types';
2
+ export declare function makeStaticStyles(styles: string | Record<string, StyleRule>): () => void;
3
+ //# sourceMappingURL=makeStaticStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeStaticStyles.d.ts","sourceRoot":"","sources":["../src/makeStaticStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAwEzC,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAMP,IAAI,CAyB1C"}
@@ -0,0 +1,71 @@
1
+ import { camelToKebab, resolveValue } from './utils/css';
2
+ import { insertRulesOnce } from './insertOnce';
3
+ const staticCache = new Set();
4
+ function stringifyStaticRule(selector, styles, atRule) {
5
+ const rules = [];
6
+ const decls = [];
7
+ for (const key in styles) {
8
+ const val = styles[key];
9
+ if (val == null)
10
+ continue;
11
+ if (key.startsWith('@') && typeof val === 'object') {
12
+ const nested = stringifyStaticRule(selector, val, key);
13
+ rules.push(...nested);
14
+ continue;
15
+ }
16
+ if (key.startsWith(':') && typeof val === 'object') {
17
+ const nested = stringifyStaticRule(`${selector}${key}`, val, atRule);
18
+ rules.push(...nested);
19
+ continue;
20
+ }
21
+ if (typeof val !== 'object') {
22
+ decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);
23
+ }
24
+ }
25
+ if (decls.length) {
26
+ const rule = `${selector}{${decls.join(';')}}`;
27
+ rules.unshift(atRule ? `${atRule}{${rule}}` : rule);
28
+ }
29
+ return rules;
30
+ }
31
+ function stringifyKeyframes(name, frames) {
32
+ const blocks = [];
33
+ for (const step in frames) {
34
+ const decls = [];
35
+ const styles = frames[step];
36
+ for (const prop in styles) {
37
+ const val = styles[prop];
38
+ if (val == null || typeof val === 'object')
39
+ continue;
40
+ decls.push(`${camelToKebab(prop)}:${resolveValue(val)}`);
41
+ }
42
+ if (decls.length) {
43
+ blocks.push(`${step}{${decls.join(';')}}`);
44
+ }
45
+ }
46
+ return `@keyframes ${name}{${blocks.join('')}}`;
47
+ }
48
+ export function makeStaticStyles(styles) {
49
+ const signature = typeof styles === 'string'
50
+ ? styles
51
+ : JSON.stringify(styles);
52
+ return function useStaticStyles() {
53
+ if (staticCache.has(signature))
54
+ return;
55
+ staticCache.add(signature);
56
+ if (typeof styles !== 'string') {
57
+ const rules = [];
58
+ for (const selector in styles) {
59
+ if (selector.startsWith('@keyframes')) {
60
+ const name = selector.replace('@keyframes', '').trim();
61
+ const frames = styles[selector];
62
+ const rule = stringifyKeyframes(name, frames);
63
+ rules.push(rule);
64
+ continue;
65
+ }
66
+ rules.push(...stringifyStaticRule(selector, styles[selector]));
67
+ }
68
+ insertRulesOnce(rules);
69
+ }
70
+ };
71
+ }
@@ -0,0 +1,3 @@
1
+ import type { StylesBySlots, ClassNamesBySlot } from './types';
2
+ export declare function makeStyles<Slots extends string | number>(stylesBySlots: StylesBySlots<Slots>): () => ClassNamesBySlot<Slots>;
3
+ //# sourceMappingURL=makeStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeStyles.d.ts","sourceRoot":"","sources":["../src/makeStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAK/D,wBAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EACpD,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,SAON,gBAAgB,CAAC,KAAK,CAAC,CAevD"}
@@ -0,0 +1,19 @@
1
+ import { resolveStyleRulesForSlots } from './resolveStyleRules';
2
+ import { insertRulesOnce } from './insertOnce';
3
+ import { AtomicRuleCache } from './atomicCache';
4
+ export function makeStyles(stylesBySlots) {
5
+ let cachedClassNames = null;
6
+ let inserted = false;
7
+ const atomicCache = new AtomicRuleCache();
8
+ return function useStyles() {
9
+ if (!cachedClassNames) {
10
+ const { classNamesBySlot, cssRules } = resolveStyleRulesForSlots(stylesBySlots, atomicCache);
11
+ cachedClassNames = classNamesBySlot;
12
+ if (!inserted) {
13
+ insertRulesOnce(cssRules);
14
+ inserted = true;
15
+ }
16
+ }
17
+ return cachedClassNames;
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ export declare function mergeClasses(...inputs: Array<string | undefined | null | false>): string;
2
+ //# sourceMappingURL=mergeClasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeClasses.d.ts","sourceRoot":"","sources":["../src/mergeClasses.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CACxB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,GACpD,MAAM,CAkBR"}
@@ -0,0 +1,18 @@
1
+ export function mergeClasses(...inputs) {
2
+ const seen = new Map();
3
+ let index = 0;
4
+ for (const input of inputs) {
5
+ if (typeof input !== 'string')
6
+ continue;
7
+ const parts = input.trim().split(/\s+/);
8
+ for (const cls of parts) {
9
+ if (!cls)
10
+ continue;
11
+ seen.set(cls, index++);
12
+ }
13
+ }
14
+ return Array.from(seen.entries())
15
+ .sort((a, b) => a[1] - b[1])
16
+ .map(([cls]) => cls)
17
+ .join(' ');
18
+ }
@@ -0,0 +1,4 @@
1
+ import type { ResolveResult, StylesBySlots } from './types';
2
+ import { AtomicRuleCache } from './atomicCache';
3
+ export declare function resolveStyleRulesForSlots<Slots extends string | number>(stylesBySlots: StylesBySlots<Slots>, sharedCache?: AtomicRuleCache): ResolveResult<Slots>;
4
+ //# sourceMappingURL=resolveStyleRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveStyleRules.d.ts","sourceRoot":"","sources":["../src/resolveStyleRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAmDhD,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EACnE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EACnC,WAAW,CAAC,EAAE,eAAe,GAC9B,aAAa,CAAC,KAAK,CAAC,CAetB"}
@@ -0,0 +1,47 @@
1
+ import { camelToKebab, resolveValue } from './utils/css';
2
+ import { AtomicRuleCache } from './atomicCache';
3
+ function buildAtomicClasses(rule, cache, cssRulesOut, atRule) {
4
+ const classNames = [];
5
+ for (const key in rule) {
6
+ const val = rule[key];
7
+ if (val == null)
8
+ continue;
9
+ if (key.startsWith('@') && typeof val === 'object') {
10
+ const nested = buildAtomicClasses(val, cache, cssRulesOut, key);
11
+ classNames.push(...nested);
12
+ continue;
13
+ }
14
+ if (key.startsWith(':') && typeof val === 'object') {
15
+ for (const prop in val) {
16
+ const v = val[prop];
17
+ if (v == null || typeof v === 'object')
18
+ continue;
19
+ const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;
20
+ const res = cache.getOrCreate(`&${key}`, decl, atRule);
21
+ classNames.push(res.className);
22
+ if (res.ruleText)
23
+ cssRulesOut.push(res.ruleText);
24
+ }
25
+ continue;
26
+ }
27
+ if (typeof val !== 'object') {
28
+ const decl = `${camelToKebab(key)}:${resolveValue(val)}`;
29
+ const res = cache.getOrCreate('&', decl, atRule);
30
+ classNames.push(res.className);
31
+ if (res.ruleText)
32
+ cssRulesOut.push(res.ruleText);
33
+ }
34
+ }
35
+ return classNames;
36
+ }
37
+ export function resolveStyleRulesForSlots(stylesBySlots, sharedCache) {
38
+ const cache = sharedCache !== null && sharedCache !== void 0 ? sharedCache : new AtomicRuleCache();
39
+ const cssRules = [];
40
+ const classNamesBySlot = {};
41
+ for (const slot in stylesBySlots) {
42
+ const rule = stylesBySlots[slot];
43
+ const atomicClasses = buildAtomicClasses(rule !== null && rule !== void 0 ? rule : {}, cache, cssRules);
44
+ classNamesBySlot[slot] = atomicClasses.join(' ');
45
+ }
46
+ return { classNamesBySlot, cssRules };
47
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderBottom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderBottom.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderBottom.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderColor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderColor.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderColor.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderLeft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderLeft.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderLeft.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderRadius.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderRadius.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderRadius.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderRight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderRight.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderRight.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderStyle.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderStyle.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderTop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderTop.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderTop.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=borderWidth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderWidth.d.ts","sourceRoot":"","sources":["../../src/shorthands/borderWidth.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shorthands/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,14 @@
1
+ export type CSSValue = string | number | (() => string | number);
2
+ export interface StyleRule {
3
+ [property: string]: CSSValue | StyleRule | undefined;
4
+ }
5
+ export type StylesBySlots<Slots extends string | number> = Record<Slots, StyleRule>;
6
+ export type ClassNamesBySlot<Slots extends string | number> = Record<Slots, string>;
7
+ export type Direction = 'ltr' | 'rtl';
8
+ export type CSSRuleText = string;
9
+ export type AtomicCacheKey = string;
10
+ export interface ResolveResult<Slots extends string | number> {
11
+ classNamesBySlot: ClassNamesBySlot<Slots>;
12
+ cssRules: CSSRuleText[];
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,SAAS;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpF,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEpF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACxD,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,QAAQ,EAAE,WAAW,EAAE,CAAC;CAC3B"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { CSSValue } from '../types';
2
+ export declare function camelToKebab(prop: string): string;
3
+ export declare function resolveValue(v: CSSValue): string | number;
4
+ export declare function prefixSelector(selector: string, className: string): string;
5
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1E"}
@@ -0,0 +1,18 @@
1
+ const camelToKebabCache = new Map();
2
+ export function camelToKebab(prop) {
3
+ const cached = camelToKebabCache.get(prop);
4
+ if (cached)
5
+ return cached;
6
+ const res = prop.replace(/[A-Z]/g, m => '-' + m.toLowerCase());
7
+ camelToKebabCache.set(prop, res);
8
+ return res;
9
+ }
10
+ export function resolveValue(v) {
11
+ return typeof v === 'function' ? v() : v;
12
+ }
13
+ export function prefixSelector(selector, className) {
14
+ return selector
15
+ .split(',')
16
+ .map(part => part.trim().replace(/&/g, `.${className}`))
17
+ .join(',');
18
+ }
@@ -0,0 +1,3 @@
1
+ export declare function hashString(str: string): string;
2
+ export declare function makeAtomicClassName(signature: string): string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,10 @@
1
+ export function hashString(str) {
2
+ let hash = 5381;
3
+ for (let i = 0; i < str.length; i++) {
4
+ hash = (hash * 33) ^ str.charCodeAt(i);
5
+ }
6
+ return (hash >>> 0).toString(36);
7
+ }
8
+ export function makeAtomicClassName(signature) {
9
+ return `f${hashString(signature)}`;
10
+ }
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "css-in-js-engine-pb",
3
+ "version": "0.1.0",
4
+ "description": "A lightweight atomic CSS-in-JS engine built on the native CSS cascade",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "sideEffects": false,
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^5.0.0"
19
+ }
20
+ }