@forsyteco/product-ui 0.0.3 → 0.0.4

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 (37) hide show
  1. package/README.md +11 -2
  2. package/dist/icon-button/icon-button.d.ts +34 -0
  3. package/dist/icon-button/icon-button.d.ts.map +1 -0
  4. package/dist/icon-button/index.d.ts +4 -0
  5. package/dist/icon-button/index.d.ts.map +1 -0
  6. package/dist/index.cjs +5 -5
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.mjs +4825 -4167
  10. package/dist/relative-time/index.d.ts +3 -0
  11. package/dist/relative-time/index.d.ts.map +1 -0
  12. package/dist/relative-time/relative-time.d.ts +7 -0
  13. package/dist/relative-time/relative-time.d.ts.map +1 -0
  14. package/dist/select/select.d.ts.map +1 -1
  15. package/dist/theme/theme-provider.d.ts.map +1 -1
  16. package/dist/utils/create-component.d.ts +5 -0
  17. package/dist/utils/create-component.d.ts.map +1 -0
  18. package/dist/utils/types/component-props.d.ts +9 -0
  19. package/dist/utils/types/component-props.d.ts.map +1 -0
  20. package/fonts/plus-jakart-sans-medium.woff2 +0 -0
  21. package/fonts/plus-jakarta-sans-[wght].woff2 +0 -0
  22. package/fonts/plus-jakarta-sans-bold-italic.woff2 +0 -0
  23. package/fonts/plus-jakarta-sans-bold.woff2 +0 -0
  24. package/fonts/plus-jakarta-sans-extra-bold-italic.woff2 +0 -0
  25. package/fonts/plus-jakarta-sans-extra-bold.woff2 +0 -0
  26. package/fonts/plus-jakarta-sans-extra-light-italic.woff2 +0 -0
  27. package/fonts/plus-jakarta-sans-extra-light.woff2 +0 -0
  28. package/fonts/plus-jakarta-sans-italic-[wght].woff2 +0 -0
  29. package/fonts/plus-jakarta-sans-italic.woff2 +0 -0
  30. package/fonts/plus-jakarta-sans-light-italic.woff2 +0 -0
  31. package/fonts/plus-jakarta-sans-light.woff2 +0 -0
  32. package/fonts/plus-jakarta-sans-medium-italic.woff2 +0 -0
  33. package/fonts/plus-jakarta-sans-regular.woff2 +0 -0
  34. package/fonts/plus-jakarta-sans-semi-bold-italic.woff2 +0 -0
  35. package/fonts/plus-jakarta-sans-semi-bold.woff2 +0 -0
  36. package/package.json +10 -4
  37. package/styles.css +179 -0
@@ -0,0 +1,3 @@
1
+ export { default } from './relative-time';
2
+ export type { RelativeTimeProps } from './relative-time';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relative-time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { RelativeTimeElement } from '@github/relative-time-element';
2
+ import { ComponentProps } from '../utils/types/component-props';
3
+ declare const RelativeTimeComponent: import('@lit-labs/react').ReactWebComponent<RelativeTimeElement, {}>;
4
+ declare function RelativeTime({ date, datetime, children, noTitle, ...props }: RelativeTimeProps): import("react").JSX.Element;
5
+ export type RelativeTimeProps = ComponentProps<typeof RelativeTimeComponent>;
6
+ export default RelativeTime;
7
+ //# sourceMappingURL=relative-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../src/relative-time/relative-time.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAGpE,QAAA,MAAM,qBAAqB,sEAAwD,CAAA;AAGnF,iBAAS,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAOvF;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAC5E,eAAe,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,cAAc;;8EAanB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IAC1H,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,iBAAS,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,+BAkBhF;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,cAAc;;8EAanB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IAC1H,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,iBAAS,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,+BA8BhF;AAED,eAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-provider.d.ts","sourceRoot":"","sources":["../../src/theme/theme-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,OAAO,CAAC;AAEvF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,YAAY,wDAA0D,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,YAAuB,EACvB,WAAsB,EACtB,UAA8B,GAC/B,EAAE,kBAAkB,+BAoGpB;AAED,eAAe,aAAa,CAAC;AAE7B,wBAAgB,QAAQ,sBAIvB"}
1
+ {"version":3,"file":"theme-provider.d.ts","sourceRoot":"","sources":["../../src/theme/theme-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkD,MAAM,OAAO,CAAC;AAEvF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,YAAY,wDAA0D,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,YAAuB,EACvB,WAAsB,EACtB,UAA8B,GAC/B,EAAE,kBAAkB,+BAiGpB;AAED,eAAe,aAAa,CAAC;AAE7B,wBAAgB,QAAQ,sBAIvB"}
@@ -0,0 +1,5 @@
1
+ import { EventName } from '@lit-labs/react';
2
+ type EventNames = Record<string, EventName | string>;
3
+ export declare const createComponent: <I extends HTMLElement, E extends EventNames = {}>(elementClass: new () => I, tagName: string, events?: E | undefined) => import('@lit-labs/react').ReactWebComponent<I, E>;
4
+ export default createComponent;
5
+ //# sourceMappingURL=create-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-component.d.ts","sourceRoot":"","sources":["../../src/utils/create-component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAG9C,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;AAGpD,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,UAAU,GAAG,EAAE,EAC9E,cAAc,UAAU,CAAC,EACzB,SAAS,MAAM,EACf,SAAQ,CAAC,GAAG,SAAqB,sDAYlC,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Extract a component's props
3
+ *
4
+ * Source: https://react-typescript-cheatsheet.netlify.app/docs/advanced/patterns_by_usecase#wrappingmirroring-a-component
5
+ *
6
+ * @example ComponentProps<typeof MyComponent>
7
+ */
8
+ export type ComponentProps<T> = T extends React.ComponentType<React.PropsWithChildren<infer Props>> ? (Props extends object ? Props : never) : never;
9
+ //# sourceMappingURL=component-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-props.d.ts","sourceRoot":"","sources":["../../../src/utils/types/component-props.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAC1B,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forsyteco/product-ui",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "An implementation of Forsyte's product design system using React 🐝",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -16,10 +16,14 @@
16
16
  "default": "./dist/index.cjs"
17
17
  }
