@qijenchen/design-system 0.1.0-beta.93 → 0.1.0-beta.96

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 (578) hide show
  1. package/AGENTS.md +6 -208
  2. package/CLAUDE.md +2 -23
  3. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  4. package/dist/components/Calendar/calendar.js +47 -23
  5. package/dist/components/Calendar/calendar.js.map +1 -1
  6. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  7. package/dist/components/DataTable/cell-registry.js +1 -5
  8. package/dist/components/DataTable/cell-registry.js.map +1 -1
  9. package/dist/components/DataTable/data-table-filter-value-picker.js +4 -0
  10. package/dist/components/DataTable/data-table-filter-value-picker.js.map +1 -1
  11. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  12. package/dist/components/DataTable/data-table.js +3 -2
  13. package/dist/components/DataTable/data-table.js.map +1 -1
  14. package/dist/components/DataTable/filter-tree.js +6 -0
  15. package/dist/components/DataTable/filter-tree.js.map +1 -1
  16. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  17. package/dist/components/DatePicker/date-picker.js +183 -156
  18. package/dist/components/DatePicker/date-picker.js.map +1 -1
  19. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  20. package/dist/components/Dialog/dialog.js +4 -2
  21. package/dist/components/Dialog/dialog.js.map +1 -1
  22. package/dist/components/Field/field-context.d.ts +12 -0
  23. package/dist/components/Field/field-context.d.ts.map +1 -1
  24. package/dist/components/Field/field-context.js +10 -1
  25. package/dist/components/Field/field-context.js.map +1 -1
  26. package/dist/components/Field/field-wrapper.d.ts.map +1 -1
  27. package/dist/components/Field/field-wrapper.js +7 -1
  28. package/dist/components/Field/field-wrapper.js.map +1 -1
  29. package/dist/components/Field/field.d.ts.map +1 -1
  30. package/dist/components/Field/field.js +11 -2
  31. package/dist/components/Field/field.js.map +1 -1
  32. package/dist/components/InlineEdit/inline-edit.d.ts +5 -0
  33. package/dist/components/InlineEdit/inline-edit.d.ts.map +1 -1
  34. package/dist/components/InlineEdit/inline-edit.js +65 -33
  35. package/dist/components/InlineEdit/inline-edit.js.map +1 -1
  36. package/dist/components/Input/input.d.ts.map +1 -1
  37. package/dist/components/Input/input.js +3 -2
  38. package/dist/components/Input/input.js.map +1 -1
  39. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  40. package/dist/components/LinkInput/link-input.js +2 -1
  41. package/dist/components/LinkInput/link-input.js.map +1 -1
  42. package/dist/components/Popover/popover.d.ts.map +1 -1
  43. package/dist/components/Popover/popover.js +4 -2
  44. package/dist/components/Popover/popover.js.map +1 -1
  45. package/dist/components/Select/select.d.ts.map +1 -1
  46. package/dist/components/Select/select.js +59 -37
  47. package/dist/components/Select/select.js.map +1 -1
  48. package/dist/components/Textarea/textarea.d.ts +11 -0
  49. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  50. package/dist/components/Textarea/textarea.js +22 -5
  51. package/dist/components/Textarea/textarea.js.map +1 -1
  52. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  53. package/dist/components/TimePicker/time-picker.js +4 -3
  54. package/dist/components/TimePicker/time-picker.js.map +1 -1
  55. package/dist/patterns/element-anatomy/item-anatomy.d.ts +9 -0
  56. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  57. package/dist/patterns/element-anatomy/item-anatomy.js +71 -27
  58. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  59. package/ds-canonical/adapters/claude/agents/README.md +58 -0
  60. package/ds-canonical/adapters/claude/agents/canonical-reviewer.md +14 -0
  61. package/ds-canonical/adapters/claude-root-instructions.md +24 -0
  62. package/ds-canonical/adapters/claude-settings-base.json +172 -0
  63. package/ds-canonical/commands/README.md +8 -13
  64. package/ds-canonical/commands/gov-status.md +5 -75
  65. package/ds-canonical/fork/AGENTS.md +116 -213
  66. package/ds-canonical/fork/CLAUDE.md +54 -0
  67. package/ds-canonical/fork/codex/agents/skills/bug-fix-rhythm/SKILL.md +207 -0
  68. package/ds-canonical/fork/codex/agents/skills/code-quality-audit/SKILL.md +71 -0
  69. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/SKILL.md +244 -0
  70. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/flow-diagram.md +180 -0
  71. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/handoff-template.md +177 -0
  72. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  73. package/ds-canonical/fork/codex/agents/skills/independent-review/SKILL.md +29 -19
  74. package/ds-canonical/fork/codex/agents/skills/independent-review/agents/openai.yaml +4 -0
  75. package/ds-canonical/fork/codex/agents/skills/independent-review/references/evidence-contract.md +24 -0
  76. package/ds-canonical/fork/codex/agents/skills/performance-audit/SKILL.md +114 -0
  77. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/SKILL.md +244 -0
  78. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/audit-checks.md +250 -0
  79. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/common-misuses.md +329 -0
  80. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/report-template.md +163 -0
  81. package/ds-canonical/fork/codex/agents/skills/propose-options/SKILL.md +190 -0
  82. package/ds-canonical/fork/codex/agents/skills/prototype/SKILL.md +246 -0
  83. package/ds-canonical/fork/codex/agents/skills/prototype/references/audit-checks.md +39 -0
  84. package/ds-canonical/fork/codex/agents/skills/prototype/references/benchmark-sources.md +94 -0
  85. package/ds-canonical/fork/codex/agents/skills/prototype/references/checkpoints.md +200 -0
  86. package/ds-canonical/fork/codex/agents/skills/prototype/references/evaluation-matrix.md +142 -0
  87. package/ds-canonical/fork/codex/agents/skills/prototype/references/ooux-template.md +198 -0
  88. package/ds-canonical/fork/codex/agents/skills/prototype/references/proposal-template.md +230 -0
  89. package/ds-canonical/fork/codex/agents/skills/scan-similar-bugs/SKILL.md +212 -0
  90. package/ds-canonical/fork/codex/agents/skills/ux-audit/SKILL.md +135 -0
  91. package/ds-canonical/fork/codex/agents/skills/visual-audit/SKILL.md +259 -0
  92. package/ds-canonical/fork/codex/agents/skills/visual-audit/output/.gitkeep +0 -0
  93. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/audit-architecture.md +101 -0
  94. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/visual-checklist.md +297 -0
  95. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  96. package/ds-canonical/fork/codex/hooks.json +44 -3
  97. package/ds-canonical/fork/common/closed-tool-execution.mjs +1001 -0
  98. package/ds-canonical/fork/common/instruction.md +116 -0
  99. package/ds-canonical/fork/consumer/governance-check.mjs +3059 -0
  100. package/ds-canonical/fork/consumer/lib/closed-tool-execution.mjs +1001 -0
  101. package/ds-canonical/fork/consumer/lock.json +189 -0
  102. package/ds-canonical/fork/consumer/lock.schema.json +338 -0
  103. package/ds-canonical/fork/consumer/managed-files/0235cf6b3fd402a3717881dc205b5bf77aed7632e7d7d6f1811a40e3033bd816.blob +145 -0
  104. package/ds-canonical/fork/consumer/managed-files/145aab4b4fc470fc9ba7679b4a1d87d4f6a6d604940bd40f8d675c8af696498f.blob +47 -0
  105. package/ds-canonical/fork/consumer/managed-files/189e551431181e4a88783c02130d2787b801ef731c86e35bcde89a7313aa020e.blob +149 -0
  106. package/ds-canonical/fork/consumer/managed-files/24ad71c8613ddcf6fd23818cb3bb477a1fb6d83af4550b0bad43099813088686.blob +28 -0
  107. package/ds-canonical/fork/consumer/managed-files/2d1ef5617a5ce3c39ad9aae1c42af7d199f9270c0a0ccb490b63d62dbc6913db.blob +1001 -0
  108. package/ds-canonical/fork/consumer/managed-files/3625e02235cf166a50649a4d704cfb68fead69d0e168c481df013ebae9f6be25.blob +1412 -0
  109. package/ds-canonical/fork/consumer/managed-files/3ddedc67b464bdfe3dde9803a2d917920c96d633678b802eee638a44cd47366a.blob +8 -0
  110. package/ds-canonical/fork/consumer/managed-files/423729840acdd43c812f17c245b871716c6b60f76e4d3e94864d0e34a815bf8d.blob +348 -0
  111. package/ds-canonical/fork/consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob +464 -0
  112. package/ds-canonical/fork/consumer/managed-files/475fba657eaeb8abd88f60635f3eadab27a9d0d3114ba4fffc65f43a2a0fe6e2.blob +124 -0
  113. package/ds-canonical/fork/consumer/managed-files/61c6aca6d7f04bedbf556eaa9d3043681fe48cbe0e93a8ccb1d69a7c5e23fdcf.blob +113 -0
  114. package/ds-canonical/fork/consumer/managed-files/63061e05969667005020166ea2ae7df3c96663f7a928e7dd3eebc1471022df56.blob +2398 -0
  115. package/ds-canonical/fork/consumer/managed-files/65410b66e8799a560e07b71779c186fed2a0ef50575ac44745df7a0938a9c2b4.blob +317 -0
  116. package/ds-canonical/fork/consumer/managed-files/6929a3c8bb4d69c507720b4754aeb339c6cbb8ff655e0a381d76606d64695e38.blob +393 -0
  117. package/ds-canonical/fork/consumer/managed-files/6b746628ac11fcccbe277ef6fea94cc2a7b90ea2822e83536eae80d5ee4b3fa5.blob +167 -0
  118. package/ds-canonical/fork/consumer/managed-files/76d485470d30ff014afacf7ce643763de9f4f956d9fc8128dbc1814774cf2e63.blob +671 -0
  119. package/ds-canonical/fork/consumer/managed-files/77e06f62670dfee01e9b5e8b0f8dad085ce711d75538c1fb0679d9818acaca82.blob +424 -0
  120. package/ds-canonical/fork/consumer/managed-files/7937321877e5c34c27dae36c0d507d21cd42fa3f46a8f11a284b8b4a52b6faa4.blob +84 -0
  121. package/ds-canonical/fork/consumer/managed-files/794bb911ba8ebef58ab0d44a55b9968a19d2c62bcfb310b1ee3a84166f087f21.blob +880 -0
  122. package/ds-canonical/fork/consumer/managed-files/7b17835d0ceb17cdcdcaf930540a3e5d0943a34a747ac43c12ca8cd485c11581.blob +44 -0
  123. package/ds-canonical/fork/consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob +778 -0
  124. package/ds-canonical/fork/consumer/managed-files/81037efa5b3b9f4a875704005fb268acdc9233bb901f44902e4e37e1da92b8e3.blob +46 -0
  125. package/ds-canonical/fork/consumer/managed-files/884721550b56308812b20917adac7a12f36fdb4ecda6b02460a7f5a219c0c966.blob +78 -0
  126. package/ds-canonical/fork/consumer/managed-files/91f414b9462ddc1e4be1d4c6ca4ac7a7340a6eec9e98ee109cbc049d3b354b6a.blob +36 -0
  127. package/ds-canonical/fork/consumer/managed-files/92e4828cdcb96ff0d01daa16f6885f24045a8e72820665650f2a1890dc3a446c.blob +121 -0
  128. package/ds-canonical/fork/consumer/managed-files/93a89f16f6717d1e4e4e27ec20ef916e3355c7aa890ca74cd9b12db30d8a899f.blob +43 -0
  129. package/ds-canonical/fork/consumer/managed-files/974521d6b8fe796ea4c58b3c78b0c2b8a1be262b97100d77aaf4cc9c7724bcab.blob +45 -0
  130. package/ds-canonical/fork/consumer/managed-files/9791c85388d2e2e2bd564e2550fadc3351c4c960a47ce838098afcba7544eb90.blob +959 -0
  131. package/ds-canonical/fork/consumer/managed-files/a448d2222133335c30e6fda5116e26a40db3283a19d62ccc0663c30d272262a7.blob +174 -0
  132. package/ds-canonical/fork/consumer/managed-files/ab072e7f2eca51f0e18a5e18c4b333260ee5d219a12cc6df5bb2d683f0b2734d.blob +2636 -0
  133. package/ds-canonical/fork/consumer/managed-files/bc44cabad181f766611dab6a8f52d81100afadd50ac59799015e8ba7bf46d9eb.blob +596 -0
  134. package/ds-canonical/fork/consumer/managed-files/c4aa767f11714467de0038a2149cf78074baddc17fc6a9e074b6aed7544c6f3c.blob +80 -0
  135. package/ds-canonical/fork/consumer/managed-files/c893e9b734b162f4c631fef871128c16a9ab565f796a0e76d7f320f821f220f5.blob +41 -0
  136. package/ds-canonical/fork/consumer/managed-files/cd9c61f8ff24fb9bcc3663e346e2cfa419cfb84e02aae18d3dc66dd192681696.blob +9 -0
  137. package/ds-canonical/fork/consumer/managed-files/da2ad2737315d25a5300905ddefd62f1695056a8a1af155c5b34170ad9923bce.blob +38 -0
  138. package/ds-canonical/fork/consumer/managed-files/e1b11160d6c4043002d2cbff6d9a4ae551698a96137773c4244dadfac152fcb0.blob +222 -0
  139. package/ds-canonical/fork/consumer/managed-files/e26057408661597aac4a57cdf7e30e2f9d0afb1b9a2dbbb692c3805cd9028ca5.blob +250 -0
  140. package/ds-canonical/fork/consumer/managed-files/e68ae1915965d8e17d4b2441c00c2b97fe062ea308ae8535c9eebb2fc16fa245.blob +20 -0
  141. package/ds-canonical/fork/consumer/managed-files/e71c65f45c6af7ce12b6b3c0d8028f185da5b719e2050c9b2a6b243d41ae4878.blob +182 -0
  142. package/ds-canonical/fork/consumer/managed-files/e813096d69c49812e40e00be9ac8fa14d77f0ec1f97ab4c45cb096b3bedd35de.blob +3 -0
  143. package/ds-canonical/fork/consumer/managed-files/e930ebca6fd8eeb30802aac0930efae7bcc44cc0996f24de07c11ca6a081fedf.blob +277 -0
  144. package/ds-canonical/fork/consumer/managed-files/ea94e914d5c8acb84ad7660e5bda0f01b6ccc8cf96b0f6b1ce048f8938d0f5b5.blob +47 -0
  145. package/ds-canonical/fork/consumer/managed-files/f4db6e616d5229aa7e700c6a3ace022cb9d90baae74e38ca65fce617f18e0d9b.blob +110 -0
  146. package/ds-canonical/fork/consumer/managed-files/faa128c26102415dc5345e68698efbbd28a395c35ee278dceae044cf430692b2.blob +11 -0
  147. package/ds-canonical/fork/governance.lock +1552 -103
  148. package/ds-canonical/fork/hooks/_log-fire.sh +109 -12
  149. package/ds-canonical/fork/hooks/block_prototype_imports.py +148 -29
  150. package/ds-canonical/fork/hooks/check_chrome_header_avatar_canonical.sh +23 -12
  151. package/ds-canonical/fork/hooks/check_consumer_app_invariants.sh +116 -65
  152. package/ds-canonical/fork/hooks/check_consumer_code_quality.sh +140 -0
  153. package/ds-canonical/fork/hooks/check_ds_anchor_preflight.sh +84 -30
  154. package/ds-canonical/fork/hooks/check_dynamic_tailwind_class.sh +16 -6
  155. package/ds-canonical/fork/hooks/check_escape_marker_abuse.sh +65 -21
  156. package/ds-canonical/fork/hooks/check_field_family_invariants.sh +90 -24
  157. package/ds-canonical/fork/hooks/check_fork_product_quality.sh +8 -6
  158. package/ds-canonical/fork/hooks/check_item_list_gap.sh +4 -2
  159. package/ds-canonical/fork/hooks/check_layout_space_magic_numbers.sh +31 -13
  160. package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +220 -95
  161. package/ds-canonical/fork/hooks/check_pattern_invariants.sh +73 -14
  162. package/ds-canonical/fork/hooks/check_sidebar_menu_button_implicit_wrap.sh +23 -12
  163. package/ds-canonical/fork/hooks/check_story_determinism.sh +1 -1
  164. package/ds-canonical/fork/hooks/check_story_invariants.sh +342 -61
  165. package/ds-canonical/fork/hooks/check_tabs_content_chrome_body_double_gap.sh +52 -23
  166. package/ds-canonical/fork/hooks/check_tailwind_wildcard_in_docs.sh +20 -13
  167. package/ds-canonical/fork/hooks/inject_deploy_url_after_push.sh +105 -22
  168. package/ds-canonical/fork/hooks/lib/_hook_integrity.sh +158 -0
  169. package/ds-canonical/fork/hooks/lib/_provider_paths.sh +162 -0
  170. package/ds-canonical/fork/launchers/approval-evidence.mjs +1131 -0
  171. package/ds-canonical/fork/launchers/authority-decision-evidence.mjs +413 -0
  172. package/ds-canonical/fork/launchers/canonical-order.mjs +8 -0
  173. package/ds-canonical/fork/launchers/fork-governance-dispatcher.sh +139 -29
  174. package/ds-canonical/fork/launchers/format-provider-hook-output.mjs +25 -0
  175. package/ds-canonical/fork/launchers/independent-review.mjs +490 -0
  176. package/ds-canonical/fork/launchers/inject_fork_governance_preamble.sh +88 -43
  177. package/ds-canonical/fork/launchers/normalize-provider-event.mjs +355 -0
  178. package/ds-canonical/fork/launchers/product-hook-dispatch-runtime.mjs +1067 -0
  179. package/ds-canonical/fork/launchers/provider-hook-normalization.mjs +1646 -0
  180. package/ds-canonical/fork/launchers/provider-hook-output-transport.mjs +525 -0
  181. package/ds-canonical/fork/launchers/settings-hooks.json +30 -53
  182. package/ds-canonical/fork/manifest.json +1881 -23
  183. package/ds-canonical/fork/providers/claude/hook-config.json +333 -0
  184. package/ds-canonical/fork/providers/claude/instruction.md +54 -0
  185. package/ds-canonical/fork/providers/claude/skills/bug-fix-rhythm/SKILL.md +207 -0
  186. package/ds-canonical/fork/providers/claude/skills/code-quality-audit/SKILL.md +71 -0
  187. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/SKILL.md +244 -0
  188. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/flow-diagram.md +180 -0
  189. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/handoff-template.md +177 -0
  190. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  191. package/ds-canonical/fork/providers/claude/skills/independent-review/SKILL.md +43 -0
  192. package/ds-canonical/fork/providers/claude/skills/independent-review/agents/openai.yaml +4 -0
  193. package/ds-canonical/fork/providers/claude/skills/independent-review/references/evidence-contract.md +24 -0
  194. package/ds-canonical/fork/providers/claude/skills/performance-audit/SKILL.md +114 -0
  195. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/SKILL.md +244 -0
  196. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/audit-checks.md +250 -0
  197. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/common-misuses.md +329 -0
  198. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/report-template.md +163 -0
  199. package/ds-canonical/fork/providers/claude/skills/propose-options/SKILL.md +190 -0
  200. package/ds-canonical/fork/providers/claude/skills/prototype/SKILL.md +246 -0
  201. package/ds-canonical/fork/providers/claude/skills/prototype/references/audit-checks.md +39 -0
  202. package/ds-canonical/fork/providers/claude/skills/prototype/references/benchmark-sources.md +94 -0
  203. package/ds-canonical/fork/providers/claude/skills/prototype/references/checkpoints.md +200 -0
  204. package/ds-canonical/fork/providers/claude/skills/prototype/references/evaluation-matrix.md +142 -0
  205. package/ds-canonical/fork/providers/claude/skills/prototype/references/ooux-template.md +198 -0
  206. package/ds-canonical/fork/providers/claude/skills/prototype/references/proposal-template.md +230 -0
  207. package/ds-canonical/fork/providers/claude/skills/scan-similar-bugs/SKILL.md +212 -0
  208. package/ds-canonical/fork/providers/claude/skills/ux-audit/SKILL.md +135 -0
  209. package/ds-canonical/fork/providers/claude/skills/visual-audit/SKILL.md +259 -0
  210. package/ds-canonical/fork/providers/claude/skills/visual-audit/output/.gitkeep +0 -0
  211. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/audit-architecture.md +101 -0
  212. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/visual-checklist.md +297 -0
  213. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  214. package/ds-canonical/fork/providers/codex/hook-config.json +57 -0
  215. package/ds-canonical/fork/providers/codex/skills/bug-fix-rhythm/SKILL.md +207 -0
  216. package/ds-canonical/fork/providers/codex/skills/code-quality-audit/SKILL.md +71 -0
  217. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/SKILL.md +244 -0
  218. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/flow-diagram.md +180 -0
  219. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/handoff-template.md +177 -0
  220. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  221. package/ds-canonical/fork/providers/codex/skills/independent-review/SKILL.md +43 -0
  222. package/ds-canonical/fork/providers/codex/skills/independent-review/agents/openai.yaml +4 -0
  223. package/ds-canonical/fork/providers/codex/skills/independent-review/references/evidence-contract.md +24 -0
  224. package/ds-canonical/fork/providers/codex/skills/performance-audit/SKILL.md +114 -0
  225. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/SKILL.md +244 -0
  226. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/audit-checks.md +250 -0
  227. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/common-misuses.md +329 -0
  228. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/report-template.md +163 -0
  229. package/ds-canonical/fork/providers/codex/skills/propose-options/SKILL.md +190 -0
  230. package/ds-canonical/fork/providers/codex/skills/prototype/SKILL.md +246 -0
  231. package/ds-canonical/fork/providers/codex/skills/prototype/references/audit-checks.md +39 -0
  232. package/ds-canonical/fork/providers/codex/skills/prototype/references/benchmark-sources.md +94 -0
  233. package/ds-canonical/fork/providers/codex/skills/prototype/references/checkpoints.md +200 -0
  234. package/ds-canonical/fork/providers/codex/skills/prototype/references/evaluation-matrix.md +142 -0
  235. package/ds-canonical/fork/providers/codex/skills/prototype/references/ooux-template.md +198 -0
  236. package/ds-canonical/fork/providers/codex/skills/prototype/references/proposal-template.md +230 -0
  237. package/ds-canonical/fork/providers/codex/skills/scan-similar-bugs/SKILL.md +212 -0
  238. package/ds-canonical/fork/providers/codex/skills/ux-audit/SKILL.md +135 -0
  239. package/ds-canonical/fork/providers/codex/skills/visual-audit/SKILL.md +259 -0
  240. package/ds-canonical/fork/providers/codex/skills/visual-audit/output/.gitkeep +0 -0
  241. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/audit-architecture.md +101 -0
  242. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/visual-checklist.md +297 -0
  243. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  244. package/ds-canonical/fork/references/story-baseline-registry.json +117 -0
  245. package/ds-canonical/fork/references/story-baseline-registry.schema.json +145 -0
  246. package/ds-canonical/fork/references/utility-registry.json +377 -0
  247. package/ds-canonical/fork/references/utility-registry.schema.json +373 -0
  248. package/ds-canonical/fork/review/canonical-order.mjs +8 -0
  249. package/ds-canonical/fork/review/provider-review-binding.mjs +2377 -0
  250. package/ds-canonical/fork/skills/bug-fix-rhythm/SKILL.md +19 -12
  251. package/ds-canonical/fork/skills/code-quality-audit/SKILL.md +19 -15
  252. package/ds-canonical/fork/skills/delivery-handoff/SKILL.md +17 -11
  253. package/ds-canonical/fork/skills/independent-review/SKILL.md +37 -0
  254. package/ds-canonical/fork/skills/independent-review/agents/openai.yaml +4 -0
  255. package/ds-canonical/fork/skills/independent-review/references/evidence-contract.md +24 -0
  256. package/ds-canonical/fork/skills/performance-audit/SKILL.md +11 -8
  257. package/ds-canonical/fork/skills/product-ui-audit/SKILL.md +31 -21
  258. package/ds-canonical/fork/skills/product-ui-audit/references/audit-checks.md +9 -5
  259. package/ds-canonical/fork/skills/product-ui-audit/references/report-template.md +30 -26
  260. package/ds-canonical/fork/skills/propose-options/SKILL.md +6 -4
  261. package/ds-canonical/fork/skills/prototype/SKILL.md +21 -21
  262. package/ds-canonical/fork/skills/prototype/references/audit-checks.md +7 -6
  263. package/ds-canonical/fork/skills/prototype/references/checkpoints.md +26 -17
  264. package/ds-canonical/fork/skills/prototype/references/evaluation-matrix.md +2 -1
  265. package/ds-canonical/fork/skills/prototype/references/ooux-template.md +1 -1
  266. package/ds-canonical/fork/skills/prototype/references/proposal-template.md +6 -5
  267. package/ds-canonical/fork/skills/scan-similar-bugs/SKILL.md +28 -27
  268. package/ds-canonical/fork/skills/ux-audit/SKILL.md +8 -5
  269. package/ds-canonical/fork/skills/visual-audit/SKILL.md +37 -43
  270. package/ds-canonical/fork/skills/visual-audit/references/audit-architecture.md +15 -15
  271. package/ds-canonical/fork/skills/visual-audit/references/visual-checklist.md +6 -6
  272. package/ds-canonical/fork/skills/visual-audit/references/world-class-benchmarks.md +2 -2
  273. package/ds-canonical/hooks/README.md +37 -23
  274. package/ds-canonical/hooks/_log-fire.sh +109 -12
  275. package/ds-canonical/hooks/auto_regen_ds_barrel.sh +52 -20
  276. package/ds-canonical/hooks/block_prototype_imports.py +148 -29
  277. package/ds-canonical/hooks/check_audit_post_report_validator.sh +76 -66
  278. package/ds-canonical/hooks/check_audit_sample_escape.sh +4 -4
  279. package/ds-canonical/hooks/check_benchmark_citation.sh +3 -3
  280. package/ds-canonical/hooks/check_canonical_propagation.sh +81 -22
  281. package/ds-canonical/hooks/check_chrome_header_avatar_canonical.sh +22 -11
  282. package/ds-canonical/hooks/check_codex_brief_invariants.sh +100 -56
  283. package/ds-canonical/hooks/check_codex_collab_5step.sh +31 -25
  284. package/ds-canonical/hooks/check_consumer_app_invariants.sh +116 -65
  285. package/ds-canonical/hooks/check_consumer_code_quality.sh +140 -0
  286. package/ds-canonical/hooks/check_datatable_invariants.sh +103 -25
  287. package/ds-canonical/hooks/check_dim_count_drift.sh +5 -4
  288. package/ds-canonical/hooks/check_ds_anchor_preflight.sh +83 -29
  289. package/ds-canonical/hooks/check_dynamic_tailwind_class.sh +16 -6
  290. package/ds-canonical/hooks/check_escape_marker_abuse.sh +65 -21
  291. package/ds-canonical/hooks/check_field_controls_contracts.sh +10 -8
  292. package/ds-canonical/hooks/check_field_family_invariants.sh +90 -24
  293. package/ds-canonical/hooks/check_file_size_budget.sh +32 -14
  294. package/ds-canonical/hooks/check_full_story_visual_interaction_sweep.sh +60 -21
  295. package/ds-canonical/hooks/check_item_list_gap.sh +4 -2
  296. package/ds-canonical/hooks/check_layout_space_magic_numbers.sh +31 -13
  297. package/ds-canonical/hooks/check_main_branch_workbench.sh +27 -68
  298. package/ds-canonical/hooks/check_naming_and_abstraction.sh +20 -9
  299. package/ds-canonical/hooks/check_opacity_token_usage.sh +220 -95
  300. package/ds-canonical/hooks/check_orphan_ds_css.sh +48 -18
  301. package/ds-canonical/hooks/check_overlay_open_focus_escape_probe.sh +29 -11
  302. package/ds-canonical/hooks/check_pattern_invariants.sh +73 -14
  303. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +4 -4
  304. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +3 -2
  305. package/ds-canonical/hooks/check_plugin_fork_health.sh +151 -41
  306. package/ds-canonical/hooks/check_post_main_ssot_propagate.sh +5 -109
  307. package/ds-canonical/hooks/check_propose_discipline.sh +116 -29
  308. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +6 -4
  309. package/ds-canonical/hooks/check_propose_without_benchmark.sh +10 -6
  310. package/ds-canonical/hooks/check_select_all_canonical.sh +1 -1
  311. package/ds-canonical/hooks/check_sidebar_menu_button_implicit_wrap.sh +22 -11
  312. package/ds-canonical/hooks/check_solo_workflow.sh +117 -186
  313. package/ds-canonical/hooks/check_spec_class_drift.sh +33 -19
  314. package/ds-canonical/hooks/check_ssot_header_declaration.sh +6 -5
  315. package/ds-canonical/hooks/check_story_determinism.sh +1 -1
  316. package/ds-canonical/hooks/check_story_invariants.sh +526 -213
  317. package/ds-canonical/hooks/check_storybook_addon_packaging.sh +65 -15
  318. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +137 -67
  319. package/ds-canonical/hooks/check_tabs_content_chrome_body_double_gap.sh +52 -23
  320. package/ds-canonical/hooks/check_tailwind_wildcard_in_docs.sh +20 -13
  321. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +15 -12
  322. package/ds-canonical/hooks/chrome_header_dispatcher.sh +75 -26
  323. package/ds-canonical/hooks/enforce_home_charter.sh +29 -8
  324. package/ds-canonical/hooks/governance_control_plane.sh +15 -0
  325. package/ds-canonical/hooks/inject_deploy_url_after_push.sh +105 -22
  326. package/ds-canonical/hooks/inject_pending_self_audit.sh +27 -24
  327. package/ds-canonical/hooks/lib/_app_shell_primary_header_consistency.sh +77 -29
  328. package/ds-canonical/hooks/lib/_approval_re.sh +5 -6
  329. package/ds-canonical/hooks/lib/_chrome_header_handcraft.sh +66 -20
  330. package/ds-canonical/hooks/lib/_code_quality.sh +9 -9
  331. package/ds-canonical/hooks/lib/_cva_default_sync.sh +11 -13
  332. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +48 -21
  333. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +13 -10
  334. package/ds-canonical/hooks/lib/_header_with_tabs_border.sh +68 -48
  335. package/ds-canonical/hooks/lib/_hook_integrity.sh +158 -0
  336. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +5 -5
  337. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +21 -23
  338. package/ds-canonical/hooks/lib/_person_data_richness.sh +5 -5
  339. package/ds-canonical/hooks/lib/_provider_paths.sh +162 -0
  340. package/ds-canonical/hooks/lib/_story_compile_drift.sh +5 -5
  341. package/ds-canonical/hooks/lib/_tab_lg_chrome_header_equal.sh +247 -27
  342. package/ds-canonical/hooks/lib/_token_hygiene.sh +39 -22
  343. package/ds-canonical/hooks/lib/approval-evidence.mjs +1131 -0
  344. package/ds-canonical/hooks/lib/audit-report-validator.mjs +118 -0
  345. package/ds-canonical/hooks/lib/provider-marker-regex.mjs +23 -0
  346. package/ds-canonical/hooks/lib/tsx-governance-analysis.mjs +410 -0
  347. package/ds-canonical/hooks/log_governance_fires.sh +45 -13
  348. package/ds-canonical/hooks/log_skill_invokes.sh +8 -7
  349. package/ds-canonical/hooks/post_edit_dispatcher.sh +106 -28
  350. package/ds-canonical/hooks/registrations.json +488 -0
  351. package/ds-canonical/hooks/registrations.schema.json +58 -0
  352. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_propose_plain_chinese.sh +1 -1
  353. package/ds-canonical/hooks/retired/check_governance_compliance.sh +1 -1
  354. package/ds-canonical/hooks/session_start_governance_check.sh +109 -78
  355. package/ds-canonical/hooks/stop_audit_content_quality.sh +20 -0
  356. package/ds-canonical/hooks/stop_extract_canonical_rules.sh +20 -0
  357. package/ds-canonical/hooks/stop_passive_logging.sh +133 -59
  358. package/ds-canonical/hooks/stop_self_audit.sh +349 -210
  359. package/ds-canonical/hooks/tests/fixtures/transcripts/claude-transcript-jsonl-v1.jsonl +3 -0
  360. package/ds-canonical/hooks/tests/fixtures/transcripts/claude-transcript-jsonl-v2.jsonl +3 -0
  361. package/ds-canonical/hooks/tests/registration-output-contracts.mjs +151 -0
  362. package/ds-canonical/hooks/tests/run-all.sh +35 -5
  363. package/ds-canonical/hooks/tests/test_auto_regen_ds_barrel.sh +48 -4
  364. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +157 -9
  365. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +265 -127
  366. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +119 -12
  367. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +0 -0
  368. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +0 -0
  369. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +56 -5
  370. package/ds-canonical/hooks/tests/test_check_chrome_header_avatar_canonical.sh +6 -6
  371. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +193 -100
  372. package/ds-canonical/hooks/tests/test_check_codex_brief_invariants.sh +143 -17
  373. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +49 -5
  374. package/ds-canonical/hooks/tests/test_check_consumer_app_invariants.sh +128 -0
  375. package/ds-canonical/hooks/tests/test_check_consumer_app_story_title.sh +2 -2
  376. package/ds-canonical/hooks/tests/test_check_consumer_code_quality.sh +64 -0
  377. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +2 -2
  378. package/ds-canonical/hooks/tests/test_check_consumer_no_ds_catalog.sh +2 -2
  379. package/ds-canonical/hooks/tests/test_check_consumer_story_baseline.sh +2 -2
  380. package/ds-canonical/hooks/tests/test_check_data_table_size_num_to_meta_width.sh +26 -8
  381. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +126 -12
  382. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +13 -8
  383. package/ds-canonical/hooks/tests/test_check_ds_anchor_preflight.sh +53 -7
  384. package/ds-canonical/hooks/tests/test_check_dynamic_tailwind_class.sh +3 -3
  385. package/ds-canonical/hooks/tests/test_check_escape_marker_abuse.sh +17 -7
  386. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +72 -16
  387. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +67 -5
  388. package/ds-canonical/hooks/tests/test_check_fork_user_plugin_install.sh +107 -4
  389. package/ds-canonical/hooks/tests/test_check_full_story_visual_interaction_sweep.sh +25 -15
  390. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +177 -67
  391. package/ds-canonical/hooks/tests/test_check_item_list_gap.sh +7 -7
  392. package/ds-canonical/hooks/tests/test_check_layout_space_magic_numbers.sh +2 -2
  393. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +45 -110
  394. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +19 -2
  395. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +114 -8
  396. package/ds-canonical/hooks/tests/test_check_orphan_ds_css.sh +38 -22
  397. package/ds-canonical/hooks/tests/test_check_overlay_open_focus_escape_probe.sh +2 -2
  398. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +68 -6
  399. package/ds-canonical/hooks/tests/test_check_plugin_fork_health.sh +53 -0
  400. package/ds-canonical/hooks/tests/test_check_post_main_ssot_propagate.sh +37 -0
  401. package/ds-canonical/hooks/tests/test_check_propose_cite_required.sh +2 -2
  402. package/ds-canonical/hooks/tests/test_check_propose_discipline.sh +59 -0
  403. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +7 -5
  404. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +5 -5
  405. package/ds-canonical/hooks/tests/test_check_propose_without_benchmark.sh +45 -0
  406. package/ds-canonical/hooks/tests/test_check_sidebar_menu_button_implicit_wrap.sh +5 -5
  407. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +183 -105
  408. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +35 -7
  409. package/ds-canonical/hooks/tests/{test_check_story_anatomy.sh.broken → test_check_story_anatomy.sh} +73 -4
  410. package/ds-canonical/hooks/tests/{test_check_story_category.sh.broken → test_check_story_category.sh} +82 -2
  411. package/ds-canonical/hooks/tests/test_check_story_determinism.sh +39 -0
  412. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +559 -43
  413. package/ds-canonical/hooks/tests/{test_check_story_name_jargon.sh.broken → test_check_story_name_jargon.sh} +22 -1
  414. package/ds-canonical/hooks/tests/test_check_storybook_addon_packaging.sh +79 -0
  415. package/ds-canonical/hooks/tests/test_check_storybook_addon_preset_cjs.sh +2 -2
  416. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +546 -28
  417. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +180 -98
  418. package/ds-canonical/hooks/tests/test_check_tabs_content_chrome_body_double_gap.sh +3 -3
  419. package/ds-canonical/hooks/tests/test_check_tailwind_wildcard_in_docs.sh +2 -2
  420. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +63 -15
  421. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +12 -6
  422. package/ds-canonical/hooks/tests/test_chrome_header_dispatcher.sh +125 -0
  423. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +57 -3
  424. package/ds-canonical/hooks/tests/test_governance_control_plane.sh +66 -0
  425. package/ds-canonical/hooks/tests/test_governance_coverage_check.sh +88 -0
  426. package/ds-canonical/hooks/tests/test_hook_integrity_classification.sh +217 -0
  427. package/ds-canonical/hooks/tests/test_inject_deploy_url_after_push.sh +85 -2
  428. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +116 -11
  429. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +117 -1
  430. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +74 -5
  431. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +234 -77
  432. package/ds-canonical/hooks/tests/test_provider_peer_symmetry.sh +76 -0
  433. package/ds-canonical/hooks/tests/test_registration_output_contracts.sh +20 -0
  434. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +130 -18
  435. package/ds-canonical/hooks/tests/test_stop_audit_content_quality.sh +75 -0
  436. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +101 -23
  437. package/ds-canonical/hooks/tests/test_stop_extract_canonical_rules.sh +75 -0
  438. package/ds-canonical/hooks/tests/{test_stop_governance_drift_check.sh.broken → test_stop_governance_drift_check.sh} +22 -12
  439. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +102 -1
  440. package/ds-canonical/hooks/tests/test_stop_repository_command_context.sh +38 -0
  441. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +363 -9
  442. package/ds-canonical/references/README.md +8 -8
  443. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +4 -4
  444. package/ds-canonical/references/build-ui-canonicals.md +3 -3
  445. package/ds-canonical/references/certified-surfaces.md +46 -15
  446. package/ds-canonical/references/cva-patterns.md +2 -2
  447. package/ds-canonical/references/failure-class-registry.json +3 -2
  448. package/ds-canonical/references/governance-audit-coverage.md +8 -8
  449. package/ds-canonical/references/naming-conventions.md +1 -1
  450. package/ds-canonical/references/preflight-gate-baseline.json +210 -3
  451. package/ds-canonical/references/principle-dim-map.json +15 -9
  452. package/ds-canonical/references/props-naming.md +1 -1
  453. package/ds-canonical/references/scenario-definition.md +33 -30
  454. package/ds-canonical/references/spec-rules.md +1 -1
  455. package/ds-canonical/references/ssot-consultation.md +3 -3
  456. package/ds-canonical/references/ssot-index.md +1 -1
  457. package/ds-canonical/references/story-baseline-registry.json +9 -6
  458. package/ds-canonical/references/story-baseline-registry.schema.json +145 -0
  459. package/ds-canonical/references/structural-token-retention.md +1 -1
  460. package/ds-canonical/references/tailwind-gotchas.md +2 -2
  461. package/ds-canonical/references/ui-dev-rules.md +1 -1
  462. package/ds-canonical/rules/README.md +14 -9
  463. package/ds-canonical/rules/meta-patterns.md +13 -13
  464. package/ds-canonical/rules/self-verify.md +12 -7
  465. package/ds-canonical/rules/spec-rules.md +1 -1
  466. package/ds-canonical/rules/ui-development.md +5 -5
  467. package/ds-canonical/skills/README.md +27 -15
  468. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +14 -7
  469. package/ds-canonical/skills/canonical-reviewer/SKILL.md +29 -0
  470. package/ds-canonical/skills/code-quality-audit/SKILL.md +11 -7
  471. package/ds-canonical/skills/codex-collab/SKILL.md +19 -238
  472. package/ds-canonical/skills/codex-collab/references/brief-template.md +37 -47
  473. package/ds-canonical/skills/codex-collab/references/transport.md +38 -57
  474. package/ds-canonical/skills/codify-corrections/SKILL.md +32 -31
  475. package/ds-canonical/skills/codify-principle/SKILL.md +33 -32
  476. package/ds-canonical/skills/component-quality-gate/SKILL.md +13 -13
  477. package/ds-canonical/skills/component-quality-gate/references/checklist.md +7 -7
  478. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +28 -229
  479. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +36 -131
  480. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +33 -187
  481. package/ds-canonical/skills/deep-audit-cross-codex/references/skill-relationships-antipatterns-benchmarks.md +22 -24
  482. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +15 -79
  483. package/ds-canonical/skills/deep-audit-cross-codex/references/upstream-directives-r-mapping.md +24 -23
  484. package/ds-canonical/skills/delivery-handoff/SKILL.md +14 -8
  485. package/ds-canonical/skills/design-system-audit/SKILL.md +63 -62
  486. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +86 -77
  487. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +59 -50
  488. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +8 -8
  489. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +37 -32
  490. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +39 -38
  491. package/ds-canonical/skills/ensure-canonical/SKILL.md +36 -34
  492. package/ds-canonical/skills/governance-health/SKILL.md +26 -22
  493. package/ds-canonical/skills/governance-status/SKILL.md +30 -0
  494. package/ds-canonical/skills/independent-review/SKILL.md +37 -0
  495. package/ds-canonical/skills/independent-review/agents/openai.yaml +4 -0
  496. package/ds-canonical/skills/independent-review/references/evidence-contract.md +24 -0
  497. package/ds-canonical/skills/knowledge-prune/SKILL.md +45 -52
  498. package/ds-canonical/skills/knowledge-prune/references/phase-z-cross-repo-ssot-propagation.md +10 -7
  499. package/ds-canonical/skills/knowledge-prune/references/prune-dimensions-d5-d10.md +6 -6
  500. package/ds-canonical/skills/new-component/SKILL.md +18 -12
  501. package/ds-canonical/skills/new-component/references/new-component-checklist.md +7 -6
  502. package/ds-canonical/skills/performance-audit/SKILL.md +13 -10
  503. package/ds-canonical/skills/product-ui-audit/SKILL.md +27 -17
  504. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +7 -4
  505. package/ds-canonical/skills/product-ui-audit/references/report-template.md +30 -26
  506. package/ds-canonical/skills/propose-options/SKILL.md +1 -1
  507. package/ds-canonical/skills/prototype/SKILL.md +19 -21
  508. package/ds-canonical/skills/prototype/references/audit-checks.md +6 -5
  509. package/ds-canonical/skills/prototype/references/checkpoints.md +26 -17
  510. package/ds-canonical/skills/prototype/references/ooux-template.md +1 -1
  511. package/ds-canonical/skills/prototype/references/proposal-template.md +4 -4
  512. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +22 -21
  513. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +21 -20
  514. package/ds-canonical/skills/story-writing/SKILL.md +12 -12
  515. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +1 -1
  516. package/ds-canonical/skills/story-writing/references/category-templates.md +5 -5
  517. package/ds-canonical/skills/ux-audit/SKILL.md +12 -9
  518. package/ds-canonical/skills/visual-audit/SKILL.md +41 -47
  519. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +7 -7
  520. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +12 -12
  521. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +3 -3
  522. package/ds-canonical/templates/_README.md +6 -7
  523. package/ds-canonical/templates/consumer-governance.md +78 -0
  524. package/ds-canonical/templates/dashboard-app.tsx +3 -1
  525. package/ds-canonical/templates/product-launchers/fork-governance-dispatcher.sh +154 -0
  526. package/ds-canonical/templates/product-launchers/format-provider-hook-output.mjs +25 -0
  527. package/ds-canonical/templates/product-launchers/independent-review.mjs +490 -0
  528. package/ds-canonical/templates/product-launchers/inject_fork_governance_preamble.sh +99 -0
  529. package/ds-canonical/templates/product-launchers/normalize-provider-event.mjs +355 -0
  530. package/ds-canonical/templates/product-launchers/product-hook-dispatch-runtime.mjs +1067 -0
  531. package/ds-canonical/templates/product-provider-wiring.json +80 -0
  532. package/ds-canonical/templates/product-provider-wiring.schema.json +151 -0
  533. package/llms-full.txt +6 -6
  534. package/llms.txt +2 -2
  535. package/package.json +15 -4
  536. package/src/components/Accordion/accordion.principles.stories.tsx +16 -26
  537. package/src/components/Accordion/accordion.stories.tsx +22 -40
  538. package/src/components/Calendar/calendar.spec.md +1 -1
  539. package/src/components/Calendar/calendar.tsx +59 -25
  540. package/src/components/DataTable/cell-registry.tsx +3 -7
  541. package/src/components/DataTable/data-table.spec.md +1 -0
  542. package/src/components/DataTable/data-table.tsx +9 -2
  543. package/src/components/DatePicker/date-picker.spec.md +1 -1
  544. package/src/components/DatePicker/date-picker.tsx +203 -147
  545. package/src/components/Dialog/dialog.spec.md +1 -1
  546. package/src/components/Dialog/dialog.tsx +8 -2
  547. package/src/components/Field/field-context.ts +25 -1
  548. package/src/components/Field/field-wrapper.tsx +7 -1
  549. package/src/components/Field/field.spec.md +7 -0
  550. package/src/components/Field/field.tsx +13 -2
  551. package/src/components/InlineEdit/inline-edit.spec.md +12 -0
  552. package/src/components/InlineEdit/inline-edit.stories.tsx +28 -17
  553. package/src/components/InlineEdit/inline-edit.tsx +94 -31
  554. package/src/components/Input/input.tsx +7 -2
  555. package/src/components/LinkInput/link-input.spec.md +1 -1
  556. package/src/components/LinkInput/link-input.tsx +5 -1
  557. package/src/components/Popover/popover.tsx +7 -2
  558. package/src/components/Select/select.principles.stories.tsx +4 -3
  559. package/src/components/Select/select.stories.tsx +7 -6
  560. package/src/components/Select/select.tsx +61 -29
  561. package/src/components/Textarea/textarea.spec.md +10 -1
  562. package/src/components/Textarea/textarea.tsx +38 -5
  563. package/src/components/TimePicker/time-picker.tsx +11 -5
  564. package/src/components/Tooltip/tooltip.spec.md +6 -0
  565. package/src/patterns/element-anatomy/item-anatomy.spec.md +8 -1
  566. package/src/patterns/element-anatomy/item-anatomy.tsx +111 -30
  567. package/src/patterns/element-anatomy/truncated-text.spec.md +13 -2
  568. package/src/tokens/uiSize/uiSize.css +11 -0
  569. package/src/tokens/uiSize/uiSize.spec.md +1 -0
  570. package/src/tokens/utility-registry.json +119 -4
  571. package/src/tokens/utility-registry.schema.json +373 -0
  572. package/tools/README.md +9 -0
  573. package/tools/codemods/cli.mjs +93 -0
  574. package/tools/codemods/index.mjs +582 -0
  575. package/tools/shared/safe-filesystem.mjs +371 -0
  576. package/tools/visual-baseline/cli.mjs +97 -0
  577. package/tools/visual-baseline/index.mjs +522 -0
  578. /package/dist/{react-day-picker.css → index.css} +0 -0
