@krak-stack/registry 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +29 -0
  2. package/dist/components/ui/alert-dialog.d.ts +18 -0
  3. package/dist/components/ui/app-brand.d.ts +26 -0
  4. package/dist/components/ui/app-brand.js +78 -0
  5. package/dist/components/ui/attachment.d.ts +23 -0
  6. package/dist/components/ui/badge.d.ts +7 -0
  7. package/dist/components/ui/button.d.ts +8 -0
  8. package/dist/components/ui/card.d.ts +11 -0
  9. package/dist/components/ui/checkbox.d.ts +3 -0
  10. package/dist/components/ui/code-block.d.ts +14 -0
  11. package/dist/components/ui/code-block.js +224 -0
  12. package/dist/components/ui/command.d.ts +18 -0
  13. package/dist/components/ui/copy-button.d.ts +18 -0
  14. package/dist/components/ui/copy-button.js +133 -0
  15. package/dist/components/ui/data-table.d.ts +264 -0
  16. package/dist/components/ui/data-table.js +3594 -0
  17. package/dist/components/ui/dialog.d.ts +13 -0
  18. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  19. package/dist/components/ui/editing-locale-switcher.d.ts +7 -0
  20. package/dist/components/ui/editing-locale-switcher.js +626 -0
  21. package/dist/components/ui/effect-form.d.ts +137 -0
  22. package/dist/components/ui/effect-form.js +2330 -0
  23. package/dist/components/ui/field.d.ts +24 -0
  24. package/dist/components/ui/file-picker.d.ts +30 -0
  25. package/dist/components/ui/file-picker.js +811 -0
  26. package/dist/components/ui/form.d.ts +402 -0
  27. package/dist/components/ui/form.js +2245 -0
  28. package/dist/components/ui/google-map.d.ts +103 -0
  29. package/dist/components/ui/google-map.js +754 -0
  30. package/dist/components/ui/icon-input.d.ts +9 -0
  31. package/dist/components/ui/icon-input.js +971 -0
  32. package/dist/components/ui/input-group.d.ts +17 -0
  33. package/dist/components/ui/input.d.ts +3 -0
  34. package/dist/components/ui/label.d.ts +3 -0
  35. package/dist/components/ui/loading.d.ts +7 -0
  36. package/dist/components/ui/loading.js +467 -0
  37. package/dist/components/ui/locale-switcher.d.ts +7 -0
  38. package/dist/components/ui/locale-switcher.js +632 -0
  39. package/dist/components/ui/pagination.d.ts +43 -0
  40. package/dist/components/ui/pagination.js +787 -0
  41. package/dist/components/ui/popover.d.ts +9 -0
  42. package/dist/components/ui/scroll-area.d.ts +4 -0
  43. package/dist/components/ui/search-menu.d.ts +34 -0
  44. package/dist/components/ui/search-menu.js +839 -0
  45. package/dist/components/ui/select.d.ts +15 -0
  46. package/dist/components/ui/separator.d.ts +3 -0
  47. package/dist/components/ui/sheet.d.ts +14 -0
  48. package/dist/components/ui/sidebar-layout.d.ts +29 -0
  49. package/dist/components/ui/sidebar-layout.js +755 -0
  50. package/dist/components/ui/sidebar.d.ts +63 -0
  51. package/dist/components/ui/skeleton.d.ts +2 -0
  52. package/dist/components/ui/stats-card.d.ts +12 -0
  53. package/dist/components/ui/stats-card.js +125 -0
  54. package/dist/components/ui/table.d.ts +10 -0
  55. package/dist/components/ui/textarea.d.ts +3 -0
  56. package/dist/components/ui/theme-switcher.d.ts +29 -0
  57. package/dist/components/ui/theme-switcher.js +775 -0
  58. package/dist/components/ui/tooltip.d.ts +6 -0
  59. package/dist/components/ui/virtualized-combobox.d.ts +54 -0
  60. package/dist/components/ui/virtualized-combobox.js +821 -0
  61. package/dist/hooks/use-mobile.d.ts +1 -0
  62. package/dist/lib/query.d.ts +49 -0
  63. package/dist/lib/utils.d.ts +2 -0
  64. package/dist/paraglide/runtime.d.ts +978 -0
  65. package/dist/services/embedding.d.ts +2 -0
  66. package/dist/services/embedding.js +23 -0
  67. package/dist/services/notification/channels/index.d.ts +22 -0
  68. package/dist/services/notification/channels/index.js +11 -0
  69. package/dist/services/notification/channels/ses/index.d.ts +51 -0
  70. package/dist/services/notification/channels/ses/index.js +145 -0
  71. package/dist/services/notification/channels/ses/schema.d.ts +13 -0
  72. package/dist/services/notification/channels/ses/schema.js +35 -0
  73. package/dist/services/notification/index.d.ts +15 -0
  74. package/dist/services/notification/index.js +67 -0
  75. package/dist/services/notification/schema.d.ts +10 -0
  76. package/dist/services/notification/schema.js +30 -0
  77. package/dist/services/opentelemetry.d.ts +8 -0
  78. package/dist/services/opentelemetry.js +23 -0
  79. package/dist/services/s3/index.d.ts +62 -0
  80. package/dist/services/s3/index.js +208 -0
  81. package/dist/services/s3/schema.d.ts +18 -0
  82. package/dist/services/s3/schema.js +37 -0
  83. package/package.json +218 -0
  84. package/tailwind.css +1 -0