18
18
  },
19
+ "./styles.css": "./styles.css",
20
+ "./fonts/*": "./fonts/*",
19
21
  "./tailwind": "./tailwind.config.js"
20
22
  },
21
23
  "files": [
22
24
  "dist",
25
+ "styles.css",
26
+ "fonts",
23
27
  "tailwind.config.js",
24
28
  "README.md"
25
29
  ],
@@ -36,7 +40,9 @@
36
40
  "author": "etiCloud Ltd",
37
41
  "license": "MIT",
38
42
  "dependencies": {
43
+ "@github/relative-time-element": "^5.0.0",
39
44
  "@headlessui/react": "^2.2.9",
45
+ "@lit-labs/react": "^2.1.3",
40
46
  "@tailwindcss/vite": "^4.1.17",
41
47
  "boring-avatars": "^2.0.4",
42
48
  "class-variance-authority": "^0.7.1",
@@ -51,8 +57,8 @@
51
57
  "tailwind-merge": "^3.4.0"
52
58
  },
53
59
  "devDependencies": {
54
- "@storybook/addon-vitest": "^10.1.4",
55
- "@storybook/react-vite": "^10.1.4",
60
+ "@storybook/addon-vitest": "^10.1.9",
61
+ "@storybook/react-vite": "^10.1.9",
56
62
  "@testing-library/jest-dom": "^6.9.1",
57
63
  "@testing-library/react": "^16.3.0",
58
64
  "@types/react": "19",
@@ -62,7 +68,7 @@
62
68
  "@vitest/ui": "^4.0.15",
63
69
  "jsdom": "^27.2.0",
64
70
  "playwright": "^1.57.0",
65
- "storybook": "^10.1.4",
71
+ "storybook": "^10.1.9",
66
72
  "tailwindcss": "^4.1.17",
67
73
  "vite": "^7.2.6",
68
74
  "vite-plugin-dts": "^4.3.0",
package/styles.css ADDED
@@ -0,0 +1,179 @@
1
+ @import "tailwindcss";
2
+
3
+ @custom-variant dark (&:where([data-colour-mode="dark"]));
4
+
5
+ @font-face {
6
+ font-family: "Plus Jakarta Sans";
7
+ src: url("./fonts/plus-jakarta-sans-[wght].woff2") format("woff2");
8
+ font-weight: 200 800;
9
+ font-style: normal;
10
+ font-display: swap;
11
+ }
12
+ @font-face {
13
+ font-family: "Plus Jakarta Sans";
14
+ src: url("./fonts/plus-jakarta-sans-italic-[wght].woff2") format("woff2");
15
+ font-weight: 200 800;
16
+ font-style: italic;
17
+ font-display: swap;
18
+ }
19
+
20
+ @theme {
21
+ --font-sans: "Plus Jakarta Sans", ui-sans-serif, system-ui, sans-serif;
22
+
23
+ --spacing: 0.25rem;
24
+
25
+ --text-xs: 0.75rem; /* 12px */
26
+ --text-xs-line-height: 1rem;
27
+
28
+ --text-sm: 0.8125rem; /* 13px */
29
+ --text-sm-line-height: 1.125rem;
30
+
31
+ --text-base: 0.875rem; /* 14px */
32
+ --text-base-line-height: 1.25rem;
33
+
34
+ --text-lg: 1rem; /* 16px */
35
+ --text-lg-line-height: 1.5rem;
36
+
37
+ --text-xl: 1.125rem; /* 18px */
38
+ --text-xl-line-height: 1.75rem;
39
+
40
+ --text-2xl: 1.25rem; /* 20px */
41
+ --text-2xl-line-height: 1.75rem;
42
+
43
+ --text-3xl: 1.563rem; /* 25px */
44
+ --text-3xl-line-height: 2rem;
45
+
46
+ --text-4xl: 1.953rem; /* 31px */
47
+ --text-4xl-line-height: 2.25rem;
48
+
49
+ --color-background: rgb(var(--background));
50
+ --color-foreground: rgb(var(--foreground));
51
+
52
+ --color-muted: rgb(var(--muted));
53
+ --color-muted-foreground: rgb(var(--muted-foreground));
54
+
55
+ --color-border: rgb(var(--border));
56
+ --color-input: rgb(var(--input));
57
+
58
+ --color-accent: rgb(var(--accent));
59
+ --color-accent-foreground: rgb(var(--accent-foreground));
60
+
61
+ --color-primary: rgb(var(--primary));
62
+ --color-primary-foreground: rgb(var(--primary-foreground));
63
+ --color-secondary: rgb(var(--secondary));
64
+ --color-secondary-foreground: rgb(var(--secondary-foreground));
65
+
66
+ --color-destructive: rgb(var(--destructive));
67
+ --color-destructive-foreground: rgb(var(--destructive-foreground));
68
+
69
+ --color-ring: rgb(var(--ring));
70
+
71
+ --color-card: rgb(var(--card));
72
+ --color-card-foreground: rgb(var(--card-foreground));
73
+ --color-popover: rgb(var(--popover));
74
+ --color-popover-foreground: rgb(var(--popover-foreground));
75
+
76
+ --color-spinner-primary: rgb(var(--accent));
77
+ --color-spinner-secondary: rgb(var(--neutral-200));
78
+ --color-spinner-tertiary: rgb(var(--brand-black));
79
+ }
80
+
81
+ :root {
82
+ color-scheme: light;
83
+
84
+ --brand-yellow: 255 222 19;
85
+ --brand-black: 0 0 0;
86
+ --brand-white: 255 255 255;
87
+
88
+ --neutral-950: 28 28 28;
89
+ --neutral-900: 42 43 45;
90
+ --neutral-800: 57 61 65;
91
+ --neutral-700: 71 78 87;
92
+ --neutral-200: 179 192 209;
93
+ --neutral-100: 196 207 222;
94
+
95
+ --background: var(--brand-white);
96
+ --foreground: var(--brand-black);
97
+
98
+ --muted: 244 245 247;
99
+ --muted-foreground: var(--neutral-700);
100
+
101
+ --border: var(--neutral-200);
102
+ --input: var(--neutral-200);
103
+
104
+ --accent: var(--brand-yellow);
105
+ --accent-foreground: var(--brand-black);
106
+
107
+ --primary: var(--brand-black);
108
+ --primary-foreground: var(--brand-white);
109
+
110
+ --secondary: 244 245 247;
111
+ --secondary-foreground: var(--brand-black);
112
+
113
+ --destructive: 220 38 38;
114
+ --destructive-foreground: var(--brand-white);
115
+
116
+ --ring: var(--brand-black);
117
+
118
+ --card: var(--brand-white);
119
+ --card-foreground: var(--brand-black);
120
+
121
+ --popover: var(--brand-white);
122
+ --popover-foreground: var(--brand-black);
123
+ }
124
+
125
+ :root:where([data-colour-scheme="blue"]) {
126
+ --accent: 37 99 235;
127
+ --accent-foreground: 255 255 255;
128
+ }
129
+
130
+ :root:where([data-colour-mode="dark"]) {
131
+ color-scheme: dark;
132
+
133
+ --background: var(--neutral-950);
134
+ --foreground: var(--brand-white);
135
+
136
+ --muted: var(--neutral-900);
137
+ --muted-foreground: var(--neutral-200);
138
+
139
+ --border: var(--neutral-800);
140
+ --input: var(--neutral-800);
141
+
142
+ --primary: var(--brand-white);
143
+ --primary-foreground: var(--brand-black);
144
+
145
+ --secondary: var(--neutral-900);
146
+ --secondary-foreground: var(--brand-white);
147
+
148
+ --ring: var(--brand-white);
149
+
150
+ --card: var(--neutral-950);
151
+ --card-foreground: var(--brand-white);
152
+
153
+ --popover: var(--neutral-950);
154
+ --popover-foreground: var(--brand-white);
155
+ }
156
+
157
+ body {
158
+ background-color: rgb(var(--background));
159
+ color: rgb(var(--foreground));
160
+ font-size: var(--text-base);
161
+ line-height: var(--text-base-line-height);
162
+ }
163
+
164
+ @keyframes spinner-rotate {
165
+ to { transform: rotate(360deg); }
166
+ }
167
+ @keyframes spinner-dash {
168
+ 0% { stroke-dasharray: 1, 150; stroke-dashoffset: 0; }
169
+ 50% { stroke-dasharray: 90, 150; stroke-dashoffset: -35; }
170
+ 100% { stroke-dasharray: 1, 150; stroke-dashoffset: -124; }
171
+ }
172
+
173
+ @utility animate-spinner-rotate {
174
+ animation: spinner-rotate 1.5s linear infinite;
175
+ }
176
+
177
+ @utility animate-spinner-dash {
178
+ animation: spinner-dash 1.5s ease-in-out infinite;
179
+ }