@mica-js/sdk 0.2.0 → 0.2.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 CHANGED
@@ -1,38 +1,43 @@
1
1
  # @mica-js/sdk
2
2
 
3
- Device / Widget 作者 API、DDL 类型准备及 CLI 双文件构建。每个条目独立发布;一个工程可以维护多个条目。Vite 由 SDK 内部管理,作者使用 `mica build` 与 `mica prepare`。
3
+ 用于开发 Mica 器件(Device)和界面组件(Widget)。SDK 提供类型定义和 `mica` CLI,将 TypeScript、DDL 与 JSON 元数据构建成宿主可加载的组件。
4
4
 
5
- ## 工程与产物
5
+ - **Device**:使用 DDL 描述引脚和仿真行为,按需编写 TypeScript 适配器。
6
+ - **Widget**:使用 TypeScript 绘制界面,通过端口接收和发送数据。
7
+ - **组件产物**:每个组件一份 JS 和一份 JSON,依赖与资源全部内联。
6
8
 
7
- 源码使用固定入口:
9
+ ## 快速开始
8
10
 
9
- ```text
10
- src/
11
- devices/<id>/
12
- device.json
13
- model.ddl
14
- index.ts # 可选,省略时生成最小同步工厂
15
- widgets/<id>/
16
- widget.json
17
- index.ts
18
- shared/
19
- ```
11
+ 建议使用 Node.js 24 和 pnpm。`mica` 命令随 `@mica-js/sdk` 安装,不需要另外安装名为 `mica` 的包,也不需要自行配置 Vite。
20
12
 
21
- 构建结果只有以下文件,不生成归档、包清单或独立资源:
13
+ ### 1. 安装
22
14
 
23
- ```text
24
- dist/
25
- devices/<id>/device.json
26
- devices/<id>/device.js
27
- widgets/<id>/widget.json
28
- widgets/<id>/widget.js
15
+ ```shell
16
+ mkdir my-components
17
+ cd my-components
18
+ pnpm init
19
+ pnpm add -D @mica-js/sdk typescript
29
20
  ```
30
21
 
31
- 目录名与元数据 `id` 一致,字符范围为字母、数字、中划线。身份与版本由条目 JSON 的 `id`、`version` 表达。Device JS 具名导出 `model`(共享 DeviceIR)与 `create`(同步适配器工厂);Widget JS 默认导出同步实例工厂。每个 JS 独立打包依赖,宿主不解析 npm 导入或共享 chunk。模块装载及执行隔离由宿主负责。
22
+ 在 `package.json` 中添加以下字段,保留安装生成的依赖配置:
23
+
24
+ ```json
25
+ {
26
+ "private": true,
27
+ "type": "module",
28
+ "scripts": {
29
+ "build": "mica build",
30
+ "prepare:types": "mica prepare",
31
+ "typecheck": "mica prepare && tsc --noEmit"
32
+ }
33
+ }
34
+ ```
32
35
 
33
- ## 项目配置与命令
36
+ 这里的 `private` 表示组件源码工程不作为 npm 包发布,不影响生成和交付组件产物。
34
37
 
35
- 工程根目录必须包含 `mica.config.ts`,空配置使用全部默认约定:
38
+ ### 2. 创建工程配置
39
+
40
+ 在工程根目录创建 `mica.config.ts`:
36
41
 
37
42
  ```typescript
38
43
  import { defineConfig } from '@mica-js/sdk/config';
@@ -40,76 +45,268 @@ import { defineConfig } from '@mica-js/sdk/config';
40
45
  export default defineConfig({});
