purse-styles 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,11 +57,16 @@ Define typed CSS custom properties with `defineVars`. Defaults are injected on `
57
57
  ```tsx
58
58
  import { PurseProvider, defineVars, style, useStyles } from "purse-styles"
59
59
 
60
- const DARK = "@media (prefers-color-scheme: dark)"
60
+ const DARK_THEME = ':root[data-theme="dark"]'
61
+ const DARK_MEDIA = "@media (prefers-color-scheme: dark)"
61
62
 
62
63
  export const colors = defineVars({
63
- text: { default: "black", [DARK]: "white" },
64
- background: { default: "white", [DARK]: "black" },
64
+ text: {
65
+ default: "black",
66
+ [DARK_THEME]: "white",
67
+ [DARK_MEDIA]: "white",
68
+ },
69
+ background: { default: "white", [DARK_THEME]: "black" },
65
70
  accent: "blue",
66
71
  })
67
72
 
@@ -85,8 +90,9 @@ Notes:
85
90
 
86
91
  - Token names are generated (`var(--purse-<hash>-<key>)`). Identical definition objects share the same names.
87
92
  - Keys cannot start with `--`; Purse always generates the custom property name.
88
- - Conditional values use a required `default` plus CSS at-rule keys (`@media`, `@supports`, etc.), same family as nested keys in `style()`.
89
- - Variables are root-level only. There is no `createTheme` / subtree theme API. App-wide non-media modes can still override the generated custom properties with root attributes or `useInjectGlobalStyles`.
93
+ - Conditional values use a required `default` plus CSS at-rule or selector keys. At-rules wrap a `:root` rule (for example, `@media ...{:root{...}}`), while selector conditions receive the declarations directly (for example, `:root[data-theme="dark"]{...}`).
94
+ - Set `data-theme="dark"` on the root `<html>` element to activate the selector condition above.
95
+ - Defaults are root-level, and there is no dedicated `createTheme` / subtree theme API.
90
96
 
91
97
  ## Exports
92
98
 
@@ -101,10 +107,11 @@ export declare function useStyles(
101
107
  ...styleElementsOrCSS: (CSSProperties | StyleElement)[]
102
108
  ): string
103
109
 
104
- // Inject global styles into the app, you may want to do this as an escape hatch
110
+ // Inject global styles into the app, you may want to do this as an escape hatch.
111
+ // Accepts the same style object shape as style() (including nested / at-rules).
105
112
  export declare function useInjectGlobalStyles(
106
113
  selector: string,
107
- cssProperties: BaseCSSProperties & CustomProperties,
114
+ cssProperties: CSSProperties,
108
115
  deps: DependencyList,
109
116
  ): void
110
117
 
@@ -132,5 +139,5 @@ export declare function createInMemoryStyleApi(): InMemoryStyleApi
132
139
 
133
140
  ## TODO
134
141
 
135
- - [ ] E2E tests with Playwright
142
+ - [x] E2E tests with Playwright
136
143
  - [ ] Consider exporting a simple `styled` alternative
package/dist/cssVar.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import type CSS from "csstype";
2
1
  import { Destructor } from "./destructors";
3
2
  export type CSSVar = `var(--${string})`;
4
3
  export type VariablePrimitive = string | number;
5
- export type VariableCondition = `${CSS.AtRules}${string}`;
4
+ export type VariableCondition = string;
6
5
  export type ConditionalVariableValue<T extends VariablePrimitive = VariablePrimitive> = {
7
6
  default: T;
8
7
  } & Partial<Record<VariableCondition, T>>;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export { CSSProperties, InMemoryStyleApi, PurseProvider, StyleApi, StyleArgument, StyleElement, createInMemoryStyleApi, style, useInjectGlobalStyles, useStyles, } from "./purse";
