@c2-markdown-ui/mdui-lang 0.0.0-stage → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,495 @@
1
+ /** 比较运算符:eq 相等(默认,向后兼容);gt/gte/lt/lte/ne 为数值/时间戳比较 */
2
+ export type FieldWhenOp = 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'ne';
3
+ /** 字段显示条件:依赖字段的值等于 values 任一时显示该字段(form 内联动显隐) */
4
+ export interface FieldWhen {
5
+ /** 依赖字段的 id */
6
+ field: string;
7
+ /** 匹配值列表(任一相等即显示) */
8
+ values: string[];
9
+ /** 比较运算符,缺省 eq(相等)。数值/时间戳字段可用 gt/gte/lt/lte/ne(DSL: when:field:>18) */
10
+ op?: FieldWhenOp;
11
+ }
12
+ /** 多条件显示(AND 组合):所有条件同时满足才显示该字段。
13
+ * 单条件时保持 FieldWhen 对象形态(向后兼容);多条件时为数组。
14
+ * DSL 书写为重复 when 修饰符:`when:a:1,2 when:b:3` */
15
+ export type FieldWhenList = FieldWhen | FieldWhen[];
16
+ /** 条件组合:all 为且(全部满足),any 为或(任一满足),两组同时存在时取交集(all 且 any)。
17
+ * DSL 书写为 `when:`(且)与 `when-any:`(或)修饰符的重复叠加 */
18
+ export interface FieldWhenGroup {
19
+ /** 且条件组:全部满足(DSL: when:field:v1,v2) */
20
+ all?: FieldWhen[];
21
+ /** 或条件组:任一满足(DSL: when-any:field:v1,v2) */
22
+ any?: FieldWhen[];
23
+ }
24
+ /** 字段条件显示的完整取值形态:
25
+ * - FieldWhen:单条件(向后兼容)
26
+ * - FieldWhen[]:多条件 AND(向后兼容)
27
+ * - FieldWhenGroup:显式且/或分组(支持 OR) */
28
+ export type FieldWhenValue = FieldWhen | FieldWhen[] | FieldWhenGroup;
29
+ /** 纯文字组件:col/form 内展示静态文字 */
30
+ export interface TextWidget {
31
+ type: "text";
32
+ id?: string;
33
+ /** 文字内容 */
34
+ text: string;
35
+ /** 字号:12-48,默认 14 */
36
+ size?: number;
37
+ /** 字体颜色(十六进制或 CSS 颜色名) */
38
+ color?: string;
39
+ /** 加粗 */
40
+ bold?: boolean;
41
+ /** 文字对齐:left(默认)/ center / right */
42
+ align?: "left" | "center" | "right";
43
+ /** 是否启用 Alert 提示风格(参考 antd Alert) */
44
+ alert?: boolean;
45
+ /** Alert 风格:info(默认)/ warning / error */
46
+ alertStyle?: "info" | "warning" | "error";
47
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
48
+ span?: number;
49
+ /** 显示条件(form 内联动显隐) */
50
+ when?: FieldWhenValue;
51
+ }
52
+ export interface TextInputWidget {
53
+ type: "text-input";
54
+ id?: string;
55
+ label?: string;
56
+ placeholder?: string;
57
+ default?: string;
58
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
59
+ hint?: string;
60
+ /** 是否必填:label 前显示红色 *,提交时空值校验不通过 */
61
+ required?: boolean;
62
+ /** 正则校验规则(JS 正则源字符串,如 ^[a-zA-Z0-9_]{3,20}$) */
63
+ pattern?: string;
64
+ /** 校验失败时的提示文案,默认"格式不正确" */
65
+ message?: string;
66
+ /** 是否禁用 */
67
+ disabled?: boolean;
68
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
69
+ span?: number;
70
+ /** 显示条件(form 内联动显隐) */
71
+ when?: FieldWhenValue;
72
+ }
73
+ export interface ButtonGroupWidget {
74
+ type: "button-group";
75
+ id?: string;
76
+ label?: string;
77
+ choices: string[];
78
+ default?: string;
79
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
80
+ hint?: string;
81
+ /** 是否必填(button-group 必有选中值,required 主要用于语义标记与校验输出) */
82
+ required?: boolean;
83
+ /** 是否禁用 */
84
+ disabled?: boolean;
85
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
86
+ span?: number;
87
+ /** 显示条件(form 内联动显隐) */
88
+ when?: FieldWhenValue;
89
+ }
90
+ /** 单个按钮组件 */
91
+ export interface ButtonWidget {
92
+ type: "button";
93
+ id?: string;
94
+ /** 按钮文字 */
95
+ label?: string;
96
+ /** 背景色(支持十六进制 #3b82f6 或 CSS 颜色名) */
97
+ color?: string;
98
+ /** 字体颜色(支持十六进制 #ffffff 或 CSS 颜色名) */
99
+ textColor?: string;
100
+ /** 尺寸:small / medium / large,默认 medium */
101
+ size?: "small" | "medium" | "large";
102
+ /** 是否禁用 */
103
+ disabled?: boolean;
104
+ }
105
+ export interface SelectWidget {
106
+ type: "select";
107
+ id?: string;
108
+ label?: string;
109
+ choices: string[];
110
+ default?: string;
111
+ /** 远端数据源 URL:设置后运行时 fetch 拉取选项,choices 作为后备/初始选项 */
112
+ url?: string;
113
+ /** 是否可搜索:开启后下拉面板内置搜索框,按 key/value 与 label 过滤选项 */
114
+ searchable?: boolean;
115
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
116
+ hint?: string;
117
+ /** 是否必填(select 必有选中值,required 主要用于语义标记与校验输出) */
118
+ required?: boolean;
119
+ /** 是否禁用 */
120
+ disabled?: boolean;
121
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
122
+ span?: number;
123
+ /** 显示条件(form 内联动显隐) */
124
+ when?: FieldWhenValue;
125
+ }
126
+ /** 级联选择器数据节点(嵌套树形结构,参考 antd Cascader 的数据源格式)
127
+ * 取值字段兼容 value/key(无 value 时用 key);aria-label/data-title 等额外字段会被保留但组件不使用;
128
+ * 无 label 时回退取值展示;无 children 或 children 为空视为叶子节点 */
129
+ export interface CascadeNode {
130
+ /** 节点取值(表单实际取值,各层级以 / 连接后组成完整路径) */
131
+ value?: string | number;
132
+ /** 取值别名(key:label 风格数据源,无 value 时生效) */
133
+ key?: string | number;
134
+ /** 展示文案,缺省时用取值 */
135
+ label?: string | number;
136
+ /** 子节点(无或空数组 = 叶子) */
137
+ children?: CascadeNode[];
138
+ /** 其余透传字段(如 aria-label、data-title 等) */
139
+ [extra: string]: any;
140
+ }
141
+ /** 级联选择器(参考 antd Cascader)
142
+ * 静态数据源两种格式(兼容共存),二者同时存在时 data 优先:
143
+ * 1. choices:扁平路径数组,每项用 / 分隔层级,每段支持 key:label(如 [zj:浙江/hz:杭州])
144
+ * 2. data:嵌套对象树数组(CascadeNode[]),如 [{value:'zj',label:'浙江',children:[...]}]
145
+ * url:远端数据源,设置后运行时 fetch 拉取(响应为 data 同构的 JSON 树对象),
146
+ * choices/data 作为后备/初始选项 */
147
+ export interface CascaderWidget {
148
+ type: "cascade";
149
+ id?: string;
150
+ label?: string;
151
+ choices: string[];
152
+ /** 嵌套对象树数据源(与扁平路径 choices 兼容共存,优先于 choices) */
153
+ data?: CascadeNode[];
154
+ /** 远端数据源 URL:设置后运行时 fetch 拉取选项(响应为 CascadeNode[] 或 {data|options|...} 包裹) */
155
+ url?: string;
156
+ /** 懒加载模式(url 存在时生效):首次只拉取根级,点击父级后以 url?parent=<value> 逐级请求子级;
157
+ * 未开启时一次请求返回整棵嵌套树 */
158
+ lazy?: boolean;
159
+ /** 默认值:完整路径(如 zj/hz/xhq,叶子 value 的 / 连接串) */
160
+ default?: string;
161
+ /** 占位提示文案 */
162
+ placeholder?: string;
163
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
164
+ hint?: string;
165
+ /** 是否必填:未选完整路径时校验不通过 */
166
+ required?: boolean;
167
+ /** 校验失败时的提示文案 */
168
+ message?: string;
169
+ /** 是否禁用 */
170
+ disabled?: boolean;
171
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
172
+ span?: number;
173
+ /** 显示条件(form 内联动显隐) */
174
+ when?: FieldWhenValue;
175
+ }
176
+ export interface SelectMultiWidget {
177
+ type: "select-multi";
178
+ id?: string;
179
+ label?: string;
180
+ /** 选项:字符串数组(每项支持 key:label 格式)或对象数组({key|value,label},表单取值为 key/value,展示 label) */
181
+ choices: string[] | Array<{
182
+ value: string;
183
+ label: string;
184
+ }>;
185
+ default?: string | string[];
186
+ /** 远端数据源 URL:设置后运行时 fetch 拉取选项,choices 作为后备/初始选项 */
187
+ url?: string;
188
+ /** 选项排列方向:vertical 纵向(默认)/ horizontal 横向 */
189
+ direction?: "vertical" | "horizontal";
190
+ /** 自定义布局:每行显示的列数(设置后按 N 列网格排列,优先于 direction) */
191
+ columns?: number;
192
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
193
+ hint?: string;
194
+ /** 是否必填:至少勾选一项 */
195
+ required?: boolean;
196
+ /** 校验失败时的提示文案,默认"请至少选择一项" */
197
+ message?: string;
198
+ /** 是否禁用 */
199
+ disabled?: boolean;
200
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
201
+ span?: number;
202
+ /** 显示条件(form 内联动显隐) */
203
+ when?: FieldWhenValue;
204
+ }
205
+ /** 单选组件(参考 antd Radio.Group):默认圆点单选样式,button 标记切换为按钮组样式
206
+ * (对应 antd optionType:button,合并了按钮组的视觉功能) */
207
+ export interface RadioGroupWidget {
208
+ type: "radio-group";
209
+ id?: string;
210
+ label?: string;
211
+ /** 选项:字符串数组(每项支持 key:label 格式)或对象数组({key|value,label},表单取值为 key/value,展示 label) */
212
+ choices: string[] | Array<{
213
+ value: string;
214
+ label: string;
215
+ }>;
216
+ /** 默认选中值(单值) */
217
+ default?: string;
218
+ /** 按钮样式:渲染为按钮组(antd Radio optionType:button)而非圆点单选 */
219
+ button?: boolean;
220
+ /** 远端数据源 URL:设置后运行时 fetch 拉取选项,choices 作为后备/初始选项 */
221
+ url?: string;
222
+ /** 选项排列方向:vertical 纵向(默认)/ horizontal 横向 */
223
+ direction?: "vertical" | "horizontal";
224
+ /** 自定义布局:每行显示的列数(设置后按 N 列网格排列,优先于 direction) */
225
+ columns?: number;
226
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
227
+ hint?: string;
228
+ /** 是否必填 */
229
+ required?: boolean;
230
+ /** 校验失败时的提示文案 */
231
+ message?: string;
232
+ /** 是否禁用 */
233
+ disabled?: boolean;
234
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
235
+ span?: number;
236
+ /** 显示条件(form 内联动显隐) */
237
+ when?: FieldWhenValue;
238
+ }
239
+ export interface SliderWidget {
240
+ type: "slider";
241
+ id?: string;
242
+ label?: string;
243
+ min: number;
244
+ max: number;
245
+ step?: number;
246
+ default?: number;
247
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
248
+ hint?: string;
249
+ /** 是否必填(slider 始终有值,仅用于语义标记) */
250
+ required?: boolean;
251
+ /** 是否禁用 */
252
+ disabled?: boolean;
253
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
254
+ span?: number;
255
+ /** 显示条件(form 内联动显隐) */
256
+ when?: FieldWhenValue;
257
+ }
258
+ /** 开关组件(参考 antd Switch):布尔切换控件,可配置选中/未选中文案 */
259
+ export interface SwitchWidget {
260
+ type: "switch";
261
+ id?: string;
262
+ label?: string;
263
+ /** 默认是否选中(缺省 false) */
264
+ default?: boolean;
265
+ /** 选中时展示的文案(antd checkedChildren) */
266
+ checkedText?: string;
267
+ /** 未选中时展示的文案(antd unCheckedChildren) */
268
+ unCheckedText?: string;
269
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
270
+ hint?: string;
271
+ /** 是否必填(switch 始终有值,仅用于语义标记) */
272
+ required?: boolean;
273
+ /** 是否禁用 */
274
+ disabled?: boolean;
275
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
276
+ span?: number;
277
+ /** 显示条件(form 内联动显隐) */
278
+ when?: FieldWhenValue;
279
+ }
280
+ /** 日期选择框(参考 antd DatePicker) */
281
+ export interface DatePickerWidget {
282
+ type: "date-picker";
283
+ id?: string;
284
+ label?: string;
285
+ /** 选择模式:date 仅日期(默认)/ datetime 日期+时间 */
286
+ picker?: "date" | "datetime";
287
+ /** 范围选择:start 为开始时间、end 为结束时间,缺省单选 */
288
+ range?: boolean;
289
+ /** 默认值:时间戳(毫秒)或格式化时间字符串;range 模式为 [start, end] */
290
+ default?: number | string | (number | string)[];
291
+ /** 显示格式:YYYY-MM-DD(默认)/ YYYY/MM/DD / YYYY-MM-DD HH:mm:ss 等 */
292
+ format?: string;
293
+ /** 占位提示文案 */
294
+ placeholder?: string;
295
+ /** 禁用当前日期之前的日期(不可选) */
296
+ disableBeforeNow?: boolean;
297
+ /** 禁用当前日期之后的日期(不可选) */
298
+ disableAfterNow?: boolean;
299
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
300
+ hint?: string;
301
+ /** 是否必填 */
302
+ required?: boolean;
303
+ /** 校验失败时的提示文案 */
304
+ message?: string;
305
+ /** 是否禁用(整组件不可交互) */
306
+ disabled?: boolean;
307
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
308
+ span?: number;
309
+ /** 显示条件(form 内联动显隐) */
310
+ when?: FieldWhenValue;
311
+ }
312
+ /** 数字输入框(参考 antd InputNumber) */
313
+ export interface NumberInputWidget {
314
+ type: "number-input";
315
+ id?: string;
316
+ label?: string;
317
+ /** 最小值 */
318
+ min?: number;
319
+ /** 最大值 */
320
+ max?: number;
321
+ /** 步长(点击上下按钮的增减量),默认 1 */
322
+ step?: number;
323
+ /** 数值精度(小数位数,0-100) */
324
+ precision?: number;
325
+ default?: number;
326
+ /** 占位提示文案 */
327
+ placeholder?: string;
328
+ /** 表单项说明:渲染在 label 后的 ⓘ 图标,悬浮显示 tooltip */
329
+ hint?: string;
330
+ /** 是否必填:空值提交校验不通过 */
331
+ required?: boolean;
332
+ /** 校验失败时的提示文案 */
333
+ message?: string;
334
+ /** 是否禁用 */
335
+ disabled?: boolean;
336
+ /** 在 form row 内占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
337
+ span?: number;
338
+ /** 显示条件(form 内联动显隐) */
339
+ when?: FieldWhenValue;
340
+ }
341
+ /** 表单行(类似 antd Row):fields 为行内字段,gutter 为列间距(px) */
342
+ export interface FormRow {
343
+ /** 列间距(px),类似 antd Row 的 gutter */
344
+ gutter?: number;
345
+ /** 行内字段列表 */
346
+ fields: Widget[];
347
+ }
348
+ /** 栅格列(独立栅格组件 row 的 col):可嵌套任意 widget */
349
+ export interface GridCol {
350
+ /** 占据的栅格数(1-24,类似 antd Col 的 span),缺省自动均分 */
351
+ span?: number;
352
+ /** 左侧偏移栅格数 */
353
+ offset?: number;
354
+ /** 垂直对齐:top / middle / bottom */
355
+ align?: 'top' | 'middle' | 'bottom';
356
+ /** 列内子组件 */
357
+ widget?: Widget;
358
+ }
359
+ /** 独立栅格布局组件(类似 antd Row):24 栅格行,col 为列 */
360
+ export interface RowWidget {
361
+ type: "row";
362
+ id?: string;
363
+ /** 列间距(px),类似 antd Row 的 gutter */
364
+ gutter?: number;
365
+ /** 水平排列方式:left(默认)/ center / right / between */
366
+ justify?: 'left' | 'center' | 'right' | 'between';
367
+ /** 垂直对齐:top / middle(默认)/ bottom */
368
+ align?: 'top' | 'middle' | 'bottom';
369
+ /** 栅格列 */
370
+ cols: GridCol[];
371
+ }
372
+ export interface FormWidget {
373
+ type: "form";
374
+ id?: string;
375
+ submitLabel?: string;
376
+ /** 取消按钮文案(如 "取消"),未设置则不显示 */
377
+ cancelLabel?: string;
378
+ /** 清空/重置按钮文案(如 "清空"),未设置则不显示 */
379
+ resetLabel?: string;
380
+ /** 按钮组对齐方式:left / center / right,默认 left */
381
+ buttonsAlign?: "left" | "center" | "right";
382
+ /** 字段 label 与内容的布局:vertical 上下(默认)/ horizontal 左右 */
383
+ layout?: "vertical" | "horizontal";
384
+ /** 左右布局时 label 的宽度(px),默认 80 */
385
+ labelWidth?: number;
386
+ /** 左右布局时内容区域的宽度(px 或省略自适应填满) */
387
+ contentWidth?: number;
388
+ /** 全局横排模式:所有字段自动 flex-wrap 横排 */
389
+ inline?: boolean;
390
+ /** 每行显示的列数(配合 inline 使用,默认自适应) */
391
+ columns?: number;
392
+ /** 是否禁用:级联禁用所有字段与按钮 */
393
+ disabled?: boolean;
394
+ /** 传统的扁平字段列表(纵向堆叠) */
395
+ fields: Widget[];
396
+ /** 使用 row 分组的行布局:每个 row 内的字段横排 */
397
+ rows?: FormRow[];
398
+ }
399
+ export interface ChartWidget {
400
+ type: "chart-line" | "chart-bar" | "chart-pie" | "chart-scatter";
401
+ id?: string;
402
+ title?: string;
403
+ height?: number;
404
+ /** 远端数据源 URL:设置后运行时 fetch 拉取(CSV 文本或 JSON),本地 CSV 作为初始/后备数据 */
405
+ url?: string;
406
+ /** 是否展示图例:未设置时自动判断(多数据集或饼图时展示) */
407
+ legend?: boolean;
408
+ /** 表单字段栅格宽度(1-24,嵌入表单时生效) */
409
+ span?: number;
410
+ /** 条件显示:依赖字段的取值命中时才展示(嵌入表单时生效) */
411
+ when?: FieldWhenValue;
412
+ labels: string[];
413
+ datasets: Array<{
414
+ label: string;
415
+ data: number[];
416
+ }>;
417
+ options?: Record<string, any>;
418
+ }
419
+ export interface MultipleChoiceQuestionWidget {
420
+ type: "multiple-choice-question";
421
+ id?: string;
422
+ question: string;
423
+ choices: string[];
424
+ correctAnswer?: string;
425
+ showFeedback?: boolean;
426
+ /** 是否禁用 */
427
+ disabled?: boolean;
428
+ }
429
+ export interface ShortAnswerQuestionWidget {
430
+ type: "short-answer-question";
431
+ id?: string;
432
+ question: string;
433
+ placeholder?: string;
434
+ correctAnswer?: string;
435
+ correctAnswers?: string[];
436
+ showFeedback?: boolean;
437
+ /** 是否禁用 */
438
+ disabled?: boolean;
439
+ }
440
+ export interface QuizQuestion {
441
+ id: string;
442
+ type: "mcq" | "short-answer";
443
+ question: string;
444
+ points: number;
445
+ choices?: string[];
446
+ correctAnswer?: string;
447
+ placeholder?: string;
448
+ correctAnswers?: string[];
449
+ }
450
+ export interface QuizWidget {
451
+ type: "quiz";
452
+ id?: string;
453
+ title: string;
454
+ questions: QuizQuestion[];
455
+ showScore?: boolean;
456
+ showProgress?: boolean;
457
+ passingScore?: number;
458
+ /** 是否禁用:级联禁用所有题目 */
459
+ disabled?: boolean;
460
+ }
461
+ export type Widget = TextWidget | TextInputWidget | ButtonGroupWidget | ButtonWidget | SelectWidget | SelectMultiWidget | RadioGroupWidget | CascaderWidget | SliderWidget | SwitchWidget | DatePickerWidget | NumberInputWidget | FormWidget | RowWidget | ChartWidget | MultipleChoiceQuestionWidget | ShortAnswerQuestionWidget | QuizWidget;
462
+ export interface ParseResult {
463
+ success: boolean;
464
+ widget?: Widget;
465
+ error?: string;
466
+ }
467
+ /**
468
+ * Result from streaming-aware parsing.
469
+ * Provides partial widget data even when input is incomplete.
470
+ */
471
+ export interface StreamingParseResult {
472
+ /** Whether parsing completed successfully with all required fields */
473
+ complete: boolean;
474
+ /** Detected widget type (available even for incomplete input) */
475
+ detectedType?: string;
476
+ /** Partial or complete widget data */
477
+ widget?: Partial<Widget> & {
478
+ type: string;
479
+ };
480
+ /** What's still needed to complete parsing */
481
+ pending?: {
482
+ /** True if we're waiting for an unclosed bracket */
483
+ unclosedBracket?: boolean;
484
+ /** True if we're waiting for an unclosed quote */
485
+ unclosedQuote?: boolean;
486
+ /** True if we're waiting for more questions in a quiz */
487
+ awaitingQuestions?: boolean;
488
+ /** True if we're waiting for more fields in a form */
489
+ awaitingFields?: boolean;
490
+ /** True if we're waiting for more CSV data in a chart */
491
+ awaitingData?: boolean;
492
+ };
493
+ /** Error message if parsing failed completely */
494
+ error?: string;
495
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,39 @@
1
1
  {
2
+ "version": "0.4.4",
3
+ "description": "DSL parser for markdown-ui widgets",
2
4
  "name": "@c2-markdown-ui/mdui-lang",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist/"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "test": "vitest",
21
+ "test:watch": "vitest --watch",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "markdown",
26
+ "dsl",
27
+ "parser",
28
+ "widgets"
29
+ ],
30
+ "author": "",
31
+ "license": "ISC",
32
+ "devDependencies": {
33
+ "@types/node": "^24.3.0",
34
+ "vitest": "^3.2.4"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ }
39
+ }