41
46
  ```
42
47
 
43
- CLI 从当前目录向上查找最近的 `mica.config.ts`,该文件所在目录就是项目根目录;`--root` 改变查找起点,`--config` 指定配置文件(相对于查找起点)。未找到配置时报告错误。IDE 可以仅通过文件是否存在识别项目;配置是可执行 TypeScript,只应在受信任的工程中加载。
48
+ 该文件是 CLI 识别 Mica 工程的标志。空配置默认读取 `src`,输出到 `dist`。
49
+
50
+ 创建 `tsconfig.json`:
51
+
52
+ ```json
53
+ {
54
+ "compilerOptions": {
55
+ "target": "ES2022",
56
+ "module": "ESNext",
57
+ "moduleResolution": "Bundler",
58
+ "lib": ["ES2023", "DOM"],
59
+ "strict": true,
60
+ "noEmit": true,
61
+ "skipLibCheck": true,
62
+ "allowArbitraryExtensions": true,
63
+ "verbatimModuleSyntax": true
64
+ },
65
+ "include": ["src", "mica.config.ts"]
66
+ }
67
+ ```
68
+
69
+ ### 3. 编写第一个 Widget
70
+
71
+ 创建 `src/widgets/lamp/widget.json`:
44
72
 
45
- 可选配置示例:
73
+ ```json
74
+ {
75
+ "kind": "widget",
76
+ "id": "lamp",
77
+ "version": "1.0.0",
78
+ "displayName": "Lamp"
79
+ }
80
+ ```
81
+
82
+ 同目录创建 `index.ts`:
46
83
 
47
84
  ```typescript
