@genispace/geniapp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/CrossAppRecordPicker-BXchXcK5.js +624 -0
  4. package/dist/CrossAppRecordPicker-BXchXcK5.js.map +1 -0
  5. package/dist/Page-wHZrMN17.js +24 -0
  6. package/dist/Page-wHZrMN17.js.map +1 -0
  7. package/dist/ai/adopt/AiSuggestionPanel.d.ts +30 -0
  8. package/dist/ai/adopt/BusinessGuidancePanel.d.ts +31 -0
  9. package/dist/ai/adopt/DetailPageAiLayout.d.ts +7 -0
  10. package/dist/ai/adopt/adoptPresets.d.ts +11 -0
  11. package/dist/ai/adopt/guidanceContent.d.ts +27 -0
  12. package/dist/ai/adopt/parseAiSummary.d.ts +7 -0
  13. package/dist/ai/components/AgentJobProgress.d.ts +124 -0
  14. package/dist/ai/components/AsyncCombobox.d.ts +44 -0
  15. package/dist/ai/components/BulkActionBar.d.ts +44 -0
  16. package/dist/ai/components/EntityRef.d.ts +39 -0
  17. package/dist/ai/components/JobProgress.d.ts +64 -0
  18. package/dist/ai/components/ServerDataTable.d.ts +89 -0
  19. package/dist/ai/components/Timeline.d.ts +35 -0
  20. package/dist/ai/components/useInfiniteRows.d.ts +25 -0
  21. package/dist/ai/errors/userFacingError.d.ts +14 -0
  22. package/dist/ai/errors/userFacingError.js +48 -0
  23. package/dist/ai/errors/userFacingError.js.map +1 -0
  24. package/dist/ai/index.d.ts +34 -0
  25. package/dist/ai/integrations/partner/createPartnerRecordPickerHook.d.ts +15 -0
  26. package/dist/ai/integrations/partner/partnerRecordPicker.d.ts +20 -0
  27. package/dist/ai/layout/ModalWithAiLayout.d.ts +11 -0
  28. package/dist/ai/layout/aiUi.d.ts +16 -0
  29. package/dist/ai/layout/layoutConstants.d.ts +19 -0
  30. package/dist/ai/layout/modalSizeForAi.d.ts +5 -0
  31. package/dist/ai/locales/sharedAiCopy.d.ts +6 -0
  32. package/dist/ai/managed-data/DatasourceReadonlyTable.d.ts +11 -0
  33. package/dist/ai/managed-data/createTableClient.d.ts +7 -0
  34. package/dist/ai/managed-data/emitManagedEvent.d.ts +18 -0
  35. package/dist/ai/managed-data/executeManagedDatasource.d.ts +21 -0
  36. package/dist/ai/managed-data/queryManagedDatasource.d.ts +28 -0
  37. package/dist/ai/providers/AppUiProviders.d.ts +6 -0
  38. package/dist/ai/types/app-ai.types.d.ts +29 -0
  39. package/dist/ai/types/index.d.ts +1 -0
  40. package/dist/ai.d.ts +1 -0
  41. package/dist/ai.js +1817 -0
  42. package/dist/ai.js.map +1 -0
  43. package/dist/case-workspace/domain.d.ts +41 -0
  44. package/dist/case-workspace/domain.js +24 -0
  45. package/dist/case-workspace/domain.js.map +1 -0
  46. package/dist/case-workspace/index.d.ts +91 -0
  47. package/dist/case-workspace.d.ts +1 -0
  48. package/dist/case-workspace.js +392 -0
  49. package/dist/case-workspace.js.map +1 -0
  50. package/dist/cn-B6yFEsav.js +9 -0
  51. package/dist/cn-B6yFEsav.js.map +1 -0
  52. package/dist/components/ui/calendar.css +7 -0
  53. package/dist/cookieSettings-D_v3KS02.js +97 -0
  54. package/dist/cookieSettings-D_v3KS02.js.map +1 -0
  55. package/dist/dashboard/index.d.ts +16 -0
  56. package/dist/dashboard/src/ChartFrame.d.ts +18 -0
  57. package/dist/dashboard/src/ChartTooltip.d.ts +38 -0
  58. package/dist/dashboard/src/FilterBar.d.ts +23 -0
  59. package/dist/dashboard/src/KpiStatCard.d.ts +29 -0
  60. package/dist/dashboard/src/StatGrid.d.ts +15 -0
  61. package/dist/dashboard/src/TimeRangePicker.d.ts +14 -0
  62. package/dist/dashboard/src/chart.d.ts +10 -0
  63. package/dist/dashboard/src/format.d.ts +16 -0
  64. package/dist/dashboard/src/links.d.ts +2 -0
  65. package/dist/dashboard/src/useDashboardRange.d.ts +27 -0
  66. package/dist/dashboard.d.ts +1 -0
  67. package/dist/dashboard.js +361 -0
  68. package/dist/dashboard.js.map +1 -0
  69. package/dist/fonts.css +15 -0
  70. package/dist/hooks/access/AppAccessGate.d.ts +20 -0
  71. package/dist/hooks/access/AppAccessNotice.d.ts +8 -0
  72. package/dist/hooks/access/useAppAccess.d.ts +26 -0
  73. package/dist/hooks/config/businessLocale.d.ts +12 -0
  74. package/dist/hooks/config/currencies.d.ts +9 -0
  75. package/dist/hooks/index.d.ts +17 -0
  76. package/dist/hooks/picker/CrossAppRecordPicker.d.ts +37 -0
  77. package/dist/hooks/picker/managedAppPicker.d.ts +21 -0
  78. package/dist/hooks/picker/partnerPayload.d.ts +6 -0
  79. package/dist/hooks/routing/draftEntityId.d.ts +5 -0
  80. package/dist/hooks/routing/useRefetchOnRouteMatch.d.ts +6 -0
  81. package/dist/hooks/shell/resolveApiRoot.d.ts +13 -0
  82. package/dist/hooks/shell/shell.d.ts +4 -0
  83. package/dist/hooks/shell/useGenispacePlatformClient.d.ts +7 -0
  84. package/dist/hooks.d.ts +1 -0
  85. package/dist/hooks.js +42 -0
  86. package/dist/hooks.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.js +77 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/kit.d.ts +50 -0
  91. package/dist/kit.js +2067 -0
  92. package/dist/kit.js.map +1 -0
  93. package/dist/page.d.ts +1 -0
  94. package/dist/page.js +5 -0
  95. package/dist/page.js.map +1 -0
  96. package/dist/shell-DIHnXIUb.js +6 -0
  97. package/dist/shell-DIHnXIUb.js.map +1 -0
  98. package/dist/shell.d.ts +30 -0
  99. package/dist/shell.js +104 -0
  100. package/dist/shell.js.map +1 -0
  101. package/dist/storage/assetPreview.d.ts +12 -0
  102. package/dist/storage/components/AssetThumbnail.d.ts +15 -0
  103. package/dist/storage/components/CopyStorageLinkButton.d.ts +13 -0
  104. package/dist/storage/components/StorageImage.d.ts +9 -0
  105. package/dist/storage/components/StoragePreviewContent.d.ts +22 -0
  106. package/dist/storage/components/StorageVideo.d.ts +9 -0
  107. package/dist/storage/copyTextToClipboard.d.ts +5 -0
  108. package/dist/storage/hooks/useAuthenticatedStorageBlobs.d.ts +3 -0
  109. package/dist/storage/hooks/useImageThumbnailBlobs.d.ts +4 -0
  110. package/dist/storage/hooks/useShareableStorageLink.d.ts +7 -0
  111. package/dist/storage/index.d.ts +12 -0
  112. package/dist/storage/openUrlInNewTab.d.ts +6 -0
  113. package/dist/storage/platformStorage.d.ts +43 -0
  114. package/dist/storage.d.ts +1 -0
  115. package/dist/storage.js +605 -0
  116. package/dist/storage.js.map +1 -0
  117. package/dist/style.css +1 -0
  118. package/dist/styles/base.css +616 -0
  119. package/dist/styles/reduced-motion.css +14 -0
  120. package/dist/styles/tailwind-preset.js +269 -0
  121. package/dist/task-workspace/domain.d.ts +35 -0
  122. package/dist/task-workspace/domain.js +45 -0
  123. package/dist/task-workspace/domain.js.map +1 -0
  124. package/dist/task-workspace/experience.d.ts +50 -0
  125. package/dist/task-workspace/index.d.ts +172 -0
  126. package/dist/task-workspace.d.ts +1 -0
  127. package/dist/task-workspace.js +626 -0
  128. package/dist/task-workspace.js.map +1 -0
  129. package/dist/ui/components/features/app/AppCheckboxInput.d.ts +9 -0
  130. package/dist/ui/components/features/app/AppConfirmDialog.d.ts +12 -0
  131. package/dist/ui/components/features/app/AppDashboardSkeleton.d.ts +9 -0
  132. package/dist/ui/components/features/app/AppDatePicker.d.ts +69 -0
  133. package/dist/ui/components/features/app/AppModal.d.ts +27 -0
  134. package/dist/ui/components/features/app/AppPageStates.d.ts +17 -0
  135. package/dist/ui/components/features/app/AppSelectInput.d.ts +10 -0
  136. package/dist/ui/components/features/app/AppTemporalInput.d.ts +19 -0
  137. package/dist/ui/components/features/app/Page.d.ts +14 -0
  138. package/dist/ui/components/features/app/QueryErrorAlert.d.ts +7 -0
  139. package/dist/ui/components/features/app/Sidebar.d.ts +47 -0
  140. package/dist/ui/components/features/app/index.d.ts +17 -0
  141. package/dist/ui/components/features/user/UserAvatar.d.ts +17 -0
  142. package/dist/ui/components/features/user/UserDisplay.d.ts +10 -0
  143. package/dist/ui/components/features/user/UserSelect.d.ts +14 -0
  144. package/dist/ui/components/features/user/useUserDirectory.d.ts +13 -0
  145. package/dist/ui/components/features/user/userDirectoryTypes.d.ts +18 -0
  146. package/dist/ui/components/patterns/form-section.d.ts +11 -0
  147. package/dist/ui/components/primitives/feedback/index.d.ts +2 -0
  148. package/dist/ui/components/primitives/feedback/toaster.d.ts +1 -0
  149. package/dist/ui/components/primitives/feedback/use-toast.d.ts +46 -0
  150. package/dist/ui/components/primitives/page-skeleton/ChartAreaSkeleton.d.ts +13 -0
  151. package/dist/ui/components/primitives/page-skeleton/ChartEmptyState.d.ts +14 -0
  152. package/dist/ui/components/primitives/page-skeleton/ComponentSkeletonShell.d.ts +16 -0
  153. package/dist/ui/components/primitives/page-skeleton/ConfigEditorSkeleton.d.ts +5 -0
  154. package/dist/ui/components/primitives/page-skeleton/DetailTabsSkeleton.d.ts +6 -0
  155. package/dist/ui/components/primitives/page-skeleton/EmptyStateBadge.d.ts +13 -0
  156. package/dist/ui/components/primitives/page-skeleton/FormCardSkeleton.d.ts +7 -0
  157. package/dist/ui/components/primitives/page-skeleton/FormFieldSkeleton.d.ts +6 -0
  158. package/dist/ui/components/primitives/page-skeleton/FormPageSkeleton.d.ts +6 -0
  159. package/dist/ui/components/primitives/page-skeleton/GridCardsSkeleton.d.ts +6 -0
  160. package/dist/ui/components/primitives/page-skeleton/ListSkeleton.d.ts +26 -0
  161. package/dist/ui/components/primitives/page-skeleton/PageHeaderSkeleton.d.ts +6 -0
  162. package/dist/ui/components/primitives/page-skeleton/SplitPaneSkeleton.d.ts +4 -0
  163. package/dist/ui/components/primitives/page-skeleton/StatsRowSkeleton.d.ts +5 -0
  164. package/dist/ui/components/primitives/page-skeleton/TableEmptyState.d.ts +27 -0
  165. package/dist/ui/components/primitives/page-skeleton/TablePageSkeleton.d.ts +8 -0
  166. package/dist/ui/components/primitives/page-skeleton/TabsBarSkeleton.d.ts +6 -0
  167. package/dist/ui/components/primitives/page-skeleton/index.d.ts +24 -0
  168. package/dist/ui/components/primitives/page-skeleton/skeletonMetrics.d.ts +9 -0
  169. package/dist/ui/components/primitives/page-skeleton/useVisibleCenter.d.ts +34 -0
  170. package/dist/ui/components/ui/accordion.d.ts +7 -0
  171. package/dist/ui/components/ui/ai-draft-banner.d.ts +21 -0
  172. package/dist/ui/components/ui/alert-dialog.d.ts +48 -0
  173. package/dist/ui/components/ui/alert.d.ts +8 -0
  174. package/dist/ui/components/ui/avatar.d.ts +6 -0
  175. package/dist/ui/components/ui/badge.d.ts +9 -0
  176. package/dist/ui/components/ui/breadcrumb.d.ts +19 -0
  177. package/dist/ui/components/ui/button.d.ts +11 -0
  178. package/dist/ui/components/ui/calendar.d.ts +8 -0
  179. package/dist/ui/components/ui/card.d.ts +8 -0
  180. package/dist/ui/components/ui/chart.d.ts +16 -0
  181. package/dist/ui/components/ui/checkbox.d.ts +4 -0
  182. package/dist/ui/components/ui/collapsible.d.ts +5 -0
  183. package/dist/ui/components/ui/column-config.d.ts +42 -0
  184. package/dist/ui/components/ui/date-picker.d.ts +9 -0
  185. package/dist/ui/components/ui/date-range-filter.d.ts +32 -0
  186. package/dist/ui/components/ui/date-range-picker.d.ts +11 -0
  187. package/dist/ui/components/ui/dialog-input.d.ts +17 -0
  188. package/dist/ui/components/ui/dialog-safe-select.d.ts +13 -0
  189. package/dist/ui/components/ui/dialog.d.ts +25 -0
  190. package/dist/ui/components/ui/dropdown-menu.d.ts +27 -0
  191. package/dist/ui/components/ui/feature-guide.d.ts +43 -0
  192. package/dist/ui/components/ui/form.d.ts +25 -0
  193. package/dist/ui/components/ui/help-tip.d.ts +29 -0
  194. package/dist/ui/components/ui/hint-notice.d.ts +22 -0
  195. package/dist/ui/components/ui/index.d.ts +6 -0
  196. package/dist/ui/components/ui/input.d.ts +3 -0
  197. package/dist/ui/components/ui/label.d.ts +5 -0
  198. package/dist/ui/components/ui/modal-container.d.ts +56 -0
  199. package/dist/ui/components/ui/modal-templates.d.ts +46 -0
  200. package/dist/ui/components/ui/multi-select.d.ts +20 -0
  201. package/dist/ui/components/ui/pagination.d.ts +28 -0
  202. package/dist/ui/components/ui/popover.d.ts +7 -0
  203. package/dist/ui/components/ui/progress.d.ts +7 -0
  204. package/dist/ui/components/ui/radio-button-group.d.ts +18 -0
  205. package/dist/ui/components/ui/radio-group.d.ts +5 -0
  206. package/dist/ui/components/ui/scroll-area.d.ts +5 -0
  207. package/dist/ui/components/ui/select.d.ts +16 -0
  208. package/dist/ui/components/ui/separator.d.ts +7 -0
  209. package/dist/ui/components/ui/sheet.d.ts +25 -0
  210. package/dist/ui/components/ui/sidebar-rail.d.ts +9 -0
  211. package/dist/ui/components/ui/skeleton.d.ts +2 -0
  212. package/dist/ui/components/ui/slider.d.ts +13 -0
  213. package/dist/ui/components/ui/switch.d.ts +4 -0
  214. package/dist/ui/components/ui/table.d.ts +10 -0
  215. package/dist/ui/components/ui/tabs.d.ts +10 -0
  216. package/dist/ui/components/ui/textarea.d.ts +3 -0
  217. package/dist/ui/components/ui/toast.d.ts +21 -0
  218. package/dist/ui/components/ui/toggle-group.d.ts +12 -0
  219. package/dist/ui/components/ui/toggle.d.ts +12 -0
  220. package/dist/ui/components/ui/tooltip.d.ts +7 -0
  221. package/dist/ui/components/ui/typography.d.ts +15 -0
  222. package/dist/ui/components/ui/underline-tabs.d.ts +13 -0
  223. package/dist/ui/components/ui/view-mode-toggle.d.ts +9 -0
  224. package/dist/ui/hooks/useIsMobile.d.ts +16 -0
  225. package/dist/ui/styles/design-tokens.d.ts +189 -0
  226. package/dist/ui/styles/z-index-layers.d.ts +46 -0
  227. package/dist/ui.d.ts +2 -0
  228. package/dist/ui.js +35 -0
  229. package/dist/ui.js.map +1 -0
  230. package/dist/useUserDirectory-CqkyCQoR.js +2377 -0
  231. package/dist/useUserDirectory-CqkyCQoR.js.map +1 -0
  232. package/dist/utils/cookieSettings.d.ts +12 -0
  233. package/dist/utils/data/countryCodes.d.ts +26 -0
  234. package/dist/utils/index.d.ts +18 -0
  235. package/dist/utils/utils/appPath.d.ts +5 -0
  236. package/dist/utils/utils/chunkLoadRecovery.d.ts +7 -0
  237. package/dist/utils/utils/cn.d.ts +3 -0
  238. package/dist/utils/utils/crossApp.d.ts +71 -0
  239. package/dist/utils/utils/debounce.d.ts +1 -0
  240. package/dist/utils/utils/formatUserLabel.d.ts +8 -0
  241. package/dist/utils/utils/formatting.d.ts +18 -0
  242. package/dist/utils/utils/logoutNotification.d.ts +28 -0
  243. package/dist/utils/utils/operatorLocale.d.ts +32 -0
  244. package/dist/utils/utils/routeLocalePrefetch.d.ts +5 -0
  245. package/dist/utils/utils/shellIframeUrl.d.ts +20 -0
  246. package/dist/utils/utils/spaceSettings.d.ts +20 -0
  247. package/dist/utils/utils/sso.d.ts +42 -0
  248. package/dist/utils/utils/throttle.d.ts +1 -0
  249. package/dist/utils/utils/timezones.d.ts +14 -0
  250. package/dist/utils/utils/toDateInputValue.d.ts +5 -0
  251. package/dist/utils/utils/watermark.d.ts +1 -0
  252. package/dist/utils.d.ts +1 -0
  253. package/dist/utils.js +1334 -0
  254. package/dist/utils.js.map +1 -0
  255. package/dist/vite.d.ts +22 -0
  256. package/dist/vite.js +74 -0
  257. package/dist/vite.js.map +1 -0
  258. package/package.json +191 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-workspace.js","sources":["../src/task-workspace/experience.ts","../src/task-workspace/index.tsx"],"sourcesContent":["import type { WorkspaceField, WorkspaceOption } from \"./index\";\n\nexport type WorkspaceExperienceLevel = \"basic\" | \"standard\" | \"advanced\";\n\nexport type WorkspaceRecordProfile = {\n level: WorkspaceExperienceLevel;\n fieldKeys: string[];\n advancedFieldKeys: string[];\n requiredFieldKeys: string[];\n supportsReconciliation: boolean;\n capabilityKey?: string;\n};\n\nexport type WorkspaceCapability = {\n key: string;\n label: string;\n description: string;\n recordTypes: string[];\n defaultEnabled: boolean;\n};\n\nexport type WorkspaceExperience = {\n applicationId: string;\n recordProfiles: Record<string, WorkspaceRecordProfile>;\n capabilities: WorkspaceCapability[];\n copy: {\n advancedOptions: string;\n advancedOptionsHint: string;\n experienceLevel: string;\n experienceLevelHint: string;\n optionalCapabilities: string;\n optionalCapabilitiesHint: string;\n basic: string;\n standard: string;\n advanced: string;\n featureDisabled: string;\n };\n};\n\ntype CatalogEntry = {\n basicTypes: string[];\n advancedTypes: string[];\n reconcileTypes: string[];\n advancedFields: string[];\n compact?: Record<string, string[]>;\n};\n\n// Product language and progressive disclosure belong to the shared interaction\n// contract. Business states, permissions and transaction checks remain owned by\n// each GeniApp.\nconst catalog: Record<string, CatalogEntry> = {\n \"enterprise-performance-management\": {\n basicTypes: [\"budget\", \"forecast\", \"variance\"],\n advancedTypes: [\"allocation\", \"consolidation\", \"profitability\"],\n reconcileTypes: [\"budget\", \"forecast\", \"consolidation\", \"profitability\", \"variance\"],\n advancedFields: [\"driver_value\"],\n compact: { driver: [\"planning_basis\", \"legal_entity_code\", \"fiscal_period\", \"scenario_code\", \"driver_value\"] },\n },\n \"product-lifecycle-management\": {\n basicTypes: [\"item_revision\", \"engineering_change\", \"specification\"],\n advancedTypes: [\"cost_release\", \"retirement\"],\n reconcileTypes: [\"bom\", \"routing\", \"cost_release\"],\n advancedFields: [\"quantity\", \"unit\"],\n compact: { retirement: [\"product_code\", \"revision\", \"effective_from\", \"change_reason\"] },\n },\n \"supply-chain-planning\": {\n basicTypes: [\"demand_signal\", \"forecast\", \"demand_plan\", \"exception\"],\n advancedTypes: [\"capacity_plan\", \"mrp_run\", \"accuracy_review\"],\n reconcileTypes: [\"forecast\", \"demand_plan\", \"supply_plan\", \"capacity_plan\", \"accuracy_review\"],\n advancedFields: [\"confidence\"],\n compact: { exception: [\"market_code\", \"location_code\", \"product_code\", \"quantity\", \"unit\"] },\n },\n \"manufacturing-operations\": {\n basicTypes: [\"production_order\", \"operation\", \"completion\"],\n advancedTypes: [\"batch_genealogy\", \"cost_variance\"],\n reconcileTypes: [\"material_issue\", \"material_return\", \"labor_report\", \"completion\", \"cost_variance\"],\n advancedFields: [\"revision\", \"planned_end\"],\n compact: { labor_report: [\"plant_code\", \"batch_number\", \"quantity\", \"unit\", \"planned_start\"] },\n },\n \"quality-management\": {\n basicTypes: [\"inspection_plan\", \"inspection\", \"nonconformance\"],\n advancedTypes: [\"supplier_quality\", \"capa\", \"verification\"],\n reconcileTypes: [\"inspection\", \"nonconformance\", \"disposition\", \"verification\"],\n advancedFields: [\"sample_size\", \"defect_quantity\", \"disposition_code\"],\n compact: { quarantine: [\"product_code\", \"lot_number\", \"disposition_code\"] },\n },\n \"discovery-service-mapping\": {\n basicTypes: [\"source_connection\", \"discovery_schedule\", \"discovery_run\", \"finding\"],\n advancedTypes: [\"pattern\", \"identification_result\", \"topology_map\", \"retry\"],\n reconcileTypes: [\"discovery_run\", \"identification_result\", \"topology_map\"],\n advancedFields: [\"credential_reference\", \"timeout_minutes\"],\n compact: { finding: [\"source_type\", \"scope\", \"service_code\"] },\n },\n \"event-management\": {\n basicTypes: [\"raw_event\", \"normalized_event\", \"alert\", \"service_impact\"],\n advancedTypes: [\"correlation_group\", \"suppression_rule\", \"post_event_review\"],\n reconcileTypes: [\"correlation_group\", \"service_impact\", \"post_event_review\"],\n advancedFields: [\"correlation_key\"],\n compact: { post_event_review: [\"source_code\", \"service_code\", \"occurred_at\", \"summary\"] },\n },\n \"software-asset-management\": {\n basicTypes: [\"software_model\", \"entitlement\", \"installation\", \"renewal\"],\n advancedTypes: [\"usage_measurement\", \"license_position\", \"compliance_review\"],\n reconcileTypes: [\"entitlement\", \"usage_measurement\", \"license_position\", \"renewal\", \"compliance_review\"],\n advancedFields: [\"amount\", \"currency\"],\n compact: { installation: [\"publisher\", \"product_name\", \"edition_version\"] },\n },\n \"field-service-management\": {\n basicTypes: [\"work_order\", \"appointment\", \"dispatch\", \"work_log\"],\n advancedTypes: [\"travel\", \"billing_handoff\", \"follow_up\"],\n reconcileTypes: [\"part_usage\", \"billing_handoff\"],\n advancedFields: [\"part_code\"],\n compact: { customer_signature: [\"customer_or_site\", \"asset_tag\", \"resolution_target\"] },\n },\n \"security-operations\": {\n basicTypes: [\"security_event\", \"security_incident\", \"vulnerability\"],\n advancedTypes: [\"exposure\", \"evidence\", \"post_incident_review\"],\n reconcileTypes: [\"recovery_task\", \"post_incident_review\"],\n advancedFields: [\"evidence_reference\"],\n compact: { evidence: [\"detection_source\", \"affected_service\", \"detected_at\", \"evidence_reference\"] },\n },\n \"risk-compliance-audit\": {\n basicTypes: [\"risk\", \"control\", \"assessment\", \"remediation\"],\n advancedTypes: [\"audit\", \"residual_risk\", \"continuity_plan\"],\n reconcileTypes: [\"control_test\", \"audit\", \"remediation\", \"residual_risk\"],\n advancedFields: [\"test_evidence\", \"remediation_due\"],\n compact: { policy: [\"risk_domain\", \"business_entity\", \"control_code\", \"owner\"] },\n },\n \"sustainability-management\": {\n basicTypes: [\"activity_data\", \"calculation\", \"target\", \"initiative\"],\n advancedTypes: [\"allocation\", \"disclosure\", \"assurance_evidence\"],\n reconcileTypes: [\"calculation\", \"allocation\", \"target\", \"disclosure\"],\n advancedFields: [\"factor_version\", \"evidence_reference\"],\n compact: { emission_factor: [\"scope\", \"activity_category\", \"unit\", \"factor_version\", \"reporting_period\"] },\n },\n \"service-configuration\": {\n basicTypes: [\"configuration_item\", \"ci_relationship\", \"business_service\", \"quality_issue\"],\n advancedTypes: [\"ci_class\", \"ci_model\", \"reconciliation_rule\"],\n reconcileTypes: [\"reconciliation_rule\", \"quality_issue\"],\n advancedFields: [\"correlation_key\", \"owner_group\"],\n compact: { business_service: [\"service_code\", \"environment\", \"criticality\", \"owner_group\"] },\n },\n \"talent-management\": {\n basicTypes: [\"requisition\", \"application\", \"offer\", \"onboarding\", \"goal\", \"review\"],\n advancedTypes: [\"succession_slate\", \"appeal\"],\n reconcileTypes: [\"goal\", \"review\", \"learning_assignment\", \"appeal\"],\n advancedFields: [\"appeal_window_days\", \"evidence_reference\"],\n compact: { goal: [\"process_stage\", \"effective_date\", \"accountable_owner\", \"target_outcome\"] },\n },\n crm: {\n basicTypes: [\"customer_360\", \"consent\", \"opportunity_outcome\", \"service_relationship\"],\n advancedTypes: [\"commercial_attribution\", \"quote_handoff\", \"order_handoff\"],\n reconcileTypes: [\"opportunity_outcome\", \"quote_handoff\", \"order_handoff\", \"commercial_attribution\"],\n advancedFields: [\"provider_receipt\"],\n compact: { consent: [\"relationship_type\", \"customer_number\", \"consent_purpose\", \"consent_version\"] },\n },\n product: {\n basicTypes: [\"commercial_variant\", \"assortment_release\", \"regional_effectivity\", \"lifecycle_event\"],\n advancedTypes: [\"engineering_release\", \"quality_spec_link\", \"product_retirement\"],\n reconcileTypes: [\"assortment_release\", \"engineering_release\", \"product_retirement\"],\n advancedFields: [\"quality_specification\", \"retirement_reason\"],\n compact: { regional_effectivity: [\"commercial_product_code\", \"variant_code\", \"market_scope\", \"effective_from\"] },\n },\n \"retail-crm\": {\n basicTypes: [\"commerce_touchpoint\", \"consent_evidence\", \"service_outcome\"],\n advancedTypes: [\"brand_access\", \"commercial_attribution\", \"pos_receipt\"],\n reconcileTypes: [\"fulfillment_outcome\", \"pos_receipt\", \"service_outcome\"],\n advancedFields: [\"consent_version\", \"attribution_rule\"],\n compact: { consent_evidence: [\"channel_family\", \"member_number\", \"consent_purpose\", \"consent_version\"] },\n },\n \"short-drama\": {\n basicTypes: [\"delivery_package\", \"acceptance\", \"revision_request\"],\n advancedTypes: [\"rights_clearance\", \"distribution_receipt\", \"production_outcome\"],\n reconcileTypes: [\"acceptance\", \"distribution_receipt\", \"production_outcome\"],\n advancedFields: [\"provider_receipt\", \"expected_units\", \"accepted_units\"],\n compact: { rights_clearance: [\"production_project_code\", \"delivery_version\", \"rights_reference\"] },\n },\n};\n\nexport function createWorkspaceExperience(\n applicationId: string,\n locale: \"zh\" | \"en\",\n recordTypes: readonly WorkspaceOption[],\n fields: readonly WorkspaceField[],\n): WorkspaceExperience {\n const entry = catalog[applicationId];\n const allFieldKeys = fields.map((field) => field.key);\n const basicTypes = new Set(entry?.basicTypes ?? recordTypes.slice(0, 2).map((item) => item.value));\n const advancedTypes = new Set(entry?.advancedTypes ?? []);\n const reconcileTypes = new Set(entry?.reconcileTypes ?? []);\n const advancedFields = new Set(entry?.advancedFields ?? []);\n const advancedTypeLabels = recordTypes.filter((item) => advancedTypes.has(item.value)).map((item) => item.label);\n const recordProfiles = Object.fromEntries(recordTypes.map((type) => {\n const fieldKeys = entry?.compact?.[type.value] ?? allFieldKeys;\n const advancedFieldKeys = fieldKeys.filter((key) => advancedFields.has(key));\n const requiredFieldKeys = fields\n .filter((field) => field.required && fieldKeys.includes(field.key) && !advancedFields.has(field.key))\n .map((field) => field.key);\n const level: WorkspaceExperienceLevel = basicTypes.has(type.value) ? \"basic\" : advancedTypes.has(type.value) ? \"advanced\" : \"standard\";\n return [type.value, {\n level,\n fieldKeys,\n advancedFieldKeys,\n requiredFieldKeys,\n supportsReconciliation: reconcileTypes.has(type.value),\n capabilityKey: advancedTypes.has(type.value) ? \"specialized_scenarios\" : undefined,\n } satisfies WorkspaceRecordProfile];\n }));\n return {\n applicationId,\n recordProfiles,\n capabilities: advancedTypes.size ? [{\n key: \"specialized_scenarios\",\n label: locale === \"zh\" ? \"启用特定业务场景\" : \"Enable specialized scenarios\",\n description: locale === \"zh\"\n ? `仅在团队确实需要时启用:${advancedTypeLabels.join(\"、\")}。已有记录不会被删除。`\n : `Enable only when the team needs: ${advancedTypeLabels.join(\", \")}. Existing records are never deleted.`,\n recordTypes: [...advancedTypes],\n defaultEnabled: false,\n }] : [],\n copy: locale === \"zh\" ? {\n advancedOptions: \"更多选项\",\n advancedOptionsHint: \"这些信息只在当前场景需要时填写,不影响基本流程。\",\n experienceLevel: \"默认工作方式\",\n experienceLevelHint: \"“基础”只提供最常用入口;“标准”适合多数团队;“高级”仍需单独启用特定场景。\",\n optionalCapabilities: \"按需启用的场景\",\n optionalCapabilitiesHint: \"这里只控制是否提供入口,不会扩大任何人的数据权限。\",\n basic: \"基础\",\n standard: \"标准(推荐)\",\n advanced: \"高级\",\n featureDisabled: \"该场景尚未由业务管理员启用。\",\n } : {\n advancedOptions: \"More options\",\n advancedOptionsHint: \"Complete these only when this case needs them; the basic flow is unchanged.\",\n experienceLevel: \"Default way of working\",\n experienceLevelHint: \"Basic shows the most common entry points; Standard suits most teams; specialized scenarios still need explicit enablement.\",\n optionalCapabilities: \"Scenarios enabled when needed\",\n optionalCapabilitiesHint: \"This controls entry points only and never expands anyone's data access.\",\n basic: \"Basic\",\n standard: \"Standard (recommended)\",\n advanced: \"Advanced\",\n featureDisabled: \"A business administrator has not enabled this scenario.\",\n },\n };\n}\n\nexport function readExperienceConfiguration(policies: Array<{ state: string; effective_from?: string; configuration?: unknown }>, experience: WorkspaceExperience) {\n const today = new Date().toISOString().slice(0, 10);\n const candidate = policies\n .filter((policy) => policy.state === \"active\" && (!policy.effective_from || policy.effective_from <= today))\n .map((policy) => {\n if (typeof policy.configuration === \"string\") {\n try { return { ...policy, configuration: JSON.parse(policy.configuration) as Record<string, unknown> }; } catch { return { ...policy, configuration: {} }; }\n }\n return { ...policy, configuration: policy.configuration && typeof policy.configuration === \"object\" ? policy.configuration as Record<string, unknown> : {} };\n })\n .filter((policy) => \"experience_level\" in policy.configuration || \"enabled_features\" in policy.configuration)\n .at(-1);\n const level = candidate?.configuration.experience_level;\n const experienceLevel: WorkspaceExperienceLevel = level === \"basic\" || level === \"advanced\" ? level : \"standard\";\n const configured = Array.isArray(candidate?.configuration.enabled_features) ? candidate.configuration.enabled_features.filter((value): value is string => typeof value === \"string\") : [];\n const enabledFeatures = new Set(experience.capabilities.filter((item) => item.defaultEnabled).map((item) => item.key));\n configured.forEach((key) => enabledFeatures.add(key));\n return { experienceLevel, enabledFeatures };\n}\n\nexport function availableRecordTypes(recordTypes: readonly WorkspaceOption[], experience: WorkspaceExperience, level: WorkspaceExperienceLevel, enabledFeatures: ReadonlySet<string>) {\n const rank = { basic: 0, standard: 1, advanced: 2 } as const;\n return recordTypes.filter((type) => {\n const profile = experience.recordProfiles[type.value];\n if (!profile) return true;\n if (rank[profile.level] > rank[level]) return false;\n return !profile.capabilityKey || enabledFeatures.has(profile.capabilityKey);\n });\n}\n\nexport function experiencePolicyConfiguration(experienceLevel: WorkspaceExperienceLevel, enabledFeatures: ReadonlySet<string>, experience: WorkspaceExperience) {\n const enabled = experience.capabilities.filter((item) => enabledFeatures.has(item.key));\n const allowedLevels = experienceLevel === \"basic\" ? new Set([\"basic\"]) : experienceLevel === \"standard\" ? new Set([\"basic\", \"standard\"]) : new Set([\"basic\", \"standard\", \"advanced\"]);\n const enabledRecordTypes = Object.entries(experience.recordProfiles)\n .filter(([, profile]) => allowedLevels.has(profile.level) && (!profile.capabilityKey || enabledFeatures.has(profile.capabilityKey)))\n .map(([type]) => type);\n return { experience_level: experienceLevel, enabled_features: enabled.map((item) => item.key), enabled_record_types: enabledRecordTypes };\n}\n","import { formatBusinessDateTime } from '@genispace/geniapp/hooks';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n ArrowRight,\n CheckCircle2,\n AlertCircle,\n ChevronDown,\n FileCheck2,\n HelpCircle,\n Plus,\n RefreshCw,\n Search,\n Settings2,\n type LucideIcon,\n} from \"lucide-react\";\nimport { AppCheckboxInput, AppDatePicker, AppDateTimePicker, AppModal, AppPage, AppPageStates, AppSelectInput } from \"@genispace/geniapp/ui\";\nimport {\n CrossAppRecordPicker,\n type CrossAppRecordOption,\n type CrossAppRecordPage,\n} from \"@genispace/geniapp/hooks\";\nimport {\n calculateReconciliation,\n createIdempotencyKey,\n filterBusinessRecords,\n validateRecordDraft,\n validateTransition,\n type BusinessFieldValue,\n type TransitionMap,\n} from \"./domain\";\nimport {\n availableRecordTypes,\n experiencePolicyConfiguration,\n readExperienceConfiguration,\n type WorkspaceExperience,\n type WorkspaceExperienceLevel,\n} from \"./experience\";\n\nexport {\n availableRecordTypes,\n createWorkspaceExperience,\n experiencePolicyConfiguration,\n readExperienceConfiguration,\n} from \"./experience\";\nexport type { WorkspaceExperience, WorkspaceExperienceLevel, WorkspaceRecordProfile } from \"./experience\";\n\nexport {\n calculateReconciliation,\n createIdempotencyKey,\n filterBusinessRecords,\n validateRecordDraft,\n validateTransition,\n} from \"./domain\";\n\nexport type WorkspaceRecord = {\n id: string;\n number: string;\n record_type: string;\n name: string;\n description: string;\n state: string;\n priority: string;\n source_label?: string;\n amount?: number | string;\n currency?: string;\n quantity?: number | string;\n unit?: string;\n due_at?: string;\n effective_from?: string;\n effective_to?: string;\n payload?: Record<string, unknown> | string;\n reconciliation_state?: string;\n open_reconciliations?: number | string;\n updated_at?: string;\n};\n\nexport type WorkspacePolicy = {\n id: string;\n policy_type: string;\n code: string;\n name: string;\n region_code: string;\n version: number | string;\n state: string;\n threshold?: number | string;\n tolerance?: number | string;\n effective_from?: string;\n effective_to?: string;\n configuration?: Record<string, unknown> | string;\n};\n\nexport type WorkspaceOption = {\n value: string;\n label: string;\n description?: string;\n};\n\nexport type WorkspaceField = {\n key: string;\n label: string;\n type: \"text\" | \"number\" | \"date\" | \"datetime-local\" | \"textarea\" | \"select\";\n required?: boolean;\n placeholder?: string;\n options?: WorkspaceOption[];\n help?: string;\n};\n\nexport type WorkspaceContext = {\n providerApp: string;\n label: string;\n description: string;\n placeholder: string;\n emptyText: string;\n unavailableText: string;\n forbiddenText: string;\n loadPage: (input: {\n search: string;\n limit: number;\n offset: number;\n }) => Promise<CrossAppRecordPage>;\n};\n\nexport type TaskFlow = {\n id: string;\n title: string;\n description: string;\n recordTypes: string[];\n createLabel: string;\n emptyText: string;\n};\n\nexport type TaskWorkspaceSpec = {\n locale: \"en\" | \"zh\";\n title: string;\n description: string;\n icon: LucideIcon;\n taskFlows: TaskFlow[];\n recordTypes: WorkspaceOption[];\n states: WorkspaceOption[];\n transitions: TransitionMap;\n fields: WorkspaceField[];\n policyTypes: WorkspaceOption[];\n context?: WorkspaceContext;\n finalStates: string[];\n help: Array<{ title: string; body: string; steps: string[] }>;\n experience: WorkspaceExperience;\n copy: {\n refresh: string;\n help: string;\n close: string;\n createRecord: string;\n createPolicy: string;\n queue: string;\n policies: string;\n allTypes: string;\n allStates: string;\n search: string;\n empty: string;\n loading: string;\n loadError: string;\n saveError: string;\n saved: string;\n fields: {\n type: string;\n name: string;\n description: string;\n priority: string;\n dueAt: string;\n source: string;\n state: string;\n updated: string;\n action: string;\n evidence: string;\n expected: string;\n actual: string;\n tolerance: string;\n resolution: string;\n policyType: string;\n code: string;\n region: string;\n version: string;\n effectiveFrom: string;\n threshold: string;\n };\n metrics: { active: string; review: string; exception: string; closed: string };\n metricsLabel: string;\n priorities: readonly WorkspaceOption[];\n actions: {\n save: string;\n cancel: string;\n advance: string;\n reconcile: string;\n select: string;\n };\n validation: string;\n evidenceHint: string;\n reconciliationHint: string;\n noNextAction: string;\n policyIntro: string;\n };\n};\n\nexport type TaskWorkspaceApi = {\n queryRecords: () => Promise<WorkspaceRecord[]>;\n queryPolicies: () => Promise<WorkspacePolicy[]>;\n createRecord: (payload: Record<string, unknown>) => Promise<unknown>;\n transitionRecord: (payload: Record<string, unknown>) => Promise<unknown>;\n reconcileRecord: (payload: Record<string, unknown>) => Promise<unknown>;\n savePolicy: (payload: Record<string, unknown>) => Promise<unknown>;\n};\n\ntype Panel = \"record\" | \"policy\" | \"help\" | \"transition\" | \"reconcile\" | null;\n\nconst nowRevision = () => new Date().toISOString().replace(/[^0-9]/g, \"\").slice(0, 14);\n\nexport function TaskWorkspace({\n spec,\n api,\n footer,\n}: {\n spec: TaskWorkspaceSpec;\n api: TaskWorkspaceApi;\n footer?: ReactNode;\n}) {\n const [records, setRecords] = useState<WorkspaceRecord[]>([]);\n const [policies, setPolicies] = useState<WorkspacePolicy[]>([]);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const [activeFlowId, setActiveFlowId] = useState(spec.taskFlows[0]?.id || \"work\");\n const [panel, setPanel] = useState<Panel>(null);\n const [selectedRecord, setSelectedRecord] = useState<WorkspaceRecord | null>(null);\n const [selectedContext, setSelectedContext] = useState<CrossAppRecordOption | null>(null);\n const [filter, setFilter] = useState({ search: \"\", recordType: \"\", state: \"\" });\n const [draft, setDraft] = useState({\n recordType: spec.recordTypes[0]?.value || \"work_item\",\n name: \"\",\n description: \"\",\n priority: \"normal\",\n dueAt: \"\",\n values: Object.fromEntries(spec.fields.map((field) => [field.key, field.type === \"select\" ? field.options?.[0]?.value || \"\" : \"\"])) as Record<string, BusinessFieldValue>,\n });\n const [evidence, setEvidence] = useState(\"\");\n const [transitionTarget, setTransitionTarget] = useState(\"\");\n const [reconciliation, setReconciliation] = useState({ expected: \"\", actual: \"\", tolerance: \"0\", resolution: \"\" });\n const [policy, setPolicy] = useState({ policyType: spec.policyTypes[0]?.value || \"default\", code: \"\", name: \"\", region: \"GLOBAL\", version: \"1\", effectiveFrom: \"\", threshold: \"0\", tolerance: \"0\" });\n const [experienceLevel, setExperienceLevel] = useState<WorkspaceExperienceLevel>(\"standard\");\n const [enabledFeatures, setEnabledFeatures] = useState<Set<string>>(new Set());\n\n const load = useCallback(async () => {\n setLoading(true);\n setError(\"\");\n try {\n const [nextRecords, nextPolicies] = await Promise.all([api.queryRecords(), api.queryPolicies()]);\n setRecords(nextRecords);\n setPolicies(nextPolicies);\n setActiveFlowId((current) => {\n const currentFlow = spec.taskFlows.find((flow) => flow.id === current);\n if (currentFlow && nextRecords.some((record) => currentFlow.recordTypes.includes(record.record_type))) return current;\n const flowWithWork = spec.taskFlows.find((flow) => nextRecords.some((record) => flow.recordTypes.includes(record.record_type)));\n return flowWithWork?.id || current;\n });\n const configuration = readExperienceConfiguration(nextPolicies, spec.experience);\n setExperienceLevel(configuration.experienceLevel);\n setEnabledFeatures(configuration.enabledFeatures);\n } catch (reason) {\n setError(`${spec.copy.loadError}: ${(reason as Error).message}`);\n } finally {\n setLoading(false);\n }\n }, [api, spec.copy.loadError, spec.experience, spec.taskFlows]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n const run = async (operation: () => Promise<unknown>) => {\n setSaving(true);\n setError(\"\");\n setNotice(\"\");\n try {\n await operation();\n setNotice(spec.copy.saved);\n setPanel(null);\n setSelectedRecord(null);\n setEvidence(\"\");\n await load();\n } catch (reason) {\n setError(`${spec.copy.saveError}: ${(reason as Error).message}`);\n } finally {\n setSaving(false);\n }\n };\n\n const activeFlow = useMemo(\n () => spec.taskFlows.find((flow) => flow.id === activeFlowId) || spec.taskFlows[0],\n [activeFlowId, spec.taskFlows],\n );\n const flowRecords = useMemo(\n () => records.filter((record) => !activeFlow || activeFlow.recordTypes.includes(record.record_type)),\n [activeFlow, records],\n );\n const filteredRecords = useMemo(\n () => filterBusinessRecords(flowRecords, filter),\n [filter, flowRecords],\n );\n const creatableRecordTypes = useMemo(\n () => availableRecordTypes(spec.recordTypes, spec.experience, experienceLevel, enabledFeatures)\n .filter((recordType) => !activeFlow || activeFlow.recordTypes.includes(recordType.value)),\n [activeFlow, enabledFeatures, experienceLevel, spec.experience, spec.recordTypes],\n );\n useEffect(() => {\n if (creatableRecordTypes.length && !creatableRecordTypes.some((item) => item.value === draft.recordType)) {\n setDraft((current) => ({ ...current, recordType: creatableRecordTypes[0].value }));\n }\n }, [creatableRecordTypes, draft.recordType]);\n const activeThreshold = useMemo(() => policies\n .filter((item) => item.state === \"active\" && Number(item.threshold || 0) > 0)\n .map((item) => Number(item.threshold || 0))\n .at(-1) || 0, [policies]);\n const metrics = useMemo(() => ({\n active: flowRecords.filter((record) => !spec.finalStates.includes(record.state)).length,\n review: flowRecords.filter((record) => [\"review\", \"submitted\", \"assessed\", \"triaged\", \"calculated\"].includes(record.state)).length,\n exception: flowRecords.filter((record) => Number(record.open_reconciliations || 0) > 0 || [\"exception\", \"quality_hold\", \"open\"].includes(record.reconciliation_state || \"\") || (activeThreshold > 0 && Number(record.amount || record.quantity || 0) > activeThreshold)).length,\n closed: flowRecords.filter((record) => spec.finalStates.includes(record.state)).length,\n }), [activeThreshold, flowRecords, spec.finalStates]);\n\n const selectFlow = (flow: TaskFlow) => {\n setActiveFlowId(flow.id);\n setFilter({ search: \"\", recordType: \"\", state: \"\" });\n const firstType = availableRecordTypes(spec.recordTypes, spec.experience, experienceLevel, enabledFeatures)\n .find((recordType) => flow.recordTypes.includes(recordType.value));\n if (firstType) setDraft((current) => ({ ...current, recordType: firstType.value }));\n };\n\n const openTransition = (record: WorkspaceRecord) => {\n const target = spec.transitions[record.state]?.[0] || \"\";\n setSelectedRecord(record);\n setTransitionTarget(target);\n setEvidence(\"\");\n setPanel(\"transition\");\n };\n\n const openReconciliation = (record: WorkspaceRecord) => {\n setSelectedRecord(record);\n const activeTolerance = policies.filter((item) => item.state === \"active\").map((item) => Number(item.tolerance || 0)).at(-1) || 0;\n setReconciliation({ expected: String(record.amount || record.quantity || \"\"), actual: \"\", tolerance: String(activeTolerance), resolution: \"\" });\n setPanel(\"reconcile\");\n };\n\n const createRecord = () => {\n const profile = spec.experience.recordProfiles[draft.recordType];\n const validation = validateRecordDraft(draft, profile?.requiredFieldKeys || spec.fields.filter((field) => field.required).map((field) => field.key));\n if (!validation.valid) {\n setError(`${spec.copy.validation}: ${validation.missing.join(\", \")}`);\n return;\n }\n const revision = nowRevision();\n void run(() => api.createRecord({\n record_type: draft.recordType,\n name: draft.name.trim(),\n description: draft.description.trim(),\n priority: draft.priority,\n due_at: draft.dueAt || null,\n values: draft.values,\n source_app: selectedContext ? spec.context?.providerApp || null : null,\n source_object_ref: selectedContext?.id || null,\n source_label: selectedContext?.primary || null,\n idempotency_key: createIdempotencyKey(\"create\", draft.name, revision),\n }));\n };\n\n const transition = () => {\n if (!selectedRecord) return;\n const validation = validateTransition(selectedRecord.state, transitionTarget, spec.transitions);\n if (!validation.allowed || evidence.trim().length < 10) {\n setError(spec.copy.evidenceHint);\n return;\n }\n void run(() => api.transitionRecord({\n record_id: selectedRecord.id,\n target_state: transitionTarget,\n evidence_note: evidence.trim(),\n idempotency_key: createIdempotencyKey(\"transition\", selectedRecord.number, `${selectedRecord.state}-${transitionTarget}`),\n }));\n };\n\n const reconcile = () => {\n if (!selectedRecord) return;\n let result;\n try {\n result = calculateReconciliation(Number(reconciliation.expected), Number(reconciliation.actual), Number(reconciliation.tolerance), reconciliation.resolution);\n } catch (reason) {\n setError((reason as Error).message);\n return;\n }\n if (result.state === \"open\") {\n setError(spec.copy.reconciliationHint);\n return;\n }\n void run(() => api.reconcileRecord({\n record_id: selectedRecord.id,\n reconciliation_type: selectedRecord.record_type,\n expected_value: Number(reconciliation.expected),\n actual_value: Number(reconciliation.actual),\n tolerance: Number(reconciliation.tolerance),\n resolution: reconciliation.resolution.trim(),\n idempotency_key: createIdempotencyKey(\"reconcile\", selectedRecord.number, nowRevision()),\n }));\n };\n\n const savePolicy = () => {\n const code = policy.code.trim() || `${policy.policyType}-SETTINGS`;\n if (policy.name.trim().length < 3 || !policy.effectiveFrom) {\n setError(spec.copy.validation);\n return;\n }\n void run(() => api.savePolicy({\n policy_type: policy.policyType,\n code: code.toUpperCase(),\n name: policy.name.trim(),\n region_code: policy.region.trim().toUpperCase() || \"GLOBAL\",\n version: Number(policy.version),\n effective_from: policy.effectiveFrom,\n threshold: Number(policy.threshold),\n tolerance: Number(policy.tolerance),\n configuration: experiencePolicyConfiguration(experienceLevel, enabledFeatures, spec.experience),\n idempotency_key: createIdempotencyKey(\"policy\", code, policy.version),\n }));\n };\n\n return (\n <AppPage\n title={spec.title}\n description={spec.description}\n icon={spec.icon}\n actions={\n <div className=\"flex w-full flex-wrap gap-2 sm:w-auto sm:justify-end\">\n <Action onClick={() => setPanel(\"help\")}><HelpCircle className=\"h-4 w-4\" />{spec.copy.help}</Action>\n <Action onClick={() => void load()}><RefreshCw className=\"h-4 w-4\" />{spec.copy.refresh}</Action>\n <Action onClick={() => setPanel(\"policy\")}><Settings2 className=\"h-4 w-4\" />{spec.copy.createPolicy}</Action>\n <Action primary onClick={() => setPanel(\"record\")}><Plus className=\"h-4 w-4\" />{activeFlow?.createLabel || spec.copy.createRecord}</Action>\n </div>\n }\n >\n {error && <Banner tone=\"error\"><AlertCircle className=\"h-4 w-4\" />{error}</Banner>}\n {notice && <Banner tone=\"success\"><CheckCircle2 className=\"h-4 w-4\" />{notice}</Banner>}\n <nav className=\"mb-5 grid gap-3 md:grid-cols-2 xl:grid-cols-3\" aria-label={spec.title}>\n {spec.taskFlows.map((flow) => {\n const selected = flow.id === activeFlow?.id;\n const count = records.filter((record) => flow.recordTypes.includes(record.record_type) && !spec.finalStates.includes(record.state)).length;\n return <button key={flow.id} type=\"button\" aria-current={selected ? \"page\" : undefined} onClick={() => selectFlow(flow)} className={`min-h-[112px] rounded-xl border p-4 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${selected ? \"border-primary bg-primary/5\" : \"bg-card hover:bg-muted/35\"}`}>\n <span className=\"flex items-start justify-between gap-3\"><strong className=\"text-sm\">{flow.title}</strong><span className=\"rounded-md bg-muted px-2 py-1 text-xs font-semibold tabular-nums\">{count}</span></span>\n <span className=\"mt-2 block text-sm leading-6 text-muted-foreground\">{flow.description}</span>\n </button>;\n })}\n </nav>\n <section className=\"grid grid-cols-2 gap-3 lg:grid-cols-4\" aria-label={spec.copy.metricsLabel}>\n {(Object.keys(metrics) as Array<keyof typeof metrics>).map((key) => (\n <article key={key} className=\"rounded-xl bg-muted/45 px-4 py-4\">\n <strong className=\"block text-2xl tabular-nums\">{metrics[key]}</strong>\n <span className=\"mt-1 block text-xs font-medium text-muted-foreground\">{spec.copy.metrics[key]}</span>\n </article>\n ))}\n </section>\n <section className=\"mt-5 rounded-2xl border bg-card p-3 sm:p-4\">\n <div className=\"grid gap-3 lg:grid-cols-[minmax(14rem,1fr)_12rem_12rem]\">\n <label className=\"relative block\">\n <span className=\"sr-only\">{spec.copy.search}</span>\n <Search className=\"pointer-events-none absolute left-3 top-3.5 h-4 w-4 text-muted-foreground\" />\n <input className=\"enterprise-input min-h-[44px] pl-9\" value={filter.search} placeholder={spec.copy.search} onChange={(event) => setFilter({ ...filter, search: event.target.value })} />\n </label>\n <AppSelectInput aria-label={spec.copy.allTypes} className=\"enterprise-input min-h-[44px]\" value={filter.recordType} onChange={(event) => setFilter({ ...filter, recordType: event.target.value })}>\n <option value=\"\">{spec.copy.allTypes}</option>\n {spec.recordTypes.filter((option) => !activeFlow || activeFlow.recordTypes.includes(option.value)).map((option) => <option key={option.value} value={option.value}>{option.label}</option>)}\n </AppSelectInput>\n <AppSelectInput aria-label={spec.copy.allStates} className=\"enterprise-input min-h-[44px]\" value={filter.state} onChange={(event) => setFilter({ ...filter, state: event.target.value })}>\n <option value=\"\">{spec.copy.allStates}</option>\n {spec.states.map((option) => <option key={option.value} value={option.value}>{option.label}</option>)}\n </AppSelectInput>\n </div>\n </section>\n <AppPageStates loading={loading} error={null}>\n <section className=\"mt-4 grid gap-4\">\n <div className=\"min-w-0 overflow-hidden rounded-2xl border bg-card\">\n <div className=\"border-b px-4 py-3\"><h2 className=\"font-semibold\">{activeFlow?.title || spec.copy.queue}</h2>{activeFlow?.description && <p className=\"mt-1 text-sm leading-6 text-muted-foreground\">{activeFlow.description}</p>}</div>\n {filteredRecords.length ? (\n <div className=\"divide-y\">\n {filteredRecords.map((record) => {\n const next = spec.transitions[record.state] || [];\n const profile = spec.experience.recordProfiles[record.record_type];\n return (\n <article key={record.id} className=\"grid gap-3 px-4 py-4 transition-colors hover:bg-muted/30 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-center\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-mono tabular-nums\">{record.number}</span>\n <span>{spec.recordTypes.find((item) => item.value === record.record_type)?.label || record.record_type}</span>\n <StateBadge label={spec.states.find((item) => item.value === record.state)?.label || record.state} />\n </div>\n <h3 className=\"mt-1 truncate font-semibold\">{record.name}</h3>\n <p className=\"mt-1 line-clamp-2 text-sm leading-6 text-muted-foreground\">{record.description}</p>\n <p className=\"mt-2 text-xs text-muted-foreground\">{record.source_label || \"—\"} · {record.updated_at ? formatBusinessDateTime(new Date(record.updated_at)) : \"—\"}</p>\n </div>\n <div className=\"flex flex-wrap gap-2 lg:justify-end\">\n {profile?.supportsReconciliation && <Action onClick={() => openReconciliation(record)}><FileCheck2 className=\"h-4 w-4\" />{spec.copy.actions.reconcile}</Action>}\n <Action primary disabled={!next.length} onClick={() => openTransition(record)}>{next.length ? spec.copy.actions.advance : spec.copy.noNextAction}<ArrowRight className=\"h-4 w-4\" /></Action>\n </div>\n </article>\n );\n })}\n </div>\n ) : <div className=\"p-12 text-center text-sm text-muted-foreground\">{activeFlow?.emptyText || spec.copy.empty}</div>}\n </div>\n <details className=\"group rounded-2xl border bg-card p-4\">\n <summary className=\"flex min-h-[44px] cursor-pointer list-none items-center justify-between gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"><span><strong className=\"block text-sm\">{spec.copy.policies}</strong><span className=\"mt-1 block text-sm leading-6 text-muted-foreground\">{spec.copy.policyIntro}</span></span><ChevronDown className=\"h-4 w-4 shrink-0 transition-transform group-open:rotate-180\" /></summary>\n <div className=\"mt-4 grid gap-3 border-t pt-4 md:grid-cols-2 xl:grid-cols-3\">\n {policies.map((item) => (\n <article key={item.id} className=\"rounded-xl bg-muted/45 p-3\">\n <div className=\"flex items-center justify-between gap-2\"><strong className=\"text-sm\">{item.name}</strong><StateBadge label={item.state} /></div>\n <p className=\"mt-1 text-xs text-muted-foreground\">{item.code} · {item.region_code} · v{item.version}</p>\n </article>\n ))}\n {!policies.length && <p className=\"text-sm text-muted-foreground\">{spec.copy.empty}</p>}\n </div>\n </details>\n </section>\n </AppPageStates>\n {footer}\n {panel === \"record\" && (\n <Drawer title={activeFlow?.createLabel || spec.copy.createRecord} closeLabel={spec.copy.close} close={() => setPanel(null)}>\n <div className=\"grid gap-4\">\n <SelectField label={spec.copy.fields.type} value={draft.recordType} options={creatableRecordTypes} set={(value) => setDraft({ ...draft, recordType: value })} />\n {spec.context && <CrossAppRecordPicker label={spec.context.label} description={spec.context.description} placeholder={spec.context.placeholder} emptyText={spec.context.emptyText} unavailableText={spec.context.unavailableText} forbiddenText={spec.context.forbiddenText} loadPage={spec.context.loadPage} selected={selectedContext} onSelect={setSelectedContext} />}\n <TextField label={spec.copy.fields.name} value={draft.name} set={(value) => setDraft({ ...draft, name: value })} required />\n <TextField label={spec.copy.fields.description} type=\"textarea\" value={draft.description} set={(value) => setDraft({ ...draft, description: value })} required />\n {(() => {\n const profile = spec.experience.recordProfiles[draft.recordType];\n const fieldKeys = new Set(profile?.fieldKeys || spec.fields.map((field) => field.key));\n const advancedKeys = new Set(profile?.advancedFieldKeys || []);\n const primaryFields = spec.fields.filter((field) => fieldKeys.has(field.key) && !advancedKeys.has(field.key));\n const advancedFields = spec.fields.filter((field) => fieldKeys.has(field.key) && advancedKeys.has(field.key));\n const renderField = (field: WorkspaceField) => <DynamicField key={field.key} locale={spec.locale} field={{ ...field, required: profile?.requiredFieldKeys.includes(field.key) ?? field.required }} value={draft.values[field.key]} set={(value) => setDraft({ ...draft, values: { ...draft.values, [field.key]: value } })} />;\n return <>\n {primaryFields.map(renderField)}\n <details className=\"group rounded-xl border bg-muted/20 p-3\">\n <summary className=\"flex min-h-[44px] cursor-pointer list-none items-center justify-between gap-3 font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\">\n <span><span className=\"block text-sm\">{spec.experience.copy.advancedOptions}</span><span className=\"mt-0.5 block text-xs font-normal text-muted-foreground\">{spec.experience.copy.advancedOptionsHint}</span></span>\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform group-open:rotate-180\" />\n </summary>\n <div className=\"mt-3 grid gap-4 border-t pt-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <SelectField label={spec.copy.fields.priority} value={draft.priority} options={spec.copy.priorities} set={(value) => setDraft({ ...draft, priority: value })} />\n <TextField label={spec.copy.fields.dueAt} type=\"date\" locale={spec.locale} value={draft.dueAt} set={(value) => setDraft({ ...draft, dueAt: value })} />\n </div>\n {advancedFields.map(renderField)}\n </div>\n </details>\n </>;\n })()}\n <PanelActions copy={spec.copy} saving={saving} cancel={() => setPanel(null)} save={createRecord} />\n </div>\n </Drawer>\n )}\n {panel === \"policy\" && (\n <Drawer title={spec.copy.createPolicy} closeLabel={spec.copy.close} close={() => setPanel(null)}>\n <div className=\"grid gap-4\">\n <SelectField label={spec.copy.fields.policyType} value={policy.policyType} options={spec.policyTypes} set={(value) => setPolicy({ ...policy, policyType: value })} />\n <TextField label={spec.copy.fields.name} value={policy.name} set={(value) => setPolicy({ ...policy, name: value })} required />\n <TextField label={spec.copy.fields.effectiveFrom} type=\"date\" locale={spec.locale} value={policy.effectiveFrom} set={(value) => setPolicy({ ...policy, effectiveFrom: value })} required />\n <div className=\"rounded-xl bg-muted/35 p-4\">\n <SelectField label={spec.experience.copy.experienceLevel} value={experienceLevel} options={[\n { value: \"basic\", label: spec.experience.copy.basic },\n { value: \"standard\", label: spec.experience.copy.standard },\n { value: \"advanced\", label: spec.experience.copy.advanced },\n ]} set={(value) => setExperienceLevel(value as WorkspaceExperienceLevel)} />\n <p className=\"mt-2 text-xs leading-5 text-muted-foreground\">{spec.experience.copy.experienceLevelHint}</p>\n </div>\n {!!spec.experience.capabilities.length && <fieldset className=\"rounded-xl border p-4\">\n <legend className=\"px-1 text-sm font-semibold\">{spec.experience.copy.optionalCapabilities}</legend>\n <p className=\"mb-3 text-xs leading-5 text-muted-foreground\">{spec.experience.copy.optionalCapabilitiesHint}</p>\n <div className=\"grid gap-3\">{spec.experience.capabilities.map((capability) => <label key={capability.key} className=\"flex min-h-[44px] items-start gap-3 rounded-lg bg-muted/35 p-3 text-sm\">\n <AppCheckboxInput className=\"mt-1\" checked={enabledFeatures.has(capability.key)} onChange={(event) => setEnabledFeatures((current) => { const next = new Set(current); if (event.target.checked) next.add(capability.key); else next.delete(capability.key); return next; })} />\n <span><strong className=\"block\">{capability.label}</strong><span className=\"mt-1 block text-xs leading-5 text-muted-foreground\">{capability.description}</span></span>\n </label>)}</div>\n </fieldset>}\n <details className=\"group rounded-xl border bg-muted/20 p-3\">\n <summary className=\"flex min-h-[44px] cursor-pointer list-none items-center justify-between gap-3 text-sm font-medium\"><span>{spec.experience.copy.advancedOptions}</span><ChevronDown className=\"h-4 w-4 transition-transform group-open:rotate-180\" /></summary>\n <div className=\"mt-3 grid gap-4 border-t pt-4 sm:grid-cols-2\">\n <TextField label={spec.copy.fields.region} value={policy.region} set={(value) => setPolicy({ ...policy, region: value })} />\n <TextField label={spec.copy.fields.code} value={policy.code} set={(value) => setPolicy({ ...policy, code: value })} />\n <TextField label={spec.copy.fields.version} type=\"number\" value={policy.version} set={(value) => setPolicy({ ...policy, version: value })} />\n <TextField label={spec.copy.fields.threshold} type=\"number\" value={policy.threshold} set={(value) => setPolicy({ ...policy, threshold: value })} />\n <TextField label={spec.copy.fields.tolerance} type=\"number\" value={policy.tolerance} set={(value) => setPolicy({ ...policy, tolerance: value })} />\n </div>\n </details>\n <PanelActions copy={spec.copy} saving={saving} cancel={() => setPanel(null)} save={savePolicy} />\n </div>\n </Drawer>\n )}\n {panel === \"transition\" && selectedRecord && (\n <Drawer title={`${spec.copy.actions.advance} · ${selectedRecord.number}`} closeLabel={spec.copy.close} close={() => setPanel(null)}>\n <div className=\"grid gap-4\">\n <SelectField label={spec.copy.fields.state} value={transitionTarget} options={(spec.transitions[selectedRecord.state] || []).map((value) => ({ value, label: spec.states.find((item) => item.value === value)?.label || value }))} set={setTransitionTarget} />\n <TextField label={spec.copy.fields.evidence} type=\"textarea\" value={evidence} set={setEvidence} required />\n <p className=\"text-sm leading-6 text-muted-foreground\">{spec.copy.evidenceHint}</p>\n <PanelActions copy={spec.copy} saving={saving} cancel={() => setPanel(null)} save={transition} />\n </div>\n </Drawer>\n )}\n {panel === \"reconcile\" && selectedRecord && (\n <Drawer title={`${spec.copy.actions.reconcile} · ${selectedRecord.number}`} closeLabel={spec.copy.close} close={() => setPanel(null)}>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <TextField label={spec.copy.fields.expected} type=\"number\" value={reconciliation.expected} set={(value) => setReconciliation({ ...reconciliation, expected: value })} required />\n <TextField label={spec.copy.fields.actual} type=\"number\" value={reconciliation.actual} set={(value) => setReconciliation({ ...reconciliation, actual: value })} required />\n <TextField label={spec.copy.fields.tolerance} type=\"number\" value={reconciliation.tolerance} set={(value) => setReconciliation({ ...reconciliation, tolerance: value })} required />\n <div />\n <div className=\"sm:col-span-2\"><TextField label={spec.copy.fields.resolution} type=\"textarea\" value={reconciliation.resolution} set={(value) => setReconciliation({ ...reconciliation, resolution: value })} /></div>\n <div className=\"sm:col-span-2\"><PanelActions copy={spec.copy} saving={saving} cancel={() => setPanel(null)} save={reconcile} /></div>\n </div>\n </Drawer>\n )}\n {panel === \"help\" && (\n <Drawer title={spec.copy.help} closeLabel={spec.copy.close} close={() => setPanel(null)}>\n <div className=\"grid gap-5\">\n {spec.help.map((section, index) => (\n <section key={section.title} className=\"rounded-xl bg-muted/35 p-4\">\n <p className=\"text-xs font-semibold text-muted-foreground\">{String(index + 1).padStart(2, \"0\")}</p>\n <h2 className=\"mt-1 font-semibold\">{section.title}</h2>\n <p className=\"mt-2 text-sm leading-6 text-muted-foreground\">{section.body}</p>\n <ol className=\"mt-3 grid gap-2 text-sm leading-6\">{section.steps.map((step) => <li key={step} className=\"flex gap-2\"><span className=\"text-muted-foreground\">—</span><span>{step}</span></li>)}</ol>\n </section>\n ))}\n </div>\n </Drawer>\n )}\n </AppPage>\n );\n}\n\nfunction Action({ children, onClick, primary = false, disabled = false }: { children: ReactNode; onClick: () => void; primary?: boolean; disabled?: boolean }) {\n return <button type=\"button\" disabled={disabled} onClick={onClick} className={`inline-flex min-h-[44px] items-center justify-center gap-2 rounded-lg px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 ${primary ? \"bg-primary text-primary-foreground hover:bg-primary/90\" : \"border bg-background hover:bg-accent\"}`}>{children}</button>;\n}\n\nfunction Banner({ children, tone }: { children: ReactNode; tone: \"error\" | \"success\" }) {\n return <div role={tone === \"error\" ? \"alert\" : \"status\"} className={`my-4 flex items-center gap-2 rounded-xl border p-4 text-sm ${tone === \"error\" ? \"border-destructive/30 bg-destructive/5 text-destructive\" : \"border-emerald-200 bg-emerald-50 text-emerald-800\"}`}>{children}</div>;\n}\n\nfunction StateBadge({ label }: { label: string }) {\n return <span className=\"inline-flex rounded-md bg-muted px-2 py-1 text-xs font-semibold text-foreground\">{label}</span>;\n}\n\nfunction Drawer({ title, closeLabel, close, children }: { title: string; closeLabel: string; close: () => void; children: ReactNode }) {\n return <AppModal open onClose={close} title={title} closeLabel={closeLabel} size=\"lg\">{children}</AppModal>;\n}\n\nfunction TextField({ label, value, set, type = \"text\", required = false, locale = \"en\" }: { label: string; value: string; set: (value: string) => void; type?: \"text\" | \"number\" | \"date\" | \"datetime-local\" | \"textarea\"; required?: boolean; locale?: string }) {\n return <label className=\"grid gap-1.5 text-sm font-medium\"><span>{label}{required ? \" *\" : \"\"}</span>{type === \"textarea\" ? <textarea className=\"enterprise-input min-h-[112px] resize-y\" value={value} required={required} onChange={(event) => set(event.target.value)} /> : type === \"date\" ? <AppDatePicker value={value} onChange={set} locale={locale} clearable={!required} aria-label={label} popoverLayer=\"aboveModal\" /> : type === \"datetime-local\" ? <AppDateTimePicker value={value} onChange={set} locale={locale} clearable={!required} aria-label={label} popoverLayer=\"aboveModal\" /> : <input className=\"enterprise-input min-h-[44px]\" type={type} value={value} required={required} onChange={(event) => set(event.target.value)} />}</label>;\n}\n\nfunction SelectField({ label, value, options, set }: { label: string; value: string; options: readonly WorkspaceOption[]; set: (value: string) => void }) {\n return <label className=\"grid gap-1.5 text-sm font-medium\"><span>{label}</span><AppSelectInput className=\"enterprise-input min-h-[44px]\" value={value} onChange={(event) => set(event.target.value)}>{options.map((option) => <option key={option.value} value={option.value}>{option.label}</option>)}</AppSelectInput></label>;\n}\n\nfunction DynamicField({ field, value, set, locale }: { field: WorkspaceField; value: BusinessFieldValue | undefined; set: (value: BusinessFieldValue) => void; locale: string }) {\n if (field.type === \"select\") return <div><SelectField label={field.label} value={String(value || field.options?.[0]?.value || \"\")} options={field.options || []} set={set} />{field.help && <p className=\"mt-1 text-xs text-muted-foreground\">{field.help}</p>}</div>;\n return <div><TextField label={field.label} type={field.type} locale={locale} value={String(value ?? \"\")} set={(next) => set(field.type === \"number\" && next !== \"\" ? Number(next) : next)} required={field.required} />{field.help && <p className=\"mt-1 text-xs text-muted-foreground\">{field.help}</p>}</div>;\n}\n\nfunction PanelActions({ copy, saving, cancel, save }: { copy: TaskWorkspaceSpec[\"copy\"]; saving: boolean; cancel: () => void; save: () => void }) {\n return <div className=\"mt-2 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\"><Action onClick={cancel}>{copy.actions.cancel}</Action><Action primary disabled={saving} onClick={save}>{copy.actions.save}</Action></div>;\n}\n"],"names":["catalog","createWorkspaceExperience","applicationId","locale","recordTypes","fields","entry","allFieldKeys","field","basicTypes","item","advancedTypes","reconcileTypes","advancedFields","advancedTypeLabels","recordProfiles","type","fieldKeys","advancedFieldKeys","key","requiredFieldKeys","level","readExperienceConfiguration","policies","experience","today","candidate","policy","experienceLevel","configured","value","enabledFeatures","availableRecordTypes","rank","profile","experiencePolicyConfiguration","enabled","allowedLevels","enabledRecordTypes","nowRevision","TaskWorkspace","spec","api","footer","records","setRecords","useState","setPolicies","loading","setLoading","saving","setSaving","error","setError","notice","setNotice","activeFlowId","setActiveFlowId","panel","setPanel","selectedRecord","setSelectedRecord","selectedContext","setSelectedContext","filter","setFilter","draft","setDraft","evidence","setEvidence","transitionTarget","setTransitionTarget","reconciliation","setReconciliation","setPolicy","setExperienceLevel","setEnabledFeatures","load","useCallback","nextRecords","nextPolicies","current","currentFlow","flow","record","configuration","reason","useEffect","run","operation","activeFlow","useMemo","flowRecords","filteredRecords","filterBusinessRecords","creatableRecordTypes","recordType","activeThreshold","metrics","selectFlow","firstType","openTransition","target","openReconciliation","activeTolerance","createRecord","validation","validateRecordDraft","revision","createIdempotencyKey","transition","validateTransition","reconcile","result","calculateReconciliation","savePolicy","code","jsxs","AppPage","Action","jsx","HelpCircle","RefreshCw","Settings2","Plus","Banner","AlertCircle","CheckCircle2","selected","count","Search","event","AppSelectInput","option","AppPageStates","next","StateBadge","formatBusinessDateTime","FileCheck2","ArrowRight","ChevronDown","Drawer","SelectField","CrossAppRecordPicker","TextField","advancedKeys","primaryFields","renderField","DynamicField","Fragment","PanelActions","capability","AppCheckboxInput","section","index","step","children","onClick","primary","disabled","tone","label","title","closeLabel","close","AppModal","set","required","AppDatePicker","AppDateTimePicker","options","copy","cancel","save"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ChangeEvent, InputHTMLAttributes } from 'react';
