@declarion/react 0.65.0 → 0.66.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 (467) hide show
  1. package/dist-lib/api/access-expiry.js +32 -0
  2. package/dist-lib/api/agents.js +105 -0
  3. package/dist-lib/api/auth-redirect.js +30 -0
  4. package/dist-lib/api/auth.js +67 -0
  5. package/dist-lib/api/batch.js +34 -0
  6. package/dist-lib/api/client.js +241 -0
  7. package/dist-lib/api/data.js +122 -0
  8. package/dist-lib/api/entities.js +160 -0
  9. package/dist-lib/api/events.js +120 -0
  10. package/dist-lib/api/fileReferences.js +8 -0
  11. package/dist-lib/api/params.js +20 -0
  12. package/dist-lib/api/properties.js +25 -0
  13. package/dist-lib/api/request-bounds.js +28 -0
  14. package/dist-lib/api/schema.js +71 -0
  15. package/dist-lib/api/session-renewal.js +36 -0
  16. package/dist-lib/api/status.js +17 -0
  17. package/dist-lib/app.js +262 -0
  18. package/dist-lib/components/actions/ActionButton.js +116 -0
  19. package/dist-lib/{ActionDialog-C6EG-AmC.js → components/actions/ActionDialog.js} +63 -53
  20. package/dist-lib/{ActionResultDialog.impl-BATutW8J.js → components/actions/ActionResultDialog.impl.js} +53 -48
  21. package/dist-lib/components/actions/ActionResultDialog.js +12 -0
  22. package/dist-lib/components/actions/ActionRunner.js +274 -0
  23. package/dist-lib/components/actions/ObjectActionBar.js +127 -0
  24. package/dist-lib/components/actions/PropertyGridEditor.js +202 -0
  25. package/dist-lib/components/actions/ResponsiveActionBar.js +773 -0
  26. package/dist-lib/components/actions/RowActionsKebab.js +90 -0
  27. package/dist-lib/{AgentChatPanel.impl-D5y_qEex.js → components/agents/AgentChatPanel.impl.js} +314 -362
  28. package/dist-lib/components/agents/AgentChatPanel.js +12 -0
  29. package/dist-lib/components/agents/AgentConversationDrawer.js +59 -0
  30. package/dist-lib/components/agents/AgentElicitForm.js +152 -0
  31. package/dist-lib/components/agents/AgentOpenFollower.impl.js +7 -0
  32. package/dist-lib/components/agents/AgentOpenFollower.js +12 -0
  33. package/dist-lib/components/agents/AgentPicker.js +58 -0
  34. package/dist-lib/components/agents/transcript-runs.js +52 -0
  35. package/dist-lib/components/chrome/AssociationTabs.js +176 -0
  36. package/dist-lib/components/chrome/AuditMetaStrip.js +64 -0
  37. package/dist-lib/components/chrome/Breadcrumbs.js +67 -0
  38. package/dist-lib/components/chrome/HighlightsStrip.js +39 -0
  39. package/dist-lib/{PageHeader-DiwLe7CO.js → components/chrome/PageHeader.js} +19 -15
  40. package/dist-lib/{PageShell-BJz1MiTH.js → components/chrome/PageShell.js} +3 -3
  41. package/dist-lib/components/chrome/RecordHeader.js +119 -0
  42. package/dist-lib/{headerActionZone-bef-tZZ7.js → components/chrome/headerActionZone.js} +1 -1
  43. package/dist-lib/components/detail-layout/AssociatedBlock.js +1244 -0
  44. package/dist-lib/components/detail-layout/AssociatedToolbar.js +87 -0
  45. package/dist-lib/components/detail-layout/ChildrenBlock.js +80 -0
  46. package/dist-lib/components/detail-layout/ChildrenCards.js +156 -0
  47. package/dist-lib/components/detail-layout/ChildrenList.js +135 -0
  48. package/dist-lib/components/detail-layout/ChildrenTable.js +189 -0
  49. package/dist-lib/components/detail-layout/ChildrenTimeline.js +609 -0
  50. package/dist-lib/components/detail-layout/DetailAuditStrip.js +40 -0
  51. package/dist-lib/components/detail-layout/DetailHighlights.js +54 -0
  52. package/dist-lib/{DraggableChildrenTable-Dd5SeuF6.js → components/detail-layout/DraggableChildrenTable.js} +56 -53
  53. package/dist-lib/components/detail-layout/EditableChildrenTable.js +341 -0
  54. package/dist-lib/components/detail-layout/ErrorSummary.js +89 -0
  55. package/dist-lib/components/detail-layout/EvidenceBlock.js +66 -0
  56. package/dist-lib/{FieldRow-DedGIY9R.js → components/detail-layout/FieldRow.js} +8 -7
  57. package/dist-lib/components/detail-layout/FieldsBlock.js +74 -0
  58. package/dist-lib/components/detail-layout/LayoutColumn.js +16 -0
  59. package/dist-lib/components/detail-layout/LayoutRenderer.js +54 -0
  60. package/dist-lib/components/detail-layout/LayoutRow.js +83 -0
  61. package/dist-lib/components/detail-layout/LayoutTabs.js +195 -0
  62. package/dist-lib/components/detail-layout/PropertiesBlock.js +74 -0
  63. package/dist-lib/components/detail-layout/QuickAddForm.js +81 -0
  64. package/dist-lib/components/detail-layout/SectionBlock.js +48 -0
  65. package/dist-lib/components/detail-layout/StatusesBlock.js +18 -0
  66. package/dist-lib/components/detail-layout/TimelineComposer.js +205 -0
  67. package/dist-lib/components/detail-layout/blockMeta.js +27 -0
  68. package/dist-lib/components/detail-layout/useManualColumnResize.js +94 -0
  69. package/dist-lib/components/detail-layout/useQuickAdd.js +85 -0
  70. package/dist-lib/components/detail-layout/widgets/EntityScorecardWidget.js +295 -0
  71. package/dist-lib/components/detail-layout/widgets/JsonDiffWidget.js +107 -0
  72. package/dist-lib/components/detail-layout/widgets/MonacoJson.js +47 -0
  73. package/dist-lib/components/detail-layout/widgets/WidgetHost.js +36 -0
  74. package/dist-lib/components/detail-layout/widgets/builtins.js +10 -0
  75. package/dist-lib/components/detail-layout/widgets/canonicalizeJson.js +32 -0
  76. package/dist-lib/components/detail-layout/widgets/monacoBootstrap.js +16 -0
  77. package/dist-lib/components/detail-layout/widgets/registry.js +13 -0
  78. package/dist-lib/components/fields/BoolField.js +13 -0
  79. package/dist-lib/components/fields/EmailField.js +16 -0
  80. package/dist-lib/components/fields/EnumField.js +38 -0
  81. package/dist-lib/components/fields/FileReferenceField.js +60 -0
  82. package/dist-lib/components/fields/IntArrayField.js +83 -0
  83. package/dist-lib/components/fields/JsonField.js +51 -0
  84. package/dist-lib/components/fields/MultilangArrayField.js +56 -0
  85. package/dist-lib/components/fields/MultilangField.js +65 -0
  86. package/dist-lib/components/fields/MultilangTextField.js +65 -0
  87. package/dist-lib/components/fields/NumberField.js +64 -0
  88. package/dist-lib/components/fields/PasswordField.js +34 -0
  89. package/dist-lib/components/fields/PhoneField.js +84 -0
  90. package/dist-lib/components/fields/RefCombobox.js +112 -0
  91. package/dist-lib/components/fields/RefField.js +45 -0
  92. package/dist-lib/components/fields/RichTextField.js +225 -0
  93. package/dist-lib/components/fields/SecretField.js +34 -0
  94. package/dist-lib/components/fields/StringArrayField.js +165 -0
  95. package/dist-lib/components/fields/StringField.js +39 -0
  96. package/dist-lib/components/fields/StructureField.js +221 -0
  97. package/dist-lib/components/fields/TextField.js +76 -0
  98. package/dist-lib/components/fields/TimestampField.js +110 -0
  99. package/dist-lib/components/fields/UrlField.js +18 -0
  100. package/dist-lib/components/fields/cells/factories/badge.js +42 -0
  101. package/dist-lib/components/fields/cells/factories/boolPill.js +17 -0
  102. package/dist-lib/components/fields/cells/factories/code.js +11 -0
  103. package/dist-lib/components/fields/cells/factories/date.js +30 -0
  104. package/dist-lib/components/fields/cells/factories/email.js +26 -0
  105. package/dist-lib/components/fields/cells/factories/emptyCell.js +10 -0
  106. package/dist-lib/components/fields/cells/factories/fileReference.js +17 -0
  107. package/dist-lib/components/fields/cells/factories/host-icons.js +146 -0
  108. package/dist-lib/components/fields/cells/factories/json.js +61 -0
  109. package/dist-lib/components/fields/cells/factories/link.js +32 -0
  110. package/dist-lib/components/fields/cells/factories/markdown.js +31 -0
  111. package/dist-lib/components/fields/cells/factories/markdownPreview.js +81 -0
  112. package/dist-lib/components/fields/cells/factories/money.js +37 -0
  113. package/dist-lib/components/fields/cells/factories/multilangInline.js +35 -0
  114. package/dist-lib/components/fields/cells/factories/nextRun.js +46 -0
  115. package/dist-lib/components/fields/cells/factories/number.js +42 -0
  116. package/dist-lib/components/fields/cells/factories/passwordMask.js +23 -0
  117. package/dist-lib/components/fields/cells/factories/phone.js +35 -0
  118. package/dist-lib/components/fields/cells/factories/refLink.js +57 -0
  119. package/dist-lib/components/fields/cells/factories/richTextPreview.js +34 -0
  120. package/dist-lib/components/fields/cells/factories/statusPill.js +35 -0
  121. package/dist-lib/components/fields/cells/factories/tagList.js +44 -0
  122. package/dist-lib/components/fields/cells/factories/text.js +5 -0
  123. package/dist-lib/components/fields/cells/factories/timestamp.js +18 -0
  124. package/dist-lib/components/fields/cells/factories/url-helpers.js +49 -0
  125. package/dist-lib/components/fields/cells/factories/url.js +45 -0
  126. package/dist-lib/components/fields/cells/registry.js +58 -0
  127. package/dist-lib/components/fields/index.js +80 -0
  128. package/dist-lib/components/fields/langMap.js +6 -0
  129. package/dist-lib/components/fields/secretValue.js +7 -0
  130. package/dist-lib/components/file-widgets/CircleImage.js +11 -0
  131. package/dist-lib/components/file-widgets/DocumentCard.js +277 -0
  132. package/dist-lib/components/file-widgets/FileList.js +213 -0
  133. package/dist-lib/{Grid-XUHm5SDe.js → components/file-widgets/Grid.js} +45 -40
  134. package/dist-lib/components/file-widgets/GridLazy.js +15 -0
  135. package/dist-lib/components/file-widgets/ImageWidget.js +354 -0
  136. package/dist-lib/components/file-widgets/LabeledSlots.js +69 -0
  137. package/dist-lib/components/file-widgets/SquareImage.js +11 -0
  138. package/dist-lib/components/file-widgets/UnknownFileWidget.js +22 -0
  139. package/dist-lib/components/file-widgets/UploadFailureText.js +10 -0
  140. package/dist-lib/components/file-widgets/WideBanner.js +11 -0
  141. package/dist-lib/components/file-widgets/builtins.js +15 -0
  142. package/dist-lib/components/file-widgets/cropper.js +13 -0
  143. package/dist-lib/components/file-widgets/draft-scope.js +59 -0
  144. package/dist-lib/components/file-widgets/helpers.js +75 -0
  145. package/dist-lib/components/file-widgets/host.js +75 -0
  146. package/dist-lib/{payload-DioMoxMX.js → components/file-widgets/payload.js} +14 -14
  147. package/dist-lib/components/file-widgets/registry.js +13 -0
  148. package/dist-lib/components/file-widgets/upload.js +180 -0
  149. package/dist-lib/components/file-widgets/useEmbedFileSrc.js +45 -0
  150. package/dist-lib/components/file-widgets/value.js +12 -0
  151. package/dist-lib/components/filters/FilterChips.js +123 -0
  152. package/dist-lib/components/filters/FilterConditionValue.js +40 -0
  153. package/dist-lib/components/filters/FilterDrawer.js +670 -0
  154. package/dist-lib/components/filters/FilterOmittedNotice.js +14 -0
  155. package/dist-lib/components/filters/filter-op-label.js +8 -0
  156. package/dist-lib/{CommandPalette.impl-DRI5kxVY.js → components/layout/CommandPalette.impl.js} +62 -61
  157. package/dist-lib/components/layout/CommandPalette.js +12 -0
  158. package/dist-lib/{DirtyTabsCloseDialog.impl-FhAiOmEb.js → components/layout/DirtyTabsCloseDialog.impl.js} +16 -14
  159. package/dist-lib/components/layout/DirtyTabsCloseDialog.js +12 -0
  160. package/dist-lib/{ImpersonationBanner.impl--g0iYwcV.js → components/layout/ImpersonationBanner.impl.js} +4 -3
  161. package/dist-lib/components/layout/ImpersonationBanner.js +12 -0
  162. package/dist-lib/components/layout/ImpersonationFrame.js +29 -0
  163. package/dist-lib/{ImpersonationStartModal.impl-BFBN0YJe.js → components/layout/ImpersonationStartModal.impl.js} +9 -9
  164. package/dist-lib/components/layout/ImpersonationStartModal.js +12 -0
  165. package/dist-lib/components/layout/Layout.js +755 -0
  166. package/dist-lib/components/layout/Rail.js +149 -0
  167. package/dist-lib/components/layout/Sidebar.js +362 -0
  168. package/dist-lib/components/layout/TabStrip.js +321 -0
  169. package/dist-lib/components/layout/TenantChip.js +355 -0
  170. package/dist-lib/components/layout/TopBar.js +305 -0
  171. package/dist-lib/components/layout/tab-close.js +24 -0
  172. package/dist-lib/components/list/ColumnPicker.js +112 -0
  173. package/dist-lib/components/list/InlineEditCell.js +107 -0
  174. package/dist-lib/components/list/PeekFieldCell.js +143 -0
  175. package/dist-lib/components/list/QuickPeek.js +263 -0
  176. package/dist-lib/components/list/ViewSwitcher.js +156 -0
  177. package/dist-lib/components/list/peekDraftStore.js +14 -0
  178. package/dist-lib/{AdminCatalogPage.impl-B-7MLqa1.js → components/pages/AdminCatalogPage.impl.js} +53 -49
  179. package/dist-lib/components/pages/AdminCatalogPage.js +12 -0
  180. package/dist-lib/components/pages/DocumentsMenu.js +150 -0
  181. package/dist-lib/components/pages/ExportMenu.js +123 -0
  182. package/dist-lib/{NotFoundPage.impl-BoX11u-P.js → components/pages/NotFoundPage.impl.js} +6 -4
  183. package/dist-lib/components/pages/NotFoundPage.js +12 -0
  184. package/dist-lib/components/pages/RecordDocumentsPanel.js +230 -0
  185. package/dist-lib/components/pages/RecordNotesPanel.js +200 -0
  186. package/dist-lib/components/pages/RecordPanels.js +18 -0
  187. package/dist-lib/components/pages/SSOCallbackPage.impl.js +28 -0
  188. package/dist-lib/components/pages/SSOCallbackPage.js +12 -0
  189. package/dist-lib/components/pages/SmartDetailPage.impl.js +986 -0
  190. package/dist-lib/components/pages/SmartDetailPage.js +12 -0
  191. package/dist-lib/components/pages/SmartListPage.impl.js +708 -0
  192. package/dist-lib/components/pages/SmartListPage.js +12 -0
  193. package/dist-lib/components/pages/SmartRecordListPage.impl.js +818 -0
  194. package/dist-lib/components/pages/SmartRecordListPage.js +12 -0
  195. package/dist-lib/components/pages/auth/AuthShell.js +350 -0
  196. package/dist-lib/{Forgot.impl-6tL6SBlS.js → components/pages/auth/Forgot.impl.js} +13 -12
  197. package/dist-lib/components/pages/auth/Forgot.js +12 -0
  198. package/dist-lib/{Reset.impl-D0pjhS6d.js → components/pages/auth/Reset.impl.js} +17 -15
  199. package/dist-lib/components/pages/auth/Reset.js +12 -0
  200. package/dist-lib/components/pages/auth/SignIn.js +252 -0
  201. package/dist-lib/{SignUp.impl-CfEXrUeg.js → components/pages/auth/SignUp.impl.js} +31 -27
  202. package/dist-lib/components/pages/auth/SignUp.js +12 -0
  203. package/dist-lib/{TwoFA.impl-B2HtPduH.js → components/pages/auth/TwoFA.impl.js} +9 -8
  204. package/dist-lib/components/pages/auth/TwoFA.js +12 -0
  205. package/dist-lib/components/pages/auth/icons.js +56 -0
  206. package/dist-lib/components/pages/exportRequest.js +17 -0
  207. package/dist-lib/components/pages/list/DataCell.js +27 -0
  208. package/dist-lib/components/pages/list/DeleteViewDialog.js +22 -0
  209. package/dist-lib/{ListCardsBody-BEoYjSZ2.js → components/pages/list/ListCardRow.js} +47 -72
  210. package/dist-lib/components/pages/list/ListCardsBody.js +31 -0
  211. package/dist-lib/components/pages/list/ListFloatbar.js +130 -0
  212. package/dist-lib/components/pages/list/ListFooter.js +138 -0
  213. package/dist-lib/components/pages/list/ListHeader.js +120 -0
  214. package/dist-lib/components/pages/list/ListNoRows.js +72 -0
  215. package/dist-lib/components/pages/list/ListTable.js +191 -0
  216. package/dist-lib/components/pages/list/ListTableRow.js +37 -0
  217. package/dist-lib/components/pages/list/ListToolbar.js +261 -0
  218. package/dist-lib/components/pages/list/ListUrlBanner.js +45 -0
  219. package/dist-lib/components/pages/list/RowActionsCell.js +49 -0
  220. package/dist-lib/components/pages/list/RowContextMenu.js +55 -0
  221. package/dist-lib/components/pages/list/SaveViewDialog.js +111 -0
  222. package/dist-lib/{SortHeaderMenu-Co5PvhTA.js → components/pages/list/SortHeaderMenu.js} +18 -17
  223. package/dist-lib/{cardProjection-Cxlogzh8.js → components/pages/list/cardProjection.js} +3 -3
  224. package/dist-lib/components/pages/list/column-sizing.js +17 -0
  225. package/dist-lib/components/pages/list/columns.js +168 -0
  226. package/dist-lib/components/pages/list/filter-meta.js +84 -0
  227. package/dist-lib/components/pages/list/page-size.js +11 -0
  228. package/dist-lib/components/pages/list/sortable-header.js +18 -0
  229. package/dist-lib/components/pages/list/table-features.js +11 -0
  230. package/dist-lib/components/pages/list/use-filter-value-labels.js +115 -0
  231. package/dist-lib/components/pages/list/useActiveView.js +98 -0
  232. package/dist-lib/components/pages/list/useHeaderReorder.js +93 -0
  233. package/dist-lib/components/pages/list/useListColumnLayout.js +56 -0
  234. package/dist-lib/components/pages/list/useListFilterPresentation.js +34 -0
  235. package/dist-lib/components/pages/list/useListQuery.js +101 -0
  236. package/dist-lib/components/pages/list/useListRowInteraction.js +120 -0
  237. package/dist-lib/components/pages/list/useListSelection.js +53 -0
  238. package/dist-lib/components/pages/list/useListSort.js +44 -0
  239. package/dist-lib/components/pages/list/useListViews.js +148 -0
  240. package/dist-lib/components/pages/list/useRowMenu.js +106 -0
  241. package/dist-lib/components/pages/list/visible-filters.js +19 -0
  242. package/dist-lib/{Preferences.impl-Ct5xwZtT.js → components/pages/profile/Preferences.impl.js} +34 -31
  243. package/dist-lib/components/pages/profile/Preferences.js +12 -0
  244. package/dist-lib/components/pages/profile/Profile.impl.js +437 -0
  245. package/dist-lib/components/pages/profile/Profile.js +12 -0
  246. package/dist-lib/{TenantParamsPage.impl-BGpdmEZg.js → components/pages/tenant-params/TenantParamsPage.impl.js} +45 -40
  247. package/dist-lib/components/pages/tenant-params/TenantParamsPage.js +12 -0
  248. package/dist-lib/components/params/ParamsBlock.js +119 -0
  249. package/dist-lib/{param-editors-TYYU7HKK.js → components/params/param-editors.js} +32 -28
  250. package/dist-lib/components/primitives/Avatar.js +33 -0
  251. package/dist-lib/components/primitives/BoolToggle.js +35 -0
  252. package/dist-lib/components/primitives/BrandGlyph.js +38 -0
  253. package/dist-lib/components/primitives/BrandLogo.js +20 -0
  254. package/dist-lib/components/primitives/Btn.js +67 -0
  255. package/dist-lib/{Check-DAfMbQIw.js → components/primitives/Check.js} +2 -2
  256. package/dist-lib/components/primitives/Chip.js +44 -0
  257. package/dist-lib/components/primitives/ClassifiedFieldLocked.js +15 -0
  258. package/dist-lib/components/primitives/Dropdown.js +85 -0
  259. package/dist-lib/components/primitives/Fields.js +751 -0
  260. package/dist-lib/components/primitives/HoverCard.js +115 -0
  261. package/dist-lib/components/primitives/IconBtn.js +37 -0
  262. package/dist-lib/{Icons-lt-7lhYR.js → components/primitives/Icons.js} +1 -1
  263. package/dist-lib/{Kbd-CNttVu0z.js → components/primitives/Kbd.js} +2 -2
  264. package/dist-lib/components/primitives/MenuItem.js +57 -0
  265. package/dist-lib/{Pill-D-wsfRhx.js → components/primitives/Pill.js} +1 -1
  266. package/dist-lib/{RecordIdBadge-wbigZaFc.js → components/primitives/RecordIdBadge.js} +5 -5
  267. package/dist-lib/components/primitives/RowField.js +47 -0
  268. package/dist-lib/{SectionCard-BYHoHWJc.js → components/primitives/SectionCard.js} +10 -10
  269. package/dist-lib/components/primitives/Spinner.js +31 -0
  270. package/dist-lib/components/primitives/StatTile.js +108 -0
  271. package/dist-lib/components/primitives/Tooltip.js +115 -0
  272. package/dist-lib/{dataTableStyles-vwD1mVOP.js → components/primitives/dataTableStyles.js} +1 -1
  273. package/dist-lib/components/shared/BlankScreen.js +13 -0
  274. package/dist-lib/{ChangePasswordDialog.impl-5hDc0wpE.js → components/shared/ChangePasswordDialog.impl.js} +27 -22
  275. package/dist-lib/{ChangePasswordDialog-C_T_3pjl.js → components/shared/ChangePasswordDialog.js} +2 -2
  276. package/dist-lib/components/shared/ConfirmDialog.js +129 -0
  277. package/dist-lib/components/shared/ConnectionNotice.js +12 -0
  278. package/dist-lib/components/shared/CopyButton.js +25 -0
  279. package/dist-lib/components/shared/DynamicIcon.js +73 -0
  280. package/dist-lib/components/shared/EmptyState.js +56 -0
  281. package/dist-lib/components/shared/ErrorBoundary.js +96 -0
  282. package/dist-lib/components/shared/LoadingSkeleton.js +117 -0
  283. package/dist-lib/components/shared/LucideIcon.js +43 -0
  284. package/dist-lib/components/shared/Markdown.js +15 -0
  285. package/dist-lib/{MarkdownRenderer-sK2TRZS-.js → components/shared/MarkdownRenderer.js} +10 -9
  286. package/dist-lib/components/shared/RefreshControl.js +42 -0
  287. package/dist-lib/components/shared/StatusGroupsDisplay.js +123 -0
  288. package/dist-lib/components/shared/StatusStepper.js +70 -0
  289. package/dist-lib/components/shared/toast/DeclarionToast.js +308 -0
  290. package/dist-lib/components/shared/useOwnRefresh.js +19 -0
  291. package/dist-lib/declarion-react.css +1 -1
  292. package/dist-lib/embed/EmbedAuthBootstrap.js +71 -0
  293. package/dist-lib/embed/EmbedContext.js +38 -0
  294. package/dist-lib/embed/EmbedDirtyReporter.js +17 -0
  295. package/dist-lib/embed/EmbedHistoryTracker.js +17 -0
  296. package/dist-lib/embed/EmbedLocationReporter.js +26 -0
  297. package/dist-lib/embed/EmbedResizeReporter.js +25 -0
  298. package/dist-lib/embed/EmbedUnsavedGuard.js +23 -0
  299. package/dist-lib/embed/embed-dirty.js +21 -0
  300. package/dist-lib/embed/embed-history.js +17 -0
  301. package/dist-lib/embed/embed-nav-guard.js +13 -0
  302. package/dist-lib/embed/file-src.js +60 -0
  303. package/dist-lib/embed/handshake.js +37 -0
  304. package/dist-lib/embed/params.js +45 -0
  305. package/dist-lib/embed/protocol.js +26 -0
  306. package/dist-lib/embed/screen-location.js +44 -0
  307. package/dist-lib/embed/theme.js +11 -0
  308. package/dist-lib/embed/token.js +54 -0
  309. package/dist-lib/embed/useEmbedNavigate.js +65 -0
  310. package/dist-lib/embed/useGlobalLinkInterceptor.js +63 -0
  311. package/dist-lib/hooks/useActionData.js +58 -0
  312. package/dist-lib/hooks/useAgentConversation.js +311 -0
  313. package/dist-lib/hooks/useAggregate.js +18 -0
  314. package/dist-lib/hooks/useAllEntityData.js +53 -0
  315. package/dist-lib/hooks/useAssociatedData.js +37 -0
  316. package/dist-lib/hooks/useAuth.js +56 -0
  317. package/dist-lib/hooks/useBranding.js +18 -0
  318. package/dist-lib/hooks/useBrandingChrome.js +58 -0
  319. package/dist-lib/hooks/useChildrenData.js +33 -0
  320. package/dist-lib/hooks/useColumns.js +44 -0
  321. package/dist-lib/hooks/useConnectionNotice.js +35 -0
  322. package/dist-lib/{useCurrentLocation-Bq1T72AW.js → hooks/useCurrentLocation.js} +2 -2
  323. package/dist-lib/hooks/useCurrentScreen.js +20 -0
  324. package/dist-lib/hooks/useCursorEntityData.js +77 -0
  325. package/dist-lib/hooks/useDebounce.js +11 -0
  326. package/dist-lib/hooks/useEntity.js +8 -0
  327. package/dist-lib/hooks/useEntityData.js +64 -0
  328. package/dist-lib/hooks/useFileReferenceJSON.js +29 -0
  329. package/dist-lib/hooks/useFilters.js +28 -0
  330. package/dist-lib/hooks/useFollowAgentOpen.js +84 -0
  331. package/dist-lib/hooks/useImpersonation.js +40 -0
  332. package/dist-lib/hooks/useIntentPrefetch.js +43 -0
  333. package/dist-lib/hooks/useJsonSnapshot.js +8 -0
  334. package/dist-lib/hooks/useLanguage.js +21 -0
  335. package/dist-lib/hooks/useLiveObject.js +17 -0
  336. package/dist-lib/hooks/useLongPress.js +49 -0
  337. package/dist-lib/hooks/useMutations.js +70 -0
  338. package/dist-lib/{useObject-B45F96rC.js → hooks/useObject.js} +2 -2
  339. package/dist-lib/hooks/useObjectStatus.js +20 -0
  340. package/dist-lib/hooks/usePageState.js +18 -0
  341. package/dist-lib/hooks/usePageStateRuntime.js +46 -0
  342. package/dist-lib/hooks/usePageStateTtl.js +10 -0
  343. package/dist-lib/hooks/useParams.js +123 -0
  344. package/dist-lib/hooks/useProperties.js +32 -0
  345. package/dist-lib/hooks/useRealtimeThresholds.js +31 -0
  346. package/dist-lib/hooks/useRegisterScreenTab.js +28 -0
  347. package/dist-lib/hooks/useResponsiveMode.js +84 -0
  348. package/dist-lib/hooks/useSSE.js +307 -0
  349. package/dist-lib/hooks/useSchema.js +73 -0
  350. package/dist-lib/hooks/useScreen.js +8 -0
  351. package/dist-lib/hooks/useScreenBack.js +60 -0
  352. package/dist-lib/hooks/useScreenTab.js +11 -0
  353. package/dist-lib/hooks/useTabNavigate.js +82 -0
  354. package/dist-lib/hooks/useTabSearchMirror.js +19 -0
  355. package/dist-lib/{useTabTitle-KrzEo118.js → hooks/useTabTitle.js} +9 -7
  356. package/dist-lib/hooks/useText.js +15 -0
  357. package/dist-lib/hooks/useTimelineData.js +44 -0
  358. package/dist-lib/hooks/useUnsavedInput.js +18 -0
  359. package/dist-lib/hooks/useVersionWatcher.js +62 -0
  360. package/dist-lib/hooks/useViews.js +88 -0
  361. package/dist-lib/hooks/useWindowConversation.js +11 -0
  362. package/dist-lib/icons.js +5 -3
  363. package/dist-lib/index.d.ts +42 -20
  364. package/dist-lib/index.js +131 -3926
  365. package/dist-lib/lib/action-dispatch.js +7 -0
  366. package/dist-lib/lib/actions.js +279 -0
  367. package/dist-lib/lib/anchor.js +41 -0
  368. package/dist-lib/lib/brand-tokens.js +95 -0
  369. package/dist-lib/lib/branding.js +25 -0
  370. package/dist-lib/lib/canonical-url.js +17 -0
  371. package/dist-lib/lib/capabilityPrefetch.js +57 -0
  372. package/dist-lib/lib/child-config.js +111 -0
  373. package/dist-lib/lib/children-validation.js +52 -0
  374. package/dist-lib/lib/decimal-text.js +15 -0
  375. package/dist-lib/lib/display-value.js +19 -0
  376. package/dist-lib/lib/document-templates.js +6 -0
  377. package/dist-lib/lib/download.js +41 -0
  378. package/dist-lib/lib/evidence-verdict.js +23 -0
  379. package/dist-lib/lib/failure.js +9 -0
  380. package/dist-lib/lib/field-classification.js +58 -0
  381. package/dist-lib/lib/field-regions.js +13 -0
  382. package/dist-lib/lib/filter-evaluator.js +98 -0
  383. package/dist-lib/lib/filters.js +118 -0
  384. package/dist-lib/lib/format-count.js +24 -0
  385. package/dist-lib/lib/html-state.js +9 -0
  386. package/dist-lib/lib/language.js +52 -0
  387. package/dist-lib/lib/longPressGesture.js +34 -0
  388. package/dist-lib/lib/mass-edit.js +65 -0
  389. package/dist-lib/{page-inset-D_kkVwwN.js → lib/page-inset.js} +1 -1
  390. package/dist-lib/lib/phone.js +28 -0
  391. package/dist-lib/lib/query-retry.js +7 -0
  392. package/dist-lib/lib/quick-add.js +23 -0
  393. package/dist-lib/lib/realtime-query-keys.js +23 -0
  394. package/dist-lib/lib/realtime-reconcile.js +148 -0
  395. package/dist-lib/lib/realtime-resync.js +192 -0
  396. package/dist-lib/lib/record-documents-key.js +4 -0
  397. package/dist-lib/lib/ref-choices.js +6 -0
  398. package/dist-lib/lib/refetch-when-idle.js +25 -0
  399. package/dist-lib/lib/rich-text.js +46 -0
  400. package/dist-lib/lib/rowClickGesture.js +10 -0
  401. package/dist-lib/lib/safe-url.js +34 -0
  402. package/dist-lib/lib/schema-routing.js +51 -0
  403. package/dist-lib/{screen-back-BtbEp5sO.js → lib/screen-back.js} +2 -2
  404. package/dist-lib/lib/scroll-restoration.js +156 -0
  405. package/dist-lib/lib/size-value.js +22 -0
  406. package/dist-lib/lib/sort.js +59 -0
  407. package/dist-lib/lib/timestamp.js +97 -0
  408. package/dist-lib/lib/toast.js +78 -0
  409. package/dist-lib/lib/ui-actions.js +81 -0
  410. package/dist-lib/{utils-D_QDpB8_.js → lib/utils.js} +1 -1
  411. package/dist-lib/lib/variants.js +63 -0
  412. package/dist-lib/lib/versionTracker.js +102 -0
  413. package/dist-lib/lib/viewport-category.js +12 -0
  414. package/dist-lib/{window-election-CHIvIZwx.js → lib/window-election.js} +1 -1
  415. package/dist-lib/stores/auth.js +84 -0
  416. package/dist-lib/stores/icon-registry.js +24 -0
  417. package/dist-lib/stores/list-layout.js +178 -0
  418. package/dist-lib/{page-state-eA6J_KIR.js → stores/page-state.js} +1 -1
  419. package/dist-lib/stores/preferences.js +126 -0
  420. package/dist-lib/stores/realtime.js +115 -0
  421. package/dist-lib/stores/screen-registry.js +10 -0
  422. package/dist-lib/stores/tabs.js +220 -0
  423. package/dist-lib/test/seed-schema.js +8 -0
  424. package/dist-lib/testing.d.ts +1 -1
  425. package/dist-lib/testing.js +80 -76
  426. package/dist-lib/types/api.js +48 -0
  427. package/dist-lib/types/fieldType.js +4 -0
  428. package/dist-lib/types/ordmap.js +50 -0
  429. package/dist-lib/types/schema.js +173 -0
  430. package/dist-lib/{useResponsiveMode-DIR1bZfo.d.ts → useResponsiveMode-DmrpMbZX.d.ts} +44 -16
  431. package/package.json +13 -12
  432. package/dist-lib/ActionRunner-DdBFhqGe.js +0 -1440
  433. package/dist-lib/AgentOpenFollower.impl-BAs_wGEZ.js +0 -81
  434. package/dist-lib/AssociatedBlock-BOoPLOjw.js +0 -1515
  435. package/dist-lib/AuthShell-C8aVwHS7.js +0 -361
  436. package/dist-lib/BlankScreen-DVc7fh8C.js +0 -61
  437. package/dist-lib/CopyButton-DRIT_f0k.js +0 -119
  438. package/dist-lib/DynamicIcon-DuBSz6TZ.js +0 -133
  439. package/dist-lib/FilterChips-Cv1tlXyo.js +0 -1031
  440. package/dist-lib/LayoutRenderer-d-tXYPze.js +0 -3239
  441. package/dist-lib/MenuItem-CfkVXPvC.js +0 -140
  442. package/dist-lib/MonacoJson-BG3S3GHX.js +0 -60
  443. package/dist-lib/Profile.impl-Cypk27ah.js +0 -527
  444. package/dist-lib/PropertyGridEditor-XrP6TZ5s.js +0 -4378
  445. package/dist-lib/RecordHeader-BfQ0_4wq.js +0 -217
  446. package/dist-lib/RefreshControl-CRdWPoF5.js +0 -195
  447. package/dist-lib/SSOCallbackPage.impl-Cfi2pQ59.js +0 -31
  448. package/dist-lib/SmartDetailPage.impl-BiIX0n7K.js +0 -1609
  449. package/dist-lib/SmartListPage.impl-Cu83Gv_G.js +0 -2818
  450. package/dist-lib/SmartRecordListPage.impl-DR6lq7HA.js +0 -795
  451. package/dist-lib/format-count-lyB4CPen.js +0 -943
  452. package/dist-lib/peekDraftStore-CaimrOhW.js +0 -200
  453. package/dist-lib/registry-CGe5kCXN.js +0 -119
  454. package/dist-lib/use-filter-value-labels-D3YDgUzg.js +0 -413
  455. package/dist-lib/useAgentConversation-rru-7hnF.js +0 -612
  456. package/dist-lib/useBranding-zcxEic2k.js +0 -41
  457. package/dist-lib/useBrandingChrome-bxaR3G1R.js +0 -170
  458. package/dist-lib/useCurrentScreen-BZOHBGQZ.js +0 -2522
  459. package/dist-lib/useImpersonation-DBIRRR70.js +0 -35
  460. package/dist-lib/useOwnRefresh-DJjaje52.js +0 -435
  461. package/dist-lib/useParams-BFLJi4n3.js +0 -133
  462. package/dist-lib/useProperties-B7opZ-iy.js +0 -81
  463. package/dist-lib/useScreenBack-DENlz844.js +0 -71
  464. package/dist-lib/useTabNavigate-CUqOmcMj.js +0 -78
  465. package/dist-lib/value-BuQVYx52.js +0 -194
  466. package/dist-lib/variants-vUtfBbE6.js +0 -1961
  467. /package/dist-lib/{JsonEditor-Dz1PQHC8.js → components/fields/JsonEditor.js} +0 -0
