@citms/card-renderer 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +103 -2
  3. package/bin/assets.cjs +197 -0
  4. package/bin/hash.cjs +8 -0
  5. package/dist/build-manifest.json +91 -0
  6. package/dist/client/index.cjs +1 -0
  7. package/dist/client/index.d.ts +26 -0
  8. package/dist/client/index.js +1 -0
  9. package/dist/react/chunk-365EUYT4.js +1 -0
  10. package/dist/react/chunk-7Z24FCNQ.js +1 -0
  11. package/dist/react/chunk-AS42ETVB.js +5 -0
  12. package/dist/react/chunk-B5W4APHC.js +1 -0
  13. package/dist/react/chunk-BXZPUPC6.js +1 -0
  14. package/dist/react/chunk-BYG2RW6F.js +1 -0
  15. package/dist/react/chunk-CIGVKKDL.js +1 -0
  16. package/dist/react/chunk-FA3P4P7N.js +1 -0
  17. package/dist/react/chunk-FZPUQFEL.js +1 -0
  18. package/dist/react/chunk-HDLBOOJJ.js +1 -0
  19. package/dist/react/chunk-HIPTLNFZ.js +1 -0
  20. package/dist/react/chunk-IB2S4AZ2.js +1 -0
  21. package/dist/react/chunk-JMVQMTPF.js +1 -0
  22. package/dist/react/chunk-KCQGEQD2.js +4936 -0
  23. package/dist/react/chunk-KQPDRMNN.js +1 -0
  24. package/dist/react/chunk-LCCDWK3X.js +6 -0
  25. package/dist/react/chunk-ONMPBMDB.js +1 -0
  26. package/dist/react/chunk-QK7SPTHI.js +2 -0
  27. package/dist/react/chunk-XU6YJ73P.js +6 -0
  28. package/dist/react/chunk-YCREM62J.js +1 -0
  29. package/dist/react/chunk-YFOKPKV6.js +1 -0
  30. package/dist/react/chunk-YIRSCSH4.js +1 -0
  31. package/dist/react/chunk-Z3BRQXJR.js +2 -0
  32. package/dist/react/chunk-ZKMD63FZ.js +1 -0
  33. package/dist/react/components/ButtonGroupPreview.js +1 -0
  34. package/dist/react/components/CardRenderer.js +1 -0
  35. package/dist/react/components/CardRuntime.js +1 -0
  36. package/dist/react/components/ChartPreview.js +1 -0
  37. package/dist/react/components/ComponentIcon.js +1 -0
  38. package/dist/react/components/FormPreview.js +1 -0
  39. package/dist/react/components/InputPreview.js +1 -0
  40. package/dist/react/components/InteractivePreview.js +1 -0
  41. package/dist/react/components/LibraryIcon.js +1 -0
  42. package/dist/react/components/MultiSelectPreview.js +1 -0
  43. package/dist/react/components/PersonPreview.js +1 -0
  44. package/dist/react/components/SelectPreview.js +1 -0
  45. package/dist/react/components/TemporalPicker.js +1 -0
  46. package/dist/react/components/TemporalPreview.js +1 -0
  47. package/dist/react/components/buttonGroup.js +1 -0
  48. package/dist/react/components/chart.js +1 -0
  49. package/dist/react/components/chartRuntime.js +1 -0
  50. package/dist/react/components/containers.js +1 -0
  51. package/dist/react/components/form.js +1 -0
  52. package/dist/react/components/gallery.js +1 -0
  53. package/dist/react/components/links.js +1 -0
  54. package/dist/react/components/model.js +1 -0
  55. package/dist/react/components/people.js +1 -0
  56. package/dist/react/components/select.js +1 -0
  57. package/dist/react/components/temporal.js +1 -0
  58. package/dist/react/index.js +1 -0
  59. package/dist/react/styles.js +1 -0
  60. package/dist/runtime/app.js +6068 -0
  61. package/dist/runtime/card-reference-assets/img_v2_0920e890-b6ec-4e06-8889-8abd2690843g.webp +0 -0
  62. package/dist/runtime/card-reference-assets/img_v2_196bac64-1731-4bb1-b7c6-d8090482c3bg.webp +0 -0
  63. package/dist/runtime/card-reference-assets/img_v2_1bfeb6af-dd10-4e49-8fd2-5a392bc86ccg.webp +0 -0
  64. package/dist/runtime/card-reference-assets/img_v2_5d281f9b-685b-4f21-b44b-d8e5400438cg.webp +0 -0
  65. package/dist/runtime/card-reference-assets/img_v2_5e220251-1dac-42cb-8901-3031e8bd38cg.webp +0 -0
  66. package/dist/runtime/card-reference-assets/img_v2_609930d7-21cc-475a-baba-3de5dafe079g.webp +0 -0
  67. package/dist/runtime/card-reference-assets/img_v2_79d15fd4-6555-476e-ac96-f132ea80391g.webp +0 -0
  68. package/dist/runtime/card-reference-assets/img_v2_8626254c-2c9c-45bf-809b-b6f2508af27g.webp +0 -0
  69. package/dist/runtime/card-reference-assets/img_v2_a42671f8-f6c6-443d-97ef-b99d0b2134bg.webp +0 -0
  70. package/dist/runtime/card-reference-assets/img_v2_a4b2d72a-211b-440b-8950-880066cfbabg.webp +0 -0
  71. package/dist/runtime/card-reference-assets/img_v2_ace8a4f2-ae13-420f-9eb3-b3530b462beg.webp +0 -0
  72. package/dist/runtime/card-reference-assets/img_v2_e1b9d95a-063f-4151-a7fc-c52b60c2605g.webp +0 -0
  73. package/dist/runtime/card-reference-assets/img_v2_f4ce38a7-8dd4-45ed-a1ac-29d521d19a0g.webp +0 -0
  74. package/dist/runtime/card-reference-assets/img_v3_0264_d03088e9-e554-4ec6-9855-8a79f16da8cg.webp +0 -0
  75. package/dist/runtime/card-reference-assets/img_v3_027b_3e6fb0f5-0bca-4500-bad0-45f035c2d46g.webp +0 -0
  76. package/dist/runtime/card-reference-assets/img_v3_027b_fa25eb50-594e-45cf-b1aa-1005034a314g.webp +0 -0
  77. package/dist/runtime/card-reference-assets/img_v3_027d_1abba963-fd3e-4666-ade2-198c8d0813bg.webp +0 -0
  78. package/dist/runtime/card-reference-assets/img_v3_027d_867abe97-d32a-4955-854a-6550cdfeb1bg.webp +0 -0
  79. package/dist/runtime/card-reference-assets/img_v3_027d_8bd00882-7eb6-48df-8999-a79cd90d88ag.webp +0 -0
  80. package/dist/runtime/card-reference-assets/img_v3_027d_b6c77830-6fad-41bf-ac3b-4906e7d83f0g.webp +0 -0
  81. package/dist/runtime/card-reference-assets/img_v3_027d_b932d7e7-be81-4be7-8222-2663d83dc58g.webp +0 -0
  82. package/dist/runtime/card-reference-assets/img_v3_027d_d644f50c-510a-4fcb-98f8-ed70632b3d8g.webp +0 -0
  83. package/dist/runtime/card-reference-assets/img_v3_027d_e361c8eb-28d4-406f-a44d-cfa9d858f44g.webp +0 -0
  84. package/dist/runtime/card-reference-assets/img_v3_027d_e5dcd820-bfa7-42e7-9009-82aea1133b3g.webp +0 -0
  85. package/dist/runtime/card-reference-assets/img_v3_027d_feaf588d-b31b-43b9-bd61-c5595406d40g.webp +0 -0
  86. package/dist/runtime/card-reference-assets/img_v3_027m_91fb8fc2-e6a3-406c-aa9d-04569e29bccg.webp +0 -0
  87. package/dist/runtime/card-reference-assets/img_v3_027m_c5c3ec75-cd3c-4092-8faf-9f6ae3697d4g.webp +0 -0
  88. package/dist/runtime/card-reference-assets/img_v3_027s_851c5059-00b5-4cf7-adeb-95ddc7e6d95g.webp +0 -0
  89. package/dist/runtime/card-reference-assets/img_v3_0288_38fa135d-4ffb-4898-8e8b-e4ea9f247b9g.webp +0 -0
  90. package/dist/runtime/card-reference-assets/img_v3_0288_5976e900-ef79-40b6-96fc-b7882b20680g.webp +0 -0
  91. package/dist/runtime/card-reference-assets/img_v3_0289_18073e19-b8c5-49e4-84e1-e4c93b1f3d5g.webp +0 -0
  92. package/dist/runtime/card-reference-assets/img_v3_0289_211a711a-a44f-4218-93ca-87a0544b538g.webp +0 -0
  93. package/dist/runtime/card-reference-assets/img_v3_0289_385e1af4-4d62-45bd-b9c4-50adf000f06g.webp +0 -0
  94. package/dist/runtime/card-reference-assets/img_v3_0289_5e2b5dec-e916-4abb-adb4-c72745cfa97g.webp +0 -0
  95. package/dist/runtime/card-reference-assets/img_v3_0289_6d4bafc3-0a31-4058-804f-bec67584389g.webp +0 -0
  96. package/dist/runtime/card-reference-assets/img_v3_0289_87ebfc6a-221c-4f56-986e-0ebcf098123g.webp +0 -0
  97. package/dist/runtime/card-reference-assets/img_v3_0289_979245ad-2480-4fc5-ada7-42238b73f69g.webp +0 -0
  98. package/dist/runtime/card-reference-assets/img_v3_0289_b74726a5-da82-47be-9e2a-52aa9b5a77fg.webp +0 -0
  99. package/dist/runtime/card-reference-assets/img_v3_0289_bb92dbb9-fb35-4742-a330-efe07a3cea4g.webp +0 -0
  100. package/dist/runtime/card-reference-assets/img_v3_0289_c0f7cd0c-4388-4c53-9078-8996ef0a6e6g.webp +0 -0
  101. package/dist/runtime/card-reference-assets/img_v3_0289_cead13d0-bfd7-4fbf-8f8d-54dbb341e04g.webp +0 -0
  102. package/dist/runtime/card-reference-assets/img_v3_028i_2542847f-782c-458c-a6ca-3f4e8e8b844g.webp +0 -0
  103. package/dist/runtime/card-reference-assets/img_v3_028i_30499258-034f-4ba8-ab74-8fc7911fb74g.webp +0 -0
  104. package/dist/runtime/card-reference-assets/img_v3_028i_4c45e39c-1231-4f36-a768-17fbc5c7ad8g.webp +0 -0
  105. package/dist/runtime/card-reference-assets/img_v3_028m_a7197784-8149-4b5f-8035-41bdfa5e106g.webp +0 -0
  106. package/dist/runtime/card-reference-assets/img_v3_028t_392e9e09-d0e8-480a-9802-5ca3874cf38g.webp +0 -0
  107. package/dist/runtime/index.html +1 -0
  108. package/dist/runtime/manifest.json +55 -0
  109. package/dist/types/components/ButtonGroupPreview.d.ts +9 -0
  110. package/dist/types/components/CardRenderer.d.ts +13 -0
  111. package/dist/types/components/CardRuntime.d.ts +25 -0
  112. package/dist/types/components/ChartPreview.d.ts +7 -0
  113. package/dist/types/components/ComponentIcon.d.ts +4 -0
  114. package/dist/types/components/FormPreview.d.ts +17 -0
  115. package/dist/types/components/InputPreview.d.ts +6 -0
  116. package/dist/types/components/InteractivePreview.d.ts +7 -0
  117. package/dist/types/components/LibraryIcon.d.ts +19 -0
  118. package/dist/types/components/MultiSelectPreview.d.ts +6 -0
  119. package/dist/types/components/PersonPreview.d.ts +5 -0
  120. package/dist/types/components/SelectPreview.d.ts +6 -0
  121. package/dist/types/components/TemporalPicker.d.ts +13 -0
  122. package/dist/types/components/TemporalPreview.d.ts +6 -0
  123. package/dist/types/components/assets/composite-example.jpg.d.ts +1 -0
  124. package/dist/types/components/buttonGroup.d.ts +5 -0
  125. package/dist/types/components/chart.d.ts +30 -0
  126. package/dist/types/components/chartRuntime.d.ts +1 -0
  127. package/dist/types/components/containers.d.ts +6 -0
  128. package/dist/types/components/form.d.ts +3 -0
  129. package/dist/types/components/gallery.d.ts +19 -0
  130. package/dist/types/components/index.less.d.ts +1 -0
  131. package/dist/types/components/links.d.ts +3 -0
  132. package/dist/types/components/model.d.ts +50 -0
  133. package/dist/types/components/people.d.ts +23 -0
  134. package/dist/types/components/select.d.ts +6 -0
  135. package/dist/types/components/temporal.d.ts +20 -0
  136. package/dist/types/index.d.ts +7 -0
  137. package/dist/types/schema.d.ts +192 -0
  138. package/dist/types/styles.d.ts +1 -0
  139. package/package.json +115 -4