2
- export { AnyVariableGroup, CSSVar, ConditionalVariableValue, VariableCondition, VariableDefinition, VariableGroup, VariableGroupMetadata, VariablePrimitive, defineVars, getVariableGroupMetadata, } from "./cssVar";
1
+ export { PurseProvider, createInMemoryStyleApi, style, useInjectGlobalStyles, useStyles, } from "./purse";
2
+ export type { CSSProperties, InMemoryStyleApi, StyleApi, StyleArgument, StyleElement, } from "./purse";
3
+ export { defineVars, getVariableGroupMetadata, } from "./cssVar";
4
+ export type { AnyVariableGroup, CSSVar, ConditionalVariableValue, VariableCondition, VariableDefinition, VariableGroup, VariableGroupMetadata, VariablePrimitive, } from "./cssVar";
package/dist/index.js CHANGED
@@ -41,7 +41,7 @@ function toPhash(h, x) {
41
41
  var hashObject = (value) => toAlphabeticName(toPhash(5381, JSON.stringify(value)) >>> 0);
42
42
 
43
43
  // src/cssVar.ts
44
- var VARIABLE_GROUP_META = Symbol("purse.variableGroup");
44
+ var VARIABLE_GROUP_META = /* @__PURE__ */ Symbol("purse.variableGroup");
45
45
  var registeredGroups = /* @__PURE__ */ new Map();
46
46
  var listeners = /* @__PURE__ */ new Set();
47
47
  function normalizeDefinition(value) {
@@ -100,8 +100,9 @@ function compileVariableGroupRules(metadata) {
100
100
  }
101
101
  const rules = [`:root{${rootDeclarations}}`];
102
102
  for (const condition of [...declarationsByCondition.keys()].sort()) {
103
+ const declarations = declarationsByCondition.get(condition);
103
104
  rules.push(
104
- `${condition}{:root{${declarationsByCondition.get(condition)}}}`
105
+ condition.startsWith("@") ? `${condition}{:root{${declarations}}}` : `${condition}{${declarations}}`
105
106
  );
106
107
  }
107
108
  return rules;
@@ -254,7 +255,7 @@ function isUnitlessNumberProperty(kebabProperty) {
254
255
  return false;
255
256
  }
256
257
  var PurseContext = createContext(void 0);
257
- var __style__ = Symbol("style-element");
258
+ var __style__ = /* @__PURE__ */ Symbol("style-element");
258
259
  function isStyleElement(o) {
259
260
  return o != null && typeof o === "object" && "__style__" in o && o["__style__"] === __style__;
260
261
  }
@@ -489,30 +490,52 @@ function groupCSSProperties(properties) {
489
490
  }
490
491
  return styleDeclarationsBySelector;
491
492
  }
492
- function compileCSS(properties) {
493
+ function rulesFromCompiledGroups(compiledStyleDeclarationsByGroup, targetSelector) {
494
+ return entries(compiledStyleDeclarationsByGroup).map(([group, styles]) => {
495
+ if (group === "") {
496
+ return `${targetSelector}{${styles}}`;
497
+ } else if (group.startsWith("@")) {
498
+ return `${group}{${targetSelector}{${styles}}}`;
499
+ } else {
500
+ const selector = group.replace(/&/g, targetSelector);
501
+ return `${selector}{${styles}}`;
502
+ }
503
+ });
504
+ }
505
+ function compileStyleDeclarationGroups(properties) {
493
506
  if (isObjectEmpty(properties)) {
494
507
  return void 0;
495
508
  }
496
- const groupedCSSProperties = groupCSSProperties(properties);
497
- const compiledStyleDeclarationsByGroup = mapValues(
498
- groupedCSSProperties,
499
- compileDeclarations
509
+ return mapValues(
510
+ groupCSSProperties(properties),
511
+ (declarations) => compileDeclarations(declarations ?? {})
500
512
  );
513
+ }
514
+ function compileCSSPropertiesToRules(properties, targetSelector) {
515
+ const compiledStyleDeclarationsByGroup = compileStyleDeclarationGroups(properties);
516
+ if (!compiledStyleDeclarationsByGroup) {
517
+ return [];
518
+ }
519
+ return rulesFromCompiledGroups(
520
+ compiledStyleDeclarationsByGroup,
521
+ targetSelector
522
+ );
523
+ }
524
+ function compileCSS(properties) {
525
+ const compiledStyleDeclarationsByGroup = compileStyleDeclarationGroups(properties);
526
+ if (!compiledStyleDeclarationsByGroup) {
527
+ return void 0;
528
+ }
501
529
  const className = hashObject(compiledStyleDeclarationsByGroup);
502
- const styleRules = entries(compiledStyleDeclarationsByGroup).map(
503
- ([group, styles]) => {
504
- if (group === "") {
505
- return `.${className}{${styles}}`;
506
- } else if (group.startsWith("@")) {
507
- return `${group}{.${className}{${styles}}}`;
508
- } else {
509
- const selector = group.replace(/&/g, `.${className}`);
510
- return `${selector}{${styles}}`;
511
- }
512
- }
530
+ const styleRules = rulesFromCompiledGroups(
531
+ compiledStyleDeclarationsByGroup,
532
+ `.${className}`
513
533
  );
514
534
  return { styleRules, className };
515
535
  }
536
+ function compileGlobalStyleRules(selector, cssProperties) {
537
+ return compileCSSPropertiesToRules(cssProperties, selector);
538
+ }
516
539
  function style(...styleElementsOrCSS) {
517
540
  let composed = [];
518
541
  let cssPropertyGroups = [];
@@ -540,8 +563,10 @@ function style(...styleElementsOrCSS) {
540
563
  function useInjectGlobalStyles(selector, cssProperties, deps) {
541
564
  const styleApi = useRequiredContext(PurseContext);
542
565
  useLayoutEffect(() => {
543
- const styleRule = `${selector}{${compileDeclarations(cssProperties)}}`;
544
- const destructor = styleApi.addGlobalStyle(styleRule);
566
+ const styleRules = compileGlobalStyleRules(selector, cssProperties);
567
+ const destructor = joinDestructors(
568
+ styleRules.map((styleRule) => styleApi.addGlobalStyle(styleRule))
569
+ );
545
570
  return destructor;
546
571
  }, deps);
547
572
  }
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/purse.tsx", "../src/clsx.ts", "../src/destructors.ts", "../src/hashObject.ts", "../src/cssVar.ts", "../src/hyphenateStyleName.ts", "../src/useRequiredContext.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["rule", "styleRules", "value", "composed"]
6
6
  }
package/dist/purse.d.ts CHANGED
@@ -39,8 +39,10 @@ export declare function createInMemoryStyleApi(): InMemoryStyleApi;
39
39
  export declare function PurseProvider(props: {
40
40
  children?: React.ReactNode;
41
41
  }): import("react/jsx-runtime").JSX.Element;
42
+ /** Compile a style object against a selector (same nesting rules as `style()`). */
43
+ export declare function compileGlobalStyleRules(selector: string, cssProperties: CSSProperties): StyleRule[];
42
44
  export type StyleArgument = CSSProperties | StyleElement | false | null | undefined;
43
45
  export declare function style(...styleElementsOrCSS: StyleArgument[]): StyleElement;
44
- export declare function useInjectGlobalStyles(selector: string, cssProperties: Declarations, deps: DependencyList): void;
46
+ export declare function useInjectGlobalStyles(selector: string, cssProperties: CSSProperties, deps: DependencyList): void;
45
47
  export declare function useStyles(...styleElementsOrCSS: StyleArgument[]): string;
46
48
  export {};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "purse-styles",
3
3
  "type": "module",
4
4
  "main": "./dist/index.js",
5
- "version": "0.2.0",
5
+ "version": "0.2.2",
6
6
  "author": "Tanishq Kancharla <tanishqkancharla3@gmail.com>",
7
7
  "description": "A basic styling solution for web apps with an emphasis on simplicity and purity.",
8
8
  "keywords": [],
@@ -18,20 +18,28 @@
18
18
  },
19
19
  "scripts": {
20
20
  "build": "tsx scripts/build.ts",
21
- "check": "tsc --noEmit",
21
+ "check": "tsc --noEmit && tsc -p e2e/tsconfig.json",
22
22
  "test": "vitest",
23
+ "test:run": "vitest run",
24
+ "test:e2e": "vitest run --project browser",
23
25
  "release": "npm run build; npm publish",
24
26
  "bundlesize": "esbuild ./dist/index.js --minify --outfile=bundled; rm bundled"
25
27
  },
26
28
  "devDependencies": {
27
29
  "@types/lodash-es": "^4.17.12",
28
- "@types/node": "^20.14.2",
30
+ "@types/node": "^22.20.1",
29
31
  "@types/react": "^18.3.3",
32
+ "@types/react-dom": "^18.3.7",
33
+ "@vitejs/plugin-react": "^6.0.3",
34
+ "@vitest/browser-playwright": "^4.1.10",
30
35
  "ansi-colors": "^4.1.3",
31
- "esbuild": "^0.21.5",
32
- "tsx": "^4.15.5",
36
+ "esbuild": "^0.28.1",
37
+ "playwright": "^1.61.1",
38
+ "react-dom": "^18.3.1",
39
+ "tsx": "^4.23.1",
33
40
  "typescript": "^5.4.5",
34
- "vitest": "^1.6.0"
41
+ "vitest": "^4.1.10",
42
+ "vitest-browser-react": "^2.2.0"
35
43
  },
36
44
  "peerDependencies": {
37
45
  "react": "^18.3.1"
package/src/cssVar.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type CSS from "csstype"
2
1
  import { Destructor, joinDestructors } from "./destructors"
3
2
  import { hashObject } from "./hashObject"
4
3
 
@@ -6,7 +5,7 @@ export type CSSVar = `var(--${string})`
6
5
 
7
6
  export type VariablePrimitive = string | number
8
7
 
9
- export type VariableCondition = `${CSS.AtRules}${string}`
8
+ export type VariableCondition = string
10
9
 
11
10
  export type ConditionalVariableValue<
12
11
  T extends VariablePrimitive = VariablePrimitive,
@@ -123,8 +122,11 @@ export function compileVariableGroupRules(
123
122
 
124
123
  const rules = [`:root{${rootDeclarations}}`]
125
124
  for (const condition of [...declarationsByCondition.keys()].sort()) {
125
+ const declarations = declarationsByCondition.get(condition)
126
126
  rules.push(
127
- `${condition}{:root{${declarationsByCondition.get(condition)}}}`,
127
+ condition.startsWith("@")
128
+ ? `${condition}{:root{${declarations}}}`
129
+ : `${condition}{${declarations}}`,
128
130
  )
129
131
  }
130
132
  return rules
package/src/index.ts CHANGED
@@ -1,16 +1,22 @@
1
1
  export {
2
- CSSProperties,
3
- InMemoryStyleApi,
4
2
  PurseProvider,
5
- StyleApi,
6
- StyleArgument,
7
- StyleElement,
8
3
  createInMemoryStyleApi,
9
4
  style,
10
5
  useInjectGlobalStyles,
11
6
  useStyles,
12
7
  } from "./purse"
8
+ export type {
9
+ CSSProperties,
10
+ InMemoryStyleApi,
11
+ StyleApi,
12
+ StyleArgument,
13
+ StyleElement,
14
+ } from "./purse"
13
15
  export {
16
+ defineVars,
17
+ getVariableGroupMetadata,
18
+ } from "./cssVar"
19
+ export type {
14
20
  AnyVariableGroup,
15
21
  CSSVar,
16
22
  ConditionalVariableValue,
@@ -19,6 +25,4 @@ export {
19
25
  VariableGroup,
20
26
  VariableGroupMetadata,
21
27
  VariablePrimitive,
22
- defineVars,
23
- getVariableGroupMetadata,
24
28
  } from "./cssVar"
package/src/purse.test.ts CHANGED
@@ -1,7 +1,13 @@
1
1
  import assert from "assert"
2
2
  import { expect } from "extendable-expect"
3
- import { describe, it } from "vitest"
4
- import { InMemoryStyleApi, createInMemoryStyleApi, style } from "./purse"
3
+ import { describe, expectTypeOf, it } from "vitest"
4
+ import {
5
+ CSSProperties,
6
+ InMemoryStyleApi,
7
+ compileGlobalStyleRules,
8
+ createInMemoryStyleApi,
9
+ style,
10
+ } from "./purse"
5
11
 
6
12
  describe("Purse", () => {
7
13
  const expectStyles = expect.extend({
@@ -147,6 +153,35 @@ describe("Purse", () => {
147
153
  )
148
154
  })
149
155
 
156
+ it("Compiles global style objects against a selector", () => {
157
+ expect(
158
+ compileGlobalStyleRules("body", {
159
+ margin: 0,
160
+ "& a": {
161
+ color: "blue",
162
+ },
163
+ "@media (prefers-color-scheme: dark)": {
164
+ backgroundColor: "black",
165
+ },
166
+ }),
167
+ ).toEqual([
168
+ "body{margin:0px;}",
169
+ "body a{color:blue;}",
170
+ "@media (prefers-color-scheme: dark){body{background-color:black;}}",
171
+ ])
172
+ })
173
+
174
+ it("Accepts nested style objects for useInjectGlobalStyles", () => {
175
+ const cssProperties = {
176
+ margin: 0,
177
+ "&:focus-visible": {
178
+ outline: "2px solid blue",
179
+ },
180
+ } satisfies CSSProperties
181
+
182
+ expectTypeOf(cssProperties).toExtend<CSSProperties>()
183
+ })
184
+
150
185
  it.skip("Inserts into given style element correctly", () => {})
151
186
  it.skip("Works if you pass style rule or object to useStyles", () => {})
152
187
  it.skip("Works if you pass multiple style rule or object to useStyles", () => {})
package/src/purse.tsx CHANGED
@@ -487,38 +487,77 @@ function groupCSSProperties(properties: CSSProperties): CSSPropertiesGroup {
487
487
  return styleDeclarationsBySelector as CSSPropertiesGroup
488
488
  }
489
489
 
490
- function compileCSS(properties: CSSProperties): StyleElement["owned"] {
490
+ function rulesFromCompiledGroups(
491
+ compiledStyleDeclarationsByGroup: Record<string, string>,
492
+ targetSelector: string,
493
+ ): StyleRule[] {
494
+ return entries(compiledStyleDeclarationsByGroup).map(([group, styles]) => {
495
+ if (group === "") {
496
+ // Base group
497
+ return `${targetSelector}{${styles}}`
498
+ } else if (group.startsWith("@")) {
499
+ // At rules
500
+ return `${group}{${targetSelector}{${styles}}}`
501
+ } else {
502
+ // Nested Rules
503
+ const selector = group.replace(/&/g, targetSelector)
504
+ return `${selector}{${styles}}`
505
+ }
506
+ })
507
+ }
508
+
509
+ function compileStyleDeclarationGroups(
510
+ properties: CSSProperties,
511
+ ): Record<string, string> | undefined {
491
512
  if (isObjectEmpty(properties)) {
492
513
  return undefined
493
514
  }
494
515
 
495
- const groupedCSSProperties = groupCSSProperties(properties)
516
+ return mapValues(groupCSSProperties(properties), (declarations) =>
517
+ compileDeclarations(declarations ?? {}),
518
+ )
519
+ }
496
520
 
497
- const compiledStyleDeclarationsByGroup = mapValues(
498
- groupedCSSProperties,
499
- compileDeclarations,
521
+ function compileCSSPropertiesToRules(
522
+ properties: CSSProperties,
523
+ targetSelector: string,
524
+ ): StyleRule[] {
525
+ const compiledStyleDeclarationsByGroup =
526
+ compileStyleDeclarationGroups(properties)
527
+ if (!compiledStyleDeclarationsByGroup) {
528
+ return []
529
+ }
530
+
531
+ return rulesFromCompiledGroups(
532
+ compiledStyleDeclarationsByGroup,
533
+ targetSelector,
500
534
  )
535
+ }
536
+
537
+ function compileCSS(properties: CSSProperties): StyleElement["owned"] {
538
+ const compiledStyleDeclarationsByGroup =
539
+ compileStyleDeclarationGroups(properties)
540
+ if (!compiledStyleDeclarationsByGroup) {
541
+ return undefined
542
+ }
501
543
 
502
544
  const className = hashObject(compiledStyleDeclarationsByGroup)
503
- const styleRules: StyleRule[] = entries(compiledStyleDeclarationsByGroup).map(
504
- ([group, styles]) => {
505
- if (group === "") {
506
- // Base group
507
- return `.${className}{${styles}}`
508
- } else if (group.startsWith("@")) {
509
- // At rules
510
- return `${group}{.${className}{${styles}}}`
511
- } else {
512
- // Nested Rules
513
- const selector = group.replace(/&/g, `.${className}`)
514
- return `${selector}{${styles}}`
515
- }
516
- },
545
+ const styleRules = rulesFromCompiledGroups(
546
+ compiledStyleDeclarationsByGroup,
547
+ `.${className}`,
517
548
  )
518
549
 
519
550
  return { styleRules, className }
520
551
  }
521
552
 
553
+ /** Compile a style object against a selector (same nesting rules as `style()`). */
554
+ export function compileGlobalStyleRules(
555
+ selector: string,
556
+ cssProperties: CSSProperties,
557
+ ): StyleRule[] {
558
+ return compileCSSPropertiesToRules(cssProperties, selector)
559
+ }
560
+
522
561
  export type StyleArgument = CSSProperties | StyleElement | false | null | undefined
523
562
 
524
563
  export function style(...styleElementsOrCSS: StyleArgument[]): StyleElement {
@@ -559,14 +598,16 @@ function styleElementToRules({ owned, composed }: StyleElement): StyleRule[] {
559
598
 
560
599
  export function useInjectGlobalStyles(
561
600
  selector: string,
562
- cssProperties: Declarations,
601
+ cssProperties: CSSProperties,
563
602
  deps: DependencyList,
564
603
  ) {
565
604
  const styleApi = useRequiredContext(PurseContext)
566
605
 
567
606
  useLayoutEffect(() => {
568
- const styleRule = `${selector}{${compileDeclarations(cssProperties)}}`
569
- const destructor = styleApi.addGlobalStyle(styleRule)
607
+ const styleRules = compileGlobalStyleRules(selector, cssProperties)
608
+ const destructor = joinDestructors(
609
+ styleRules.map((styleRule) => styleApi.addGlobalStyle(styleRule)),
610
+ )
570
611
 
571
612
  return destructor
572
613
  }, deps)