@jonathanleelx/meddle 0.5.0-beta.9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONFIG_STRUCTURE.md +9 -2
- package/README.md +18 -0
- package/bin/commands/mock/add.js +37 -21
- package/bin/commands/mock/delete.js +16 -24
- package/bin/commands/mock/index.js +8 -4
- package/bin/commands/mock/list.js +35 -18
- package/bin/commands/mock/toggle.js +17 -27
- package/bin/commands/mock/update.js +39 -30
- package/bin/commands/route/active.js +20 -3
- package/bin/commands/route/add.js +113 -94
- package/bin/commands/route/create.js +8 -1
- package/bin/commands/route/delete.js +85 -51
- package/bin/commands/route/index.js +20 -2
- package/bin/commands/route/list.js +2 -2
- package/bin/commands/route/show.js +10 -1
- package/bin/commands/route/update.js +135 -92
- package/bin/commands/update.js +4 -0
- package/bin/index.js +7 -3
- package/bin/lib/api-client.js +14 -2
- package/bin/lib/file-access.js +217 -35
- package/bin/lib/output.js +24 -3
- package/bin/lib/proxy-detect.js +99 -20
- package/bin/lib/proxy-or-file.js +90 -0
- package/bin/lib/route-write-args.js +150 -0
- package/bin/lib/rule-file-edit.js +263 -0
- package/bin/lib/ruleset-readonly.js +61 -0
- package/bin/lib/update-check.js +67 -6
- package/dist/cert.d.ts.map +1 -1
- package/dist/cert.js +43 -0
- package/dist/cert.js.map +1 -1
- package/dist/core/browser.d.ts +8 -1
- package/dist/core/browser.d.ts.map +1 -1
- package/dist/core/browser.js +239 -36
- package/dist/core/browser.js.map +1 -1
- package/dist/core/config-diagnostics.d.ts.map +1 -1
- package/dist/core/config-diagnostics.js +6 -1
- package/dist/core/config-diagnostics.js.map +1 -1
- package/dist/core/custom-plugin-loader.d.ts.map +1 -1
- package/dist/core/custom-plugin-loader.js +2 -0
- package/dist/core/custom-plugin-loader.js.map +1 -1
- package/dist/core/mock-handler.d.ts +59 -0
- package/dist/core/mock-handler.d.ts.map +1 -1
- package/dist/core/mock-handler.js +627 -29
- package/dist/core/mock-handler.js.map +1 -1
- package/dist/core/mock-utils.d.ts +58 -0
- package/dist/core/mock-utils.d.ts.map +1 -0
- package/dist/core/mock-utils.js +167 -0
- package/dist/core/mock-utils.js.map +1 -0
- package/dist/core/plugin-bootstrap-runner.d.ts +1 -0
- package/dist/core/plugin-bootstrap-runner.d.ts.map +1 -1
- package/dist/core/plugin-bootstrap-runner.js +37 -1
- package/dist/core/plugin-bootstrap-runner.js.map +1 -1
- package/dist/core/plugin-source.d.ts +24 -0
- package/dist/core/plugin-source.d.ts.map +1 -0
- package/dist/core/plugin-source.js +47 -0
- package/dist/core/plugin-source.js.map +1 -0
- package/dist/core/rule-file-edit.d.ts +81 -0
- package/dist/core/rule-file-edit.d.ts.map +1 -0
- package/dist/core/rule-file-edit.js +243 -0
- package/dist/core/rule-file-edit.js.map +1 -0
- package/dist/core/static-server.d.ts.map +1 -1
- package/dist/core/static-server.js +15 -13
- package/dist/core/static-server.js.map +1 -1
- package/dist/core/types.d.ts +13 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/plugins/builtin/mock-plugin.d.ts.map +1 -1
- package/dist/plugins/builtin/mock-plugin.js +6 -5
- package/dist/plugins/builtin/mock-plugin.js.map +1 -1
- package/dist/server/agent/tools.d.ts.map +1 -1
- package/dist/server/agent/tools.js +24 -18
- package/dist/server/agent/tools.js.map +1 -1
- package/dist/server/app-info.d.ts +33 -0
- package/dist/server/app-info.d.ts.map +1 -0
- package/dist/server/app-info.js +116 -0
- package/dist/server/app-info.js.map +1 -0
- package/dist/server/config.d.ts +1 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +101 -9
- package/dist/server/config.js.map +1 -1
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +8 -0
- package/dist/server/health.js.map +1 -1
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/mocks.d.ts +26 -0
- package/dist/server/mocks.d.ts.map +1 -1
- package/dist/server/mocks.js +110 -13
- package/dist/server/mocks.js.map +1 -1
- package/dist/server/plugins.d.ts.map +1 -1
- package/dist/server/plugins.js +56 -11
- package/dist/server/plugins.js.map +1 -1
- package/dist/server/rule-files.d.ts +36 -0
- package/dist/server/rule-files.d.ts.map +1 -1
- package/dist/server/rule-files.js +395 -107
- package/dist/server/rule-files.js.map +1 -1
- package/dist/server/ruleset-lock.d.ts +62 -0
- package/dist/server/ruleset-lock.d.ts.map +1 -0
- package/dist/server/ruleset-lock.js +234 -0
- package/dist/server/ruleset-lock.js.map +1 -0
- package/index.js +36 -7
- package/mcp-server.js +90 -88
- package/package.json +1 -1
- package/plugins/builtin/mock-plugin.ts +9 -5
- package/web/dist/assets/alert-B514Frte.js +1 -0
- package/web/dist/assets/arrow-right-BNum_060.js +1 -0
- package/web/dist/assets/{body-diff-view-B-4XWmL6.js → body-diff-view-SfLCLzs9.js} +2 -2
- package/web/dist/assets/button-BFNlGZ5p.js +1 -0
- package/web/dist/assets/check-BkfHQ6re.js +1 -0
- package/web/dist/assets/checkbox-CQyFsZzS.js +1 -0
- package/web/dist/assets/chevron-down-DHwUtL4O.js +1 -0
- package/web/dist/assets/{circle-alert-Q8cZk9Rv.js → circle-alert-zMagrFuI.js} +1 -1
- package/web/dist/assets/{circle-x-C9USji_R.js → circle-x-BEkinhez.js} +1 -1
- package/web/dist/assets/code-DD-AYxxu.js +1 -0
- package/web/dist/assets/{copy-BYjq1hdN.js → copy-BRnscYy1.js} +1 -1
- package/web/dist/assets/detail-panel-BtgWWeu3.js +4 -0
- package/web/dist/assets/dist-BQN0rzUS.js +1 -0
- package/web/dist/assets/{dist-CEd_wnRC.js → dist-C-E2R2jk.js} +1 -1
- package/web/dist/assets/{dist-C6eaYCUo.js → dist-CFZ4xMSF.js} +1 -1
- package/web/dist/assets/{dist-DWmDaXVN.js → dist-CRmX_NvH.js} +1 -1
- package/web/dist/assets/{dist-C8RHq5At.js → dist-DLQKRjuW.js} +1 -1
- package/web/dist/assets/{dist-Blyulj4_.js → dist-LiAcI8CK.js} +1 -1
- package/web/dist/assets/{dist-Ce4ujolc.js → dist-fzPL-8F9.js} +1 -1
- package/web/dist/assets/{dist-DoE7uybN.js → dist-wv9ebJK_.js} +1 -1
- package/web/dist/assets/editor-pane-actions-_ckwcCII.js +1 -0
- package/web/dist/assets/{es2015-DG46NGN7.js → es2015-DPJTBYa9.js} +1 -1
- package/web/dist/assets/{global-panel-shell-5cJneeis.js → global-panel-shell-NaUhzX7J.js} +3 -3
- package/web/dist/assets/health-panel-DhXLqcOU.js +1 -0
- package/web/dist/assets/index-B-6nUrqW.js +21 -0
- package/web/dist/assets/index-EWNlAdFB.css +2 -0
- package/web/dist/assets/mobile-proxy-panel-BY8Oi-qC.js +8 -0
- package/web/dist/assets/mock-config-TPmfJwAt.js +1 -0
- package/web/dist/assets/mock-editor-panel-WQwcHSTD.js +20 -0
- package/web/dist/assets/mocks-file-missing-note-BR5oWFLh.js +1 -0
- package/web/dist/assets/monaco-editor-BGLPrb0C.js +11 -0
- package/web/dist/assets/pane-bar-gFRISZLD.js +1 -0
- package/web/dist/assets/pane-split-B6aLmY7G.js +1 -0
- package/web/dist/assets/panel-heading-DT_nXayM.js +1 -0
- package/web/dist/assets/{pencil-line-Cqe41E4h.js → pencil-line-CEZ7D-de.js} +1 -1
- package/web/dist/assets/plugin-code-editor--Gf4ZwGb.js +2 -0
- package/web/dist/assets/plugin-config-DsX9xCW_.js +2 -0
- package/web/dist/assets/plugin-generator-Bj4f6dxo.js +2 -0
- package/web/dist/assets/plugin-test-dialog-DICuykBK.js +7 -0
- package/web/dist/assets/plus-ixZQRprm.js +1 -0
- package/web/dist/assets/{refresh-cw-CG3HaiQT.js → refresh-cw-BfLoHqg5.js} +1 -1
- package/web/dist/assets/rotate-ccw-CRguJya4.js +1 -0
- package/web/dist/assets/route-preview-C-LzS1lT.js +1 -0
- package/web/dist/assets/{rule-ai-assistant-panel-DMh0F9dr.js → rule-ai-assistant-panel-BEfPNBbx.js} +2 -2
- package/web/dist/assets/rule-config-Dw9pcuah.js +15 -0
- package/web/dist/assets/rule-overview-panel-C4QQ7U3S.js +1 -0
- package/web/dist/assets/{server-Cpj4KNwN.js → server-eYXq3PbE.js} +1 -1
- package/web/dist/assets/settings-panel-D8DEH8aH.js +1 -0
- package/web/dist/assets/{shield-check-OqUmVLQt.js → shield-check-hQXjdfZ7.js} +1 -1
- package/web/dist/assets/smartphone-D4Q7cQfm.js +1 -0
- package/web/dist/assets/switch-94vgsMHm.js +1 -0
- package/web/dist/assets/{syntax-highlight-Dk0-ewLI.js → syntax-highlight-BFgN_C0Y.js} +1 -1
- package/web/dist/assets/{table-2-BR5e3z8m.js → table-2-DvGHhMm4.js} +1 -1
- package/web/dist/assets/table-DaXD6jJv.js +1 -0
- package/web/dist/assets/textarea-9wB8Hsz-.js +1 -0
- package/web/dist/assets/toast-9yeTf7d9.js +1 -0
- package/web/dist/assets/use-mocks-file-status-BUIUJ4oQ.js +1 -0
- package/web/dist/assets/{wand-sparkles-CJ7fSnom.js → wand-sparkles-Bmt4dDOf.js} +1 -1
- package/web/dist/assets/{wifi-CCLKyySQ.js → wifi-Cjj_Br1u.js} +1 -1
- package/web/dist/assets/{zap-DR-xiUMe.js → zap-BuOtogAv.js} +1 -1
- package/web/dist/index.html +16 -10
- package/web/dist/assets/alert-DCvlZAiv.js +0 -1
- package/web/dist/assets/arrow-right-B4Mrlj2-.js +0 -1
- package/web/dist/assets/button-BTToMaBW.js +0 -1
- package/web/dist/assets/checkbox-D1Z9DtjF.js +0 -1
- package/web/dist/assets/chevron-down-CPngAx4M.js +0 -1
- package/web/dist/assets/chevron-right-V1DGIDbL.js +0 -1
- package/web/dist/assets/code-5_eJ_XpJ.js +0 -1
- package/web/dist/assets/code-fixer-D48sCDtp.js +0 -20
- package/web/dist/assets/detail-panel-BSFz9CUw.js +0 -4
- package/web/dist/assets/file-system-access-_og-Tg9o.js +0 -1
- package/web/dist/assets/health-panel-BS3L2e5d.js +0 -1
- package/web/dist/assets/index-CvTR1IVi.js +0 -18
- package/web/dist/assets/index-bfV7sxx5.css +0 -2
- package/web/dist/assets/mobile-proxy-panel-tU0NyJ3P.js +0 -8
- package/web/dist/assets/mock-config-CULJP6Vt.js +0 -1
- package/web/dist/assets/mock-editor-panel-9wlDaySA.js +0 -1
- package/web/dist/assets/monaco-editor-BttaUoOz.js +0 -11
- package/web/dist/assets/plugin-code-editor-BAIBp4lg.js +0 -2
- package/web/dist/assets/plugin-config-ButUV2SZ.js +0 -1
- package/web/dist/assets/plugin-generator-uceUPSCv.js +0 -2
- package/web/dist/assets/plugin-test-dialog-BrJ4HfRX.js +0 -7
- package/web/dist/assets/plus-tVxSydJ8.js +0 -1
- package/web/dist/assets/rotate-ccw-CAYM6Vv0.js +0 -1
- package/web/dist/assets/route-preview-C4cGrS1-.js +0 -1
- package/web/dist/assets/rule-config-BTTGNwMs.js +0 -15
- package/web/dist/assets/rule-overview-panel-SFR2OloL.js +0 -1
- package/web/dist/assets/select-aBXQ0zNa.js +0 -1
- package/web/dist/assets/settings-panel-BMReDG8b.js +0 -1
- package/web/dist/assets/smartphone-DKeDuJTU.js +0 -1
- package/web/dist/assets/switch-Bes_YiJu.js +0 -1
- package/web/dist/assets/table-nW7uQVcl.js +0 -1
- package/web/dist/assets/textarea-BSI0rnW6.js +0 -1
- /package/web/dist/assets/{babel-DCr4VA1c.js → babel-bwZm0qi3.js} +0 -0
- /package/web/dist/assets/{clipboard-VhPXNN5m.js → clipboard-Bt1qY01V.js} +0 -0
- /package/web/dist/assets/{estree-qO_m2Qaw.js → estree-MatbZDwq.js} +0 -0
- /package/web/dist/assets/{html-VDGahtyk.js → html-CCrsbFYX.js} +0 -0
- /package/web/dist/assets/{postcss-BUm8EKMw.js → postcss-BxN7Gr8n.js} +0 -0
- /package/web/dist/assets/{standalone-Bj8SSd8Q.js → standalone-DsnFnsqM.js} +0 -0
package/mcp-server.js
CHANGED
|
@@ -18,6 +18,7 @@ const {
|
|
|
18
18
|
} = require('./bin/lib/sessions')
|
|
19
19
|
const { GLOBAL_DEFAULT_PORT } = require('./bin/lib/session-args')
|
|
20
20
|
const { buildProxySpawn, getReentryArgv } = require('./bin/lib/spawn-proxy')
|
|
21
|
+
const { addRouteRule, updateRouteRule, deleteRouteRule } = require('./bin/lib/rule-file-edit')
|
|
21
22
|
|
|
22
23
|
const meddleDir = resolveMeddleHome()
|
|
23
24
|
const mcpFile = path.join(meddleDir, 'mcp-proxy-url.json')
|
|
@@ -53,11 +54,55 @@ function proxyApiForSession(sessionId, method, pathname, body) {
|
|
|
53
54
|
const opts = { method, headers: { 'Content-Type': 'application/json' } }
|
|
54
55
|
if (body !== undefined) opts.body = typeof body === 'string' ? body : JSON.stringify(body)
|
|
55
56
|
return fetch(url, opts).then((res) => {
|
|
56
|
-
if (!res.ok) return res.text().then((t) => { throw
|
|
57
|
-
return res.headers.get('content-type')?.includes('application/json') ? res.json() : res
|
|
57
|
+
if (!res.ok) return res.text().then((t) => { throw apiError(res, t) })
|
|
58
|
+
return res.headers.get('content-type')?.includes('application/json') ? res.json() : readTextKeepBom(res)
|
|
58
59
|
})
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Issue #145: `Response.text()` strips a leading UTF-8 BOM, so a rule file read
|
|
64
|
+
* and written back through the API would silently lose it. Decode keeping it.
|
|
65
|
+
*/
|
|
66
|
+
function readTextKeepBom(res) {
|
|
67
|
+
return res.arrayBuffer().then((buf) => new TextDecoder('utf-8', { ignoreBOM: true }).decode(buf))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ---------- Issue #137: 只读规则集 ----------
|
|
71
|
+
// 锁只存在 settings.json,只能在 Meddle Web 界面中加锁 / 解锁;MCP 没有对应工具,只读取状态并在写入被拒时如实返回。
|
|
72
|
+
const RULESET_READONLY = 'RULESET_READONLY'
|
|
73
|
+
const RULESET_READONLY_MESSAGE = '该规则集已设为只读,只能在 Meddle 界面中解锁'
|
|
74
|
+
const READONLY_NOTE = '只读规则集会被拒绝(错误码 RULESET_READONLY,只能在 Meddle 界面中解锁)。'
|
|
75
|
+
|
|
76
|
+
/** 把代理 API 的错误响应转成 Error,保留结构化的 code / ruleFile。 */
|
|
77
|
+
function apiError(res, text) {
|
|
78
|
+
const err = new Error(text || res.statusText)
|
|
79
|
+
err.status = res.status
|
|
80
|
+
try {
|
|
81
|
+
const data = JSON.parse(text)
|
|
82
|
+
if (data && typeof data === 'object') {
|
|
83
|
+
if (typeof data.code === 'string') err.code = data.code
|
|
84
|
+
if (typeof data.ruleFile === 'string') err.ruleFile = data.ruleFile
|
|
85
|
+
}
|
|
86
|
+
} catch (_) {}
|
|
87
|
+
return err
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function rulesetReadonlyResult(ruleFile) {
|
|
91
|
+
return {
|
|
92
|
+
content: [{
|
|
93
|
+
type: 'text',
|
|
94
|
+
text: JSON.stringify({ error: { code: RULESET_READONLY, message: RULESET_READONLY_MESSAGE, ruleFile: ruleFile || null } }, null, 2)
|
|
95
|
+
}],
|
|
96
|
+
isError: true
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** 统一的错误返回:只读拒绝给出结构化结果,其它错误保持原样。 */
|
|
101
|
+
function toolError(e, ruleFile) {
|
|
102
|
+
if (e && e.code === RULESET_READONLY) return rulesetReadonlyResult(e.ruleFile || ruleFile)
|
|
103
|
+
return { content: [{ type: 'text', text: e.message }], isError: true }
|
|
104
|
+
}
|
|
105
|
+
|
|
61
106
|
const FILE_PATTERN = /^file:\/\//
|
|
62
107
|
const LOCAL_FILE_PATTERN = /^[A-Za-z]:\\|^\/|^\\/
|
|
63
108
|
|
|
@@ -109,37 +154,6 @@ function parseEprc(content) {
|
|
|
109
154
|
return parseEprcWithExclusions(content).ruleMap
|
|
110
155
|
}
|
|
111
156
|
|
|
112
|
-
/** 将 pattern -> target 对象转回规则文件文本(与 helpers.ruleMapToEprcText 一致,保留 exclusions) */
|
|
113
|
-
function ruleMapToEprcText(ruleMap, excludeMap) {
|
|
114
|
-
const entries = Object.entries(ruleMap)
|
|
115
|
-
if (entries.length === 0) return ''
|
|
116
|
-
const byTargetAndExclusions = {}
|
|
117
|
-
entries.forEach(([rule, target]) => {
|
|
118
|
-
const bm = target.match(/\[([^\]]+)\]/)
|
|
119
|
-
const groupKey = bm ? target.replace(bm[0], '') : target
|
|
120
|
-
const displayRule = bm ? rule.replace(bm[1], bm[0]) : rule
|
|
121
|
-
const exclusions = excludeMap?.[rule] || []
|
|
122
|
-
const exclusionsKey = exclusions.join(',')
|
|
123
|
-
// Create a compound key that includes both target and exclusions
|
|
124
|
-
const compoundKey = `${groupKey}|||${exclusionsKey}`
|
|
125
|
-
if (!byTargetAndExclusions[compoundKey]) {
|
|
126
|
-
byTargetAndExclusions[compoundKey] = { target: groupKey, rules: [], exclusions }
|
|
127
|
-
}
|
|
128
|
-
byTargetAndExclusions[compoundKey].rules.push(displayRule)
|
|
129
|
-
})
|
|
130
|
-
return Object.entries(byTargetAndExclusions)
|
|
131
|
-
.map(([, { target, rules, exclusions }]) => {
|
|
132
|
-
let displayTarget = target
|
|
133
|
-
if (FILE_PATTERN.test(target)) {
|
|
134
|
-
displayTarget = target.replace(/^file:\/\//, '').replace(/\//g, path.sep)
|
|
135
|
-
}
|
|
136
|
-
const exclusionStr = exclusions.map(e => `!${e}`).join(' ')
|
|
137
|
-
const rulesStr = rules.join(' ')
|
|
138
|
-
return exclusionStr ? `${rulesStr} ${exclusionStr} ${displayTarget}` : `${rulesStr} ${displayTarget}`
|
|
139
|
-
})
|
|
140
|
-
.join('\n')
|
|
141
|
-
}
|
|
142
|
-
|
|
143
157
|
/** 请求代理 API */
|
|
144
158
|
function proxyApi(method, pathname, body) {
|
|
145
159
|
const base = getProxyBaseUrl()
|
|
@@ -147,9 +161,8 @@ function proxyApi(method, pathname, body) {
|
|
|
147
161
|
const opts = { method, headers: { 'Content-Type': 'application/json' } }
|
|
148
162
|
if (body !== undefined) opts.body = typeof body === 'string' ? body : JSON.stringify(body)
|
|
149
163
|
return fetch(url, opts).then((res) => {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return res.headers.get('content-type')?.includes('application/json') ? res.json() : text()
|
|
164
|
+
if (!res.ok) return res.text().then((t) => { throw new Error(t || res.statusText) })
|
|
165
|
+
return res.headers.get('content-type')?.includes('application/json') ? res.json() : readTextKeepBom(res)
|
|
153
166
|
})
|
|
154
167
|
}
|
|
155
168
|
|
|
@@ -395,7 +408,7 @@ mcpServer.registerTool('mock_rule_list', {
|
|
|
395
408
|
const rules = await proxyApiForSession(session, 'GET', '/api/mocks')
|
|
396
409
|
return { content: [{ type: 'text', text: JSON.stringify(rules, null, 2) }] }
|
|
397
410
|
} catch (e) {
|
|
398
|
-
return
|
|
411
|
+
return toolError(e)
|
|
399
412
|
}
|
|
400
413
|
})
|
|
401
414
|
|
|
@@ -405,6 +418,7 @@ mcpServer.registerTool('mock_rule_add', {
|
|
|
405
418
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
406
419
|
name: z.string().describe('规则名称,便于识别'),
|
|
407
420
|
urlPattern: z.string().describe('URL 匹配正则或字符串,如 example\\.com/api 或 .*\\.example\\.com'),
|
|
421
|
+
query: z.string().optional().describe('可选 query 匹配条件(精确 key=value 参数边界,如 window_key=A,不会前缀匹配 AB);响应头可用 {origin} 回显 Origin'),
|
|
408
422
|
method: z.string().optional().describe('HTTP 方法,如 GET、POST、* 表示全部,默认 *'),
|
|
409
423
|
statusCode: z.number().optional().describe('响应状态码,默认 200'),
|
|
410
424
|
headers: z.record(z.string()).optional().describe('响应头,如 {"content-type":"application/json"}'),
|
|
@@ -419,6 +433,7 @@ mcpServer.registerTool('mock_rule_add', {
|
|
|
419
433
|
const body = {
|
|
420
434
|
name: rest.name ?? '',
|
|
421
435
|
urlPattern: rest.urlPattern ?? '',
|
|
436
|
+
query: rest.query ?? '',
|
|
422
437
|
method: rest.method ?? '*',
|
|
423
438
|
statusCode: rest.statusCode ?? 200,
|
|
424
439
|
delay: rest.delay ?? 0,
|
|
@@ -433,7 +448,7 @@ mcpServer.registerTool('mock_rule_add', {
|
|
|
433
448
|
content: [{ type: 'text', text: `已添加 Mock 规则 id=${rule.id}: ${rule.name} (${rule.urlPattern})` }]
|
|
434
449
|
}
|
|
435
450
|
} catch (e) {
|
|
436
|
-
return
|
|
451
|
+
return toolError(e)
|
|
437
452
|
}
|
|
438
453
|
})
|
|
439
454
|
|
|
@@ -444,6 +459,7 @@ mcpServer.registerTool('mock_rule_update', {
|
|
|
444
459
|
id: z.number().describe('规则 id,从 mock_rule_list 获取'),
|
|
445
460
|
name: z.string().optional(),
|
|
446
461
|
urlPattern: z.string().optional(),
|
|
462
|
+
query: z.string().optional().describe('可选 query 匹配条件'),
|
|
447
463
|
method: z.string().optional(),
|
|
448
464
|
statusCode: z.number().optional(),
|
|
449
465
|
headers: z.record(z.string()).optional(),
|
|
@@ -467,7 +483,7 @@ mcpServer.registerTool('mock_rule_update', {
|
|
|
467
483
|
content: [{ type: 'text', text: `已更新 Mock 规则 id=${id}: ${rule.name ?? '(未改)'}` }]
|
|
468
484
|
}
|
|
469
485
|
} catch (e) {
|
|
470
|
-
return
|
|
486
|
+
return toolError(e)
|
|
471
487
|
}
|
|
472
488
|
})
|
|
473
489
|
|
|
@@ -482,14 +498,14 @@ mcpServer.registerTool('mock_rule_delete', {
|
|
|
482
498
|
await proxyApiForSession(session, 'DELETE', `/api/mocks/${id}`)
|
|
483
499
|
return { content: [{ type: 'text', text: `已删除 Mock 规则 id=${id}` }] }
|
|
484
500
|
} catch (e) {
|
|
485
|
-
return
|
|
501
|
+
return toolError(e)
|
|
486
502
|
}
|
|
487
503
|
})
|
|
488
504
|
|
|
489
505
|
// ---------- 路由规则(可选 session 参数) ----------
|
|
490
506
|
|
|
491
507
|
mcpServer.registerTool('route_rule_list', {
|
|
492
|
-
description: '
|
|
508
|
+
description: '列出所有路由规则文件(每项含 readonly: true|false);可选指定 ruleFile 获取该文件下的规则列表(pattern -> target 及 exclusions,含 readonly)。readonly 只能在 Meddle 界面中修改,MCP 没有加锁/解锁工具。可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
493
509
|
inputSchema: {
|
|
494
510
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
495
511
|
ruleFile: z.string().optional().describe('规则文件名(不含 .txt),不传则只返回文件列表')
|
|
@@ -517,11 +533,13 @@ mcpServer.registerTool('route_rule_list', {
|
|
|
517
533
|
for (const exclusions of Object.values(excludeMap)) {
|
|
518
534
|
totalExclusions += exclusions.length
|
|
519
535
|
}
|
|
536
|
+
const info = Array.isArray(files) ? files.find((item) => item && item.name === ruleFile.trim()) : null
|
|
537
|
+
const readonly = Boolean(info && info.readonly)
|
|
520
538
|
return {
|
|
521
|
-
content: [{ type: 'text', text: JSON.stringify({ ruleFile, rules: displayRules, ruleCount: Object.keys(displayRules).length, exclusionCount: totalExclusions }, null, 2) }]
|
|
539
|
+
content: [{ type: 'text', text: JSON.stringify({ ruleFile, readonly, rules: displayRules, ruleCount: Object.keys(displayRules).length, exclusionCount: totalExclusions }, null, 2) }]
|
|
522
540
|
}
|
|
523
541
|
} catch (e) {
|
|
524
|
-
return
|
|
542
|
+
return toolError(e)
|
|
525
543
|
}
|
|
526
544
|
})
|
|
527
545
|
|
|
@@ -546,12 +564,12 @@ mcpServer.registerTool('route_rule_active_get', {
|
|
|
546
564
|
}]
|
|
547
565
|
}
|
|
548
566
|
} catch (e) {
|
|
549
|
-
return
|
|
567
|
+
return toolError(e)
|
|
550
568
|
}
|
|
551
569
|
})
|
|
552
570
|
|
|
553
571
|
mcpServer.registerTool('route_rule_active_set', {
|
|
554
|
-
description: '
|
|
572
|
+
description: '设置当前激活的路由规则文件。会改变启用状态的规则集中若有只读规则集则整体拒绝、不做任何修改:' + READONLY_NOTE + '可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
555
573
|
inputSchema: {
|
|
556
574
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
557
575
|
ruleFile: z.string().describe('要设为当前激活的规则文件名(不含 .txt)')
|
|
@@ -568,6 +586,10 @@ mcpServer.registerTool('route_rule_active_set', {
|
|
|
568
586
|
return { content: [{ type: 'text', text: `未找到规则文件: ${targetName}` }], isError: true }
|
|
569
587
|
}
|
|
570
588
|
|
|
589
|
+
// 先整体检查,避免锁住的规则集让切换只做了一半
|
|
590
|
+
const blocked = files.find((item) => item && item.readonly && !!item.enabled !== (item.name === targetName))
|
|
591
|
+
if (blocked) return rulesetReadonlyResult(blocked.name)
|
|
592
|
+
|
|
571
593
|
for (const item of files) {
|
|
572
594
|
const nextEnabled = item.name === targetName
|
|
573
595
|
if (!!item.enabled === nextEnabled) continue
|
|
@@ -582,12 +604,12 @@ mcpServer.registerTool('route_rule_active_set', {
|
|
|
582
604
|
}]
|
|
583
605
|
}
|
|
584
606
|
} catch (e) {
|
|
585
|
-
return
|
|
607
|
+
return toolError(e)
|
|
586
608
|
}
|
|
587
609
|
})
|
|
588
610
|
|
|
589
611
|
mcpServer.registerTool('route_rule_create_file', {
|
|
590
|
-
description: '
|
|
612
|
+
description: '创建新的路由规则文件(新文件默认可读写)。同名规则文件已存在时失败,不会覆盖已有规则集,因此只读规则集会被拒绝。可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
591
613
|
inputSchema: {
|
|
592
614
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
593
615
|
name: z.string().describe('规则文件名称(不含 .txt),如 dev、staging;非法字符会被替换为下划线'),
|
|
@@ -606,18 +628,18 @@ mcpServer.registerTool('route_rule_create_file', {
|
|
|
606
628
|
}]
|
|
607
629
|
}
|
|
608
630
|
} catch (e) {
|
|
609
|
-
return
|
|
631
|
+
return toolError(e)
|
|
610
632
|
}
|
|
611
633
|
})
|
|
612
634
|
|
|
613
635
|
mcpServer.registerTool('route_rule_add', {
|
|
614
|
-
description: '在指定规则文件中添加一条路由规则(pattern -> target)。若 pattern
|
|
636
|
+
description: '在指定规则文件中添加一条路由规则(pattern -> target)。若 pattern 已存在则覆盖其 target。exclusions 不传时保留该规则原有的排除规则(新规则无排除规则),传 [] 清空。只改这一行,文件中的注释、空行和其他规则保持原样。' + READONLY_NOTE + '可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
615
637
|
inputSchema: {
|
|
616
638
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
617
639
|
ruleFile: z.string().describe('规则文件名(不含 .txt)'),
|
|
618
640
|
pattern: z.string().describe('匹配完整请求 URL。支持:(1) 正则表达式,如 ^https://a\\.com/api; (2) 通配符,如 *.wps.cn 匹配 wps.cn、plus.wps.cn、deep.plus.wps.cn;(3) [marker] 路径重写,如 ^https://cdn.com/[assets] 将 assets 后的路径拼接到 target'),
|
|
619
641
|
target: z.string().describe('转发目标。若仅 host:port 则继承原请求的协议、pathname、query;若完整 URL 则直接使用;若原请求是 websocket 而 target 是 http(s),自动转为 ws(s)'),
|
|
620
|
-
exclusions: z.array(z.string()).optional().describe('排除规则列表,匹配完整 URL。若任一 exclusion 命中则跳过此规则继续匹配下一条。如 ["api/health", "^https://a\\.com/internal"]')
|
|
642
|
+
exclusions: z.array(z.string()).optional().describe('排除规则列表,匹配完整 URL。若任一 exclusion 命中则跳过此规则继续匹配下一条。如 ["api/health", "^https://a\\.com/internal"]。不传时保留该规则原有的排除规则(新规则无排除规则);传 [] 清空')
|
|
621
643
|
}
|
|
622
644
|
}, async ({ session, ruleFile, pattern, target, exclusions }) => {
|
|
623
645
|
try {
|
|
@@ -629,34 +651,25 @@ mcpServer.registerTool('route_rule_add', {
|
|
|
629
651
|
return { content: [{ type: 'text', text: `规则文件不存在或代理未启动: ${err.message}` }], isError: true }
|
|
630
652
|
}
|
|
631
653
|
const text = typeof content === 'string' ? content : String(content)
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
const
|
|
635
|
-
const bm = pat.match(/\[([^\]]+)\]/)
|
|
636
|
-
if (bm) {
|
|
637
|
-
ruleMap[pat.replace(bm[0], bm[1])] = tgt + bm[0]
|
|
638
|
-
excludeMap[pat.replace(bm[0], bm[1])] = exclusions || []
|
|
639
|
-
} else {
|
|
640
|
-
ruleMap[pat] = tgt
|
|
641
|
-
excludeMap[pat] = exclusions || []
|
|
642
|
-
}
|
|
643
|
-
const newContent = ruleMapToEprcText(ruleMap, excludeMap)
|
|
654
|
+
// Issue #145: edit only this rule's line(s); other lines keep their exact bytes.
|
|
655
|
+
// Without `exclusions` an existing rule keeps its own exclusions.
|
|
656
|
+
const { content: newContent } = addRouteRule(text, { pattern: pattern.trim(), target: target.trim(), exclusions })
|
|
644
657
|
await proxyApiForSession(session, 'PUT', `/api/rule-files/${name}/content`, { content: newContent })
|
|
645
658
|
const exclusionInfo = exclusions && exclusions.length > 0 ? `,排除规则: ${exclusions.join(', ')}` : ''
|
|
646
659
|
return { content: [{ type: 'text', text: `已添加规则: ${pattern} -> ${target}${exclusionInfo}` }] }
|
|
647
660
|
} catch (e) {
|
|
648
|
-
return
|
|
661
|
+
return toolError(e)
|
|
649
662
|
}
|
|
650
663
|
})
|
|
651
664
|
|
|
652
665
|
mcpServer.registerTool('route_rule_update', {
|
|
653
|
-
description: '修改指定规则文件中某条规则的 target 和 exclusions(按 pattern
|
|
666
|
+
description: '修改指定规则文件中某条规则的 target 和 exclusions(按 pattern 查找)。exclusions 不传时保留该规则原有的排除规则,传 [] 清空。只改这一行,文件中的注释、空行和其他规则保持原样。' + READONLY_NOTE + '可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
654
667
|
inputSchema: {
|
|
655
668
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
656
669
|
ruleFile: z.string().describe('规则文件名(不含 .txt)'),
|
|
657
670
|
pattern: z.string().describe('要修改的 pattern(需与现有规则一致,支持带 [marker] 的写法)'),
|
|
658
671
|
newTarget: z.string().optional().describe('新的转发目标。若仅 host:port 则继承原请求的协议、pathname、query;若完整 URL 则直接使用'),
|
|
659
|
-
exclusions: z.array(z.string()).optional().describe('新的排除规则列表,匹配完整 URL
|
|
672
|
+
exclusions: z.array(z.string()).optional().describe('新的排除规则列表,匹配完整 URL。不传时保留该规则原有的排除规则;传 [] 清空')
|
|
660
673
|
}
|
|
661
674
|
}, async ({ session, ruleFile, pattern, newTarget, exclusions }) => {
|
|
662
675
|
try {
|
|
@@ -669,32 +682,24 @@ mcpServer.registerTool('route_rule_update', {
|
|
|
669
682
|
return { content: [{ type: 'text', text: `规则文件不存在或代理未启动: ${err.message}` }], isError: true }
|
|
670
683
|
}
|
|
671
684
|
const text = typeof content === 'string' ? content : String(content)
|
|
672
|
-
|
|
673
|
-
const
|
|
674
|
-
|
|
675
|
-
if (!Object.prototype.hasOwnProperty.call(ruleMap, internalKey)) {
|
|
685
|
+
// Issue #145: edit only this rule's line(s); other lines keep their exact bytes.
|
|
686
|
+
const result = updateRouteRule(text, { pattern: pat, target: newTarget ? newTarget.trim() : undefined, exclusions })
|
|
687
|
+
if (!result.found) {
|
|
676
688
|
return { content: [{ type: 'text', text: `未找到 pattern: ${pat}` }], isError: true }
|
|
677
689
|
}
|
|
678
|
-
|
|
679
|
-
const tgt = newTarget.trim()
|
|
680
|
-
ruleMap[internalKey] = bm ? tgt + bm[0] : tgt
|
|
681
|
-
}
|
|
682
|
-
if (exclusions !== undefined) {
|
|
683
|
-
excludeMap[internalKey] = exclusions
|
|
684
|
-
}
|
|
685
|
-
const newContent = ruleMapToEprcText(ruleMap, excludeMap)
|
|
690
|
+
const newContent = result.content
|
|
686
691
|
await proxyApiForSession(session, 'PUT', `/api/rule-files/${name}/content`, { content: newContent })
|
|
687
692
|
const targetInfo = newTarget ? `目标: ${newTarget}` : ''
|
|
688
693
|
const exclusionInfo = exclusions !== undefined ? (exclusions.length > 0 ? `排除规则: ${exclusions.join(', ')}` : '已清除排除规则') : ''
|
|
689
694
|
const parts = [targetInfo, exclusionInfo].filter(Boolean).join(', ')
|
|
690
695
|
return { content: [{ type: 'text', text: `已更新规则: ${pat}${parts ? ` (${parts})` : ''}` }] }
|
|
691
696
|
} catch (e) {
|
|
692
|
-
return
|
|
697
|
+
return toolError(e)
|
|
693
698
|
}
|
|
694
699
|
})
|
|
695
700
|
|
|
696
701
|
mcpServer.registerTool('route_rule_delete', {
|
|
697
|
-
description: '从指定规则文件中删除一条路由规则(按 pattern
|
|
702
|
+
description: '从指定规则文件中删除一条路由规则(按 pattern)。' + READONLY_NOTE + '可选 session 参数指定操作的 session(不传则操作默认 session)。',
|
|
698
703
|
inputSchema: {
|
|
699
704
|
session: z.string().optional().describe('目标 session id,不传则操作默认 session'),
|
|
700
705
|
ruleFile: z.string().describe('规则文件名(不含 .txt)'),
|
|
@@ -711,19 +716,16 @@ mcpServer.registerTool('route_rule_delete', {
|
|
|
711
716
|
return { content: [{ type: 'text', text: `规则文件不存在或代理未启动: ${err.message}` }], isError: true }
|
|
712
717
|
}
|
|
713
718
|
const text = typeof content === 'string' ? content : String(content)
|
|
714
|
-
|
|
715
|
-
const
|
|
716
|
-
|
|
717
|
-
if (!Object.prototype.hasOwnProperty.call(ruleMap, internalKey)) {
|
|
719
|
+
// Issue #145: remove only this rule; other lines keep their exact bytes.
|
|
720
|
+
const result = deleteRouteRule(text, { pattern: pat })
|
|
721
|
+
if (!result.found) {
|
|
718
722
|
return { content: [{ type: 'text', text: `未找到 pattern: ${pat}` }], isError: true }
|
|
719
723
|
}
|
|
720
|
-
|
|
721
|
-
delete excludeMap[internalKey]
|
|
722
|
-
const newContent = ruleMapToEprcText(ruleMap, excludeMap)
|
|
724
|
+
const newContent = result.content
|
|
723
725
|
await proxyApiForSession(session, 'PUT', `/api/rule-files/${name}/content`, { content: newContent })
|
|
724
726
|
return { content: [{ type: 'text', text: `已删除规则: ${pat}` }] }
|
|
725
727
|
} catch (e) {
|
|
726
|
-
return
|
|
728
|
+
return toolError(e)
|
|
727
729
|
}
|
|
728
730
|
})
|
|
729
731
|
|
|
@@ -786,7 +788,7 @@ mcpServer.registerTool('route_preview', {
|
|
|
786
788
|
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }]
|
|
787
789
|
}
|
|
788
790
|
} catch (e) {
|
|
789
|
-
return
|
|
791
|
+
return toolError(e)
|
|
790
792
|
}
|
|
791
793
|
})
|
|
792
794
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jonathanleelx/meddle",
|
|
3
|
-
"version": "0.5.0
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A simple development proxy server with custom routing rules, mock responses, HTTPS interception, and a plugin system",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "index.js",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Plugin, MockPluginOptions, HookContext } from '../../core/types';
|
|
2
|
+
import { resolveHeaderPlaceholders, mergeResponseHeaders } from '../../core/mock-utils';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* 检测响应体的 Content-Type
|
|
@@ -87,7 +88,7 @@ export function createBuiltinMockPlugin(options: MockPluginOptions): Plugin {
|
|
|
87
88
|
? undefined // 保留 rule.headers 中的 Content-Type
|
|
88
89
|
: detectContentType(rule.body || '');
|
|
89
90
|
|
|
90
|
-
const
|
|
91
|
+
const defaults: Record<string, string> = {
|
|
91
92
|
'X-Mock-Rule': encodeURIComponent(rule.name || String(rule.id || '')),
|
|
92
93
|
'Access-Control-Allow-Origin': '*',
|
|
93
94
|
'Access-Control-Allow-Methods': '*',
|
|
@@ -96,15 +97,18 @@ export function createBuiltinMockPlugin(options: MockPluginOptions): Plugin {
|
|
|
96
97
|
|
|
97
98
|
// 如果没有自定义 Content-Type,则使用检测到的类型
|
|
98
99
|
if (contentType) {
|
|
99
|
-
|
|
100
|
+
defaults['Content-Type'] = contentType;
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
//
|
|
103
|
-
|
|
103
|
+
// 合并自定义响应头(会覆盖默认头),并解析 {origin} 占位符
|
|
104
|
+
const resolvedHeaders = resolveHeaderPlaceholders(
|
|
105
|
+
mergeResponseHeaders(defaults, ruleHeaders),
|
|
106
|
+
ctx.request.headers,
|
|
107
|
+
);
|
|
104
108
|
|
|
105
109
|
ctx.respond({
|
|
106
110
|
statusCode: rule.statusCode || 200,
|
|
107
|
-
headers:
|
|
111
|
+
headers: resolvedHeaders,
|
|
108
112
|
body: rule.body || '',
|
|
109
113
|
});
|
|
110
114
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,d as t,l as n,p as r,s as i}from"./button-BFNlGZ5p.js";r(t(),1);var a=e(),o=i(`relative w-full rounded-lg border px-4 py-3 text-sm grid gap-1`,{variants:{variant:{default:`bg-background text-foreground`,destructive:`border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive`}},defaultVariants:{variant:`default`}});function s({className:e,variant:t,...r}){return(0,a.jsx)(`div`,{role:`alert`,className:n(o({variant:t}),e),...r})}function c({className:e,...t}){return(0,a.jsx)(`h5`,{className:n(`mb-1 font-medium leading-none tracking-tight`,e),...t})}function l({className:e,...t}){return(0,a.jsx)(`div`,{className:n(`text-sm [&_p]:leading-relaxed`,e),...t})}export{l as n,c as r,s as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as e}from"./button-BFNlGZ5p.js";var t=e(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]);export{t};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as e,d as t,p as n}from"./button-BFNlGZ5p.js";var r=class{diff(e,t,n={}){let r;typeof n==`function`?(r=n,n={}):`callback`in n&&(r=n.callback);let i=this.castInput(e,n),a=this.castInput(t,n),o=this.removeEmpty(this.tokenize(i,n)),s=this.removeEmpty(this.tokenize(a,n));return this.diffWithOptionsObj(o,s,n,r)}diffWithOptionsObj(e,t,n,r){let i=e=>{if(e=this.postProcess(e,n),r){setTimeout(function(){r(e)},0);return}else return e},a=t.length,o=e.length,s=1,c=a+o;n.maxEditLength!=null&&(c=Math.min(c,n.maxEditLength));let l=n.timeout??1/0,u=Date.now()+l,d=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(d[0],t,e,0,n);if(d[0].oldPos+1>=o&&f+1>=a)return i(this.buildValues(d[0].lastComponent,t,e));let p=-1/0,m=1/0,h=()=>{for(let r=Math.max(p,-s);r<=Math.min(m,s);r+=2){let s,c=d[r-1],l=d[r+1];c&&(d[r-1]=void 0);let u=!1;if(l){let e=l.oldPos-r;u=l&&0<=e&&e<a}let h=c&&c.oldPos+1<o;if(!u&&!h){d[r]=void 0;continue}if(s=!h||u&&c.oldPos<l.oldPos?this.addToPath(l,!0,!1,0,n):this.addToPath(c,!1,!0,1,n),f=this.extractCommon(s,t,e,r,n),s.oldPos+1>=o&&f+1>=a)return i(this.buildValues(s.lastComponent,t,e))||!0;d[r]=s,s.oldPos+1>=o&&(m=Math.min(m,r-1)),f+1>=a&&(p=Math.max(p,r+1))}s++};if(r)(function e(){setTimeout(function(){if(s>c||Date.now()>u)return r(void 0);h()||e()},0)})();else for(;s<=c&&Date.now()<=u;){let e=h();if(e)return e}}addToPath(e,t,n,r,i){let a=e.lastComponent;return a&&!i.oneChangePerToken&&a.added===t&&a.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:n,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:a}}}extractCommon(e,t,n,r,i){let a=t.length,o=n.length,s=e.oldPos,c=s-r,l=0;for(;c+1<a&&s+1<o&&this.equals(n[s+1],t[c+1],i);)c++,s++,l++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return l&&!i.oneChangePerToken&&(e.lastComponent={count:l,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=s,c}equals(e,t,n){return n.comparator?n.comparator(e,t):e===t||!!n.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){let t=[];for(let n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join(``)}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,n){let r=[],i;for(;e;)r.push(e),i=e.previousComponent,delete e.previousComponent,e=i;r.reverse();let a=r.length,o=0,s=0,c=0;for(;o<a;o++){let e=r[o];if(e.removed)e.value=this.join(n.slice(c,c+e.count)),c+=e.count;else{if(!e.added&&this.useLongestToken){let r=t.slice(s,s+e.count);r=r.map(function(e,t){let r=n[c+t];return r.length>e.length?r:e}),e.value=this.join(r)}else e.value=this.join(t.slice(s,s+e.count));s+=e.count,e.added||(c+=e.count)}}return r}};new class extends r{};function i(e,t){let n;for(n=0;n<e.length&&n<t.length;n++)if(e[n]!=t[n])return e.slice(0,n);return e.slice(0,n)}function a(e,t){let n;if(!e||!t||e[e.length-1]!=t[t.length-1])return``;for(n=0;n<e.length&&n<t.length;n++)if(e[e.length-(n+1)]!=t[t.length-(n+1)])return e.slice(-n);return e.slice(-n)}function o(e,t,n){if(e.slice(0,t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't start with prefix ${JSON.stringify(t)}; this is a bug`);return n+e.slice(t.length)}function s(e,t,n){if(!t)return e+n;if(e.slice(-t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't end with suffix ${JSON.stringify(t)}; this is a bug`);return e.slice(0,-t.length)+n}function c(e,t){return o(e,t,``)}function l(e,t){return s(e,t,``)}function u(e,t){return t.slice(0,d(e,t))}function d(e,t){let n=0;e.length>t.length&&(n=e.length-t.length);let r=t.length;e.length<t.length&&(r=e.length);let i=Array(r),a=0;i[0]=0;for(let e=1;e<r;e++){for(t[e]==t[a]?i[e]=i[a]:i[e]=a;a>0&&t[e]!=t[a];)a=i[a];t[e]==t[a]&&a++}a=0;for(let r=n;r<e.length;r++){for(;a>0&&e[r]!=t[a];)a=i[a];e[r]==t[a]&&a++}return a}function f(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function p(e){let t=e.match(/^\s*/);return t?t[0]:``}var m=`a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}`,h=RegExp(`[${m}]+|\\s+|[^${m}]`,`ug`);new class extends r{equals(e,t,n){return n.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()}tokenize(e,t={}){let n;if(t.intlSegmenter){let r=t.intlSegmenter;if(r.resolvedOptions().granularity!=`word`)throw Error(`The segmenter passed must have a granularity of "word"`);n=[];for(let t of Array.from(r.segment(e))){let e=t.segment;n.length&&/\s/.test(n[n.length-1])&&/\s/.test(e)?n[n.length-1]+=e:n.push(e)}}else n=e.match(h)||[];let r=[],i=null;return n.forEach(e=>{/\s/.test(e)?i==null?r.push(e):r.push(r.pop()+e):i!=null&&/\s/.test(i)?r[r.length-1]==i?r.push(r.pop()+e):r.push(i+e):r.push(e),i=e}),r}join(e){return e.map((e,t)=>t==0?e:e.replace(/^\s+/,``)).join(``)}postProcess(e,t){if(!e||t.oneChangePerToken)return e;let n=null,r=null,i=null;return e.forEach(e=>{e.added?r=e:e.removed?i=e:((r||i)&&g(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&g(n,i,r,null),e}};function g(e,t,n,r){if(t&&n){let u=p(t.value),d=f(t.value),m=p(n.value),h=f(n.value);if(e){let r=i(u,m);e.value=s(e.value,m,r),t.value=c(t.value,r),n.value=c(n.value,r)}if(r){let e=a(d,h);r.value=o(r.value,h,e),t.value=l(t.value,e),n.value=l(n.value,e)}}else if(n){if(e){let e=p(n.value);n.value=n.value.substring(e.length)}if(r){let e=p(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=p(r.value),u=p(t.value),d=f(t.value),m=i(n,u);t.value=c(t.value,m);let h=a(c(n,m),d);t.value=l(t.value,h),r.value=o(r.value,n,h),e.value=s(e.value,n,n.slice(0,n.length-h.length))}else if(r){let e=p(r.value),n=u(f(t.value),e);t.value=l(t.value,n)}else if(e){let n=u(f(e.value),p(t.value));t.value=c(t.value,n)}}new class extends r{tokenize(e){let t=RegExp(`(\\r?\\n)|[${m}]+|[^\\S\\n\\r]+|[^${m}]`,`ug`);return e.match(t)||[]}};var _=new class extends r{constructor(){super(...arguments),this.tokenize=y}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
2
2
|
`))&&(e=e.trim()),(!n.newlineIsToken||!t.includes(`
|
|
3
3
|
`))&&(t=t.trim())):n.ignoreNewlineAtEof&&!n.newlineIsToken&&(e.endsWith(`
|
|
4
4
|
`)&&(e=e.slice(0,-1)),t.endsWith(`
|
|
5
5
|
`)&&(t=t.slice(0,-1))),super.equals(e,t,n)}};function v(e,t,n){return _.diff(e,t,n)}function y(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,`
|
|
6
|
-
`));let n=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(let e=0;e<r.length;e++){let i=r[e];e%2&&!t.newlineIsToken?n[n.length-1]+=i:n.push(i)}return n}function b(e){return e==`.`||e==`!`||e==`?`}new class extends r{tokenize(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(r==e.length-1){t.push(e.slice(n));break}if(b(e[r])&&e[r+1].match(/\s/)){for(t.push(e.slice(n,r+1)),r=n=r+1;e[r+1]?.match(/\s/);)r++;t.push(e.slice(n,r+1)),n=r+1}}return t}},new class extends r{tokenize(e){return e.split(/([{}:;,]|\s+)/)}},new class extends r{constructor(){super(...arguments),this.tokenize=y}get useLongestToken(){return!0}castInput(e,t){let{undefinedReplacement:n,stringifyReplacer:r=(e,t)=>t===void 0?n:t}=t;return typeof e==`string`?e:JSON.stringify(x(e,null,null,r),null,` `)}equals(e,t,n){return super.equals(e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`),n)}};function x(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i===void 0?``:i,e));let a;for(a=0;a<t.length;a+=1)if(t[a]===e)return n[a];let o;if(Object.prototype.toString.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=x(e[a],t,n,r,String(a));return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),typeof e==`object`&&e){t.push(e),o={},n.push(o);let i=[],s;for(s in e)Object.prototype.hasOwnProperty.call(e,s)&&i.push(s);for(i.sort(),a=0;a<i.length;a+=1)s=i[a],o[s]=x(e[s],t,n,r,s);t.pop(),n.pop()}else o=e;return o}new class extends r{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}};var S=t(
|
|
6
|
+
`));let n=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(let e=0;e<r.length;e++){let i=r[e];e%2&&!t.newlineIsToken?n[n.length-1]+=i:n.push(i)}return n}function b(e){return e==`.`||e==`!`||e==`?`}new class extends r{tokenize(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(r==e.length-1){t.push(e.slice(n));break}if(b(e[r])&&e[r+1].match(/\s/)){for(t.push(e.slice(n,r+1)),r=n=r+1;e[r+1]?.match(/\s/);)r++;t.push(e.slice(n,r+1)),n=r+1}}return t}},new class extends r{tokenize(e){return e.split(/([{}:;,]|\s+)/)}},new class extends r{constructor(){super(...arguments),this.tokenize=y}get useLongestToken(){return!0}castInput(e,t){let{undefinedReplacement:n,stringifyReplacer:r=(e,t)=>t===void 0?n:t}=t;return typeof e==`string`?e:JSON.stringify(x(e,null,null,r),null,` `)}equals(e,t,n){return super.equals(e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`),n)}};function x(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i===void 0?``:i,e));let a;for(a=0;a<t.length;a+=1)if(t[a]===e)return n[a];let o;if(Object.prototype.toString.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=x(e[a],t,n,r,String(a));return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),typeof e==`object`&&e){t.push(e),o={},n.push(o);let i=[],s;for(s in e)Object.prototype.hasOwnProperty.call(e,s)&&i.push(s);for(i.sort(),a=0;a<i.length;a+=1)s=i[a],o[s]=x(e[s],t,n,r,s);t.pop(),n.pop()}else o=e;return o}new class extends r{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}};var S=n(t(),1),C=e();function w(e,t){let n=`rounded-md border px-2 py-1.5`;return e===`unchanged`?`${n} border-transparent`:e===`changed`?`${n} border-orange-300 bg-orange-500/10`:e===`added`?t===`modified`?`${n} border-green-300 bg-green-500/10`:`${n} border-transparent opacity-50`:e===`removed`?t===`original`?`${n} border-red-300 bg-red-500/10`:`${n} border-transparent opacity-50`:n}function T(e){let t=[];for(let n=0;n<e.length;n+=1){let r=e[n],i=e[n+1];if(r.removed&&i?.added){t.push({status:`changed`,original:r.value,modified:i.value}),n+=1;continue}if(r.added&&i?.removed){t.push({status:`changed`,original:i.value,modified:r.value}),n+=1;continue}if(r.added){t.push({status:`added`,original:``,modified:r.value});continue}if(r.removed){t.push({status:`removed`,original:r.value,modified:``});continue}t.push({status:`unchanged`,original:r.value,modified:r.value})}return t}function E({original:e,modified:t,className:n=``,maxHeight:r=`320px`,mode:i=`inline`}){let a=(0,S.useMemo)(()=>v(e||``,t||``),[e,t]),o=(0,S.useMemo)(()=>T(a),[a]);return i===`split`?(0,C.jsx)(`div`,{className:`overflow-auto rounded-md border bg-muted/30 p-2 ${n}`,style:{maxHeight:r},children:(0,C.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 text-xs font-mono`,children:[(0,C.jsx)(`div`,{className:`text-[10px] text-muted-foreground mb-0.5`,children:`原始`}),(0,C.jsx)(`div`,{className:`text-[10px] text-muted-foreground mb-0.5`,children:`修改后`}),o.map((e,t)=>(0,C.jsxs)(`div`,{className:`contents`,children:[(0,C.jsx)(`div`,{className:w(e.status,`original`),children:(0,C.jsx)(`div`,{className:`whitespace-pre-wrap break-all`,children:e.original||(0,C.jsx)(`span`,{className:`text-muted-foreground italic`,children:`(无)`})})}),(0,C.jsx)(`div`,{className:w(e.status,`modified`),children:(0,C.jsx)(`div`,{className:`whitespace-pre-wrap break-all`,children:e.modified||(0,C.jsx)(`span`,{className:`text-muted-foreground italic`,children:`(无)`})})})]},t))]})}):(0,C.jsx)(`pre`,{className:`text-xs font-mono overflow-auto whitespace-pre-wrap break-all rounded-md border bg-muted/30 ${n}`,style:{maxHeight:r},children:a.map((e,t)=>e.added?(0,C.jsx)(`span`,{className:`block bg-green-500/20 text-green-800 dark:text-green-200 border-l-2 border-green-500 pl-2`,children:e.value},t):e.removed?(0,C.jsx)(`span`,{className:`block bg-red-500/20 text-red-800 dark:text-red-200 border-l-2 border-red-500 pl-2`,children:e.value},t):(0,C.jsx)(`span`,{children:e.value},t))})}export{v as n,E as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ee(e,t){return E(e.type,t,e.props)}function D(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function O(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var k=/\/+/g;function A(e,t){return typeof e==`object`&&e&&e.key!=null?O(``+e.key):t.toString(36)}function j(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function M(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,M(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+A(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(k,`$&/`)+`/`),M(o,r,i,``,function(e){return e})):o!=null&&(D(o)&&(o=ee(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(k,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+A(a,u),c+=M(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+A(a,u++),c+=M(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return M(j(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function N(e,t,n){if(e==null)return e;var r=[],i=0;return M(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function te(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var P=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},ne={map:N,forEach:function(e,t,n){N(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return N(e,function(){t++}),t},toArray:function(e){return N(e,function(e){return e})||[]},only:function(e){if(!D(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=ne,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=D,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:te}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,P)}catch(e){P(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.4`})),u=o(((e,t)=>{t.exports=l()})),d=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),f=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),p=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),m=e=>{let t=p(e);return t.charAt(0).toUpperCase()+t.slice(1)},h={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},g=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},_=c(u()),v=(0,_.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,_.createElement)(`svg`,{ref:c,...h,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:d(`lucide`,i),...!a&&!g(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,_.createElement)(e,t)),...Array.isArray(a)?a:[a]])),y=(e,t)=>{let n=(0,_.forwardRef)(({className:n,...r},i)=>(0,_.createElement)(v,{ref:i,iconNode:t,className:d(`lucide-${f(m(e))}`,`lucide-${e}`,n),...r}));return n.displayName=m(e),n};function b(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=b(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function x(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=b(e))&&(r&&(r+=` `),r+=t);return r}var S=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t<e.length;t++)n[t]=e[t];for(let r=0;r<t.length;r++)n[e.length+r]=t[r];return n},C=(e,t)=>({classGroupId:e,validator:t}),w=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),T=`-`,E=[],ee=`arbitrary..`,D=e=>{let t=A(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return k(e);let n=e.split(T);return O(n,n[0]===``&&n.length>1?1:0,t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?S(i,t):t:i||E}return n[e]||E}}},O=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=O(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(T):e.slice(t).join(T),s=a.length;for(let e=0;e<s;e++){let t=a[e];if(t.validator(o))return t.classGroupId}},k=e=>e.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?ee+r:void 0})(),A=e=>{let{theme:t,classGroups:n}=e;return j(n,t)},j=(e,t)=>{let n=w();for(let r in e){let i=e[r];M(i,n,r,t)}return n},M=(e,t,n,r)=>{let i=e.length;for(let a=0;a<i;a++){let i=e[a];N(i,t,n,r)}},N=(e,t,n,r)=>{if(typeof e==`string`){te(e,t,n);return}if(typeof e==`function`){P(e,t,n,r);return}ne(e,t,n,r)},te=(e,t,n)=>{let r=e===``?t:F(t,e);r.classGroupId=n},P=(e,t,n,r)=>{if(I(e)){M(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(C(n,e))},ne=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e<a;e++){let[a,o]=i[e];M(o,F(t,a),n,r)}},F=(e,t)=>{let n=e,r=t.split(T),i=r.length;for(let e=0;e<i;e++){let t=r[e],i=n.nextPart.get(t);i||(i=w(),n.nextPart.set(t,i)),n=i}return n},I=e=>`isThemeGetter`in e&&e.isThemeGetter===!0,L=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},R=`!`,re=`:`,z=[],ie=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),B=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;s<o;s++){let o=e[s];if(n===0&&r===0){if(o===re){t.push(e.slice(i,s)),i=s+1;continue}if(o===`/`){a=s;continue}}o===`[`?n++:o===`]`?n--:o===`(`?r++:o===`)`&&r--}let s=t.length===0?e:e.slice(i),c=s,l=!1;s.endsWith(R)?(c=s.slice(0,-1),l=!0):s.startsWith(R)&&(c=s.slice(1),l=!0);let u=a&&a>i?a-i:void 0;return ie(t,l,c,u)};if(t){let e=t+re,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):ie(z,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},V=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i<e.length;i++){let a=e[i],o=a[0]===`[`,s=t.has(a);o||s?(r.length>0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},ae=e=>({cache:L(e.cacheSize),parseClassName:B(e),sortModifiers:V(e),...D(e)}),H=/\s+/,oe=(e,t)=>{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a}=t,o=[],s=e.trim().split(H),c=``;for(let e=s.length-1;e>=0;--e){let t=s[e],{isExternal:l,modifiers:u,hasImportantModifier:d,baseClassName:f,maybePostfixModifierPosition:p}=n(t);if(l){c=t+(c.length>0?` `+c:c);continue}let m=!!p,h=r(m?f.substring(0,p):f);if(!h){if(!m){c=t+(c.length>0?` `+c:c);continue}if(h=r(f),!h){c=t+(c.length>0?` `+c:c);continue}m=!1}let g=u.length===0?``:u.length===1?u[0]:a(u).join(`:`),_=d?g+R:g,v=_+h;if(o.indexOf(v)>-1)continue;o.push(v);let y=i(h,m);for(let e=0;e<y.length;++e){let t=y[e];o.push(_+t)}c=t+(c.length>0?` `+c:c)}return c},se=(...e)=>{let t=0,n,r,i=``;for(;t<e.length;)(n=e[t++])&&(r=ce(n))&&(i&&(i+=` `),i+=r);return i},ce=e=>{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r<e.length;r++)e[r]&&(t=ce(e[r]))&&(n&&(n+=` `),n+=t);return n},le=(e,...t)=>{let n,r,i,a,o=o=>(n=ae(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=oe(e,n);return i(e,a),a};return a=o,(...e)=>a(se(...e))},ue=[],U=e=>{let t=t=>t[e]||ue;return t.isThemeGetter=!0,t},de=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,fe=/^\((?:(\w[\w-]*):)?(.+)\)$/i,pe=/^\d+\/\d+$/,me=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,he=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,ge=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,_e=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ve=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,W=e=>pe.test(e),G=e=>!!e&&!Number.isNaN(Number(e)),K=e=>!!e&&Number.isInteger(Number(e)),ye=e=>e.endsWith(`%`)&&G(e.slice(0,-1)),q=e=>me.test(e),be=()=>!0,xe=e=>he.test(e)&&!ge.test(e),Se=()=>!1,Ce=e=>_e.test(e),we=e=>ve.test(e),Te=e=>!J(e)&&!X(e),Ee=e=>Q(e,Re,Se),J=e=>de.test(e),Y=e=>Q(e,ze,xe),De=e=>Q(e,Be,G),Oe=e=>Q(e,Ie,Se),ke=e=>Q(e,Le,we),Ae=e=>Q(e,He,Ce),X=e=>fe.test(e),Z=e=>$(e,ze),je=e=>$(e,Ve),Me=e=>$(e,Ie),Ne=e=>$(e,Re),Pe=e=>$(e,Le),Fe=e=>$(e,He,!0),Q=(e,t,n)=>{let r=de.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},$=(e,t,n=!1)=>{let r=fe.exec(e);return r?r[1]?t(r[1]):n:!1},Ie=e=>e===`position`||e===`percentage`,Le=e=>e===`image`||e===`url`,Re=e=>e===`length`||e===`size`||e===`bg-size`,ze=e=>e===`length`,Be=e=>e===`number`,Ve=e=>e===`family-name`,He=e=>e===`shadow`,Ue=le(()=>{let e=U(`color`),t=U(`font`),n=U(`text`),r=U(`font-weight`),i=U(`tracking`),a=U(`leading`),o=U(`breakpoint`),s=U(`container`),c=U(`spacing`),l=U(`radius`),u=U(`shadow`),d=U(`inset-shadow`),f=U(`text-shadow`),p=U(`drop-shadow`),m=U(`blur`),h=U(`perspective`),g=U(`aspect`),_=U(`ease`),v=U(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),X,J],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[X,J,c],T=()=>[W,`full`,`auto`,...w()],E=()=>[K,`none`,`subgrid`,X,J],ee=()=>[`auto`,{span:[`full`,K,X,J]},K,X,J],D=()=>[K,`auto`,X,J],O=()=>[`auto`,`min`,`max`,`fr`,X,J],k=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],A=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],M=()=>[W,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,X,J],te=()=>[...b(),Me,Oe,{position:[X,J]}],P=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ne=()=>[`auto`,`cover`,`contain`,Ne,Ee,{size:[X,J]}],F=()=>[ye,Z,Y],I=()=>[``,`none`,`full`,l,X,J],L=()=>[``,G,Z,Y],R=()=>[`solid`,`dashed`,`dotted`,`double`],re=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],z=()=>[G,ye,Me,Oe],ie=()=>[``,`none`,m,X,J],B=()=>[`none`,G,X,J],V=()=>[`none`,G,X,J],ae=()=>[G,X,J],H=()=>[W,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[q],breakpoint:[q],color:[be],container:[q],"drop-shadow":[q],ease:[`in`,`out`,`in-out`],font:[Te],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[q],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[q],shadow:[q],spacing:[`px`,G],text:[q],"text-shadow":[q],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,W,J,X,g]}],container:[`container`],columns:[{columns:[G,J,X,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{start:T()}],end:[{end:T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[K,`auto`,X,J]}],basis:[{basis:[W,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[G,W,`auto`,`initial`,`none`,J]}],grow:[{grow:[``,G,X,J]}],shrink:[{shrink:[``,G,X,J]}],order:[{order:[K,`first`,`last`,`none`,X,J]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:ee()}],"col-start":[{"col-start":D()}],"col-end":[{"col-end":D()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:ee()}],"row-start":[{"row-start":D()}],"row-end":[{"row-end":D()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":O()}],"auto-rows":[{"auto-rows":O()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...k(),`normal`]}],"justify-items":[{"justify-items":[...A(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...A()]}],"align-content":[{content:[`normal`,...k()]}],"align-items":[{items:[...A(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...A(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":k()}],"place-items":[{"place-items":[...A(),`baseline`]}],"place-self":[{"place-self":[`auto`,...A()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:M()}],w:[{w:[s,`screen`,...M()]}],"min-w":[{"min-w":[s,`screen`,`none`,...M()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...M()]}],h:[{h:[`screen`,`lh`,...M()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...M()]}],"max-h":[{"max-h":[`screen`,`lh`,...M()]}],"font-size":[{text:[`base`,n,Z,Y]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,X,De]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,ye,J]}],"font-family":[{font:[je,J,t]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,X,J]}],"line-clamp":[{"line-clamp":[G,`none`,X,De]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,X,J]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,X,J]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:N()}],"text-color":[{text:N()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...R(),`wavy`]}],"text-decoration-thickness":[{decoration:[G,`from-font`,`auto`,X,Y]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[G,`auto`,X,J]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,X,J]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,X,J]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:te()}],"bg-repeat":[{bg:P()}],"bg-size":[{bg:ne()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},K,X,J],radial:[``,X,J],conic:[K,X,J]},Pe,ke]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:F()}],"gradient-via-pos":[{via:F()}],"gradient-to-pos":[{to:F()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:I()}],"rounded-s":[{"rounded-s":I()}],"rounded-e":[{"rounded-e":I()}],"rounded-t":[{"rounded-t":I()}],"rounded-r":[{"rounded-r":I()}],"rounded-b":[{"rounded-b":I()}],"rounded-l":[{"rounded-l":I()}],"rounded-ss":[{"rounded-ss":I()}],"rounded-se":[{"rounded-se":I()}],"rounded-ee":[{"rounded-ee":I()}],"rounded-es":[{"rounded-es":I()}],"rounded-tl":[{"rounded-tl":I()}],"rounded-tr":[{"rounded-tr":I()}],"rounded-br":[{"rounded-br":I()}],"rounded-bl":[{"rounded-bl":I()}],"border-w":[{border:L()}],"border-w-x":[{"border-x":L()}],"border-w-y":[{"border-y":L()}],"border-w-s":[{"border-s":L()}],"border-w-e":[{"border-e":L()}],"border-w-t":[{"border-t":L()}],"border-w-r":[{"border-r":L()}],"border-w-b":[{"border-b":L()}],"border-w-l":[{"border-l":L()}],"divide-x":[{"divide-x":L()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":L()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...R(),`hidden`,`none`]}],"divide-style":[{divide:[...R(),`hidden`,`none`]}],"border-color":[{border:N()}],"border-color-x":[{"border-x":N()}],"border-color-y":[{"border-y":N()}],"border-color-s":[{"border-s":N()}],"border-color-e":[{"border-e":N()}],"border-color-t":[{"border-t":N()}],"border-color-r":[{"border-r":N()}],"border-color-b":[{"border-b":N()}],"border-color-l":[{"border-l":N()}],"divide-color":[{divide:N()}],"outline-style":[{outline:[...R(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[G,X,J]}],"outline-w":[{outline:[``,G,Z,Y]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,Fe,Ae]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,Fe,Ae]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:L()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[G,Y]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":L()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,Fe,Ae]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[G,X,J]}],"mix-blend":[{"mix-blend":[...re(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":re()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[G]}],"mask-image-linear-from-pos":[{"mask-linear-from":z()}],"mask-image-linear-to-pos":[{"mask-linear-to":z()}],"mask-image-linear-from-color":[{"mask-linear-from":N()}],"mask-image-linear-to-color":[{"mask-linear-to":N()}],"mask-image-t-from-pos":[{"mask-t-from":z()}],"mask-image-t-to-pos":[{"mask-t-to":z()}],"mask-image-t-from-color":[{"mask-t-from":N()}],"mask-image-t-to-color":[{"mask-t-to":N()}],"mask-image-r-from-pos":[{"mask-r-from":z()}],"mask-image-r-to-pos":[{"mask-r-to":z()}],"mask-image-r-from-color":[{"mask-r-from":N()}],"mask-image-r-to-color":[{"mask-r-to":N()}],"mask-image-b-from-pos":[{"mask-b-from":z()}],"mask-image-b-to-pos":[{"mask-b-to":z()}],"mask-image-b-from-color":[{"mask-b-from":N()}],"mask-image-b-to-color":[{"mask-b-to":N()}],"mask-image-l-from-pos":[{"mask-l-from":z()}],"mask-image-l-to-pos":[{"mask-l-to":z()}],"mask-image-l-from-color":[{"mask-l-from":N()}],"mask-image-l-to-color":[{"mask-l-to":N()}],"mask-image-x-from-pos":[{"mask-x-from":z()}],"mask-image-x-to-pos":[{"mask-x-to":z()}],"mask-image-x-from-color":[{"mask-x-from":N()}],"mask-image-x-to-color":[{"mask-x-to":N()}],"mask-image-y-from-pos":[{"mask-y-from":z()}],"mask-image-y-to-pos":[{"mask-y-to":z()}],"mask-image-y-from-color":[{"mask-y-from":N()}],"mask-image-y-to-color":[{"mask-y-to":N()}],"mask-image-radial":[{"mask-radial":[X,J]}],"mask-image-radial-from-pos":[{"mask-radial-from":z()}],"mask-image-radial-to-pos":[{"mask-radial-to":z()}],"mask-image-radial-from-color":[{"mask-radial-from":N()}],"mask-image-radial-to-color":[{"mask-radial-to":N()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[G]}],"mask-image-conic-from-pos":[{"mask-conic-from":z()}],"mask-image-conic-to-pos":[{"mask-conic-to":z()}],"mask-image-conic-from-color":[{"mask-conic-from":N()}],"mask-image-conic-to-color":[{"mask-conic-to":N()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:te()}],"mask-repeat":[{mask:P()}],"mask-size":[{mask:ne()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,X,J]}],filter:[{filter:[``,`none`,X,J]}],blur:[{blur:ie()}],brightness:[{brightness:[G,X,J]}],contrast:[{contrast:[G,X,J]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,Fe,Ae]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,G,X,J]}],"hue-rotate":[{"hue-rotate":[G,X,J]}],invert:[{invert:[``,G,X,J]}],saturate:[{saturate:[G,X,J]}],sepia:[{sepia:[``,G,X,J]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,X,J]}],"backdrop-blur":[{"backdrop-blur":ie()}],"backdrop-brightness":[{"backdrop-brightness":[G,X,J]}],"backdrop-contrast":[{"backdrop-contrast":[G,X,J]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,G,X,J]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[G,X,J]}],"backdrop-invert":[{"backdrop-invert":[``,G,X,J]}],"backdrop-opacity":[{"backdrop-opacity":[G,X,J]}],"backdrop-saturate":[{"backdrop-saturate":[G,X,J]}],"backdrop-sepia":[{"backdrop-sepia":[``,G,X,J]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,X,J]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[G,`initial`,X,J]}],ease:[{ease:[`linear`,`initial`,_,X,J]}],delay:[{delay:[G,X,J]}],animate:[{animate:[`none`,v,X,J]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,X,J]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:B()}],"rotate-x":[{"rotate-x":B()}],"rotate-y":[{"rotate-y":B()}],"rotate-z":[{"rotate-z":B()}],scale:[{scale:V()}],"scale-x":[{"scale-x":V()}],"scale-y":[{"scale-y":V()}],"scale-z":[{"scale-z":V()}],"scale-3d":[`scale-3d`],skew:[{skew:ae()}],"skew-x":[{"skew-x":ae()}],"skew-y":[{"skew-y":ae()}],transform:[{transform:[X,J,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:H()}],"translate-x":[{"translate-x":H()}],"translate-y":[{"translate-y":H()}],"translate-z":[{"translate-z":H()}],"translate-none":[`translate-none`],accent:[{accent:N()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:N()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,X,J]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,X,J]}],fill:[{fill:[`none`,...N()]}],"stroke-w":[{stroke:[G,Z,Y,De]}],stroke:[{stroke:[`none`,...N()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function We(...e){return Ue(x(e))}var Ge=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Ke=o(((e,t)=>{t.exports=Ge()})),qe=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Je=x,Ye=(e,t)=>n=>{if(t?.variants==null)return Je(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=qe(t)||qe(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return Je(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)};function Xe(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function Ze(...e){return t=>{let n=!1,r=e.map(e=>{let r=Xe(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():Xe(e[t],null)}}}}function Qe(...e){return _.useCallback(Ze(...e),e)}var $e=Ke();function et(e){let t=nt(e),n=_.forwardRef((e,n)=>{let{children:r,...i}=e,a=_.Children.toArray(r),o=a.find(at);if(o){let e=o.props.children,r=a.map(t=>t===o?_.Children.count(e)>1?_.Children.only(null):_.isValidElement(e)?e.props.children:null:t);return(0,$e.jsx)(t,{...i,ref:n,children:_.isValidElement(e)?_.cloneElement(e,void 0,r):null})}return(0,$e.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}var tt=et(`Slot`);function nt(e){let t=_.forwardRef((e,t)=>{let{children:n,...r}=e;if(_.isValidElement(n)){let e=st(n),i=ot(r,n.props);return n.type!==_.Fragment&&(i.ref=t?Ze(t,e):e),_.cloneElement(n,i)}return _.Children.count(n)>1?_.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var rt=Symbol(`radix.slottable`);function it(e){let t=({children:e})=>(0,$e.jsx)($e.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=rt,t}function at(e){return _.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===rt}function ot(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function st(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var ct=Ye(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,{variants:{variant:{default:`bg-foreground text-background hover:bg-primary hover:text-primary-foreground`,selected:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input`,secondary:`bg-secondary text-secondary-foreground hover:bg-accent hover:text-accent-foreground`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-foreground underline-offset-4 hover:text-primary hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function lt({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){return(0,$e.jsx)(r?tt:`button`,{"data-slot":`button`,"data-variant":t,"data-size":n,className:We(ct({variant:t,size:n,className:e})),...i})}export{Ze as a,Ke as c,u as d,o as f,it as i,We as l,tt as n,Qe as o,c as p,et as r,Ye as s,lt as t,y as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as e}from"./button-BFNlGZ5p.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,d as t,l as n,o as r,p as i,u as a}from"./button-BFNlGZ5p.js";import{a as o,o as s,r as c,t as l}from"./dist-CFZ4xMSF.js";import{t as u}from"./check-BkfHQ6re.js";import{t as d}from"./dist-CRmX_NvH.js";import{n as f,t as p}from"./dist-fzPL-8F9.js";var m=a(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),h=i(t(),1),g=e(),_=`Checkbox`,[v,y]=o(_),[b,x]=v(_);function S(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:u,value:d=`on`,internal_do_not_use_render:f}=e,[p,m]=l({prop:n,defaultProp:i??!1,onChange:c,caller:_}),[v,y]=h.useState(null),[x,S]=h.useState(null),C=h.useRef(!1),w=v?!!o||!!v.closest(`form`):!0,T={checked:p,disabled:a,setChecked:m,control:v,setControl:y,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:u,defaultChecked:j(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,g.jsx)(b,{scope:t,...T,children:A(f)?f(T):r})}var C=`CheckboxTrigger`,w=h.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...i},a)=>{let{control:o,value:l,disabled:u,checked:d,required:f,setControl:p,setChecked:m,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:y}=x(C,e),b=r(a,p),S=h.useRef(d);return h.useEffect(()=>{let e=o?.form;if(e){let t=()=>m(S.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[o,m]),(0,g.jsx)(s.button,{type:`button`,role:`checkbox`,"aria-checked":j(d)?`mixed`:d,"aria-required":f,"data-state":M(d),"data-disabled":u?``:void 0,disabled:u,value:l,...i,ref:b,onKeyDown:c(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:c(n,e=>{m(e=>j(e)?!0:!e),y&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});w.displayName=C;var T=h.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,g.jsx)(S,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(w,{...d,ref:t,__scopeCheckbox:n}),e&&(0,g.jsx)(k,{__scopeCheckbox:n})]})})});T.displayName=_;var E=`CheckboxIndicator`,D=h.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:r,...i}=e,a=x(E,n);return(0,g.jsx)(d,{present:r||j(a.checked)||a.checked===!0,children:(0,g.jsx)(s.span,{"data-state":M(a.checked),"data-disabled":a.disabled?``:void 0,...i,ref:t,style:{pointerEvents:`none`,...e.style}})})});D.displayName=E;var O=`CheckboxBubbleInput`,k=h.forwardRef(({__scopeCheckbox:e,...t},n)=>{let{control:i,hasConsumerStoppedPropagationRef:a,checked:o,defaultChecked:c,required:l,disabled:u,name:d,value:m,form:_,bubbleInput:v,setBubbleInput:y}=x(O,e),b=r(n,y),S=f(o),C=p(i);h.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(S!==o&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=j(o),n.call(e,j(o)?!1:o),e.dispatchEvent(t)}},[v,S,o,a]);let w=h.useRef(j(o)?!1:o);return(0,g.jsx)(s.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:u,name:d,value:m,form:_,...t,tabIndex:-1,ref:b,style:{...t.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});k.displayName=O;function A(e){return typeof e==`function`}function j(e){return e===`indeterminate`}function M(e){return j(e)?`indeterminate`:e?`checked`:`unchecked`}function N({className:e,...t}){return(0,g.jsx)(T,{"data-slot":`checkbox`,className:n(`peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,e),...t,children:(0,g.jsx)(D,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none`,children:(0,g.jsx)(u,{className:`size-3.5`})})})}export{m as n,N as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as e}from"./button-BFNlGZ5p.js";var t=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{u as e}from"./button-BFNlGZ5p.js";var t=e(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{u as e}from"./button-BFNlGZ5p.js";var t=e(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]);export{t};
|