2
+
3
+ export type AppCheckboxInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'checked' | 'defaultChecked' | 'onChange' | 'type'> & {
4
+ checked?: boolean;
5
+ defaultChecked?: boolean;
6
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
7
+ };
8
+ /** Input-compatible adapter for the platform Checkbox. */
9
+ export declare function AppCheckboxInput({ checked, defaultChecked, onChange, className, disabled, required, name, value, id, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy }: AppCheckboxInputProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ export interface AppConfirmDialogProps {
2
+ open: boolean;
3
+ title: string;
4
+ message: string;
5
+ confirmLabel?: string;
6
+ cancelLabel?: string;
7
+ onConfirm: () => void;
8
+ onCancel: () => void;
9
+ danger?: boolean;
10
+ loading?: boolean;
11
+ }
12
+ export declare function AppConfirmDialog({ open, title, message, confirmLabel, cancelLabel, onConfirm, onCancel, danger, loading, }: AppConfirmDialogProps): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ export interface AppDashboardSkeletonProps {
2
+ className?: string;
3
+ }
4
+ /**
5
+ * Page-level loading state for GeniApp dashboards. Its chrome and responsive
6
+ * grid mirror `AppPage` and the common dashboard composition so loading does
7
+ * not shift from a generic table into the final page.
8
+ */
9
+ export declare function AppDashboardSkeleton({ className }: AppDashboardSkeletonProps): import("react").JSX.Element;
@@ -0,0 +1,69 @@
1
+ import { Matcher } from 'react-day-picker';
2
+ import * as React from 'react';
3
+ export type AppDatePickerPopoverLayer = 'default' | 'aboveModal';
4
+ export type AppDateTimePickerPopoverLayer = AppDatePickerPopoverLayer;
5
+ export interface AppTemporalLabels {
6
+ chooseDate: string;
7
+ chooseDateTime: string;
8
+ chooseTime: string;
9
+ clear: string;
10
+ today: string;
11
+ previousYear: string;
12
+ nextYear: string;
13
+ hour: string;
14
+ minute: string;
15
+ apply: string;
16
+ }
17
+ export interface AppDatePickerProps {
18
+ id?: string;
19
+ value: string;
20
+ onChange: (value: string) => void;
21
+ disabled?: boolean;
22
+ placeholder?: string;
23
+ className?: string;
24
+ triggerClassName?: string;
25
+ min?: string;
26
+ max?: string;
27
+ locale?: string;
28
+ labels?: Partial<AppTemporalLabels>;
29
+ clearable?: boolean;
30
+ 'aria-label'?: string;
31
+ popoverLayer?: AppDatePickerPopoverLayer;
32
+ disabledDays?: Matcher | Matcher[];
33
+ presets?: Array<{
34
+ label: string;
35
+ value: string;
36
+ }>;
37
+ }
38
+ export interface AppDateRangePickerProps extends Omit<AppDatePickerProps, 'value' | 'onChange' | 'presets'> {
39
+ value: {
40
+ from: string;
41
+ to: string;
42
+ };
43
+ onChange: (value: {
44
+ from: string;
45
+ to: string;
46
+ }) => void;
47
+ presets?: Array<{
48
+ label: string;
49
+ value: {
50
+ from: string;
51
+ to: string;
52
+ };
53
+ }>;
54
+ }
55
+ export interface AppDateTimePickerProps extends Omit<AppDatePickerProps, 'placeholder'> {
56
+ placeholder?: string;
57
+ minuteStep?: number;
58
+ }
59
+ export interface AppTimePickerProps extends Pick<AppDatePickerProps, 'id' | 'value' | 'onChange' | 'disabled' | 'className' | 'triggerClassName' | 'locale' | 'labels' | 'clearable' | 'aria-label' | 'popoverLayer'> {
60
+ placeholder?: string;
61
+ minuteStep?: number;
62
+ }
63
+ export declare function temporalLabels(locale?: string, overrides?: Partial<AppTemporalLabels>): AppTemporalLabels;
64
+ export declare function parseBusinessDate(value?: string): Date | undefined;
65
+ export declare function formatBusinessDateValue(date: Date): string;
66
+ export declare function AppDatePicker(props: AppDatePickerProps): React.JSX.Element;
67
+ export declare function AppDateRangePicker(props: AppDateRangePickerProps): React.JSX.Element;
68
+ export declare function AppDateTimePicker(props: AppDateTimePickerProps): React.JSX.Element;
69
+ export declare function AppTimePicker(props: AppTimePickerProps): React.JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export type AppModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'wide';
4
+ export interface AppModalProps {
5
+ open: boolean;
6
+ onClose: () => void;
7
+ title: string;
8
+ description?: string;
9
+ children: ReactNode;
10
+ footer?: ReactNode;
11
+ size?: AppModalSize;
12
+ contentClassName?: string;
13
+ bodyClassName?: string;
14
+ closeLabel?: string;
15
+ closeOnOutside?: boolean;
16
+ }
17
+ export declare function AppModal({ open, onClose, title, description, children, footer, size, contentClassName, bodyClassName, closeLabel, closeOnOutside, }: AppModalProps): import("react").JSX.Element | null;
18
+ export interface AppHelpSheetProps {
19
+ open: boolean;
20
+ onClose: () => void;
21
+ title: string;
22
+ description?: string;
23
+ children: ReactNode;
24
+ side?: 'left' | 'right';
25
+ className?: string;
26
+ }
27
+ export declare function AppHelpSheet({ open, onClose, title, description, children, side, className }: AppHelpSheetProps): import("react").JSX.Element | null;
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ import { PageSkeletonPreset } from '../../primitives/page-skeleton';
3
+
4
+ export interface AppPageStatesProps {
5
+ loading: boolean;
6
+ error: string | null;
7
+ onRetry?: () => void;
8
+ retryLabel?: string;
9
+ /** Used when `loadingFallback` is not provided. Default: `table-page`. */
10
+ preset?: PageSkeletonPreset;
11
+ /** Custom skeleton for pages whose layout does not match a preset. */
12
+ loadingFallback?: ReactNode;
13
+ className?: string;
14
+ children: ReactNode;
15
+ }
16
+ /** Standard GeniApp page body: loading skeleton, query error, or main content. */
17
+ export declare function AppPageStates({ loading, error, onRetry, retryLabel, preset, loadingFallback, className, children, }: AppPageStatesProps): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { ChangeEvent, ReactNode, SelectHTMLAttributes } from 'react';
2
+
3
+ export type AppSelectInputProps = Omit<SelectHTMLAttributes<HTMLSelectElement>, 'onChange' | 'size'> & {
4
+ onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;
5
+ children?: ReactNode;
6
+ placeholder?: string;
7
+ contentClassName?: string;
8
+ };
9
+ /** Input-compatible adapter for the platform Select. */
10
+ export declare function AppSelectInput({ value, defaultValue, onChange, children, className, contentClassName, disabled, required, name, id, placeholder, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy, }: AppSelectInputProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { AppTemporalLabels, AppDatePickerPopoverLayer } from './AppDatePicker';
2
+ import * as React from 'react';
3
+ export type TemporalInputType = 'date' | 'datetime-local' | 'time';
4
+ export interface AppTemporalInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'type' | 'min' | 'max'> {
5
+ type?: React.HTMLInputTypeAttribute;
6
+ value?: string | number | readonly string[];
7
+ defaultValue?: string | number | readonly string[];
8
+ onChange?: React.ChangeEventHandler<HTMLInputElement>;
9
+ onValueChange?: (value: string) => void;
10
+ min?: string | number;
11
+ max?: string | number;
12
+ locale?: string;
13
+ labels?: Partial<AppTemporalLabels>;
14
+ clearable?: boolean;
15
+ minuteStep?: number;
16
+ popoverLayer?: AppDatePickerPopoverLayer;
17
+ }
18
+ export declare function isTemporalInputType(type?: React.HTMLInputTypeAttribute): type is TemporalInputType;
19
+ export declare const AppTemporalInput: React.ForwardRefExoticComponent<AppTemporalInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ import { LucideIcon } from 'lucide-react';
3
+
4
+ export interface AppPageProps {
5
+ title: string;
6
+ icon?: LucideIcon;
7
+ description?: string;
8
+ /** Renders to the left of the title block (e.g. a back button). */
9
+ leading?: ReactNode;
10
+ /** Action buttons rendered top-right. */
11
+ actions?: ReactNode;
12
+ children: ReactNode;
13
+ }
14
+ export declare function AppPage({ title, icon: Icon, description, leading, actions, children }: AppPageProps): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ export interface QueryErrorAlertProps {
2
+ message: string;
3
+ onRetry?: () => void;
4
+ retryLabel?: string;
5
+ className?: string;
6
+ }
7
+ export declare function QueryErrorAlert({ message, onRetry, retryLabel, className, }: QueryErrorAlertProps): import("react").JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface AppSidebarProps {
4
+ children: ReactNode;
5
+ sidebarHeader: ReactNode | ((collapsed: boolean) => ReactNode);
6
+ /**
7
+ * Legacy single-level navigation. Existing GeniApps can keep passing this
8
+ * prop without any behavioural or visual changes.
9
+ */
10
+ sidebarNav?: ReactNode | ((collapsed: boolean) => ReactNode);
11
+ /**
12
+ * Optional grouped navigation for applications with a second information
13
+ * level. When supplied it takes precedence over `sidebarNav`.
14
+ */
15
+ sidebarNavGroups?: AppSidebarNavGroup[] | ((collapsed: boolean) => AppSidebarNavGroup[]);
16
+ /**
17
+ * Optional navigation pinned below the scrollable navigation area. A render
18
+ * function can adapt the item to the desktop collapsed state. Returning
19
+ * `null` removes both the footer content and its separator.
20
+ */
21
+ sidebarFooter?: ReactNode | ((collapsed: boolean) => ReactNode);
22
+ collapsible?: boolean;
23
+ defaultCollapsed?: boolean;
24
+ withMobileDrawer?: boolean;
25
+ mobileTitle?: string;
26
+ navAriaLabel?: string;
27
+ expandLabel?: string;
28
+ collapseLabel?: string;
29
+ openLabel?: string;
30
+ closeLabel?: string;
31
+ storageKey?: string;
32
+ }
33
+ export interface AppSidebarNavGroup {
34
+ /** Stable key used for expansion state and rendering. */
35
+ id: string;
36
+ /** Business-facing section label, for example "智能审核". */
37
+ label: ReactNode;
38
+ /** Optional compact symbol shown when the sidebar is collapsed. */
39
+ icon?: ReactNode;
40
+ /** Navigation links or buttons. Callers retain routing and RBAC control. */
41
+ items: ReactNode[];
42
+ /** Groups default to expandable. Set false for a permanent section. */
43
+ collapsible?: boolean;
44
+ /** Initial state for expandable groups. */
45
+ defaultOpen?: boolean;
46
+ }
47
+ export declare function AppSidebar({ children, sidebarHeader, sidebarNav, sidebarNavGroups, sidebarFooter, collapsible, defaultCollapsed, withMobileDrawer, mobileTitle: _mobileTitle, navAriaLabel, expandLabel, collapseLabel, openLabel, closeLabel, storageKey, }: AppSidebarProps): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ export { AppSidebar, type AppSidebarProps, type AppSidebarNavGroup } from './Sidebar';
2
+ export { AppPage, type AppPageProps } from './Page';
3
+ export { AppPageStates, type AppPageStatesProps } from './AppPageStates';
4
+ export { AppDashboardSkeleton, type AppDashboardSkeletonProps } from './AppDashboardSkeleton';
5
+ export { QueryErrorAlert } from './QueryErrorAlert';
6
+ export { AppModal, AppHelpSheet, type AppModalProps, type AppModalSize, type AppHelpSheetProps } from './AppModal';
7
+ export { AppConfirmDialog, type AppConfirmDialogProps } from './AppConfirmDialog';
8
+ export { AppDatePicker, AppDateRangePicker, AppDateTimePicker, AppTimePicker, temporalLabels, parseBusinessDate, formatBusinessDateValue, type AppDatePickerProps, type AppDateRangePickerProps, type AppDateTimePickerProps, type AppTimePickerProps, type AppTemporalLabels, type AppDatePickerPopoverLayer, type AppDateTimePickerPopoverLayer, } from './AppDatePicker';
9
+ export { AppTemporalInput, isTemporalInputType, type AppTemporalInputProps, type TemporalInputType, } from './AppTemporalInput';
10
+ export { AppSelectInput, type AppSelectInputProps } from './AppSelectInput';
11
+ export { AppCheckboxInput, type AppCheckboxInputProps } from './AppCheckboxInput';
12
+ export { UserDisplay, type UserDisplayProps } from '../user/UserDisplay';
13
+ export { UserSelect, type UserSelectProps } from '../user/UserSelect';
14
+ export { useUserDirectory, type UseUserDirectoryOptions, type UseUserDirectoryResult, } from '../user/useUserDirectory';
15
+ export type { PublicUserProfile, UserDirectoryClient } from '../user/userDirectoryTypes';
16
+ export { Skeleton } from '../../ui/skeleton';
17
+ export { TablePageSkeleton, PageLoadingSkeleton, DetailTabsSkeleton, ConfigEditorSkeleton, FormPageSkeleton, GridCardsSkeleton, StatsRowSkeleton, type TablePageSkeletonProps, type PageSkeletonPreset, } from '../../primitives/page-skeleton';
@@ -0,0 +1,17 @@
1
+ export declare function userInitials(name: string, email?: string): string;
2
+ export declare function resolveAvatarUrl(u: {
3
+ avatarUrl?: string | null;
4
+ avatar?: string | null;
5
+ }): string | null;
6
+ export type UserAvatarVariant = 'default' | 'chatUser';
7
+ export interface UserAvatarProps {
8
+ name: string;
9
+ email?: string;
10
+ avatarUrl?: string | null;
11
+ /** Tailwind size classes, e.g. size-5, size-6, size-20 */
12
+ sizeClassName?: string;
13
+ className?: string;
14
+ variant?: UserAvatarVariant;
15
+ shape?: 'circle' | 'rounded';
16
+ }
17
+ export declare function UserAvatar({ name, email, avatarUrl, sizeClassName, className, variant, shape, }: UserAvatarProps): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { PublicUserProfile } from './userDirectoryTypes';
2
+
3
+ export type UserDisplayProps = {
4
+ userId?: string | null;
5
+ profile?: PublicUserProfile | null;
6
+ showAvatar?: boolean;
7
+ className?: string;
8
+ emptyLabel?: string;
9
+ };
10
+ export declare function UserDisplay({ userId, profile, showAvatar, className, emptyLabel, }: UserDisplayProps): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { PublicUserProfile } from './userDirectoryTypes';
2
+
3
+ export type UserSelectProps = {
4
+ value: string;
5
+ onChange: (userId: string) => void;
6
+ members: PublicUserProfile[];
7
+ allowEmpty?: boolean;
8
+ emptyLabel?: string;
9
+ placeholder?: string;
10
+ disabled?: boolean;
11
+ className?: string;
12
+ id?: string;
13
+ };
14
+ export declare function UserSelect({ value, onChange, members, allowEmpty, emptyLabel, placeholder, disabled, className, id, }: UserSelectProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { PublicUserProfile, UserDirectoryClient } from './userDirectoryTypes';
2
+
3
+ export type UseUserDirectoryOptions = {
4
+ memberStatus?: string;
5
+ };
6
+ export type UseUserDirectoryResult = {
7
+ loading: boolean;
8
+ error: string | null;
9
+ members: PublicUserProfile[];
10
+ getProfile: (userId: string | null | undefined) => PublicUserProfile | undefined;
11
+ resolveMany: (userIds: string[]) => Promise<void>;
12
+ };
13
+ export declare function useUserDirectory(client: UserDirectoryClient | null | undefined, options?: UseUserDirectoryOptions): UseUserDirectoryResult;
@@ -0,0 +1,18 @@
1
+ export type PublicUserProfile = {
2
+ id: string;
3
+ name: string;
4
+ email?: string;
5
+ avatarUrl?: string | null;
6
+ status?: string;
7
+ };
8
+ /** Minimal GeniSpace client surface for user directory hooks. */
9
+ export type UserDirectoryClient = {
10
+ spaces: {
11
+ listMemberProfiles(params?: {
12
+ status?: string;
13
+ }): Promise<PublicUserProfile[]>;
14
+ };
15
+ users: {
16
+ getPublicProfiles(userIds: string[]): Promise<PublicUserProfile[]>;
17
+ };
18
+ };
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ export type FormSectionProps = {
3
+ title: string;
4
+ description?: string;
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ };
8
+ /**
9
+ * Grouped form block: title, optional description, and fields (design tokens).
10
+ */
11
+ export declare function FormSection({ title, description, children, className }: FormSectionProps): React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { Toaster } from './toaster';
2
+ export { useToast, toast, actionTypes, reducer } from './use-toast';
@@ -0,0 +1 @@
1
+ export declare function Toaster(): import("react").JSX.Element;