@@ -0,0 +1,208 @@
1
+ // ../../src/services/s3/index.ts
2
+ import { Config, Context, Effect, Layer, Redacted } from "effect";
3
+
4
+ // ../../src/services/s3/schema.ts
5
+ import { Schema } from "effect";
6
+ var PresignUploadPayload = Schema.Struct({
7
+ fileName: Schema.NonEmptyString,
8
+ contentType: Schema.NonEmptyString
9
+ }).annotate({
10
+ identifier: "PresignUploadPayload",
11
+ title: "Presign upload payload",
12
+ description: "Payload used to request a presigned S3 upload URL.",
13
+ examples: [{ fileName: "logo.png", contentType: "image/png" }]
14
+ });
15
+ var PresignedUpload = Schema.Struct({
16
+ uploadUrl: Schema.String,
17
+ url: Schema.String
18
+ }).annotate({
19
+ identifier: "PresignedUpload",
20
+ title: "Presigned upload",
21
+ description: "Presigned S3 upload URL and stable public asset URL.",
22
+ examples: [
23
+ {
24
+ uploadUrl: "https://s3.example.com/bucket/logos/organizations/logo.png?signature=...",
25
+ url: "/api/assets/logos/organizations/logo.png"
26
+ }
27
+ ]
28
+ });
29
+
30
+ class S3ServiceError extends Schema.TaggedErrorClass()("S3ServiceError", {
31
+ message: Schema.String,
32
+ path: Schema.optional(Schema.String),
33
+ error: Schema.optional(Schema.Defect())
34
+ }) {
35
+ }
36
+
37
+ // ../../src/services/s3/index.ts
38
+ class S3ServiceConfig extends Context.Service()("S3ServiceConfig", {
39
+ make: Effect.gen(function* () {
40
+ const accessKeyId = yield* Config.redacted("S3_ACCESS_KEY_ID");
41
+ const secretAccessKey = yield* Config.redacted("S3_SECRET_ACCESS_KEY");
42
+ const bucket = yield* Config.string("S3_BUCKET");
43
+ const region = yield* Config.string("S3_REGION").pipe(Config.withDefault(""));
44
+ const endpoint = yield* Config.string("S3_ENDPOINT").pipe(Config.withDefault(""));
45
+ const sessionToken = yield* Config.redacted("S3_SESSION_TOKEN").pipe(Config.orElse(() => Config.succeed(Redacted.make(""))));
46
+ return {
47
+ options: {
48
+ accessKeyId: Redacted.value(accessKeyId),
49
+ secretAccessKey: Redacted.value(secretAccessKey),
50
+ bucket,
51
+ ...region ? { region } : {},
52
+ ...endpoint ? { endpoint } : {},
53
+ ...Redacted.value(sessionToken) ? { sessionToken: Redacted.value(sessionToken) } : {}
54
+ }
55
+ };
56
+ })
57
+ }) {
58
+ static layer = Layer.effect(this, this.make);
59
+ }
60
+
61
+ class S3Service extends Context.Service()("S3Service", {
62
+ make: Effect.gen(function* () {
63
+ const config = yield* S3ServiceConfig;
64
+ const client = new Bun.S3Client(config.options);
65
+ const file = Effect.fn("S3Service.file")((path, options) => Effect.try({
66
+ try: () => client.file(path, options),
67
+ catch: (error) => new S3ServiceError({
68
+ message: "Failed to create S3 file reference",
69
+ path,
70
+ error
71
+ })
72
+ }));
73
+ const write = Effect.fn("S3Service.write")(function* (path, data, options) {
74
+ return yield* Effect.tryPromise({
75
+ try: () => client.write(path, data, options),
76
+ catch: (error) => new S3ServiceError({
77
+ message: "Failed to write S3 object",
78
+ path,
79
+ error
80
+ })
81
+ });
82
+ });
83
+ const text = Effect.fn("S3Service.text")(function* (path) {
84
+ const s3File = yield* file(path);
85
+ return yield* Effect.tryPromise({
86
+ try: () => s3File.text(),
87
+ catch: (error) => new S3ServiceError({
88
+ message: "Failed to read S3 object as text",
89
+ path,
90
+ error
91
+ })
92
+ });
93
+ });
94
+ const json = Effect.fn("S3Service.json")(function* (path) {
95
+ const s3File = yield* file(path);
96
+ return yield* Effect.tryPromise({
97
+ try: () => s3File.json(),
98
+ catch: (error) => new S3ServiceError({
99
+ message: "Failed to read S3 object as JSON",
100
+ path,
101
+ error
102
+ })
103
+ });
104
+ });
105
+ const bytes = Effect.fn("S3Service.bytes")(function* (path) {
106
+ const s3File = yield* file(path);
107
+ return yield* Effect.tryPromise({
108
+ try: () => s3File.bytes(),
109
+ catch: (error) => new S3ServiceError({
110
+ message: "Failed to read S3 object as bytes",
111
+ path,
112
+ error
113
+ })
114
+ });
115
+ });
116
+ const arrayBuffer = Effect.fn("S3Service.arrayBuffer")(function* (path) {
117
+ const s3File = yield* file(path);
118
+ return yield* Effect.tryPromise({
119
+ try: () => s3File.arrayBuffer(),
120
+ catch: (error) => new S3ServiceError({
121
+ message: "Failed to read S3 object as an ArrayBuffer",
122
+ path,
123
+ error
124
+ })
125
+ });
126
+ });
127
+ const stream = Effect.fn("S3Service.stream")((path) => Effect.gen(function* () {
128
+ const s3File = yield* file(path);
129
+ return yield* Effect.try({
130
+ try: () => s3File.stream(),
131
+ catch: (error) => new S3ServiceError({
132
+ message: "Failed to stream S3 object",
133
+ path,
134
+ error
135
+ })
136
+ });
137
+ }));
138
+ const exists = Effect.fn("S3Service.exists")((path) => Effect.tryPromise({
139
+ try: () => client.exists(path),
140
+ catch: (error) => new S3ServiceError({
141
+ message: "Failed to check S3 object existence",
142
+ path,
143
+ error
144
+ })
145
+ }));
146
+ const stat = Effect.fn("S3Service.stat")((path) => Effect.tryPromise({
147
+ try: () => client.stat(path),
148
+ catch: (error) => new S3ServiceError({
149
+ message: "Failed to stat S3 object",
150
+ path,
151
+ error
152
+ })
153
+ }));
154
+ const size = Effect.fn("S3Service.size")((path) => Effect.tryPromise({
155
+ try: () => client.size(path),
156
+ catch: (error) => new S3ServiceError({
157
+ message: "Failed to get S3 object size",
158
+ path,
159
+ error
160
+ })
161
+ }));
162
+ const _delete = Effect.fn("S3Service.delete")((path) => Effect.tryPromise({
163
+ try: () => client.delete(path),
164
+ catch: (error) => new S3ServiceError({
165
+ message: "Failed to delete S3 object",
166
+ path,
167
+ error
168
+ })
169
+ }));
170
+ const presign = Effect.fn("S3Service.presign")((path, options) => Effect.try({
171
+ try: () => client.presign(path, options),
172
+ catch: (error) => new S3ServiceError({
173
+ message: "Failed to presign S3 object",
174
+ path,
175
+ error
176
+ })
177
+ }));
178
+ const list = Effect.fn("S3Service.list")((options) => Effect.tryPromise({
179
+ try: () => client.list(options),
180
+ catch: (error) => new S3ServiceError({
181
+ message: "Failed to list S3 objects",
182
+ error
183
+ })
184
+ }));
185
+ return {
186
+ file,
187
+ write,
188
+ text,
189
+ json,
190
+ bytes,
191
+ arrayBuffer,
192
+ stream,
193
+ exists,
194
+ stat,
195
+ size,
196
+ delete: _delete,
197
+ presign,
198
+ list
199
+ };
200
+ })
201
+ }) {
202
+ static layer = Layer.effect(this, this.make).pipe(Layer.provide(S3ServiceConfig.layer));
203
+ static testLayer = (service) => Layer.succeed(this, service);
204
+ }
205
+ export {
206
+ S3ServiceConfig,
207
+ S3Service
208
+ };
@@ -0,0 +1,18 @@
1
+ import { Schema } from "effect";
2
+ export declare const PresignUploadPayload: Schema.Struct<{
3
+ readonly fileName: Schema.NonEmptyString;
4
+ readonly contentType: Schema.NonEmptyString;
5
+ }>;
6
+ export declare const PresignedUpload: Schema.Struct<{
7
+ readonly uploadUrl: Schema.String;
8
+ readonly url: Schema.String;
9
+ }>;
10
+ export type PresignUploadPayload = typeof PresignUploadPayload.Type;
11
+ declare const S3ServiceError_base: Schema.Class<S3ServiceError, Schema.TaggedStruct<"S3ServiceError", {
12
+ readonly message: Schema.String;
13
+ readonly path: Schema.optional<Schema.String>;
14
+ readonly error: Schema.optional<Schema.Defect>;
15
+ }>, import("effect/Cause").YieldableError>;
16
+ export declare class S3ServiceError extends S3ServiceError_base {
17
+ }
18
+ export {};
@@ -0,0 +1,37 @@
1
+ // ../../src/services/s3/schema.ts
2
+ import { Schema } from "effect";
3
+ var PresignUploadPayload = Schema.Struct({
4
+ fileName: Schema.NonEmptyString,
5
+ contentType: Schema.NonEmptyString
6
+ }).annotate({
7
+ identifier: "PresignUploadPayload",
8
+ title: "Presign upload payload",
9
+ description: "Payload used to request a presigned S3 upload URL.",
10
+ examples: [{ fileName: "logo.png", contentType: "image/png" }]
11
+ });
12
+ var PresignedUpload = Schema.Struct({
13
+ uploadUrl: Schema.String,
14
+ url: Schema.String
15
+ }).annotate({
16
+ identifier: "PresignedUpload",
17
+ title: "Presigned upload",
18
+ description: "Presigned S3 upload URL and stable public asset URL.",
19
+ examples: [
20
+ {
21
+ uploadUrl: "https://s3.example.com/bucket/logos/organizations/logo.png?signature=...",
22
+ url: "/api/assets/logos/organizations/logo.png"
23
+ }
24
+ ]
25
+ });
26
+
27
+ class S3ServiceError extends Schema.TaggedErrorClass()("S3ServiceError", {
28
+ message: Schema.String,
29
+ path: Schema.optional(Schema.String),
30
+ error: Schema.optional(Schema.Defect())
31
+ }) {
32
+ }
33
+ export {
34
+ S3ServiceError,
35
+ PresignedUpload,
36
+ PresignUploadPayload
37
+ };
package/package.json ADDED
@@ -0,0 +1,218 @@
1
+ {
2
+ "name": "@krak-stack/registry",
3
+ "version": "0.1.0",
4
+ "description": "Tree-shakable KrakStack components and Effect services.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/krakcons/krakstack-site.git",
9
+ "directory": "packages/registry"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "tailwind.css"
15
+ ],
16
+ "type": "module",
17
+ "sideEffects": false,
18
+ "exports": {
19
+ "./app-brand": {
20
+ "types": "./dist/components/ui/app-brand.d.ts",
21
+ "import": "./dist/components/ui/app-brand.js"
22
+ },
23
+ "./code-block": {
24
+ "types": "./dist/components/ui/code-block.d.ts",
25
+ "import": "./dist/components/ui/code-block.js"
26
+ },
27
+ "./copy-button": {
28
+ "types": "./dist/components/ui/copy-button.d.ts",
29
+ "import": "./dist/components/ui/copy-button.js"
30
+ },
31
+ "./data-table": {
32
+ "types": "./dist/components/ui/data-table.d.ts",
33
+ "import": "./dist/components/ui/data-table.js"
34
+ },
35
+ "./editing-locale-switcher": {
36
+ "types": "./dist/components/ui/editing-locale-switcher.d.ts",
37
+ "import": "./dist/components/ui/editing-locale-switcher.js"
38
+ },
39
+ "./effect-form": {
40
+ "types": "./dist/components/ui/effect-form.d.ts",
41
+ "import": "./dist/components/ui/effect-form.js"
42
+ },
43
+ "./file-picker": {
44
+ "types": "./dist/components/ui/file-picker.d.ts",
45
+ "import": "./dist/components/ui/file-picker.js"
46
+ },
47
+ "./form": {
48
+ "types": "./dist/components/ui/form.d.ts",
49
+ "import": "./dist/components/ui/form.js"
50
+ },
51
+ "./google-map": {
52
+ "types": "./dist/components/ui/google-map.d.ts",
53
+ "import": "./dist/components/ui/google-map.js"
54
+ },
55
+ "./icon-input": {
56
+ "types": "./dist/components/ui/icon-input.d.ts",
57
+ "import": "./dist/components/ui/icon-input.js"
58
+ },
59
+ "./loading": {
60
+ "types": "./dist/components/ui/loading.d.ts",
61
+ "import": "./dist/components/ui/loading.js"
62
+ },
63
+ "./locale-switcher": {
64
+ "types": "./dist/components/ui/locale-switcher.d.ts",
65
+ "import": "./dist/components/ui/locale-switcher.js"
66
+ },
67
+ "./pagination": {
68
+ "types": "./dist/components/ui/pagination.d.ts",
69
+ "import": "./dist/components/ui/pagination.js"
70
+ },
71
+ "./search-menu": {
72
+ "types": "./dist/components/ui/search-menu.d.ts",
73
+ "import": "./dist/components/ui/search-menu.js"
74
+ },
75
+ "./sidebar-layout": {
76
+ "types": "./dist/components/ui/sidebar-layout.d.ts",
77
+ "import": "./dist/components/ui/sidebar-layout.js"
78
+ },
79
+ "./stats-card": {
80
+ "types": "./dist/components/ui/stats-card.d.ts",
81
+ "import": "./dist/components/ui/stats-card.js"
82
+ },
83
+ "./theme-switcher": {
84
+ "types": "./dist/components/ui/theme-switcher.d.ts",
85
+ "import": "./dist/components/ui/theme-switcher.js"
86
+ },
87
+ "./virtualized-combobox": {
88
+ "types": "./dist/components/ui/virtualized-combobox.d.ts",
89
+ "import": "./dist/components/ui/virtualized-combobox.js"
90
+ },
91
+ "./service-notification": {
92
+ "types": "./dist/services/notification/index.d.ts",
93
+ "import": "./dist/services/notification/index.js"
94
+ },
95
+ "./service-notification/channels": {
96
+ "types": "./dist/services/notification/channels/index.d.ts",
97
+ "import": "./dist/services/notification/channels/index.js"
98
+ },
99
+ "./service-notification/schema": {
100
+ "types": "./dist/services/notification/schema.d.ts",
101
+ "import": "./dist/services/notification/schema.js"
102
+ },
103
+ "./notification-channel-email-ses": {
104
+ "types": "./dist/services/notification/channels/ses/index.d.ts",
105
+ "import": "./dist/services/notification/channels/ses/index.js"
106
+ },
107
+ "./notification-channel-email-ses/schema": {
108
+ "types": "./dist/services/notification/channels/ses/schema.d.ts",
109
+ "import": "./dist/services/notification/channels/ses/schema.js"
110
+ },
111
+ "./service-s3": {
112
+ "types": "./dist/services/s3/index.d.ts",
113
+ "import": "./dist/services/s3/index.js"
114
+ },
115
+ "./service-s3/schema": {
116
+ "types": "./dist/services/s3/schema.d.ts",
117
+ "import": "./dist/services/s3/schema.js"
118
+ },
119
+ "./service-opentelemetry": {
120
+ "types": "./dist/services/opentelemetry.d.ts",
121
+ "import": "./dist/services/opentelemetry.js"
122
+ },
123
+ "./embedding-layer": {
124
+ "types": "./dist/services/embedding.d.ts",
125
+ "import": "./dist/services/embedding.js"
126
+ },
127
+ "./tailwind.css": "./tailwind.css",
128
+ "./package.json": "./package.json"
129
+ },
130
+ "publishConfig": {
131
+ "access": "public"
132
+ },
133
+ "scripts": {
134
+ "build": "bun run build.ts",
135
+ "prepack": "bun run build"
136
+ },
137
+ "peerDependencies": {
138
+ "@aws-sdk/client-sesv2": "^3.1068.0",
139
+ "@base-ui/react": "^1.5.0",
140
+ "@dnd-kit/core": "^6.3.1",
141
+ "@dnd-kit/sortable": "^10.0.0",
142
+ "@dnd-kit/utilities": "^3.2.2",
143
+ "@effect/ai-openai-compat": "4.0.0-beta.85",
144
+ "@effect/atom-react": "4.0.0-beta.85",
145
+ "@effect/platform-browser": "4.0.0-beta.85",
146
+ "@iconify/react": "^6.0.2",
147
+ "@inlang/paraglide-js": "^2.19.0",
148
+ "@lucas-barake/effect-form": "0.25.0-beta.6",
149
+ "@lucas-barake/effect-form-react": "0.26.0-beta.5",
150
+ "@streamdown/code": "^1.1.1",
151
+ "@tanstack/react-form": "^1.33.0",
152
+ "@tanstack/react-router": "^1.170.15",
153
+ "@tanstack/react-table": "^8.21.3",
154
+ "@tanstack/react-virtual": "^3.14.5",
155
+ "class-variance-authority": "^0.7.1",
156
+ "clsx": "^2.1.1",
157
+ "effect": "4.0.0-beta.99",
158
+ "lucide-react": "^1.18.0",
159
+ "react": "^19.2.0",
160
+ "react-dom": "^19.2.0",
161
+ "shiki": "^4.2.0",
162
+ "streamdown": "^2.5.0",
163
+ "tailwind-merge": "^3.6.0"
164
+ },
165
+ "peerDependenciesMeta": {
166
+ "@aws-sdk/client-sesv2": {
167
+ "optional": true
168
+ },
169
+ "@dnd-kit/core": {
170
+ "optional": true
171
+ },
172
+ "@dnd-kit/sortable": {
173
+ "optional": true
174
+ },
175
+ "@dnd-kit/utilities": {
176
+ "optional": true
177
+ },
178
+ "@effect/ai-openai-compat": {
179
+ "optional": true
180
+ },
181
+ "@effect/atom-react": {
182
+ "optional": true
183
+ },
184
+ "@effect/platform-browser": {
185
+ "optional": true
186
+ },
187
+ "@iconify/react": {
188
+ "optional": true
189
+ },
190
+ "@lucas-barake/effect-form": {
191
+ "optional": true
192
+ },
193
+ "@lucas-barake/effect-form-react": {
194
+ "optional": true
195
+ },
196
+ "@streamdown/code": {
197
+ "optional": true
198
+ },
199
+ "@tanstack/react-form": {
200
+ "optional": true
201
+ },
202
+ "@tanstack/react-router": {
203
+ "optional": true
204
+ },
205
+ "@tanstack/react-table": {
206
+ "optional": true
207
+ },
208
+ "@tanstack/react-virtual": {
209
+ "optional": true
210
+ },
211
+ "shiki": {
212
+ "optional": true
213
+ },
214
+ "streamdown": {
215
+ "optional": true
216
+ }
217
+ }
218
+ }
package/tailwind.css ADDED
@@ -0,0 +1 @@
1
+ @source "./dist";