48
- export default defineConfig({
49
- sourceDir: 'src',
50
- outDir: 'dist',
51
- base: '/components/',
52
- alias: { '@': './src' },
85
+ import type { WidgetFactory } from '@mica-js/sdk/widget';
86
+
87
+ const create: WidgetFactory = (api) => ({
88
+ render(ctx) {
89
+ ctx.fillStyle = '#22aa55';
90
+ ctx.fillRect(0, 0, api.width, api.height);
91
+ },
53
92
  });
93
+
94
+ export default create;
95
+ ```
96
+
97
+ ### 4. 检查并构建
98
+
99
+ ```shell
100
+ pnpm run typecheck
101
+ pnpm run build
54
102
  ```
55
103
 
56
- 源码、输出及别名路径相对于项目根目录解析;输出目录必须与源码目录分离,避免构建清理覆盖源码。配置只接受 SDK 定义的字段,Vite 是内部构建引擎;作者不需要安装 Vite 或维护 `vite.config.ts`。
104
+ 生成:
105
+
106
+ ```text
107
+ dist/
108
+ widgets/lamp/widget.json
109
+ widgets/lamp/widget.js
110
+ ```
111
+
112
+ 将这两个文件交给支持 Mica 组件的宿主加载。CLI 负责构建,预览界面和运行环境由宿主提供;源码变更后重新运行构建。
113
+
114
+ 也可以从随包提供的 [basic 模板](./templates/basic/) 开始,其中包含电阻器件和通过亮度端口更新的灯组件。安装 SDK 后,模板位于 `node_modules/@mica-js/sdk/templates/basic`;复制到自己的工程目录后,执行 `pnpm add -D @mica-js/sdk@latest typescript`,更新模板的 SDK 依赖并安装当前发布版本。
115
+
116
+ ## 使用 mica CLI
117
+
118
+ 在终端通过 `pnpm exec` 调用项目本地安装的 CLI;在 `package.json` 的 scripts 中可直接使用 `mica`。
119
+
120
+ | 命令 | 用途 |
121
+ | -------------------------------- | -------------------------------------------------------- |
122
+ | `pnpm exec mica build` | 生成 DDL 类型、检查元数据并构建所有组件 |
123
+ | `pnpm exec mica prepare` | 只生成 DDL 类型声明,不构建组件 |
124
+ | `pnpm exec mica prepare --watch` | 启动 DDL 类型监听,适合与编辑器或 `tsc --watch` 同时使用 |
125
+ | `pnpm exec mica --help` | 查看命令和参数;仅输入 `mica` 也会显示帮助 |
126
+
127
+ 常用参数:
128
+
129
+ | 参数 | 含义 |
130
+ | -------------------- | ----------------------------------------------- |
131
+ | `--root <dir>` | 从指定目录开始查找工程,默认当前目录 |
132
+ | `--config <file>` | 显式指定 `mica.config.ts`;相对路径基于查找起点 |
133
+ | `--source-dir <dir>` | 覆盖配置中的源码目录 |
134
+ | `--watch` | 监听 DDL 文件,仅用于 `prepare` |
57
135
 
58
136
  ```shell
59
- mica build
60
- mica prepare
61
- mica prepare --watch
62
- mica build --config ./mica.config.ts
137
+ pnpm exec mica build --root components
138
+ pnpm exec mica build --config mica.config.ts
139
+ pnpm exec mica prepare --source-dir content
63
140
  ```
64
141
 
65
- `mica build` 准备 DDL 类型、校验元数据并独立打包每个条目,将双文件产物写入 `outDir`。预览宿主自行提供这些静态产物;组件源码变更后重新运行构建。
142
+ 默认从当前目录向上寻找最近的 `mica.config.ts`,其所在目录作为工程根目录。因此,在工程子目录中也能运行命令。`--root` 是查找起点,不一定是最终工程根目录。显式配置文件也必须命名为 `mica.config.ts`。
143
+
144
+ `prepare --watch` 只更新类型声明,不会持续构建 JS。当前 CLI 不提供开发服务器。
145
+
146
+ ## 工程目录
147
+
148
+ 一个工程可以同时包含多个 Device 和 Widget:
149
+
150
+ ```text
151
+ my-components/
152
+ mica.config.ts
153
+ package.json
154
+ tsconfig.json
155
+ src/
156
+ devices/
157
+ resistor/
158
+ device.json
159
+ model.ddl
160
+ index.ts # 可选的宿主适配器
161
+ widgets/
162
+ lamp/
163
+ widget.json
164
+ index.ts
165
+ shared/ # 组件共享的源码或内联资源
166
+ ```
167
+
168
+ 组件目录名必须与元数据 `id` 相同,只使用字母、数字和中划线。各组件的 `id` 和 `version` 在自己的 JSON 中维护,与工程 `package.json` 的名称和版本分开。
169
+
170
+ `shared` 不是组件入口;组件可以通过普通静态导入复用其中的代码。构建时,共享代码会分别打包进每个使用它的组件,不生成共享 chunk。
66
171
 
67
- 内部打包复用 Vite 的 TS 与资源转换及别名解析。`?raw` 资源成为字符串,`?url` 等标准资源导入在库构建中内联。样式表等会额外输出文件的入口会构建失败;运行期模块导入、`import.meta` 引用同样拒绝。资源如何解码和使用由实现与宿主允许的 API 决定。
172
+ ## 添加 Device
68
173
 
69
- ## DDL 类型
174
+ 创建 `src/devices/resistor/device.json`:
175
+
176
+ ```json
177
+ {
178
+ "kind": "device",
179
+ "id": "resistor",
180
+ "version": "1.0.0",
181
+ "displayName": "Resistor",
182
+ "designatorPrefix": "R",
183
+ "properties": {
184
+ "resistance": {
185
+ "type": "number",
186
+ "required": false,
187
+ "default": 1000,
188
+ "unit": "ohm"
189
+ }
190
+ },
191
+ "pins": { "a": {}, "b": {} }
192
+ }
193
+ ```
194
+
195
+ 同目录创建 `model.ddl`:
196
+
197
+ ```text
198
+ device Resistor(resistance: number default 1000) {
199
+ pin a = [resistor(to: b, resistance: resistance)];
200
+ pin b;
201
+ }
202
+ ```
203
+
204
+ 纯 DDL 器件不需要 `index.ts`,SDK 会生成最小同步工厂。需要与宿主交换输入、输出或资源时,再添加适配器:
70
205
 
71
206
  ```typescript
72
207
  import type { Factory } from './model.ddl';
73
208
 
74
- const create: Factory = (ctx) => ({
75
- sync(batch) {
76
- // ctx.props、ctx.inputs、ctx.memory 和 batch.outputs 按该 DDL 精确投影。
77
- },
209
+ const create: Factory = () => ({
210
+ sync(batch) {},
78
211
  dispose() {},
79
212
  });
80
213
 
81
214
  export default create;
82
215
  ```
83
216
 
84
- TypeScript 配置需要 `allowArbitraryExtensions: true`、`moduleResolution: "Bundler"`(或其他支持该扩展声明的解析模式)。`mica prepare` 在每份 DDL 旁生成 `model.d.ddl.ts`,提供 `Props`、`PropertyInput`、`Inputs`、`Memory`、`Outputs`、`Context`、`Batch`、`Adapter`、`Factory` 别名。声明仅供编译期使用;`import type` 不产生 DDL 运行时导入。建议忽略 `**/*.d.ddl.ts`。
217
+ 工厂和适配器钩子必须同步返回。使用生成的 `Factory` 类型可以获得与 DDL 对应的上下文、属性、输入和批次输出类型。
218
+
219
+ ### DDL 类型声明
220
+
221
+ 首次编写适配器或修改 DDL 后,运行:
85
222
 
86
223
  ```shell
87
- mica prepare
88
- mica prepare --watch
89
- mica prepare --root . --source-dir src
224
+ pnpm exec mica prepare
90
225
  ```
91
226
 
92
- `mica build` 也运行类型准备。独立 `tsc` 前仍应先运行 `mica prepare`。失败时只清理带 SDK 生成标记的过期声明;作者维护的文件受到保护。所有工厂与适配器钩子遵循新版仿真规范的同步返回、数据所有权和实例生命周期合同。
227
+ 命令会在 `model.ddl` 旁生成 `model.d.ddl.ts`。开发时可单独运行 `pnpm exec mica prepare --watch` 保持声明更新。`mica build` 也会生成声明;单独运行 `tsc` 前则需要先执行 `mica prepare`。
228
+
229
+ 使用 `import type` 引用 DDL 类型,不要把 DDL 文件作为运行时 JS 模块导入。在 `.gitignore` 中忽略构建产物和生成的声明:
230
+
231
+ ```gitignore
232
+ dist/
233
+ node_modules/
234
+ **/*.d.ddl.ts
235
+ ```
236
+
237
+ ## 项目配置
238
+
239
+ ```typescript
240
+ import { defineConfig } from '@mica-js/sdk/config';
241
+
242
+ export default defineConfig({
243
+ sourceDir: 'src',
244
+ outDir: 'dist',
245
+ alias: { '@': './src' },
246
+ });
247
+ ```
248
+
249
+ | 字段 | 默认值 | 用途 |
250
+ | ----------- | ------ | ------------------------------------------ |
251
+ | `sourceDir` | `src` | 包含 `devices` 和 `widgets` 的源码目录 |
252
+ | `outDir` | `dist` | 组件输出目录 |
253
+ | `alias` | 无 | 静态导入的路径别名,例如 `@/shared/colors` |
254
+ | `base` | `/` | 底层构建的基准路径,不配置预览服务 |
255
+
256
+ 源码、输出和别名路径都相对于工程根目录解析。输出目录不能是工程根目录或其上级目录,也不能与源码目录互相包含,以免构建清理覆盖源码。
257
+
258
+ `alias` 用于构建时解析导入。若 TypeScript 源码也使用别名,需要在 `tsconfig.json` 的 `compilerOptions.paths` 中配置对应映射。
259
+
260
+ Vite 已由 SDK 管理,不需要额外安装 Vite 或创建 `vite.config.ts`。配置文件是可执行 TypeScript,只应加载受信任的工程配置。
261
+
262
+ ## 产物与资源
263
+
264
+ 运行 `mica build` 后,每个组件生成一对文件:
265
+
266
+ ```text
267
+ dist/
268
+ devices/resistor/device.json
269
+ devices/resistor/device.js
270
+ widgets/lamp/widget.json
271
+ widgets/lamp/widget.js
272
+ ```
273
+
274
+ - Device JS 具名导出 `model` 和同步 `create` 工厂;Widget JS 默认导出同步工厂。
275
+ - 每份 JS 都是独立的 ESM,依赖在构建时打包,产物不保留外部模块导入、`import()` 或 `import.meta`。
276
+ - 资源必须内联。文本可以使用 `?raw` 导入,标准 `?url` 资源导入在库构建中内联。
277
+ - 构建结果仅包含 JS 和 JSON。会产生独立 CSS 或其他资源文件的入口会构建失败。
278
+
279
+ 组件产物不是 npm 包;将文件交付给宿主的组件库或静态资源服务即可,模块加载和执行隔离由宿主负责。
280
+
281
+ ## 元数据
282
+
283
+ `device.json` 和 `widget.json` 由组件作者维护,用于声明显示名称、属性、端口以及器件符号等信息。SDK 检查元数据结构和目录 ID,但不会从 DDL 自动生成 JSON;器件属性、引脚和端口需要与实际实现保持一致。
284
+
285
+ 器件的 `symbol` 可以定义矢量图形、引脚连接点和位号位置,示例见 [电阻模板](./templates/basic/src/devices/resistor/device.json)。Widget 的端口订阅与重绘示例见 [灯组件模板](./templates/basic/src/widgets/lamp/index.ts)。
286
+
287
+ 需要自行检查元数据时,使用 `@mica-js/sdk/metadata` 的 `validateMetadata`、`deviceMetadataSchema` 或 `widgetMetadataSchema`。字节属性目前不支持在 JSON 中设置 `default`。
288
+
289
+ ## 常见问题
93
290
 
94
- ## JSON 元数据
291
+ **提示找不到 `mica` 命令。** 确认已在当前工程安装 `@mica-js/sdk`,在终端使用 `pnpm exec mica`,或通过 package scripts 调用。
95
292
 
96
- JSON 由作者完整维护,构建器只校验 JSON 自身结构以及 ID 与目录名;不从 DDL 提取属性或引脚,不做 JSON 与 DDL 的一致性检查,也不向发布 JSON 注入默认值。元数据的格式化可能改变空白。
293
+ **提示找不到 `mica.config.ts`。** 在工程根目录添加配置文件,或用 `--root` / `--config` 指向现有工程。Device 与 Widget 工程都需要该标志文件。
97
294
 
98
- `@mica-js/sdk/metadata` 导出 `deviceMetadataSchema`、`widgetMetadataSchema`、`validateMetadata` 以及相应 TypeScript 类型。元数据不含 `formatVersion`、`icon`、`category`。字节属性的 JSON 默认编码尚未定义,因此 `bytes` 属性暂不接受 JSON `default`。
295
+ **TypeScript 无法导入 `./model.ddl`。** 先运行 `mica prepare`,确认生成了 `model.d.ddl.ts`,并启用 `allowArbitraryExtensions` 与 `moduleResolution: "Bundler"`。
99
296
 
100
- `symbol` 描述静态矢量符号、引脚连接点和位号位置。X 向右、Y 向下,角度单位为度,正扫角顺时针。使用逻辑单位,建议 10 单位为默认网格间距;颜色使用主题角色。JSON 校验不证明符号引脚或属性与 DDL 一致。
297
+ **修改源码后产物没有更新。** 重新运行 `mica build`;`prepare --watch` 只处理类型声明。
101
298
 
102
- ## 公开入口
299
+ ## API 入口
103
300
 
104
- | 入口 | 内容 |
105
- | ----------------------- | ------------------------------------------------------------------ |
106
- | `@mica-js/sdk` | `createDeviceLibrary`、`createBoard`、`SimulationError` 及宿主类型 |
107
- | `@mica-js/sdk/device` | 器件上下文、工厂、批次、通道、话题与 JIT 类型 |
108
- | `@mica-js/sdk/widget` | Widget 工厂、上下文、绘制、输入、资源与音频类型 |
109
- | `@mica-js/sdk/model` | 共享 IR、Builder 与校验 |
110
- | `@mica-js/sdk/ddl` | DDL 编译与类型投影 |
111
- | `@mica-js/sdk/metadata` | Device / Widget Schema、类型与校验 |
112
- | `@mica-js/sdk/config` | `defineConfig()`、`MicaConfig` 及项目配置发现与加载 |
113
- | `@mica-js/sdk/prepare` | `prepare()`、声明监听工具 |
301
+ | 入口 | 用途 |
302
+ | ----------------------- | --------------------------------------------------- |
303
+ | `@mica-js/sdk/widget` | `WidgetFactory`、绘制、输入、端口、资源与音频类型 |
304
+ | `@mica-js/sdk/device` | 器件上下文、工厂、批次、通道与 JIT 类型 |
305
+ | `@mica-js/sdk/metadata` | Device / Widget 元数据类型、Schema 与校验 |
306
+ | `@mica-js/sdk/config` | `defineConfig()` 与 `MicaConfig` |
307
+ | `@mica-js/sdk/prepare` | 程序化类型生成和监听 |
308
+ | `@mica-js/sdk/model` | 器件模型 IR、Builder 与校验 |
309
+ | `@mica-js/sdk/ddl` | 程序化 DDL 编译与类型投影 |
310
+ | `@mica-js/sdk` | `createDeviceLibrary`、`createBoard` 与宿主仿真类型 |
114
311
 
115
- 浏览器作者入口不会引入 Vite 或 Node 构建依赖。最小工程见 [templates/basic](./templates/basic/),使用前将其作为独立工程安装依赖。
312
+ Widget / Device 作者类型入口不会引入 Vite 或 Node 构建依赖。编写组件通常只需类型导入,实际代码由宿主通过构建产物加载。
@@ -148,7 +148,20 @@ function editorSchema() {
148
148
  whenEquals('kind', 'text', objectSchema({ kind: { type: 'string', const: 'text' } })),
149
149
  whenEquals('kind', 'textarea', objectSchema({ kind: { type: 'string', const: 'textarea' } })),
150
150
  whenEquals('kind', 'checkbox', objectSchema({ kind: { type: 'string', const: 'checkbox' } })),
151
- whenEquals('kind', 'file', objectSchema({ kind: { type: 'string', const: 'file' } })),
151
+ whenEquals('kind', 'file', objectSchema({
152
+ kind: { type: 'string', const: 'file' },
153
+ extensions: {
154
+ type: 'array',
155
+ description: 'Allowed dotted filename extensions, matched case-insensitively by the host.',
156
+ uniqueItems: true,
157
+ items: { type: 'string', pattern: '^\\.[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*$' },
158
+ },
159
+ maxSize: {
160
+ type: 'integer',
161
+ exclusiveMinimum: 0,
162
+ description: 'Maximum file size in bytes.',
163
+ },
164
+ })),
152
165
  whenEquals('kind', 'select', objectSchema({
153
166
  kind: { type: 'string', const: 'select' },
154
167
  labels: {
@@ -340,6 +353,20 @@ export const deviceMetadataSchema = {
340
353
  properties: {
341
354
  kind: { type: 'string', const: 'device' },
342
355
  ...headerProperties(),
356
+ templates: {
357
+ type: 'array',
358
+ description: 'Platform project template IDs in display priority order.',
359
+ uniqueItems: true,
360
+ items: { type: 'string', minLength: 1 },
361
+ },
362
+ recommends: objectSchema({
363
+ widgets: {
364
+ type: 'array',
365
+ description: 'Recommended full widget IDs in display priority order; not dependencies.',
366
+ uniqueItems: true,
367
+ items: { type: 'string', minLength: 1 },
368
+ },
369
+ }),
343
370
  designatorPrefix: { type: 'string', pattern: '^\\S+$' },
344
371
  properties: { $ref: '#/$defs/properties' },
345
372
  pins: { $ref: '#/$defs/pins' },
@@ -31,6 +31,8 @@ export interface CheckboxEditor {
31
31
  }
32
32
  export interface FileEditor {
33
33
  readonly kind: 'file';
34
+ readonly extensions?: readonly string[];
35
+ readonly maxSize?: number;
34
36
  }
35
37
  export interface SelectEditor {
36
38
  readonly kind: 'select';
@@ -75,6 +77,7 @@ export interface EnumProperty extends PropertyCommon {
75
77
  */
76
78
  export interface BytesProperty extends PropertyCommon {
77
79
  readonly type: 'bytes';
80
+ readonly editor?: FileEditor;
78
81
  }
79
82
  export type PropertyMetadata = NumberProperty | BooleanProperty | StringProperty | EnumProperty | BytesProperty;
80
83
  export interface PortMetadata {
@@ -170,6 +173,10 @@ interface MetadataHeader {
170
173
  }
171
174
  export interface DeviceMetadata extends MetadataHeader {
172
175
  readonly kind: 'device';
176
+ readonly templates?: readonly string[];
177
+ readonly recommends?: {
178
+ readonly widgets?: readonly string[];
179
+ };
173
180
  readonly designatorPrefix?: string;
174
181
  readonly properties?: Readonly<Record<string, PropertyMetadata>>;
175
182
  readonly pins?: Readonly<Record<string, PinMetadata>>;
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@mica-js/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Device and widget author APIs with CLI-managed content builds",
5
5
  "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/x-botlab/mica-js.git",
9
+ "directory": "packages/sdk"
10
+ },
6
11
  "type": "module",
7
12
  "sideEffects": false,
8
13
  "bin": {
@@ -54,7 +59,7 @@
54
59
  "@mica-js/ddl": "0.2.0",
55
60
  "@mica-js/device-model": "0.5.0",
56
61
  "@mica-js/simulator": "2.1.0",
57
- "@mica-js/widget": "0.3.0",
62
+ "@mica-js/widget": "0.3.1",
58
63
  "ajv": "^8.17.1",
59
64
  "rolldown": "^1.2.14",
60
65
  "vite": "^8.3.4"