diff --git a/.gitignore b/.gitignore
index 8c35d0b..32648d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,7 @@ dist-ssr
# Editor directories and files
.vscode/*
+!.vscode/*.code-snippets
!.vscode/extensions.json
.idea
.DS_Store
diff --git a/.vscode/react.code-snippets b/.vscode/react.code-snippets
new file mode 100644
index 0000000..df5c6e2
--- /dev/null
+++ b/.vscode/react.code-snippets
@@ -0,0 +1,59 @@
+{
+ // hanzi-chai.github.io workspace snippets.
+ // Each snippet is defined under a snippet name and has a scope, prefix, body and description.
+ "template of react component file": {
+ "scope": "javascriptreact,typescriptreact",
+ "prefix": "tmplcomp",
+ "body": [
+ "import React, { useState, useEffect, useRef, useReducer } from 'react'",
+ "import * as A from 'antd'",
+ "import * as atoms from '~/atoms'",
+ "",
+ "",
+ "//#region $TM_FILENAME_BASE default component",
+ "export interface ${TM_FILENAME_BASE}Props {",
+ " $1",
+ "}",
+ "export default function ${TM_FILENAME_BASE}(props: ${TM_FILENAME_BASE}Props) {",
+ " $0",
+ " return (<>",
+ " ",
+ " >)",
+ "}",
+ "//#endregion",
+ ],
+ "description": "template of react component",
+ "isFileTemplate": true,
+ },
+ "template of component": {
+ "scope": "javascriptreact,typescriptreact",
+ "prefix": "comp",
+ "body": [
+ "//#region ${1:YourComponent} component",
+ "interface ${1:YourComponent}Props {",
+ " $2",
+ "}",
+ "",
+ "function ${1:YourComponent}(props: ${1:YourComponent}Props) {",
+ " $0",
+ " return (<>",
+ " ",
+ " >)",
+ "}",
+ "//#endregion",
+ "",
+ ],
+ },
+ "import antd components": {
+ "scope": "javascriptreact,typescriptreact",
+ "prefix": "impantd",
+ "body": "import * as A from 'antd'",
+ "description": "import * as A from 'antd'",
+ },
+ "import atoms": {
+ "scope": "javascriptreact,typescriptreact,javascript,typescript",
+ "prefix": "impatoms",
+ "body": "import * as atoms from '~/atoms'",
+ "description": "import atoms from '~/atoms'",
+ },
+}
diff --git a/examples/bxm.yaml b/examples/bxm.yaml
new file mode 100644
index 0000000..2bdf0cf
--- /dev/null
+++ b/examples/bxm.yaml
@@ -0,0 +1,1153 @@
+version: '0.1'
+source: bxm
+info:
+ name: 表形码
+ author: 陈爱文
+ version: '1.0'
+ description: 汉字表形符号和字素分类编码法
+analysis:
+ classifier:
+ 圈: 4
+ 捺: 5
+ 平捺: 5
+ 横捺: 5
+ 挑捺: 5
+ 弯钩: 6
+ 横钩: 6
+ 横撇: 6
+ 横折: 6
+ 横折钩: 6
+ 撇钩: 6
+ 横折提: 6
+ 横斜钩: 6
+ 横折折: 7
+ 横折弯: 7
+ 横折弯钩: 7
+ 横折折折钩: 8
+ 横撇弯钩: 8
+ 横折折撇: 8
+ 横折折折: 8
+ 竖提: 9
+ 竖折: 9
+ 竖弯: 9
+ 竖弯钩: 9
+ 撇点: 9
+ 撇折: 9
+ 斜钩: 9
+ 竖折撇: 10
+ 竖折折钩: 10
+ 竖折折: 10
+ degenerator:
+ no_cross: true
+ feature:
+ 提: 横
+ 捺: 点
+ selector:
+ - 结构完整
+ - 根少优先
+ - 全符笔顺
+ - 能连不交
+ - 能散不连
+ - 非形近根
+ - 取大优先
+ customize:
+ 无:
+ - '1'
+ - 尢
+ 戌:
+ - 戈
+ - '3'
+ - '1'
+ 戍:
+ - 戈
+ - '3'
+ - '4'
+ 兀:
+ - '1'
+ - 儿
+ 辛:
+ - 亠
+ - 䒑
+ - 十
+ 亚:
+ - '1'
+ - "\ue408"
+ - '1'
+ 产:
+ - 亠
+ - 丷
+ - 厂
+ 佥:
+ - "\ue43d"
+ - '1'
+ - "\ue42d"
+ - '1'
+ 天:
+ - '1'
+ - 大
+ 勿:
+ - 勹
+ - "\ue41e"
+ 州:
+ - "\ue089"
+ - "\ue446"
+ - "\ue001"
+ 豙:
+ - 亠
+ - 丷
+ - 豕
+ "\ue0a8":
+ - 冂
+ - "\ue001"
+ 卞:
+ - '4'
+ - 下
+ 余:
+ - "\ue43d"
+ - '1'
+ - 朩
+ 互:
+ - '1'
+ - "\ue440"
+ - '1'
+ 农:
+ - "\uf000"
+ - "\ue438"
+ 衣:
+ - 亠
+ - "\uf038"
+ - "\ue438"
+ "\ue02c":
+ - 土
+ - 丷
+ "\ue01a":
+ - "\ue057"
+ - '3'
+ "\ue01e":
+ - "\ue057"
+ - '4'
+ - '3'
+ "\ue0b7":
+ - "\uf038"
+ - "\ue438"
+ 隺:
+ - "\uf000"
+ - '2'
+ - "\ue428"
+ 㒸:
+ - 丷
+ - 豕
+ strong:
+ - '1'
+ - 二
+ - "\ue40f"
+ customizeCorners: {}
+form:
+ alphabet: abcdefghijklmnopqrstuvwxyz
+ mapping_type: 1
+ grouping:
+ 首字母-ê: 首字母-e
+ "\ue452": 十
+ "\ue401": 力
+ "\ue0f1": 肀
+ "\ue102": 王
+ "\ue443": "\ue068"
+ "\ue44b": 禾
+ 于: 干
+ "\ue413": 十
+ "\uf037": 帀
+ "\ue0d1": 夫
+ "\ue822": 北
+ mapping:
+ '1': h
+ '2': i
+ '3': j
+ '4': d
+ '5': 'n'
+ '6': z
+ '7': z
+ '8': w
+ '9': l
+ '10': l
+ 丁: t
+ 土: 'y'
+ 二: g
+ 工: i
+ 走: e
+ 耂: j
+ 王: i
+ 三: g
+ 丰: f
+ 耒: m
+ "\ue064": r
+ 耳: b
+ 扌: f
+ 艹: h
+ 十: x
+ 廿: h
+ 甘: b
+ 木: m
+ 酉: s
+ "\ue052": c
+ 車: f
+ 覀: s
+ 石: p
+ 大: r
+ 厂: j
+ 不: t
+ 豕: q
+ 龙: w
+ 匚: c
+ 七: l
+ 牙: r
+ 车: l
+ 弋: s
+ 戈: s
+ 虫: c
+ "\ue018": l
+ 卜: l
+ 止: 'y'
+ 虍: j
+ 口: o
+ 囗: q
+ 足: e
+ 日: b
+ 刂: g
+ 田: q
+ 由: 'y'
+ 甲: t
+ 申: f
+ 非: x
+ 小: g
+ 目: b
+ 冂: 'n'
+ 巾: e
+ 山: e
+ 且: b
+ 见: w
+ 贝: r
+ 骨: 'n'
+ 罒: q
+ 皿: q
+ "\ue09e": k
+ "\ue078": v
+ 牛: f
+ 手: f
+ 气: k
+ 毛: l
+ 禾: u
+ 攵: a
+ 亻: v
+ 川: g
+ 片: k
+ 身: r
+ 臼: u
+ 鬼: w
+ 八: g
+ 人: v
+ 入: v
+ 彳: v
+ 乂: x
+ 食: k
+ 金: z
+ 彡: g
+ 丘: o
+ 爪: j
+ 瓜: j
+ 舟: 'n'
+ 豸: q
+ 月: 'n'
+ 几: w
+ 犭: q
+ 九: x
+ 丸: x
+ 鱼: u
+ 儿: w
+ 夕: d
+ 勹: h
+ 鸟: s
+ 乌: s
+ 匕: l
+ 言: i
+ 疒: j
+ 冫: d
+ 广: j
+ 鹿: j
+ 丬: k
+ 门: 'n'
+ 忄: l
+ 丷: g
+ 䒑: k
+ 羊: 'y'
+ 火: r
+ 氵: d
+ "\ue42d": g
+ 辶: z
+ 宀: 'n'
+ 礻: t
+ 衤: t
+ 心: u
+ 马: s
+ 尸: p
+ 尹: p
+ 彐: e
+ 又: a
+ 皮: a
+ 阝: p
+ 刀: h
+ 习: e
+ 力: x
+ 也: l
+ 子: z
+ 己: l
+ 已: l
+ 巳: l
+ 弓: w
+ 纟: w
+ 巛: g
+ 母: q
+ 厶: u
+ 女: a
+ 巴: l
+ "\ue0a6": s
+ "\ue41e": g
+ 了: w
+ "\ue024": j
+ "\ue002": f
+ 饣: k
+ "\ue000": i
+ 龶: 'y'
+ 夊: a
+ "\ue034": a
+ 瓦: a
+ "\ue070": q
+ "\ue0d2": 'n'
+ 㠯: b
+ "\ue414": b
+ "\ue415": s
+ 禹: c
+ 禺: c
+ 匸: c
+ 灬: d
+ "\ue447": x
+ "\ue01b": e
+ 肀: f
+ "\ue06d": t
+ 龷: s
+ 长: k
+ 镸: f
+ 中: f
+ "\ue075": f
+ 书: f
+ 韦: f
+ "\ue440": o
+ "\ue0a7": u
+ 及: a
+ 龴: z
+ "\ue434": z
+ 癶: x
+ 夂: a
+ "\ue0b8": b
+ "\ue419": b
+ 曰: b
+ 臣: c
+ "\ue0d5": c
+ "\ue0b4": e
+ 巨: c
+ "\ue08e": c
+ "\ue057": c
+ "\ue083": d
+ "\ue09b": x
+ "\ue088": g
+ "\ue00d": g
+ "\ue432": e
+ 䶹: e
+ 屮: e
+ "\ue0de": e
+ "\uf000": e
+ "\ue026": e
+ 牜: f
+ "\ue029": f
+ 㐄: f
+ "\ue411": f
+ 事: f
+ "\ue410": f
+ "\ue003": f
+ "\uf003": f
+ 巿: f
+ 串: f
+ "\uf006": f
+ 聿: f
+ "\uf007": f
+ "\ue048": f
+ "\ue412": f
+ "\ue0f8": f
+ "\ue089": g
+ "\ue446": g
+ "\ue03e": g
+ "\ue073": g
+ "\ue044": g
+ "\ue001": g
+ "\ue077": g
+ "\ue07f": g
+ 巜: g
+ "\ue0e2": g
+ "\ue0e3": g
+ 匁: e
+ "\ue050": h
+ 廾: h
+ 卅: h
+ 世: h
+ 册: h
+ "\ue0fb": h
+ "\ue11a": h
+ 乃: h
+ "\ue020": h
+ "\ue0bc": h
+ "\ue423": h
+ "\ue427": h
+ 正: i
+ 五: i
+ "\ue0df": i
+ "\ue085": i
+ 重: i
+ 垂: i
+ 讠: i
+ 亠: i
+ "\uf008": i
+ 主: i
+ "\ue428": i
+ "\ue451": 'y'
+ 爫: j
+ "\uf009": j
+ "\ue838": j
+ "\ue014": k
+ "\ue07c": k
+ 丌: k
+ "\ue448": g
+ "\ue422": k
+ "\ue0c8": l
+ "\ue02a": 'n'
+ 东: l
+ 乐: l
+ "\ue05c": l
+ "\ue079": l
+ 乜: l
+ 㔾: l
+ "\ue0a3": p
+ 朩: m
+ 屯: l
+ 电: l
+ "\ue0ec": l
+ "\ue011": l
+ "\ue051": l
+ 本: m
+ 朿: m
+ 果: m
+ 柬: m
+ 秉: m
+ 未: m
+ "\ue421": x
+ 冖: 'n'
+ 内: 'n'
+ 禸: 'n'
+ 丹: 'n'
+ 两: 'n'
+ 冉: 'n'
+ "\uf00b": 'n'
+ 凸: o
+ 凹: o
+ 囬: q
+ 卩: p
+ "\ue0b2": p
+ 廴: z
+ "\ue031": p
+ "\uf00c": p
+ "\ue06b": p
+ "\ue420": q
+ 乑: q
+ "\ue0a9": q
+ 豖: q
+ "\uf00f": q
+ "\uf011": q
+ "\ue0be": q
+ 毋: q
+ "\uf012": q
+ 囙: q
+ 丈: r
+ 史: r
+ 吏: r
+ 夷: r
+ 夬: r
+ 夫: r
+ 央: r
+ 曳: s
+ 臾: r
+ "\ue047": r
+ 矛: r
+ 西: s
+ "\ue03f": s
+ 戋: s
+ "\ue0da": s
+ 我: s
+ "\ue417": s
+ "\ue0a5": s
+ "\ue053": s
+ "\ue007": z
+ "\ue009": z
+ 丂: s
+ "\ue004": s
+ 专: s
+ 井: s
+ 曲: s
+ 开: s
+ "\ue0f4": s
+ "\ue066": s
+ 弗: s
+ 丅: t
+ 干: t
+ 帀: t
+ 下: t
+ "\ue008": t
+ "\uf013": t
+ "\ue05a": t
+ "\ue0eb": t
+ 弔: t
+ 丆: t
+ "\ue039": t
+ "\uf014": t
+ "\ue0ee": t
+ "\uf015": t
+ "\ue016": 'y'
+ "\ue042": 'y'
+ "\ue093": 'y'
+ 丩: u
+ 必: u
+ "\ue43d": v
+ "\uf017": v
+ "\ue0d6": w
+ 尢: w
+ "\ue100": w
+ 旡: w
+ 冘: w
+ 北: x
+ 幺: w
+ "\ue023": w
+ "\ue42f": x
+ 兆: x
+ 夗: x
+ "\ue408": x
+ "\ue863": x
+ "\ue42c": x
+ "\ue42b": x
+ "\ue985": x
+ "\uf018": x
+ "\uf019": x
+ 士: 'y'
+ 上: 'y'
+ "\ue0c1": 'y'
+ "\ue0f9": 'y'
+ "\ue0dd": 'y'
+ "\uf01a": 'y'
+ 钅: z
+ 孑: z
+ 孓: z
+ "\uf01c": z
+ "\ue0c6": e
+ "\ue131": c
+ "\ue8b9": e
+ "\ue125": e
+ 丯: f
+ "\ue15b": f
+ 帇: f
+ "\ue0fa": f
+ "\ue12f": f
+ "\uf01f": f
+ "\uf01e": f
+ 亊: f
+ "\ue442": g
+ 卌: h
+ "\ue112": h
+ 丗: h
+ "\ue076": h
+ 冊: h
+ 円: 'n'
+ 䍏: 'n'
+ "\uf020": h
+ "\ue124": h
+ 刄: h
+ 㐁: i
+ 飠: k
+ "\ue162": k
+ "\ue16f": k
+ "\ue14e": k
+ 爿: k
+ "\ue10c": l
+ "\uebc0": l
+ "\ue127": l
+ 黽: l
+ "\ue06f": l
+ 東: m
+ 束: m
+ "\ue130": m
+ "\ue12e": m
+ "\ue04c": h
+ 乗: m
+ 冄: 'n'
+ 冎: 'n'
+ "\ue105": 'n'
+ "\ue060": 'n'
+ "\ueaef": 'n'
+ "\ue8b2": o
+ "\ue09c": o
+ 亞: o
+ "\uf025": o
+ 卪: p
+ "\ue10e": p
+ 囧: q
+ "\ue0e7": r
+ "\ue068": x
+ "\ue043": r
+ "\ue449": r
+ 夨: r
+ "\uf026": r
+ 㬰: r
+ "\uf027": r
+ "\uf028": f
+ "\ue103": s
+ 㦮: s
+ 馬: s
+ 鳥: s
+ 烏: s
+ 亐: s
+ "\ue157": s
+ "\ue0d7": s
+ 襾: s
+ 亜: s
+ "\uf029": s
+ "\ue0f0": s
+ 糹: w
+ "\ue04e": x
+ 門: x
+ 鬥: x
+ "\uf02d": x
+ "\uf02e": x
+ "\uf02f": x
+ "\uf032": x
+ 臦: x
+ "\uf033": x
+ 戼: x
+ 丱: x
+ "\uf034": x
+ "\uf035": x
+ 卝: x
+ 丫: 'y'
+ "\ue030": 'y'
+ "\ue0e8": 'y'
+ 甴: 'y'
+ "\ue035": 'y'
+ "\ue114": 'y'
+ "\ue15a": 'y'
+ "\ue139": 'y'
+ "\uf036": z
+ 首字母-a: a
+ 首字母-b: b
+ 首字母-c: c
+ 首字母-d: d
+ 首字母-e: e
+ 首字母-f: f
+ 首字母-g: g
+ 首字母-h: h
+ 首字母-j: j
+ 首字母-k: k
+ 首字母-l: l
+ 首字母-m: m
+ 首字母-n: 'n'
+ 首字母-o: o
+ 首字母-p: p
+ 首字母-q: q
+ 首字母-r: r
+ 首字母-s: s
+ 首字母-t: t
+ 首字母-w: w
+ 首字母-x: x
+ 首字母-y: 'y'
+ 首字母-z: z
+ 凵: u
+ 末: m
+ 里: i
+ "\ue42e": x
+ 尨: w
+ "\ue117": f
+ "\uf038": j
+ "\ue438": k
+encoder:
+ max_length: 4
+ auto_select_length: 4
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ next: c1
+ s3:
+ object: {type: 字根, rootIndex: 3}
+ next: c2
+ s4:
+ object: {type: 笔画, rootIndex: 2, strokeIndex: 1}
+ next: s5
+ s5:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ s6:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ s7:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ s8:
+ object: {type: 笔画, rootIndex: 1, strokeIndex: 1}
+ next: c3
+ s14:
+ object: {type: 笔画, rootIndex: 1, strokeIndex: 2}
+ next: s17
+ s15:
+ object: {type: 字根, rootIndex: 1}
+ next: s16
+ s16:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ s17:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: s8
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s3
+ negative: s4
+ c2:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s6
+ negative: s7
+ c3:
+ object: {type: 笔画, rootIndex: 1, strokeIndex: 2}
+ operator: 存在
+ positive: s14
+ negative: s15
+data:
+ repertoire:
+ "\uf000":
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 冘, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 冘二
+ "\uf003":
+ unicode: 61443
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue036", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 姊字边二
+ "\uf006":
+ unicode: 61446
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 疌, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 疌无人
+ "\uf007":
+ unicode: 61447
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 甫, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 甫无丶
+ "\uf008":
+ unicode: 61448
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 永, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 永二
+ "\uf009":
+ unicode: 61449
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 氏, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 氏二
+ "\uf00a":
+ unicode: 61450
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue07e", strokes: [{feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 旅下角后二
+ "\uf00b":
+ unicode: 61451
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue00c", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 冒字头二
+ "\uf00c":
+ unicode: 61452
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 艮, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 艮四
+ "\uf00f":
+ unicode: 61455
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0e9", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 象下四
+ "\uf010":
+ unicode: 61456
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: []
+ ambiguous: false
+ name: 象下后四
+ "\uf011":
+ unicode: 61457
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0e9", strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 象下后五
+ "\uf012":
+ unicode: 61458
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue069", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 卑六无丿
+ "\uf013":
+ unicode: 61459
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 疋, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 疋无人
+ "\uf014":
+ unicode: 61460
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 斥, strokes: [{feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 斥下
+ "\uf015":
+ unicode: 61461
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue03a", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 定字底三
+ "\uf017":
+ unicode: 61463
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue03a", strokes: [{feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 定字底人
+ "\uf018":
+ unicode: 61464
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 肃, strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}]}]
+ ambiguous: false
+ name: 肃下
+ "\uf019":
+ unicode: 61465
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0d0", strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}]}]
+ ambiguous: false
+ name: 雨四点
+ "\uf01b":
+ unicode: 61467
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: []
+ ambiguous: false
+ name: 承中
+ "\uf01c":
+ unicode: 61468
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 承, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 承中
+ "\uf01e":
+ unicode: 61470
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue12f", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 挿字边无丿
+ "\uf01f":
+ unicode: 61471
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue132", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 揷字边无丿
+ "\uf020":
+ unicode: 61472
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue158", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 飛字底四
+ "\uf021":
+ unicode: 61473
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 一, strokes: [{feature: reference, index: 0}]}]
+ ambiguous: false
+ name: 亀无头
+ "\uf024":
+ unicode: 61476
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 一, strokes: [{feature: reference, index: 0}]}]
+ ambiguous: false
+ name: 壺无士
+ "\uf025":
+ unicode: 61477
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [冖, "\ue137"]}]
+ ambiguous: false
+ name: 壺无士
+ "\uf026":
+ unicode: 61478
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 㑒, strokes: [{feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}]}]
+ ambiguous: false
+ name: 㑒无人
+ "\uf027":
+ unicode: 61479
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue104", strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}, {feature: reference, index: 9}, {feature: reference, index: 10}]}]
+ ambiguous: false
+ name: 漢字边下
+ "\uf028":
+ unicode: 61480
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue150", strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}, {feature: reference, index: 9}]}]
+ ambiguous: false
+ name: 㵮下角下
+ "\uf029":
+ unicode: 61481
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [冖, "\ue136"]}]
+ ambiguous: false
+ name: 壷无士
+ "\uf02a":
+ unicode: 61482
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 一, strokes: [{feature: reference, index: 0}]}]
+ ambiguous: false
+ name: 州二
+ "\uf02c":
+ unicode: 61484
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: []
+ ambiguous: false
+ name: 鳏下角四点
+ "\uf02d":
+ unicode: 61485
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0d9", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 鳏下角无竖
+ "\uf02e":
+ unicode: 61486
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue16d", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 畱字头无横
+ "\uf02f":
+ unicode: 61487
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 淵字边无横
+ "\uf032":
+ unicode: 61490
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿰, operandList: [刀, "\ue107"]}]
+ ambiguous: false
+ name: 齊字无丫
+ "\uf033":
+ unicode: 61491
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 丣, strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 丣无横
+ "\uf034":
+ unicode: 61492
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue120", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 虛字底无横
+ "\uf035":
+ unicode: 61493
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue129", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 斲字旁无横
+ "\uf036":
+ unicode: 61494
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 之, strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 之下
+ "\uf037":
+ unicode: 61495
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0d0", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 雨字头无四点
+ "\uf038":
+ unicode: 61496
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0b7", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 衣省二
+ glyph_customization:
+ "\uea02":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue42b", 幺]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue995":
+ type: compound
+ operator: ⿴
+ operandList: [北, 口]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue9ab":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue863", 白]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ character_set: gb2312
diff --git a/examples/easy.yaml b/examples/easy.yaml
new file mode 100644
index 0000000..260e336
--- /dev/null
+++ b/examples/easy.yaml
@@ -0,0 +1,1483 @@
+version: '0.1'
+source: easy
+info:
+ name: 易码
+ version: '1.0'
+ author: 小泥巴
+ description: 形码单字四二顶
+data:
+ repertoire:
+ :
+ unicode: 61443
+ tygf: 0
+ gb2312: false
+ name: 㗊上
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: compound
+ operator: ⿰
+ operandList:
+ - 口
+ - 口
+ ambiguous: false
+ :
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ name: 其字头无横
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: derived_component
+ source:
+ strokes:
+ - feature: reference
+ index: 0
+ - feature: reference
+ index: 1
+ - feature: reference
+ index: 2
+ - feature: reference
+ index: 3
+ - feature: reference
+ index: 4
+ ambiguous: false
+ :
+ unicode: 61442
+ tygf: 0
+ gb2312: false
+ name: 囱字框省
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: derived_component
+ source:
+ strokes:
+ - feature: reference
+ index: 0
+ - feature: reference
+ index: 1
+ - feature: reference
+ index: 2
+ ambiguous: false
+ :
+ unicode: 61441
+ tygf: 0
+ gb2312: false
+ name: 乑省
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: derived_component
+ source: 乑
+ strokes:
+ - feature: reference
+ index: 1
+ - feature: reference
+ index: 2
+ - feature: reference
+ index: 3
+ - feature: reference
+ index: 4
+ - feature: reference
+ index: 5
+ ambiguous: false
+ :
+ unicode: 61444
+ tygf: 0
+ gb2312: false
+ name: 㗊下
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: compound
+ operator: ⿰
+ operandList:
+ - 口
+ - 口
+ ambiguous: false
+ 䒤:
+ unicode: 17572
+ tygf: 0
+ gb2312: false
+ name: null
+ gf0014_id: null
+ readings: []
+ glyphs:
+ - type: compound
+ operator: ⿱
+ operandList:
+ - 艹
+ - 日
+ ambiguous: false
+ glyph_customization:
+ 胤:
+ type: compound
+ tags:
+ - 横向包夹
+ operator: ⿻
+ operandList:
+ - 儿
+ -
+ order:
+ - index: 0
+ strokes: 1
+ - index: 1
+ strokes: 0
+ - index: 0
+ strokes: 1
+ 蕞:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ - 取
+ 亓:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList:
+ - 一
+ - 丌
+ 兽:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ -
+ 克:
+ type: basic_component
+ strokes:
+ - feature: 横
+ start:
+ - 8
+ - 17
+ curveList:
+ - command: h
+ parameterList:
+ - 84
+ - feature: 竖
+ start:
+ - 50
+ - 4
+ curveList:
+ - command: v
+ parameterList:
+ - 30
+ - feature: 竖
+ start:
+ - 21
+ - 34
+ curveList:
+ - command: v
+ parameterList:
+ - 24
+ - feature: 横折
+ start:
+ - 21
+ - 34
+ curveList:
+ - command: h
+ parameterList:
+ - 58
+ - command: v
+ parameterList:
+ - 24
+ - feature: 横
+ start:
+ - 21
+ - 58
+ curveList:
+ - command: h
+ parameterList:
+ - 58
+ - feature: 撇
+ start:
+ - 38
+ - 58
+ curveList:
+ - command: c
+ parameterList:
+ - 0
+ - 6
+ - 0
+ - 26
+ - -30
+ - 35
+ - feature: 竖弯钩
+ start:
+ - 61
+ - 58
+ curveList:
+ - command: v
+ parameterList:
+ - 35
+ - command: h
+ parameterList:
+ - 32
+ 囱:
+ type: compound
+ operator: ⿳
+ operandList:
+ -
+ - 夂
+ - 一
+ 古:
+ type: basic_component
+ strokes:
+ - feature: 横
+ start:
+ - 10
+ - 40
+ curveList:
+ - command: h
+ parameterList:
+ - 80
+ - feature: 竖
+ start:
+ - 50
+ - 15
+ curveList:
+ - command: v
+ parameterList:
+ - 45
+ - feature: 竖
+ start:
+ - 30
+ - 60
+ curveList:
+ - command: v
+ parameterList:
+ - 30
+ - feature: 横折
+ start:
+ - 30
+ - 60
+ curveList:
+ - command: h
+ parameterList:
+ - 40
+ - command: v
+ parameterList:
+ - 30
+ - feature: 横
+ start:
+ - 30
+ - 90
+ curveList:
+ - command: h
+ parameterList:
+ - 40
+ 囟:
+ type: compound
+ operator: ⿳
+ operandList:
+ -
+ - 乂
+ - 一
+ 隺:
+ type: compound
+ tags:
+ - 笔画搭挂
+ operator: ⿻
+ operandList:
+ - 冖
+ - 隹
+ :
+ type: compound
+ operator: ⿰
+ operandList:
+ - 吅
+ - 口
+ 兕:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ - 兀
+ 衮:
+ type: compound
+ operator: ⿳
+ operandList:
+ - 六
+ - 厶
+ -
+ :
+ type: compound
+ operator: ⿺
+ operandList:
+ -
+ -
+ 草:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ - 十
+ 熏:
+ type: compound
+ tags:
+ - 中竖截断
+ operator: ⿱
+ operandList:
+ - 千
+ - 黑
+ :
+ type: compound
+ operator: ⿲
+ operandList:
+ -
+ - 矢
+ - 匕
+ 昊:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 旦
+ - 大
+ 舍:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList:
+ - 亼
+ - 古
+ :
+ type: compound
+ operator: ⿻
+ operandList:
+ -
+ - 水
+ 丢:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList:
+ - 壬
+ - 厶
+ :
+ type: compound
+ tags:
+ - 横向包夹
+ operator: ⿻
+ operandList:
+ -
+ - 米
+ order:
+ - index: 0
+ strokes: 1
+ - index: 1
+ strokes: 0
+ - index: 0
+ strokes: 0
+ 丝:
+ type: compound
+ operator: ⿰
+ operandList:
+ - 纟
+ - 纟
+ 哀:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ -
+ 司:
+ type: basic_component
+ strokes:
+ - feature: 横折钩
+ start:
+ - 12
+ - 11
+ curveList:
+ - command: h
+ parameterList:
+ - 71
+ - command: v
+ parameterList:
+ - 83
+ - feature: 横
+ start:
+ - 15
+ - 30
+ curveList:
+ - command: h
+ parameterList:
+ - 57
+ - feature: 竖
+ start:
+ - 18
+ - 49
+ curveList:
+ - command: v
+ parameterList:
+ - 25
+ - feature: 横折
+ start:
+ - 18
+ - 49
+ curveList:
+ - command: h
+ parameterList:
+ - 38
+ - command: v
+ parameterList:
+ - 25
+ - feature: 横
+ start:
+ - 18
+ - 74
+ curveList:
+ - command: h
+ parameterList:
+ - 38
+ 兵:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ -
+ 菖:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ - 日
+ :
+ type: compound
+ tags:
+ - 笔画搭挂
+ operator: ⿻
+ operandList:
+ - 鱼
+ - 人
+ 㝵:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 旦
+ - 寸
+ 蔓:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ -
+ 直:
+ type: basic_component
+ strokes:
+ - feature: 横
+ start:
+ - 9
+ - 16
+ curveList:
+ - command: h
+ parameterList:
+ - 82
+ - feature: 竖
+ start:
+ - 50
+ - 4
+ curveList:
+ - command: v
+ parameterList:
+ - 26
+ - feature: 竖
+ start:
+ - 23
+ - 30
+ curveList:
+ - command: v
+ parameterList:
+ - 60
+ - feature: 横折
+ start:
+ - 23
+ - 30
+ curveList:
+ - command: h
+ parameterList:
+ - 54
+ - command: v
+ parameterList:
+ - 60
+ - feature: 横
+ start:
+ - 23
+ - 45
+ curveList:
+ - command: h
+ parameterList:
+ - 54
+ - feature: 横
+ start:
+ - 23
+ - 60
+ curveList:
+ - command: h
+ parameterList:
+ - 54
+ - feature: 横
+ start:
+ - 23
+ - 74
+ curveList:
+ - command: h
+ parameterList:
+ - 54
+ - feature: 横
+ start:
+ - 6
+ - 90
+ curveList:
+ - command: h
+ parameterList:
+ - 88
+ 葛:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ - 匃
+ 堇:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 革
+ - 二
+ :
+ type: compound
+ operator: ⿳
+ operandList:
+ - 十
+ - 从
+ - 冖
+ :
+ type: compound
+ operator: ⿳
+ operandList:
+ -
+ - 米
+ - 一
+ :
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ - 冖
+ 㐫:
+ type: compound
+ operator: ⿶
+ operandList:
+ - 凵
+ - 文
+ order:
+ - index: 1
+ strokes: 0
+ - index: 0
+ strokes: 0
+ 元:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList:
+ - 一
+ - 兀
+ 㗊:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ -
+ :
+ type: compound
+ operator: ⿴
+ operandList:
+ - 囗
+ -
+ 莫:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒤
+ - 大
+ 舆:
+ type: compound
+ operator: ⿱
+ operandList:
+ -
+ -
+ 章:
+ type: compound
+ operator: ⿱
+ operandList:
+ - 音
+ - 十
+ :
+ type: compound
+ operator: ⿱
+ operandList:
+ - 䒑
+ - 八
+ 爽:
+ type: compound
+ operator: ⿻
+ operandList:
+ - 大
+ - 㸚
+ tags:
+ - 兴字底
+ - 赢字框
+ - 微字框
+ - 同字心
+ - 戈部截断
+analysis:
+ classifier:
+ 横折钩: 7
+ 斜钩: 6
+ 横斜钩: 6
+ 横折弯钩: 6
+ 竖弯钩: 6
+ 竖折: 6
+ 横折: 5
+ degenerator:
+ feature:
+ 捺: 点
+ 提: 横
+ selector:
+ - 根少优先
+ - 连续笔顺
+ - 能连不交
+ - 能散不连
+ - 取大优先
+ customize:
+ :
+ - 䒑
+ - 夫
+ 末:
+ - '1'
+ - 木
+ 直:
+ - 十
+ -
+ - '1'
+ 丈:
+ - '1'
+ - 乂
+ 甩:
+ -
+ - 二
+ - '6'
+ 卅:
+ - '1'
+ - 川
+ 州:
+ -
+ - 川
+ 重:
+ - '3'
+ - 車
+ - '1'
+ 孑:
+ - 了
+ - '1'
+ 尹:
+ -
+ - '3'
+ 夹:
+ - '1'
+ - 丷
+ - 大
+ 巿:
+ - '1'
+ - 巾
+ :
+ - 口
+ - '1'
+ :
+ - '3'
+ - 止
+ 㒸:
+ - 丷
+ - 豕
+ 果:
+ - 日
+ - 木
+ :
+ - 肀
+ -
+ 垂:
+ - 千
+ - 艹
+ - 二
+ :
+ - 大
+ - 丷
+ 余:
+ - 亼
+ - 朩
+ :
+ - 日
+ - 十
+ 事:
+ -
+ - 肀
+ 主:
+ - '4'
+ - 王
+ 佥:
+ - 亼
+ -
+ - '1'
+ 隶:
+ -
+ - 氺
+ 产:
+ -
+ - 厂
+ 朿:
+ - 木
+ - 冂
+ 今:
+ - 亽
+ - '5'
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ mapping_type: 1
+ mapping:
+ : i
+ 弓: a
+ 宀: t
+ 火: o
+ 夕: d
+ 皿: b
+ 非: g
+ 扌: m
+ 羊: j
+ : h
+ '33': e
+ 冉: d
+ 衣: r
+ 刂: b
+ 力: p
+ 革: x
+ 曲: m
+ 夂: o
+ 癶: f
+ 儿: e
+ 虎: x
+ : n
+ 豆: n
+ 走: k
+ 豕: m
+ 攴: l
+ 亻: j
+ 古: d
+ 戊: i
+ 足: a
+ 疒: r
+ 不: i
+ 丷: i
+ 幺: y
+ 阝: k
+ 彐: g
+ 也: d
+ 㐄: e
+ 石: d
+ 金: u
+ 兼: x
+ '34': w
+ 麻: l
+ : z
+ 耒: y
+ 面: l
+ '42': u
+ 糸: v
+ 井: u
+ 冖: l
+ '12': f
+ 上: e
+ 衤: d
+ '21': h
+ 彑: c
+ 疋: j
+ 马: d
+ 巾: x
+ 乡: f
+ '54': x
+ 䒤: z
+ 㔾: o
+ 囗: e
+ 辛: u
+ 隹: e
+ 廿: l
+ 田: y
+ 酉: r
+ 己: u
+ 用: p
+ 日: r
+ 子: w
+ 业: e
+ 弋: k
+ 贝: n
+ : a
+ 人: l
+ : x
+ 纟: i
+ 民: y
+ 攵: h
+ : p
+ 彡: h
+ 矢: l
+ 丂: z
+ '52': v
+ 亼: g
+ 耂: h
+ 戈: d
+ 文: o
+ '23': k
+ 瓜: a
+ 旦: k
+ 丁: o
+ 匕: g
+ 穴: b
+ 韦: z
+ 欠: y
+ 巴: c
+ 皮: m
+ 身: l
+ 竹: n
+ 丰: a
+ 高: d
+ 禺: x
+ 二: j
+ '43': i
+ 辰: y
+ 甘: i
+ 丬: y
+ 甲: g
+ 吅: u
+ : n
+ 厂: q
+ 亦: r
+ 页: j
+ 又: h
+ 屮: g
+ '32': r
+ 歺: a
+ 山: c
+ 亠: x
+ 音: t
+ 龙: w
+ 寸: k
+ 尸: q
+ 缶: t
+ 户: t
+ 谷: i
+ '53': c
+ 耳: s
+ 广: w
+ 象: r
+ 乃: a
+ 鸟: x
+ 止: o
+ 骨: x
+ 壬: x
+ 见: w
+ '51': b
+ 里: z
+ 言: w
+ 彳: x
+ 因: f
+ 心: z
+ 片: u
+ 亍: h
+ 鬼: i
+ 木: p
+ '25': m
+ 殳: d
+ 亥: a
+ 夫: n
+ 艹: b
+ 毛: q
+ : n
+ 匚: b
+ 瓦: u
+ 之: c
+ : k
+ 乂: o
+ 乍: c
+ 氵: h
+ '11': g
+ 牛: f
+ '44': o
+ 未: c
+ 黾: g
+ 可: i
+ '14': s
+ 牙: m
+ 豸: k
+ 无: k
+ 巳: b
+ 艮: m
+ 鼠: e
+ 㡀: z
+ '24': l
+ 辶: a
+ 生: o
+ 申: j
+ 尤: l
+ 手: k
+ 舌: y
+ 句: n
+ 兀: j
+ 忄: z
+ 冫: q
+ 甫: n
+ 爪: b
+ 西: g
+ 亡: t
+ 卜: h
+ 聿: f
+ 勹: k
+ 水: j
+ '13': d
+ 卩: x
+ 卯: f
+ 丑: x
+ 了: k
+ 由: v
+ 龹: g
+ 示: e
+ 气: u
+ 立: z
+ '31': t
+ 长: j
+ 五: a
+ 予: t
+ : d
+ 犬: x
+ : p
+ 七: c
+ 丩: a
+ 且: q
+ 禾: n
+ : o
+ 雨: y
+ 云: f
+ : c
+ 口: s
+ 米: l
+ 入: i
+ 母: z
+ 千: e
+ 至: l
+ 壴: u
+ '15': a
+ 虫: o
+ 厶: k
+ 戋: z
+ 川: w
+ 冂: x
+ : s
+ : k
+ 卵: k
+ 六: z
+ 十: w
+ 讠: v
+ 歹: w
+ : z
+ 舟: t
+ 白: d
+ 王: g
+ '55': n
+ 土: c
+ '2': jj
+ 髟: z
+ 斤: o
+ 车: a
+ 大: u
+ 四: a
+ 刀: n
+ 而: o
+ 臼: i
+ 束: r
+ '5': vv
+ 臣: q
+ 自: n
+ : v
+ 三: n
+ 月: l
+ 八: t
+ '1': ff
+ 鬲: q
+ 丆: y
+ 羽: a
+ : v
+ 食: f
+ 鱼: o
+ 鹿: b
+ 女: y
+ '35': q
+ '45': p
+ 小: u
+ 几: u
+ 方: c
+ 干: m
+ : j
+ 黑: k
+ '22': j
+ '3': ee
+ 工: u
+ : l
+ 尚: q
+ 九: w
+ 兔: i
+ '4': ii
+ 门: v
+ 齿: p
+ 目: e
+ : n
+ '41': y
+ grouping:
+ '6': '5'
+ : 刀
+ '57': '55'
+ : 匚
+ : 虫
+ : 彐
+ : 手
+ 镸: 长
+ : 兔
+ : 辛
+ 䒑: 丷
+ '46': '45'
+ '60': '52'
+ 爫: 爪
+ 虍: 虎
+ '36': '35'
+ : 冂
+ : 聿
+ '7': '5'
+ : 臣
+ 乌: 鸟
+ '75': '55'
+ 覀: 西
+ : 月
+ '72': '52'
+ :
+ : 艹
+ '66': '55'
+ : 禾
+ : 卩
+ '76': '55'
+ : 疋
+ : 甘
+ '71': '51'
+ : 艮
+ 旡: 无
+ : 日
+ : 夂
+ : 十
+ : 羊
+ :
+ 习: 羽
+ : 冂
+ : 屮
+ : 力
+ : 歺
+ : 手
+ : 雨
+ : 甘
+ '62': '52'
+ '65': '55'
+ : 羊
+ : 亦
+ : 竹
+ '20': '22'
+ 巜: 川
+ : 戋
+ '16': '15'
+ : 八
+ : 卜
+ '37': '35'
+ 丌: 兀
+ 已: 己
+ : 㐄
+ : 缶
+ 龸: 尚
+ : 聿
+ : 衣
+ '64': '54'
+ 朩: 木
+ : 米
+ '10': '12'
+ : 卯
+ :
+ : 羊
+ : 冫
+ : 小
+ 車: 车
+ : 戊
+ : 小
+ '50': '52'
+ : 匕
+ : 月
+ 丸: 九
+ : 片
+ : 尚
+ 巛: 川
+ : 丂
+ 钅: 金
+ 灬: 火
+ : 立
+ : 儿
+ : 几
+ : 斤
+ 戉: 戊
+ : 日
+ 士: 土
+ : 十
+ : 片
+ : 水
+ '77': '55'
+ : 川
+ : 八
+ : 七
+ :
+ : 乃
+ 龷: 廿
+ : 彐
+ : 小
+ : 云
+ : 厂
+ :
+ '61': '51'
+ : 水
+ : 手
+ : 立
+ : 竹
+ 犭: 犬
+ : 用
+ : 火
+ : 母
+ : 亡
+ '67': '55'
+ : 冂
+ : 尸
+ : 小
+ : 丬
+ :
+ : 月
+ : 高
+ : 屮
+ : 乃
+ : 人
+ 曰: 日
+ : 手
+ : 鸟
+ 亽: 亼
+ 饣: 食
+ : 匕
+ : 车
+ : 匚
+ : 小
+ 凵: 冂
+ : 又
+ 肀: 聿
+ :
+ : 彡
+ 爿: 片
+ : 七
+ : 尸
+ '70': '52'
+ : 水
+ 龶: 丰
+ : 足
+ 礻: 示
+ '17': '15'
+ 龵: 手
+ '74': '54'
+ '27': '25'
+ : 冫
+ '47': '45'
+ : 井
+ 龰: 疋
+ : 衣
+ : 匕
+ '56': '55'
+ 罒: 四
+ : 衣
+ '30': '33'
+ : 屮
+ '63': '53'
+ 牜: 牛
+ : 亻
+ : 鼠
+ 廾: 艹
+ 㠯: 吅
+ 廴: 辶
+ : 高
+ : 亦
+ '26': '25'
+ 毋: 母
+ : 丰
+ '73': '53'
+ : 牛
+ 尢: 尤
+ 戶: 户
+ : 皮
+ 氺: 水
+ : 豕
+ '40': '43'
+ : 高
+ :
+ :
+ : 臼
+ :
+ :
+ 龴: 厶
+encoder:
+ max_length: 3
+ select_keys:
+ - ';'
+ - '_'
+ auto_select_length: 2
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object:
+ type: 字根
+ rootIndex: 1
+ index: 0
+ next: c0
+ s2:
+ object:
+ type: 字根
+ rootIndex: 2
+ index: 0
+ next: c1
+ s3:
+ object:
+ type: 二笔
+ rootIndex: 1
+ strokeIndex: 1
+ index: 0
+ next: s6
+ s4:
+ object:
+ type: 二笔
+ rootIndex: 2
+ strokeIndex: 1
+ index: 0
+ next: null
+ s5:
+ object:
+ type: 字根
+ rootIndex: -1
+ index: 0
+ next: null
+ s6:
+ object:
+ type: 笔画
+ rootIndex: 1
+ strokeIndex: -1
+ index: 1
+ next: null
+ conditions:
+ c0:
+ object:
+ type: 字根
+ rootIndex: 2
+ operator: 存在
+ positive: s2
+ negative: s3
+ c1:
+ object:
+ type: 字根
+ rootIndex: 3
+ operator: 存在
+ positive: s5
+ negative: s4
+ short_code:
+ - length_equal: 1
+ schemes:
+ - { prefix: 2 }
+ rules:
+ - length_equal: 2
+ formula: AaAbBa
+ - length_equal: 3
+ formula: AaBaCa
+ - length_in_range:
+ - 4
+ - 20
+ formula: AaBaZa
+optimization:
+ objective:
+ characters_short:
+ tiers:
+ - top: 3000
+ duplication: 4.0
+ levels: []
+ duplication: 200.0
+ key_distribution: 2.0
+ new_key_equivalence_modified: 0.01
+ new_pair_equivalence: 0.01
+ levels:
+ - length: 2
+ frequency: -2.0
+ constraints:
+ elements:
+ - element: '11'
+ keys:
+ - 'g'
+ - element: '12'
+ keys:
+ - 'f'
+ - element: '13'
+ keys:
+ - 'd'
+ - element: '14'
+ keys:
+ - 's'
+ - element: '15'
+ keys:
+ - 'a'
+ - element: '21'
+ keys:
+ - 'h'
+ - element: '22'
+ keys:
+ - 'j'
+ - element: '23'
+ keys:
+ - 'k'
+ - element: '24'
+ keys:
+ - 'l'
+ - element: '25'
+ keys:
+ - 'm'
+ - element: '31'
+ keys:
+ - 't'
+ - element: '32'
+ keys:
+ - 'r'
+ - element: '33'
+ keys:
+ - 'e'
+ - element: '34'
+ keys:
+ - 'w'
+ - element: '35'
+ keys:
+ - 'q'
+ - element: '41'
+ keys:
+ - 'y'
+ - element: '42'
+ keys:
+ - 'u'
+ - element: '43'
+ keys:
+ - 'i'
+ - element: '44'
+ keys:
+ - 'o'
+ - element: '45'
+ keys:
+ - 'p'
+ - element: '51'
+ keys:
+ - 'b'
+ - element: '52'
+ keys:
+ - 'v'
+ - element: '53'
+ keys:
+ - 'c'
+ - element: '54'
+ keys:
+ - 'x'
+ - element: '55'
+ keys:
+ - 'n'
+ - element: '1'
+ keys:
+ - 'f'
+ - element: '2'
+ keys:
+ - 'j'
+ - element: '3'
+ keys:
+ - 'e'
+ - element: '4'
+ keys:
+ - 'i'
+ - element: '5'
+ keys:
+ - 'v'
+ indices:
+ - index: 1
+ element_indices:
+ - element: 白
+ index: 0
+ keys:
+ - 'd'
+ - element: 勹
+ index: 0
+ keys:
+ - 's'
+ - 'd'
+ - 'f'
+ - 'k'
+ - 'j'
+ - 'l'
+ - 'e'
+ - 'r'
+ - 'i'
+ - 'o'
+ - 'u'
+ - element: 不
+ index: 0
+ keys:
+ - 'e'
+ - 'r'
+ - 'u'
+ - 'i'
+ - 'o'
+ - 's'
+ - 'd'
+ - 'f'
+ - 'j'
+ - 'k'
+ - 'l'
+ - element: 口
+ index: 0
+ keys:
+ - 'e'
+ - 'r'
+ - 'u'
+ - 'i'
+ - 'o'
+ - 's'
+ - 'd'
+ - 'f'
+ - 'j'
+ - 'k'
+ - 'l'
+ metaheuristic:
+ algorithm: SimulatedAnnealing
+ parameters:
+ t_max: 1.0
+ t_min: 0.00001
+ steps: 100000000
+ report_after: 0.75
+ search_method:
+ random_move: 0.9
+ random_swap: 0.09
+ random_full_key_swap: 0.01
diff --git a/examples/flypy.yaml b/examples/flypy.yaml
deleted file mode 100644
index a26ccb0..0000000
--- a/examples/flypy.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-form:
- alphabet: qwertyuiopasdfghjklzxcvbnm
- mapping_type: 1
- grouping: {}
- mapping:
- zh: v
- ch: i
- sh: u
- 零: o
- iu: q
- ei: w
- uan: r
- van: r
- ue: t
- ve: t
- un: "y"
- vn: "y"
- uo: o
- ie: p
- ong: s
- iong: s
- ai: d
- en: f
- eng: g
- ang: h
- an: j
- uai: k
- ing: k
- iang: l
- uang: l
- ou: z
- ia: x
- ua: x
- ao: c
- ui: v
- in: b
- iao: "n"
- ian: m
diff --git a/examples/huma.yaml b/examples/huma.yaml
new file mode 100644
index 0000000..dbba218
--- /dev/null
+++ b/examples/huma.yaml
@@ -0,0 +1,746 @@
+version: '0.1'
+source: huma
+info:
+ name: 虎码
+ author: ID;Peace B
+ version: '2024.06.17'
+ description: 26 键、大字集、低重码、拥有舒适手感的高性能中文输入方案
+analysis:
+ classifier:
+ 横折弯钩: 6
+ degenerator:
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
+ selector:
+ - 结构完整
+ - 根少优先
+ - 能连不交
+ - 能散不连
+ - 全符笔顺
+ - 取大优先
+ customize:
+ 丈:
+ - '1'
+ - 乂
+ 严:
+ - '1'
+ - "\ue408"
+ - 厂
+ "\ue02c":
+ - 土
+ - 丷
+ 主:
+ - '4'
+ - 王
+ 亓:
+ - 二
+ - "\ue0e3"
+ 产:
+ - "\ue054"
+ - 厂
+ 壬:
+ - '3'
+ - 士
+ 我:
+ - '3'
+ - 扌
+ - 戈
+ 龹:
+ - 丷
+ - 夫
+ 果:
+ - 田
+ - 木
+ 禺:
+ - 田
+ - "\ue005"
+ "\ue082":
+ - 大
+ - 丷
+ "\ue067":
+ - 丷
+ - 囗
+ - "\ue03e"
+ 凹:
+ - "\ue060"
+ - '1'
+ "\ue0eb":
+ - 田
+ - 十
+ 勿:
+ - 勹
+ - "\ue41e"
+ "\ue00f":
+ - 牛
+ - 巾
+ 垂:
+ - 千
+ - 艹
+ - 士
+ "\ue048":
+ - 肀
+ - "\ue08c"
+ "\ue052":
+ - 十
+ - 田
+ - "\ue04d"
+ 重:
+ - 千
+ - 里
+ 戋:
+ - '1'
+ - 戈
+ "\ue053":
+ - 耳
+ - 戈
+ "\ue08a":
+ - 禾
+ - 戈
+ 甩:
+ - 用
+ - '5'
+ customizeCorners: {}
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ grouping:
+ "\ue003": 丰
+ 龶: 丰
+ "\ue021": 缶
+ 爿: 片
+ 丬: 片
+ "\ue012": 片
+ "\ue0e1": 片
+ "\ue0e0": 片
+ "\ue0c2": 舌
+ 㐅: 乂
+ "\ue431": 彐
+ "\ue432": 彐
+ 彑: 彐
+ "\ue0b4": 彐
+ "\ue40c": "\ue057"
+ "\ue8d9": 卯
+ 肀: 聿
+ "\ue06d": 聿
+ "\ue06e": 聿
+ "\ue00a": 云
+ "\uf000": 聿
+ "\ue0c1": 虫
+ "\ue42f": 火
+ "\ue430": 火
+ "\ue408": 火
+ "\ue42e": 火
+ 灬: 火
+ "\ue031": 尸
+ "\ue06b": 尸
+ 旡: 无
+ 朩: 木
+ "\ue41e": 彡
+ 冎: 骨
+ 礻: 示
+ 亾: 亡
+ 歺: 歹
+ "\ue098": 歹
+ "\ue0ac": 高
+ "\ue006": 高
+ "\ue804": 高
+ "\ue093": 羊
+ "\ue042": 羊
+ "\ue016": 羊
+ 芈: 羊
+ 丷: 八
+ "\ue446": 八
+ 䒑: 八
+ "\ue450": 八
+ 癶: 八
+ "\ue09b": 八
+ "\ue948": 谷
+ 夊: 夂
+ 攴: 攵
+ 忄: 心
+ "\ue051": 心
+ "\ue055": 册
+ "\ue44d": 册
+ "\ue01c": 艮
+ "\ue054": 立
+ 纟: 糸
+ 亽: 亼
+ 侖: 仑
+ 亻: 人
+ "\ue420": 豕
+ 氵: 水
+ "\ue42d": 水
+ "\ue8e2": 水
+ 氺: 水
+ "\ue059": 水
+ "\ue0d9": 水
+ 龴: 厶
+ "\ue04d": 厶
+ 毌: 毋
+ 廾: 艹
+ 丌: 艹
+ 艸: 艹
+ 龷: 廿
+ "\ue050": 卅
+ 戶: 户
+ 凵: 冂
+ "\ue02a": 冂
+ "\ue060": 冂
+ 犭: 犬
+ "\ue007": 匚
+ "\ue009": 匚
+ "\ue068": 十
+ "\ue413": 十
+ "\ue0ad": 戊
+ 戉: 戊
+ "\ue0c9": 辛
+ "\ue43d": 人
+ "\ue448": 川
+ "\ue07f": 川
+ 巛: 川
+ 巜: 川
+ "\ue0d6": 几
+ 曰: 日
+ "\ue00c": 日
+ "\ue070": 日
+ 尢: 尤
+ 镸: 长
+ "\ue001": 刀
+ 刂: 刀
+ "\ue044": 刀
+ "\ue0e3": 刀
+ "\ue427": 刀
+ "\ue089": 刀
+ "\ue0de": 刀
+ "\ue424": 儿
+ "\ue03f": 戈
+ "\ue421": 臼
+ "\ue0d8": 米
+ "\ue959": 鼠
+ "\ue0c6": 足
+ "\ue0d5": 臣
+ "\uf001": 井
+ 耂: 老
+ "\ue099": 目
+ 牜: 牛
+ "\ue029": 牛
+ 饣: 食
+ "\ue416": 七
+ "\ue09e": 竹
+ "\ue014": 竹
+ "\ue434": 又
+ 䶹: 屮
+ "\ue04e": 屮
+ "\ue092": 屮
+ "\ue437": 止
+ "\ue073": 止
+ 龰: 止
+ "\ue401": 力
+ "\ue0c3": 尚
+ 龸: 尚
+ 讠: 言
+ "\ue04a": 弗
+ "\ue036": 弗
+ 衤: 衣
+ "\ue0b7": 衣
+ "\ue422": 衣
+ "\ue07e": 衣
+ "\ue400": 斤
+ "\ue03a": 疋
+ "\ue091": 疋
+ "\ue0d0": 雨
+ "\ue08c": 用
+ 扌: 手
+ 龵: 手
+ "\uf002": 手
+ "\ue002": 手
+ "\ue410": 手
+ "\ue011": 匕
+ "\ue079": 匕
+ "\ue44f": 匕
+ "\ue411": 㐄
+ "\ue05d": 乃
+ "\ue005": 禸
+ 覀: 西
+ "\ue0d2": 月
+ "\ue988": 月
+ "\ue034": 月
+ "\ue083": 月
+ "\ue088": 冫
+ "\ue00d": 冫
+ 亍: 彳
+ 冖: 宀
+ "\ue010": 兔
+ 頁: 页
+ "\ue024": 厂
+ "\ue0bc": "\ue020"
+ "\ue423": "\ue020"
+ "\ue40e": 禾
+ "\ue0da": 鸟
+ 爫: 爪
+ "\ue018": 卜
+ "\ue0c8": 车
+ 車: 车
+ 罒: 四
+ "\ue03e": 小
+ "\ue06c": 小
+ "\ue442": 小
+ "\ue096": 甘
+ 虍: 虎
+ 钅: 金
+ "\ue0cf": 金
+ "\ue0b2": 卩
+ 㔾: 卩
+ 㐆: 身
+ "\ue44b": 禾
+ "\ue80a": 衣
+ "\ue43a": 土
+ "\ue04c": 木
+ "\ue043": 大
+ "\ue98e": 页
+ "\uf004": 水
+ "\ue9f0": 鱼
+ "\ue838": 鹿
+ "\ue451": 止
+ "\ue102": 王
+ "\ue439": 冂
+ mapping:
+ '1': fi
+ '2': gs
+ '3': tp
+ '4': id
+ '5': ae
+ '6': ai
+ 疒: ab
+ 丁: ad
+ 丰: af
+ 缶: af
+ 鬼: ag
+ 六: al
+ 耒: al
+ 门: am
+ 皿: am
+ 片: ap
+ 舌: as
+ 未: aw
+ 弓: bg
+ 乂: bi
+ 彐: bj
+ "\ue057": bk
+ 卵: bl
+ 卯: bm
+ 面: bm
+ 女: bn
+ 氏: bs
+ 聿: bv
+ 云: by
+ 不: cb
+ 虫: cc
+ 飞: cf
+ 古: cg
+ 火: ch
+ 支: ci
+ 及: cj
+ 尸: cs
+ 业: cy
+ 口: dk
+ 里: dl
+ 民: dm
+ 黾: dm
+ 无: du
+ 由: dy
+ 干: eg
+ 见: ej
+ 木: em
+ 欠: eq
+ 彡: es
+ "\ue078": et
+ 穴: ex
+ 也: ey
+ 㡀: fb
+ 辰: fc
+ 骨: fg
+ 且: fq
+ 示: fs
+ 亡: fw
+ 歹: gd
+ 高: gg
+ 句: gj
+ 士: gs
+ 土: gt
+ 韦: gw
+ 羊: gy
+ 八: hb
+ 夫: hf
+ 谷: hg
+ 子: hi
+ 夂: hi
+ 攵: hp
+ 壴: hu
+ 心: hx
+ 册: ic
+ 艮: ig
+ 丩: ij
+ 立: il
+ 舟: io
+ 糸: is
+ 予: iv
+ 乡: ix
+ 幺: iy
+ 斗: jd
+ 亼: ji
+ 仑: jl
+ 人: jr
+ 豕: js
+ 入: ju
+ 寸: kc
+ 亥: kh
+ 㠯: ki
+ 九: kj
+ 母: km
+ 水: ks
+ 厶: ks
+ 毋: ku
+ 艹: lc
+ 齿: lc
+ 而: le
+ 方: lf
+ 廿: ln
+ 千: lq
+ 生: ls
+ 卅: ls
+ 夕: lx
+ 卌: lx
+ 牙: ly
+ 巴: mb
+ 大: md
+ 二: me
+ 光: mg
+ 户: mh
+ 豸: mi
+ 冂: mk
+ 两: ml
+ 犬: mq
+ 石: ms
+ 甫: nf
+ 鬲: ng
+ 黄: nh
+ 勹: nk
+ 匚: nk
+ 马: nm
+ 十: ns
+ 戊: nu
+ 王: nw
+ 辛: nx
+ 贝: ob
+ 川: oc
+ 自: oi
+ 几: oj
+ 日: or
+ 矢: os
+ 尤: oy
+ 长: pc
+ 刀: pd
+ 儿: pe
+ 戈: pg
+ 黑: ph
+ 弋: pi
+ 臼: pj
+ 米: pm
+ 鼠: ps
+ 足: pu
+ 行: px
+ 走: pz
+ 臣: qc
+ 耳: qe
+ 井: qj
+ 老: ql
+ 目: qm
+ 牛: qn
+ 齐: qq
+ 食: qs
+ 田: qt
+ 非: rf
+ 之: ri
+ 巾: rj
+ 囗: rk
+ 了: rl
+ 皮: rp
+ 七: rq
+ 殳: rs
+ 竹: ru
+ 瓦: rw
+ 又: ry
+ 屮: sc
+ 各: sg
+ 止: si
+ 甲: sj
+ 力: sl
+ 尚: ss
+ 言: sy
+ 阝: te
+ 弗: tf
+ 革: tg
+ 衣: ti
+ 斤: tj
+ 龙: tl
+ 疋: ts
+ 三: ts
+ 雨: tv
+ 用: ty
+ 白: ub
+ 辶: uc
+ 工: ug
+ 隹: ui
+ 手: us
+ 廴: uy
+ 匕: vb
+ 已: vi
+ 己: vj
+ 㐄: vk
+ 毛: vm
+ 乃: vn
+ 气: vq
+ 禸: vr
+ 山: vs
+ 巳: vs
+ 文: vw
+ 西: vx
+ 月: vy
+ 乍: wa
+ 冫: wb
+ 彳: wc
+ 宀: wg
+ 龟: wg
+ 兔: wt
+ 五: wu
+ 鱼: wv
+ 象: wx
+ 页: wy
+ 厂: xc
+ "\ue020": xd
+ 广: xg
+ 禾: xh
+ 鹿: xl
+ 鸟: xn
+ 束: xs
+ 乌: xu
+ 音: xy
+ 爪: ya
+ 卜: yb
+ 车: yc
+ 瓜: yg
+ 至: yi
+ 曲: yq
+ 四: ys
+ 小: yx
+ 酉: yy
+ 豆: zd
+ 甘: zg
+ 虎: zh
+ 金: zj
+ 卩: zj
+ 可: zk
+ 麻: zm
+ 身: zs
+ 亠: zt
+ 羽: zv
+ 习: zx
+ mapping_type: 2
+encoder:
+ max_length: 4
+ select_keys:
+ - _
+ - ;
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ index: 0
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ index: 0
+ next: c1
+ s3:
+ object: {type: 字根, rootIndex: 1}
+ index: 1
+ next: null
+ s4:
+ object: {type: 字根, rootIndex: 2}
+ index: 1
+ next: null
+ s5:
+ object: {type: 字根, rootIndex: 3}
+ index: 0
+ next: c2
+ s6:
+ object: {type: 字根, rootIndex: -1}
+ index: 0
+ next: null
+ s7:
+ object: {type: 字根, rootIndex: 3}
+ index: 1
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: s3
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s5
+ negative: s4
+ c2:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s6
+ negative: s7
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2, count: 1}, {prefix: 3, count: 1}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+data:
+ character_set: gb2312
+ repertoire:
+ "\uf000":
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 事, strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}]}]
+ ambiguous: false
+ name: 事字底
+ "\uf001":
+ unicode: 61441
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue415", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 寒字腰无横
+ "\uf002":
+ unicode: 61442
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue075", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 段字旁无横
+ "\uf004":
+ unicode: 61444
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 乑, strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 乑无撇
+ glyph_customization:
+ 丝:
+ type: compound
+ operator: ⿰
+ operandList: [纟, 纟]
+ 具:
+ type: compound
+ tags: [兴字底]
+ operator: ⿱
+ operandList: ["\ue099", "\ue450"]
+ 兰:
+ type: compound
+ operator: ⿱
+ operandList: [丷, 三]
+ tags: []
+ 兴:
+ type: compound
+ tags: [兴字底]
+ operator: ⿱
+ operandList: ["\ue42d", "\ue450"]
+ 兵:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue400", "\ue450"]
+ 其:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue096", "\ue450"]
+ 典:
+ type: compound
+ tags: [兴字底]
+ operator: ⿱
+ operandList: ["\ue44d", "\ue450"]
+ 卿:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: [卯, "\ue01c"]
+ order: [{index: 0, strokes: 3}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue022":
+ type: compound
+ operator: ⿱
+ operandList: ["\uf001", "\ue450"]
+ 章:
+ type: compound
+ operator: ⿱
+ operandList: [音, 十]
+ 熏:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 黑]
+ "\ue0a5":
+ type: compound
+ tags: [戈部截断]
+ operator: ⿰
+ operandList: ["\ue81f", 戈]
+ "\ue9d0":
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: ["\ue0e3", 米]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 隺:
+ type: compound
+ operator: ⿻
+ operandList: [冖, 隹]
+ tags: [笔画搭挂]
+ 真:
+ type: compound
+ operator: ⿳
+ operandList: [十, "\ue099", "\ue450"]
+ 胤:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: [儿, "\ue99d"]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 舆:
+ type: compound
+ tags: [兴字底]
+ operator: ⿱
+ operandList: ["\ue867", "\ue450"]
+ 龠:
+ type: compound
+ operator: ⿴
+ operandList: [侖, "\ue0e4"]
+ 孑:
+ type: compound
+ operator: ⿻
+ operandList: [了, 一]
+ tags:
+ - 衣框
+ - 行框
diff --git a/examples/jdh.yaml b/examples/jdh.yaml
new file mode 100644
index 0000000..8c13e41
--- /dev/null
+++ b/examples/jdh.yaml
@@ -0,0 +1,663 @@
+version: '0.1'
+source: jdh
+info:
+ name: 简单鹤
+ author: 简单男孩
+ version: '5.0'
+ description: 方案不简单做给谁看呢
+data:
+ repertoire:
+ "\uf000":
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ name: 禺字底
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 禺, strokes: [{feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ "\uf001":
+ unicode: 61441
+ tygf: 0
+ gb2312: false
+ name: 草头
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [艹, 日]}]
+ ambiguous: false
+ glyph_customization:
+ 黄:
+ type: compound
+ operator: ⿱
+ operandList: [龷, 更]
+ 高:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue804", 口]
+ 尚:
+ type: compound
+ operator: ⿱
+ operandList: [龸, 口]
+ "\ue9f0":
+ type: compound
+ operator: ⿰
+ operandList: [鱼, 大]
+ 兵:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue400", "\ue450"]
+ "\ue824":
+ type: compound
+ operator: ⿰
+ operandList: [彳, "\ue849"]
+ 命:
+ type: compound
+ operator: ⿰
+ operandList: [合, 卩]
+ 夌:
+ type: compound
+ operator: ⿱
+ operandList: [土, "\ue989"]
+ 丝:
+ type: compound
+ operator: ⿰
+ operandList: [纟, 纟]
+ 隺:
+ type: compound
+ tags: [笔画搭挂]
+ operator: ⿻
+ operandList: [冖, 隹]
+ "\ue068":
+ type: basic_component
+ strokes: [{feature: 横, start: [8, 18], curveList: [{command: h, parameterList: [85]}]}, {feature: 撇, start: [45, 4], curveList: [{command: c, parameterList: [-8, 26, -22, 42, -39, 56]}]}]
+ 莫:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf001", 大]
+ 㝵:
+ type: compound
+ operator: ⿱
+ operandList: [旦, 寸]
+ 章:
+ type: compound
+ operator: ⿱
+ operandList: [音, 十]
+ "\ue9ab":
+ type: compound
+ operator: ⿲
+ operandList: ["\ue057", 白, "\ue009"]
+ order: [{index: 0, strokes: 0}, {index: 1, strokes: 0}, {index: 2, strokes: 0}]
+ "\ue00f":
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [牛, 巾]
+ 重:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 里]
+ 熏:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 黑]
+ tags:
+ - 赢字框
+ - 辩字框
+ - 玨框
+analysis:
+ degenerator:
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
+ selector:
+ - 结构完整
+ - 连续笔顺
+ - 根少优先
+ - 能连不交
+ - 能散不连
+ - 取大优先
+ customize:
+ 击:
+ - 土
+ - 山
+ 出:
+ - 山
+ - 山
+ 必:
+ - 心
+ - '3'
+ 疌:
+ - '1'
+ - '5'
+ - '1'
+ - '1'
+ - '2'
+ - '1'
+ - 人
+ 耂:
+ - 土
+ - '3'
+ "\ue0d3":
+ - '2'
+ - '5'
+ - '2'
+ - '2'
+ - 二
+ - '1'
+ 兆:
+ - 儿
+ - '4'
+ - '1'
+ - '3'
+ - '4'
+ 非:
+ - '2'
+ - 三
+ - '2'
+ - 三
+ 兰:
+ - 丷
+ - 三
+ "\ue03a":
+ - '1'
+ - '2'
+ - '1'
+ - 人
+ 聿:
+ - '5'
+ - '1'
+ - '1'
+ - '1'
+ - '1'
+ - '2'
+ 丘:
+ - '3'
+ - '2'
+ - '1'
+ - '2'
+ - '1'
+ 垂:
+ - 千
+ - 艹
+ - 士
+ 疋:
+ - '5'
+ - '2'
+ - '1'
+ - 人
+ "\ue043":
+ - 大
+ 开:
+ - 二
+ - '3'
+ - '2'
+ 曲:
+ - '2'
+ - '5'
+ - 艹
+ - '1'
+ "\ue419":
+ - '2'
+ - '5'
+ - '1'
+ - 三
+ "\ue0fb":
+ - 勿
+ - '4'
+ 头:
+ - '4'
+ - '4'
+ - 大
+ 亍:
+ - 二
+ - '2'
+ "\ue44b":
+ - 千
+ - 八
+ 赤:
+ - 十
+ - 丁
+ - '3'
+ - 八
+ 生:
+ - "\ue078"
+ - 土
+ 束:
+ - '1'
+ - 口
+ - '2'
+ - 八
+ 天:
+ - 二
+ - 人
+ "\ue42e":
+ - '3'
+ - '2'
+ - 八
+ 上:
+ - '2'
+ - '1'
+ - '1'
+ "\ue070":
+ - '2'
+ - '5'
+ - '2'
+ - '1'
+ 羌:
+ - 丷
+ - 三
+ - 儿
+ 秉:
+ - 千
+ - '5'
+ - '1'
+ - '1'
+ - 八
+ 龰:
+ - '2'
+ - '1'
+ - 人
+ "\ue446":
+ - 八
+ "\ue085":
+ - 千
+ - 囗
+ - 丷
+ - 二
+ 禾:
+ - 千
+ - 八
+ "\ue103":
+ - 戈
+ - '3'
+ - '3'
+algebra:
+ 鹤韵:
+ - type: xform
+ from: ^[aeo](.)\d$
+ to: $1
+ - type: xform
+ from: ^.*?([aeiouv].*|m|ng?)\d$
+ to: $1
+ 鹤声:
+ - type: xform
+ from: ^([mn]g?\d)$
+ to: o$1
+ - type: xform
+ from: ^([bpmfdtnlgkhjqxzcsrywaoe]h?|^).+$
+ to: $1
+form:
+ alphabet: abcdefghijklmnopqrstuvwxyz
+ mapping_type: 1
+ mapping:
+ 鹤声-a: a
+ 鹤声-b: b
+ 鹤声-c: c
+ 鹤声-ch: i
+ 鹤声-d: d
+ 鹤声-e: e
+ 鹤声-f: f
+ 鹤声-g: g
+ 鹤声-h: h
+ 鹤声-j: j
+ 鹤声-k: k
+ 鹤声-l: l
+ 鹤声-m: m
+ 鹤声-n: 'n'
+ 鹤声-o: o
+ 鹤声-p: p
+ 鹤声-q: q
+ 鹤声-r: r
+ 鹤声-s: s
+ 鹤声-sh: u
+ 鹤声-t: t
+ 鹤声-w: w
+ 鹤声-x: x
+ 鹤声-y: 'y'
+ 鹤声-z: z
+ 鹤声-zh: v
+ 鹤韵-a: a
+ 鹤韵-ai: d
+ 鹤韵-an: j
+ 鹤韵-ang: h
+ 鹤韵-ao: c
+ 鹤韵-e: e
+ 鹤韵-ei: w
+ 鹤韵-en: f
+ 鹤韵-eng: g
+ 鹤韵-i: i
+ 鹤韵-ia: x
+ 鹤韵-ian: m
+ 鹤韵-iang: l
+ 鹤韵-iao: 'n'
+ 鹤韵-ie: p
+ 鹤韵-in: b
+ 鹤韵-ing: k
+ 鹤韵-iong: s
+ 鹤韵-iu: q
+ 鹤韵-m: m
+ 鹤韵-n: 'n'
+ 鹤韵-ng: g
+ 鹤韵-o: o
+ 鹤韵-ong: s
+ 鹤韵-ou: z
+ 鹤韵-r: r
+ 鹤韵-u: u
+ 鹤韵-ua: x
+ 鹤韵-uai: k
+ 鹤韵-uan: r
+ 鹤韵-uang: l
+ 鹤韵-ue: t
+ 鹤韵-ui: v
+ 鹤韵-un: 'y'
+ 鹤韵-uo: o
+ 鹤韵-v: v
+ 鹤韵-ve: t
+ '1': d
+ '2': p
+ '3': u
+ '4': h
+ '5': r
+ "\ue09e": 'n'
+ "\ue0bc": g
+ "\ue42d": h
+ 八: f
+ 巴: t
+ 贝: m
+ 匕: a
+ 灬: 'n'
+ 冫: f
+ 艹: z
+ 册: j
+ 车: t
+ 彳: h
+ 虫: f
+ 辶: q
+ 寸: k
+ 大: x
+ 刀: i
+ 电: e
+ 丁: j
+ 儿: k
+ 而: b
+ 二: u
+ 方: f
+ 付: w
+ 干: s
+ 戈: a
+ 工: p
+ 骨: c
+ 广: r
+ 鬼: s
+ 火: t
+ 几: i
+ 彐: s
+ 卩: b
+ 巾: 'y'
+ 钅: d
+ 冂: o
+ 臼: s
+ 口: o
+ 力: u
+ 厉: e
+ 立: b
+ 麻: d
+ 马: z
+ 米: l
+ 宀: i
+ 皿: a
+ 木: w
+ 目: s
+ 疒: m
+ 廿: v
+ 鸟: c
+ 牛: b
+ 女: 'y'
+ 气: s
+ 丬: l
+ 犭: b
+ 人: e
+ 亻: x
+ 日: v
+ 山: p
+ 尸: q
+ 十: s
+ 石: t
+ 手: o
+ 扌: j
+ 水: o
+ 氵: k
+ 厶: p
+ 纟: e
+ 田: w
+ 土: g
+ 王: a
+ 囗: 'n'
+ 未: e
+ 文: j
+ 五: g
+ 勿: i
+ 夕: f
+ 西: p
+ 习: d
+ 小: i
+ 忄: 'n'
+ 讠: c
+ 衤: h
+ 衣: k
+ 又: l
+ 鱼: q
+ 雨: 'y'
+ 月: l
+ 止: r
+ 舟: t
+ 子: a
+ 足: g
+ 㐅: 'y'
+ grouping:
+ "\ue03e": "\ue42d"
+ 自: 目
+ "\ue43f": 匕
+ 走: 辶
+ "\ue0c8": 车
+ 牜: 牛
+ 三: 二
+ "\ue0d0": 雨
+ 巳: 巴
+ 音: 讠
+ 言: 讠
+ 末: 未
+ "\ue012": 丬
+ 厂: 广
+ "\ue029": 牛
+ 礻: 衤
+ 心: 忄
+ 冖: 宀
+ 龴: 厶
+ 氺: 水
+ 犬: 犭
+ "\ue437": 止
+ 阝: 卩
+ 㔾: 巴
+ 死: 夕
+ "\ue0ed": 鬼
+ 朩: 木
+ 乂: 㐅
+ 门: 冂
+ 攵: 文
+ 曰: 日
+ 歹: 夕
+ 爫: "\ue42d"
+ "\ue432": 彐
+ "\ue011": 匕
+ 甘: 廿
+ 可: 丁
+ 夂: 文
+ 少: 小
+ "\ue078": 人
+ "\ue0d6": 几
+ "\ue020": "\ue0bc"
+ "\ue055": 册
+ "\ue0c6": 足
+ 戋: 戈
+ 丷: 八
+ "\ue0b2": 卩
+ 白: 臼
+ "\ue050": 艹
+ "\ue0d2": 月
+ "\ue43a": 土
+ 龵: 手
+ 已: 巴
+ 己: 巴
+ "\ue43d": 人
+ 千: 干
+ 刂: 刀
+ 廴: 辶
+ 亠: 宀
+ 士: 土
+ 弋: 戈
+ 竹: "\ue09e"
+ "\ue00c": 日
+ "\ue043": 大
+ "\ue05a": 王
+ 龶: 王
+ 丰: 王
+ "\ue079": 匕
+ "\ue02a": 冂
+ 句: 勿
+ "\ue068": 十
+ 七: 匕
+ "\ue416": 匕
+ "\ue03f": 戈
+ 朱: 未
+ 失: 未
+ 夫: 未
+ 丝: 纟
+ "\ue051": 小
+ 釆: "\ue42d"
+ "\ue414": 廿
+ 罒: 皿
+ "\ue06c": 小
+ 覀: 西
+encoder:
+ max_length: 4
+ select_keys:
+ - _
+ - ;
+ short_code:
+ - length_equal: 1
+ schemes:
+ - { prefix: 3 }
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字音, subtype: 鹤声}
+ next: s2
+ s2:
+ object: {type: 字音, subtype: 鹤韵}
+ next: s3
+ s3:
+ object: {type: 字根, rootIndex: 1}
+ next: s4
+ s4:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ conditions: {}
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaDa
+optimization:
+ objective:
+ characters_full:
+ tiers: [{top: 5458, duplication: 100}]
+ duplication: 200
+ pair_equivalence: 11.4514
+ levels: []
+ characters_short:
+ tiers: [{top: 1500, levels: [{length: 3, frequency: -35.89}]}, {top: 5458, duplication: 1}]
+ duplication: 200
+ pair_equivalence: 11.4514
+ levels: []
+ constraints:
+ elements:
+ - {element: 鹤声-a}
+ - {element: 鹤韵-a}
+ - {element: 鹤韵-ai}
+ - {element: 鹤韵-an}
+ - {element: 鹤韵-ang}
+ - {element: 鹤韵-ao}
+ - {element: 鹤声-b}
+ - {element: 鹤声-c}
+ - {element: 鹤声-ch}
+ - {element: 鹤声-d}
+ - {element: 鹤声-e}
+ - {element: 鹤韵-e}
+ - {element: 鹤韵-ei}
+ - {element: 鹤韵-en}
+ - {element: 鹤韵-eng}
+ - {element: 鹤声-f}
+ - {element: 鹤声-g}
+ - {element: 鹤声-h}
+ - {element: 鹤韵-i}
+ - {element: 鹤韵-ia}
+ - {element: 鹤韵-ian}
+ - {element: 鹤韵-iang}
+ - {element: 鹤韵-iao}
+ - {element: 鹤韵-ie}
+ - {element: 鹤韵-in}
+ - {element: 鹤韵-ing}
+ - {element: 鹤韵-iong}
+ - {element: 鹤韵-iu}
+ - {element: 鹤声-j}
+ - {element: 鹤声-k}
+ - {element: 鹤声-l}
+ - {element: 鹤声-m}
+ - {element: 鹤韵-m}
+ - {element: 鹤声-n}
+ - {element: 鹤韵-n}
+ - {element: 鹤韵-ng}
+ - {element: 鹤声-o}
+ - {element: 鹤韵-o}
+ - {element: 鹤韵-ong}
+ - {element: 鹤韵-ou}
+ - {element: 鹤声-p}
+ - {element: 鹤声-q}
+ - {element: 鹤声-r}
+ - {element: 鹤韵-r}
+ - {element: 鹤声-s}
+ - {element: 鹤声-sh}
+ - {element: 鹤声-t}
+ - {element: 鹤韵-u}
+ - {element: 鹤韵-ua}
+ - {element: 鹤韵-uai}
+ - {element: 鹤韵-uan}
+ - {element: 鹤韵-uang}
+ - {element: 鹤韵-ue}
+ - {element: 鹤韵-ui}
+ - {element: 鹤韵-un}
+ - {element: 鹤韵-uo}
+ - {element: 鹤韵-v}
+ - {element: 鹤韵-ve}
+ - {element: 鹤声-w}
+ - {element: 鹤声-x}
+ - {element: 鹤声-y}
+ - {element: 鹤声-z}
+ - {element: 鹤声-zh}
+ indices: []
+ element_indices: []
+ metaheuristic:
+ algorithm: SimulatedAnnealing
+ parameters:
+ t_max: 0.003
+ t_min: 0.000001
+ steps: 99999
+ report_after: 0.1
diff --git a/examples/mswb.yaml b/examples/mswb.yaml
index 6fc0e57..bbcebbf 100644
--- a/examples/mswb.yaml
+++ b/examples/mswb.yaml
@@ -1,9 +1,9 @@
-version: "0.1"
+version: '0.1'
source: mswb
info:
name: 米十五笔
- version: 2023.05.30
author: 李明
+ version: '2023.05.30'
description: http://xukt.ysepan.com/
analysis:
classifier:
diff --git a/examples/snow.yaml b/examples/snow.yaml
new file mode 100644
index 0000000..0cd579c
--- /dev/null
+++ b/examples/snow.yaml
@@ -0,0 +1,293 @@
+version: '0.1'
+source: snow
+info:
+ name: 冰雪四拼
+ author: 谭淞宸
+ version: '1.0'
+ description: 带调拼音词顶功
+analysis:
+ classifier: {}
+ selector:
+ - 全符笔顺
+ - 取大优先
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ grouping:
+ 补码-补: 声调-5
+ 韵头-零: 韵头-e
+ mapping:
+ '1': e
+ '2': i
+ '3': u
+ '4': o
+ '5': a
+ 声调-1: i
+ 声调-2: e
+ 声调-3: u
+ 声调-4: a
+ 声调-5: o
+ 声母四分-零撮: k
+ 声母四分-零合: s
+ 声母四分-零开: r
+ 声母四分-零齐: f
+ 声母四分-b: b
+ 声母四分-c: c
+ 声母四分-ch: 'y'
+ 声母四分-d: d
+ 声母四分-f: f
+ 声母四分-g: g
+ 声母四分-h: h
+ 声母四分-j: j
+ 声母四分-k: k
+ 声母四分-l: l
+ 声母四分-m: m
+ 声母四分-n: 'n'
+ 声母四分-p: p
+ 声母四分-q: q
+ 声母四分-r: r
+ 声母四分-s: s
+ 声母四分-sh: v
+ 声母四分-t: t
+ 声母四分-x: x
+ 声母四分-z: z
+ 声母四分-zh: w
+ 韵头-a: a
+ 韵头-e: e
+ 韵头-er: i
+ 韵头-i: i
+ 韵头-ia: u
+ 韵头-ie: e
+ 韵头-io: o
+ 韵头-o: o
+ 韵头-ü: a
+ 韵头-u: u
+ 韵头-üa: o
+ 韵头-ua: i
+ 韵头-üe: o
+ 韵头-ue: u
+ 韵头-uo: o
+ 韵尾-i: i
+ 韵尾-m: a
+ 韵尾-n: o
+ 韵尾-ng: e
+ 韵尾-u: u
+encoder:
+ max_length: 6
+ auto_select_pattern: ([aeiou]$|[a-z]{4,})
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2}, {prefix: 3}]
+ - length_equal: 2
+ schemes: [{prefix: 2}, {prefix: 3}, {prefix: 4}, {prefix: 5}]
+ - length_equal: 3
+ schemes: [{prefix: 3}, {prefix: 4}, {prefix: 5}]
+ - length_equal: 4
+ schemes: [{prefix: 4}, {prefix: 5}]
+ - length_equal: 5
+ schemes: [{prefix: 5}]
+ - length_in_range: [6, 10]
+ schemes: [{prefix: 6}]
+ rules:
+ - length_equal: 2
+ formula: AaBaBbBcAbAc
+ - length_equal: 3
+ formula: AaBaCaCbCcAb
+ - length_equal: 4
+ formula: AaBaCaDaDbDc
+ - length_equal: 5
+ formula: AaBaCaDaEaEb
+ - length_in_range: [6, 10]
+ formula: AaBaCaDaEaFa
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字音, subtype: 声母四分}
+ next: s2
+ s2:
+ object: {type: 字音, subtype: 韵头}
+ next: s3
+ s3:
+ object: {type: 字音, subtype: 韵尾}
+ next: s4
+ s4:
+ object: {type: 字音, subtype: 声调}
+ next: c0
+ s5:
+ object: {type: 字音, subtype: 补码}
+ next: null
+ conditions:
+ c0:
+ object: {type: 字音, subtype: 韵尾}
+ operator: 是
+ value: 韵尾-零
+ positive: s5
+ negative: null
+algebra:
+ 声母四分:
+ - type: xform
+ from: ^[nm]g\d$
+ to: 零开
+ - type: xform
+ from: ^([bpmfdtnlgkhjqxzcsr]h?|yu?|[aoew]).+$
+ to: $1
+ - type: xform
+ from: ^w$
+ to: 零合
+ - type: xform
+ from: ^y$
+ to: 零齐
+ - type: xform
+ from: ^yu$
+ to: 零撮
+ - type: xform
+ from: ^[aoe]$
+ to: 零开
+ 韵头:
+ - type: xform
+ from: ((?<=[jqx])u|yu|v)
+ to: ü
+ - type: xform
+ from: yi?
+ to: i
+ - type: xform
+ from: wu?
+ to: u
+ - type: xform
+ from: iu
+ to: iou
+ - type: xform
+ from: u([in])
+ to: ue$1
+ - type: xform
+ from: ^.*?([aeiouü].*|m|ng?)\d$
+ to: $1
+ - type: xform
+ from: ao
+ to: au
+ - type: xform
+ from: ^(?=[mn])
+ to: 零
+ - type: xform
+ from: (.+)[iunm]g?$
+ to: $1
+ 韵尾:
+ - type: xform
+ from: ^([jqxy])u
+ to: $1v
+ - type: xform
+ from: ao
+ to: au
+ - type: xform
+ from: yi?
+ to: i
+ - type: xform
+ from: wu?
+ to: u
+ - type: xform
+ from: iu
+ to: iou
+ - type: xform
+ from: u([in])
+ to: ue$1
+ - type: xform
+ from: ^.*?([aeiouv].*|m|ng?)\d$
+ to: $1
+ - type: xform
+ from: ^(?=[mn])
+ to: 零
+ - type: xform
+ to: $1
+ from: ^.+?([iunm]|ng)?$
+ - type: xform
+ from: ^$
+ to: 零
+ 补码:
+ - type: xform
+ from: ^.+$
+ to: 补
+optimization:
+ objective:
+ characters_short:
+ duplication: 10
+ levels: [{length: 2, frequency: 0}, {length: 3, frequency: 0}]
+ tiers:
+ - top: 1000
+ levels: [{length: 2, frequency: -1}]
+ - top: 3000
+ levels: [{length: 4, frequency: 1}]
+ duplication: 10
+ - top: 5000
+ duplication: 10
+ - levels: [{length: 3, frequency: -3}]
+ words_short:
+ duplication: 10
+ levels: [{length: 3, frequency: 0}, {length: 4, frequency: 0}, {length: 5, frequency: 0}]
+ tiers:
+ - top: 1000
+ levels: [{length: 4, frequency: 1}]
+ - levels: [{length: 3, frequency: 0}, {length: 4, frequency: 0}, {length: 5, frequency: 0}]
+ metaheuristic:
+ algorithm: SimulatedAnnealing
+ parameters:
+ t_max: 1
+ t_min: 0.000001
+ steps: 100000
+ constraints:
+ elements:
+ - {element: '1'}
+ - {element: '2'}
+ - {element: '3'}
+ - {element: '4'}
+ - {element: '5'}
+ - {element: 声母四分-b}
+ - {element: 声母四分-p}
+ - {element: 声母四分-m}
+ - {element: 声母四分-f}
+ - {element: 声母四分-d}
+ - {element: 声母四分-t}
+ - {element: 声母四分-n}
+ - {element: 声母四分-l}
+ - {element: 声母四分-g}
+ - {element: 声母四分-k}
+ - {element: 声母四分-h}
+ - {element: 声母四分-j}
+ - {element: 声母四分-q}
+ - {element: 声母四分-x}
+ - {element: 声母四分-z}
+ - {element: 声母四分-c}
+ - {element: 声母四分-s}
+ - {element: 声母四分-r}
+ - {element: 声母四分-zh}
+ - {element: 声母四分-ch}
+ - {element: 声母四分-sh}
+ - {element: 韵头-a}
+ - {element: 韵头-e}
+ - {element: 韵头-i}
+ - {element: 韵头-o}
+ - {element: 韵头-u}
+ - {element: 韵头-er, keys: [a, e, i, o, u]}
+ - {element: 韵头-ia, keys: [a, e, i, o, u]}
+ - {element: 韵头-ie, keys: [a, e, i, o, u]}
+ - {element: 韵头-io, keys: [a, e, i, o, u]}
+ - {element: 韵头-ua, keys: [a, e, i, o, u]}
+ - {element: 韵头-ue}
+ - {element: 韵头-uo}
+ - {element: 韵头-ü, keys: [a, e, i, o, u]}
+ - {element: 韵头-üa, keys: [a, e, i, o, u]}
+ - {element: 韵头-üe, keys: [a, e, i, o, u]}
+ - {element: 韵尾-i}
+ - {element: 韵尾-u}
+ - {element: 韵尾-n}
+ - {element: 韵尾-ng}
+ - {element: 韵尾-m}
+ - {element: 声调-1, keys: [a, e, i, o, u]}
+ - {element: 声调-2, keys: [a, e, i, o, u]}
+ - {element: 声调-3, keys: [a, e, i, o, u]}
+ - {element: 声调-4, keys: [a, e, i, o, u]}
+ - {element: 声调-5, keys: [a, e, i, o, u]}
+ - {element: 声母四分-零合, keys: [b, p, m, t, 'n', g, k, h, q, x, z, s, r]}
+ - {element: 声母四分-零开, keys: [b, p, m, t, 'n', g, k, h, q, x, z, s, r]}
+ - {element: 声母四分-零齐}
+ - {element: 声母四分-零撮, keys: [b, p, m, t, 'n', g, k, h, q, x, z, s, r]}
diff --git a/examples/xuma.yaml b/examples/xuma.yaml
new file mode 100644
index 0000000..e7d9faf
--- /dev/null
+++ b/examples/xuma.yaml
@@ -0,0 +1,1231 @@
+version: '0.1'
+source: xuma
+info:
+ name: 徐码
+ author: 徐国银
+ version: 2023.01.15
+ description: 简繁通打输入法
+analysis:
+ classifier:
+ 竖钩: 5
+ 横捺: 5
+ 竖提: 6
+ 竖折: 6
+ 竖弯: 6
+ 竖弯钩: 6
+ 竖折撇: 6
+ 竖折折钩: 6
+ 竖折折: 6
+ 撇点: 6
+ 撇折: 6
+ 斜钩: 6
+ 横折弯钩: 7
+ 横斜钩: 7
+ degenerator:
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
+ selector:
+ - 根少优先
+ - 全符笔顺
+ - 能连不交
+ - 能散不连
+ - 少弱字根
+ - 取大优先
+ customize:
+ 戋:
+ - '1'
+ - 戈
+ 我:
+ - '3'
+ - 扌
+ - 戈
+ 凸:
+ - '2'
+ - '1'
+ - '2'
+ - '5'
+ - '1'
+ 束:
+ - "\ue04c"
+ - 口
+ "\ue072":
+ - 十
+ - 口
+ - 冖
+ 少:
+ - "\ue442"
+ - '3'
+ 兔:
+ - "\ue0bc"
+ - 口
+ - "\ue424"
+ - '4'
+ "\ue0eb":
+ - 日
+ - 十
+ 尨:
+ - 尤
+ - 彡
+ 㦮:
+ - 二
+ - 戈
+ 㐁:
+ - '1'
+ - 囗
+ - 人
+ 为:
+ - "\ue00d"
+ - "\ue401"
+ 及:
+ - "\ue441"
+ - '4'
+ "\ue0b4":
+ - 匸
+ - '1'
+ "\ue111":
+ - 䒑
+ - 未
+ 业:
+ - "\ue001"
+ - 䒑
+ "\ue415":
+ - '1'
+ - 龷
+ "\ue022":
+ - '1'
+ - 龷
+ - 八
+ "\ue064":
+ - 三
+ - 人
+ 柬:
+ - "\ue04c"
+ - 囗
+ - 丷
+ 冉:
+ - 冂
+ - 土
+ "\ue02b":
+ - "\ue06b"
+ - 二
+ 卑:
+ - 白
+ - 千
+ 隺:
+ - 冖
+ - 隹
+ "\ue130":
+ - 十
+ - 儿
+ 亚:
+ - "\uf006"
+ - 䒑
+ "\ue052":
+ - 車
+ - '4'
+ 主:
+ - '4'
+ - 王
+ 並:
+ - 䒑
+ - "\ue001"
+ - 䒑
+ 乑:
+ - 亻
+ - "\ue077"
+ - "\ue088"
+ "\ue048":
+ - "\ue431"
+ - "\ue0d2"
+ - '2'
+ 耒:
+ - '1'
+ - 未
+ 两:
+ - '1'
+ - 冂
+ - 人
+ - 人
+ "\ue035":
+ - 十
+ - "\ue431"
+ 万:
+ - 丆
+ - '5'
+ 严:
+ - "\uf006"
+ - 䒑
+ - '3'
+ 卫:
+ - "\ue0b2"
+ - '1'
+ 来:
+ - '1'
+ - 米
+ "\ue082":
+ - 大
+ - 丷
+ "\ue013":
+ - 丷
+ - "\ue410"
+ 囙:
+ - 囗
+ - "\ue009"
+ "\ue01e":
+ - "\ue057"
+ - "\ue089"
+ "\ue0d5":
+ - 匸
+ - '2'
+ - 口
+ - '2'
+ "\ue0b8":
+ - 口
+ - '1'
+ 㐆:
+ - "\ue024"
+ - 彐
+ - '5'
+ "\ue129":
+ - '6'
+ - "\ue009"
+ - "\ue137"
+ "\ue10e":
+ - 彐
+ - '3'
+ "\ue0e2":
+ - '6'
+ - "\ue447"
+ - '6'
+ - '6'
+ "\ue108":
+ - 二
+ - 儿
+ 亜:
+ - 二
+ - 口
+ - "\ue001"
+ "\ue136":
+ - 口
+ - "\ue001"
+ - '1'
+ 丼:
+ - 廾
+ - 亠
+ "\ue121":
+ - '6'
+ - "\ue00d"
+ 囬:
+ - 囗
+ - "\ue001"
+ - 二
+ "\ue0cd":
+ - 刀
+ - 二
+ 夬:
+ - '5'
+ - 大
+ "\ue00b":
+ - 䒑
+ - "\ue0d1"
+ "\ue086":
+ - 二
+ - 夂
+ weak:
+ - "\ue410"
+ - "\ue039"
+ customizeCorners: {}
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ grouping:
+ "\ue042": 羊
+ "\ue025": 亦
+ "\ue0a3": 巳
+ "\ue0ec": 电
+ "\ue0e0": 片
+ "\ue0e1": 爿
+ "\ue441": 乃
+ "\ue004": 丂
+ "\ue416": 七
+ "\ue059": 水
+ 氺: 水
+ "\ue039": 干
+ "\ue0dc": 鹿
+ "\ue0da": 鸟
+ "\ue079": 匕
+ "\ue011": 匕
+ "\ue0d6": 几
+ "\ue0b2": 卩
+ "\ue012": 丬
+ "\ue417": 七
+ "\ue442": 小
+ "\ue43d": 人
+ "\ue451": 止
+ "\ue0d2": 月
+ "\ue102": 王
+ "\ue444": 厶
+ "\ue0c8": 车
+ "\ue404": 亻
+ "\ue44b": 禾
+ "\ue0bd": 尸
+ "\ue14c": 电
+ "\ue14e": 爿
+ 䶹: 屮
+ "\ue069": 鬼
+ "\ue41f": 月
+ "\ue419": 且
+ "\ue0c9": 辛
+ "\ue003": 丰
+ "\uf006": 丌
+ 覀: 西
+ "\ue0d7": 鳥
+ "\ue11e": 千
+ "\uf00a": 片
+ "\uf00b": 爿
+ "\ue10b": 月
+ "\ue157": 馬
+ "\uf00c": 米
+ "\ue424": 儿
+ "\ue80a": 衣
+ 龵: 手
+ "\ue153": 虍
+ "\ue07e": "\ue0b7"
+ "\ue159": 烏
+ "\ue44f": 厶
+ "\uf005": 丱
+ "\ue06b": 尸
+ "\ue007": "\ue009"
+ 㐄: "\ue411"
+ 匸: 匚
+ "\ue418": 匚
+ "\ue019": 飠
+ "\ue432": "\ue431"
+ 彐: "\ue431"
+ "\ue055": 冊
+ "\ue410": "\ue002"
+ "\ue106": "\ue0b7"
+ "\ue11c": 臣
+ "\ue020": "\ue0bc"
+ "\ue423": "\ue0bc"
+ 冖: "\ue0bc"
+ "\ue427": "\ue0bc"
+ "\uf008": 夕
+ "\ue838": 鹿
+ "\ue452": 十
+ "\ue0e3": 八
+ "\ue0ba": 八
+ "\ue446": 八
+ "\ue088": 八
+ "\ue02d": "\ue028"
+ "\ue421": "\ue028"
+ "\ue413": 朩
+ "\ue04d": 丄
+ "\ue014": "\ue078"
+ "\ue029": "\ue078"
+ 糹: 糸
+ 丩: 丱
+ 凵: 屮
+ "\ue02a": 勹
+ "\ue831": 勹
+ "\uebbd": 勹
+ "\ue09b": "\ue083"
+ "\uf004": "\ue083"
+ "\ue41e": "\ue077"
+ "\uebc2": "\ue077"
+ "\ue16e": "\ue0e8"
+ "\ue01f": 龴
+ "\ue434": 龴
+ 廾: 艹
+ 卝: 艹
+ 卅: 艹
+ "\ue050": 艹
+ 卌: 艹
+ "\ue443": "\ue068"
+ "\ue0d1": 夫
+ "\ue00c": 曰
+ "\ue070": 曰
+ "\ue07c": "\ue018"
+ "\ue10c": "\ue018"
+ "\ue41a": "\ue001"
+ "\ue448": "\ue42d"
+ 䒑: 丷
+ "\ue440": "\ue405"
+ "\ue023": 巜
+ "\ue439": 冂
+ "\ue14f": 爫
+ "\uf01b": 乂
+ mapping:
+ '1': gu
+ '2': ku
+ '3': pu
+ '4': wu
+ '5': bu
+ '6': cu
+ '7': bi
+ 亠: yu
+ 木: iv
+ 來: il
+ 㔾: bu
+ 卩: ae
+ 言: yv
+ 马: am
+ 尸: dv
+ 弓: dg
+ 韋: dw
+ 皮: dp
+ 又: do
+ 癶: du
+ 女: cv
+ 冂: mu
+ 贝: mb
+ 雨: jy
+ 彳: sr
+ 彡: ss
+ 讠: zy
+ 白: ub
+ 爿: ap
+ 臼: uj
+ 鬼: ug
+ 戶: rh
+ 片: tp
+ 申: ks
+ 由: ky
+ 电: kd
+ 車: jc
+ 丰: if
+ 至: fz
+ 隹: tw
+ 亻: tv
+ 風: qf
+ 几: qj
+ 母: cm
+ 殳: qs
+ 尤: jo
+ 手: rs
+ 扌: fv
+ 未: iw
+ 末: im
+ 气: pq
+ 乃: an
+ 廴: bd
+ 十: eu
+ 黑: mh
+ 艮: bg
+ 户: zh
+ 匚: ff
+ 丂: ek
+ 牙: fy
+ 犬: jq
+ 犭: vq
+ 臣: fe
+ 土: jv
+ 耂: ju
+ 士: ju
+ 龶: eu
+ 走: jz
+ 冫: xs
+ 宀: wv
+ 穴: wx
+ 小: cx
+ 火: xv
+ 灬: xh
+ 丁: ed
+ 示: fs
+ 上: ls
+ 丄: ou
+ 丅: ju
+ 王: ev
+ 日: kv
+ 曰: ku
+ 早: kz
+ 古: jg
+ 目: nv
+ 且: nq
+ 見: nj
+ 貝: nb
+ 缶: pf
+ 矢: pi
+ 纟: cj
+ 了: bl
+ 子: bz
+ 予: by
+ 寸: ic
+ 八: tu
+ 入: vr
+ 食: vs
+ 弋: fi
+ 戈: fg
+ 戊: fw
+ 立: yl
+ 辛: yx
+ 三: is
+ 巛: cc
+ 巜: cu
+ 川: tc
+ 耳: he
+ 丌: hj
+ 兀: gw
+ 口: ov
+ 鸟: sn
+ 乌: sw
+ 豸: vz
+ 刀: dd
+ 刂: ld
+ 禾: rv
+ 毛: rm
+ 千: rq
+ 壬: rr
+ 夭: ry
+ 麻: wm
+ 疒: wb
+ 广: wg
+ 鹿: wl
+ 辰: gn
+ 干: eg
+ 甫: ef
+ 厶: ai
+ 幺: ay
+ 匕: vi
+ 长: pc
+ 水: as
+ 氵: zv
+ 糸: av
+ 辶: zd
+ 之: zz
+ 大: fd
+ 夫: jf
+ 巴: db
+ 已: di
+ 己: dj
+ 巳: ds
+ 也: be
+ 乜: bu
+ 钅: pj
+ 工: ig
+ 酉: ey
+ 牛: pn
+ 齒: lc
+ 止: lz
+ 生: ps
+ 西: ex
+ 虫: lv
+ 丷: xu
+ 米: xm
+ 丬: xu
+ 羊: xy
+ 自: tz
+ 身: ts
+ 心: rx
+ 忄: uv
+ 人: uu
+ 僉: uq
+ 骨: ng
+ 冎: nu
+ 九: rj
+ 瓦: hw
+ 乂: ti
+ 力: cl
+ 用: sy
+ 面: gm
+ 而: ge
+ 革: hg
+ 世: hs
+ 艹: hv
+ 文: yw
+ 方: yu
+ 亥: yh
+ 亦: yi
+ 门: zm
+ 豕: gs
+ 金: vv
+ 非: lf
+ 其: hq
+ 巾: mj
+ 山: mv
+ 卜: lb
+ 鹵: ll
+ 瓜: rg
+ 爪: rz
+ 皿: mm
+ 罒: mw
+ 舟: ro
+ 髟: eb
+ 長: ez
+ 镸: ec
+ 习: ci
+ 丆: gu
+ 厂: gc
+ 石: gv
+ 不: gb
+ 甲: kj
+ 田: kt
+ 禺: ko
+ 魚: qv
+ 屮: au
+ 勹: su
+ 囗: nw
+ 月: sv
+ 七: fq
+ 车: fc
+ 欠: qq
+ 饣: qi
+ 鱼: qy
+ 夕: qx
+ 衤: wi
+ 阝: bv
+ "\ue068": hu
+ "\ue001": lu
+ "\ue0cb": ud
+ 馬: em
+ 烏: uw
+ 鳥: un
+ 鬥: nd
+ 門: nm
+ 黽: om
+ 飛: bf
+ 丱: au
+ "\ue083": su
+ "\ue0c6": oz
+ "\ue028": uu
+ "\ue411": fu
+ "\ue002": fu
+ "\ue09e": pv
+ "\ue08d": fu
+ 龷: hu
+ 龰: lu
+ "\ue018": lu
+ "\ue42d": zu
+ "\ue07f": vu
+ 儿: ve
+ 凡: qa
+ "\ue0bc": qu
+ 礻: ws
+ 衣: wy
+ 二: ee
+ 爫: vu
+ "\ue0b7": ru
+ 㐅: ti
+ "\ue137": nu
+ "\ue00d": zu
+ 朩: iu
+ 㗊: oj
+ "\ue078": pu
+ "\ue420": ru
+ 羽: cy
+ 爾: je
+ "\ue024": ru
+ 歹: gd
+ 頁: gy
+ 矛: bm
+ "\ue03e": nu
+ 夂: vu
+ 攵: pp
+ 虍: lh
+ "\ue073": nu
+ 音: yn
+ 鼠: us
+ "\ue04c": iv
+ "\uebc0": om
+ 牜: pn
+ "\ue077": su
+ "\ue0e6": su
+ "\ue08c": sy
+ "\ue031": du
+ "\ue0e8": du
+ 龴: du
+ "\ue009": du
+ "\ue0d0": jy
+ 攴: lp
+ "\ue447": xh
+ "\ue089": xu
+ "\ue406": cu
+ "\ue401": cl
+ "\ue14d": cx
+ "\ue405": cu
+ 飠: vs
+ "\ue057": vu
+ "\ue431": bu
+ "\ue060": mu
+ 冊: mu
+ 行: sx
+ 比: vb
+ "\ue043": fd
+ 鼻: tb
+ "\ue839": vb
+ "\uf00f": uv
+ "\ue449": fd
+ "\ue40c": vu
+ 父: tf
+ mapping_type: 2
+encoder:
+ max_length: 4
+ select_keys:
+ - _
+ - ;
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ index: 0
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ next: c1
+ index: 0
+ s3:
+ object: {type: 字根, rootIndex: 1}
+ index: 1
+ next: null
+ s4:
+ object: {type: 字根, rootIndex: -2}
+ next: s5
+ index: 0
+ s5:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ index: 0
+ s6:
+ object: {type: 字根, rootIndex: -1}
+ next: s7
+ index: 0
+ s7:
+ object: {type: 字根, rootIndex: 1}
+ next: null
+ index: 1
+ s8:
+ object: {type: 字根, rootIndex: 2}
+ next: c4
+ index: 1
+ s9:
+ object: {type: 字根, rootIndex: 1}
+ next: null
+ index: 1
+ s10:
+ object: {type: 字根, rootIndex: 3}
+ next: c5
+ index: 0
+ s11:
+ object: {type: 字根, rootIndex: 3}
+ next: null
+ index: 1
+ s12:
+ object: {type: 字根, rootIndex: 1}
+ next: null
+ index: 1
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: s3
+ c1:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: c3
+ negative: c2
+ c2:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s10
+ negative: s8
+ c3:
+ object: {type: 字根, rootIndex: 1}
+ operator: 编码匹配
+ positive: s4
+ negative: s6
+ value: .[uv]
+ c4:
+ object: {type: 字根, rootIndex: 1}
+ operator: 编码匹配
+ positive: null
+ negative: s9
+ value: .[uv]
+ c5:
+ object: {type: 字根, rootIndex: 1}
+ operator: 编码匹配
+ positive: s11
+ negative: s12
+ value: .[uv]
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2, count: 1}, {prefix: 3, count: 1}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+data:
+ glyph_customization:
+ 重:
+ type: compound
+ operator: ⿳
+ operandList: [丿, 車, 一]
+ 熏:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 黑]
+ 克:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: [古, 儿]
+ 孑:
+ type: compound
+ operator: ⿻
+ operandList: [了, 一]
+ 丢:
+ type: basic_component
+ strokes: [{feature: 平撇, start: [86, 7], curveList: [{command: z, parameterList: [-20, 4, -39, 6, -74, 7]}]}, {feature: 横, start: [15, 33], curveList: [{command: h, parameterList: [70]}]}, {feature: 竖, start: [50, 12], curveList: [{command: v, parameterList: [42]}]}, {feature: 横, start: [6, 54], curveList: [{command: h, parameterList: [88]}]}, {feature: 撇折, start: [42, 54], curveList: [{command: c, parameterList: [-7, 14, -16, 26, -26, 34]}, {command: h, parameterList: [69]}]}, {feature: 点, start: [68, 66], curveList: [{command: c, parameterList: [7, 8, 13, 15, 20, 28]}]}]
+ 丧:
+ type: derived_component
+ source: "\ue08d"
+ strokes: [{feature: 横, start: [10, 20], curveList: [{command: h, parameterList: [78]}]}, {feature: 竖, start: [50, 5], curveList: [{command: v, parameterList: [45]}]}, {feature: 点, start: [25, 35], curveList: [{command: c, parameterList: [3, 4, 7, 10, 10, 15]}]}, {feature: 撇, start: [75, 35], curveList: [{command: c, parameterList: [-2, 4, -6, 11, -10, 15]}]}, {feature: 横, start: [6, 50], curveList: [{command: h, parameterList: [86]}]}, {feature: 竖提, start: [20, 50], curveList: [{command: v, parameterList: [40]}, {command: h, parameterList: [20]}]}, {feature: 平撇, start: [85, 58], curveList: [{command: z, parameterList: [-10, 10, -20, 15, -23, 15]}]}, {feature: 捺, start: [47, 50], curveList: [{command: c, parameterList: [7, 18, 19, 29, 48, 40]}]}]
+ 堇:
+ type: basic_component
+ strokes: [{feature: 横, start: [6, 14], curveList: [{command: h, parameterList: [88]}]}, {feature: 竖, start: [29, 5], curveList: [{command: v, parameterList: [22]}]}, {feature: 竖, start: [71, 5], curveList: [{command: v, parameterList: [22]}]}, {feature: 横, start: [29, 27], curveList: [{command: h, parameterList: [42]}]}, {feature: 竖, start: [19, 38], curveList: [{command: v, parameterList: [14]}]}, {feature: 横折, start: [19, 38], curveList: [{command: h, parameterList: [62]}, {command: v, parameterList: [14]}]}, {feature: 横, start: [19, 52], curveList: [{command: h, parameterList: [62]}]}, {feature: 横, start: [14, 64], curveList: [{command: h, parameterList: [72]}]}, {feature: 横, start: [17, 77], curveList: [{command: h, parameterList: [66]}]}, {feature: 竖, start: [50, 27], curveList: [{command: v, parameterList: [63]}]}, {feature: 横, start: [7, 90], curveList: [{command: h, parameterList: [86]}]}]
+ 㐫:
+ type: compound
+ operator: ⿶
+ operandList: [凵, 文]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 兕:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue060", 兀]
+ 命:
+ type: compound
+ operator: ⿸
+ operandList: [合, 卩]
+ 匹:
+ type: compound
+ tags: []
+ operator: ⿺
+ operandList: [兀, "\ue09d"]
+ 容:
+ type: compound
+ operator: ⿳
+ operandList: [穴, "\ue43d", 口]
+ "\ue9d0":
+ type: compound
+ tags: [横向包夹]
+ operator: ⿻
+ operandList: ["\ue0e3", 米]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 胤:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿻
+ operandList: [儿, "\ue99d"]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 龠:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf003", "\ue055"]
+ 為:
+ type: compound
+ operator: ⿻
+ operandList: [丶, "\uebbd"]
+ "\ue8ea":
+ type: compound
+ operator: ⿲
+ operandList: ["\ue421", "\ue004", 丄]
+ "\ue156":
+ type: compound
+ operator: ⿰
+ operandList: [立, 戈]
+ "\ue134":
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: ["\ue093", 氺]
+ 抇:
+ type: compound
+ operator: ⿰
+ operandList: [扌, 日]
+ 黃:
+ type: compound
+ operator: ⿳
+ operandList: [艹, 二, "\ue982"]
+ 龜:
+ type: compound
+ operator: ⿱
+ operandList: [丿, "\uebc0"]
+ "\ueb0e":
+ type: compound
+ operator: ⿱
+ operandList: [二, 业]
+ "\ue824":
+ type: compound
+ operator: ⿵
+ operandList: ["\uebc2", 一]
+ order: [{index: 0, strokes: 6}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue872":
+ type: compound
+ operator: ⿹
+ operandList: ["\ue873", 一]
+ order: [{index: 0, strokes: 5}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 痲:
+ type: compound
+ operator: ⿰
+ operandList: [冫, 麻]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 痳:
+ type: compound
+ operator: ⿰
+ operandList: [冫, 麻]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 佱:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue43d", 二, 止]
+ "\uea95":
+ type: compound
+ operator: ⿳
+ operandList: [龷, 冂, 山]
+ "\ue9f9":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue82b", 一]
+ 喪:
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc3", "\ue08d"]
+ 㱏:
+ type: compound
+ operator: ⿱
+ operandList: [二, 止]
+ "\ue9a0":
+ type: compound
+ operator: ⿱
+ operandList: ["\uf00e", "\ue055"]
+ 䘮:
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc6", "\ue08d"]
+ 㝐:
+ type: compound
+ operator: ⿱
+ operandList: [穴, 厶]
+ 㸃:
+ type: compound
+ operator: ⿺
+ operandList: [黑, 占]
+ "\ueb1c":
+ type: derived_component
+ source: 乍
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: 横, start: [21, 94], curveList: [{command: h, parameterList: [71]}]}]
+ 㧉:
+ type: compound
+ operator: ⿰
+ operandList: [扌, 气]
+ 交:
+ type: compound
+ operator: ⿱
+ operandList: [亠, 父]
+ 童:
+ type: compound
+ operator: ⿻
+ operandList: [音, 土]
+ "\ue9a5":
+ type: compound
+ operator: ⿲
+ operandList: [冂, "\ue00d", 冂]
+ "\ue835":
+ type: compound
+ operator: ⿻
+ operandList: ["\ue009", 古]
+ 麗:
+ type: compound
+ operator: ⿱
+ operandList: [丽, 鹿]
+ 昌:
+ type: compound
+ operator: ⿱
+ operandList: [日, 曰]
+ 丝:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue023", 纟]
+ "\ue9ae":
+ type: compound
+ operator: ⿴
+ operandList: [古, 口]
+ 旮:
+ type: compound
+ operator: ⿱
+ operandList: [九, 曰]
+ 舞:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf010", "\uf012"]
+ 器:
+ type: compound
+ tags: [纵向包夹]
+ operator: ⿴
+ operandList: [㗊, 犬]
+ 嚣:
+ type: compound
+ operator: ⿴
+ operandList: [㗊, 页]
+ order: [{index: 0, strokes: 6}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 嚚:
+ type: compound
+ operator: ⿴
+ operandList: [㗊, 臣]
+ "\ue9be":
+ type: compound
+ operator: ⿴
+ operandList: [比, 矢]
+ order: [{index: 0, strokes: 2}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 㐮:
+ type: compound
+ operator: ⿴
+ operandList: ["\ue80a", "\uf017"]
+ 肅:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue431", 十, "\uf016"]
+ 㕚:
+ type: compound
+ operator: ⿻
+ operandList: [又, "\ue00d"]
+ 㣇:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: ["\uf018", 巾]
+ 晉:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf01a", 日]
+ 書:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue114", 曰]
+ "\ue94f":
+ type: compound
+ operator: ⿱
+ operandList: [屮, 王]
+ "\uea8b":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue427", 又]
+ "\ue94b":
+ type: compound
+ operator: ⿰
+ operandList: [口, "\ue427"]
+ "\uea98":
+ type: compound
+ operator: ⿱
+ operandList: [一, "\ue9a5"]
+ "\ue133":
+ type: compound
+ operator: ⿱
+ operandList: [丿, 凡]
+ 囂:
+ type: compound
+ operator: ⿴
+ operandList: [㗊, 頁]
+ tags:
+ - 行框
+ - 衣框
+ - 微字框
+ - 纵向包夹
+ - 戈部截断
+ repertoire:
+ "\uf003":
+ unicode: 61443
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [亼, "\ue0e4"]}]
+ ambiguous: false
+ name: 龠字头
+ "\uf004":
+ unicode: 61444
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 亙, strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 亙无二
+ "\uf005":
+ unicode: 61445
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue120", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 虛字底无横
+ "\uf006":
+ unicode: 61446
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 亚, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 亚三
+ "\uf007":
+ unicode: 61447
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue112", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 帶字头无横
+ "\uf008":
+ unicode: 61448
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue123", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 宐字底无横
+ "\uf009":
+ unicode: 61449
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue115", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 華字心
+ "\uf00a":
+ unicode: 61450
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 0}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 淵字边左
+ "\uf00b":
+ unicode: 61451
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 淵字边右
+ "\uf00c":
+ unicode: 61452
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 粛, strokes: [{feature: reference, index: 3}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}, {feature: reference, index: 9}, {feature: reference, index: 10}]}]
+ ambiguous: false
+ name: 粛字心
+ "\uf00d":
+ unicode: 61453
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue12e", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 枾字边心
+ "\uf00e":
+ unicode: 61454
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [亼, 吅]}]
+ ambiguous: false
+ name: 㵸字旁头
+ "\uf00f":
+ unicode: 61455
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 㣺, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 㣺无丶
+ "\uf010":
+ unicode: 61456
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0b1", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 5}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 舞字头无横
+ "\uf012":
+ unicode: 61458
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿰, operandList: [歹, 㐄]}]
+ ambiguous: false
+ name: 歹㐄
+ "\uf016":
+ unicode: 61462
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 淵字边无一
+ "\uf017":
+ unicode: 61463
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [八, "\ue415"]}]
+ ambiguous: false
+ name: 㐮心
+ "\uf018":
+ unicode: 61464
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿳, operandList: ["\ue440", 丆, 丿]}]
+ ambiguous: false
+ name: 㣇上
+ "\uf01a":
+ unicode: 61466
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿴, operandList: [二, 厸]}]
+ ambiguous: false
+ name: 晉上
+ "\uf01b":
+ unicode: 61467
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 匁, strokes: [{feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 匁字心
+ character_set: extended
+optimization:
+ objective: {}
+ metaheuristic:
+ algorithm: SimulatedAnnealing
+ constraints:
+ elements: []
+ indices: []
+ element_indices: []
diff --git a/examples/yima.yaml b/examples/yima.yaml
deleted file mode 100644
index 952544a..0000000
--- a/examples/yima.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-encoder:
- max_length: 3
- sources:
- s0: { object: null, next: s1 }
- s1: { object: { type: 字根, rootIndex: 1 }, index: 0, next: c0 }
- s2: { object: { type: 字根, rootIndex: 2 }, index: 0, next: c1 }
- s3: { object: { type: 二笔, rootIndex: 1, strokeIndex: 1 }, next: s4 }
- s4: { object: { type: 字根, rootIndex: 1 }, index: 1, next: null }
- s5: { object: { type: 二笔, rootIndex: 2, strokeIndex: 1 }, next: s7 }
- s6: { object: { type: 字根, rootIndex: 3 }, index: 0, next: c2 }
- s7: { object: { type: 字根, rootIndex: 2 }, index: 1, next: null }
- s8: { object: { type: 字根, rootIndex: -1 }, index: 0, next: null }
- s9: { object: { type: 二笔, rootIndex: 3, strokeIndex: 1 }, next: null }
- conditions:
- c0:
- object: { type: 字根, rootIndex: 2 }
- operator: 存在
- positive: s2
- negative: s3
- c1:
- object: { type: 字根, rootIndex: 3 }
- operator: 存在
- positive: s6
- negative: s5
- c2:
- object: { type: 字根, rootIndex: 4 }
- operator: 存在
- positive: s8
- negative: s9
diff --git a/examples/yustar.yaml b/examples/yustar.yaml
new file mode 100644
index 0000000..6f86688
--- /dev/null
+++ b/examples/yustar.yaml
@@ -0,0 +1,1015 @@
+version: '0.1'
+source: yustar
+info:
+ name: 宇浩·星陈
+ author: 朱宇浩
+ version: '3.5.0'
+ description: 全汉字字形输入・繁简通打
+analysis:
+ classifier:
+ 竖钩: 5
+ 横捺: 5
+ 竖提: 6
+ 竖折: 6
+ 竖弯: 6
+ 竖弯钩: 6
+ 竖折撇: 6
+ 竖折折钩: 6
+ 竖折折: 6
+ 撇点: 6
+ 撇折: 6
+ 斜钩: 6
+ degenerator:
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
+ selector:
+ - 根少优先
+ - 结构完整
+ - 连续笔顺
+ - 能连不交
+ - 能散不连
+ - 少弱字根
+ - 取大优先
+ customize:
+ 戋:
+ - '1'
+ - 戈
+ 我:
+ - '3'
+ - 扌
+ - 戈
+ "\ue08a":
+ - 禾
+ - 戈
+ 凸:
+ - '2'
+ - '1'
+ - '2'
+ - '5'
+ - '1'
+ "\ue053":
+ - 耳
+ - 戈
+ 隺:
+ - 冖
+ - 隹
+ 两:
+ - '1'
+ - 冂
+ - 人
+ - 人
+ 尨:
+ - 尤
+ - 彡
+ 垂:
+ - 千
+ - 龷
+ - '1'
+ 柬:
+ - "\ue04c"
+ - 囗
+ - 丷
+ 禹:
+ - '3'
+ - 口
+ - 冂
+ - "\ue04d"
+ "\ue0a6":
+ - "\ue431"
+ - "\ue001"
+ - 八
+ 丙:
+ - '1'
+ - 冂
+ - 人
+ 卞:
+ - '4'
+ - 下
+ 主:
+ - '4'
+ - 王
+ 再:
+ - '1'
+ - 冂
+ - "\ue43a"
+ 乑:
+ - 亻
+ - "\ue077"
+ - "\ue088"
+ "\ue066":
+ - 卄
+ - 日
+ "\ue034":
+ - 夕
+ - '4'
+ 堇:
+ - 革
+ - 二
+ 亙:
+ - '1'
+ - "\uf004"
+ - '1'
+ "\ue139":
+ - 二
+ - '5'
+ - 口
+ - 丄
+ 曲:
+ - "\ue439"
+ - 龷
+ 㦮:
+ - 二
+ - 戈
+ 亜:
+ - "\uf006"
+ - 口
+ - '1'
+ 严:
+ - '1'
+ - 业
+ - '3'
+ 夨:
+ - '6'
+ - 大
+ 甴:
+ - 囗
+ - 丄
+ "\ue168":
+ - 丅
+ - "\ue424"
+ 丼:
+ - 廾
+ - 亠
+ "\ue121":
+ - '6'
+ - "\ue00d"
+ "\ue136":
+ - 口
+ - "\ue001"
+ - '1'
+ weak:
+ - "\ue410"
+ - "\ue039"
+ - "\ue042"
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ grouping:
+ "\ue089": 丷
+ 䒑: 丷
+ "\ue044": 丷
+ "\ue042": 羊
+ "\ue093": 羊
+ "\ue083": 月
+ "\ue09b": 月
+ "\ue02a": 勹
+ "\ue427": 勹
+ "\ue04e": 屮
+ "\ue440": 彑
+ "\ue405": 彑
+ "\ue025": 亦
+ "\ue834": 亡
+ "\ue420": 豕
+ 爫: 爪
+ "\ue018": 卜
+ "\ue07c": 卜
+ "\ue41a": "\ue001"
+ "\ue03e": 小
+ "\ue073": 小
+ "\ue0c3": 尚
+ "\ue0a3": 巳
+ "\ue0c6": 足
+ 牜: 牛
+ "\ue029": 牛
+ 朩: 木
+ "\ue04c": 木
+ "\ue002": 㐄
+ "\ue410": 㐄
+ "\ue0ac": 高
+ "\ue804": 高
+ "\ue006": 高
+ "\ue415": 艹
+ 龷: 艹
+ 廾: 艹
+ 卝: 艹
+ 卄: 艹
+ "\ue0ec": 电
+ "\ue421": 臼
+ "\ue028": 向
+ "\ue02d": 向
+ "\ue400": 斤
+ "\ue024": 斤
+ "\ue0e0": 片
+ "\ue0e1": 爿
+ "\ue07e": "\ue0b7"
+ "\ue09e": 竹
+ "\ue014": 竹
+ "\ue078": 竹
+ "\ue441": 乃
+ "\ue004": 丂
+ "\ue04d": 丄
+ "\ue0e3": 八
+ "\ue413": 寸
+ "\ue8d9": 卯
+ "\ue08e": 卯
+ "\ue01a": 卯
+ "\ue057": 卯
+ "\ue40c": 卯
+ "\ue023": 纟
+ "\ue020": 冖
+ "\ue0bc": 冖
+ "\ue423": 冖
+ "\ue416": 七
+ "\ue988": 冂
+ "\ue060": 冂
+ "\ue077": 彡
+ "\ue41e": 彡
+ "\ue0e6": 彡
+ 龴: 又
+ "\ue01f": 又
+ "\ue434": 又
+ "\ue031": 尸
+ "\ue06b": 尸
+ "\ue0b4": 彐
+ "\ue0e8": 韋
+ "\ue059": 水
+ 氺: 水
+ "\ue0d9": 水
+ "\ue039": 干
+ "\ue0dc": 鹿
+ "\ue08d": 辰
+ "\ue0da": 鸟
+ "\ue00d": 二
+ "\ue088": 二
+ "\ue079": 匕
+ "\ue011": 匕
+ "\ue0d6": 几
+ "\ue424": 儿
+ "\ue0b2": 卩
+ "\ue07f": 儿
+ "\ue012": 丬
+ "\ue417": 七
+ "\ue442": 小
+ "\ue087": 八
+ "\ue43d": 人
+ "\ue451": 止
+ "\ue401": 力
+ "\ue406": 母
+ "\ue043": 大
+ "\ue449": 大
+ "\ue050": 卅
+ "\ue431": 彐
+ "\ue432": 彐
+ "\ue070": 日
+ "\ue0d2": 月
+ "\ue102": 王
+ "\ue43a": 土
+ "\ue411": 㐄
+ "\ue439": 冂
+ "\ue0d0": 雨
+ "\ue448": 氵
+ "\ue42d": 氵
+ "\ue046": 氵
+ "\ue444": 厶
+ "\ue0c2": 舌
+ "\ue0ba": 八
+ "\ue052": 車
+ "\ue446": 八
+ 礻: 示
+ "\ue0c8": 车
+ "\ue106": "\ue0b7"
+ "\ue0d5": 臣
+ "\ue404": 亻
+ "\ue08c": 用
+ "\ue44b": 禾
+ "\ue0bd": 尸
+ "\ue14c": 电
+ "\ue14e": 爿
+ "\ue14d": 小
+ "\ue0d1": 夫
+ 攵: 夊
+ "\ue418": 匚
+ 䶹: 屮
+ "\ue069": 鬼
+ "\ue41f": 月
+ "\ue419": 且
+ "\ue452": 十
+ "\ue443": "\ue068"
+ "\ue0c9": 辛
+ "\ue0d8": 乂
+ "\ue838": 鹿
+ "\uf000": 高
+ "\uf003": 合
+ "\ue003": 丰
+ "\uf004": 月
+ "\uf005": 丩
+ 丱: 丩
+ "\ue137": 八
+ "\ue129": 八
+ "\uf006": 丌
+ "\ue130": 木
+ 冊: "\ue055"
+ 襾: 西
+ 覀: 西
+ 龰: 止
+ "\ue0d7": 鳥
+ 卌: 卅
+ "\uf007": 卅
+ "\uf008": 夕
+ "\ue16e": 韋
+ "\ue131": 臣
+ "\ue11c": 臣
+ "\ue154": 艹
+ "\uebbd": "\ue831"
+ "\ue11e": 千
+ 尙: 尚
+ "\uf00a": 片
+ "\uf00b": 爿
+ "\ue10c": 卜
+ "\ue10b": 月
+ 飠: 食
+ "\ue019": 食
+ "\ue157": 馬
+ "\uebc0": 黽
+ "\uf00c": 米
+ "\uebc2": 彳
+ "\ue873": 士
+ "\uf00d": 㐄
+ "\ue125": 彐
+ "\uf00e": 合
+ "\ue153": 虎
+ 虍: 虎
+ "\uf00f": 忄
+ mapping:
+ '1': fi
+ '2': us
+ '3': gp
+ '4': kd
+ '5': yi
+ '6': ei
+ 高: ag
+ 亠: at
+ 木: am
+ 來: al
+ 㔾: aj
+ 卩: aj
+ 言: by
+ 马: bm
+ 尸: bs
+ 弓: bg
+ 韋: bw
+ 皮: bp
+ 又: bo
+ 癶: bo
+ 彐: bj
+ 肀: bj
+ 丑: bc
+ 隶: bd
+ 女: cn
+ 冂: ck
+ 见: cj
+ 贝: cb
+ 雨: cv
+ 彳: cc
+ 彡: cp
+ 讠: dy
+ 白: db
+ 爿: dq
+ 臼: di
+ 鬼: dg
+ 甶: dg
+ 向: dx
+ 戶: dh
+ 斤: dj
+ 片: dp
+ 申: ds
+ 由: do
+ 电: dd
+ 車: dc
+ 叀: dc
+ 丰: df
+ 至: dz
+ 隹: eh
+ 亻: er
+ 風: ef
+ 几: ej
+ 母: em
+ 彑: em
+ 殳: es
+ 尤: fo
+ 尢: fo
+ 手: fs
+ 龵: fs
+ 扌: fs
+ 未: fw
+ 末: fm
+ 竹: gz
+ 气: gq
+ 乃: gn
+ 廴: gy
+ 十: gi
+ 黑: gh
+ 艮: gg
+ 户: hh
+ 戸: hh
+ 匚: hf
+ 丂: hk
+ 牙: ha
+ 犬: hq
+ 犭: hq
+ 臣: hc
+ 土: ht
+ 耂: ht
+ 士: hs
+ 龶: hs
+ 走: hz
+ 壴: hz
+ 亍: ic
+ 二: ir
+ 冫: ir
+ 宀: im
+ 穴: ix
+ 尚: is
+ 龸: is
+ 小: iv
+ 火: ih
+ 灬: ib
+ 丁: jd
+ 示: js
+ 上: jv
+ 丄: jv
+ 下: jx
+ 丅: jx
+ 王: jw
+ 日: jr
+ 曰: jy
+ 早: jz
+ 古: jg
+ 目: jm
+ 且: jq
+ 見: jj
+ 貝: jb
+ 缶: jf
+ 矢: ji
+ 卯: km
+ 纟: kj
+ 了: ke
+ 子: kz
+ 予: kv
+ 寸: kc
+ 八: ka
+ 入: kr
+ 食: ks
+ 弋: ki
+ 戈: kg
+ 戊: kw
+ 立: kl
+ 辛: kx
+ 三: la
+ 巛: lc
+ 巜: lc
+ 川: lc
+ 耳: le
+ 丌: lj
+ 兀: lw
+ 舌: ls
+ 口: lv
+ 鸟: mn
+ 乌: mw
+ 豸: mz
+ 刀: md
+ 刂: md
+ 禾: mh
+ 毛: mm
+ 千: mq
+ 壬: mr
+ 夭: my
+ 麻: ma
+ 疒: mb
+ 广: mg
+ 鹿: ml
+ 辰: mc
+ 干: ng
+ 甫: nf
+ 厶: na
+ 幺: na
+ 匕: nb
+ 长: nc
+ 水: ns
+ 氵: ns
+ 糸: os
+ 糹: os
+ 辶: oc
+ 之: oz
+ 大: od
+ 夫: of
+ 巴: ob
+ 已: oi
+ 己: oj
+ 巳: os
+ 也: oe
+ 乜: om
+ 钅: oj
+ 工: pg
+ 酉: py
+ 牛: pn
+ 齒: pc
+ 止: pi
+ 足: pz
+ 生: ps
+ 西: px
+ 虫: qc
+ 丷: qk
+ 米: qm
+ 丬: qq
+ 羊: qy
+ 自: qi
+ 身: qs
+ 心: ri
+ 忄: rx
+ 人: re
+ 合: rh
+ 僉: rq
+ 骨: rg
+ 咼: rk
+ 冎: rk
+ 九: rj
+ 瓦: rw
+ 乂: si
+ 力: sl
+ 用: sy
+ 面: sm
+ 而: sr
+ 革: sg
+ 世: si
+ 艹: so
+ 卅: ss
+ 文: te
+ 方: tf
+ 亥: th
+ 亦: ti
+ 门: tm
+ 豕: ts
+ 夊: tu
+ 亡: tw
+ 金: tj
+ 业: ue
+ 非: uf
+ 其: uq
+ 巾: uj
+ 山: us
+ 卜: ub
+ 虎: uh
+ 鹵: ul
+ 瓜: ug
+ 爪: uz
+ 皿: um
+ 罒: uw
+ 舟: uo
+ 髟: ub
+ 長: uc
+ 镸: uc
+ 习: vx
+ 丆: vh
+ 厂: vh
+ 石: vs
+ 不: vu
+ 甲: vj
+ 里: vl
+ 田: vt
+ 禺: vv
+ 魚: vv
+ 儿: wr
+ 屮: wc
+ 丩: wj
+ 凵: wk
+ 勹: wb
+ 囗: ww
+ 月: wy
+ 七: xi
+ 车: xj
+ 冖: xm
+ 欠: xq
+ 饣: xs
+ 鱼: xv
+ 夕: xx
+ 衤: xy
+ 阝: yf
+ "\ue068": ez
+ "\ue001": us
+ 㐄: ak
+ "\ue0b7": gy
+ "\ue0e2": ls
+ "\ue007": bo
+ "\ue009": bo
+ "\ue064": od
+ "\ue055": ce
+ "\ue0cb": dd
+ 馬: wm
+ 烏: dw
+ 鳥: dn
+ 鬥: du
+ 門: dm
+ 黽: dm
+ 飛: yf
+ "\ue831": gw
+ "\ue14f": uz
+ mapping_type: 2
+encoder:
+ max_length: 4
+ select_keys:
+ - _
+ - ;
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ index: 0
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ index: 0
+ next: c1
+ s3:
+ object: {type: 字根, rootIndex: 1}
+ index: 1
+ next: s6
+ s4:
+ object: {type: 字根, rootIndex: 2}
+ index: 1
+ next: s9
+ s5:
+ object: {type: 字根, rootIndex: 3}
+ index: 0
+ next: c2
+ s6:
+ object: {type: 字根, rootIndex: 1}
+ index: 1
+ next: null
+ s7:
+ object: {type: 字根, rootIndex: -1}
+ index: 0
+ next: null
+ s8:
+ object: {type: 字根, rootIndex: 3}
+ index: 1
+ next: null
+ s9:
+ object: {type: 字根, rootIndex: 1}
+ index: 1
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: s3
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s5
+ negative: s4
+ c2:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s7
+ negative: s8
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2, count: 1}, {prefix: 3, count: 1}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+data:
+ glyph_customization:
+ 重:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 里]
+ 熏:
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: [千, 黑]
+ 卵:
+ type: compound
+ operator: ⿲
+ operandList: [卯, 丶, 丶]
+ 克:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: [古, 儿]
+ 孑:
+ type: compound
+ operator: ⿻
+ operandList: [了, 一]
+ 丢:
+ type: basic_component
+ strokes: [{feature: 平撇, start: [86, 7], curveList: [{command: z, parameterList: [-20, 4, -39, 6, -74, 7]}]}, {feature: 横, start: [15, 33], curveList: [{command: h, parameterList: [70]}]}, {feature: 竖, start: [50, 12], curveList: [{command: v, parameterList: [42]}]}, {feature: 横, start: [6, 54], curveList: [{command: h, parameterList: [88]}]}, {feature: 撇折, start: [42, 54], curveList: [{command: c, parameterList: [-7, 14, -16, 26, -26, 34]}, {command: h, parameterList: [69]}]}, {feature: 点, start: [68, 66], curveList: [{command: c, parameterList: [7, 8, 13, 15, 20, 28]}]}]
+ 丧:
+ type: derived_component
+ source: "\ue08d"
+ strokes: [{feature: 横, start: [10, 20], curveList: [{command: h, parameterList: [78]}]}, {feature: 竖, start: [50, 5], curveList: [{command: v, parameterList: [45]}]}, {feature: 点, start: [25, 35], curveList: [{command: c, parameterList: [3, 4, 7, 10, 10, 15]}]}, {feature: 撇, start: [75, 35], curveList: [{command: c, parameterList: [-2, 4, -6, 11, -10, 15]}]}, {feature: 横, start: [6, 50], curveList: [{command: h, parameterList: [86]}]}, {feature: 竖提, start: [20, 50], curveList: [{command: v, parameterList: [40]}, {command: h, parameterList: [20]}]}, {feature: 平撇, start: [85, 58], curveList: [{command: z, parameterList: [-10, 10, -20, 15, -23, 15]}]}, {feature: 捺, start: [47, 50], curveList: [{command: c, parameterList: [7, 18, 19, 29, 48, 40]}]}]
+ 堇:
+ type: basic_component
+ strokes: [{feature: 横, start: [6, 14], curveList: [{command: h, parameterList: [88]}]}, {feature: 竖, start: [29, 5], curveList: [{command: v, parameterList: [22]}]}, {feature: 竖, start: [71, 5], curveList: [{command: v, parameterList: [22]}]}, {feature: 横, start: [29, 27], curveList: [{command: h, parameterList: [42]}]}, {feature: 竖, start: [19, 38], curveList: [{command: v, parameterList: [14]}]}, {feature: 横折, start: [19, 38], curveList: [{command: h, parameterList: [62]}, {command: v, parameterList: [14]}]}, {feature: 横, start: [19, 52], curveList: [{command: h, parameterList: [62]}]}, {feature: 横, start: [14, 64], curveList: [{command: h, parameterList: [72]}]}, {feature: 横, start: [17, 77], curveList: [{command: h, parameterList: [66]}]}, {feature: 竖, start: [50, 27], curveList: [{command: v, parameterList: [63]}]}, {feature: 横, start: [7, 90], curveList: [{command: h, parameterList: [86]}]}]
+ 㐫:
+ type: compound
+ operator: ⿶
+ operandList: [凵, 文]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 衰:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue006", 一, "\ue0b7"]
+ 亓:
+ type: derived_component
+ source: 丌
+ strokes: [{feature: 横, start: [18, 5], curveList: [{command: h, parameterList: [64]}]}, {feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]
+ 元:
+ type: derived_component
+ source: 兀
+ strokes: [{feature: 横, start: [20, 10], curveList: [{command: h, parameterList: [60]}]}, {feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]
+ 兕:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue060", 兀]
+ 命:
+ type: compound
+ operator: ⿸
+ operandList: [合, 卩]
+ 哀:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue006", "\ue0b7"]
+ 匹:
+ type: compound
+ tags: []
+ operator: ⿺
+ operandList: [兀, "\ue09d"]
+ 容:
+ type: compound
+ operator: ⿳
+ operandList: [穴, "\ue43d", 口]
+ 襄:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf000", "\ue0b9"]
+ "\ue9d0":
+ type: compound
+ tags: [横向包夹]
+ operator: ⿻
+ operandList: ["\ue0e3", 米]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 胤:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿻
+ operandList: [儿, "\ue99d"]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 龠:
+ type: compound
+ operator: ⿱
+ operandList: ["\uf003", "\ue055"]
+ 衷:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue006", 丨, "\ue0b7"]
+ 為:
+ type: compound
+ operator: ⿻
+ operandList: [丶, "\uebbd"]
+ "\ue8ea":
+ type: compound
+ operator: ⿲
+ operandList: ["\ue421", "\ue004", 丄]
+ "\ue156":
+ type: compound
+ operator: ⿰
+ operandList: [立, 戈]
+ "\ue134":
+ type: compound
+ tags: [中竖截断]
+ operator: ⿱
+ operandList: ["\ue093", 氺]
+ 抇:
+ type: compound
+ operator: ⿰
+ operandList: [扌, 日]
+ 黃:
+ type: compound
+ operator: ⿳
+ operandList: [艹, 二, "\ue982"]
+ 龜:
+ type: compound
+ operator: ⿱
+ operandList: [丿, "\uebc0"]
+ "\ueb0e":
+ type: compound
+ operator: ⿱
+ operandList: [二, 业]
+ "\ue824":
+ type: compound
+ operator: ⿵
+ operandList: ["\uebc2", 一]
+ order: [{index: 0, strokes: 6}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue872":
+ type: compound
+ operator: ⿹
+ operandList: ["\ue873", 一]
+ order: [{index: 0, strokes: 5}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 痲:
+ type: compound
+ operator: ⿰
+ operandList: [冫, 麻]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 痳:
+ type: compound
+ operator: ⿰
+ operandList: [冫, 麻]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 佱:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue43d", 二, 止]
+ "\uea95":
+ type: compound
+ operator: ⿳
+ operandList: [龷, 冂, 山]
+ "\ue9f9":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue82b", 一]
+ 喪:
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc3", "\ue08d"]
+ 㱏:
+ type: compound
+ operator: ⿱
+ operandList: [二, 止]
+ "\ue9a0":
+ type: compound
+ operator: ⿱
+ operandList: ["\uf00e", "\ue055"]
+ 䘮:
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc6", "\ue08d"]
+ 㝐:
+ type: compound
+ operator: ⿱
+ operandList: [穴, 厶]
+ 㸃:
+ type: compound
+ operator: ⿺
+ operandList: [黑, 占]
+ "\ueb1c":
+ type: derived_component
+ source: 乍
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: 横, start: [21, 94], curveList: [{command: h, parameterList: [71]}]}]
+ 㧉:
+ type: compound
+ operator: ⿰
+ operandList: [扌, 气]
+ tags:
+ - 赢字框
+ - 彀字框
+ - 微字框
+ repertoire:
+ "\uf000":
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [亠, 吅]}]
+ ambiguous: false
+ name: 襄字头
+ "\uf003":
+ unicode: 61443
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [亼, "\ue0e4"]}]
+ ambiguous: false
+ name: 龠字头
+ "\uf004":
+ unicode: 61444
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 亙, strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 亙无二
+ "\uf005":
+ unicode: 61445
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue120", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 虛字底无横
+ "\uf006":
+ unicode: 61446
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 亚, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 亚三
+ "\uf007":
+ unicode: 61447
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue112", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 5}]}]
+ ambiguous: false
+ name: 帶字头无横
+ "\uf008":
+ unicode: 61448
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue123", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 宐字底无横
+ "\uf009":
+ unicode: 61449
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue115", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 華字心
+ "\uf00a":
+ unicode: 61450
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 0}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 6}]}]
+ ambiguous: false
+ name: 淵字边左
+ "\uf00b":
+ unicode: 61451
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue10a", strokes: [{feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 7}, {feature: reference, index: 8}]}]
+ ambiguous: false
+ name: 淵字边右
+ "\uf00c":
+ unicode: 61452
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 粛, strokes: [{feature: reference, index: 3}, {feature: reference, index: 6}, {feature: reference, index: 7}, {feature: reference, index: 8}, {feature: reference, index: 9}, {feature: reference, index: 10}]}]
+ ambiguous: false
+ name: 粛字心
+ "\uf00d":
+ unicode: 61453
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue12e", strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 枾字边心
+ "\uf00e":
+ unicode: 61454
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [亼, 吅]}]
+ ambiguous: false
+ name: 㵸字旁头
+ "\uf00f":
+ unicode: 61455
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 㣺, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 㣺无丶
+ character_set: extended
diff --git a/examples/zhangma.yaml b/examples/zhangma.yaml
new file mode 100644
index 0000000..6f0629f
--- /dev/null
+++ b/examples/zhangma.yaml
@@ -0,0 +1,815 @@
+version: '0.1'
+source: zhangma
+info:
+ name: 张码
+ author: 张建平
+ version: '7.0'
+ description: 形义码元编码输入法
+analysis:
+ classifier:
+ 竖钩: 6
+ 圈: 7
+ degenerator:
+ no_cross: false
+ feature:
+ 捺: 点
+ selector:
+ - 根少优先
+ - 结构完整
+ - 连续笔顺
+ - 能连不交
+ - 能散不连
+ - 取大优先
+ customize:
+ 丈:
+ - '1'
+ - 乂
+ 下:
+ - '1'
+ - 卜
+ 丌:
+ - '1'
+ - "\ue0e3"
+ 丐:
+ - '1'
+ - "\ue018"
+ - '5'
+ 兀:
+ - '1'
+ - 儿
+ 再:
+ - '1'
+ - 冂
+ - "\ue43a"
+ 末:
+ - '1'
+ - 木
+ 束:
+ - "\ue04c"
+ - 口
+ "\ue0cf":
+ - 王
+ - 丷
+ 金:
+ - "\ue43d"
+ - 王
+ - 丷
+ 卡:
+ - "\ue018"
+ - '1'
+ - 卜
+ 里:
+ - 日
+ - "\ue43a"
+ 天:
+ - '1'
+ - 大
+ 禹:
+ - '3'
+ - 口
+ - 冂
+ - "\ue04d"
+ "\ue02c":
+ - 土
+ - 丷
+ "\ue0a4":
+ - 䒑
+ - '2'
+ "\ue035":
+ - '1'
+ - "\ue431"
+ - '2'
+ "\ue067":
+ - 丷
+ - "\ue070"
+ - 丷
+ 凸:
+ - '2'
+ - '1'
+ - '2'
+ - '5'
+ - '1'
+ 凹:
+ - '2'
+ - '5'
+ - '2'
+ - '5'
+ - '1'
+ "\ue066":
+ - '1'
+ - "\ue439"
+ - 龷
+ "\ue064":
+ - 三
+ - 人
+ "\ue052":
+ - '1'
+ - 日
+ - "\ue04d"
+ 牜:
+ - "\ue05b"
+ - '2'
+ 㡀:
+ - 丷
+ - 冂
+ - "\ue442"
+ 州:
+ - '4'
+ - '3'
+ - '4'
+ - '2'
+ "\ue053":
+ - 耳
+ - 戈
+ 瓦:
+ - '1'
+ - '5'
+ - '5'
+ - '4'
+ "\ue08a":
+ - 禾
+ - 戈
+ 曲:
+ - "\ue439"
+ - 龷
+ "\ue083":
+ - "\ue423"
+ - "\ue00d"
+ 囬:
+ - 囗
+ - "\ue001"
+ - 二
+ 万:
+ - '1'
+ - "\ue427"
+ serializer: zhangma
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ grouping:
+ '7': 二
+ 勹: 勺
+ "\ue020": 勺
+ "\ue423": 勺
+ "\ue427": 勺
+ "\ue042": 羊
+ "\ue02e": 疒
+ "\ue055": 皿
+ "\ue069": "\ue02d"
+ 爫: 爪
+ "\ue42d": 爪
+ "\ue046": 爪
+ 覀: 西
+ 氏: 虍
+ "\ue077": 彳
+ "\ue41e": 彳
+ "\ue0e3": 儿
+ "\ue0ba": 儿
+ "\ue0d6": 门
+ 卩: 阝
+ "\ue0b2": 阝
+ "\ue40f": "\ue029"
+ "\ue404": 亻
+ "\ue024": 亻
+ 丷: 䒑
+ 㔾: 巳
+ 氺: 水
+ "\ue42b": 水
+ "\ue442": 小
+ "\ue03e": 小
+ "\ue0d9": 小
+ "\ue431": 彐
+ "\ue07d": 彐
+ "\ue42f": 灬
+ "\ue430": 灬
+ "\ue42e": 灬
+ "\ue0e2": 雨
+ "\ue006": 酉
+ "\ue437": 止
+ 龰: 止
+ "\ue03a": 止
+ "\ue451": 止
+ 辶: 之
+ 龴: 廴
+ 夂: 廴
+ "\ue004": 五
+ 丂: 五
+ 弋: 戈
+ 寸: 戈
+ "\ue03f": 戈
+ "\ue435": 马
+ 罒: 四
+ "\ue436": 四
+ 穴: 大
+ 龸: 大
+ 长: 镸
+ "\ue800": 田
+ "\ue070": 三
+ 韦: 王
+ 龶: 王
+ 衤: 示
+ "\ue0ae": 瓜
+ 干: 土
+ "\ue039": 土
+ "\ue418": "\ue07c"
+ 卜: "\ue018"
+ "\ue0da": 鸟
+ 支: 十
+ "\ue068": 十
+ "\ue09e": 竹
+ "\ue421": 臼
+ "\ue079": 七
+ 匕: 七
+ "\ue011": 七
+ "\ue001": 刂
+ 癶: 八
+ "\ue09b": 八
+ 礻: 饣
+ "\ue44f": 厶
+ "\ue04d": 厶
+ "\ue43d": 人
+ 亽: 人
+ "\uf000": 人
+ 车: 車
+ "\ue0c8": 車
+ "\ue405": 母
+ "\ue406": 母
+ "\ue419": 母
+ "\ue023": 纟
+ 彑: 纟
+ 㠯: 目
+ 囗: 目
+ "\ue44b": 禾
+ "\ue40e": 禾
+ 东: 禾
+ "\ue05c": 禾
+ 心: 匚
+ "\ue051": 匚
+ 吂: 可
+ 艮: 曰
+ "\ue01c": 曰
+ 忄: 巛
+ 也: 勿
+ "\ue439": 冂
+ "\ue02a": 冂
+ 丆: 厂
+ "\ue0c1": 虫
+ "\ue422": "\ue088"
+ "\ue441": 乃
+ "\ue0f6": "\ue0fc"
+ 了: "\ue0fc"
+ 丬: "\ue012"
+ 乂: 叉
+ "\ue434": 叉
+ "\ue00d": 冫
+ 廾: 冫
+ 龷: 冫
+ 又: 刀
+ "\ue177": "\ue012"
+ "\ue178": 七
+ "\ue0d0": 雨
+ "\ue838": 鹿
+ "\ue445": 小
+ "\ue42c": 水
+ "\uf001": 鸟
+ "\ue43a": 土
+ "\ue043": 大
+ "\ue449": 大
+ "\ue43f": 七
+ "\ue401": 力
+ "\ue04c": 木
+ 朩: 木
+ "\ue17b": "\ue012"
+ "\ue17c": "\ue012"
+ "\ue0d2": 月
+ "\ue402": "\ue012"
+ "\ue102": 王
+ "\ue17d": 三
+ "\ue443": 十
+ "\ue452": 十
+ "\ue179": "\ue0fc"
+ "\uf002": "\ue088"
+ "\ue446": 八
+ "\ue05b": "\ue029"
+ "\ue14f": 爪
+ "\uf003": 厂
+ "\ue438": "\ue088"
+ "\uf004": 三
+ "\uf005": 戈
+ "\uf006": 丩
+ "\ue868": 巾
+ mapping:
+ '1': g
+ '2': j
+ '3': e
+ '4': o
+ '5': z
+ '6': 'n'
+ '11': g
+ '12': f
+ '13': d
+ '14': s
+ '15': a
+ '21': h
+ '22': j
+ '23': k
+ '24': l
+ '25': m
+ '31': t
+ '32': r
+ '33': e
+ '34': w
+ '35': q
+ '41': 'y'
+ '42': u
+ '43': i
+ '44': o
+ '45': p
+ '51': b
+ '52': v
+ '53': c
+ '54': x
+ '55': z
+ '61': 'n'
+ 米: q
+ "\ue0ce": q
+ "\ue057": q
+ 勺: q
+ 我: q
+ 月: q
+ 羊: q
+ 力: w
+ 疒: w
+ 夭: w
+ 贝: w
+ 皿: w
+ 几: w
+ 鱼: w
+ "\ue02d": w
+ 子: e
+ 广: e
+ 犭: e
+ 彡: e
+ "\ue07f": e
+ 爪: e
+ 巾: e
+ 年: e
+ 西: r
+ 虍: r
+ 彳: r
+ 儿: r
+ 门: r
+ 阝: r
+ "\ue029": r
+ 乐: t
+ 亻: t
+ 乑: t
+ 丅: t
+ "\ue078": t
+ 古: 'y'
+ 钅: 'y'
+ 亠: 'y'
+ "\ue081": 'y'
+ 己: 'y'
+ 习: 'y'
+ 白: u
+ 木: u
+ 䒑: u
+ 吅: u
+ "\ue009": u
+ 巳: u
+ 水: i
+ 氵: i
+ 小: i
+ "\ue0e4": i
+ 彐: i
+ 巴: i
+ 方: o
+ 火: o
+ 灬: o
+ 雨: o
+ 酉: o
+ 甲: o
+ 民: p
+ 止: p
+ 之: p
+ 廴: p
+ 鬼: p
+ 石: a
+ 五: a
+ 弓: a
+ 耂: a
+ 戈: a
+ 麻: a
+ 马: s
+ 四: s
+ 大: s
+ "\ue08f": s
+ 镸: s
+ 田: s
+ 舟: d
+ 三: d
+ 王: d
+ "\ue080": d
+ 示: d
+ 瓜: d
+ 士: f
+ 二: f
+ 土: f
+ "\ue07c": f
+ 夕: f
+ 言: g
+ 讠: g
+ "\ue018": g
+ 歹: g
+ 鸟: h
+ 十: h
+ 竹: h
+ 丄: h
+ 臼: h
+ 由: j
+ 七: j
+ 艹: j
+ 廿: j
+ 凵: j
+ 刂: j
+ 旲: j
+ 光: k
+ 八: k
+ "\ue050": k
+ 甘: k
+ 山: k
+ 饣: k
+ 厶: k
+ 女: l
+ 九: l
+ 人: l
+ "\ue428": l
+ 早: l
+ 車: l
+ 立: z
+ 母: z
+ 纟: z
+ 身: x
+ 目: x
+ 禾: x
+ 匚: x
+ 可: x
+ 日: c
+ 曰: c
+ "\ue031": c
+ 巛: c
+ 勿: c
+ 口: v
+ 尸: v
+ 犬: v
+ 巜: v
+ 耳: b
+ 冂: b
+ 厂: b
+ 虫: b
+ "\ue088": b
+ 乃: b
+ 且: 'n'
+ 扌: 'n'
+ 冖: 'n'
+ "\ue0d8": 'n'
+ "\ue0fc": 'n'
+ "\ue012": 'n'
+ 叉: 'n'
+ 工: m
+ "\ue0c6": m
+ 宀: m
+ 业: m
+ 冫: m
+ 刀: m
+ "\ue175": l
+ "\ue174": i
+ 鹿: t
+ "\ue17a": 'y'
+ 六: h
+ "\ue176": v
+ 丩: 'n'
+encoder:
+ max_length: 4
+ auto_select_length: 4
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2}, {prefix: 3}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ next: c1
+ s3:
+ object: {type: 字根, rootIndex: 3}
+ next: c5
+ s4:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ s5:
+ object: {type: 固定, key: t}
+ next: s7
+ s6:
+ object: {type: 特殊, subtype: 张码补码}
+ next: c6
+ s7:
+ object: {type: 固定, key: 'y'}
+ next: null
+ s8:
+ object: {type: 特殊, subtype: 张码补码}
+ next: s10
+ s9:
+ object: {type: 特殊, subtype: 张码补码}
+ next: s11
+ s10:
+ object: {type: 固定, key: t}
+ next: null
+ s11:
+ object: {type: 固定, key: 'n'}
+ next: c4
+ s12:
+ object: {type: 固定, key: p}
+ next: null
+ s13:
+ object: {type: 特殊, subtype: 张码补码}
+ next: null
+ s14:
+ object: {type: 固定, key: 'n'}
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: c2
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s3
+ negative: s6
+ c2:
+ object: {type: 汉字}
+ operator: 匹配
+ value: '[一二三四五六七八九]'
+ positive: s5
+ negative: c3
+ c3:
+ object: {type: 汉字}
+ operator: 匹配
+ positive: s8
+ negative: s9
+ value: '[言士舟马石鸟由光女乐西子力米古白水方民耳口日身立且工]'
+ c4:
+ object: {type: 汉字}
+ operator: 匹配
+ positive: s12
+ negative: null
+ value: '[丌丨丬丶丿亠亻冂冖冫凵刂勹匚卩厶囗夂宀屮巛廴廾彐彡忄扌攴攵氵灬犭疋疒礻糸纟艹衤讠辶钅阝饣虍彳]'
+ c5:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s4
+ negative: s13
+ c6:
+ object: {type: 特殊, subtype: 张码准码元}
+ operator: 是
+ positive: s14
+ negative: null
+ value: '1'
+data:
+ character_set: gb2312
+ repertoire:
+ "\uf000":
+ unicode: 61440
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: compound, operator: ⿱, operandList: [宀, "\ue415"]}]
+ ambiguous: false
+ name: 寒字头无八
+ "\uf001":
+ unicode: 61441
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 乌, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}]}]
+ ambiguous: false
+ name: 乌省
+ "\uf002":
+ unicode: 61442
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue0b7", strokes: [{feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 衣省无丿
+ "\uf003":
+ unicode: 61443
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 豕, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 豕二
+ "\uf004":
+ unicode: 61444
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: "\ue075", strokes: [{feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 4}]}]
+ ambiguous: false
+ name: 段字旁无段二
+ "\uf005":
+ unicode: 61445
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 戋, strokes: [{feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 2}, {feature: reference, index: 3}]}]
+ ambiguous: false
+ name: 戋无一
+ "\uf006":
+ unicode: 61446
+ tygf: 0
+ gb2312: false
+ gf0014_id: null
+ readings: []
+ glyphs: [{type: derived_component, source: 爿, strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]}]
+ ambiguous: false
+ name: 爿二
+ glyph_customization:
+ "\ue03c":
+ type: compound
+ operator: ⿱
+ operandList: ["\uf000", 八]
+ 兆:
+ type: compound
+ operator: ⿴
+ operandList: ["\ue42b", 儿]
+ 儿:
+ type: compound
+ operator: ⿰
+ operandList: [丿, 乚]
+ 川:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue0e3", 丨]
+ 气:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: ["\ue40f", "\ue122"]
+ "\uea02":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue42b", 幺]
+ 乃:
+ type: derived_component
+ source: "\ue441"
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}]
+ 衰:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue006", 一, "\ue0b7"]
+ 后:
+ type: compound
+ tags: [同字心]
+ operator: ⿸
+ operandList: ["\ue024", "\ue800"]
+ 容:
+ type: compound
+ operator: ⿳
+ operandList: [穴, "\ue43d", 口]
+ 合:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue43d", "\ue800"]
+ 哀:
+ type: compound
+ operator: ⿱
+ operandList: ["\ue006", "\ue0b7"]
+ 以:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue44f", 人]
+ 非:
+ type: compound
+ operator: ⿰
+ operandList: ["\ue07d", "\ue080"]
+ "\ue01e":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue01a", 丶]
+ 衮:
+ type: compound
+ operator: ⿳
+ operandList: [六, 厶, "\ue0b7"]
+ "\ue84f":
+ type: compound
+ operator: ⿱
+ operandList: [二, 古]
+ "\ue886":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue40f", 巾]
+ 衷:
+ type: compound
+ operator: ⿳
+ operandList: ["\ue006", 丨, "\ue0b7"]
+ 乙:
+ type: derived_component
+ source: "\ue065"
+ strokes: [{feature: reference, index: 0}]
+ 鼍:
+ type: compound
+ operator: ⿱
+ operandList: [嘼, 电]
+ "\ue819":
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc6", 冖]
+ 麥:
+ type: compound
+ operator: ⿱
+ operandList: [龶, 夂]
+ "\ue90f":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue867", 一]
+ 万:
+ type: derived_component
+ source: 万
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 2}, {feature: reference, index: 1}]
+ "\ue427":
+ type: derived_component
+ source: "\ue427"
+ strokes: [{feature: reference, index: 1}, {feature: reference, index: 0}]
+ 方:
+ type: derived_component
+ source: 方
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 3}, {feature: reference, index: 2}]
+ 弋:
+ type: derived_component
+ source: 弋
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 2}, {feature: reference, index: 1}]
+ 戈:
+ type: derived_component
+ source: 戈
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 3}, {feature: reference, index: 1}, {feature: reference, index: 2}]
+ 戊:
+ type: derived_component
+ source: 戊
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 2}, {feature: reference, index: 3}]
+ 戌:
+ type: derived_component
+ source: 戌
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 5}, {feature: reference, index: 3}, {feature: reference, index: 4}]
+ 戍:
+ type: derived_component
+ source: 戍
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 5}, {feature: reference, index: 3}, {feature: reference, index: 4}]
+ 成:
+ type: derived_component
+ source: 成
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 5}, {feature: reference, index: 3}, {feature: reference, index: 4}]
+ 戋:
+ type: derived_component
+ source: 戋
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 2}, {feature: reference, index: 3}]
+ 我:
+ type: derived_component
+ source: 我
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 6}, {feature: reference, index: 4}, {feature: reference, index: 5}]
+ "\ue05f":
+ type: derived_component
+ source: "\ue05f"
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 3}, {feature: reference, index: 5}, {feature: reference, index: 4}]
+ 戉:
+ type: derived_component
+ source: 戉
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 4}, {feature: reference, index: 2}, {feature: reference, index: 3}]
+ "\ue950":
+ type: derived_component
+ source: "\ue950"
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 2}, {feature: reference, index: 5}, {feature: reference, index: 3}, {feature: reference, index: 4}]
+ "\ue074":
+ type: derived_component
+ source: "\ue074"
+ strokes: [{feature: reference, index: 0}, {feature: reference, index: 1}, {feature: reference, index: 3}, {feature: reference, index: 2}]
diff --git a/examples/zhengma.yaml b/examples/zhengma.yaml
index 01b69e2..025d70c 100644
--- a/examples/zhengma.yaml
+++ b/examples/zhengma.yaml
@@ -1,10 +1,10 @@
-version: "0.1"
+version: '0.1'
source: zhengma
info:
name: 郑码
author: 郑易里
- version: 0.1.0
- description: 从模板创建
+ version: '1.0'
+ description: 形码四码定长
analysis:
classifier:
斜钩: 6
@@ -28,8 +28,10 @@ analysis:
竖折折钩: 8
竖折折: 8
degenerator:
- feature: {提: 横, 捺: 点}
- nocross: false
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
selector:
- 结构完整
- 根少优先
@@ -38,15 +40,34 @@ analysis:
- 非形近根
- 取大优先
customize:
- 我: [手, 戈]
- 曲: [日, "\ue001"]
- 五: [工, '5']
- 里: [日, 土]
- 兆: ["\ue997", 儿]
- 井: [二, "\ue0e3"]
- 夫: [二, 人]
- 孑: [了, '1']
- 及: ['6', '3', '4']
+ 我:
+ - 手
+ - 戈
+ 曲:
+ - 日
+ - "\ue001"
+ 五:
+ - 工
+ - '5'
+ 里:
+ - 日
+ - 土
+ 兆:
+ - "\ue997"
+ - 儿
+ 井:
+ - 二
+ - "\ue0e3"
+ 夫:
+ - 二
+ - 人
+ 孑:
+ - 了
+ - '1'
+ 及:
+ - '6'
+ - '3'
+ - '4'
strong:
- '1'
- 二
@@ -168,7 +189,6 @@ form:
"\ue042": 羊
"\ue00b": 羊
灬: 火
- "\ue997": 氵
之: 辶
定: 宀
"\ue007": 马
@@ -194,7 +214,6 @@ form:
"\ue0e2": 巛
丩: 凵
屮: 凵
- "\ue065": 凵
爿: 凵
"\ue0e1": 凵
"\ue0be": 母
@@ -238,6 +257,8 @@ form:
"\ue02a": 冂
"\ue442": 小
"\ue411": 牛
+ 䶹: 凵
+ "\ue42b": 氵
mapping:
'1': a
'2': i
diff --git a/examples/zhenma.yaml b/examples/zhenma.yaml
new file mode 100644
index 0000000..079d649
--- /dev/null
+++ b/examples/zhenma.yaml
@@ -0,0 +1,772 @@
+version: '0.1'
+source: zhenma
+info:
+ name: 真码
+ author: 命
+ version: 2023.04.15
+ description: 以最小记忆量获得最大确定性的 25 键全码单字输入法
+analysis:
+ classifier:
+ 斜钩: 8
+ 横折提: 6
+ 横折折: 6
+ 横折弯: 6
+ 横折折折钩: 6
+ 横折钩: 6
+ 横撇弯钩: 6
+ 横折折撇: 6
+ 横折折折: 6
+ 横折弯钩: 7
+ 横斜钩: 7
+ 竖提: 8
+ 竖折: 8
+ 竖弯: 8
+ 竖弯钩: 8
+ 撇点: 8
+ 撇折: 8
+ 竖折撇: 8
+ 竖折折钩: 8
+ 竖折折: 8
+ degenerator:
+ feature:
+ 提: 横
+ 捺: 点
+ no_cross: false
+ selector:
+ - 结构完整
+ - 根少优先
+ - 连续笔顺
+ - 能连不交
+ - 能散不连
+ - 取大优先
+ customize:
+ 丈:
+ - '1'
+ - 㐅
+ 丌:
+ - '1'
+ - "\ue0e3"
+ 主:
+ - '4'
+ - 王
+ 事:
+ - '1'
+ - 口
+ - "\ue431"
+ - '2'
+ 亍:
+ - 二
+ - '2'
+ 互:
+ - '1'
+ - "\ue440"
+ - '1'
+ 产:
+ - "\ue054"
+ - 厂
+ 元:
+ - 二
+ - 儿
+ 兆:
+ - "\ue42b"
+ - 儿
+ 凸:
+ - '2'
+ - '1'
+ - '2'
+ - '5'
+ - '1'
+ 凹:
+ - '2'
+ - '6'
+ - '2'
+ - '1'
+ 卅:
+ - '1'
+ - 川
+ 发:
+ - '8'
+ - '3'
+ - 又
+ - '4'
+ 垂:
+ - '3'
+ - 十
+ - 龷
+ - '1'
+ 夷:
+ - '1'
+ - 弓
+ - 人
+ 夹:
+ - '1'
+ - 丷
+ - 大
+ 屯:
+ - '1'
+ - 凵
+ - '8'
+ 我:
+ - 手
+ - 戈
+ 曲:
+ - 冂
+ - 龷
+ 末:
+ - '1'
+ - 木
+ 甩:
+ - "\ue02a"
+ - 二
+ - '8'
+ 禹:
+ - '3'
+ - 口
+ - 冂
+ - '2'
+ - '1'
+ - '4'
+ 禺:
+ - 日
+ - 冂
+ - '2'
+ - '1'
+ - '4'
+ 芈:
+ - '1'
+ - "\ue001"
+ - '1'
+ - "\ue002"
+ 里:
+ - 日
+ - "\ue43a"
+ 重:
+ - '3'
+ - '1'
+ - 日
+ - "\ue43a"
+ "\ue082":
+ - 大
+ - 丷
+ "\ue035":
+ - '1'
+ - "\ue431"
+ - '2'
+ "\ue00e":
+ - '5'
+ - 氺
+ "\ue01e":
+ - "\ue057"
+ - 丷
+ 两:
+ - '1'
+ - 冂
+ - 人
+ - 人
+ "\ue066":
+ - '1'
+ - 冂
+ - 龷
+ "\ue072":
+ - '1'
+ - 囗
+ - '2'
+ - 冖
+ "\ue053":
+ - 耳
+ - 戈
+ 秉:
+ - '3'
+ - '1'
+ - "\ue431"
+ - "\ue445"
+ 夫:
+ - 二
+ - 人
+ "\ue085":
+ - '3'
+ - '1'
+ - "\ue436"
+ - "\ue43a"
+ 㡀:
+ - 丷
+ - 冂
+ - "\ue442"
+ 囬:
+ - 囗
+ - "\ue001"
+ - 二
+ 井:
+ - 二
+ - "\ue0e3"
+ "\ue0b3":
+ - 二
+ - "\ue420"
+ serializer: zhenma
+form:
+ alphabet: qwertyuiopasdfghjklxcvbnm
+ grouping:
+ '2': 虫
+ '4': 言
+ '5': 马
+ '6': 了
+ "\ue0bc": "\ue020"
+ 㐅: 乂
+ "\ue400": 斤
+ "\ue416": 七
+ "\ue43d": 人
+ "\ue441": 乃
+ "\ue445": 小
+ "\ue417": 七
+ "\ue0a3": 巳
+ "\ue420": 豕
+ "\ue43a": 土
+ "\ue424": 儿
+ "\ue0d2": 月
+ "\ue079": 匕
+ "\ue0d6": 几
+ "\ue0d0": 雨
+ "\ue013": 半
+ "\ue446": 八
+ "\ue0c8": 车
+ "\ue42f": "\ue42e"
+ "\ue0c2": 舌
+ "\ue102": 王
+ "\ue0da": 鸟
+ "\ue912": 余
+ 饣: 食
+ 飠: 食
+ 釆: 采
+ 彳: 行
+ "\ue02d": 鬼
+ "\ue069": 鬼
+ "\ue421": 臼
+ "\ue026": 臼
+ "\ue028": 自
+ "\ue078": 午
+ 夂: 攵
+ "\ue021": 缶
+ 龵: 手
+ "\ue054": 立
+ "\ue0b6": 䒑
+ "\ue0a4": 䒑
+ "\ue030": 䒑
+ "\ue016": 半
+ "\ue442": 小
+ "\ue051": 小
+ "\ue06c": 小
+ 灬: 火
+ 肩: 户
+ 戋: 戈
+ 㦮: 戈
+ "\ue03f": 戈
+ 豖: 豕
+ 覀: 西
+ 丗: 廿
+ 龷: 廿
+ "\ue415": 甘
+ 龶: 丰
+ "\ue003": 丰
+ 長: 长
+ 镸: 长
+ 髟: 长
+ "\ue018": 卜
+ "\ue07c": 卜
+ 巜: 巛
+ "\ue0a7": 乡
+ 毌: 母
+ "\ue405": 母
+ 刂: "\ue001"
+ "\ue044": "\ue001"
+ 冉: 用
+ "\ue419": 且
+ 罒: 四
+ "\ue03e": 小
+ "\ue09e": 竹
+ "\ue002": 工
+ "\ue410": 工
+ "\ue402": 小
+ "\ue44b": 禾
+ "\ue08c": 用
+ 牜: 牛
+ "\ue0c9": 辛
+ "\ue012": 丬
+ "\ue838": 鹿
+ 䶹: 凵
+ 屮: 凵
+ "\ue822": 北
+ "\ue052": 甫
+ 朩: 木
+ "\ue0af": 臼
+ "\ue423": "\ue020"
+ "\ue422": "\ue0b7"
+ "\ue08e": "\ue057"
+ "\ue40c": "\ue057"
+ "\ue07e": "\ue0b7"
+ 勺: 夕
+ "\ue09b": 夕
+ "\ue083": 夕
+ 钅: 金
+ "\ue41e": 犭
+ 彡: 犭
+ "\ue024": 犭
+ 亻: 川
+ "\ue0e3": 川
+ "\ue07f": 川
+ "\ue404": 川
+ "\ue029": 告
+ "\ue40f": 告
+ 㐄: 告
+ "\ue411": 告
+ 讠: 言
+ 亠: 言
+ "\ue0dc": 鹿
+ "\ue093": 羊
+ "\ue042": 羊
+ "\ue00b": 羊
+ 冫: 疒
+ 丷: 疒
+ "\ue089": 疒
+ 龹: 半
+ "\ue00d": 疒
+ "\ue088": 疒
+ "\ue42d": 氵
+ "\ue448": 氵
+ "\ue059": 水
+ 乑: 水
+ 氺: 水
+ "\ue0d9": 水
+ "\ue0c3": 龸
+ 党: 龸
+ "\ue42b": 忄
+ "\ue447": 忄
+ 辶: 之
+ 宀: 定
+ "\ue0d5": 臣
+ 匚: 臣
+ "\ue418": 臣
+ 戊: 戈
+ 車: 车
+ 厂: 石
+ 丆: 石
+ "\ue068": 石
+ "\ue443": 石
+ 尢: 尤
+ 兀: 尤
+ 廾: 艹
+ "\ue050": 艹
+ "\ue0aa": 廿
+ "\ue413": 扌
+ 士: 土
+ 龰: 止
+ "\ue451": 止
+ 齒: 齿
+ 糹: 纟
+ 糸: 纟
+ 丩: 凵
+ 丱: 凵
+ "\ue0e2": 巛
+ "\ue427": 力
+ 阝: 了
+ 卩: 了
+ "\ue0b2": 了
+ 㔾: 了
+ 廴: 了
+ 馬: 马
+ "\ue009": 马
+ "\ue007": 马
+ "\ue0e8": 马
+ "\ue06b": 马
+ 彐: 录
+ "\ue431": 录
+ "\ue01c": 艮
+ "\ue031": 尸
+ 龴: 又
+ 癶: 又
+ 囗: 因
+ 員: 员
+ 曰: 日
+ "\ue070": 日
+ 皿: 四
+ "\ue0a9": 四
+ "\ue436": 四
+ 冂: 目
+ "\ue439": 目
+ 冈: 目
+ "\ue02a": 目
+ mapping:
+ '1': k
+ '3': t
+ '7': cg
+ '8': x
+ 丁: kl
+ 七: ag
+ 乂: wy
+ 三: hg
+ 卜: lg
+ 不: sl
+ 与: kx
+ 丑: vf
+ 刀: co
+ 专: jv
+ 且: mh
+ 廿: fk
+ 斤: ek
+ 人: wg
+ 业: nu
+ 小: iw
+ 水: io
+ 王: h
+ 厶: xy
+ 北: ux
+ 山: mx
+ 土: j
+ 䒑: uk
+ 十: fg
+ 丬: ul
+ 口: b
+ 丰: hl
+ 九: qt
+ 二: jg
+ 八: w
+ 乃: cp
+ 之: p
+ 乌: qo
+ 大: sy
+ 巾: ml
+ 禾: td
+ 也: cl
+ 习: cu
+ 乡: xt
+ 田: nb
+ 力: ct
+ 石: s
+ 舌: tm
+ 欠: qw
+ 爫: w
+ 子: ck
+ 扌: g
+ 辛: yf
+ 甫: du
+ 氵: i
+ 母: xu
+ 日: 'n'
+ 方: yc
+ 者: jn
+ 干: fl
+ 又: vy
+ 米: ud
+ 夕: qy
+ 冖: pp
+ 了: c
+ 予: vc
+ 止: ll
+ 匕: x
+ 亡: ya
+ 几: mg
+ 立: yu
+ 亼: wk
+ 寸: gy
+ 工: jl
+ 弋: ay
+ 令: wp
+ 门: up
+ 月: q
+ 午: tk
+ 牛: tl
+ 壬: tj
+ 弓: vx
+ 凵: xl
+ 勹: q
+ 殳: mv
+ 心: pu
+ 犬: su
+ 戈: at
+ 木: d
+ 尤: sx
+ 火: ow
+ 韦: jc
+ 车: af
+ 牙: al
+ 儿: qg
+ 长: ha
+ 文: yg
+ 尸: vt
+ 女: xk
+ 白: rn
+ 古: fb
+ 半: uj
+ 四: mn
+ 由: 'no'
+ 司: cb
+ 㠯: v
+ 甘: fj
+ 皮: vv
+ 示: ji
+ 余: wt
+ 句: qb
+ 尔: qi
+ 用: mj
+ 包: qv
+ 各: tb
+ 耂: jt
+ 合: wb
+ 羊: uh
+ 耳: hd
+ 艮: vq
+ 广: ys
+ 至: aj
+ 歹: kq
+ 聿: vl
+ 而: sm
+ 舟: eu
+ 贝: mw
+ 矢: ts
+ 辰: sj
+ 兑: uq
+ 手: tg
+ 犭: e
+ 告: tj
+ 巴: vn
+ 良: yv
+ 巛: xg
+ 目: m
+ 言: 'y'
+ 非: nf
+ 虍: la
+ 門: up
+ 出: mm
+ 其: fh
+ 隹: rl
+ 攵: tw
+ 穴: pw
+ 青: hq
+ 臼: rj
+ 采: wd
+ 页: sw
+ 艹: f
+ 户: pv
+ 虫: l
+ 音: yn
+ 酉: dk
+ 疋: vl
+ 貝: mw
+ 鬼: rb
+ 羽: cc
+ 兼: uw
+ 缶: tm
+ 豕: se
+ 骨: mp
+ 頁: sw
+ 巳: vp
+ 番: wn
+ 黽: px
+ 雨: do
+ 臣: a
+ 鹿: yx
+ 龍: st
+ 黑: mo
+ 毛: ta
+ 马: v
+ 金: w
+ 己: vk
+ 气: tc
+ 衤: pu
+ 录: vh
+ 生: th
+ 自: rm
+ 员: bm
+ 革: ff
+ 身: rh
+ 甲: np
+ 川: r
+ 南: fu
+ 龙: st
+ 瓜: ex
+ 因: bg
+ 西: dg
+ 行: eg
+ 纟: x
+ 角: qm
+ 走: jw
+ 齿: lw
+ 定: pg
+ 食: wv
+ 烏: qo
+ 爪: ei
+ 忄: o
+ 豸: we
+ 疒: u
+ 鳥: qx
+ 已: vo
+ 片: rv
+ 礻: py
+ 耒: hi
+ 鸟: qx
+ 鬥: up
+ "\ue950": fa
+ "\ue05f": hc
+ "\ue064": hw
+ "\ue001": ng
+ "\ue057": q
+ "\ue0b7": q
+ "\ue425": q
+ "\ue020": qv
+ "\ue0a2": vj
+ "\ue984": wi
+ "\ue42e": wr
+ "\ue011": x
+ "\ue06a": yv
+ "\ue440": xv
+ "\ue046": ik
+ 竹: t
+ 龸: ip
+ mapping_type: 2
+encoder:
+ max_length: 4
+ select_keys:
+ - _
+ - ;
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ next: c1
+ index: 0
+ s3:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ index: 0
+ s4:
+ object: {type: 字根, rootIndex: 2}
+ next: null
+ index: 1
+ s5:
+ object: {type: 字根, rootIndex: 3}
+ next: c3
+ index: 0
+ s6:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ index: 0
+ s7:
+ object: {type: 字根, rootIndex: 3}
+ next: null
+ index: 1
+ s8:
+ object: {type: 固定, key: i}
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: c4
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: c2
+ negative: s4
+ c2:
+ object: {type: 字根, rootIndex: 1}
+ operator: 编码匹配
+ positive: s3
+ negative: s5
+ value: ^[a-z]{2}$
+ c3:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s6
+ negative: s7
+ c4:
+ object: {type: 字根, rootIndex: 1}
+ operator: 编码匹配
+ positive: c5
+ negative: null
+ value: ^[a-z]$
+ c5:
+ object: {type: 字根, rootIndex: 1}
+ operator: 匹配
+ positive: null
+ negative: s8
+ value: '[月土八了1]'
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2, count: 1}, {prefix: 3, count: 1}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+data:
+ character_set: gb2312
+ glyph_customization:
+ 兰:
+ type: compound
+ operator: ⿱
+ operandList: [丷, 三]
+ tags: []
+ 章:
+ type: compound
+ operator: ⿱
+ operandList: [音, 十]
+ "\ue9d0":
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: ["\ue0e3", 米]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\uea02":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue42b", 幺]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue0a5":
+ type: compound
+ tags: [戈部截断]
+ operator: ⿰
+ operandList: ["\ue81f", 戈]
+ 刅:
+ type: compound
+ operator: ⿴
+ operandList: ["\ue446", 刀]
+ 办:
+ type: compound
+ operator: ⿴
+ operandList: ["\ue446", 力]
+ 容:
+ type: compound
+ operator: ⿳
+ operandList: [穴, "\ue43d", 口]
+ 隺:
+ type: compound
+ operator: ⿻
+ operandList: [冖, 隹]
+ tags: [笔画搭挂]
+ 胤:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: [儿, "\ue99d"]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue9f0":
+ type: compound
+ operator: ⿱
+ operandList: ["\ue425", 大]
+ "\ue819":
+ type: compound
+ operator: ⿱
+ operandList: ["\uebc6", 冖]
+ "\ue90f":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue0af", 车]
+ tags:
+ - 行框
diff --git a/examples/ziyuan.yaml b/examples/ziyuan.yaml
new file mode 100644
index 0000000..9aa8dac
--- /dev/null
+++ b/examples/ziyuan.yaml
@@ -0,0 +1,900 @@
+version: '0.1'
+source: ziyuan
+info:
+ name: 字源
+ author: 彭秀峰
+ version: '1.29'
+ description: 字源追求的是在易学、易用、优美的前提下综合数据跻身形码第一梯队。
+analysis:
+ classifier: {}
+ degenerator:
+ no_cross: false
+ feature:
+ 提: 横
+ 捺: 点
+ selector:
+ - 根少优先
+ - 能连不交
+ - 能散不连
+ - 结构完整
+ - 连续笔顺
+ - 取大优先
+ customize:
+ 与:
+ - 二
+ - '5'
+ 丌:
+ - '1'
+ - "\ue0e3"
+ 才:
+ - '1'
+ - '2'
+ - '3'
+ 丐:
+ - 下
+ - '5'
+ 卞:
+ - '4'
+ - 下
+ 毋:
+ - '5'
+ - '5'
+ - "\ue443"
+ "\ue034":
+ - 夕
+ - '4'
+ "\ue0bf":
+ - 匚
+ - '1'
+ "\ue0cd":
+ - '5'
+ - "\ue002"
+ "\ue123":
+ - 夕
+ - '1'
+ "\ue125":
+ - "\ue44a"
+ - '1'
+ 丱:
+ - '5'
+ - '3'
+ - "\ue018"
+ - '2'
+ 主:
+ - '4'
+ - 王
+ 丼:
+ - 二
+ - "\ue0e3"
+ - '4'
+ 乍:
+ - "\ue078"
+ - '2'
+ - 二
+ 冊:
+ - 冂
+ - 艹
+ 凸:
+ - '2'
+ - '1'
+ - '2'
+ - '5'
+ - '1'
+ 凹:
+ - '2'
+ - '5'
+ - '2'
+ - '5'
+ - '1'
+ "\ue15f":
+ - '2'
+ - '5'
+ - 二
+ "\ue160":
+ - '2'
+ - '5'
+ - 二
+ 戉:
+ - '5'
+ - 戈
+ "\ue013":
+ - 丷
+ - "\ue002"
+ "\ue02b":
+ - "\ue009"
+ - '2'
+ - 二
+ "\ue0c1":
+ - 口
+ - '2'
+ - '1'
+ "\ue0fa":
+ - "\ue44a"
+ - 二
+ "\ue12a":
+ - '3'
+ - 䒑
+ - '3'
+ "\ue12e":
+ - "\ue002"
+ - "\ue0e3"
+ "\ue13d":
+ - 三
+ - 人
+ 㦮:
+ - 二
+ - 戈
+ 曲:
+ - 囗
+ - 艹
+ 襾:
+ - '1'
+ - "\ue439"
+ - 凵
+ "\ue0d8":
+ - 乂
+ - '4'
+ - '4'
+ - '4'
+ - '4'
+ "\ue11c":
+ - "\ue009"
+ - '2'
+ - 匚
+ - '2'
+ "\ue120":
+ - '5'
+ - "\ue001"
+ - '2'
+ - '1'
+ - '1'
+ "\ue136":
+ - 口
+ - "\ue001"
+ - '1'
+ "\ue149":
+ - '5'
+ - 末
+ "\ue159":
+ - 亻
+ - "\ue009"
+ - '1'
+ - '5'
+ "\ue15e":
+ - 彐
+ - '2'
+ - 二
+ "\ue16a":
+ - "\ue439"
+ - '1'
+ - '1'
+ - '2'
+ - '5'
+ "\ue414":
+ - 艹
+ - 三
+ 丣:
+ - '1'
+ - "\ue0e3"
+ - 匚
+ - "\ue009"
+ 亜:
+ - "\ue800"
+ - "\ue001"
+ - '1'
+ 我:
+ - '3'
+ - 扌
+ - '5'
+ - '3'
+ - '4'
+ 釆:
+ - 禾
+ - 丷
+ "\ue066":
+ - 艹
+ - 日
+ "\ue0d7":
+ - 亻
+ - 彐
+ - '1'
+ - '5'
+ "\ue0dc":
+ - 广
+ - "\ue009"
+ - "\ue001"
+ "\ue0dd":
+ - 革
+ - 二
+ "\ue10c":
+ - '1'
+ - '5'
+ - '1'
+ - '5'
+ - 三
+ "\ue115":
+ - '1'
+ - 艹
+ - "\ue002"
+ "\ue137":
+ - '2'
+ - '1'
+ - '5'
+ - '5'
+ - '1'
+ - '2'
+ - '1'
+ "\ue13b":
+ - "\ue800"
+ - '2'
+ - 人
+ 㑒:
+ - 亼
+ - 口
+ - 人
+ 卑:
+ - 白
+ - 千
+ 垂:
+ - 千
+ - 艹
+ - 二
+ "\ue0ad":
+ - "\ue14e"
+ - 戈
+ "\ue0b1":
+ - "\ue078"
+ - 艹
+ - "\ue001"
+ - '1'
+ "\ue139":
+ - "\ue002"
+ - '5'
+ - 囗
+ - '1'
+ 㒸:
+ - 丷
+ - 豕
+ 重:
+ - 千
+ - 日
+ - 二
+ "\ue053":
+ - 耳
+ - '5'
+ - '3'
+ - '4'
+ "\ue10a":
+ - "\ue0e3"
+ - '2'
+ - '1'
+ - '5'
+ - '1'
+ - '5'
+ - '1'
+ - '2'
+ 畢:
+ - 甲
+ - 龷
+ - '1'
+ 隺:
+ - 冖
+ - 隹
+ 粛:
+ - "\ue431"
+ - 米
+ - "\ue0e3"
+ "\ue064":
+ - 三
+ - 人
+ 果:
+ - 日
+ - 木
+ "\ue086":
+ - 二
+ - 夂
+ 亙:
+ - '1'
+ - "\ue083"
+ - '1'
+ "\ue085":
+ - 千
+ - 囗
+ - 丷
+ - 二
+ "\ue129":
+ - 匚
+ - "\ue009"
+ - "\ue137"
+form:
+ alphabet: qwertyuiopasdfghjklzxcvbnm
+ mapping_type: 1
+ grouping:
+ "\ue401": 力
+ "\ue432": 彐
+ "\ue431": 彐
+ 曰: 日
+ "\ue00c": 日
+ "\ue416": 七
+ "\ue011": 匕
+ "\ue443": "\ue068"
+ "\ue439": 冂
+ "\ue441": 乃
+ "\ue437": 止
+ "\ue0c6": 足
+ "\ue403": 勹
+ 氺: 水
+ "\ue42b": 水
+ "\ue42c": 水
+ 龵: 手
+ "\ue0d2": 月
+ "\ue08c": 用
+ "\ue44b": 禾
+ "\ue420": 豕
+ "\ue0d0": 雨
+ "\ue0c8": 车
+ "\ue0d6": 几
+ 朩: 木
+ "\ue012": 丬
+ 龰: 止
+ "\ue451": 止
+ 覀: 西
+ "\ue406": 口
+ "\ue449": 大
+ "\ue043": 大
+ "\ue452": 十
+ "\ue020": "\ue0bc"
+ "\ue43d": 人
+ "\ue838": 鹿
+ "\ue042": 羊
+ "\ue093": 羊
+ "\ue029": 牛
+ "\ue005": 禸
+ "\ue0da": 鸟
+ 爫: 爪
+ 䶹: 屮
+ "\ue09e": 竹
+ "\ue14e": 爿
+ "\ue106": 衣
+ "\ue0b7": 衣
+ 衤: 衣
+ "\ue422": 衣
+ 幺: 丝
+ 纟: 丝
+ 糸: 丝
+ "\ue0c3": 尚
+ "\ue03e": 尚
+ 饣: 食
+ "\ue423": "\ue0bc"
+ 亻: 人
+ 扌: 手
+ "\ue002": 手
+ "\ue079": 匕
+ "\ue839": 比
+ "\ue40c": "\ue057"
+ "\ue424": 儿
+ 忄: 心
+ "\ue051": 心
+ 㣺: 心
+ "\ue0b2": 卩
+ "\ue0d5": 臣
+ 囗: 口
+ 讠: 言
+ "\ue427": 勹
+ 钅: 金
+ 刂: 刀
+ 戋: 戈
+ 戌: 戊
+ "\ue04c": 木
+ 氵: 水
+ 灬: 火
+ "\ue430": "\ue42e"
+ "\ue42f": "\ue42e"
+ 礻: 示
+ 牜: 牛
+ 犭: 犬
+ "\ue054": 六
+ "\ue102": 王
+ 車: 车
+ "\ue80a": 衣
+ 叀: "\ue052"
+ 魚: 鱼
+ "\ue442": 小
+ 馬: 马
+ "\ue157": 马
+ 鳥: 鸟
+ "\ue0d7": 鸟
+ 糹: 丝
+ 飠: 食
+ "\ue019": 食
+ 門: 门
+ 貝: 贝
+ 齒: 齿
+ "\ue43a": 土
+ "\ue444": 厶
+ "\ue120": 业
+ "\ue0dc": 鹿
+ "\ue153": 虍
+ "\ue131": 臣
+ "\ue421": 臼
+ "\ue137": 业
+ "\ue17e": 儿
+ mapping:
+ '1': q
+ '2': l
+ '3': m
+ '4': v
+ '5': d
+ 气: 'n'
+ 刀: z
+ 力: o
+ 方: l
+ 马: w
+ 五: t
+ 亠: l
+ 山: i
+ "\ue018": v
+ 巾: 'y'
+ 彐: f
+ 八: i
+ 土: b
+ 士: b
+ 干: 'y'
+ 雨: 'n'
+ 田: b
+ 言: l
+ "\ue434": c
+ 龴: j
+ 厶: j
+ 鱼: q
+ 也: l
+ 月: m
+ 用: o
+ 文: l
+ 夕: 'n'
+ "\ue0bc": a
+ 日: 'n'
+ 宀: p
+ 冖: u
+ 㠯: i
+ 口: k
+ 尸: h
+ 毛: u
+ 小: i
+ 大: s
+ 彳: g
+ 车: g
+ 金: z
+ 人: s
+ 石: f
+ 丆: f
+ 米: o
+ 二: w
+ 工: d
+ "\ue0e3": i
+ "\ue001": j
+ 冫: 'n'
+ 丷: i
+ "\ue00d": 'n'
+ 王: f
+ 三: e
+ 龶: r
+ 四: r
+ 目: j
+ 罒: o
+ 广: h
+ 疒: h
+ 厂: h
+ 古: m
+ 弓: x
+ 贝: a
+ 且: t
+ "\ue419": t
+ 火: v
+ "\ue024": h
+ "\ue057": h
+ 禾: o
+ 丁: o
+ 九: o
+ 子: h
+ 了: h
+ 斤: x
+ 十: p
+ 廿: r
+ 艹: r
+ 廾: r
+ 龷: r
+ 丬: t
+ 䒑: g
+ 又: f
+ 立: g
+ 七: u
+ 匕: h
+ "\ue417": u
+ 弋: u
+ 戈: z
+ 之: g
+ 辶: g
+ 廴: g
+ 舟: g
+ 豸: w
+ 豕: w
+ 西: e
+ 彡: u
+ "\ue068": f
+ 心: j
+ 乂: r
+ 川: c
+ 门: p
+ 镸: u
+ 匚: i
+ 凵: i
+ "\ue009": i
+ "\ue007": i
+ 冂: u
+ "\ue02a": u
+ "\ue418": i
+ 虫: e
+ 寸: f
+ 水: c
+ "\ue42d": i
+ "\ue448": i
+ 皿: o
+ 手: d
+ 耳: j
+ 卩: j
+ 阝: i
+ 巳: j
+ 巴: w
+ 㔾: j
+ 勹: a
+ 女: a
+ 白: c
+ 臼: b
+ 乃: l
+ 止: g
+ 足: g
+ 几: x
+ 儿: h
+ "\ue07f": c
+ 木: x
+ "\ue42e": v
+ 卜: v
+ 首字母-o: o
+ "\ue446": i
+ 攵: f
+ 夂: f
+ 韵母-a: a
+ 韵母-i: i
+ 韵母-u: u
+ 韵母-e: e
+ 韵母-n: 'n'
+ 韵母-ê1: e
+ 韵母-ê2: e
+ 韵母-ê3: e
+ 韵母-ê4: e
+ 韵母-m: m
+ 韵母-v: v
+ 韵母-o: o
+ "\ue078": t
+ "\ue044": i
+ 乑: s
+ "\ue44a": i
+ 声母-b: b
+ 声母-c: c
+ 声母-d: d
+ 声母-f: f
+ 声母-g: g
+ 声母-h: h
+ 声母-j: j
+ 声母-k: k
+ 声母-l: l
+ 声母-m: m
+ 声母-n: 'n'
+ 声母-p: p
+ 声母-r: r
+ 声母-s: s
+ 声母-t: t
+ 声母-z: z
+ 尤: w
+ 虍: w
+ 鼠: w
+ 鹿: w
+ 牛: w
+ 羊: w
+ 彑: w
+ 禸: w
+ 鸟: e
+ 隹: e
+ 飞: e
+ 非: e
+ 爪: e
+ "\ue415": r
+ 屮: r
+ 竹: t
+ 个: t
+ "\ue014": t
+ 矢: t
+ 片: t
+ 爿: t
+ "\ue075": r
+ 屯: r
+ 业: r
+ 六: 'y'
+ 衣: 'y'
+ 㡀: 'y'
+ 勿: 'y'
+ 甲: 'y'
+ 丝: u
+ 乡: u
+ "\ue052": u
+ 专: u
+ 羽: u
+ 皮: u
+ 革: u
+ 尚: i
+ 丘: i
+ 食: o
+ 瓜: o
+ 豆: o
+ 壴: o
+ 耒: o
+ "\ue0eb": o
+ 瓦: o
+ 缶: o
+ 丸: o
+ 户: p
+ "\ue006": p
+ 穴: p
+ 母: a
+ 亼: s
+ 欠: s
+ 佥: s
+ 尹: f
+ 予: f
+ 正: g
+ "\ue073": g
+ 走: g
+ 亍: g
+ 屰: g
+ "\ue411": g
+ 癶: g
+ 比: h
+ 生: h
+ 兀: h
+ 自: j
+ 身: j
+ 己: j
+ 已: j
+ 臣: j
+ 牙: j
+ 齿: j
+ 骨: j
+ 头: j
+ 歹: j
+ 回: k
+ "\ue800": k
+ 丂: k
+ 亡: l
+ 亥: l
+ 吂: l
+ 而: l
+ 千: l
+ 万: l
+ 戊: z
+ 凡: x
+ 本: x
+ 末: x
+ 未: x
+ 林: x
+ 巛: c
+ 黑: v
+ 上: v
+ 下: v
+ 㐄: g
+ 示: v
+ 由: b
+ 甫: b
+ 早: 'n'
+ 旦: 'n'
+ 辰: 'n'
+ 云: 'n'
+ 天: 'n'
+ "\ue09b": m
+ "\ue083": m
+ 今: m
+ 首字母-a: a
+ 首字母-b: b
+ 首字母-c: c
+ 首字母-d: d
+ 首字母-e: e
+ 首字母-f: f
+ 首字母-g: g
+ 首字母-h: h
+ 首字母-j: j
+ 首字母-k: k
+ 首字母-l: l
+ 首字母-m: m
+ 首字母-n: 'n'
+ 首字母-p: p
+ 首字母-q: q
+ 首字母-r: r
+ 首字母-s: s
+ 首字母-t: t
+ 首字母-w: w
+ 首字母-x: x
+ 首字母-y: 'y'
+ 首字母-z: z
+ 首字母-ê: e
+ 二字母-a: a
+ 二字母-e: e
+ 二字母-g: g
+ 二字母-h: h
+ 二字母-i: i
+ 二字母-m: m
+ 二字母-n: 'n'
+ 二字母-o: o
+ 二字母-r: r
+ 二字母-u: u
+ 二字母-v: v
+ 三字母-a: a
+ 三字母-e: e
+ 三字母-g: g
+ 三字母-i: i
+ 三字母-n: 'n'
+ 三字母-o: o
+ 三字母-u: u
+ "\ue089": i
+ 少: i
+ 不: i
+ 耂: h
+ 犬: w
+ 其: t
+encoder:
+ max_length: 4
+ auto_select_length: 4
+ short_code:
+ - length_equal: 1
+ schemes: [{prefix: 1}, {prefix: 2}, {prefix: 3}]
+ rules:
+ - length_equal: 2
+ formula: AaAbBaBb
+ - length_equal: 3
+ formula: AaBaCaCb
+ - length_in_range: [4, 10]
+ formula: AaBaCaZa
+ sources:
+ s0:
+ object: null
+ next: s1
+ s1:
+ object: {type: 字根, rootIndex: 1}
+ next: c0
+ s2:
+ object: {type: 字根, rootIndex: 2}
+ next: c1
+ s3:
+ object: {type: 字根, rootIndex: 3}
+ next: c5
+ s4:
+ object: {type: 字根, rootIndex: -1}
+ next: null
+ s5:
+ object: {type: 字音, subtype: 首字母}
+ next: s7
+ s6:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ s7:
+ object: {type: 字音, subtype: 二字母}
+ next: s8
+ s8:
+ object: {type: 字音, subtype: 三字母}
+ next: null
+ s15:
+ object: {type: 字音, subtype: 首字母}
+ next: null
+ conditions:
+ c0:
+ object: {type: 字根, rootIndex: 2}
+ operator: 存在
+ positive: s2
+ negative: s5
+ c1:
+ object: {type: 字根, rootIndex: 3}
+ operator: 存在
+ positive: s3
+ negative: s6
+ c5:
+ object: {type: 字根, rootIndex: 4}
+ operator: 存在
+ positive: s4
+ negative: s15
+data:
+ character_set: extended
+ glyph_customization:
+ 面:
+ type: compound
+ operator: ⿵
+ operandList: [而, 三]
+ 丢:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: [壬, 厶]
+ 令:
+ type: compound
+ operator: ⿱
+ operandList: [今, 丶]
+ 畺:
+ type: compound
+ tags: [纵向包夹]
+ operator: ⿻
+ operandList: [三, 畕]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 5}, {index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 堇:
+ type: compound
+ operator: ⿻
+ operandList: [革, 二]
+ 是:
+ type: compound
+ operator: ⿱
+ operandList: [旦, 龰]
+ 舍:
+ type: compound
+ tags: []
+ operator: ⿱
+ operandList: [亼, 古]
+ 囱:
+ type: compound
+ operator: ⿴
+ operandList: ["\ue02d", 夕]
+ order: [{index: 0, strokes: 3}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 㐫:
+ type: compound
+ operator: ⿶
+ operandList: [凵, 文]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 威:
+ type: compound
+ operator: ⿵
+ operandList: [戌, 女]
+ order: [{index: 0, strokes: 3}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 容:
+ type: compound
+ operator: ⿳
+ operandList: [穴, 人, 口]
+ 㝵:
+ type: compound
+ operator: ⿱
+ operandList: [旦, 寸]
+ "\uea02":
+ type: compound
+ operator: ⿴
+ operandList: ["\ue42b", 幺]
+ order: [{index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ 胤:
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: [儿, "\ue99d"]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ "\ue9d0":
+ type: compound
+ tags: [横向包夹]
+ operator: ⿴
+ operandList: ["\ue0e3", 米]
+ order: [{index: 0, strokes: 1}, {index: 1, strokes: 0}, {index: 0, strokes: 0}]
+ tags:
+ - 衣框
+ - 同字心
+ repertoire: {}
+algebra:
+ 二字母:
+ - type: xform
+ from: ^.(.?).*\d$
+ to: $1
+ 三字母:
+ - type: xform
+ from: ^..?(.?).*\d$
+ to: $1
diff --git a/index.html b/index.html
index 0881ae6..f6b5171 100644
--- a/index.html
+++ b/index.html
@@ -4,6 +4,13 @@
+
+
+
+
+
+
+
汉字自动拆分系统
diff --git a/package-lock.json b/package-lock.json
index 0beea02..893bb5f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,77 +1,88 @@
{
"name": "chai",
- "version": "0.1.9",
+ "version": "0.1.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "chai",
- "version": "0.1.9",
+ "version": "0.1.14",
"dependencies": {
+ "@ant-design/charts": "^2.1.1",
"@ant-design/colors": "^7.0.2",
- "@ant-design/pro-components": "^2.7.1",
- "@dagrejs/dagre": "^1.1.2",
+ "@ant-design/icons": "^5.3.7",
+ "@ant-design/pro-components": "^2.7.10",
+ "@antv/s2": "^2.0.0-next.24",
+ "@antv/s2-react": "^2.0.0-next.23",
+ "@dagrejs/dagre": "^1.1.3",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^8.0.0",
"@dnd-kit/utilities": "^3.2.2",
- "ahooks": "^3.7.11",
- "antd": "5.11.4",
+ "@types/mdx": "^2.0.13",
+ "ahooks": "^3.8.0",
+ "antd": "^5.18.3",
"d3-array": "^3.2.4",
+ "deep-object-diff": "^1.1.9",
"immer": "^10.1.1",
- "jotai": "^2.8.0",
+ "jotai": "^2.8.4",
+ "jotai-effect": "^1.0.0",
+ "jotai-location": "^0.5.5",
"jotai-minidb": "^0.0.8",
- "jotai-optics": "^0.3.2",
+ "jotai-optics": "^0.4.0",
"js-md5": "^0.8.3",
"js-yaml": "4.1.0",
- "libchai": "^0.1.9",
+ "libchai": "^0.1.14-alpha.1",
"lodash-es": "^4.17.21",
- "lz-string": "^1.5.0",
- "mathjs": "12.1.0",
+ "mathjs": "^13.0.1",
"nanoid": "^5.0.7",
"optics-ts": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "react-router-dom": "^6.23.0",
- "reactflow": "^11.11.3",
+ "react-router-dom": "^6.24.0",
+ "reactflow": "^11.11.4",
"styled-components": "^6.1.9",
- "use-immer": "^0.9.0"
+ "use-immer": "^0.10.0"
},
"devDependencies": {
"@emotion/react": "^11.11.4",
"@jsdevtools/version-bump-prompt": "^6.1.0",
+ "@mdx-js/react": "^3.0.1",
+ "@mdx-js/rollup": "^3.0.1",
"@modyfi/vite-plugin-yaml": "^1.1.0",
- "@swc-jotai/react-refresh": "^0.1.0",
+ "@swc-jotai/react-refresh": "^0.1.1",
+ "@tailwindcss/typography": "^0.5.13",
"@types/d3-array": "^3.2.1",
"@types/js-md5": "^0.7.2",
"@types/js-yaml": "^4.0.9",
"@types/lodash-es": "^4.17.12",
- "@types/node": "^20.12.11",
- "@types/react": "^18.3.1",
+ "@types/node": "^20.14.9",
"@types/react-dom": "^18.3.0",
"@types/styled-components": "^5.1.34",
- "@typescript-eslint/eslint-plugin": "^7.8.0",
- "@typescript-eslint/parser": "^7.8.0",
- "@vitejs/plugin-react-swc": "^3.6.0",
+ "@typescript-eslint/eslint-plugin": "^7.14.1",
+ "@typescript-eslint/parser": "^7.14.1",
+ "@vitejs/plugin-react-swc": "^3.7.0",
"@vitest/coverage-v8": "^1.6.0",
"@vitest/ui": "^1.6.0",
- "axios": "^1.6.8",
+ "autoprefixer": "^10.4.19",
+ "axios": "^1.7.2",
"eslint": "^8.57.0",
"eslint-config-alloy": "^5.1.2",
- "eslint-plugin-react": "^7.34.1",
+ "eslint-plugin-react": "^7.34.3",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
- "eslint-plugin-tsdoc": "^0.2.17",
+ "eslint-plugin-tsdoc": "^0.3.0",
"fs-extra": "^11.2.0",
- "jotai-devtools": "^0.9.1",
+ "jotai-devtools": "^0.10.0",
+ "postcss": "^8.4.39",
"pre-commit": "^1.2.2",
- "prettier": "^3.2.5",
+ "prettier": "^3.3.2",
"rollup-plugin-visualizer": "^5.12.0",
- "ts-json-schema-generator": "^2.1.1",
- "typescript": "^5.4.5",
- "vite": "^5.2.11",
- "vite-plugin-cdn-import": "^1.0.1",
+ "tailwindcss": "^3.4.4",
+ "tsx": "^4.16.2",
+ "typescript": "^5.5.2",
+ "vite": "^5.3.2",
"vite-plugin-chunk-split": "^0.5.0",
- "vite-plugin-pages": "^0.32.1",
+ "vite-plugin-pages": "^0.32.3",
"vite-plugin-wasm": "^3.3.0",
"vite-plugin-wasm-pack": "^0.1.12",
"vitest": "^1.6.0"
@@ -80,6 +91,18 @@
"decimal.js": "^10.4.3"
}
},
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -93,6 +116,28 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@ant-design/charts": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/charts/-/charts-2.1.1.tgz",
+ "integrity": "sha512-db/Dcc8HdftcmiN6QXePzTw3MeGZD/6XeBrefY+Isjm55jUrvSE+zFf5GEFFrSi4C06LP4ioEEcqUXxblGKwHA==",
+ "dependencies": {
+ "@ant-design/plots": "^2.1.3"
+ },
+ "peerDependencies": {
+ "lodash-es": "^4.17.21",
+ "react": ">=16.8.4",
+ "react-dom": ">=16.8.4"
+ }
+ },
+ "node_modules/@ant-design/charts-util": {
+ "version": "0.0.1-alpha.5",
+ "resolved": "https://registry.npmjs.org/@ant-design/charts-util/-/charts-util-0.0.1-alpha.5.tgz",
+ "integrity": "sha512-EwTUjRPhU2CUyI2e11pAi9aOQg9oEWdFEWxv1f4j+Ta4doYXd1yTl94Zy9JvigiEj4qv8dPGl0PUd3r+qMVrAg==",
+ "peerDependencies": {
+ "react": ">=16.8.4",
+ "react-dom": ">=16.8.4"
+ }
+ },
"node_modules/@ant-design/colors": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.2.tgz",
@@ -102,9 +147,9 @@
}
},
"node_modules/@ant-design/cssinjs": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.20.0.tgz",
- "integrity": "sha512-uG3iWzJxgNkADdZmc6W0Ci3iQAUOvLMcM8SnnmWq3r6JeocACft4ChnY/YWvI2Y+rG/68QBla/O+udke1yH3vg==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.21.0.tgz",
+ "integrity": "sha512-gIilraPl+9EoKdYxnupxjHB/Q6IHNRjEXszKbDxZdsgv4sAZ9pjkCq8yanDWNvyfjp4leir2OVAJm0vxwKK8YA==",
"dependencies": {
"@babel/runtime": "^7.11.1",
"@emotion/hash": "^0.8.0",
@@ -143,14 +188,31 @@
"resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
"integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="
},
+ "node_modules/@ant-design/plots": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@ant-design/plots/-/plots-2.2.4.tgz",
+ "integrity": "sha512-e9JE51x4QVIA8E/liU+0Tj2bWglE/Ck6iZeWk1eCz8FJQN8KS8x2Pej8oqKdvYmy/YGzwiAulrBnI7NuoZwO3A==",
+ "dependencies": {
+ "@ant-design/charts-util": "0.0.1-alpha.5",
+ "@antv/event-emitter": "^0.1.3",
+ "@antv/g": "^6.0.0",
+ "@antv/g2": "^5.1.18",
+ "@antv/g2-extension-plot": "^0.2.0"
+ },
+ "peerDependencies": {
+ "lodash-es": "^4.17.21",
+ "react": ">=16.8.4",
+ "react-dom": ">=16.8.4"
+ }
+ },
"node_modules/@ant-design/pro-card": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-card/-/pro-card-2.6.1.tgz",
- "integrity": "sha512-LiZwTUFHNU8t7bJsp51DnSmuct2uY2WHxl+dMcWCpsW2V6KRPws4raGo96SDMPfGjwbF0YrMZhR9yO7qmI5nag==",
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-card/-/pro-card-2.8.4.tgz",
+ "integrity": "sha512-V+8D10YDsO1FnQK2OKOkB8KkpbjgN7OSLzsJhpkv0l4c4FYV0HzWwEmqIhscgse1j587QcuK3jKwnCWEsxSP1Q==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"classnames": "^2.3.2",
"omit.js": "^2.0.2",
@@ -163,20 +225,20 @@
}
},
"node_modules/@ant-design/pro-components": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-components/-/pro-components-2.7.1.tgz",
- "integrity": "sha512-9e1BCrDNZ4NZXt7sY9eotVOFa506Pnwhsg9alRWfAzn36IpLt0o9/VllBSAR3WeGaUn452vEEOWJTsCVW4Jq4w==",
- "dependencies": {
- "@ant-design/pro-card": "2.6.1",
- "@ant-design/pro-descriptions": "2.5.37",
- "@ant-design/pro-field": "2.14.10",
- "@ant-design/pro-form": "2.26.0",
- "@ant-design/pro-layout": "7.19.1",
- "@ant-design/pro-list": "2.5.52",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-skeleton": "2.1.11",
- "@ant-design/pro-table": "3.15.3",
- "@ant-design/pro-utils": "2.15.7",
+ "version": "2.7.10",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-components/-/pro-components-2.7.10.tgz",
+ "integrity": "sha512-UZV1gKGjKxZ9OridFzJLgd9K8WFbTr3t36MQa2Fz5EwWj2mfpAFSvg/0yP9UHgTnfdCe5yrpeck9tGpgHIfcdg==",
+ "dependencies": {
+ "@ant-design/pro-card": "2.8.4",
+ "@ant-design/pro-descriptions": "2.5.45",
+ "@ant-design/pro-field": "2.15.0",
+ "@ant-design/pro-form": "2.28.0",
+ "@ant-design/pro-layout": "7.19.8",
+ "@ant-design/pro-list": "2.5.61",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-skeleton": "2.1.13",
+ "@ant-design/pro-table": "3.16.1",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.16.3"
},
"peerDependencies": {
@@ -186,14 +248,15 @@
}
},
"node_modules/@ant-design/pro-descriptions": {
- "version": "2.5.37",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-descriptions/-/pro-descriptions-2.5.37.tgz",
- "integrity": "sha512-YaMs0IGQ39n8jMDUQjhpWW6uZMDktgxAAYwUE9s1tF2XK/ySQSdfylsGvMHZFKqWPRnOqNFIYQ1kAcDLIO9KXQ==",
- "dependencies": {
- "@ant-design/pro-field": "2.14.10",
- "@ant-design/pro-form": "2.26.0",
- "@ant-design/pro-skeleton": "2.1.11",
- "@ant-design/pro-utils": "2.15.7",
+ "version": "2.5.45",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-descriptions/-/pro-descriptions-2.5.45.tgz",
+ "integrity": "sha512-XwaHEWhBEa2KiLUZoh67TIfW9bIckzNFUu/gzy/6Tzi9W+qYhZQCzacNNAUDR/a/MULc3J859oqRP+JjCdFUGg==",
+ "dependencies": {
+ "@ant-design/pro-field": "2.15.0",
+ "@ant-design/pro-form": "2.28.0",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-skeleton": "2.1.13",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"rc-resize-observer": "^0.2.3",
"rc-util": "^5.0.6"
@@ -219,13 +282,13 @@
}
},
"node_modules/@ant-design/pro-field": {
- "version": "2.14.10",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-field/-/pro-field-2.14.10.tgz",
- "integrity": "sha512-Q5JIfZJheQKbxgpX29xNwQgsP+fA9WYD4ov5QBLBn1ePUqOreXOQK4cLMBPxxD5MOMULihzHoKi3JOBmuyBCUw==",
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-field/-/pro-field-2.15.0.tgz",
+ "integrity": "sha512-pf0ldCWZGEWLpZWyifHqyaQ0/uG5yVPvYXhnSM6sXBtxtfHqZvZvjuhmIK1wR05wDocS/JHQnq+sA3FTut8FXQ==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"@chenshuai2144/sketch-color": "^1.0.8",
"classnames": "^2.3.2",
@@ -241,14 +304,14 @@
}
},
"node_modules/@ant-design/pro-form": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-form/-/pro-form-2.26.0.tgz",
- "integrity": "sha512-K542iiEM0mS/U2iaBHhJjsNinsquy4ZSSfoz6dRdFg6OQEU6+qxx7SpvXpVAGk+CtTxDTmd6u0EKlyVl6shK5Q==",
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-form/-/pro-form-2.28.0.tgz",
+ "integrity": "sha512-3sOtwSakzrQVYvhWzvvg1iBmGWwr166HKqob5UnjQPP55+40y0agQpyxeoagJF83Xb31zkbp+U0iFcAAQQs76A==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-field": "2.14.10",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-field": "2.15.0",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"@chenshuai2144/sketch-color": "^1.0.7",
"@umijs/use-params": "^1.0.9",
@@ -273,13 +336,13 @@
}
},
"node_modules/@ant-design/pro-layout": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-layout/-/pro-layout-7.19.1.tgz",
- "integrity": "sha512-JquPxUMFuEZ0kAgs75ECsRFEgygmXawk/oAvEvKNuNTavrUyU/8EJHN+oAETjKdhtsst0Wp5MJKQqPZAcQdYnA==",
+ "version": "7.19.8",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-layout/-/pro-layout-7.19.8.tgz",
+ "integrity": "sha512-f/vC83jmCjEDP7rrLBxRBqCK8298keSRrXqpd2RqigYlJpGqeKVGcevmk5ngBjDxz+UqjoNfOokG7cU3t3eIvQ==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"@umijs/route-utils": "^4.0.0",
"@umijs/use-params": "^1.0.9",
@@ -299,15 +362,15 @@
}
},
"node_modules/@ant-design/pro-list": {
- "version": "2.5.52",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-list/-/pro-list-2.5.52.tgz",
- "integrity": "sha512-Ndro8YKubSQxFDJ3ZTMU9esZJAjye9TqKMLd768ST86nWvSeDrm8A0oUIKtyMgvnbzsh7YXj4JgexGUNJJPaGg==",
+ "version": "2.5.61",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-list/-/pro-list-2.5.61.tgz",
+ "integrity": "sha512-MwqTfWcos3XBPJlYNw/T1iVlU7HAT/PlAUDTVhdqwpjs6gKafFsg8fHdsj5MxVsk1Pjp5h8hCWIE0P13aMwfYg==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-card": "2.6.1",
- "@ant-design/pro-field": "2.14.10",
- "@ant-design/pro-table": "3.15.3",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-card": "2.8.4",
+ "@ant-design/pro-field": "2.15.0",
+ "@ant-design/pro-table": "3.16.1",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"classnames": "^2.3.2",
"dayjs": "^1.11.10",
@@ -333,9 +396,9 @@
}
},
"node_modules/@ant-design/pro-provider": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-provider/-/pro-provider-2.14.1.tgz",
- "integrity": "sha512-N8hTUNJc7dtIjj79ZFviielizo15nOUyjrmz9Ll0Mn68Btne2FLpf8cKHsUMdA+yLDW9oM0ExcqIWJOKyx0nUg==",
+ "version": "2.14.7",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-provider/-/pro-provider-2.14.7.tgz",
+ "integrity": "sha512-yEAOph/fTzIhOWMtYAbcsjffyYq8tL6IgMQqRlYZmIisVMRDZZ32F+Ab18a4S18foZiDChEr0e6NZuuY7du5rA==",
"dependencies": {
"@ant-design/cssinjs": "^1.11.1",
"@babel/runtime": "^7.18.0",
@@ -350,9 +413,9 @@
}
},
"node_modules/@ant-design/pro-skeleton": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-skeleton/-/pro-skeleton-2.1.11.tgz",
- "integrity": "sha512-a1drmZSDXHFexFniN1YD7PgYiWvhdBAM9OwzSOO3eXPAltAg2cGcaVBlFmweShN+dupO220RN+6aaLUv3G9B2Q==",
+ "version": "2.1.13",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-skeleton/-/pro-skeleton-2.1.13.tgz",
+ "integrity": "sha512-Z2+DpJaFzO6gbmDW8lTceHy2vOpwKQUVRteAh5Ac3NSPeZFUDoyxZGOmA2jN/BxlSQnhrR88vhwXi+KouEqxcg==",
"dependencies": {
"@babel/runtime": "^7.18.0"
},
@@ -363,16 +426,16 @@
}
},
"node_modules/@ant-design/pro-table": {
- "version": "3.15.3",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-table/-/pro-table-3.15.3.tgz",
- "integrity": "sha512-85LMPOsE8vqnKO0/C/r1fLBMhG5jfBUzSlzO7dtDKNzgR3FIeIdOBm49rtoKJ3sHdf3HV3sFazHkOUv9aXQ6Bg==",
+ "version": "3.16.1",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-table/-/pro-table-3.16.1.tgz",
+ "integrity": "sha512-c67xsUMIzlGnHYSVjOCkhPlBlt21zoZxa7+p4A087cyjfkQwFR5Qc+xj8L9t0GCqdRz+7J2A9s3s8SSJAwqCEA==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-card": "2.6.1",
- "@ant-design/pro-field": "2.14.10",
- "@ant-design/pro-form": "2.26.0",
- "@ant-design/pro-provider": "2.14.1",
- "@ant-design/pro-utils": "2.15.7",
+ "@ant-design/pro-card": "2.8.4",
+ "@ant-design/pro-field": "2.15.0",
+ "@ant-design/pro-form": "2.28.0",
+ "@ant-design/pro-provider": "2.14.7",
+ "@ant-design/pro-utils": "2.15.14",
"@babel/runtime": "^7.18.0",
"@dnd-kit/core": "^6.0.8",
"@dnd-kit/modifiers": "^6.0.1",
@@ -406,12 +469,12 @@
}
},
"node_modules/@ant-design/pro-utils": {
- "version": "2.15.7",
- "resolved": "https://registry.npmjs.org/@ant-design/pro-utils/-/pro-utils-2.15.7.tgz",
- "integrity": "sha512-VMK1mkb9St4OoEoekW0qUqkKK632XOGjBZusKjlfP9WPwv+MP8bPAB2jOH89JoY8SIQ87Zod6lMgWLMJX3qbOw==",
+ "version": "2.15.14",
+ "resolved": "https://registry.npmjs.org/@ant-design/pro-utils/-/pro-utils-2.15.14.tgz",
+ "integrity": "sha512-h/GdYDN19dTnyWvbfoEF5DyeTwkB+iRUXlhQ1O1NMkD2eOUpKTjVKF8J+Kekb7Bp7Fkf1dBVktVrcY8sioTkrw==",
"dependencies": {
"@ant-design/icons": "^5.0.0",
- "@ant-design/pro-provider": "2.14.1",
+ "@ant-design/pro-provider": "2.14.7",
"@babel/runtime": "^7.18.0",
"classnames": "^2.3.2",
"dayjs": "^1.11.10",
@@ -427,9 +490,9 @@
}
},
"node_modules/@ant-design/react-slick": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz",
- "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.1.2.tgz",
+ "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==",
"dependencies": {
"@babel/runtime": "^7.10.4",
"classnames": "^2.2.5",
@@ -441,6 +504,324 @@
"react": ">=16.9.0"
}
},
+ "node_modules/@antv/component": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@antv/component/-/component-2.0.1.tgz",
+ "integrity": "sha512-VldsSv2O/JNjZYenFIzmtLeC+KD2RcpNARsCLKpi04Iz26joQ3uMtnwxM5W4bd/SCJYKp+eeQeMHMAbwaNR1pw==",
+ "dependencies": {
+ "@antv/g": "^6.0.5",
+ "@antv/scale": "^0.4.3",
+ "@antv/util": "^3.3.5",
+ "svg-path-parser": "^1.1.0"
+ }
+ },
+ "node_modules/@antv/coord": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/@antv/coord/-/coord-0.4.7.tgz",
+ "integrity": "sha512-UTbrMLhwJUkKzqJx5KFnSRpU3BqrdLORJbwUbHK2zHSCT3q3bjcFA//ZYLVfIlwqFDXp/hzfMyRtp0c77A9ZVA==",
+ "dependencies": {
+ "@antv/scale": "^0.4.12",
+ "@antv/util": "^2.0.13",
+ "gl-matrix": "^3.4.3"
+ }
+ },
+ "node_modules/@antv/coord/node_modules/@antv/util": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-2.0.17.tgz",
+ "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==",
+ "dependencies": {
+ "csstype": "^3.0.8",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/@antv/event-emitter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@antv/event-emitter/-/event-emitter-0.1.3.tgz",
+ "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg=="
+ },
+ "node_modules/@antv/g": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/@antv/g/-/g-6.0.7.tgz",
+ "integrity": "sha512-plglNjV0N7cn7hPONVl+9FIWjInAo5s7FrOsEFpAB8KXyJ0p1hKb2zEO0TzCw0it/lf3Xbiuixk9NbyslDs3nw==",
+ "dependencies": {
+ "@antv/g-camera-api": "2.0.6",
+ "@antv/g-dom-mutation-observer-api": "2.0.5",
+ "@antv/g-lite": "2.0.5",
+ "@antv/g-web-animations-api": "2.0.6"
+ }
+ },
+ "node_modules/@antv/g-camera-api": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@antv/g-camera-api/-/g-camera-api-2.0.6.tgz",
+ "integrity": "sha512-fhwwsmhs03N+t1XycAEA8a4ApKKBYJGpRMgFpQ5YS+NNBXoufXuJDESJVPUEwowbFt+664GQwW/g/ULkwNEoVw==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-canvas": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-2.0.7.tgz",
+ "integrity": "sha512-tHa3Jq2B9EHDg8Icchxa+9z6TaTh4F0iVBqemj714XqPZfSf2cb+mr/AtqNsB25yCqosX31m8NsA+Ci18N2A1A==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/g-plugin-canvas-path-generator": "2.0.5",
+ "@antv/g-plugin-canvas-picker": "2.0.6",
+ "@antv/g-plugin-canvas-renderer": "2.0.6",
+ "@antv/g-plugin-dom-interaction": "2.0.5",
+ "@antv/g-plugin-html-renderer": "2.0.6",
+ "@antv/g-plugin-image-loader": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-dom-mutation-observer-api": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.5.tgz",
+ "integrity": "sha512-0e86+x/2hcmt5SITzeZjSA8X2/j2Fms+FQX+Iuf7zSou/77kk3ZqUASlwDsf03MT2oGXAW7EcO2Xy8MqpUiseA==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5"
+ }
+ },
+ "node_modules/@antv/g-lite": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.0.5.tgz",
+ "integrity": "sha512-IeD7L10MOofNg302Zrru09zjNczCyOAC6mFLjHQlkYCQRtcU04zn32pTxCDy7xRkLHlhAK1mlymBqzeRMkmrRg==",
+ "dependencies": {
+ "@antv/g-math": "3.0.0",
+ "@antv/util": "^3.3.5",
+ "d3-color": "^3.1.0",
+ "eventemitter3": "^5.0.1",
+ "gl-matrix": "^3.4.3",
+ "rbush": "^3.0.1",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-math": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-3.0.0.tgz",
+ "integrity": "sha512-AkmiNIEL1vgqTPeGY2wtsMdBBqKFwF7SKSgs+D1iOS/rqYMsXdhp/HvtuQ5tx/HdawE/ZzTiicIYopc520ADZw==",
+ "dependencies": {
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-canvas-path-generator": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.5.tgz",
+ "integrity": "sha512-O1TCCmrzJDWrA9BG2MfPb79zY23a2fOugygeAaj9CElc/rO5ZqZ4lO4NJe4UCHRInTTXJjGwPnIcmX24Gi6O/A==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/g-math": "3.0.0",
+ "@antv/util": "^3.3.5",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-canvas-picker": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.6.tgz",
+ "integrity": "sha512-QD9Z6YA29iJC36mQxd+qSX5tNlQZ41M4nGWY/iepKnOwAf9Rm+X4AgyIxKOrjg/rkRgUv2WR0Dp2eMfKUqm/Ng==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/g-math": "3.0.0",
+ "@antv/g-plugin-canvas-path-generator": "2.0.5",
+ "@antv/g-plugin-canvas-renderer": "2.0.6",
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-canvas-renderer": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.6.tgz",
+ "integrity": "sha512-65uoJ2XJcUeGDYxnMxsGkdvaNNmEy79QEstr//as8hH+ssyUZJhBLgsDnhLqBQWYQGb7fXMPG0rUEesfjGOYkg==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/g-math": "3.0.0",
+ "@antv/g-plugin-canvas-path-generator": "2.0.5",
+ "@antv/g-plugin-image-loader": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-dom-interaction": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.5.tgz",
+ "integrity": "sha512-m4LeXM63d+MqQguCgmZU8TvvfuLlZ9zrtKWtRr6gYhi0+98o/3+pPrluIZhZHdgplH209+nN2JQ/ceoWp4OrZA==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-dragndrop": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.5.tgz",
+ "integrity": "sha512-Ow9BfL4w6er8OhJxilmU4FOQvFyEWSD6ScRWHBmXqY45/8zcMuhTWd2KcMAmxxPMNmtGch4WeJdPurb0beH8DQ==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-html-renderer": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.6.tgz",
+ "integrity": "sha512-dk0GHksBeuZlHFK/ARr6WRXQLuBQtsl7lboYQWXUVTlk+lIFq1n459hpukKokah89bRvnSAuqMVlBqEsyjn+nw==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-plugin-image-loader": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.5.tgz",
+ "integrity": "sha512-TMpwOW4KibMtKOZZVMZHny+LOrWGjl1GP+i3N8sQx97oDaxIoNIB789XriuovKU/S71Y77ZTrqQdldknwWY24A==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g-web-animations-api": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@antv/g-web-animations-api/-/g-web-animations-api-2.0.6.tgz",
+ "integrity": "sha512-sDNkG0umxAgks14sCgumg9PoLkHXszS+T4RGMgFtlRYuXgM4OBZB3EYTa99www5Z4TaUM+Y/rvECn3FKv8Zo4Q==",
+ "dependencies": {
+ "@antv/g-lite": "2.0.5",
+ "@antv/util": "^3.3.5",
+ "tslib": "^2.5.3"
+ }
+ },
+ "node_modules/@antv/g2": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@antv/g2/-/g2-5.2.0.tgz",
+ "integrity": "sha512-wruxga0RdaCtUi2LcJ5qgrBTP37tUwCYbBJYc3R8dW7oywB5ZqUmPWI7qh6lUh2hIS+hGsNsWvVa7vQOQSIeSw==",
+ "dependencies": {
+ "@antv/component": "^2.0.0",
+ "@antv/coord": "^0.4.6",
+ "@antv/event-emitter": "^0.1.3",
+ "@antv/g": "^6.0.0",
+ "@antv/g-canvas": "^2.0.0",
+ "@antv/g-plugin-dragndrop": "^2.0.0",
+ "@antv/path-util": "^3.0.1",
+ "@antv/scale": "^0.4.12",
+ "@antv/util": "^3.3.5",
+ "d3-array": "^3.2.4",
+ "d3-dsv": "^3.0.1",
+ "d3-force": "^3.0.0",
+ "d3-format": "^3.1.0",
+ "d3-geo": "^3.1.0",
+ "d3-hierarchy": "^3.1.2",
+ "d3-path": "^3.1.0",
+ "d3-scale-chromatic": "^3.0.0",
+ "d3-shape": "^3.2.0",
+ "d3-voronoi": "^1.1.4",
+ "flru": "^1.0.2",
+ "fmin": "^0.0.2",
+ "pdfast": "^0.2.0"
+ }
+ },
+ "node_modules/@antv/g2-extension-plot": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@antv/g2-extension-plot/-/g2-extension-plot-0.2.1.tgz",
+ "integrity": "sha512-WNv/LIUNJLwlfG8XXmKUbje9PbImtJqh36UDvuOk/uu+kmP/uMyHAXsBuu0yCOWdQgBVTVwoxszxJOCnY4mVfg==",
+ "dependencies": {
+ "@antv/g2": "^5.1.8",
+ "@antv/util": "^3.3.5",
+ "d3-array": "^3.2.4",
+ "d3-hierarchy": "^3.1.2"
+ }
+ },
+ "node_modules/@antv/path-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@antv/path-util/-/path-util-3.0.1.tgz",
+ "integrity": "sha512-tpvAzMpF9Qm6ik2YSMqICNU5tco5POOW7S4XoxZAI/B0L26adU+Md/SmO0BBo2SpuywKvzPH3hPT3xmoyhr04Q==",
+ "dependencies": {
+ "gl-matrix": "^3.1.0",
+ "lodash-es": "^4.17.21",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/@antv/s2": {
+ "version": "2.0.0-next.24",
+ "resolved": "https://registry.npmjs.org/@antv/s2/-/s2-2.0.0-next.24.tgz",
+ "integrity": "sha512-qUEbz+GPZOs4FPp792X1spAo2NQlr0hJpvpK1YpsLjI5Whg5eV/TfzbPJXBz1LyH68NSCY8Sqk6xUj9WtB0xAw==",
+ "dependencies": {
+ "@antv/event-emitter": "^0.1.3",
+ "@antv/g": "^6.0.6",
+ "@antv/g-canvas": "^2.0.7",
+ "@antv/g-lite": "^2.0.5",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^1.3.2",
+ "d3-timer": "^1.0.9",
+ "decimal.js": "^10.4.3",
+ "lodash": "^4.17.21",
+ "tinycolor2": "^1.6.0"
+ }
+ },
+ "node_modules/@antv/s2-react": {
+ "version": "2.0.0-next.23",
+ "resolved": "https://registry.npmjs.org/@antv/s2-react/-/s2-react-2.0.0-next.23.tgz",
+ "integrity": "sha512-/h/pSyaQLv62DHwnieqr4jFQXaI82f6Y3V3WKeTzW9ckJbg19+HC+RZ9kuyMcQNS8RjRz3PcNMf52R5ggJCaCQ==",
+ "dependencies": {
+ "ahooks": "^3.8.0",
+ "classnames": "^2.5.1",
+ "lodash": "^4.17.21",
+ "react-beautiful-dnd": "^13.1.1"
+ },
+ "peerDependencies": {
+ "@ant-design/icons": ">=4.7.0",
+ "@antv/s2": "^2.0.0-next.1",
+ "antd": "^5.0.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@antv/s2/node_modules/d3-color": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+ "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
+ },
+ "node_modules/@antv/s2/node_modules/d3-interpolate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "dependencies": {
+ "d3-color": "1"
+ }
+ },
+ "node_modules/@antv/s2/node_modules/d3-timer": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+ "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
+ },
+ "node_modules/@antv/scale": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.4.16.tgz",
+ "integrity": "sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw==",
+ "dependencies": {
+ "@antv/util": "^3.3.7",
+ "color-string": "^1.5.5",
+ "fecha": "^4.2.1"
+ }
+ },
+ "node_modules/@antv/util": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.7.tgz",
+ "integrity": "sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "gl-matrix": "^3.3.0",
+ "tslib": "^2.3.1"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.24.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
@@ -583,9 +964,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.24.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz",
- "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz",
+ "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -634,9 +1015,9 @@
}
},
"node_modules/@dagrejs/dagre": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.2.tgz",
- "integrity": "sha512-F09dphqvHsbe/6C2t2unbmpr5q41BNPEfJCdn8Z7aEBpVSy/zFQ/b4SWsweQjWNsYMDvE2ffNUN8X0CeFsEGNw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.3.tgz",
+ "integrity": "sha512-umT7fBPECI4zgxxXW07H3vJN7W1WZcnBjk613eOEAKcwoFrYNyMZO+1SHmoC8zPZWR18DquK2wRUp9VHUE+94g==",
"dependencies": {
"@dagrejs/graphlib": "2.2.2"
}
@@ -861,9 +1242,9 @@
"dev": true
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
- "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
"cpu": [
"ppc64"
],
@@ -877,9 +1258,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
- "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
"cpu": [
"arm"
],
@@ -893,9 +1274,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
- "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
"cpu": [
"arm64"
],
@@ -909,9 +1290,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
- "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
"cpu": [
"x64"
],
@@ -925,9 +1306,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
- "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
"cpu": [
"arm64"
],
@@ -941,9 +1322,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
- "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
"cpu": [
"x64"
],
@@ -957,9 +1338,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
- "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
"cpu": [
"arm64"
],
@@ -973,9 +1354,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
- "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
"cpu": [
"x64"
],
@@ -989,9 +1370,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
- "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
"cpu": [
"arm"
],
@@ -1005,9 +1386,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
- "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
"cpu": [
"arm64"
],
@@ -1021,9 +1402,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
- "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
"cpu": [
"ia32"
],
@@ -1037,9 +1418,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
- "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
"cpu": [
"loong64"
],
@@ -1053,9 +1434,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
- "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
"cpu": [
"mips64el"
],
@@ -1069,9 +1450,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
- "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
"cpu": [
"ppc64"
],
@@ -1085,9 +1466,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
- "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
"cpu": [
"riscv64"
],
@@ -1101,9 +1482,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
- "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
"cpu": [
"s390x"
],
@@ -1117,9 +1498,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
- "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
"cpu": [
"x64"
],
@@ -1133,9 +1514,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
- "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
"cpu": [
"x64"
],
@@ -1149,9 +1530,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
- "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
"cpu": [
"x64"
],
@@ -1165,9 +1546,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
- "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
"cpu": [
"x64"
],
@@ -1181,9 +1562,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
- "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
"cpu": [
"arm64"
],
@@ -1197,9 +1578,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
- "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
"cpu": [
"ia32"
],
@@ -1213,9 +1594,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
- "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
"cpu": [
"x64"
],
@@ -1307,32 +1688,32 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz",
- "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.3.tgz",
+ "integrity": "sha512-1ZpCvYf788/ZXOhRQGFxnYQOVgeU+pi0i+d0Ow34La7qjIXETi6RNswGVKkA6KcDO8/+Ysu2E/CeUmmeEBDvTg==",
"dev": true,
"dependencies": {
- "@floating-ui/utils": "^0.2.0"
+ "@floating-ui/utils": "^0.2.3"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.6.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
- "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.6.tgz",
+ "integrity": "sha512-qiTYajAnh3P+38kECeffMSQgbvXty2VB6rS+42iWR4FPIlZjLK84E9qtLnMTLIpPz2znD/TaFqaiavMUrS+Hcw==",
"dev": true,
"dependencies": {
"@floating-ui/core": "^1.0.0",
- "@floating-ui/utils": "^0.2.0"
+ "@floating-ui/utils": "^0.2.3"
}
},
"node_modules/@floating-ui/react": {
- "version": "0.26.14",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.14.tgz",
- "integrity": "sha512-I2EhfezC+H0WfkMEkCcF9+++PU1Wq08bDKhHHGIoBZVCciiftEQHgrSI4dTUTsa7446SiIVW0gWATliIlVNgfg==",
+ "version": "0.26.18",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.18.tgz",
+ "integrity": "sha512-enDDX09Jpi3kmhcXXpvs+fvRXOfBj1jUV2KF6uDMf5HjS+SOZJzNTFUW71lKbFcxz0BkmQqwbvqdmHIxMq/fyQ==",
"dev": true,
"dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@floating-ui/utils": "^0.2.0",
+ "@floating-ui/react-dom": "^2.1.0",
+ "@floating-ui/utils": "^0.2.3",
"tabbable": "^6.0.0"
},
"peerDependencies": {
@@ -1341,9 +1722,9 @@
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz",
- "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz",
+ "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==",
"dev": true,
"dependencies": {
"@floating-ui/dom": "^1.0.0"
@@ -1354,9 +1735,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
- "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.3.tgz",
+ "integrity": "sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww==",
"dev": true
},
"node_modules/@humanwhocodes/config-array": {
@@ -1416,7 +1797,7 @@
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"dev": true,
"dependencies": {
@@ -1433,7 +1814,7 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
"engines": {
@@ -1445,7 +1826,7 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"engines": {
@@ -1457,13 +1838,13 @@
},
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
"dependencies": {
@@ -1480,7 +1861,7 @@
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"dependencies": {
@@ -1495,7 +1876,7 @@
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
"dependencies": {
@@ -1616,63 +1997,67 @@
"node": ">=10"
}
},
+ "node_modules/@ljharb/resumer": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz",
+ "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==",
+ "dependencies": {
+ "@ljharb/through": "^2.3.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/@ljharb/through": {
+ "version": "2.3.13",
+ "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz",
+ "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/@mantine/code-highlight": {
- "version": "7.9.1",
- "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.9.1.tgz",
- "integrity": "sha512-4FEEcfz4mMx/DzIMfnJGp+CXCyITVFwrGL0Hh35OeL/E/OIRejvHDM8TUgmoWMqGspK+jtYf2XiOAVQKBGBgDg==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.11.0.tgz",
+ "integrity": "sha512-IPx0FYcvWBeRElw5HUO0FwtR4JgTGuBd8gHKzHQyfplnnaNHYmLEncnhBtljzVriQFVpqzvWetfV/TWczAqc/g==",
"dev": true,
"dependencies": {
- "clsx": "2.1.0",
+ "clsx": "^2.1.1",
"highlight.js": "^11.9.0"
},
"peerDependencies": {
- "@mantine/core": "7.9.1",
- "@mantine/hooks": "7.9.1",
+ "@mantine/core": "7.11.0",
+ "@mantine/hooks": "7.11.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
},
- "node_modules/@mantine/code-highlight/node_modules/clsx": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
- "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@mantine/core": {
- "version": "7.9.1",
- "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.9.1.tgz",
- "integrity": "sha512-UXK11t1fAQ2ROQ9HTIZfyU52XdwS8sFJ2SRUh5uHMWSahJo3wTdKzaCvYN7wg+ONM9p6ENT0hC0dfv5qXoKU4w==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.11.0.tgz",
+ "integrity": "sha512-yw2Llww9mw8rDWZtucdEuvkqqjHdreUibos7JCUpejL721FW1Tn9L91nsxO/YQFSS7jn4Q0CP+1YbQ/PMULmwA==",
"dev": true,
"dependencies": {
"@floating-ui/react": "^0.26.9",
- "clsx": "2.1.0",
+ "clsx": "^2.1.1",
"react-number-format": "^5.3.1",
"react-remove-scroll": "^2.5.7",
"react-textarea-autosize": "8.5.3",
"type-fest": "^4.12.0"
},
"peerDependencies": {
- "@mantine/hooks": "7.9.1",
+ "@mantine/hooks": "7.11.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
},
- "node_modules/@mantine/core/node_modules/clsx": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
- "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@mantine/core/node_modules/type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
+ "version": "4.20.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
+ "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
"dev": true,
"engines": {
"node": ">=16"
@@ -1682,45 +2067,152 @@
}
},
"node_modules/@mantine/hooks": {
- "version": "7.9.1",
- "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.9.1.tgz",
- "integrity": "sha512-nb2Ar+2HfGxLjGZgObapeUeqcQsUWJ+rvj4X2KNTUy3+YpvLIMD3CqREowWHF7/5OTGh4BCyBqQNZ9JFpnMeHQ==",
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.11.0.tgz",
+ "integrity": "sha512-T3472GhUXFhuhXUHlxjHv0wfb73lFyNuaw631c7Ddtgvewq0WKtNqYd7j/Zz/k02DuS3r0QXA7e12/XgqHBZjg==",
"dev": true,
"peerDependencies": {
"react": "^18.2.0"
}
},
+ "node_modules/@mdx-js/mdx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/@mdx-js/mdx/-/mdx-3.0.1.tgz",
+ "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdx": "^2.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-build-jsx": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-estree": "^3.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "markdown-extensions": "^2.0.0",
+ "periscopic": "^3.0.0",
+ "remark-mdx": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "source-map": "^0.7.0",
+ "unified": "^11.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/@mdx-js/mdx/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/@mdx-js/mdx/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@mdx-js/react": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/@mdx-js/react/-/react-3.0.1.tgz",
+ "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdx": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16",
+ "react": ">=16"
+ }
+ },
+ "node_modules/@mdx-js/rollup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/@mdx-js/rollup/-/rollup-3.0.1.tgz",
+ "integrity": "sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A==",
+ "dev": true,
+ "dependencies": {
+ "@mdx-js/mdx": "^3.0.0",
+ "@rollup/pluginutils": "^5.0.0",
+ "source-map": "^0.7.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "rollup": ">=2"
+ }
+ },
+ "node_modules/@mdx-js/rollup/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/@microsoft/tsdoc": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz",
- "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==",
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz",
+ "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==",
"dev": true
},
"node_modules/@microsoft/tsdoc-config": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz",
- "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==",
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz",
+ "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==",
"dev": true,
"dependencies": {
- "@microsoft/tsdoc": "0.14.2",
- "ajv": "~6.12.6",
+ "@microsoft/tsdoc": "0.15.0",
+ "ajv": "~8.12.0",
"jju": "~1.4.0",
- "resolve": "~1.19.0"
+ "resolve": "~1.22.2"
}
},
- "node_modules/@microsoft/tsdoc-config/node_modules/resolve": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
- "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
+ "node_modules/@microsoft/tsdoc-config/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.1.0",
- "path-parse": "^1.0.6"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/@modyfi/vite-plugin-yaml": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.1.0.tgz",
@@ -1772,7 +2264,7 @@
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
"optional": true,
@@ -1786,15 +2278,26 @@
"integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
"dev": true
},
- "node_modules/@rc-component/color-picker": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.4.1.tgz",
- "integrity": "sha512-vh5EWqnsayZa/JwUznqDaPJz39jznx/YDbyBuVJntv735tKXKwEUZZb2jYEldOg+NKWZwtALjGMrNeGBmqFoEw==",
+ "node_modules/@rc-component/async-validator": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz",
+ "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==",
"dependencies": {
- "@babel/runtime": "^7.10.1",
- "@ctrl/tinycolor": "^3.6.0",
+ "@babel/runtime": "^7.24.4"
+ },
+ "engines": {
+ "node": ">=14.x"
+ }
+ },
+ "node_modules/@rc-component/color-picker": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.5.3.tgz",
+ "integrity": "sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.6",
+ "@ctrl/tinycolor": "^3.6.1",
"classnames": "^2.2.6",
- "rc-util": "^5.30.0"
+ "rc-util": "^5.38.1"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -1860,13 +2363,13 @@
}
},
"node_modules/@rc-component/tour": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.10.0.tgz",
- "integrity": "sha512-voV0BKaTJbewB9LLgAHQ7tAGG7rgDkKQkZo82xw2gIk542hY+o7zwoqdN16oHhIKk7eG/xi+mdXrONT62Dt57A==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.0.tgz",
+ "integrity": "sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g==",
"dependencies": {
"@babel/runtime": "^7.18.0",
"@rc-component/portal": "^1.0.0-9",
- "@rc-component/trigger": "^1.3.6",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "^2.3.2",
"rc-util": "^5.24.4"
},
@@ -1879,9 +2382,9 @@
}
},
"node_modules/@rc-component/trigger": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.18.3.tgz",
- "integrity": "sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.0.tgz",
+ "integrity": "sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA==",
"dependencies": {
"@babel/runtime": "^7.23.2",
"@rc-component/portal": "^1.1.0",
@@ -1899,11 +2402,11 @@
}
},
"node_modules/@reactflow/background": {
- "version": "11.3.13",
- "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.13.tgz",
- "integrity": "sha512-hkvpVEhgvfTDyCvdlitw4ioKCYLaaiRXnuEG+1QM3Np+7N1DiWF1XOv5I8AFyNoJL07yXEkbECUTsHvkBvcG5A==",
+ "version": "11.3.14",
+ "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz",
+ "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==",
"dependencies": {
- "@reactflow/core": "11.11.3",
+ "@reactflow/core": "11.11.4",
"classcat": "^5.0.3",
"zustand": "^4.4.1"
},
@@ -1913,11 +2416,11 @@
}
},
"node_modules/@reactflow/controls": {
- "version": "11.2.13",
- "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.13.tgz",
- "integrity": "sha512-3xgEg6ALIVkAQCS4NiBjb7ad8Cb3D8CtA7Vvl4Hf5Ar2PIVs6FOaeft9s2iDZGtsWP35ECDYId1rIFVhQL8r+A==",
+ "version": "11.2.14",
+ "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz",
+ "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==",
"dependencies": {
- "@reactflow/core": "11.11.3",
+ "@reactflow/core": "11.11.4",
"classcat": "^5.0.3",
"zustand": "^4.4.1"
},
@@ -1927,9 +2430,9 @@
}
},
"node_modules/@reactflow/core": {
- "version": "11.11.3",
- "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.3.tgz",
- "integrity": "sha512-+adHdUa7fJSEM93fWfjQwyWXeI92a1eLKwWbIstoCakHpL8UjzwhEh6sn+mN2h/59MlVI7Ehr1iGTt3MsfcIFA==",
+ "version": "11.11.4",
+ "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz",
+ "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==",
"dependencies": {
"@types/d3": "^7.4.0",
"@types/d3-drag": "^3.0.1",
@@ -1947,11 +2450,11 @@
}
},
"node_modules/@reactflow/minimap": {
- "version": "11.7.13",
- "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.13.tgz",
- "integrity": "sha512-m2MvdiGSyOu44LEcERDEl1Aj6x//UQRWo3HEAejNU4HQTlJnYrSN8tgrYF8TxC1+c/9UdyzQY5VYgrTwW4QWdg==",
+ "version": "11.7.14",
+ "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz",
+ "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==",
"dependencies": {
- "@reactflow/core": "11.11.3",
+ "@reactflow/core": "11.11.4",
"@types/d3-selection": "^3.0.3",
"@types/d3-zoom": "^3.0.1",
"classcat": "^5.0.3",
@@ -1965,11 +2468,11 @@
}
},
"node_modules/@reactflow/node-resizer": {
- "version": "2.2.13",
- "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.13.tgz",
- "integrity": "sha512-X7ceQ2s3jFLgbkg03n2RYr4hm3jTVrzkW2W/8ANv/SZfuVmF8XJxlERuD8Eka5voKqLda0ywIZGAbw9GoHLfUQ==",
+ "version": "2.2.14",
+ "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz",
+ "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==",
"dependencies": {
- "@reactflow/core": "11.11.3",
+ "@reactflow/core": "11.11.4",
"classcat": "^5.0.4",
"d3-drag": "^3.0.0",
"d3-selection": "^3.0.0",
@@ -1981,11 +2484,11 @@
}
},
"node_modules/@reactflow/node-toolbar": {
- "version": "1.3.13",
- "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.13.tgz",
- "integrity": "sha512-aknvNICO10uWdthFSpgD6ctY/CTBeJUMV9co8T9Ilugr08Nb89IQ4uD0dPmr031ewMQxixtYIkw+sSDDzd2aaQ==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz",
+ "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==",
"dependencies": {
- "@reactflow/core": "11.11.3",
+ "@reactflow/core": "11.11.4",
"classcat": "^5.0.3",
"zustand": "^4.4.1"
},
@@ -2008,9 +2511,9 @@
}
},
"node_modules/@remix-run/router": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz",
- "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz",
+ "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==",
"engines": {
"node": ">=14.0.0"
}
@@ -2260,20 +2763,20 @@
"dev": true
},
"node_modules/@swc-jotai/react-refresh": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@swc-jotai/react-refresh/-/react-refresh-0.1.0.tgz",
- "integrity": "sha512-CWV4W06GdfQo3cW3CoUM2fp7avH4Z/suR7SvECNJnQbr6Sa9U3p7o10nXjNv2zT6z09bbNUPM55HBw5Nwd24Iw==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@swc-jotai/react-refresh/-/react-refresh-0.1.1.tgz",
+ "integrity": "sha512-Zke+Wd8tJIpGkzXhoWA9yLVcfV57hSef2EE5K/Cp1n3A1yl9E+Umpz/b1OyIuwXAALeiHah+MQM4JtXEN0tMsg==",
"dev": true
},
"node_modules/@swc/core": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.6.tgz",
- "integrity": "sha512-0UC0NkgWoqd9fkHPn1NTkTsQucW8iaA1fujK2OLGp40Zg5Vr7nrwBlqruX9expVMggS4rv/3vZSAGzRm80VQ/g==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.6.6.tgz",
+ "integrity": "sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "@swc/counter": "^0.1.2",
- "@swc/types": "^0.1.5"
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.9"
},
"engines": {
"node": ">=10"
@@ -2283,19 +2786,19 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.5.6",
- "@swc/core-darwin-x64": "1.5.6",
- "@swc/core-linux-arm-gnueabihf": "1.5.6",
- "@swc/core-linux-arm64-gnu": "1.5.6",
- "@swc/core-linux-arm64-musl": "1.5.6",
- "@swc/core-linux-x64-gnu": "1.5.6",
- "@swc/core-linux-x64-musl": "1.5.6",
- "@swc/core-win32-arm64-msvc": "1.5.6",
- "@swc/core-win32-ia32-msvc": "1.5.6",
- "@swc/core-win32-x64-msvc": "1.5.6"
+ "@swc/core-darwin-arm64": "1.6.6",
+ "@swc/core-darwin-x64": "1.6.6",
+ "@swc/core-linux-arm-gnueabihf": "1.6.6",
+ "@swc/core-linux-arm64-gnu": "1.6.6",
+ "@swc/core-linux-arm64-musl": "1.6.6",
+ "@swc/core-linux-x64-gnu": "1.6.6",
+ "@swc/core-linux-x64-musl": "1.6.6",
+ "@swc/core-win32-arm64-msvc": "1.6.6",
+ "@swc/core-win32-ia32-msvc": "1.6.6",
+ "@swc/core-win32-x64-msvc": "1.6.6"
},
"peerDependencies": {
- "@swc/helpers": "^0.5.0"
+ "@swc/helpers": "*"
},
"peerDependenciesMeta": {
"@swc/helpers": {
@@ -2304,9 +2807,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.6.tgz",
- "integrity": "sha512-U4szqU03cvZOTXug5o+HQbbg16ZGwANtr7LELjw4hmWBqSTcbBVXgocyBMm1L4ngFIsqJc33D+urnnaae/NfMg==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.6.tgz",
+ "integrity": "sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==",
"cpu": [
"arm64"
],
@@ -2320,9 +2823,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.6.tgz",
- "integrity": "sha512-k4jymBHYkbfGw8DT4bLtVsAckpp2dblyImQHRPScpvDyS4jUo4174mgy/dEnFmZVLTbuZAY876zBQyH+eJ3p4A==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.6.6.tgz",
+ "integrity": "sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==",
"cpu": [
"x64"
],
@@ -2336,9 +2839,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.6.tgz",
- "integrity": "sha512-ijwGEdP18vS8YmvHUIfKYDFQ5mQ1GtCxhJp+IcJlrBJE+/eSJVvEVF5WwXFQ+Hzj6tr/OOub8UcRNUaQokjh3A==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.6.tgz",
+ "integrity": "sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==",
"cpu": [
"arm"
],
@@ -2352,9 +2855,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.6.tgz",
- "integrity": "sha512-6YD942jsDm64wgGNew4Q1Yh8CRI4QKWTqjzCkvlZCGV6aOw5B663WDSnUEKIoN4egeLcvSiqYYGlKMfbkkfNMw==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.6.tgz",
+ "integrity": "sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==",
"cpu": [
"arm64"
],
@@ -2368,9 +2871,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.6.tgz",
- "integrity": "sha512-Jntdd/HQAgRSQFUpmXjiU00BG08Yl5G1pgYDBXG2mPfkndGGgapRT8JPsnzfQujh9nOdWMIQDnCGU+mB4NY2Dg==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.6.tgz",
+ "integrity": "sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==",
"cpu": [
"arm64"
],
@@ -2384,9 +2887,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.6.tgz",
- "integrity": "sha512-cdaAyAZJvYCx0u9uadUVe4VVJOEC6GeVO5uTGo/vybCsKFn2Z8WVjGVTeHbxdp7pH2II9MRTySIv1eCCq70SOQ==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.6.tgz",
+ "integrity": "sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==",
"cpu": [
"x64"
],
@@ -2400,9 +2903,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.6.tgz",
- "integrity": "sha512-mGIs4d6/Hv/5EbP2d+2YNmIj9U5U/6CiPZsTyahQcEl+vJjNsmwDJoLex36LhxoGIUmVbbgk6cHj5DoHWNl0bQ==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.6.tgz",
+ "integrity": "sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==",
"cpu": [
"x64"
],
@@ -2416,9 +2919,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.6.tgz",
- "integrity": "sha512-ViiS2pUXy/J9RZWJXQJMuDKid0lqH9fu2piFi3IHnMWyyWPla5qHYijkeODwrdBsjc30NAHjV6jfka5SZduqiw==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.6.tgz",
+ "integrity": "sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==",
"cpu": [
"arm64"
],
@@ -2432,9 +2935,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.6.tgz",
- "integrity": "sha512-Ju5z65Nda8oYjt2Z4CGbuBLxM+98TcewLogutI69rBo5S70xunadp4ANIHcr9fZlTu/IX9mxZmUpOaHtb+/TfA==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.6.tgz",
+ "integrity": "sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==",
"cpu": [
"ia32"
],
@@ -2448,9 +2951,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.6.tgz",
- "integrity": "sha512-pkqJsdrgxyFYJA+g9a3zbl+AoxYoBtv+Rji1Fw4+Sq7CsSMWboayWNN5fKRiyi3u3nG8kxqyGi51PsKy2G4Vpg==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.6.tgz",
+ "integrity": "sha512-WAP0JoCTfgeYKgOeYJoJV4ZS0sQUmU3OwvXa2dYYtMLF7zsNqOiW4niU7QlThBHgUv/qNZm2p6ITEgh3w1cltw==",
"cpu": [
"x64"
],
@@ -2470,14 +2973,51 @@
"dev": true
},
"node_modules/@swc/types": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz",
- "integrity": "sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==",
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.9.tgz",
+ "integrity": "sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==",
"dev": true,
"dependencies": {
"@swc/counter": "^0.1.3"
}
},
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmmirror.com/@tailwindcss/typography/-/typography-0.5.13.tgz",
+ "integrity": "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==",
+ "dev": true,
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@types/acorn": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/@types/acorn/-/acorn-4.0.6.tgz",
+ "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/base16": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/base16/-/base16-1.0.5.tgz",
@@ -2598,9 +3138,9 @@
}
},
"node_modules/@types/d3-force": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz",
- "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA=="
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
+ "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="
},
"node_modules/@types/d3-format": {
"version": "3.0.4",
@@ -2721,16 +3261,33 @@
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/geojson": {
"version": "7946.0.14",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
"integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg=="
},
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
"integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "dev": true,
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
@@ -2748,12 +3305,6 @@
"integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
"dev": true
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
"node_modules/@types/lodash": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz",
@@ -2769,6 +3320,20 @@
"@types/lodash": "*"
}
},
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdx": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmmirror.com/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="
+ },
"node_modules/@types/ms": {
"version": "0.7.34",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
@@ -2776,9 +3341,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.12.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
- "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
+ "version": "20.14.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
+ "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -2793,14 +3358,12 @@
"node_modules/@types/prop-types": {
"version": "15.7.12",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
- "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
- "devOptional": true
+ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
},
"node_modules/@types/react": {
- "version": "18.3.2",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz",
- "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==",
- "devOptional": true,
+ "version": "18.3.3",
+ "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -2815,6 +3378,25 @@
"@types/react": "*"
}
},
+ "node_modules/@types/react-redux": {
+ "version": "7.1.33",
+ "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz",
+ "integrity": "sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==",
+ "dependencies": {
+ "@types/hoist-non-react-statics": "^3.3.0",
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0",
+ "redux": "^4.0.0"
+ }
+ },
+ "node_modules/@types/react-redux/node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
"node_modules/@types/styled-components": {
"version": "5.1.34",
"resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz",
@@ -2831,17 +3413,23 @@
"resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
"integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
},
+ "node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+ "dev": true
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
- "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz",
+ "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/type-utils": "7.9.0",
- "@typescript-eslint/utils": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/scope-manager": "7.14.1",
+ "@typescript-eslint/type-utils": "7.14.1",
+ "@typescript-eslint/utils": "7.14.1",
+ "@typescript-eslint/visitor-keys": "7.14.1",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -2865,15 +3453,15 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz",
- "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz",
+ "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/typescript-estree": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/scope-manager": "7.14.1",
+ "@typescript-eslint/types": "7.14.1",
+ "@typescript-eslint/typescript-estree": "7.14.1",
+ "@typescript-eslint/visitor-keys": "7.14.1",
"debug": "^4.3.4"
},
"engines": {
@@ -2893,13 +3481,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz",
- "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz",
+ "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0"
+ "@typescript-eslint/types": "7.14.1",
+ "@typescript-eslint/visitor-keys": "7.14.1"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -2910,13 +3498,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz",
- "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz",
+ "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.9.0",
- "@typescript-eslint/utils": "7.9.0",
+ "@typescript-eslint/typescript-estree": "7.14.1",
+ "@typescript-eslint/utils": "7.14.1",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -2937,9 +3525,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
- "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz",
+ "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==",
"dev": true,
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -2950,13 +3538,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz",
- "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz",
+ "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/types": "7.14.1",
+ "@typescript-eslint/visitor-keys": "7.14.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -2978,15 +3566,15 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz",
- "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz",
+ "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/typescript-estree": "7.9.0"
+ "@typescript-eslint/scope-manager": "7.14.1",
+ "@typescript-eslint/types": "7.14.1",
+ "@typescript-eslint/typescript-estree": "7.14.1"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -3000,12 +3588,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz",
- "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz",
+ "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/types": "7.14.1",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
@@ -3036,12 +3624,12 @@
"dev": true
},
"node_modules/@vitejs/plugin-react-swc": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz",
- "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz",
+ "integrity": "sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==",
"dev": true,
"dependencies": {
- "@swc/core": "^1.3.107"
+ "@swc/core": "^1.5.7"
},
"peerDependencies": {
"vite": "^4 || ^5"
@@ -3239,9 +3827,9 @@
}
},
"node_modules/ahooks": {
- "version": "3.7.11",
- "resolved": "https://registry.npmjs.org/ahooks/-/ahooks-3.7.11.tgz",
- "integrity": "sha512-BfSq7HJ9wk/7a2vX7WbLdwzHyQHmbNe21ipX1PfIzssXIzQfAl79WVJ9GjZaqNl4PFPsJusj/Xjg2OF+gIgGaQ==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ahooks/-/ahooks-3.8.0.tgz",
+ "integrity": "sha512-M01m+mxLRNNeJ/PCT3Fom26UyreTj6oMqJBetUrJnK4VNI5j6eMA543Xxo53OBXn6XibA2FXKcCCgrT6YCTtKQ==",
"dependencies": {
"@babel/runtime": "^7.21.0",
"dayjs": "^1.9.1",
@@ -3276,6 +3864,27 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==",
+ "dependencies": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -3328,56 +3937,56 @@
}
},
"node_modules/antd": {
- "version": "5.11.4",
- "resolved": "https://registry.npmjs.org/antd/-/antd-5.11.4.tgz",
- "integrity": "sha512-FuaV/viyZiMlCL1JzdQpSlzPcWcBlGYDAbtj3FM4BgwAso+ge3d4tXkZZG4yZkktUoLvWrcaJObs3Nk32Oiwuw==",
+ "version": "5.18.3",
+ "resolved": "https://registry.npmjs.org/antd/-/antd-5.18.3.tgz",
+ "integrity": "sha512-Dm3P8HBxoo/DiR/QZLj5Mk+rQZsSXxCCArSZACHGiklkkjW6klzlebAElOUr9NyDeFX7UnQ6LVk7vznXlnjTqQ==",
"dependencies": {
- "@ant-design/colors": "^7.0.0",
- "@ant-design/cssinjs": "^1.17.5",
- "@ant-design/icons": "^5.2.6",
- "@ant-design/react-slick": "~1.0.2",
- "@babel/runtime": "^7.18.3",
+ "@ant-design/colors": "^7.0.2",
+ "@ant-design/cssinjs": "^1.21.0",
+ "@ant-design/icons": "^5.3.7",
+ "@ant-design/react-slick": "~1.1.2",
+ "@babel/runtime": "^7.24.7",
"@ctrl/tinycolor": "^3.6.1",
- "@rc-component/color-picker": "~1.4.1",
+ "@rc-component/color-picker": "~1.5.3",
"@rc-component/mutate-observer": "^1.1.0",
- "@rc-component/tour": "~1.10.0",
- "@rc-component/trigger": "^1.18.2",
- "classnames": "^2.3.2",
+ "@rc-component/tour": "~1.15.0",
+ "@rc-component/trigger": "^2.2.0",
+ "classnames": "^2.5.1",
"copy-to-clipboard": "^3.3.3",
- "dayjs": "^1.11.1",
+ "dayjs": "^1.11.11",
"qrcode.react": "^3.1.0",
- "rc-cascader": "~3.20.0",
- "rc-checkbox": "~3.1.0",
- "rc-collapse": "~3.7.1",
- "rc-dialog": "~9.3.4",
- "rc-drawer": "~6.5.2",
- "rc-dropdown": "~4.1.0",
- "rc-field-form": "~1.40.0",
- "rc-image": "~7.5.1",
- "rc-input": "~1.3.6",
- "rc-input-number": "~8.4.0",
- "rc-mentions": "~2.9.1",
- "rc-menu": "~9.12.2",
- "rc-motion": "^2.9.0",
- "rc-notification": "~5.3.0",
- "rc-pagination": "~3.7.0",
- "rc-picker": "~3.14.6",
- "rc-progress": "~3.5.1",
- "rc-rate": "~2.12.0",
+ "rc-cascader": "~3.26.0",
+ "rc-checkbox": "~3.3.0",
+ "rc-collapse": "~3.7.3",
+ "rc-dialog": "~9.5.2",
+ "rc-drawer": "~7.2.0",
+ "rc-dropdown": "~4.2.0",
+ "rc-field-form": "~2.2.1",
+ "rc-image": "~7.9.0",
+ "rc-input": "~1.5.1",
+ "rc-input-number": "~9.1.0",
+ "rc-mentions": "~2.14.0",
+ "rc-menu": "~9.14.0",
+ "rc-motion": "^2.9.2",
+ "rc-notification": "~5.6.0",
+ "rc-pagination": "~4.0.4",
+ "rc-picker": "~4.5.0",
+ "rc-progress": "~4.0.0",
+ "rc-rate": "~2.13.0",
"rc-resize-observer": "^1.4.0",
- "rc-segmented": "~2.2.2",
- "rc-select": "~14.10.0",
- "rc-slider": "~10.4.0",
+ "rc-segmented": "~2.3.0",
+ "rc-select": "~14.14.0",
+ "rc-slider": "~10.6.2",
"rc-steps": "~6.0.1",
"rc-switch": "~4.1.0",
- "rc-table": "~7.36.0",
- "rc-tabs": "~12.13.1",
- "rc-textarea": "~1.5.3",
- "rc-tooltip": "~6.1.2",
- "rc-tree": "~5.8.2",
- "rc-tree-select": "~5.15.0",
- "rc-upload": "~4.3.5",
- "rc-util": "^5.38.1",
+ "rc-table": "~7.45.7",
+ "rc-tabs": "~15.1.1",
+ "rc-textarea": "~1.7.0",
+ "rc-tooltip": "~6.2.0",
+ "rc-tree": "~5.8.8",
+ "rc-tree-select": "~5.21.0",
+ "rc-upload": "~4.5.2",
+ "rc-util": "^5.43.0",
"scroll-into-view-if-needed": "^3.1.0",
"throttle-debounce": "^5.0.0"
},
@@ -3391,12 +4000,12 @@
}
},
"node_modules/antd/node_modules/rc-field-form": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.40.0.tgz",
- "integrity": "sha512-OM3N01X2BYFGJDJcwpk9/BBtlwgveE7eh2SQAKIxVCt9KVWlODYJ9ypTHQdxchfDbeJKJKxMBFXlLAmyvlgPHg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.2.1.tgz",
+ "integrity": "sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA==",
"dependencies": {
"@babel/runtime": "^7.18.0",
- "async-validator": "^4.1.0",
+ "@rc-component/async-validator": "^5.0.3",
"rc-util": "^5.32.2"
},
"engines": {
@@ -3407,6 +4016,31 @@
"react-dom": ">=16.9.0"
}
},
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -3425,7 +4059,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
"integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"is-array-buffer": "^3.0.4"
@@ -3540,23 +4173,25 @@
}
},
"node_modules/array.prototype.tosorted": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
- "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.1.0",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
"es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/arraybuffer.prototype.slice": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
"integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
- "dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"call-bind": "^1.0.5",
@@ -3583,10 +4218,20 @@
"node": "*"
}
},
+ "node_modules/astring": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmmirror.com/astring/-/astring-1.8.6.tgz",
+ "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
+ "dev": true,
+ "bin": {
+ "astring": "bin/astring"
+ }
+ },
"node_modules/async-validator": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+ "peer": true
},
"node_modules/asynckit": {
"version": "0.4.0",
@@ -3594,11 +4239,47 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
+ "node_modules/autoprefixer": {
+ "version": "10.4.19",
+ "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz",
+ "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.23.0",
+ "caniuse-lite": "^1.0.30001599",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
"dependencies": {
"possible-typed-array-names": "^1.0.0"
},
@@ -3610,9 +4291,9 @@
}
},
"node_modules/axios": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
- "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
+ "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -3635,11 +4316,20 @@
"npm": ">=6"
}
},
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base16": {
"version": "1.0.0",
@@ -3647,6 +4337,18 @@
"integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==",
"dev": true
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -3657,17 +4359,49 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
+ "node_modules/browserslist": {
+ "version": "4.23.1",
+ "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.1.tgz",
+ "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001629",
+ "electron-to-chromium": "^1.4.796",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.16"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -3687,7 +4421,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -3717,6 +4450,23 @@
"node": ">=6"
}
},
+ "node_modules/camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/camelize": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
@@ -3725,6 +4475,48 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001640",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz",
+ "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==",
+ "dependencies": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/chai": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
@@ -3759,6 +4551,46 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chardet": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
@@ -3777,7 +4609,43 @@
"node": "*"
}
},
- "node_modules/classcat": {
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/classcat": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz",
"integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w=="
@@ -3836,6 +4704,16 @@
"node": ">=6"
}
},
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/color": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
@@ -3861,14 +4739,12 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "dev": true,
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
@@ -3901,6 +4777,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/command-line-args": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
@@ -3917,12 +4803,11 @@
}
},
"node_modules/commander": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
- "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==",
- "dev": true,
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"engines": {
- "node": ">=18"
+ "node": ">= 10"
}
},
"node_modules/complex.js": {
@@ -3945,8 +4830,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/concat-stream": {
"version": "1.6.2",
@@ -3969,6 +4853,11 @@
"integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==",
"dev": true
},
+ "node_modules/contour_plot": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/contour_plot/-/contour_plot-0.0.1.tgz",
+ "integrity": "sha512-Nil2HI76Xux6sVGORvhSS8v66m+/h5CwFkBJDO+U5vWaMdNC0yXNCsGDPbzPhvqOEU5koebhdEvD372LI+IyLw=="
+ },
"node_modules/convert-source-map": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
@@ -4019,6 +4908,14 @@
"node": ">= 8"
}
},
+ "node_modules/css-box-model": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
+ "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==",
+ "dependencies": {
+ "tiny-invariant": "^1.0.6"
+ }
+ },
"node_modules/css-color-keywords": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
@@ -4037,6 +4934,18 @@
"postcss-value-parser": "^4.0.2"
}
},
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -4081,6 +4990,41 @@
"node": ">=12"
}
},
+ "node_modules/d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "dependencies": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json.js",
+ "csv2tsv": "bin/dsv2dsv.js",
+ "dsv2dsv": "bin/dsv2dsv.js",
+ "dsv2json": "bin/dsv2json.js",
+ "json2csv": "bin/json2dsv.js",
+ "json2dsv": "bin/json2dsv.js",
+ "json2tsv": "bin/json2dsv.js",
+ "tsv2csv": "bin/dsv2dsv.js",
+ "tsv2json": "bin/dsv2json.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dsv/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/d3-ease": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
@@ -4089,6 +5033,46 @@
"node": ">=12"
}
},
+ "node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+ "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/d3-interpolate": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
@@ -4100,6 +5084,34 @@
"node": ">=12"
}
},
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/d3-selection": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
@@ -4108,6 +5120,17 @@
"node": ">=12"
}
},
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/d3-timer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
@@ -4134,6 +5157,11 @@
"d3-selection": "2 - 3"
}
},
+ "node_modules/d3-voronoi": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
+ "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg=="
+ },
"node_modules/d3-zoom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
@@ -4153,7 +5181,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
"integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
@@ -4170,7 +5197,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
"integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -4187,7 +5213,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
"integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
@@ -4206,9 +5231,9 @@
"integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
},
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
@@ -4222,11 +5247,32 @@
}
}
},
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "dev": true,
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/deep-eql": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
@@ -4240,29 +5286,16 @@
}
},
"node_modules/deep-equal": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
- "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==",
- "dev": true,
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
+ "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.5",
- "es-get-iterator": "^1.1.3",
- "get-intrinsic": "^1.2.2",
"is-arguments": "^1.1.1",
- "is-array-buffer": "^3.0.2",
"is-date-object": "^1.0.5",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "isarray": "^2.0.5",
"object-is": "^1.1.5",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "side-channel": "^1.0.4",
- "which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.13"
+ "regexp.prototype.flags": "^1.5.1"
},
"engines": {
"node": ">= 0.4"
@@ -4277,11 +5310,15 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "node_modules/deep-object-diff": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz",
+ "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA=="
+ },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -4307,7 +5344,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
@@ -4320,6 +5356,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -4329,6 +5373,15 @@
"node": ">=0.4.0"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/detect-indent": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
@@ -4353,6 +5406,25 @@
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
"dev": true
},
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
"node_modules/diff-match-patch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
@@ -4380,6 +5452,12 @@
"node": ">=8"
}
},
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
"node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -4392,12 +5470,49 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dotignore": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
+ "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "ignored": "bin/ignored"
+ }
+ },
+ "node_modules/dotignore/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/dotignore/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true
},
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.818",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz",
+ "integrity": "sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==",
+ "dev": true
+ },
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -4417,7 +5532,6 @@
"version": "1.23.3",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
"integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
- "dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"arraybuffer.prototype.slice": "^1.0.3",
@@ -4477,7 +5591,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.2.4"
},
@@ -4489,31 +5602,10 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
},
- "node_modules/es-get-iterator": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
- "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "is-arguments": "^1.1.1",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.7",
- "isarray": "^2.0.5",
- "stop-iteration-iterator": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/es-iterator-helpers": {
"version": "1.0.19",
"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
@@ -4549,7 +5641,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
"integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0"
},
@@ -4561,7 +5652,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
"integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.2.4",
"has-tostringtag": "^1.0.2",
@@ -4584,7 +5674,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -4598,9 +5687,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
- "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
"dev": true,
"hasInstallScript": true,
"bin": {
@@ -4610,29 +5699,29 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.20.2",
- "@esbuild/android-arm": "0.20.2",
- "@esbuild/android-arm64": "0.20.2",
- "@esbuild/android-x64": "0.20.2",
- "@esbuild/darwin-arm64": "0.20.2",
- "@esbuild/darwin-x64": "0.20.2",
- "@esbuild/freebsd-arm64": "0.20.2",
- "@esbuild/freebsd-x64": "0.20.2",
- "@esbuild/linux-arm": "0.20.2",
- "@esbuild/linux-arm64": "0.20.2",
- "@esbuild/linux-ia32": "0.20.2",
- "@esbuild/linux-loong64": "0.20.2",
- "@esbuild/linux-mips64el": "0.20.2",
- "@esbuild/linux-ppc64": "0.20.2",
- "@esbuild/linux-riscv64": "0.20.2",
- "@esbuild/linux-s390x": "0.20.2",
- "@esbuild/linux-x64": "0.20.2",
- "@esbuild/netbsd-x64": "0.20.2",
- "@esbuild/openbsd-x64": "0.20.2",
- "@esbuild/sunos-x64": "0.20.2",
- "@esbuild/win32-arm64": "0.20.2",
- "@esbuild/win32-ia32": "0.20.2",
- "@esbuild/win32-x64": "0.20.2"
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
}
},
"node_modules/escalade": {
@@ -4760,29 +5849,29 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.34.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
- "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
+ "version": "7.34.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz",
+ "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.7",
- "array.prototype.findlast": "^1.2.4",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
"array.prototype.flatmap": "^1.3.2",
"array.prototype.toreversed": "^1.1.2",
- "array.prototype.tosorted": "^1.1.3",
+ "array.prototype.tosorted": "^1.1.4",
"doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.17",
+ "es-iterator-helpers": "^1.0.19",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.7",
- "object.fromentries": "^2.0.7",
- "object.hasown": "^1.1.3",
- "object.values": "^1.1.7",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.hasown": "^1.1.4",
+ "object.values": "^1.2.0",
"prop-types": "^15.8.1",
"resolve": "^2.0.0-next.5",
"semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.10"
+ "string.prototype.matchall": "^4.0.11"
},
"engines": {
"node": ">=4"
@@ -4873,13 +5962,13 @@
}
},
"node_modules/eslint-plugin-tsdoc": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz",
- "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.3.0.tgz",
+ "integrity": "sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==",
"dev": true,
"dependencies": {
- "@microsoft/tsdoc": "0.14.2",
- "@microsoft/tsdoc-config": "0.16.2"
+ "@microsoft/tsdoc": "0.15.0",
+ "@microsoft/tsdoc-config": "0.17.0"
}
},
"node_modules/eslint-scope": {
@@ -5007,25 +6096,116 @@
"node": ">=4.0"
}
},
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true
+ "node_modules/estree-util-attach-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "node_modules/estree-util-build-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "node_modules/estree-util-build-jsx/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/estree-util-visit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.3",
@@ -5084,6 +6264,12 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -5114,8 +6300,7 @@
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
"version": "3.3.2",
@@ -5166,6 +6351,11 @@
"reusify": "^1.0.4"
}
},
+ "node_modules/fecha": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
+ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
+ },
"node_modules/fflate": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
@@ -5209,9 +6399,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -5274,6 +6464,97 @@
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
+ "node_modules/flru": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flru/-/flru-1.0.2.tgz",
+ "integrity": "sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fmin": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/fmin/-/fmin-0.0.2.tgz",
+ "integrity": "sha512-sSi6DzInhl9d8yqssDfGZejChO8d2bAGIpysPsvYsxFe898z89XhCZg6CPNV3nhUhFefeC/AXZK2bAJxlBjN6A==",
+ "dependencies": {
+ "contour_plot": "^0.0.1",
+ "json2module": "^0.0.3",
+ "rollup": "^0.25.8",
+ "tape": "^4.5.1",
+ "uglify-js": "^2.6.2"
+ }
+ },
+ "node_modules/fmin/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fmin/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fmin/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fmin/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/fmin/node_modules/rollup": {
+ "version": "0.25.8",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz",
+ "integrity": "sha512-a2S4Bh3bgrdO4BhKr2E4nZkjTvrJ2m2bWjMTzVYtoqSCn0HnuxosXnaJUHrMEziOWr3CzL9GjilQQKcyCQpJoA==",
+ "dependencies": {
+ "chalk": "^1.1.1",
+ "minimist": "^1.2.0",
+ "source-map-support": "^0.3.2"
+ },
+ "bin": {
+ "rollup": "bin/rollup"
+ }
+ },
+ "node_modules/fmin/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fmin/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -5298,15 +6579,14 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dev": true,
"dependencies": {
"is-callable": "^1.1.3"
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.2.1.tgz",
+ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -5321,7 +6601,7 @@
},
"node_modules/foreground-child/node_modules/signal-exit": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"engines": {
@@ -5346,9 +6626,9 @@
}
},
"node_modules/fraction.js": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz",
- "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
"engines": {
"node": "*"
},
@@ -5374,8 +6654,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -5395,7 +6674,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5404,7 +6682,6 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
"integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -5422,7 +6699,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5449,7 +6725,6 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
@@ -5489,7 +6764,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
"integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"es-errors": "^1.3.0",
@@ -5502,11 +6776,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.7.6",
+ "resolved": "https://mirrors.cloud.tencent.com/npm/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+ "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/gl-matrix": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz",
+ "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="
+ },
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -5538,7 +6829,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5548,7 +6838,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -5575,7 +6864,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
"integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
"dependencies": {
"define-properties": "^1.2.1",
"gopd": "^1.0.1"
@@ -5611,7 +6899,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -5631,11 +6918,37 @@
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
+ "node_modules/has": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+ "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5653,7 +6966,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0"
},
@@ -5665,7 +6977,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -5677,7 +6988,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -5689,7 +6999,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
"dependencies": {
"has-symbols": "^1.0.3"
},
@@ -5704,7 +7013,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -5712,6 +7020,89 @@
"node": ">= 0.4"
}
},
+ "node_modules/hast-util-to-estree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz",
+ "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-attach-comments": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.0",
+ "unist-util-position": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
+ "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.3.tgz",
+ "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==",
+ "dev": true
+ },
+ "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.6.tgz",
+ "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==",
+ "dev": true,
+ "dependencies": {
+ "inline-style-parser": "0.2.3"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/highlight.js": {
"version": "11.9.0",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
@@ -5725,7 +7116,6 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dev": true,
"dependencies": {
"react-is": "^16.7.0"
}
@@ -5825,7 +7215,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -5834,7 +7223,12 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
"dev": true
},
"node_modules/inquirer": {
@@ -5865,7 +7259,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
"integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"hasown": "^2.0.0",
@@ -5897,11 +7290,34 @@
"loose-envify": "^1.0.0"
}
},
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "dev": true,
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -5917,7 +7333,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
"integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.2.1"
@@ -5954,7 +7369,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
"dependencies": {
"has-bigints": "^1.0.1"
},
@@ -5962,11 +7376,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -5978,11 +7403,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -5994,7 +7423,6 @@
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "dev": true,
"dependencies": {
"hasown": "^2.0.0"
},
@@ -6006,7 +7434,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
"integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
- "dev": true,
"dependencies": {
"is-typed-array": "^1.1.13"
},
@@ -6021,7 +7448,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6032,6 +7458,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -6104,6 +7540,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -6120,7 +7566,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -6141,7 +7586,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6161,9 +7605,21 @@
"node": ">=8"
}
},
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-reference": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "resolved": "https://registry.npmmirror.com/is-reference/-/is-reference-3.0.2.tgz",
"integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
"dev": true,
"dependencies": {
@@ -6174,7 +7630,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -6202,7 +7657,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
"integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7"
},
@@ -6229,7 +7683,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -6244,7 +7697,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -6259,7 +7711,6 @@
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
"integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
- "dev": true,
"dependencies": {
"which-typed-array": "^1.1.14"
},
@@ -6298,7 +7749,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -6337,8 +7787,7 @@
"node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
},
"node_modules/isexe": {
"version": "2.0.0",
@@ -6410,15 +7859,15 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.1.tgz",
+ "integrity": "sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -6438,6 +7887,15 @@
"integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
"dev": true
},
+ "node_modules/jiti": {
+ "version": "1.21.6",
+ "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+ "dev": true,
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
"node_modules/jju": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
@@ -6445,9 +7903,9 @@
"dev": true
},
"node_modules/jotai": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.0.tgz",
- "integrity": "sha512-yZNMC36FdLOksOr8qga0yLf14miCJlEThlp5DeFJNnqzm2+ZG7wLcJzoOyij5K6U6Xlc5ljQqPDlJRgqW0Y18g==",
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.4.tgz",
+ "integrity": "sha512-f6jwjhBJcDtpeauT2xH01gnqadKEySwwt1qNBLvAXcnojkmb76EdqRt05Ym8IamfHGAQz2qMKAwftnyjeSoHAA==",
"engines": {
"node": ">=12.20.0"
},
@@ -6465,14 +7923,14 @@
}
},
"node_modules/jotai-devtools": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/jotai-devtools/-/jotai-devtools-0.9.1.tgz",
- "integrity": "sha512-mOBziL4WFBzEvZMhvo2V6oUW86BNopcHIdK4//caNdd1+UjwuvHBR8pB1Or1gj1LNd4pwp/jewnVk/LXRwgZyw==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/jotai-devtools/-/jotai-devtools-0.10.0.tgz",
+ "integrity": "sha512-ltGzJMam7sXbC827U1A2H6rMg+iiK5VzaBmanVfVpWS4fK9/8Mq5NLaG3n2OFtsQgI0nUDaNl/3NObI38sBx+A==",
"dev": true,
"dependencies": {
- "@mantine/code-highlight": "^7.8.1",
- "@mantine/core": "^7.8.1",
- "@mantine/hooks": "^7.8.1",
+ "@mantine/code-highlight": "^7.10.1",
+ "@mantine/core": "^7.10.1",
+ "@mantine/hooks": "^7.10.1",
"@redux-devtools/extension": "^3.3.0",
"clsx": "^2.1.1",
"javascript-stringify": "^2.1.0",
@@ -6489,6 +7947,22 @@
"react": ">=17.0.0"
}
},
+ "node_modules/jotai-effect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/jotai-effect/-/jotai-effect-1.0.0.tgz",
+ "integrity": "sha512-eCgKKG4BACDzuJGYTu0xZRk1C1MEOvbAhC3L8w7YufQ2lSLORwNX/WFnCuZxLFX0sDLkTUeoUzOYaw8wnXY+UQ==",
+ "peerDependencies": {
+ "jotai": ">=2.5.0"
+ }
+ },
+ "node_modules/jotai-location": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/jotai-location/-/jotai-location-0.5.5.tgz",
+ "integrity": "sha512-6QW/7W9IJHjhbn7gRgAw4sC30k0/G6JiC4uPlKi8ZPZGYk7R7r9PyMD2eVhL4XSxxag89JxS1iSyr6BIXsB4Sw==",
+ "peerDependencies": {
+ "jotai": ">=1.11.0"
+ }
+ },
"node_modules/jotai-minidb": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/jotai-minidb/-/jotai-minidb-0.0.8.tgz",
@@ -6502,12 +7976,12 @@
}
},
"node_modules/jotai-optics": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/jotai-optics/-/jotai-optics-0.3.2.tgz",
- "integrity": "sha512-RH6SvqU5hmkVqnHmaqf9zBXvIAs4jLxkDHS4fr5ljuBKHs8+HQ02v+9hX7ahTppxx6dUb0GGUE80jQKJ0kFTLw==",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/jotai-optics/-/jotai-optics-0.4.0.tgz",
+ "integrity": "sha512-osbEt9AgS55hC4YTZDew2urXKZkaiLmLqkTS/wfW5/l0ib8bmmQ7kBXSFaosV6jDDWSp00IipITcJARFHdp42g==",
"peerDependencies": {
- "jotai": ">=1.11.0",
- "optics-ts": "*"
+ "jotai": ">=2.0.0",
+ "optics-ts": ">=2.0.0"
}
},
"node_modules/js-cookie": {
@@ -6560,6 +8034,17 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "node_modules/json2module": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/json2module/-/json2module-0.0.3.tgz",
+ "integrity": "sha512-qYGxqrRrt4GbB8IEOy1jJGypkNsjWoIMlZt4bAsmUScCA507Hbc2p1JOhBzqn45u3PWafUgH2OnzyNU7udO/GA==",
+ "dependencies": {
+ "rw": "^1.3.2"
+ },
+ "bin": {
+ "json2module": "bin/json2module"
+ }
+ },
"node_modules/json2mq": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
@@ -6645,6 +8130,25 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -6659,9 +8163,18 @@
}
},
"node_modules/libchai": {
- "version": "0.1.9",
- "resolved": "https://registry.npmjs.org/libchai/-/libchai-0.1.9.tgz",
- "integrity": "sha512-nbmmYDxtztC6kTgukaPZDagUYleqtf68cBHeLjmGz4XOTYqTjQo/YJzK+32EvgXALUf0A2oV1zV5hByGHqRS3g=="
+ "version": "0.1.14-alpha.1",
+ "resolved": "https://mirrors.cloud.tencent.com/npm/libchai/-/libchai-0.1.14-alpha.1.tgz",
+ "integrity": "sha512-XVt9d97BpWh92qdXXpfwzstiL6aVhS7aMjSnnK58CmlzFEl4E4Hg/OaQPITs+JaFoUlw9SO1priMlZElCyhyeg=="
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
@@ -6716,12 +8229,24 @@
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
"dev": true
},
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmmirror.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
"node_modules/lodash.curry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
"integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==",
"dev": true
},
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -6748,6 +8273,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -6778,14 +8321,6 @@
"yallist": "^2.1.2"
}
},
- "node_modules/lz-string": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
- "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
- "bin": {
- "lz-string": "bin/bin.js"
- }
- },
"node_modules/magic-string": {
"version": "0.30.10",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
@@ -6821,20 +8356,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/markdown-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/mathjs": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.1.0.tgz",
- "integrity": "sha512-x5wUkWo3CfXMl4mf/jHsbVNuMcUwN2m4qbj+tR/jYr9fdiIrlsexQbKYav8Uwfe+E5he30CyVaABNLmAlTFO3w==",
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-13.0.1.tgz",
+ "integrity": "sha512-38IzJ/MY0erNp7apXJp6DZwUYHOuvlqRqk2KtMo9GPqrTmCaLb1vTzw/Fib3PessXEMs52wnJaga0pd9xkIjjA==",
"dependencies": {
- "@babel/runtime": "^7.23.2",
+ "@babel/runtime": "^7.24.7",
"complex.js": "^2.1.1",
"decimal.js": "^10.4.3",
"escape-latex": "^1.2.0",
- "fraction.js": "4.3.4",
+ "fraction.js": "^4.3.7",
"javascript-natural-sort": "^0.7.1",
"seedrandom": "^3.0.5",
"tiny-emitter": "^2.1.0",
- "typed-function": "^4.1.1"
+ "typed-function": "^4.2.1"
},
"bin": {
"mathjs": "bin/cli.js"
@@ -6843,20 +8390,791 @@
"node": ">= 18"
}
},
- "node_modules/merge-stream": {
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+ "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "dev": true,
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
+ "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz",
+ "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
+ "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/memoize-one": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.0.tgz",
+ "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
+ "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-expression": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
+ "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz",
+ "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==",
+ "dev": true,
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-md": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+ "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+ "dev": true,
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+ "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.0.0",
+ "acorn-jsx": "^5.0.0",
+ "micromark-extension-mdx-expression": "^3.0.0",
+ "micromark-extension-mdx-jsx": "^3.0.0",
+ "micromark-extension-mdx-md": "^2.0.0",
+ "micromark-extension-mdxjs-esm": "^3.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+ "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
+ "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
+ "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz",
+ "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
+ "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
+ "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
+ "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+ "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
+ "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
+ "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
+ "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
+ "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
+ "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+ "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
+ "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
+ "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
+ "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
+ "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-types": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+ "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"dev": true,
- "engines": {
- "node": ">= 8"
- }
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
},
"node_modules/micromatch": {
"version": "4.0.5",
@@ -6902,9 +9220,9 @@
}
},
"node_modules/minimatch": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -6916,10 +9234,18 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/minipass": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
- "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -6937,6 +9263,25 @@
"ufo": "^1.5.3"
}
},
+ "node_modules/mock-property": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mock-property/-/mock-property-1.0.3.tgz",
+ "integrity": "sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==",
+ "dependencies": {
+ "define-data-property": "^1.1.1",
+ "functions-have-names": "^1.2.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "hasown": "^2.0.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/mrmime": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
@@ -6958,6 +9303,17 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
"node_modules/nanoid": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz",
@@ -6987,15 +9343,30 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "dev": true
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/npm-run-path": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
@@ -7031,11 +9402,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -7044,7 +9423,6 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
"integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1"
@@ -7060,7 +9438,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -7069,7 +9446,6 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
"integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"define-properties": "^1.2.1",
@@ -7158,7 +9534,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
"dependencies": {
"wrappy": "1"
}
@@ -7265,6 +9640,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+ "dev": true
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -7286,6 +9667,32 @@
"node": ">=6"
}
},
+ "node_modules/parse-entities": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.1.tgz",
+ "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
+ "dev": true
+ },
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -7317,7 +9724,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -7334,12 +9740,11 @@
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-scurry": {
"version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
@@ -7354,12 +9759,12 @@
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.0.tgz",
+ "integrity": "sha512-bfJaPTuEiTYBu+ulDaeQ0F+uLmlfFkMgXj4cbwfuMSjgObGMzb55FMMbDvbRU0fAHZ4sLGkz2mKwcMg8Dvm8Ww==",
"dev": true,
"engines": {
- "node": "14 || >=16.14"
+ "node": ">=18"
}
},
"node_modules/path-to-regexp": {
@@ -7391,6 +9796,31 @@
"node": "*"
}
},
+ "node_modules/pdfast": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/pdfast/-/pdfast-0.2.0.tgz",
+ "integrity": "sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA=="
+ },
+ "node_modules/periscopic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/periscopic/-/periscopic-3.1.0.tgz",
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "is-reference": "^3.0.0"
+ }
+ },
+ "node_modules/periscopic/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
@@ -7408,6 +9838,24 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/pkg-types": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz",
@@ -7423,15 +9871,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
"integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/postcss": {
- "version": "8.4.38",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
- "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "version": "8.4.39",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.39.tgz",
+ "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -7448,13 +9896,140 @@
],
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
+ "picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/yaml": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.4.5.tgz",
+ "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
+ "dev": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
@@ -7464,6 +10039,7 @@
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -7543,9 +10119,9 @@
}
},
"node_modules/prettier": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
- "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -7605,6 +10181,16 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmmirror.com/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -7654,15 +10240,33 @@
}
]
},
+ "node_modules/quickselect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+ },
+ "node_modules/raf-schd": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz",
+ "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ=="
+ },
+ "node_modules/rbush": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
+ "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+ "dependencies": {
+ "quickselect": "^2.0.0"
+ }
+ },
"node_modules/rc-cascader": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.20.0.tgz",
- "integrity": "sha512-lkT9EEwOcYdjZ/jvhLoXGzprK1sijT3/Tp4BLxQQcHDZkkOzzwYQC9HgmKoJz0K7CukMfgvO9KqHeBdgE+pELw==",
+ "version": "3.26.0",
+ "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.26.0.tgz",
+ "integrity": "sha512-L1dml383TPSJD1I11YwxuVbmqaJY64psZqFp1ETlgl3LEOwDu76Cyl11fw5dmjJhMlUWwM5dECQfqJgfebhUjg==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"array-tree-filter": "^2.1.0",
"classnames": "^2.3.1",
- "rc-select": "~14.10.0",
+ "rc-select": "~14.14.0",
"rc-tree": "~5.8.1",
"rc-util": "^5.37.0"
},
@@ -7672,9 +10276,9 @@
}
},
"node_modules/rc-checkbox": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.1.0.tgz",
- "integrity": "sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.3.0.tgz",
+ "integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.3.2",
@@ -7701,9 +10305,9 @@
}
},
"node_modules/rc-dialog": {
- "version": "9.3.4",
- "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.3.4.tgz",
- "integrity": "sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA==",
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.5.2.tgz",
+ "integrity": "sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"@rc-component/portal": "^1.0.0-8",
@@ -7717,15 +10321,15 @@
}
},
"node_modules/rc-drawer": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.5.2.tgz",
- "integrity": "sha512-QckxAnQNdhh4vtmKN0ZwDf3iakO83W9eZcSKWYYTDv4qcD2fHhRAZJJ/OE6v2ZlQ2kSqCJX5gYssF4HJFvsEPQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.2.0.tgz",
+ "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==",
"dependencies": {
- "@babel/runtime": "^7.10.1",
+ "@babel/runtime": "^7.23.9",
"@rc-component/portal": "^1.1.1",
"classnames": "^2.2.6",
"rc-motion": "^2.6.1",
- "rc-util": "^5.36.0"
+ "rc-util": "^5.38.1"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -7733,12 +10337,12 @@
}
},
"node_modules/rc-dropdown": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.1.0.tgz",
- "integrity": "sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.0.tgz",
+ "integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==",
"dependencies": {
"@babel/runtime": "^7.18.3",
- "@rc-component/trigger": "^1.7.0",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "^2.2.6",
"rc-util": "^5.17.0"
},
@@ -7766,14 +10370,14 @@
}
},
"node_modules/rc-image": {
- "version": "7.5.1",
- "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.5.1.tgz",
- "integrity": "sha512-Z9loECh92SQp0nSipc0MBuf5+yVC05H/pzC+Nf8xw1BKDFUJzUeehYBjaWlxly8VGBZJcTHYri61Fz9ng1G3Ag==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.9.0.tgz",
+ "integrity": "sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g==",
"dependencies": {
"@babel/runtime": "^7.11.2",
"@rc-component/portal": "^1.0.2",
"classnames": "^2.2.6",
- "rc-dialog": "~9.3.4",
+ "rc-dialog": "~9.5.2",
"rc-motion": "^2.6.2",
"rc-util": "^5.34.1"
},
@@ -7783,9 +10387,9 @@
}
},
"node_modules/rc-input": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.3.11.tgz",
- "integrity": "sha512-jhH7QP5rILanSHCGSUkdoFE5DEtpv8FIseYhuYkOZzUBeiVAiwM3q26YqZ6xBB0QFEZ/yUAgms4xW4iuub3xFQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.5.1.tgz",
+ "integrity": "sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g==",
"dependencies": {
"@babel/runtime": "^7.11.1",
"classnames": "^2.2.1",
@@ -7797,15 +10401,15 @@
}
},
"node_modules/rc-input-number": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-8.4.0.tgz",
- "integrity": "sha512-B6rziPOLRmeP7kcS5qbdC5hXvvDHYKV4vUxmahevYx2E6crS2bRi0xLDjhJ0E1HtOWo8rTmaE2EBJAkTCZOLdA==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.1.0.tgz",
+ "integrity": "sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"@rc-component/mini-decimal": "^1.0.1",
"classnames": "^2.2.5",
- "rc-input": "~1.3.5",
- "rc-util": "^5.28.0"
+ "rc-input": "~1.5.0",
+ "rc-util": "^5.40.1"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -7813,16 +10417,16 @@
}
},
"node_modules/rc-mentions": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.9.1.tgz",
- "integrity": "sha512-cZuElWr/5Ws0PXx1uxobxfYh4mqUw2FitfabR62YnWgm+WAfDyXZXqZg5DxXW+M1cgVvntrQgDDd9LrihrXzew==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.14.0.tgz",
+ "integrity": "sha512-qKR59FMuF8PK4ZqsbWX3UuA5P1M/snzyqV6Yt3y1DCFbCEdqUGIBgQp6vEfLCO6Z0RoRFlzXtCeSlBTcDDpg1A==",
"dependencies": {
"@babel/runtime": "^7.22.5",
- "@rc-component/trigger": "^1.5.0",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "^2.2.6",
- "rc-input": "~1.3.5",
- "rc-menu": "~9.12.0",
- "rc-textarea": "~1.5.0",
+ "rc-input": "~1.5.0",
+ "rc-menu": "~9.14.0",
+ "rc-textarea": "~1.7.0",
"rc-util": "^5.34.1"
},
"peerDependencies": {
@@ -7831,12 +10435,12 @@
}
},
"node_modules/rc-menu": {
- "version": "9.12.4",
- "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.12.4.tgz",
- "integrity": "sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==",
+ "version": "9.14.1",
+ "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.14.1.tgz",
+ "integrity": "sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ==",
"dependencies": {
"@babel/runtime": "^7.10.1",
- "@rc-component/trigger": "^1.17.0",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "2.x",
"rc-motion": "^2.4.3",
"rc-overflow": "^1.3.1",
@@ -7848,13 +10452,13 @@
}
},
"node_modules/rc-motion": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.0.tgz",
- "integrity": "sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.2.tgz",
+ "integrity": "sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==",
"dependencies": {
"@babel/runtime": "^7.11.1",
"classnames": "^2.2.1",
- "rc-util": "^5.21.0"
+ "rc-util": "^5.43.0"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -7862,9 +10466,9 @@
}
},
"node_modules/rc-notification": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.3.0.tgz",
- "integrity": "sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.0.tgz",
+ "integrity": "sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "2.x",
@@ -7895,13 +10499,13 @@
}
},
"node_modules/rc-pagination": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.7.0.tgz",
- "integrity": "sha512-IxSzKapd13L91/195o1TPkKnCNw8gIR25UP1GCW/7c7n/slhld4npu2j2PB9IWjXm4SssaAaSAt2lscYog7wzg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.0.4.tgz",
+ "integrity": "sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==",
"dependencies": {
"@babel/runtime": "^7.10.1",
- "classnames": "^2.2.1",
- "rc-util": "^5.32.2"
+ "classnames": "^2.3.2",
+ "rc-util": "^5.38.0"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -7909,14 +10513,16 @@
}
},
"node_modules/rc-picker": {
- "version": "3.14.7",
- "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-3.14.7.tgz",
- "integrity": "sha512-+craFcClAOwu4R7lSlaiTAZRY4cWPgtE0+yji9stQkQR28C7WGTrZcyiq5AD7xfhXNV+82QmoJ8Aqg3duDYF6A==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.5.0.tgz",
+ "integrity": "sha512-suqz9bzuhBQlf7u+bZd1bJLPzhXpk12w6AjQ9BTPTiFwexVZgUKViG1KNLyfFvW6tCUZZK0HmCCX7JAyM+JnCg==",
"dependencies": {
"@babel/runtime": "^7.10.1",
- "@rc-component/trigger": "^1.5.0",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "^2.2.1",
- "rc-util": "^5.30.0"
+ "rc-overflow": "^1.3.2",
+ "rc-resize-observer": "^1.4.0",
+ "rc-util": "^5.38.1"
},
"engines": {
"node": ">=8.x"
@@ -7945,9 +10551,9 @@
}
},
"node_modules/rc-progress": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.5.1.tgz",
- "integrity": "sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-4.0.0.tgz",
+ "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.2.6",
@@ -7959,9 +10565,9 @@
}
},
"node_modules/rc-rate": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.12.0.tgz",
- "integrity": "sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.0.tgz",
+ "integrity": "sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.2.5",
@@ -7991,9 +10597,9 @@
}
},
"node_modules/rc-segmented": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.2.2.tgz",
- "integrity": "sha512-Mq52M96QdHMsNdE/042ibT5vkcGcD5jxKp7HgPC2SRofpia99P5fkfHy1pEaajLMF/kj0+2Lkq1UZRvqzo9mSA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.3.0.tgz",
+ "integrity": "sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==",
"dependencies": {
"@babel/runtime": "^7.11.1",
"classnames": "^2.2.1",
@@ -8006,12 +10612,12 @@
}
},
"node_modules/rc-select": {
- "version": "14.10.0",
- "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.10.0.tgz",
- "integrity": "sha512-TsIJTYafTTapCA32LLNpx/AD6ntepR1TG8jEVx35NiAAWCPymhUfuca8kRcUNd3WIGVMDcMKn9kkphoxEz+6Ag==",
+ "version": "14.14.0",
+ "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.14.0.tgz",
+ "integrity": "sha512-Uo2wulrjoPPRLCPd7zlK4ZFVJxlTN//yp1xWP/U+TUOQCyXrT+Duvq/Si5OzVcmQyWAUSbsplc2OwNNhvbOeKQ==",
"dependencies": {
"@babel/runtime": "^7.10.1",
- "@rc-component/trigger": "^1.5.0",
+ "@rc-component/trigger": "^2.1.1",
"classnames": "2.x",
"rc-motion": "^2.0.1",
"rc-overflow": "^1.3.1",
@@ -8027,13 +10633,13 @@
}
},
"node_modules/rc-slider": {
- "version": "10.4.1",
- "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.4.1.tgz",
- "integrity": "sha512-wiHRWgzEEHcgF7MWDd0ODsMpqBwszT558R2qH52fplJwctw/L9J8ipEt89ZqVASlh0QFG9kJPgBuL2+cbdLRUw==",
+ "version": "10.6.2",
+ "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.6.2.tgz",
+ "integrity": "sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.2.5",
- "rc-util": "^5.27.0"
+ "rc-util": "^5.36.0"
},
"engines": {
"node": ">=8.x"
@@ -8075,16 +10681,16 @@
}
},
"node_modules/rc-table": {
- "version": "7.36.1",
- "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.36.1.tgz",
- "integrity": "sha512-9qMxEm/3Y8ukdW8I8ZvmhX0QImfNKzH0JEUlSbyaUlsYTB+/tQEbfaB8YkG4sHVZ1io4pxqK/BXoZYqebi/TIQ==",
+ "version": "7.45.7",
+ "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.45.7.tgz",
+ "integrity": "sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"@rc-component/context": "^1.4.0",
"classnames": "^2.2.5",
"rc-resize-observer": "^1.1.0",
"rc-util": "^5.37.0",
- "rc-virtual-list": "^3.11.1"
+ "rc-virtual-list": "^3.14.2"
},
"engines": {
"node": ">=8.x"
@@ -8095,14 +10701,14 @@
}
},
"node_modules/rc-tabs": {
- "version": "12.13.1",
- "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.13.1.tgz",
- "integrity": "sha512-83u3l2QkO0UznCzdBLEk9WnNcT+imtmDmMT993sUUEOGnNQAmqOdev0XjeqrcvsAMe9CDpAWDFd7L/RZw+LVJQ==",
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.1.1.tgz",
+ "integrity": "sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw==",
"dependencies": {
"@babel/runtime": "^7.11.2",
"classnames": "2.x",
- "rc-dropdown": "~4.1.0",
- "rc-menu": "~9.12.0",
+ "rc-dropdown": "~4.2.0",
+ "rc-menu": "~9.14.0",
"rc-motion": "^2.6.2",
"rc-resize-observer": "^1.0.0",
"rc-util": "^5.34.1"
@@ -8116,13 +10722,13 @@
}
},
"node_modules/rc-textarea": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.5.3.tgz",
- "integrity": "sha512-oH682ghHx++stFNYrosPRBfwsypywrTXpaD0/5Z8MPkUOnyOQUaY9ueL9tMu6BP1LfsuYQ1VLpg5OtshViLNgA==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.7.0.tgz",
+ "integrity": "sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.2.1",
- "rc-input": "~1.3.5",
+ "rc-input": "~1.5.0",
"rc-resize-observer": "^1.0.0",
"rc-util": "^5.27.0"
},
@@ -8132,12 +10738,12 @@
}
},
"node_modules/rc-tooltip": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.1.3.tgz",
- "integrity": "sha512-HMSbSs5oieZ7XddtINUddBLSVgsnlaSb3bZrzzGWjXa7/B7nNedmsuz72s7EWFEro9mNa7RyF3gOXKYqvJiTcQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.2.0.tgz",
+ "integrity": "sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==",
"dependencies": {
"@babel/runtime": "^7.11.2",
- "@rc-component/trigger": "^1.18.0",
+ "@rc-component/trigger": "^2.0.0",
"classnames": "^2.3.1"
},
"peerDependencies": {
@@ -8146,9 +10752,9 @@
}
},
"node_modules/rc-tree": {
- "version": "5.8.7",
- "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.7.tgz",
- "integrity": "sha512-cpsIQZ4nNYwpj6cqPRt52e/69URuNdgQF9wZ10InmEf8W3+i0A41OVmZWwHuX9gegQSqj+DPmaDkZFKQZ+ZV1w==",
+ "version": "5.8.8",
+ "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.8.tgz",
+ "integrity": "sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "2.x",
@@ -8165,13 +10771,13 @@
}
},
"node_modules/rc-tree-select": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.15.0.tgz",
- "integrity": "sha512-YJHfdO6azFnR0/JuNBZLDptGE4/RGfVeHAafUIYcm2T3RBkL1O8aVqiHvwIyLzdK59ry0NLrByd+3TkfpRM+9Q==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.21.0.tgz",
+ "integrity": "sha512-w+9qEu6zh0G3wt9N/hzWNSnqYH1i9mH1Nqxo0caxLRRFXF5yZWYmpCDoDTMdQM1Y4z3Q5yj08qyrPH/d4AtumA==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "2.x",
- "rc-select": "~14.10.0",
+ "rc-select": "~14.14.0",
"rc-tree": "~5.8.1",
"rc-util": "^5.16.1"
},
@@ -8181,9 +10787,9 @@
}
},
"node_modules/rc-upload": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.6.tgz",
- "integrity": "sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==",
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.5.2.tgz",
+ "integrity": "sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"classnames": "^2.2.5",
@@ -8195,9 +10801,9 @@
}
},
"node_modules/rc-util": {
- "version": "5.39.3",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.39.3.tgz",
- "integrity": "sha512-j9wOELkLQ8gC/NkUg3qg9mHZcJf+5mYYv40JrDHqnaf8VSycji4pCf7kJ5fdTXQPDIF0vr5zpb/T2HdrMs9rWA==",
+ "version": "5.43.0",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz",
+ "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"react-is": "^18.2.0"
@@ -8213,9 +10819,9 @@
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
},
"node_modules/rc-virtual-list": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.12.0.tgz",
- "integrity": "sha512-43+/lr7bImpvEwTFw1FTYwSg42VHzRgO5PiCEEUROj8D2+M2SCvANqGIa9QyhoFLVQtc+2QXvgTB7VPGG7oOoQ==",
+ "version": "3.14.5",
+ "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz",
+ "integrity": "sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg==",
"dependencies": {
"@babel/runtime": "^7.20.0",
"classnames": "^2.2.6",
@@ -8256,6 +10862,32 @@
"lodash.curry": "^4.1.1"
}
},
+ "node_modules/react-beautiful-dnd": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz",
+ "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2",
+ "css-box-model": "^1.2.0",
+ "memoize-one": "^5.1.1",
+ "raf-schd": "^4.0.2",
+ "react-redux": "^7.2.0",
+ "redux": "^4.0.4",
+ "use-memo-one": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.5 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-beautiful-dnd/node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -8311,18 +10943,47 @@
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
"node_modules/react-number-format": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.3.4.tgz",
- "integrity": "sha512-2hHN5mbLuCDUx19bv0Q8wet67QqYK6xmtLQeY5xx+h7UXiMmRtaCwqko4mMPoKXLc6xAzwRrutg8XbTRlsfjRg==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz",
+ "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==",
"dev": true,
"dependencies": {
"prop-types": "^15.7.2"
},
"peerDependencies": {
- "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-redux": {
+ "version": "7.2.9",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
+ "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.15.4",
+ "@types/react-redux": "^7.1.20",
+ "hoist-non-react-statics": "^3.3.2",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.7.2",
+ "react-is": "^17.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.3 || ^17 || ^18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
}
},
+ "node_modules/react-redux/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+ },
"node_modules/react-remove-scroll": {
"version": "2.5.10",
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz",
@@ -8381,11 +11042,11 @@
}
},
"node_modules/react-router": {
- "version": "6.23.1",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz",
- "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==",
+ "version": "6.24.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz",
+ "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==",
"dependencies": {
- "@remix-run/router": "1.16.1"
+ "@remix-run/router": "1.17.0"
},
"engines": {
"node": ">=14.0.0"
@@ -8395,12 +11056,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "6.23.1",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz",
- "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==",
+ "version": "6.24.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz",
+ "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==",
"dependencies": {
- "@remix-run/router": "1.16.1",
- "react-router": "6.23.1"
+ "@remix-run/router": "1.17.0",
+ "react-router": "6.24.0"
},
"engines": {
"node": ">=14.0.0"
@@ -8459,22 +11120,31 @@
}
},
"node_modules/reactflow": {
- "version": "11.11.3",
- "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.3.tgz",
- "integrity": "sha512-wusd1Xpn1wgsSEv7UIa4NNraCwH9syBtubBy4xVNXg3b+CDKM+sFaF3hnMx0tr0et4km9urIDdNvwm34QiZong==",
+ "version": "11.11.4",
+ "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz",
+ "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==",
"dependencies": {
- "@reactflow/background": "11.3.13",
- "@reactflow/controls": "11.2.13",
- "@reactflow/core": "11.11.3",
- "@reactflow/minimap": "11.7.13",
- "@reactflow/node-resizer": "2.2.13",
- "@reactflow/node-toolbar": "1.3.13"
+ "@reactflow/background": "11.3.14",
+ "@reactflow/controls": "11.2.14",
+ "@reactflow/core": "11.11.4",
+ "@reactflow/minimap": "11.7.14",
+ "@reactflow/node-resizer": "2.2.14",
+ "@reactflow/node-toolbar": "1.3.14"
},
"peerDependencies": {
"react": ">=17",
"react-dom": ">=17"
}
},
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -8496,6 +11166,18 @@
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/redux": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
@@ -8533,7 +11215,6 @@
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
"integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"define-properties": "^1.2.1",
@@ -8547,6 +11228,61 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/remark-mdx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/remark-mdx/-/remark-mdx-3.0.1.tgz",
+ "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==",
+ "dev": true,
+ "dependencies": {
+ "mdast-util-mdx": "^3.0.0",
+ "micromark-extension-mdxjs": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.0.tgz",
+ "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -8556,6 +11292,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -8565,7 +11310,6 @@
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -8587,6 +11331,16 @@
"node": ">=4"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://mirrors.cloud.tencent.com/npm/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -8610,6 +11364,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==",
+ "dependencies": {
+ "align-text": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -8660,30 +11425,6 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/rollup-plugin-external-globals": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-external-globals/-/rollup-plugin-external-globals-0.10.0.tgz",
- "integrity": "sha512-RXlupZrmn97AaaS5dWnktkjM+Iy+od0E+8L0mUkMIs3iuoUXNJebueQocQKV7Ircd54fSGGmkBaXwNzY05J1yQ==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^5.1.0",
- "estree-walker": "^3.0.3",
- "is-reference": "^3.0.2",
- "magic-string": "^0.30.5"
- },
- "peerDependencies": {
- "rollup": "^2.25.0 || ^3.3.0 || ^4.1.4"
- }
- },
- "node_modules/rollup-plugin-external-globals/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
"node_modules/rollup-plugin-visualizer": {
"version": "5.12.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz",
@@ -8751,6 +11492,11 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
+ },
"node_modules/rxjs": {
"version": "6.6.7",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
@@ -8773,7 +11519,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
"integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"get-intrinsic": "^1.2.4",
@@ -8797,7 +11542,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
"integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
@@ -8821,8 +11565,7 @@
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/scheduler": {
"version": "0.23.2",
@@ -8872,7 +11615,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -8889,7 +11631,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -8930,7 +11671,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -8960,7 +11700,6 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "dev": true,
"dependencies": {
"is-arrayish": "^0.3.1"
}
@@ -8968,8 +11707,7 @@
"node_modules/simple-swizzle/node_modules/is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "dev": true
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
},
"node_modules/sirv": {
"version": "2.0.4",
@@ -8998,7 +11736,6 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -9011,12 +11748,34 @@
"node": ">=0.10.0"
}
},
- "node_modules/sourcemap-codec": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "deprecated": "Please use @jridgewell/sourcemap-codec instead",
- "dev": true
+ "node_modules/source-map-support": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz",
+ "integrity": "sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==",
+ "dependencies": {
+ "source-map": "0.1.32"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.1.32",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz",
+ "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==",
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
"node_modules/spawn-sync": {
"version": "1.0.15",
@@ -9041,18 +11800,6 @@
"integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
"dev": true
},
- "node_modules/stop-iteration-iterator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
- "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
- "dev": true,
- "dependencies": {
- "internal-slot": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -9093,7 +11840,7 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
@@ -9135,7 +11882,6 @@
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
"integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
@@ -9153,7 +11899,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
"integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
@@ -9167,7 +11912,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
"integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
@@ -9180,6 +11924,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -9195,7 +11953,7 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
@@ -9247,6 +12005,15 @@
"integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
"dev": true
},
+ "node_modules/style-to-object": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-0.4.4.tgz",
+ "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==",
+ "dev": true,
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
"node_modules/styled-components": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz",
@@ -9279,11 +12046,109 @@
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
"integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
},
+ "node_modules/styled-components/node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/styled-components/node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/stylis": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
"integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg=="
},
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.3.tgz",
+ "integrity": "sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9300,7 +12165,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -9308,6 +12172,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/svg-path-parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/svg-path-parser/-/svg-path-parser-1.1.0.tgz",
+ "integrity": "sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A=="
+ },
"node_modules/swr": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz",
@@ -9326,6 +12195,80 @@
"integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
"dev": true
},
+ "node_modules/tailwindcss": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.4.tgz",
+ "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
+ "dev": true,
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.0",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tape": {
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/tape/-/tape-4.17.0.tgz",
+ "integrity": "sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==",
+ "dependencies": {
+ "@ljharb/resumer": "~0.0.1",
+ "@ljharb/through": "~2.3.9",
+ "call-bind": "~1.0.2",
+ "deep-equal": "~1.1.1",
+ "defined": "~1.0.1",
+ "dotignore": "~0.1.2",
+ "for-each": "~0.3.3",
+ "glob": "~7.2.3",
+ "has": "~1.0.3",
+ "inherits": "~2.0.4",
+ "is-regex": "~1.1.4",
+ "minimist": "~1.2.8",
+ "mock-property": "~1.0.0",
+ "object-inspect": "~1.12.3",
+ "resolve": "~1.22.6",
+ "string.prototype.trim": "~1.2.8"
+ },
+ "bin": {
+ "tape": "bin/tape"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tape/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -9356,22 +12299,43 @@
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
},
"engines": {
- "node": "*"
+ "node": ">=0.8"
}
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
"node_modules/throttle-debounce": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
- "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
+ "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==",
"engines": {
"node": ">=12.22"
}
@@ -9387,6 +12351,11 @@
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+ },
"node_modules/tinybench": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz",
@@ -9472,6 +12441,26 @@
"node": ">=6"
}
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/ts-api-utils": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -9484,54 +12473,37 @@
"typescript": ">=4.2.0"
}
},
- "node_modules/ts-json-schema-generator": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-2.1.1.tgz",
- "integrity": "sha512-ha5/w3A2APOOn9ET2CfunEXdVOnKmjISTGcxhCkDszmrsRWFfG5F+re5U5onLXo665sZ4BuE2g5jZAjC+CUcgA==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.15",
- "commander": "^12.0.0",
- "glob": "^10.3.12",
- "json5": "^2.2.3",
- "normalize-path": "^3.0.0",
- "safe-stable-stringify": "^2.4.3",
- "typescript": "^5.4.5"
- },
- "bin": {
- "ts-json-schema-generator": "bin/ts-json-schema-generator.js"
- },
- "engines": {
- "node": ">=18.0.0"
- }
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
- "node_modules/ts-json-schema-generator/node_modules/glob": {
- "version": "10.3.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
- "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
+ "node_modules/tsx": {
+ "version": "4.16.2",
+ "resolved": "https://mirrors.cloud.tencent.com/npm/tsx/-/tsx-4.16.2.tgz",
+ "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.11.0"
+ "esbuild": "~0.21.5",
+ "get-tsconfig": "^4.7.5"
},
"bin": {
- "glob": "dist/esm/bin.mjs"
+ "tsx": "dist/cli.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.18"
+ "node": ">=18.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
}
},
- "node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -9569,7 +12541,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
"integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -9583,7 +12554,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
"integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
@@ -9602,7 +12572,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
"integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
- "dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
@@ -9622,7 +12591,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
"integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
@@ -9639,11 +12607,11 @@
}
},
"node_modules/typed-function": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz",
- "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.1.tgz",
+ "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==",
"engines": {
- "node": ">= 14"
+ "node": ">= 18"
}
},
"node_modules/typedarray": {
@@ -9653,9 +12621,9 @@
"dev": true
},
"node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
+ "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -9680,11 +12648,55 @@
"integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
"dev": true
},
+ "node_modules/uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==",
+ "dependencies": {
+ "source-map": "~0.5.1",
+ "yargs": "~3.10.0"
+ },
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ },
+ "optionalDependencies": {
+ "uglify-to-browserify": "~1.0.0"
+ }
+ },
+ "node_modules/uglify-js/node_modules/cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==",
+ "dependencies": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "node_modules/uglify-js/node_modules/yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==",
+ "dependencies": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "node_modules/uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==",
+ "optional": true
+ },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
@@ -9701,6 +12713,120 @@
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+ "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -9710,6 +12836,36 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -9750,11 +12906,11 @@
}
},
"node_modules/use-immer": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/use-immer/-/use-immer-0.9.0.tgz",
- "integrity": "sha512-/L+enLi0nvuZ6j4WlyK0US9/ECUtV5v9RUbtxnn5+WbtaXYUaOBoKHDNL9I5AETdurQ4rIFIj/s+Z5X80ATyKw==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/use-immer/-/use-immer-0.10.0.tgz",
+ "integrity": "sha512-/eVwNR4TG9Tm/dd+aHYLLaI0FLfYKlkTqKMkn78Ah/EYVzWd/zJIgpkdoFEKbhQJOGo8XN7/mWrTx0exp1c+Ug==",
"peerDependencies": {
- "immer": ">=2.0.0",
+ "immer": ">=8.0.0",
"react": "^16.8.0 || ^17.0.1 || ^18.0.0"
}
},
@@ -9789,6 +12945,14 @@
}
}
},
+ "node_modules/use-memo-one": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz",
+ "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/use-sidecar": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
@@ -9825,13 +12989,42 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
+ "node_modules/vfile": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.1.tgz",
+ "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.2.tgz",
+ "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vite": {
- "version": "5.2.11",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz",
- "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
+ "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
"dev": true,
"dependencies": {
- "esbuild": "^0.20.1",
+ "esbuild": "^0.21.3",
"postcss": "^8.4.38",
"rollup": "^4.13.0"
},
@@ -9902,16 +13095,6 @@
"url": "https://opencollective.com/vitest"
}
},
- "node_modules/vite-plugin-cdn-import": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vite-plugin-cdn-import/-/vite-plugin-cdn-import-1.0.1.tgz",
- "integrity": "sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==",
- "dev": true,
- "dependencies": {
- "rollup-plugin-external-globals": "^0.10.0",
- "vite-plugin-externals": "^0.6.2"
- }
- },
"node_modules/vite-plugin-chunk-split": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/vite-plugin-chunk-split/-/vite-plugin-chunk-split-0.5.0.tgz",
@@ -9926,83 +13109,45 @@
"vite": "^4 || ^5"
}
},
- "node_modules/vite-plugin-externals": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/vite-plugin-externals/-/vite-plugin-externals-0.6.2.tgz",
- "integrity": "sha512-R5oVY8xDJjLXLTs2XDYzvYbc/RTZuIwOx2xcFbYf+/VXB6eJuatDgt8jzQ7kZ+IrgwQhe6tU8U2fTyy72C25CQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.4.0",
- "es-module-lexer": "^0.4.1",
- "fs-extra": "^10.0.0",
- "magic-string": "^0.25.7"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "peerDependencies": {
- "vite": ">=2.0.0"
- }
- },
- "node_modules/vite-plugin-externals/node_modules/es-module-lexer": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
- "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
- "dev": true
- },
- "node_modules/vite-plugin-externals/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite-plugin-externals/node_modules/magic-string": {
- "version": "0.25.9",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
- "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
- "dev": true,
- "dependencies": {
- "sourcemap-codec": "^1.4.8"
- }
- },
"node_modules/vite-plugin-pages": {
- "version": "0.32.1",
- "resolved": "https://registry.npmjs.org/vite-plugin-pages/-/vite-plugin-pages-0.32.1.tgz",
- "integrity": "sha512-4oPlIbb+J+zpJGfT2xI/27xqY+qTkRc3MBgWKfbW6IWM3CTcSyybuL9kRMCFRdBHfmgkF28qDs7fqVf/HjH1Xw==",
+ "version": "0.32.3",
+ "resolved": "https://registry.npmjs.org/vite-plugin-pages/-/vite-plugin-pages-0.32.3.tgz",
+ "integrity": "sha512-1vmKwc9e+lRBLkpTAMUNSVV3BglyE+DRa0iivpe6q3pbOCGkAHHSUp8f6yceXC8+lu/kFgH60vm5vK6IHyvdVw==",
"dev": true,
"dependencies": {
"@types/debug": "^4.1.12",
- "debug": "^4.3.4",
- "deep-equal": "^2.2.3",
+ "debug": "^4.3.5",
+ "dequal": "^2.0.3",
"extract-comments": "^1.1.0",
"fast-glob": "^3.3.2",
"json5": "^2.2.3",
"local-pkg": "^0.5.0",
- "picocolors": "^1.0.0",
- "yaml": "^2.4.1"
+ "picocolors": "^1.0.1",
+ "yaml": "^2.4.5"
},
"peerDependencies": {
"@vue/compiler-sfc": "^2.7.0 || ^3.0.0",
"vite": "^2.0.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0"
},
"peerDependenciesMeta": {
+ "@solidjs/router": {
+ "optional": true
+ },
"@vue/compiler-sfc": {
"optional": true
+ },
+ "react-router": {
+ "optional": true
+ },
+ "vue-router": {
+ "optional": true
}
}
},
"node_modules/vite-plugin-pages/node_modules/yaml": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz",
- "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==",
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
+ "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
"dev": true,
"bin": {
"yaml": "bin.mjs"
@@ -10137,7 +13282,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
"dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
@@ -10197,7 +13341,6 @@
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
"integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
- "dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
@@ -10228,6 +13371,14 @@
"node": ">=8"
}
},
+ "node_modules/window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -10237,6 +13388,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -10257,7 +13416,7 @@
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": {
@@ -10275,8 +13434,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/y18n": {
"version": "5.0.8",
@@ -10342,9 +13500,9 @@
}
},
"node_modules/zustand": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz",
- "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.4.tgz",
+ "integrity": "sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==",
"dependencies": {
"use-sync-external-store": "1.2.0"
},
@@ -10375,6 +13533,16 @@
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
}
}
diff --git a/package.json b/package.json
index 0c27f8f..1659a4d 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,13 @@
{
"name": "chai",
"private": true,
- "version": "0.1.9",
+ "version": "0.1.14",
"type": "module",
"scripts": {
"start": "vite --mode CF",
- "fetch": "node scripts/fetchAssets.mjs",
+ "fetch": "tsx scripts/fetch.ts",
"publish": "bump --tag --commit --push",
- "build:BEX": "vite build --mode BEX && node scripts/makeBex.cjs",
+ "build:BEX": "vite build --mode BEX",
"build:PAGES": "vite build --mode PAGES",
"build:CF": "vite build --mode CF",
"build2": "npm run fetch && npm run build:PAGES",
@@ -22,70 +22,81 @@
"coverage": "vitest run --coverage"
},
"dependencies": {
+ "@ant-design/charts": "^2.1.1",
"@ant-design/colors": "^7.0.2",
- "@ant-design/pro-components": "^2.7.1",
- "@dagrejs/dagre": "^1.1.2",
+ "@ant-design/icons": "^5.3.7",
+ "@ant-design/pro-components": "^2.7.10",
+ "@antv/s2": "^2.0.0-next.24",
+ "@antv/s2-react": "^2.0.0-next.23",
+ "@dagrejs/dagre": "^1.1.3",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^8.0.0",
"@dnd-kit/utilities": "^3.2.2",
- "ahooks": "^3.7.11",
- "antd": "5.11.4",
+ "@types/mdx": "^2.0.13",
+ "ahooks": "^3.8.0",
+ "antd": "^5.18.3",
"d3-array": "^3.2.4",
+ "deep-object-diff": "^1.1.9",
"immer": "^10.1.1",
- "jotai": "^2.8.0",
+ "jotai": "^2.8.4",
+ "jotai-effect": "^1.0.0",
+ "jotai-location": "^0.5.5",
"jotai-minidb": "^0.0.8",
- "jotai-optics": "^0.3.2",
+ "jotai-optics": "^0.4.0",
"js-md5": "^0.8.3",
"js-yaml": "4.1.0",
- "libchai": "^0.1.9",
+ "libchai": "^0.1.14-alpha.1",
"lodash-es": "^4.17.21",
- "lz-string": "^1.5.0",
- "mathjs": "12.1.0",
+ "mathjs": "^13.0.1",
"nanoid": "^5.0.7",
"optics-ts": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "react-router-dom": "^6.23.0",
- "reactflow": "^11.11.3",
+ "react-router-dom": "^6.24.0",
+ "reactflow": "^11.11.4",
"styled-components": "^6.1.9",
- "use-immer": "^0.9.0"
+ "use-immer": "^0.10.0"
},
"devDependencies": {
"@emotion/react": "^11.11.4",
"@jsdevtools/version-bump-prompt": "^6.1.0",
+ "@mdx-js/react": "^3.0.1",
+ "@mdx-js/rollup": "^3.0.1",
"@modyfi/vite-plugin-yaml": "^1.1.0",
- "@swc-jotai/react-refresh": "^0.1.0",
+ "@swc-jotai/react-refresh": "^0.1.1",
+ "@tailwindcss/typography": "^0.5.13",
"@types/d3-array": "^3.2.1",
"@types/js-md5": "^0.7.2",
"@types/js-yaml": "^4.0.9",
"@types/lodash-es": "^4.17.12",
- "@types/node": "^20.12.11",
- "@types/react": "^18.3.1",
+ "@types/node": "^20.14.9",
"@types/react-dom": "^18.3.0",
"@types/styled-components": "^5.1.34",
- "@typescript-eslint/eslint-plugin": "^7.8.0",
- "@typescript-eslint/parser": "^7.8.0",
- "@vitejs/plugin-react-swc": "^3.6.0",
+ "@typescript-eslint/eslint-plugin": "^7.14.1",
+ "@typescript-eslint/parser": "^7.14.1",
+ "@vitejs/plugin-react-swc": "^3.7.0",
"@vitest/coverage-v8": "^1.6.0",
"@vitest/ui": "^1.6.0",
- "axios": "^1.6.8",
+ "autoprefixer": "^10.4.19",
+ "axios": "^1.7.2",
"eslint": "^8.57.0",
"eslint-config-alloy": "^5.1.2",
- "eslint-plugin-react": "^7.34.1",
+ "eslint-plugin-react": "^7.34.3",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
- "eslint-plugin-tsdoc": "^0.2.17",
+ "eslint-plugin-tsdoc": "^0.3.0",
"fs-extra": "^11.2.0",
- "jotai-devtools": "^0.9.1",
+ "jotai-devtools": "^0.10.0",
+ "postcss": "^8.4.39",
"pre-commit": "^1.2.2",
- "prettier": "^3.2.5",
+ "prettier": "^3.3.2",
"rollup-plugin-visualizer": "^5.12.0",
- "ts-json-schema-generator": "^2.1.1",
- "typescript": "^5.4.5",
- "vite": "^5.2.11",
- "vite-plugin-cdn-import": "^1.0.1",
+ "tailwindcss": "^3.4.4",
+ "tsx": "^4.16.2",
+ "typescript": "^5.5.2",
+ "vite": "^5.3.2",
"vite-plugin-chunk-split": "^0.5.0",
- "vite-plugin-pages": "^0.32.1",
+ "vite-plugin-pages": "^0.32.3",
"vite-plugin-wasm": "^3.3.0",
"vite-plugin-wasm-pack": "^0.1.12",
"vitest": "^1.6.0"
@@ -129,7 +140,7 @@
],
"tsdoc/syntax": "warn",
"no-undef": "error",
- "no-undefined": "error"
+ "no-undefined": "off"
}
},
"hintConfig": {
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..2aa7205
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/scripts/analyze.ts b/scripts/analyze.ts
new file mode 100644
index 0000000..902cda2
--- /dev/null
+++ b/scripts/analyze.ts
@@ -0,0 +1,150 @@
+import { readFileSync } from "fs";
+import { load } from "js-yaml";
+
+const estimate = (n: number, k: number) => (n * n) / (2 * k);
+
+const makeMap = (filename: string) => {
+ const content = readFileSync(filename, "utf-8").split("\n");
+ return new Map(
+ content.map((x) => {
+ const [char, analysis_str] = x.split("\t") as [string, string];
+ const analysis = analysis_str.split(" ");
+ while (analysis.length < 3) analysis.push("");
+ return [char, analysis] as [string, [string, string, string]];
+ }),
+ );
+};
+
+const calculate = (
+ descendants: Map,
+ analysisMap: Map,
+) => {
+ let total = 0;
+ for (const [char, derivatives] of descendants) {
+ const analysis = analysisMap.get(char);
+ const derivAnalysis = [...derivatives]
+ .map((x) => analysisMap.get(x))
+ .filter((x) => x)
+ .map((x) => x!.join(" "));
+ if (!analysis) continue;
+ const subseqs = [[0], [1], [2], [0, 1], [0, 2], [1, 2]];
+ let best = 0;
+ // find all subsequences
+ for (const subseq of subseqs) {
+ const hash = subseq.map((i) => analysis[i]).join(" ");
+ const score =
+ derivAnalysis.filter((x) => x.includes(hash)).length * subseq.length;
+ if (score > best) {
+ best = score;
+ }
+ }
+ total += best;
+ }
+ console.log(total);
+};
+
+const analyze = (
+ analysisMap: Map,
+ map: Record,
+ alphabet: number,
+) => {
+ const simpMap: Record = {};
+ for (const [key, value] of Object.entries(map)) {
+ for (const [index, char] of [...value].entries()) {
+ simpMap[index ? `${key}.${index}` : key] = char;
+ }
+ }
+ const map0 = new Map();
+ const map1 = new Map();
+ const map2 = new Map();
+ const codemap = new Map();
+ let dup1 = 0;
+ let dup2 = 0;
+ let dup3 = 0;
+ for (const [char, [a0, a1, a2]] of analysisMap) {
+ const hash = `${a0} ${a1} ${a2}`;
+ const hash01 = `${a0} ${a1} *`;
+ const hash02 = `${a0} * ${a2}`;
+ const hash12 = `* ${a1} ${a2}`;
+ const hash0 = `${a0} * *`;
+ const hash1 = `* ${a1} *`;
+ const hash2 = `* * ${a2}`;
+ const code = [a0, a1, a2].map((x) => simpMap[x] ?? "$").join("");
+ const prev = codemap.get(code) ?? [];
+ if (prev.length) {
+ const toCompare = prev[0]!;
+ const sameCount = [a0, a1, a2].filter(
+ (x, i) => x === toCompare[i],
+ ).length;
+ if (sameCount >= 2) {
+ dup1 += 1;
+ }
+ if (sameCount >= 1) {
+ dup2 += 1;
+ }
+ dup3 += 1;
+ }
+ codemap.set(code, prev.concat([[a0, a1, a2]]));
+ map0.set(hash, (map0.get(hash) ?? []).concat(char));
+ for (const partial of [hash01, hash02, hash12]) {
+ map1.set(partial, (map1.get(partial) ?? []).concat(char));
+ }
+ for (const partial of [hash0, hash1, hash2]) {
+ map2.set(partial, (map2.get(partial) ?? []).concat(char));
+ }
+ }
+ const dup0 = [...map0.values()]
+ .filter((x) => x.length > 1)
+ .reduce((a, b) => a + b.length - 1, 0);
+ const estdup1 = [...map1.values()]
+ .filter((x) => x.length > 1)
+ .reduce((a, b) => a + estimate(b.length, alphabet), 0);
+ const estdup2 = [...map2.values()]
+ .filter((x) => x.length > 1)
+ .reduce((a, b) => a + estimate(b.length, alphabet * alphabet), 0);
+ const estdup3 = estimate(analysisMap.size, alphabet * alphabet * alphabet);
+ console.log({ dup0, dup1, estdup1, dup2, estdup2, dup3, estdup3 });
+};
+
+const yima_map = (load(readFileSync("examples/easy.yaml", "utf-8")) as any).form
+ .mapping;
+const yima_content = makeMap("public/cache/yima.txt");
+const grand_map = (
+ load(readFileSync("public/cache/grand.yaml", "utf-8")) as any
+).form.mapping;
+const grand_content = makeMap("public/cache/grand.txt");
+// const c42_map = Object.fromEntries(
+// readFileSync("public/cache/keymap.dat", "utf-8")
+// .trim()
+// .split("\n")
+// .map((x) => x.split("\t").slice(0, 2) as [string, string]),
+// );
+const c42_content = makeMap("public/cache/c42.txt");
+// for (const char of "abcdefghijklmnopqrstuvwxyz") {
+// c42_map[char] = char;
+// }
+for (const char of yima_content.keys()) {
+ if (!c42_content.has(char)) {
+ yima_content.delete(char);
+ grand_content.delete(char);
+ }
+}
+for (const char of c42_content.keys()) {
+ if (!yima_content.has(char)) {
+ c42_content.delete(char);
+ }
+}
+console.log(yima_content.size, c42_content.size);
+analyze(yima_content, yima_map as Record, 26);
+analyze(grand_content, grand_map as Record, 26);
+// analyze(c42_content, c42_map, 27);
+
+const descendants = new Map(
+ readFileSync("public/cache/通用规范汉字一级分解.txt", "utf-8")
+ .split("\n")
+ .map((x) => x.split("\t") as [string, string]),
+);
+
+calculate(descendants, yima_content);
+calculate(descendants, grand_content);
+calculate(descendants, c42_content);
diff --git a/scripts/convert.ts b/scripts/convert.ts
new file mode 100644
index 0000000..3a9589b
--- /dev/null
+++ b/scripts/convert.ts
@@ -0,0 +1,19 @@
+import { readFileSync, writeFileSync } from "fs";
+
+const zhenma = readFileSync(
+ "/Users/tansongchen/Downloads/zhenma-raw.txt",
+ "utf-8",
+).split("\n");
+const entries: [string, string][] = [];
+
+for (const line of zhenma) {
+ const [key, ...rest] = line.split(" ");
+ rest.forEach((value) => {
+ entries.push([key!, value]);
+ });
+}
+
+writeFileSync(
+ "/Users/tansongchen/Downloads/zhenma.txt",
+ entries.map(([key, value]) => `${value}\t${key}`).join("\n"),
+);
diff --git a/scripts/diff.ts b/scripts/diff.ts
new file mode 100644
index 0000000..dc0aac4
--- /dev/null
+++ b/scripts/diff.ts
@@ -0,0 +1,16 @@
+import { readFileSync, writeFileSync } from "fs";
+import type { Compound, PrimitiveCharacter } from "~/lib";
+
+const repertoire = JSON.parse(
+ readFileSync("public/cache/repertoire.json", "utf-8"),
+) as PrimitiveCharacter[];
+
+const diff = [];
+
+for (const { unicode, gb2312, tygf } of repertoire) {
+ if (gb2312 && tygf === 0) {
+ diff.push(String.fromCodePoint(unicode));
+ }
+}
+
+writeFileSync("public/cache/diff.txt", diff.join(""));
diff --git a/scripts/fetchAssets.mjs b/scripts/fetch.ts
similarity index 99%
rename from scripts/fetchAssets.mjs
rename to scripts/fetch.ts
index 53e5262..4afbd2b 100644
--- a/scripts/fetchAssets.mjs
+++ b/scripts/fetch.ts
@@ -23,6 +23,7 @@ for (const filename of [
"key_distribution",
"pair_equivalence",
"tygf",
+ "cjk",
]) {
const url = `${assetsEndpoint}${filename}.txt`;
const path = `${outputFolder}${filename}.txt`;
diff --git a/scripts/makeBex.cjs b/scripts/makeBex.cjs
deleted file mode 100644
index 26b8fe6..0000000
--- a/scripts/makeBex.cjs
+++ /dev/null
@@ -1,31 +0,0 @@
-/* eslint-disable @typescript-eslint/no-require-imports */
-/**
- * 处理浏览器扩展的脚本,必须在 `npm run build:BEX` 之后执行此脚本。
- * 过程如下:
- * 1. 修改 src/bex/manifest.json 文件中的版本号。
- * 2. 把 src/bex 目录完全复制到 dist/bex 下。
- *
- * 本脚本执行结束后,请手动打开 Chromium 浏览器,生成 *.crx 文件。
- */
-
-const { readFileSync, writeFileSync, copy } = require("fs-extra");
-const { resolve } = require("node:path");
-
-// const getAbsPath = (relativePath) => fileURLToPath(new URL(relativePath, import.meta.url))
-const getAbsPath = (relativePath) => resolve(__dirname, relativePath);
-const readJsonFile = (path) =>
- JSON.parse(readFileSync(path, { encoding: "utf-8" }));
-
-const manifestPath = "../src/bex/manifest.json";
-const packagePath = "../package.json";
-const manifestContent = readJsonFile(getAbsPath(manifestPath));
-const packageContent = readJsonFile(getAbsPath(packagePath));
-manifestContent.version = packageContent.version.replace(/[-a-zA-Z]+/, "");
-
-copy(getAbsPath("../src/bex"), getAbsPath("../dist/bex"));
-
-writeFileSync(
- getAbsPath("../dist/bex/manifest.json"),
- JSON.stringify(manifestContent, undefined, 2),
- { encoding: "utf-8" },
-);
diff --git a/spec/affine.spec.ts b/spec/affine.spec.ts
index 3ea098c..586f841 100644
--- a/spec/affine.spec.ts
+++ b/spec/affine.spec.ts
@@ -1,4 +1,5 @@
-import { affineMerge, Compound, SVGGlyph } from "~/lib";
+import type { Compound, SVGGlyph } from "~/lib";
+import { affineMerge } from "~/lib";
import { describe, expect, it } from "vitest";
describe("affine transformations", () => {
diff --git a/spec/analysis.spec.ts b/spec/analysis.spec.ts
index 6d16934..8bda9fb 100644
--- a/spec/analysis.spec.ts
+++ b/spec/analysis.spec.ts
@@ -1,20 +1,25 @@
import { describe, expect, it } from "vitest";
+import type { SVGGlyph } from "~/lib";
import {
- SVGGlyph,
analysis,
assemble,
classifier,
examples,
isValidCJKChar,
+ recursiveRenderComponent,
recursiveRenderCompound,
} from "~/lib";
-import { repertoire } from "./mock";
+import { focusAnalysis, primitiveRepertoire, repertoire } from "./mock";
import { readFileSync } from "fs";
describe("e2e test", () => {
it("checks database integrity", () => {
const config = examples["mswb"];
- const analysisResult = analysis(repertoire, config);
+ const analysisResult = analysis(
+ repertoire,
+ focusAnalysis(config, repertoire),
+ Object.keys(repertoire).filter(isValidCJKChar),
+ );
const { componentError, compoundError } = analysisResult;
expect(componentError).toHaveLength(0);
expect(compoundError).toHaveLength(0);
@@ -22,42 +27,64 @@ describe("e2e test", () => {
const assemblyResult = assemble(
repertoire,
- config,
+ {
+ algebra: config.algebra,
+ encoder: config.encoder,
+ keyboard: config.form,
+ priority: [],
+ },
characters,
[],
analysisResult,
+ {},
);
expect(assemblyResult.length).toBeGreaterThan(6600);
});
it("checks stroke orders are correct", () => {
- const tygf = readFileSync("public/cache/tygf.txt", "utf-8")
- .trim()
- .split("\n")
- .map((x) => x.trim().split("\t"));
- const reference = new Map(tygf.map((x) => [x[1]!, x[3]!]));
- const result = new Map();
+ const tygf = new Map(
+ readFileSync("public/cache/tygf.txt", "utf-8")
+ .trim()
+ .split("\n")
+ .map((x) => x.trim().split("\t") as [string, string]),
+ );
+ const cjk = new Map(
+ readFileSync("public/cache/cjk.txt", "utf-8")
+ .trim()
+ .split("\n")
+ .map((x) => x.trim().split("\t") as [string, string]),
+ );
+ const result = new Map();
const summarize = (glyph: SVGGlyph) =>
glyph.map((x) => classifier[x.feature]).join("");
- for (const [char, { glyph }] of Object.entries(repertoire)) {
- if (glyph === undefined) continue;
- if (glyph.type === "basic_component") {
- result.set(char, summarize(glyph.strokes));
- } else {
- const svgglyph = recursiveRenderCompound(glyph, repertoire);
- if (svgglyph instanceof Error) throw svgglyph;
- result.set(char, summarize(svgglyph));
+ for (const [char, { glyphs }] of Object.entries(primitiveRepertoire)) {
+ for (const glyph of glyphs) {
+ if (glyph.tags?.includes("中竖截断")) continue;
+ if (glyph.tags?.includes("戈部截断")) continue;
+ let svg: SVGGlyph;
+ if (glyph.type === "basic_component") {
+ svg = glyph.strokes;
+ } else if (glyph.type === "derived_component") {
+ const svgglyph = recursiveRenderComponent(glyph, primitiveRepertoire);
+ svg = svgglyph instanceof Error ? [] : svgglyph;
+ } else {
+ const svgglyph = recursiveRenderCompound(glyph, repertoire);
+ svg = svgglyph instanceof Error ? [] : svgglyph;
+ }
+ result.set(char, (result.get(char) ?? []).concat(summarize(svg)));
}
}
let differences = 0;
- for (const [char, order] of result) {
- const referenceOrder = reference.get(char);
+ for (const [char, orders] of result) {
+ const referenceOrder = tygf.get(char) ?? cjk.get(char);
if (referenceOrder === undefined) continue;
- if (order !== referenceOrder) {
- differences += 1;
- console.log(char, order, referenceOrder);
+ for (const order of orders) {
+ if (order !== referenceOrder) {
+ differences += 1;
+ console.log(char, order, referenceOrder);
+ }
}
}
- expect(differences).toBe(0);
+ expect(differences).toBeLessThan(30);
});
});
diff --git a/spec/component.spec.ts b/spec/component.spec.ts
index b7473e8..2261080 100644
--- a/spec/component.spec.ts
+++ b/spec/component.spec.ts
@@ -2,14 +2,36 @@ import { describe, expect, it } from "vitest";
import {
classifier,
createConfig,
- defaultConfig,
+ generateSchemes,
getComponentScheme,
- listToObject,
+ makeIntervalSum,
recursiveRenderComponent,
renderRootList,
} from "~/lib";
-import type { DerivedComponent, PrimitiveRepertoire } from "~/lib";
-import { primitiveRepertoire, repertoire, computedComponents } from "./mock";
+import type { DerivedComponent } from "~/lib";
+import {
+ primitiveRepertoire,
+ repertoire,
+ computedComponents,
+ focusAnalysis,
+} from "./mock";
+
+describe("pruning", () => {
+ const strokes = 4;
+ const roots = [8, 4, 2, 1, 12, 6, 3, 14, 9].sort((a, b) => a - b);
+ const rootsSet = new Set(roots);
+
+ it("generate the correct set for 中", () => {
+ const set = makeIntervalSum(strokes, rootsSet);
+ const array = [...set].sort((a, b) => a - b);
+ expect(array).toEqual([3, 6, 12, 14]);
+ });
+
+ it("generate the correct schemes for 中", () => {
+ const schemes = generateSchemes(strokes, roots);
+ expect(schemes).toHaveLength(3);
+ });
+});
describe("recursive render component", () => {
it("has nong", () => {
@@ -25,13 +47,21 @@ describe("get component scheme", () => {
name: "",
data: "国标五分类",
keyboard: "米十五笔",
- encoder: "形音码",
+ encoder: "形音码(米十五笔)",
});
-
- const rootList = renderRootList(repertoire, config);
+ const analysisConfig = focusAnalysis(config, repertoire);
+ const rootList = renderRootList(repertoire, [
+ ...analysisConfig.primaryRoots,
+ ...analysisConfig.secondaryRoots,
+ ]);
it("can get component scheme", () => {
const 天 = computedComponents.天!;
- const scheme = getComponentScheme(天, rootList, config, classifier);
+ const scheme = getComponentScheme(
+ 天,
+ [...rootList.values()],
+ analysisConfig,
+ classifier,
+ );
expect(scheme).toHaveProperty("sequence");
});
});
diff --git a/spec/degenerator.spec.ts b/spec/degenerator.spec.ts
index cedde0f..c1708d7 100644
--- a/spec/degenerator.spec.ts
+++ b/spec/degenerator.spec.ts
@@ -4,12 +4,11 @@ import {
binaryToIndices,
defaultDegenerator,
generateSliceBinaries,
- defaultConfig,
} from "~/lib";
import { describe, it, expect } from "vitest";
import { create, all } from "mathjs";
import { computedGlyphs2 as renderedGlyphs, computedComponents } from "./mock";
-import { RenderedGlyph } from "~/lib";
+import type { RenderedGlyph } from "~/lib";
const { randomInt } = create(all!, {
randomSeed: "a",
@@ -46,39 +45,43 @@ describe("bi-directional conversion", () => {
describe("generate slice binaries", () => {
it("should find multiple occurence of a root", () => {
const { 丰, 十 } = computedComponents;
- expect(generateSliceBinaries(defaultConfig, 丰!, 十!)).toEqual([9, 5, 3]);
+ expect(generateSliceBinaries(defaultDegenerator, 丰!, 十!)).toEqual([
+ 9, 5, 3,
+ ]);
});
it("should be able to distinguish 土 and 士", () => {
const { 土, 士, 王, 壬 } = computedComponents;
- expect(generateSliceBinaries(defaultConfig, 王!, 土!)).toEqual([7]);
- expect(generateSliceBinaries(defaultConfig, 王!, 士!)).toEqual([]);
- expect(generateSliceBinaries(defaultConfig, 壬!, 土!)).toEqual([]);
- expect(generateSliceBinaries(defaultConfig, 壬!, 士!)).toEqual([7]);
+ expect(generateSliceBinaries(defaultDegenerator, 王!, 土!)).toEqual([7]);
+ expect(generateSliceBinaries(defaultDegenerator, 王!, 士!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 壬!, 土!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 壬!, 士!)).toEqual([7]);
});
it("should be able to distinguish 未 and 末", () => {
const { 未, 末, 朱, 耒 } = computedComponents;
- expect(generateSliceBinaries(defaultConfig, 朱!, 未!)).toEqual([31]);
- expect(generateSliceBinaries(defaultConfig, 耒!, 未!)).toEqual([47, 31]);
- expect(generateSliceBinaries(defaultConfig, 朱!, 末!)).toEqual([]);
- expect(generateSliceBinaries(defaultConfig, 耒!, 末!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 朱!, 未!)).toEqual([31]);
+ expect(generateSliceBinaries(defaultDegenerator, 耒!, 未!)).toEqual([
+ 47, 31,
+ ]);
+ expect(generateSliceBinaries(defaultDegenerator, 朱!, 末!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 耒!, 末!)).toEqual([]);
});
it("should be able to distinguish 口 and 囗", () => {
const { 口, 囗, 中, 日 } = computedComponents;
- expect(generateSliceBinaries(defaultConfig, 中!, 口!)).toEqual([14]);
- expect(generateSliceBinaries(defaultConfig, 中!, 囗!)).toEqual([]);
- expect(generateSliceBinaries(defaultConfig, 日!, 口!)).toEqual([]);
- expect(generateSliceBinaries(defaultConfig, 日!, 囗!)).toEqual([13]);
+ expect(generateSliceBinaries(defaultDegenerator, 中!, 口!)).toEqual([14]);
+ expect(generateSliceBinaries(defaultDegenerator, 中!, 囗!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 日!, 口!)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 日!, 囗!)).toEqual([13]);
});
it("should be able to distinguish 木无十 and 全字头", () => {
const 木无十 = computedComponents["\ue087"]!;
const 全字头 = computedComponents["\ue43d"]!;
const { 朱 } = computedComponents;
- expect(generateSliceBinaries(defaultConfig, 朱!, 木无十)).toEqual([3]);
- expect(generateSliceBinaries(defaultConfig, 朱!, 全字头)).toEqual([]);
+ expect(generateSliceBinaries(defaultDegenerator, 朱!, 木无十)).toEqual([3]);
+ expect(generateSliceBinaries(defaultDegenerator, 朱!, 全字头)).toEqual([]);
});
});
@@ -90,8 +93,11 @@ const hasroot = (a: RenderedGlyph, indices: number[], root: RenderedGlyph) => {
};
describe("degenerate cross tests", () => {
- const { 大, 天, 九, 丸, 山, 出, 冖, 农, 赤, 以, 人, 氺, 丆, 疌, 龰 } =
+ const { 大, 天, 九, 丸, 山, 出, 冖, 农, 以, 人, 氺, 丆, 疌, 龰, 夫, 龵, 象 } =
renderedGlyphs as any;
+ const mianwu = renderedGlyphs["\ue010"];
+ const han = renderedGlyphs["\ue104"]!;
+ const mao3 = renderedGlyphs["\ue17d"]!;
it("says 天 has 大", () => {
expect(degenerate(大)).toEqual(degenerate(slice(天, [1, 2, 3])));
});
@@ -118,6 +124,15 @@ describe("degenerate cross tests", () => {
it("says 疌 has 龰", () => {
hasroot(疌, [4, 5, 6, 7], 龰);
});
+ it("says E104 has 夫", () => {
+ hasroot(han, [7, 8, 9, 10], 夫);
+ });
+ it("says 龵 has 龵", () => {
+ hasroot(龵, [0, 1, 2], mao3);
+ });
+ it("says 象 has 免五", () => {
+ hasroot(象, [0, 1, 2, 3, 4], mianwu);
+ });
});
describe("degenerate cross tests 2", () => {
diff --git a/spec/element.spec.ts b/spec/element.spec.ts
index 0b7a565..b757c8a 100644
--- a/spec/element.spec.ts
+++ b/spec/element.spec.ts
@@ -5,8 +5,6 @@ import {
renderName,
renderList,
parseList,
- findElement,
- CodableObject,
} from "../src/lib/element";
describe("element", () => {
diff --git a/spec/form.spec.ts b/spec/form.spec.ts
index 52e3761..71d7918 100644
--- a/spec/form.spec.ts
+++ b/spec/form.spec.ts
@@ -4,8 +4,6 @@ import { generateSchemes } from "~/lib";
describe("generate schemes", () => {
it("works for a simple case", () => {
expect(generateSchemes(4, [1, 2, 4, 6, 7, 8, 12])).toEqual([
- [8, 4, 2, 1],
- [8, 6, 1],
[8, 7],
[12, 2, 1],
]);
diff --git a/spec/mock.ts b/spec/mock.ts
index f67f257..967c3f1 100644
--- a/spec/mock.ts
+++ b/spec/mock.ts
@@ -1,12 +1,23 @@
import rawrepertoire from "../public/cache/repertoire.json";
-import type { BasicComponent } from "~/lib";
-import { listToObject, determine, computeComponent } from "~/lib";
+import type {
+ AnalysisConfig,
+ BasicComponent,
+ Config,
+ PrimitiveCharacter,
+ Repertoire,
+} from "~/lib";
+import { determine, computeComponent } from "~/lib";
-export const primitiveRepertoire = listToObject(rawrepertoire);
+export const primitiveRepertoire = Object.fromEntries(
+ (rawrepertoire as PrimitiveCharacter[]).map((x) => [
+ String.fromCodePoint(x.unicode),
+ x,
+ ]),
+);
export const repertoire = determine(primitiveRepertoire);
export const computedComponents = Object.fromEntries(
Object.entries(repertoire)
- .filter(([k, v]) => v.glyph?.type === "basic_component")
+ .filter(([_, v]) => v.glyph?.type === "basic_component")
.map(([k, v]) => {
const glyph = (v.glyph as BasicComponent).strokes;
return [k, computeComponent(k, glyph)];
@@ -17,3 +28,16 @@ export const computedGlyphs2 = Object.fromEntries(
return [k, v.glyph];
}),
);
+
+export const focusAnalysis = (config: Config, repertoire: Repertoire) => {
+ const result: AnalysisConfig = {
+ analysis: config.analysis ?? {},
+ primaryRoots: new Set(
+ Object.keys(config.form.mapping).filter((x) => repertoire[x]),
+ ),
+ secondaryRoots: new Set(
+ Object.keys(config.form.grouping ?? []).filter((x) => repertoire[x]),
+ ),
+ };
+ return result;
+};
diff --git a/spec/selector.spec.ts b/spec/selector.spec.ts
index 5db9441..64cd92c 100644
--- a/spec/selector.spec.ts
+++ b/spec/selector.spec.ts
@@ -1,43 +1,49 @@
import { describe, expect, it } from "vitest";
-import { length, bias, order, crossing, attaching, Scheme } from "~/lib";
+import type { Environment, Scheme } from "~/lib";
+import { length, bias, order, crossing, attaching } from "~/lib";
import { select } from "~/lib";
-import { computedComponents, repertoire } from "./mock";
+import { computedComponents, focusAnalysis, repertoire } from "./mock";
import { defaultConfig } from "~/lib";
-import { Config } from "~/lib";
+const analysisConfig = focusAnalysis(defaultConfig, repertoire);
const { 天 } = computedComponents as any;
+const env: Environment = {
+ component: 天,
+ rootMap: new Map(),
+ ...analysisConfig,
+};
const rootMap = new Map();
describe("length", () => {
it("should measure the length of scheme", () => {
- expect(length.key([8, 7], 天, defaultConfig, rootMap)).toBe(2);
+ expect(length.key([8, 7], env)).toBe(2);
});
});
describe("bias", () => {
it("should measure the bias of scheme", () => {
- expect(bias.key([8, 7], 天, defaultConfig, rootMap)).toEqual([-1, -3]);
+ expect(bias.key([8, 7], env)).toEqual([-1, -3]);
});
});
describe("order", () => {
it("should measure the order of scheme", () => {
- expect(order.key([8, 7], 天, defaultConfig, rootMap)).toEqual(0);
+ expect(order.key([8, 7], env)).toEqual(0);
});
});
describe("crossing", () => {
it("should measure the crossing of scheme", () => {
- expect(crossing.key([8, 7], 天, defaultConfig, rootMap)).toBe(0);
- expect(crossing.key([12, 3], 天, defaultConfig, rootMap)).toBe(1);
+ expect(crossing.key([8, 7], env)).toBe(0);
+ expect(crossing.key([12, 3], env)).toBe(1);
});
});
describe("attaching", () => {
it("should measure the attaching of scheme", () => {
- expect(attaching.key([8, 7], 天, defaultConfig, rootMap)).toBe(1);
- expect(attaching.key([12, 3], 天, defaultConfig, rootMap)).toBe(0);
+ expect(attaching.key([8, 7], env)).toBe(1);
+ expect(attaching.key([12, 3], env)).toBe(0);
});
});
@@ -46,7 +52,7 @@ describe("select", () => {
expect(
(
select(
- defaultConfig,
+ analysisConfig,
天,
[
[12, 3],
@@ -55,8 +61,8 @@ describe("select", () => {
[8, 4, 2, 1],
],
rootMap,
- ) as [Scheme, unknown]
- )[0],
+ ) as [{ scheme: Scheme }, unknown]
+ )[0].scheme,
).toEqual([8, 7]);
});
});
diff --git a/spec/topology.spec.ts b/spec/topology.spec.ts
index cc3fb7e..b114a4f 100644
--- a/spec/topology.spec.ts
+++ b/spec/topology.spec.ts
@@ -1,7 +1,7 @@
import { expect, describe, it } from "vitest";
-import type { StrokeRelation } from "~/lib";
-import { findTopology, curveRelation, renderSVGGlyph } from "~/lib";
-import { CubicCurve, LinearCurve, area, render } from "~/lib";
+import type { StrokeRelation, CubicCurve, LinearCurve } from "~/lib";
+import { findTopology, curveRelation } from "~/lib";
+import { area } from "~/lib";
import type { Draw, Point } from "~/lib";
import { computedGlyphs2 as computedGlyphs } from "./mock";
import { getIntervalPosition, makeCurve } from "~/lib";
@@ -97,7 +97,7 @@ describe("curve relation", () => {
first: "中",
second: "前",
});
- expect(curveRelation(c1, c4)).toEqual({ type: "散", x: -0.5, y: -1 });
+ expect(curveRelation(c1, c4)).toEqual({ type: "散", x: 0, y: -1 });
expect(curveRelation(c2, c3)).toEqual({ type: "交" });
expect(curveRelation(c2, c4)).toEqual({
type: "连",
diff --git a/spec/utils.spec.ts b/spec/utils.spec.ts
index bb8a327..2ab7def 100644
--- a/spec/utils.spec.ts
+++ b/spec/utils.spec.ts
@@ -1,18 +1,13 @@
import { describe, it, expect } from "vitest";
import {
- printableAscii,
- unicodeBlock,
isValidCJKChar,
isPUA,
chars,
getDummyBasicComponent,
getDummyDerivedComponent,
- getDummyReferenceStroke,
- getDummySVGStroke,
getDummyCompound,
isComponent,
getSupplemental,
- listToObject,
getRecordFromTSV,
} from "~/lib/utils";
import { repertoire } from "./mock";
@@ -51,7 +46,7 @@ describe("misc", () => {
.filter(([, value]) => value.gb2312)
.map(([x]) => x);
const result = getSupplemental(repertoire, characters);
- expect(result.length).toBeGreaterThan(200);
+ expect(result.length).toBeGreaterThan(100);
});
it("parseTSV should parse a TSV string and return a record with the values", () => {
diff --git a/src/api.ts b/src/api.ts
index ce2560c..92bb836 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -30,6 +30,9 @@ const template =
export const list = async () =>
await template("GET")("repertoire/all");
+export const get = async (unicode: number) =>
+ template("GET")(`repertoire/${unicode}`);
+
export const post = template("POST");
interface PUA {
diff --git a/src/atoms/analysis.ts b/src/atoms/analysis.ts
index 513d225..67781dd 100644
--- a/src/atoms/analysis.ts
+++ b/src/atoms/analysis.ts
@@ -1,7 +1,7 @@
-import type { Analysis, Degenerator, Selector, SieveName } from "~/lib";
+import type { Analysis, Degenerator, Selector, Feature } from "~/lib";
import { focusAtom } from "jotai-optics";
import { analysisAtom } from "./config";
-import { Feature, mergeClassifier } from "~/lib";
+import { mergeClassifier } from "~/lib";
import { atom } from "jotai";
export const degeneratorAtom = focusAtom(analysisAtom, (o) =>
@@ -32,6 +32,12 @@ export const customizeAtom = focusAtom(analysisAtom, (o) =>
o.prop("customize").valueOr({} as NonNullable),
);
+export const customizeCornersAtom = focusAtom(analysisAtom, (o) =>
+ o
+ .prop("customizeCorners")
+ .valueOr({} as NonNullable),
+);
+
export const classifierCustomizationAtom = focusAtom(analysisAtom, (o) =>
o.prop("classifier").valueOr({} as Record),
);
@@ -40,3 +46,7 @@ export const customClassifierAtom = atom((get) => {
const customization = get(classifierCustomizationAtom);
return mergeClassifier(customization);
});
+
+export const serializerAtom = focusAtom(analysisAtom, (o) =>
+ o.prop("serializer").valueOr("sequential" as "sequential" | "c3"),
+);
diff --git a/src/atoms/assets.ts b/src/atoms/assets.ts
index 40a27e7..6c70558 100644
--- a/src/atoms/assets.ts
+++ b/src/atoms/assets.ts
@@ -1,6 +1,113 @@
import { atomWithStorage } from "jotai/utils";
-import { Dictionary, Distribution, Equivalence, Frequency } from ".";
+import type {
+ CustomElementMap,
+ Dictionary,
+ Distribution,
+ Equivalence,
+ Frequency,
+} from "~/lib";
import { MiniDb } from "jotai-minidb";
+import { atom } from "jotai";
+import {
+ adapt,
+ getDictFromTSV,
+ getDistributionFromTSV,
+ getRecordFromTSV,
+ type PrimitiveRepertoire,
+} from "~/lib";
+import { produce } from "immer";
+import { charactersAtom } from "./data";
+
+const _cache: Record = {};
+export async function fetchAsset(
+ filename: string,
+ type: "json" | "txt" = "json",
+) {
+ if (filename in _cache) {
+ return _cache[filename];
+ }
+ const response = await fetch(`/cache/${filename}.${type}`);
+ const content = await (type === "json" ? response.json() : response.text());
+ _cache[filename] = content;
+ return content;
+}
+
+export const primitiveRepertoireAtom = atom({});
+primitiveRepertoireAtom.debugLabel = "repertoire";
+
+export const mutateRepertoireAtom = atom(
+ null,
+ (get, set, twoUnicode: [number, number]) => {
+ const before = String.fromCodePoint(twoUnicode[0]);
+ const after = String.fromCodePoint(twoUnicode[1]);
+ const replaceIf = (s: string) => (s === before ? after : s);
+
+ set(primitiveRepertoireAtom, (previous) =>
+ produce(previous, (state) => {
+ // update itself
+ const value = state[before]!;
+ delete state[before];
+ state[after] = { ...value, unicode: after.codePointAt(0)! };
+ // update references
+ for (const [_, value] of Object.entries(state)) {
+ value.glyphs.forEach((x) => {
+ if (x.type === "derived_component") {
+ x.source = x.source && replaceIf(x.source);
+ } else if (x.type === "compound") {
+ x.operandList = x.operandList.map(replaceIf);
+ }
+ });
+ }
+ }),
+ );
+ },
+);
+
+export const defaultDictionaryAtom = atom>(async () =>
+ getDictFromTSV(await fetchAsset("dictionary", "txt")),
+);
+export const frequencyAtom = atom>(async () =>
+ getRecordFromTSV(await fetchAsset("frequency", "txt")),
+);
+export const keyDistributionAtom = atom>(async () =>
+ getDistributionFromTSV(await fetchAsset("key_distribution", "txt")),
+);
+export const pairEquivalenceAtom = atom>(async () =>
+ getRecordFromTSV(await fetchAsset("pair_equivalence", "txt")),
+);
+
+export interface Assets {
+ frequency: Frequency;
+ key_distribution: Distribution;
+ pair_equivalence: Equivalence;
+}
+
+export const assetsAtom = atom(async (get) => {
+ const frequency = get(userFrequencyAtom) ?? (await get(frequencyAtom));
+ const key_distribution =
+ get(userKeyDistributionAtom) ?? (await get(keyDistributionAtom));
+ const pair_equivalence =
+ get(userPairEquivalenceAtom) ?? (await get(pairEquivalenceAtom));
+ const assets: Assets = {
+ frequency,
+ key_distribution,
+ pair_equivalence,
+ };
+ return assets;
+});
+
+export const adaptedFrequencyAtom = atom(async (get) => {
+ const frequency = get(userFrequencyAtom) ?? (await get(frequencyAtom));
+ const characters = get(charactersAtom);
+ const dictionary = await get(dictionaryAtom);
+ const words = new Set(characters);
+ dictionary.forEach(([word]) => words.add(word));
+ return adapt(frequency, words);
+});
+
+export const dictionaryAtom = atom(async (get) => {
+ return get(userDictionaryAtom) ?? (await get(defaultDictionaryAtom));
+});
const db = new MiniDb();
@@ -19,3 +126,18 @@ export const userPairEquivalenceAtom = atomWithStorage(
"user_pair_equivalence",
undefined,
);
+
+export const customElementsAtom = atomWithStorage<
+ Record
+>("custom_elements", {});
+
+export const processedCustomElementsAtom = atom((get) => {
+ const customElements = get(customElementsAtom);
+ const content = new Map(
+ Object.entries(customElements).map(([name, map]) => {
+ const set = new Set(Object.values(map).flat());
+ return [name, [...set].sort().map((x) => `${name}-${x}`)];
+ }),
+ );
+ return content;
+});
diff --git a/src/atoms/cache.ts b/src/atoms/cache.ts
index 4c8832a..1b42c44 100644
--- a/src/atoms/cache.ts
+++ b/src/atoms/cache.ts
@@ -1,10 +1,119 @@
import { atom } from "jotai";
-import { EncodeResult } from "~/components/Utils";
-import { AssemblyResult } from "~/lib";
-import { AnalysisResult } from "~/lib";
+import type {
+ AnalysisConfig,
+ AnalysisResult,
+ Assembly,
+ AssemblyResult,
+ DictEntry,
+ EncodeResult,
+ Metric,
+ PronunciationElementTypes,
+} from "~/lib";
+import { applyRules, defaultAlgebra } from "~/lib";
+import {
+ algebraAtom,
+ analysisAtom,
+ charactersAtom,
+ configAtom,
+ dictionaryAtom,
+ encoderAtom,
+ groupingAtom,
+ keyboardAtom,
+ mappingAtom,
+ meaningfulObjectiveAtom,
+ priorityShortCodesAtom,
+ repertoireAtom,
+} from ".";
+import { assetsAtom, customElementsAtom } from "./assets";
+import { thread } from "./utils";
-export const analysisResultAtom = atom(null);
+const mergedAlgebraAtom = atom((get) => {
+ const algebra = get(algebraAtom);
+ return { ...algebra, ...defaultAlgebra };
+});
-export const assemblyResultAtom = atom(null);
+export const phonemeEnumerationAtom = atom((get) => {
+ const repertoire = get(repertoireAtom);
+ const syllables = [
+ ...new Set(
+ Object.values(repertoire)
+ .map((x) => x.readings.map((y) => y.pinyin))
+ .flat(),
+ ),
+ ];
+ const mergedAlgebras = Object.entries(get(mergedAlgebraAtom));
+ const content: Map = new Map(
+ mergedAlgebras.map(([name, rules]) => {
+ const list = [
+ ...new Set(syllables.map((s) => applyRules(name, rules, s))),
+ ].sort();
+ return [name as PronunciationElementTypes, list];
+ }),
+ );
+ return content;
+});
-export const encodeResultAtom = atom(null);
+export const analysisResultAtom = atom(async (get) => {
+ const repertoire = get(repertoireAtom);
+ const analysisConfig: AnalysisConfig = {
+ analysis: get(analysisAtom),
+ primaryRoots: new Set(
+ Object.keys(get(mappingAtom)).filter((x) => repertoire[x]),
+ ),
+ secondaryRoots: new Set(
+ Object.keys(get(groupingAtom)).filter((x) => repertoire[x]),
+ ),
+ };
+ const characters = get(charactersAtom);
+ return await thread.spawn("analysis", [
+ repertoire,
+ analysisConfig,
+ characters,
+ ]);
+});
+
+export const assemblyResultAtom = atom(async (get) => {
+ const repertoire = get(repertoireAtom);
+ const algebra = get(algebraAtom);
+ const encoder = get(encoderAtom);
+ const keyboard = get(keyboardAtom);
+ const characters = get(charactersAtom);
+ const dictionary = await get(dictionaryAtom);
+ const analysisResult = await get(analysisResultAtom);
+ const customElements = get(customElementsAtom);
+ const priority = get(priorityShortCodesAtom);
+ const config = { algebra, encoder, keyboard, priority };
+ return await thread.spawn("assembly", [
+ repertoire,
+ config,
+ characters,
+ dictionary,
+ analysisResult,
+ customElements,
+ ]);
+});
+
+export const encodeResultAtom = atom(async (get) => {
+ const objective = get(meaningfulObjectiveAtom);
+ const config = get(configAtom);
+ const assemblyResult = await get(assemblyResultAtom);
+ const assets = await get(assetsAtom);
+ return await thread.spawn<[EncodeResult, Metric]>("encode", [
+ objective,
+ config.info.name,
+ assemblyResult[0],
+ assets.pair_equivalence,
+ ]);
+});
+
+export interface Combined extends Assembly, DictEntry {}
+
+export const combinedResultAtom = atom(async (get) => {
+ const assemblyResult = await get(assemblyResultAtom);
+ const [encodeResult] = await get(encodeResultAtom);
+ const combined: Combined[] = assemblyResult.map((x, i) => ({
+ ...x,
+ ...encodeResult[i]!,
+ }));
+ return combined;
+});
diff --git a/src/atoms/config.ts b/src/atoms/config.ts
index d793ffe..f7fd8ad 100644
--- a/src/atoms/config.ts
+++ b/src/atoms/config.ts
@@ -1,28 +1,34 @@
import { atom } from "jotai";
-import { atomWithStorage } from "jotai/utils";
+import { atomFamily, atomWithStorage } from "jotai/utils";
+import type { Analysis, Data, EncoderConfig, Example } from "~/lib";
import {
defaultOptimization,
type Algebra,
type Config,
type Info,
- Analysis,
- Data,
- EncoderConfig,
+ defaultConfig,
+ examples,
} from "~/lib";
import { focusAtom } from "jotai-optics";
+import { atomWithLocation } from "jotai-location";
-/** 需要在根组件里提前修改它 */
-export const configIdAtom = atom("");
-configIdAtom.debugLabel = "id";
+const locationAtom = atomWithLocation();
-const configStorageAtomAtom = atom((get) => {
- const id = get(configIdAtom);
- return atomWithStorage(id, {} as Config);
+export const idAtom = atom((get) => {
+ if (import.meta.env.MODE === "CF") {
+ return get(locationAtom).pathname?.split("/")[1] ?? "";
+ } else {
+ return get(locationAtom).hash?.split("/")[1] ?? "";
+ }
});
+const configStorage = atomFamily((id: string) =>
+ atomWithStorage(id, examples[id as Example] ?? defaultConfig),
+);
+
export const configAtom = atom(
- (get) => get(get(configStorageAtomAtom)),
- (get, set, value: Config) => set(get(configStorageAtomAtom), value),
+ (get) => get(configStorage(get(idAtom))),
+ (get, set, value: Config) => set(configStorage(get(idAtom)), value),
);
configAtom.debugLabel = "config";
diff --git a/src/atoms/constants.ts b/src/atoms/constants.ts
deleted file mode 100644
index 2caefde..0000000
--- a/src/atoms/constants.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { atom } from "jotai";
-import type { PrimitiveRepertoire } from "~/lib";
-import { produce } from "immer";
-import {
- userFrequencyAtom,
- userKeyDistributionAtom,
- userPairEquivalenceAtom,
- userDictionaryAtom,
-} from "./assets";
-
-const _cache: Record = {};
-export async function fetchAsset(
- filename: string,
- type: "json" | "txt" = "json",
-) {
- if (filename in _cache) {
- return _cache[filename];
- }
- const response = await fetch(`/cache/${filename}.${type}`);
- const content = await (type === "json" ? response.json() : response.text());
- _cache[filename] = content;
- return content;
-}
-
-export const primitiveRepertoireAtom = atom({});
-primitiveRepertoireAtom.debugLabel = "repertoire";
-
-export const mutateRepertoireAtom = atom(
- null,
- (get, set, twoUnicode: [number, number]) => {
- const before = String.fromCodePoint(twoUnicode[0]);
- const after = String.fromCodePoint(twoUnicode[1]);
- const replaceIf = (s: string) => (s === before ? after : s);
-
- set(primitiveRepertoireAtom, (previous) =>
- produce(previous, (state) => {
- // update itself
- const value = state[before]!;
- delete state[before];
- state[after] = { ...value, unicode: after.codePointAt(0)! };
- // update references
- for (const [_, value] of Object.entries(state)) {
- value.glyphs.forEach((x) => {
- if (x.type === "derived_component") {
- x.source = x.source && replaceIf(x.source);
- } else if (x.type === "compound") {
- x.operandList = x.operandList.map(replaceIf);
- }
- });
- }
- }),
- );
- },
-);
-
-interface Loss {
- ideal: number;
- lt_penalty: number;
- gt_penalty: number;
-}
-
-export type Dictionary = [string, string][];
-export type Frequency = Record;
-export type Distribution = Record;
-export type Equivalence = Record;
-
-export const defaultDictionaryAtom = atom([]);
-export const frequencyAtom = atom({});
-export const keyDistributionAtom = atom({});
-export const pairEquivalenceAtom = atom({});
-
-export interface Assets {
- frequency: Frequency;
- key_distribution: Distribution;
- pair_equivalence: Equivalence;
-}
-
-export const assetsAtom = atom((get) => {
- const frequency = get(userFrequencyAtom) ?? get(frequencyAtom);
- const key_distribution =
- get(userKeyDistributionAtom) ?? get(keyDistributionAtom);
- const pair_equivalence =
- get(userPairEquivalenceAtom) ?? get(pairEquivalenceAtom);
- const assets: Assets = {
- frequency,
- key_distribution,
- pair_equivalence,
- };
- return assets;
-});
-
-export const dictionaryAtom = atom((get) => {
- return get(userDictionaryAtom) ?? get(defaultDictionaryAtom);
-});
diff --git a/src/atoms/data.ts b/src/atoms/data.ts
index f45221a..316ed43 100644
--- a/src/atoms/data.ts
+++ b/src/atoms/data.ts
@@ -1,14 +1,22 @@
-import { atom, useAtomValue } from "jotai";
-import { primitiveRepertoireAtom } from "./constants";
-import { isPUA } from "~/lib";
+import { atom } from "jotai";
+import { primitiveRepertoireAtom } from "./assets";
+import type {
+ CharacterSetSpecifier,
+ CustomReadings,
+ PrimitiveCharacter,
+} from "~/lib";
+import { isPUA, isValidCJKBasicChar, isValidCJKChar } from "~/lib";
import { recursiveRenderCompound } from "~/lib";
import { dataAtom } from ".";
import { focusAtom } from "jotai-optics";
-import { PrimitiveRepertoire, SVGGlyph } from "~/lib";
-import { CustomGlyph } from "~/lib";
+import type { PrimitiveRepertoire, SVGGlyph } from "~/lib";
+import type { CustomGlyph } from "~/lib";
import { determine } from "~/lib";
import { classifier } from "~/lib";
+export const characterSetAtom = focusAtom(dataAtom, (o) =>
+ o.prop("character_set").valueOr("general" as CharacterSetSpecifier),
+);
export const userRepertoireAtom = focusAtom(dataAtom, (o) =>
o.prop("repertoire").valueOr({} as PrimitiveRepertoire),
);
@@ -18,13 +26,34 @@ export const customGlyphAtom = focusAtom(dataAtom, (o) =>
);
customGlyphAtom.debugLabel = "config.data.customGlyph";
export const customReadingsAtom = focusAtom(dataAtom, (o) =>
- o.prop("reading_customization").valueOr({} as CustomGlyph),
+ o.prop("reading_customization").valueOr({} as CustomReadings),
);
customReadingsAtom.debugLabel = "config.data.customReadings";
export const userTagsAtom = focusAtom(dataAtom, (o) =>
o.prop("tags").valueOr([] as string[]),
);
+export const charactersAtom = atom((get) => {
+ const primitiveRepertoire = get(primitiveRepertoireAtom);
+ const characterSet = get(characterSetAtom);
+ const filters: Record<
+ CharacterSetSpecifier,
+ (k: string, v: PrimitiveCharacter) => boolean
+ > = {
+ minimal: (_, v) => v.gb2312 && v.tygf > 0,
+ gb2312: (_, v) => v.gb2312,
+ general: (_, v) => v.tygf > 0,
+ basic: (k, v) => v.tygf > 0 || isValidCJKBasicChar(k),
+ extended: (k, v) => v.tygf > 0 || isValidCJKChar(k),
+ };
+
+ const filter = filters[characterSet];
+ const characters = Object.entries(primitiveRepertoire)
+ .filter(([k, v]) => filter(k, v))
+ .map(([k]) => k);
+ return characters;
+});
+
export const allRepertoireAtom = atom((get) => {
const repertoire = get(primitiveRepertoireAtom);
const userRepertoire = get(userRepertoireAtom);
@@ -42,9 +71,10 @@ export const displayAtom = atom((get) => {
export const repertoireAtom = atom((get) => {
const repertoire = get(allRepertoireAtom);
- const customization = get(customGlyphAtom);
+ const customGlyph = get(customGlyphAtom);
+ const customReadings = get(customReadingsAtom);
const tags = get(userTagsAtom);
- return determine(repertoire, customization, tags);
+ return determine(repertoire, customGlyph, customReadings, tags);
});
export const glyphAtom = atom((get) => {
@@ -52,10 +82,11 @@ export const glyphAtom = atom((get) => {
const result = new Map();
for (const [char, { glyph }] of Object.entries(repertoire)) {
if (glyph === undefined) continue;
+ if (result.has(char)) continue;
if (glyph.type === "basic_component") {
result.set(char, glyph.strokes);
} else {
- const svgglyph = recursiveRenderCompound(glyph, repertoire);
+ const svgglyph = recursiveRenderCompound(glyph, repertoire, result);
if (svgglyph instanceof Error) continue;
result.set(char, svgglyph);
}
diff --git a/src/atoms/encoder.ts b/src/atoms/encoder.ts
index 5ea4323..b7cf89b 100644
--- a/src/atoms/encoder.ts
+++ b/src/atoms/encoder.ts
@@ -1,6 +1,13 @@
import { focusAtom } from "jotai-optics";
-import { encoderAtom } from ".";
-import { ShortCodeRule, ShortCodeScheme, WordRule } from "~/lib";
+import { atom, encoderAtom } from ".";
+import type {
+ LevelWeights,
+ Objective,
+ PartialWeights,
+ ShortCodeRule,
+ WordRule,
+} from "~/lib";
+import { range } from "lodash-es";
export const maxLengthAtom = focusAtom(encoderAtom, (o) =>
o.prop("max_length"),
@@ -35,3 +42,72 @@ export const sourcesAtom = focusAtom(encoderAtom, (o) => o.prop("sources"));
export const conditionsAtom = focusAtom(encoderAtom, (o) =>
o.prop("conditions"),
);
+
+const isMulti = (s: ShortCodeRule) => {
+ if ("length_equal" in s) {
+ return s.length_equal > 1;
+ } else {
+ return s.length_in_range[1] > 1;
+ }
+};
+
+const makeTier = (top: number, levelWeights: LevelWeights[]) => ({
+ top: top === 0 ? undefined : top,
+ duplication: 1,
+ levels: levelWeights,
+ fingering: [1, 1, 1, 1, 1, 1, null, null],
+});
+
+export const meaningfulObjectiveAtom = atom((get) => {
+ const wordRules = get(wordRulesAtom);
+ const shortCodeConfig = get(shortCodeConfigAtom);
+ const maxLength = get(maxLengthAtom);
+ const levelWeights: LevelWeights[] = range(1, maxLength + 1).map((i) => ({
+ length: i,
+ frequency: 1,
+ }));
+ const partialObjective: PartialWeights = {
+ duplication: 1,
+ key_distribution: 1,
+ pair_equivalence: 1,
+ fingering: [1, 1, 1, 1, 1, 1, null, null],
+ levels: levelWeights,
+ };
+ const p1 = {
+ ...partialObjective,
+ tiers: [300, 500, 1500, 3000, 4500, 6000, 0].map((x) =>
+ makeTier(x, levelWeights),
+ ),
+ };
+ const p2 = {
+ ...partialObjective,
+ tiers: [2000, 5000, 10000, 20000, 40000, 60000, 0].map((x) =>
+ makeTier(x, levelWeights),
+ ),
+ };
+ const objective: Objective = {
+ characters_full: p1,
+ };
+ if (wordRules.length > 0) {
+ objective.words_full = p2;
+ }
+ if (shortCodeConfig.length > 0) {
+ objective.characters_short = p1;
+ if (wordRules.length > 0 && shortCodeConfig.some(isMulti)) {
+ objective.words_short = p2;
+ }
+ }
+ return objective;
+});
+
+export const meaningfulTypesAtom = atom((get) => {
+ const objective = get(meaningfulObjectiveAtom);
+ return Object.keys(objective) as (keyof Objective)[];
+});
+
+export const typeLabels: Record = {
+ characters_full: "一字全码",
+ characters_short: "一字简码",
+ words_full: "多字全码",
+ words_short: "多字简码",
+};
diff --git a/src/atoms/hooks.ts b/src/atoms/hooks.ts
deleted file mode 100644
index 01b4840..0000000
--- a/src/atoms/hooks.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { Config, Key, isValidCJKChar } from "~/lib";
-import useTitle from "ahooks/es/useTitle";
-import init, { validate } from "libchai";
-import { LibchaiOutputEvent } from "~/worker";
-import { notification } from "antd";
-import { Err } from "~/api";
-
-export async function validateConfig(config: Config) {
- await init();
- try {
- validate(config);
- notification.success({
- message: "配置校验成功",
- description: "该配置可以被正常使用。",
- });
- return true;
- } catch (e) {
- notification.error({
- message: "配置校验失败,原因是:",
- description: (e as Error).message,
- });
- return false;
- }
-}
-
-export interface DictEntry {
- name: string;
- full: string;
- full_rank: number;
- short: string;
- short_rank: number;
-}
-
-export const errorFeedback = function (
- res: T | Err,
-): res is Err {
- if (typeof res === "object") {
- notification.error({
- message: "无法完成该操作",
- description: JSON.stringify(res),
- });
- return true;
- } else {
- notification.success({
- message: "操作成功",
- });
- return false;
- }
-};
-
-export const verifyNewName = (newName: string) => {
- if (!Array.from(newName).every(isValidCJKChar)) {
- notification.error({
- message: "名称含有非法字符",
- description: "只有 CJK 基本集或扩展集 A 中的才是合法字符",
- });
- return false;
- }
- return true;
-};
-
-export type EncodeResult = DictEntry[];
-
-export const makeEncodeCallback = (setCode: (e: EncodeResult) => void) => {
- return (event: MessageEvent) => {
- const { data } = event;
- switch (data.type) {
- case "code":
- setCode(data.code);
- notification.success({
- message: "生成成功!",
- });
- break;
- case "error":
- notification.error({
- message: "生成过程中 libchai 出现错误",
- description: data.error.message,
- });
- break;
- }
- };
-};
-
-export function useChaifenTitle(title: string) {
- useTitle(`${title} · 汉字自动拆分系统 ${APP_VERSION}`, {
- restoreOnUnmount: true,
- });
-}
diff --git a/src/atoms/index.ts b/src/atoms/index.ts
index 91930c8..af90ea6 100644
--- a/src/atoms/index.ts
+++ b/src/atoms/index.ts
@@ -1,16 +1,18 @@
-import { WritableAtom, useAtom, useAtomValue, useSetAtom } from "jotai";
+import type { WritableAtom } from "jotai";
+import { useAtomValue, useSetAtom } from "jotai";
export * from "jotai";
-export * from "./constants";
+export * from "./analysis";
+export * from "./assets";
+export * from "./cache";
export * from "./config";
export * from "./data";
-export * from "./hooks";
-export * from "./keyboard";
export * from "./encoder";
-export * from "./analysis";
+export * from "./keyboard";
export * from "./optimization";
+export * from "./utils";
import * as O from "optics-ts/standalone";
-import { SetStateAction } from "react";
+import type { SetStateAction } from "react";
export function useAddAtom(
atom: WritableAtom, [SetStateAction>], void>,
diff --git a/src/atoms/keyboard.ts b/src/atoms/keyboard.ts
index 5b6091a..8cf4cc9 100644
--- a/src/atoms/keyboard.ts
+++ b/src/atoms/keyboard.ts
@@ -1,6 +1,6 @@
import { focusAtom } from "jotai-optics";
import { keyboardAtom } from "./config";
-import { Grouping } from "~/lib";
+import type { Grouping } from "~/lib";
export const alphabetAtom = focusAtom(keyboardAtom, (o) => o.prop("alphabet"));
diff --git a/src/atoms/optimization.ts b/src/atoms/optimization.ts
index 3e505df..0cefac5 100644
--- a/src/atoms/optimization.ts
+++ b/src/atoms/optimization.ts
@@ -1,5 +1,5 @@
import { focusAtom } from "jotai-optics";
-import { atom, optimAtom } from ".";
+import { optimAtom } from ".";
export const objectiveAtom = focusAtom(optimAtom, (o) => o.prop("objective"));
objectiveAtom.debugLabel = "optimization.objective";
diff --git a/src/atoms/utils.ts b/src/atoms/utils.ts
new file mode 100644
index 0000000..0317446
--- /dev/null
+++ b/src/atoms/utils.ts
@@ -0,0 +1,143 @@
+import type { Config } from "~/lib";
+import { isValidCJKChar, stringifySequence } from "~/lib";
+import useTitle from "ahooks/es/useTitle";
+import init, { validate } from "libchai";
+import { notification } from "antd";
+import type { Err } from "~/api";
+import { createContext } from "react";
+import { isEqual } from "lodash-es";
+import { diff } from "deep-object-diff";
+import { load } from "js-yaml";
+import type { WorkerOutput } from "~/worker";
+import { atomEffect } from "jotai-effect";
+import { configAtom } from "./config";
+import { assetsAtom } from "./assets";
+import { assemblyResultAtom } from "./cache";
+
+export const syncConfig = atomEffect((get) => {
+ const value = get(configAtom);
+ thread.spawn("sync", ["config", value]);
+});
+
+export const syncAssets = atomEffect((get) => {
+ get(assetsAtom).then(async (value) => {
+ await thread.spawn("sync", ["assets", value]);
+ });
+});
+
+export const syncInfo = atomEffect((get) => {
+ get(assemblyResultAtom).then(async (value) => {
+ await thread.spawn("sync", ["info", stringifySequence(value)]);
+ });
+});
+
+export const RemoteContext = createContext(true);
+
+export async function validateConfig(config: Config) {
+ await init();
+ try {
+ validate(config);
+ notification.success({
+ message: "配置校验成功",
+ description: "该配置可以被正常使用。",
+ });
+ return true;
+ } catch (e) {
+ notification.error({
+ message: "配置校验失败,原因是:",
+ description: (e as Error).message,
+ });
+ return false;
+ }
+}
+
+export async function roundTestConfig(config: Config) {
+ await init();
+ try {
+ const rustConfig = load(validate(config)) as object;
+ if (isEqual(config, rustConfig)) {
+ notification.success({
+ message: "配置环行成功",
+ description: "该配置在 libchai 中具有同样语义。",
+ });
+ return true;
+ } else {
+ notification.warning({
+ message: "配置环行失败",
+ description:
+ "该配置在 libchai 中具有不同语义。以下是两者的差异:\n" +
+ JSON.stringify(diff(config, rustConfig)),
+ });
+ return false;
+ }
+ } catch (e) {
+ notification.error({
+ message: "配置校验失败,原因是:",
+ description: (e as Error).message,
+ });
+ return false;
+ }
+}
+
+export const errorFeedback = function (
+ res: T | Err,
+): res is Err {
+ if (typeof res === "object") {
+ notification.error({
+ message: "无法完成该操作",
+ description: JSON.stringify(res),
+ });
+ return true;
+ } else {
+ notification.success({
+ message: "操作成功",
+ });
+ return false;
+ }
+};
+
+export const verifyNewName = (newName: string) => {
+ if (!Array.from(newName).every(isValidCJKChar)) {
+ notification.error({
+ message: "名称含有非法字符",
+ description: "只有 CJK 基本集或扩展集 A 中的才是合法字符",
+ });
+ return false;
+ }
+ return true;
+};
+
+export function useChaifenTitle(title: string) {
+ // eslint-disable-next-line
+ useTitle(`${title} · 汉字自动拆分系统 ${APP_VERSION}`, {
+ restoreOnUnmount: true,
+ });
+}
+
+export class Thread {
+ public worker: Worker;
+ public constructor() {
+ this.worker = new Worker(new URL("../worker.ts", import.meta.url), {
+ type: "module",
+ });
+ }
+
+ public async spawn(type: string, data: any[]): Promise {
+ return await new Promise((resolve, reject) => {
+ const channel = new MessageChannel();
+ channel.port1.onmessage = ({ data }: { data: WorkerOutput }) => {
+ channel.port1.close();
+ if (data.type === "success") {
+ resolve(data.result);
+ } else if (data.type === "error") {
+ reject(data.error);
+ } else {
+ throw new Error(`Unexpected message: ${data}`);
+ }
+ };
+ this.worker.postMessage({ type, data }, [channel.port2]);
+ });
+ }
+}
+
+export const thread = new Thread();
diff --git a/src/bex/img/logo128.png b/src/bex/img/logo128.png
deleted file mode 100644
index 1000091..0000000
Binary files a/src/bex/img/logo128.png and /dev/null differ
diff --git a/src/bex/img/logo16.png b/src/bex/img/logo16.png
deleted file mode 100644
index 6d737fa..0000000
Binary files a/src/bex/img/logo16.png and /dev/null differ
diff --git a/src/bex/img/logo256.png b/src/bex/img/logo256.png
deleted file mode 100644
index 3baa457..0000000
Binary files a/src/bex/img/logo256.png and /dev/null differ
diff --git a/src/bex/img/logo48.png b/src/bex/img/logo48.png
deleted file mode 100644
index c69cacb..0000000
Binary files a/src/bex/img/logo48.png and /dev/null differ
diff --git a/src/bex/manifest.json b/src/bex/manifest.json
deleted file mode 100644
index 502089a..0000000
--- a/src/bex/manifest.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "汉字自动拆分系统",
- "version": "0.0.0",
- "manifest_version": 3,
- "author": "汉字自动拆分开发团队",
- "description": "为用户提供了一个方便的图形界面,使方案设计更加便捷。",
- "icons": {
- "16": "img/logo16.png",
- "48": "img/logo48.png",
- "128": "img/logo128.png",
- "256": "img/logo256.png"
- },
- "homepage_url": "https://github.com/hanzi-chai/hanzi-chai.github.io",
- "action": {
- "default_popup": "popup.html",
- "default_icon": {
- "16": "img/logo16.png",
- "48": "img/logo48.png",
- "128": "img/logo128.png",
- "256": "img/logo256.png"
- }
- },
- "permissions": ["https://api.chaifen.app/*"]
-}
diff --git a/src/bex/popup.html b/src/bex/popup.html
deleted file mode 100644
index 8d46171..0000000
--- a/src/bex/popup.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- popup
-
-
-
- 即将运行汉字自动拆分系统……
-
-
-
diff --git a/src/bex/popup.js b/src/bex/popup.js
deleted file mode 100644
index a76833f..0000000
--- a/src/bex/popup.js
+++ /dev/null
@@ -1 +0,0 @@
-chrome.tabs.create({ url: "index.html" });
diff --git a/src/components/Action.tsx b/src/components/Action.tsx
index a4ec628..c36f4dc 100644
--- a/src/components/Action.tsx
+++ b/src/components/Action.tsx
@@ -6,15 +6,9 @@ import {
Input,
Popconfirm,
Popover,
- Space,
} from "antd";
-import {
- ForwardedRef,
- createContext,
- forwardRef,
- useContext,
- useState,
-} from "react";
+import type { ForwardedRef } from "react";
+import { forwardRef, useContext, useState } from "react";
import {
remoteCreate,
remoteCreateWithoutUnicode,
@@ -23,18 +17,18 @@ import {
remoteMutate,
} from "~/api";
import { DeleteButton, Select } from "~/components/Utils";
+import type { Reading } from "~/lib";
import {
chars,
isValidCJKChar,
- getDummyBasicComponent,
getDummyCompound,
getDummyDerivedComponent,
+ getDummyBasicComponent,
} from "~/lib";
import {
useAtomValue,
useSetAtom,
mutateRepertoireAtom,
- useAtom,
repertoireAtom,
nextUnicodeAtom,
useAddAtom,
@@ -44,20 +38,21 @@ import {
customGlyphAtom,
errorFeedback,
verifyNewName,
+ RemoteContext,
+ customReadingsAtom,
} from "~/atoms";
-import { PrimitiveCharacter, Compound, Component } from "~/lib";
+import type { PrimitiveCharacter, Compound, Component } from "~/lib";
import ComponentForm from "./ComponentForm";
import CompoundForm from "./CompoundForm";
-import { MenuProps } from "antd/lib";
+import type { MenuProps } from "antd/lib";
import * as O from "optics-ts/standalone";
+import ReadingForm from "./ReadingForm";
interface CreateProps {
charOrName: string;
type: "component" | "compound";
}
-export const RemoteContext = createContext(true);
-
export const Create = forwardRef(
(
{ onCreate }: { onCreate: (s: string) => void },
@@ -176,6 +171,9 @@ export const Mutate = ({ unicode }: { unicode: number }) => {
const [newName, setNewName] = useState("");
const remote = useContext(RemoteContext);
const mutate = useSetAtom(mutateRepertoireAtom);
+ const repertoire = useAtomValue(primitiveRepertoireAtom);
+ const update = useAddAtom(primitiveRepertoireAtom);
+ const name = String.fromCodePoint(unicode);
return (
{
}
onConfirm={async () => {
const valid = verifyNewName(newName);
- if (!valid || newName.length > 1) return;
- const newUnicode = newName.codePointAt(0)!;
- const payload = { old: unicode, new: newUnicode };
- const res = await remoteMutate(payload);
- if (!errorFeedback(res)) {
- mutate([unicode, newUnicode]);
+ if (!valid) return;
+ if (Array.from(newName).length === 1) {
+ // 改变 Unicode,需要联动更新
+ const newUnicode = newName.codePointAt(0)!;
+ const payload = { old: unicode, new: newUnicode };
+ const res = await remoteMutate(payload);
+ if (!errorFeedback(res)) {
+ mutate([unicode, newUnicode]);
+ }
+ } else {
+ // 改变别名,不需要联动更新
+ const character = repertoire[name];
+ if (!character) return;
+ const newCharacter: PrimitiveCharacter = {
+ ...character,
+ name: newName,
+ };
+ const res = await remoteUpdate(newCharacter);
+ if (!errorFeedback(res)) {
+ update(name, newCharacter);
+ }
}
}}
>
@@ -209,18 +222,12 @@ export const Mutate = ({ unicode }: { unicode: number }) => {
export const Delete = ({ unicode }: { unicode: number }) => {
const remote = useContext(RemoteContext);
const userRepertoire = useAtomValue(userRepertoireAtom);
- const customization = useAtomValue(customGlyphAtom);
const remove = useRemoveAtom(primitiveRepertoireAtom);
const removeUser = useRemoveAtom(userRepertoireAtom);
- const removeCustom = useRemoveAtom(customGlyphAtom);
const char = String.fromCodePoint(unicode);
return (
{
if (remote) {
const res = await remoteRemove(unicode);
@@ -229,21 +236,20 @@ export const Delete = ({ unicode }: { unicode: number }) => {
}
} else {
removeUser(char);
- removeCustom(char);
}
}}
/>
);
};
-export const Add = ({ character }: { character: PrimitiveCharacter }) => {
+export const EditGlyph = ({ character }: { character: PrimitiveCharacter }) => {
const remote = useContext(RemoteContext);
const repertoire = useAtomValue(primitiveRepertoireAtom);
const add = useAddAtom(primitiveRepertoireAtom);
- const userRepertoire = useAtomValue(userRepertoireAtom);
const addUser = useAddAtom(userRepertoireAtom);
const customGlyph = useAtomValue(customGlyphAtom);
const addCustomization = useAddAtom(customGlyphAtom);
+ const removeCustomization = useRemoveAtom(customGlyphAtom);
const name = String.fromCodePoint(character.unicode);
const isCustomization = !remote && repertoire[name] !== undefined;
const onFinish = async (component: Component | Compound) => {
@@ -268,7 +274,7 @@ export const Add = ({ character }: { character: PrimitiveCharacter }) => {
return true;
}
};
- let items: MenuProps["items"] = [
+ const items: MenuProps["items"] = [
{
key: -1,
label: (
@@ -282,7 +288,7 @@ export const Add = ({ character }: { character: PrimitiveCharacter }) => {
),
},
{
- key: -2,
+ key: -3,
label: (
{
),
},
];
+ if (remote) {
+ items.unshift({
+ key: -2,
+ label: (
+
+ ),
+ });
+ }
if (isCustomization) {
items.unshift(
...character.glyphs.map((x, index) => ({
key: index,
label: `选择第 ${index + 1} 个系统字形`,
- onClick: () => {
- addCustomization(name, x);
- },
+ onClick: () => addCustomization(name, x),
})),
);
+ if (customGlyph[name] !== undefined) {
+ items.push({
+ key: -3,
+ label: 取消自定义字形,
+ onClick: () => removeCustomization(name),
+ });
+ }
}
return (
-
-
+
+
+
+ );
+};
+
+export const EditReading = ({
+ character,
+}: {
+ character: PrimitiveCharacter;
+}) => {
+ const remote = useContext(RemoteContext);
+ const add = useAddAtom(primitiveRepertoireAtom);
+ const addUser = useAddAtom(userRepertoireAtom);
+ const repertoire = useAtomValue(primitiveRepertoireAtom);
+ const customReadings = useAtomValue(customReadingsAtom);
+ const addCustomReading = useAddAtom(customReadingsAtom);
+ const removeCustomReading = useRemoveAtom(customReadingsAtom);
+ const name = String.fromCodePoint(character.unicode);
+ const readings = customReadings[name] ?? character.readings;
+ const isCustomization = !remote && repertoire[name] !== undefined;
+ const onFinish = async ({ readings }: { readings: Reading[] }) => {
+ if (isCustomization) {
+ addCustomReading(name, readings);
+ return true;
+ }
+ const newCharacter = { ...character, readings };
+ if (remote) {
+ const res = await remoteUpdate(newCharacter);
+ if (!errorFeedback(res)) {
+ add(name, newCharacter);
+ return true;
+ }
+ return false;
+ } else {
+ addUser(name, newCharacter);
+ return true;
+ }
+ };
+ const items: MenuProps["items"] = [
+ {
+ key: -1,
+ label: (
+
+ ),
+ },
+ ];
+ if (isCustomization && customReadings[name] !== undefined) {
+ items.push({
+ key: -2,
+ label: 取消自定义字音,
+ onClick: () => removeCustomReading(name),
+ });
+ }
+ return (
+
+
);
};
diff --git a/src/components/Algebra.tsx b/src/components/Algebra.tsx
index 8e0afad..28cf29c 100644
--- a/src/components/Algebra.tsx
+++ b/src/components/Algebra.tsx
@@ -1,25 +1,22 @@
-import { PlusOutlined } from "@ant-design/icons";
import {
ModalForm,
- ProForm,
ProFormGroup,
ProFormList,
ProFormSelect,
ProFormText,
} from "@ant-design/pro-components";
import { Button, Form, Space, notification } from "antd";
-import { CloseCircleOutlined, CopyOutlined } from "@ant-design/icons";
-import { Rule } from "~/lib";
-import { useAtom } from "jotai";
+import type { Rule } from "~/lib";
import { algebraAtom, useAddAtom } from "~/atoms";
import { defaultAlgebra } from "~/lib";
+import { ArrowDownOutlined, ArrowUpOutlined } from "@ant-design/icons";
interface AlgebraForm {
name: string;
rules: Rule[];
}
-export default function ({
+export default function Algebra({
title,
initialValues,
disabled,
@@ -29,7 +26,6 @@ export default function ({
disabled?: boolean;
}) {
const [form] = Form.useForm();
- const [algebra, setAlgebra] = useAtom(algebraAtom);
const addAlgebra = useAddAtom(algebraAtom);
return (
@@ -73,10 +69,32 @@ export default function ({
{
+ return [
+ ...defaultActionDom,
+ {
+ if (field.name === 0) {
+ action.move(field.name, count - 1);
+ } else {
+ action.move(field.name, field.name - 1);
+ }
+ }}
+ />,
+ {
+ if (field.name === count - 1) {
+ action.move(field.name, 0);
+ } else {
+ action.move(field.name, field.name + 1);
+ }
+ }}
+ />,
+ ];
}}
>
diff --git a/src/components/AnalysisCustomizer.tsx b/src/components/AnalysisCustomizer.tsx
deleted file mode 100644
index 065eb6d..0000000
--- a/src/components/AnalysisCustomizer.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import { useState, memo, useCallback } from "react";
-import {
- useSetAtom,
- useAtomValue,
- analysisAtom,
- displayAtom,
- useAddAtom,
- customizeAtom,
- useRemoveAtom,
-} from "~/atoms";
-import { Button, Flex, Popover } from "antd";
-import { DeleteButton, MinusButton, PlusButton } from "./Utils";
-import Char from "./Character";
-import Root from "./Element";
-import ElementSelect, { ElementSelectProps } from "./ElementSelect";
-import { GlyphSelect } from "./CharacterSelect";
-
-function RootSelectPopover(props: ElementSelectProps) {
- const display = useAtomValue(displayAtom);
- const [open, setOpen] = useState(false);
- return (
- setOpen(v)}
- trigger="hover"
- content={
- {
- props.onChange(v);
- setOpen(false);
- }}
- />
- }
- >
- {display(props.char!)}
-
- );
-}
-
-const EachSequence = ({
- component,
- sequencejoin,
- display,
-}: {
- component: string;
- sequencejoin: string;
- display: Function;
-}) => {
- const sequence = sequencejoin.split(" ");
- const addCustomization = useAddAtom(customizeAtom);
- const removeCustomization = useRemoveAtom(customizeAtom);
-
- return (
-
- {display(component)}
-
- {sequence.map((x, i) => (
-
- addCustomization(
- component,
- sequence.map((y, j) => (i === j ? s : y)),
- )
- }
- />
- ))}
- addCustomization(component, sequence.concat("1"))}
- />
-
- addCustomization(component, sequence.slice(0, sequence.length - 1))
- }
- />
- removeCustomization(component)} />
-
-
- );
-};
-
-const MemoEachSequence = memo(EachSequence);
-
-const AnalysisCustomizer = () => {
- const customize = useAtomValue(analysisAtom)?.customize ?? {};
- const display = useAtomValue(displayAtom);
- const [newCustomization, setNew] = useState(undefined);
- const addCustomization = useAddAtom(customizeAtom);
- return (
-
- {Object.entries(customize).map(([component, sequence]) => (
-
- ))}
-
- {
- return glyph.glyph?.type === "basic_component";
- }}
- />
-
-
-
- );
-};
-
-export default AnalysisCustomizer;
diff --git a/src/components/CharacterQuery.tsx b/src/components/CharacterQuery.tsx
index 6d0f143..97745dd 100644
--- a/src/components/CharacterQuery.tsx
+++ b/src/components/CharacterQuery.tsx
@@ -1,5 +1,6 @@
-import { Form, Input } from "antd";
-import { Operator, PrimitiveRepertoire, Repertoire, operators } from "~/lib";
+import { Form } from "antd";
+import type { CharacterFilter } from "~/lib";
+import { operators } from "~/lib";
import {
ProFormDigit,
ProFormSelect,
@@ -14,71 +15,14 @@ interface StrokeSearchProps {
setFilter: (s: CharacterFilter) => void;
}
-export const makeCharacterFilter =
- (
- input: CharacterFilter,
- repertoire: Repertoire | PrimitiveRepertoire,
- sequence: Map,
- ) =>
- (char: string) => {
- const character = repertoire[char];
- if (character === undefined) return false;
- const name = character.name ?? "";
- const seq = sequence.get(char) ?? "";
- const isNameMatched = (name + char).includes(input.name ?? "");
- const isSequenceMatched = seq.startsWith(input.sequence ?? "");
- const isUnicodeMatched =
- input.unicode === undefined || input.unicode === char.codePointAt(0);
- const isTagMatched =
- input.tag === undefined ||
- ("glyphs" in character &&
- character.glyphs.some((x) => x.tags?.includes(input.tag!))) ||
- ("glyph" in character && character.glyph?.tags?.includes(input.tag));
- const isOperatorMatched =
- input.operator === undefined ||
- ("glyphs" in character &&
- character.glyphs.some(
- (x) => "operator" in x && x.operator.includes(input.operator!),
- )) ||
- ("glyph" in character &&
- character.glyph?.type === "compound" &&
- character.glyph.operator.includes(input.operator));
- const isPartMatched =
- input.part === undefined ||
- ("glyphs" in character &&
- character.glyphs.some(
- (x) => "operandList" in x && x.operandList.includes(input.part!),
- )) ||
- ("glyph" in character &&
- character.glyph?.type === "compound" &&
- character.glyph.operandList.includes(input.part));
- return (
- isNameMatched &&
- isSequenceMatched &&
- isUnicodeMatched &&
- isTagMatched &&
- isOperatorMatched &&
- isPartMatched
- );
- };
-
-export interface CharacterFilter {
- name?: string;
- sequence?: string;
- unicode?: number;
- tag?: string;
- part?: string;
- operator?: Operator;
-}
-
-export default function ({ setFilter }: StrokeSearchProps) {
+export default function CharacterQuery({ setFilter }: StrokeSearchProps) {
const tags = useAtomValue(tagsAtom);
return (
onValuesChange={async (_, values) => setFilter(values)}
- labelWidth="auto"
submitter={false}
style={{ maxWidth: 1080 }}
+ autoFocusFirstInput={false}
>
diff --git a/src/components/CharacterSearch.tsx b/src/components/CharacterSearch.tsx
index 993bc7c..36fe413 100644
--- a/src/components/CharacterSearch.tsx
+++ b/src/components/CharacterSearch.tsx
@@ -1,23 +1,15 @@
import { Input } from "antd";
import SearchOutlined from "@ant-design/icons/SearchOutlined";
-import { Repertoire } from "~/lib";
interface StrokeSearchProps {
setSequence: (s: string) => void;
disabled?: boolean;
}
-export const makeFilter =
- (input: string, form: Repertoire, sequence: Map) =>
- (char: string) => {
- let name = form[char]?.name ?? "";
- let seq = sequence.get(char) ?? "";
- return (
- name.includes(input) || char.includes(input) || seq.startsWith(input)
- );
- };
-
-export default function ({ setSequence, disabled }: StrokeSearchProps) {
+export default function CharacterSearch({
+ setSequence,
+ disabled,
+}: StrokeSearchProps) {
return (
boolean;
@@ -20,14 +20,14 @@ export const GlyphSelect = (props: ItemSelectProps & ProFormSelectProps) => {
useEffect(() => {
const initial = char ? [{ value: char, label: display(char) }] : [];
setData(initial);
- }, [props.value]);
+ }, [props.value, char, display]);
const onSearch = (input: string) => {
if (input.length === 0) {
setData([]);
return;
}
const allResults = sortedRepertoire
- .filter(props.customFilter ?? ((_) => true))
+ .filter(customFilter ?? (() => true))
.map(([x]) => ({
value: x,
label: display(x),
diff --git a/src/components/CharacterTable.tsx b/src/components/CharacterTable.tsx
index 62940bc..cc01fd5 100644
--- a/src/components/CharacterTable.tsx
+++ b/src/components/CharacterTable.tsx
@@ -1,5 +1,5 @@
-import React, { useContext, useRef, useState } from "react";
-import { isPUA, unicodeBlock } from "~/lib";
+import { useContext, useRef, useState } from "react";
+import { isPUA, makeCharacterFilter, unicodeBlock } from "~/lib";
import {
Checkbox,
Flex,
@@ -8,11 +8,11 @@ import {
Space,
Tooltip,
Tour,
- Typography,
} from "antd";
import type { ColumnType, ColumnsType } from "antd/es/table";
import Table from "antd/es/table";
import {
+ RemoteContext,
allRepertoireAtom,
customGlyphAtom,
customReadingsAtom,
@@ -25,33 +25,46 @@ import {
userRepertoireAtom,
userTagsAtom,
} from "~/atoms";
-import type { PrimitiveCharacter } from "~/lib";
+import type { CharacterFilter, PrimitiveCharacter, Reading } from "~/lib";
import {
- Add,
+ EditGlyph,
Create,
Delete,
Mutate,
QuickPatchAmbiguous,
- RemoteContext,
+ EditReading,
} from "~/components/Action";
import ComponentForm from "./ComponentForm";
import CompoundForm from "./CompoundForm";
import { remoteUpdate } from "~/api";
-import { DeleteButton, PlusButton } from "./Utils";
-import Root from "./Element";
+import { DeleteButton } from "./Utils";
+import Element from "./Element";
import * as O from "optics-ts/standalone";
-import CharacterQuery, {
- CharacterFilter,
- makeCharacterFilter,
-} from "./CharacterQuery";
+import CharacterQuery from "./CharacterQuery";
import TagPicker from "./TagPicker";
import { findGlyphIndex } from "~/lib";
-import { TourProps } from "antd/lib";
+import type { TourProps } from "antd/lib";
import { QuestionCircleOutlined } from "@ant-design/icons";
type Column = ColumnType;
-const CharacterTable = () => {
+function ReadingList({ readings }: { readings: Reading[] }) {
+ return (
+
+ {readings.map((reading, index) => {
+ const core = {reading.pinyin};
+ if (readings.length === 1) return core;
+ return (
+
+ {core}
+
+ );
+ })}
+
+ );
+}
+
+export default function CharacterTable() {
const allRepertoire = useAtomValue(allRepertoireAtom);
const userRepertoire = useAtomValue(userRepertoireAtom);
const addUser = useAddAtom(userRepertoireAtom);
@@ -130,17 +143,7 @@ const CharacterTable = () => {
const readings: Column = {
title: "系统字音",
dataIndex: "readings",
- render: (_, record) => {
- return (
-
- {record.readings.map((reading, index) => {
- const core = {reading.pinyin};
- if (record.readings.length === 1) return core;
- return {core};
- })}
-
- );
- },
+ render: (_, record) => ,
width: 128,
};
@@ -198,7 +201,7 @@ const CharacterTable = () => {
) : (
{
@@ -230,8 +233,17 @@ const CharacterTable = () => {
return as.localeCompare(bs);
},
sortDirections: ["ascend", "descend"],
- filters: [{ text: "无字形", value: 1 }],
- onFilter: (_, record) => record.glyphs.length === 0,
+ };
+
+ const customReadingsColumn: Column = {
+ title: "自定义字音",
+ render: (_, character) => {
+ const maybeReadings =
+ customReadings[String.fromCodePoint(character.unicode)];
+ if (maybeReadings === undefined) return null;
+ return ;
+ },
+ width: 128,
};
const customGlyphColumn: Column = {
@@ -258,7 +270,7 @@ const CharacterTable = () => {
/>
) : (
{
@@ -271,12 +283,7 @@ const CharacterTable = () => {
);
},
- width: 192,
- sorter: (a, b) => {
- const [as, bs] = [JSON.stringify(a.glyphs), JSON.stringify(b.glyphs)];
- return as.localeCompare(bs);
- },
- sortDirections: ["ascend", "descend"],
+ width: 128,
};
const ambiguous: Column = {
@@ -298,7 +305,8 @@ const CharacterTable = () => {
key: "option",
render: (_, record) => (
-
+
+
@@ -358,6 +366,7 @@ const CharacterTable = () => {
unicodeColumn,
readings,
glyphs,
+ customReadingsColumn,
customGlyphColumn,
operations,
];
@@ -374,7 +383,7 @@ const CharacterTable = () => {
- {}} ref={ref3} />
+ {}} ref={ref3} />
@@ -404,6 +413,4 @@ const CharacterTable = () => {
);
-};
-
-export default CharacterTable;
+}
diff --git a/src/components/Classifier.tsx b/src/components/Classifier.tsx
index d2d6e46..0a18c10 100644
--- a/src/components/Classifier.tsx
+++ b/src/components/Classifier.tsx
@@ -4,15 +4,14 @@ import {
customClassifierAtom,
useAddAtom,
useAtomValue,
- useSetAtom,
} from "~/atoms";
import { Button, Flex, Space, notification } from "antd";
-import Root from "~/components/Element";
+import Element from "~/components/Element";
import { DndContext, useDraggable, useDroppable } from "@dnd-kit/core";
import type { PropsWithChildren } from "react";
import { useState } from "react";
import { blue } from "@ant-design/colors";
-import { Feature } from "~/lib";
+import type { Feature } from "~/lib";
function Draggable({ name }: { name: string }) {
const { attributes, listeners, setNodeRef, transform } = useDraggable({
@@ -25,9 +24,9 @@ function Draggable({ name }: { name: string }) {
: undefined;
return (
-
+
{name}
-
+
);
}
@@ -54,7 +53,7 @@ const Droppable = ({ id, children }: PropsWithChildren<{ id: number }>) => {
);
};
-const Classifier = () => {
+export default function Classifier() {
const classifier = useAtomValue(customClassifierAtom);
const add = useAddAtom(classifierCustomizationAtom);
const [categories, setCategories] = useState(
@@ -82,7 +81,7 @@ const Classifier = () => {
{items.map(([x, v]) => (
- {x}
+ {x}
{v.map((s) => (
@@ -112,6 +111,4 @@ const Classifier = () => {
);
-};
-
-export default Classifier;
+}
diff --git a/src/components/ComponentForm.tsx b/src/components/ComponentForm.tsx
index df401cf..0b3f66e 100644
--- a/src/components/ComponentForm.tsx
+++ b/src/components/ComponentForm.tsx
@@ -1,38 +1,36 @@
-import {
- Button,
- Flex,
- Form,
- Dropdown,
- notification,
- FormListFieldData,
-} from "antd";
-import { EditorColumn, EditorRow, NumberInput } from "./Utils";
-import { MutableRefObject, ReactNode, useRef } from "react";
-import type { PrimitiveCharacter, Component, Character } from "~/lib";
+import type { FormListFieldData, MenuProps } from "antd";
+import { Button, Dropdown, Flex, Form } from "antd";
+import { EditorColumn, EditorRow } from "./Utils";
+import type { MutableRefObject, ReactNode } from "react";
+import { useRef } from "react";
+import type { Character, Component, SVGStroke } from "~/lib";
import type { Feature } from "~/lib";
import { getDummySVGStroke, schema } from "~/lib";
import { getDummyReferenceStroke, isComponent } from "~/lib";
import { allRepertoireAtom, useAtomValue } from "~/atoms";
import { GlyphSelect } from "./CharacterSelect";
+import type {
+ ProFormInstance,
+ ProFormListProps,
+} from "@ant-design/pro-components";
import {
- ModalForm,
+ ModalForm as _ModalForm,
ProFormDependency,
ProFormDigit,
ProFormGroup,
- ProFormInstance,
ProFormList,
- ProFormListProps,
ProFormSelect,
} from "@ant-design/pro-components";
import styled from "styled-components";
import { CommonForm } from "./CompoundForm";
-import Root from "./Element";
+import Element from "./Element";
import { recursiveRenderComponent } from "~/lib";
import { Box, StrokesView } from "./GlyphView";
-import { BaseOptionType } from "antd/es/select";
+import type { BaseOptionType } from "antd/es/select";
+import { ArrowDownOutlined, ArrowUpOutlined } from "@ant-design/icons";
const Digit = ({ name }: { name: (string | number)[] }) => (
-
+
);
const InlineFlex = styled.div`
@@ -40,6 +38,25 @@ const InlineFlex = styled.div`
margin-right: 8px;
`;
+const ModalForm = styled(_ModalForm)`
+ & .ant-pro-form-list-action {
+ margin: 0;
+ }
+
+ & .ant-pro-form-list-item {
+ justify-content: space-between !important;
+ align-items: center !important;
+ }
+
+ & .ant-form-item {
+ margin-bottom: 8px;
+ }
+
+ & .ant-pro-form-list > .ant-form-item {
+ margin-bottom: 0;
+ }
+`;
+
export const InlineRender = ({
listDom,
action,
@@ -72,10 +89,11 @@ const strokeOptions = Object.keys(schema).map((x) => ({
label: x,
}));
const classifiedStrokeOptions: BaseOptionType[] = [
- { key: 0, label: "基本", children: strokeOptions.slice(0, 10) },
- { key: 1, label: "折类 I", children: strokeOptions.slice(10, 23) },
- { key: 2, label: "折类 II", children: strokeOptions.slice(23, 30) },
- { key: 4, label: "折类 III", children: strokeOptions.slice(30) },
+ { key: 0, label: "横竖", children: strokeOptions.slice(0, 4) },
+ { key: 1, label: "撇点", children: strokeOptions.slice(4, 11) },
+ { key: 2, label: "折类 I", children: strokeOptions.slice(11, 24) },
+ { key: 3, label: "折类 II", children: strokeOptions.slice(24, 31) },
+ { key: 4, label: "折类 III", children: strokeOptions.slice(31) },
];
const referenceOption: BaseOptionType = {
label: "引用笔画",
@@ -93,10 +111,9 @@ const StrokeForm = ({
}) => {
return (
<>
-
+
name="feature"
- style={{ width: "96px" }}
options={[referenceOption].concat(classifiedStrokeOptions)}
disabled
allowClear={false}
@@ -129,13 +146,21 @@ const StrokeForm = ({
)
}
-
+
{({ feature }) =>
feature !== "reference" ? (
-
-
+
+
{({ command }) =>
command === "c" || command === "z" ? (
@@ -163,7 +188,7 @@ const StrokeForm = ({
);
};
-const ComponentForm = ({
+export default function ComponentForm({
title,
initialValues,
current,
@@ -179,14 +204,14 @@ const ComponentForm = ({
noButton?: boolean;
primary?: boolean;
readonly?: boolean;
-}) => {
+}) {
const repertoire = useAtomValue(allRepertoireAtom);
const trigger = noButton ? (
{title}
) : (
- {title}
+ {title}
);
- const isValidSource = ([name, _]: [string, Character]) => {
+ const isValidSource = ([name]: [string, Character]) => {
let component: Component | undefined =
repertoire[name]?.glyphs.find(isComponent);
if (component === undefined) return false;
@@ -214,8 +239,8 @@ const ComponentForm = ({
formRef={formRef}
>
-
-
+
+
{(props) => {
const component = props as Component;
@@ -226,13 +251,21 @@ const ComponentForm = ({
return (
{
+ const projection = component.strokes.map((x, index) =>
+ x.feature === "reference" ? x : g[index]!,
+ );
+ formRef.current?.setFieldsValue({
+ strokes: projection,
+ });
+ }}
/>
);
}}
-
+
{({ type }) =>
@@ -256,25 +289,80 @@ const ComponentForm = ({
.length ?? 0
: 0;
return (
-
- {(meta, index) => {
- return (
+ <>
+ {
+ return [
+ ...defaultActionDom,
+ {
+ if (field.name === 0) {
+ action.move(field.name, count - 1);
+ } else {
+ action.move(field.name, field.name - 1);
+ }
+ }}
+ />,
+ {
+ if (field.name === count - 1) {
+ action.move(field.name, 0);
+ } else {
+ action.move(field.name, field.name + 1);
+ }
+ }}
+ />,
+ ];
+ }}
+ >
+ {(meta) => (
- );
- }}
-
+ )}
+
+
+ {
+ const newStroke = getDummySVGStroke(
+ item.key as Feature,
+ );
+ formRef.current?.setFieldValue(
+ "strokes",
+ formRef.current
+ ?.getFieldValue("strokes")
+ ?.concat(newStroke),
+ );
+ },
+ }}
+ >
+
+
+
+
+ >
);
}}
@@ -282,6 +370,4 @@ const ComponentForm = ({
);
-};
-
-export default ComponentForm;
+}
diff --git a/src/components/CompoundForm.tsx b/src/components/CompoundForm.tsx
index 067653e..eb14635 100644
--- a/src/components/CompoundForm.tsx
+++ b/src/components/CompoundForm.tsx
@@ -1,4 +1,4 @@
-import { AutoComplete, Button, Flex, Form, Typography } from "antd";
+import { Button, Flex, Form } from "antd";
import type { Compound } from "~/lib";
import { operators } from "~/lib";
import { useWatch } from "antd/es/form/Form";
@@ -13,7 +13,7 @@ import {
import { InlineRender, StaticList } from "./ComponentForm";
import { useAtomValue } from "jotai";
import { repertoireAtom, tagsAtom } from "~/atoms";
-import Root from "./Element";
+import Element from "./Element";
import { EditorColumn, EditorRow } from "./Utils";
import { Box, StrokesView } from "./GlyphView";
import { recursiveRenderCompound } from "~/lib";
@@ -32,33 +32,17 @@ export const CommonForm = () => {
]}
disabled
/>
- "标签"}
- >
- {(meta) => (
-
- ({ label: x, value: x }))}
- />
-
- )}
-
+ mode="tags"
+ options={tags.map((x) => ({ label: x, value: x }))}
+ />
);
};
-const CompoundForm = ({
+export default function CompoundForm({
title,
initialValues,
onFinish,
@@ -72,14 +56,14 @@ const CompoundForm = ({
noButton?: boolean;
primary?: boolean;
readonly?: boolean;
-}) => {
+}) {
const repertoire = useAtomValue(repertoireAtom);
const [form] = Form.useForm();
const list: string[] = useWatch("operandList", form);
const trigger = noButton ? (
{title}
) : (
- {title}
+ {title}
);
return (
@@ -119,7 +103,7 @@ const CompoundForm = ({
{
const newLength = value === "⿲" || value === "⿳" ? 3 : 2;
const newList = list.concat("一").slice(0, newLength);
@@ -128,9 +112,9 @@ const CompoundForm = ({
options={operators.map((x) => ({ value: x, label: x }))}
style={{ width: "96px" }}
allowClear={false}
- >
-
- {(meta, i) => (
+ />
+
+ {(meta) => (
@@ -139,7 +123,7 @@ const CompoundForm = ({
({
+ options={[...Array(12).keys()].map((x) => ({
value: x,
label: x === 0 ? "取剩余全部" : `取 ${x} 笔`,
}))}
@@ -163,10 +147,17 @@ const CompoundForm = ({
/>
+
+
+
);
-};
-
-export default CompoundForm;
+}
diff --git a/src/components/ConfigManager.tsx b/src/components/ConfigManager.tsx
index 4737af1..f6ab8e1 100644
--- a/src/components/ConfigManager.tsx
+++ b/src/components/ConfigManager.tsx
@@ -1,5 +1,5 @@
-import { Button, Flex, notification } from "antd";
-import { configAtom, useAtom, validateConfig } from "~/atoms";
+import { Button, Flex } from "antd";
+import { configAtom, roundTestConfig, useAtom, validateConfig } from "~/atoms";
import { examples, exportYAML } from "~/lib";
export default function ConfigManager() {
@@ -8,6 +8,7 @@ export default function ConfigManager() {
return (
+
diff --git a/src/components/Debugger.tsx b/src/components/Debugger.tsx
index 81ba034..c17fdee 100644
--- a/src/components/Debugger.tsx
+++ b/src/components/Debugger.tsx
@@ -1,18 +1,25 @@
-import {
- Button,
- Flex,
- Form,
- Radio,
- Space,
- Statistic,
- Switch,
- Table,
- Typography,
- notification,
-} from "antd";
+import { Flex, Form, Statistic, Switch, Table } from "antd";
+import type { ColumnsType } from "antd/es/table";
+import { useAtom, useAtomValue } from "jotai";
+import { atomWithStorage } from "jotai/utils";
+import { useMemo, useState } from "react";
+import { charactersAtom, configAtom, repertoireAtom } from "~/atoms";
+import { encodeResultAtom } from "~/atoms";
import { Select, Uploader } from "~/components/Utils";
+import type { DictEntry } from "~/lib";
+import { getSupplemental } from "~/lib";
-export default function () {
+interface DictEntryWithReference extends DictEntry {
+ reference: string[];
+ status: "correct" | "incorrect" | "unknown";
+ hash: string;
+}
+
+export default function Debugger() {
+ const config = useAtomValue(configAtom);
+ const repertoire = useAtomValue(repertoireAtom);
+ const characters = useAtomValue(charactersAtom);
+ const [code] = useAtomValue(encodeResultAtom);
const referenceAtom = useMemo(
() =>
atomWithStorage>(
@@ -23,11 +30,11 @@ export default function () {
);
const [reference, setReference] = useAtom(referenceAtom);
- const [debug, setDebug] = useState(false);
+ const [incorrectOnly, setIncorrectOnly] = useState(false);
const filterOptions = ["成字部件", "非成字部件", "所有汉字"] as const;
const [filterOption, setFilterOption] = useState("所有汉字");
type FilterOption = (typeof filterOptions)[number];
- const supplemental = getSupplemental(repertoire, list);
+ const supplemental = getSupplemental(repertoire, characters);
const filterMap: Record boolean> = {
成字部件: (char) => repertoire[char]?.glyph?.type === "basic_component",
非成字部件: (char) => supplemental.includes(char),
@@ -38,28 +45,51 @@ export default function () {
let correct = 0;
let incorrect = 0;
let unknown = 0;
- if (debug && dataSource && mode === "character") {
- dataSource = dataSource.filter(({ item, full }) => {
- if (!filterFn(item)) return false;
- const codes = reference[item];
- if (codes === undefined) {
+ let dataSource: DictEntryWithReference[] = code
+ .filter((x) => [...x.name].length === 1 && filterFn(x.name))
+ .map((x) => {
+ const codes = reference[x.name] ?? [];
+ const hash = `${x.name}-${x.full}`;
+ let status: "correct" | "incorrect" | "unknown" = "unknown";
+ if (codes.length === 0) {
unknown += 1;
- return false;
- } else if (!codes.includes(full)) {
+ } else if (!codes.includes(x.full)) {
incorrect += 1;
- return true;
+ status = "incorrect";
} else {
correct += 1;
- return false;
+ status = "correct";
}
+ return { ...x, reference: codes, status, hash };
});
+
+ if (incorrectOnly) {
+ dataSource = dataSource.filter((x) => x.status === "incorrect");
}
+ const columns: ColumnsType = [
+ {
+ title: "字符",
+ dataIndex: "name",
+ key: "name",
+ },
+ {
+ title: "全码",
+ dataIndex: "full",
+ key: "full",
+ },
+ {
+ title: "参考全码",
+ dataIndex: "reference",
+ key: "reference",
+ render: (codes) => codes.join(", "),
+ },
+ ];
+
return (
<>
校对模式
-
x.split("\t"));
+ .map((x) => x.trim().split("\t"));
for (const line of tsv) {
const [key, value] = line;
if (key !== undefined && value !== undefined) {
- ref[key] = [value];
+ ref[key] = (ref[key] ?? []).concat(value);
}
}
setReference(ref);
@@ -81,35 +111,42 @@ export default function () {
{reference !== undefined &&
`已加载码表,条数:${Object.keys(reference).length}`}
- {debug && (
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- )}
+
+
>
);
}
diff --git a/src/components/Degenerator.tsx b/src/components/Degenerator.tsx
index 27000ed..1cfbbc0 100644
--- a/src/components/Degenerator.tsx
+++ b/src/components/Degenerator.tsx
@@ -1,60 +1,60 @@
-import { Button, Checkbox, Flex, Typography } from "antd";
+import { Button } from "antd";
+import { degeneratorAtom, useAtom } from "~/atoms";
+import type { Feature } from "~/lib";
+import { classifier } from "~/lib";
import {
- useAtomValue,
- useSetAtom,
- useAddAtom,
- degeneratorAtom,
- useRemoveAtom,
- degeneratorFeatureAtom,
- degeneratorNoCrossAtom,
-} from "~/atoms";
-import { DeleteButton, Select } from "./Utils";
-import { classifier, Feature } from "~/lib";
-import { useState } from "react";
+ ModalForm,
+ ProFormGroup,
+ ProFormList,
+ ProFormSelect,
+ ProFormSwitch,
+} from "@ant-design/pro-components";
-const Degenerator = () => {
- const degenerator = useAtomValue(degeneratorAtom);
- const addFeature = useAddAtom(degeneratorFeatureAtom);
- const removeFeature = useRemoveAtom(degeneratorFeatureAtom);
- const switchNoCross = useSetAtom(degeneratorNoCrossAtom);
- const [feature, setFeature] = useState("横");
+export default function Degenerator() {
+ const [degenerator, setDegenerator] = useAtom(degeneratorAtom);
+ const initialValue = {
+ no_cross: degenerator.no_cross,
+ feature: Object.entries(degenerator.feature ?? {}).map(([from, to]) => ({
+ from,
+ to,
+ })),
+ };
const options = Object.keys(classifier).map((feature) => ({
label: feature,
value: feature,
}));
return (
- <>
- 字根认同
-
- {Object.entries(degenerator.feature ?? {}).map(([from, to]) => (
-
- 认为
- {from as Feature}
- 与
-
- ))}
-
-
-
-
- switchNoCross(e.target.checked)}
- >
- 相交不拆
-
-
- >
+
+ trigger={}
+ title="字根认同"
+ initialValues={initialValue}
+ layout="horizontal"
+ onFinish={async (values) => {
+ const acc = {} as Record;
+ values.feature.forEach(({ from, to }) => {
+ acc[from] = to;
+ });
+ setDegenerator({ no_cross: values.no_cross, feature: acc });
+ return true;
+ }}
+ >
+
+
+
+
+
+
+
+
);
-};
-
-export default Degenerator;
+}
diff --git a/src/components/DetailEditor.tsx b/src/components/DetailEditor.tsx
index db84830..acb7fb2 100644
--- a/src/components/DetailEditor.tsx
+++ b/src/components/DetailEditor.tsx
@@ -1,14 +1,13 @@
-import { Panel, useReactFlow } from "reactflow";
-import type { ConditionData, SourceData } from "./graph";
+import { Panel } from "reactflow";
import styled from "styled-components";
import { Cascader, Flex, Form, Typography } from "antd";
-import type { CodableObject } from "~/lib";
+import type { CodableObject, Condition, Source, UnaryOp } from "~/lib";
import { parseList, defaultAlgebra, renderList } from "~/lib";
import { Select } from "./Utils";
-import type { Op, UnaryOp } from "~/lib";
-import { binaryOps, ops, unaryOps } from "~/lib";
+import { ops, unaryOps } from "~/lib";
import TextArea from "antd/es/input/TextArea";
import { useAtomValue, keyboardAtom, algebraAtom } from "~/atoms";
+import { customElementsAtom } from "~/atoms";
const Background = styled(Flex)`
width: 240px;
@@ -27,14 +26,20 @@ interface Option {
label: string;
children?: Option[];
}
-const DetailEditor = ({ selected }: { selected: string }) => {
- const { setNodes, getNodes, getNode } = useReactFlow<
- SourceData | ConditionData
- >();
- const nodes = getNodes();
- const { data } = getNode(selected)!;
+
+export default function DetailEditor({
+ selected,
+ data,
+ setData,
+}: {
+ selected: string;
+ data: Source | Condition | undefined;
+ setData: (data: Source | Condition) => void;
+}) {
const { alphabet } = useAtomValue(keyboardAtom);
const algebra = useAtomValue(algebraAtom);
+ const customElements = useAtomValue(customElementsAtom);
+ if (data === undefined) return null;
const genericIndices = [...Array(10).keys()]
.map((x) => [x + 1, -(x + 1)])
.flat();
@@ -99,12 +104,29 @@ const DetailEditor = ({ selected }: { selected: string }) => {
label: v,
})),
},
+ {
+ value: "自定义",
+ label: "自定义",
+ children: Object.keys(customElements).map((v) => ({
+ value: v,
+ label: v,
+ children: genericIndices.map((v) => {
+ return {
+ value: v,
+ label: `第 ${v.toString()} 元`,
+ };
+ }),
+ })),
+ },
+ {
+ value: "特殊",
+ label: "特殊",
+ children: [
+ { value: "张码补码", label: "张码补码" },
+ { value: "张码准码元", label: "张码准码元" },
+ ],
+ },
];
- const update = (data: SourceData | ConditionData) => {
- setNodes(
- nodes.map((node) => (node.id === selected ? { ...node, data } : node)),
- );
- };
return (
@@ -118,7 +140,7 @@ const DetailEditor = ({ selected }: { selected: string }) => {
options={options}
onChange={(event) => {
const object = parseList(event) as CodableObject;
- update({ ...data, object });
+ setData({ ...data, object });
}}
/>
@@ -133,8 +155,8 @@ const DetailEditor = ({ selected }: { selected: string }) => {
}))}
onChange={(event) => {
event === -1
- ? update({ ...data, index: undefined })
- : update({ ...data, index: event });
+ ? setData({ ...data, index: undefined })
+ : setData({ ...data, index: event });
}}
/>
@@ -150,10 +172,10 @@ const DetailEditor = ({ selected }: { selected: string }) => {
value: v,
}))}
onChange={(event) => {
- if ((unaryOps as readonly Op[]).includes(event)) {
- update({ ...data, operator: event });
+ if (unaryOps.includes(event as UnaryOp)) {
+ setData({ ...data, operator: event as UnaryOp });
} else {
- update({
+ setData({
...data,
operator: event,
value: "",
@@ -169,7 +191,7 @@ const DetailEditor = ({ selected }: { selected: string }) => {
style={{ width: "128px" }}
value={data.value}
onChange={(event) =>
- update({ ...data, value: event.target.value })
+ setData({ ...data, value: event.target.value })
}
/>
@@ -179,6 +201,4 @@ const DetailEditor = ({ selected }: { selected: string }) => {
);
-};
-
-export default DetailEditor;
+}
diff --git a/src/components/Element.tsx b/src/components/Element.tsx
index f41c95c..1999fa2 100644
--- a/src/components/Element.tsx
+++ b/src/components/Element.tsx
@@ -1,10 +1,10 @@
import styled from "styled-components";
import { Button } from "antd";
-const Root = styled(Button)`
+const Element = styled(Button)`
min-width: 32px;
padding: 0 8px;
height: 32px;
` as typeof Button;
-export default Root;
+export default Element;
diff --git a/src/components/ElementAdder.tsx b/src/components/ElementAdder.tsx
index 9511241..8b5cc29 100644
--- a/src/components/ElementAdder.tsx
+++ b/src/components/ElementAdder.tsx
@@ -1,5 +1,5 @@
import { useState } from "react";
-import { Select, Button, Flex } from "antd";
+import { Button, Flex } from "antd";
import {
keyboardAtom,
useAtomValue,
@@ -10,9 +10,10 @@ import {
} from "~/atoms";
import ElementSelect from "./ElementSelect";
import KeySelect from "./KeySelect";
-import { Key, joinKeys } from "~/lib";
+import type { Key } from "~/lib";
+import { joinKeys } from "~/lib";
-const ElementAdder = ({ element }: { element?: string }) => {
+export default function ElementAdder({ element }: { element?: string }) {
const { alphabet, mapping_type, mapping } = useAtomValue(keyboardAtom);
const [main, setMain] = useState(Object.keys(mapping)[0]!);
const [keys, setKeys] = useState([alphabet[0]!, "", "", ""]);
@@ -56,7 +57,7 @@ const ElementAdder = ({ element }: { element?: string }) => {
归并至
setMain(event)}
/>
{/*
>
);
-};
-
-export default ElementAdder;
+}
diff --git a/src/components/ElementPicker.tsx b/src/components/ElementPicker.tsx
index f7f6841..b4054ad 100644
--- a/src/components/ElementPicker.tsx
+++ b/src/components/ElementPicker.tsx
@@ -1,30 +1,20 @@
-import { Button, Flex, Tabs } from "antd";
+import { Button, Cascader, Flex, Popover, Typography } from "antd";
import { useState } from "react";
import ElementAdder from "./ElementAdder";
import ElementPool from "./ElementPool";
-import styled from "styled-components";
import {
algebraAtom,
customClassifierAtom,
- repertoireAtom,
+ processedCustomElementsAtom,
sortedRepertoireAtom,
useAtomValue,
useRemoveAtom,
} from "~/atoms";
import Algebra from "./Algebra";
-import { PronunciationElementTypes, applyRules, defaultAlgebra } from "~/lib";
+import type { PronunciationElementTypes } from "~/lib";
import { operators } from "~/lib";
-
-interface ElementPickerProps {
- content: Map;
- editable?: boolean;
-}
-
-const Wrapper = styled(Tabs)`
- & .ant-tabs-nav-wrap {
- transform: none !important;
- }
-`;
+import { phonemeEnumerationAtom } from "~/atoms";
+import QuestionCircleOutlined from "@ant-design/icons/QuestionCircleOutlined";
const AlgebraEditor = function ({
type,
@@ -61,8 +51,34 @@ const AlgebraEditor = function ({
const shapeElementTypes = ["字根", "笔画", "二笔", "结构"] as const;
export type ShapeElementTypes = (typeof shapeElementTypes)[number];
-export const ShapeElementPicker = function () {
+interface Option {
+ value: string | number;
+ label: string;
+ children?: Option[];
+ disabled?: boolean;
+}
+
+const pronunciationElementsDescription = (
+
+ -
+ 「声母」和「韵母」是按照《汉语拼音方案》中所规定的声母和韵母来切分一个音节,例如
+ yan 分析为零声母 + ian;
+
+ -
+ 「双拼声母」和「双拼韵母」是按照自然码等双拼方案中的习惯来切分一个音节,例如
+ yan 分析为 y + an;
+
+ - 「首字母」和「末字母」是二笔和形音码等方案中采取的元素类型;
+ - 您可利用拼写运算创造新的字音元素类型。
+
+);
+
+type PrimaryTypes = "shape" | "pronunciation" | "custom";
+
+const useAllElements = () => {
const customizedClassifier = useAtomValue(customClassifierAtom);
+ const pronunciationElements = useAtomValue(phonemeEnumerationAtom);
+ const customElements = useAtomValue(processedCustomElementsAtom);
const sortedForm = useAtomValue(sortedRepertoireAtom);
const allStrokes = Array.from(new Set(Object.values(customizedClassifier)))
.sort()
@@ -71,89 +87,82 @@ export const ShapeElementPicker = function () {
.map((x) => ["0"].concat(allStrokes).map((y) => x + y))
.flat();
const allGlyph = sortedForm.map(([x]) => x);
- const content: Map = new Map([
+ const shapeElements: Map = new Map([
["字根", allGlyph],
["笔画", allStrokes],
["二笔", allErbi],
["结构", [...operators]],
]);
- const [element, setElement] = useState(undefined);
- const [type, setType] = useState("字根");
- return (
-
- {
- return {
- label: name,
- key: name,
- children: (
-
- ),
- };
- })}
- onChange={(e) => {
- setType(e as ShapeElementTypes);
- }}
- />
-
-
- );
+ const elements: Record> = {
+ shape: shapeElements,
+ pronunciation: pronunciationElements,
+ custom: customElements,
+ };
+ return elements;
};
-export const PronElementPicker = function () {
- const characters = useAtomValue(repertoireAtom);
- const algebra = useAtomValue(algebraAtom);
+export default function ElementPicker() {
const [element, setElement] = useState(undefined);
- const [type, setType] = useState("声母");
- const syllables = [
- ...new Set(
- Object.values(characters)
- .map((x) => x.readings.map((y) => y.pinyin))
- .flat(),
- ),
+ const [types, setTypes] = useState<[string, string]>(["shape", "字根"]);
+ const elements = useAllElements();
+ const { shape, pronunciation, custom } = elements;
+ const [primary, secondary] = types;
+ const currentElements = elements[primary as PrimaryTypes].get(secondary)!;
+ const options: Option[] = [
+ {
+ value: "shape",
+ label: "字形",
+ children: [...shape.keys()].map((v) => ({
+ value: v,
+ label: v,
+ })),
+ },
+ {
+ value: "pronunciation",
+ label: "字音",
+ children: [...pronunciation.keys()].map((v) => ({
+ value: v,
+ label: v,
+ })),
+ },
+ {
+ value: "custom",
+ label: "自定义",
+ children: [...custom.keys()].map((v) => ({
+ value: v,
+ label: v,
+ })),
+ disabled: custom.size === 0,
+ },
];
- const mergedAlgebras = [
- ...Object.entries(defaultAlgebra),
- ...Object.entries(algebra),
- ];
- const content: Map = new Map(
- mergedAlgebras.map(([name, rules]) => {
- const list = [
- ...new Set(syllables.map((s) => applyRules(name, rules, s))),
- ].sort();
- return [name as PronunciationElementTypes, list];
- }),
- );
return (
-
-
- {
- return {
- label: name,
- key: name,
- children: (
-
- ),
- };
- })}
- onChange={(e) => {
- setType(e as PronunciationElementTypes);
- }}
+
+ 元素选择器
+
+ 元素类型:
+ setTypes(x as [string, string])}
+ options={options}
+ />
+
+
+
+
+ {primary === "pronunciation" && (
+ setTypes(["pronunciation", s])}
+ />
+ )}
+
);
-};
+}
diff --git a/src/components/ElementPool.tsx b/src/components/ElementPool.tsx
index c59f04e..e98ed1c 100644
--- a/src/components/ElementPool.tsx
+++ b/src/components/ElementPool.tsx
@@ -1,4 +1,5 @@
-import { useState } from "react";
+import type { FC } from "react";
+import { memo, useState } from "react";
import styled from "styled-components";
import Char from "./Character";
import { Button, Flex, Modal, Pagination, Popover, Typography } from "antd";
@@ -10,12 +11,13 @@ import {
keyboardAtom,
glyphAtom,
} from "~/atoms";
-import { isPUA } from "~/lib";
+import { isPUA, makeFilter } from "~/lib";
import { StrokesView } from "./GlyphView";
-import StrokeSearch, { makeFilter } from "./CharacterSearch";
-import { ShapeElementTypes } from "./ElementPicker";
-import { PronunciationElementTypes } from "~/lib";
+import StrokeSearch from "./CharacterSearch";
+import type { ShapeElementTypes } from "./ElementPicker";
+import type { PronunciationElementTypes } from "~/lib";
import Classifier from "./Classifier";
+import { useDraggable } from "@dnd-kit/core";
const Content = styled(Flex)`
padding: 8px;
@@ -27,26 +29,27 @@ interface PoolProps {
element?: string;
setElement: (s: string | undefined) => void;
content: string[];
- name: ShapeElementTypes | PronunciationElementTypes;
+ name: ShapeElementTypes | PronunciationElementTypes | string;
}
-const Element = ({
- element: x,
- setElement,
- currentElement,
-}: {
+interface ElementProps {
element: string;
setElement: (s: string | undefined) => void;
currentElement?: string;
+}
+
+const Element: FC = ({
+ element: x,
+ setElement,
+ currentElement,
}) => {
const keyboard = useAtomValue(keyboardAtom);
const { mapping, grouping } = keyboard;
- const determiedRepertoire = useAtomValue(repertoireAtom);
const glyphMap = useAtomValue(glyphAtom);
const type =
x === currentElement
? "primary"
- : mapping[x] || grouping[x]
+ : mapping[x] || grouping?.[x]
? "link"
: "default";
const display = useAtomValue(displayAtom);
@@ -64,7 +67,9 @@ const Element = ({
return (
{}
+
+
+
}
>
{core}
@@ -74,20 +79,41 @@ const Element = ({
const MyPagination = styled(Pagination)``;
-const ElementPool = ({ element, setElement, content, name }: PoolProps) => {
+const DraggableElement = memo((props: ElementProps) => {
+ const { attributes, listeners, setNodeRef, transform } = useDraggable({
+ id: props.element,
+ });
+ const style = transform
+ ? {
+ transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,
+ }
+ : undefined;
+
+ return (
+
+
+
+ );
+});
+
+export default function ElementPool({
+ element,
+ setElement,
+ content,
+ name,
+}: PoolProps) {
const [page, setPage] = useState(1);
const pageSize = 100;
const [sequence, setSequence] = useState("");
const sequenceMap = useAtomValue(sequenceAtom);
const determinedRepertoire = useAtomValue(repertoireAtom);
- const filtered =
- name === "字根"
- ? content.filter(
- (x) =>
- makeFilter(sequence, determinedRepertoire, sequenceMap)(x) &&
- (sequenceMap.get(x)?.length ?? 0) > 1,
- )
- : content;
+ const filter = makeFilter(sequence, determinedRepertoire, sequenceMap);
+ const filtered = name === "字根" ? content.filter(filter) : content;
const range = filtered.slice((page - 1) * pageSize, page * pageSize);
const [isOpen, setOpen] = useState(false);
return (
@@ -132,6 +158,4 @@ const ElementPool = ({ element, setElement, content, name }: PoolProps) => {
)}
);
-};
-
-export default ElementPool;
+}
diff --git a/src/components/ElementSelect.tsx b/src/components/ElementSelect.tsx
index 97d6844..aa26271 100644
--- a/src/components/ElementSelect.tsx
+++ b/src/components/ElementSelect.tsx
@@ -6,22 +6,19 @@ import {
sequenceAtom,
} from "~/atoms";
import { Select } from "./Utils";
+import type { SelectProps } from "antd";
+import type { ProFormSelectProps } from "@ant-design/pro-components";
-export interface ElementSelectProps {
- char?: string;
- onChange: (s: string) => void;
+interface ElementSelectProps extends SelectProps {
customFilter?: (s: string) => boolean;
excludeGrouped?: boolean;
onlyRootsAndStrokes?: boolean;
}
-export default function ElementSelect({
- char,
- onChange,
- customFilter,
- excludeGrouped,
- onlyRootsAndStrokes,
-}: ElementSelectProps) {
+export default function ElementSelect(
+ props: ElementSelectProps & ProFormSelectProps,
+) {
+ const { customFilter, excludeGrouped, onlyRootsAndStrokes, ...rest } = props;
const { mapping, grouping } = useAtomValue(keyboardAtom);
const sequenceMap = useAtomValue(sequenceAtom);
const repertoire = useAtomValue(repertoireAtom);
@@ -38,14 +35,13 @@ export default function ElementSelect({
const display = useAtomValue(displayAtom);
return (
+
);
}
diff --git a/src/components/Selector.tsx b/src/components/Selector.tsx
index 3fef8a6..3fb62ad 100644
--- a/src/components/Selector.tsx
+++ b/src/components/Selector.tsx
@@ -17,7 +17,7 @@ import { CSS } from "@dnd-kit/utilities";
import type { SieveName } from "~/lib";
import { useAtom, selectorAtom, useAppendAtom, useExcludeAtom } from "~/atoms";
-import { Button, Dropdown, Flex, Space, Typography } from "antd";
+import { Button, Dropdown, Flex, Typography } from "antd";
import MenuOutlined from "@ant-design/icons/MenuOutlined";
import PrioritizedRoots from "./PrioritizedRoots";
@@ -47,7 +47,7 @@ const SortableItem = ({
);
};
-const Selector = () => {
+export default function Selector() {
const sensors = useSensors(
useSensor(PointerSensor),
useSensor(KeyboardSensor, {
@@ -96,6 +96,4 @@ const Selector = () => {
{selector.includes("少弱字根") && }
);
-};
-
-export default Selector;
+}
diff --git a/src/components/SequenceTable.tsx b/src/components/SequenceTable.tsx
index 92ef617..e027886 100644
--- a/src/components/SequenceTable.tsx
+++ b/src/components/SequenceTable.tsx
@@ -1,38 +1,18 @@
-import { useState } from "react";
-import { Alert, Button, Flex, Input, Space } from "antd";
+import { Button, Flex, Input, Space } from "antd";
import {
useAtomValue,
- configAtom,
displayAtom,
- repertoireAtom,
- useAtom,
assetsAtom,
- dictionaryAtom,
priorityShortCodesAtom,
maxLengthAtom,
- useSetAtom,
- makeEncodeCallback,
- DictEntry,
+ combinedResultAtom,
} from "~/atoms";
-import type { Assembly, IndexedElement } from "~/lib";
-import {
- assemble,
- getPriorityMap,
- stringifySequence,
- summarize,
- analysis,
-} from "~/lib";
-import { exportTSV, makeWorker, renderIndexed, renderSuperScript } from "~/lib";
-import {
- analysisResultAtom,
- assemblyResultAtom,
- encodeResultAtom,
-} from "~/atoms/cache";
-import PrimitiveDuplicationAnalyzer, {
- analyzePrimitiveDuplication,
- defaultAnalyzer,
-} from "~/components/PrimitiveDuplicationAnalyzer";
-import { ProColumns, ProTable } from "@ant-design/pro-components";
+import type { DictEntry, IndexedElement } from "~/lib";
+import { getPriorityMap, summarize } from "~/lib";
+import { exportTSV, renderIndexed, renderSuperScript } from "~/lib";
+import { assemblyResultAtom, encodeResultAtom } from "~/atoms";
+import type { ProColumns } from "@ant-design/pro-components";
+import { ProTable } from "@ant-design/pro-components";
import ProrityShortCodeSelector from "./ProrityShortCodeSelector";
interface MainEntry {
@@ -47,41 +27,8 @@ interface MainEntry {
[n: number]: IndexedElement;
}
-const RecomputeAssembly = () => {
- const repertoire = useAtomValue(repertoireAtom);
- const config = useAtomValue(configAtom);
- const characters = Object.entries(repertoire)
- .filter(([, v]) => v.tygf > 0)
- .map(([x]) => x);
- const [analysisResult, setAnalysisResult] = useAtom(analysisResultAtom);
- const [assemblyResult, setAssemblyResult] = useAtom(assemblyResultAtom);
- const dictionary = useAtomValue(dictionaryAtom);
- return (
- {
- let result = analysisResult;
- if (result === null) {
- result = analysis(repertoire, config);
- setAnalysisResult(result);
- }
- let assembled = assemble(
- repertoire,
- config,
- characters,
- dictionary,
- result,
- );
- setAssemblyResult(assembled);
- }}
- >
- 更新拆分表
-
- );
-};
-
const ExportAssembly = () => {
- const assemblyResult = useAtomValue(assemblyResultAtom) ?? [];
+ const assemblyResult = useAtomValue(assemblyResultAtom);
const priorityShortCodes = useAtomValue(priorityShortCodesAtom);
const priorityMap = getPriorityMap(priorityShortCodes);
return (
@@ -98,49 +45,28 @@ const ExportAssembly = () => {
const hash = `${object}-${pinyin_list.join(",")}`;
const level = priorityMap.get(hash);
if (level !== undefined) {
- tsv.push([
- object,
- summary,
- String(importance ?? 100),
- String(level),
- ]);
+ tsv.push([object, summary, String(importance), String(level)]);
} else {
- tsv.push([object, summary, String(importance ?? 100)]);
+ tsv.push([object, summary, String(importance)]);
}
}
exportTSV(tsv, "elements.txt");
}}
>
- 导出拆分表
-
- );
-};
-
-const RecomputeCode = () => {
- const config = useAtomValue(configAtom);
- const assemblyResult = useAtomValue(assemblyResultAtom);
- const assets = useAtomValue(assetsAtom);
- const setCode = useSetAtom(encodeResultAtom);
- return (
- {
- const info = stringifySequence(assemblyResult!, config);
- const data = { config, info, assets };
- const worker = makeWorker();
- worker.onmessage = makeEncodeCallback(setCode);
- worker.postMessage({ type: "encode", data });
- }}
- >
- 更新码表
+ 导出元素序列表
);
};
const ExportCode = () => {
- const code = useAtomValue(encodeResultAtom);
- const flatten = (x: DictEntry) => [x.name, x.full, x.short];
+ const [code] = useAtomValue(encodeResultAtom);
+ const flatten = (x: DictEntry) => [
+ x.name,
+ x.full,
+ x.full_rank.toString(),
+ x.short,
+ x.short_rank.toString(),
+ ];
return (
=> ({
new RegExp(value as string).test(record[dataIndex]),
});
-export interface Combined extends Assembly, DictEntry {}
-
export default function SequenceTable() {
const display = useAtomValue(displayAtom);
- const assemblyResult = useAtomValue(assemblyResultAtom) ?? [];
- const lost: string[] = [];
const max_length = useAtomValue(maxLengthAtom);
const assets = useAtomValue(assetsAtom);
const frequencyMap = assets.frequency;
- const encodeResult = useAtomValue(encodeResultAtom) ?? [];
- const combinedResult: Combined[] = assemblyResult.map((x, i) => ({
- ...x,
- ...encodeResult[i]!,
- }));
+ const combinedResult = useAtomValue(combinedResultAtom);
- const [analyzer, setAnalyzer] = useState(defaultAnalyzer);
- const [selections, filtered] = analyzePrimitiveDuplication(
- analyzer,
- frequencyMap,
- combinedResult,
+ const dataSource = combinedResult.map(
+ ({ name, sequence, importance, ...rest }) => {
+ const frequency = Math.round(
+ ((frequencyMap[name] ?? 0) * importance) / 100,
+ );
+ const key = `${name}-${summarize(sequence)}`;
+ const entry: MainEntry = {
+ key,
+ frequency,
+ name,
+ ...rest,
+ };
+ for (const [i, element] of sequence.entries()) {
+ entry[i] = element;
+ }
+ return entry;
+ },
);
- const toShow = analyzer.filter ? filtered : combinedResult;
- const dataSource = toShow.map(({ name, sequence, importance, ...rest }) => {
- const frequency = Math.round(
- ((frequencyMap[name] ?? 0) * (importance ?? 100)) / 100,
- );
- const key = `${name}-${summarize(sequence)}`;
- const entry: MainEntry = {
- key,
- frequency,
- name,
- ...rest,
- };
- for (const [i, element] of sequence.entries()) {
- entry[i] = element;
- }
- return entry;
- });
-
dataSource.sort((a, b) => b.frequency - a.frequency);
const hash = (record: MainEntry) => {
@@ -349,42 +261,18 @@ export default function SequenceTable() {
},
);
- const toolbar = [
- ,
- ,
- ,
- ,
- ];
+ const toolbar = [, ];
return (
- <>
- {lost.length ? (
-
- ) : null}
- {assemblyResult.length > 0 && (
-
- )}
-
- virtual
- scroll={{ y: 1080 }}
- columns={columns}
- dataSource={dataSource}
- pagination={false}
- search={false}
- defaultSize="small"
- toolBarRender={() => toolbar}
- />
- >
+
+ virtual
+ scroll={{ y: 1080 }}
+ columns={columns}
+ dataSource={dataSource}
+ pagination={false}
+ search={false}
+ defaultSize="small"
+ toolBarRender={() => toolbar}
+ />
);
}
diff --git a/src/components/ShortCodeRules.tsx b/src/components/ShortCodeRules.tsx
index 8245a5a..6f8c185 100644
--- a/src/components/ShortCodeRules.tsx
+++ b/src/components/ShortCodeRules.tsx
@@ -1,8 +1,17 @@
-import { Button, Cascader, Flex, Form } from "antd";
-import { DeleteButton, Select } from "./Utils";
-import { Config, ShortCodeRule, wordLengthArray } from "~/lib";
-import { useListAtom } from "~/atoms";
-import { shortCodeConfigAtom } from "~/atoms/encoder";
+import { Button, Flex, Form } from "antd";
+import type { ShortCodeRule } from "~/lib";
+import { wordLengthArray } from "~/lib";
+import { useAtom } from "~/atoms";
+import { shortCodeConfigAtom } from "~/atoms";
+import {
+ ModalForm,
+ ProFormCascader,
+ ProFormDependency,
+ ProFormDigit,
+ ProFormGroup,
+ ProFormList,
+ ProFormSelect,
+} from "@ant-design/pro-components";
const defaultRules: ShortCodeRule[] = [
{
@@ -20,119 +29,83 @@ const defaultRules: ShortCodeRule[] = [
];
export default function ShortCodeRules() {
- const [shortCodeConfig, appendRule, excludeRule, modifyRule] =
- useListAtom(shortCodeConfigAtom);
+ const [shortCodeConfig, setShortCodeConfig] = useAtom(shortCodeConfigAtom);
+ const wordLengthArray2D = wordLengthArray
+ .slice(0, wordLengthArray.length - 1)
+ .map((x) => ({
+ ...x,
+ children: wordLengthArray.filter((y) => y.value > x.value),
+ }));
+ const [form] = Form.useForm<{ short_code: ShortCodeRule[] }>();
return (
- <>
-
- {shortCodeConfig.map((rule, ruleIndex) => {
- const schemes = rule.schemes;
- return (
-
-
- {"length_equal" in rule ? (
-
-
- ) : (
-
- ({
- ...x,
- children: wordLengthArray.filter(
- (y) => y.value > x.value,
- ),
- }))}
- onChange={(value) => {
- modifyRule(ruleIndex, {
- ...rule,
- length_in_range: value as [number, number],
- });
- }}
- />
-
- )}
-
- modifyRule(ruleIndex, {
- ...rule,
- schemes: schemes.concat({ prefix: 1, count: 1 }),
- })
- }
- >
- 添加出简方式
-
- excludeRule(ruleIndex)}>删除规则
-
- {schemes.map((scheme, schemeIndex) => {
- return (
-
-
-
-
-
-
- modifyRule(ruleIndex, {
- ...rule,
- schemes: schemes.filter((x, i) => i !== schemeIndex),
- })
- }
- />
-
- );
- })}
-
- );
- })}
-
+ 配置简码规则}
+ initialValues={{ short_code: shortCodeConfig }}
+ onFinish={async (values) => {
+ setShortCodeConfig(values.short_code);
+ return true;
+ }}
+ form={form}
+ >
+
+
+ {({ length_equal, length_in_range }) => {
+ if (length_equal)
+ return (
+
+ );
+ if (length_in_range)
+ return (
+
+ );
+ }}
+
+
+
+
+
+
+
+
- appendRule(defaultRules[0]!)}>添加规则
- appendRule(defaultRules[1]!)}>
+ {
+ const newValue = form
+ .getFieldValue("short_code")
+ .concat(defaultRules[0]!);
+ form.setFieldValue("short_code", newValue);
+ }}
+ >
+ 添加规则
+
+ {
+ const newValue = form
+ .getFieldValue("short_code")
+ .concat(defaultRules[1]!);
+ form.setFieldValue("short_code", newValue);
+ }}
+ >
添加规则(范围)
- >
+
);
}
diff --git a/src/components/SingleRules.tsx b/src/components/SingleRules.tsx
new file mode 100644
index 0000000..a61a9d8
--- /dev/null
+++ b/src/components/SingleRules.tsx
@@ -0,0 +1,170 @@
+import { useCallback, useEffect, useMemo, useState } from "react";
+import type { Connection, Node, Edge } from "reactflow";
+import ReactFlow, {
+ useNodesState,
+ useEdgesState,
+ useReactFlow,
+ Background,
+ BackgroundVariant,
+ Controls,
+ addEdge,
+ ReactFlowProvider,
+} from "reactflow";
+import { useAtom, sourcesAtom, conditionsAtom } from "~/atoms";
+import "reactflow/dist/style.css";
+import { SourceNode, ConditionNode } from "./Node";
+import type { Condition, Source } from "~/lib";
+import type { SourceData, ConditionData } from "./graph";
+import {
+ makeSourceNode,
+ makeConditionNode,
+ getLayoutedElements,
+ makeEdge,
+ CacheContext,
+} from "./graph";
+import DetailEditor from "./DetailEditor";
+import { Button, Modal } from "antd";
+
+const initializeGraph = (
+ sources: Record,
+ conditions: Record,
+) => {
+ const sourceNodes = Object.entries(sources).map(([id, data]) =>
+ makeSourceNode(data, id),
+ );
+ const conditionNodes = Object.entries(conditions).map(([id, data]) =>
+ makeConditionNode(data, id),
+ );
+ const initialNodes: Node[] = [...sourceNodes, ...conditionNodes];
+ const initialEdges: Edge[] = [];
+ for (const [id, { next }] of Object.entries(sources)) {
+ next && initialEdges.push(makeEdge(id, next));
+ }
+ for (const [id, { positive, negative }] of Object.entries(conditions)) {
+ positive && initialEdges.push(makeEdge(id, positive, "positive"));
+ negative && initialEdges.push(makeEdge(id, negative, "negative"));
+ }
+ const [layoutNodes, layoutEdges] = getLayoutedElements(
+ initialNodes,
+ initialEdges,
+ );
+ return [layoutNodes, layoutEdges] as const;
+};
+
+function EncoderGraph({
+ open,
+ setOpen,
+}: {
+ open: boolean;
+ setOpen: (open: boolean) => void;
+}) {
+ const { fitView } = useReactFlow();
+ const [sources, setSources] = useAtom(sourcesAtom);
+ const [conditions, setConditions] = useAtom(conditionsAtom);
+ const [cachedSources, setCachedSources] = useState(sources);
+ const [cachedConditions, setCachedConditions] = useState(conditions);
+ const [initialNodes, initialEdges] = initializeGraph(
+ cachedSources,
+ cachedConditions,
+ );
+ const [nodes, setNodes, onNodesChange] = useNodesState<
+ SourceData | ConditionData
+ >(initialNodes);
+ const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
+ const nodeTypes = useMemo(
+ () => ({ source: SourceNode, condition: ConditionNode }),
+ [],
+ );
+ const [selected, setSelected] = useState(undefined);
+
+ const onSelectionChange = useCallback(({ nodes }: { nodes: Node[] }) => {
+ nodes[0] && setSelected(nodes[0].id);
+ }, []);
+
+ useEffect(() => {
+ const [reinitNodes, reinitEdges] = initializeGraph(
+ cachedSources,
+ cachedConditions,
+ );
+ setNodes(reinitNodes);
+ setEdges(reinitEdges);
+ }, [cachedSources, cachedConditions, setNodes, setEdges]);
+
+ const context = useMemo(
+ () => ({
+ sources: cachedSources,
+ setSources: setCachedSources,
+ conditions: cachedConditions,
+ setConditions: setCachedConditions,
+ selected,
+ setSelected,
+ }),
+ [
+ cachedSources,
+ setCachedSources,
+ cachedConditions,
+ setCachedConditions,
+ selected,
+ setSelected,
+ ],
+ );
+
+ return (
+ setOpen(false)}
+ onOk={() => {
+ setSources(cachedSources);
+ setConditions(cachedConditions);
+ setOpen(false);
+ }}
+ width={1080}
+ >
+
+
+ setSelected(undefined)}
+ nodeDragThreshold={10000}
+ fitView
+ >
+
+
+ {selected && (
+ {
+ if ("operator" in data) {
+ setCachedConditions({
+ ...cachedConditions,
+ [selected]: data,
+ });
+ } else {
+ setCachedSources({ ...cachedSources, [selected]: data });
+ }
+ }}
+ />
+ )}
+
+
+
+
+ );
+}
+
+export default function SingleRules() {
+ const [open, setOpen] = useState(false);
+ return (
+
+ setOpen(true)}>配置一字词规则
+
+
+ );
+}
diff --git a/src/components/SolverForm.tsx b/src/components/SolverForm.tsx
index 56090e4..6b29a31 100644
--- a/src/components/SolverForm.tsx
+++ b/src/components/SolverForm.tsx
@@ -1,15 +1,15 @@
+import type { ProFormInstance } from "@ant-design/pro-components";
import {
ProForm,
ProFormDependency,
ProFormDigit,
ProFormGroup,
- ProFormInstance,
ProFormSelect,
} from "@ant-design/pro-components";
import { Form, Switch } from "antd";
import { useRef } from "react";
import { metaheuristicAtom, useAtom } from "~/atoms";
-import { Solver } from "~/lib";
+import type { Solver } from "~/lib";
export default function SolverForm() {
const [metaheuristic, setMetaheuristic] = useAtom(metaheuristicAtom);
@@ -25,119 +25,113 @@ export default function SolverForm() {
random_full_key_swap: 0.01,
};
return (
- <>
-
- title="求解算法"
- formRef={formRef}
- initialValues={metaheuristic}
- onFinish={async (values) => setMetaheuristic(values)}
- layout="horizontal"
- onValuesChange={(_, values) => setMetaheuristic(values)}
- submitter={false}
- >
-
-
-
-
- {({ parameters }) => (
-
- {
- formRef?.current?.setFieldValue(
- "parameters",
- value ? undefined : defaultParams,
- );
- formRef?.current?.setFieldValue(
- "runtime",
- value ? 10 : undefined,
- );
- formRef?.current?.submit();
- }}
- />
-
- )}
-
-
+
+ title="求解算法"
+ formRef={formRef}
+ initialValues={metaheuristic}
+ onFinish={async (values) => setMetaheuristic(values)}
+ layout="horizontal"
+ onValuesChange={(_, values) => setMetaheuristic(values)}
+ submitter={false}
+ >
+
+
+
- {({ parameters }) =>
- parameters === undefined ? (
+ {({ parameters }) => (
+
+ {
+ formRef?.current?.setFieldValue(
+ "parameters",
+ value ? undefined : defaultParams,
+ );
+ formRef?.current?.setFieldValue(
+ "runtime",
+ value ? 10 : undefined,
+ );
+ formRef?.current?.submit();
+ }}
+ />
+
+ )}
+
+
+
+ {({ parameters }) =>
+ parameters === undefined ? (
+
+ ) : (
+
- ) : (
-
+
+
+
+ )
+ }
+
+
+ {({ search_method }) => (
+ <>
+
+ {
+ formRef?.current?.setFieldValue(
+ "search_method",
+ value ? undefined : defaultSerachMethod,
+ );
+ formRef?.current?.submit();
+ }}
+ />
+
+ {search_method !== undefined ? (
+
- )
- }
-
-
- {({ search_method }) => (
- <>
-
- {
- formRef?.current?.setFieldValue(
- "search_method",
- value ? undefined : defaultSerachMethod,
- );
- formRef?.current?.submit();
- }}
- />
-
- {search_method !== undefined ? (
-
-
-
-
-
- ) : null}
- >
- )}
-
-
- >
+ ) : null}
+ >
+ )}
+
+
);
}
diff --git a/src/components/Starter.tsx b/src/components/Starter.tsx
index e91250c..4223c96 100644
--- a/src/components/Starter.tsx
+++ b/src/components/Starter.tsx
@@ -1,5 +1,4 @@
-import { Button, Form, Input, Modal, Select } from "antd";
-import { useState } from "react";
+import { Button } from "antd";
import type { StarterType } from "~/lib";
import {
classifierTypes,
@@ -10,76 +9,53 @@ import {
import type { Updater } from "use-immer";
import type { Config } from "~/lib";
import { nanoid } from "nanoid";
+import {
+ ModalForm,
+ ProFormSelect,
+ ProFormText,
+} from "@ant-design/pro-components";
-const Starter = ({
+export default function Starter({
setConfigs,
}: {
setConfigs: Updater>;
-}) => {
- const [modal, setModal] = useState(false);
+}) {
const required = [{ required: true }];
+ const makeOptions = (types: readonly string[]) =>
+ types.map((x) => ({ value: x, label: x }));
return (
- <>
- setModal(true)}>
- 新建
-
-
- 确定
-
- }
- onCancel={() => setModal(false)}
- >
- name="name" label="方案名称" rules={required}>
-
-
-
- name="data"
- label="笔画分类预设"
- rules={required}
- >
-
-
- name="keyboard"
- label="键盘布局预设"
- rules={required}
- >
-
-
- name="encoder"
- label="编码规则预设"
- rules={required}
- >
-
-
-
- >
+
+ layout="horizontal"
+ trigger={新建}
+ title="方案模板"
+ onFinish={async (values) => {
+ const config = createConfig(values);
+ setConfigs((configs) => {
+ configs[nanoid(9)] = config;
+ return undefined;
+ });
+ return true;
+ }}
+ >
+
+
+
+
+
);
-};
-
-export default Starter;
+}
diff --git a/src/components/TagPicker.tsx b/src/components/TagPicker.tsx
index 1622929..3bdb6c9 100644
--- a/src/components/TagPicker.tsx
+++ b/src/components/TagPicker.tsx
@@ -3,7 +3,7 @@ import { useAtom } from "jotai";
import { forwardRef } from "react";
import { tagsAtom, userTagsAtom } from "~/atoms";
-const TagPicker = forwardRef((_, ref) => {
+const TagPicker = forwardRef(() => {
const [tags] = useAtom(tagsAtom);
const [userTags, setUserTags] = useAtom(userTagsAtom);
diff --git a/src/components/Utils.tsx b/src/components/Utils.tsx
index 9d4b300..b92f5b7 100644
--- a/src/components/Utils.tsx
+++ b/src/components/Utils.tsx
@@ -2,33 +2,17 @@ import type { ColProps, RowProps } from "antd";
import {
Button,
Col,
- Flex,
InputNumber,
Row,
- Space,
Upload,
Select as _Select,
notification,
} from "antd";
import styled from "styled-components";
-import {
- getRecordFromTSV,
- getDictFromTSV,
- getDistributionFromTSV,
-} from "~/lib";
-import { useEffect, useState } from "react";
+import type { MouseEventHandler } from "react";
import DeleteOutlined from "@ant-design/icons/DeleteOutlined";
import PlusOutlined from "@ant-design/icons/PlusOutlined";
import MinusOutlined from "@ant-design/icons/MinusOutlined";
-import Root from "./Element";
-import {
- defaultDictionaryAtom,
- fetchAsset,
- frequencyAtom,
- keyDistributionAtom,
- pairEquivalenceAtom,
-} from "~/atoms";
-import { useSetAtom } from "jotai";
const ScrollableRow = styled(Row)`
height: 100%;
@@ -63,10 +47,12 @@ export const Select = styled(_Select)`
export const Uploader = ({
action,
+ disabled,
text,
type,
}: {
action: (s: string) => void;
+ disabled?: boolean;
text?: string;
type?: "yaml" | "json" | "txt";
}) => {
@@ -90,12 +76,15 @@ export const Uploader = ({
maxCount={1}
showUploadList={false}
>
- {text || "导入"}
+ {text || "导入"}
);
};
-type Click = { onClick: () => void; disabled?: boolean };
+interface Click {
+ onClick: MouseEventHandler;
+ disabled?: boolean;
+}
export const PlusButton = ({ onClick }: Click) => {
return (
@@ -131,48 +120,3 @@ export const DeleteButton = ({ onClick, disabled }: Click) => {
/>
);
};
-
-export const KeyList = ({
- keys,
- setKeys,
- allKeys,
-}: {
- keys: string[];
- setKeys: (s: string[]) => void;
- allKeys: string[];
-}) => {
- const [currentKey, setCurrentKey] = useState(allKeys[0]!);
- return (
-
-
- {keys.map((x, index) => (
- {x}
- ))}
-
-
- setKeys(keys.concat(currentKey))} />
-
-
- );
-};
-
-export function LoadAssets() {
- const setF = useSetAtom(frequencyAtom);
- const setW = useSetAtom(defaultDictionaryAtom);
- const setKE = useSetAtom(keyDistributionAtom);
- const setPE = useSetAtom(pairEquivalenceAtom);
- fetchAsset("frequency", "txt").then((x) => setF(getRecordFromTSV(x)));
- fetchAsset("dictionary", "txt").then((x) => setW(getDictFromTSV(x)));
- fetchAsset("key_distribution", "txt").then((x) =>
- setKE(getDistributionFromTSV(x)),
- );
- fetchAsset("pair_equivalence", "txt").then((x) => setPE(getRecordFromTSV(x)));
- return null;
-}
diff --git a/src/components/WordRules.tsx b/src/components/WordRules.tsx
deleted file mode 100644
index 17da3aa..0000000
--- a/src/components/WordRules.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import { Flex, Select, Form, Cascader, Input, Space, Button } from "antd";
-import { useListAtom, wordRulesAtom } from "~/atoms";
-import { DeleteButton } from "./Utils";
-import { Config, wordLengthArray } from "~/lib";
-
-const defaultRules: NonNullable = [
- { length_equal: 2, formula: "AaAbBaBb" },
- { length_equal: 3, formula: "AaBaCaCb" },
- { length_in_range: [4, 10], formula: "AaBaCaZa" },
-];
-
-export default function WordRules() {
- const [wordRules, appendRule, excludeRule, modifyRule] =
- useListAtom(wordRulesAtom);
- return (
-
- {wordRules.map((rule, index) => {
- return (
-
- {"length_equal" in rule ? (
-
-
- ) : (
-
- ({
- ...x,
- children: wordLengthArray.filter(
- (y) => y.value > x.value,
- ),
- }))}
- onChange={(value) => {
- modifyRule(index, {
- ...rule,
- length_in_range: value as [number, number],
- });
- }}
- />
-
- )}
-
-
- modifyRule(index, { ...rule, formula: e.target.value })
- }
- />
-
- excludeRule(index)} />
-
- );
- })}
-
- appendRule(defaultRules[0]!)}>添加规则
- appendRule(defaultRules[2]!)}>
- 添加规则(范围)
-
-
-
- );
-}
diff --git a/src/components/changelog/ChangelogDrawer.tsx b/src/components/changelog/ChangelogDrawer.tsx
new file mode 100644
index 0000000..37bc601
--- /dev/null
+++ b/src/components/changelog/ChangelogDrawer.tsx
@@ -0,0 +1,33 @@
+import React, { useState, useEffect, useRef, useReducer } from "react";
+import * as A from "antd";
+import * as atoms from "~/atoms";
+
+//#region ChangelogDrawer default component
+export interface ChangelogDrawerProps {}
+export default function ChangelogDrawer(props: ChangelogDrawerProps) {
+ const Content = React.lazy(() => import("./changelog.mdx"));
+ const [open, setOpen] = useState(false);
+
+ return (
+ <>
+ setOpen(true)}>
+ 更新历史
+
+ setOpen(false)}
+ closable
+ destroyOnClose
+ placement="right"
+ open={open}
+ >
+
+
+
+
+
+
+ >
+ );
+}
+//#endregion
diff --git a/src/components/changelog/changelog.mdx b/src/components/changelog/changelog.mdx
new file mode 100644
index 0000000..793f0f5
--- /dev/null
+++ b/src/components/changelog/changelog.mdx
@@ -0,0 +1,22 @@
+## v0.1.13
+
+1. 支持加载三键、四键当量模型
+2. 支持差指法的分级数量统计
+
+## v0.1.12
+
+1. 所有计算操作自动化,减少人机交互
+2. 在编码页面实时计算基本的测评数据
+3. 增加码表层面的统计功能(序列表层面的为「统计一」,码表层面的为「统计二」)
+
+## v0.1.11
+
+1. 修复 libchai 不支持固定键位的 bug
+2. 修复 libchai 在网页上计算 7 码以上方案的溢出问题
+3. 增强了序列表层面的分析功能
+4. 用户体验优化
+
+## v0.1.10
+
+1. 支持设置词间速度当量和差指法的权重
+2. 支持自定义字音
diff --git a/src/components/charts.css b/src/components/charts.css
new file mode 100644
index 0000000..4c5f4a5
--- /dev/null
+++ b/src/components/charts.css
@@ -0,0 +1,4 @@
+.g2-tooltip-list-item-value {
+ white-space: normal !important;
+ text-overflow: inherit !important;
+}
diff --git a/src/components/export/charts.ts b/src/components/export/charts.ts
new file mode 100644
index 0000000..905d6d9
--- /dev/null
+++ b/src/components/export/charts.ts
@@ -0,0 +1,3 @@
+/** 请异步import此模块 */
+
+export { Column, Heatmap } from "@ant-design/charts";
diff --git a/src/components/export/s2react.ts b/src/components/export/s2react.ts
new file mode 100644
index 0000000..e7050ac
--- /dev/null
+++ b/src/components/export/s2react.ts
@@ -0,0 +1,2 @@
+/** 异步引入 */
+export { SheetComponent } from "@antv/s2-react";
diff --git a/src/components/graph.ts b/src/components/graph.ts
index eff3b98..4e70870 100644
--- a/src/components/graph.ts
+++ b/src/components/graph.ts
@@ -1,6 +1,16 @@
import type { Edge, Node } from "reactflow";
import type { BinaryCondition, Condition, Source, UnaryCondition } from "~/lib";
-import { add, sum } from "mathjs";
+import { add, sum } from "../lib/mathjs";
+import { createContext } from "react";
+
+export const CacheContext = createContext<{
+ sources: Record;
+ setSources: (sources: Record) => void;
+ conditions: Record;
+ setConditions: (conditions: Record) => void;
+ selected: string | undefined;
+ setSelected: (selected: string | undefined) => void;
+}>({} as any);
export type SourceData = Omit