@contractspec/example.learning-journey-ui-onboarding 1.57.0 → 1.58.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.
- package/.turbo/turbo-build.log +58 -62
- package/.turbo/turbo-prebuild.log +1 -0
- package/CHANGELOG.md +19 -0
- package/dist/OnboardingMiniApp.d.ts +4 -14
- package/dist/OnboardingMiniApp.d.ts.map +1 -1
- package/dist/OnboardingMiniApp.js +991 -59
- package/dist/browser/OnboardingMiniApp.js +994 -0
- package/dist/browser/components/CodeSnippet.js +65 -0
- package/dist/browser/components/JourneyMap.js +59 -0
- package/dist/browser/components/StepChecklist.js +97 -0
- package/dist/browser/components/index.js +219 -0
- package/dist/browser/docs/index.js +22 -0
- package/dist/browser/docs/learning-journey-ui-onboarding.docblock.js +22 -0
- package/dist/browser/example.js +32 -0
- package/dist/browser/index.js +1116 -0
- package/dist/browser/views/Overview.js +240 -0
- package/dist/browser/views/Progress.js +275 -0
- package/dist/browser/views/Steps.js +192 -0
- package/dist/browser/views/Timeline.js +213 -0
- package/dist/browser/views/index.js +915 -0
- package/dist/components/CodeSnippet.d.ts +5 -13
- package/dist/components/CodeSnippet.d.ts.map +1 -1
- package/dist/components/CodeSnippet.js +63 -47
- package/dist/components/JourneyMap.d.ts +6 -14
- package/dist/components/JourneyMap.d.ts.map +1 -1
- package/dist/components/JourneyMap.js +57 -46
- package/dist/components/StepChecklist.d.ts +10 -22
- package/dist/components/StepChecklist.d.ts.map +1 -1
- package/dist/components/StepChecklist.js +95 -77
- package/dist/components/index.d.ts +4 -4
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +219 -4
- package/dist/docs/index.d.ts +2 -1
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +23 -1
- package/dist/docs/learning-journey-ui-onboarding.docblock.d.ts +2 -1
- package/dist/docs/learning-journey-ui-onboarding.docblock.d.ts.map +1 -0
- package/dist/docs/learning-journey-ui-onboarding.docblock.js +21 -18
- package/dist/example.d.ts +2 -6
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +31 -39
- package/dist/index.d.ts +6 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1117 -14
- package/dist/node/OnboardingMiniApp.js +994 -0
- package/dist/node/components/CodeSnippet.js +65 -0
- package/dist/node/components/JourneyMap.js +59 -0
- package/dist/node/components/StepChecklist.js +97 -0
- package/dist/node/components/index.js +219 -0
- package/dist/node/docs/index.js +22 -0
- package/dist/node/docs/learning-journey-ui-onboarding.docblock.js +22 -0
- package/dist/node/example.js +32 -0
- package/dist/node/index.js +1116 -0
- package/dist/node/views/Overview.js +240 -0
- package/dist/node/views/Progress.js +275 -0
- package/dist/node/views/Steps.js +192 -0
- package/dist/node/views/Timeline.js +213 -0
- package/dist/node/views/index.js +915 -0
- package/dist/views/Overview.d.ts +4 -12
- package/dist/views/Overview.d.ts.map +1 -1
- package/dist/views/Overview.js +238 -177
- package/dist/views/Progress.d.ts +3 -10
- package/dist/views/Progress.d.ts.map +1 -1
- package/dist/views/Progress.js +273 -158
- package/dist/views/Steps.d.ts +2 -11
- package/dist/views/Steps.d.ts.map +1 -1
- package/dist/views/Steps.js +188 -87
- package/dist/views/Timeline.d.ts +2 -10
- package/dist/views/Timeline.d.ts.map +1 -1
- package/dist/views/Timeline.js +211 -95
- package/dist/views/index.d.ts +5 -5
- package/dist/views/index.d.ts.map +1 -0
- package/dist/views/index.js +915 -5
- package/package.json +155 -39
- package/tsdown.config.js +1 -2
- package/.turbo/turbo-build$colon$bundle.log +0 -59
- package/dist/OnboardingMiniApp.js.map +0 -1
- package/dist/components/CodeSnippet.js.map +0 -1
- package/dist/components/JourneyMap.js.map +0 -1
- package/dist/components/StepChecklist.js.map +0 -1
- package/dist/docs/learning-journey-ui-onboarding.docblock.js.map +0 -1
- package/dist/example.js.map +0 -1
- package/dist/views/Overview.js.map +0 -1
- package/dist/views/Progress.js.map +0 -1
- package/dist/views/Steps.js.map +0 -1
- package/dist/views/Timeline.js.map +0 -1
- package/tsconfig.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -1,68 +1,184 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.learning-journey-ui-onboarding",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.58.0",
|
|
4
4
|
"description": "Developer onboarding UI with checklists and journey maps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
|
-
".": "./
|
|
9
|
-
"./components": "./
|
|
10
|
-
"./components/CodeSnippet": "./
|
|
11
|
-
"./components/
|
|
12
|
-
"./components/
|
|
13
|
-
"./
|
|
14
|
-
"./docs
|
|
15
|
-
"./
|
|
16
|
-
"./
|
|
17
|
-
"./
|
|
18
|
-
"./
|
|
19
|
-
"./views
|
|
20
|
-
"./views/
|
|
21
|
-
"./views/
|
|
22
|
-
"
|
|
8
|
+
".": "./src/index.ts",
|
|
9
|
+
"./components": "./src/components/index.ts",
|
|
10
|
+
"./components/CodeSnippet": "./src/components/CodeSnippet.tsx",
|
|
11
|
+
"./components/index": "./src/components/index.ts",
|
|
12
|
+
"./components/JourneyMap": "./src/components/JourneyMap.tsx",
|
|
13
|
+
"./components/StepChecklist": "./src/components/StepChecklist.tsx",
|
|
14
|
+
"./docs": "./src/docs/index.ts",
|
|
15
|
+
"./docs/index": "./src/docs/index.ts",
|
|
16
|
+
"./docs/learning-journey-ui-onboarding.docblock": "./src/docs/learning-journey-ui-onboarding.docblock.ts",
|
|
17
|
+
"./example": "./src/example.ts",
|
|
18
|
+
"./OnboardingMiniApp": "./src/OnboardingMiniApp.tsx",
|
|
19
|
+
"./views": "./src/views/index.ts",
|
|
20
|
+
"./views/index": "./src/views/index.ts",
|
|
21
|
+
"./views/Overview": "./src/views/Overview.tsx",
|
|
22
|
+
"./views/Progress": "./src/views/Progress.tsx",
|
|
23
|
+
"./views/Steps": "./src/views/Steps.tsx",
|
|
24
|
+
"./views/Timeline": "./src/views/Timeline.tsx"
|
|
23
25
|
},
|
|
24
26
|
"scripts": {
|
|
25
27
|
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
26
28
|
"publish:pkg:canary": "bun publish:pkg --tag canary",
|
|
27
|
-
"build": "bun build:
|
|
28
|
-
"build:bundle": "
|
|
29
|
-
"build:types": "
|
|
30
|
-
"dev": "bun
|
|
29
|
+
"build": "bun run prebuild && bun run build:bundle && bun run build:types",
|
|
30
|
+
"build:bundle": "contractspec-bun-build transpile",
|
|
31
|
+
"build:types": "contractspec-bun-build types",
|
|
32
|
+
"dev": "contractspec-bun-build dev",
|
|
31
33
|
"clean": "rimraf dist .turbo",
|
|
32
34
|
"lint": "bun lint:fix",
|
|
33
35
|
"lint:fix": "eslint src --fix",
|
|
34
36
|
"lint:check": "eslint src",
|
|
35
|
-
"test": "bun test"
|
|
37
|
+
"test": "bun test",
|
|
38
|
+
"prebuild": "contractspec-bun-build prebuild",
|
|
39
|
+
"typecheck": "tsc --noEmit"
|
|
36
40
|
},
|
|
37
41
|
"dependencies": {
|
|
38
|
-
"@contractspec/lib.ui-kit-core": "1.
|
|
39
|
-
"@contractspec/lib.contracts": "1.
|
|
40
|
-
"@contractspec/example.learning-journey-ui-shared": "1.
|
|
41
|
-
"@contractspec/example.learning-journey-studio-onboarding": "1.
|
|
42
|
-
"@contractspec/example.learning-journey-platform-tour": "1.
|
|
43
|
-
"@contractspec/module.learning-journey": "1.
|
|
44
|
-
"@contractspec/lib.design-system": "1.
|
|
45
|
-
"@contractspec/lib.ui-kit-web": "1.
|
|
42
|
+
"@contractspec/lib.ui-kit-core": "1.58.0",
|
|
43
|
+
"@contractspec/lib.contracts": "1.58.0",
|
|
44
|
+
"@contractspec/example.learning-journey-ui-shared": "1.58.0",
|
|
45
|
+
"@contractspec/example.learning-journey-studio-onboarding": "1.58.0",
|
|
46
|
+
"@contractspec/example.learning-journey-platform-tour": "1.58.0",
|
|
47
|
+
"@contractspec/module.learning-journey": "1.58.0",
|
|
48
|
+
"@contractspec/lib.design-system": "1.58.0",
|
|
49
|
+
"@contractspec/lib.ui-kit-web": "1.58.0",
|
|
46
50
|
"react": "19.2.4"
|
|
47
51
|
},
|
|
48
52
|
"devDependencies": {
|
|
49
|
-
"@contractspec/tool.
|
|
50
|
-
"@contractspec/tool.typescript": "1.57.0",
|
|
53
|
+
"@contractspec/tool.typescript": "1.58.0",
|
|
51
54
|
"@types/react": "^19.2.13",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
55
|
+
"typescript": "^5.9.3",
|
|
56
|
+
"@contractspec/tool.bun": "1.57.0"
|
|
54
57
|
},
|
|
55
58
|
"peerDependencies": {
|
|
56
59
|
"react": "^19.2.4"
|
|
57
60
|
},
|
|
58
61
|
"publishConfig": {
|
|
59
62
|
"exports": {
|
|
60
|
-
".":
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
".": {
|
|
64
|
+
"types": "./dist/index.d.ts",
|
|
65
|
+
"bun": "./dist/index.js",
|
|
66
|
+
"node": "./dist/node/index.mjs",
|
|
67
|
+
"browser": "./dist/browser/index.js",
|
|
68
|
+
"default": "./dist/index.js"
|
|
69
|
+
},
|
|
70
|
+
"./components": {
|
|
71
|
+
"types": "./dist/components/index.d.ts",
|
|
72
|
+
"bun": "./dist/components/index.js",
|
|
73
|
+
"node": "./dist/node/components/index.mjs",
|
|
74
|
+
"browser": "./dist/browser/components/index.js",
|
|
75
|
+
"default": "./dist/components/index.js"
|
|
76
|
+
},
|
|
77
|
+
"./components/CodeSnippet": {
|
|
78
|
+
"types": "./dist/components/CodeSnippet.d.ts",
|
|
79
|
+
"bun": "./dist/components/CodeSnippet.js",
|
|
80
|
+
"node": "./dist/node/components/CodeSnippet.mjs",
|
|
81
|
+
"browser": "./dist/browser/components/CodeSnippet.js",
|
|
82
|
+
"default": "./dist/components/CodeSnippet.js"
|
|
83
|
+
},
|
|
84
|
+
"./components/index": {
|
|
85
|
+
"types": "./dist/components/index.d.ts",
|
|
86
|
+
"bun": "./dist/components/index.js",
|
|
87
|
+
"node": "./dist/node/components/index.mjs",
|
|
88
|
+
"browser": "./dist/browser/components/index.js",
|
|
89
|
+
"default": "./dist/components/index.js"
|
|
90
|
+
},
|
|
91
|
+
"./components/JourneyMap": {
|
|
92
|
+
"types": "./dist/components/JourneyMap.d.ts",
|
|
93
|
+
"bun": "./dist/components/JourneyMap.js",
|
|
94
|
+
"node": "./dist/node/components/JourneyMap.mjs",
|
|
95
|
+
"browser": "./dist/browser/components/JourneyMap.js",
|
|
96
|
+
"default": "./dist/components/JourneyMap.js"
|
|
97
|
+
},
|
|
98
|
+
"./components/StepChecklist": {
|
|
99
|
+
"types": "./dist/components/StepChecklist.d.ts",
|
|
100
|
+
"bun": "./dist/components/StepChecklist.js",
|
|
101
|
+
"node": "./dist/node/components/StepChecklist.mjs",
|
|
102
|
+
"browser": "./dist/browser/components/StepChecklist.js",
|
|
103
|
+
"default": "./dist/components/StepChecklist.js"
|
|
104
|
+
},
|
|
105
|
+
"./docs": {
|
|
106
|
+
"types": "./dist/docs/index.d.ts",
|
|
107
|
+
"bun": "./dist/docs/index.js",
|
|
108
|
+
"node": "./dist/node/docs/index.mjs",
|
|
109
|
+
"browser": "./dist/browser/docs/index.js",
|
|
110
|
+
"default": "./dist/docs/index.js"
|
|
111
|
+
},
|
|
112
|
+
"./docs/index": {
|
|
113
|
+
"types": "./dist/docs/index.d.ts",
|
|
114
|
+
"bun": "./dist/docs/index.js",
|
|
115
|
+
"node": "./dist/node/docs/index.mjs",
|
|
116
|
+
"browser": "./dist/browser/docs/index.js",
|
|
117
|
+
"default": "./dist/docs/index.js"
|
|
118
|
+
},
|
|
119
|
+
"./docs/learning-journey-ui-onboarding.docblock": {
|
|
120
|
+
"types": "./dist/docs/learning-journey-ui-onboarding.docblock.d.ts",
|
|
121
|
+
"bun": "./dist/docs/learning-journey-ui-onboarding.docblock.js",
|
|
122
|
+
"node": "./dist/node/docs/learning-journey-ui-onboarding.docblock.mjs",
|
|
123
|
+
"browser": "./dist/browser/docs/learning-journey-ui-onboarding.docblock.js",
|
|
124
|
+
"default": "./dist/docs/learning-journey-ui-onboarding.docblock.js"
|
|
125
|
+
},
|
|
126
|
+
"./example": {
|
|
127
|
+
"types": "./dist/example.d.ts",
|
|
128
|
+
"bun": "./dist/example.js",
|
|
129
|
+
"node": "./dist/node/example.mjs",
|
|
130
|
+
"browser": "./dist/browser/example.js",
|
|
131
|
+
"default": "./dist/example.js"
|
|
132
|
+
},
|
|
133
|
+
"./OnboardingMiniApp": {
|
|
134
|
+
"types": "./dist/OnboardingMiniApp.d.ts",
|
|
135
|
+
"bun": "./dist/OnboardingMiniApp.js",
|
|
136
|
+
"node": "./dist/node/OnboardingMiniApp.mjs",
|
|
137
|
+
"browser": "./dist/browser/OnboardingMiniApp.js",
|
|
138
|
+
"default": "./dist/OnboardingMiniApp.js"
|
|
139
|
+
},
|
|
140
|
+
"./views": {
|
|
141
|
+
"types": "./dist/views/index.d.ts",
|
|
142
|
+
"bun": "./dist/views/index.js",
|
|
143
|
+
"node": "./dist/node/views/index.mjs",
|
|
144
|
+
"browser": "./dist/browser/views/index.js",
|
|
145
|
+
"default": "./dist/views/index.js"
|
|
146
|
+
},
|
|
147
|
+
"./views/index": {
|
|
148
|
+
"types": "./dist/views/index.d.ts",
|
|
149
|
+
"bun": "./dist/views/index.js",
|
|
150
|
+
"node": "./dist/node/views/index.mjs",
|
|
151
|
+
"browser": "./dist/browser/views/index.js",
|
|
152
|
+
"default": "./dist/views/index.js"
|
|
153
|
+
},
|
|
154
|
+
"./views/Overview": {
|
|
155
|
+
"types": "./dist/views/Overview.d.ts",
|
|
156
|
+
"bun": "./dist/views/Overview.js",
|
|
157
|
+
"node": "./dist/node/views/Overview.mjs",
|
|
158
|
+
"browser": "./dist/browser/views/Overview.js",
|
|
159
|
+
"default": "./dist/views/Overview.js"
|
|
160
|
+
},
|
|
161
|
+
"./views/Progress": {
|
|
162
|
+
"types": "./dist/views/Progress.d.ts",
|
|
163
|
+
"bun": "./dist/views/Progress.js",
|
|
164
|
+
"node": "./dist/node/views/Progress.mjs",
|
|
165
|
+
"browser": "./dist/browser/views/Progress.js",
|
|
166
|
+
"default": "./dist/views/Progress.js"
|
|
167
|
+
},
|
|
168
|
+
"./views/Steps": {
|
|
169
|
+
"types": "./dist/views/Steps.d.ts",
|
|
170
|
+
"bun": "./dist/views/Steps.js",
|
|
171
|
+
"node": "./dist/node/views/Steps.mjs",
|
|
172
|
+
"browser": "./dist/browser/views/Steps.js",
|
|
173
|
+
"default": "./dist/views/Steps.js"
|
|
174
|
+
},
|
|
175
|
+
"./views/Timeline": {
|
|
176
|
+
"types": "./dist/views/Timeline.d.ts",
|
|
177
|
+
"bun": "./dist/views/Timeline.js",
|
|
178
|
+
"node": "./dist/node/views/Timeline.mjs",
|
|
179
|
+
"browser": "./dist/browser/views/Timeline.js",
|
|
180
|
+
"default": "./dist/views/Timeline.js"
|
|
181
|
+
}
|
|
66
182
|
},
|
|
67
183
|
"registry": "https://registry.npmjs.org/",
|
|
68
184
|
"access": "public"
|
package/tsdown.config.js
CHANGED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
$ tsdown
|
|
2
|
-
[34mℹ[39m tsdown [2mv0.20.3[22m powered by rolldown [2mv1.0.0-rc.3[22m
|
|
3
|
-
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/learning-journey-ui-onboarding/tsdown.config.js[24m
|
|
4
|
-
[34mℹ[39m entry: [34msrc/OnboardingMiniApp.tsx, src/example.ts, src/index.ts, src/components/CodeSnippet.tsx, src/components/JourneyMap.tsx, src/components/StepChecklist.tsx, src/components/index.ts, src/docs/index.ts, src/docs/learning-journey-ui-onboarding.docblock.ts, src/views/Overview.tsx, src/views/Progress.tsx, src/views/Steps.tsx, src/views/Timeline.tsx, src/views/index.ts[39m
|
|
5
|
-
[34mℹ[39m target: [34mesnext[39m
|
|
6
|
-
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
7
|
-
[34mℹ[39m Build start
|
|
8
|
-
[34mℹ[39m Cleaning 50 files
|
|
9
|
-
[34mℹ[39m [2mdist/[22m[1mviews/Overview.js[22m [2m6.97 kB[22m [2m│ gzip: 1.81 kB[22m
|
|
10
|
-
[34mℹ[39m [2mdist/[22m[1mviews/Progress.js[22m [2m6.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
11
|
-
[34mℹ[39m [2mdist/[22m[1mviews/Timeline.js[22m [2m4.54 kB[22m [2m│ gzip: 1.29 kB[22m
|
|
12
|
-
[34mℹ[39m [2mdist/[22m[1mcomponents/StepChecklist.js[22m [2m3.23 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[1mviews/Steps.js[22m [2m3.02 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
14
|
-
[34mℹ[39m [2mdist/[22m[1mOnboardingMiniApp.js[22m [2m2.35 kB[22m [2m│ gzip: 0.79 kB[22m
|
|
15
|
-
[34mℹ[39m [2mdist/[22m[1mcomponents/JourneyMap.js[22m [2m2.15 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
16
|
-
[34mℹ[39m [2mdist/[22m[1mcomponents/CodeSnippet.js[22m [2m1.60 kB[22m [2m│ gzip: 0.69 kB[22m
|
|
17
|
-
[34mℹ[39m [2mdist/[22m[1mexample.js[22m [2m0.94 kB[22m [2m│ gzip: 0.51 kB[22m
|
|
18
|
-
[34mℹ[39m [2mdist/[22m[1mdocs/learning-journey-ui-onboarding.docblock.js[22m [2m0.84 kB[22m [2m│ gzip: 0.47 kB[22m
|
|
19
|
-
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m0.69 kB[22m [2m│ gzip: 0.24 kB[22m
|
|
20
|
-
[34mℹ[39m [2mdist/[22m[1mviews/index.js[22m [2m0.24 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
21
|
-
[34mℹ[39m [2mdist/[22m[1mcomponents/index.js[22m [2m0.20 kB[22m [2m│ gzip: 0.11 kB[22m
|
|
22
|
-
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m0.06 kB[22m [2m│ gzip: 0.07 kB[22m
|
|
23
|
-
[34mℹ[39m [2mdist/[22mviews/Overview.js.map [2m9.61 kB[22m [2m│ gzip: 2.79 kB[22m
|
|
24
|
-
[34mℹ[39m [2mdist/[22mviews/Progress.js.map [2m8.69 kB[22m [2m│ gzip: 2.35 kB[22m
|
|
25
|
-
[34mℹ[39m [2mdist/[22mviews/Timeline.js.map [2m7.03 kB[22m [2m│ gzip: 2.05 kB[22m
|
|
26
|
-
[34mℹ[39m [2mdist/[22mcomponents/StepChecklist.js.map [2m5.22 kB[22m [2m│ gzip: 1.71 kB[22m
|
|
27
|
-
[34mℹ[39m [2mdist/[22mviews/Steps.js.map [2m4.63 kB[22m [2m│ gzip: 1.65 kB[22m
|
|
28
|
-
[34mℹ[39m [2mdist/[22mcomponents/JourneyMap.js.map [2m3.90 kB[22m [2m│ gzip: 1.52 kB[22m
|
|
29
|
-
[34mℹ[39m [2mdist/[22mOnboardingMiniApp.js.map [2m3.64 kB[22m [2m│ gzip: 1.31 kB[22m
|
|
30
|
-
[34mℹ[39m [2mdist/[22mcomponents/CodeSnippet.js.map [2m2.13 kB[22m [2m│ gzip: 0.99 kB[22m
|
|
31
|
-
[34mℹ[39m [2mdist/[22mexample.js.map [2m1.40 kB[22m [2m│ gzip: 0.71 kB[22m
|
|
32
|
-
[34mℹ[39m [2mdist/[22mdocs/learning-journey-ui-onboarding.docblock.js.map [2m1.18 kB[22m [2m│ gzip: 0.62 kB[22m
|
|
33
|
-
[34mℹ[39m [2mdist/[22mcomponents/StepChecklist.d.ts.map [2m0.35 kB[22m [2m│ gzip: 0.21 kB[22m
|
|
34
|
-
[34mℹ[39m [2mdist/[22mOnboardingMiniApp.d.ts.map [2m0.32 kB[22m [2m│ gzip: 0.20 kB[22m
|
|
35
|
-
[34mℹ[39m [2mdist/[22mcomponents/JourneyMap.d.ts.map [2m0.27 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
36
|
-
[34mℹ[39m [2mdist/[22mcomponents/CodeSnippet.d.ts.map [2m0.26 kB[22m [2m│ gzip: 0.18 kB[22m
|
|
37
|
-
[34mℹ[39m [2mdist/[22mviews/Overview.d.ts.map [2m0.24 kB[22m [2m│ gzip: 0.18 kB[22m
|
|
38
|
-
[34mℹ[39m [2mdist/[22mviews/Steps.d.ts.map [2m0.19 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
39
|
-
[34mℹ[39m [2mdist/[22mviews/Progress.d.ts.map [2m0.19 kB[22m [2m│ gzip: 0.15 kB[22m
|
|
40
|
-
[34mℹ[39m [2mdist/[22mviews/Timeline.d.ts.map [2m0.19 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
41
|
-
[34mℹ[39m [2mdist/[22mexample.d.ts.map [2m0.13 kB[22m [2m│ gzip: 0.13 kB[22m
|
|
42
|
-
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m0.67 kB[22m [2m│ gzip: 0.24 kB[22m
|
|
43
|
-
[34mℹ[39m [2mdist/[22m[32m[1mcomponents/StepChecklist.d.ts[22m[39m [2m0.66 kB[22m [2m│ gzip: 0.34 kB[22m
|
|
44
|
-
[34mℹ[39m [2mdist/[22m[32m[1mOnboardingMiniApp.d.ts[22m[39m [2m0.60 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
45
|
-
[34mℹ[39m [2mdist/[22m[32m[1mcomponents/JourneyMap.d.ts[22m[39m [2m0.52 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
46
|
-
[34mℹ[39m [2mdist/[22m[32m[1mviews/Overview.d.ts[22m[39m [2m0.46 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
47
|
-
[34mℹ[39m [2mdist/[22m[32m[1mviews/Progress.d.ts[22m[39m [2m0.39 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
48
|
-
[34mℹ[39m [2mdist/[22m[32m[1mcomponents/CodeSnippet.d.ts[22m[39m [2m0.38 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
49
|
-
[34mℹ[39m [2mdist/[22m[32m[1mviews/Steps.d.ts[22m[39m [2m0.36 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
50
|
-
[34mℹ[39m [2mdist/[22m[32m[1mviews/Timeline.d.ts[22m[39m [2m0.35 kB[22m [2m│ gzip: 0.24 kB[22m
|
|
51
|
-
[34mℹ[39m [2mdist/[22m[32m[1mexample.d.ts[22m[39m [2m0.25 kB[22m [2m│ gzip: 0.17 kB[22m
|
|
52
|
-
[34mℹ[39m [2mdist/[22m[32m[1mviews/index.d.ts[22m[39m [2m0.24 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
53
|
-
[34mℹ[39m [2mdist/[22m[32m[1mcomponents/index.d.ts[22m[39m [2m0.20 kB[22m [2m│ gzip: 0.11 kB[22m
|
|
54
|
-
[34mℹ[39m [2mdist/[22m[32m[1mdocs/index.d.ts[22m[39m [2m0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
55
|
-
[34mℹ[39m [2mdist/[22m[32m[1mdocs/learning-journey-ui-onboarding.docblock.d.ts[22m[39m [2m0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
56
|
-
[34mℹ[39m 47 files, total: 87.95 kB
|
|
57
|
-
[33m[PLUGIN_TIMINGS] Warning:[0m Your build spent significant time in plugin `tsdown:external`. See https://rolldown.rs/options/checks#plugintimings for more details.
|
|
58
|
-
|
|
59
|
-
[32m✔[39m Build complete in [32m25029ms[39m
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingMiniApp.js","names":["Progress"],"sources":["../src/OnboardingMiniApp.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Card, CardContent } from '@contractspec/lib.ui-kit-web/ui/card';\nimport {\n ViewTabs,\n useLearningProgress,\n type LearningView,\n type LearningMiniAppProps,\n} from '@contractspec/example.learning-journey-ui-shared';\nimport { Overview } from './views/Overview';\nimport { Steps } from './views/Steps';\nimport { Progress } from './views/Progress';\nimport { Timeline } from './views/Timeline';\n\ntype OnboardingMiniAppProps = Omit<LearningMiniAppProps, 'progress'> & {\n progress?: LearningMiniAppProps['progress'];\n};\n\nexport function OnboardingMiniApp({\n track,\n progress: externalProgress,\n onStepComplete: externalOnStepComplete,\n onViewChange,\n initialView = 'overview',\n}: OnboardingMiniAppProps) {\n const [currentView, setCurrentView] = useState<LearningView>(initialView);\n\n // Use internal progress if not provided externally\n const { progress: internalProgress, completeStep: internalCompleteStep } =\n useLearningProgress(track);\n\n const progress = externalProgress ?? internalProgress;\n\n const handleViewChange = useCallback(\n (view: LearningView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange]\n );\n\n const handleStepComplete = useCallback(\n (stepId: string) => {\n if (externalOnStepComplete) {\n externalOnStepComplete(stepId);\n } else {\n internalCompleteStep(stepId);\n }\n },\n [externalOnStepComplete, internalCompleteStep]\n );\n\n const handleStartFromOverview = useCallback(() => {\n setCurrentView('steps');\n onViewChange?.('steps');\n }, [onViewChange]);\n\n const renderView = () => {\n const viewProps = {\n track,\n progress,\n onStepComplete: handleStepComplete,\n };\n\n switch (currentView) {\n case 'overview':\n return <Overview {...viewProps} onStart={handleStartFromOverview} />;\n case 'steps':\n return <Steps {...viewProps} />;\n case 'progress':\n return <Progress {...viewProps} />;\n case 'timeline':\n return <Timeline {...viewProps} />;\n default:\n return <Overview {...viewProps} onStart={handleStartFromOverview} />;\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {/* Navigation */}\n <Card>\n <CardContent className=\"p-4\">\n <ViewTabs currentView={currentView} onViewChange={handleViewChange} />\n </CardContent>\n </Card>\n\n {/* Current View */}\n {renderView()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,SAAgB,kBAAkB,EAChC,OACA,UAAU,kBACV,gBAAgB,wBAChB,cACA,cAAc,cACW;CACzB,MAAM,CAAC,aAAa,kBAAkB,SAAuB,YAAY;CAGzE,MAAM,EAAE,UAAU,kBAAkB,cAAc,yBAChD,oBAAoB,MAAM;CAE5B,MAAM,WAAW,oBAAoB;CAErC,MAAM,mBAAmB,aACtB,SAAuB;AACtB,iBAAe,KAAK;AACpB,iBAAe,KAAK;IAEtB,CAAC,aAAa,CACf;CAED,MAAM,qBAAqB,aACxB,WAAmB;AAClB,MAAI,uBACF,wBAAuB,OAAO;MAE9B,sBAAqB,OAAO;IAGhC,CAAC,wBAAwB,qBAAqB,CAC/C;CAED,MAAM,0BAA0B,kBAAkB;AAChD,iBAAe,QAAQ;AACvB,iBAAe,QAAQ;IACtB,CAAC,aAAa,CAAC;CAElB,MAAM,mBAAmB;EACvB,MAAM,YAAY;GAChB;GACA;GACA,gBAAgB;GACjB;AAED,UAAQ,aAAR;GACE,KAAK,WACH,QAAO,oBAAC;IAAS,GAAI;IAAW,SAAS;KAA2B;GACtE,KAAK,QACH,QAAO,oBAAC,SAAM,GAAI,YAAa;GACjC,KAAK,WACH,QAAO,oBAACA,gBAAS,GAAI,YAAa;GACpC,KAAK,WACH,QAAO,oBAAC,YAAS,GAAI,YAAa;GACpC,QACE,QAAO,oBAAC;IAAS,GAAI;IAAW,SAAS;KAA2B;;;AAI1E,QACE,qBAAC;EAAI,WAAU;aAEb,oBAAC,kBACC,oBAAC;GAAY,WAAU;aACrB,oBAAC;IAAsB;IAAa,cAAc;KAAoB;IAC1D,GACT,EAGN,YAAY;GACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CodeSnippet.js","names":[],"sources":["../../src/components/CodeSnippet.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Button } from '@contractspec/lib.design-system';\n\ninterface CodeSnippetProps {\n code: string;\n language?: string;\n title?: string;\n}\n\nexport function CodeSnippet({\n code,\n language = 'typescript',\n title,\n}: CodeSnippetProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <div className=\"bg-muted/50 overflow-hidden rounded-lg border\">\n {/* Header */}\n <div className=\"bg-muted flex items-center justify-between border-b px-4 py-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-xs font-medium uppercase\">\n {language}\n </span>\n {title && (\n <>\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"text-sm\">{title}</span>\n </>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n className=\"h-7 text-xs\"\n >\n {copied ? '✓ Copied' : 'Copy'}\n </Button>\n </div>\n\n {/* Code */}\n <pre className=\"overflow-x-auto p-4\">\n <code className=\"text-sm\">{code}</code>\n </pre>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,YAAY,EAC1B,MACA,WAAW,cACX,SACmB;CACnB,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAE3C,MAAM,aAAa,YAAY;AAC7B,QAAM,UAAU,UAAU,UAAU,KAAK;AACzC,YAAU,KAAK;AACf,mBAAiB,UAAU,MAAM,EAAE,IAAK;;AAG1C,QACE,qBAAC;EAAI,WAAU;aAEb,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAK,WAAU;eACb;MACI,EACN,SACC,4CACE,oBAAC;KAAK,WAAU;eAAwB;MAAQ,EAChD,oBAAC;KAAK,WAAU;eAAW;MAAa,IACvC;KAED,EACN,oBAAC;IACC,SAAQ;IACR,MAAK;IACL,SAAS;IACT,WAAU;cAET,SAAS,aAAa;KAChB;IACL,EAGN,oBAAC;GAAI,WAAU;aACb,oBAAC;IAAK,WAAU;cAAW;KAAY;IACnC;GACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JourneyMap.js","names":[],"sources":["../../src/components/JourneyMap.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface JourneyMapProps {\n steps: LearningJourneyStepSpec[];\n completedStepIds: string[];\n currentStepId?: string | null;\n}\n\nconst SURFACE_ICONS: Record<string, string> = {\n templates: '📋',\n 'spec-editor': '✏️',\n regenerator: '🔄',\n playground: '🎮',\n evolution: '🤖',\n dashboard: '📊',\n settings: '⚙️',\n default: '📍',\n};\n\nexport function JourneyMap({\n steps,\n completedStepIds,\n currentStepId,\n}: JourneyMapProps) {\n return (\n <div className=\"relative overflow-x-auto pb-4\">\n <div className=\"flex min-w-max items-center gap-2\">\n {steps.map((step, index) => {\n const isCompleted = completedStepIds.includes(step.id);\n const isCurrent = step.id === currentStepId;\n const surface = (step.metadata?.surface as string) ?? 'default';\n const icon = SURFACE_ICONS[surface] ?? SURFACE_ICONS.default;\n\n return (\n <div key={step.id} className=\"flex items-center\">\n {/* Node */}\n <div className=\"flex flex-col items-center gap-2\">\n <div\n className={cn(\n 'flex h-14 w-14 items-center justify-center rounded-2xl border-2 text-2xl transition-all',\n isCompleted && 'border-green-500 bg-green-500/10',\n isCurrent &&\n !isCompleted &&\n 'border-violet-500 bg-violet-500/10 ring-4 ring-violet-500/20',\n !isCompleted && !isCurrent && 'border-muted bg-muted/50'\n )}\n >\n {isCompleted ? '✓' : icon}\n </div>\n <div className=\"text-center\">\n <p\n className={cn(\n 'max-w-[100px] truncate text-xs font-medium',\n isCompleted && 'text-green-500',\n isCurrent && !isCompleted && 'text-violet-500',\n !isCompleted && !isCurrent && 'text-muted-foreground'\n )}\n >\n {step.title}\n </p>\n </div>\n </div>\n\n {/* Connector */}\n {index < steps.length - 1 && (\n <div\n className={cn(\n 'mx-2 h-1 w-8 rounded-full transition-colors',\n completedStepIds.includes(steps[index + 1]?.id ?? '')\n ? 'bg-green-500'\n : isCompleted\n ? 'bg-green-500/50'\n : 'bg-muted'\n )}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAWA,MAAM,gBAAwC;CAC5C,WAAW;CACX,eAAe;CACf,aAAa;CACb,YAAY;CACZ,WAAW;CACX,WAAW;CACX,UAAU;CACV,SAAS;CACV;AAED,SAAgB,WAAW,EACzB,OACA,kBACA,iBACkB;AAClB,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,MAAM,UAAU;IAC1B,MAAM,cAAc,iBAAiB,SAAS,KAAK,GAAG;IACtD,MAAM,YAAY,KAAK,OAAO;IAE9B,MAAM,OAAO,cADI,KAAK,UAAU,WAAsB,cACf,cAAc;AAErD,WACE,qBAAC;KAAkB,WAAU;gBAE3B,qBAAC;MAAI,WAAU;iBACb,oBAAC;OACC,WAAW,GACT,2FACA,eAAe,oCACf,aACE,CAAC,eACD,gEACF,CAAC,eAAe,CAAC,aAAa,2BAC/B;iBAEA,cAAc,MAAM;QACjB,EACN,oBAAC;OAAI,WAAU;iBACb,oBAAC;QACC,WAAW,GACT,8CACA,eAAe,kBACf,aAAa,CAAC,eAAe,mBAC7B,CAAC,eAAe,CAAC,aAAa,wBAC/B;kBAEA,KAAK;SACJ;QACA;OACF,EAGL,QAAQ,MAAM,SAAS,KACtB,oBAAC,SACC,WAAW,GACT,+CACA,iBAAiB,SAAS,MAAM,QAAQ,IAAI,MAAM,GAAG,GACjD,iBACA,cACE,oBACA,WACP,GACD;OAxCI,KAAK,GA0CT;KAER;IACE;GACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StepChecklist.js","names":[],"sources":["../../src/components/StepChecklist.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@contractspec/lib.design-system';\nimport { cn } from '@contractspec/lib.ui-kit-core';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface StepChecklistProps {\n step: LearningJourneyStepSpec;\n stepNumber: number;\n isCompleted: boolean;\n isCurrent: boolean;\n isExpanded: boolean;\n onToggle: () => void;\n onComplete?: () => void;\n}\n\nexport function StepChecklist({\n step,\n stepNumber,\n isCompleted,\n isCurrent,\n isExpanded,\n onToggle,\n onComplete,\n}: StepChecklistProps) {\n return (\n <div\n className={cn(\n 'rounded-xl border transition-all',\n isCompleted && 'border-green-500/50 bg-green-500/5',\n isCurrent && !isCompleted && 'border-violet-500 bg-violet-500/5',\n !isCompleted && !isCurrent && 'border-border'\n )}\n >\n {/* Header */}\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-4 p-4 text-left\"\n onClick={onToggle}\n >\n {/* Checkbox/Number */}\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition-colors',\n isCompleted && 'border-green-500 bg-green-500 text-white',\n isCurrent && !isCompleted && 'border-violet-500 text-violet-500',\n !isCompleted &&\n !isCurrent &&\n 'border-muted-foreground text-muted-foreground'\n )}\n >\n {isCompleted ? '✓' : stepNumber}\n </div>\n\n {/* Title & Description */}\n <div className=\"min-w-0 flex-1\">\n <h4\n className={cn(\n 'font-semibold',\n isCompleted && 'text-green-500',\n isCurrent && !isCompleted && 'text-foreground',\n !isCompleted && !isCurrent && 'text-muted-foreground'\n )}\n >\n {step.title}\n </h4>\n {!isExpanded && step.description && (\n <p className=\"text-muted-foreground truncate text-sm\">\n {step.description}\n </p>\n )}\n </div>\n\n {/* XP Badge */}\n {step.xpReward && (\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-1 text-xs font-semibold',\n isCompleted\n ? 'bg-green-500/10 text-green-500'\n : 'bg-muted text-muted-foreground'\n )}\n >\n +{step.xpReward} XP\n </span>\n )}\n\n {/* Expand indicator */}\n <span\n className={cn(\n 'shrink-0 transition-transform',\n isExpanded && 'rotate-180'\n )}\n >\n ▼\n </span>\n </button>\n\n {/* Expanded Content */}\n {isExpanded && (\n <div className=\"border-t px-4 py-4\">\n {step.description && (\n <p className=\"text-muted-foreground mb-4\">{step.description}</p>\n )}\n\n {step.instructions && (\n <div className=\"bg-muted mb-4 rounded-lg p-4\">\n <p className=\"mb-2 text-sm font-medium\">Instructions:</p>\n <p className=\"text-muted-foreground text-sm\">\n {step.instructions}\n </p>\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex flex-wrap gap-2\">\n {step.actionUrl && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => window.open(step.actionUrl, '_blank')}\n >\n {step.actionLabel ?? 'Try it'}\n </Button>\n )}\n {!isCompleted && (\n <Button size=\"sm\" onClick={onComplete}>\n Mark as Complete\n </Button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,cAAc,EAC5B,MACA,YACA,aACA,WACA,YACA,UACA,cACqB;AACrB,QACE,qBAAC;EACC,WAAW,GACT,oCACA,eAAe,sCACf,aAAa,CAAC,eAAe,qCAC7B,CAAC,eAAe,CAAC,aAAa,gBAC/B;aAGD,qBAAC;GACC,MAAK;GACL,WAAU;GACV,SAAS;;IAGT,oBAAC;KACC,WAAW,GACT,mHACA,eAAe,4CACf,aAAa,CAAC,eAAe,qCAC7B,CAAC,eACC,CAAC,aACD,gDACH;eAEA,cAAc,MAAM;MACjB;IAGN,qBAAC;KAAI,WAAU;gBACb,oBAAC;MACC,WAAW,GACT,iBACA,eAAe,kBACf,aAAa,CAAC,eAAe,mBAC7B,CAAC,eAAe,CAAC,aAAa,wBAC/B;gBAEA,KAAK;OACH,EACJ,CAAC,cAAc,KAAK,eACnB,oBAAC;MAAE,WAAU;gBACV,KAAK;OACJ;MAEF;IAGL,KAAK,YACJ,qBAAC;KACC,WAAW,GACT,yDACA,cACI,mCACA,iCACL;;MACF;MACG,KAAK;MAAS;;MACX;IAIT,oBAAC;KACC,WAAW,GACT,iCACA,cAAc,aACf;eACF;MAEM;;IACA,EAGR,cACC,qBAAC;GAAI,WAAU;;IACZ,KAAK,eACJ,oBAAC;KAAE,WAAU;eAA8B,KAAK;MAAgB;IAGjE,KAAK,gBACJ,qBAAC;KAAI,WAAU;gBACb,oBAAC;MAAE,WAAU;gBAA2B;OAAiB,EACzD,oBAAC;MAAE,WAAU;gBACV,KAAK;OACJ;MACA;IAIR,qBAAC;KAAI,WAAU;gBACZ,KAAK,aACJ,oBAAC;MACC,SAAQ;MACR,MAAK;MACL,eAAe,OAAO,KAAK,KAAK,WAAW,SAAS;gBAEnD,KAAK,eAAe;OACd,EAEV,CAAC,eACA,oBAAC;MAAO,MAAK;MAAK,SAAS;gBAAY;OAE9B;MAEP;;IACF;GAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learning-journey-ui-onboarding.docblock.js","names":[],"sources":["../../src/docs/learning-journey-ui-onboarding.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst blocks: DocBlock[] = [\n {\n id: 'docs.examples.learning-journey-ui-onboarding',\n title: 'Learning Journey UI — Onboarding',\n summary:\n 'UI mini-app components for onboarding: checklists, snippets, and journey mapping.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/examples/learning-journey-ui-onboarding',\n tags: ['learning', 'ui', 'onboarding'],\n body: `## Includes\\n- Onboarding mini-app shell\\n- Views: overview, steps, progress, timeline\\n- Components: step checklist, code snippet, journey map\\n\\n## Notes\\n- Compose with design system components.\\n- Ensure accessible labels and keyboard navigation.`,\n },\n];\n\nregisterDocBlocks(blocks);\n"],"mappings":";;;AAiBA,kBAd2B,CACzB;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAY;EAAM;EAAa;CACtC,MAAM;CACP,CACF,CAEwB"}
|
package/dist/example.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'learning-journey-ui-onboarding',\n version: '1.0.0',\n title: 'Learning Journey UI — Onboarding',\n description:\n 'UI mini-app for onboarding patterns: checklists, code snippets, journey map.',\n kind: 'ui',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['learning', 'ui', 'onboarding'],\n },\n docs: {\n rootDocId: 'docs.examples.learning-journey-ui-onboarding',\n },\n entrypoints: {\n packageName: '@contractspec/example.learning-journey-ui-onboarding',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['playground', 'markdown'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAY;GAAM;GAAa;EACvC;CACD,MAAM,EACJ,WAAW,gDACZ;CACD,aAAa;EACX,aAAa;EACb,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO,CAAC,cAAc,WAAW;GAAE;EAC7D,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Overview.js","names":[],"sources":["../../src/views/Overview.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@contractspec/lib.design-system';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from '@contractspec/lib.ui-kit-web/ui/card';\nimport { Progress } from '@contractspec/lib.ui-kit-web/ui/progress';\nimport { XpBar } from '@contractspec/example.learning-journey-ui-shared';\nimport type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared';\n\ninterface OnboardingOverviewProps extends LearningViewProps {\n onStart?: () => void;\n}\n\nexport function Overview({\n track,\n progress,\n onStart,\n}: OnboardingOverviewProps) {\n const totalSteps = track.steps.length;\n const completedSteps = progress.completedStepIds.length;\n const percentComplete =\n totalSteps > 0 ? (completedSteps / totalSteps) * 100 : 0;\n const isComplete = completedSteps === totalSteps;\n\n // Estimate time remaining (rough: 5 min per step)\n const remainingSteps = totalSteps - completedSteps;\n const estimatedMinutes = remainingSteps * 5;\n\n const totalXp =\n track.totalXp ??\n track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0) +\n (track.completionRewards?.xpBonus ?? 0);\n\n return (\n <div className=\"space-y-6\">\n {/* Welcome Banner */}\n <Card className=\"overflow-hidden bg-gradient-to-r from-blue-500/10 via-violet-500/10 to-purple-500/10\">\n <CardContent className=\"p-8\">\n <div className=\"flex flex-col items-center gap-6 text-center md:flex-row md:text-left\">\n <div className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-gradient-to-br from-blue-500 to-violet-600 text-4xl shadow-lg\">\n {isComplete ? '🎉' : '🚀'}\n </div>\n <div className=\"flex-1\">\n <h1 className=\"text-2xl font-bold\">{track.name}</h1>\n <p className=\"text-muted-foreground mt-1 max-w-2xl\">\n {track.description}\n </p>\n {!isComplete && (\n <p className=\"text-muted-foreground mt-3 text-sm\">\n ⏱️ Estimated time:{' '}\n {estimatedMinutes > 0\n ? `~${estimatedMinutes} minutes`\n : 'Less than a minute'}\n </p>\n )}\n </div>\n {!isComplete && (\n <Button size=\"lg\" onClick={onStart}>\n {completedSteps > 0 ? 'Continue' : 'Get Started'}\n </Button>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Progress Overview */}\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-muted-foreground text-sm font-medium\">\n Progress\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-3xl font-bold\">\n {Math.round(percentComplete)}%\n </div>\n <Progress value={percentComplete} className=\"mt-2 h-2\" />\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {completedSteps} of {totalSteps} steps completed\n </p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-muted-foreground text-sm font-medium\">\n XP Earned\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-3xl font-bold text-blue-500\">\n {progress.xpEarned}\n </div>\n <XpBar\n current={progress.xpEarned}\n max={totalXp}\n showLabel={false}\n size=\"sm\"\n />\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-muted-foreground text-sm font-medium\">\n Time Remaining\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-3xl font-bold\">\n {isComplete ? '✓' : `~${estimatedMinutes}m`}\n </div>\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {isComplete ? 'All done!' : `${remainingSteps} steps to go`}\n </p>\n </CardContent>\n </Card>\n </div>\n\n {/* Step Preview */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>📋</span>\n <span>Your Journey</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {track.steps.map((step, index) => {\n const isStepCompleted = progress.completedStepIds.includes(\n step.id\n );\n const isCurrent =\n !isStepCompleted &&\n track.steps\n .slice(0, index)\n .every((s) => progress.completedStepIds.includes(s.id));\n\n return (\n <div\n key={step.id}\n className=\"flex items-center gap-4 rounded-lg border p-3\"\n >\n <div\n className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-semibold ${\n isStepCompleted\n ? 'bg-green-500 text-white'\n : isCurrent\n ? 'bg-blue-500 text-white'\n : 'bg-muted text-muted-foreground'\n }`}\n >\n {isStepCompleted ? '✓' : index + 1}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p\n className={`font-medium ${\n isStepCompleted\n ? 'text-green-500'\n : isCurrent\n ? 'text-foreground'\n : 'text-muted-foreground'\n }`}\n >\n {step.title}\n </p>\n </div>\n {step.xpReward && (\n <span className=\"text-muted-foreground text-sm\">\n +{step.xpReward} XP\n </span>\n )}\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n\n {/* Completion Message */}\n {isComplete && (\n <Card className=\"border-green-500/50 bg-green-500/5\">\n <CardContent className=\"flex items-center gap-4 p-6\">\n <div className=\"text-4xl\">🎉</div>\n <div>\n <h3 className=\"text-lg font-semibold text-green-500\">\n Onboarding Complete!\n </h3>\n <p className=\"text-muted-foreground\">\n You've completed all {totalSteps} steps. Welcome aboard!\n </p>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Progress.js","names":[],"sources":["../../src/views/Progress.tsx"],"sourcesContent":["'use client';\n\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from '@contractspec/lib.ui-kit-web/ui/card';\nimport { Progress } from '@contractspec/lib.ui-kit-web/ui/progress';\nimport {\n XpBar,\n BadgeDisplay,\n} from '@contractspec/example.learning-journey-ui-shared';\nimport type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared';\n\nexport function ProgressView({ track, progress }: LearningViewProps) {\n const totalSteps = track.steps.length;\n const completedSteps = progress.completedStepIds.length;\n const percentComplete =\n totalSteps > 0 ? (completedSteps / totalSteps) * 100 : 0;\n\n const totalXp =\n track.totalXp ??\n track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0) +\n (track.completionRewards?.xpBonus ?? 0);\n\n const remainingSteps = totalSteps - completedSteps;\n const estimatedMinutes = remainingSteps * 5;\n\n return (\n <div className=\"space-y-6\">\n {/* Main Progress */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>📈</span>\n <span>Your Progress</span>\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n {/* Circular progress indicator */}\n <div className=\"flex items-center justify-center\">\n <div className=\"relative flex h-40 w-40 items-center justify-center\">\n <svg\n className=\"absolute h-full w-full -rotate-90\"\n viewBox=\"0 0 100 100\"\n >\n <circle\n cx=\"50\"\n cy=\"50\"\n r=\"45\"\n fill=\"none\"\n strokeWidth=\"8\"\n className=\"stroke-muted\"\n />\n <circle\n cx=\"50\"\n cy=\"50\"\n r=\"45\"\n fill=\"none\"\n strokeWidth=\"8\"\n strokeLinecap=\"round\"\n strokeDasharray={`${percentComplete * 2.83} 283`}\n className=\"stroke-blue-500 transition-all duration-500\"\n />\n </svg>\n <div className=\"text-center\">\n <div className=\"text-3xl font-bold\">\n {Math.round(percentComplete)}%\n </div>\n <div className=\"text-muted-foreground text-sm\">Complete</div>\n </div>\n </div>\n </div>\n\n {/* Stats row */}\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div>\n <div className=\"text-2xl font-bold text-green-500\">\n {completedSteps}\n </div>\n <div className=\"text-muted-foreground text-sm\">Completed</div>\n </div>\n <div>\n <div className=\"text-2xl font-bold text-orange-500\">\n {remainingSteps}\n </div>\n <div className=\"text-muted-foreground text-sm\">Remaining</div>\n </div>\n <div>\n <div className=\"text-2xl font-bold\">{estimatedMinutes}m</div>\n <div className=\"text-muted-foreground text-sm\">Est. Time</div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* XP Progress */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>⚡</span>\n <span>Experience Points</span>\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-3xl font-bold text-blue-500\">\n {progress.xpEarned}\n </span>\n <span className=\"text-muted-foreground\">/ {totalXp} XP</span>\n </div>\n <XpBar\n current={progress.xpEarned}\n max={totalXp}\n showLabel={false}\n size=\"lg\"\n />\n </CardContent>\n </Card>\n\n {/* Badges */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>🏅</span>\n <span>Achievements</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <BadgeDisplay badges={progress.badges} size=\"lg\" />\n {progress.badges.length === 0 &&\n track.completionRewards?.badgeKey && (\n <p className=\"text-muted-foreground text-sm\">\n Complete all steps to earn the \"\n {track.completionRewards.badgeKey}\" badge!\n </p>\n )}\n </CardContent>\n </Card>\n\n {/* Step-by-step breakdown */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>📋</span>\n <span>Step Details</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {track.steps.map((step, index) => {\n const isCompleted = progress.completedStepIds.includes(step.id);\n const stepProgress = isCompleted ? 100 : 0;\n\n return (\n <div key={step.id} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span\n className={\n isCompleted ? 'text-green-500' : 'text-foreground'\n }\n >\n {index + 1}. {step.title}\n </span>\n <span\n className={\n isCompleted ? 'text-green-500' : 'text-muted-foreground'\n }\n >\n {isCompleted ? '✓' : 'Pending'}\n </span>\n </div>\n <Progress value={stepProgress} className=\"h-1\" />\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n\n// Re-export with correct name\nexport { ProgressView as Progress };\n"],"mappings":"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"}
|
package/dist/views/Steps.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Steps.js","names":[],"sources":["../../src/views/Steps.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Progress } from '@contractspec/lib.ui-kit-web/ui/progress';\nimport { StepChecklist } from '../components/StepChecklist';\nimport type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared';\n\nexport function Steps({ track, progress, onStepComplete }: LearningViewProps) {\n const [expandedStepId, setExpandedStepId] = useState<string | null>(() => {\n // Auto-expand first incomplete step\n const firstIncomplete = track.steps.find(\n (s) => !progress.completedStepIds.includes(s.id)\n );\n return firstIncomplete?.id ?? null;\n });\n\n const completedSteps = progress.completedStepIds.length;\n const totalSteps = track.steps.length;\n const percentComplete =\n totalSteps > 0 ? (completedSteps / totalSteps) * 100 : 0;\n\n const currentStepIndex = track.steps.findIndex(\n (s) => !progress.completedStepIds.includes(s.id)\n );\n\n return (\n <div className=\"space-y-6\">\n {/* Progress Header */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-bold\">Complete Each Step</h2>\n <span className=\"text-muted-foreground text-sm\">\n {completedSteps} / {totalSteps} completed\n </span>\n </div>\n <Progress value={percentComplete} className=\"h-2\" />\n </div>\n\n {/* Steps List */}\n <div className=\"space-y-3\">\n {track.steps.map((step, index) => {\n const isCompleted = progress.completedStepIds.includes(step.id);\n const isCurrent = index === currentStepIndex;\n\n return (\n <StepChecklist\n key={step.id}\n step={step}\n stepNumber={index + 1}\n isCompleted={isCompleted}\n isCurrent={isCurrent}\n isExpanded={expandedStepId === step.id}\n onToggle={() =>\n setExpandedStepId(expandedStepId === step.id ? null : step.id)\n }\n onComplete={() => {\n onStepComplete?.(step.id);\n // Auto-expand next step\n const nextStep = track.steps[index + 1];\n if (\n nextStep &&\n !progress.completedStepIds.includes(nextStep.id)\n ) {\n setExpandedStepId(nextStep.id);\n }\n }}\n />\n );\n })}\n </div>\n\n {/* Completion rewards hint */}\n {track.completionRewards && percentComplete < 100 && (\n <div className=\"rounded-lg border border-blue-500/30 bg-blue-500/5 p-4\">\n <p className=\"text-sm\">\n 🎁 Complete all steps to unlock:\n {track.completionRewards.xpBonus && (\n <span className=\"ml-2 font-semibold text-blue-500\">\n +{track.completionRewards.xpBonus} XP bonus\n </span>\n )}\n {track.completionRewards.badgeKey && (\n <span className=\"ml-2 font-semibold text-amber-500\">\n + \"{track.completionRewards.badgeKey}\" badge\n </span>\n )}\n </p>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,MAAM,EAAE,OAAO,UAAU,kBAAqC;CAC5E,MAAM,CAAC,gBAAgB,qBAAqB,eAA8B;AAKxE,SAHwB,MAAM,MAAM,MACjC,MAAM,CAAC,SAAS,iBAAiB,SAAS,EAAE,GAAG,CACjD,EACuB,MAAM;GAC9B;CAEF,MAAM,iBAAiB,SAAS,iBAAiB;CACjD,MAAM,aAAa,MAAM,MAAM;CAC/B,MAAM,kBACJ,aAAa,IAAK,iBAAiB,aAAc,MAAM;CAEzD,MAAM,mBAAmB,MAAM,MAAM,WAClC,MAAM,CAAC,SAAS,iBAAiB,SAAS,EAAE,GAAG,CACjD;AAED,QACE,qBAAC;EAAI,WAAU;;GAEb,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAI,WAAU;gBACb,oBAAC;MAAG,WAAU;gBAAoB;OAAuB,EACzD,qBAAC;MAAK,WAAU;;OACb;OAAe;OAAI;OAAW;;OAC1B;MACH,EACN,oBAAC;KAAS,OAAO;KAAiB,WAAU;MAAQ;KAChD;GAGN,oBAAC;IAAI,WAAU;cACZ,MAAM,MAAM,KAAK,MAAM,UAAU;KAChC,MAAM,cAAc,SAAS,iBAAiB,SAAS,KAAK,GAAG;KAC/D,MAAM,YAAY,UAAU;AAE5B,YACE,oBAAC;MAEO;MACN,YAAY,QAAQ;MACP;MACF;MACX,YAAY,mBAAmB,KAAK;MACpC,gBACE,kBAAkB,mBAAmB,KAAK,KAAK,OAAO,KAAK,GAAG;MAEhE,kBAAkB;AAChB,wBAAiB,KAAK,GAAG;OAEzB,MAAM,WAAW,MAAM,MAAM,QAAQ;AACrC,WACE,YACA,CAAC,SAAS,iBAAiB,SAAS,SAAS,GAAG,CAEhD,mBAAkB,SAAS,GAAG;;QAjB7B,KAAK,GAoBV;MAEJ;KACE;GAGL,MAAM,qBAAqB,kBAAkB,OAC5C,oBAAC;IAAI,WAAU;cACb,qBAAC;KAAE,WAAU;;MAAU;MAEpB,MAAM,kBAAkB,WACvB,qBAAC;OAAK,WAAU;;QAAmC;QAC/C,MAAM,kBAAkB;QAAQ;;QAC7B;MAER,MAAM,kBAAkB,YACvB,qBAAC;OAAK,WAAU;;QAAoC;QAC9C,MAAM,kBAAkB;QAAS;;QAChC;;MAEP;KACA;;GAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.js","names":[],"sources":["../../src/views/Timeline.tsx"],"sourcesContent":["'use client';\n\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from '@contractspec/lib.ui-kit-web/ui/card';\nimport { JourneyMap } from '../components/JourneyMap';\nimport type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared';\n\nexport function Timeline({ track, progress }: LearningViewProps) {\n // Find current step\n const currentStepId =\n track.steps.find((s) => !progress.completedStepIds.includes(s.id))?.id ??\n null;\n\n return (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-bold\">Your Learning Journey</h2>\n <p className=\"text-muted-foreground\">\n Follow the path through each surface and feature\n </p>\n </div>\n\n {/* Journey Map */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>🗺️</span>\n <span>Journey Map</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <JourneyMap\n steps={track.steps}\n completedStepIds={progress.completedStepIds}\n currentStepId={currentStepId}\n />\n </CardContent>\n </Card>\n\n {/* Detailed Timeline */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <span>📍</span>\n <span>Step by Step</span>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"bg-border absolute top-0 left-4 h-full w-0.5\" />\n\n {/* Steps */}\n <div className=\"space-y-6\">\n {track.steps.map((step, index) => {\n const isCompleted = progress.completedStepIds.includes(step.id);\n const isCurrent = step.id === currentStepId;\n const surface = (step.metadata?.surface as string) ?? 'general';\n\n return (\n <div key={step.id} className=\"relative flex gap-4 pl-2\">\n {/* Node */}\n <div\n className={`relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 transition-all ${\n isCompleted\n ? 'border-green-500 bg-green-500 text-white'\n : isCurrent\n ? 'border-blue-500 bg-blue-500 text-white ring-4 ring-blue-500/20'\n : 'border-border bg-background text-muted-foreground'\n }`}\n >\n {isCompleted ? '✓' : index + 1}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 pb-2\">\n <div className=\"rounded-lg border p-4\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h4\n className={`font-semibold ${\n isCompleted\n ? 'text-green-500'\n : isCurrent\n ? 'text-blue-500'\n : 'text-foreground'\n }`}\n >\n {step.title}\n </h4>\n <span className=\"bg-muted text-muted-foreground rounded px-2 py-0.5 text-xs\">\n {surface}\n </span>\n </div>\n <p className=\"text-muted-foreground mt-1 text-sm\">\n {step.description}\n </p>\n </div>\n {step.xpReward && (\n <span\n className={`shrink-0 rounded-full px-2 py-1 text-xs font-semibold ${\n isCompleted\n ? 'bg-green-500/10 text-green-500'\n : 'bg-muted text-muted-foreground'\n }`}\n >\n +{step.xpReward} XP\n </span>\n )}\n </div>\n\n {/* Status */}\n <div className=\"mt-3 text-xs\">\n {isCompleted ? (\n <span className=\"text-green-500\">✓ Completed</span>\n ) : isCurrent ? (\n <span className=\"text-blue-500\">→ In Progress</span>\n ) : (\n <span className=\"text-muted-foreground\">\n ○ Not Started\n </span>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,SAAS,EAAE,OAAO,YAA+B;CAE/D,MAAM,gBACJ,MAAM,MAAM,MAAM,MAAM,CAAC,SAAS,iBAAiB,SAAS,EAAE,GAAG,CAAC,EAAE,MACpE;AAEF,QACE,qBAAC;EAAI,WAAU;;GAEb,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAG,WAAU;eAAoB;MAA0B,EAC5D,oBAAC;KAAE,WAAU;eAAwB;MAEjC;KACA;GAGN,qBAAC,mBACC,oBAAC,wBACC,qBAAC;IAAU,WAAU;eACnB,oBAAC,oBAAK,QAAU,EAChB,oBAAC,oBAAK,gBAAkB;KACd,GACD,EACb,oBAAC,yBACC,oBAAC;IACC,OAAO,MAAM;IACb,kBAAkB,SAAS;IACZ;KACf,GACU,IACT;GAGP,qBAAC,mBACC,oBAAC,wBACC,qBAAC;IAAU,WAAU;eACnB,oBAAC,oBAAK,OAAS,EACf,oBAAC,oBAAK,iBAAmB;KACf,GACD,EACb,oBAAC,yBACC,qBAAC;IAAI,WAAU;eAEb,oBAAC,SAAI,WAAU,iDAAiD,EAGhE,oBAAC;KAAI,WAAU;eACZ,MAAM,MAAM,KAAK,MAAM,UAAU;MAChC,MAAM,cAAc,SAAS,iBAAiB,SAAS,KAAK,GAAG;MAC/D,MAAM,YAAY,KAAK,OAAO;MAC9B,MAAM,UAAW,KAAK,UAAU,WAAsB;AAEtD,aACE,qBAAC;OAAkB,WAAU;kBAE3B,oBAAC;QACC,WAAW,wGACT,cACI,6CACA,YACE,mEACA;kBAGP,cAAc,MAAM,QAAQ;SACzB,EAGN,oBAAC;QAAI,WAAU;kBACb,qBAAC;SAAI,WAAU;oBACb,qBAAC;UAAI,WAAU;qBACb,qBAAC,oBACC,qBAAC;WAAI,WAAU;sBACb,oBAAC;YACC,WAAW,iBACT,cACI,mBACA,YACE,kBACA;sBAGP,KAAK;aACH,EACL,oBAAC;YAAK,WAAU;sBACb;aACI;YACH,EACN,oBAAC;WAAE,WAAU;qBACV,KAAK;YACJ,IACA,EACL,KAAK,YACJ,qBAAC;WACC,WAAW,yDACT,cACI,mCACA;;YAEP;YACG,KAAK;YAAS;;YACX;WAEL,EAGN,oBAAC;UAAI,WAAU;oBACZ,cACC,oBAAC;WAAK,WAAU;qBAAiB;YAAkB,GACjD,YACF,oBAAC;WAAK,WAAU;qBAAgB;YAAoB,GAEpD,oBAAC;WAAK,WAAU;qBAAwB;YAEjC;WAEL;UACF;SACF;SAjEE,KAAK,GAkET;OAER;MACE;KACF,GACM,IACT;;GACH"}
|