@@ -202,6 +202,12 @@ function matchOperator(op, cellValue, filterValue, datePrecision, prepared) {
202
202
  return String(cellValue ?? "").toLowerCase().includes((prepared == null ? void 0 : prepared.filterTextLower) ?? String(filterValue).toLowerCase());
203
203
  case "does_not_contain":
204
204
  return !String(cellValue ?? "").toLowerCase().includes((prepared == null ? void 0 : prepared.filterTextLower) ?? String(filterValue).toLowerCase());
205
+ // 2026-05-12 Round 6 fix(user 抓 Roadmap 進階篩選「全部」結果空)— impl-vs-spec drift。
206
+ // Per `filter-operators.spec.md` L116「is 直接接受多值,不另設 is_any_of」+ L103-116
207
+ // select(is/is_not + select_multi ValueShape OR 語意)+ L31-32(select.is / person.is 都走
208
+ // select_multi / person_multi ValueShape)。原 impl 只做 single-value 比對,filterValue 是
209
+ // array(全選 options)→ String(array)= "v1,v2" → 永遠 != single cellValue → 結果空。
210
+ // Fix:加 array handling,走 OR 語意:any → match;is_not → every-not-match。
205
211
  case "is":
206
212
  if (datePrecision) {
207
213
  const a = toDateMs(cellValue, datePrecision);
@@ -1 +1 @@
1
- {"version":3,"file":"filter-tree.js","sources":["../../../src/components/DataTable/filter-tree.ts"],"sourcesContent":["/**\n * filter-tree.ts — FilterTree types + helpers + evaluator\n *\n * 抽自 data-table-filter-panel.tsx 為了 file-size budget(panel 拆分)。\n * 純資料結構 + pure functions,無 UI dep。\n *\n * 詳:./filter-operators.spec.md\n */\n\nimport {\n startOfDay, endOfDay,\n startOfWeek, endOfWeek,\n startOfMonth, endOfMonth,\n addDays, addWeeks, addMonths, subDays,\n} from 'date-fns'\nimport { OPERATOR_REGISTRY, type OperatorSpec } from './filter-operators'\n\n/**\n * 把 relative key 轉成 [start, end] 時間區間(local time,inclusive)。\n * 對齊 Notion / ClickUp idiom — 以「今天」為錨點計算。\n */\nfunction relativeKeyToRange(key: string, now: Date = new Date()): [number, number] | null {\n const today = startOfDay(now)\n switch (key) {\n case 'today': return [today.getTime(), endOfDay(now).getTime()]\n case 'yesterday': return [startOfDay(subDays(now, 1)).getTime(), endOfDay(subDays(now, 1)).getTime()]\n case 'tomorrow': return [startOfDay(addDays(now, 1)).getTime(), endOfDay(addDays(now, 1)).getTime()]\n case 'this_week': return [startOfWeek(now, { weekStartsOn: 1 }).getTime(), endOfWeek(now, { weekStartsOn: 1 }).getTime()]\n case 'last_week': return [startOfWeek(addWeeks(now, -1), { weekStartsOn: 1 }).getTime(), endOfWeek(addWeeks(now, -1), { weekStartsOn: 1 }).getTime()]\n case 'next_week': return [startOfWeek(addWeeks(now, 1), { weekStartsOn: 1 }).getTime(), endOfWeek(addWeeks(now, 1), { weekStartsOn: 1 }).getTime()]\n case 'this_month': return [startOfMonth(now).getTime(), endOfMonth(now).getTime()]\n case 'last_month': return [startOfMonth(addMonths(now, -1)).getTime(), endOfMonth(addMonths(now, -1)).getTime()]\n case 'next_month': return [startOfMonth(addMonths(now, 1)).getTime(), endOfMonth(addMonths(now, 1)).getTime()]\n case 'past_7_days': return [startOfDay(subDays(now, 7)).getTime(), endOfDay(now).getTime()]\n case 'past_30_days': return [startOfDay(subDays(now, 30)).getTime(), endOfDay(now).getTime()]\n case 'next_7_days': return [startOfDay(now).getTime(), endOfDay(addDays(now, 7)).getTime()]\n case 'next_30_days': return [startOfDay(now).getTime(), endOfDay(addDays(now, 30)).getTime()]\n default: return null\n }\n}\n\n// ── Types ────────────────────────────────────────────────────────────────\n\nexport type Conjunction = 'and' | 'or'\n\nexport interface FilterCondition {\n kind: 'cond'\n /** 唯一 row id(stable across renders) */\n id: string\n /** 對應 column id;空字串 = 尚未選 field(operator/value picker disabled) */\n field: string\n /** OperatorSpec.op key — 對齊 OPERATOR_REGISTRY */\n op: string\n /** 依 ValueShape 解讀的值 */\n value: unknown\n /** Date 欄位比對精度(2026-07-04 Q6 拍板,兌現 spec「includeTime」雙精度契約):\n * panel 建 condition 時依 column meta 寫入 — includeTime=true → 'ms',否則 'day'\n * (AG Grid midnight-truncate / MUI X setHours(0,0,0,0) 共識;避 Airtable 邊界漏抓地雷)。\n * 非 date 欄位 / 舊 tree 無此欄 → undefined(date ops fallback 'day' 預設)。 */\n datePrecision?: 'day' | 'ms'\n}\n\nexport interface FilterGroup {\n kind: 'group'\n id: string\n /** group 內 children 共用的 join(全 AND 或全 OR;不允許混) */\n conjunction: Conjunction\n /** ⚠️ 型別鎖死:children 只能 condition,不可再 nested group(1-level cap) */\n children: FilterCondition[]\n}\n\nexport type FilterTreeFlat = {\n mode: 'flat'\n conjunction: Conjunction\n children: FilterCondition[]\n}\n\nexport type FilterTreeNested = {\n mode: 'nested'\n conjunction: Conjunction\n children: FilterGroup[]\n}\n\nexport type FilterTree = FilterTreeFlat | FilterTreeNested\n\n// ── Helpers — public API ────────────────────────────────────────────────\n\n/** Empty FilterTree — consumer 用來 init useState */\nexport function createEmptyFilterTree(mode: 'flat'): FilterTreeFlat\nexport function createEmptyFilterTree(mode: 'nested'): FilterTreeNested\nexport function createEmptyFilterTree(mode: 'flat' | 'nested'): FilterTree {\n if (mode === 'flat') return { mode: 'flat', conjunction: 'and', children: [] }\n return { mode: 'nested', conjunction: 'and', children: [] }\n}\n\n/** 是否有任何 active filter — DataTable trigger button checked state 用 */\nexport function isFilterTreeActive(tree: FilterTree): boolean {\n if (tree.mode === 'flat') {\n return tree.children.some((c) => isConditionComplete(c))\n }\n return tree.children.some((g) => g.children.some((c) => isConditionComplete(c)))\n}\n\n/** Condition 是否「已填齊」可參與 filter 求值 */\nfunction isConditionComplete(c: FilterCondition): boolean {\n if (!c.field || !c.op) return false\n const spec = getOperatorSpecLoose(c.op)\n if (!spec) return false\n if (spec.valueShape === 'none') return true\n return c.value !== '' && c.value !== null && c.value !== undefined\n}\n\n/** loose lookup — 我們不知 columnType,試所有 type。\n * D3 perf(2026-07-06):module-level Map cache — OPERATOR_REGISTRY 是 module 常數,\n * 同一 op key 查詢結果永不變;原每 call 線性掃全 registry,而 evaluateTree 熱路徑\n * per-row 呼叫時(10k rows × N conditions)放大成數十萬次比較,cache 後 O(1)。 */\nconst opSpecLooseCache = new Map<string, OperatorSpec | null>()\nfunction getOperatorSpecLoose(op: string): OperatorSpec | null {\n const cached = opSpecLooseCache.get(op)\n if (cached !== undefined) return cached\n let found: OperatorSpec | null = null\n for (const list of Object.values(OPERATOR_REGISTRY)) {\n const hit = list.find((o) => o.op === op)\n if (hit) { found = hit; break }\n }\n opSpecLooseCache.set(op, found)\n return found\n}\n\n// ── Deep-equal compare(refresh icon 顯示判定用) ─────────────────────────\n\n/** Compare two FilterTrees structurally — 忽略內部 row id(refresh-detect 不該被內部 id 干擾)*/\nexport function isFilterTreeEqual(a: FilterTree, b: FilterTree): boolean {\n if (a.mode !== b.mode || a.conjunction !== b.conjunction) return false\n if (a.children.length !== b.children.length) return false\n if (a.mode === 'flat' && b.mode === 'flat') {\n return a.children.every((c, i) => isConditionEqual(c, b.children[i]))\n }\n if (a.mode === 'nested' && b.mode === 'nested') {\n return a.children.every((g, i) => isGroupEqual(g, b.children[i]))\n }\n return false\n}\n\nfunction isGroupEqual(a: FilterGroup, b: FilterGroup): boolean {\n if (a.conjunction !== b.conjunction) return false\n if (a.children.length !== b.children.length) return false\n return a.children.every((c, i) => isConditionEqual(c, b.children[i]))\n}\n\nfunction isConditionEqual(a: FilterCondition, b: FilterCondition): boolean {\n if (a.field !== b.field || a.op !== b.op) return false\n return JSON.stringify(a.value) === JSON.stringify(b.value)\n}\n\n// ── Tree Evaluation(globalFilter approach)──────────────────────────────\n\n// ── D3 perf(2026-07-06):per-condition compile-once cache ────────────────\n// TanStack globalFilterFn 逐 row 呼叫 evaluateTree,原實作每 row 重做「跨全 rows 不變」\n// 的常數工作:isConditionComplete(operator registry 掃描)、dateMs(filterValue) 重 parse、\n// filterValue 重 toLowerCase、is_relative 重算時間區間 — 10k rows × N conditions 全額放大。\n// Fix:以 condition 物件為 key 的 WeakMap 快取 filterValue 側預解析結果,row loop 只轉\n// cellValue 側。Panel 更新走 immutable `{ ...c, ...patch }`(新物件 = 新 cache entry),\n// 舊 entry 隨舊 condition 物件 GC — cache 無失效問題。\ninterface PreparedCondition {\n /** isConditionComplete 結果(registry 掃描一次,取代原 per-row filter 掃描) */\n complete: boolean\n /** filterValue 側是否 Person(物件或含 Person 的陣列) */\n filterIsPerson: boolean\n /** person 比對 ops 的 filter 側 id array(cellValue 是 Person 時也走 person path,故照 op 準備) */\n filterPersonIds: string[] | null\n /** 文字 ops 用:String(filterValue).toLowerCase() */\n filterTextLower: string | null\n /** is / is_not 陣列(多值 OR 語意)逐元素 lowercase */\n filterTextLowerArr: string[] | null\n /** 單值 date ops(is_before 家族;is / is_not with datePrecision)— datePrecision 已套 */\n filterDateMs: number | null\n /** is_between 兩端(空端 = ±Infinity,語意同原 inline 邏輯) */\n filterDateStart: number | null\n filterDateEnd: number | null\n /** is_relative:快取區間 + 計算當日 stamp(跨日自動重算 — 所有 relative 區間都是\n * calendar day 的純函數,同日內恆定,見 localDayKey) */\n relRange: [number, number] | null\n relDayKey: number\n}\n\nconst PERSON_CAPABLE_OPS = new Set(['is', 'is_not', 'has_any_of', 'has_all_of', 'has_none_of'])\nconst DATE_SINGLE_OPS = new Set(['is_before', 'is_after', 'is_on_or_before', 'is_on_or_after'])\nconst TEXT_OPS = new Set(['contains', 'does_not_contain', 'starts_with', 'ends_with', 'is', 'is_not'])\n\nconst preparedCache = new WeakMap<FilterCondition, PreparedCondition>()\n\nfunction prepareCondition(c: FilterCondition): PreparedCondition {\n const hit = preparedCache.get(c)\n if (hit) return hit\n const fv = c.value\n const isBetweenPair = c.op === 'is_between' && Array.isArray(fv) && fv.length === 2\n const prepared: PreparedCondition = {\n complete: isConditionComplete(c),\n filterIsPerson: isPersonObject(fv) || (Array.isArray(fv) && fv.some(isPersonObject)),\n filterPersonIds: PERSON_CAPABLE_OPS.has(c.op)\n ? (Array.isArray(fv) ? fv.map(personId) : [personId(fv)])\n : null,\n filterTextLower: TEXT_OPS.has(c.op) ? String(fv).toLowerCase() : null,\n filterTextLowerArr:\n (c.op === 'is' || c.op === 'is_not') && Array.isArray(fv) ? fv.map((v) => String(v).toLowerCase()) : null,\n filterDateMs:\n DATE_SINGLE_OPS.has(c.op) || ((c.op === 'is' || c.op === 'is_not') && c.datePrecision !== undefined)\n ? toDateMs(fv, c.datePrecision)\n : null,\n filterDateStart: isBetweenPair ? (fv[0] ? toDateMs(fv[0], c.datePrecision) : -Infinity) : null,\n filterDateEnd: isBetweenPair ? (fv[1] ? toDateMs(fv[1], c.datePrecision) : Infinity) : null,\n relRange: null,\n relDayKey: 0,\n }\n preparedCache.set(c, prepared)\n return prepared\n}\n\n/**\n * 整棵 FilterTree 對 row 求 boolean。\n * 配合 useReactTable `globalFilterFn`:\n *\n * const tree = useState<FilterTree>(createEmptyFilterTree('flat'))\n * useReactTable({\n * state: { globalFilter: tree },\n * onGlobalFilterChange: setTree,\n * globalFilterFn: (row, _, t: FilterTree) => evaluateTree(t, row.original),\n * getFilteredRowModel: getFilteredRowModel(),\n * })\n */\n// any-allow: row-generic — TanStack row.original 是 generic,filter eval 跨 type 必走 any\nexport function evaluateTree(tree: FilterTree, row: any): boolean {\n if (tree.children.length === 0) return true\n\n if (tree.mode === 'flat') {\n // null = 無 complete condition → pass-through(語意同原 completed.length === 0 分支)\n return evaluateConditionsJoined(tree.children, tree.conjunction, row) ?? true\n }\n\n // nested — group 沒任何 complete condition 的視為 pass-through(不參與 conjunction),\n // 語意同原 meaningful filter\n let sawMeaningful = false\n for (const g of tree.children) {\n const r = evaluateConditionsJoined(g.children, g.conjunction, row)\n if (r === null) continue\n sawMeaningful = true\n if (tree.conjunction === 'and') {\n if (!r) return false\n } else if (r) {\n return true\n }\n }\n if (!sawMeaningful) return true\n return tree.conjunction === 'and'\n}\n\n/** 一組 conditions 依 conjunction 求 boolean;null = 組內無 complete condition(pass-through)。\n * D3 perf:prepared.complete 取代原 per-row `children.filter(isConditionComplete)`\n * (registry 掃描 + filter/map 兩個中間陣列 alloc);and/or 短路 — 條件是 pure predicate\n * 無副作用,求值順序 / 省略不影響結果。 */\n// any-allow: row-generic\nfunction evaluateConditionsJoined(children: FilterCondition[], conjunction: Conjunction, row: any): boolean | null {\n let sawComplete = false\n for (const c of children) {\n const prepared = prepareCondition(c)\n if (!prepared.complete) continue\n sawComplete = true\n const matched = evaluateCondition(c, prepared, row)\n if (conjunction === 'and') {\n if (!matched) return false\n } else if (matched) {\n return true\n }\n }\n if (!sawComplete) return null\n return conjunction === 'and'\n}\n\n// any-allow: row-generic\nfunction evaluateCondition(cond: FilterCondition, prepared: PreparedCondition, row: any): boolean {\n if (!cond.field || !cond.op) return true\n const cellValue = row?.[cond.field]\n return matchOperator(cond.op, cellValue, cond.value, cond.datePrecision, prepared)\n}\n\n// PersonValue identity helper(2026-05-07):\n// person/multiPerson cell value 是 `{ name, avatarUrl?, description? }` 物件 — 比對時用 `name`\n// 當 stable id(PeoplePicker SSOT 沒有 id field,name 是唯一身分標識)。對齊 Notion / Linear /\n// Asana 的 person filter 比對 idiom(都用 name/email 當 id)。\nfunction personId(v: unknown): string {\n if (v && typeof v === 'object' && 'name' in v) return String((v as { name: unknown }).name ?? '')\n return String(v ?? '')\n}\nfunction isPersonObject(v: unknown): v is { name: string } {\n return !!v && typeof v === 'object' && 'name' in v\n}\n\n// Q6(2026-07-04):date 比對精度 helper — 'ms' 全精度;其餘(含 undefined)day 級\n// (本地時區 startOfDay 截斷,對齊 AG Grid / MUI X date 欄 midnight 慣例)。\n// D3 perf(2026-07-06):自 matchOperator 內 closure 提升 top-level — prepareCondition\n// (filterValue 側,每 condition 一次)與 matchOperator(cellValue 側,每 row)共用同一實作。\nfunction toDateMs(v: unknown, datePrecision?: 'day' | 'ms'): number {\n const d = new Date(String(v))\n if (Number.isNaN(d.getTime())) return NaN\n return datePrecision === 'ms' ? d.getTime() : startOfDay(d).getTime()\n}\n\n/** 本地日曆日 stamp(yyyymmdd)— is_relative 快取跨日失效判定(每 row 1 個 Date alloc,\n * 取代原 relativeKeyToRange 每 row 4-10 個 Date alloc + 區間重算) */\nfunction localDayKey(d: Date): number {\n return d.getFullYear() * 10000 + (d.getMonth() + 1) * 100 + d.getDate()\n}\n\n// code-quality-allow: long-function — 13-operator switch dispatch table,table-driven 重構會把 op-specific guards 拆出反增 indirection\nfunction matchOperator(op: string, cellValue: unknown, filterValue: unknown, datePrecision?: 'day' | 'ms', prepared?: PreparedCondition): boolean {\n // 不需 value 的 op\n switch (op) {\n case 'is_set': return cellValue !== null && cellValue !== undefined && cellValue !== ''\n case 'is_not_set': return cellValue === null || cellValue === undefined || cellValue === ''\n case 'is_true': return cellValue === true\n case 'is_false': return cellValue === false\n }\n\n // 需 value 但 value 空 → 視為 incomplete,pass-through\n if (filterValue === null || filterValue === undefined || filterValue === '') return true\n if (Array.isArray(filterValue) && filterValue.length === 0) return true\n\n // Person-aware specialization(person_single / person_multi)— 物件透過 name 比對。\n // 偵測:cellValue 或 filterValue 任一是 Person object(或包 Person 的陣列)→ 走 personId path。\n // D3 perf:filterValue 側偵測 + id array 消費 prepared 快取(cellValue 側必然 per-row)。\n const cellIsPerson = isPersonObject(cellValue) || (Array.isArray(cellValue) && cellValue.some(isPersonObject))\n const filterIsPerson = prepared\n ? prepared.filterIsPerson\n : isPersonObject(filterValue) || (Array.isArray(filterValue) && filterValue.some(isPersonObject))\n if (cellIsPerson || filterIsPerson) {\n const cellIds = Array.isArray(cellValue) ? cellValue.map(personId) : [personId(cellValue)]\n const filterIds = prepared?.filterPersonIds ?? (Array.isArray(filterValue) ? filterValue.map(personId) : [personId(filterValue)])\n switch (op) {\n case 'is': return cellIds.length === 1 && filterIds.length >= 1 && filterIds.includes(cellIds[0])\n case 'is_not': return !(cellIds.length === 1 && filterIds.length >= 1 && filterIds.includes(cellIds[0]))\n case 'has_any_of': return cellIds.some((c) => filterIds.includes(c))\n case 'has_all_of': return filterIds.every((f) => cellIds.includes(f))\n case 'has_none_of':return !cellIds.some((c) => filterIds.includes(c))\n default: return true\n }\n }\n\n // (date 精度 helper 已提升為 top-level `toDateMs`;文字 ops 的 filterValue lowercase 消費\n // prepared 快取,prepared 缺席 = deprecated dataTableFilterMatch 路徑 inline fallback — D3 perf)\n\n switch (op) {\n case 'contains': return String(cellValue ?? '').toLowerCase().includes(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'does_not_contain': return !String(cellValue ?? '').toLowerCase().includes(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n // 2026-05-12 Round 6 fix(user 抓 Roadmap 進階篩選「全部」結果空)— impl-vs-spec drift。\n // Per `filter-operators.spec.md` L116「is 直接接受多值,不另設 is_any_of」+ L103-116\n // select(is/is_not + select_multi ValueShape OR 語意)+ L31-32(select.is / person.is 都走\n // select_multi / person_multi ValueShape)。原 impl 只做 single-value 比對,filterValue 是\n // array(全選 options)→ String(array)= \"v1,v2\" → 永遠 != single cellValue → 結果空。\n // Fix:加 array handling,走 OR 語意:any → match;is_not → every-not-match。\n case 'is':\n // Q6:date 欄位(datePrecision 有值)走日期比對非字串 — 「2026-06-01」與「2026-06-01 14:30」\n // 在 day 精度下相等(原字串小寫相等連同日不同格式都漏)\n if (datePrecision) {\n const a = toDateMs(cellValue, datePrecision)\n const b = prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision)\n return !Number.isNaN(a) && a === b\n }\n if (Array.isArray(filterValue)) {\n const cellLower = String(cellValue ?? '').toLowerCase()\n const filterLowers = prepared?.filterTextLowerArr ?? filterValue.map((v) => String(v).toLowerCase())\n return filterLowers.some((v) => cellLower === v)\n }\n return String(cellValue ?? '').toLowerCase() === (prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'is_not':\n if (datePrecision) {\n const a = toDateMs(cellValue, datePrecision)\n const b = prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision)\n return Number.isNaN(a) || a !== b\n }\n if (Array.isArray(filterValue)) {\n const cellLower = String(cellValue ?? '').toLowerCase()\n const filterLowers = prepared?.filterTextLowerArr ?? filterValue.map((v) => String(v).toLowerCase())\n return filterLowers.every((v) => cellLower !== v)\n }\n return String(cellValue ?? '').toLowerCase() !== (prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'starts_with': return String(cellValue ?? '').toLowerCase().startsWith(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'ends_with': return String(cellValue ?? '').toLowerCase().endsWith(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n\n case 'equals': return Number(cellValue) === Number(filterValue)\n case 'not_equals': return Number(cellValue) !== Number(filterValue)\n case 'gt': return Number(cellValue) > Number(filterValue)\n case 'gte': return Number(cellValue) >= Number(filterValue)\n case 'lt': return Number(cellValue) < Number(filterValue)\n case 'lte': return Number(cellValue) <= Number(filterValue)\n\n case 'is_before': return toDateMs(cellValue, datePrecision) < (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_after': return toDateMs(cellValue, datePrecision) > (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_on_or_before': return toDateMs(cellValue, datePrecision) <= (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_on_or_after': return toDateMs(cellValue, datePrecision) >= (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_between': {\n if (!Array.isArray(filterValue) || filterValue.length !== 2) return true\n const cv = toDateMs(cellValue, datePrecision)\n const start = prepared?.filterDateStart ?? (filterValue[0] ? toDateMs(filterValue[0], datePrecision) : -Infinity)\n const end = prepared?.filterDateEnd ?? (filterValue[1] ? toDateMs(filterValue[1], datePrecision) : Infinity)\n return cv >= start && cv <= end\n }\n case 'is_relative': {\n // Phase D 完整實作 — relative key → time range → in-range test\n // D3 perf:relativeKeyToRange 所有輸出都是 calendar day 的純函數(today / this_week /\n // past_7_days… 全是日界),同日內恆定 → 以 localDayKey 判跨日,同日重用快取區間\n // (原每 row 重算 4-10 個 Date alloc)。\n let range: [number, number] | null\n if (prepared) {\n const now = new Date()\n const dayKey = localDayKey(now)\n if (prepared.relDayKey !== dayKey) {\n prepared.relRange = relativeKeyToRange(String(filterValue), now)\n prepared.relDayKey = dayKey\n }\n range = prepared.relRange\n } else {\n range = relativeKeyToRange(String(filterValue))\n }\n if (!range) return true // unknown key,pass-through\n const cv = new Date(String(cellValue)).getTime()\n if (Number.isNaN(cv)) return false // invalid cellValue → 不命中\n const [start, end] = range\n return cv >= start && cv <= end\n }\n\n case 'has_any_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return cellValue.some((c) => filterValue.includes(c))\n return filterValue.includes(cellValue)\n }\n case 'has_all_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return filterValue.every((v) => cellValue.includes(v))\n return false\n }\n case 'has_none_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return !cellValue.some((c) => filterValue.includes(c))\n return !filterValue.includes(cellValue)\n }\n\n default: return true\n }\n}\n\n/**\n * @deprecated v0.x — old per-column filterFn integration。\n * 新版用 `evaluateTree` 配 TanStack `globalFilter`。\n * 保留為了過渡期 backward-compat,新 consumer 不要用。\n */\nexport function dataTableFilterMatch(cellValue: unknown, filterValue: unknown): boolean {\n if (typeof filterValue === 'object' && filterValue !== null && 'operator' in filterValue && 'value' in filterValue) {\n const fv = filterValue as { operator: string; value: unknown }\n return matchOperator(fv.operator, cellValue, fv.value)\n }\n return String(cellValue ?? '').toLowerCase().includes(String(filterValue ?? '').toLowerCase())\n}\n"],"names":[],"mappings":";;AAqBA,SAAS,mBAAmB,KAAa,MAAY,oBAAI,QAAiC;AACxF,QAAM,QAAQ,WAAW,GAAG;AAC5B,UAAQ,KAAA;AAAA,IACN,KAAK;AAAgB,aAAO,CAAC,MAAM,QAAA,GAAW,SAAS,GAAG,EAAE,SAAS;AAAA,IACrE,KAAK;AAAgB,aAAO,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC,EAAE,QAAA,GAAW,SAAS,QAAQ,KAAK,CAAC,CAAC,EAAE,SAAS;AAAA,IACvG,KAAK;AAAgB,aAAO,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC,EAAE,QAAA,GAAW,SAAS,QAAQ,KAAK,CAAC,CAAC,EAAE,SAAS;AAAA,IACvG,KAAK;AAAgB,aAAO,CAAC,YAAY,KAAK,EAAE,cAAc,EAAA,CAAG,EAAE,QAAA,GAAW,UAAU,KAAK,EAAE,cAAc,GAAG,EAAE,SAAS;AAAA,IAC3H,KAAK;AAAgB,aAAO,CAAC,YAAY,SAAS,KAAK,EAAE,GAAG,EAAE,cAAc,EAAA,CAAG,EAAE,QAAA,GAAW,UAAU,SAAS,KAAK,EAAE,GAAG,EAAE,cAAc,EAAA,CAAG,EAAE,SAAS;AAAA,IACvJ,KAAK;AAAgB,aAAO,CAAC,YAAY,SAAS,KAAK,CAAC,GAAG,EAAE,cAAc,EAAA,CAAG,EAAE,QAAA,GAAW,UAAU,SAAS,KAAK,CAAC,GAAG,EAAE,cAAc,EAAA,CAAG,EAAE,SAAS;AAAA,IACrJ,KAAK;AAAgB,aAAO,CAAC,aAAa,GAAG,EAAE,QAAA,GAAW,WAAW,GAAG,EAAE,SAAS;AAAA,IACnF,KAAK;AAAgB,aAAO,CAAC,aAAa,UAAU,KAAK,EAAE,CAAC,EAAE,QAAA,GAAW,WAAW,UAAU,KAAK,EAAE,CAAC,EAAE,SAAS;AAAA,IACjH,KAAK;AAAgB,aAAO,CAAC,aAAa,UAAU,KAAK,CAAC,CAAC,EAAE,QAAA,GAAW,WAAW,UAAU,KAAK,CAAC,CAAC,EAAE,SAAS;AAAA,IAC/G,KAAK;AAAgB,aAAO,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC,EAAE,QAAA,GAAW,SAAS,GAAG,EAAE,SAAS;AAAA,IAC3F,KAAK;AAAgB,aAAO,CAAC,WAAW,QAAQ,KAAK,EAAE,CAAC,EAAE,QAAA,GAAW,SAAS,GAAG,EAAE,SAAS;AAAA,IAC5F,KAAK;AAAgB,aAAO,CAAC,WAAW,GAAG,EAAE,QAAA,GAAW,SAAS,QAAQ,KAAK,CAAC,CAAC,EAAE,SAAS;AAAA,IAC3F,KAAK;AAAgB,aAAO,CAAC,WAAW,GAAG,EAAE,QAAA,GAAW,SAAS,QAAQ,KAAK,EAAE,CAAC,EAAE,SAAS;AAAA,IAC5F;AAAS,aAAO;AAAA,EAAA;AAEpB;AAmDO,SAAS,sBAAsB,MAAqC;AACzE,MAAI,SAAS,OAAQ,QAAO,EAAE,MAAM,QAAQ,aAAa,OAAO,UAAU,GAAC;AAC3E,SAAO,EAAE,MAAM,UAAU,aAAa,OAAO,UAAU,GAAC;AAC1D;AAGO,SAAS,mBAAmB,MAA2B;AAC5D,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,KAAK,SAAS,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC;AAAA,EACzD;AACA,SAAO,KAAK,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAC;AACjF;AAGA,SAAS,oBAAoB,GAA6B;AACxD,MAAI,CAAC,EAAE,SAAS,CAAC,EAAE,GAAI,QAAO;AAC9B,QAAM,OAAO,qBAAqB,EAAE,EAAE;AACtC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,eAAe,OAAQ,QAAO;AACvC,SAAO,EAAE,UAAU,MAAM,EAAE,UAAU,QAAQ,EAAE,UAAU;AAC3D;AAMA,MAAM,uCAAuB,IAAA;AAC7B,SAAS,qBAAqB,IAAiC;AAC7D,QAAM,SAAS,iBAAiB,IAAI,EAAE;AACtC,MAAI,WAAW,OAAW,QAAO;AACjC,MAAI,QAA6B;AACjC,aAAW,QAAQ,OAAO,OAAO,iBAAiB,GAAG;AACnD,UAAM,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AACxC,QAAI,KAAK;AAAE,cAAQ;AAAK;AAAA,IAAM;AAAA,EAChC;AACA,mBAAiB,IAAI,IAAI,KAAK;AAC9B,SAAO;AACT;AAKO,SAAS,kBAAkB,GAAe,GAAwB;AACvE,MAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAa,QAAO;AACjE,MAAI,EAAE,SAAS,WAAW,EAAE,SAAS,OAAQ,QAAO;AACpD,MAAI,EAAE,SAAS,UAAU,EAAE,SAAS,QAAQ;AAC1C,WAAO,EAAE,SAAS,MAAM,CAAC,GAAG,MAAM,iBAAiB,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA,EACtE;AACA,MAAI,EAAE,SAAS,YAAY,EAAE,SAAS,UAAU;AAC9C,WAAO,EAAE,SAAS,MAAM,CAAC,GAAG,MAAM,aAAa,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA,EAClE;AACA,SAAO;AACT;AAEA,SAAS,aAAa,GAAgB,GAAyB;AAC7D,MAAI,EAAE,gBAAgB,EAAE,YAAa,QAAO;AAC5C,MAAI,EAAE,SAAS,WAAW,EAAE,SAAS,OAAQ,QAAO;AACpD,SAAO,EAAE,SAAS,MAAM,CAAC,GAAG,MAAM,iBAAiB,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACtE;AAEA,SAAS,iBAAiB,GAAoB,GAA6B;AACzE,MAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,GAAI,QAAO;AACjD,SAAO,KAAK,UAAU,EAAE,KAAK,MAAM,KAAK,UAAU,EAAE,KAAK;AAC3D;AAiCA,MAAM,yCAAyB,IAAI,CAAC,MAAM,UAAU,cAAc,cAAc,aAAa,CAAC;AAC9F,MAAM,sCAAsB,IAAI,CAAC,aAAa,YAAY,mBAAmB,gBAAgB,CAAC;AAC9F,MAAM,WAAW,oBAAI,IAAI,CAAC,YAAY,oBAAoB,eAAe,aAAa,MAAM,QAAQ,CAAC;AAErG,MAAM,oCAAoB,QAAA;AAE1B,SAAS,iBAAiB,GAAuC;AAC/D,QAAM,MAAM,cAAc,IAAI,CAAC;AAC/B,MAAI,IAAK,QAAO;AAChB,QAAM,KAAK,EAAE;AACb,QAAM,gBAAgB,EAAE,OAAO,gBAAgB,MAAM,QAAQ,EAAE,KAAK,GAAG,WAAW;AAClF,QAAM,WAA8B;AAAA,IAClC,UAAU,oBAAoB,CAAC;AAAA,IAC/B,gBAAgB,eAAe,EAAE,KAAM,MAAM,QAAQ,EAAE,KAAK,GAAG,KAAK,cAAc;AAAA,IAClF,iBAAiB,mBAAmB,IAAI,EAAE,EAAE,IACvC,MAAM,QAAQ,EAAE,IAAI,GAAG,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,IACrD;AAAA,IACJ,iBAAiB,SAAS,IAAI,EAAE,EAAE,IAAI,OAAO,EAAE,EAAE,YAAA,IAAgB;AAAA,IACjE,qBACG,EAAE,OAAO,QAAQ,EAAE,OAAO,aAAa,MAAM,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,YAAA,CAAa,IAAI;AAAA,IACvG,cACE,gBAAgB,IAAI,EAAE,EAAE,MAAO,EAAE,OAAO,QAAQ,EAAE,OAAO,aAAa,EAAE,kBAAkB,SACtF,SAAS,IAAI,EAAE,aAAa,IAC5B;AAAA,IACN,iBAAiB,gBAAiB,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,EAAE,aAAa,IAAI,YAAa;AAAA,IAC1F,eAAe,gBAAiB,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,EAAE,aAAa,IAAI,WAAY;AAAA,IACvF,UAAU;AAAA,IACV,WAAW;AAAA,EAAA;AAEb,gBAAc,IAAI,GAAG,QAAQ;AAC7B,SAAO;AACT;AAeO,SAAS,aAAa,MAAkB,KAAmB;AAChE,MAAI,KAAK,SAAS,WAAW,EAAG,QAAO;AAEvC,MAAI,KAAK,SAAS,QAAQ;AAExB,WAAO,yBAAyB,KAAK,UAAU,KAAK,aAAa,GAAG,KAAK;AAAA,EAC3E;AAIA,MAAI,gBAAgB;AACpB,aAAW,KAAK,KAAK,UAAU;AAC7B,UAAM,IAAI,yBAAyB,EAAE,UAAU,EAAE,aAAa,GAAG;AACjE,QAAI,MAAM,KAAM;AAChB,oBAAgB;AAChB,QAAI,KAAK,gBAAgB,OAAO;AAC9B,UAAI,CAAC,EAAG,QAAO;AAAA,IACjB,WAAW,GAAG;AACZ,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,cAAe,QAAO;AAC3B,SAAO,KAAK,gBAAgB;AAC9B;AAOA,SAAS,yBAAyB,UAA6B,aAA0B,KAA0B;AACjH,MAAI,cAAc;AAClB,aAAW,KAAK,UAAU;AACxB,UAAM,WAAW,iBAAiB,CAAC;AACnC,QAAI,CAAC,SAAS,SAAU;AACxB,kBAAc;AACd,UAAM,UAAU,kBAAkB,GAAG,UAAU,GAAG;AAClD,QAAI,gBAAgB,OAAO;AACzB,UAAI,CAAC,QAAS,QAAO;AAAA,IACvB,WAAW,SAAS;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,gBAAgB;AACzB;AAGA,SAAS,kBAAkB,MAAuB,UAA6B,KAAmB;AAChG,MAAI,CAAC,KAAK,SAAS,CAAC,KAAK,GAAI,QAAO;AACpC,QAAM,YAAY,2BAAM,KAAK;AAC7B,SAAO,cAAc,KAAK,IAAI,WAAW,KAAK,OAAO,KAAK,eAAe,QAAQ;AACnF;AAMA,SAAS,SAAS,GAAoB;AACpC,MAAI,KAAK,OAAO,MAAM,YAAY,UAAU,EAAG,QAAO,OAAQ,EAAwB,QAAQ,EAAE;AAChG,SAAO,OAAO,KAAK,EAAE;AACvB;AACA,SAAS,eAAe,GAAmC;AACzD,SAAO,CAAC,CAAC,KAAK,OAAO,MAAM,YAAY,UAAU;AACnD;AAMA,SAAS,SAAS,GAAY,eAAsC;AAClE,QAAM,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;AAC5B,MAAI,OAAO,MAAM,EAAE,QAAA,CAAS,EAAG,QAAO;AACtC,SAAO,kBAAkB,OAAO,EAAE,QAAA,IAAY,WAAW,CAAC,EAAE,QAAA;AAC9D;AAIA,SAAS,YAAY,GAAiB;AACpC,SAAO,EAAE,gBAAgB,OAAS,EAAE,aAAa,KAAK,MAAM,EAAE,QAAA;AAChE;AAGA,SAAS,cAAc,IAAY,WAAoB,aAAsB,eAA8B,UAAuC;AAEhJ,UAAQ,IAAA;AAAA,IACN,KAAK;AAAc,aAAO,cAAc,QAAQ,cAAc,UAAa,cAAc;AAAA,IACzF,KAAK;AAAc,aAAO,cAAc,QAAQ,cAAc,UAAa,cAAc;AAAA,IACzF,KAAK;AAAc,aAAO,cAAc;AAAA,IACxC,KAAK;AAAc,aAAO,cAAc;AAAA,EAAA;AAI1C,MAAI,gBAAgB,QAAQ,gBAAgB,UAAa,gBAAgB,GAAI,QAAO;AACpF,MAAI,MAAM,QAAQ,WAAW,KAAK,YAAY,WAAW,EAAG,QAAO;AAKnE,QAAM,eAAe,eAAe,SAAS,KAAM,MAAM,QAAQ,SAAS,KAAK,UAAU,KAAK,cAAc;AAC5G,QAAM,iBAAiB,WACnB,SAAS,iBACT,eAAe,WAAW,KAAM,MAAM,QAAQ,WAAW,KAAK,YAAY,KAAK,cAAc;AACjG,MAAI,gBAAgB,gBAAgB;AAClC,UAAM,UAAU,MAAM,QAAQ,SAAS,IAAI,UAAU,IAAI,QAAQ,IAAI,CAAC,SAAS,SAAS,CAAC;AACzF,UAAM,aAAY,qCAAU,qBAAoB,MAAM,QAAQ,WAAW,IAAI,YAAY,IAAI,QAAQ,IAAI,CAAC,SAAS,WAAW,CAAC;AAC/H,YAAQ,IAAA;AAAA,MACN,KAAK;AAAc,eAAO,QAAQ,WAAW,KAAK,UAAU,UAAU,KAAK,UAAU,SAAS,QAAQ,CAAC,CAAC;AAAA,MACxG,KAAK;AAAc,eAAO,EAAE,QAAQ,WAAW,KAAK,UAAU,UAAU,KAAK,UAAU,SAAS,QAAQ,CAAC,CAAC;AAAA,MAC1G,KAAK;AAAc,eAAO,QAAQ,KAAK,CAAC,MAAM,UAAU,SAAS,CAAC,CAAC;AAAA,MACnE,KAAK;AAAc,eAAO,UAAU,MAAM,CAAC,MAAM,QAAQ,SAAS,CAAC,CAAC;AAAA,MACpE,KAAK;AAAc,eAAO,CAAC,QAAQ,KAAK,CAAC,MAAM,UAAU,SAAS,CAAC,CAAC;AAAA,MACpE;AAAmB,eAAO;AAAA,IAAA;AAAA,EAE9B;AAKA,UAAQ,IAAA;AAAA,IACN,KAAK;AAAoB,aAAO,OAAO,aAAa,EAAE,EAAE,YAAA,EAAc,UAAS,qCAAU,oBAAmB,OAAO,WAAW,EAAE,aAAa;AAAA,IAC7I,KAAK;AAAoB,aAAO,CAAC,OAAO,aAAa,EAAE,EAAE,YAAA,EAAc,UAAS,qCAAU,oBAAmB,OAAO,WAAW,EAAE,aAAa;AAAA,IAO9I,KAAK;AAGH,UAAI,eAAe;AACjB,cAAM,IAAI,SAAS,WAAW,aAAa;AAC3C,cAAM,KAAI,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AACvE,eAAO,CAAC,OAAO,MAAM,CAAC,KAAK,MAAM;AAAA,MACnC;AACA,UAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,cAAM,YAAY,OAAO,aAAa,EAAE,EAAE,YAAA;AAC1C,cAAM,gBAAe,qCAAU,uBAAsB,YAAY,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,YAAA,CAAa;AACnG,eAAO,aAAa,KAAK,CAAC,MAAM,cAAc,CAAC;AAAA,MACjD;AACA,aAAO,OAAO,aAAa,EAAE,EAAE,YAAA,QAAmB,qCAAU,oBAAmB,OAAO,WAAW,EAAE,YAAA;AAAA,IACrG,KAAK;AACH,UAAI,eAAe;AACjB,cAAM,IAAI,SAAS,WAAW,aAAa;AAC3C,cAAM,KAAI,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AACvE,eAAO,OAAO,MAAM,CAAC,KAAK,MAAM;AAAA,MAClC;AACA,UAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,cAAM,YAAY,OAAO,aAAa,EAAE,EAAE,YAAA;AAC1C,cAAM,gBAAe,qCAAU,uBAAsB,YAAY,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,YAAA,CAAa;AACnG,eAAO,aAAa,MAAM,CAAC,MAAM,cAAc,CAAC;AAAA,MAClD;AACA,aAAO,OAAO,aAAa,EAAE,EAAE,YAAA,QAAmB,qCAAU,oBAAmB,OAAO,WAAW,EAAE,YAAA;AAAA,IACrG,KAAK;AAAoB,aAAO,OAAO,aAAa,EAAE,EAAE,YAAA,EAAc,YAAW,qCAAU,oBAAmB,OAAO,WAAW,EAAE,aAAa;AAAA,IAC/I,KAAK;AAAoB,aAAO,OAAO,aAAa,EAAE,EAAE,YAAA,EAAc,UAAS,qCAAU,oBAAmB,OAAO,WAAW,EAAE,aAAa;AAAA,IAE7I,KAAK;AAAc,aAAO,OAAO,SAAS,MAAM,OAAO,WAAW;AAAA,IAClE,KAAK;AAAc,aAAO,OAAO,SAAS,MAAM,OAAO,WAAW;AAAA,IAClE,KAAK;AAAc,aAAO,OAAO,SAAS,IAAI,OAAO,WAAW;AAAA,IAChE,KAAK;AAAc,aAAO,OAAO,SAAS,KAAK,OAAO,WAAW;AAAA,IACjE,KAAK;AAAc,aAAO,OAAO,SAAS,IAAI,OAAO,WAAW;AAAA,IAChE,KAAK;AAAc,aAAO,OAAO,SAAS,KAAK,OAAO,WAAW;AAAA,IAEjE,KAAK;AAAmB,aAAO,SAAS,WAAW,aAAa,MAAK,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AAAA,IAClI,KAAK;AAAmB,aAAO,SAAS,WAAW,aAAa,MAAK,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AAAA,IAClI,KAAK;AAAmB,aAAO,SAAS,WAAW,aAAa,OAAM,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AAAA,IACnI,KAAK;AAAmB,aAAO,SAAS,WAAW,aAAa,OAAM,qCAAU,iBAAgB,SAAS,aAAa,aAAa;AAAA,IACnI,KAAK,cAAc;AACjB,UAAI,CAAC,MAAM,QAAQ,WAAW,KAAK,YAAY,WAAW,EAAG,QAAO;AACpE,YAAM,KAAK,SAAS,WAAW,aAAa;AAC5C,YAAM,SAAQ,qCAAU,qBAAoB,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,aAAa,IAAI;AACvG,YAAM,OAAM,qCAAU,mBAAkB,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,aAAa,IAAI;AACnG,aAAO,MAAM,SAAS,MAAM;AAAA,IAC9B;AAAA,IACA,KAAK,eAAe;AAKlB,UAAI;AACJ,UAAI,UAAU;AACZ,cAAM,0BAAU,KAAA;AAChB,cAAM,SAAS,YAAY,GAAG;AAC9B,YAAI,SAAS,cAAc,QAAQ;AACjC,mBAAS,WAAW,mBAAmB,OAAO,WAAW,GAAG,GAAG;AAC/D,mBAAS,YAAY;AAAA,QACvB;AACA,gBAAQ,SAAS;AAAA,MACnB,OAAO;AACL,gBAAQ,mBAAmB,OAAO,WAAW,CAAC;AAAA,MAChD;AACA,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,KAAK,IAAI,KAAK,OAAO,SAAS,CAAC,EAAE,QAAA;AACvC,UAAI,OAAO,MAAM,EAAE,EAAG,QAAO;AAC7B,YAAM,CAAC,OAAO,GAAG,IAAI;AACrB,aAAO,MAAM,SAAS,MAAM;AAAA,IAC9B;AAAA,IAEA,KAAK,cAAc;AACjB,UAAI,CAAC,MAAM,QAAQ,WAAW,EAAG,QAAO;AACxC,UAAI,MAAM,QAAQ,SAAS,EAAG,QAAO,UAAU,KAAK,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC;AAClF,aAAO,YAAY,SAAS,SAAS;AAAA,IACvC;AAAA,IACA,KAAK,cAAc;AACjB,UAAI,CAAC,MAAM,QAAQ,WAAW,EAAG,QAAO;AACxC,UAAI,MAAM,QAAQ,SAAS,EAAG,QAAO,YAAY,MAAM,CAAC,MAAM,UAAU,SAAS,CAAC,CAAC;AACnF,aAAO;AAAA,IACT;AAAA,IACA,KAAK,eAAe;AAClB,UAAI,CAAC,MAAM,QAAQ,WAAW,EAAG,QAAO;AACxC,UAAI,MAAM,QAAQ,SAAS,EAAG,QAAO,CAAC,UAAU,KAAK,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC;AACnF,aAAO,CAAC,YAAY,SAAS,SAAS;AAAA,IACxC;AAAA,IAEA;AAAS,aAAO;AAAA,EAAA;AAEpB;AAOO,SAAS,qBAAqB,WAAoB,aAA+B;AACtF,MAAI,OAAO,gBAAgB,YAAY,gBAAgB,QAAQ,cAAc,eAAe,WAAW,aAAa;AAClH,UAAM,KAAK;AACX,WAAO,cAAc,GAAG,UAAU,WAAW,GAAG,KAAK;AAAA,EACvD;AACA,SAAO,OAAO,aAAa,EAAE,EAAE,YAAA,EAAc,SAAS,OAAO,eAAe,EAAE,EAAE,YAAA,CAAa;AAC/F;"}
1
+ {"version":3,"file":"filter-tree.js","sources":["../../../src/components/DataTable/filter-tree.ts"],"sourcesContent":["/**\n * filter-tree.ts — FilterTree types + helpers + evaluator\n *\n * 抽自 data-table-filter-panel.tsx 為了 file-size budget(panel 拆分)。\n * 純資料結構 + pure functions,無 UI dep。\n *\n * 詳:./filter-operators.spec.md\n */\n\nimport {\n startOfDay, endOfDay,\n startOfWeek, endOfWeek,\n startOfMonth, endOfMonth,\n addDays, addWeeks, addMonths, subDays,\n} from 'date-fns'\nimport { OPERATOR_REGISTRY, type OperatorSpec } from './filter-operators'\n\n/**\n * 把 relative key 轉成 [start, end] 時間區間(local time,inclusive)。\n * 對齊 Notion / ClickUp idiom — 以「今天」為錨點計算。\n */\nfunction relativeKeyToRange(key: string, now: Date = new Date()): [number, number] | null {\n const today = startOfDay(now)\n switch (key) {\n case 'today': return [today.getTime(), endOfDay(now).getTime()]\n case 'yesterday': return [startOfDay(subDays(now, 1)).getTime(), endOfDay(subDays(now, 1)).getTime()]\n case 'tomorrow': return [startOfDay(addDays(now, 1)).getTime(), endOfDay(addDays(now, 1)).getTime()]\n case 'this_week': return [startOfWeek(now, { weekStartsOn: 1 }).getTime(), endOfWeek(now, { weekStartsOn: 1 }).getTime()]\n case 'last_week': return [startOfWeek(addWeeks(now, -1), { weekStartsOn: 1 }).getTime(), endOfWeek(addWeeks(now, -1), { weekStartsOn: 1 }).getTime()]\n case 'next_week': return [startOfWeek(addWeeks(now, 1), { weekStartsOn: 1 }).getTime(), endOfWeek(addWeeks(now, 1), { weekStartsOn: 1 }).getTime()]\n case 'this_month': return [startOfMonth(now).getTime(), endOfMonth(now).getTime()]\n case 'last_month': return [startOfMonth(addMonths(now, -1)).getTime(), endOfMonth(addMonths(now, -1)).getTime()]\n case 'next_month': return [startOfMonth(addMonths(now, 1)).getTime(), endOfMonth(addMonths(now, 1)).getTime()]\n case 'past_7_days': return [startOfDay(subDays(now, 7)).getTime(), endOfDay(now).getTime()]\n case 'past_30_days': return [startOfDay(subDays(now, 30)).getTime(), endOfDay(now).getTime()]\n case 'next_7_days': return [startOfDay(now).getTime(), endOfDay(addDays(now, 7)).getTime()]\n case 'next_30_days': return [startOfDay(now).getTime(), endOfDay(addDays(now, 30)).getTime()]\n default: return null\n }\n}\n\n// ── Types ────────────────────────────────────────────────────────────────\n\nexport type Conjunction = 'and' | 'or'\n\nexport interface FilterCondition {\n kind: 'cond'\n /** 唯一 row id(stable across renders) */\n id: string\n /** 對應 column id;空字串 = 尚未選 field(operator/value picker disabled) */\n field: string\n /** OperatorSpec.op key — 對齊 OPERATOR_REGISTRY */\n op: string\n /** 依 ValueShape 解讀的值 */\n value: unknown\n /** Date 欄位比對精度(2026-07-04 Q6 拍板,兌現 spec「includeTime」雙精度契約):\n * panel 建 condition 時依 column meta 寫入 — includeTime=true → 'ms',否則 'day'\n * (AG Grid midnight-truncate / MUI X setHours(0,0,0,0) 共識;避 Airtable 邊界漏抓地雷)。\n * 非 date 欄位 / 舊 tree 無此欄 → undefined(date ops fallback 'day' 預設)。 */\n datePrecision?: 'day' | 'ms'\n}\n\nexport interface FilterGroup {\n kind: 'group'\n id: string\n /** group 內 children 共用的 join(全 AND 或全 OR;不允許混) */\n conjunction: Conjunction\n /** ⚠️ 型別鎖死:children 只能 condition,不可再 nested group(1-level cap) */\n children: FilterCondition[]\n}\n\nexport type FilterTreeFlat = {\n mode: 'flat'\n conjunction: Conjunction\n children: FilterCondition[]\n}\n\nexport type FilterTreeNested = {\n mode: 'nested'\n conjunction: Conjunction\n children: FilterGroup[]\n}\n\nexport type FilterTree = FilterTreeFlat | FilterTreeNested\n\n// ── Helpers — public API ────────────────────────────────────────────────\n\n/** Empty FilterTree — consumer 用來 init useState */\nexport function createEmptyFilterTree(mode: 'flat'): FilterTreeFlat\nexport function createEmptyFilterTree(mode: 'nested'): FilterTreeNested\nexport function createEmptyFilterTree(mode: 'flat' | 'nested'): FilterTree {\n if (mode === 'flat') return { mode: 'flat', conjunction: 'and', children: [] }\n return { mode: 'nested', conjunction: 'and', children: [] }\n}\n\n/** 是否有任何 active filter — DataTable trigger button checked state 用 */\nexport function isFilterTreeActive(tree: FilterTree): boolean {\n if (tree.mode === 'flat') {\n return tree.children.some((c) => isConditionComplete(c))\n }\n return tree.children.some((g) => g.children.some((c) => isConditionComplete(c)))\n}\n\n/** Condition 是否「已填齊」可參與 filter 求值 */\nfunction isConditionComplete(c: FilterCondition): boolean {\n if (!c.field || !c.op) return false\n const spec = getOperatorSpecLoose(c.op)\n if (!spec) return false\n if (spec.valueShape === 'none') return true\n return c.value !== '' && c.value !== null && c.value !== undefined\n}\n\n/** loose lookup — 我們不知 columnType,試所有 type。\n * D3 perf(2026-07-06):module-level Map cache — OPERATOR_REGISTRY 是 module 常數,\n * 同一 op key 查詢結果永不變;原每 call 線性掃全 registry,而 evaluateTree 熱路徑\n * per-row 呼叫時(10k rows × N conditions)放大成數十萬次比較,cache 後 O(1)。 */\nconst opSpecLooseCache = new Map<string, OperatorSpec | null>()\nfunction getOperatorSpecLoose(op: string): OperatorSpec | null {\n const cached = opSpecLooseCache.get(op)\n if (cached !== undefined) return cached\n let found: OperatorSpec | null = null\n for (const list of Object.values(OPERATOR_REGISTRY)) {\n const hit = list.find((o) => o.op === op)\n if (hit) { found = hit; break }\n }\n opSpecLooseCache.set(op, found)\n return found\n}\n\n// ── Deep-equal compare(refresh icon 顯示判定用) ─────────────────────────\n\n/** Compare two FilterTrees structurally — 忽略內部 row id(refresh-detect 不該被內部 id 干擾)*/\nexport function isFilterTreeEqual(a: FilterTree, b: FilterTree): boolean {\n if (a.mode !== b.mode || a.conjunction !== b.conjunction) return false\n if (a.children.length !== b.children.length) return false\n if (a.mode === 'flat' && b.mode === 'flat') {\n return a.children.every((c, i) => isConditionEqual(c, b.children[i]))\n }\n if (a.mode === 'nested' && b.mode === 'nested') {\n return a.children.every((g, i) => isGroupEqual(g, b.children[i]))\n }\n return false\n}\n\nfunction isGroupEqual(a: FilterGroup, b: FilterGroup): boolean {\n if (a.conjunction !== b.conjunction) return false\n if (a.children.length !== b.children.length) return false\n return a.children.every((c, i) => isConditionEqual(c, b.children[i]))\n}\n\nfunction isConditionEqual(a: FilterCondition, b: FilterCondition): boolean {\n if (a.field !== b.field || a.op !== b.op) return false\n return JSON.stringify(a.value) === JSON.stringify(b.value)\n}\n\n// ── Tree Evaluation(globalFilter approach)──────────────────────────────\n\n// ── D3 perf(2026-07-06):per-condition compile-once cache ────────────────\n// TanStack globalFilterFn 逐 row 呼叫 evaluateTree,原實作每 row 重做「跨全 rows 不變」\n// 的常數工作:isConditionComplete(operator registry 掃描)、dateMs(filterValue) 重 parse、\n// filterValue 重 toLowerCase、is_relative 重算時間區間 — 10k rows × N conditions 全額放大。\n// Fix:以 condition 物件為 key 的 WeakMap 快取 filterValue 側預解析結果,row loop 只轉\n// cellValue 側。Panel 更新走 immutable `{ ...c, ...patch }`(新物件 = 新 cache entry),\n// 舊 entry 隨舊 condition 物件 GC — cache 無失效問題。\ninterface PreparedCondition {\n /** isConditionComplete 結果(registry 掃描一次,取代原 per-row filter 掃描) */\n complete: boolean\n /** filterValue 側是否 Person(物件或含 Person 的陣列) */\n filterIsPerson: boolean\n /** person 比對 ops 的 filter 側 id array(cellValue 是 Person 時也走 person path,故照 op 準備) */\n filterPersonIds: string[] | null\n /** 文字 ops 用:String(filterValue).toLowerCase() */\n filterTextLower: string | null\n /** is / is_not 陣列(多值 OR 語意)逐元素 lowercase */\n filterTextLowerArr: string[] | null\n /** 單值 date ops(is_before 家族;is / is_not with datePrecision)— datePrecision 已套 */\n filterDateMs: number | null\n /** is_between 兩端(空端 = ±Infinity,語意同原 inline 邏輯) */\n filterDateStart: number | null\n filterDateEnd: number | null\n /** is_relative:快取區間 + 計算當日 stamp(跨日自動重算 — 所有 relative 區間都是\n * calendar day 的純函數,同日內恆定,見 localDayKey) */\n relRange: [number, number] | null\n relDayKey: number\n}\n\nconst PERSON_CAPABLE_OPS = new Set(['is', 'is_not', 'has_any_of', 'has_all_of', 'has_none_of'])\nconst DATE_SINGLE_OPS = new Set(['is_before', 'is_after', 'is_on_or_before', 'is_on_or_after'])\nconst TEXT_OPS = new Set(['contains', 'does_not_contain', 'starts_with', 'ends_with', 'is', 'is_not'])\n\nconst preparedCache = new WeakMap<FilterCondition, PreparedCondition>()\n\nfunction prepareCondition(c: FilterCondition): PreparedCondition {\n const hit = preparedCache.get(c)\n if (hit) return hit\n const fv = c.value\n const isBetweenPair = c.op === 'is_between' && Array.isArray(fv) && fv.length === 2\n const prepared: PreparedCondition = {\n complete: isConditionComplete(c),\n filterIsPerson: isPersonObject(fv) || (Array.isArray(fv) && fv.some(isPersonObject)),\n filterPersonIds: PERSON_CAPABLE_OPS.has(c.op)\n ? (Array.isArray(fv) ? fv.map(personId) : [personId(fv)])\n : null,\n filterTextLower: TEXT_OPS.has(c.op) ? String(fv).toLowerCase() : null,\n filterTextLowerArr:\n (c.op === 'is' || c.op === 'is_not') && Array.isArray(fv) ? fv.map((v) => String(v).toLowerCase()) : null,\n filterDateMs:\n DATE_SINGLE_OPS.has(c.op) || ((c.op === 'is' || c.op === 'is_not') && c.datePrecision !== undefined)\n ? toDateMs(fv, c.datePrecision)\n : null,\n filterDateStart: isBetweenPair ? (fv[0] ? toDateMs(fv[0], c.datePrecision) : -Infinity) : null,\n filterDateEnd: isBetweenPair ? (fv[1] ? toDateMs(fv[1], c.datePrecision) : Infinity) : null,\n relRange: null,\n relDayKey: 0,\n }\n preparedCache.set(c, prepared)\n return prepared\n}\n\n/**\n * 整棵 FilterTree 對 row 求 boolean。\n * 配合 useReactTable `globalFilterFn`:\n *\n * const tree = useState<FilterTree>(createEmptyFilterTree('flat'))\n * useReactTable({\n * state: { globalFilter: tree },\n * onGlobalFilterChange: setTree,\n * globalFilterFn: (row, _, t: FilterTree) => evaluateTree(t, row.original),\n * getFilteredRowModel: getFilteredRowModel(),\n * })\n */\n// any-allow: row-generic — TanStack row.original 是 generic,filter eval 跨 type 必走 any\nexport function evaluateTree(tree: FilterTree, row: any): boolean {\n if (tree.children.length === 0) return true\n\n if (tree.mode === 'flat') {\n // null = 無 complete condition → pass-through(語意同原 completed.length === 0 分支)\n return evaluateConditionsJoined(tree.children, tree.conjunction, row) ?? true\n }\n\n // nested — group 沒任何 complete condition 的視為 pass-through(不參與 conjunction),\n // 語意同原 meaningful filter\n let sawMeaningful = false\n for (const g of tree.children) {\n const r = evaluateConditionsJoined(g.children, g.conjunction, row)\n if (r === null) continue\n sawMeaningful = true\n if (tree.conjunction === 'and') {\n if (!r) return false\n } else if (r) {\n return true\n }\n }\n if (!sawMeaningful) return true\n return tree.conjunction === 'and'\n}\n\n/** 一組 conditions 依 conjunction 求 boolean;null = 組內無 complete condition(pass-through)。\n * D3 perf:prepared.complete 取代原 per-row `children.filter(isConditionComplete)`\n * (registry 掃描 + filter/map 兩個中間陣列 alloc);and/or 短路 — 條件是 pure predicate\n * 無副作用,求值順序 / 省略不影響結果。 */\n// any-allow: row-generic\nfunction evaluateConditionsJoined(children: FilterCondition[], conjunction: Conjunction, row: any): boolean | null {\n let sawComplete = false\n for (const c of children) {\n const prepared = prepareCondition(c)\n if (!prepared.complete) continue\n sawComplete = true\n const matched = evaluateCondition(c, prepared, row)\n if (conjunction === 'and') {\n if (!matched) return false\n } else if (matched) {\n return true\n }\n }\n if (!sawComplete) return null\n return conjunction === 'and'\n}\n\n// any-allow: row-generic\nfunction evaluateCondition(cond: FilterCondition, prepared: PreparedCondition, row: any): boolean {\n if (!cond.field || !cond.op) return true\n const cellValue = row?.[cond.field]\n return matchOperator(cond.op, cellValue, cond.value, cond.datePrecision, prepared)\n}\n\n// PersonValue identity helper(2026-05-07):\n// person/multiPerson cell value 是 `{ name, avatarUrl?, description? }` 物件 — 比對時用 `name`\n// 當 stable id(PeoplePicker SSOT 沒有 id field,name 是唯一身分標識)。對齊 Notion / Linear /\n// Asana 的 person filter 比對 idiom(都用 name/email 當 id)。\nfunction personId(v: unknown): string {\n if (v && typeof v === 'object' && 'name' in v) return String((v as { name: unknown }).name ?? '')\n return String(v ?? '')\n}\nfunction isPersonObject(v: unknown): v is { name: string } {\n return !!v && typeof v === 'object' && 'name' in v\n}\n\n// Q6(2026-07-04):date 比對精度 helper — 'ms' 全精度;其餘(含 undefined)day 級\n// (本地時區 startOfDay 截斷,對齊 AG Grid / MUI X date 欄 midnight 慣例)。\n// D3 perf(2026-07-06):自 matchOperator 內 closure 提升 top-level — prepareCondition\n// (filterValue 側,每 condition 一次)與 matchOperator(cellValue 側,每 row)共用同一實作。\nfunction toDateMs(v: unknown, datePrecision?: 'day' | 'ms'): number {\n const d = new Date(String(v))\n if (Number.isNaN(d.getTime())) return NaN\n return datePrecision === 'ms' ? d.getTime() : startOfDay(d).getTime()\n}\n\n/** 本地日曆日 stamp(yyyymmdd)— is_relative 快取跨日失效判定(每 row 1 個 Date alloc,\n * 取代原 relativeKeyToRange 每 row 4-10 個 Date alloc + 區間重算) */\nfunction localDayKey(d: Date): number {\n return d.getFullYear() * 10000 + (d.getMonth() + 1) * 100 + d.getDate()\n}\n\n// code-quality-allow: long-function — 13-operator switch dispatch table,table-driven 重構會把 op-specific guards 拆出反增 indirection\nfunction matchOperator(op: string, cellValue: unknown, filterValue: unknown, datePrecision?: 'day' | 'ms', prepared?: PreparedCondition): boolean {\n // 不需 value 的 op\n switch (op) {\n case 'is_set': return cellValue !== null && cellValue !== undefined && cellValue !== ''\n case 'is_not_set': return cellValue === null || cellValue === undefined || cellValue === ''\n case 'is_true': return cellValue === true\n case 'is_false': return cellValue === false\n }\n\n // 需 value 但 value 空 → 視為 incomplete,pass-through\n if (filterValue === null || filterValue === undefined || filterValue === '') return true\n if (Array.isArray(filterValue) && filterValue.length === 0) return true\n\n // Person-aware specialization(person_single / person_multi)— 物件透過 name 比對。\n // 偵測:cellValue 或 filterValue 任一是 Person object(或包 Person 的陣列)→ 走 personId path。\n // D3 perf:filterValue 側偵測 + id array 消費 prepared 快取(cellValue 側必然 per-row)。\n const cellIsPerson = isPersonObject(cellValue) || (Array.isArray(cellValue) && cellValue.some(isPersonObject))\n const filterIsPerson = prepared\n ? prepared.filterIsPerson\n : isPersonObject(filterValue) || (Array.isArray(filterValue) && filterValue.some(isPersonObject))\n if (cellIsPerson || filterIsPerson) {\n const cellIds = Array.isArray(cellValue) ? cellValue.map(personId) : [personId(cellValue)]\n const filterIds = prepared?.filterPersonIds ?? (Array.isArray(filterValue) ? filterValue.map(personId) : [personId(filterValue)])\n switch (op) {\n case 'is': return cellIds.length === 1 && filterIds.length >= 1 && filterIds.includes(cellIds[0])\n case 'is_not': return !(cellIds.length === 1 && filterIds.length >= 1 && filterIds.includes(cellIds[0]))\n case 'has_any_of': return cellIds.some((c) => filterIds.includes(c))\n case 'has_all_of': return filterIds.every((f) => cellIds.includes(f))\n case 'has_none_of':return !cellIds.some((c) => filterIds.includes(c))\n default: return true\n }\n }\n\n // (date 精度 helper 已提升為 top-level `toDateMs`;文字 ops 的 filterValue lowercase 消費\n // prepared 快取,prepared 缺席 = deprecated dataTableFilterMatch 路徑 inline fallback — D3 perf)\n\n switch (op) {\n case 'contains': return String(cellValue ?? '').toLowerCase().includes(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'does_not_contain': return !String(cellValue ?? '').toLowerCase().includes(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n // 2026-05-12 Round 6 fix(user 抓 Roadmap 進階篩選「全部」結果空)— impl-vs-spec drift。\n // Per `filter-operators.spec.md` L116「is 直接接受多值,不另設 is_any_of」+ L103-116\n // select(is/is_not + select_multi ValueShape OR 語意)+ L31-32(select.is / person.is 都走\n // select_multi / person_multi ValueShape)。原 impl 只做 single-value 比對,filterValue 是\n // array(全選 options)→ String(array)= \"v1,v2\" → 永遠 != single cellValue → 結果空。\n // Fix:加 array handling,走 OR 語意:any → match;is_not → every-not-match。\n case 'is':\n // Q6:date 欄位(datePrecision 有值)走日期比對非字串 — 「2026-06-01」與「2026-06-01 14:30」\n // 在 day 精度下相等(原字串小寫相等連同日不同格式都漏)\n if (datePrecision) {\n const a = toDateMs(cellValue, datePrecision)\n const b = prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision)\n return !Number.isNaN(a) && a === b\n }\n if (Array.isArray(filterValue)) {\n const cellLower = String(cellValue ?? '').toLowerCase()\n const filterLowers = prepared?.filterTextLowerArr ?? filterValue.map((v) => String(v).toLowerCase())\n return filterLowers.some((v) => cellLower === v)\n }\n return String(cellValue ?? '').toLowerCase() === (prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'is_not':\n if (datePrecision) {\n const a = toDateMs(cellValue, datePrecision)\n const b = prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision)\n return Number.isNaN(a) || a !== b\n }\n if (Array.isArray(filterValue)) {\n const cellLower = String(cellValue ?? '').toLowerCase()\n const filterLowers = prepared?.filterTextLowerArr ?? filterValue.map((v) => String(v).toLowerCase())\n return filterLowers.every((v) => cellLower !== v)\n }\n return String(cellValue ?? '').toLowerCase() !== (prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'starts_with': return String(cellValue ?? '').toLowerCase().startsWith(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n case 'ends_with': return String(cellValue ?? '').toLowerCase().endsWith(prepared?.filterTextLower ?? String(filterValue).toLowerCase())\n\n case 'equals': return Number(cellValue) === Number(filterValue)\n case 'not_equals': return Number(cellValue) !== Number(filterValue)\n case 'gt': return Number(cellValue) > Number(filterValue)\n case 'gte': return Number(cellValue) >= Number(filterValue)\n case 'lt': return Number(cellValue) < Number(filterValue)\n case 'lte': return Number(cellValue) <= Number(filterValue)\n\n case 'is_before': return toDateMs(cellValue, datePrecision) < (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_after': return toDateMs(cellValue, datePrecision) > (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_on_or_before': return toDateMs(cellValue, datePrecision) <= (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_on_or_after': return toDateMs(cellValue, datePrecision) >= (prepared?.filterDateMs ?? toDateMs(filterValue, datePrecision))\n case 'is_between': {\n if (!Array.isArray(filterValue) || filterValue.length !== 2) return true\n const cv = toDateMs(cellValue, datePrecision)\n const start = prepared?.filterDateStart ?? (filterValue[0] ? toDateMs(filterValue[0], datePrecision) : -Infinity)\n const end = prepared?.filterDateEnd ?? (filterValue[1] ? toDateMs(filterValue[1], datePrecision) : Infinity)\n return cv >= start && cv <= end\n }\n case 'is_relative': {\n // Phase D 完整實作 — relative key → time range → in-range test\n // D3 perf:relativeKeyToRange 所有輸出都是 calendar day 的純函數(today / this_week /\n // past_7_days… 全是日界),同日內恆定 → 以 localDayKey 判跨日,同日重用快取區間\n // (原每 row 重算 4-10 個 Date alloc)。\n let range: [number, number] | null\n if (prepared) {\n const now = new Date()\n const dayKey = localDayKey(now)\n if (prepared.relDayKey !== dayKey) {\n prepared.relRange = relativeKeyToRange(String(filterValue), now)\n prepared.relDayKey = dayKey\n }\n range = prepared.relRange\n } else {\n range = relativeKeyToRange(String(filterValue))\n }\n if (!range) return true // unknown key,pass-through\n const cv = new Date(String(cellValue)).getTime()\n if (Number.isNaN(cv)) return false // invalid cellValue → 不命中\n const [start, end] = range\n return cv >= start && cv <= end\n }\n\n case 'has_any_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return cellValue.some((c) => filterValue.includes(c))\n return filterValue.includes(cellValue)\n }\n case 'has_all_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return filterValue.every((v) => cellValue.includes(v))\n return false\n }\n case 'has_none_of': {\n if (!Array.isArray(filterValue)) return true\n if (Array.isArray(cellValue)) return !cellValue.some((c) => filterValue.includes(c))\n return !filterValue.includes(cellValue)\n }\n\n default: return true\n }\n}\n\n/**\n * @deprecated v0.x — old per-column filterFn integration。\n * 新版用 `evaluateTree` 配 TanStack `globalFilter`。\n * 保留為了過渡期 backward-compat,新 consumer 不要用。\n */\nexport function dataTableFilterMatch(cellValue: unknown, filterValue: unknown): boolean {\n if (typeof filterValue === 'object' && filterValue !== null && 'operator' in filterValue && 'value' in filterValue) {\n const fv = filterValue as { operator: string; value: unknown }\n return matchOperator(fv.operator, cellValue, fv.value)\n }\n return String(cellValue ?? '').toLowerCase().includes(String(filterValue ?? '').toLowerCase())\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/DatePicker/date-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAwB,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAQ7H,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,oDAAoD,CAAA;AAK3D,MAAM,WAAW,iBAAiB;IAChC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAA;IAC1C,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAsBD,iBAAS,UAAU,CACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC7B,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAoBR;AA4ND,MAAM,WAAW,eACf,SAAQ,iBAAiB,EACvB,IAAI,CACF,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtD;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uFAAuF;IACvF,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;8EAC0E;IAC1E,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sBAAsB;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,oBAAoB;IACpB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAuXD,MAAM,WAAW,oBACf,SAAQ,iBAAiB,EACvB,IAAI,CACF,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtD;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uFAAuF;IACvF,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;8EAC0E;IAC1E,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IAC1D,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAGD,QAAA,MAAM,eAAe,6FAyapB,CAAA;AAKD,QAAA,MAAM,mBAAmB;;CAAwD,CAAA;AAIjF,eAAO,MAAM,cAAc;;;;;;;;;;;CAiBjB,CAAA;AAEV,OAAO,EACL,mBAAmB,IAAI,UAAU,EACjC,eAAe,EACf,UAAU,GACX,CAAA"}
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/DatePicker/date-picker.tsx"],"names":[],"mappings":"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"}