@givolt/i3-composer-agent 2.2.3 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-prototype.md +23 -0
  3. package/.claude/commands/i3-review.md +1 -1
  4. package/.claude/commands/i3-ship.md +1 -1
  5. package/.claude-plugin/marketplace.json +1 -1
  6. package/.claude-plugin/plugin.json +1 -1
  7. package/.codex-plugin/plugin.json +2 -2
  8. package/.gemini/commands/i3-prototype.toml +23 -0
  9. package/.gemini/commands/i3-review.toml +1 -1
  10. package/.gemini/commands/i3-ship.toml +1 -1
  11. package/README.md +15 -5
  12. package/agents/code-reviewer.md +1 -1
  13. package/agents/test-engineer.md +1 -1
  14. package/bin/native-layout.cjs +2 -0
  15. package/commands/i3-prototype.toml +23 -0
  16. package/commands/i3-review.toml +1 -1
  17. package/commands/i3-ship.toml +1 -1
  18. package/docs/agents.md +2 -2
  19. package/docs/codebuddy-setup.md +2 -2
  20. package/docs/codex-setup.md +1 -1
  21. package/docs/copilot-setup.md +4 -0
  22. package/docs/cursor-setup.md +3 -0
  23. package/docs/other-hosts.md +44 -9
  24. package/docs/workbuddy-setup.md +2 -2
  25. package/evals/README.md +2 -0
  26. package/evals/cases/i3-documentation-and-adrs.json +18 -0
  27. package/evals/cases/i3-test-driven-development.json +8 -0
  28. package/evals/cases/i3-ui-prototype.json +49 -0
  29. package/evals/fixtures/i3-documentation-and-adrs/prose-review/README.md +19 -0
  30. package/evals/fixtures/i3-documentation-and-adrs/prose-review/queue.js +32 -0
  31. package/evals/fixtures/i3-ui-prototype/business-brief.md +7 -0
  32. package/evals/plugin/tdd-fires-on-pasted-bug/graders/failing-test-first.md +7 -0
  33. package/evals/plugin/tdd-fires-on-pasted-bug/graders/skill-fired.md +5 -0
  34. package/evals/plugin/tdd-fires-on-pasted-bug/prompt.md +15 -0
  35. package/evals/plugin/tdd-stays-quiet-on-debug/graders/not-fired.md +8 -0
  36. package/evals/plugin/tdd-stays-quiet-on-debug/prompt.md +25 -0
  37. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +19 -0
  38. package/evals/zh-CN/cases/i3-test-driven-development.json +4 -0
  39. package/evals/zh-CN/cases/i3-ui-prototype.json +50 -0
  40. package/hooks/SIMPLIFY-IGNORE.md +3 -2
  41. package/hooks/simplify-ignore-test.sh +93 -1
  42. package/hooks/simplify-ignore.sh +94 -11
  43. package/package.json +31 -1
  44. package/plugin.json +1 -1
  45. package/references/performance-checklist.md +4 -2
  46. package/scripts/design-provider-discovery-test.js +190 -0
  47. package/scripts/design-provider-test.js +68 -0
  48. package/scripts/enterprise-template-test.js +179 -0
  49. package/scripts/lib/skill-lint-test.js +113 -1
  50. package/scripts/lib/skill-lint.js +62 -8
  51. package/scripts/run-evals-test.js +207 -0
  52. package/scripts/run-evals.js +47 -9
  53. package/scripts/template-adapter-test.js +155 -0
  54. package/scripts/ui-prototype-test.js +114 -0
  55. package/scripts/validate-commands-test.js +30 -0
  56. package/scripts/validate-commands.js +6 -16
  57. package/scripts/validate-reference-links-test.js +18 -0
  58. package/scripts/validate-reference-links.js +4 -2
  59. package/scripts/validate-skills.js +26 -3
  60. package/skills/i3-documentation-and-adrs/SKILL.md +9 -0
  61. package/skills/i3-frontend-ui-engineering/SKILL.md +5 -1
  62. package/skills/i3-idea-refine/SKILL.md +20 -5
  63. package/skills/i3-incremental-implementation/SKILL.md +4 -0
  64. package/skills/i3-performance-optimization/SKILL.md +10 -10
  65. package/skills/i3-security-and-hardening/references/hardening-patterns.md +1 -1
  66. package/skills/i3-shipping-and-launch/SKILL.md +6 -0
  67. package/skills/i3-test-driven-development/SKILL.md +3 -3
  68. package/skills/i3-ui-prototype/SKILL.md +119 -0
  69. package/skills/i3-ui-prototype/assets/templates/catalog.json +148 -0
  70. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +9 -0
  71. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +6 -0
  72. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +89 -0
  73. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +1 -0
  74. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +20 -0
  75. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +17 -0
  76. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +16 -0
  77. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +670 -0
  78. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +19 -0
  79. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +20 -0
  80. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +2 -0
  81. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +5 -0
  82. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +8 -0
  83. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +16 -0
  84. package/skills/i3-ui-prototype/assets/templates/credits.md +17 -0
  85. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +9 -0
  86. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +6 -0
  87. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +32 -0
  88. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +29 -0
  89. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +9 -0
  90. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +344 -0
  91. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +928 -0
  92. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +22 -0
  93. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
  94. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
  95. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
  96. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
  97. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
  98. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +173 -0
  99. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +30 -0
  100. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +17 -0
  101. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
  102. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +28 -0
  103. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
  104. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
  105. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
  106. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +12 -0
  107. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
  108. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
  109. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
  110. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
  111. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
  112. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
  113. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
  114. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  115. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  116. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  117. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  118. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  119. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  120. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  121. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  122. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
  123. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
  124. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +73 -0
  125. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +59 -0
  126. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +178 -0
  127. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
  128. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
  129. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
  130. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
  131. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
  132. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
  133. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
  134. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
  135. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
  136. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
  137. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
  138. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
  139. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
  140. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
  141. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
  142. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
  143. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
  144. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
  145. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
  146. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
  147. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
  148. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
  149. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
  150. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
  151. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
  152. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
  153. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
  154. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
  155. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
  156. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
  157. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
  158. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
  159. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
  160. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
  161. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
  162. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
  163. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
  164. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
  165. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
  166. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
  167. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
  168. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
  169. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
  170. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
  171. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
  172. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
  173. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
  174. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
  175. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
  176. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
  177. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
  178. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
  179. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
  180. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
  181. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
  182. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
  183. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
  184. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
  185. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
  186. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
  187. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
  188. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
  189. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
  190. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
  191. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
  192. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
  193. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
  194. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
  195. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
  196. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
  197. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
  198. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
  199. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
  200. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
  201. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
  202. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
  203. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
  204. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
  205. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
  206. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
  207. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
  208. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
  209. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
  210. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
  211. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
  212. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
  213. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
  214. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
  215. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
  216. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
  217. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
  218. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
  219. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
  220. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
  221. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
  222. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
  223. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
  224. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
  225. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
  226. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
  227. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
  228. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
  229. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
  230. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
  231. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
  232. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
  233. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
  234. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
  235. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
  236. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
  237. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
  238. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
  239. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
  240. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
  241. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
  242. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
  243. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
  244. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
  245. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
  246. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
  247. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
  248. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
  249. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
  250. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
  251. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
  252. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
  253. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
  254. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
  255. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
  256. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
  257. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
  258. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
  259. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
  260. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
  261. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
  262. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
  263. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
  264. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
  265. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
  266. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
  267. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +16 -0
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +44 -0
  420. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +40 -0
  421. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +9 -0
  422. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +6 -0
  423. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +23 -0
  424. package/skills/i3-ui-prototype/references/artifact-contract.md +41 -0
  425. package/skills/i3-ui-prototype/references/enterprise-admin.md +38 -0
  426. package/skills/i3-ui-prototype/references/expert-adapter.md +48 -0
  427. package/skills/i3-ui-prototype/references/template-adapters.md +57 -0
  428. package/skills/i3-ui-prototype/references/workflow-contract.md +19 -0
  429. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +30 -0
  430. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +28 -0
  431. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +9 -0
  432. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +14 -0
  433. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +128 -0
  434. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +97 -0
  435. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +8 -0
  436. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +11 -0
  437. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +259 -0
  438. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +89 -0
  439. package/skills/i3-using-agent-skills/SKILL.md +5 -0