package/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ Copyright (c) 武汉中科通达高新技术股份有限公司.
2
+ All rights reserved. Redistribution requires authorization from the copyright holder.
3
+
4
+ Third-party dependency notices are retained in the built JavaScript bundle.
5
+ Reference icon and image provenance is described in the package documentation.
package/README.md CHANGED
@@ -1,3 +1,104 @@
1
- # Temporary Holding Version
1
+ # @citms/card-renderer
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Shared React card renderer, message protocol/cache and offline WebView resources.
4
+ The package version is defined in `package.json`. Requires Node 18+ for build/asset tooling.
5
+
6
+ ## Consumers
7
+
8
+ ```sh
9
+ npm install --save-exact @citms/card-renderer@1.0.0 --registry=https://registry.npmjs.org/
10
+ ```
11
+
12
+ React hosts provide React/ReactDOM 18, AntD 5, Ant Design icons 4/5, VChart 2.2.2,
13
+ dayjs 1 and uuid 9. These peers are optional for client-only and Flutter asset users.
14
+
15
+ ```tsx
16
+ import { CardRenderer, RuntimeContext } from "@citms/card-renderer";
17
+ // The host owns authentication, SDK lookups and business operations.
18
+ <RuntimeContext.Provider value={{ loadUsers, action, platform: "desktop" }}>
19
+ <CardRenderer document={document} runtimeData={data} />
20
+ </RuntimeContext.Provider>;
21
+ ```
22
+
23
+ ```js
24
+ import { CardClient, parseCard } from "@citms/card-renderer/client";
25
+ // CommonJS is also supported: require('@citms/card-renderer/client').
26
+ ```
27
+
28
+ Prepare the package's complete local WebView directory (including 46 reference
29
+ images). The CLI verifies all hashes before replacing an earlier generated
30
+ directory, removes obsolete files and refuses unmanaged directories.
31
+
32
+ ```sh
33
+ npx --no-install citms-card-assets --target public/card-renderer
34
+ npx --no-install citms-card-assets --check --target public/card-renderer
35
+ ```
36
+
37
+ The admin reference library can prepare only the reference image directory:
38
+
39
+ ```sh
40
+ npx --no-install citms-card-assets --reference-target public/card-reference-assets
41
+ ```
42
+
43
+ Use the CLI from a project script after npm installation. Flutter uses the same
44
+ CLI in its Node tooling directory before `flutter pub get`/`flutter build`, then
45
+ loads the bundled HTML through InAppWebView. Flutter never imports npm JS as Dart.
46
+ Generated directories belong in `.gitignore`; each released application still
47
+ contains its own offline resources. No npm registry or administrator credentials
48
+ are passed into the renderer.
49
+
50
+ Subpath `components/*` exposes the shared editor models, icon helpers and display
51
+ components; `styles` exposes the same style mapping used by the renderer. Rendering
52
+ is compiled once from package-owned source. Card template publication versions and
53
+ npm renderer versions are independent; lock npm to an exact version per client.
54
+
55
+ ## Build and publish
56
+
57
+ ### Windows 一键打包
58
+
59
+ 双击本目录的 `pack-windows.cmd`。脚本会询问版本号:
60
+
61
+ - 回车:保留 `package.json` 当前版本,适合尚未发布的首次打包。
62
+ - `patch`:例如 `1.0.0` → `1.0.1`,用于修复。
63
+ - `minor`:例如 `1.0.0` → `1.1.0`,用于新增兼容功能。
64
+ - `major`:例如 `1.0.0` → `2.0.0`,用于不兼容变更。
65
+ - 也可直接输入指定版本,例如 `1.2.0`。
66
+
67
+ 也可以在 CMD/PowerShell 指定版本运行:
68
+
69
+ ```powershell
70
+ .\pack-windows.cmd patch
71
+ ```
72
+
73
+ 脚本先检查官方 npm 上的目标版本,已发布则拒绝覆盖。随后安装依赖、构建、检查和测试,生成 `citms-card-renderer-<版本>.tgz`,并同步后台、Web/桌面和 Flutter 工具的精确依赖版本及 tgz 完整性哈希。独立使用本包源码时,没有这些消费端目录则跳过同步。
74
+
75
+ 脚本需要联网安装依赖及检查 npm 版本;**不会执行上传发布**。使用最后输出的 `npm publish` 命令发布生成的同一份 tgz。发布后各端重新安装依赖,并将包版本和三个消费端的清单、锁文件一起提交 Git。npm 已发布版本不可覆盖,修改内容后需使用新版本。
76
+
77
+ ### 手动构建
78
+
79
+ Run inside this package, without requiring the admin repository or node_modules:
80
+
81
+ ```sh
82
+ npm ci
83
+ npm run build
84
+ npm test
85
+ npm pack
86
+ ```
87
+
88
+ Publish the reviewed **tgz**, not a different local rebuild:
89
+
90
+ ```sh
91
+ npm login --registry=https://registry.npmjs.org/
92
+ npm publish citms-card-renderer-1.0.0.tgz --access public --registry=https://registry.npmjs.org/
93
+ ```
94
+
95
+ Publishing `@citms/card-renderer` requires permission for the `citms` scope and a
96
+ previously unused version. npm may require interactive browser authentication/OTP.
97
+ No publication is performed by build, pack, consumer install or Jenkins.
98
+
99
+ The public npm payload contains only `dist`, `bin`, this README and LICENSE; it
100
+ contains no administrator service modules, source tree, deployment config or
101
+ credentials. Public packages and their assets can be downloaded by anyone.
102
+ Reference icons preserve Feishu title-picker geometry; reference images originate
103
+ from the corresponding reference-template library. Third-party notices remain in
104
+ the runtime bundle. See LICENSE for project redistribution terms.
package/bin/assets.cjs ADDED
@@ -0,0 +1,197 @@
1
+ #!/usr/bin/env node
2
+ const fs = require("node:fs");
3
+ const path = require("node:path");
4
+ const hash = require("./hash.cjs");
5
+ const PACKAGE = "@citms/card-renderer";
6
+ const MARKER = ".citms-card-assets.json";
7
+
8
+ function safeName(name) {
9
+ if (
10
+ !name ||
11
+ /[\\:]/.test(name) ||
12
+ path.posix.isAbsolute(name) ||
13
+ name.split("/").some((p) => !p || p === "." || p === "..")
14
+ )
15
+ throw Error("Unsafe asset path: " + name);
16
+ }
17
+
18
+ function verify(runtime) {
19
+ const manifest = JSON.parse(
20
+ fs.readFileSync(path.join(runtime, "manifest.json"), "utf8")
21
+ );
22
+ if (
23
+ manifest.schemaVersion !== 1 ||
24
+ manifest.packageName !== PACKAGE ||
25
+ typeof manifest.packageVersion !== "string" ||
26
+ !manifest.files ||
27
+ typeof manifest.files !== "object" ||
28
+ Array.isArray(manifest.files)
29
+ )
30
+ throw Error("Invalid card runtime manifest");
31
+ if (!manifest.files["index.html"] || !manifest.files["app.js"])
32
+ throw Error("Runtime entry missing");
33
+ const base = fs.realpathSync(runtime);
34
+ for (const [name, expected] of Object.entries(manifest.files)) {
35
+ safeName(name);
36
+ if (!/^[a-f0-9]{64}$/.test(expected))
37
+ throw Error("Invalid asset fingerprint");
38
+ const file = path.join(base, name);
39
+ if (
40
+ !fs.realpathSync(file).startsWith(base + path.sep) ||
41
+ !fs.statSync(file).isFile()
42
+ )
43
+ throw Error("Unsafe asset file: " + name);
44
+ if (hash(file) !== expected) throw Error("Asset mismatch: " + name);
45
+ }
46
+ return manifest;
47
+ }
48
+
49
+ function list(dir) {
50
+ return fs
51
+ .readdirSync(dir, { withFileTypes: true })
52
+ .flatMap((e) =>
53
+ e.isDirectory()
54
+ ? list(path.join(dir, e.name)).map((p) => e.name + "/" + p)
55
+ : [e.name]
56
+ );
57
+ }
58
+
59
+ function prepare(
60
+ runtime,
61
+ destination,
62
+ { references = false, check = false } = {}
63
+ ) {
64
+ const manifest = verify(runtime);
65
+ const target = path.resolve(destination);
66
+ const packageRoot = path.resolve(__dirname, "..");
67
+ if (
68
+ path.dirname(target) === target ||
69
+ target === packageRoot ||
70
+ target.startsWith(packageRoot + path.sep)
71
+ )
72
+ throw Error("Unsafe asset destination");
73
+ const kind = references ? "references" : "runtime";
74
+ const marker = {
75
+ packageName: PACKAGE,
76
+ packageVersion: manifest.packageVersion,
77
+ kind,
78
+ };
79
+ const files = Object.entries(manifest.files)
80
+ .filter(
81
+ ([name]) => !references || name.startsWith("card-reference-assets/")
82
+ )
83
+ .map(([name, expected]) => [
84
+ references ? name.slice("card-reference-assets/".length) : name,
85
+ name,
86
+ expected,
87
+ ]);
88
+ if (fs.existsSync(target)) {
89
+ if (fs.lstatSync(target).isSymbolicLink())
90
+ throw Error("Unsafe symbolic asset destination");
91
+ try {
92
+ const old = JSON.parse(
93
+ fs.readFileSync(path.join(target, MARKER), "utf8")
94
+ );
95
+ if (old.packageName !== PACKAGE || old.kind !== kind) throw Error();
96
+ } catch {
97
+ throw Error("Refusing to overwrite unmanaged asset directory: " + target);
98
+ }
99
+ } else if (check) throw Error("Generated asset directory missing: " + target);
100
+ if (check) {
101
+ const current = JSON.parse(
102
+ fs.readFileSync(path.join(target, MARKER), "utf8")
103
+ );
104
+ if (current.packageVersion !== manifest.packageVersion)
105
+ throw Error("Generated assets are stale");
106
+ const allowed = new Set([
107
+ MARKER,
108
+ ...files.map(([name]) => name),
109
+ ...(references ? [] : ["manifest.json"]),
110
+ ]);
111
+ for (const name of list(target))
112
+ if (!allowed.has(name)) throw Error("Unexpected stale asset: " + name);
113
+ for (const [name, , expected] of files)
114
+ if (hash(path.join(target, name)) !== expected)
115
+ throw Error("Generated asset mismatch: " + name);
116
+ if (
117
+ !references &&
118
+ hash(path.join(target, "manifest.json")) !==
119
+ hash(path.join(runtime, "manifest.json"))
120
+ )
121
+ throw Error("Generated runtime manifest mismatch");
122
+ return marker;
123
+ }
124
+ fs.mkdirSync(path.dirname(target), { recursive: true });
125
+ const temp = fs.mkdtempSync(path.join(path.dirname(target), ".card-assets-"));
126
+ let backup;
127
+ try {
128
+ for (const [name, source] of files) {
129
+ const file = path.join(temp, name);
130
+ fs.mkdirSync(path.dirname(file), { recursive: true });
131
+ fs.copyFileSync(path.join(runtime, source), file);
132
+ }
133
+ if (!references)
134
+ fs.copyFileSync(
135
+ path.join(runtime, "manifest.json"),
136
+ path.join(temp, "manifest.json")
137
+ );
138
+ fs.writeFileSync(path.join(temp, MARKER), JSON.stringify(marker) + "\n");
139
+ if (fs.existsSync(target)) {
140
+ backup = temp + "-previous";
141
+ fs.renameSync(target, backup);
142
+ }
143
+ try {
144
+ fs.renameSync(temp, target);
145
+ } catch (error) {
146
+ if (backup) fs.renameSync(backup, target);
147
+ backup = undefined;
148
+ throw error;
149
+ }
150
+ if (backup) fs.rmSync(backup, { recursive: true });
151
+ } finally {
152
+ if (fs.existsSync(temp)) fs.rmSync(temp, { recursive: true });
153
+ }
154
+ return marker;
155
+ }
156
+
157
+ function main(args) {
158
+ const outputs = [];
159
+ let check = false;
160
+ for (let i = 0; i < args.length; i++) {
161
+ if (args[i] === "--check") check = true;
162
+ else if (
163
+ ["--target", "--reference-target"].includes(args[i]) &&
164
+ args[i + 1] &&
165
+ !args[i + 1].startsWith("--")
166
+ )
167
+ outputs.push({
168
+ references: args[i] === "--reference-target",
169
+ target: args[++i],
170
+ });
171
+ else
172
+ throw Error(
173
+ "Usage: citms-card-assets [--check] --target <dir> | --reference-target <dir>"
174
+ );
175
+ }
176
+ if (!outputs.length) throw Error("Asset target is required");
177
+ const runtime = path.resolve(__dirname, "../dist/runtime");
178
+ for (const output of outputs) {
179
+ const result = prepare(runtime, output.target, {
180
+ references: output.references,
181
+ check,
182
+ });
183
+ console.log(
184
+ `${check ? "Verified" : "Prepared"} ${PACKAGE}@${
185
+ result.packageVersion
186
+ }: ${path.resolve(output.target)}`
187
+ );
188
+ }
189
+ }
190
+ module.exports = { verify, prepare, main };
191
+ if (require.main === module)
192
+ try {
193
+ main(process.argv.slice(2));
194
+ } catch (error) {
195
+ console.error(error.message);
196
+ process.exitCode = 1;
197
+ }
package/bin/hash.cjs ADDED
@@ -0,0 +1,8 @@
1
+ const fs = require("node:fs");
2
+ const crypto = require("node:crypto");
3
+ module.exports = function hash(file, bytes = fs.readFileSync(file)) {
4
+ const content = /\.(?:[cm]?[jt]sx?|json|html|css|less)$/i.test(file)
5
+ ? bytes.toString("utf8").replace(/\r\n/g, "\n")
6
+ : bytes;
7
+ return crypto.createHash("sha256").update(content).digest("hex");
8
+ };
@@ -0,0 +1,91 @@
1
+ {
2
+ "sources": {
3
+ "src/components/assets/composite-example.jpg": "fd62f82cb114decdfa18ff4f4b0c7e64c2eb8d8a2932a6aa77658db5dc2b1e63",
4
+ "src/components/links.ts": "0ab3b129a5dc9db980745cdff4c8ca6257d113478c45ed9dc33eb09f3245fa43",
5
+ "src/components/buttonGroup.ts": "2030762c93d16885c133b8e25144087b828aa32c101a221461587c0225db6553",
6
+ "src/components/index.less": "83dcc9a97e62ca7fd64adde65002df4df2de338235465532a1380459b90c829d",
7
+ "src/components/ButtonGroupPreview.tsx": "4c4b35b404325f7015cbb72390bd38720b10ba84c61d032f1a1e6a3969b81b83",
8
+ "src/components/CardRuntime.tsx": "74a8c6d62eb642da7c55203e31a84e171eb3add52d36621144080dfc2630628c",
9
+ "src/components/chart.ts": "287e91ba8a3b5d2339144df303345d0a3bfb7711c725ed06dd59fecff2d28f65",
10
+ "src/components/chartRuntime.ts": "0e0cccbaabe513c63c2c6e8ba5acef1f06cfe2f4595345dffac108de9a98df6c",
11
+ "src/components/ChartPreview.tsx": "563a018ed139fa3dca6b3e546ba63627b6eec95da9f3af1cb15f396ec72f0c33",
12
+ "src/components/ComponentIcon.tsx": "3f7c2b20a5b7e0b6d624110d49ce263b0f4adabb20a2e3beb6257bf089f9cca8",
13
+ "src/components/InputPreview.tsx": "3796d9919e88fa5661831f3c4e24d1891bcf930fa99af7657a127996bcd5fb5c",
14
+ "src/components/assets/feishu-icons.json": "ee9ce7e31d5023f84de6070928ac3502205d50678d84cc8877cdbdc9e9a2db09",
15
+ "src/components/LibraryIcon.tsx": "ad96621b2d457532577eed50b43c84cd4334c6f22d2ce7f2f18272e2565a18ae",
16
+ "src/components/MultiSelectPreview.tsx": "3391907b4197d692e9db68813fdc55ce4f91c06a30aa8a18f09296c395f36e50",
17
+ "src/components/SelectPreview.tsx": "efe3261baa7973f7f32cf268ad2d05308446d03b58c4e9af808b8d0f34e3ab34",
18
+ "src/components/temporal.ts": "f3539422179e1699330a12a75b0f94203412f4764e778b95c75f3768f820dfb6",
19
+ "src/components/TemporalPicker.tsx": "9d683a446ea5d3d2d3ca30c08b080228425ddf175914e57d4f88166c9c3367dd",
20
+ "src/components/TemporalPreview.tsx": "b786ad82ef4a76c3a555903a229d1e1e875492d9a327f9eb546ff146d586ab5c",
21
+ "src/components/FormPreview.tsx": "e179c805bb7cd8b8e54354b951cf44474c2729c70c6607989ca23d0439c89f3f",
22
+ "src/components/gallery.ts": "e842482181b88106f27c2706634ad1257fd3e0e5cfcc3105321acc933caf05b9",
23
+ "src/components/InteractivePreview.tsx": "07c65e1036a14f7be3b155fb6706d29f3688723e33fcbc74622caeadcaed7a06",
24
+ "src/components/containers.ts": "45b4a93c28c7cf3fd1bbadce55a70d059721e01f27386a991452cee7a492fb0f",
25
+ "src/components/form.ts": "8b1f2d4ae733148346752bdf1763e4cd1d3109c7513e961325b7819f02171162",
26
+ "src/components/select.ts": "80c3b756bacb20ffff463cd78e37601c81d8165786a5d65a37313d2738f54238",
27
+ "src/components/model.ts": "18a27a7cbc5e8c31fa0f201b55df20f26e0d42b32afdc6889b8cee6604930633",
28
+ "src/components/people.ts": "71e76d32d7a5d9730f515872044fd1d36c24584f3ea1ae83c767bb92325f7b7b",
29
+ "src/components/PersonPreview.tsx": "bed8dc6ead86f010096f5dc3e044fc9b9b63f8c911e4932b635c97a899e883e5",
30
+ "src/components/CardRenderer.tsx": "03cecc33fe6d51dc9c7d6bbec89cf2884046ff06ba490628c0632a56e603dc45",
31
+ "src/index.tsx": "a544a1fb4e8131635f4b838c349fb7cdc448a0c514a766398d7621efba85e5ba",
32
+ "src/styles.ts": "b0fa05e5bf6891f49bed44e3ad3abd163f9cf1b1ddd3656c65db69703979505b",
33
+ "src/webview.tsx": "0ebd44e5d10e7b64185d03bbf0863e8678ff89a1803c2016dd2ac5bc477a78bf",
34
+ "src/assets.d.ts": "1c70b9984952e37ad28512bacd20af0ed1a8c61755cec3fbfe72d8e2a2bfe0ca",
35
+ "src/client.d.ts": "d72287bfcb4d43e4cd10bb69a3e17605a7da58629e5453d4f07204af81ba9f27",
36
+ "src/client.js": "d3b431a859a856a5709a46dc00f0fcee6b752d9599858b7a8e2b58c393304ae0",
37
+ "src/schema.ts": "39e05c12ad0856ffa6cf737f883adfff7dadfc2ab6c015fbdda0e50413e5d53a",
38
+ "assets/card-reference-assets/img_v2_0920e890-b6ec-4e06-8889-8abd2690843g.webp": "586fc151aaed42259c55380959f6bd325bd7c4de51fe5a4b90b0ebebbfba5a74",
39
+ "assets/card-reference-assets/img_v2_196bac64-1731-4bb1-b7c6-d8090482c3bg.webp": "5712372d92fb86ade98a7134575ffb96f7901825a2c279d98c26d38cc7dbab00",
40
+ "assets/card-reference-assets/img_v2_1bfeb6af-dd10-4e49-8fd2-5a392bc86ccg.webp": "d363905e12b4c106399f07d236d205c778e94233a9877aabbc3452c1fb5919a5",
41
+ "assets/card-reference-assets/img_v2_5d281f9b-685b-4f21-b44b-d8e5400438cg.webp": "06b91cfc72753986f1713c18df526c6d7193111381d33d66109321079ccda935",
42
+ "assets/card-reference-assets/img_v2_5e220251-1dac-42cb-8901-3031e8bd38cg.webp": "cdf5f998302f9bb815ea801e55ffc0fa9b5cbc1805418afee0625601348fa35f",
43
+ "assets/card-reference-assets/img_v2_609930d7-21cc-475a-baba-3de5dafe079g.webp": "b060975698bbaa8809b8ffbb13967d49797f1db0de31de2690999032602c3257",
44
+ "assets/card-reference-assets/img_v2_79d15fd4-6555-476e-ac96-f132ea80391g.webp": "39ea91b946d7efcc320a75d5b8c95c623a6177f7fa380623b9e346961b5d48bb",
45
+ "assets/card-reference-assets/img_v2_8626254c-2c9c-45bf-809b-b6f2508af27g.webp": "25510835e4f8fb31e06fcc724a6c1433386e9a71a8cb8c121c3385e083079213",
46
+ "assets/card-reference-assets/img_v2_a42671f8-f6c6-443d-97ef-b99d0b2134bg.webp": "00debbd7fde296f073d1ee9a92d9b1b111502450df77a2ead0987c5cb0a9383f",
47
+ "assets/card-reference-assets/img_v2_a4b2d72a-211b-440b-8950-880066cfbabg.webp": "742b1712a348ebe54c541bb91d79813371ba447d9fa47547e92182920868e3ba",
48
+ "assets/card-reference-assets/img_v2_ace8a4f2-ae13-420f-9eb3-b3530b462beg.webp": "839bc6d71e7788fb5bb2b062f593a0d2c9de29dfd1d846879cb22d98a389475d",
49
+ "assets/card-reference-assets/img_v2_e1b9d95a-063f-4151-a7fc-c52b60c2605g.webp": "e97f8f06237cb37f9920ea8892f449f297211d7339e4e45af9ee70423ca31360",
50
+ "assets/card-reference-assets/img_v2_f4ce38a7-8dd4-45ed-a1ac-29d521d19a0g.webp": "25510835e4f8fb31e06fcc724a6c1433386e9a71a8cb8c121c3385e083079213",
51
+ "assets/card-reference-assets/img_v3_0264_d03088e9-e554-4ec6-9855-8a79f16da8cg.webp": "25da571932376d2e3588c31ab5d51b262b45065533a6ea2878b9a8a84fccb568",
52
+ "assets/card-reference-assets/img_v3_027b_3e6fb0f5-0bca-4500-bad0-45f035c2d46g.webp": "2f9a3d728fce075007e0b86102bb59636c5c6a5dcacc6007071885110d9ec969",
53
+ "assets/card-reference-assets/img_v3_027b_fa25eb50-594e-45cf-b1aa-1005034a314g.webp": "092bef0c3a6ac1927f4ea922a9c82670828b782754734d8333a06a624f6bc04f",
54
+ "assets/card-reference-assets/img_v3_027d_1abba963-fd3e-4666-ade2-198c8d0813bg.webp": "c4a0a0cc1fd420ade07a42465490b4879381bb6a5b7ebf46e7f065f9af6b9392",
55
+ "assets/card-reference-assets/img_v3_027d_867abe97-d32a-4955-854a-6550cdfeb1bg.webp": "b0d590c22629b0bdbe2fbbc4a05bc07ed58f4268e064661102f8563a3a0d9683",
56
+ "assets/card-reference-assets/img_v3_027d_8bd00882-7eb6-48df-8999-a79cd90d88ag.webp": "ae7bd56e6349e03ed66edb1255d24e0ada45a7431075864fcf1163e70002a67a",
57
+ "assets/card-reference-assets/img_v3_027d_b6c77830-6fad-41bf-ac3b-4906e7d83f0g.webp": "df098afd2c421c1eade81ff3360b8e3fc4c408ddb0c59a6a4990e07e84ad676d",
58
+ "assets/card-reference-assets/img_v3_027d_b932d7e7-be81-4be7-8222-2663d83dc58g.webp": "c6bdd1e4ce111611b9b5da9f3c1b6e2a9f2944008a540c783662abfe080cac01",
59
+ "assets/card-reference-assets/img_v3_027d_d644f50c-510a-4fcb-98f8-ed70632b3d8g.webp": "00ea62cbaafbeccd03dd301d2879f6da015876ef4cbd8c4ea9d1d198d2a54955",
60
+ "assets/card-reference-assets/img_v3_027d_e361c8eb-28d4-406f-a44d-cfa9d858f44g.webp": "285a0369f6f1bd17ef27986170a7e861ec4dd08e57e826aed39ab92a107a4883",
61
+ "assets/card-reference-assets/img_v3_027d_e5dcd820-bfa7-42e7-9009-82aea1133b3g.webp": "184f24bd19d51302b59ed7f697ae1c7742857a32e666657660421331fda8b700",
62
+ "assets/card-reference-assets/img_v3_027d_feaf588d-b31b-43b9-bd61-c5595406d40g.webp": "7014edf1f16c9fc3e2510167c5b2d0dfa3e269b0207becd852c406b7f1361cab",
63
+ "assets/card-reference-assets/img_v3_027m_91fb8fc2-e6a3-406c-aa9d-04569e29bccg.webp": "40d3637d865f3e702bcd31a4566d37775f1364c80d2f24fd9df4e845e002d46c",
64
+ "assets/card-reference-assets/img_v3_027m_c5c3ec75-cd3c-4092-8faf-9f6ae3697d4g.webp": "272df7df3fe083cf7607d24fbc9b21c81aa7d447bedef8ea47deeecfe8dcd56a",
65
+ "assets/card-reference-assets/img_v3_027s_851c5059-00b5-4cf7-adeb-95ddc7e6d95g.webp": "415b47db5eb0723c56d781ce9b8e3a202a4285aa2e57bd428298df3a827b5b2e",
66
+ "assets/card-reference-assets/img_v3_0288_38fa135d-4ffb-4898-8e8b-e4ea9f247b9g.webp": "797e62066329b23d8e3235222a917c0d39bb23e350dcdc02001f11374134794d",
67
+ "assets/card-reference-assets/img_v3_0288_5976e900-ef79-40b6-96fc-b7882b20680g.webp": "9e49cb4f995ee20346cdc2c5f3b017d0af2cd7db7c3565b295c1f87f718954e9",
68
+ "assets/card-reference-assets/img_v3_0289_18073e19-b8c5-49e4-84e1-e4c93b1f3d5g.webp": "fa4e214e861f993a4227bb3ea32735793d764bd55128acb4da2248e2cfd722d2",
69
+ "assets/card-reference-assets/img_v3_0289_211a711a-a44f-4218-93ca-87a0544b538g.webp": "a8878795ba171eeca7b3983510431ae598c183157fa84fe79f0e0e40d7d87755",
70
+ "assets/card-reference-assets/img_v3_0289_385e1af4-4d62-45bd-b9c4-50adf000f06g.webp": "b6783356684e0f4941969901ff9fb749e8a553d7c55afddcccaa9a7a40a0bcda",
71
+ "assets/card-reference-assets/img_v3_0289_5e2b5dec-e916-4abb-adb4-c72745cfa97g.webp": "face0c0fefdeb90e91c8781693dced031e36149771149fe27913b03dde43ea0b",
72
+ "assets/card-reference-assets/img_v3_0289_6d4bafc3-0a31-4058-804f-bec67584389g.webp": "14d720b89dc042da204e1f4d04515369a392c97f98c2f82f5e2b9cd50c46a0c9",
73
+ "assets/card-reference-assets/img_v3_0289_87ebfc6a-221c-4f56-986e-0ebcf098123g.webp": "ad027ced4abcf108067fb7f6c878a2b9e09a209434e2c46c76617073fbb7dba4",
74
+ "assets/card-reference-assets/img_v3_0289_979245ad-2480-4fc5-ada7-42238b73f69g.webp": "c47aef5d1f65a31c238d1dcf94305dd59e90f0239d0a1e8fc08643131a7bceb7",
75
+ "assets/card-reference-assets/img_v3_0289_b74726a5-da82-47be-9e2a-52aa9b5a77fg.webp": "baa15e156272a89734d0fc1a00fded9f62d7937580242b6b017359facc9bf8fd",
76
+ "assets/card-reference-assets/img_v3_0289_bb92dbb9-fb35-4742-a330-efe07a3cea4g.webp": "4b3d9b87d77d3394c612332c454fcf696d4591d86c23cb789c7a6d4ff4511741",
77
+ "assets/card-reference-assets/img_v3_0289_c0f7cd0c-4388-4c53-9078-8996ef0a6e6g.webp": "2d81806d54984a1f46a26f2bf5379ddcb644a0d76e528aefd0d42906318b1317",
78
+ "assets/card-reference-assets/img_v3_0289_cead13d0-bfd7-4fbf-8f8d-54dbb341e04g.webp": "6e452f4b4567df907c06a3592fcaa46e1801470cd2fcd3987e1a42ed0c237044",
79
+ "assets/card-reference-assets/img_v3_028i_2542847f-782c-458c-a6ca-3f4e8e8b844g.webp": "7624591aa2fe2ff69ddfd24b0351fef696ef5d87e79e11b2202d2187199fe136",
80
+ "assets/card-reference-assets/img_v3_028i_30499258-034f-4ba8-ab74-8fc7911fb74g.webp": "2d08a2638e80e8610fc853d73ac910fedb15d5f6b434fb69a5a9f96c0a00112c",
81
+ "assets/card-reference-assets/img_v3_028i_4c45e39c-1231-4f36-a768-17fbc5c7ad8g.webp": "9466b03cf5fdbaf63a82f94e0148490fc01c29f73f19faf1383bed3cb969e697",
82
+ "assets/card-reference-assets/img_v3_028m_a7197784-8149-4b5f-8035-41bdfa5e106g.webp": "64f3700330a19b669ef6fc5c553fa6d4ba0c10138150bb01fb45bceb1ea05317",
83
+ "assets/card-reference-assets/img_v3_028t_392e9e09-d0e8-480a-9802-5ca3874cf38g.webp": "f73864106e94f8811f3e2d2ab464b4c9aa3e9483a525eb555d7f4be774d313ef",
84
+ "bin/assets.cjs": "ffd7761ce1e520f2f64416111204e8a6fabcd41bdc8b7e89eefe8a0b681c3131",
85
+ "bin/hash.cjs": "cde238a39fa4dd9720487a7a55720092bc78d407f1c1172e1d497afd011025ef",
86
+ "build.cjs": "979ac21334095ab4973ee302545d0bd56ee2f04efb3bbf8b0dd99249290289b1",
87
+ "package.json": "faf535c1611537bf8f252e73a43289bc24f7623bb10db6887cf7bdedadcbe97a",
88
+ "package-lock.json": "4fb3f09d247ed64a4d1d02a0af89e65d480004ac94cb8f1fd92eb551a4493f0c",
89
+ "tsconfig.json": "34012804bd591d30a5a4b937a68c13e9ba2c82c5b958e9eff9dd31d1c817d588"
90
+ }
91
+ }
@@ -0,0 +1 @@
1
+ "use strict";var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var a in t)r(e,a,{get:t[a],enumerable:!0})},I=(e,t,a,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of y(t))!f.call(e,s)&&s!==a&&r(e,s,{get:()=>t[s],enumerable:!(i=u(t,s))||i.enumerable});return e};var g=e=>I(r({},"__esModule",{value:!0}),e);var v={};D(v,{CardClient:()=>h,parseCard:()=>o});module.exports=g(v);var c=(e,t)=>e.length-t.length||(e>t?1:e<t?-1:0),d=e=>typeof e=="string"&&/^[1-9][0-9]{0,19}$/.test(e)&&c(e,"18446744073709551615")<=0,n=e=>!!e&&typeof e=="object"&&!Array.isArray(e);function o(e){try{let t=typeof e=="string"?JSON.parse(e):e;if(!n(t)||t.type!=="template_card"||t.schemaVersion!==1||typeof t.cardID!="string"||!t.cardID||t.cardID.length>64||!d(t.cardVersion)||!n(t.data)||typeof t.fallback!="string")return;if(t.updateMode==="dynamic"){if(typeof t.instanceID!="string"||!t.instanceID||!d(t.dataRevision))return}else if(t.updateMode!=="static"||t.instanceID||t.dataRevision)return;return t}catch{return}}var h=class{constructor(t){this.request=t,this.templates=new Map,this.instances=new Map,this.pending=new Map}async template(t){let a=JSON.stringify([t.cardID,t.cardVersion]);if(this.templates.has(a))return this.templates.get(a);if(this.pending.has(a))return this.pending.get(a);let i=(async()=>{let s=await this.request("/cards/template",{cardID:t.cardID,cardVersion:t.cardVersion});if(s.schemaVersion!==1||s.cardID!==t.cardID||s.cardVersion!==t.cardVersion||!n(s.document)||!Array.isArray(s.document.nodes))throw Error("Card template identity mismatch");return this.templates.size>=100&&this.templates.delete(this.templates.keys().next().value),this.templates.set(a,s.document),s.document})();this.pending.set(a,i);try{return await i}finally{this.pending.delete(a)}}cached(t){let a=this.instances.get(t.instanceID);return a&&a.cardID===t.cardID&&a.cardVersion===t.cardVersion&&c(a.dataRevision,t.dataRevision)>=0?a:void 0}async snapshot(t){if(!o(t))throw Error("Unsupported card message");return{document:await this.template(t),data:t.updateMode==="dynamic"&&this.cached(t)?.data||t.data}}async load(t){if(!o(t))throw Error("Unsupported card message");let a=await this.template(t);if(t.updateMode==="static")return{document:a,data:t.data};let i;try{i=await this.request("/cards/instance",{instanceID:t.instanceID})}catch{let l=this.cached(t);return{document:a,data:l?.data||t.data,dataRevision:l?.dataRevision||t.dataRevision,refreshError:!0}}if(i.schemaVersion!==1||i.instanceID!==t.instanceID||i.cardID!==t.cardID||i.cardVersion!==t.cardVersion||!d(i.dataRevision)||!n(i.data))throw Error("Card instance identity mismatch");let s=this.cached(t);(!s||c(i.dataRevision,s.dataRevision)>0)&&(this.instances.size>=300&&this.instances.delete(this.instances.keys().next().value),this.instances.set(t.instanceID,i));let p=this.cached(t);return{document:a,data:p?.data||t.data,dataRevision:p?.dataRevision||t.dataRevision}}clear(){this.templates.clear(),this.instances.clear(),this.pending.clear()}};
@@ -0,0 +1,26 @@
1
+ export interface CardMessage {
2
+ type: "template_card";
3
+ schemaVersion: 1;
4
+ cardID: string;
5
+ cardVersion: string;
6
+ updateMode: "static" | "dynamic";
7
+ instanceID?: string;
8
+ dataRevision?: string;
9
+ data: Record<string, unknown>;
10
+ fallback: string;
11
+ }
12
+ export function parseCard(raw: unknown): CardMessage | undefined;
13
+ export class CardClient {
14
+ constructor(request: (path: string, body: unknown) => Promise<any>);
15
+ snapshot(
16
+ m: CardMessage
17
+ ): Promise<{ document: any; data: Record<string, unknown> }>;
18
+ load(m: CardMessage): Promise<{
19
+ document: any;
20
+ data: Record<string, unknown>;
21
+ dataRevision?: string;
22
+ refreshError?: boolean;
23
+ }>;
24
+ cached(m: CardMessage): any;
25
+ clear(): void;
26
+ }
@@ -0,0 +1 @@
1
+ var r=(a,t)=>a.length-t.length||(a>t?1:a<t?-1:0),c=a=>typeof a=="string"&&/^[1-9][0-9]{0,19}$/.test(a)&&r(a,"18446744073709551615")<=0,n=a=>!!a&&typeof a=="object"&&!Array.isArray(a);function h(a){try{let t=typeof a=="string"?JSON.parse(a):a;if(!n(t)||t.type!=="template_card"||t.schemaVersion!==1||typeof t.cardID!="string"||!t.cardID||t.cardID.length>64||!c(t.cardVersion)||!n(t.data)||typeof t.fallback!="string")return;if(t.updateMode==="dynamic"){if(typeof t.instanceID!="string"||!t.instanceID||!c(t.dataRevision))return}else if(t.updateMode!=="static"||t.instanceID||t.dataRevision)return;return t}catch{return}}var p=class{constructor(t){this.request=t,this.templates=new Map,this.instances=new Map,this.pending=new Map}async template(t){let e=JSON.stringify([t.cardID,t.cardVersion]);if(this.templates.has(e))return this.templates.get(e);if(this.pending.has(e))return this.pending.get(e);let s=(async()=>{let i=await this.request("/cards/template",{cardID:t.cardID,cardVersion:t.cardVersion});if(i.schemaVersion!==1||i.cardID!==t.cardID||i.cardVersion!==t.cardVersion||!n(i.document)||!Array.isArray(i.document.nodes))throw Error("Card template identity mismatch");return this.templates.size>=100&&this.templates.delete(this.templates.keys().next().value),this.templates.set(e,i.document),i.document})();this.pending.set(e,s);try{return await s}finally{this.pending.delete(e)}}cached(t){let e=this.instances.get(t.instanceID);return e&&e.cardID===t.cardID&&e.cardVersion===t.cardVersion&&r(e.dataRevision,t.dataRevision)>=0?e:void 0}async snapshot(t){if(!h(t))throw Error("Unsupported card message");return{document:await this.template(t),data:t.updateMode==="dynamic"&&this.cached(t)?.data||t.data}}async load(t){if(!h(t))throw Error("Unsupported card message");let e=await this.template(t);if(t.updateMode==="static")return{document:e,data:t.data};let s;try{s=await this.request("/cards/instance",{instanceID:t.instanceID})}catch{let o=this.cached(t);return{document:e,data:o?.data||t.data,dataRevision:o?.dataRevision||t.dataRevision,refreshError:!0}}if(s.schemaVersion!==1||s.instanceID!==t.instanceID||s.cardID!==t.cardID||s.cardVersion!==t.cardVersion||!c(s.dataRevision)||!n(s.data))throw Error("Card instance identity mismatch");let i=this.cached(t);(!i||r(s.dataRevision,i.dataRevision)>0)&&(this.instances.size>=300&&this.instances.delete(this.instances.keys().next().value),this.instances.set(t.instanceID,s));let d=this.cached(t);return{document:e,data:d?.data||t.data,dataRevision:d?.dataRevision||t.dataRevision}}clear(){this.templates.clear(),this.instances.clear(),this.pending.clear()}};export{p as CardClient,h as parseCard};
@@ -0,0 +1 @@
1
+ import{c as V}from"./chunk-FA3P4P7N.js";import{b as T}from"./chunk-HIPTLNFZ.js";import{a as P,b as q}from"./chunk-YFOKPKV6.js";import{a as s}from"./chunk-KCQGEQD2.js";import{DownOutlined as z}from"@ant-design/icons";import{Modal as $}from"antd";import i from"react";import{createPortal as K}from"react-dom";import{Fragment as A,jsx as a,jsxs as p}from"react/jsx-runtime";function U({node:n,editing:E,inForm:b}){let k=i.useContext(P),r=n.selectOptions||[],D=(n.selectDefaultIndex||0)-1,h=r[D]?D:-1,[v,x]=i.useState(h),[d,c]=i.useState(!1),[u,S]=i.useState(-1),[C,m]=i.useState(),[R,M]=i.useState(),[B,J]=i.useState({}),H=i.useRef(null),w=i.useRef(null),N=i.useRef(null),g=i.useId(),f=r[v],W=JSON.stringify(r);i.useEffect(()=>{x(h),m(void 0),c(!1)},[n.id,h,W]),i.useEffect(()=>{var o;let e=(o=H.current)==null?void 0:o.form,t=()=>{x(h),m(void 0),M(void 0),c(!1)};return e==null||e.addEventListener("reset",t),()=>e==null?void 0:e.removeEventListener("reset",t)},[h,b]),i.useEffect(()=>{n.disabled&&(c(!1),m(void 0))},[n.disabled]),i.useLayoutEffect(()=>{if(!d)return;let e=()=>{let o=w.current.getBoundingClientRect(),l=Math.min(256,r.length*36+8),y=window.innerHeight-o.bottom<l&&o.top>l;J({position:"fixed",left:Math.min(o.left,Math.max(8,window.innerWidth-o.width-8)),width:o.width,maxHeight:256,...y?{bottom:window.innerHeight-o.top+4}:{top:o.bottom+4}})},t=o=>{var l,y;!((l=w.current)!=null&&l.contains(o.target))&&!((y=N.current)!=null&&y.contains(o.target))&&c(!1)};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),document.addEventListener("mousedown",t),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0),document.removeEventListener("mousedown",t)}},[d,r.length]),i.useEffect(()=>{var e,t,o;d&&u>=0&&((o=(t=(e=N.current)==null?void 0:e.querySelector(`[data-option-index="${u}"]`))==null?void 0:t.scrollIntoView)==null||o.call(t,{block:"nearest"}))},[u,d]);function I(e){var o;x(e);let t=((o=r[e])==null?void 0:o.value)||"";if(m(void 0),!E&&!b&&n.action==="callback"){let l=n.callbackValue||"";if(n.callbackType==="object")try{l=JSON.parse(n.callbackValue||"{}")}catch{l=null}k.action?k.action(q(n,"select",k.platform,{value:t,parameter:l})):M({value:t,parameter:l})}}function L(e){var t;c(!1),(t=w.current)==null||t.focus(),e!==v&&(!E&&!b&&n.action==="callback"&&n.confirmEnabled?m(e):I(e))}function O(e){return!e||e.iconEnabled===!1||!e.icon?null:e.icon.tag==="custom_icon"?e.icon.url&&T(e.icon.url)&&a("img",{src:e.icon.url,alt:""}):a("span",{"aria-hidden":"true",children:a(V,{value:e.icon.token})})}return p(A,{children:[p("div",{className:s.feishuSelect,style:{width:n.widthMode==="fill"?"100%":n.widthMode==="fixed"&&n.selectWidth||282,maxWidth:"100%"},children:[p("button",{ref:w,type:"button",role:"combobox","aria-label":n.name||"\u4E0B\u62C9\u9009\u62E9","aria-expanded":d,"aria-controls":d?g:void 0,"aria-haspopup":"listbox","aria-activedescendant":d&&u>=0?`${g}-${u}`:void 0,"aria-required":b&&n.required,disabled:n.disabled,"data-bordered":n.selectBorder!==!1,className:s.selectControl,onClick:()=>{S(Math.max(0,v)),c(e=>!e)},onKeyDown:e=>{if(e.key==="Escape"){c(!1);return}if(e.key==="Tab"){c(!1);return}["ArrowDown","ArrowUp","Home","End"].includes(e.key)&&(e.preventDefault(),c(!0),S(t=>e.key==="Home"?0:e.key==="End"?r.length-1:Math.max(0,Math.min(r.length-1,t+(e.key==="ArrowDown"?1:-1))))),(e.key==="Enter"||e.key===" ")&&d&&(e.preventDefault(),r[u]&&L(u))},children:[p("span",{className:f?"":s.selectPlaceholder,children:[O(f),a("span",{children:(f==null?void 0:f.text)||n.placeholder||"\u8BF7\u9009\u62E9"})]}),a("span",{"aria-hidden":"true",className:s.selectChevron,children:a(z,{})})]}),b&&!E&&p("select",{ref:H,"aria-hidden":"true",tabIndex:-1,className:s.selectFormValue,name:n.formItemName||n.id,required:n.required,disabled:n.disabled,value:(f==null?void 0:f.value)||"",onChange:e=>L(r.findIndex(t=>t.value===e.target.value)),onInvalid:()=>{var e;return(e=w.current)==null?void 0:e.focus()},children:[a("option",{value:""}),r.map((e,t)=>a("option",{value:e.value,children:e.text},t))]})]}),d&&K(a("div",{ref:N,id:g,role:"listbox","aria-label":"\u4E0B\u62C9\u9009\u9879",className:s.selectDropdown,style:B,children:r.length?r.map((e,t)=>p("div",{id:`${g}-${t}`,role:"option","aria-selected":v===t,"data-highlighted":u===t,"data-option-index":t,className:s.selectDropdownOption,onMouseEnter:()=>S(t),onMouseDown:o=>o.preventDefault(),onClick:()=>L(t),children:[O(e),a("span",{children:e.text}),v===t&&a("b",{"aria-hidden":"true",children:"\u2713"})]},t)):a("div",{className:s.selectEmpty,children:"\u6682\u65E0\u9009\u9879"})}),document.body),a($,{open:C!==void 0,title:n.confirmTitle||"\u786E\u8BA4",onCancel:()=>m(void 0),footer:p(A,{children:[a("button",{type:"button",onClick:()=>m(void 0),children:"\u53D6\u6D88"}),a("button",{type:"button",onClick:()=>{C!==void 0&&I(C)},children:"\u786E\u8BA4"})]}),children:a("p",{children:n.confirmText||"\u786E\u8BA4\u66F4\u6539\u5F53\u524D\u9009\u9879\uFF1F"})}),a($,{open:!!R,title:"\u4E0B\u62C9\u9009\u62E9\u56DE\u8C03\u9884\u89C8",onCancel:()=>M(void 0),footer:null,children:a("pre",{className:s.formResult,"aria-label":"\u4E0B\u62C9\u9009\u62E9\u56DE\u8C03\u6570\u636E",children:JSON.stringify(R,null,2)})})]})}export{U as a};
@@ -0,0 +1 @@
1
+ import{c as K}from"./chunk-FA3P4P7N.js";import{b as $}from"./chunk-HIPTLNFZ.js";import{a as I,b as q}from"./chunk-YFOKPKV6.js";import{a as u}from"./chunk-KCQGEQD2.js";import{DownOutlined as V}from"@ant-design/icons";import a from"react";import{createPortal as W}from"react-dom";import{Fragment as U,jsx as i,jsxs as h}from"react/jsx-runtime";function z({node:n,editing:C,inForm:g}){let y=a.useContext(I),l=n.selectOptions||[],H=JSON.stringify(l),M=l.flatMap((e,t)=>e.selected===!0?[t]:[]),O=M.join(","),[r,L]=a.useState(M),[s,d]=a.useState(!1),[E,b]=a.useState(""),[m,v]=a.useState(-1),[P,A]=a.useState({}),x=a.useRef(null),w=a.useRef(null),R=a.useRef(null),N=a.useRef(null),k=a.useId(),c=l.flatMap((e,t)=>e.text.toLowerCase().includes(E.toLowerCase())?[t]:[]),D=()=>{L(M),d(!1),b("")};a.useEffect(D,[n.id,H,O]),a.useEffect(()=>{var t;let e=(t=R.current)==null?void 0:t.form;return e==null||e.addEventListener("reset",D),()=>e==null?void 0:e.removeEventListener("reset",D)},[H,O,g,C]),a.useEffect(()=>{n.disabled&&(d(!1),b(""))},[n.disabled]),a.useLayoutEffect(()=>{if(!s)return;let e=()=>{let o=x.current.getBoundingClientRect(),p=Math.min(256,Math.max(1,c.length)*32+10),f=window.innerHeight-o.bottom<p&&o.top>p;A({position:"fixed",width:o.width,maxHeight:256,left:Math.min(o.left,Math.max(8,window.innerWidth-o.width-8)),...f?{bottom:window.innerHeight-o.top+4}:{top:o.bottom+4}})},t=o=>{var p,f;!((p=x.current)!=null&&p.contains(o.target))&&!((f=N.current)!=null&&f.contains(o.target))&&(d(!1),b(""))};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),document.addEventListener("mousedown",t),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0),document.removeEventListener("mousedown",t)}},[s,c.length,r.length]),a.useEffect(()=>{var e,t,o;s&&((o=(t=(e=N.current)==null?void 0:e.querySelector(`[data-option-index="${m}"]`))==null?void 0:t.scrollIntoView)==null||o.call(t,{block:"nearest"}))},[m,s]);function S(e){var o,p;if(n.disabled)return;let t=r.includes(e)?r.filter(f=>f!==e):[...r,e].sort((f,B)=>f-B);L(t),!C&&!g&&n.action==="callback"&&((o=y.action)==null||o.call(y,q(n,"select",y.platform,{value:t.map(f=>l[f].value)}))),(p=w.current)==null||p.focus()}function T(e){return e.iconEnabled===!1||!e.icon?null:e.icon.tag==="custom_icon"?e.icon.url&&$(e.icon.url)&&i("img",{src:e.icon.url,alt:""}):i("span",{"aria-hidden":"true",children:i(K,{value:e.icon.token})})}return h(U,{children:[h("div",{className:u.feishuSelect,style:{width:n.widthMode==="fill"?"100%":n.widthMode==="fixed"&&n.selectWidth||282,maxWidth:"100%"},children:[h("div",{ref:x,className:`${u.selectControl} ${u.multiSelectControl}`,"data-bordered":n.selectBorder!==!1,"data-disabled":!!n.disabled,onClick:()=>{var e;n.disabled||((e=w.current)==null||e.focus(),d(!0))},children:[h("div",{className:u.multiSelectTags,children:[r.map(e=>l[e]&&h("span",{className:u.multiSelectTag,children:[T(l[e]),i("span",{children:l[e].text}),i("button",{type:"button","aria-label":`\u79FB\u9664 ${l[e].text}`,disabled:n.disabled,onClick:t=>{t.stopPropagation(),S(e)},children:"\xD7"})]},e)),i("input",{ref:w,role:"combobox","aria-label":n.name||"\u4E0B\u62C9\u591A\u9009","aria-expanded":s,"aria-controls":s?k:void 0,"aria-haspopup":"listbox","aria-autocomplete":"list","aria-activedescendant":s&&m>=0?`${k}-${m}`:void 0,"aria-required":g&&n.required,disabled:n.disabled,value:E,placeholder:r.length?"":n.placeholder||"\u8BF7\u9009\u62E9",onClick:()=>{d(!0),v(c[0]??-1)},onChange:e=>{b(e.target.value),d(!0),v(-1)},onBlur:e=>{var t;(t=x.current)!=null&&t.contains(e.relatedTarget)||(d(!1),b(""))},onKeyDown:e=>{if(!(e.ctrlKey||e.metaKey||e.altKey)){if((e.key==="Escape"||e.key==="Tab")&&(d(!1),b("")),e.key==="Backspace"&&!E&&r.length&&S(r[r.length-1]),["ArrowDown","ArrowUp","Home","End"].includes(e.key)){e.preventDefault(),d(!0);let t=c.indexOf(m),o=e.key==="Home"?0:e.key==="End"?c.length-1:Math.max(0,Math.min(c.length-1,t+(e.key==="ArrowDown"?1:-1)));v(c[o]??-1)}e.key==="Enter"&&(e.preventDefault(),s&&c.includes(m)?S(m):d(!0))}}})]}),i("button",{type:"button",className:u.multiSelectArrow,"aria-label":s?"\u6536\u8D77\u591A\u9009\u9009\u9879":"\u5C55\u5F00\u591A\u9009\u9009\u9879",disabled:n.disabled,onMouseDown:e=>e.preventDefault(),onClick:e=>{var t;e.stopPropagation(),(t=w.current)==null||t.focus(),d(!s),v(c[0]??-1)},children:i(V,{})})]}),g&&!C&&i("select",{ref:R,multiple:!0,"aria-hidden":"true",tabIndex:-1,className:u.selectFormValue,name:n.formItemName||n.id,required:n.required,disabled:n.disabled,value:r.map(String),onChange:e=>L(Array.from(e.target.selectedOptions,t=>Number(t.value))),onInvalid:()=>{var e;return(e=w.current)==null?void 0:e.focus()},children:l.map((e,t)=>i("option",{value:t,"data-return-value":e.value,children:e.text},t))})]}),s&&W(i("div",{ref:N,id:k,role:"listbox","aria-label":"\u4E0B\u62C9\u591A\u9009\u9009\u9879","aria-multiselectable":"true",className:u.selectDropdown,style:P,children:c.length?c.map(e=>h("div",{id:`${k}-${e}`,role:"option","aria-selected":r.includes(e),"data-highlighted":m===e,"data-option-index":e,className:u.selectDropdownOption,onMouseEnter:()=>v(e),onMouseDown:t=>t.preventDefault(),onClick:()=>S(e),children:[T(l[e]),i("span",{children:l[e].text}),r.includes(e)&&i("b",{"aria-hidden":"true",children:"\u2713"})]},e)):i("div",{className:u.selectEmpty,children:E?"\u65E0\u5339\u914D\u9009\u9879":"\u6682\u65E0\u9009\u9879"})}),document.body)]})}export{z as a};
@@ -0,0 +1,5 @@
1
+ var u=`[
2
+ {},
3
+ {},
4
+ {}
5
+ ]`;function f(r){try{let e=JSON.parse(r);return Array.isArray(e)&&e.length<=100&&e.every(n=>n!==null&&typeof n=="object"&&!Array.isArray(n))?"":'\u5BF9\u8C61\u6570\u7EC4\u9700\u5305\u542B\u81F3\u591A 100 \u4E2A JSON \u5BF9\u8C61\uFF0C\u4F8B\u5982 [{"name":"\u793A\u4F8B"}]'}catch{return"\u5BF9\u8C61\u6570\u7EC4\u5FC5\u987B\u4E3A\u6709\u6548 JSON"}}function p(r,e){if(e.kind!=="loop"||e.loopField)return;let n=1,o=new Set(r.variables.map(s=>s.key));for(;o.has(`object_list_${n}`);)n++;e.loopField=`object_list_${n}`,r.variables.push({key:e.loopField,label:"\u5FAA\u73AF\u5BB9\u5668\u751F\u6210\u7684\u53D8\u91CF",type:"objectArray",sample:u,required:!1,maxLength:4e3})}function b(r,e){function n(t,i){for(let a of t){if(a.id===e)return i;let c=a.children&&n(a.children,a.kind==="loop"?a:i);if(c)return c}}let o=n(r.nodes),s=r.variables.find(t=>t.key===(o==null?void 0:o.loopField));if(!s||f(s.sample))return[];let l=JSON.parse(s.sample),d=new Map;return l.forEach(t=>Object.entries(t).forEach(([i,a])=>{!d.has(i)&&/^[a-zA-Z][a-zA-Z0-9_]*$/.test(i)&&d.set(i,a)})),Array.from(d,([t,i])=>({key:`item.${t}`,label:`\u5F53\u524D\u9879 \xB7 ${t}`,type:typeof i=="number"?"number":typeof i=="boolean"?"boolean":"string",sample:typeof i=="string"?i:JSON.stringify(i)??"",required:!1,maxLength:4e3}))}function g(r){if(r.kind!=="interactive")return"";if(!["auto","fill","fixed"].includes(r.widthMode||"fill")||!["auto","fixed"].includes(r.containerHeightMode||"auto")||!["fixed","variable"].includes(r.containerDisabledMode||"fixed")||!["px","%"].includes(r.containerRadiusUnit||"px")||!["none","url","callback"].includes(r.action||"none"))return"\u4EA4\u4E92\u5BB9\u5668\u914D\u7F6E\u65E0\u6548";for(let[e,n]of[[r.widthMode,r.containerWidth],[r.containerHeightMode,r.containerHeight]])if(n!==void 0&&(!Number.isInteger(n)||Number(n)<1||Number(n)>2e3)||e==="fixed"&&!n)return"\u4EA4\u4E92\u5BB9\u5668\u5BBD\u9AD8\u9700\u4E3A 1\uFF5E2000px";return r.containerRadius!==void 0&&(!Number.isFinite(r.containerRadius)||r.containerRadius<0||r.containerRadius>(r.containerRadiusUnit==="%"?100:200))?"\u4EA4\u4E92\u5BB9\u5668\u5706\u89D2\u65E0\u6548":r.containerPadding&&(r.containerPadding.length!==4||r.containerPadding.some(e=>!Number.isInteger(e)||e<0||e>100))?"\u5185\u8FB9\u8DDD\u9700\u4E3A 0\uFF5E100px":[r.background,r.containerBorderColor].some(e=>e&&!/^#[0-9a-f]{6}$/i.test(e))?"\u4EA4\u4E92\u5BB9\u5668\u989C\u8272\u65E0\u6548":""}export{u as a,f as b,p as c,b as d,g as e};
@@ -0,0 +1 @@
1
+ import{a as g}from"./chunk-JMVQMTPF.js";import{a as r}from"./chunk-KCQGEQD2.js";import{a as C,c as b}from"./chunk-YIRSCSH4.js";import{FullscreenOutlined as y}from"@ant-design/icons";import{Modal as N}from"antd";import d from"react";import{Fragment as S,jsx as t,jsxs as v}from"react/jsx-runtime";function w({raw:e,theme:o}){let h=d.useRef(null),[f,s]=d.useState(""),[u,c]=d.useState(!0),m=typeof e=="string"?e:JSON.stringify(e);return d.useEffect(()=>{let i=!1,a,l;s(""),c(!0);let n=h.current;return(async()=>{try{let p=b(m);if(a=await g({...p,width:void 0,height:void 0,autoFit:!0,animation:!1,theme:{colorScheme:{default:C[o||"brand"]}}},n),i){a.release();return}if(await a.renderAsync(),i)return;l=new ResizeObserver(()=>{!i&&a&&n.clientWidth&&n.clientHeight&&a.resize(n.clientWidth,n.clientHeight).catch(()=>{i||s("\u56FE\u8868\u8C03\u6574\u5C3A\u5BF8\u5931\u8D25")})}),l.observe(n),c(!1)}catch(p){i||(s(p instanceof SyntaxError?"JSON \u683C\u5F0F\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u56FE\u8868\u5B9A\u4E49":`\u56FE\u8868\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u56FE\u8868\u914D\u7F6E\uFF1A${p.message}`),c(!1))}})(),()=>{i=!0,l==null||l.disconnect(),a==null||a.release()}},[m,o]),v("div",{className:r.chartCanvasWrapper,children:[t("div",{ref:h,className:r.chartCanvas,role:"img","aria-label":"\u56FE\u8868\u9884\u89C8"}),u&&t("div",{className:r.chartFeedback,children:"\u56FE\u8868\u52A0\u8F7D\u4E2D\u2026"}),f&&t("div",{className:r.chartFeedback,role:"alert",children:f})]})}function R({node:e,raw:o,mobile:h,interactive:f}){let[s,u]=d.useState(!1),c=e.chartAspectRatio&&e.chartAspectRatio!=="default"?e.chartAspectRatio.replace(":"," / "):h?"1 / 1":"16 / 9";return v(S,{children:[v("div",{className:r.chartFrame,style:e.chartHeightMode==="fixed"?{height:e.chartHeight||300}:{aspectRatio:c},children:[t(w,{raw:o,theme:e.chartTheme}),f&&e.chartPreview!==!1&&t("button",{type:"button",className:r.chartExpand,"aria-label":"\u5728\u72EC\u7ACB\u7A97\u53E3\u67E5\u770B\u56FE\u8868",onClick:m=>{m.stopPropagation(),u(!0)},children:t(y,{})})]}),s&&t(N,{open:!0,title:"\u56FE\u8868",footer:null,width:1e3,centered:!0,onCancel:()=>u(!1),destroyOnClose:!0,children:t("div",{className:r.chartExpanded,children:t(w,{raw:o,theme:e.chartTheme})})})]})}export{R as a};
@@ -0,0 +1 @@
1
+ import{e as _,f as u,g as w}from"./chunk-CIGVKKDL.js";import{a as i}from"./chunk-KCQGEQD2.js";import{CalendarOutlined as k,ClockCircleOutlined as tt,LeftOutlined as et,RightOutlined as at}from"@ant-design/icons";import l from"react";import{createPortal as ot}from"react-dom";import{Fragment as nt,jsx as n,jsxs as p}from"react/jsx-runtime";function rt({kind:a,value:s,onChange:N,onInvalidChange:R,label:E,placeholder:z="\u8BF7\u9009\u62E9",disabled:g,name:G,required:I,compact:J=!1}){let D=l.useRef(null),M=l.useRef(null),v=l.useRef(null),U=l.useRef(!1),[f,b]=l.useState(!1),[m,S]=l.useState(s),[y,P]=l.useState(s),[A,q]=l.useState((s&&a!=="time"?s:w("date")).slice(0,7)),[d,O]=l.useState("day"),[Q,X]=l.useState({}),K=l.useId();l.useEffect(()=>{S(s),P(u(s,a)?s:"")},[s]),l.useEffect(()=>{var t;(t=M.current)==null||t.setCustomValidity(m&&!u(m,a)?"\u8BF7\u9009\u62E9\u6709\u6548\u7684\u65E5\u671F\u6216\u65F6\u95F4":"")},[m,a]),l.useEffect(()=>{g&&b(!1)},[g]);function L(){g||(P(u(s,a)?s:""),S(s),O("day"),q((a!=="time"&&u(s,a)?s:w("date")).slice(0,7)),b(!0))}function C(){b(!1)}function T(t,o=a==="date"){var e;P(t),(a!=="datetime"||o)&&(N(t),S(t),o&&(b(!1),(e=M.current)==null||e.focus()))}l.useLayoutEffect(()=>{if(!f)return;let t=()=>{let e=D.current.getBoundingClientRect(),r=a==="time"?140:a==="datetime"?424:280,c=a==="time"?248:338,h=window.innerHeight-e.bottom<c&&e.top>c;X({position:"fixed",width:r,maxWidth:"calc(100vw - 16px)",left:Math.min(e.left,Math.max(8,window.innerWidth-r-8)),...h?{bottom:window.innerHeight-e.top+4}:{top:e.bottom+4},maxHeight:"calc(100vh - 16px)"})},o=e=>{var r,c;!((r=D.current)!=null&&r.contains(e.target))&&!((c=v.current)!=null&&c.contains(e.target))&&C()};return t(),window.addEventListener("resize",t),window.addEventListener("scroll",t,!0),document.addEventListener("mousedown",o),()=>{window.removeEventListener("resize",t),window.removeEventListener("scroll",t,!0),document.removeEventListener("mousedown",o)}},[f,a,s]),l.useEffect(()=>{var t,o,e,r;f&&((t=v.current)==null||t.querySelectorAll('[role="listbox"]').forEach(c=>{var h,Y;return(Y=(h=c.querySelector('[aria-selected="true"]'))==null?void 0:h.scrollIntoView)==null?void 0:Y.call(h,{block:"nearest"})}),U.current&&(U.current=!1,(r=((o=v.current)==null?void 0:o.querySelector('[aria-pressed="true"], [aria-selected="true"]'))||((e=v.current)==null?void 0:e.querySelector("button:not(:disabled)")))==null||r.focus()))},[f]);function V(t){let[o,e]=A.split("-").map(Number),r=o*12+e-1+t,c=Math.floor(r/12);c<1||c>9999||q(`${String(c).padStart(4,"0")}-${String(r%12+1).padStart(2,"0")}`)}let[$,x]=A.split("-").map(Number),H=new Date(0);H.setUTCFullYear($,x-1,1),H.setUTCHours(0,0,0,0);let Z=H.getTime()-H.getUTCDay()*864e5,B=a==="time"?y||"00:00":y.slice(11)||"00:00",[F,W]=B.split(":"),j=n("div",{className:i.temporalTimes,children:["\u5C0F\u65F6","\u5206\u949F"].map((t,o)=>p("div",{children:[a==="datetime"&&n("div",{className:i.temporalTimeHeading,children:o?"\u5206":"\u65F6"}),n("div",{role:"listbox","aria-label":t,className:i.temporalTimeList,children:Array.from({length:o?60:24},(e,r)=>String(r).padStart(2,"0")).map(e=>n("button",{type:"button",role:"option","aria-label":`${t} ${e}`,"aria-selected":e===(o?W:F),onClick:()=>{let r=o?`${F}:${e}`:`${e}:${W}`;T(a==="time"?r:`${y.slice(0,10)||w("date")} ${r}`,!1)},children:e},e))})]},t))});return p("div",{ref:D,className:`${i.temporalControl} ${J?i.temporalCompact:""}`,"data-disabled":!!g,"data-invalid":!!m&&!u(m,a),children:[n("input",{ref:M,role:"combobox","aria-label":E,"aria-expanded":f,"aria-invalid":!!m&&!u(m,a),"aria-haspopup":"dialog","aria-controls":f?K:void 0,value:m,placeholder:z,disabled:g,name:G,required:I,pattern:_[a],autoComplete:"off",onClick:L,onChange:t=>{S(t.target.value),!t.target.value||u(t.target.value,a)?(b(!1),N(t.target.value)):R==null||R(t.target.value)},onBlur:t=>{var o,e;(o=v.current)!=null&&o.contains(t.relatedTarget)||(e=D.current)!=null&&e.contains(t.relatedTarget)||b(!1)},onKeyDown:t=>{(t.key==="Escape"||t.key==="Tab")&&C(),t.key==="ArrowDown"&&(t.preventDefault(),U.current=!0,L()),t.key==="Enter"&&(t.preventDefault(),u(m,a)&&m!==s?(N(m),b(!1)):f&&a==="datetime"&&u(y,a)?T(y,!0):f||L())}}),s&&!g&&n("button",{type:"button","aria-label":`\u6E05\u9664 ${E}`,className:i.temporalClear,onMouseDown:t=>t.preventDefault(),onClick:()=>{N(""),S(""),b(!1)},children:"\xD7"}),n("button",{type:"button","aria-label":`\u6253\u5F00 ${E}`,className:i.temporalIcon,disabled:g,onMouseDown:t=>t.preventDefault(),onClick:()=>f?C():L(),children:a==="time"?n(tt,{}):n(k,{})}),f&&ot(p("div",{ref:v,id:K,role:"dialog","aria-label":`${E}\u9009\u62E9\u9762\u677F`,className:i.temporalPanel,style:Q,onMouseDown:t=>t.preventDefault(),onKeyDown:t=>{var o;t.key==="Escape"&&(C(),(o=M.current)==null||o.focus())},children:[p("div",{className:i.temporalPanelBody,children:[a!=="time"&&p("div",{className:i.temporalCalendar,children:[p("div",{className:i.temporalCalendarHeader,children:[n("button",{type:"button","aria-label":"\u4E0A\u4E00\u9875",onClick:()=>V(d==="day"?-1:d==="month"?-12:-144),children:n(et,{})}),p("button",{type:"button","aria-label":"\u9009\u62E9\u5E74\u6708",onClick:()=>O(d==="day"?"month":"year"),children:[$,"\u5E74 ",d==="day"?`${x}\u6708`:""]}),n("button",{type:"button","aria-label":"\u4E0B\u4E00\u9875",onClick:()=>V(d==="day"?1:d==="month"?12:144),children:n(at,{})})]}),d==="day"?p(nt,{children:[n("div",{className:i.temporalWeek,children:"\u65E5\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D".split("").map(t=>n("span",{children:t},t))}),n("div",{className:i.temporalDays,children:Array.from({length:42},(t,o)=>{let e=new Date(Z+o*864e5),r=`${String(e.getUTCFullYear()).padStart(4,"0")}-${String(e.getUTCMonth()+1).padStart(2,"0")}-${String(e.getUTCDate()).padStart(2,"0")}`;return n("button",{type:"button","aria-label":r,"aria-pressed":y.slice(0,10)===r,disabled:!u(r,"date"),"data-outside":e.getUTCMonth()+1!==x,"data-today":r===w("date"),onClick:()=>T(a==="date"?r:`${r} ${B}`),children:e.getUTCDate()},r)})})]}):n("div",{className:i.temporalMonthGrid,children:Array.from({length:12},(t,o)=>d==="month"?o+1:Math.max(1,Math.min(9988,$-$%12))+o).map(t=>p("button",{type:"button",onClick:()=>{q(d==="month"?`${String($).padStart(4,"0")}-${String(t).padStart(2,"0")}`:`${String(t).padStart(4,"0")}-${String(x).padStart(2,"0")}`),O(d==="month"?"day":"month")},children:[t,d==="month"?"\u6708":"\u5E74"]},t))})]}),a!=="date"&&j]}),a!=="time"&&p("div",{className:i.temporalFooter,children:[n("button",{type:"button",onClick:()=>T(w(a)),children:a==="date"?"\u4ECA\u5929":"\u5F53\u524D\u65F6\u95F4"}),a==="datetime"&&p("span",{children:[n("button",{type:"button",onClick:C,children:"\u53D6\u6D88"}),n("button",{type:"button","aria-label":"\u786E\u5B9A\u65E5\u671F\u65F6\u95F4",disabled:!u(y,a),onClick:()=>T(y,!0),children:"\u786E\u5B9A"})]})]})]}),document.body)]})}export{rt as a};
@@ -0,0 +1 @@
1
+ var s={large:{avatar:40,font:18,rowGap:8},medium:{avatar:32,font:16,rowGap:6},small:{avatar:24,font:14,rowGap:4},tiny:{avatar:20,font:12,rowGap:4}};function i(r,a){let t=r;if(typeof r=="string"&&r.trim().startsWith("["))try{t=JSON.parse(r)}catch{t=r}return(Array.isArray(t)?t:typeof t=="string"?t.split(/[\n,,]/):[]).filter(n=>typeof n=="string").map(n=>n.trim()).filter(Boolean).slice(0,a?100:1)}export{s as a,i as b};
@@ -0,0 +1 @@
1
+ var m=["date","time","datetime"],p=t=>m.includes(t),l={date:"\u65E5\u671F",time:"\u65F6\u95F4",datetime:"\u65E5\u671F\u65F6\u95F4"},d={date:"YYYY-MM-DD",time:"HH:mm",datetime:"YYYY-MM-DD HH:mm"},s={date:"[0-9]{4}-[0-9]{2}-[0-9]{2}",time:"([01][0-9]|2[0-3]):[0-5][0-9]",datetime:"[0-9]{4}-[0-9]{2}-[0-9]{2} ([01][0-9]|2[0-3]):[0-5][0-9]"};function c(t,e){if(typeof t!="string"||!new RegExp(`^${s[e]}$`).test(t))return!1;if(e==="time")return!0;let[r,n,a]=t.slice(0,10).split("-").map(Number);if(r<1||n<1||n>12||a<1)return!1;let i=r%4===0&&(r%100!==0||r%400===0);return a<=[31,i?29:28,31,30,31,30,31,31,30,31,30,31][n-1]}var o=t=>String(t).padStart(2,"0");function u(t,e=new Date){let r=`${String(e.getFullYear()).padStart(4,"0")}-${o(e.getMonth()+1)}-${o(e.getDate())}`,n=`${o(e.getHours())}:${o(e.getMinutes())}`;return t==="date"?r:t==="time"?n:`${r} ${n}`}export{m as a,p as b,l as c,d,s as e,c as f,u as g};