@@ -1,4378 +0,0 @@
1
- import { An as e, Bn as t, Cn as n, Ft as r, In as i, Ln as a, Mt as o, On as s, Q as c, Sn as l, U as u, Xn as d, Zn as f, _n as p, an as m, bn as h, cn as g, g as _, h as v, in as y, jn as b, kn as x, ln as S, o as C, s as w, tt as ee, wn as T, wt as E, xn as D } from "./useCurrentScreen-BZOHBGQZ.js";
2
- import { n as te, t as O } from "./Icons-lt-7lhYR.js";
3
- import { n as k, r as A, t as j } from "./CopyButton-DRIT_f0k.js";
4
- import { t as M } from "./Pill-D-wsfRhx.js";
5
- import { n as N, t as P } from "./MenuItem-CfkVXPvC.js";
6
- import { t as ne } from "./DynamicIcon-DuBSz6TZ.js";
7
- import { Suspense as F, createContext as re, lazy as ie, useCallback as I, useContext as ae, useEffect as oe, useId as se, useLayoutEffect as ce, useMemo as L, useRef as R, useState as z } from "react";
8
- import { Fragment as B, jsx as V, jsxs as H } from "react/jsx-runtime";
9
- import { create as le } from "zustand";
10
- import { useLocation as ue } from "react-router";
11
- import { createPortal as de } from "react-dom";
12
- //#region src/components/primitives/HoverCard.tsx
13
- var fe = 400, pe = 150, me = 320, he = 240, ge = 4, _e = 4;
14
- function ve({ content: e, children: t, width: n = me, align: r = "center", style: i }) {
15
- let a = R(null), o = R(null), s = R(null), c = R(null), [l, u] = z(!1), [d, f] = z(null), [p, m] = z(!1), h = I(() => {
16
- let e = a.current;
17
- if (!e) return;
18
- let t = e.getBoundingClientRect(), i = typeof window < "u" ? window.visualViewport : void 0, s = i?.width ?? (typeof window < "u" ? window.innerWidth : 0), c = i?.height ?? (typeof window < "u" ? window.innerHeight : 0), l = i?.offsetLeft ?? 0, u = i?.offsetTop ?? 0, d = Math.min(n, Math.max(160, s - 8)), p = o.current?.offsetHeight ?? he, m = u + c - t.bottom < p + 8 && t.top > p + 8 ? "above" : "below", h = m === "below" ? t.bottom + _e : t.top - _e - p, g;
19
- g = r === "start" ? t.left : r === "end" ? t.right - d : t.left + t.width / 2 - d / 2;
20
- let _ = l + ge, v = l + s - ge;
21
- g + d > v && (g = Math.max(_, t.right - d)), g < _ && (g = _), f((e) => e && e.top === h && e.left === g && e.width === d && e.placement === m ? e : {
22
- top: h,
23
- left: g,
24
- width: d,
25
- placement: m
26
- });
27
- }, [r, n]), g = R(null), _ = I((e) => {
28
- if (o.current = e, g.current &&= (g.current.disconnect(), null), e) {
29
- if (typeof ResizeObserver < "u") {
30
- let t = new ResizeObserver(() => {
31
- h(), m(!0);
32
- });
33
- t.observe(e), g.current = t;
34
- } else m(!0);
35
- }
36
- }, [h]), v = I(() => {
37
- s.current !== null && (window.clearTimeout(s.current), s.current = null), c.current !== null && (window.clearTimeout(c.current), c.current = null);
38
- }, []), y = () => {
39
- c.current !== null && (window.clearTimeout(c.current), c.current = null), !(l || s.current !== null) && (s.current = window.setTimeout(() => {
40
- s.current = null, u(!0);
41
- }, fe));
42
- }, b = I(() => {
43
- v(), u(!0);
44
- }, [v]), x = I(() => {
45
- v(), u(!1);
46
- }, [v]), S = () => {
47
- s.current !== null && (window.clearTimeout(s.current), s.current = null), c.current === null && (c.current = window.setTimeout(() => {
48
- c.current = null, u(!1);
49
- }, pe));
50
- };
51
- oe(() => () => {
52
- v(), g.current &&= (g.current.disconnect(), null);
53
- }, [v]), oe(() => {
54
- if (!l) m(!1);
55
- else return h(), window.addEventListener("scroll", h, !0), window.addEventListener("resize", h), () => {
56
- window.removeEventListener("scroll", h, !0), window.removeEventListener("resize", h);
57
- };
58
- }, [l, h]), oe(() => {
59
- if (!l) return;
60
- let e = (e) => {
61
- let t = e.target;
62
- t && (a.current?.contains(t) || o.current?.contains(t) || x());
63
- };
64
- return document.addEventListener("pointerdown", e), () => document.removeEventListener("pointerdown", e);
65
- }, [x, l]);
66
- let C = l && d ? de(/* @__PURE__ */ V("div", {
67
- ref: _,
68
- role: "tooltip",
69
- onMouseEnter: () => {
70
- c.current !== null && (window.clearTimeout(c.current), c.current = null);
71
- },
72
- onMouseLeave: S,
73
- style: {
74
- position: "fixed",
75
- top: d.top,
76
- left: d.left,
77
- width: d.width,
78
- maxHeight: he,
79
- overflowY: "auto",
80
- zIndex: 250,
81
- background: "var(--surface)",
82
- border: "1px solid var(--border)",
83
- borderRadius: 8,
84
- boxShadow: "var(--shadow-lg)",
85
- padding: 10,
86
- fontSize: 13,
87
- color: "var(--text)",
88
- visibility: p ? "visible" : "hidden",
89
- pointerEvents: p ? "auto" : "none",
90
- ...i
91
- },
92
- children: e
93
- }), document.body) : null;
94
- return /* @__PURE__ */ H(B, { children: [/* @__PURE__ */ V("span", {
95
- ref: a,
96
- tabIndex: 0,
97
- "aria-haspopup": "dialog",
98
- "aria-expanded": l,
99
- onMouseEnter: y,
100
- onMouseLeave: S,
101
- onFocus: b,
102
- onBlur: () => {
103
- window.setTimeout(() => {
104
- let e = document.activeElement;
105
- e && (a.current?.contains(e) || o.current?.contains(e)) || u(!1);
106
- }, 0);
107
- },
108
- onPointerDown: (e) => {
109
- (e.pointerType === "touch" || e.pointerType === "pen") && (e.preventDefault(), l ? x() : b());
110
- },
111
- onKeyDown: (e) => {
112
- e.key === "Escape" && (e.stopPropagation(), x());
113
- },
114
- style: {
115
- display: "inline",
116
- maxWidth: "100%",
117
- outline: "none"
118
- },
119
- children: t
120
- }), C] });
121
- }
122
- //#endregion
123
- //#region src/components/primitives/Chip.tsx
124
- function U({ icon: e, children: t, onRemove: n, removeLabel: r, onClick: i }) {
125
- return /* @__PURE__ */ H("span", {
126
- onClick: i,
127
- style: {
128
- display: "inline-flex",
129
- alignItems: "center",
130
- gap: 6,
131
- height: 24,
132
- padding: "0 8px",
133
- borderRadius: 6,
134
- background: "var(--surface-3)",
135
- border: "1px solid var(--border)",
136
- fontSize: 12,
137
- color: "var(--text-2)",
138
- cursor: i ? "pointer" : "default"
139
- },
140
- children: [
141
- e,
142
- t,
143
- n && /* @__PURE__ */ V("button", {
144
- type: "button",
145
- "aria-label": r,
146
- onClick: (e) => {
147
- e.stopPropagation(), n();
148
- },
149
- style: {
150
- background: "transparent",
151
- border: 0,
152
- padding: 0,
153
- marginLeft: 2,
154
- color: "var(--text-3)",
155
- cursor: "pointer",
156
- display: "flex"
157
- },
158
- children: /* @__PURE__ */ V(O.x, { size: 12 })
159
- })
160
- ]
161
- });
162
- }
163
- //#endregion
164
- //#region src/components/primitives/BoolToggle.tsx
165
- function ye({ value: e, onChange: t, id: n, ariaLabelledby: r }) {
166
- return /* @__PURE__ */ V("button", {
167
- type: "button",
168
- id: n,
169
- "aria-labelledby": r,
170
- role: "checkbox",
171
- "aria-checked": !!e,
172
- onClick: () => t && t(!e),
173
- style: {
174
- width: 32,
175
- height: 18,
176
- borderRadius: 999,
177
- border: "none",
178
- padding: 2,
179
- position: "relative",
180
- background: e ? "var(--accent)" : "var(--border-strong)",
181
- cursor: "pointer",
182
- transition: "background .15s"
183
- },
184
- children: /* @__PURE__ */ V("span", { style: {
185
- display: "block",
186
- width: 14,
187
- height: 14,
188
- borderRadius: 999,
189
- background: "var(--accent-foreground)",
190
- transform: e ? "translateX(14px)" : "translateX(0)",
191
- transition: "transform .15s",
192
- boxShadow: "0 1px 2px rgba(0,0,0,.15)"
193
- } })
194
- });
195
- }
196
- //#endregion
197
- //#region src/components/primitives/Spinner.tsx
198
- var be = "@keyframes spin{to{transform:rotate(360deg);}}";
199
- function xe({ size: e = 14 }) {
200
- return /* @__PURE__ */ H("svg", {
201
- width: e,
202
- height: e,
203
- viewBox: "0 0 24 24",
204
- style: { animation: "spin 0.8s linear infinite" },
205
- children: [
206
- /* @__PURE__ */ V("style", { children: be }),
207
- /* @__PURE__ */ V("circle", {
208
- cx: "12",
209
- cy: "12",
210
- r: "9",
211
- stroke: "var(--border)",
212
- strokeWidth: "2.5",
213
- fill: "none"
214
- }),
215
- /* @__PURE__ */ V("path", {
216
- d: "M12 3a9 9 0 0 1 9 9",
217
- stroke: "var(--accent)",
218
- strokeWidth: "2.5",
219
- fill: "none",
220
- strokeLinecap: "round"
221
- })
222
- ]
223
- });
224
- }
225
- //#endregion
226
- //#region src/components/primitives/Fields.tsx
227
- var Se = ({ children: e, required: t, hint: n, htmlFor: r, id: i }) => /* @__PURE__ */ H("div", {
228
- style: {
229
- display: "flex",
230
- alignItems: "center",
231
- gap: 4,
232
- fontSize: 11.5,
233
- color: "var(--text-3)",
234
- fontWeight: 500,
235
- marginBottom: 4,
236
- letterSpacing: "0.01em"
237
- },
238
- children: [
239
- r ? /* @__PURE__ */ V("label", {
240
- id: i,
241
- htmlFor: r,
242
- children: e
243
- }) : /* @__PURE__ */ V("span", {
244
- id: i,
245
- children: e
246
- }),
247
- t && /* @__PURE__ */ V("span", {
248
- "aria-hidden": "true",
249
- style: { color: "var(--danger)" },
250
- children: "*"
251
- }),
252
- n && /* @__PURE__ */ V("span", {
253
- title: n,
254
- style: {
255
- cursor: "help",
256
- color: "var(--text-4)",
257
- display: "flex"
258
- },
259
- children: /* @__PURE__ */ V(O.info, { size: 11 })
260
- })
261
- ]
262
- }), W = {
263
- width: "100%",
264
- height: "var(--control-height)",
265
- padding: "0 10px",
266
- fontSize: "var(--control-font-size)",
267
- lineHeight: "var(--control-line-height)",
268
- background: "var(--surface)",
269
- color: "var(--text)",
270
- border: "1px solid var(--border)",
271
- borderRadius: 6,
272
- outline: "none",
273
- transition: "border-color .12s, box-shadow .12s"
274
- };
275
- function G({ value: e, onChange: t, placeholder: n, prefix: r, suffix: i, style: a, ...o }) {
276
- let [s, c] = z(!1);
277
- return /* @__PURE__ */ H("div", {
278
- style: {
279
- display: "flex",
280
- alignItems: "center",
281
- gap: 6,
282
- ...W,
283
- padding: r || i ? "0 8px" : "0 10px",
284
- borderColor: s ? "var(--accent)" : "var(--border)",
285
- boxShadow: s ? "0 0 0 3px var(--accent-ring)" : "none",
286
- ...a
287
- },
288
- children: [
289
- r && /* @__PURE__ */ V("span", {
290
- style: {
291
- color: "var(--text-3)",
292
- display: "flex"
293
- },
294
- children: r
295
- }),
296
- /* @__PURE__ */ V("input", {
297
- value: e ?? "",
298
- onChange: (e) => t?.(e.target.value),
299
- placeholder: n,
300
- onFocus: () => c(!0),
301
- onBlur: () => c(!1),
302
- style: {
303
- border: 0,
304
- outline: 0,
305
- background: "transparent",
306
- flex: 1,
307
- fontSize: "var(--control-font-size)",
308
- color: "var(--text)",
309
- padding: 0,
310
- minWidth: 0
311
- },
312
- ...o
313
- }),
314
- i && /* @__PURE__ */ V("span", {
315
- style: {
316
- color: "var(--text-3)",
317
- display: "flex"
318
- },
319
- children: i
320
- })
321
- ]
322
- });
323
- }
324
- function Ce({ value: e, onChange: t, placeholder: n, rows: r = 4, fill: i, id: a, name: o, ariaRequired: s }) {
325
- let [c, l] = z(!1), u = i ? {
326
- flex: 1,
327
- height: "100%",
328
- minHeight: 0,
329
- resize: "none"
330
- } : {
331
- height: "auto",
332
- resize: "vertical"
333
- };
334
- return /* @__PURE__ */ V("textarea", {
335
- id: a,
336
- name: o,
337
- "aria-required": s || void 0,
338
- value: e ?? "",
339
- onChange: (e) => t?.(e.target.value),
340
- placeholder: n,
341
- rows: i ? void 0 : r,
342
- onFocus: () => l(!0),
343
- onBlur: () => l(!1),
344
- style: {
345
- ...W,
346
- padding: "8px 10px",
347
- lineHeight: 1.5,
348
- ...u,
349
- borderColor: c ? "var(--accent)" : "var(--border)",
350
- boxShadow: c ? "0 0 0 3px var(--accent-ring)" : "none",
351
- fontFamily: "inherit"
352
- }
353
- });
354
- }
355
- var we = 20, Te = 100;
356
- function Ee(e) {
357
- return typeof e.label == "string" || typeof e.label == "number" ? String(e.label) : e.value;
358
- }
359
- function K({ value: e, options: t, onChange: n, placeholder: r, onSearchChange: i, ...a }) {
360
- let o = E(), [s, c] = z(!1), [l, u] = z(""), d = R(null), f = t.find((t) => !t.heading && !t.divider && t.value === e), p = t.filter((e) => !e.heading && !e.divider).length, m = !!i, h = m || p > we, g = (e) => {
361
- u(e), i?.(e);
362
- }, _ = L(() => {
363
- if (m) return t.slice(0, Te);
364
- let e = l.trim().toLowerCase();
365
- return e ? t.filter((t) => !t.heading && !t.divider && Ee(t).toLowerCase().includes(e)).slice(0, Te) : t.slice(0, Te);
366
- }, [
367
- t,
368
- l,
369
- m
370
- ]);
371
- return /* @__PURE__ */ H(B, { children: [/* @__PURE__ */ H("button", {
372
- ...a,
373
- type: "button",
374
- ref: d,
375
- "aria-haspopup": "listbox",
376
- "aria-expanded": s,
377
- onClick: () => {
378
- c((e) => {
379
- let t = !e;
380
- return t && g(""), t;
381
- });
382
- },
383
- style: {
384
- ...W,
385
- display: "flex",
386
- alignItems: "center",
387
- justifyContent: "space-between",
388
- textAlign: "left",
389
- cursor: "pointer",
390
- ...a.style,
391
- color: f ? "var(--text)" : "var(--text-placeholder)"
392
- },
393
- children: [/* @__PURE__ */ V("span", {
394
- style: {
395
- display: "flex",
396
- alignItems: "center",
397
- gap: 6,
398
- overflow: "hidden",
399
- textOverflow: "ellipsis",
400
- whiteSpace: "nowrap"
401
- },
402
- children: f ? f.label : r ?? o("control.select.placeholder", "Select…")
403
- }), /* @__PURE__ */ V(O.down, {
404
- size: 12,
405
- cls: "",
406
- style: {
407
- color: "var(--text-3)",
408
- flexShrink: 0
409
- }
410
- })]
411
- }), /* @__PURE__ */ H(N, {
412
- open: s,
413
- anchor: d.current,
414
- onClose: () => c(!1),
415
- width: d.current?.offsetWidth,
416
- style: {
417
- maxHeight: "min(360px, calc(var(--app-height) - 24px))",
418
- overflowY: "auto"
419
- },
420
- children: [
421
- h && /* @__PURE__ */ V("div", {
422
- style: {
423
- padding: 6,
424
- position: "sticky",
425
- top: -4,
426
- background: "var(--surface)",
427
- zIndex: 1
428
- },
429
- children: /* @__PURE__ */ V(G, {
430
- value: l,
431
- onChange: g,
432
- placeholder: o("control.search", "Search…"),
433
- prefix: /* @__PURE__ */ V(O.search, { size: 12 }),
434
- autoFocus: !0
435
- })
436
- }),
437
- _.map((t, r) => t.divider ? /* @__PURE__ */ V("div", { style: {
438
- borderTop: "1px solid var(--divider)",
439
- margin: "4px 0"
440
- } }, `divider-${r}`) : t.heading ? /* @__PURE__ */ V("div", {
441
- style: {
442
- padding: "6px 10px 2px",
443
- fontSize: 10.5,
444
- fontWeight: 600,
445
- color: "var(--text-3)",
446
- textTransform: "uppercase",
447
- letterSpacing: "0.06em"
448
- },
449
- children: t.label
450
- }, `heading-${r}`) : /* @__PURE__ */ V(P, {
451
- onClick: () => {
452
- n(t.value), c(!1);
453
- },
454
- active: t.value === e,
455
- children: t.label
456
- }, t.value)),
457
- _.length === 0 && /* @__PURE__ */ V("div", {
458
- style: {
459
- padding: "8px 10px",
460
- fontSize: 12.5,
461
- color: "var(--text-3)"
462
- },
463
- children: o("control.no_matches", "No matches")
464
- })
465
- ]
466
- })] });
467
- }
468
- function De({ value: e = [], options: t, onChange: n, placeholder: r, ...i }) {
469
- let a = E(), [o, s] = z(!1), [c, l] = z(""), u = R(null), d = t.filter((e) => !e.heading && !e.divider), f = d.length > we, p = e.map((e) => d.find((t) => t.value === e) ?? {
470
- value: e,
471
- label: e
472
- }), m = L(() => {
473
- let e = c.trim().toLowerCase();
474
- return e ? t.filter((t) => !t.heading && !t.divider && Ee(t).toLowerCase().includes(e)).slice(0, Te) : t.slice(0, Te);
475
- }, [t, c]), h = (t) => n(e.includes(t) ? e.filter((e) => e !== t) : [...e, t]);
476
- return /* @__PURE__ */ H(B, { children: [/* @__PURE__ */ H("button", {
477
- ...i,
478
- type: "button",
479
- ref: u,
480
- "aria-haspopup": "listbox",
481
- "aria-expanded": o,
482
- onClick: () => {
483
- s((e) => {
484
- let t = !e;
485
- return t && l(""), t;
486
- });
487
- },
488
- style: {
489
- ...W,
490
- height: "auto",
491
- minHeight: "var(--control-height)",
492
- display: "flex",
493
- alignItems: "center",
494
- flexWrap: "wrap",
495
- gap: 4,
496
- padding: p.length ? "3px 8px" : "0 10px",
497
- textAlign: "left",
498
- cursor: "pointer",
499
- ...i.style
500
- },
501
- children: [p.length === 0 ? /* @__PURE__ */ V("span", {
502
- style: {
503
- flex: 1,
504
- color: "var(--text-placeholder)"
505
- },
506
- children: r ?? a("control.select.placeholder", "Select…")
507
- }) : p.map((e) => /* @__PURE__ */ H("span", {
508
- style: {
509
- display: "inline-flex",
510
- alignItems: "center",
511
- gap: 4,
512
- height: 22,
513
- padding: "0 4px 0 8px",
514
- borderRadius: 6,
515
- background: "var(--surface-3)",
516
- border: "1px solid var(--border)",
517
- fontSize: 12,
518
- color: "var(--text-2)",
519
- maxWidth: "100%"
520
- },
521
- children: [/* @__PURE__ */ V("span", {
522
- style: {
523
- overflow: "hidden",
524
- textOverflow: "ellipsis",
525
- whiteSpace: "nowrap"
526
- },
527
- children: e.label
528
- }), /* @__PURE__ */ V("span", {
529
- role: "button",
530
- "aria-label": a("control.remove_value", "Remove {value}", { value: Ee(e) }),
531
- onClick: (t) => {
532
- t.stopPropagation(), h(e.value);
533
- },
534
- style: {
535
- display: "flex",
536
- color: "var(--text-3)",
537
- cursor: "pointer",
538
- flexShrink: 0
539
- },
540
- children: /* @__PURE__ */ V(O.x, { size: 12 })
541
- })]
542
- }, e.value)), /* @__PURE__ */ V(O.down, {
543
- size: 12,
544
- cls: "",
545
- style: {
546
- color: "var(--text-3)",
547
- marginLeft: "auto",
548
- flexShrink: 0
549
- }
550
- })]
551
- }), /* @__PURE__ */ H(N, {
552
- open: o,
553
- anchor: u.current,
554
- onClose: () => s(!1),
555
- width: u.current?.offsetWidth,
556
- style: {
557
- maxHeight: "min(360px, calc(var(--app-height) - 24px))",
558
- overflowY: "auto"
559
- },
560
- children: [
561
- f && /* @__PURE__ */ V("div", {
562
- style: {
563
- padding: 6,
564
- position: "sticky",
565
- top: -4,
566
- background: "var(--surface)",
567
- zIndex: 1
568
- },
569
- children: /* @__PURE__ */ V(G, {
570
- value: c,
571
- onChange: l,
572
- placeholder: a("control.search", "Search…"),
573
- prefix: /* @__PURE__ */ V(O.search, { size: 12 }),
574
- autoFocus: !0
575
- })
576
- }),
577
- m.map((t, n) => {
578
- if (t.divider) return /* @__PURE__ */ V("div", { style: {
579
- borderTop: "1px solid var(--divider)",
580
- margin: "4px 0"
581
- } }, `divider-${n}`);
582
- if (t.heading) return /* @__PURE__ */ V("div", {
583
- style: {
584
- padding: "6px 10px 2px",
585
- fontSize: 10.5,
586
- fontWeight: 600,
587
- color: "var(--text-3)",
588
- textTransform: "uppercase",
589
- letterSpacing: "0.06em"
590
- },
591
- children: t.label
592
- }, `heading-${n}`);
593
- let r = e.includes(t.value);
594
- return /* @__PURE__ */ V(P, {
595
- active: r,
596
- icon: r ? /* @__PURE__ */ V(O.check, { size: 13 }) : /* @__PURE__ */ V("span", { style: {
597
- display: "inline-block",
598
- width: 13
599
- } }),
600
- onClick: () => h(t.value),
601
- children: t.label
602
- }, t.value);
603
- }),
604
- m.length === 0 && /* @__PURE__ */ V("div", {
605
- style: {
606
- padding: "8px 10px",
607
- fontSize: 12.5,
608
- color: "var(--text-3)"
609
- },
610
- children: a("control.no_matches", "No matches")
611
- })
612
- ]
613
- })] });
614
- }
615
- function Oe({ value: e, onChange: t }) {
616
- let n = E();
617
- return /* @__PURE__ */ V(G, {
618
- value: e || "",
619
- onChange: t,
620
- placeholder: n("control.date.placeholder", "YYYY-MM-DD HH:mm"),
621
- prefix: /* @__PURE__ */ V(O.calendar, { size: 13 })
622
- });
623
- }
624
- function ke(e) {
625
- if (!e) return 0;
626
- let t = 0;
627
- return e.length >= 8 && t++, e.length >= 12 && t++, /[A-Z]/.test(e) && /[a-z]/.test(e) && t++, /\d/.test(e) && t++, /[^A-Za-z0-9]/.test(e) && t++, Math.min(4, t);
628
- }
629
- var Ae = [
630
- (e) => e("control.password.strength.too_short", "Too short"),
631
- (e) => e("control.password.strength.weak", "Weak"),
632
- (e) => e("control.password.strength.fair", "Fair"),
633
- (e) => e("control.password.strength.good", "Good"),
634
- (e) => e("control.password.strength.strong", "Strong")
635
- ], je = [
636
- "var(--danger)",
637
- "var(--danger)",
638
- "var(--warning, #B45309)",
639
- "var(--accent)",
640
- "var(--success, #3FBF8F)"
641
- ];
642
- function Me({ value: e, onChange: t, placeholder: n, showStrength: r, id: i, name: a, ariaRequired: o }) {
643
- let s = E(), [c, l] = z(!1), u = e || "", d = ke(u);
644
- return /* @__PURE__ */ H("div", { children: [/* @__PURE__ */ V(G, {
645
- id: i,
646
- name: a,
647
- "aria-required": o || void 0,
648
- type: c ? "text" : "password",
649
- value: u,
650
- onChange: t,
651
- placeholder: n ?? s("control.password.placeholder", "Enter password"),
652
- suffix: /* @__PURE__ */ V("button", {
653
- type: "button",
654
- "aria-label": c ? s("control.password.hide", "Hide password") : s("control.password.show", "Show password"),
655
- style: {
656
- background: "none",
657
- border: 0,
658
- padding: 0,
659
- cursor: "pointer",
660
- color: "var(--text-3)",
661
- display: "flex"
662
- },
663
- onClick: () => l((e) => !e),
664
- children: V(c ? O.eyeOff : O.eye, { size: 14 })
665
- })
666
- }), r && /* @__PURE__ */ H("div", {
667
- style: {
668
- marginTop: 6,
669
- display: "flex",
670
- alignItems: "center",
671
- gap: 8
672
- },
673
- children: [/* @__PURE__ */ V("div", {
674
- style: {
675
- display: "flex",
676
- gap: 3,
677
- flex: 1
678
- },
679
- children: [
680
- 0,
681
- 1,
682
- 2,
683
- 3
684
- ].map((e) => /* @__PURE__ */ V("span", { style: {
685
- flex: 1,
686
- height: 3,
687
- borderRadius: 999,
688
- background: e < d ? je[d] : "var(--surface-3)",
689
- transition: "background .15s"
690
- } }, e))
691
- }), /* @__PURE__ */ V("span", {
692
- style: {
693
- fontSize: 10.5,
694
- color: "var(--text-3)",
695
- minWidth: 54,
696
- textAlign: "right"
697
- },
698
- children: u ? Ae[d](s) : ""
699
- })]
700
- })] });
701
- }
702
- function Ne({ value: e = [], onChange: t }) {
703
- let n = E(), [r, i] = z("");
704
- return /* @__PURE__ */ H("div", {
705
- style: {
706
- ...W,
707
- height: "auto",
708
- minHeight: "var(--control-height)",
709
- display: "flex",
710
- flexWrap: "wrap",
711
- gap: 4,
712
- padding: "4px 6px",
713
- alignItems: "center"
714
- },
715
- children: [e.map((n, r) => /* @__PURE__ */ V(U, {
716
- tone: "slate",
717
- onRemove: () => t(e.filter((e, t) => t !== r)),
718
- children: n
719
- }, r)), /* @__PURE__ */ V("input", {
720
- value: r,
721
- onChange: (e) => i(e.target.value),
722
- onKeyDown: (n) => {
723
- n.key === "Enter" && r.trim() && (t([...e, r.trim()]), i(""), n.preventDefault()), n.key === "Backspace" && !r && e.length && t(e.slice(0, -1));
724
- },
725
- placeholder: e.length ? "" : n("control.tags.placeholder", "Add tag… (Enter)"),
726
- style: {
727
- border: 0,
728
- outline: 0,
729
- flex: 1,
730
- minWidth: 80,
731
- background: "transparent",
732
- fontSize: "var(--control-font-size)",
733
- padding: "4px 2px"
734
- }
735
- })]
736
- });
737
- }
738
- var Pe = "JSON";
739
- function Fe({ value: e, onChange: t }) {
740
- let n = E();
741
- return /* @__PURE__ */ H("div", {
742
- style: {
743
- border: "1px solid var(--border)",
744
- borderRadius: 6,
745
- background: "var(--surface-2)",
746
- overflow: "hidden"
747
- },
748
- children: [/* @__PURE__ */ H("div", {
749
- style: {
750
- padding: "6px 10px",
751
- background: "var(--surface-3)",
752
- borderBottom: "1px solid var(--border)",
753
- display: "flex",
754
- alignItems: "center",
755
- gap: 8
756
- },
757
- children: [
758
- /* @__PURE__ */ V("span", {
759
- className: "mono",
760
- style: {
761
- fontSize: 10.5,
762
- color: "var(--text-3)",
763
- textTransform: "uppercase",
764
- letterSpacing: "0.04em"
765
- },
766
- children: Pe
767
- }),
768
- /* @__PURE__ */ V("span", { style: { flex: 1 } }),
769
- /* @__PURE__ */ V(A, {
770
- size: "xs",
771
- kind: "ghost",
772
- children: n("control.json.format", "Format")
773
- }),
774
- /* @__PURE__ */ V(A, {
775
- size: "xs",
776
- kind: "ghost",
777
- children: n("control.json.validate", "Validate")
778
- })
779
- ]
780
- }), /* @__PURE__ */ V("textarea", {
781
- className: "mono",
782
- value: e || "",
783
- onChange: (e) => t?.(e.target.value),
784
- style: {
785
- width: "100%",
786
- minHeight: 140,
787
- padding: "10px 12px",
788
- fontSize: "var(--control-font-size)",
789
- lineHeight: 1.6,
790
- background: "transparent",
791
- border: 0,
792
- outline: 0,
793
- resize: "vertical",
794
- color: "var(--text)"
795
- }
796
- })]
797
- });
798
- }
799
- function Ie({ value: e, entity: t = "company", onChange: n, items: r = [], id: i, ariaLabelledby: a, ariaRequired: o }) {
800
- let s = E(), [c, l] = z(!1), u = R(null);
801
- return /* @__PURE__ */ H(B, { children: [/* @__PURE__ */ H("button", {
802
- type: "button",
803
- id: i,
804
- "aria-labelledby": a,
805
- "aria-required": o || void 0,
806
- ref: u,
807
- onClick: () => l(!0),
808
- style: {
809
- ...W,
810
- display: "flex",
811
- alignItems: "center",
812
- justifyContent: "space-between",
813
- textAlign: "left",
814
- cursor: "pointer"
815
- },
816
- children: [/* @__PURE__ */ H("span", {
817
- style: {
818
- display: "flex",
819
- alignItems: "center",
820
- gap: 8,
821
- overflow: "hidden"
822
- },
823
- children: [/* @__PURE__ */ V("span", {
824
- style: {
825
- width: 18,
826
- height: 18,
827
- borderRadius: 4,
828
- background: "var(--accent-soft)",
829
- color: "var(--accent)",
830
- display: "inline-flex",
831
- alignItems: "center",
832
- justifyContent: "center"
833
- },
834
- children: /* @__PURE__ */ V(O.link, { size: 11 })
835
- }), /* @__PURE__ */ V("span", {
836
- style: { color: e ? "var(--accent)" : "var(--text-placeholder)" },
837
- children: e || s("control.ref.link_to", "Link to {entity}…", { entity: t })
838
- })]
839
- }), /* @__PURE__ */ V(O.search, {
840
- size: 12,
841
- cls: "",
842
- style: { color: "var(--text-3)" }
843
- })]
844
- }), /* @__PURE__ */ H(N, {
845
- open: c,
846
- anchor: u.current,
847
- onClose: () => l(!1),
848
- width: u.current?.offsetWidth,
849
- children: [/* @__PURE__ */ V("div", {
850
- style: { padding: 4 },
851
- children: /* @__PURE__ */ V(G, {
852
- placeholder: s("control.ref.search", "Search {entity}…", { entity: t }),
853
- prefix: /* @__PURE__ */ V(O.search, { size: 12 }),
854
- style: { marginBottom: 4 }
855
- })
856
- }), r.slice(0, 6).map((e) => /* @__PURE__ */ V(P, {
857
- icon: /* @__PURE__ */ V(O.building, { size: 13 }),
858
- onClick: () => {
859
- n?.(e.name), l(!1);
860
- },
861
- children: e.name
862
- }, e.id))]
863
- })] });
864
- }
865
- function Le({ label: e, children: t, mono: n, wide: r, empty: i }) {
866
- return /* @__PURE__ */ H("div", {
867
- style: {
868
- display: "flex",
869
- flexDirection: r ? "column" : "row",
870
- gap: r ? 4 : 16,
871
- minHeight: 24,
872
- alignItems: "baseline"
873
- },
874
- children: [/* @__PURE__ */ V("div", {
875
- style: {
876
- width: r ? "auto" : 140,
877
- flexShrink: 0,
878
- fontSize: 11.5,
879
- color: "var(--text-3)",
880
- fontWeight: 500,
881
- letterSpacing: "0.01em"
882
- },
883
- children: e
884
- }), /* @__PURE__ */ V("div", {
885
- className: n ? "mono num" : "num",
886
- style: {
887
- flex: 1,
888
- fontSize: 12.5,
889
- color: i ? "var(--text-4)" : "var(--text)",
890
- lineHeight: "22px",
891
- minWidth: 0,
892
- wordBreak: "break-word"
893
- },
894
- children: i ? "—" : t
895
- })]
896
- });
897
- }
898
- function Re({ value: e, onChange: t, type: n = "text", options: r }) {
899
- let i = E(), [a, o] = z(!1), [s, c] = z(e), l = () => {
900
- s !== void 0 && t?.(s), o(!1);
901
- }, u = () => {
902
- c(e), o(!1);
903
- };
904
- return a ? /* @__PURE__ */ H("div", {
905
- style: {
906
- display: "flex",
907
- alignItems: "center",
908
- gap: 4
909
- },
910
- onKeyDown: (e) => {
911
- e.key === "Enter" && l(), e.key === "Escape" && u();
912
- },
913
- children: [n === "select" ? /* @__PURE__ */ V(K, {
914
- value: s,
915
- options: r || [],
916
- onChange: (e) => {
917
- c(e), t?.(e), o(!1);
918
- }
919
- }) : n === "bool" ? /* @__PURE__ */ V(ye, {
920
- value: s === "true",
921
- onChange: (e) => {
922
- let n = String(e);
923
- c(n), t?.(n), o(!1);
924
- }
925
- }) : /* @__PURE__ */ V(G, {
926
- value: s ?? "",
927
- onChange: c,
928
- autoFocus: !0
929
- }), n !== "select" && n !== "bool" && /* @__PURE__ */ H(B, { children: [/* @__PURE__ */ V(k, {
930
- size: 24,
931
- icon: /* @__PURE__ */ V(O.check, { size: 13 }),
932
- onClick: l,
933
- title: i("dialog.save", "Save")
934
- }), /* @__PURE__ */ V(k, {
935
- size: 24,
936
- icon: /* @__PURE__ */ V(O.x, { size: 13 }),
937
- onClick: u,
938
- title: i("dialog.cancel", "Cancel")
939
- })] })]
940
- }) : /* @__PURE__ */ V("div", {
941
- onClick: () => o(!0),
942
- style: {
943
- padding: "4px 6px",
944
- margin: "-4px -6px",
945
- borderRadius: 4,
946
- cursor: "text",
947
- border: "1px dashed transparent",
948
- minHeight: 24,
949
- display: "flex",
950
- alignItems: "center",
951
- gap: 4
952
- },
953
- onMouseEnter: (e) => {
954
- e.currentTarget.style.borderColor = "var(--border)";
955
- },
956
- onMouseLeave: (e) => {
957
- e.currentTarget.style.borderColor = "transparent";
958
- },
959
- children: e || /* @__PURE__ */ V("span", {
960
- style: { color: "var(--text-4)" },
961
- children: i("control.click_to_edit", "Click to edit")
962
- })
963
- });
964
- }
965
- //#endregion
966
- //#region src/stores/preferences.ts
967
- var ze = {
968
- colorScheme: "light",
969
- accent: "violet",
970
- density: "compact",
971
- sidebar: "wide",
972
- tabsPosition: "top",
973
- tabsMaxOpen: 12,
974
- tabsPersist: !0,
975
- radius: 7,
976
- zebra: !0,
977
- aiSurface: "both",
978
- toastPosition: "bottom-right"
979
- }, Be = ["light", "dark"], Ve = [
980
- "violet",
981
- "blue",
982
- "teal",
983
- "amber",
984
- "rose"
985
- ], He = [
986
- "compact",
987
- "comfortable",
988
- "cozy"
989
- ], Ue = ["wide", "collapsed"], We = ["top", "bottom"], Ge = [
990
- "command",
991
- "panel",
992
- "both",
993
- "off"
994
- ], Ke = [
995
- "top-left",
996
- "top-center",
997
- "top-right",
998
- "bottom-left",
999
- "bottom-center",
1000
- "bottom-right"
1001
- ];
1002
- function q(e, t) {
1003
- return typeof t == "string" && e.includes(t) ? t : void 0;
1004
- }
1005
- function qe(e) {
1006
- let t = {}, n = q(Be, e.colorScheme);
1007
- n && (t.colorScheme = n);
1008
- let r = q(Ve, e.accent);
1009
- r && (t.accent = r);
1010
- let i = q(He, e.density);
1011
- i && (t.density = i);
1012
- let a = q(Ue, e.sidebar);
1013
- a && (t.sidebar = a);
1014
- let o = q(We, e.tabsPosition);
1015
- o && (t.tabsPosition = o);
1016
- let s = q(Ge, e.aiSurface);
1017
- s && (t.aiSurface = s);
1018
- let c = q(Ke, e.toastPosition);
1019
- return c && (t.toastPosition = c), typeof e.tabsMaxOpen == "number" && e.tabsMaxOpen > 0 && (t.tabsMaxOpen = e.tabsMaxOpen), typeof e.radius == "number" && e.radius >= 0 && e.radius <= 32 && (t.radius = e.radius), typeof e.zebra == "boolean" && (t.zebra = e.zebra), typeof e.tabsPersist == "boolean" && (t.tabsPersist = e.tabsPersist), t;
1020
- }
1021
- var Je = ["declarion-preferences", "declarion-appearance"];
1022
- function Ye() {
1023
- if (typeof window < "u") try {
1024
- for (let e of Je) localStorage.removeItem(e);
1025
- } catch {}
1026
- }
1027
- function J(e) {
1028
- if (typeof document > "u") return;
1029
- let t = document.documentElement;
1030
- t.dataset.colorScheme = e.colorScheme, t.dataset.accent = e.accent, t.dataset.density = e.density, t.dataset.sidebar = e.sidebar, t.dataset.tabbar = e.tabsPosition, t.dataset.zebra = e.zebra ? "on" : "off", t.dataset.ai = e.aiSurface, t.style.setProperty("--radius-md", `${e.radius}px`), t.style.setProperty("--radius-lg", `${e.radius + 3}px`);
1031
- }
1032
- function Xe(e) {
1033
- return {
1034
- colorScheme: e.color_scheme,
1035
- accent: e.accent,
1036
- density: e.density,
1037
- sidebar: e.sidebar,
1038
- tabsPosition: e.tabs_position,
1039
- tabsMaxOpen: e.tabs_max_open,
1040
- tabsPersist: e.tabs_persist,
1041
- radius: e.radius,
1042
- zebra: e.zebra_rows,
1043
- aiSurface: e.ai_surface,
1044
- toastPosition: e.toast_position
1045
- };
1046
- }
1047
- Ye();
1048
- var Ze = /* @__PURE__ */ new Set(), Qe = { ...ze };
1049
- typeof window < "u" && J(Qe);
1050
- var $e = le((e, t) => ({
1051
- ...Qe,
1052
- set: (n, r) => {
1053
- let i = qe({ [n]: r });
1054
- i[n] !== void 0 && (J({
1055
- ...t(),
1056
- ...i
1057
- }), Ze.add(n), e(i));
1058
- },
1059
- setMany: (n) => {
1060
- let r = qe(n);
1061
- if (Object.keys(r).length) {
1062
- J({
1063
- ...t(),
1064
- ...r
1065
- });
1066
- for (let e of Object.keys(r)) Ze.add(e);
1067
- e(r);
1068
- }
1069
- },
1070
- hydrateFromBranding: (t) => {
1071
- if (!t) return;
1072
- let n = Xe(t), r = {};
1073
- for (let [e, t] of Object.entries(n)) Ze.has(e) || t !== void 0 && (r[e] = t);
1074
- let i = qe(r);
1075
- Object.keys(i).length && (J({
1076
- ...$e.getState(),
1077
- ...i
1078
- }), e(i));
1079
- },
1080
- resetToDefaults: (t) => {
1081
- Ze.clear(), Ye();
1082
- let n = t ? qe(Xe(t)) : {}, r = {
1083
- ...ze,
1084
- ...n
1085
- };
1086
- J(r), e(r);
1087
- }
1088
- })), et = ["/login", "/signup"];
1089
- function tt(e) {
1090
- return et.includes(e);
1091
- }
1092
- function nt(e) {
1093
- return typeof e == "string" && e.startsWith("/") && !e.startsWith("//");
1094
- }
1095
- var rt = 4096;
1096
- function it(e) {
1097
- return typeof e == "string" && e.length <= rt;
1098
- }
1099
- function at(e) {
1100
- if (e === null) return null;
1101
- if (e === void 0 || typeof e != "object" || Array.isArray(e)) return;
1102
- let t = e;
1103
- if (!nt(t.pathname) || t.pathname.length > rt || t.pathname.includes("?") || t.pathname.includes("#")) return;
1104
- let n = { pathname: t.pathname };
1105
- if (t.search !== void 0) {
1106
- if (!it(t.search) || t.search.startsWith("?")) return;
1107
- t.search && (n.search = t.search);
1108
- }
1109
- if (t.hash !== void 0) {
1110
- if (!it(t.hash) || t.hash && !t.hash.startsWith("#")) return;
1111
- t.hash && (n.hash = t.hash);
1112
- }
1113
- for (let e of [
1114
- "tabId",
1115
- "title",
1116
- "icon",
1117
- "screen"
1118
- ]) if (t[e] !== void 0) {
1119
- if (!it(t[e])) return;
1120
- t[e] && (n[e] = t[e]);
1121
- }
1122
- return n;
1123
- }
1124
- function ot(e) {
1125
- return e.closable !== !1;
1126
- }
1127
- function st(e, t, n, r) {
1128
- if (n === "all") return e.filter(ot).map((e) => e.id);
1129
- let i = r ?? t;
1130
- if (!i) return [];
1131
- let a = e.findIndex((e) => e.id === i);
1132
- return a === -1 ? [] : n === "current" ? ot(e[a]) ? [e[a].id] : [] : n === "others" ? e.filter((e, t) => t !== a && ot(e)).map((e) => e.id) : e.slice(a + 1).filter(ot).map((e) => e.id);
1133
- }
1134
- var ct = null, lt = null;
1135
- function ut(e, t) {
1136
- return `declarion::${e}::${t}::tabs`;
1137
- }
1138
- function dt() {
1139
- return !ct || !lt ? null : ut(ct, lt);
1140
- }
1141
- function ft({ dirty: e, ...t }) {
1142
- return t;
1143
- }
1144
- function pt(e) {
1145
- let t;
1146
- try {
1147
- t = JSON.parse(e);
1148
- } catch {
1149
- return null;
1150
- }
1151
- if (typeof t != "object" || !t) return null;
1152
- let n = t;
1153
- return Array.isArray(n.tabs) ? {
1154
- tabs: n.tabs.filter((e) => typeof e == "object" && !!e && typeof e.id == "string" && typeof e.pathname == "string").map((e) => {
1155
- let t = ft(e), n = at(t.returnTo);
1156
- if (n === void 0) {
1157
- let { returnTo: e, ...n } = t;
1158
- return n;
1159
- }
1160
- return {
1161
- ...t,
1162
- returnTo: n
1163
- };
1164
- }),
1165
- activeTabId: typeof n.activeTabId == "string" ? n.activeTabId : null
1166
- } : null;
1167
- }
1168
- function mt(e, t) {
1169
- if (typeof window > "u") return null;
1170
- let n = localStorage.getItem(ut(e, t));
1171
- if (!n) return null;
1172
- let r = pt(n);
1173
- if (!r) return null;
1174
- let i = r.tabs.find((e) => e.id === r.activeTabId), a = i?.pathname;
1175
- if (nt(a)) {
1176
- let e = typeof i?.search == "string" ? i.search : "", t = e.startsWith("?") ? e.slice(1) : e;
1177
- return t ? `${a}?${t}` : a;
1178
- }
1179
- return null;
1180
- }
1181
- function Y(e, t) {
1182
- if (typeof window > "u") return;
1183
- let n = $e.getState().tabsPersist, r = dt();
1184
- if (r) {
1185
- if (n) try {
1186
- localStorage.setItem(r, JSON.stringify({
1187
- tabs: e.map(ft),
1188
- activeTabId: t
1189
- }));
1190
- } catch {}
1191
- else try {
1192
- localStorage.removeItem(r);
1193
- } catch {}
1194
- }
1195
- }
1196
- function ht() {
1197
- if (typeof window > "u" || !$e.getState().tabsPersist) return null;
1198
- let e = dt();
1199
- if (!e) return null;
1200
- let t = localStorage.getItem(e);
1201
- return t ? pt(t) : null;
1202
- }
1203
- var gt = le((e, t) => ({
1204
- tabs: [],
1205
- activeTabId: null,
1206
- openTab: (n, r) => {
1207
- if (tt(n.pathname)) return "";
1208
- let i = r?.activate ?? !0, a = t(), o = a.tabs.find((e) => e.pathname === n.pathname);
1209
- if (o) return i && (e({ activeTabId: o.id }), Y(a.tabs, o.id)), o.id;
1210
- let s = crypto.randomUUID(), c = {
1211
- ...n,
1212
- id: s
1213
- }, l = [...a.tabs, c], u = i ? s : a.activeTabId, d = $e.getState().tabsMaxOpen;
1214
- if (d > 0 && l.length > d) {
1215
- let e = l.findIndex((e) => e.id !== s && e.id !== u && e.closable !== !1 && !e.dirty);
1216
- e !== -1 && (l = l.filter((t, n) => n !== e));
1217
- }
1218
- return e({
1219
- tabs: l,
1220
- activeTabId: u
1221
- }), Y(l, u), s;
1222
- },
1223
- closeTab: (e) => {
1224
- let n = t(), r = n.tabs.findIndex((t) => t.id === e);
1225
- r !== -1 && n.tabs[r].closable && n.tabs.length !== 1 && t().closeTabs([e]);
1226
- },
1227
- closeTabs: (n) => {
1228
- let r = t(), i = new Set(n);
1229
- if (i.size === 0) return r.tabs.find((e) => e.id === r.activeTabId) ?? null;
1230
- let a = r.tabs.findIndex((e) => e.id === r.activeTabId), o = r.tabs.filter((e) => !(i.has(e.id) && ot(e))), s = r.activeTabId;
1231
- return s && !o.some((e) => e.id === s) ? s = o.length === 0 ? null : o[Math.min(Math.max(a, 0), o.length - 1)].id : o.length === 0 && (s = null), e({
1232
- tabs: o,
1233
- activeTabId: s
1234
- }), Y(o, s), o.find((e) => e.id === s) ?? null;
1235
- },
1236
- switchTab: (n) => {
1237
- e({ activeTabId: n }), Y(t().tabs, n);
1238
- },
1239
- findTabByPathname: (e) => t().tabs.find((t) => t.pathname === e),
1240
- updateTabTitle: (t, n, r = !1) => {
1241
- e((e) => ({ tabs: e.tabs.map((e) => e.id === t ? {
1242
- ...e,
1243
- title: n,
1244
- derivedTitle: r
1245
- } : e) }));
1246
- },
1247
- updateTabSearch: (t, n) => {
1248
- e((e) => ({ tabs: e.tabs.map((e) => e.id === t ? {
1249
- ...e,
1250
- search: n
1251
- } : e) }));
1252
- },
1253
- setReturnTarget: (n, r) => {
1254
- e((e) => ({ tabs: e.tabs.map((e) => e.id === n ? {
1255
- ...e,
1256
- returnTo: r
1257
- } : e) })), Y(t().tabs, t().activeTabId);
1258
- },
1259
- commitTabNavigation: (n, r) => {
1260
- let i = "returnTo" in r;
1261
- e((e) => ({
1262
- tabs: e.tabs.map((e) => e.id === n ? {
1263
- ...e,
1264
- search: r.search,
1265
- ...i ? { returnTo: r.returnTo } : {}
1266
- } : e),
1267
- activeTabId: n
1268
- })), Y(t().tabs, t().activeTabId);
1269
- },
1270
- setDirty: (n, r) => {
1271
- e((e) => ({ tabs: e.tabs.map((e) => e.id === n ? {
1272
- ...e,
1273
- dirty: r
1274
- } : e) })), Y(t().tabs, t().activeTabId);
1275
- },
1276
- setMode: (n, r) => {
1277
- e((e) => ({ tabs: e.tabs.map((e) => e.id === n ? {
1278
- ...e,
1279
- mode: r
1280
- } : e) })), Y(t().tabs, t().activeTabId);
1281
- },
1282
- updateTab: (n, r) => {
1283
- e((e) => ({ tabs: e.tabs.map((e) => e.id === n ? {
1284
- ...e,
1285
- ...r
1286
- } : e) })), Y(t().tabs, t().activeTabId);
1287
- },
1288
- setScope: (e, t) => {
1289
- ct = e, lt = t;
1290
- },
1291
- hydrate: () => {
1292
- let t = ht();
1293
- t && e({
1294
- tabs: t.tabs,
1295
- activeTabId: t.activeTabId
1296
- });
1297
- }
1298
- }));
1299
- typeof window < "u" && window.addEventListener("pagehide", () => {
1300
- let { tabs: e, activeTabId: t } = gt.getState();
1301
- Y(e, t);
1302
- });
1303
- //#endregion
1304
- //#region src/api/fileReferences.ts
1305
- function _t(e, t, n, r = {}) {
1306
- let i = new URLSearchParams(typeof t == "string" ? { id: t } : t);
1307
- return s(`/api/files/references/${encodeURIComponent(e)}/${encodeURIComponent(n)}?${i.toString()}`, { signal: r.signal });
1308
- }
1309
- //#endregion
1310
- //#region src/types/fieldType.ts
1311
- var vt = /* @__PURE__ */ "bool.bytes.date.decimal.email.enum.file_ref.float.int.int_array.json.multilang.multilang_array.multilang_text.password.phone.ref.rich_text.secret.string.string_array.structure.tags.text.time.timestamp.url.uuid.uuid_array".split(".");
1312
- //#endregion
1313
- //#region src/components/fields/StringField.tsx
1314
- function yt({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
1315
- if (r === "display") {
1316
- let t = T(n);
1317
- return e.copyable && t ? /* @__PURE__ */ H("span", {
1318
- style: {
1319
- display: "inline-flex",
1320
- alignItems: "center",
1321
- gap: 4
1322
- },
1323
- children: [/* @__PURE__ */ V("span", {
1324
- style: { fontSize: 12.5 },
1325
- children: t
1326
- }), /* @__PURE__ */ V(j, {
1327
- value: t,
1328
- size: "sm"
1329
- })]
1330
- }) : /* @__PURE__ */ V("span", {
1331
- style: { fontSize: 12.5 },
1332
- children: t || /* @__PURE__ */ V("span", {
1333
- style: { color: "var(--text-4)" },
1334
- children: "—"
1335
- })
1336
- });
1337
- }
1338
- return /* @__PURE__ */ V(G, {
1339
- id: a,
1340
- name: t,
1341
- "aria-required": e.required || void 0,
1342
- value: T(n),
1343
- onChange: (e) => i?.(e)
1344
- });
1345
- }
1346
- //#endregion
1347
- //#region src/components/shared/Markdown.tsx
1348
- var bt = ie(() => import("./MarkdownRenderer-sK2TRZS-.js").then((e) => ({ default: e.MarkdownRenderer })));
1349
- function xt() {
1350
- return /* @__PURE__ */ V("div", { className: "h-4 w-2/3 rounded bg-muted animate-pulse" });
1351
- }
1352
- function X(e) {
1353
- return /* @__PURE__ */ V(F, {
1354
- fallback: /* @__PURE__ */ V(xt, {}),
1355
- children: /* @__PURE__ */ V(bt, { ...e })
1356
- });
1357
- }
1358
- //#endregion
1359
- //#region src/components/fields/TextField.tsx
1360
- function St({ field: e, fieldName: t, value: n, mode: r, onChange: i, fill: a, compact: o, fieldId: s }) {
1361
- let c = e.display?.widget;
1362
- if (r === "display") {
1363
- let t = T(n);
1364
- if (!t) return /* @__PURE__ */ V("span", {
1365
- style: {
1366
- fontSize: 12.5,
1367
- color: "var(--text-4)"
1368
- },
1369
- children: "—"
1370
- });
1371
- let r = c === "markdown" ? /* @__PURE__ */ V(X, { content: t }) : c === "code" ? /* @__PURE__ */ V("pre", {
1372
- className: "mono",
1373
- style: {
1374
- fontSize: 12,
1375
- background: "var(--surface-2)",
1376
- color: "var(--text)",
1377
- borderRadius: 6,
1378
- border: "1px solid var(--border)",
1379
- padding: 14,
1380
- overflowX: "auto",
1381
- maxHeight: 600,
1382
- overflowY: "auto",
1383
- whiteSpace: "pre"
1384
- },
1385
- children: t
1386
- }) : /* @__PURE__ */ V("p", {
1387
- style: {
1388
- fontSize: 12.5,
1389
- whiteSpace: "pre-wrap",
1390
- wordBreak: "break-word",
1391
- margin: 0
1392
- },
1393
- children: t
1394
- });
1395
- return e.copyable ? /* @__PURE__ */ H("div", {
1396
- style: { position: "relative" },
1397
- children: [r, /* @__PURE__ */ V("div", {
1398
- style: {
1399
- position: "absolute",
1400
- top: 0,
1401
- right: 0
1402
- },
1403
- children: /* @__PURE__ */ V(j, {
1404
- value: t,
1405
- size: "sm"
1406
- })
1407
- })]
1408
- }) : r;
1409
- }
1410
- if (o) return /* @__PURE__ */ V(G, {
1411
- id: s,
1412
- name: t,
1413
- "aria-required": e.required || void 0,
1414
- value: T(n),
1415
- onChange: (e) => i?.(e)
1416
- });
1417
- let l = c === "markdown" || c === "code" ? 10 : 4;
1418
- return /* @__PURE__ */ V(Ce, {
1419
- id: s,
1420
- name: t,
1421
- ariaRequired: e.required,
1422
- value: T(n),
1423
- onChange: (e) => i?.(e),
1424
- rows: l,
1425
- fill: a
1426
- });
1427
- }
1428
- //#endregion
1429
- //#region src/components/fields/EnumField.tsx
1430
- var Ct = "__declarion_enum_null__";
1431
- function wt({ field: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a, t: o }) {
1432
- let s = e.values ?? [], c = s.find((e) => e.code === t);
1433
- if (n === "display") return c ? /* @__PURE__ */ V(M, {
1434
- tone: c.color ?? "slate",
1435
- size: "xs",
1436
- children: o(c.name)
1437
- }) : /* @__PURE__ */ V("span", {
1438
- style: {
1439
- fontSize: 12.5,
1440
- color: "var(--text-4)"
1441
- },
1442
- children: "—"
1443
- });
1444
- let l = !e.required, u = t != null && t !== "" ? T(t) : Ct, d = [...l ? [{
1445
- value: Ct,
1446
- label: o("field.enum.none", "— None —")
1447
- }] : [], ...s.map((e) => ({
1448
- value: e.code,
1449
- label: o(e.name) || e.code
1450
- }))];
1451
- return /* @__PURE__ */ V(K, {
1452
- id: i,
1453
- "aria-labelledby": a,
1454
- "aria-required": e.required || void 0,
1455
- value: u,
1456
- options: d,
1457
- onChange: (e) => r?.(e === Ct ? null : e),
1458
- placeholder: o("field.select_placeholder", "Select…")
1459
- });
1460
- }
1461
- //#endregion
1462
- //#region src/components/fields/EmailField.tsx
1463
- function Tt({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
1464
- return /* @__PURE__ */ V(G, {
1465
- id: i,
1466
- name: t,
1467
- "aria-required": e.required || void 0,
1468
- type: "email",
1469
- value: T(n),
1470
- onChange: (e) => r?.(e)
1471
- });
1472
- }
1473
- //#endregion
1474
- //#region src/components/fields/UrlField.tsx
1475
- var Et = "https://";
1476
- function Dt({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
1477
- return /* @__PURE__ */ V(G, {
1478
- id: i,
1479
- name: t,
1480
- "aria-required": e.required || void 0,
1481
- type: "url",
1482
- value: T(n),
1483
- onChange: (e) => r?.(e),
1484
- placeholder: Et
1485
- });
1486
- }
1487
- //#endregion
1488
- //#region src/components/fields/PhoneField.tsx
1489
- function Ot({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
1490
- return /* @__PURE__ */ V(G, {
1491
- id: i,
1492
- name: t,
1493
- "aria-required": e.required || void 0,
1494
- type: "tel",
1495
- value: T(n),
1496
- onChange: (e) => r?.(e),
1497
- placeholder: "+1 555 555 5555"
1498
- });
1499
- }
1500
- //#endregion
1501
- //#region src/components/fields/TimestampField.tsx
1502
- var kt = {
1503
- year: "numeric",
1504
- month: "short",
1505
- day: "numeric"
1506
- }, At = {
1507
- ...kt,
1508
- hour: "2-digit",
1509
- minute: "2-digit"
1510
- };
1511
- function jt(e, t, n) {
1512
- if (t) {
1513
- let t = /* @__PURE__ */ new Date(e + "T00:00:00");
1514
- return isNaN(t.getTime()) ? e : new Intl.DateTimeFormat(n, kt).format(t);
1515
- }
1516
- return h(e, At, n);
1517
- }
1518
- function Mt(e, t, n) {
1519
- if (t) {
1520
- let t = /* @__PURE__ */ new Date(e + "T00:00:00");
1521
- return isNaN(t.getTime()) ? e : new Intl.DateTimeFormat(n, kt).format(t);
1522
- }
1523
- let r = new Date(e);
1524
- return isNaN(r.getTime()) ? e : new Intl.DateTimeFormat(n, At).format(r);
1525
- }
1526
- function Nt(e) {
1527
- if (e.endsWith("Z")) return "UTC";
1528
- let t = e.match(/([+-]\d{2}:\d{2})$/);
1529
- if (!t) return null;
1530
- let n = t[1].charAt(0), r = parseInt(t[1].substring(1, 3), 10), i = parseInt(t[1].substring(4, 6), 10);
1531
- return r === 0 && i === 0 ? "UTC" : `UTC${n}${r}${i > 0 ? `:${String(i).padStart(2, "0")}` : ""}`;
1532
- }
1533
- function Pt(e, t) {
1534
- let n = e.match(/([+-]\d{2}:\d{2})$/), r = e.endsWith("Z"), i = new Date(e);
1535
- if (isNaN(i.getTime())) return "";
1536
- if (r) {
1537
- let e = i.getUTCFullYear(), n = String(i.getUTCMonth() + 1).padStart(2, "0"), r = String(i.getUTCDate()).padStart(2, "0");
1538
- return t ? `${e}-${n}-${r}` : `${e}-${n}-${r}T${String(i.getUTCHours()).padStart(2, "0")}:${String(i.getUTCMinutes()).padStart(2, "0")}`;
1539
- }
1540
- if (n) {
1541
- let e = n[1].charAt(0) === "+" ? 1 : -1, r = parseInt(n[1].substring(1, 3), 10), a = parseInt(n[1].substring(4, 6), 10), o = e * (r * 60 + a) * 60 * 1e3, s = new Date(i.getTime() + o), c = s.getUTCFullYear(), l = String(s.getUTCMonth() + 1).padStart(2, "0"), u = String(s.getUTCDate()).padStart(2, "0");
1542
- return t ? `${c}-${l}-${u}` : `${c}-${l}-${u}T${String(s.getUTCHours()).padStart(2, "0")}:${String(s.getUTCMinutes()).padStart(2, "0")}`;
1543
- }
1544
- return t ? e.slice(0, 10) : e.slice(0, 16);
1545
- }
1546
- function Ft(e, t) {
1547
- let n = new Date(e);
1548
- if (isNaN(n.getTime())) return "";
1549
- let r = n.getFullYear(), i = String(n.getMonth() + 1).padStart(2, "0"), a = String(n.getDate()).padStart(2, "0");
1550
- return t ? `${r}-${i}-${a}` : `${r}-${i}-${a}T${String(n.getHours()).padStart(2, "0")}:${String(n.getMinutes()).padStart(2, "0")}`;
1551
- }
1552
- function It({ field: e, fieldName: t, value: r, mode: i, onChange: a, fieldId: o, t: s }) {
1553
- let c = e.type === "date", l = !!e.timezone;
1554
- if (i === "display") {
1555
- if (!r) return /* @__PURE__ */ V("span", {
1556
- style: {
1557
- fontSize: 12.5,
1558
- color: "var(--text-4)"
1559
- },
1560
- children: "—"
1561
- });
1562
- let e = T(r), t = l ? jt(e, c, s.language) : Mt(e, c, s.language), n = l && !c ? Nt(e) : null;
1563
- return /* @__PURE__ */ H("span", {
1564
- style: { fontSize: 12.5 },
1565
- children: [t, n && /* @__PURE__ */ V("span", {
1566
- style: {
1567
- marginLeft: 4,
1568
- color: "var(--text-3)"
1569
- },
1570
- children: n
1571
- })]
1572
- });
1573
- }
1574
- let u = r ? l ? Pt(T(r), c) : Ft(T(r), c) : "";
1575
- return /* @__PURE__ */ V(G, {
1576
- id: o,
1577
- name: t,
1578
- "aria-required": e.required || void 0,
1579
- type: c ? "date" : "datetime-local",
1580
- value: u,
1581
- onChange: (e) => {
1582
- if (!e) {
1583
- a?.(null);
1584
- return;
1585
- }
1586
- if (l || c) {
1587
- a?.(e);
1588
- return;
1589
- }
1590
- let t = new Date(e);
1591
- isNaN(t.getTime()) ? a?.(e) : a?.(n(t));
1592
- }
1593
- });
1594
- }
1595
- //#endregion
1596
- //#region src/components/fields/BoolField.tsx
1597
- function Lt({ value: e, onChange: t, fieldId: n, labelId: r }) {
1598
- return /* @__PURE__ */ V(ye, {
1599
- id: n,
1600
- ariaLabelledby: r,
1601
- value: !!e,
1602
- onChange: (e) => t?.(e)
1603
- });
1604
- }
1605
- //#endregion
1606
- //#region src/lib/decimal-text.ts
1607
- function Rt(e, t) {
1608
- let n = e.trim();
1609
- if (n === "" || n === "-") return n;
1610
- let r = n.startsWith("-"), [i, a] = (r ? n.slice(1) : n).split("."), o;
1611
- try {
1612
- o = t.format(BigInt(i || "0"));
1613
- } catch {
1614
- return e;
1615
- }
1616
- let s = r ? `-${o}` : o;
1617
- return a === void 0 ? s : `${s}${t.formatToParts(1.1).find((e) => e.type === "decimal")?.value ?? "."}${a}`;
1618
- }
1619
- //#endregion
1620
- //#region src/components/fields/NumberField.tsx
1621
- function zt({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o, t: s }) {
1622
- let c = e.display?.widget === "money", l = e.type === "decimal" || c, u = a?.$units?.[t], d = !u && e.unit ? e.unit.display || e.unit.storage : void 0, f = u || (d && !d.startsWith("$") ? d : void 0);
1623
- if (r === "display") {
1624
- if (n == null) return /* @__PURE__ */ V("span", {
1625
- style: {
1626
- fontSize: 12.5,
1627
- color: "var(--text-4)"
1628
- },
1629
- children: "—"
1630
- });
1631
- let e;
1632
- if (l && typeof n == "string") e = Rt(n, new Intl.NumberFormat(s.language));
1633
- else {
1634
- let t = Number(n);
1635
- e = isNaN(t) ? null : new Intl.NumberFormat(s.language).format(t);
1636
- }
1637
- return e == null ? /* @__PURE__ */ V("span", {
1638
- style: { fontSize: 12.5 },
1639
- children: "—"
1640
- }) : /* @__PURE__ */ H("span", {
1641
- className: "num",
1642
- style: {
1643
- fontSize: 12.5,
1644
- fontVariantNumeric: "tabular-nums"
1645
- },
1646
- children: [e, f && /* @__PURE__ */ V("span", {
1647
- style: {
1648
- color: "var(--text-3)",
1649
- marginLeft: 4
1650
- },
1651
- children: f
1652
- })]
1653
- });
1654
- }
1655
- return l ? /* @__PURE__ */ V(G, {
1656
- id: o,
1657
- name: t,
1658
- "aria-required": e.required || void 0,
1659
- type: "text",
1660
- inputMode: "decimal",
1661
- pattern: "-?\\d*\\.?\\d*",
1662
- value: n == null ? "" : T(n),
1663
- onChange: (e) => {
1664
- e === "" ? i?.(null) : i?.(e);
1665
- }
1666
- }) : /* @__PURE__ */ V(G, {
1667
- id: o,
1668
- name: t,
1669
- "aria-required": e.required || void 0,
1670
- type: "number",
1671
- step: e.type === "float" ? "0.01" : "1",
1672
- value: n == null ? "" : T(n),
1673
- onChange: (t) => {
1674
- t === "" ? i?.(null) : i?.(e.type === "int" ? parseInt(t, 10) : parseFloat(t));
1675
- }
1676
- });
1677
- }
1678
- //#endregion
1679
- //#region src/hooks/useDebounce.ts
1680
- function Bt(e, t) {
1681
- let [n, r] = z(e);
1682
- return oe(() => {
1683
- let n = setTimeout(() => r(e), t);
1684
- return () => clearTimeout(n);
1685
- }, [e, t]), n;
1686
- }
1687
- //#endregion
1688
- //#region src/components/fields/RefCombobox.tsx
1689
- var Vt = 200;
1690
- function Ht({ ref: e, value: t, onChange: n, refs: r, displayFieldOverride: i, id: a, labelId: o, ariaLabel: s, required: c, placeholder: l, specialValues: u }) {
1691
- let d = E(), f = E("errors"), m = e?.entity, h = w(m), y = i ?? e?.display?.field ?? (h?.display?.display_template ? "$display" : h?.display?.display_field) ?? "$display", b = y === "$display" ? h?.display?.display_field : y, x = L(() => h ? g(h)[0] ?? "id" : "id", [h]), S = e?.field || x, [ee, D] = z(""), te = Bt(ee, 300), { data: O, isLoading: k, isError: A } = C(m, {
1692
- per_page: Vt,
1693
- sort: _(h, b ? `${b}:asc` : void 0),
1694
- search: te || void 0,
1695
- filters: e?.options_filter && v(h, e.options_filter)
1696
- }), j = L(() => O?.data ?? [], [O?.data]), M = A ? f("record.ref_choices_unreadable", "The choices could not be loaded.") : l ?? d("field.select_placeholder", "Select…"), N = t == null ? "" : T(t), P = L(() => j.some((e) => String(e[S]) === N), [
1697
- j,
1698
- S,
1699
- N
1700
- ]), ne = r && m ? r[m]?.[N] : void 0, F = !!u?.some((e) => e.code === N), { data: re } = C(N && !P && !F && !ne && !k ? m : void 0, {
1701
- per_page: 1,
1702
- filters: [{
1703
- field: S,
1704
- op: "eq",
1705
- value: N
1706
- }]
1707
- }), ie = R(null), I = L(() => {
1708
- if (!N) return "";
1709
- let e;
1710
- if (ne) e = p(d, ne, y, N);
1711
- else {
1712
- let t = j.find((e) => String(e[S]) === N);
1713
- if (t) e = p(d, t, y, N);
1714
- else {
1715
- let t = re?.data?.find((e) => String(e[S]) === N);
1716
- t && (e = p(d, t, y, N));
1717
- }
1718
- }
1719
- return e === void 0 ? ie.current?.value === N ? ie.current.label : N : (ie.current = {
1720
- value: N,
1721
- label: e
1722
- }, e);
1723
- }, [
1724
- d,
1725
- N,
1726
- ne,
1727
- j,
1728
- S,
1729
- y,
1730
- re
1731
- ]), ae = L(() => {
1732
- let e = (u ?? []).map((e) => ({
1733
- value: e.code,
1734
- label: d(e.label) || e.code
1735
- })), t = j.map((e) => {
1736
- let t = T(e[S]);
1737
- return {
1738
- value: t,
1739
- label: p(d, e, y, t)
1740
- };
1741
- }), n = N && !P && !F ? [{
1742
- value: N,
1743
- label: I
1744
- }] : [], r = t.length > 0 || n.length > 0;
1745
- return [
1746
- {
1747
- value: "",
1748
- label: M
1749
- },
1750
- ...e.length > 0 ? [{
1751
- value: "",
1752
- label: d("field.ref.special_values", "Special values"),
1753
- heading: !0
1754
- }, ...e] : [],
1755
- ...e.length > 0 && r ? [{
1756
- value: "",
1757
- label: "",
1758
- divider: !0
1759
- }] : [],
1760
- ...n,
1761
- ...t
1762
- ];
1763
- }, [
1764
- d,
1765
- M,
1766
- u,
1767
- N,
1768
- P,
1769
- F,
1770
- I,
1771
- j,
1772
- S,
1773
- y
1774
- ]);
1775
- return /* @__PURE__ */ V(K, {
1776
- id: a,
1777
- "aria-label": s,
1778
- "aria-labelledby": o,
1779
- "aria-required": c || void 0,
1780
- value: N,
1781
- options: ae,
1782
- onChange: (e) => n(e || null),
1783
- onSearchChange: D,
1784
- placeholder: M
1785
- });
1786
- }
1787
- //#endregion
1788
- //#region src/components/fields/RefField.tsx
1789
- function Ut({ field: e, value: t, mode: n, onChange: r, refs: i, fieldId: a, labelId: o }) {
1790
- let s = E(), c = e.ref?.entity, l = e.display?.ref_display_field || "$display", u = L(() => {
1791
- if (t == null) return "—";
1792
- let e = T(t);
1793
- if (i && c) {
1794
- let t = i[c]?.[e];
1795
- if (t) return p(s, t, l, e);
1796
- }
1797
- return e;
1798
- }, [
1799
- s,
1800
- t,
1801
- i,
1802
- c,
1803
- l
1804
- ]);
1805
- return n === "display" ? /* @__PURE__ */ V("span", {
1806
- style: { fontSize: 12.5 },
1807
- children: u
1808
- }) : /* @__PURE__ */ V(Ht, {
1809
- ref: e.ref,
1810
- value: t,
1811
- onChange: (e) => r?.(e),
1812
- refs: i,
1813
- displayFieldOverride: e.display?.ref_display_field,
1814
- id: a,
1815
- labelId: o,
1816
- required: e.required
1817
- });
1818
- }
1819
- //#endregion
1820
- //#region src/components/fields/JsonField.tsx
1821
- var Wt = ie(() => import("./JsonEditor-Dz1PQHC8.js").then((e) => ({ default: e.JsonEditor })));
1822
- function Gt() {
1823
- return /* @__PURE__ */ V("div", { className: "h-20 rounded-md border border-border bg-muted animate-pulse" });
1824
- }
1825
- function Kt(e) {
1826
- return e == null ? !0 : typeof e == "string" ? e.trim() === "" : Array.isArray(e) ? e.length === 0 : typeof e == "object" && Object.keys(e).length === 0;
1827
- }
1828
- function qt(e) {
1829
- return Array.isArray(e) && e.every((e) => [
1830
- "string",
1831
- "number",
1832
- "boolean"
1833
- ].includes(typeof e));
1834
- }
1835
- function Jt({ value: e, mode: t, onChange: n, fieldId: r }) {
1836
- return t === "display" ? Kt(e) ? /* @__PURE__ */ V("span", {
1837
- style: {
1838
- fontSize: 12.5,
1839
- color: "var(--text-4)"
1840
- },
1841
- children: "—"
1842
- }) : qt(e) ? /* @__PURE__ */ V("ul", {
1843
- className: "mono",
1844
- style: {
1845
- margin: 0,
1846
- padding: 0,
1847
- listStyle: "none",
1848
- fontSize: 12.5,
1849
- lineHeight: 1.7
1850
- },
1851
- children: e.map((e, t) => /* @__PURE__ */ V("li", { children: String(e) }, t))
1852
- }) : /* @__PURE__ */ V(F, {
1853
- fallback: /* @__PURE__ */ V(Gt, {}),
1854
- children: /* @__PURE__ */ V(Wt, {
1855
- value: e,
1856
- readOnly: !0
1857
- })
1858
- }) : /* @__PURE__ */ V(F, {
1859
- fallback: /* @__PURE__ */ V(Gt, {}),
1860
- children: /* @__PURE__ */ V(Wt, {
1861
- value: e,
1862
- onChange: n,
1863
- id: r
1864
- })
1865
- });
1866
- }
1867
- //#endregion
1868
- //#region src/components/fields/langMap.ts
1869
- function Yt(e) {
1870
- return e == null ? {} : typeof e == "object" && !Array.isArray(e) ? e : typeof e == "string" ? { en: e } : {};
1871
- }
1872
- //#endregion
1873
- //#region src/components/fields/MultilangField.tsx
1874
- function Xt({ field: e, fieldName: t, value: n, mode: i, onChange: a, fieldId: o, t: s }) {
1875
- let { data: c } = r(), l = c?.languages ?? [], u = Yt(n);
1876
- if (i === "display") {
1877
- let e = s(u) || "—";
1878
- return /* @__PURE__ */ V("span", {
1879
- style: { fontSize: 12.5 },
1880
- children: e
1881
- });
1882
- }
1883
- let d = (e, t) => {
1884
- let n = {
1885
- ...u,
1886
- [e]: t
1887
- };
1888
- for (let e of Object.keys(n)) n[e] || delete n[e];
1889
- a?.(Object.keys(n).length > 0 ? n : null);
1890
- };
1891
- return /* @__PURE__ */ V("div", {
1892
- style: {
1893
- display: "flex",
1894
- flexDirection: "column",
1895
- gap: 6
1896
- },
1897
- children: l.map((n, r) => {
1898
- let i = o ? r === 0 ? o : `${o}-${n.code}` : void 0;
1899
- return /* @__PURE__ */ H("div", {
1900
- style: {
1901
- display: "flex",
1902
- alignItems: "center",
1903
- gap: 8
1904
- },
1905
- children: [/* @__PURE__ */ V("label", {
1906
- htmlFor: i,
1907
- style: {
1908
- width: 24,
1909
- fontSize: 10.5,
1910
- color: "var(--text-3)",
1911
- textTransform: "uppercase",
1912
- flexShrink: 0,
1913
- letterSpacing: "0.04em",
1914
- fontWeight: 500
1915
- },
1916
- children: n.code
1917
- }), /* @__PURE__ */ V("div", {
1918
- style: { flex: 1 },
1919
- children: /* @__PURE__ */ V(G, {
1920
- id: i,
1921
- name: t ? `${t}.${n.code}` : void 0,
1922
- "aria-required": e.required && r === 0 ? !0 : void 0,
1923
- value: u[n.code] ?? "",
1924
- onChange: (e) => d(n.code, e),
1925
- placeholder: s("field.multilang.value", "Value ({language})", { language: n.code })
1926
- })
1927
- })]
1928
- }, n.code);
1929
- })
1930
- });
1931
- }
1932
- //#endregion
1933
- //#region src/components/fields/MultilangTextField.tsx
1934
- function Zt({ field: e, fieldName: t, value: n, mode: i, onChange: a, fieldId: o, t: s }) {
1935
- let { data: c } = r(), l = c?.languages ?? [], u = Yt(n);
1936
- if (i === "display") {
1937
- let e = s(u) || "—";
1938
- return /* @__PURE__ */ V("p", {
1939
- style: {
1940
- fontSize: 12.5,
1941
- whiteSpace: "pre-wrap",
1942
- margin: 0
1943
- },
1944
- children: e
1945
- });
1946
- }
1947
- let d = (e, t) => {
1948
- let n = {
1949
- ...u,
1950
- [e]: t
1951
- };
1952
- for (let e of Object.keys(n)) n[e] || delete n[e];
1953
- a?.(Object.keys(n).length > 0 ? n : null);
1954
- };
1955
- return /* @__PURE__ */ V("div", {
1956
- style: {
1957
- display: "flex",
1958
- flexDirection: "column",
1959
- gap: 10
1960
- },
1961
- children: l.map((n, r) => {
1962
- let i = o ? r === 0 ? o : `${o}-${n.code}` : void 0;
1963
- return /* @__PURE__ */ H("div", {
1964
- style: {
1965
- display: "flex",
1966
- flexDirection: "column",
1967
- gap: 4
1968
- },
1969
- children: [/* @__PURE__ */ V("label", {
1970
- htmlFor: i,
1971
- style: {
1972
- fontSize: 10.5,
1973
- color: "var(--text-3)",
1974
- textTransform: "uppercase",
1975
- letterSpacing: "0.04em",
1976
- fontWeight: 500
1977
- },
1978
- children: n.code
1979
- }), /* @__PURE__ */ V(Ce, {
1980
- id: i,
1981
- name: t ? `${t}.${n.code}` : void 0,
1982
- ariaRequired: e.required && r === 0,
1983
- value: u[n.code] ?? "",
1984
- onChange: (e) => d(n.code, e),
1985
- placeholder: s("field.multilang.value", "Value ({language})", { language: n.code }),
1986
- rows: 4
1987
- })]
1988
- }, n.code);
1989
- })
1990
- });
1991
- }
1992
- //#endregion
1993
- //#region src/components/fields/MultilangArrayField.tsx
1994
- function Qt(e) {
1995
- return Array.isArray(e) ? e.map(Yt) : [];
1996
- }
1997
- function $t(e) {
1998
- let { value: t, mode: n, onChange: r, fieldId: i, fieldName: a, t: o } = e, s = Qt(t);
1999
- if (n === "display") return s.length === 0 ? /* @__PURE__ */ V("span", {
2000
- className: "text-muted-foreground",
2001
- children: "—"
2002
- }) : /* @__PURE__ */ V("div", {
2003
- className: "flex flex-wrap gap-1",
2004
- children: s.map((e, t) => /* @__PURE__ */ V(U, {
2005
- tone: "slate",
2006
- children: o(e) || "—"
2007
- }, t))
2008
- });
2009
- let c = (e, t) => {
2010
- r?.(s.map((n, r) => r === e ? Yt(t) : n));
2011
- };
2012
- return /* @__PURE__ */ H("div", {
2013
- className: "flex flex-col gap-2",
2014
- id: i,
2015
- role: "group",
2016
- children: [s.map((t, n) => /* @__PURE__ */ H("div", {
2017
- className: "flex items-start gap-2",
2018
- children: [/* @__PURE__ */ V("div", {
2019
- className: "flex-1",
2020
- children: /* @__PURE__ */ V(Xt, {
2021
- ...e,
2022
- fieldId: i ? `${i}-${n}` : void 0,
2023
- fieldName: a && `${a}.${n}`,
2024
- value: t,
2025
- onChange: (e) => c(n, e)
2026
- })
2027
- }), /* @__PURE__ */ V(k, {
2028
- size: 24,
2029
- icon: /* @__PURE__ */ V(O.trash, { size: 12 }),
2030
- onClick: () => r?.(s.filter((e, t) => t !== n)),
2031
- title: o("field.array.remove", "Remove")
2032
- })]
2033
- }, n)), /* @__PURE__ */ V("div", { children: /* @__PURE__ */ V(A, {
2034
- icon: /* @__PURE__ */ V(O.plus, { size: 13 }),
2035
- onClick: () => r?.([...s, {}]),
2036
- children: o("field.array.add", "Add")
2037
- }) })]
2038
- });
2039
- }
2040
- //#endregion
2041
- //#region src/components/fields/secretValue.ts
2042
- var en = "[SET]";
2043
- function tn(e) {
2044
- return e === "[SET]" || typeof e == "string" && e !== "";
2045
- }
2046
- //#endregion
2047
- //#region src/components/fields/SecretField.tsx
2048
- function nn({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o, t: s }) {
2049
- let [c, l] = z(""), u = a !== void 0, d = tn(n);
2050
- return r === "display" ? d ? /* @__PURE__ */ V("span", {
2051
- className: "mono",
2052
- style: {
2053
- fontSize: 12.5,
2054
- color: "var(--text-3)"
2055
- },
2056
- children: s("field.secret.set", "Set")
2057
- }) : /* @__PURE__ */ V("span", {
2058
- style: {
2059
- fontSize: 12.5,
2060
- color: "var(--text-4)",
2061
- fontStyle: "italic"
2062
- },
2063
- children: s("field.secret.not_set", "Not set")
2064
- }) : /* @__PURE__ */ V(Me, {
2065
- id: o,
2066
- name: t,
2067
- ariaRequired: e.required,
2068
- value: c,
2069
- onChange: (e) => {
2070
- l(e), u && e === "" ? i?.(d ? en : "") : i?.(e);
2071
- },
2072
- placeholder: u ? s("field.secret.keep_existing", "Leave blank to keep existing value") : s("field.secret.placeholder", "Enter value")
2073
- });
2074
- }
2075
- //#endregion
2076
- //#region src/components/fields/PasswordField.tsx
2077
- function rn({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o, t: s }) {
2078
- let [c, l] = z(""), u = a !== void 0, d = tn(n);
2079
- return r === "display" ? d ? /* @__PURE__ */ V("span", {
2080
- className: "mono",
2081
- style: {
2082
- fontSize: 12.5,
2083
- color: "var(--text-3)"
2084
- },
2085
- children: s("field.secret.set", "Set")
2086
- }) : /* @__PURE__ */ V("span", {
2087
- style: {
2088
- fontSize: 12.5,
2089
- color: "var(--text-4)",
2090
- fontStyle: "italic"
2091
- },
2092
- children: s("field.secret.not_set", "Not set")
2093
- }) : /* @__PURE__ */ V(Me, {
2094
- id: o,
2095
- name: t,
2096
- ariaRequired: e.required,
2097
- value: c,
2098
- onChange: (e) => {
2099
- l(e), u && e === "" ? i?.(d ? en : "") : i?.(e);
2100
- },
2101
- placeholder: u ? s("field.secret.keep_existing", "Leave blank to keep existing value") : s("field.password.placeholder", "Enter password")
2102
- });
2103
- }
2104
- //#endregion
2105
- //#region src/components/fields/StringArrayField.tsx
2106
- function an(e) {
2107
- return Array.isArray(e) ? e.filter((e) => e != null).map(String) : [];
2108
- }
2109
- function on({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a, t: o }) {
2110
- let s = an(n), c = e.values ?? [];
2111
- return c.length > 0 ? /* @__PURE__ */ V(sn, {
2112
- values: c,
2113
- selected: s,
2114
- mode: r,
2115
- required: e.required,
2116
- onChange: i,
2117
- t: o
2118
- }) : /* @__PURE__ */ V(cn, {
2119
- items: s,
2120
- fieldName: t,
2121
- required: e.required,
2122
- mode: r,
2123
- onChange: i,
2124
- fieldId: a,
2125
- t: o
2126
- });
2127
- }
2128
- function sn({ values: e, selected: t, mode: n, required: r, onChange: i, t: a }) {
2129
- let o = new Set(t), s = (t) => {
2130
- let n = e.find((e) => e.code === t);
2131
- return n && a(n.name) || t;
2132
- }, c = t.filter((t) => !e.some((e) => e.code === t));
2133
- if (n === "display") return t.length === 0 ? /* @__PURE__ */ V("span", {
2134
- style: {
2135
- fontSize: 12.5,
2136
- color: "var(--text-4)"
2137
- },
2138
- children: "—"
2139
- }) : /* @__PURE__ */ H("div", {
2140
- style: {
2141
- display: "flex",
2142
- flexWrap: "wrap",
2143
- gap: 4
2144
- },
2145
- children: [e.filter((e) => o.has(e.code)).map((e) => /* @__PURE__ */ V(U, {
2146
- tone: "slate",
2147
- children: a(e.name) || e.code
2148
- }, e.code)), c.map((e) => /* @__PURE__ */ V(U, {
2149
- tone: "slate",
2150
- children: s(e)
2151
- }, e))]
2152
- });
2153
- let l = (e) => {
2154
- o.has(e) ? i?.(t.filter((t) => t !== e)) : i?.([...t, e]);
2155
- }, u = (e) => ({
2156
- display: "inline-flex",
2157
- alignItems: "center",
2158
- gap: 4,
2159
- padding: "3px 10px",
2160
- borderRadius: 999,
2161
- fontSize: 12.5,
2162
- cursor: "pointer",
2163
- border: e ? "1px solid var(--text-3)" : "1px solid var(--border)",
2164
- background: e ? "var(--surface-2)" : "transparent",
2165
- color: e ? "var(--text)" : "var(--text-4)",
2166
- fontWeight: e ? 600 : 400
2167
- });
2168
- return /* @__PURE__ */ H("div", {
2169
- role: "group",
2170
- "aria-required": r || void 0,
2171
- style: {
2172
- display: "flex",
2173
- flexWrap: "wrap",
2174
- gap: 6
2175
- },
2176
- children: [e.map((e) => {
2177
- let t = o.has(e.code);
2178
- return /* @__PURE__ */ H("button", {
2179
- type: "button",
2180
- "aria-pressed": t,
2181
- onClick: () => l(e.code),
2182
- style: u(t),
2183
- children: [t && /* @__PURE__ */ V(O.check, { size: 12 }), s(e.code)]
2184
- }, e.code);
2185
- }), c.map((e) => /* @__PURE__ */ H("button", {
2186
- type: "button",
2187
- "aria-pressed": !0,
2188
- onClick: () => l(e),
2189
- style: u(!0),
2190
- children: [/* @__PURE__ */ V(O.check, { size: 12 }), s(e)]
2191
- }, e))]
2192
- });
2193
- }
2194
- function cn({ items: e, fieldName: t, required: n, mode: r, onChange: i, fieldId: a, t: o }) {
2195
- let [s, c] = z("");
2196
- if (r === "display") return e.length === 0 ? /* @__PURE__ */ V("span", {
2197
- style: {
2198
- fontSize: 12.5,
2199
- color: "var(--text-4)"
2200
- },
2201
- children: "—"
2202
- }) : /* @__PURE__ */ V("div", {
2203
- style: {
2204
- display: "flex",
2205
- flexWrap: "wrap",
2206
- gap: 4
2207
- },
2208
- children: e.map((e, t) => /* @__PURE__ */ V(U, {
2209
- tone: "slate",
2210
- children: e
2211
- }, t))
2212
- });
2213
- let l = () => {
2214
- let t = s.trim();
2215
- t && (i?.([...e, t]), c(""));
2216
- }, u = (t) => {
2217
- i?.(e.filter((e, n) => n !== t));
2218
- };
2219
- return /* @__PURE__ */ H("div", {
2220
- style: {
2221
- display: "flex",
2222
- flexDirection: "column",
2223
- gap: 6
2224
- },
2225
- children: [e.length > 0 && /* @__PURE__ */ V("div", {
2226
- style: {
2227
- display: "flex",
2228
- flexWrap: "wrap",
2229
- gap: 4
2230
- },
2231
- children: e.map((e, t) => /* @__PURE__ */ V(U, {
2232
- tone: "slate",
2233
- onRemove: () => u(t),
2234
- children: e
2235
- }, t))
2236
- }), /* @__PURE__ */ H("div", {
2237
- style: {
2238
- display: "flex",
2239
- gap: 4
2240
- },
2241
- children: [/* @__PURE__ */ V("div", {
2242
- style: { flex: 1 },
2243
- children: /* @__PURE__ */ V(G, {
2244
- id: a,
2245
- name: t,
2246
- "aria-required": n || void 0,
2247
- value: s,
2248
- onChange: c,
2249
- onKeyDown: (e) => {
2250
- e.key === "Enter" && (e.preventDefault(), l());
2251
- },
2252
- placeholder: o("field.array.add_item", "Add item…")
2253
- })
2254
- }), /* @__PURE__ */ V(A, {
2255
- icon: /* @__PURE__ */ V(O.plus, { size: 13 }),
2256
- onClick: l,
2257
- children: o("field.array.add", "Add")
2258
- })]
2259
- })]
2260
- });
2261
- }
2262
- //#endregion
2263
- //#region src/components/fields/IntArrayField.tsx
2264
- function ln(e) {
2265
- return Array.isArray(e) ? e.filter((e) => e != null).map(Number).filter((e) => !isNaN(e)) : [];
2266
- }
2267
- function un({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a, t: o }) {
2268
- let s = ln(n), [c, l] = z("");
2269
- if (r === "display") return s.length === 0 ? /* @__PURE__ */ V("span", {
2270
- style: {
2271
- fontSize: 12.5,
2272
- color: "var(--text-4)"
2273
- },
2274
- children: "—"
2275
- }) : /* @__PURE__ */ V("div", {
2276
- style: {
2277
- display: "flex",
2278
- flexWrap: "wrap",
2279
- gap: 4
2280
- },
2281
- children: s.map((e, t) => /* @__PURE__ */ V(U, {
2282
- tone: "slate",
2283
- children: e
2284
- }, t))
2285
- });
2286
- let u = () => {
2287
- let e = c.trim();
2288
- if (!e) return;
2289
- let t = Number(e);
2290
- !isNaN(t) && Number.isInteger(t) && (i?.([...s, t]), l(""));
2291
- }, d = (e) => {
2292
- i?.(s.filter((t, n) => n !== e));
2293
- };
2294
- return /* @__PURE__ */ H("div", {
2295
- style: {
2296
- display: "flex",
2297
- flexDirection: "column",
2298
- gap: 6
2299
- },
2300
- children: [s.length > 0 && /* @__PURE__ */ V("div", {
2301
- style: {
2302
- display: "flex",
2303
- flexWrap: "wrap",
2304
- gap: 4
2305
- },
2306
- children: s.map((e, t) => /* @__PURE__ */ V(U, {
2307
- tone: "slate",
2308
- onRemove: () => d(t),
2309
- children: e
2310
- }, t))
2311
- }), /* @__PURE__ */ H("div", {
2312
- style: {
2313
- display: "flex",
2314
- gap: 4
2315
- },
2316
- children: [/* @__PURE__ */ V("div", {
2317
- style: { flex: 1 },
2318
- children: /* @__PURE__ */ V(G, {
2319
- id: a,
2320
- name: t,
2321
- "aria-required": e.required || void 0,
2322
- type: "number",
2323
- value: c,
2324
- onChange: l,
2325
- onKeyDown: (e) => {
2326
- e.key === "Enter" && (e.preventDefault(), u());
2327
- },
2328
- placeholder: o("field.array.add_number", "Add number…")
2329
- })
2330
- }), /* @__PURE__ */ V(A, {
2331
- icon: /* @__PURE__ */ V(O.plus, { size: 13 }),
2332
- onClick: u,
2333
- children: o("field.array.add", "Add")
2334
- })]
2335
- })]
2336
- });
2337
- }
2338
- //#endregion
2339
- //#region src/lib/rich-text.ts
2340
- var dn = /declarion:\/\/file\/([0-9a-fA-F-]{36})/g;
2341
- function fn(e) {
2342
- return typeof e == "string" ? e : bn(e) && typeof e.markdown == "string" ? e.markdown : "";
2343
- }
2344
- function pn(e, t) {
2345
- return {
2346
- markdown: fn(e),
2347
- files: gn(t)
2348
- };
2349
- }
2350
- function mn(e, t) {
2351
- let n = pn(e, null);
2352
- return n.files[t.id] = t, n;
2353
- }
2354
- function hn(e, t) {
2355
- let n = pn(e, null);
2356
- for (let e of t) delete n.files[e];
2357
- return n;
2358
- }
2359
- function gn(e) {
2360
- if (!Array.isArray(e)) return {};
2361
- let t = {};
2362
- for (let n of e) bn(n) && typeof n.id == "string" && (t[n.id] = n);
2363
- return t;
2364
- }
2365
- function _n(e) {
2366
- let t = /* @__PURE__ */ new Set(), n = [], r;
2367
- for (dn.lastIndex = 0; (r = dn.exec(e)) !== null;) {
2368
- let e = r[1];
2369
- t.has(e) || (t.add(e), n.push(e));
2370
- }
2371
- return n;
2372
- }
2373
- function vn(e) {
2374
- return e ? /^declarion:\/\/file\/([0-9a-fA-F-]{36})$/.exec(e)?.[1] ?? null : null;
2375
- }
2376
- function yn(e) {
2377
- let t = `declarion://file/${e.id}`;
2378
- return e.content_type.startsWith("image/") ? `![](${t})` : `[${e.filename || e.id}](${t})`;
2379
- }
2380
- function bn(e) {
2381
- return typeof e == "object" && !!e;
2382
- }
2383
- //#endregion
2384
- //#region src/components/file-widgets/upload.ts
2385
- var Z = class extends Error {
2386
- code;
2387
- status;
2388
- raw;
2389
- constructor(e, t, n, r) {
2390
- super(n), this.code = t, this.status = e, this.raw = r;
2391
- }
2392
- ext(e) {
2393
- return this.raw?.[e];
2394
- }
2395
- };
2396
- function xn(e, t, n) {
2397
- if (!(n instanceof Z)) return {
2398
- code: "UNKNOWN",
2399
- message: c(t, n)
2400
- };
2401
- if (f(n.raw)) return {
2402
- code: n.code,
2403
- message: n.message
2404
- };
2405
- let r = {
2406
- code: n.code,
2407
- message: t(n.code, n.message) || t("file.upload_failed", "The file could not be uploaded.")
2408
- };
2409
- return n.code === "file.upload_failed" && (r.detail = e("file.upload.status", "HTTP status {status}", { status: n.status })), r;
2410
- }
2411
- async function Sn(n) {
2412
- let r = t();
2413
- try {
2414
- return await Cn(n, r ? await i() : null);
2415
- } catch (t) {
2416
- if (!(t instanceof Z && t.status === 401 && (t.code === "auth.token_refresh_needed" || t.code === "auth.unauthorized"))) throw t;
2417
- let o = null;
2418
- try {
2419
- r ? (a(), o = await i()) : await e();
2420
- } catch {
2421
- throw b()(), t;
2422
- }
2423
- try {
2424
- return await Cn(n, o);
2425
- } catch (e) {
2426
- throw e instanceof Z && e.status === 401 && b()(), e;
2427
- }
2428
- }
2429
- }
2430
- function Cn(e, t) {
2431
- let { file: n, entityCode: r, fieldCode: i, slotCode: a, onProgress: o, signal: s } = e;
2432
- return new Promise((e, c) => {
2433
- let l = new XMLHttpRequest();
2434
- if (l.open("POST", wn(r, i, a)), l.withCredentials = t === null, t && l.setRequestHeader("Authorization", `Bearer ${t}`), l.upload.onprogress = (e) => {
2435
- if (!o) return;
2436
- let t = e.lengthComputable ? e.total : n.size, r = t > 0 ? Math.min(100, Math.round(e.loaded / t * 100)) : 0;
2437
- o({
2438
- loaded: e.loaded,
2439
- total: t,
2440
- pct: r
2441
- });
2442
- }, l.onload = () => {
2443
- let t = l.responseText || "", n = null;
2444
- try {
2445
- n = t ? JSON.parse(t) : null;
2446
- } catch {}
2447
- if (l.status >= 200 && l.status < 300) {
2448
- let t = Tn(n);
2449
- if (!t || !t.id) {
2450
- c(new Z(l.status, "file.upload_no_id", "The upload finished but returned no file identifier."));
2451
- return;
2452
- }
2453
- e(t);
2454
- return;
2455
- }
2456
- let r = f(n) ? d(n.type) : "", i = f(n) ? n.title : "";
2457
- c(new Z(l.status, r || "file.upload_failed", i, n));
2458
- }, l.onerror = () => {
2459
- c(new Z(0, "file.upload_network", "The upload stopped because the network connection failed."));
2460
- }, l.onabort = () => {
2461
- c(new Z(0, "ABORTED", "Upload aborted"));
2462
- }, s) {
2463
- if (s.aborted) {
2464
- l.abort(), c(new Z(0, "ABORTED", "Upload aborted"));
2465
- return;
2466
- }
2467
- s.addEventListener("abort", () => l.abort(), { once: !0 });
2468
- }
2469
- let u = new FormData();
2470
- u.append("file", n, n.name), l.send(u);
2471
- });
2472
- }
2473
- function wn(e, t, n) {
2474
- let r = new URLSearchParams();
2475
- e && t && (r.set("entity_code", e), r.set("field_code", t), n && r.set("slot_code", n));
2476
- let i = r.toString();
2477
- return i ? `/api/files/upload?${i}` : "/api/files/upload";
2478
- }
2479
- function Tn(e) {
2480
- return Dn(e) ? Dn(e.result) ? Tn(e.result) : Dn(e.file) ? En(e.file) : typeof e.id == "string" ? e : null : null;
2481
- }
2482
- function En(e) {
2483
- let t = On(e.file_id);
2484
- return t ? {
2485
- id: t,
2486
- filename: On(e.filename_original) ?? On(e.filename_normalized) ?? t,
2487
- content_type: On(e.content_type) ?? "application/octet-stream",
2488
- size_bytes: kn(e.size_bytes) ?? 0,
2489
- sha256: On(e.sha256) ?? "",
2490
- dedup: An(e.dedup)
2491
- } : null;
2492
- }
2493
- function Dn(e) {
2494
- return typeof e == "object" && !!e;
2495
- }
2496
- function On(e) {
2497
- return typeof e == "string" ? e : void 0;
2498
- }
2499
- function kn(e) {
2500
- return typeof e == "number" ? e : void 0;
2501
- }
2502
- function An(e) {
2503
- return typeof e == "boolean" ? e : void 0;
2504
- }
2505
- async function jn(e) {
2506
- await x("files.discard", { file_id: e });
2507
- }
2508
- var Mn = "This file is larger than the deployment allows.", Nn = "This file does not satisfy the field it was attached to.";
2509
- function Pn(e, t, n) {
2510
- if (n && e.size > n) return {
2511
- code: "file.too_large",
2512
- message: Mn,
2513
- size: e.size,
2514
- max: n
2515
- };
2516
- if (t && t.length > 0) {
2517
- let n = e.type || "application/octet-stream";
2518
- if (!t.some((e) => In(e, n))) return {
2519
- code: "file.field_violation",
2520
- message: Nn,
2521
- type: n
2522
- };
2523
- }
2524
- return null;
2525
- }
2526
- function Fn(e, t, n) {
2527
- return n.code === "file.too_large" ? {
2528
- code: n.code,
2529
- message: t(n.code, Mn),
2530
- detail: e("file.upload.size_limit", "{size} of {max} allowed", {
2531
- size: Ln(n.size),
2532
- max: Ln(n.max)
2533
- })
2534
- } : {
2535
- code: n.code,
2536
- message: t(n.code, Nn),
2537
- detail: e("file.upload.type", "Type: {type}", { type: n.type })
2538
- };
2539
- }
2540
- function In(e, t) {
2541
- if (e === "*/*" || e === "*") return !0;
2542
- if (e.endsWith("/*")) {
2543
- let n = e.slice(0, e.length - 1);
2544
- return t.startsWith(n);
2545
- }
2546
- return e === t;
2547
- }
2548
- function Ln(e) {
2549
- if (e < 1024) return `${e} B`;
2550
- let t = [
2551
- "KB",
2552
- "MB",
2553
- "GB"
2554
- ], n = e / 1024, r = 0;
2555
- for (; n >= 1024 && r < t.length - 1;) n /= 1024, r++;
2556
- return `${n.toFixed(n >= 10 ? 0 : 1)} ${t[r]}`;
2557
- }
2558
- //#endregion
2559
- //#region src/components/file-widgets/draft-scope.tsx
2560
- var Rn = re({
2561
- registerDraft() {},
2562
- unregisterDraft() {},
2563
- hasDraft() {
2564
- return !1;
2565
- },
2566
- flushAllDrafts: async () => {},
2567
- markCommitted() {}
2568
- });
2569
- function zn({ children: e }) {
2570
- let t = R(/* @__PURE__ */ new Map()), n = L(() => ({
2571
- registerDraft(e) {
2572
- t.current.set(e.fileId, e);
2573
- },
2574
- unregisterDraft(e) {
2575
- t.current.delete(e);
2576
- },
2577
- hasDraft(e) {
2578
- return t.current.has(e);
2579
- },
2580
- markCommitted(e) {
2581
- t.current.delete(e);
2582
- },
2583
- async flushAllDrafts() {
2584
- let e = Array.from(t.current.values());
2585
- t.current.clear(), await Promise.allSettled(e.map((e) => Promise.resolve(e.discard())));
2586
- }
2587
- }), []);
2588
- return /* @__PURE__ */ V(Rn.Provider, {
2589
- value: n,
2590
- children: e
2591
- });
2592
- }
2593
- function Bn() {
2594
- return ae(Rn);
2595
- }
2596
- function Vn() {
2597
- let e = Bn();
2598
- return {
2599
- register: I((t, n) => {
2600
- e.registerDraft({
2601
- fileId: t,
2602
- discard: n
2603
- });
2604
- }, [e]),
2605
- unregister: I((t) => {
2606
- e.unregisterDraft(t);
2607
- }, [e]),
2608
- markCommitted: I((t) => {
2609
- e.markCommitted(t);
2610
- }, [e]),
2611
- isDraft: I((t) => e.hasDraft(t), [e])
2612
- };
2613
- }
2614
- //#endregion
2615
- //#region src/components/fields/RichTextField.tsx
2616
- function Hn(e) {
2617
- let { field: t, entityCode: n, fieldName: r, value: i, mode: a, onChange: o, record: s, compact: c, fieldId: l, t: u } = e, d = E("errors"), f = R(null), p = R(null), m = R(/* @__PURE__ */ new Map()), h = R(/* @__PURE__ */ new Set()), [g, _] = z(0), [v, y] = z(null), { register: b, unregister: x } = Vn(), S = s?.$files?.[r], C = L(() => pn(i, S), [S, i]), w = C.markdown, ee = t.files?.accepts, T = t.files?.max_size_bytes, D = (e, t = C.files) => {
2618
- let n = new Set(_n(e)), r = [];
2619
- for (let e of h.current) n.has(e) || r.push(e);
2620
- if (r.length > 0) {
2621
- for (let e of r) {
2622
- h.current.delete(e), x(e), jn(e).catch(() => {});
2623
- let t = m.current.get(e);
2624
- t && (URL.revokeObjectURL(t), m.current.delete(e));
2625
- }
2626
- o?.(hn({
2627
- markdown: e,
2628
- files: t
2629
- }, r));
2630
- } else o?.({
2631
- markdown: e,
2632
- files: t
2633
- });
2634
- }, te = (e, t, n) => {
2635
- let r = f.current, i = r?.selectionStart ?? e.markdown.length, a = r?.selectionEnd ?? e.markdown.length, o = `${e.markdown.slice(0, i)}${t}${e.markdown.slice(a)}`, s = n ? mn(e, n).files : e.files;
2636
- D(o, s), requestAnimationFrame(() => {
2637
- if (!r) return;
2638
- let e = i + t.length;
2639
- r.focus(), r.setSelectionRange(e, e);
2640
- });
2641
- }, k = async (e) => {
2642
- if (!n || !t.files) return;
2643
- let i = Array.from(e);
2644
- if (i.length === 0) return;
2645
- y(null), _((e) => e + i.length);
2646
- let a = {
2647
- markdown: w,
2648
- files: C.files
2649
- };
2650
- for (let e of i) {
2651
- let t = Pn(e, ee, T);
2652
- if (t) y(Fn(u, d, t).message), _((e) => e - 1);
2653
- else try {
2654
- let t = await Sn({
2655
- file: e,
2656
- entityCode: n,
2657
- fieldCode: r
2658
- }), o = e.type.startsWith("image/") ? URL.createObjectURL(e) : void 0;
2659
- o && m.current.set(t.id, o);
2660
- let s = Wn(t, o);
2661
- if (b(t.id, () => jn(t.id)), h.current.add(t.id), i.length === 1) {
2662
- let e = Un(a.markdown, yn(s));
2663
- te(a, e, s), a = mn({
2664
- markdown: `${a.markdown}${e}`,
2665
- files: a.files
2666
- }, s);
2667
- } else {
2668
- let e = Un(a.markdown, yn(s));
2669
- a = mn({
2670
- markdown: `${a.markdown}${e}`,
2671
- files: a.files
2672
- }, s), D(a.markdown, a.files);
2673
- }
2674
- } catch (e) {
2675
- y(xn(u, d, e).message);
2676
- } finally {
2677
- _((e) => e - 1);
2678
- }
2679
- }
2680
- };
2681
- return a === "display" ? w ? /* @__PURE__ */ V(X, {
2682
- content: w,
2683
- files: C.files
2684
- }) : /* @__PURE__ */ V("span", {
2685
- style: {
2686
- fontSize: 12.5,
2687
- color: "var(--text-4)"
2688
- },
2689
- children: "—"
2690
- }) : c ? /* @__PURE__ */ V(G, {
2691
- id: l,
2692
- name: r,
2693
- "aria-required": t.required || void 0,
2694
- value: w,
2695
- onChange: (e) => D(e)
2696
- }) : /* @__PURE__ */ H("div", {
2697
- style: {
2698
- display: "flex",
2699
- flexDirection: "column",
2700
- gap: 10
2701
- },
2702
- children: [
2703
- /* @__PURE__ */ H("div", {
2704
- style: {
2705
- display: "flex",
2706
- alignItems: "center",
2707
- gap: 8,
2708
- flexWrap: "wrap"
2709
- },
2710
- children: [
2711
- /* @__PURE__ */ V(A, {
2712
- kind: "ghost",
2713
- size: "xs",
2714
- icon: V(g > 0 ? xe : O.plus, { size: 12 }),
2715
- onClick: () => p.current?.click(),
2716
- disabled: !n || !t.files || g > 0,
2717
- children: g > 0 ? u("field.rich_text.uploading", "Uploading…") : u("field.rich_text.insert_file", "Insert file")
2718
- }),
2719
- /* @__PURE__ */ V("span", {
2720
- style: {
2721
- fontSize: 11.5,
2722
- color: "var(--text-3)"
2723
- },
2724
- children: u("field.rich_text.hint", "Stores markdown with inline {reference} refs.", { reference: "declarion://file/<id>" })
2725
- }),
2726
- !n && /* @__PURE__ */ V("span", {
2727
- style: {
2728
- fontSize: 11.5,
2729
- color: "var(--warn)"
2730
- },
2731
- children: u("field.rich_text.needs_entity", "Inline uploads need entity context.")
2732
- })
2733
- ]
2734
- }),
2735
- /* @__PURE__ */ V("input", {
2736
- ref: p,
2737
- type: "file",
2738
- hidden: !0,
2739
- accept: ee?.join(","),
2740
- multiple: !0,
2741
- onChange: (e) => {
2742
- e.target.files && k(e.target.files), e.target.value = "";
2743
- }
2744
- }),
2745
- /* @__PURE__ */ V("textarea", {
2746
- ref: f,
2747
- id: l,
2748
- name: r,
2749
- "aria-required": t.required || void 0,
2750
- value: w,
2751
- onChange: (e) => D(e.target.value),
2752
- onPaste: (e) => {
2753
- let t = Array.from(e.clipboardData.files ?? []).filter((e) => e.size > 0);
2754
- t.length !== 0 && (e.preventDefault(), k(t));
2755
- },
2756
- onDrop: (e) => {
2757
- let t = Array.from(e.dataTransfer.files ?? []).filter((e) => e.size > 0);
2758
- t.length !== 0 && (e.preventDefault(), k(t));
2759
- },
2760
- onDragOver: (e) => e.preventDefault(),
2761
- rows: 12,
2762
- style: {
2763
- width: "100%",
2764
- minHeight: 220,
2765
- border: "1px solid var(--border)",
2766
- borderRadius: 8,
2767
- padding: "10px 12px",
2768
- fontSize: "var(--control-font-size)",
2769
- lineHeight: 1.5,
2770
- fontFamily: "inherit",
2771
- resize: "vertical",
2772
- background: "var(--surface)",
2773
- color: "var(--text)"
2774
- }
2775
- }),
2776
- v && /* @__PURE__ */ V("div", {
2777
- style: {
2778
- fontSize: 12,
2779
- color: "var(--danger)"
2780
- },
2781
- children: v
2782
- }),
2783
- /* @__PURE__ */ H("div", {
2784
- style: {
2785
- border: "1px solid var(--border)",
2786
- borderRadius: 8,
2787
- padding: 12,
2788
- background: "var(--surface-2)"
2789
- },
2790
- children: [/* @__PURE__ */ V("div", {
2791
- style: {
2792
- fontSize: 11.5,
2793
- color: "var(--text-3)",
2794
- marginBottom: 8
2795
- },
2796
- children: u("field.rich_text.preview", "Preview")
2797
- }), w ? /* @__PURE__ */ V(X, {
2798
- content: w,
2799
- files: C.files
2800
- }) : /* @__PURE__ */ V("span", {
2801
- style: {
2802
- fontSize: 12.5,
2803
- color: "var(--text-4)"
2804
- },
2805
- children: u("field.rich_text.empty", "Empty")
2806
- })]
2807
- })
2808
- ]
2809
- });
2810
- }
2811
- function Un(e, t) {
2812
- return e ? e.endsWith("\n\n") ? t : e.endsWith("\n") ? `\n${t}` : `\n\n${t}` : `${t}\n`;
2813
- }
2814
- function Wn(e, t) {
2815
- return {
2816
- id: e.id,
2817
- filename: e.filename,
2818
- content_type: e.content_type,
2819
- size_bytes: e.size_bytes,
2820
- sha256: e.sha256,
2821
- width: e.width,
2822
- height: e.height,
2823
- metadata: e.metadata,
2824
- url: t
2825
- };
2826
- }
2827
- //#endregion
2828
- //#region src/components/fields/FileReferenceField.tsx
2829
- function Gn({ entityCode: e, pkValues: t, fieldCode: n, t: r }) {
2830
- let i = E("errors"), [a, o] = z(!1), [s, l] = z(null);
2831
- async function u() {
2832
- if (e && t && !a) {
2833
- o(!0), l(null);
2834
- try {
2835
- let r = await _t(e, t, n);
2836
- ee(r.blob, r.filename || `${e}-${n}.bin`);
2837
- } catch (e) {
2838
- l(c(i, e));
2839
- } finally {
2840
- o(!1);
2841
- }
2842
- }
2843
- }
2844
- return /* @__PURE__ */ H("span", {
2845
- style: {
2846
- display: "inline-flex",
2847
- flexDirection: "column",
2848
- alignItems: "flex-start",
2849
- gap: 4,
2850
- minWidth: 0
2851
- },
2852
- children: [/* @__PURE__ */ V(A, {
2853
- kind: "ghost",
2854
- size: "xs",
2855
- disabled: a || !e || !t,
2856
- onClick: u,
2857
- children: r("file.download", "Download")
2858
- }), s && /* @__PURE__ */ V("span", {
2859
- role: "alert",
2860
- style: {
2861
- color: "var(--danger)",
2862
- whiteSpace: "normal"
2863
- },
2864
- children: s
2865
- })]
2866
- });
2867
- }
2868
- function Kn({ value: e, entityCode: t, entity: n, record: r, fieldName: i, t: a }) {
2869
- if (typeof e != "string" || e === "") return /* @__PURE__ */ V("span", { children: "—" });
2870
- let o = n && r ? m(n, r) : void 0, s = o && Object.values(o).every(Boolean) ? o : void 0;
2871
- return /* @__PURE__ */ V(Gn, {
2872
- entityCode: t,
2873
- pkValues: s,
2874
- fieldCode: i,
2875
- t: a
2876
- });
2877
- }
2878
- //#endregion
2879
- //#region src/components/fields/cells/factories/text.ts
2880
- var qn = () => (e) => e == null || e === "" ? "—" : T(e), Jn = (e) => {
2881
- let { field: t, t: n } = e, r = t.display?.bool_labels, i = r ? n(r.true) : n("field.bool.yes", "Yes"), a = r ? n(r.false) : n("field.bool.no", "No");
2882
- return (e) => {
2883
- if (e == null) return "—";
2884
- let t = !!e;
2885
- return /* @__PURE__ */ V(M, {
2886
- tone: t ? "emerald" : "slate",
2887
- size: "xs",
2888
- children: t ? i : a
2889
- });
2890
- };
2891
- }, Yn = /* @__PURE__ */ new Set([
2892
- "indigo",
2893
- "emerald",
2894
- "amber",
2895
- "rose",
2896
- "sky",
2897
- "violet",
2898
- "slate",
2899
- "teal"
2900
- ]);
2901
- function Xn(e) {
2902
- return e && Yn.has(e) ? e : "slate";
2903
- }
2904
- var Zn = (e) => {
2905
- let { field: t, t: n } = e, r = /* @__PURE__ */ new Map();
2906
- if (t.values) for (let e of t.values) r.set(e.code, {
2907
- tone: Xn(e.color),
2908
- label: n(e.name) || e.code
2909
- });
2910
- if (t.display?.value_map) for (let [e, i] of Object.entries(t.display.value_map)) {
2911
- let t = r.get(e), a = i.color ? Xn(i.color) : t?.tone ?? "slate", o = (i.label ? n(i.label) : "") || t?.label || e;
2912
- r.set(e, {
2913
- tone: a,
2914
- label: o
2915
- });
2916
- }
2917
- return (e) => {
2918
- if (e == null || e === "") return "—";
2919
- let t = T(e), n = r.get(t);
2920
- return /* @__PURE__ */ V(M, {
2921
- tone: n?.tone ?? "slate",
2922
- size: "xs",
2923
- children: n?.label ?? t
2924
- });
2925
- };
2926
- }, Qn = /* @__PURE__ */ new Set([
2927
- "indigo",
2928
- "emerald",
2929
- "amber",
2930
- "rose",
2931
- "sky",
2932
- "violet",
2933
- "slate",
2934
- "teal"
2935
- ]);
2936
- function $n(e) {
2937
- return e && Qn.has(e) ? e : "slate";
2938
- }
2939
- var er = (e) => {
2940
- let { entity: t, t: n } = e, r = /* @__PURE__ */ new Map();
2941
- if (t?.status_groups) for (let e of Object.values(t.status_groups)) for (let t of e.statuses) r.set(t.code, {
2942
- tone: $n(t.color),
2943
- label: n(t.name) || t.code
2944
- });
2945
- return (e) => {
2946
- if (e == null || e === "") return "—";
2947
- let t = T(e), n = r.get(t);
2948
- return /* @__PURE__ */ V(M, {
2949
- tone: n?.tone ?? "slate",
2950
- size: "xs",
2951
- children: n?.label ?? t
2952
- });
2953
- };
2954
- }, tr = /* @__PURE__ */ new Set([
2955
- "indigo",
2956
- "emerald",
2957
- "amber",
2958
- "rose",
2959
- "sky",
2960
- "violet",
2961
- "slate",
2962
- "teal"
2963
- ]);
2964
- function nr(e) {
2965
- return e && tr.has(e) ? e : null;
2966
- }
2967
- var rr = (e) => {
2968
- let { field: t, t: n } = e, r = /* @__PURE__ */ new Map();
2969
- if (t.display?.value_map) for (let [e, i] of Object.entries(t.display.value_map)) r.set(e, {
2970
- label: i.label && n(i.label) || e,
2971
- tone: nr(i.color)
2972
- });
2973
- let i = t.type === "multilang_array";
2974
- return (e) => !Array.isArray(e) || e.length === 0 ? "—" : /* @__PURE__ */ V("span", {
2975
- style: {
2976
- display: "inline-flex",
2977
- gap: 4,
2978
- flexWrap: "wrap"
2979
- },
2980
- children: e.map((e, t) => {
2981
- if (i) return /* @__PURE__ */ V(U, { children: n(Yt(e)) || "—" }, t);
2982
- let a = String(e), o = r.get(a);
2983
- return o?.tone ? /* @__PURE__ */ V(M, {
2984
- tone: o.tone,
2985
- size: "xs",
2986
- children: o.label
2987
- }, `${a}-${t}`) : /* @__PURE__ */ V(U, { children: o?.label ?? a }, `${a}-${t}`);
2988
- })
2989
- });
2990
- }, ir = () => (e) => {
2991
- if (e == null || e === "") return "—";
2992
- let t = typeof e == "string" ? e : T(e), n = /^(\d{4})-(\d{2})-(\d{2})/.exec(t);
2993
- if (!n) return t;
2994
- let [, r, i, a] = n;
2995
- return `${a}-${i}-${r}`;
2996
- }, ar = ({ t: e }) => (t) => {
2997
- if (t == null || t === "") return "—";
2998
- let n = typeof t == "string" ? t : T(t), { text: r, absolute: i } = l(e.language, n);
2999
- return /* @__PURE__ */ V("span", {
3000
- title: i,
3001
- children: r
3002
- });
3003
- }, or = () => (e) => {
3004
- if (e == null || e === "") return "—";
3005
- let t = typeof e == "string" ? e : T(e);
3006
- return D(t);
3007
- }, sr = 6e4, cr = 3e5, lr = 1440, ur = 43200, dr = 525600;
3008
- function fr(e, t) {
3009
- let n = Math.abs(e) / 6e4, r, i;
3010
- return n < 1 ? [r, i] = ["second", Math.round(Math.abs(e) / 1e3)] : n < 60 ? [r, i] = ["minute", Math.round(n)] : n < lr ? [r, i] = ["hour", Math.round(n / 60)] : n < ur ? [r, i] = ["day", Math.round(n / lr)] : n < dr ? [r, i] = ["month", Math.round(n / ur)] : [r, i] = ["year", Math.round(n / dr)], r === "month" && i === 12 && ([r, i] = ["year", 1]), new Intl.NumberFormat(t, {
3011
- style: "unit",
3012
- unit: r,
3013
- unitDisplay: "long"
3014
- }).format(i);
3015
- }
3016
- var pr = ({ t: e }) => (t) => {
3017
- if (t == null || t === "") return "—";
3018
- let n = typeof t == "string" ? t : T(t), r = new Date(n);
3019
- if (isNaN(r.getTime())) return n;
3020
- let i = D(n), a = Date.now() - r.getTime();
3021
- if (a <= 0) {
3022
- let t = fr(a, e.language);
3023
- return /* @__PURE__ */ V("span", {
3024
- title: i,
3025
- children: e("field.next_run.in", "in {distance}", { distance: t })
3026
- });
3027
- }
3028
- if (a <= sr) return /* @__PURE__ */ V("span", {
3029
- title: i,
3030
- children: /* @__PURE__ */ V(M, {
3031
- tone: "slate",
3032
- size: "xs",
3033
- children: e("field.next_run.due", "due")
3034
- })
3035
- });
3036
- let o = fr(a, e.language);
3037
- return /* @__PURE__ */ V("span", {
3038
- title: i,
3039
- children: /* @__PURE__ */ V(M, {
3040
- tone: a <= cr ? "amber" : "rose",
3041
- size: "xs",
3042
- children: e("field.next_run.overdue", "overdue {distance}", { distance: o })
3043
- })
3044
- });
3045
- }, mr = (e) => {
3046
- let { field: t, t: n } = e, r = t.display?.currency || "USD", i = t.display?.currency_field, a = hr(t.display?.currency_display), o = gr(typeof t.scale == "number" ? t.scale : 2, 0, 6), s = /* @__PURE__ */ new Map();
3047
- return (e, t = {}) => {
3048
- if (e == null || e === "") return "—";
3049
- let c = typeof e == "number" ? e : Number(e);
3050
- if (!Number.isFinite(c)) return T(e);
3051
- let l = i ? t[i] : void 0, u = typeof l == "string" && l !== "" ? l : r, d = `${n.language}:${u}:${a}:${o}`, f = s.get(d);
3052
- return f || (f = new Intl.NumberFormat(n.language, {
3053
- style: "currency",
3054
- currency: u,
3055
- currencyDisplay: a,
3056
- minimumFractionDigits: o,
3057
- maximumFractionDigits: o
3058
- }), s.set(d, f)), f.format(c);
3059
- };
3060
- };
3061
- function hr(e) {
3062
- switch (e) {
3063
- case "narrow_symbol": return "narrowSymbol";
3064
- case "code":
3065
- case "name":
3066
- case "symbol": return e;
3067
- default: return "symbol";
3068
- }
3069
- }
3070
- function gr(e, t, n) {
3071
- return e < t ? t : e > n ? n : e;
3072
- }
3073
- //#endregion
3074
- //#region src/components/fields/cells/factories/refLink.tsx
3075
- var _r = (e) => {
3076
- let { field: t, entities: n, screens: r, refs: i, surface: a, detailScreen: o } = e, s = t.ref?.entity, c = s ? n?.[s] : void 0, l = typeof i == "function" ? i : () => i, u = a === "detail", d = c?.display?.icon, f = t.display?.ref_display_field || "$display", p = o || c?.detail_screen, m = (p ? r?.[p] : void 0)?.route, h = c ? g(c)[0] ?? "id" : "id";
3077
- return (t, n) => {
3078
- if (t == null || t === "") return "—";
3079
- let r = T(t), i = vr(e.t, r, s, l(), f), a = s ? l()?.[s]?.[r] : void 0, o = a?.[h] == null ? r : T(a[h]), c = m ? m.replace(":id", encodeURIComponent(o)) : void 0;
3080
- if (u) {
3081
- let e = /* @__PURE__ */ H(B, { children: [d && /* @__PURE__ */ V("span", {
3082
- style: {
3083
- color: "var(--text-3)",
3084
- display: "flex",
3085
- flexShrink: 0
3086
- },
3087
- children: /* @__PURE__ */ V(ne, {
3088
- name: d,
3089
- size: 13
3090
- })
3091
- }), /* @__PURE__ */ V("span", {
3092
- style: {
3093
- overflow: "hidden",
3094
- textOverflow: "ellipsis",
3095
- whiteSpace: "nowrap"
3096
- },
3097
- children: i
3098
- })] });
3099
- return c ? /* @__PURE__ */ V("a", {
3100
- href: c,
3101
- rel: "noopener noreferrer",
3102
- className: "detail-ref-chip",
3103
- children: e
3104
- }) : /* @__PURE__ */ V("span", {
3105
- className: "detail-ref-chip",
3106
- children: e
3107
- });
3108
- }
3109
- return c ? /* @__PURE__ */ V("a", {
3110
- href: c,
3111
- rel: "noopener noreferrer",
3112
- style: {
3113
- color: "inherit",
3114
- textDecoration: "underline",
3115
- textUnderlineOffset: 2
3116
- },
3117
- children: i
3118
- }) : i;
3119
- };
3120
- };
3121
- function vr(e, t, n, r, i) {
3122
- let a = n && r ? r[n]?.[t] : void 0;
3123
- return a ? p(e, a, i, t) : t;
3124
- }
3125
- //#endregion
3126
- //#region src/components/fields/cells/factories/url-helpers.ts
3127
- var yr = /^(https?|ftps?|ssh|mailto|tel):/i, br = /^(info|name|tech|site|cloud|online|store|shop|blog|space|world|link|live|page|zone|life|team|work|host|land|news|wiki|mobi|coop|aero|asia)$/i;
3128
- function xr(e) {
3129
- return /^[a-z]{2,3}$/i.test(e) || br.test(e);
3130
- }
3131
- function Sr(e) {
3132
- if (!e.includes(".")) return !1;
3133
- let t = e.split(".");
3134
- if (t.length < 3) return !0;
3135
- let n = t[0].toLowerCase();
3136
- return /^(com|org|net|edu|gov)$/.test(n) ? !1 : !/^(io|app|dev)$/.test(n) || xr(t[t.length - 1]);
3137
- }
3138
- function Cr(e) {
3139
- if (yr.test(e)) return e;
3140
- let t = e.match(/^([a-z][a-z0-9+.-]*):/i);
3141
- if (t) {
3142
- let n = t[1], r = e.slice(t[0].length);
3143
- if (/^\d+([/?#]|$)/.test(r) && Sr(n)) {
3144
- let t = parseInt(r, 10);
3145
- if (t >= 1 && t <= 65535) return `https://${e}`;
3146
- }
3147
- return n.toLowerCase() === "localhost" ? `https://${e}` : null;
3148
- }
3149
- return `https://${e}`;
3150
- }
3151
- function wr(e) {
3152
- try {
3153
- return new URL(e).hostname.replace(/^www\./i, "") || null;
3154
- } catch {
3155
- return null;
3156
- }
3157
- }
3158
- function Tr(e, t) {
3159
- if (t !== "linkedin.com") return null;
3160
- try {
3161
- let t = new URL(e).pathname.match(/^\/(in|company|school)\/([^/]+)/i);
3162
- if (t) return `${t[1].toLowerCase()}/${decodeURIComponent(t[2])}`;
3163
- } catch {}
3164
- return null;
3165
- }
3166
- function Er(e) {
3167
- try {
3168
- return new URL(e), !0;
3169
- } catch {
3170
- return !1;
3171
- }
3172
- }
3173
- //#endregion
3174
- //#region src/components/fields/cells/factories/host-icons.tsx
3175
- function Dr(e, t = "0 0 24 24") {
3176
- return (n) => /* @__PURE__ */ V("svg", {
3177
- width: 16,
3178
- height: 16,
3179
- viewBox: t,
3180
- fill: "none",
3181
- stroke: "currentColor",
3182
- strokeWidth: 1.5,
3183
- strokeLinecap: "round",
3184
- strokeLinejoin: "round",
3185
- "aria-hidden": "true",
3186
- style: { flexShrink: 0 },
3187
- ...n,
3188
- children: e
3189
- });
3190
- }
3191
- var Or = Dr(/* @__PURE__ */ H(B, { children: [/* @__PURE__ */ V("circle", {
3192
- cx: "12",
3193
- cy: "12",
3194
- r: "9"
3195
- }), /* @__PURE__ */ V("path", { d: "M3 12h18M12 3c3 3 3 15 0 18-3-3-3-15 0-18" })] })), kr = () => /* @__PURE__ */ V(te, {
3196
- size: 16,
3197
- style: {
3198
- flexShrink: 0,
3199
- color: "#0A66C2"
3200
- }
3201
- }), Ar = (e) => /* @__PURE__ */ V("svg", {
3202
- width: 16,
3203
- height: 16,
3204
- viewBox: "0 0 24 24",
3205
- fill: "currentColor",
3206
- "aria-hidden": "true",
3207
- style: { flexShrink: 0 },
3208
- ...e,
3209
- children: /* @__PURE__ */ V("path", { d: "M12 .5a11.5 11.5 0 0 0-3.64 22.41c.58.1.79-.25.79-.56 0-.27-.01-1-.02-1.96-3.21.7-3.89-1.55-3.89-1.55-.52-1.34-1.28-1.7-1.28-1.7-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.2 1.77 1.2 1.03 1.77 2.71 1.26 3.37.96.1-.75.4-1.26.73-1.55-2.56-.29-5.26-1.28-5.26-5.71 0-1.26.45-2.3 1.19-3.11-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.19a11.05 11.05 0 0 1 5.79 0c2.21-1.5 3.18-1.19 3.18-1.19.63 1.59.23 2.76.11 3.05.74.81 1.19 1.85 1.19 3.11 0 4.44-2.71 5.42-5.29 5.7.41.36.78 1.07.78 2.16 0 1.56-.01 2.81-.01 3.19 0 .31.21.68.8.56A11.5 11.5 0 0 0 12 .5z" })
3210
- }), jr = (e) => /* @__PURE__ */ V("svg", {
3211
- width: 16,
3212
- height: 16,
3213
- viewBox: "0 0 24 24",
3214
- fill: "currentColor",
3215
- "aria-hidden": "true",
3216
- style: { flexShrink: 0 },
3217
- ...e,
3218
- children: /* @__PURE__ */ V("path", { d: "M18.244 2H21.5l-7.62 8.71L23 22h-7.05l-5.52-7.21L4.07 22H.81l8.18-9.34L1 2h7.22l5 6.59L18.244 2zm-2.47 18h1.95L7.32 4h-2.1l10.55 16z" })
3219
- }), Mr = (e) => /* @__PURE__ */ V("svg", {
3220
- width: 16,
3221
- height: 16,
3222
- viewBox: "0 0 24 24",
3223
- fill: "#FF0000",
3224
- "aria-hidden": "true",
3225
- style: { flexShrink: 0 },
3226
- ...e,
3227
- children: /* @__PURE__ */ V("path", { d: "M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.6 12 3.6 12 3.6s-7.5 0-9.4.5A3 3 0 0 0 .5 6.2C0 8.1 0 12 0 12s0 3.9.5 5.8a3 3 0 0 0 2.1 2.1c1.9.5 9.4.5 9.4.5s7.5 0 9.4-.5a3 3 0 0 0 2.1-2.1c.5-1.9.5-5.8.5-5.8s0-3.9-.5-5.8zM9.6 15.6V8.4l6.2 3.6-6.2 3.6z" })
3228
- }), Nr = (e) => /* @__PURE__ */ V("svg", {
3229
- width: 16,
3230
- height: 16,
3231
- viewBox: "0 0 24 24",
3232
- fill: "#EA4335",
3233
- "aria-hidden": "true",
3234
- style: { flexShrink: 0 },
3235
- ...e,
3236
- children: /* @__PURE__ */ V("path", { d: "M24 5.45v13.1A1.45 1.45 0 0 1 22.55 20H19.5V9.27L12 14.7 4.5 9.27V20H1.45A1.45 1.45 0 0 1 0 18.55V5.45A1.45 1.45 0 0 1 1.45 4h.5l10.05 7.27L22.05 4h.5A1.45 1.45 0 0 1 24 5.45z" })
3237
- }), Pr = (e) => /* @__PURE__ */ H("svg", {
3238
- width: 16,
3239
- height: 16,
3240
- viewBox: "0 0 24 24",
3241
- "aria-hidden": "true",
3242
- style: { flexShrink: 0 },
3243
- ...e,
3244
- children: [
3245
- /* @__PURE__ */ V("path", {
3246
- fill: "#E01E5A",
3247
- d: "M5.04 15.12a2.52 2.52 0 1 1-2.52-2.52h2.52v2.52zm1.27 0a2.52 2.52 0 1 1 5.04 0v6.32a2.52 2.52 0 1 1-5.04 0v-6.32z"
3248
- }),
3249
- /* @__PURE__ */ V("path", {
3250
- fill: "#36C5F0",
3251
- d: "M8.83 5.04a2.52 2.52 0 1 1 2.52-2.52v2.52H8.83zm0 1.27a2.52 2.52 0 1 1 0 5.04H2.52a2.52 2.52 0 1 1 0-5.04h6.31z"
3252
- }),
3253
- /* @__PURE__ */ V("path", {
3254
- fill: "#2EB67D",
3255
- d: "M18.96 8.83a2.52 2.52 0 1 1 2.52 2.52h-2.52V8.83zm-1.27 0a2.52 2.52 0 1 1-5.04 0V2.52a2.52 2.52 0 1 1 5.04 0v6.31z"
3256
- }),
3257
- /* @__PURE__ */ V("path", {
3258
- fill: "#ECB22E",
3259
- d: "M15.17 18.96a2.52 2.52 0 1 1-2.52 2.52v-2.52h2.52zm0-1.27a2.52 2.52 0 1 1 0-5.04h6.31a2.52 2.52 0 1 1 0 5.04h-6.31z"
3260
- })
3261
- ]
3262
- }), Fr = (e) => /* @__PURE__ */ V("svg", {
3263
- width: 16,
3264
- height: 16,
3265
- viewBox: "0 0 24 24",
3266
- fill: "currentColor",
3267
- "aria-hidden": "true",
3268
- style: { flexShrink: 0 },
3269
- ...e,
3270
- children: /* @__PURE__ */ V("path", { d: "M4.46 3.83 14.94 3a3.7 3.7 0 0 1 2.5.62l3 2.16a1.4 1.4 0 0 1 .56 1.31v13.06a1.7 1.7 0 0 1-1.66 1.7l-12.5.78a2.4 2.4 0 0 1-1.85-.62L2.5 19.7a1.7 1.7 0 0 1-.5-1.2V5.16c0-.74.6-1.27 1.46-1.33l1-.01zm.46 1.86c-.31 0-.46.16-.46.47v12.25c0 .31.16.47.46.47l11.62-.7c.31 0 .46-.16.46-.47V6c0-.32-.16-.47-.46-.47L4.92 5.7zm5.57 2.32c.16 0 .31.16.31.31v.46l3.7.23c.31 0 .46.16.46.47v8.32c0 .31-.16.47-.46.47l-3.7.23c-.31 0-.46-.16-.46-.47V8.78c0-.16.15-.32.15-.46l-.04-.31z" })
3271
- }), Ir = {
3272
- "linkedin.com": kr,
3273
- "github.com": Ar,
3274
- "x.com": jr,
3275
- "twitter.com": jr,
3276
- "youtube.com": Mr,
3277
- "youtu.be": Mr,
3278
- "gmail.com": Nr,
3279
- "mail.google.com": Nr,
3280
- "slack.com": Pr,
3281
- "notion.so": Fr,
3282
- "notion.com": Fr
3283
- };
3284
- function Lr(e, t) {
3285
- return !e || t === "none" ? null : t === "google" ? `https://www.google.com/s2/favicons?domain=${encodeURIComponent(e)}&sz=32` : `https://${e}/favicon.ico`;
3286
- }
3287
- var Rr = {
3288
- width: 16,
3289
- height: 16,
3290
- flexShrink: 0,
3291
- objectFit: "contain"
3292
- };
3293
- function zr({ domain: e, source: t }) {
3294
- let n = e ? e.toLowerCase() : "", r = n ? Ir[n] : void 0;
3295
- if (r) return /* @__PURE__ */ V(r, {});
3296
- let i = Lr(n, t);
3297
- return i ? /* @__PURE__ */ V(Br, { src: i }) : /* @__PURE__ */ V(Or, {});
3298
- }
3299
- function Br({ src: e }) {
3300
- let [t, n] = z(!1);
3301
- return oe(() => {
3302
- n(!1);
3303
- }, [e]), t ? /* @__PURE__ */ V(Or, {}) : /* @__PURE__ */ V("img", {
3304
- src: e,
3305
- alt: "",
3306
- width: 16,
3307
- height: 16,
3308
- loading: "lazy",
3309
- decoding: "async",
3310
- referrerPolicy: "no-referrer",
3311
- style: Rr,
3312
- onError: () => n(!0)
3313
- });
3314
- }
3315
- var Q = /* @__PURE__ */ V("span", {
3316
- style: {
3317
- fontSize: 12.5,
3318
- color: "var(--text-4)"
3319
- },
3320
- children: "—"
3321
- }), Vr = {
3322
- display: "inline-flex",
3323
- alignItems: "center",
3324
- gap: 4,
3325
- fontSize: 12.5,
3326
- color: "var(--accent)",
3327
- textDecoration: "none"
3328
- }, Hr = { fontSize: 12.5 }, Ur = (e) => {
3329
- let t = e.field.display?.favicon_source ?? "google";
3330
- return (e) => {
3331
- let n = e == null ? "" : T(e);
3332
- if (!n) return Q;
3333
- let r = Cr(n);
3334
- if (r == null || !Er(r)) return /* @__PURE__ */ V("span", {
3335
- style: Hr,
3336
- children: n
3337
- });
3338
- let i = wr(r), a = Tr(r, i ?? "") ?? i ?? n;
3339
- return /* @__PURE__ */ H("a", {
3340
- href: r,
3341
- target: "_blank",
3342
- rel: "noopener noreferrer",
3343
- title: n,
3344
- className: "mono",
3345
- style: Vr,
3346
- children: [
3347
- /* @__PURE__ */ V(zr, {
3348
- domain: i,
3349
- source: t
3350
- }),
3351
- a,
3352
- /* @__PURE__ */ V(O.external, { size: 11 })
3353
- ]
3354
- });
3355
- };
3356
- }, Wr = {
3357
- display: "inline-block",
3358
- maxWidth: "100%",
3359
- verticalAlign: "top",
3360
- overflow: "hidden",
3361
- textOverflow: "ellipsis",
3362
- whiteSpace: "nowrap",
3363
- fontSize: 12.5,
3364
- color: "var(--accent)",
3365
- textDecoration: "none"
3366
- }, Gr = () => (e) => {
3367
- let t = e == null ? "" : T(e);
3368
- return t ? /* @__PURE__ */ V("a", {
3369
- href: `mailto:${t}`,
3370
- title: t,
3371
- className: "mono",
3372
- style: Wr,
3373
- children: t
3374
- }) : Q;
3375
- }, Kr = {
3376
- fontSize: 12.5,
3377
- color: "var(--accent)",
3378
- textDecoration: "none"
3379
- }, qr = { fontSize: 12.5 }, Jr = /^[+()\-.\s\d]+$/, Yr = () => (e) => {
3380
- let t = e == null ? "" : T(e);
3381
- if (!t) return Q;
3382
- let n = t.trim();
3383
- if (!Jr.test(n)) return /* @__PURE__ */ V("span", {
3384
- style: qr,
3385
- children: t
3386
- });
3387
- let r = n.replace(/\s+/g, "");
3388
- return /* @__PURE__ */ V("a", {
3389
- href: `tel:${r}`,
3390
- className: "mono",
3391
- style: Kr,
3392
- children: t
3393
- });
3394
- }, Xr = {
3395
- fontSize: 12.5,
3396
- fontVariantNumeric: "tabular-nums"
3397
- }, Zr = {
3398
- color: "var(--text-3)",
3399
- marginLeft: 4
3400
- }, Qr = { fontSize: 12.5 }, $r = (e) => {
3401
- let { field: t, fieldName: n, t: r } = e, i = new Intl.NumberFormat(r.language), a = t.type === "decimal", o = t.unit ? t.unit.display || t.unit.storage : void 0;
3402
- return (e, t) => {
3403
- if (e == null) return Q;
3404
- let r = t.$units?.[n] || (o && !o.startsWith("$") ? o : void 0), s;
3405
- if (a && typeof e == "string") s = Rt(e, i);
3406
- else {
3407
- let t = typeof e == "number" ? e : Number(e);
3408
- s = Number.isFinite(t) ? i.format(t) : null;
3409
- }
3410
- return s == null ? /* @__PURE__ */ V("span", {
3411
- style: Qr,
3412
- children: "—"
3413
- }) : /* @__PURE__ */ H("span", {
3414
- className: "num",
3415
- style: Xr,
3416
- children: [s, r && /* @__PURE__ */ V("span", {
3417
- style: Zr,
3418
- children: r
3419
- })]
3420
- });
3421
- };
3422
- }, ei = { fontSize: 12.5 }, ti = () => (e) => e == null || e === "" ? Q : /* @__PURE__ */ V("code", {
3423
- className: "mono",
3424
- style: ei,
3425
- children: T(e)
3426
- }), ni = {
3427
- display: "inline-flex",
3428
- alignItems: "center",
3429
- gap: 4,
3430
- fontSize: 12.5,
3431
- color: "var(--accent)",
3432
- textDecoration: "none"
3433
- }, ri = { fontSize: 12.5 }, ii = () => (e) => {
3434
- let t = e == null ? "" : T(e);
3435
- if (!t) return Q;
3436
- let n = Cr(t);
3437
- return n == null || !Er(n) ? /* @__PURE__ */ V("span", {
3438
- style: ri,
3439
- children: t
3440
- }) : /* @__PURE__ */ H("a", {
3441
- href: n,
3442
- target: "_blank",
3443
- rel: "noopener noreferrer",
3444
- title: t,
3445
- className: "mono",
3446
- style: ni,
3447
- children: [t, /* @__PURE__ */ V(O.external, { size: 11 })]
3448
- });
3449
- }, ai = 400, oi = 2e3;
3450
- function si(e) {
3451
- return Math.max(1, Math.min(typeof e == "number" && Number.isFinite(e) ? Math.floor(e) : ai, oi));
3452
- }
3453
- function ci(e, t) {
3454
- return e.length <= t ? e : `${e.slice(0, t)}...`;
3455
- }
3456
- function li(e, t, n, r = 0) {
3457
- if (e == null || e === "") return "";
3458
- if (typeof e == "string") return ci(e, t);
3459
- if (typeof e == "number" || typeof e == "boolean") return String(e);
3460
- if (typeof e != "object") return ci(T(e), t);
3461
- if (n.has(e)) return "[Circular]";
3462
- if (r >= 3) return Array.isArray(e) ? "[...]" : "{...}";
3463
- n.add(e);
3464
- let i = Array.isArray(e) ? "]" : "}", a = [Array.isArray(e) ? "[" : "{"], o = Array.isArray(e) ? e.map((e, t) => [String(t), e]) : Object.entries(e);
3465
- for (let [s, c] of o) {
3466
- let o = a.join(""), l = a.length > 1 ? "," : "", u = Array.isArray(e) ? l : `${l}${JSON.stringify(s)}:`, d = t - o.length - u.length - i.length;
3467
- if (d <= 0) {
3468
- a.push(a.length > 1 ? ",..." : "...");
3469
- break;
3470
- }
3471
- let f = li(c, d, n, r + 1);
3472
- if (a.push(u, f), a.join("").length >= t) {
3473
- a.push(",...");
3474
- break;
3475
- }
3476
- }
3477
- return a.push(i), n.delete(e), ci(a.join(""), t);
3478
- }
3479
- function ui(e, t) {
3480
- return li(e, t, /* @__PURE__ */ new WeakSet());
3481
- }
3482
- var di = (e) => {
3483
- let t = e.surface ?? "detail", n = si(e.field.display?.list_preview?.max_chars);
3484
- return (r) => {
3485
- if (Kt(r)) return Q;
3486
- if (t === "list") {
3487
- let e = ui(r, n);
3488
- return /* @__PURE__ */ V("span", {
3489
- className: "font-mono text-xs text-muted-foreground",
3490
- title: e,
3491
- children: e
3492
- });
3493
- }
3494
- return /* @__PURE__ */ V(Jt, {
3495
- field: e.field,
3496
- fieldName: e.fieldName,
3497
- value: r,
3498
- mode: "display",
3499
- t: e.t
3500
- });
3501
- };
3502
- }, fi = [
3503
- {
3504
- pattern: /```[^\n]*\n?([\s\S]*?)```/g,
3505
- replacement: "$1"
3506
- },
3507
- {
3508
- pattern: /`([^`]+)`/g,
3509
- replacement: "$1"
3510
- },
3511
- {
3512
- pattern: /!\[([^\]]*)\]\([^)]*\)/g,
3513
- replacement: "$1"
3514
- },
3515
- {
3516
- pattern: /\[([^\]]+)\]\([^)]*\)/g,
3517
- replacement: "$1"
3518
- },
3519
- {
3520
- pattern: /\[([^\]]+)\]\[[^\]]*\]/g,
3521
- replacement: "$1"
3522
- },
3523
- {
3524
- pattern: /^[ \t]*\[[^\]]+\]:[ \t]*\S.*$/gm,
3525
- replacement: ""
3526
- },
3527
- {
3528
- pattern: /(\*\*\*|\*\*|\*|~~)(?=\S)([\s\S]*?\S)\1/g,
3529
- replacement: "$2"
3530
- },
3531
- {
3532
- pattern: /(^|[^A-Za-z0-9])(___|__|_)(?=\S)([\s\S]*?\S)\2(?![A-Za-z0-9])/g,
3533
- replacement: "$1$3"
3534
- },
3535
- {
3536
- pattern: /^[ \t]*#{1,6}[ \t]+/gm,
3537
- replacement: ""
3538
- },
3539
- {
3540
- pattern: /^[ \t]*>[ \t]?/gm,
3541
- replacement: ""
3542
- },
3543
- {
3544
- pattern: /^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/gm,
3545
- replacement: ""
3546
- },
3547
- {
3548
- pattern: /^[ \t]*\|?[ \t]*:?-{2,}[-| :]*$/gm,
3549
- replacement: ""
3550
- },
3551
- {
3552
- pattern: /\|/g,
3553
- replacement: " ",
3554
- structural: !1
3555
- },
3556
- {
3557
- pattern: /<\/?[a-zA-Z][^>]*>/g,
3558
- replacement: ""
3559
- },
3560
- {
3561
- pattern: /^[ \t]*(?:[-*_][ \t]*){3,}$/gm,
3562
- replacement: ""
3563
- }
3564
- ];
3565
- function pi(e) {
3566
- if (!e) return {
3567
- text: "",
3568
- isPlain: !0
3569
- };
3570
- let t = e, n = !1;
3571
- for (let e of fi) {
3572
- let r = t.replace(e.pattern, e.replacement);
3573
- r !== t && e.structural !== !1 && (n = !0), t = r;
3574
- }
3575
- return {
3576
- text: t.replace(/\s+/g, " ").trim(),
3577
- isPlain: !n
3578
- };
3579
- }
3580
- //#endregion
3581
- //#region src/components/fields/cells/factories/markdown.tsx
3582
- function mi(e) {
3583
- return /* @__PURE__ */ V(X, { content: e });
3584
- }
3585
- var hi = (e) => {
3586
- let t = e.surface === "list";
3587
- return (e) => {
3588
- let n = e == null ? "" : T(e);
3589
- if (!n) return Q;
3590
- if (!t) return mi(n);
3591
- let { text: r, isPlain: i } = pi(n);
3592
- return i ? /* @__PURE__ */ V("span", {
3593
- title: r,
3594
- children: r
3595
- }) : /* @__PURE__ */ V(ve, {
3596
- content: mi(n),
3597
- children: /* @__PURE__ */ V("span", {
3598
- title: r,
3599
- children: r
3600
- })
3601
- });
3602
- };
3603
- }, gi = {
3604
- fontSize: 12.5,
3605
- color: "var(--text-3)"
3606
- }, _i = {
3607
- fontSize: 12.5,
3608
- color: "var(--text-4)",
3609
- fontStyle: "italic"
3610
- }, vi = ({ t: e }) => {
3611
- let t = e("field.secret.not_set", "Not set"), n = e("field.secret.set", "Set");
3612
- return (e) => tn(e) ? /* @__PURE__ */ V("span", {
3613
- className: "mono",
3614
- style: gi,
3615
- children: n
3616
- }) : /* @__PURE__ */ V("span", {
3617
- style: _i,
3618
- children: t
3619
- });
3620
- };
3621
- //#endregion
3622
- //#region src/components/fields/cells/factories/richTextPreview.tsx
3623
- function yi(e, t) {
3624
- return /* @__PURE__ */ V(X, {
3625
- content: e,
3626
- files: t
3627
- });
3628
- }
3629
- var bi = (e) => {
3630
- let { fieldName: t } = e, n = e.surface === "list";
3631
- return (e, r) => {
3632
- let i = r?.$files?.[t], a = pn(e, i);
3633
- if (!a.markdown) return Q;
3634
- if (!n) return yi(a.markdown, a.files);
3635
- let { text: o, isPlain: s } = pi(a.markdown);
3636
- return s ? /* @__PURE__ */ V("span", {
3637
- title: o,
3638
- children: o
3639
- }) : /* @__PURE__ */ V(ve, {
3640
- content: yi(a.markdown, a.files),
3641
- children: /* @__PURE__ */ V("span", {
3642
- title: o,
3643
- children: o
3644
- })
3645
- });
3646
- };
3647
- }, xi = { fontSize: 12.5 }, Si = {
3648
- fontSize: 12.5,
3649
- whiteSpace: "pre-wrap",
3650
- margin: 0
3651
- }, Ci = {
3652
- text: qn,
3653
- bool_pill: Jn,
3654
- badge: Zn,
3655
- status_pill: er,
3656
- tag_list: rr,
3657
- time_ago: ar,
3658
- timestamp_full: or,
3659
- date: ir,
3660
- next_run: pr,
3661
- money: mr,
3662
- ref_link: _r,
3663
- file_ref: (e) => (t, n) => typeof t != "string" || t === "" ? Q : /* @__PURE__ */ V(Kn, {
3664
- field: e.field,
3665
- value: t,
3666
- entity: e.entity,
3667
- entityCode: e.entityCode,
3668
- record: n,
3669
- fieldName: e.fieldName,
3670
- surface: e.surface,
3671
- t: e.t,
3672
- mode: "display"
3673
- }),
3674
- url: Ur,
3675
- email: Gr,
3676
- phone: Yr,
3677
- number: $r,
3678
- code: ti,
3679
- link: ii,
3680
- json: di,
3681
- markdown: hi,
3682
- password_mask: vi,
3683
- rich_text_preview: bi,
3684
- multilang_inline: (e) => {
3685
- let { field: t, t: n } = e, r = t.type === "multilang_text";
3686
- return (e) => {
3687
- let t = Yt(e), i = o(t, n.language, n.deploymentLanguage);
3688
- if (!i) return r ? /* @__PURE__ */ V("p", {
3689
- style: Si,
3690
- children: "—"
3691
- }) : /* @__PURE__ */ V("span", {
3692
- style: xi,
3693
- children: "—"
3694
- });
3695
- let [a, s] = i;
3696
- return r ? /* @__PURE__ */ V("p", {
3697
- style: Si,
3698
- lang: a,
3699
- dir: "auto",
3700
- children: s
3701
- }) : /* @__PURE__ */ V("span", {
3702
- style: xi,
3703
- lang: a,
3704
- dir: "auto",
3705
- children: s
3706
- });
3707
- };
3708
- }
3709
- };
3710
- Object.keys(Ci).sort();
3711
- function wi(e) {
3712
- let t = e.field.display?.widget ?? "text", n = Ci[t];
3713
- if (!n) throw Error(`resolveCellRenderer: no factory registered for widget "${t}" (field "${e.fieldName}"). The engine must stamp a smart default at YAML-load time; an unknown widget here indicates an out-of-sync allow-list.`);
3714
- return n(e);
3715
- }
3716
- //#endregion
3717
- //#region src/components/fields/index.tsx
3718
- var Ti = {
3719
- string: yt,
3720
- text: St,
3721
- rich_text: Hn,
3722
- int: zt,
3723
- float: zt,
3724
- decimal: zt,
3725
- bool: Lt,
3726
- timestamp: It,
3727
- date: It,
3728
- time: It,
3729
- enum: wt,
3730
- email: Tt,
3731
- url: Dt,
3732
- phone: Ot,
3733
- uuid: yt,
3734
- bytes: yt,
3735
- ref: Ut,
3736
- file_ref: Kn,
3737
- json: Jt,
3738
- tags: yt,
3739
- string_array: on,
3740
- int_array: un,
3741
- uuid_array: on,
3742
- multilang: Xt,
3743
- multilang_text: Zt,
3744
- multilang_array: $t,
3745
- structure: Di,
3746
- secret: nn,
3747
- password: rn
3748
- };
3749
- for (let e of vt) if (!Ti[e]) throw Error(`editRegistry: missing entry for FieldType "${e}". The FieldType union and editRegistry must cover every field type the server declares.`);
3750
- function Ei(e) {
3751
- if (e.field.type === "json" && e.field.structure) return /* @__PURE__ */ V(Di, { ...e });
3752
- if (e.mode === "edit") {
3753
- let t = Ti[e.field.type];
3754
- if (!t) throw Error(`renderField: no edit-mode renderer for FieldType "${e.field.type}" (field "${e.fieldName}"). editRegistry must be total over FieldType; check types/fieldType.ts and components/fields/index.tsx.`);
3755
- return /* @__PURE__ */ V(t, { ...e });
3756
- }
3757
- if (!e.field.display?.widget) throw Error(`renderField: display mode requires a non-empty field.display.widget (field "${e.fieldName}", type "${e.field.type}"). The engine must stamp a smart default; an empty widget here means the field bypassed ResolveDefaultWidgets.`);
3758
- return wi({
3759
- field: e.field,
3760
- fieldName: e.fieldName,
3761
- surface: e.surface ?? "detail",
3762
- entity: e.entity,
3763
- entityCode: e.entityCode,
3764
- entities: e.entities,
3765
- screens: e.screens,
3766
- refs: e.refs,
3767
- t: e.t,
3768
- detailScreen: e.detailScreen
3769
- })(e.value, e.record ?? {});
3770
- }
3771
- //#endregion
3772
- //#region src/components/fields/StructureField.tsx
3773
- function Di(e) {
3774
- let { field: t, value: n, mode: i, onChange: a, fieldId: o, labelId: s, nested: c } = e, { data: l } = r(), u = t.structure ? l?.structures?.[t.structure] : void 0;
3775
- return u ? t.array ? /* @__PURE__ */ V(ki, {
3776
- structDef: u,
3777
- value: n,
3778
- mode: i,
3779
- onChange: a,
3780
- fieldId: o,
3781
- labelId: s,
3782
- nested: c
3783
- }) : /* @__PURE__ */ V(Oi, {
3784
- structDef: u,
3785
- value: n,
3786
- mode: i,
3787
- onChange: a,
3788
- fieldId: o,
3789
- labelId: s,
3790
- nested: c
3791
- }) : /* @__PURE__ */ V(Jt, { ...e });
3792
- }
3793
- function Oi({ structDef: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a, nested: o = !1 }) {
3794
- let s = E(), c = se(), l = i ?? c, u = typeof t == "object" && t && !Array.isArray(t) ? t : {}, d = e.fields.names(), f = {
3795
- display: "flex",
3796
- flexDirection: "column",
3797
- gap: n === "display" ? 8 : 12,
3798
- border: "1px solid var(--border)",
3799
- borderRadius: 8,
3800
- padding: 12,
3801
- background: "var(--surface-2)"
3802
- };
3803
- if (n === "display") return d.some((e) => u[e] != null && u[e] !== "") ? /* @__PURE__ */ V("div", {
3804
- style: o ? {
3805
- display: "flex",
3806
- flexDirection: "column",
3807
- gap: 8
3808
- } : f,
3809
- children: d.map((t) => {
3810
- let n = e.fields.get(t);
3811
- if (!n) return null;
3812
- let r = u[t];
3813
- return r == null ? null : /* @__PURE__ */ H("div", {
3814
- style: {
3815
- display: "flex",
3816
- flexWrap: "wrap",
3817
- alignItems: "baseline",
3818
- gap: 8
3819
- },
3820
- children: [/* @__PURE__ */ V("span", {
3821
- style: {
3822
- fontSize: 11.5,
3823
- fontWeight: 500,
3824
- color: "var(--text-3)",
3825
- minWidth: 100,
3826
- flexShrink: 0
3827
- },
3828
- title: s(n.display?.description) || void 0,
3829
- children: n.display ? s(n.display.name) : t
3830
- }), /* @__PURE__ */ V("div", {
3831
- style: {
3832
- minWidth: 0,
3833
- flex: "1 1 14rem"
3834
- },
3835
- children: n.type === "structure" && n.structure ? /* @__PURE__ */ V(Di, {
3836
- field: n,
3837
- fieldName: t,
3838
- value: r,
3839
- mode: "display",
3840
- t: s,
3841
- nested: !0
3842
- }) : Ei({
3843
- field: n,
3844
- fieldName: t,
3845
- value: r,
3846
- mode: "display",
3847
- t: s
3848
- })
3849
- })]
3850
- }, t);
3851
- })
3852
- }) : /* @__PURE__ */ V("span", {
3853
- style: {
3854
- fontSize: 12.5,
3855
- color: "var(--text-4)"
3856
- },
3857
- children: "—"
3858
- });
3859
- let p = (e) => (t) => {
3860
- r?.({
3861
- ...u,
3862
- [e]: t
3863
- });
3864
- };
3865
- return /* @__PURE__ */ V("div", {
3866
- style: f,
3867
- id: i,
3868
- role: "group",
3869
- "aria-labelledby": a,
3870
- children: d.map((t) => {
3871
- let n = e.fields.get(t);
3872
- if (!n) return null;
3873
- let r = n.type === "structure" && !!n.structure, i = `${l}-${t}`, a = `${i}-label`;
3874
- return /* @__PURE__ */ H("div", {
3875
- style: {
3876
- display: "flex",
3877
- flexDirection: "column",
3878
- gap: 2
3879
- },
3880
- children: [/* @__PURE__ */ V(Se, {
3881
- required: n.required,
3882
- id: a,
3883
- htmlFor: r ? void 0 : i,
3884
- children: n.display ? s(n.display.name) : t
3885
- }), r ? /* @__PURE__ */ V(Di, {
3886
- field: n,
3887
- t: s,
3888
- fieldName: t,
3889
- value: u[t],
3890
- mode: "edit",
3891
- onChange: p(t),
3892
- fieldId: i,
3893
- labelId: a
3894
- }) : Ei({
3895
- field: n,
3896
- fieldName: t,
3897
- value: u[t],
3898
- mode: "edit",
3899
- onChange: p(t),
3900
- fieldId: i,
3901
- labelId: a,
3902
- t: s
3903
- })]
3904
- }, t);
3905
- })
3906
- });
3907
- }
3908
- function ki({ structDef: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a, nested: o = !1 }) {
3909
- let s = E(), c = se(), l = i ?? c, u = Array.isArray(t) ? t : [];
3910
- if (n === "display") return u.length === 0 ? /* @__PURE__ */ V("span", {
3911
- style: {
3912
- fontSize: 12.5,
3913
- color: "var(--text-4)"
3914
- },
3915
- children: "—"
3916
- }) : /* @__PURE__ */ V("div", {
3917
- style: {
3918
- display: "flex",
3919
- flexDirection: "column",
3920
- gap: 8
3921
- },
3922
- children: u.map((t, n) => /* @__PURE__ */ V("div", {
3923
- style: o && n > 0 ? {
3924
- borderTop: "1px solid var(--border)",
3925
- paddingTop: 8
3926
- } : void 0,
3927
- children: /* @__PURE__ */ V(Oi, {
3928
- structDef: e,
3929
- value: t,
3930
- mode: "display",
3931
- nested: o
3932
- })
3933
- }, n))
3934
- });
3935
- let d = (e) => (t) => {
3936
- let n = [...u];
3937
- n[e] = t, r?.(n);
3938
- }, f = () => {
3939
- r?.([...u, {}]);
3940
- }, p = (e) => () => {
3941
- let t = u.filter((t, n) => n !== e);
3942
- r?.(t);
3943
- };
3944
- return /* @__PURE__ */ H("div", {
3945
- style: {
3946
- display: "flex",
3947
- flexDirection: "column",
3948
- gap: 8
3949
- },
3950
- id: i,
3951
- role: "group",
3952
- "aria-labelledby": a,
3953
- children: [u.map((t, n) => /* @__PURE__ */ H("div", {
3954
- style: { position: "relative" },
3955
- children: [/* @__PURE__ */ V(Oi, {
3956
- structDef: e,
3957
- value: t,
3958
- mode: "edit",
3959
- onChange: d(n),
3960
- fieldId: `${l}-${n}`
3961
- }), /* @__PURE__ */ V("div", {
3962
- style: {
3963
- position: "absolute",
3964
- top: 6,
3965
- right: 6
3966
- },
3967
- children: /* @__PURE__ */ V(k, {
3968
- size: 24,
3969
- icon: /* @__PURE__ */ V(O.trash, { size: 12 }),
3970
- onClick: p(n),
3971
- title: s("field.structure.remove", "Remove")
3972
- })
3973
- })]
3974
- }, n)), /* @__PURE__ */ V("div", { children: /* @__PURE__ */ V(A, {
3975
- icon: /* @__PURE__ */ V(O.plus, { size: 13 }),
3976
- onClick: f,
3977
- children: s("field.array.add", "Add")
3978
- }) })]
3979
- });
3980
- }
3981
- //#endregion
3982
- //#region src/lib/field-regions.ts
3983
- var Ai = /* @__PURE__ */ new Map();
3984
- function ji(e, t) {
3985
- return Ai.set(e, t), () => {
3986
- Ai.get(e) === t && Ai.delete(e);
3987
- };
3988
- }
3989
- function Mi(e) {
3990
- return Ai.get(e);
3991
- }
3992
- //#endregion
3993
- //#region src/lib/anchor.ts
3994
- var Ni = 1, Pi = 1e3 * Ni, Fi = 60 * Pi, Ii = 60 * Fi, Li = 24 * Ii, Ri = 7 * Li;
3995
- 36500 * Li;
3996
- var zi = {
3997
- ns: 1e-6,
3998
- us: .001,
3999
- µs: .001,
4000
- ms: Ni,
4001
- s: Pi,
4002
- m: Fi,
4003
- h: Ii,
4004
- d: Li,
4005
- w: Ri
4006
- }, Bi = /^(\d+(?:\.\d+)?|\.\d+)(ns|us|µs|ms|s|m|h|d|w)/i, Vi = /\d(?:mo|y)(?:[^a-zA-Z]|$)/i;
4007
- function Hi(e) {
4008
- if (!e || e.trim() !== e || e[0] === "+" || e[0] === "-" || Vi.test(e)) return null;
4009
- let t = 0, n = e;
4010
- for (; n.length > 0;) {
4011
- let e = Bi.exec(n);
4012
- if (!e) return null;
4013
- let r = Number(e[1]), i = zi[e[2].toLowerCase()];
4014
- if (!Number.isFinite(r) || i === void 0 || (t += r * i, t > 31536e8)) return null;
4015
- n = n.slice(e[0].length);
4016
- }
4017
- return t;
4018
- }
4019
- function Ui(e) {
4020
- if (!e.startsWith("now")) return null;
4021
- let t = e.slice(3), n = 0;
4022
- for (let e = 0; t.length > 0; e++) {
4023
- if (e >= 8) return null;
4024
- let r = t[0] === "+" ? 1 : t[0] === "-" ? -1 : 0;
4025
- if (r === 0) return null;
4026
- t = t.slice(1);
4027
- let i = t, a = t.search(/[+-]/);
4028
- a >= 0 ? (i = t.slice(0, a), t = t.slice(a)) : t = "";
4029
- let o = Hi(i);
4030
- if (o === null || (n += r * o, Math.abs(n) > 31536e8)) return null;
4031
- }
4032
- return n;
4033
- }
4034
- //#endregion
4035
- //#region src/lib/ui-actions.ts
4036
- var Wi = /\$\{\s*([^}]+?)\s*\}/g, Gi = /^\s*\$\{\s*([^}]+?)\s*\}\s*$/, $ = Symbol("unresolved");
4037
- function Ki(e, t) {
4038
- let n = e.match(Gi);
4039
- if (n) {
4040
- let r = qi(n[1], t);
4041
- return r === $ ? e : r;
4042
- }
4043
- return e.replace(Wi, (e, n) => {
4044
- let r = qi(n, t);
4045
- return r === $ ? e : T(r);
4046
- });
4047
- }
4048
- function qi(e, t) {
4049
- if (e.startsWith("now")) {
4050
- let t = Ui(e);
4051
- return t === null ? $ : n(new Date(Date.now() + t));
4052
- }
4053
- let [r, ...i] = e.split(".");
4054
- if (r === "row") return !t.row || i.length === 0 ? $ : Ji(t.row, i);
4055
- if (r === "field" && i.length >= 2) {
4056
- let [e, t] = i, n = Mi(e);
4057
- return n ? n.getField(t) : $;
4058
- }
4059
- return r === "params" ? !t.params || i.length === 0 ? $ : Ji(t.params, i) : $;
4060
- }
4061
- function Ji(e, t) {
4062
- return t.reduce((e, t) => {
4063
- if (e && typeof e == "object") return e[t];
4064
- }, e);
4065
- }
4066
- async function Yi(e, t, n) {
4067
- for (let r of t) try {
4068
- await Xi(r, n);
4069
- } catch (t) {
4070
- u.error(e("action.ui_step_failed", "A client-side step of this action failed."), c(e, t));
4071
- return;
4072
- }
4073
- }
4074
- async function Xi(e, t) {
4075
- if (e.copy_to_clipboard != null) {
4076
- let n = Qi(e.copy_to_clipboard, t);
4077
- await navigator.clipboard.writeText(n);
4078
- } else if (e.set_field) {
4079
- let { target: n, value: r } = e.set_field, { region: i, field: a } = $i(n), o = Mi(i);
4080
- if (!o) throw Error(`region "${i}" not registered`);
4081
- o.setField(a, Zi(r, t));
4082
- } else if (e.focus_field) {
4083
- let { region: t, field: n } = $i(e.focus_field), r = Mi(t);
4084
- if (!r) throw Error(`region "${t}" not registered`);
4085
- r.focusField(n);
4086
- } else if (e.show_toast) {
4087
- let n = Qi(e.show_toast.message, t), r = e.show_toast.kind ?? "info";
4088
- r === "success" ? u.success(n) : r === "error" ? u.error(n) : u.info(n);
4089
- }
4090
- }
4091
- function Zi(e, t) {
4092
- return typeof e == "string" ? Ki(e, t) : e;
4093
- }
4094
- function Qi(e, t) {
4095
- return T(Ki(e, t));
4096
- }
4097
- function $i(e) {
4098
- let t = e.indexOf(".");
4099
- if (t <= 0) throw Error(`invalid path "${e}" (expected "region.field")`);
4100
- return {
4101
- region: e.slice(0, t),
4102
- field: e.slice(t + 1)
4103
- };
4104
- }
4105
- function ea(e) {
4106
- return !e.handler && !!e.ui_steps && e.ui_steps.length > 0;
4107
- }
4108
- //#endregion
4109
- //#region src/hooks/useUnsavedInput.ts
4110
- var ta = /* @__PURE__ */ new Map();
4111
- function na(e) {
4112
- let { pathname: t } = ue(), n = gt((e) => e.findTabByPathname(t)?.id);
4113
- ce(() => {
4114
- if (!e || !n) return;
4115
- let t = (ta.get(n) ?? 0) + 1;
4116
- return ta.set(n, t), gt.getState().setDirty(n, !0), () => {
4117
- let e = (ta.get(n) ?? 1) - 1;
4118
- e > 0 ? ta.set(n, e) : ta.delete(n), gt.getState().setDirty(n, e > 0);
4119
- };
4120
- }, [e, n]);
4121
- }
4122
- //#endregion
4123
- //#region src/lib/mass-edit.ts
4124
- function ra(e) {
4125
- if (!e) return [];
4126
- let t = /* @__PURE__ */ new Set(), n = [];
4127
- for (let r of e.split(",")) {
4128
- let e = r.trim();
4129
- e && !t.has(e) && (t.add(e), n.push(e));
4130
- }
4131
- return n;
4132
- }
4133
- function ia(e, t, n) {
4134
- if (!t || !y(t, "update")) return [];
4135
- let r = Array.isArray(n) ? n : ra(n), i = r.length > 0 ? new Set(r) : null, a = S(t), o = new Set(g(t)), s = i ? r : aa(t, a, o), c = [];
4136
- for (let n of s) {
4137
- if (i && !i.has(n)) continue;
4138
- let r = oa(e, t, n, a, o);
4139
- r && c.push(r);
4140
- }
4141
- return c;
4142
- }
4143
- function aa(e, t, n) {
4144
- let r = [];
4145
- for (let [t, i] of e.fields) n.has(t) || i.auto || r.push(t);
4146
- if (!t) {
4147
- for (let t of Object.keys(e.status_groups ?? {})) r.push(`$status.${t}`);
4148
- for (let t of Object.keys(e.properties ?? {})) r.push(`$property.${t}`);
4149
- }
4150
- return r;
4151
- }
4152
- function oa(e, t, n, r, i) {
4153
- if (n.startsWith("$status.")) {
4154
- if (r) return null;
4155
- let i = n.slice(8), a = t.status_groups?.[i];
4156
- return a ? {
4157
- code: n,
4158
- bare: i,
4159
- kind: "status",
4160
- label: e(a.name) || i,
4161
- statusGroup: a
4162
- } : null;
4163
- }
4164
- if (n.startsWith("$property.")) {
4165
- if (r) return null;
4166
- let i = n.slice(10), a = t.properties?.[i];
4167
- return a ? {
4168
- code: n,
4169
- bare: i,
4170
- kind: "property",
4171
- label: e(a.name) || i,
4172
- property: a
4173
- } : null;
4174
- }
4175
- if (i.has(n)) return null;
4176
- let a = t.fields.get(n);
4177
- return !a || a.auto ? null : {
4178
- code: n,
4179
- bare: n,
4180
- kind: "field",
4181
- label: e(a.display?.name) || n,
4182
- field: a
4183
- };
4184
- }
4185
- //#endregion
4186
- //#region src/components/actions/PropertyGridEditor.tsx
4187
- var sa = Symbol.for("declarion.mass-edit.multiple");
4188
- function ca({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange: i }) {
4189
- let a = E(), o = E("errors"), s = L(() => ia(a, e, t), [
4190
- a,
4191
- e,
4192
- t
4193
- ]), c = L(() => Object.keys(r).map((e) => {
4194
- let t = s.find((t) => t.code === e);
4195
- return t ? {
4196
- target: t,
4197
- value: r[e]
4198
- } : null;
4199
- }).filter((e) => e !== null), [r, s]), l = L(() => {
4200
- let e = new Set(c.map((e) => e.target.code));
4201
- return s.filter((t) => !e.has(t.code));
4202
- }, [c, s]), u = I((e) => {
4203
- let t = pa(e, n), a = { ...r };
4204
- a[e.code] = t === sa ? void 0 : t, i(a);
4205
- }, [
4206
- r,
4207
- n,
4208
- i
4209
- ]), d = I((e, t) => {
4210
- i({
4211
- ...r,
4212
- [e]: t
4213
- });
4214
- }, [r, i]), f = I((e) => {
4215
- let t = { ...r };
4216
- delete t[e], i(t);
4217
- }, [r, i]);
4218
- return e ? /* @__PURE__ */ H("div", {
4219
- style: {
4220
- display: "flex",
4221
- flexDirection: "column",
4222
- gap: 8
4223
- },
4224
- children: [
4225
- c.length === 0 && /* @__PURE__ */ V("div", {
4226
- style: {
4227
- fontSize: 12,
4228
- color: "var(--text-3)"
4229
- },
4230
- children: a("action.mass_edit.no_targets", "No targets selected. Add a field, status, or property to edit across all selected rows.")
4231
- }),
4232
- c.map((e) => /* @__PURE__ */ V(la, {
4233
- row: e,
4234
- onChange: (t) => d(e.target.code, t),
4235
- onRemove: () => f(e.target.code)
4236
- }, e.target.code)),
4237
- /* @__PURE__ */ V(fa, {
4238
- targets: l,
4239
- onPick: u
4240
- })
4241
- ]
4242
- }) : /* @__PURE__ */ V("div", {
4243
- style: {
4244
- fontSize: 12,
4245
- color: "var(--text-3)"
4246
- },
4247
- children: o("action.mass_edit_entity_missing", "Entity schema unavailable. Mass edit requires an entity-bound action.")
4248
- });
4249
- }
4250
- function la({ row: e, onChange: t, onRemove: n }) {
4251
- let r = E(), { target: i } = e;
4252
- return /* @__PURE__ */ H("div", {
4253
- "data-testid": "mass-edit-row",
4254
- style: {
4255
- display: "grid",
4256
- gridTemplateColumns: "160px 1fr 28px",
4257
- gap: 8,
4258
- alignItems: "center"
4259
- },
4260
- children: [
4261
- /* @__PURE__ */ V("div", {
4262
- style: {
4263
- fontSize: 12.5,
4264
- color: "var(--text-2)"
4265
- },
4266
- title: i.code,
4267
- children: i.label
4268
- }),
4269
- /* @__PURE__ */ V(ua, {
4270
- row: e,
4271
- onChange: t
4272
- }),
4273
- /* @__PURE__ */ V(k, {
4274
- icon: /* @__PURE__ */ V(O.x, { size: 12 }),
4275
- onClick: n,
4276
- title: r("action.mass_edit.remove_target", "Remove target")
4277
- })
4278
- ]
4279
- });
4280
- }
4281
- function ua({ row: e, onChange: t }) {
4282
- let n = E(), { target: r } = e, i = e.value === sa, a = i ? n("action.mass_edit.multiple_values", "<multiple values>") : void 0, o = i ? "" : e.value;
4283
- if (r.kind === "status" && r.statusGroup) {
4284
- let e = r.statusGroup.statuses.map((e) => ({
4285
- value: e.code,
4286
- label: n(e.name) || e.code
4287
- }));
4288
- return /* @__PURE__ */ V("div", {
4289
- "data-testid": `value-${r.code}`,
4290
- children: /* @__PURE__ */ V(K, {
4291
- value: typeof o == "string" ? o : "",
4292
- options: e,
4293
- onChange: t,
4294
- placeholder: a ?? n("action.mass_edit.pick_status", "(pick status)")
4295
- })
4296
- });
4297
- }
4298
- let s = da(r);
4299
- return /* @__PURE__ */ H("div", {
4300
- "data-testid": `value-${r.code}`,
4301
- style: { position: "relative" },
4302
- children: [Ei({
4303
- field: s,
4304
- fieldName: r.bare,
4305
- value: o ?? "",
4306
- mode: "edit",
4307
- onChange: t,
4308
- t: n
4309
- }), a && /* @__PURE__ */ V("div", {
4310
- "data-testid": `multiple-values-${r.code}`,
4311
- style: {
4312
- fontSize: 11,
4313
- color: "var(--text-3)",
4314
- marginTop: 4,
4315
- fontStyle: "italic"
4316
- },
4317
- children: a
4318
- })]
4319
- });
4320
- }
4321
- function da(e) {
4322
- if (e.kind === "field" && e.field) return e.field;
4323
- if (e.kind === "property" && e.property) {
4324
- let t = e.property;
4325
- return {
4326
- name: e.bare,
4327
- type: t.type,
4328
- display: t.display ?? { name: t.name },
4329
- values: t.values,
4330
- ref: t.ref,
4331
- structure: t.structure
4332
- };
4333
- }
4334
- return { type: "string" };
4335
- }
4336
- function fa({ targets: e, onPick: t }) {
4337
- let n = E(), [r, i] = z(!1);
4338
- return e.length === 0 ? null : r ? /* @__PURE__ */ V("div", {
4339
- "data-testid": "mass-edit-target-picker",
4340
- style: {
4341
- alignSelf: "flex-start",
4342
- minWidth: 220
4343
- },
4344
- children: /* @__PURE__ */ V(K, {
4345
- value: "",
4346
- placeholder: n("action.mass_edit.select_target", "Select target..."),
4347
- options: e.map((e) => ({
4348
- value: e.code,
4349
- label: e.label
4350
- })),
4351
- onChange: (n) => {
4352
- let r = e.find((e) => e.code === n);
4353
- r && t(r), i(!1);
4354
- }
4355
- })
4356
- }) : /* @__PURE__ */ H(A, {
4357
- kind: "ghost",
4358
- onClick: () => i(!0),
4359
- style: { alignSelf: "flex-start" },
4360
- children: [
4361
- /* @__PURE__ */ V(O.plus, { size: 12 }),
4362
- " ",
4363
- n("action.mass_edit.add_target", "Add target")
4364
- ]
4365
- });
4366
- }
4367
- function pa(e, t) {
4368
- if (!t || t.length === 0 || e.kind !== "field") return;
4369
- let n, r = !1;
4370
- for (let i of t) {
4371
- let t = i[e.bare];
4372
- if (!r) n = t, r = !0;
4373
- else if (n !== t) return sa;
4374
- }
4375
- return n;
4376
- }
4377
- //#endregion
4378
- export { ye as $, Bt as A, Oe as B, Sn as C, _n as D, vn as E, mt as F, Re as G, Fe as H, st as I, Ne as J, Ie as K, gt as L, _t as M, tt as N, fn as O, nt as P, xe as Q, J as R, xn as S, pn as T, De as U, Se as V, Me as W, G as X, Ce as Y, Le as Z, Bn as _, ra as a, Ln as b, Ki as c, Di as d, U as et, Ei as f, Vn as g, zn as h, ia as i, X as j, Ht as k, ea as l, Q as m, ca as n, na as o, wi as p, K as q, pa as r, Yi as s, sa as t, ve as tt, ji as u, Z as v, Pn as w, Fn as x, jn as y, $e as z };