@@ -0,0 +1,99 @@
1
+ import { h, defineWidget, Portal, Fragment, afterRender } from './dom.js';
2
+ import { invalidate } from './state.js';
3
+ import { DownOutlined, CloseCircleOutlined, SearchOutlined, LoadingOutlined } from './icons.js';
4
+
5
+ export const uid = value => { let hash = 2166136261; for (const c of value) hash = Math.imul(hash ^ c.charCodeAt(0), 16777619); return 'ui-' + (hash >>> 0).toString(36); };
6
+ export const attrs = props => Object.fromEntries(Object.entries(props).filter(([key]) => ['id', 'title', 'tabindex', 'role'].includes(key) || key.startsWith('aria-') || key.startsWith('data-') && !key.startsWith('data-bind')));
7
+ const popups = new Map();
8
+ export function popup(state, ctx, event) {
9
+ state.rect = event.currentTarget.getBoundingClientRect(); state.open = !state.open;
10
+ popups.set(ctx.id, state); invalidate();
11
+ }
12
+ if (typeof document !== 'undefined') {
13
+ document.addEventListener('mousedown', event => {
14
+ for (const [id, state] of popups) if (state.open && !event.target.closest(`[data-popup-owner="${uid(id)}"]`)) { state.open = false; invalidate(); }
15
+ });
16
+ document.addEventListener('keydown', event => { if (event.key === 'Escape') for (const state of popups.values()) if (state.open) { state.open = false; invalidate(); } });
17
+ }
18
+ export function popupStyle(state, minimum = 180) {
19
+ const r = state.rect || { left: 0, bottom: 0, top: 0, width: minimum };
20
+ return { position: 'fixed', top: r.bottom + 4, left: Math.max(8, Math.min(r.left, window.innerWidth - Math.max(minimum, r.width) - 8)), width: Math.max(minimum, r.width), zIndex: 2200 };
21
+ }
22
+ export const Button = defineWidget('Button', (p, s) => {const raw=s.default?.(),content=(Array.isArray(raw)?raw:[raw]).flat(Infinity).filter(x=>x!=null&&x!==false),iconOnly=content.length===1&&/Outlined$|Filled$/.test(content[0]?.type?.name||'');return h('button', {
23
+ ...attrs(p), type: p.htmlType || 'button', disabled: p.disabled || p.loading,
24
+ class: ['ant-btn', 'ant-btn-' + (p.type || 'default'),p.type==='primary'?'ant-btn-variant-solid':p.type==='link'?'ant-btn-variant-link':p.type==='text'?'ant-btn-variant-text':'ant-btn-variant-outlined',p.danger?'ant-btn-color-dangerous':p.type==='primary'?'ant-btn-color-primary':p.type==='link'?'ant-btn-color-link':'ant-btn-color-default',iconOnly&&'ant-btn-icon-only',p.size === 'small' && 'ant-btn-sm', p.size === 'large' && 'ant-btn-lg', p.danger && 'ant-btn-dangerous', p.block && 'ant-btn-block', p.loading && 'ant-btn-loading', p.class],
25
+ style: p.style, onClick: p.onClick,
26
+ }, [p.loading ? h(LoadingOutlined) : s.icon?.(), content.map(child=>typeof child==='string'||typeof child==='number'?h('span',{},child):child)]);});
27
+
28
+ export const Input = defineWidget('Input', (p, s, ctx) => {
29
+ const input = h('input', {
30
+ ...attrs(p), class: ['ant-input ant-input-outlined ant-input-css-var', p.class], value: p.value ?? p.modelValue ?? '', type: p.type || 'text', placeholder: p.placeholder, disabled: p.disabled, readOnly: p.readonly || p.readOnly,
31
+ maxlength: p.maxlength ?? p.maxLength ?? 160, style: p.style,
32
+ onInput: e => { ctx.emit('update:value', e.target.value); ctx.emit('update:modelValue', e.target.value); p.onInput?.(e); },
33
+ onChange: p.onChange, onBlur: p.onBlur, onFocus: p.onFocus,
34
+ onKeydown: e => { p.onKeydown?.(e); if (e.key === 'Enter') { p.onPressEnter?.(e); p.onSearch?.(e.target.value); } },
35
+ });
36
+ if (p.allowClear || p.showCount || s.prefix || s.suffix) return h('span', { class: ['ant-input-affix-wrapper ant-input-outlined ant-input-css-var', p.disabled && 'ant-input-affix-wrapper-disabled', p.class], style: p.style }, [s.prefix?.(), h('input', { ...input.props, class: 'ant-input', style: undefined }, []),h('span',{class:'ant-input-suffix'},[p.allowClear ? h('button', {type:'button',disabled:p.disabled, class: ['ant-input-clear-icon',!p.value&&'ant-input-clear-icon-hidden'], 'aria-label': '清空',tabindex:-1, onClick: () => ctx.emit('update:value', '') }, h(CloseCircleOutlined)) : null, s.suffix?.(),p.showCount&&h('span',{class:'ant-input-show-count-suffix'},String(p.value||'').length+' / '+(p.maxlength||p.maxLength||160))])]);
37
+ return input;
38
+ });
39
+ export const TextArea = defineWidget('TextArea', (p, s, ctx) => {
40
+ const id=p.id||uid(ctx.id);
41
+ if(p.autoSize)afterRender(()=>{const el=document.getElementById(id);if(!el)return;const c=getComputedStyle(el),line=parseFloat(c.lineHeight)||22,padding=parseFloat(c.paddingTop)+parseFloat(c.paddingBottom)+parseFloat(c.borderTopWidth)+parseFloat(c.borderBottomWidth),min=(p.autoSize.minRows||1)*line+padding,max=(p.autoSize.maxRows||100)*line+padding;el.style.height='auto';const height=Math.max(min,Math.min(max,el.scrollHeight+2));el.style.height=height+'px';el.style.overflowY=height>=max?'auto':'hidden';});
42
+ const textarea=h('textarea', {
43
+ ...attrs(p),id, class: ['ant-input ant-input-outlined ant-input-css-var',!p.showCount&&p.class], value: p.value ?? p.modelValue ?? '', placeholder: p.placeholder, disabled: p.disabled,
44
+ rows: p.rows || p.autoSize?.minRows || 3, maxlength: p.maxlength || p.maxLength, style: p.style,
45
+ onInput: e => { ctx.emit('update:value', e.target.value); ctx.emit('update:modelValue', e.target.value); p.onInput?.(e); }, onChange: p.onChange, onBlur: p.onBlur,
46
+ }, []);
47
+ return p.showCount?h('span',{class:['ant-input-textarea ant-input-textarea-show-count',p.class],style:p.style,'data-count':String(p.value||'').length+' / '+(p.maxlength||p.maxLength)},textarea):textarea;
48
+ });
49
+ Input.TextArea = TextArea;
50
+ Input.Search = defineWidget('Input.Search', (p, s, ctx) => h('div', { class: ['ant-space-compact', 'ant-input-search', p.class], style: p.style }, [h(Input, { ...p, class: 'ant-input-compact-item ant-input-compact-first-item', style: undefined, onSearch: value => p.onSearch?.(value), 'onUpdate:value': v => ctx.emit('update:value', v) }), h(Button, {class:'ant-btn-icon-only ant-btn-compact-item ant-btn-compact-last-item','aria-label': '搜索', onClick: () => p.onSearch?.(p.value || '') }, h(SearchOutlined))]));
51
+ Input.Group = defineWidget('Input.Group', (p, s) => h('div', { class: 'ant-input-group', ...attrs(p) }, s.default?.()));
52
+
53
+ export const InputNumber = defineWidget('InputNumber', (p, s, ctx) => {const state=ctx.state(()=>({focused:false,draft:''}));return h('div', { class: ['ant-input-number ant-input-number-outlined ant-input-number-css-var ant-input-number-mode-input', p.disabled && 'ant-input-number-disabled', p.class], style: p.style }, h('div', { class: 'ant-input-number-input-wrap' }, h('input', {
54
+ ...attrs(p), type: 'number', role: 'spinbutton', class: 'ant-input-number-input', value: state.focused?state.draft:p.value == null ? '' : p.precision == null ? p.value : Number(p.value).toFixed(p.precision),
55
+ disabled: p.disabled, placeholder: p.placeholder, min: p.min, max: p.max, step: p.step || (p.precision ? 10 ** -p.precision : 1),
56
+ onInput: e => {state.draft=e.target.value;const value = e.target.value === '' ? undefined : Number(e.target.value); ctx.emit('update:value', value); p.onChange?.(value); },
57
+ onFocus:e=>{state.focused=true;state.draft=e.target.value;},onBlur:e=>{state.focused=false;p.onBlur?.(e);invalidate();},
58
+ })));});
59
+
60
+ function optionsOf(options) { return (options || []).map(option => typeof option === 'object' ? option : { label: option, value: option }); }
61
+ export const Select = defineWidget('Select', (p, s, ctx) => {
62
+ const state = ctx.state(() => ({ open: false, search: '', highlight: 0 }));
63
+ const multiple = p.mode === 'multiple' || p.mode === 'tags';
64
+ const options = optionsOf(p.options), selected = multiple ? p.value || [] : [p.value];
65
+ const visible = options.filter(o => !state.search || String(o.label).toLowerCase().includes(state.search.toLowerCase()));
66
+ const choose = value => {
67
+ const next = multiple ? selected.includes(value) ? selected.filter(v => v !== value) : [...selected, value] : value;
68
+ ctx.emit('update:value', next); p.onChange?.(next, options.find(o => o.value === value));
69
+ if (!multiple) state.open = false;
70
+ state.search = ''; invalidate();
71
+ };
72
+ const open = event => { if (!p.disabled) { popup(state, ctx, event); state.highlight = 0; } };
73
+ const label = options.find(o => o.value === p.value)?.label;
74
+ const owner = uid(ctx.id);
75
+ const selection = multiple ? h('div', { class: 'ant-select-selection-overflow' }, [selected.map(v => h('span', { class: 'ant-select-selection-item' }, [options.find(o => o.value === v)?.label ?? v, !p.disabled && h('button', {type:'button', class: 'ant-select-selection-item-remove', 'aria-label': '移除 ' + (options.find(o => o.value === v)?.label ?? v), onClick: e => { e.stopPropagation(); choose(v); } }, '×')])), !selected.length && h('span', { class: 'ant-select-placeholder' }, p.placeholder)]) : h('div', { class: p.value == null || p.value === '' ? 'ant-select-placeholder' : 'ant-select-content-value' }, label ?? (p.value != null && p.value !== '' ? p.value : p.placeholder || '请选择'));
76
+ return h(Fragment, {}, [
77
+ h('div', {class: ['ant-select ant-select-outlined ant-select-css-var',ctx.form&&'ant-select-in-form-item', multiple ? 'ant-select-multiple' : 'ant-select-single',p.size==='small'&&'ant-select-sm',p.size==='large'&&'ant-select-lg', p.disabled && 'ant-select-disabled', state.open && 'ant-select-open', 'ant-select-show-arrow', p.class], style: p.style, 'data-popup-owner': owner, onClick: open }, [
78
+ h('div', { class: ['ant-select-content',p.value!=null&&p.value!==''&&'ant-select-content-has-value'] }, [selection, h('input', { ...attrs(p),class: 'ant-select-input', role: 'combobox', 'aria-expanded': state.open,'aria-haspopup':'listbox', 'aria-label': p['aria-label'] || p.placeholder || '选择',autocomplete:'off', disabled: p.disabled, value: state.search, readOnly: !p.showSearch, tabindex: p.disabled ? -1 : 0,onBlur:p.onBlur,onFocus:p.onFocus, onInput: e => { state.search = e.target.value; state.open = true; invalidate(); }, onKeydown: e => { if (e.key === 'ArrowDown') { e.preventDefault(); if (!state.open) open(e); else state.highlight = Math.min(visible.length - 1, state.highlight + 1); invalidate(); } if (e.key === 'ArrowUp') { e.preventDefault(); state.highlight = Math.max(0, state.highlight - 1); invalidate(); } if (e.key === 'Enter' && state.open) { e.preventDefault(); const o = visible[state.highlight]; if (o && !o.disabled) choose(o.value); } } })]),
79
+ h('div', { class: 'ant-select-suffix', 'aria-hidden': true }, h(DownOutlined)),
80
+ p.allowClear && (multiple ? selected.length : p.value != null && p.value !== '') ? h('button', {type:'button',disabled:p.disabled, class: 'ant-select-clear', 'aria-label': '清空选择', onClick: e => { e.stopPropagation(); ctx.emit('update:value', multiple ? [] : undefined); p.onChange?.(multiple ? [] : undefined); } }, h(CloseCircleOutlined)) : null,
81
+ ]),
82
+ state.open && h(Portal, {}, h('div', { class: 'ant-select-dropdown native-popup', style: popupStyle(state), 'data-popup-owner': owner, role: 'listbox', 'aria-multiselectable': multiple }, visible.length ? visible.map((o, i) => h('div', { class: ['ant-select-item ant-select-item-option', selected.includes(o.value) && 'ant-select-item-option-selected', o.disabled && 'ant-select-item-option-disabled', i === state.highlight && 'ant-select-item-option-active'], role: 'option', 'aria-selected': selected.includes(o.value), 'aria-disabled': !!o.disabled, onClick: () => { if (!o.disabled) choose(o.value); } }, h('div', { class: 'ant-select-item-option-content' }, o.label))) : h('div', { class: 'native-popup-empty' }, '暂无可选项'))),
83
+ ]);
84
+ });
85
+
86
+ export const Checkbox = defineWidget('Checkbox', (p, s, ctx) => h('label', { class: ['ant-checkbox-wrapper ant-checkbox-css-var', p.disabled && 'ant-checkbox-wrapper-disabled', p.class], style: p.style }, [h('span', { class: ['ant-checkbox ant-wave-target', p.checked && 'ant-checkbox-checked',p.indeterminate&&'ant-checkbox-indeterminate', p.disabled && 'ant-checkbox-disabled'] }, [h('input', { ...attrs(p), class: 'ant-checkbox-input', type: 'checkbox', checked: p.checked, disabled: p.disabled, onChange: e => { ctx.emit('update:checked', e.target.checked); p.onChange?.(e); } })]), s.default&&h('span', {}, s.default())]));
87
+ Checkbox.Group = defineWidget('Checkbox.Group', (p, s, ctx) => h('div', { class: 'ant-checkbox-group' }, optionsOf(p.options).map(o => h(Checkbox, { checked: (p.value || []).includes(o.value), disabled: p.disabled || o.disabled, 'onUpdate:checked': checked => { const next = checked ? [...(p.value || []), o.value] : (p.value || []).filter(v => v !== o.value); ctx.emit('update:value', next); p.onChange?.(next); } }, o.label))));
88
+ export const Switch = defineWidget('Switch', (p, s, ctx) => h('button', { ...attrs(p), type: 'button', role: 'switch', 'aria-checked': !!p.checked, disabled: p.disabled, class: ['ant-switch', p.checked && 'ant-switch-checked', p.size === 'small' && 'ant-switch-small', p.class], onClick: () => { ctx.emit('update:checked', !p.checked); p.onChange?.(!p.checked); } }, [h('div', { class: 'ant-switch-handle' }), h('span', { class: 'ant-switch-inner' }, p.checked ? p.checkedChildren || '' : p.unCheckedChildren || '')]));
89
+ export const Radio=defineWidget('Radio',(p,s,ctx)=>h('label',{class:['ant-radio-wrapper ant-radio-css-var',p.checked&&'ant-radio-wrapper-checked',p.disabled&&'ant-radio-wrapper-disabled',p.class]},[h('span',{class:['ant-radio ant-wave-target',p.checked&&'ant-radio-checked',p.disabled&&'ant-radio-disabled']},h('input',{...attrs(p),type:'radio',class:'ant-radio-input',name:p.name||uid(ctx.id),value:p.value,checked:p.checked,disabled:p.disabled,onChange:e=>{ctx.emit('update:checked',e.target.checked);p.onChange?.(e);}})),s.default&&h('span',{class:'ant-radio-label'},s.default())]));
90
+ export const RadioGroup = defineWidget('RadioGroup', (p, s, ctx) => h('div', { ...attrs(p), class: ['ant-radio-group', p.class] }, optionsOf(p.options).map(o => h(Radio,{name:uid(ctx.id),value:o.value,checked:p.value===o.value,disabled:p.disabled||o.disabled,'onUpdate:checked':()=>{ctx.emit('update:value',o.value);p.onChange?.({target:{value:o.value}});}},o.label))));
91
+
92
+ export const Dropdown = defineWidget('Dropdown', (p, s, ctx) => {
93
+ const state = ctx.state(() => ({ open: false })), owner = uid(ctx.id), menu = p.menu || {};
94
+ const activate=(value,event)=>{if(value.disabled)return;state.open=false;menu.onClick?.({key:value.key,domEvent:event});invalidate();};
95
+ const item = value => value.type === 'divider' ? h('li', { class: 'ant-dropdown-menu-item-divider', role: 'separator' }) : h('li', { role: 'menuitem',tabindex:value.disabled?-1:0, class: ['ant-dropdown-menu-item', value.disabled && 'ant-dropdown-menu-item-disabled', value.danger && 'ant-dropdown-menu-item-danger'], onClick:event=>activate(value,event),onKeydown:event=>{if(['Enter',' '].includes(event.key)){event.preventDefault();activate(value,event);}if(['ArrowDown','ArrowUp'].includes(event.key)){event.preventDefault();const nodes=[...event.currentTarget.parentElement.querySelectorAll('[role="menuitem"][tabindex="0"]')],index=nodes.indexOf(event.currentTarget);nodes[(index+(event.key==='ArrowDown'?1:nodes.length-1))%nodes.length]?.focus();}} }, value.label);
96
+ return h(Fragment, {}, [h('span', { class: ['ant-dropdown-trigger', p.class], 'data-popup-owner': owner, onClick: e => { if (!p.disabled) popup(state, ctx, e); } }, s.default?.()), state.open && h(Portal, {}, h('div', { class: 'ant-dropdown native-popup', style: popupStyle(state, 160), 'data-popup-owner': owner }, h('ul', { class: 'ant-dropdown-menu', role: 'menu' }, (menu.items || []).map(item))))]);
97
+ });
98
+ export const Tooltip = defineWidget('Tooltip', (p, s,ctx) => {const state=ctx.state(()=>({open:false,rect:null})),id=uid(ctx.id);return h(Fragment,{},[h('span', { class: p.class,'aria-describedby':state.open?id:undefined,onMouseenter:e=>{state.open=!!p.title;state.rect=e.currentTarget.getBoundingClientRect();invalidate();},onMouseleave:()=>{state.open=false;invalidate();}}, s.default?.()),state.open&&h(Portal,{},h('div',{id,class:'ant-tooltip ant-tooltip-placement-top',role:'tooltip',style:{position:'fixed',left:state.rect.left+state.rect.width/2,top:state.rect.top-6,transform:'translate(-50%,-100%)',zIndex:2400,pointerEvents:'none'}},h('div',{class:'ant-tooltip-inner'},p.title)))]);});
99
+ export const Avatar = defineWidget('Avatar', (p, s) => h('span', { class: ['ant-avatar ant-avatar-circle', p.class], style: { width: p.size || 32, height: p.size || 32, lineHeight: (p.size || 32) + 'px', ...p.style } }, s.default?.()));
@@ -0,0 +1,54 @@
1
+ import { h,defineWidget,Portal,Fragment,afterRender } from './dom.js';
2
+ import { invalidate } from './state.js';
3
+ import { Button,attrs,uid } from './controls.js';
4
+ import { CloseOutlined,CheckCircleOutlined,CloseCircleOutlined,InfoCircleOutlined,LoadingOutlined } from './icons.js';
5
+
6
+ const active=new Map();
7
+ if(typeof document!=='undefined')document.addEventListener('keydown',event=>{
8
+ const top=[...active.values()].at(-1);if(!top)return;
9
+ if(event.key==='Escape'&&top.keyboard!==false){event.preventDefault();event.stopPropagation();top.close(event);}
10
+ if(event.key==='Tab'){
11
+ const root=document.getElementById(top.id),nodes=[...(root?.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea:not(:disabled), [tabindex="0"], a[href]')||[])].filter(el=>el.getClientRects().length);
12
+ if(!nodes.length){event.preventDefault();root?.focus();return;}
13
+ const first=nodes[0],last=nodes.at(-1);
14
+ if(event.shiftKey&&(document.activeElement===first||!root.contains(document.activeElement))){event.preventDefault();last.focus();}
15
+ else if(!event.shiftKey&&(document.activeElement===last||!root.contains(document.activeElement))){event.preventDefault();first.focus();}
16
+ }
17
+ });
18
+ function dialog(p,ctx,kind){
19
+ const state=ctx.state(()=>({wasOpen:false,previousFocus:null})),id=uid(ctx.id),close=e=>kind==='drawer'?p.onClose?.(e):p.onCancel?.(e);
20
+ if(!p.open){if(state.wasOpen){active.delete(id);state.wasOpen=false;afterRender(()=>{state.previousFocus?.isConnected&&state.previousFocus.focus();if(!active.size)document.body.style.overflow='';});}return false;}
21
+ if(!state.wasOpen){state.wasOpen=true;state.previousFocus=document.activeElement;afterRender(()=>{document.body.style.overflow='hidden';document.getElementById(id)?.focus({preventScroll:true});});}
22
+ active.delete(id);active.set(id,{id,close,keyboard:p.keyboard,previousFocus:state.previousFocus});
23
+ return {id,close};
24
+ }
25
+ export const Drawer=defineWidget('Drawer',(p,s,ctx)=>{
26
+ const current=dialog(p,ctx,'drawer');if(!current)return null;
27
+ const {id,close}=current,width=typeof p.size==='number'?p.size:p.width||(p.size==='large'?736:378),placement=p.placement||'right';
28
+ return h(Portal,{},h('div',{class:['ant-drawer','ant-drawer-'+placement,'ant-drawer-open',p.class],style:{zIndex:p.zIndex||1000},'data-dialog-owner':id},[
29
+ p.mask!==false&&h('div',{class:'ant-drawer-mask',onClick:e=>{if(p.mask?.closable!==false&&p.maskClosable!==false)close(e);}}),
30
+ h('div',{class:'ant-drawer-content-wrapper',style:{width}},h('div',{id,tabindex:-1,class:'ant-drawer-section',role:'dialog','aria-modal':true,'aria-labelledby':id+'-title'},[
31
+ h('div',{class:'ant-drawer-header'},h('div',{class:'ant-drawer-header-title'},[p.closable!==false&&h('button',{type:'button',class:'ant-drawer-close','aria-label':'关闭',onClick:close},h(CloseOutlined)),h('div',{class:'ant-drawer-title',id:id+'-title'},p.title),s.extra&&h('div',{class:'ant-drawer-extra'},s.extra())])),
32
+ h('div',{class:'ant-drawer-body'},s.default?.()),
33
+ s.footer&&h('div',{class:'ant-drawer-footer'},s.footer()),
34
+ ])),
35
+ ]));
36
+ });
37
+ export const Modal=defineWidget('Modal',(p,s,ctx)=>{
38
+ const current=dialog(p,ctx,'modal');if(!current)return null;
39
+ const {id,close}=current;
40
+ const footer=s.footer?s.footer():p.footer===null?null:p.footer||[h(Button,{onClick:close,disabled:p.cancelButtonProps?.disabled},p.cancelText||'取消'),h(Button,{type:'primary',loading:p.confirmLoading,...p.okButtonProps,onClick:p.onOk},p.okText||'确定')];
41
+ return h(Portal,{},h('div',{class:'ant-modal-root',style:{zIndex:p.zIndex||1100}},[
42
+ p.mask!==false&&h('div',{class:'ant-modal-mask'}),
43
+ h('div',{class:['ant-modal-wrap',p.centered&&'ant-modal-centered'],onClick:e=>{if(e.target===e.currentTarget&&p.mask?.closable!==false&&p.maskClosable!==false)close(e);}},h('div',{class:['ant-modal',p.class],style:{width:p.width||520,top:p.centered?undefined:p.top||100},id,tabindex:-1,role:'dialog','aria-modal':true,'aria-labelledby':id+'-title'},h('div',{class:'ant-modal-container'},[
44
+ p.closable!==false&&h('button',{type:'button',class:'ant-modal-close','aria-label':'关闭',onClick:close},h('span',{class:'ant-modal-close-x'},h(CloseOutlined))),
45
+ p.title&&h('div',{class:'ant-modal-header'},h('div',{class:'ant-modal-title',id:id+'-title'},p.title)),
46
+ h('div',{class:'ant-modal-body'},s.default?.()),
47
+ footer&&h('div',{class:'ant-modal-footer'},footer),
48
+ ]))),
49
+ ]));
50
+ });
51
+ const notices=[];
52
+ const notify=(type,content,duration=3)=>{const item={id:crypto.randomUUID(),type,content:typeof content==='object'?content.content:content};notices.push(item);invalidate();const remove=()=>{const index=notices.indexOf(item);if(index>=0){notices.splice(index,1);invalidate();}};if(duration)setTimeout(remove,duration*1000);return remove;};
53
+ export const message={success:(text,duration)=>notify('success',text,duration),error:(text,duration)=>notify('error',text,duration),info:(text,duration)=>notify('info',text,duration),warning:(text,duration)=>notify('warning',text,duration),loading:(text,duration)=>notify('loading',text,duration),destroy:()=>{notices.length=0;invalidate();}};
54
+ export const Notices=defineWidget('Notices',()=>{afterRender(()=>{for(const [id,entry] of active)if(!document.getElementById(id)){active.delete(id);if(entry.previousFocus?.isConnected)entry.previousFocus.focus({preventScroll:true});}if(!active.size)document.body.style.overflow='';});return h(Portal,{},h('div',{class:'ant-message',role:'status','aria-live':'polite'},notices.map(n=>h('div',{class:'ant-message-notice'},h('div',{class:['ant-message-notice-content','ant-message-'+n.type]},[h(n.type==='success'?CheckCircleOutlined:n.type==='error'?CloseCircleOutlined:n.type==='loading'?LoadingOutlined:InfoCircleOutlined),h('span',{},n.content)])))));});
@@ -0,0 +1,264 @@
1
+ import { currentOwner, withOwner, unref, invalidate } from './state.js';
2
+
3
+ export const Fragment = Symbol('fragment'), Portal = Symbol('portal');
4
+ const definitions = new Set(), instances = new Map(), widgetStates = new Map(), functions = new Map(), globalWidgets = new Map();
5
+ let portals = [], effects = [];
6
+ let epoch = 0;
7
+ export function createComponent(spec) { const component = { ...spec, kind: 'component' }; definitions.add(component); return component; }
8
+ export function defineComponent(spec) { return { ...spec, kind: 'component' }; }
9
+ export const defineWidget = (name, render) => { const result = { name, kind: 'widget', render }; globalWidgets.set(name, result); return result; };
10
+ export const afterRender = callback => effects.push(callback);
11
+ export function h(type, props, children) {
12
+ if (arguments.length === 2 && (typeof props === 'string' || Array.isArray(props) || typeof props === 'function')) { children = props; props = {}; }
13
+ return { type, props: props || {}, children };
14
+ }
15
+ export function widgetState(key, init = () => ({})) {
16
+ if (!widgetStates.has(key)) widgetStates.set(key, init());
17
+ return widgetStates.get(key);
18
+ }
19
+ export async function loadTemplates() {
20
+ await Promise.all([...definitions].filter(d => d.template && !d.nodes).map(async component => {
21
+ const response = await fetch(component.template);
22
+ if (!response.ok) throw Error('HTML template could not be loaded: ' + component.template);
23
+ const template = document.createElement('template');
24
+ template.innerHTML = await response.text();
25
+ component.nodes = [...template.content.childNodes];
26
+ }));
27
+ }
28
+ function scopeFor(raw, props = {}, locals = {}, parent) {
29
+ return new Proxy({}, {
30
+ has: (_, key) => key in locals || key in raw || key in props || !!(parent && key in parent),
31
+ get(_, key) {
32
+ if (key === Symbol.unscopables) return undefined;
33
+ if (key in locals) return unref(locals[key]);
34
+ if (key in raw) return unref(raw[key]);
35
+ if (key in props) return unref(raw.props?.[key] ?? props[key]);
36
+ return parent?.[key];
37
+ },
38
+ set(_, key, value) {
39
+ const target = key in locals ? locals : key in raw ? raw : key in props ? props : null;
40
+ if (target) { if (target[key]?.__ref) target[key].value = value; else target[key] = value; }
41
+ else if (parent) parent[key] = value;
42
+ else raw[key] = value;
43
+ invalidate(); return true;
44
+ },
45
+ });
46
+ }
47
+ function evaluate(expression, scope) {
48
+ if (!expression) return undefined;
49
+ const id = 'value:' + expression;
50
+ try {
51
+ if (!functions.has(id)) functions.set(id, new Function('scope', 'with(scope){return (' + expression + ')}'));
52
+ return functions.get(id)(scope);
53
+ } catch(error) { throw new Error(error.message+' [HTML expression: '+expression+']',{cause:error}); }
54
+ }
55
+ function assign(expression, scope, value) {
56
+ const id = 'set:' + expression;
57
+ if (!functions.has(id)) functions.set(id, new Function('scope', '__input', 'with(scope){' + expression + ' = __input}'));
58
+ functions.get(id)(scope, value); invalidate();
59
+ }
60
+ function handler(expression, scope, modifiers = []) {
61
+ return (...args) => {
62
+ const event = args[0];
63
+ if (modifiers.includes('esc') && event?.key !== 'Escape') return;
64
+ if (modifiers.includes('enter') && event?.key !== 'Enter') return;
65
+ if (modifiers.includes('stop')) event?.stopPropagation?.();
66
+ if (modifiers.includes('prevent')) event?.preventDefault?.();
67
+ const child = scopeFor({}, {}, { $event: event }, scope);
68
+ const id = 'event:' + expression;
69
+ if (!functions.has(id)) {
70
+ let fn;
71
+ try { fn = new Function('scope', 'with(scope){return (' + expression + ')}'); }
72
+ catch { fn = new Function('scope', 'with(scope){' + expression + '}'); }
73
+ functions.set(id, fn);
74
+ }
75
+ const result = functions.get(id)(child);
76
+ if (typeof result === 'function') return result(...args);
77
+ return result;
78
+ };
79
+ }
80
+ const camel = name => name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
81
+ const eventKey = name => 'on' + name[0].toUpperCase() + camel(name.slice(1));
82
+ function attributes(node, scope, raw, isComponent) {
83
+ const props = {};
84
+ for (const attr of node.attributes) {
85
+ const { name, value } = attr;
86
+ if (name.startsWith('data-bind-')) {
87
+ const attribute = name.slice(10), key = isComponent && !/^(aria|data)-/.test(attribute) ? camel(attribute) : attribute;
88
+ const bound = evaluate(value, scope);
89
+ props[key] = key === 'class' && props.class ? [props.class, bound] : key === 'style' && props.style ? [props.style, bound] : bound;
90
+ }
91
+ else if (name === 'data-bind') Object.assign(props, evaluate(value, scope));
92
+ else if (name.startsWith('data-on-')) {
93
+ const [event, ...modifiers] = name.slice(8).split('.');
94
+ props[eventKey(event)] = handler(value, scope, modifiers);
95
+ } else if (name.startsWith('data-model-')) {
96
+ const property = camel(name.slice(11)); props[property] = evaluate(value, scope);
97
+ props['onUpdate:' + property] = input => assign(value, scope, input);
98
+ } else if (name === 'ref') props.ref = raw[value] || scope[value];
99
+ else if (!name.startsWith('data-') || !['component', 'if', 'else-if', 'else', 'each', 'slot', 'slot-args', 'show', 'text', 'html'].includes(name.slice(5))) props[isComponent && !/^(aria|data)-/.test(name) ? camel(name) : name] = isComponent && value === '' ? true : value;
100
+ }
101
+ if (node.hasAttribute('data-show') && !evaluate(node.getAttribute('data-show'), scope)) props.style = { ...(props.style || {}), display: 'none' };
102
+ return props;
103
+ }
104
+ const nodeChildren = node => node.localName === 'template' ? [...node.content.childNodes] : [...node.childNodes];
105
+ function renderNodes(nodes, scope, raw, slots, base) {
106
+ const out = [];
107
+ let branch = null;
108
+ for (let i = 0; i < nodes.length; i++) {
109
+ const node = nodes[i], id = base + '.' + i;
110
+ if (node.nodeType === 8) continue;
111
+ if (node.nodeType === 3) {
112
+ const text = node.textContent.replace(/\{\{([\s\S]*?)\}\}/g, (_, expression) => {
113
+ const value = evaluate(expression.trim(), scope); return value == null ? '' : typeof value === 'object' ? JSON.stringify(value) : String(value);
114
+ });
115
+ if (text) out.push(text);
116
+ continue;
117
+ }
118
+ if (node.nodeType !== 1) continue;
119
+ if (node.hasAttribute('data-if')) { branch = !!evaluate(node.getAttribute('data-if'), scope); if (!branch) continue; }
120
+ else if (node.hasAttribute('data-else-if')) { if (branch) continue; branch = !!evaluate(node.getAttribute('data-else-if'), scope); if (!branch) continue; }
121
+ else if (node.hasAttribute('data-else')) { if (branch) continue; branch = true; }
122
+ else branch = null;
123
+ if (node.hasAttribute('data-slot')) continue;
124
+ const each = node.getAttribute('data-each');
125
+ if (each) {
126
+ const match = each.match(/^\s*(?:\((.*?)\)|([^\s]+))\s+(?:in|of)\s+([\s\S]+)$/);
127
+ if (!match) throw Error('Invalid HTML iteration ' + each);
128
+ const names = (match[1] || match[2]).split(',').map(v => v.trim());
129
+ const list = evaluate(match[3], scope) || [];
130
+ const entries = typeof list === 'number' ? Array.from({ length: list }, (_, j) => [j, j + 1]) : Array.isArray(list) ? list.map((v, j) => [j, v]) : Object.entries(list);
131
+ for (let j = 0; j < entries.length; j++) {
132
+ const [key, value] = entries[j], local = { [names[0]]: value, [names[1] || '$index']: key, [names[2] || '$position']: j };
133
+ const child = scopeFor({}, {}, local, scope);
134
+ out.push(renderElement(node, child, raw, slots, id + '.row:' + (value?.id || key)));
135
+ }
136
+ } else out.push(renderElement(node, scope, raw, slots, id));
137
+ }
138
+ return out;
139
+ }
140
+ function renderElement(node, scope, raw, slots, id) {
141
+ const component = node.getAttribute('data-component');
142
+ const props = attributes(node, scope, raw, !!component);
143
+ props.__nativeKey = id + (props.key == null ? '' : ':' + props.key);
144
+ const children = nodeChildren(node);
145
+ if (node.localName === 'slot') return slots[node.getAttribute('name') || 'default']?.({}) || renderNodes(children, scope, raw, slots, id);
146
+ if (component) {
147
+ const named = {};
148
+ for (const child of children) if (child.nodeType === 1 && child.hasAttribute('data-slot')) {
149
+ const name = child.getAttribute('data-slot');
150
+ named[name] = args => renderNodes(nodeChildren(child), scopeFor({}, {}, args || {}, scope), raw, slots, id + '.slot:' + name);
151
+ }
152
+ named.default = () => renderNodes(children.filter(n => !(n.nodeType === 1 && n.hasAttribute('data-slot'))), scope, raw, slots, id + '.default');
153
+ const type = component === '$dynamic' ? props.is : globalWidgets.has(component) && !(component.split('.')[0] in scope) ? globalWidgets.get(component) : evaluate(component, scope);
154
+ if (!type) throw Error('HTML component missing: ' + component);
155
+ return h(type, props, named);
156
+ }
157
+ const content = node.hasAttribute('data-text') ? String(evaluate(node.getAttribute('data-text'), scope) ?? '') : renderNodes(children, scope, raw, slots, id);
158
+ return node.localName === 'template' ? content : h(node.localName, props, content);
159
+ }
160
+ function slotObject(children) {
161
+ if (children && typeof children === 'object' && !Array.isArray(children) && !children.type && !children.nodeType) return children;
162
+ return { default: () => typeof children === 'function' ? children() : children };
163
+ }
164
+ function event(props, name, ...args) { return props[eventKey(name)]?.(...args); }
165
+ function expand(vnode, key = 'root', context = {}) {
166
+ if (vnode === undefined || vnode === null || vnode === false || vnode === true) return [];
167
+ if (Array.isArray(vnode)) return vnode.flatMap((n, i) => expand(n, key + '.' + i, context));
168
+ if (typeof vnode === 'function') return expand(vnode(), key, context);
169
+ if (typeof vnode !== 'object' || vnode.nodeType) return vnode;
170
+ const { type, props = {}, children } = vnode;
171
+ const id = props.__nativeKey || key;
172
+ if (type === Portal) { portals.push({ tree: children, id, context }); return []; }
173
+ if (type === Fragment) return expand(typeof children === 'function' ? children() : children, id, context);
174
+ if (typeof type === 'string') return { type, props: { ...props, 'data-native-id': id }, children: expand(children, id + '.children', props.__formApi ? { ...context, form: props.__formApi } : context) };
175
+ if (type?.kind === 'widget') return expand(type.render(context.form?.disabled ? {...props, disabled: true} : props, slotObject(children), { ...context, id, state: init => widgetState(id, init), emit: (name, ...args) => event(props, name, ...args) }), id + '.widget', context);
176
+ if (type?.kind === 'component') {
177
+ const declaredProps=Object.fromEntries((type.propKeys||[]).map(key=>[key,undefined]));
178
+ let fingerprint;
179
+ try { fingerprint=JSON.stringify(Object.fromEntries((type.propKeys||[]).map(key=>[key,props[key]]))); } catch { fingerprint=null; }
180
+ let instance = instances.get(id);
181
+ if (!instance || instance.type !== type) {
182
+ if (instance) dispose(instance);
183
+ instance = { type, props: { ...declaredProps,...props }, mounted: [], updated: [], disposers: [], fresh: true, epoch, fingerprint };
184
+ const emit = (name, ...args) => event(instance.props, name, ...args);
185
+ instance.raw = withOwner(instance, () => type.setup?.(instance.props, emit) || {});
186
+ instance.scope = scopeFor(instance.raw, instance.props, { $emit: emit });
187
+ instances.set(id, instance);
188
+ }
189
+ instance.epoch = epoch;
190
+ for (const name of Object.keys(instance.props)) if (!(name in props) && !(name in declaredProps)) delete instance.props[name];
191
+ Object.assign(instance.props,declaredProps, props);
192
+ if(instance.fingerprint!==fingerprint){instance.fingerprint=fingerprint;invalidate();}
193
+ const slots = slotObject(children);
194
+ const tree = type.nodes ? renderNodes(type.nodes, instance.scope, instance.raw, slots, id + '.template') : typeof instance.raw === 'function' ? instance.raw() : type.render?.call(instance.scope);
195
+ return expand(tree, id + '.component', context);
196
+ }
197
+ throw Error('Unrecognized HTML view ' + String(type));
198
+ }
199
+ function className(value) { return Array.isArray(value) ? value.map(className).filter(Boolean).join(' ') : value && typeof value === 'object' ? Object.keys(value).filter(k => value[k]).join(' ') : value || ''; }
200
+ function applyProps(node, before, after) {
201
+ for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {
202
+ if (key.startsWith('__') || key === 'key' || key === 'ref') continue;
203
+ const value = after[key];
204
+ if (key.startsWith('on')) { const event = key.slice(2).toLowerCase(); if (!event.includes(':')) node['on' + event] = value ? input => { const result = value(input); if (result?.catch) result.catch(error => console.error(error)); } : null; continue; }
205
+ if (key === 'class' || key === 'className') { node.setAttribute('class', className(value)); continue; }
206
+ if (key === 'style') {
207
+ node.style.cssText='';
208
+ for(const part of Array.isArray(value)?value:[value]){
209
+ if(typeof part==='string')node.style.cssText+=';'+part;
210
+ else for (const [name, v] of Object.entries(part || {})) if (v != null) node.style.setProperty(name.replace(/[A-Z]/g, l => '-' + l.toLowerCase()), typeof v === 'number' && !name.startsWith('--') && !['opacity', 'zIndex', 'flex', 'flexGrow', 'fontWeight', 'order', 'lineHeight'].includes(name) ? v + 'px' : String(v));
211
+ }
212
+ continue;
213
+ }
214
+ if (key === 'value' && ['INPUT', 'TEXTAREA', 'SELECT'].includes(node.tagName)) { const next = value == null ? '' : String(value); if (node.value !== next) node.value = next; continue; }
215
+ if (['checked','indeterminate', 'disabled', 'inert', 'multiple', 'readOnly'].includes(key)) { node[key] = !!value; if (value) node.setAttribute(key.toLowerCase(), ''); else node.removeAttribute(key.toLowerCase()); continue; }
216
+ if (key.startsWith('aria-') && typeof value === 'boolean') node.setAttribute(key,String(value));
217
+ else if (value === undefined || value === null || value === false) node.removeAttribute(key);
218
+ else node.setAttribute(key, value === true ? '' : String(value));
219
+ }
220
+ if (after.ref?.__ref && after.ref.value !== node) after.ref.value = node;
221
+ }
222
+ function patch(parent, previous, next, svg = false) {
223
+ const old = [...parent.childNodes];
224
+ const list = (Array.isArray(next) ? next : [next]).flat(Infinity).filter(v => v !== undefined && v !== null && v !== false);
225
+ for (let i = 0; i < list.length; i++) {
226
+ const value = list[i]; let node = old[i];
227
+ if (value?.nodeType) { if (node !== value) parent.insertBefore(value, node || null); continue; }
228
+ if (typeof value !== 'object') {
229
+ if (!node || node.nodeType !== 3) { const replacement = document.createTextNode(String(value)); if (node) parent.replaceChild(replacement, node); else parent.appendChild(replacement); node = replacement; }
230
+ else if (node.textContent !== String(value)) node.textContent = String(value);
231
+ continue;
232
+ }
233
+ const isSvg = svg || value.type === 'svg';
234
+ if (!node || node.nodeType !== 1 || node.localName !== value.type || (node._nativeKey && node._nativeKey !== value.props['data-native-id'])) {
235
+ const replacement = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', value.type) : document.createElement(value.type);
236
+ if (node) parent.replaceChild(replacement, node); else parent.appendChild(replacement);
237
+ node = replacement;
238
+ }
239
+ applyProps(node, node._nativeProps || {}, value.props);
240
+ node._nativeProps = value.props; node._nativeKey = value.props['data-native-id'];
241
+ patch(node, null, value.children, isSvg && value.type !== 'foreignObject');
242
+ }
243
+ while (parent.childNodes.length > list.length) parent.lastChild.remove();
244
+ }
245
+ function dispose(instance) { for (const callback of instance.disposers) callback(); }
246
+ export function disposeStalePages(activeKey) {
247
+ const stale=key=>key.startsWith('page:')&&key!==activeKey&&!key.startsWith(activeKey+'.');
248
+ for(const [id,instance] of instances)if(stale(id)){dispose(instance);instances.delete(id);}
249
+ for(const [id] of widgetStates)if(stale(id))widgetStates.delete(id);
250
+ }
251
+ export function render(vnode, root) {
252
+ epoch++;
253
+ portals = []; effects = [];
254
+ const tree = expand(vnode);
255
+ const overlayTrees = [];
256
+ for (let i = 0; i < portals.length; i++) overlayTrees.push(expand(portals[i].tree, portals[i].id + '.portal', portals[i].context));
257
+ patch(root, null, [tree, ...overlayTrees]);
258
+ for (const [id, instance] of instances) {
259
+ if (instance.epoch !== epoch) { dispose(instance); instances.delete(id); continue; }
260
+ if (instance.fresh) { instance.fresh = false; for (const callback of instance.mounted) callback(); }
261
+ else for (const callback of instance.updated) callback();
262
+ }
263
+ for (const effect of effects) effect();
264
+ }
@@ -0,0 +1,47 @@
1
+ import { h, defineWidget, afterRender } from './dom.js';
2
+ import { ref, reactive, unref, invalidate } from './state.js';
3
+ import { Input, TextArea, Select, InputNumber, Checkbox, Switch, attrs, uid } from './controls.js';
4
+
5
+ const get=(data,path)=>String(path).split('.').reduce((v,k)=>v?.[k],data);
6
+ const set=(data,path,value)=>{const parts=String(path).split('.');let target=data;for(const key of parts.slice(0,-1))target=target[key]??=( {} );target[parts.at(-1)]=value;};
7
+ export async function validateValue(value,rules){
8
+ for(const rule of unref(rules)||[]){
9
+ const missing=value===undefined||value===null||value===''||Array.isArray(value)&&!value.length;
10
+ if(rule.required&&missing||rule.whitespace&&typeof value==='string'&&!value.trim())return rule.message||'请填写此字段';
11
+ if(missing&&!rule.required)continue;
12
+ if(rule.type==='number'&&(typeof value!=='number'||!Number.isFinite(value)))return rule.message||'请输入有效数字';
13
+ if(rule.type==='array'&&!Array.isArray(value))return rule.message||'请选择有效内容';
14
+ if(rule.type==='url'){try{const u=new URL(value);if(!['http:','https:'].includes(u.protocol))throw Error();}catch{return rule.message||'请输入有效地址';}}
15
+ const length=typeof value==='number'?value:value?.length;
16
+ if(rule.min!==undefined&&length<rule.min||rule.max!==undefined&&length>rule.max)return rule.message||'输入超出范围';
17
+ if(rule.pattern&&!rule.pattern.test(String(value)))return rule.message||'输入格式不正确';
18
+ if(rule.validator){try{await rule.validator(rule,value);}catch(error){return error.message||rule.message||'校验未通过';}}
19
+ }
20
+ return '';
21
+ }
22
+ export function useForm(initial={},fields=[]){
23
+ const formData=reactive({...initial}),errors=reactive({}),api={formData,fields:ref(fields),errors,formRef:ref(null),setFormData:partial=>Object.assign(formData,partial)};
24
+ const validate=async()=>{let failed=false;for(const field of api.fields.value){if(unref(field.hidden))continue;const error=await validateValue(get(formData,field.path),field.rules);errors[field.path]=error;if(error)failed=true;}invalidate();if(failed){if(typeof document!=='undefined')queueMicrotask(()=>document.getElementById(api.name)?.querySelector('[aria-invalid="true"]')?.focus());throw Error('表单校验未通过');}return formData;};
25
+ api.formRef.value={validate,validateFields:validate,clearValidate:()=>{for(const k of Object.keys(errors))delete errors[k];},resetFields:()=>Object.assign(formData,initial)};
26
+ return api;
27
+ }
28
+ export const Form=defineWidget('Form',(p,s)=>h('form',{...attrs(p),class:['ant-form','ant-form-'+(p.layout||'horizontal'),'ant-form-css-var',p.class],style:p.style,__formApi:{...p.__formApi,disabled:p.disabled,layout:p.layout||'horizontal'},onSubmit:e=>{e.preventDefault();p.onFinish?.();},onKeydown:p.onKeydown},s.default?.()));
29
+ export const FormItem=defineWidget('FormItem',(p,s,ctx)=>{
30
+ const vertical=(p.layout||ctx.form?.layout)==='vertical',id=p.htmlFor||p.id;
31
+ return h('div',{class:['ant-form-item ant-form-css-var',vertical?'ant-form-item-vertical':'ant-form-item-horizontal',p.error&&'ant-form-item-has-error',p.class],style:p.style},h('div',{class:'ant-row ant-form-item-row'},[
32
+ p.label&&h('div',{class:'ant-col ant-form-item-label',style:p.labelCol?.style},h('label',{for:id,title:p.label,class:['ant-form-item-no-colon',p.required&&'ant-form-item-required']},p.label)),
33
+ h('div',{class:'ant-col ant-form-item-control',style:p.wrapperCol?.flex?{flex:p.wrapperCol.flex}:undefined},[h('div',{class:'ant-form-item-control-input'},h('div',{class:'ant-form-item-control-input-content'},s.default?.())),h('div',{class:'ant-form-item-additional'},[p.error&&h('div',{class:'ant-form-item-explain ant-form-item-explain-error',role:'alert'},p.error),p.extra&&h('div',{class:'ant-form-item-extra'},p.extra)])]),
34
+ ]));
35
+ });
36
+ const controls={'input':Input,'textarea':TextArea,'select':Select,'input-number':InputNumber,'checkbox':Checkbox,'switch':Switch};
37
+ export const ProForm=defineWidget('ProForm',(p,s,ctx)=>{
38
+ const form=p.form;form.name=p.name||uid(ctx.id);const fields=form.fields.value.filter(f=>!unref(f.hidden)),gutter=p.grid?.gutter??24;
39
+ const renderField=field=>{
40
+ const {path,label,rules,hidden,component,span,xs,sm,md,lg,extra,...options}=field,id=form.name+'_'+path;
41
+ const props={...Object.fromEntries(Object.entries(options).map(([k,v])=>[k,unref(v)])),id,style:{width:'100%',...options.style},value:get(form.formData,path),disabled:p.disabled||unref(field.disabled),allowClear:field.allowClear!==false,'aria-invalid':!!form.errors[path],'aria-required':(unref(rules)||[]).some(r=>r.required),'aria-label':label,'onUpdate:value':v=>{set(form.formData,path,v);if(form.errors[path])form.errors[path]='';},onBlur:async()=>{const value=get(form.formData,path),error=await validateValue(value,rules);if(Object.is(value,get(form.formData,path)))form.errors[path]=error;}};
42
+ const control=controls[component||'input'];if(!control)throw Error('Unknown native form component: '+component);
43
+ const content=h(FormItem,{label,htmlFor:id,required:(unref(rules)||[]).some(r=>r.required),error:form.errors[path],extra,labelCol:p.labelCol,wrapperCol:p.wrapperCol,layout:p.layout},()=>h(control,props));
44
+ return p.grid?h('div',{class:['ant-col','ant-col-'+(span||24),xs&&'ant-col-xs-'+xs,sm&&'ant-col-sm-'+sm,md&&'ant-col-md-'+md,lg&&'ant-col-lg-'+lg],style:{paddingLeft:gutter/2,paddingRight:gutter/2}},content):content;
45
+ };
46
+ return h(Form,{...p,id:form.name,name:form.name,class:['pro-form',p.class],__formApi:form},()=>[p.grid?h('div',{class:'ant-row',style:{marginLeft:-gutter/2,marginRight:-gutter/2}},fields.map(renderField)):fields.map(renderField),s.default?.()]);
47
+ });
@@ -0,0 +1,41 @@
1
+ import { h, defineWidget } from './dom.js';
2
+ const svg = node => h(node.tag, node.attrs || {}, (node.children || []).map(svg));
3
+ const icon = (name, data) => defineWidget(name, props => h('span', { class: ['anticon', 'anticon-' + data.name, props.class], role: 'img', 'aria-label': data.name, style: props.style }, svg({ ...data.icon, attrs: { ...data.icon.attrs, width: '1em', height: '1em', fill: 'currentColor', 'aria-hidden': 'true' } })));
4
+ export const DownOutlined = icon('DownOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},"name":"down","theme":"outlined"});
5
+ export const UpOutlined = icon('UpOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"}}]},"name":"up","theme":"outlined"});
6
+ export const LeftOutlined = icon('LeftOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"}}]},"name":"left","theme":"outlined"});
7
+ export const RightOutlined = icon('RightOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"}}]},"name":"right","theme":"outlined"});
8
+ export const CloseOutlined = icon('CloseOutlined', {"icon":{"tag":"svg","attrs":{"fill-rule":"evenodd","viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},"name":"close","theme":"outlined"});
9
+ export const CloseCircleOutlined = icon('CloseCircleOutlined', {"icon":{"tag":"svg","attrs":{"fill-rule":"evenodd","viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},"name":"close-circle","theme":"outlined"});
10
+ export const SearchOutlined = icon('SearchOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},"name":"search","theme":"outlined"});
11
+ export const LoadingOutlined = icon('LoadingOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"0 0 1024 1024","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},"name":"loading","theme":"outlined"});
12
+ export const CheckOutlined = icon('CheckOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},"name":"check","theme":"outlined"});
13
+ export const CheckCircleOutlined = icon('CheckCircleOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},"name":"check-circle","theme":"outlined"});
14
+ export const InfoCircleOutlined = icon('InfoCircleOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{"tag":"path","attrs":{"d":"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z"}}]},"name":"info-circle","theme":"outlined"});
15
+ export const ExclamationCircleOutlined = icon('ExclamationCircleOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{"tag":"path","attrs":{"d":"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},"name":"exclamation-circle","theme":"outlined"});
16
+ export const CheckCircleFilled = icon('CheckCircleFilled', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},"name":"check-circle","theme":"filled"});
17
+ export const InfoCircleFilled = icon('InfoCircleFilled', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},"name":"info-circle","theme":"filled"});
18
+ export const CloseCircleFilled = icon('CloseCircleFilled', {"icon":{"tag":"svg","attrs":{"fill-rule":"evenodd","viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},"name":"close-circle","theme":"filled"});
19
+ export const ExclamationCircleFilled = icon('ExclamationCircleFilled', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},"name":"exclamation-circle","theme":"filled"});
20
+ export const EditOutlined = icon('EditOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},"name":"edit","theme":"outlined"});
21
+ export const HistoryOutlined = icon('HistoryOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M536.1 273H488c-4.4 0-8 3.6-8 8v275.3c0 2.6 1.2 5 3.3 6.5l165.3 120.7c3.6 2.6 8.6 1.9 11.2-1.7l28.6-39c2.7-3.7 1.9-8.7-1.7-11.2L544.1 528.5V281c0-4.4-3.6-8-8-8zm219.8 75.2l156.8 38.3c5 1.2 9.9-2.6 9.9-7.7l.8-161.5c0-6.7-7.7-10.5-12.9-6.3L752.9 334.1a8 8 0 003 14.1zm167.7 301.1l-56.7-19.5a8 8 0 00-10.1 4.8c-1.9 5.1-3.9 10.1-6 15.1-17.8 42.1-43.3 80-75.9 112.5a353 353 0 01-112.5 75.9 352.18 352.18 0 01-137.7 27.8c-47.8 0-94.1-9.3-137.7-27.8a353 353 0 01-112.5-75.9c-32.5-32.5-58-70.4-75.9-112.5A353.44 353.44 0 01171 512c0-47.8 9.3-94.2 27.8-137.8 17.8-42.1 43.3-80 75.9-112.5a353 353 0 01112.5-75.9C430.6 167.3 477 158 524.8 158s94.1 9.3 137.7 27.8A353 353 0 01775 261.7c10.2 10.3 19.8 21 28.6 32.3l59.8-46.8C784.7 146.6 662.2 81.9 524.6 82 285 82.1 92.6 276.7 95 516.4 97.4 751.9 288.9 942 524.8 942c185.5 0 343.5-117.6 403.7-282.3 1.5-4.2-.7-8.9-4.9-10.4z"}}]},"name":"history","theme":"outlined"});
22
+ export const PlusOutlined = icon('PlusOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{"tag":"path","attrs":{"d":"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},"name":"plus","theme":"outlined"});
23
+ export const ReloadOutlined = icon('ReloadOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},"name":"reload","theme":"outlined"});
24
+ export const CommentOutlined = icon('CommentOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M573 421c-23.1 0-41 17.9-41 40s17.9 40 41 40c21.1 0 39-17.9 39-40s-17.9-40-39-40zm-280 0c-23.1 0-41 17.9-41 40s17.9 40 41 40c21.1 0 39-17.9 39-40s-17.9-40-39-40z"}},{"tag":"path","attrs":{"d":"M894 345a343.92 343.92 0 00-189-130v.1c-17.1-19-36.4-36.5-58-52.1-163.7-119-393.5-82.7-513 81-96.3 133-92.2 311.9 6 439l.8 132.6c0 3.2.5 6.4 1.5 9.4a31.95 31.95 0 0040.1 20.9L309 806c33.5 11.9 68.1 18.7 102.5 20.6l-.5.4c89.1 64.9 205.9 84.4 313 49l127.1 41.4c3.2 1 6.5 1.6 9.9 1.6 17.7 0 32-14.3 32-32V753c88.1-119.6 90.4-284.9 1-408zM323 735l-12-5-99 31-1-104-8-9c-84.6-103.2-90.2-251.9-11-361 96.4-132.2 281.2-161.4 413-66 132.2 96.1 161.5 280.6 66 412-80.1 109.9-223.5 150.5-348 102zm505-17l-8 10 1 104-98-33-12 5c-56 20.8-115.7 22.5-171 7l-.2-.1A367.31 367.31 0 00729 676c76.4-105.3 88.8-237.6 44.4-350.4l.6.4c23 16.5 44.1 37.1 62 62 72.6 99.6 68.5 235.2-8 330z"}},{"tag":"path","attrs":{"d":"M433 421c-23.1 0-41 17.9-41 40s17.9 40 41 40c21.1 0 39-17.9 39-40s-17.9-40-39-40z"}}]},"name":"comment","theme":"outlined"});
25
+ export const SettingOutlined = icon('SettingOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z"}}]},"name":"setting","theme":"outlined"});
26
+ export const ArrowUpOutlined = icon('ArrowUpOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}}]},"name":"arrow-up","theme":"outlined"});
27
+ export const ArrowDownOutlined = icon('ArrowDownOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z"}}]},"name":"arrow-down","theme":"outlined"});
28
+ export const DeleteOutlined = icon('DeleteOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},"name":"delete","theme":"outlined"});
29
+ export const MenuFoldOutlined = icon('MenuFoldOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 000 13.8z"}}]},"name":"menu-fold","theme":"outlined"});
30
+ export const MenuUnfoldOutlined = icon('MenuUnfoldOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 000-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0014.4 7z"}}]},"name":"menu-unfold","theme":"outlined"});
31
+ export const HomeOutlined = icon('HomeOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z"}}]},"name":"home","theme":"outlined"});
32
+ export const ProjectOutlined = icon('ProjectOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M280 752h80c4.4 0 8-3.6 8-8V280c0-4.4-3.6-8-8-8h-80c-4.4 0-8 3.6-8 8v464c0 4.4 3.6 8 8 8zm192-280h80c4.4 0 8-3.6 8-8V280c0-4.4-3.6-8-8-8h-80c-4.4 0-8 3.6-8 8v184c0 4.4 3.6 8 8 8zm192 72h80c4.4 0 8-3.6 8-8V280c0-4.4-3.6-8-8-8h-80c-4.4 0-8 3.6-8 8v256c0 4.4 3.6 8 8 8zm216-432H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},"name":"project","theme":"outlined"});
33
+ export const AppstoreOutlined = icon('AppstoreOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z"}}]},"name":"appstore","theme":"outlined"});
34
+ export const SafetyCertificateOutlined = icon('SafetyCertificateOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M866.9 169.9L527.1 54.1C523 52.7 517.5 52 512 52s-11 .7-15.1 2.1L157.1 169.9c-8.3 2.8-15.1 12.4-15.1 21.2v482.4c0 8.8 5.7 20.4 12.6 25.9L499.3 968c3.5 2.7 8 4.1 12.6 4.1s9.2-1.4 12.6-4.1l344.7-268.6c6.9-5.4 12.6-17 12.6-25.9V191.1c.2-8.8-6.6-18.3-14.9-21.2zM810 654.3L512 886.5 214 654.3V226.7l298-101.6 298 101.6v427.6zm-405.8-201c-3-4.1-7.8-6.6-13-6.6H336c-6.5 0-10.3 7.4-6.5 12.7l126.4 174a16.1 16.1 0 0026 0l212.6-292.7c3.8-5.3 0-12.7-6.5-12.7h-55.2c-5.1 0-10 2.5-13 6.6L468.9 542.4l-64.7-89.1z"}}]},"name":"safety-certificate","theme":"outlined"});
35
+ export const RocketOutlined = icon('RocketOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M864 736c0-111.6-65.4-208-160-252.9V317.3c0-15.1-5.3-29.7-15.1-41.2L536.5 95.4C530.1 87.8 521 84 512 84s-18.1 3.8-24.5 11.4L335.1 276.1a63.97 63.97 0 00-15.1 41.2v165.8C225.4 528 160 624.4 160 736h156.5c-2.3 7.2-3.5 15-3.5 23.8 0 22.1 7.6 43.7 21.4 60.8a97.2 97.2 0 0043.1 30.6c23.1 54 75.6 88.8 134.5 88.8 29.1 0 57.3-8.6 81.4-24.8 23.6-15.8 41.9-37.9 53-64a97 97 0 0043.1-30.5 97.52 97.52 0 0021.4-60.8c0-8.4-1.1-16.4-3.1-23.8H864zM762.3 621.4c9.4 14.6 17 30.3 22.5 46.6H700V558.7a211.6 211.6 0 0162.3 62.7zM388 483.1V318.8l124-147 124 147V668H388V483.1zM239.2 668c5.5-16.3 13.1-32 22.5-46.6 16.3-25.2 37.5-46.5 62.3-62.7V668h-84.8zm388.9 116.2c-5.2 3-11.2 4.2-17.1 3.4l-19.5-2.4-2.8 19.4c-5.4 37.9-38.4 66.5-76.7 66.5-38.3 0-71.3-28.6-76.7-66.5l-2.8-19.5-19.5 2.5a27.7 27.7 0 01-17.1-3.5c-8.7-5-14.1-14.3-14.1-24.4 0-10.6 5.9-19.4 14.6-23.8h231.3c8.8 4.5 14.6 13.3 14.6 23.8-.1 10.2-5.5 19.6-14.2 24.5zM464 400a48 48 0 1096 0 48 48 0 10-96 0z"}}]},"name":"rocket","theme":"outlined"});
36
+ export const FundProjectionScreenOutlined = icon('FundProjectionScreenOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M312.1 591.5c3.1 3.1 8.2 3.1 11.3 0l101.8-101.8 86.1 86.2c3.1 3.1 8.2 3.1 11.3 0l226.3-226.5c3.1-3.1 3.1-8.2 0-11.3l-36.8-36.8a8.03 8.03 0 00-11.3 0L517 485.3l-86.1-86.2a8.03 8.03 0 00-11.3 0L275.3 543.4a8.03 8.03 0 000 11.3l36.8 36.8z"}},{"tag":"path","attrs":{"d":"M904 160H548V96c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H120c-17.7 0-32 14.3-32 32v520c0 17.7 14.3 32 32 32h356.4v32L311.6 884.1a7.92 7.92 0 00-2.3 11l30.3 47.2v.1c2.4 3.7 7.4 4.7 11.1 2.3L512 838.9l161.3 105.8c3.7 2.4 8.7 1.4 11.1-2.3v-.1l30.3-47.2a8 8 0 00-2.3-11L548 776.3V744h356c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 512H160V232h704v440z"}}]},"name":"fund-projection-screen","theme":"outlined"});
37
+ export const AuditOutlined = icon('AuditOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M296 250c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H296zm184 144H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm-48 458H208V148h560v320c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V108c0-17.7-14.3-32-32-32H168c-17.7 0-32 14.3-32 32v784c0 17.7 14.3 32 32 32h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm440-88H728v-36.6c46.3-13.8 80-56.6 80-107.4 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 50.7 33.7 93.6 80 107.4V764H520c-8.8 0-16 7.2-16 16v152c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16V780c0-8.8-7.2-16-16-16zM646 620c0-27.6 22.4-50 50-50s50 22.4 50 50-22.4 50-50 50-50-22.4-50-50zm180 266H566v-60h260v60z"}}]},"name":"audit","theme":"outlined"});
38
+ export const TeamOutlined = icon('TeamOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M824.2 699.9a301.55 301.55 0 00-86.4-60.4C783.1 602.8 812 546.8 812 484c0-110.8-92.4-201.7-203.2-200-109.1 1.7-197 90.6-197 200 0 62.8 29 118.8 74.2 155.5a300.95 300.95 0 00-86.4 60.4C345 754.6 314 826.8 312 903.8a8 8 0 008 8.2h56c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5A226.62 226.62 0 01612 684c60.9 0 118.2 23.7 161.3 66.8C814.5 792 838 846.3 840 904.3c.1 4.3 3.7 7.7 8 7.7h56a8 8 0 008-8.2c-2-77-33-149.2-87.8-203.9zM612 612c-34.2 0-66.4-13.3-90.5-37.5a126.86 126.86 0 01-37.5-91.8c.3-32.8 13.4-64.5 36.3-88 24-24.6 56.1-38.3 90.4-38.7 33.9-.3 66.8 12.9 91 36.6 24.8 24.3 38.4 56.8 38.4 91.4 0 34.2-13.3 66.3-37.5 90.5A127.3 127.3 0 01612 612zM361.5 510.4c-.9-8.7-1.4-17.5-1.4-26.4 0-15.9 1.5-31.4 4.3-46.5.7-3.6-1.2-7.3-4.5-8.8-13.6-6.1-26.1-14.5-36.9-25.1a127.54 127.54 0 01-38.7-95.4c.9-32.1 13.8-62.6 36.3-85.6 24.7-25.3 57.9-39.1 93.2-38.7 31.9.3 62.7 12.6 86 34.4 7.9 7.4 14.7 15.6 20.4 24.4 2 3.1 5.9 4.4 9.3 3.2 17.6-6.1 36.2-10.4 55.3-12.4 5.6-.6 8.8-6.6 6.3-11.6-32.5-64.3-98.9-108.7-175.7-109.9-110.9-1.7-203.3 89.2-203.3 199.9 0 62.8 28.9 118.8 74.2 155.5-31.8 14.7-61.1 35-86.5 60.4-54.8 54.7-85.8 126.9-87.8 204a8 8 0 008 8.2h56.1c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5 29.4-29.4 65.4-49.8 104.7-59.7 3.9-1 6.5-4.7 6-8.7z"}}]},"name":"team","theme":"outlined"});
39
+ export const ArrowRightOutlined = icon('ArrowRightOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M869 487.8L491.2 159.9c-2.9-2.5-6.6-3.9-10.5-3.9h-88.5c-7.4 0-10.8 9.2-5.2 14l350.2 304H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h585.1L386.9 854c-5.6 4.9-2.2 14 5.2 14h91.5c1.9 0 3.8-.7 5.2-2L869 536.2a32.07 32.07 0 000-48.4z"}}]},"name":"arrow-right","theme":"outlined"});
40
+ export const CheckSquareOutlined = icon('CheckSquareOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M433.1 657.7a31.8 31.8 0 0051.7 0l210.6-292c3.8-5.3 0-12.7-6.5-12.7H642c-10.2 0-19.9 4.9-25.9 13.3L459 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H315c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8z"}},{"tag":"path","attrs":{"d":"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},"name":"check-square","theme":"outlined"});
41
+ export const NotificationOutlined = icon('NotificationOutlined', {"icon":{"tag":"svg","attrs":{"viewBox":"64 64 896 896","focusable":"false"},"children":[{"tag":"path","attrs":{"d":"M880 112c-3.8 0-7.7.7-11.6 2.3L292 345.9H128c-8.8 0-16 7.4-16 16.6v299c0 9.2 7.2 16.6 16 16.6h101.7c-3.7 11.6-5.7 23.9-5.7 36.4 0 65.9 53.8 119.5 120 119.5 55.4 0 102.1-37.6 115.9-88.4l408.6 164.2c3.9 1.5 7.8 2.3 11.6 2.3 16.9 0 32-14.2 32-33.2V145.2C912 126.2 897 112 880 112zM344 762.3c-26.5 0-48-21.4-48-47.8 0-11.2 3.9-21.9 11-30.4l84.9 34.1c-2 24.6-22.7 44.1-47.9 44.1zm496 58.4L318.8 611.3l-12.9-5.2H184V417.9h121.9l12.9-5.2L840 203.3v617.4z"}}]},"name":"notification","theme":"outlined"});