@takeshape/purchase-order-chat 1.51.0-beta.1
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 +305 -0
- package/dist/pdf-CYwqEJpJ.js +20562 -0
- package/dist/pdf-CYwqEJpJ.js.map +1 -0
- package/dist/pdf.worker-eoyvlo7V.js +37634 -0
- package/dist/pdf.worker-eoyvlo7V.js.map +1 -0
- package/dist/purchase-order-chat-wrapper-D8d5NFc9.js +7899 -0
- package/dist/purchase-order-chat-wrapper-D8d5NFc9.js.map +1 -0
- package/dist/shadow.d.ts +1505 -0
- package/dist/shadow.js +58 -0
- package/dist/shadow.js.map +1 -0
- package/dist/sources.css +4 -0
- package/dist/tailwind.d.ts +1502 -0
- package/dist/tailwind.js +15 -0
- package/dist/tailwind.js.map +1 -0
- package/dist/testing.d.ts +456 -0
- package/dist/testing.js +610 -0
- package/dist/testing.js.map +1 -0
- package/dist/theme.css +75 -0
- package/dist/utilities.css +233 -0
- package/package.json +87 -0
package/dist/theme.css
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* Semantic color tokens for customer theming.
|
|
2
|
+
To re-skin the widget from outside the Shadow DOM, define --user-*
|
|
3
|
+
custom properties on :root (they inherit across shadow boundaries).
|
|
4
|
+
e.g. :root { --user-color-surface: #f0f0f0; } */
|
|
5
|
+
@theme {
|
|
6
|
+
/* ── Surfaces ── */
|
|
7
|
+
--color-surface: var(--user-color-surface, var(--color-white));
|
|
8
|
+
--color-surface-secondary: var(
|
|
9
|
+
--user-color-surface-secondary,
|
|
10
|
+
var(--color-zinc-50)
|
|
11
|
+
);
|
|
12
|
+
--color-surface-tertiary: var(
|
|
13
|
+
--user-color-surface-tertiary,
|
|
14
|
+
var(--color-zinc-100)
|
|
15
|
+
);
|
|
16
|
+
--color-surface-disabled: var(
|
|
17
|
+
--user-color-surface-disabled,
|
|
18
|
+
var(--color-zinc-200)
|
|
19
|
+
);
|
|
20
|
+
--color-surface-invert: var(
|
|
21
|
+
--user-color-surface-invert,
|
|
22
|
+
var(--color-zinc-900)
|
|
23
|
+
);
|
|
24
|
+
--color-surface-invert-hover: var(
|
|
25
|
+
--user-color-surface-invert-hover,
|
|
26
|
+
var(--color-zinc-800)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/* ── Text ── */
|
|
30
|
+
--color-text: var(--user-color-text, var(--color-zinc-900));
|
|
31
|
+
--color-text-secondary: var(
|
|
32
|
+
--user-color-text-secondary,
|
|
33
|
+
var(--color-zinc-600)
|
|
34
|
+
);
|
|
35
|
+
--color-text-tertiary: var(--user-color-text-tertiary, var(--color-zinc-500));
|
|
36
|
+
--color-text-quaternary: var(
|
|
37
|
+
--user-color-text-quaternary,
|
|
38
|
+
var(--color-zinc-400)
|
|
39
|
+
);
|
|
40
|
+
--color-text-invert: var(--user-color-text-invert, var(--color-white));
|
|
41
|
+
|
|
42
|
+
/* ── Borders ── */
|
|
43
|
+
--color-border: var(--user-color-border, var(--color-zinc-200));
|
|
44
|
+
--color-border-strong: var(--user-color-border-strong, var(--color-zinc-300));
|
|
45
|
+
--color-border-focus: var(--user-color-border-focus, var(--color-zinc-900));
|
|
46
|
+
|
|
47
|
+
/* ── Status: Error ── */
|
|
48
|
+
--color-error-bg: var(--user-color-error-bg, var(--color-red-50));
|
|
49
|
+
--color-error: var(--user-color-error, var(--color-red-500));
|
|
50
|
+
--color-error-text: var(--user-color-error-text, var(--color-red-700));
|
|
51
|
+
|
|
52
|
+
/* ── Status: Warning ── */
|
|
53
|
+
--color-warning-bg: var(--user-color-warning-bg, var(--color-amber-50));
|
|
54
|
+
--color-warning: var(--user-color-warning, var(--color-amber-500));
|
|
55
|
+
--color-warning-text: var(--user-color-warning-text, var(--color-amber-700));
|
|
56
|
+
|
|
57
|
+
/* ── Status: Success ── */
|
|
58
|
+
--color-success-bg: var(--user-color-success-bg, var(--color-emerald-50));
|
|
59
|
+
--color-success: var(--user-color-success, var(--color-green-500));
|
|
60
|
+
--color-success-text: var(
|
|
61
|
+
--user-color-success-text,
|
|
62
|
+
var(--color-emerald-700)
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
/* ── Shadows ── */
|
|
66
|
+
--shadow-button: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
67
|
+
--shadow-button-hover: 0 6px 16px rgba(0, 0, 0, 0.2);
|
|
68
|
+
--shadow-upload:
|
|
69
|
+
0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -2px rgba(0, 0, 0, 0.04);
|
|
70
|
+
--shadow-upload-active:
|
|
71
|
+
0 12px 24px -4px rgba(0, 0, 0, 0.12), 0 4px 8px -2px rgba(0, 0, 0, 0.08);
|
|
72
|
+
--shadow-preview:
|
|
73
|
+
0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
|
|
74
|
+
--shadow-step: 0 2px 6px rgba(0, 0, 0, 0.15);
|
|
75
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
@utility upload-step {
|
|
2
|
+
transition: background-color 0.2s ease;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
@keyframes fade-in-up {
|
|
6
|
+
from {
|
|
7
|
+
opacity: 0;
|
|
8
|
+
transform: translateY(10px);
|
|
9
|
+
}
|
|
10
|
+
to {
|
|
11
|
+
opacity: 1;
|
|
12
|
+
transform: translateY(0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@utility animate-fade-in-up {
|
|
17
|
+
animation: fade-in-up 0.5s ease-out forwards;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@keyframes icon-bounce {
|
|
21
|
+
0%,
|
|
22
|
+
100% {
|
|
23
|
+
transform: translateY(0);
|
|
24
|
+
}
|
|
25
|
+
50% {
|
|
26
|
+
transform: translateY(-8px);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@utility animate-icon-bounce {
|
|
31
|
+
animation: icon-bounce 0.6s ease infinite;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@keyframes fade-in-scale {
|
|
35
|
+
from {
|
|
36
|
+
opacity: 0;
|
|
37
|
+
transform: scale(0.96);
|
|
38
|
+
}
|
|
39
|
+
to {
|
|
40
|
+
opacity: 1;
|
|
41
|
+
transform: scale(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@utility animate-fade-in-scale {
|
|
46
|
+
animation: fade-in-scale 0.45s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@keyframes step-pulse {
|
|
50
|
+
0% {
|
|
51
|
+
transform: scale(1);
|
|
52
|
+
}
|
|
53
|
+
50% {
|
|
54
|
+
transform: scale(1.12);
|
|
55
|
+
}
|
|
56
|
+
100% {
|
|
57
|
+
transform: scale(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@utility animate-step-pulse {
|
|
62
|
+
animation: step-pulse 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@keyframes shimmer {
|
|
66
|
+
0% {
|
|
67
|
+
background-position: 200% 0;
|
|
68
|
+
}
|
|
69
|
+
100% {
|
|
70
|
+
background-position: -200% 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@keyframes text-shimmer {
|
|
75
|
+
0% {
|
|
76
|
+
background-position: 100% 0;
|
|
77
|
+
}
|
|
78
|
+
100% {
|
|
79
|
+
background-position: -100% 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@utility animate-text-shimmer {
|
|
84
|
+
--tw-text-shimmer-base: var(--color-text-quaternary);
|
|
85
|
+
--tw-text-shimmer-highlight: var(--color-text);
|
|
86
|
+
background: linear-gradient(
|
|
87
|
+
90deg,
|
|
88
|
+
var(--tw-text-shimmer-base) 0%,
|
|
89
|
+
var(--tw-text-shimmer-base) 35%,
|
|
90
|
+
var(--tw-text-shimmer-highlight) 50%,
|
|
91
|
+
var(--tw-text-shimmer-base) 65%,
|
|
92
|
+
var(--tw-text-shimmer-base) 100%
|
|
93
|
+
);
|
|
94
|
+
background-size: 200% 100%;
|
|
95
|
+
background-clip: text;
|
|
96
|
+
-webkit-background-clip: text;
|
|
97
|
+
-webkit-text-fill-color: transparent;
|
|
98
|
+
animation:
|
|
99
|
+
ticker-enter 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
|
|
100
|
+
text-shimmer 2.5s ease-in-out 0.2s infinite;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@utility animate-shimmer {
|
|
104
|
+
background: linear-gradient(
|
|
105
|
+
90deg,
|
|
106
|
+
var(--color-surface-disabled) 25%,
|
|
107
|
+
var(--color-surface-tertiary) 50%,
|
|
108
|
+
var(--color-surface-disabled) 75%
|
|
109
|
+
);
|
|
110
|
+
background-size: 200% 100%;
|
|
111
|
+
animation: shimmer 1.5s ease-in-out infinite;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@keyframes icon-scan {
|
|
115
|
+
0%,
|
|
116
|
+
100% {
|
|
117
|
+
transform: scale(1);
|
|
118
|
+
opacity: 1;
|
|
119
|
+
}
|
|
120
|
+
50% {
|
|
121
|
+
transform: scale(1.1);
|
|
122
|
+
opacity: 0.7;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@utility animate-icon-scan {
|
|
127
|
+
animation: icon-scan 2s ease-in-out infinite;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@keyframes item-slide-in {
|
|
131
|
+
from {
|
|
132
|
+
opacity: 0;
|
|
133
|
+
transform: translateX(-12px);
|
|
134
|
+
}
|
|
135
|
+
to {
|
|
136
|
+
opacity: 1;
|
|
137
|
+
transform: translateX(0);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@utility animate-item-slide-in {
|
|
142
|
+
animation: item-slide-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@keyframes ticker-enter {
|
|
146
|
+
from {
|
|
147
|
+
opacity: 0;
|
|
148
|
+
transform: translateY(8px);
|
|
149
|
+
}
|
|
150
|
+
to {
|
|
151
|
+
opacity: 1;
|
|
152
|
+
transform: translateY(0);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@utility animate-ticker-enter {
|
|
157
|
+
animation: ticker-enter 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Elevate the Shadow DOM host stacking context when the modal is open,
|
|
161
|
+
so it appears above the host page's navigation and other elements. */
|
|
162
|
+
:host:has([data-state="expanded"]) {
|
|
163
|
+
position: fixed;
|
|
164
|
+
inset: 0;
|
|
165
|
+
z-index: 2147483647;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@keyframes modal-backdrop-in {
|
|
170
|
+
from {
|
|
171
|
+
opacity: 0;
|
|
172
|
+
}
|
|
173
|
+
to {
|
|
174
|
+
opacity: 1;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@keyframes modal-backdrop-out {
|
|
179
|
+
from {
|
|
180
|
+
opacity: 1;
|
|
181
|
+
}
|
|
182
|
+
to {
|
|
183
|
+
opacity: 0;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
@keyframes modal-content-in {
|
|
188
|
+
from {
|
|
189
|
+
opacity: 0;
|
|
190
|
+
transform: scale(0.95);
|
|
191
|
+
}
|
|
192
|
+
to {
|
|
193
|
+
opacity: 1;
|
|
194
|
+
transform: scale(1);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@keyframes modal-content-out {
|
|
199
|
+
from {
|
|
200
|
+
opacity: 1;
|
|
201
|
+
transform: scale(1);
|
|
202
|
+
}
|
|
203
|
+
to {
|
|
204
|
+
opacity: 0;
|
|
205
|
+
transform: scale(0.95);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@utility animate-modal-backdrop-in {
|
|
210
|
+
animation: modal-backdrop-in 0.2s ease-out forwards;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@utility animate-modal-backdrop-out {
|
|
214
|
+
animation: modal-backdrop-out 0.2s ease-in forwards;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
@utility animate-modal-content-in {
|
|
218
|
+
animation: modal-content-in 0.25s ease-out forwards;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@utility animate-modal-content-out {
|
|
222
|
+
animation: modal-content-out 0.2s ease-in forwards;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@utility collapsible-panel {
|
|
226
|
+
display: grid;
|
|
227
|
+
grid-template-rows: 0fr;
|
|
228
|
+
transition: grid-template-rows 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@utility collapsible-panel-open {
|
|
232
|
+
grid-template-rows: 1fr;
|
|
233
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@takeshape/purchase-order-chat",
|
|
3
|
+
"version": "1.51.0-beta.1",
|
|
4
|
+
"description": "BigCommerce purchase order chat UI components",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"imports": {
|
|
7
|
+
"#/.storybook/preview": "./.storybook/preview.tsx"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/shadow.d.ts",
|
|
12
|
+
"default": "./dist/shadow.js"
|
|
13
|
+
},
|
|
14
|
+
"./*": {
|
|
15
|
+
"types": "./dist/*.d.ts",
|
|
16
|
+
"default": "./dist/*.js"
|
|
17
|
+
},
|
|
18
|
+
"./*.css": "./dist/*.css",
|
|
19
|
+
"./src/*": "./src/*.ts",
|
|
20
|
+
"./src/*.css": "./src/*.css"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public",
|
|
24
|
+
"provenance": false
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"README.md"
|
|
29
|
+
],
|
|
30
|
+
"sideEffects": [
|
|
31
|
+
"*.css"
|
|
32
|
+
],
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@tanstack/react-query": "^5.80.6",
|
|
35
|
+
"ai": "^6.0.53",
|
|
36
|
+
"clsx": "^2.1.1",
|
|
37
|
+
"gql.tada": "^1.9.0",
|
|
38
|
+
"graphql": "^16.12.0",
|
|
39
|
+
"graphql-request": "^7.4.0",
|
|
40
|
+
"pdfjs-dist": "^5.5.207",
|
|
41
|
+
"streamdown": "^2.2.0",
|
|
42
|
+
"tailwind-merge": "^3.4.0",
|
|
43
|
+
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
44
|
+
"zod": "^4.3.6",
|
|
45
|
+
"zustand": "^5.0.11"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@ai-sdk/react": "^3.0.55",
|
|
49
|
+
"@sentry/react": "^10.42.0",
|
|
50
|
+
"@sentry/vite-plugin": "^5.1.1",
|
|
51
|
+
"@storybook/react-vite": "^10.2.10",
|
|
52
|
+
"@tailwindcss/vite": "^4.2.1",
|
|
53
|
+
"@takeshape/vite-plugin-css-position": "^2.1.1",
|
|
54
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
55
|
+
"@testing-library/react": "^16.3.2",
|
|
56
|
+
"@types/react": "^19.2.9",
|
|
57
|
+
"@types/react-dom": "^19.2.3",
|
|
58
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
59
|
+
"jsdom": "^27.4.0",
|
|
60
|
+
"storybook": "^10.2.10",
|
|
61
|
+
"tailwindcss": "^4.2.1",
|
|
62
|
+
"vite-plugin-dts": "^4.5.4",
|
|
63
|
+
"vite-tsconfig-paths": "^6.0.4",
|
|
64
|
+
"@takeshape/config": "0.0.0",
|
|
65
|
+
"@takeshape/scripts": "0.0.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"@sentry/react": ">=10.0.0",
|
|
69
|
+
"react": ">=19.0.0",
|
|
70
|
+
"react-dom": ">=19.0.0"
|
|
71
|
+
},
|
|
72
|
+
"peerDependenciesMeta": {
|
|
73
|
+
"@sentry/react": {
|
|
74
|
+
"optional": true
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"scripts": {
|
|
78
|
+
"dev": "storybook dev -p 6006 --no-open",
|
|
79
|
+
"lint": "biome lint src",
|
|
80
|
+
"check-types": "tsc --noEmit",
|
|
81
|
+
"format": "biome format --write src",
|
|
82
|
+
"package": "vite build",
|
|
83
|
+
"test": "vitest run",
|
|
84
|
+
"test:watch": "vitest watch",
|
|
85
|
+
"generate": "dotenv -c -- scripts gql-tada-bigcommerce --schema https://api-b2b.bigcommerce.com/graphql:./gen/bigcommerce/b2b/schema.graphql --schema :./gen/bigcommerce/storefront/schema.graphql"
|
|
86
|
+
}
|
|
87
|
+
}
|