@ketvietlab/ketsuite 0.1.24 → 0.1.29

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 (1077) hide show
  1. package/dist/cache.d.ts +23 -0
  2. package/dist/cache.d.ts.map +1 -0
  3. package/dist/cache.js +71 -0
  4. package/dist/cache.js.map +1 -0
  5. package/dist/cli-watch.d.ts +4 -0
  6. package/dist/cli-watch.d.ts.map +1 -0
  7. package/dist/cli-watch.js +52 -0
  8. package/dist/cli-watch.js.map +1 -0
  9. package/dist/cli.js +45 -17
  10. package/dist/cli.js.map +1 -1
  11. package/dist/deployment.d.ts +11 -0
  12. package/dist/deployment.d.ts.map +1 -1
  13. package/dist/deployment.js +49 -39
  14. package/dist/deployment.js.map +1 -1
  15. package/dist/deployments/commerce.d.ts +4 -0
  16. package/dist/deployments/commerce.d.ts.map +1 -0
  17. package/dist/deployments/commerce.js +34 -0
  18. package/dist/deployments/commerce.js.map +1 -0
  19. package/dist/deployments/common.d.ts +54 -0
  20. package/dist/deployments/common.d.ts.map +1 -0
  21. package/dist/deployments/common.js +112 -0
  22. package/dist/deployments/common.js.map +1 -0
  23. package/dist/deployments/hospitality.d.ts +4 -0
  24. package/dist/deployments/hospitality.d.ts.map +1 -0
  25. package/dist/deployments/hospitality.js +103 -0
  26. package/dist/deployments/hospitality.js.map +1 -0
  27. package/dist/deployments/office.d.ts +4 -0
  28. package/dist/deployments/office.d.ts.map +1 -0
  29. package/dist/deployments/office.js +31 -0
  30. package/dist/deployments/office.js.map +1 -0
  31. package/dist/development.d.ts +16 -0
  32. package/dist/development.d.ts.map +1 -1
  33. package/dist/development.js +31 -0
  34. package/dist/development.js.map +1 -1
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +3 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/modules/account_backend/index.js +364 -871
  40. package/dist/modules/account_backend/index.js.map +1 -1
  41. package/dist/modules/account_backend/screens/accounts-list.d.ts.map +1 -1
  42. package/dist/modules/account_backend/screens/accounts-list.js +5 -15
  43. package/dist/modules/account_backend/screens/accounts-list.js.map +1 -1
  44. package/dist/modules/account_backend/screens/customer-invoices-list.d.ts.map +1 -1
  45. package/dist/modules/account_backend/screens/customer-invoices-list.js +5 -15
  46. package/dist/modules/account_backend/screens/customer-invoices-list.js.map +1 -1
  47. package/dist/modules/account_backend/screens/journal-entries-list.d.ts.map +1 -1
  48. package/dist/modules/account_backend/screens/journal-entries-list.js +5 -15
  49. package/dist/modules/account_backend/screens/journal-entries-list.js.map +1 -1
  50. package/dist/modules/account_backend/screens/journals-list.d.ts.map +1 -1
  51. package/dist/modules/account_backend/screens/journals-list.js +5 -15
  52. package/dist/modules/account_backend/screens/journals-list.js.map +1 -1
  53. package/dist/modules/account_backend/screens/opening-balances.d.ts +3 -1
  54. package/dist/modules/account_backend/screens/opening-balances.d.ts.map +1 -1
  55. package/dist/modules/account_backend/screens/opening-balances.js +11 -5
  56. package/dist/modules/account_backend/screens/opening-balances.js.map +1 -1
  57. package/dist/modules/account_backend/screens/payment-terms-list.d.ts.map +1 -1
  58. package/dist/modules/account_backend/screens/payment-terms-list.js +6 -17
  59. package/dist/modules/account_backend/screens/payment-terms-list.js.map +1 -1
  60. package/dist/modules/account_backend/screens/payments-list.d.ts.map +1 -1
  61. package/dist/modules/account_backend/screens/payments-list.js +5 -15
  62. package/dist/modules/account_backend/screens/payments-list.js.map +1 -1
  63. package/dist/modules/account_backend/screens/period-closes.d.ts +3 -1
  64. package/dist/modules/account_backend/screens/period-closes.d.ts.map +1 -1
  65. package/dist/modules/account_backend/screens/period-closes.js +40 -36
  66. package/dist/modules/account_backend/screens/period-closes.js.map +1 -1
  67. package/dist/modules/account_backend/screens/taxes-list.d.ts.map +1 -1
  68. package/dist/modules/account_backend/screens/taxes-list.js +5 -15
  69. package/dist/modules/account_backend/screens/taxes-list.js.map +1 -1
  70. package/dist/modules/account_backend/screens/vendor-bills-list.d.ts.map +1 -1
  71. package/dist/modules/account_backend/screens/vendor-bills-list.js +5 -15
  72. package/dist/modules/account_backend/screens/vendor-bills-list.js.map +1 -1
  73. package/dist/modules/account_backend/search-functions.d.ts +4 -0
  74. package/dist/modules/account_backend/search-functions.d.ts.map +1 -0
  75. package/dist/modules/account_backend/search-functions.js +5 -0
  76. package/dist/modules/account_backend/search-functions.js.map +1 -0
  77. package/dist/modules/account_backend/search.d.ts +774 -0
  78. package/dist/modules/account_backend/search.d.ts.map +1 -0
  79. package/dist/modules/account_backend/search.js +312 -0
  80. package/dist/modules/account_backend/search.js.map +1 -0
  81. package/dist/modules/address_backend/index.d.ts.map +1 -1
  82. package/dist/modules/address_backend/index.js +2 -0
  83. package/dist/modules/address_backend/index.js.map +1 -1
  84. package/dist/modules/address_backend/routes.d.ts.map +1 -1
  85. package/dist/modules/address_backend/routes.js +32 -7
  86. package/dist/modules/address_backend/routes.js.map +1 -1
  87. package/dist/modules/address_backend/screens/catalogs-list.d.ts +3 -1
  88. package/dist/modules/address_backend/screens/catalogs-list.d.ts.map +1 -1
  89. package/dist/modules/address_backend/screens/catalogs-list.js +15 -9
  90. package/dist/modules/address_backend/screens/catalogs-list.js.map +1 -1
  91. package/dist/modules/address_backend/screens/country-browser.d.ts.map +1 -1
  92. package/dist/modules/address_backend/screens/country-browser.js +7 -15
  93. package/dist/modules/address_backend/screens/country-browser.js.map +1 -1
  94. package/dist/modules/address_backend/search-functions.d.ts +4 -0
  95. package/dist/modules/address_backend/search-functions.d.ts.map +1 -0
  96. package/dist/modules/address_backend/search-functions.js +7 -0
  97. package/dist/modules/address_backend/search-functions.js.map +1 -0
  98. package/dist/modules/address_backend/search.d.ts +38 -0
  99. package/dist/modules/address_backend/search.d.ts.map +1 -0
  100. package/dist/modules/address_backend/search.js +40 -0
  101. package/dist/modules/address_backend/search.js.map +1 -0
  102. package/dist/modules/backend/catalogue.d.ts.map +1 -1
  103. package/dist/modules/backend/catalogue.js +16 -13
  104. package/dist/modules/backend/catalogue.js.map +1 -1
  105. package/dist/modules/backend/collection-search.d.ts +16 -0
  106. package/dist/modules/backend/collection-search.d.ts.map +1 -0
  107. package/dist/modules/backend/collection-search.js +43 -0
  108. package/dist/modules/backend/collection-search.js.map +1 -0
  109. package/dist/modules/backend/design/HANDOFF.md +1 -1
  110. package/dist/modules/backend/design/auth.css +61 -0
  111. package/dist/modules/backend/design/brand/logo-dark.png +0 -0
  112. package/dist/modules/backend/design/brand/logo-light.png +0 -0
  113. package/dist/modules/backend/design/client/backend-shell.d.mts +2 -2
  114. package/dist/modules/backend/design/client/backend-shell.d.mts.map +1 -1
  115. package/dist/modules/backend/design/client/backend-shell.mjs +1 -1
  116. package/dist/modules/backend/design/client/backend-shell.mjs.map +4 -4
  117. package/dist/modules/backend/design/client/ket-table.d.mts +10 -0
  118. package/dist/modules/backend/design/client/ket-table.d.mts.map +1 -0
  119. package/dist/modules/backend/design/client/ket-table.mjs +2 -0
  120. package/dist/modules/backend/design/client/ket-table.mjs.map +7 -0
  121. package/dist/modules/backend/design/client/lightbox.d.mts +22 -0
  122. package/dist/modules/backend/design/client/lightbox.d.mts.map +1 -0
  123. package/dist/modules/backend/design/client/lightbox.mjs +2 -0
  124. package/dist/modules/backend/design/client/lightbox.mjs.map +7 -0
  125. package/dist/modules/backend/design/client/relation-select.d.mts +12 -3
  126. package/dist/modules/backend/design/client/relation-select.d.mts.map +1 -1
  127. package/dist/modules/backend/design/client/relation-select.mjs +1 -1
  128. package/dist/modules/backend/design/client/relation-select.mjs.map +4 -4
  129. package/dist/modules/backend/design/client/search-filter.d.mts +10 -0
  130. package/dist/modules/backend/design/client/search-filter.d.mts.map +1 -0
  131. package/dist/modules/backend/design/client/search-filter.mjs +2 -0
  132. package/dist/modules/backend/design/client/search-filter.mjs.map +7 -0
  133. package/dist/modules/backend/design/content.css +43 -5
  134. package/dist/modules/backend/design/forms.css +99 -229
  135. package/dist/modules/backend/design/foundation.css +0 -51
  136. package/dist/modules/backend/design/lists.css +79 -7
  137. package/dist/modules/backend/design/user-workflow.css +0 -20
  138. package/dist/modules/backend/global-search.d.ts +3 -0
  139. package/dist/modules/backend/global-search.d.ts.map +1 -0
  140. package/dist/modules/backend/global-search.js +82 -0
  141. package/dist/modules/backend/global-search.js.map +1 -0
  142. package/dist/modules/backend/index.d.ts +26 -0
  143. package/dist/modules/backend/index.d.ts.map +1 -1
  144. package/dist/modules/backend/index.js +23 -0
  145. package/dist/modules/backend/index.js.map +1 -1
  146. package/dist/modules/backend/islands.d.ts +44 -1
  147. package/dist/modules/backend/islands.d.ts.map +1 -1
  148. package/dist/modules/backend/islands.js +25 -1
  149. package/dist/modules/backend/islands.js.map +1 -1
  150. package/dist/modules/backend/joints.d.ts.map +1 -1
  151. package/dist/modules/backend/joints.js +12 -0
  152. package/dist/modules/backend/joints.js.map +1 -1
  153. package/dist/modules/backend/ket-table.d.ts +7 -0
  154. package/dist/modules/backend/ket-table.d.ts.map +1 -0
  155. package/dist/modules/backend/ket-table.js +2 -0
  156. package/dist/modules/backend/ket-table.js.map +1 -0
  157. package/dist/modules/backend/messages.d.ts.map +1 -1
  158. package/dist/modules/backend/messages.js +144 -0
  159. package/dist/modules/backend/messages.js.map +1 -1
  160. package/dist/modules/backend/paging.d.ts.map +1 -1
  161. package/dist/modules/backend/paging.js +2 -1
  162. package/dist/modules/backend/paging.js.map +1 -1
  163. package/dist/modules/backend/relation-select.d.ts +2 -2
  164. package/dist/modules/backend/relation-select.d.ts.map +1 -1
  165. package/dist/modules/backend/routes.d.ts.map +1 -1
  166. package/dist/modules/backend/routes.js +2 -0
  167. package/dist/modules/backend/routes.js.map +1 -1
  168. package/dist/modules/backend/row-list.d.ts +63 -0
  169. package/dist/modules/backend/row-list.d.ts.map +1 -0
  170. package/dist/modules/backend/row-list.js +252 -0
  171. package/dist/modules/backend/row-list.js.map +1 -0
  172. package/dist/modules/backend/screen.d.ts +3 -3
  173. package/dist/modules/backend/screen.d.ts.map +1 -1
  174. package/dist/modules/backend/screen.js +6 -7
  175. package/dist/modules/backend/screen.js.map +1 -1
  176. package/dist/modules/backend/search-filter-state.d.ts +42 -0
  177. package/dist/modules/backend/search-filter-state.d.ts.map +1 -0
  178. package/dist/modules/backend/search-filter-state.js +277 -0
  179. package/dist/modules/backend/search-filter-state.js.map +1 -0
  180. package/dist/modules/backend/search-filter.d.ts +77 -0
  181. package/dist/modules/backend/search-filter.d.ts.map +1 -0
  182. package/dist/modules/backend/search-filter.js +259 -0
  183. package/dist/modules/backend/search-filter.js.map +1 -0
  184. package/dist/modules/channel_api/core.d.ts +1 -0
  185. package/dist/modules/channel_api/core.d.ts.map +1 -1
  186. package/dist/modules/channel_api/core.js.map +1 -1
  187. package/dist/modules/channel_api/customer.d.ts.map +1 -1
  188. package/dist/modules/channel_api/customer.js +4 -5
  189. package/dist/modules/channel_api/customer.js.map +1 -1
  190. package/dist/modules/company_backend/index.d.ts.map +1 -1
  191. package/dist/modules/company_backend/index.js +2 -0
  192. package/dist/modules/company_backend/index.js.map +1 -1
  193. package/dist/modules/company_backend/routes.d.ts.map +1 -1
  194. package/dist/modules/company_backend/routes.js +33 -27
  195. package/dist/modules/company_backend/routes.js.map +1 -1
  196. package/dist/modules/company_backend/screens/companies-list.d.ts +3 -3
  197. package/dist/modules/company_backend/screens/companies-list.d.ts.map +1 -1
  198. package/dist/modules/company_backend/screens/companies-list.js +18 -18
  199. package/dist/modules/company_backend/screens/companies-list.js.map +1 -1
  200. package/dist/modules/company_backend/screens/hierarchy.d.ts.map +1 -1
  201. package/dist/modules/company_backend/screens/hierarchy.js +1 -2
  202. package/dist/modules/company_backend/screens/hierarchy.js.map +1 -1
  203. package/dist/modules/company_backend/search-functions.d.ts +4 -0
  204. package/dist/modules/company_backend/search-functions.d.ts.map +1 -0
  205. package/dist/modules/company_backend/search-functions.js +7 -0
  206. package/dist/modules/company_backend/search-functions.js.map +1 -0
  207. package/dist/modules/company_backend/search.d.ts +24 -0
  208. package/dist/modules/company_backend/search.d.ts.map +1 -0
  209. package/dist/modules/company_backend/search.js +24 -0
  210. package/dist/modules/company_backend/search.js.map +1 -0
  211. package/dist/modules/crm/functions/activities.js +7 -10
  212. package/dist/modules/crm/functions/activities.js.map +1 -1
  213. package/dist/modules/crm/functions/case-modal-context.d.ts +3 -0
  214. package/dist/modules/crm/functions/case-modal-context.d.ts.map +1 -0
  215. package/dist/modules/crm/functions/case-modal-context.js +156 -0
  216. package/dist/modules/crm/functions/case-modal-context.js.map +1 -0
  217. package/dist/modules/crm/functions/cases.d.ts.map +1 -1
  218. package/dist/modules/crm/functions/cases.js +35 -2
  219. package/dist/modules/crm/functions/cases.js.map +1 -1
  220. package/dist/modules/crm/functions/configuration.js +1 -1
  221. package/dist/modules/crm/functions/configuration.js.map +1 -1
  222. package/dist/modules/crm/functions/gamification.d.ts.map +1 -1
  223. package/dist/modules/crm/functions/gamification.js +11 -7
  224. package/dist/modules/crm/functions/gamification.js.map +1 -1
  225. package/dist/modules/crm/functions/index.d.ts.map +1 -1
  226. package/dist/modules/crm/functions/index.js +4 -0
  227. package/dist/modules/crm/functions/index.js.map +1 -1
  228. package/dist/modules/crm/functions/reporting.d.ts +3 -0
  229. package/dist/modules/crm/functions/reporting.d.ts.map +1 -0
  230. package/dist/modules/crm/functions/reporting.js +140 -0
  231. package/dist/modules/crm/functions/reporting.js.map +1 -0
  232. package/dist/modules/crm/functions/shared.d.ts +1 -0
  233. package/dist/modules/crm/functions/shared.d.ts.map +1 -1
  234. package/dist/modules/crm/functions/shared.js +17 -9
  235. package/dist/modules/crm/functions/shared.js.map +1 -1
  236. package/dist/modules/crm/messages.d.ts +8 -1
  237. package/dist/modules/crm/messages.d.ts.map +1 -1
  238. package/dist/modules/crm/messages.js +14 -0
  239. package/dist/modules/crm/messages.js.map +1 -1
  240. package/dist/modules/crm/models.d.ts.map +1 -1
  241. package/dist/modules/crm/models.js +7 -0
  242. package/dist/modules/crm/models.js.map +1 -1
  243. package/dist/modules/crm/operations.d.ts +4 -1
  244. package/dist/modules/crm/operations.d.ts.map +1 -1
  245. package/dist/modules/crm/operations.js +39 -7
  246. package/dist/modules/crm/operations.js.map +1 -1
  247. package/dist/modules/crm/reporting.d.ts +115 -0
  248. package/dist/modules/crm/reporting.d.ts.map +1 -0
  249. package/dist/modules/crm/reporting.js +241 -0
  250. package/dist/modules/crm/reporting.js.map +1 -0
  251. package/dist/modules/crm_backend/client/crm-case-modal.d.mts +302 -0
  252. package/dist/modules/crm_backend/client/crm-case-modal.d.mts.map +1 -0
  253. package/dist/modules/crm_backend/client/crm-case-modal.mjs +2 -0
  254. package/dist/modules/crm_backend/client/crm-case-modal.mjs.map +7 -0
  255. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts +51 -51
  256. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts.map +1 -1
  257. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs +1 -1
  258. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs.map +4 -4
  259. package/dist/modules/crm_backend/client/crm-kanban-view.mjs +1 -1
  260. package/dist/modules/crm_backend/client/crm-kanban-view.mjs.map +1 -1
  261. package/dist/modules/crm_backend/collection-rows.d.ts +6 -0
  262. package/dist/modules/crm_backend/collection-rows.d.ts.map +1 -0
  263. package/dist/modules/crm_backend/collection-rows.js +15 -0
  264. package/dist/modules/crm_backend/collection-rows.js.map +1 -0
  265. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  266. package/dist/modules/crm_backend/index.js +2 -15
  267. package/dist/modules/crm_backend/index.js.map +1 -1
  268. package/dist/modules/crm_backend/islands.d.ts +1 -0
  269. package/dist/modules/crm_backend/islands.d.ts.map +1 -1
  270. package/dist/modules/crm_backend/islands.js +5 -0
  271. package/dist/modules/crm_backend/islands.js.map +1 -1
  272. package/dist/modules/crm_backend/messages.d.ts +34 -0
  273. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  274. package/dist/modules/crm_backend/messages.js +34 -0
  275. package/dist/modules/crm_backend/messages.js.map +1 -1
  276. package/dist/modules/crm_backend/modal/case-modal-view.d.ts +23 -0
  277. package/dist/modules/crm_backend/modal/case-modal-view.d.ts.map +1 -0
  278. package/dist/modules/crm_backend/modal/case-modal-view.js +640 -0
  279. package/dist/modules/crm_backend/modal/case-modal-view.js.map +1 -0
  280. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  281. package/dist/modules/crm_backend/routes.js +71 -15
  282. package/dist/modules/crm_backend/routes.js.map +1 -1
  283. package/dist/modules/crm_backend/screens/activity-planner.d.ts +1 -0
  284. package/dist/modules/crm_backend/screens/activity-planner.d.ts.map +1 -1
  285. package/dist/modules/crm_backend/screens/activity-planner.js +15 -11
  286. package/dist/modules/crm_backend/screens/activity-planner.js.map +1 -1
  287. package/dist/modules/crm_backend/screens/cases-list.d.ts +1 -0
  288. package/dist/modules/crm_backend/screens/cases-list.d.ts.map +1 -1
  289. package/dist/modules/crm_backend/screens/cases-list.js +17 -26
  290. package/dist/modules/crm_backend/screens/cases-list.js.map +1 -1
  291. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  292. package/dist/modules/crm_backend/screens/configuration.js +18 -16
  293. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  294. package/dist/modules/crm_backend/screens/leaderboard.d.ts +2 -0
  295. package/dist/modules/crm_backend/screens/leaderboard.d.ts.map +1 -1
  296. package/dist/modules/crm_backend/screens/leaderboard.js +12 -18
  297. package/dist/modules/crm_backend/screens/leaderboard.js.map +1 -1
  298. package/dist/modules/flow/functions.d.ts.map +1 -1
  299. package/dist/modules/flow/functions.js +20 -39
  300. package/dist/modules/flow/functions.js.map +1 -1
  301. package/dist/modules/flow_backend/index.js +2 -1
  302. package/dist/modules/flow_backend/index.js.map +1 -1
  303. package/dist/modules/flow_backend/routes.d.ts.map +1 -1
  304. package/dist/modules/flow_backend/routes.js +181 -126
  305. package/dist/modules/flow_backend/routes.js.map +1 -1
  306. package/dist/modules/flow_backend/screens/all-epics.d.ts.map +1 -1
  307. package/dist/modules/flow_backend/screens/all-epics.js +37 -45
  308. package/dist/modules/flow_backend/screens/all-epics.js.map +1 -1
  309. package/dist/modules/flow_backend/screens/all-pages.d.ts.map +1 -1
  310. package/dist/modules/flow_backend/screens/all-pages.js +43 -51
  311. package/dist/modules/flow_backend/screens/all-pages.js.map +1 -1
  312. package/dist/modules/flow_backend/screens/issues.d.ts.map +1 -1
  313. package/dist/modules/flow_backend/screens/issues.js +68 -82
  314. package/dist/modules/flow_backend/screens/issues.js.map +1 -1
  315. package/dist/modules/flow_backend/screens/my-work.d.ts.map +1 -1
  316. package/dist/modules/flow_backend/screens/my-work.js +63 -69
  317. package/dist/modules/flow_backend/screens/my-work.js.map +1 -1
  318. package/dist/modules/flow_backend/screens/project-pages.d.ts.map +1 -1
  319. package/dist/modules/flow_backend/screens/project-pages.js +1 -2
  320. package/dist/modules/flow_backend/screens/project-pages.js.map +1 -1
  321. package/dist/modules/flow_backend/screens/projects-list.d.ts.map +1 -1
  322. package/dist/modules/flow_backend/screens/projects-list.js +41 -64
  323. package/dist/modules/flow_backend/screens/projects-list.js.map +1 -1
  324. package/dist/modules/flow_backend/screens/sprints.d.ts +3 -1
  325. package/dist/modules/flow_backend/screens/sprints.d.ts.map +1 -1
  326. package/dist/modules/flow_backend/screens/sprints.js +77 -73
  327. package/dist/modules/flow_backend/screens/sprints.js.map +1 -1
  328. package/dist/modules/flow_backend/search-functions.d.ts +13 -0
  329. package/dist/modules/flow_backend/search-functions.d.ts.map +1 -0
  330. package/dist/modules/flow_backend/search-functions.js +40 -0
  331. package/dist/modules/flow_backend/search-functions.js.map +1 -0
  332. package/dist/modules/flow_backend/search.d.ts +48 -0
  333. package/dist/modules/flow_backend/search.d.ts.map +1 -0
  334. package/dist/modules/flow_backend/search.js +57 -0
  335. package/dist/modules/flow_backend/search.js.map +1 -0
  336. package/dist/modules/hospitality_billing/index.js +2 -1
  337. package/dist/modules/hospitality_billing/index.js.map +1 -1
  338. package/dist/modules/hospitality_billing/menus.js +2 -2
  339. package/dist/modules/hospitality_billing/menus.js.map +1 -1
  340. package/dist/modules/hospitality_billing/messages.d.ts.map +1 -1
  341. package/dist/modules/hospitality_billing/messages.js +2 -0
  342. package/dist/modules/hospitality_billing/messages.js.map +1 -1
  343. package/dist/modules/hospitality_billing/routes.d.ts.map +1 -1
  344. package/dist/modules/hospitality_billing/routes.js +39 -5
  345. package/dist/modules/hospitality_billing/routes.js.map +1 -1
  346. package/dist/modules/hospitality_billing/screens/billing.d.ts.map +1 -1
  347. package/dist/modules/hospitality_billing/screens/billing.js +21 -17
  348. package/dist/modules/hospitality_billing/screens/billing.js.map +1 -1
  349. package/dist/modules/hospitality_billing/screens/charge-rules.d.ts +4 -2
  350. package/dist/modules/hospitality_billing/screens/charge-rules.d.ts.map +1 -1
  351. package/dist/modules/hospitality_billing/screens/charge-rules.js +14 -9
  352. package/dist/modules/hospitality_billing/screens/charge-rules.js.map +1 -1
  353. package/dist/modules/hospitality_billing/screens/page-frame.d.ts +3 -1
  354. package/dist/modules/hospitality_billing/screens/page-frame.d.ts.map +1 -1
  355. package/dist/modules/hospitality_billing/screens/page-frame.js +2 -4
  356. package/dist/modules/hospitality_billing/screens/page-frame.js.map +1 -1
  357. package/dist/modules/hospitality_billing/screens/shared.d.ts +4 -4
  358. package/dist/modules/hospitality_billing/screens/shared.d.ts.map +1 -1
  359. package/dist/modules/hospitality_billing/screens/shared.js +2 -2
  360. package/dist/modules/hospitality_billing/screens/shared.js.map +1 -1
  361. package/dist/modules/hospitality_billing/search-functions.d.ts +4 -0
  362. package/dist/modules/hospitality_billing/search-functions.d.ts.map +1 -0
  363. package/dist/modules/hospitality_billing/search-functions.js +16 -0
  364. package/dist/modules/hospitality_billing/search-functions.js.map +1 -0
  365. package/dist/modules/hospitality_billing/search.d.ts +66 -0
  366. package/dist/modules/hospitality_billing/search.d.ts.map +1 -0
  367. package/dist/modules/hospitality_billing/search.js +92 -0
  368. package/dist/modules/hospitality_billing/search.js.map +1 -0
  369. package/dist/modules/hospitality_core/content.d.ts.map +1 -1
  370. package/dist/modules/hospitality_core/content.js +3 -0
  371. package/dist/modules/hospitality_core/content.js.map +1 -1
  372. package/dist/modules/hospitality_core/housekeeping.d.ts.map +1 -1
  373. package/dist/modules/hospitality_core/housekeeping.js +13 -4
  374. package/dist/modules/hospitality_core/housekeeping.js.map +1 -1
  375. package/dist/modules/hospitality_core/index.d.ts.map +1 -1
  376. package/dist/modules/hospitality_core/index.js +2 -0
  377. package/dist/modules/hospitality_core/index.js.map +1 -1
  378. package/dist/modules/hospitality_core/menus.d.ts.map +1 -1
  379. package/dist/modules/hospitality_core/menus.js +27 -30
  380. package/dist/modules/hospitality_core/menus.js.map +1 -1
  381. package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
  382. package/dist/modules/hospitality_core/messages.js +4 -0
  383. package/dist/modules/hospitality_core/messages.js.map +1 -1
  384. package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
  385. package/dist/modules/hospitality_core/routes.js +135 -47
  386. package/dist/modules/hospitality_core/routes.js.map +1 -1
  387. package/dist/modules/hospitality_core/screens/amenities.d.ts +4 -2
  388. package/dist/modules/hospitality_core/screens/amenities.d.ts.map +1 -1
  389. package/dist/modules/hospitality_core/screens/amenities.js +9 -5
  390. package/dist/modules/hospitality_core/screens/amenities.js.map +1 -1
  391. package/dist/modules/hospitality_core/screens/cleaning-tasks.d.ts.map +1 -1
  392. package/dist/modules/hospitality_core/screens/cleaning-tasks.js +45 -30
  393. package/dist/modules/hospitality_core/screens/cleaning-tasks.js.map +1 -1
  394. package/dist/modules/hospitality_core/screens/folios.d.ts +4 -2
  395. package/dist/modules/hospitality_core/screens/folios.d.ts.map +1 -1
  396. package/dist/modules/hospitality_core/screens/folios.js +10 -4
  397. package/dist/modules/hospitality_core/screens/folios.js.map +1 -1
  398. package/dist/modules/hospitality_core/screens/page-frame.d.ts +3 -1
  399. package/dist/modules/hospitality_core/screens/page-frame.d.ts.map +1 -1
  400. package/dist/modules/hospitality_core/screens/page-frame.js +4 -7
  401. package/dist/modules/hospitality_core/screens/page-frame.js.map +1 -1
  402. package/dist/modules/hospitality_core/screens/policies.d.ts +4 -2
  403. package/dist/modules/hospitality_core/screens/policies.d.ts.map +1 -1
  404. package/dist/modules/hospitality_core/screens/policies.js +9 -5
  405. package/dist/modules/hospitality_core/screens/policies.js.map +1 -1
  406. package/dist/modules/hospitality_core/screens/properties.d.ts +4 -2
  407. package/dist/modules/hospitality_core/screens/properties.d.ts.map +1 -1
  408. package/dist/modules/hospitality_core/screens/properties.js +49 -42
  409. package/dist/modules/hospitality_core/screens/properties.js.map +1 -1
  410. package/dist/modules/hospitality_core/screens/rate-plans.d.ts.map +1 -1
  411. package/dist/modules/hospitality_core/screens/rate-plans.js +19 -15
  412. package/dist/modules/hospitality_core/screens/rate-plans.js.map +1 -1
  413. package/dist/modules/hospitality_core/screens/reservations.d.ts.map +1 -1
  414. package/dist/modules/hospitality_core/screens/reservations.js +26 -19
  415. package/dist/modules/hospitality_core/screens/reservations.js.map +1 -1
  416. package/dist/modules/hospitality_core/screens/room-types.d.ts.map +1 -1
  417. package/dist/modules/hospitality_core/screens/room-types.js +23 -19
  418. package/dist/modules/hospitality_core/screens/room-types.js.map +1 -1
  419. package/dist/modules/hospitality_core/screens/rooms.d.ts.map +1 -1
  420. package/dist/modules/hospitality_core/screens/rooms.js +26 -19
  421. package/dist/modules/hospitality_core/screens/rooms.js.map +1 -1
  422. package/dist/modules/hospitality_core/screens/shared.d.ts +4 -4
  423. package/dist/modules/hospitality_core/screens/shared.d.ts.map +1 -1
  424. package/dist/modules/hospitality_core/screens/shared.js +2 -2
  425. package/dist/modules/hospitality_core/screens/shared.js.map +1 -1
  426. package/dist/modules/hospitality_core/screens/stays.d.ts +4 -2
  427. package/dist/modules/hospitality_core/screens/stays.d.ts.map +1 -1
  428. package/dist/modules/hospitality_core/screens/stays.js +10 -4
  429. package/dist/modules/hospitality_core/screens/stays.js.map +1 -1
  430. package/dist/modules/hospitality_core/search-functions.d.ts +10 -0
  431. package/dist/modules/hospitality_core/search-functions.d.ts.map +1 -0
  432. package/dist/modules/hospitality_core/search-functions.js +17 -0
  433. package/dist/modules/hospitality_core/search-functions.js.map +1 -0
  434. package/dist/modules/hospitality_core/search.d.ts +218 -0
  435. package/dist/modules/hospitality_core/search.d.ts.map +1 -0
  436. package/dist/modules/hospitality_core/search.js +201 -0
  437. package/dist/modules/hospitality_core/search.js.map +1 -0
  438. package/dist/modules/hr_backend/index.d.ts.map +1 -1
  439. package/dist/modules/hr_backend/index.js +2 -0
  440. package/dist/modules/hr_backend/index.js.map +1 -1
  441. package/dist/modules/hr_backend/routes.d.ts.map +1 -1
  442. package/dist/modules/hr_backend/routes.js +55 -71
  443. package/dist/modules/hr_backend/routes.js.map +1 -1
  444. package/dist/modules/hr_backend/screens/employees-list.d.ts +3 -1
  445. package/dist/modules/hr_backend/screens/employees-list.d.ts.map +1 -1
  446. package/dist/modules/hr_backend/screens/employees-list.js +14 -12
  447. package/dist/modules/hr_backend/screens/employees-list.js.map +1 -1
  448. package/dist/modules/hr_backend/screens/leaves-list.d.ts +3 -1
  449. package/dist/modules/hr_backend/screens/leaves-list.d.ts.map +1 -1
  450. package/dist/modules/hr_backend/screens/leaves-list.js +11 -10
  451. package/dist/modules/hr_backend/screens/leaves-list.js.map +1 -1
  452. package/dist/modules/hr_backend/search-functions.d.ts +4 -0
  453. package/dist/modules/hr_backend/search-functions.d.ts.map +1 -0
  454. package/dist/modules/hr_backend/search-functions.js +8 -0
  455. package/dist/modules/hr_backend/search-functions.js.map +1 -0
  456. package/dist/modules/hr_backend/search.d.ts +73 -0
  457. package/dist/modules/hr_backend/search.d.ts.map +1 -0
  458. package/dist/modules/hr_backend/search.js +67 -0
  459. package/dist/modules/hr_backend/search.js.map +1 -0
  460. package/dist/modules/livedoc/islands.d.ts +1 -0
  461. package/dist/modules/livedoc/islands.d.ts.map +1 -1
  462. package/dist/modules/loyalty_backend/index.js +176 -215
  463. package/dist/modules/loyalty_backend/index.js.map +1 -1
  464. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
  465. package/dist/modules/loyalty_backend/screens/index.js +321 -326
  466. package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
  467. package/dist/modules/loyalty_backend/screens/page-frame.d.ts +6 -3
  468. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
  469. package/dist/modules/loyalty_backend/screens/page-frame.js +3 -3
  470. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
  471. package/dist/modules/loyalty_backend/search-functions.d.ts +4 -0
  472. package/dist/modules/loyalty_backend/search-functions.d.ts.map +1 -0
  473. package/dist/modules/loyalty_backend/search-functions.js +11 -0
  474. package/dist/modules/loyalty_backend/search-functions.js.map +1 -0
  475. package/dist/modules/loyalty_backend/search.d.ts +33 -0
  476. package/dist/modules/loyalty_backend/search.d.ts.map +1 -0
  477. package/dist/modules/loyalty_backend/search.js +85 -0
  478. package/dist/modules/loyalty_backend/search.js.map +1 -0
  479. package/dist/modules/manufacturing_backend/index.d.ts.map +1 -1
  480. package/dist/modules/manufacturing_backend/index.js +14 -0
  481. package/dist/modules/manufacturing_backend/index.js.map +1 -1
  482. package/dist/modules/manufacturing_backend/routes.d.ts.map +1 -1
  483. package/dist/modules/manufacturing_backend/routes.js +74 -20
  484. package/dist/modules/manufacturing_backend/routes.js.map +1 -1
  485. package/dist/modules/manufacturing_backend/screens/boms-list.d.ts +3 -1
  486. package/dist/modules/manufacturing_backend/screens/boms-list.d.ts.map +1 -1
  487. package/dist/modules/manufacturing_backend/screens/boms-list.js +12 -11
  488. package/dist/modules/manufacturing_backend/screens/boms-list.js.map +1 -1
  489. package/dist/modules/manufacturing_backend/screens/orders-list.d.ts +3 -1
  490. package/dist/modules/manufacturing_backend/screens/orders-list.d.ts.map +1 -1
  491. package/dist/modules/manufacturing_backend/screens/orders-list.js +13 -12
  492. package/dist/modules/manufacturing_backend/screens/orders-list.js.map +1 -1
  493. package/dist/modules/manufacturing_backend/screens/work-centers-list.d.ts +3 -1
  494. package/dist/modules/manufacturing_backend/screens/work-centers-list.d.ts.map +1 -1
  495. package/dist/modules/manufacturing_backend/screens/work-centers-list.js +13 -12
  496. package/dist/modules/manufacturing_backend/screens/work-centers-list.js.map +1 -1
  497. package/dist/modules/manufacturing_backend/search-functions.d.ts +4 -0
  498. package/dist/modules/manufacturing_backend/search-functions.d.ts.map +1 -0
  499. package/dist/modules/manufacturing_backend/search-functions.js +9 -0
  500. package/dist/modules/manufacturing_backend/search-functions.js.map +1 -0
  501. package/dist/modules/manufacturing_backend/search.d.ts +99 -0
  502. package/dist/modules/manufacturing_backend/search.d.ts.map +1 -0
  503. package/dist/modules/manufacturing_backend/search.js +75 -0
  504. package/dist/modules/manufacturing_backend/search.js.map +1 -0
  505. package/dist/modules/oauth_backend/index.d.ts.map +1 -1
  506. package/dist/modules/oauth_backend/index.js +2 -0
  507. package/dist/modules/oauth_backend/index.js.map +1 -1
  508. package/dist/modules/oauth_backend/routes.d.ts.map +1 -1
  509. package/dist/modules/oauth_backend/routes.js +33 -2
  510. package/dist/modules/oauth_backend/routes.js.map +1 -1
  511. package/dist/modules/oauth_backend/screens/index.d.ts +7 -3
  512. package/dist/modules/oauth_backend/screens/index.d.ts.map +1 -1
  513. package/dist/modules/oauth_backend/screens/index.js +113 -103
  514. package/dist/modules/oauth_backend/screens/index.js.map +1 -1
  515. package/dist/modules/oauth_backend/search-functions.d.ts +4 -0
  516. package/dist/modules/oauth_backend/search-functions.d.ts.map +1 -0
  517. package/dist/modules/oauth_backend/search-functions.js +8 -0
  518. package/dist/modules/oauth_backend/search-functions.js.map +1 -0
  519. package/dist/modules/oauth_backend/search.d.ts +68 -0
  520. package/dist/modules/oauth_backend/search.d.ts.map +1 -0
  521. package/dist/modules/oauth_backend/search.js +69 -0
  522. package/dist/modules/oauth_backend/search.js.map +1 -0
  523. package/dist/modules/partner/functions.d.ts.map +1 -1
  524. package/dist/modules/partner/functions.js +121 -23
  525. package/dist/modules/partner/functions.js.map +1 -1
  526. package/dist/modules/partner_backend/functions.d.ts +13 -0
  527. package/dist/modules/partner_backend/functions.d.ts.map +1 -0
  528. package/dist/modules/partner_backend/functions.js +56 -0
  529. package/dist/modules/partner_backend/functions.js.map +1 -0
  530. package/dist/modules/partner_backend/index.d.ts.map +1 -1
  531. package/dist/modules/partner_backend/index.js +28 -6
  532. package/dist/modules/partner_backend/index.js.map +1 -1
  533. package/dist/modules/partner_backend/routes.d.ts.map +1 -1
  534. package/dist/modules/partner_backend/routes.js +269 -86
  535. package/dist/modules/partner_backend/routes.js.map +1 -1
  536. package/dist/modules/partner_backend/screens/index.d.ts +1 -1
  537. package/dist/modules/partner_backend/screens/index.d.ts.map +1 -1
  538. package/dist/modules/partner_backend/screens/list.d.ts +3 -4
  539. package/dist/modules/partner_backend/screens/list.d.ts.map +1 -1
  540. package/dist/modules/partner_backend/screens/list.js +13 -92
  541. package/dist/modules/partner_backend/screens/list.js.map +1 -1
  542. package/dist/modules/partner_backend/screens/types.d.ts +0 -11
  543. package/dist/modules/partner_backend/screens/types.d.ts.map +1 -1
  544. package/dist/modules/pos_backend/index.js +34 -9
  545. package/dist/modules/pos_backend/index.js.map +1 -1
  546. package/dist/modules/pos_backend/screens.d.ts +4 -2
  547. package/dist/modules/pos_backend/screens.d.ts.map +1 -1
  548. package/dist/modules/pos_backend/screens.js +105 -96
  549. package/dist/modules/pos_backend/screens.js.map +1 -1
  550. package/dist/modules/pos_backend/search-functions.d.ts +4 -0
  551. package/dist/modules/pos_backend/search-functions.d.ts.map +1 -0
  552. package/dist/modules/pos_backend/search-functions.js +7 -0
  553. package/dist/modules/pos_backend/search-functions.js.map +1 -0
  554. package/dist/modules/pos_backend/search.d.ts +41 -0
  555. package/dist/modules/pos_backend/search.d.ts.map +1 -0
  556. package/dist/modules/pos_backend/search.js +33 -0
  557. package/dist/modules/pos_backend/search.js.map +1 -0
  558. package/dist/modules/pricing_backend/index.js +31 -2
  559. package/dist/modules/pricing_backend/index.js.map +1 -1
  560. package/dist/modules/pricing_backend/screens/pricelists-list.d.ts +3 -1
  561. package/dist/modules/pricing_backend/screens/pricelists-list.d.ts.map +1 -1
  562. package/dist/modules/pricing_backend/screens/pricelists-list.js +14 -12
  563. package/dist/modules/pricing_backend/screens/pricelists-list.js.map +1 -1
  564. package/dist/modules/pricing_backend/search-functions.d.ts +4 -0
  565. package/dist/modules/pricing_backend/search-functions.d.ts.map +1 -0
  566. package/dist/modules/pricing_backend/search-functions.js +11 -0
  567. package/dist/modules/pricing_backend/search-functions.js.map +1 -0
  568. package/dist/modules/pricing_backend/search.d.ts +41 -0
  569. package/dist/modules/pricing_backend/search.d.ts.map +1 -0
  570. package/dist/modules/pricing_backend/search.js +34 -0
  571. package/dist/modules/pricing_backend/search.js.map +1 -0
  572. package/dist/modules/product/attribute-draft.d.ts +3 -0
  573. package/dist/modules/product/attribute-draft.d.ts.map +1 -0
  574. package/dist/modules/product/attribute-draft.js +126 -0
  575. package/dist/modules/product/attribute-draft.js.map +1 -0
  576. package/dist/modules/product/attribute-modal-context.d.ts +4 -0
  577. package/dist/modules/product/attribute-modal-context.d.ts.map +1 -0
  578. package/dist/modules/product/attribute-modal-context.js +57 -0
  579. package/dist/modules/product/attribute-modal-context.js.map +1 -0
  580. package/dist/modules/product/attribute-modal-labels.d.ts +3 -0
  581. package/dist/modules/product/attribute-modal-labels.d.ts.map +1 -0
  582. package/dist/modules/product/attribute-modal-labels.js +30 -0
  583. package/dist/modules/product/attribute-modal-labels.js.map +1 -0
  584. package/dist/modules/product/functions.d.ts.map +1 -1
  585. package/dist/modules/product/functions.js +7 -1
  586. package/dist/modules/product/functions.js.map +1 -1
  587. package/dist/modules/product/messages.d.ts.map +1 -1
  588. package/dist/modules/product/messages.js +24 -0
  589. package/dist/modules/product/messages.js.map +1 -1
  590. package/dist/modules/product/models.d.ts.map +1 -1
  591. package/dist/modules/product/models.js +14 -2
  592. package/dist/modules/product/models.js.map +1 -1
  593. package/dist/modules/product/product-modal-context.d.ts.map +1 -1
  594. package/dist/modules/product/product-modal-context.js +22 -30
  595. package/dist/modules/product/product-modal-context.js.map +1 -1
  596. package/dist/modules/product/product-record-tabs.d.ts +14 -0
  597. package/dist/modules/product/product-record-tabs.d.ts.map +1 -0
  598. package/dist/modules/product/product-record-tabs.js +23 -0
  599. package/dist/modules/product/product-record-tabs.js.map +1 -0
  600. package/dist/modules/product/record-images.d.ts +12 -0
  601. package/dist/modules/product/record-images.d.ts.map +1 -0
  602. package/dist/modules/product/record-images.js +37 -0
  603. package/dist/modules/product/record-images.js.map +1 -0
  604. package/dist/modules/product/search.d.ts +3 -0
  605. package/dist/modules/product/search.d.ts.map +1 -1
  606. package/dist/modules/product/search.js +4 -0
  607. package/dist/modules/product/search.js.map +1 -1
  608. package/dist/modules/product/variant-setup.d.ts +46 -0
  609. package/dist/modules/product/variant-setup.d.ts.map +1 -0
  610. package/dist/modules/product/variant-setup.js +444 -0
  611. package/dist/modules/product/variant-setup.js.map +1 -0
  612. package/dist/modules/product_backend/attribute-search-state.d.ts +22 -0
  613. package/dist/modules/product_backend/attribute-search-state.d.ts.map +1 -0
  614. package/dist/modules/product_backend/attribute-search-state.js +62 -0
  615. package/dist/modules/product_backend/attribute-search-state.js.map +1 -0
  616. package/dist/modules/product_backend/attributes-search.d.ts +10 -0
  617. package/dist/modules/product_backend/attributes-search.d.ts.map +1 -0
  618. package/dist/modules/product_backend/attributes-search.js +67 -0
  619. package/dist/modules/product_backend/attributes-search.js.map +1 -0
  620. package/dist/modules/product_backend/client/attribute-modal.d.mts +62 -0
  621. package/dist/modules/product_backend/client/attribute-modal.d.mts.map +1 -0
  622. package/dist/modules/product_backend/client/attribute-modal.mjs +2 -0
  623. package/dist/modules/product_backend/client/attribute-modal.mjs.map +7 -0
  624. package/dist/modules/product_backend/client/product-modal.d.mts +46 -44
  625. package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -1
  626. package/dist/modules/product_backend/client/product-modal.mjs +1 -1
  627. package/dist/modules/product_backend/client/product-modal.mjs.map +4 -4
  628. package/dist/modules/product_backend/client/product.css +262 -0
  629. package/dist/modules/product_backend/client/variant-editor.d.mts +16 -0
  630. package/dist/modules/product_backend/client/variant-editor.d.mts.map +1 -0
  631. package/dist/modules/product_backend/client/variant-editor.mjs +2 -0
  632. package/dist/modules/product_backend/client/variant-editor.mjs.map +7 -0
  633. package/dist/modules/product_backend/functions.d.ts +3 -0
  634. package/dist/modules/product_backend/functions.d.ts.map +1 -0
  635. package/dist/modules/product_backend/functions.js +29 -0
  636. package/dist/modules/product_backend/functions.js.map +1 -0
  637. package/dist/modules/product_backend/index.d.ts.map +1 -1
  638. package/dist/modules/product_backend/index.js +236 -5
  639. package/dist/modules/product_backend/index.js.map +1 -1
  640. package/dist/modules/product_backend/islands.d.ts +20 -0
  641. package/dist/modules/product_backend/islands.d.ts.map +1 -1
  642. package/dist/modules/product_backend/islands.js +25 -0
  643. package/dist/modules/product_backend/islands.js.map +1 -1
  644. package/dist/modules/product_backend/menus.d.ts.map +1 -1
  645. package/dist/modules/product_backend/menus.js +4 -5
  646. package/dist/modules/product_backend/menus.js.map +1 -1
  647. package/dist/modules/product_backend/modal/attribute-modal-view.d.ts +25 -0
  648. package/dist/modules/product_backend/modal/attribute-modal-view.d.ts.map +1 -0
  649. package/dist/modules/product_backend/modal/attribute-modal-view.js +180 -0
  650. package/dist/modules/product_backend/modal/attribute-modal-view.js.map +1 -0
  651. package/dist/modules/product_backend/modal/product-modal-view.d.ts +31 -6
  652. package/dist/modules/product_backend/modal/product-modal-view.d.ts.map +1 -1
  653. package/dist/modules/product_backend/modal/product-modal-view.js +342 -252
  654. package/dist/modules/product_backend/modal/product-modal-view.js.map +1 -1
  655. package/dist/modules/product_backend/routes.d.ts.map +1 -1
  656. package/dist/modules/product_backend/routes.js +159 -200
  657. package/dist/modules/product_backend/routes.js.map +1 -1
  658. package/dist/modules/product_backend/screens/attributes.d.ts +18 -4
  659. package/dist/modules/product_backend/screens/attributes.d.ts.map +1 -1
  660. package/dist/modules/product_backend/screens/attributes.js +71 -63
  661. package/dist/modules/product_backend/screens/attributes.js.map +1 -1
  662. package/dist/modules/product_backend/screens/list.d.ts +13 -7
  663. package/dist/modules/product_backend/screens/list.d.ts.map +1 -1
  664. package/dist/modules/product_backend/screens/list.js +38 -57
  665. package/dist/modules/product_backend/screens/list.js.map +1 -1
  666. package/dist/modules/product_media/functions.d.ts.map +1 -1
  667. package/dist/modules/product_media/functions.js +2 -0
  668. package/dist/modules/product_media/functions.js.map +1 -1
  669. package/dist/modules/purchase_backend/index.js +116 -208
  670. package/dist/modules/purchase_backend/index.js.map +1 -1
  671. package/dist/modules/purchase_backend/screens/order-list-shared.js +2 -2
  672. package/dist/modules/purchase_backend/screens/order-list-shared.js.map +1 -1
  673. package/dist/modules/purchase_backend/screens/purchase-orders-list.d.ts.map +1 -1
  674. package/dist/modules/purchase_backend/screens/purchase-orders-list.js +11 -13
  675. package/dist/modules/purchase_backend/screens/purchase-orders-list.js.map +1 -1
  676. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts.map +1 -1
  677. package/dist/modules/purchase_backend/screens/rfqs-list.js +10 -15
  678. package/dist/modules/purchase_backend/screens/rfqs-list.js.map +1 -1
  679. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts.map +1 -1
  680. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js +11 -21
  681. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js.map +1 -1
  682. package/dist/modules/purchase_backend/search-functions.d.ts +4 -0
  683. package/dist/modules/purchase_backend/search-functions.d.ts.map +1 -0
  684. package/dist/modules/purchase_backend/search-functions.js +9 -0
  685. package/dist/modules/purchase_backend/search-functions.js.map +1 -0
  686. package/dist/modules/purchase_backend/search.d.ts +128 -0
  687. package/dist/modules/purchase_backend/search.d.ts.map +1 -0
  688. package/dist/modules/purchase_backend/search.js +106 -0
  689. package/dist/modules/purchase_backend/search.js.map +1 -0
  690. package/dist/modules/sale_backend/index.js +83 -32
  691. package/dist/modules/sale_backend/index.js.map +1 -1
  692. package/dist/modules/sale_backend/order-collection.d.ts +7 -0
  693. package/dist/modules/sale_backend/order-collection.d.ts.map +1 -0
  694. package/dist/modules/sale_backend/order-collection.js +27 -0
  695. package/dist/modules/sale_backend/order-collection.js.map +1 -0
  696. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts.map +1 -1
  697. package/dist/modules/sale_backend/screens/invoicing-policies-list.js +10 -14
  698. package/dist/modules/sale_backend/screens/invoicing-policies-list.js.map +1 -1
  699. package/dist/modules/sale_backend/screens/overview.js +2 -2
  700. package/dist/modules/sale_backend/screens/overview.js.map +1 -1
  701. package/dist/modules/sale_backend/screens/quotations-list.d.ts.map +1 -1
  702. package/dist/modules/sale_backend/screens/quotations-list.js +12 -23
  703. package/dist/modules/sale_backend/screens/quotations-list.js.map +1 -1
  704. package/dist/modules/sale_backend/screens/sales-orders-list.d.ts.map +1 -1
  705. package/dist/modules/sale_backend/screens/sales-orders-list.js +11 -20
  706. package/dist/modules/sale_backend/screens/sales-orders-list.js.map +1 -1
  707. package/dist/modules/sale_backend/search-functions.d.ts +4 -0
  708. package/dist/modules/sale_backend/search-functions.d.ts.map +1 -0
  709. package/dist/modules/sale_backend/search-functions.js +9 -0
  710. package/dist/modules/sale_backend/search-functions.js.map +1 -0
  711. package/dist/modules/sale_backend/search.d.ts +146 -0
  712. package/dist/modules/sale_backend/search.d.ts.map +1 -0
  713. package/dist/modules/sale_backend/search.js +112 -0
  714. package/dist/modules/sale_backend/search.js.map +1 -0
  715. package/dist/modules/stock_backend/functions.d.ts +10 -0
  716. package/dist/modules/stock_backend/functions.d.ts.map +1 -0
  717. package/dist/modules/stock_backend/functions.js +19 -0
  718. package/dist/modules/stock_backend/functions.js.map +1 -0
  719. package/dist/modules/stock_backend/index.js +33 -10
  720. package/dist/modules/stock_backend/index.js.map +1 -1
  721. package/dist/modules/stock_backend/routes.d.ts.map +1 -1
  722. package/dist/modules/stock_backend/routes.js +168 -59
  723. package/dist/modules/stock_backend/routes.js.map +1 -1
  724. package/dist/modules/stock_backend/screens/locations-list.d.ts.map +1 -1
  725. package/dist/modules/stock_backend/screens/locations-list.js +11 -22
  726. package/dist/modules/stock_backend/screens/locations-list.js.map +1 -1
  727. package/dist/modules/stock_backend/screens/lots-list.d.ts.map +1 -1
  728. package/dist/modules/stock_backend/screens/lots-list.js +11 -13
  729. package/dist/modules/stock_backend/screens/lots-list.js.map +1 -1
  730. package/dist/modules/stock_backend/screens/picking-types-list.d.ts.map +1 -1
  731. package/dist/modules/stock_backend/screens/picking-types-list.js +11 -22
  732. package/dist/modules/stock_backend/screens/picking-types-list.js.map +1 -1
  733. package/dist/modules/stock_backend/screens/replenishment-list.d.ts.map +1 -1
  734. package/dist/modules/stock_backend/screens/replenishment-list.js +11 -22
  735. package/dist/modules/stock_backend/screens/replenishment-list.js.map +1 -1
  736. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts.map +1 -1
  737. package/dist/modules/stock_backend/screens/stock-routes-list.js +12 -23
  738. package/dist/modules/stock_backend/screens/stock-routes-list.js.map +1 -1
  739. package/dist/modules/stock_backend/screens/transfers-list.d.ts.map +1 -1
  740. package/dist/modules/stock_backend/screens/transfers-list.js +12 -23
  741. package/dist/modules/stock_backend/screens/transfers-list.js.map +1 -1
  742. package/dist/modules/stock_backend/screens/warehouses-list.d.ts.map +1 -1
  743. package/dist/modules/stock_backend/screens/warehouses-list.js +11 -22
  744. package/dist/modules/stock_backend/screens/warehouses-list.js.map +1 -1
  745. package/dist/modules/stock_backend/search.d.ts +257 -0
  746. package/dist/modules/stock_backend/search.d.ts.map +1 -0
  747. package/dist/modules/stock_backend/search.js +349 -0
  748. package/dist/modules/stock_backend/search.js.map +1 -0
  749. package/dist/modules/storage/functions.d.ts.map +1 -1
  750. package/dist/modules/storage/functions.js +28 -5
  751. package/dist/modules/storage/functions.js.map +1 -1
  752. package/dist/modules/storage/jobs.d.ts.map +1 -1
  753. package/dist/modules/storage/jobs.js +120 -2
  754. package/dist/modules/storage/jobs.js.map +1 -1
  755. package/dist/modules/storage/models.d.ts.map +1 -1
  756. package/dist/modules/storage/models.js +21 -0
  757. package/dist/modules/storage/models.js.map +1 -1
  758. package/dist/modules/storage/policy.d.ts +27 -0
  759. package/dist/modules/storage/policy.d.ts.map +1 -1
  760. package/dist/modules/storage/policy.js +14 -0
  761. package/dist/modules/storage/policy.js.map +1 -1
  762. package/dist/modules/storage/routes.d.ts +1 -0
  763. package/dist/modules/storage/routes.d.ts.map +1 -1
  764. package/dist/modules/storage/routes.js +36 -10
  765. package/dist/modules/storage/routes.js.map +1 -1
  766. package/dist/modules/user/access-denial.d.ts +3 -0
  767. package/dist/modules/user/access-denial.d.ts.map +1 -0
  768. package/dist/modules/user/access-denial.js +34 -0
  769. package/dist/modules/user/access-denial.js.map +1 -0
  770. package/dist/modules/user/access-policy.d.ts +16 -0
  771. package/dist/modules/user/access-policy.d.ts.map +1 -0
  772. package/dist/modules/user/access-policy.js +455 -0
  773. package/dist/modules/user/access-policy.js.map +1 -0
  774. package/dist/modules/user/access-surfaces.d.ts +26 -0
  775. package/dist/modules/user/access-surfaces.d.ts.map +1 -0
  776. package/dist/modules/user/access-surfaces.js +76 -0
  777. package/dist/modules/user/access-surfaces.js.map +1 -0
  778. package/dist/modules/user/authorization.d.ts +12 -1
  779. package/dist/modules/user/authorization.d.ts.map +1 -1
  780. package/dist/modules/user/authorization.js +342 -36
  781. package/dist/modules/user/authorization.js.map +1 -1
  782. package/dist/modules/user/functions.d.ts.map +1 -1
  783. package/dist/modules/user/functions.js +26 -3
  784. package/dist/modules/user/functions.js.map +1 -1
  785. package/dist/modules/user/index.d.ts.map +1 -1
  786. package/dist/modules/user/index.js +13 -1
  787. package/dist/modules/user/index.js.map +1 -1
  788. package/dist/modules/user/modal-labels.d.ts +3 -0
  789. package/dist/modules/user/modal-labels.d.ts.map +1 -0
  790. package/dist/modules/user/modal-labels.js +30 -0
  791. package/dist/modules/user/modal-labels.js.map +1 -0
  792. package/dist/modules/user/modal-messages.d.ts +4 -0
  793. package/dist/modules/user/modal-messages.d.ts.map +1 -0
  794. package/dist/modules/user/modal-messages.js +15 -0
  795. package/dist/modules/user/modal-messages.js.map +1 -0
  796. package/dist/modules/user/models.d.ts.map +1 -1
  797. package/dist/modules/user/models.js +48 -0
  798. package/dist/modules/user/models.js.map +1 -1
  799. package/dist/modules/user/permission-areas.d.ts +20 -0
  800. package/dist/modules/user/permission-areas.d.ts.map +1 -0
  801. package/dist/modules/user/permission-areas.js +89 -0
  802. package/dist/modules/user/permission-areas.js.map +1 -0
  803. package/dist/modules/user/policy-jobs.d.ts +4 -0
  804. package/dist/modules/user/policy-jobs.d.ts.map +1 -0
  805. package/dist/modules/user/policy-jobs.js +15 -0
  806. package/dist/modules/user/policy-jobs.js.map +1 -0
  807. package/dist/modules/user/role-modal-context.d.ts +3 -0
  808. package/dist/modules/user/role-modal-context.d.ts.map +1 -0
  809. package/dist/modules/user/role-modal-context.js +264 -0
  810. package/dist/modules/user/role-modal-context.js.map +1 -0
  811. package/dist/modules/user/roles.d.ts.map +1 -1
  812. package/dist/modules/user/roles.js +2 -0
  813. package/dist/modules/user/roles.js.map +1 -1
  814. package/dist/modules/user/user-modal-context.d.ts +5 -1
  815. package/dist/modules/user/user-modal-context.d.ts.map +1 -1
  816. package/dist/modules/user/user-modal-context.js +227 -31
  817. package/dist/modules/user/user-modal-context.js.map +1 -1
  818. package/dist/modules/user_backend/access-options.d.ts +25 -0
  819. package/dist/modules/user_backend/access-options.d.ts.map +1 -0
  820. package/dist/modules/user_backend/access-options.js +38 -0
  821. package/dist/modules/user_backend/access-options.js.map +1 -0
  822. package/dist/modules/user_backend/access-policy-routes.d.ts +3 -0
  823. package/dist/modules/user_backend/access-policy-routes.d.ts.map +1 -0
  824. package/dist/modules/user_backend/access-policy-routes.js +76 -0
  825. package/dist/modules/user_backend/access-policy-routes.js.map +1 -0
  826. package/dist/modules/user_backend/client/access-policy-modal.d.mts +123 -0
  827. package/dist/modules/user_backend/client/access-policy-modal.d.mts.map +1 -0
  828. package/dist/modules/user_backend/client/access-policy-modal.mjs +2 -0
  829. package/dist/modules/user_backend/client/access-policy-modal.mjs.map +7 -0
  830. package/dist/modules/user_backend/client/role-modal.d.mts +103 -0
  831. package/dist/modules/user_backend/client/role-modal.d.mts.map +1 -0
  832. package/dist/modules/user_backend/client/role-modal.mjs +2 -0
  833. package/dist/modules/user_backend/client/role-modal.mjs.map +7 -0
  834. package/dist/modules/user_backend/client/user-modal.d.mts +160 -7
  835. package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -1
  836. package/dist/modules/user_backend/client/user-modal.mjs +1 -1
  837. package/dist/modules/user_backend/client/user-modal.mjs.map +4 -4
  838. package/dist/modules/user_backend/index.d.ts +2 -2
  839. package/dist/modules/user_backend/index.d.ts.map +1 -1
  840. package/dist/modules/user_backend/index.js +4 -2
  841. package/dist/modules/user_backend/index.js.map +1 -1
  842. package/dist/modules/user_backend/islands.d.ts +14 -1
  843. package/dist/modules/user_backend/islands.d.ts.map +1 -1
  844. package/dist/modules/user_backend/islands.js +11 -3
  845. package/dist/modules/user_backend/islands.js.map +1 -1
  846. package/dist/modules/user_backend/managed-role-routes.d.ts +3 -0
  847. package/dist/modules/user_backend/managed-role-routes.d.ts.map +1 -0
  848. package/dist/modules/user_backend/managed-role-routes.js +44 -0
  849. package/dist/modules/user_backend/managed-role-routes.js.map +1 -0
  850. package/dist/modules/user_backend/menus.d.ts.map +1 -1
  851. package/dist/modules/user_backend/menus.js +9 -7
  852. package/dist/modules/user_backend/menus.js.map +1 -1
  853. package/dist/modules/user_backend/messages.d.ts +510 -2
  854. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  855. package/dist/modules/user_backend/messages.js +552 -44
  856. package/dist/modules/user_backend/messages.js.map +1 -1
  857. package/dist/modules/user_backend/modal/access-policy-modal-view.d.ts +43 -0
  858. package/dist/modules/user_backend/modal/access-policy-modal-view.d.ts.map +1 -0
  859. package/dist/modules/user_backend/modal/access-policy-modal-view.js +384 -0
  860. package/dist/modules/user_backend/modal/access-policy-modal-view.js.map +1 -0
  861. package/dist/modules/user_backend/modal/access-surfaces.d.ts +51 -0
  862. package/dist/modules/user_backend/modal/access-surfaces.d.ts.map +1 -0
  863. package/dist/modules/user_backend/modal/access-surfaces.js +138 -0
  864. package/dist/modules/user_backend/modal/access-surfaces.js.map +1 -0
  865. package/dist/modules/user_backend/modal/role-modal-view.d.ts +48 -0
  866. package/dist/modules/user_backend/modal/role-modal-view.d.ts.map +1 -0
  867. package/dist/modules/user_backend/modal/role-modal-view.js +488 -0
  868. package/dist/modules/user_backend/modal/role-modal-view.js.map +1 -0
  869. package/dist/modules/user_backend/modal/user-modal-view.d.ts +45 -0
  870. package/dist/modules/user_backend/modal/user-modal-view.d.ts.map +1 -1
  871. package/dist/modules/user_backend/modal/user-modal-view.js +1317 -71
  872. package/dist/modules/user_backend/modal/user-modal-view.js.map +1 -1
  873. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  874. package/dist/modules/user_backend/routes.js +109 -571
  875. package/dist/modules/user_backend/routes.js.map +1 -1
  876. package/dist/modules/user_backend/screens/access-policies-list.d.ts +31 -0
  877. package/dist/modules/user_backend/screens/access-policies-list.d.ts.map +1 -0
  878. package/dist/modules/user_backend/screens/access-policies-list.js +54 -0
  879. package/dist/modules/user_backend/screens/access-policies-list.js.map +1 -0
  880. package/dist/modules/user_backend/screens/index.d.ts +1 -3
  881. package/dist/modules/user_backend/screens/index.d.ts.map +1 -1
  882. package/dist/modules/user_backend/screens/index.js +2 -3
  883. package/dist/modules/user_backend/screens/index.js.map +1 -1
  884. package/dist/modules/user_backend/screens/roles-list.d.ts +9 -3
  885. package/dist/modules/user_backend/screens/roles-list.d.ts.map +1 -1
  886. package/dist/modules/user_backend/screens/roles-list.js +15 -23
  887. package/dist/modules/user_backend/screens/roles-list.js.map +1 -1
  888. package/dist/modules/user_backend/screens/users-list.d.ts +7 -5
  889. package/dist/modules/user_backend/screens/users-list.d.ts.map +1 -1
  890. package/dist/modules/user_backend/screens/users-list.js +29 -21
  891. package/dist/modules/user_backend/screens/users-list.js.map +1 -1
  892. package/dist/modules/user_backend/search-functions.d.ts +4 -0
  893. package/dist/modules/user_backend/search-functions.d.ts.map +1 -0
  894. package/dist/modules/user_backend/search-functions.js +13 -0
  895. package/dist/modules/user_backend/search-functions.js.map +1 -0
  896. package/dist/modules/user_backend/search.d.ts +128 -0
  897. package/dist/modules/user_backend/search.d.ts.map +1 -0
  898. package/dist/modules/user_backend/search.js +131 -0
  899. package/dist/modules/user_backend/search.js.map +1 -0
  900. package/dist/modules/website/cms.d.ts.map +1 -1
  901. package/dist/modules/website/cms.js +17 -7
  902. package/dist/modules/website/cms.js.map +1 -1
  903. package/dist/modules/website/customer.d.ts +61 -1
  904. package/dist/modules/website/customer.d.ts.map +1 -1
  905. package/dist/modules/website/customer.js +197 -15
  906. package/dist/modules/website/customer.js.map +1 -1
  907. package/dist/modules/website/index.d.ts.map +1 -1
  908. package/dist/modules/website/index.js +16 -2
  909. package/dist/modules/website/index.js.map +1 -1
  910. package/dist/modules/website/models.d.ts.map +1 -1
  911. package/dist/modules/website/models.js +15 -0
  912. package/dist/modules/website/models.js.map +1 -1
  913. package/dist/modules/website/publication.d.ts.map +1 -1
  914. package/dist/modules/website/publication.js +11 -5
  915. package/dist/modules/website/publication.js.map +1 -1
  916. package/dist/modules/website_backend/collection.d.ts +12 -0
  917. package/dist/modules/website_backend/collection.d.ts.map +1 -0
  918. package/dist/modules/website_backend/collection.js +17 -0
  919. package/dist/modules/website_backend/collection.js.map +1 -0
  920. package/dist/modules/website_backend/functions.d.ts +10 -0
  921. package/dist/modules/website_backend/functions.d.ts.map +1 -0
  922. package/dist/modules/website_backend/functions.js +37 -0
  923. package/dist/modules/website_backend/functions.js.map +1 -0
  924. package/dist/modules/website_backend/index.js +2 -0
  925. package/dist/modules/website_backend/index.js.map +1 -1
  926. package/dist/modules/website_backend/routes.d.ts.map +1 -1
  927. package/dist/modules/website_backend/routes.js +124 -29
  928. package/dist/modules/website_backend/routes.js.map +1 -1
  929. package/dist/modules/website_backend/screens/index.d.ts +4 -8
  930. package/dist/modules/website_backend/screens/index.d.ts.map +1 -1
  931. package/dist/modules/website_backend/screens/index.js +685 -666
  932. package/dist/modules/website_backend/screens/index.js.map +1 -1
  933. package/dist/modules/website_backend/screens/page-frame.d.ts +6 -3
  934. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  935. package/dist/modules/website_backend/screens/page-frame.js +3 -3
  936. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  937. package/dist/modules/website_backend/search.d.ts +125 -0
  938. package/dist/modules/website_backend/search.d.ts.map +1 -0
  939. package/dist/modules/website_backend/search.js +135 -0
  940. package/dist/modules/website_backend/search.js.map +1 -0
  941. package/dist/permission-catalogue.d.ts.map +1 -1
  942. package/dist/permission-catalogue.js +178 -24
  943. package/dist/permission-catalogue.js.map +1 -1
  944. package/dist/phone.d.ts +32 -0
  945. package/dist/phone.d.ts.map +1 -0
  946. package/dist/phone.js +101 -0
  947. package/dist/phone.js.map +1 -0
  948. package/dist/role-templates.d.ts +79 -0
  949. package/dist/role-templates.d.ts.map +1 -0
  950. package/dist/role-templates.js +192 -0
  951. package/dist/role-templates.js.map +1 -0
  952. package/dist/scaffold/index.d.ts +1 -1
  953. package/dist/scaffold/index.d.ts.map +1 -1
  954. package/dist/scaffold/index.js +10 -5
  955. package/dist/scaffold/index.js.map +1 -1
  956. package/dist/scaffold/templates/README.md.tmpl +2 -1
  957. package/dist/scaffold/templates/ket.workspace.mjs.tmpl +4 -1
  958. package/dist/scaffold/templates/package.json.tmpl +2 -2
  959. package/dist/ui/actions.d.ts +2 -0
  960. package/dist/ui/actions.d.ts.map +1 -1
  961. package/dist/ui/actions.js +1 -1
  962. package/dist/ui/actions.js.map +1 -1
  963. package/dist/ui/chrome.d.ts +19 -6
  964. package/dist/ui/chrome.d.ts.map +1 -1
  965. package/dist/ui/chrome.js +12 -7
  966. package/dist/ui/chrome.js.map +1 -1
  967. package/dist/ui/client/bulk-selection.d.ts +7 -0
  968. package/dist/ui/client/bulk-selection.d.ts.map +1 -0
  969. package/dist/ui/client/bulk-selection.js +67 -0
  970. package/dist/ui/client/bulk-selection.js.map +1 -0
  971. package/dist/ui/client/ket-table-view.d.ts +3 -0
  972. package/dist/ui/client/ket-table-view.d.ts.map +1 -0
  973. package/dist/ui/client/ket-table-view.js +27 -0
  974. package/dist/ui/client/ket-table-view.js.map +1 -0
  975. package/dist/ui/client/live-doc-shell.d.ts +39 -1
  976. package/dist/ui/client/live-doc-shell.d.ts.map +1 -1
  977. package/dist/ui/client/live-doc-shell.js +41 -2
  978. package/dist/ui/client/live-doc-shell.js.map +1 -1
  979. package/dist/ui/client/live-doc-view.d.ts +29 -1
  980. package/dist/ui/client/live-doc-view.d.ts.map +1 -1
  981. package/dist/ui/client/live-doc-view.js +138 -4
  982. package/dist/ui/client/live-doc-view.js.map +1 -1
  983. package/dist/ui/client/live-doc.d.mts +8 -4
  984. package/dist/ui/client/live-doc.d.mts.map +1 -1
  985. package/dist/ui/client/live-doc.mjs +10 -10
  986. package/dist/ui/client/live-doc.mjs.map +3 -3
  987. package/dist/ui/client/record-modal-form.d.ts +34 -0
  988. package/dist/ui/client/record-modal-form.d.ts.map +1 -1
  989. package/dist/ui/client/record-modal-form.js +17 -1
  990. package/dist/ui/client/record-modal-form.js.map +1 -1
  991. package/dist/ui/client/record-modal.d.ts +62 -6
  992. package/dist/ui/client/record-modal.d.ts.map +1 -1
  993. package/dist/ui/client/record-modal.js +237 -39
  994. package/dist/ui/client/record-modal.js.map +1 -1
  995. package/dist/ui/client/search-filter-view.d.ts +2 -0
  996. package/dist/ui/client/search-filter-view.d.ts.map +1 -0
  997. package/dist/ui/client/search-filter-view.js +6 -0
  998. package/dist/ui/client/search-filter-view.js.map +1 -0
  999. package/dist/ui/client/table-selection-view.d.ts.map +1 -1
  1000. package/dist/ui/client/table-selection-view.js +33 -16
  1001. package/dist/ui/client/table-selection-view.js.map +1 -1
  1002. package/dist/ui/client/user-modal-client.d.ts +6 -0
  1003. package/dist/ui/client/user-modal-client.d.ts.map +1 -0
  1004. package/dist/ui/client/user-modal-client.js +4 -0
  1005. package/dist/ui/client/user-modal-client.js.map +1 -0
  1006. package/dist/ui/client/user-workflow.d.ts.map +1 -1
  1007. package/dist/ui/client/user-workflow.js +4 -3
  1008. package/dist/ui/client/user-workflow.js.map +1 -1
  1009. package/dist/ui/client/variant-attribute-create.d.ts +19 -0
  1010. package/dist/ui/client/variant-attribute-create.d.ts.map +1 -0
  1011. package/dist/ui/client/variant-attribute-create.js +177 -0
  1012. package/dist/ui/client/variant-attribute-create.js.map +1 -0
  1013. package/dist/ui/client/variant-editor-view.d.ts +72 -0
  1014. package/dist/ui/client/variant-editor-view.d.ts.map +1 -0
  1015. package/dist/ui/client/variant-editor-view.js +943 -0
  1016. package/dist/ui/client/variant-editor-view.js.map +1 -0
  1017. package/dist/ui/collection-state.d.ts +11 -0
  1018. package/dist/ui/collection-state.d.ts.map +1 -0
  1019. package/dist/ui/collection-state.js +45 -0
  1020. package/dist/ui/collection-state.js.map +1 -0
  1021. package/dist/ui/collection.d.ts +23 -0
  1022. package/dist/ui/collection.d.ts.map +1 -0
  1023. package/dist/ui/collection.js +118 -0
  1024. package/dist/ui/collection.js.map +1 -0
  1025. package/dist/ui/form.d.ts +1 -1
  1026. package/dist/ui/form.d.ts.map +1 -1
  1027. package/dist/ui/form.js +1 -1
  1028. package/dist/ui/form.js.map +1 -1
  1029. package/dist/ui/index.d.ts +3 -1
  1030. package/dist/ui/index.d.ts.map +1 -1
  1031. package/dist/ui/index.js +3 -1
  1032. package/dist/ui/index.js.map +1 -1
  1033. package/dist/ui/layout.d.ts +6 -7
  1034. package/dist/ui/layout.d.ts.map +1 -1
  1035. package/dist/ui/layout.js +25 -10
  1036. package/dist/ui/layout.js.map +1 -1
  1037. package/dist/ui/list-page.d.ts +4 -2
  1038. package/dist/ui/list-page.d.ts.map +1 -1
  1039. package/dist/ui/list-page.js +29 -4
  1040. package/dist/ui/list-page.js.map +1 -1
  1041. package/dist/ui/nav.d.ts +2 -3
  1042. package/dist/ui/nav.d.ts.map +1 -1
  1043. package/dist/ui/nav.js +4 -8
  1044. package/dist/ui/nav.js.map +1 -1
  1045. package/dist/ui/navigation.d.ts +1 -0
  1046. package/dist/ui/navigation.d.ts.map +1 -1
  1047. package/dist/ui/navigation.js +3 -3
  1048. package/dist/ui/navigation.js.map +1 -1
  1049. package/dist/ui/table.d.ts +2 -0
  1050. package/dist/ui/table.d.ts.map +1 -1
  1051. package/dist/ui/table.js +24 -0
  1052. package/dist/ui/table.js.map +1 -1
  1053. package/dist/ui/user-workflow.d.ts +2 -1
  1054. package/dist/ui/user-workflow.d.ts.map +1 -1
  1055. package/dist/ui/user-workflow.js +44 -29
  1056. package/dist/ui/user-workflow.js.map +1 -1
  1057. package/package.json +14 -4
  1058. package/dist/modules/user_backend/access-routes.d.ts +0 -31
  1059. package/dist/modules/user_backend/access-routes.d.ts.map +0 -1
  1060. package/dist/modules/user_backend/access-routes.js +0 -447
  1061. package/dist/modules/user_backend/access-routes.js.map +0 -1
  1062. package/dist/modules/user_backend/screens/presets-form.d.ts +0 -16
  1063. package/dist/modules/user_backend/screens/presets-form.d.ts.map +0 -1
  1064. package/dist/modules/user_backend/screens/presets-form.js +0 -37
  1065. package/dist/modules/user_backend/screens/presets-form.js.map +0 -1
  1066. package/dist/modules/user_backend/screens/role-form.d.ts +0 -21
  1067. package/dist/modules/user_backend/screens/role-form.d.ts.map +0 -1
  1068. package/dist/modules/user_backend/screens/role-form.js +0 -93
  1069. package/dist/modules/user_backend/screens/role-form.js.map +0 -1
  1070. package/dist/modules/user_backend/screens/user-form.d.ts +0 -56
  1071. package/dist/modules/user_backend/screens/user-form.d.ts.map +0 -1
  1072. package/dist/modules/user_backend/screens/user-form.js +0 -202
  1073. package/dist/modules/user_backend/screens/user-form.js.map +0 -1
  1074. package/dist/ui/client/relation-select-view.d.ts +0 -77
  1075. package/dist/ui/client/relation-select-view.d.ts.map +0 -1
  1076. package/dist/ui/client/relation-select-view.js +0 -216
  1077. package/dist/ui/client/relation-select-view.js.map +0 -1
@@ -1,5 +1,7 @@
1
- import { Fragment as _Fragment, jsx as _jsx } from "@ketvietlab/ketjs-view/jsx-runtime";
2
- import { badge, code, columns, ContentCard, dataTable, emptyState, RecordScreen, inline, linkButton, Notice, pagerBar, RecordActions, RecordForm, Section, stack, Surface, } from '../../../ui/index.js';
1
+ import { jsx as _jsx } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { withParam } from '../../backend/paging.js';
3
+ import { collectionQueryKeep, prepareCollectionTable } from '../../../ui/index.js';
4
+ import { badge, code, columns, ContentCard, dataTable, collectionTable, emptyState, RecordScreen, inline, linkButton, Notice, RecordActions, RecordForm, Section, stack, Surface, } from '../../../ui/index.js';
3
5
  import { FormScreenFrame, ListScreenFrame } from './page-frame.js';
4
6
  const statusTone = (status) => status === 'published'
5
7
  ? 'positive'
@@ -137,61 +139,62 @@ const domainInstructions = (_, site, row) => (_jsx(Surface, { body: siteFacts(_,
137
139
  [_('website_backend.domains.challenge'), _('website_backend.domains.challengeHint')],
138
140
  [_('website_backend.domains.nextStep'), _('website_backend.domains.nextStepHint')],
139
141
  ]) }));
140
- export const sitesScreen = (_, rows, frame, locale = '', active = 'all') => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.sites.title'), frame: frame, body: stack([
141
- inline([
142
- linkButton({
143
- label: _('website_backend.action.newSite'),
144
- href: `/admin/website/sites/new${locale}`,
145
- variant: 'primary',
146
- }),
142
+ export const sitesScreen = (_, rows, frame, locale = '', active = 'all') => {
143
+ const collection = prepareCollectionTable(_, frame, {
144
+ rows,
145
+ id: (row) => row.id,
146
+ rowHref: (row) => `/admin/website/sites/${row.id}${locale}`,
147
+ columns: [
148
+ {
149
+ key: 'site',
150
+ label: _('website_backend.sites.site'),
151
+ priority: 'primary',
152
+ cell: (row) => `${row.title} · ${companyLabel(_, frame, row)}`,
153
+ },
154
+ {
155
+ key: 'primaryHost',
156
+ label: _('website_backend.sites.primaryHost'),
157
+ priority: 'primary',
158
+ cell: (row) => primaryHost(_, row),
159
+ },
160
+ {
161
+ key: 'locale',
162
+ label: _('website_backend.field.locale'),
163
+ cell: (row) => code(row.defaultLocale),
164
+ },
165
+ {
166
+ key: 'state',
167
+ label: _('website_backend.field.status'),
168
+ kind: 'status',
169
+ cell: (row) => row.active ? domainEvidenceBadge(_, row) : badge(_('website_backend.state.inactive'), 'neutral'),
170
+ },
171
+ {
172
+ key: 'role',
173
+ label: _('website_backend.sites.yourRole'),
174
+ cell: (row) => roleLabel(_, row.role),
175
+ },
176
+ ],
177
+ responsive: 'stack',
178
+ }, {
179
+ paginate: true,
180
+ searchText: (row) => `${row.name} ${row.title} ${row.primaryHost ?? ''} ${row.defaultLocale}`,
181
+ });
182
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.sites.title'), frame: collection.frame, controls: activeFilter(_, (state) => withParam(new URL(frame.collectionUrl ?? `/admin/website/sites${locale}`, 'http://collection.local'), 'state', state), active), headerActions: linkButton({
183
+ label: _('website_backend.action.newSite'),
184
+ href: `/admin/website/sites/new${locale}`,
185
+ variant: 'primary',
186
+ }), actions: inline([
147
187
  linkButton({
148
188
  label: _('website_backend.action.pages'),
149
189
  href: `/admin/website/pages${locale}`,
150
190
  variant: 'secondary',
151
191
  }),
152
- ]),
153
- activeFilter(_, (state) => `/admin/website/sites?state=${state}${locale ? `&${locale.slice(1)}` : ''}`, active),
154
- rows.length === 0
155
- ? emptyState(_('website_backend.sites.empty'), _('website_backend.sites.emptyHint'))
156
- : dataTable(_, {
157
- rows,
158
- id: (row) => row.id,
159
- rowHref: (row) => `/admin/website/sites/${row.id}${locale}`,
160
- columns: [
161
- {
162
- key: 'site',
163
- label: _('website_backend.sites.site'),
164
- priority: 'primary',
165
- cell: (row) => `${row.title} · ${companyLabel(_, frame, row)}`,
166
- },
167
- {
168
- key: 'primaryHost',
169
- label: _('website_backend.sites.primaryHost'),
170
- priority: 'primary',
171
- cell: (row) => primaryHost(_, row),
172
- },
173
- {
174
- key: 'locale',
175
- label: _('website_backend.field.locale'),
176
- cell: (row) => code(row.defaultLocale),
177
- },
178
- {
179
- key: 'state',
180
- label: _('website_backend.field.status'),
181
- kind: 'status',
182
- cell: (row) => row.active
183
- ? domainEvidenceBadge(_, row)
184
- : badge(_('website_backend.state.inactive'), 'neutral'),
185
- },
186
- {
187
- key: 'role',
188
- label: _('website_backend.sites.yourRole'),
189
- cell: (row) => roleLabel(_, row.role),
190
- },
191
- ],
192
- responsive: 'stack',
193
- }),
194
- ]) }));
192
+ ]), body: stack([
193
+ rows.length === 0
194
+ ? emptyState(_('website_backend.sites.empty'), _('website_backend.sites.emptyHint'))
195
+ : collectionTable(_, collection.table),
196
+ ]) }));
197
+ };
195
198
  export const siteFormScreen = (_, row, themes, frame, options = {}) => {
196
199
  const existing = !!row.id;
197
200
  const locale = options.locale ?? '';
@@ -310,44 +313,49 @@ export const siteFormScreen = (_, row, themes, frame, options = {}) => {
310
313
  ]),
311
314
  ]) }));
312
315
  };
313
- export const contentScreen = (_, rows, sites, siteId, frame, locale = '', kind = { basePath: '/admin/website/pages', titleKey: 'pages' }, pager = null,
314
- /** What the URL asked for, so the controls come back showing it. */
315
- query = {}) => (_jsx(ListScreenFrame, { translator: _, title: _(`website_backend.${kind.titleKey}.title`), frame: frame, footer: pager ? pagerBar(_, pager) : null, body: stack([
316
- _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `${kind.basePath}${locale}`, method: "get", layout: "inline", fields: [
317
- {
318
- name: 'site',
319
- label: _('website_backend.field.site'),
320
- type: 'select',
321
- value: siteId,
322
- options: sites,
323
- },
324
- {
325
- name: 'q',
326
- label: _('website_backend.field.search'),
327
- value: query.search ?? '',
328
- },
329
- {
330
- name: 'status',
331
- label: _('website_backend.field.status'),
332
- type: 'select',
333
- value: query.status ?? 'all',
334
- options: [
335
- { value: 'all', label: _('website_backend.state.all') },
336
- { value: 'draft', label: _('website_backend.state.draft') },
337
- { value: 'scheduled', label: _('website_backend.state.scheduled') },
338
- { value: 'published', label: _('website_backend.state.published') },
339
- // Only by asking: the list leaves the bin out otherwise, the
340
- // way every other reader in the module already does.
341
- { value: 'trash', label: _('website_backend.state.trash') },
342
- ],
343
- },
344
- ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }) }),
345
- inline([
346
- linkButton({
347
- label: _(`website_backend.action.new${kind.titleKey === 'pages' ? 'Page' : 'Post'}`),
348
- href: `${kind.basePath}/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
349
- variant: 'primary',
350
- }),
316
+ export const contentScreen = (_, rows, sites, siteId, frame, locale = '', kind = { basePath: '/admin/website/pages', titleKey: 'pages' }, pager = null) => {
317
+ const collection = prepareCollectionTable(_, { ...frame, chrome: { ...frame.chrome, pager: pager ?? frame.chrome?.pager } }, {
318
+ rows,
319
+ id: (row) => row.id,
320
+ rowHref: (row) => `${kind.basePath}/${row.id}${locale}`,
321
+ columns: [
322
+ {
323
+ key: 'title',
324
+ label: _('website_backend.field.title'),
325
+ priority: 'primary',
326
+ cell: (row) => row.title,
327
+ },
328
+ {
329
+ key: 'path',
330
+ label: _('website_backend.field.path'),
331
+ kind: 'identifier',
332
+ cell: (row) => code(row.path),
333
+ },
334
+ {
335
+ key: 'status',
336
+ label: _('website_backend.field.status'),
337
+ kind: 'status',
338
+ cell: (row) => badge(_(`website_backend.state.${row.status}`), statusTone(row.status)),
339
+ },
340
+ ],
341
+ }, { paginate: false });
342
+ return (_jsx(ListScreenFrame, { translator: _, title: _(`website_backend.${kind.titleKey}.title`), frame: collection.frame, controls: _jsx(RecordForm, { action: `${kind.basePath}${locale}`, method: "get",
343
+ // The bar owns the query and the publication state now; what is
344
+ // left is which site's content this is, which is not a filter. The
345
+ // chrome draws the panel, so the form brings no card of its own.
346
+ hidden: collectionQueryKeep(new URL(frame.collectionUrl ?? `${kind.basePath}${locale}`, 'http://collection.local'), ['site']), layout: "inline", fields: [
347
+ {
348
+ name: 'site',
349
+ label: _('website_backend.field.site'),
350
+ type: 'select',
351
+ value: siteId,
352
+ options: sites,
353
+ },
354
+ ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }), headerActions: linkButton({
355
+ label: _(`website_backend.action.new${kind.titleKey === 'pages' ? 'Page' : 'Post'}`),
356
+ href: `${kind.basePath}/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
357
+ variant: 'primary',
358
+ }), actions: inline([
351
359
  linkButton({
352
360
  label: _('website_backend.action.taxonomies'),
353
361
  href: `/admin/website/taxonomies?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
@@ -356,37 +364,16 @@ query = {}) => (_jsx(ListScreenFrame, { translator: _, title: _(`website_backend
356
364
  label: _('website_backend.action.preflight'),
357
365
  href: `/admin/website/preflight?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
358
366
  }),
359
- ]),
360
- !siteId
361
- ? emptyState(_('website_backend.content.noSite'), _('website_backend.content.noSiteHint'))
362
- : rows.length === 0
363
- ? emptyState(_('website_backend.content.empty'), _('website_backend.content.emptyHint'))
364
- : dataTable(_, {
365
- rows,
366
- id: (row) => row.id,
367
- rowHref: (row) => `${kind.basePath}/${row.id}${locale}`,
368
- columns: [
369
- {
370
- key: 'title',
371
- label: _('website_backend.field.title'),
372
- priority: 'primary',
373
- cell: (row) => row.title,
374
- },
375
- {
376
- key: 'path',
377
- label: _('website_backend.field.path'),
378
- kind: 'identifier',
379
- cell: (row) => code(row.path),
380
- },
381
- {
382
- key: 'status',
383
- label: _('website_backend.field.status'),
384
- kind: 'status',
385
- cell: (row) => badge(_(`website_backend.state.${row.status}`), statusTone(row.status)),
386
- },
387
- ],
388
- }),
389
- ]) }));
367
+ ]), body: stack([
368
+ // One GET form for all three, because they are one question - which
369
+ // pages am I looking at - and three forms would each drop the other two.
370
+ !siteId
371
+ ? emptyState(_('website_backend.content.noSite'), _('website_backend.content.noSiteHint'))
372
+ : rows.length === 0
373
+ ? emptyState(_('website_backend.content.empty'), _('website_backend.content.emptyHint'))
374
+ : collectionTable(_, collection.table),
375
+ ]) }));
376
+ };
390
377
  /**
391
378
  * Which taxonomy terms this entry carries.
392
379
  *
@@ -595,13 +582,13 @@ export const entryFormScreen = (_, detail, siteId, kind, frame, options = {}) =>
595
582
  * written and nothing asked it. It defaults to the newest two, because "what
596
583
  * changed?" is the question people arrive at this screen holding.
597
584
  */
598
- const revisionCompare = (_, entry, rows, diff, basePath, locale) => {
585
+ const revisionCompare = (_, entry, rows, diff, basePath, locale, frame) => {
599
586
  const options = rows.map((row) => ({
600
587
  value: row.id,
601
588
  label: `${_('website_backend.field.version')} ${row.version} · ${row.kind}`,
602
589
  }));
603
590
  return (_jsx(Section, { title: _('website_backend.revisions.compare'), description: _('website_backend.revisions.compareHint'), body: stack([
604
- _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `${basePath}/${entry.id}/revisions${locale}`, method: "get", layout: "inline", fields: [
591
+ _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `${basePath}/${entry.id}/revisions${locale}`, method: "get", hidden: collectionQueryKeep(new URL(frame.collectionUrl ?? `${basePath}/${entry.id}/revisions${locale}`, 'http://collection.local'), ['from', 'to']), layout: "inline", fields: [
605
592
  {
606
593
  name: 'from',
607
594
  label: _('website_backend.revisions.from'),
@@ -663,50 +650,54 @@ const revisionCompare = (_, entry, rows, diff, basePath, locale) => {
663
650
  : []),
664
651
  ]) }));
665
652
  };
666
- export const revisionsScreen = (_, entry, rows, frame, locale = '', basePath = '/admin/website/pages', diff = null) => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.revisions.title'), frame: frame, body: stack([
667
- inline([
653
+ export const revisionsScreen = (_, entry, rows, frame, locale = '', basePath = '/admin/website/pages', diff = null, tableRows = rows) => {
654
+ const collection = prepareCollectionTable(_, frame, {
655
+ rows: tableRows,
656
+ id: (row) => row.id,
657
+ columns: [
658
+ {
659
+ key: 'version',
660
+ label: _('website_backend.field.version'),
661
+ kind: 'number',
662
+ cell: (row) => String(row.version),
663
+ },
664
+ {
665
+ key: 'kind',
666
+ label: _('website_backend.field.kind'),
667
+ cell: (row) => badge(row.kind, 'neutral'),
668
+ },
669
+ { key: 'author', label: _('website_backend.field.author'), cell: (row) => row.authorId ?? '—' },
670
+ {
671
+ key: 'created',
672
+ label: _('website_backend.field.createdAt'),
673
+ kind: 'date',
674
+ cell: (row) => row.createdAt,
675
+ },
676
+ {
677
+ // A restore makes a draft; it does not change what a visitor
678
+ // reads. That is why it is offered on every row, including a
679
+ // revision the current deployment can no longer draw - getting
680
+ // the content back is how it gets repaired.
681
+ key: 'restore',
682
+ label: _('website_backend.action.restore'),
683
+ cell: (row) => (_jsx(RecordActions, { action: `${basePath}/${entry.id}/revisions/${row.id}/restore${locale}`, size: "compact", actions: [{ value: 'restore', label: _('website_backend.action.restore') }] })),
684
+ },
685
+ ],
686
+ }, { paginate: true });
687
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.revisions.title'), frame: collection.frame, actions: inline([
668
688
  linkButton({
669
689
  label: _('website_backend.action.backToEntry'),
670
690
  href: `${basePath}/${entry.id}${locale}`,
671
691
  }),
672
- ]),
673
- ...(rows.length > 1 ? [revisionCompare(_, entry, rows, diff, basePath, locale)] : []),
674
- rows.length === 0
675
- ? emptyState(_('website_backend.revisions.empty'), _('website_backend.revisions.emptyHint'))
676
- : dataTable(_, {
677
- rows,
678
- id: (row) => row.id,
679
- columns: [
680
- {
681
- key: 'version',
682
- label: _('website_backend.field.version'),
683
- kind: 'number',
684
- cell: (row) => String(row.version),
685
- },
686
- {
687
- key: 'kind',
688
- label: _('website_backend.field.kind'),
689
- cell: (row) => badge(row.kind, 'neutral'),
690
- },
691
- { key: 'author', label: _('website_backend.field.author'), cell: (row) => row.authorId ?? '—' },
692
- {
693
- key: 'created',
694
- label: _('website_backend.field.createdAt'),
695
- kind: 'date',
696
- cell: (row) => row.createdAt,
697
- },
698
- {
699
- // A restore makes a draft; it does not change what a visitor
700
- // reads. That is why it is offered on every row, including a
701
- // revision the current deployment can no longer draw - getting
702
- // the content back is how it gets repaired.
703
- key: 'restore',
704
- label: _('website_backend.action.restore'),
705
- cell: (row) => (_jsx(RecordActions, { action: `${basePath}/${entry.id}/revisions/${row.id}/restore${locale}`, size: "compact", actions: [{ value: 'restore', label: _('website_backend.action.restore') }] })),
706
- },
707
- ],
708
- }),
709
- ]) }));
692
+ ]), body: stack([
693
+ ...(rows.length > 1
694
+ ? [revisionCompare(_, entry, rows, diff, basePath, locale, collection.frame)]
695
+ : []),
696
+ rows.length === 0
697
+ ? emptyState(_('website_backend.revisions.empty'), _('website_backend.revisions.emptyHint'))
698
+ : collectionTable(_, collection.table),
699
+ ]) }));
700
+ };
710
701
  /**
711
702
  * One preview link, and the way to withdraw all of them.
712
703
  *
@@ -766,47 +757,46 @@ export const previewScreen = (_, entry, minted, frame, basePath = '/admin/websit
766
757
  },
767
758
  ] }) }) }),
768
759
  ]) }));
769
- const siteSwitcher = (_, action, sites, siteId, locale) => (_jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `${action}${locale}`, method: "get", layout: "inline", fields: [
760
+ const siteSwitcher = (_, action, sites, siteId, locale, frame = {}) => (_jsx(RecordForm, { action: `${action}${locale}`, method: "get", hidden: collectionQueryKeep(new URL(frame.collectionUrl ?? `${action}${locale}`, 'http://collection.local'), ['site']), layout: "inline", fields: [
761
+ {
762
+ name: 'site',
763
+ label: _('website_backend.field.site'),
764
+ type: 'select',
765
+ value: siteId,
766
+ options: sites,
767
+ },
768
+ ], submit: _('website_backend.action.switchSite'), submitVariant: "secondary" }));
769
+ export const taxonomyScreen = (_, rows, sites, siteId, frame, locale = '') => {
770
+ const collection = prepareCollectionTable(_, frame, {
771
+ rows,
772
+ id: (row) => row.id,
773
+ rowHref: (row) => `/admin/website/taxonomies/${row.id}${locale}`,
774
+ columns: [
770
775
  {
771
- name: 'site',
772
- label: _('website_backend.field.site'),
773
- type: 'select',
774
- value: siteId,
775
- options: sites,
776
+ key: 'name',
777
+ label: _('website_backend.field.name'),
778
+ priority: 'primary',
779
+ cell: (row) => row.name,
776
780
  },
777
- ], submit: _('website_backend.action.switchSite'), submitVariant: "secondary" }) }));
778
- export const taxonomyScreen = (_, rows, sites, siteId, frame, locale = '') => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.taxonomies.title'), frame: frame, body: stack([
779
- siteSwitcher(_, '/admin/website/taxonomies', sites, siteId, locale),
780
- inline([
781
- linkButton({
782
- label: _('website_backend.action.newTerm'),
783
- href: `/admin/website/taxonomies/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
784
- variant: 'primary',
785
- }),
786
- ]),
787
- rows.length === 0
788
- ? emptyState(_('website_backend.taxonomies.empty'), _('website_backend.taxonomies.emptyHint'))
789
- : dataTable(_, {
790
- rows,
791
- id: (row) => row.id,
792
- rowHref: (row) => `/admin/website/taxonomies/${row.id}${locale}`,
793
- columns: [
794
- {
795
- key: 'name',
796
- label: _('website_backend.field.name'),
797
- priority: 'primary',
798
- cell: (row) => row.name,
799
- },
800
- {
801
- key: 'taxonomy',
802
- label: _('website_backend.field.taxonomy'),
803
- cell: (row) => code(row.taxonomy),
804
- },
805
- { key: 'slug', label: _('website_backend.field.slug'), cell: (row) => code(row.slug) },
806
- { key: 'parent', label: _('website_backend.field.parent'), cell: (row) => row.parentId ?? '—' },
807
- ],
808
- }),
809
- ]) }));
781
+ {
782
+ key: 'taxonomy',
783
+ label: _('website_backend.field.taxonomy'),
784
+ cell: (row) => code(row.taxonomy),
785
+ },
786
+ { key: 'slug', label: _('website_backend.field.slug'), cell: (row) => code(row.slug) },
787
+ { key: 'parent', label: _('website_backend.field.parent'), cell: (row) => row.parentId ?? '—' },
788
+ ],
789
+ }, { paginate: true, searchText: (row) => `${row.name} ${row.taxonomy} ${row.slug}` });
790
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.taxonomies.title'), frame: collection.frame, controls: siteSwitcher(_, '/admin/website/taxonomies', sites, siteId, locale, collection.frame), headerActions: linkButton({
791
+ label: _('website_backend.action.newTerm'),
792
+ href: `/admin/website/taxonomies/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
793
+ variant: 'primary',
794
+ }), body: stack([
795
+ rows.length === 0
796
+ ? emptyState(_('website_backend.taxonomies.empty'), _('website_backend.taxonomies.emptyHint'))
797
+ : collectionTable(_, collection.table),
798
+ ]) }));
799
+ };
810
800
  export const taxonomyFormScreen = (_, row, taxonomies, parents, frame, options = {}) => {
811
801
  const existing = !!row.id;
812
802
  return (_jsx(FormScreenFrame, { translator: _, title: existing ? String(row.name) : _('website_backend.taxonomies.newTitle'), frame: frame, body: stack([
@@ -852,37 +842,39 @@ export const taxonomyFormScreen = (_, row, taxonomies, parents, frame, options =
852
842
  : []),
853
843
  ]) }));
854
844
  };
855
- export const mediaScreen = (_, rows, sites, siteId, frame, locale = '') => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.media.title'), frame: frame, body: stack([
856
- siteSwitcher(_, '/admin/website/media', sites, siteId, locale),
857
- inline([
858
- linkButton({
859
- label: _('website_backend.action.newMedia'),
860
- href: `/admin/website/media/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
861
- variant: 'primary',
862
- }),
863
- ]),
864
- rows.length === 0
865
- ? emptyState(_('website_backend.media.empty'), _('website_backend.media.emptyHint'))
866
- : dataTable(_, {
867
- rows,
868
- id: (row) => row.id,
869
- rowHref: (row) => `/admin/website/media/${row.id}${locale}`,
870
- columns: [
871
- {
872
- key: 'attachment',
873
- label: _('website_backend.field.attachment'),
874
- priority: 'primary',
875
- cell: (row) => code(row.attachmentId),
876
- },
877
- { key: 'alt', label: _('website_backend.field.alt'), cell: (row) => row.alt ?? '—' },
878
- {
879
- key: 'size',
880
- label: _('website_backend.field.size'),
881
- cell: (row) => (row.width && row.height ? `${row.width} × ${row.height}` : '—'),
882
- },
883
- ],
884
- }),
885
- ]) }));
845
+ export const mediaScreen = (_, rows, sites, siteId, frame, locale = '') => {
846
+ const collection = prepareCollectionTable(_, frame, {
847
+ rows,
848
+ id: (row) => row.id,
849
+ rowHref: (row) => `/admin/website/media/${row.id}${locale}`,
850
+ columns: [
851
+ {
852
+ key: 'attachment',
853
+ label: _('website_backend.field.attachment'),
854
+ priority: 'primary',
855
+ cell: (row) => code(row.attachmentId),
856
+ },
857
+ { key: 'alt', label: _('website_backend.field.alt'), cell: (row) => row.alt ?? '—' },
858
+ {
859
+ key: 'size',
860
+ label: _('website_backend.field.size'),
861
+ cell: (row) => (row.width && row.height ? `${row.width} × ${row.height}` : '—'),
862
+ },
863
+ ],
864
+ }, {
865
+ paginate: true,
866
+ searchText: (row) => `${row.attachmentId} ${row.alt ?? ''} ${row.width ?? ''} ${row.height ?? ''}`,
867
+ });
868
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.media.title'), frame: collection.frame, controls: siteSwitcher(_, '/admin/website/media', sites, siteId, locale, collection.frame), headerActions: linkButton({
869
+ label: _('website_backend.action.newMedia'),
870
+ href: `/admin/website/media/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
871
+ variant: 'primary',
872
+ }), body: stack([
873
+ rows.length === 0
874
+ ? emptyState(_('website_backend.media.empty'), _('website_backend.media.emptyHint'))
875
+ : collectionTable(_, collection.table),
876
+ ]) }));
877
+ };
886
878
  export const mediaFormScreen = (_, row, frame, options = {}) => {
887
879
  const existing = !!row.id;
888
880
  const usage = options.usage ?? null;
@@ -1035,50 +1027,49 @@ const danglingNotice = (_, dangling) => dangling.length === 0
1035
1027
  .map((item) => `${item.label} (${item.href})`)
1036
1028
  .join(' · ')}` }),
1037
1029
  ];
1038
- export const menusScreen = (_, rows, sites, siteId, frame, locale = '', dangling = []) => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.menus.title'), frame: frame, body: stack([
1039
- siteSwitcher(_, '/admin/website/menus', sites, siteId, locale),
1040
- ...danglingNotice(_, dangling),
1041
- inline([
1042
- linkButton({
1043
- label: _('website_backend.action.newMenuItem'),
1044
- href: `/admin/website/menus/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
1045
- variant: 'primary',
1046
- }),
1047
- ]),
1048
- rows.length === 0
1049
- ? emptyState(_('website_backend.menus.empty'), _('website_backend.menus.emptyHint'))
1050
- : dataTable(_, {
1051
- rows,
1052
- id: (row) => row.id,
1053
- rowHref: (row) => `/admin/website/menus/${row.id}?site=${encodeURIComponent(row.siteId)}${locale ? `&${locale.slice(1)}` : ''}`,
1054
- columns: [
1055
- {
1056
- key: 'label',
1057
- label: _('website_backend.field.label'),
1058
- priority: 'primary',
1059
- cell: (row) => row.label,
1060
- },
1061
- { key: 'href', label: _('website_backend.field.href'), cell: (row) => code(row.href) },
1062
- {
1063
- key: 'position',
1064
- label: _('website_backend.field.position'),
1065
- kind: 'number',
1066
- cell: (row) => String(row.position),
1067
- },
1068
- {
1069
- // Buttons, so the order is editable from a keyboard without
1070
- // anything having to be dragged - and without an editor doing
1071
- // arithmetic in the position box, which was the only way.
1072
- key: 'move',
1073
- label: _('website_backend.menus.move'),
1074
- cell: (row) => (_jsx(RecordActions, { action: `/admin/website/menus/${row.id}/move${locale}`, hidden: { site: row.siteId }, size: "compact", actions: [
1075
- { value: 'up', label: _('website_backend.menus.up') },
1076
- { value: 'down', label: _('website_backend.menus.down') },
1077
- ] })),
1078
- },
1079
- ],
1080
- }),
1081
- ]) }));
1030
+ export const menusScreen = (_, rows, sites, siteId, frame, locale = '', dangling = []) => {
1031
+ const collection = prepareCollectionTable(_, frame, {
1032
+ rows,
1033
+ id: (row) => row.id,
1034
+ rowHref: (row) => `/admin/website/menus/${row.id}?site=${encodeURIComponent(row.siteId)}${locale ? `&${locale.slice(1)}` : ''}`,
1035
+ columns: [
1036
+ {
1037
+ key: 'label',
1038
+ label: _('website_backend.field.label'),
1039
+ priority: 'primary',
1040
+ cell: (row) => row.label,
1041
+ },
1042
+ { key: 'href', label: _('website_backend.field.href'), cell: (row) => code(row.href) },
1043
+ {
1044
+ key: 'position',
1045
+ label: _('website_backend.field.position'),
1046
+ kind: 'number',
1047
+ cell: (row) => String(row.position),
1048
+ },
1049
+ {
1050
+ // Buttons, so the order is editable from a keyboard without
1051
+ // anything having to be dragged - and without an editor doing
1052
+ // arithmetic in the position box, which was the only way.
1053
+ key: 'move',
1054
+ label: _('website_backend.menus.move'),
1055
+ cell: (row) => (_jsx(RecordActions, { action: `/admin/website/menus/${row.id}/move${locale}`, hidden: { site: row.siteId }, size: "compact", actions: [
1056
+ { value: 'up', label: _('website_backend.menus.up') },
1057
+ { value: 'down', label: _('website_backend.menus.down') },
1058
+ ] })),
1059
+ },
1060
+ ],
1061
+ }, { paginate: true, searchText: (row) => `${row.label} ${row.href}` });
1062
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.menus.title'), frame: collection.frame, controls: siteSwitcher(_, '/admin/website/menus', sites, siteId, locale, collection.frame), headerActions: linkButton({
1063
+ label: _('website_backend.action.newMenuItem'),
1064
+ href: `/admin/website/menus/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
1065
+ variant: 'primary',
1066
+ }), body: stack([
1067
+ ...danglingNotice(_, dangling),
1068
+ rows.length === 0
1069
+ ? emptyState(_('website_backend.menus.empty'), _('website_backend.menus.emptyHint'))
1070
+ : collectionTable(_, collection.table),
1071
+ ]) }));
1072
+ };
1082
1073
  export const menuFormScreen = (_, row, parents, frame, options = {}) => {
1083
1074
  const existing = !!row.id;
1084
1075
  return (_jsx(FormScreenFrame, { translator: _, title: existing ? String(row.label) : _('website_backend.menus.newTitle'), frame: frame, body: stack([
@@ -1120,55 +1111,55 @@ export const menuFormScreen = (_, row, parents, frame, options = {}) => {
1120
1111
  : []),
1121
1112
  ]) }));
1122
1113
  };
1123
- export const formsScreen = (_, rows, siteId, frame, locale = '', active = 'all') => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.forms.title'), frame: frame, body: stack([
1124
- activeFilter(_, (state) => `/admin/website/forms?site=${encodeURIComponent(siteId ?? '')}&state=${state}${locale ? `&${locale.slice(1)}` : ''}`, active),
1125
- inline([
1126
- linkButton({
1127
- label: _('website_backend.action.newForm'),
1128
- href: `/admin/website/forms/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
1129
- variant: 'primary',
1130
- }),
1131
- ]),
1132
- rows.length === 0
1133
- ? emptyState(_('website_backend.forms.empty'), _('website_backend.forms.emptyHint'))
1134
- : dataTable(_, {
1135
- rows,
1136
- id: (row) => row.id,
1137
- // The row opens the form, the way a row opens the record on every
1138
- // other list here. Submissions were the row's destination only
1139
- // because there was nothing else to open.
1140
- rowHref: (row) => `/admin/website/forms/${row.id}${locale}`,
1141
- columns: [
1142
- {
1143
- key: 'name',
1144
- label: _('website_backend.field.name'),
1145
- priority: 'primary',
1146
- cell: (row) => row.name,
1147
- },
1148
- {
1149
- key: 'status',
1150
- label: _('website_backend.field.status'),
1151
- cell: (row) => badge(row.active ? _('website_backend.state.active') : _('website_backend.state.inactive'), row.active ? 'positive' : 'neutral'),
1152
- },
1153
- {
1154
- key: 'retention',
1155
- label: _('website_backend.field.retentionDays'),
1156
- cell: (row) => row.retentionDays == null
1157
- ? badge(_('website_backend.state.kept'), 'neutral')
1158
- : String(row.retentionDays),
1159
- },
1160
- {
1161
- key: 'submissions',
1162
- label: _('website_backend.submissions.title'),
1163
- cell: (row) => linkButton({
1164
- label: _('website_backend.action.open'),
1165
- href: `/admin/website/forms/${row.id}/submissions${locale}`,
1166
- size: 'compact',
1167
- }),
1168
- },
1169
- ],
1170
- }),
1171
- ]) }));
1114
+ export const formsScreen = (_, rows, siteId, frame, locale = '', active = 'all') => {
1115
+ const collection = prepareCollectionTable(_, frame, {
1116
+ rows,
1117
+ id: (row) => row.id,
1118
+ // The row opens the form, the way a row opens the record on every
1119
+ // other list here. Submissions were the row's destination only
1120
+ // because there was nothing else to open.
1121
+ rowHref: (row) => `/admin/website/forms/${row.id}${locale}`,
1122
+ columns: [
1123
+ {
1124
+ key: 'name',
1125
+ label: _('website_backend.field.name'),
1126
+ priority: 'primary',
1127
+ cell: (row) => row.name,
1128
+ },
1129
+ {
1130
+ key: 'status',
1131
+ label: _('website_backend.field.status'),
1132
+ cell: (row) => badge(row.active ? _('website_backend.state.active') : _('website_backend.state.inactive'), row.active ? 'positive' : 'neutral'),
1133
+ },
1134
+ {
1135
+ key: 'retention',
1136
+ label: _('website_backend.field.retentionDays'),
1137
+ cell: (row) => row.retentionDays == null
1138
+ ? badge(_('website_backend.state.kept'), 'neutral')
1139
+ : String(row.retentionDays),
1140
+ },
1141
+ {
1142
+ key: 'submissions',
1143
+ label: _('website_backend.submissions.title'),
1144
+ cell: (row) => linkButton({
1145
+ label: _('website_backend.action.open'),
1146
+ href: `/admin/website/forms/${row.id}/submissions${locale}`,
1147
+ size: 'compact',
1148
+ }),
1149
+ },
1150
+ ],
1151
+ }, { paginate: true, searchText: (row) => `${row.name}` });
1152
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.forms.title'), frame: collection.frame, controls: activeFilter(_, (state) => withParam(new URL(frame.collectionUrl ??
1153
+ `/admin/website/forms?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`, 'http://collection.local'), 'state', state), active), headerActions: linkButton({
1154
+ label: _('website_backend.action.newForm'),
1155
+ href: `/admin/website/forms/new?site=${encodeURIComponent(siteId ?? '')}${locale ? `&${locale.slice(1)}` : ''}`,
1156
+ variant: 'primary',
1157
+ }), body: stack([
1158
+ rows.length === 0
1159
+ ? emptyState(_('website_backend.forms.empty'), _('website_backend.forms.emptyHint'))
1160
+ : collectionTable(_, collection.table),
1161
+ ]) }));
1162
+ };
1172
1163
  /**
1173
1164
  * One editor, for a new form and an existing one.
1174
1165
  *
@@ -1366,13 +1357,52 @@ const submissionActions = (_, formId, fields, retentionDays, locale, status = 'a
1366
1357
  ], submit: _('website_backend.submissions.purge'), submitVariant: "secondary" }) }) }),
1367
1358
  ]),
1368
1359
  ];
1369
- export const submissionsScreen = (_, rows, frame, options = {}) => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.submissions.title'), frame: frame, footer: options.pager ? pagerBar(_, options.pager) : null, body: stack([
1370
- // `listSubmissions` and `countSubmissions` have both taken this since
1371
- // they were written. Without it a form with a year of entries is read
1372
- // thirty at a time and the erased rows sit among the live ones.
1373
- ...(options.formId
1374
- ? [
1375
- _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `/admin/website/forms/${options.formId}/submissions${options.locale ?? ''}`, method: "get", layout: "inline", fields: [
1360
+ export const submissionsScreen = (_, rows, frame, options = {}) => {
1361
+ const collection = prepareCollectionTable(_, { ...frame, chrome: { ...frame.chrome, pager: options.pager ?? frame.chrome?.pager } }, {
1362
+ rows,
1363
+ id: (row) => row.id,
1364
+ rowHref: (row) => `/admin/website/forms/${row.formId}/submissions/${row.id}`,
1365
+ columns: [
1366
+ {
1367
+ key: 'created',
1368
+ label: _('website_backend.field.createdAt'),
1369
+ kind: 'date',
1370
+ priority: 'primary',
1371
+ cell: (row) => row.createdAt,
1372
+ },
1373
+ {
1374
+ key: 'summary',
1375
+ label: _('website_backend.field.summary'),
1376
+ cell: (row) => row.purgedAt
1377
+ ? badge(_('website_backend.state.purged'), 'neutral')
1378
+ : Object.keys(row.summary ?? {}).length
1379
+ ? code(JSON.stringify(row.summary))
1380
+ : badge(_('website_backend.state.noPreview'), 'neutral'),
1381
+ },
1382
+ {
1383
+ key: 'hold',
1384
+ label: _('website_backend.field.hold'),
1385
+ cell: (row) => row.held
1386
+ ? badge(row.holdReason ?? _('website_backend.state.yes'), 'warning')
1387
+ : badge(_('website_backend.state.no'), 'neutral'),
1388
+ },
1389
+ {
1390
+ key: 'consent',
1391
+ label: _('website_backend.field.consent'),
1392
+ cell: (row) => badge(row.consent ? _('website_backend.state.yes') : _('website_backend.state.no'), row.consent ? 'positive' : 'neutral'),
1393
+ },
1394
+ {
1395
+ key: 'status',
1396
+ label: _('website_backend.field.status'),
1397
+ cell: (row) => badge(row.status, 'info'),
1398
+ },
1399
+ ],
1400
+ }, { paginate: false });
1401
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.submissions.title'), frame: collection.frame, controls: stack([
1402
+ ...(options.formId
1403
+ ? [
1404
+ _jsx(RecordForm, { action: `/admin/website/forms/${options.formId}/submissions${options.locale ?? ''}`, method: "get", hidden: collectionQueryKeep(new URL(frame.collectionUrl ??
1405
+ `/admin/website/forms/${options.formId}/submissions${options.locale ?? ''}`, 'http://collection.local'), ['status']), layout: "inline", fields: [
1376
1406
  {
1377
1407
  name: 'status',
1378
1408
  label: _('website_backend.field.status'),
@@ -1384,55 +1414,21 @@ export const submissionsScreen = (_, rows, frame, options = {}) => (_jsx(ListScr
1384
1414
  { value: 'purged', label: _('website_backend.state.purged') },
1385
1415
  ],
1386
1416
  },
1387
- ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }) }),
1388
- ]
1389
- : []),
1390
- ...(options.formId
1391
- ? submissionActions(_, options.formId, options.fields ?? [], options.retentionDays ?? null, options.locale ?? '', options.status ?? 'all')
1392
- : []),
1393
- rows.length === 0
1394
- ? emptyState(_('website_backend.submissions.empty'), _('website_backend.submissions.emptyHint'))
1395
- : dataTable(_, {
1396
- rows,
1397
- id: (row) => row.id,
1398
- rowHref: (row) => `/admin/website/forms/${row.formId}/submissions/${row.id}`,
1399
- columns: [
1400
- {
1401
- key: 'created',
1402
- label: _('website_backend.field.createdAt'),
1403
- kind: 'date',
1404
- priority: 'primary',
1405
- cell: (row) => row.createdAt,
1406
- },
1407
- {
1408
- key: 'summary',
1409
- label: _('website_backend.field.summary'),
1410
- cell: (row) => row.purgedAt
1411
- ? badge(_('website_backend.state.purged'), 'neutral')
1412
- : Object.keys(row.summary ?? {}).length
1413
- ? code(JSON.stringify(row.summary))
1414
- : badge(_('website_backend.state.noPreview'), 'neutral'),
1415
- },
1416
- {
1417
- key: 'hold',
1418
- label: _('website_backend.field.hold'),
1419
- cell: (row) => row.held
1420
- ? badge(row.holdReason ?? _('website_backend.state.yes'), 'warning')
1421
- : badge(_('website_backend.state.no'), 'neutral'),
1422
- },
1423
- {
1424
- key: 'consent',
1425
- label: _('website_backend.field.consent'),
1426
- cell: (row) => badge(row.consent ? _('website_backend.state.yes') : _('website_backend.state.no'), row.consent ? 'positive' : 'neutral'),
1427
- },
1428
- {
1429
- key: 'status',
1430
- label: _('website_backend.field.status'),
1431
- cell: (row) => badge(row.status, 'info'),
1432
- },
1433
- ],
1434
- }),
1435
- ]) }));
1417
+ ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }),
1418
+ ]
1419
+ : []),
1420
+ ]), body: stack([
1421
+ // `listSubmissions` and `countSubmissions` have both taken this since
1422
+ // they were written. Without it a form with a year of entries is read
1423
+ // thirty at a time and the erased rows sit among the live ones.
1424
+ ...(options.formId
1425
+ ? submissionActions(_, options.formId, options.fields ?? [], options.retentionDays ?? null, options.locale ?? '', options.status ?? 'all')
1426
+ : []),
1427
+ rows.length === 0
1428
+ ? emptyState(_('website_backend.submissions.empty'), _('website_backend.submissions.emptyHint'))
1429
+ : collectionTable(_, collection.table),
1430
+ ]) }));
1431
+ };
1436
1432
  /** The four site roles the access layer recognises, in the order they widen. */
1437
1433
  const SITE_ROLES = ['contributor', 'author', 'editor', 'administrator'];
1438
1434
  /**
@@ -1442,62 +1438,64 @@ const SITE_ROLES = ['contributor', 'author', 'editor', 'administrator'];
1442
1438
  * changed by calling the function directly. A permission that can be granted
1443
1439
  * and never reviewed is the kind that quietly outlives the reason for it.
1444
1440
  */
1445
- export const siteMembersScreen = (_, site, rows, frame, options = {}) => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.members.title'), frame: frame, body: stack([
1446
- inline([
1441
+ export const siteMembersScreen = (_, site, rows, frame, options = {}) => {
1442
+ const collection = prepareCollectionTable(_, frame, {
1443
+ rows,
1444
+ id: (row) => row.id,
1445
+ columns: [
1446
+ {
1447
+ key: 'user',
1448
+ label: _('website_backend.members.user'),
1449
+ priority: 'primary',
1450
+ cell: (row) => row.userId,
1451
+ },
1452
+ {
1453
+ key: 'role',
1454
+ label: _('website_backend.members.role'),
1455
+ cell: (row) => badge(_(`website_backend.role.${row.role}`), 'info'),
1456
+ },
1457
+ {
1458
+ key: 'remove',
1459
+ label: _('website_backend.action.remove'),
1460
+ cell: (row) => (_jsx(RecordActions, { action: `/admin/website/sites/${site.id}/members/${row.id}/remove${options.locale ?? ''}`, size: "compact", actions: [
1461
+ {
1462
+ value: 'remove',
1463
+ label: _('website_backend.action.remove'),
1464
+ variant: 'destructive',
1465
+ },
1466
+ ] })),
1467
+ },
1468
+ ],
1469
+ }, { paginate: true });
1470
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.members.title'), frame: collection.frame, actions: inline([
1447
1471
  linkButton({
1448
1472
  label: _('website_backend.action.backToSite'),
1449
1473
  href: `/admin/website/sites/${site.id}${options.locale ?? ''}`,
1450
1474
  }),
1451
- ]),
1452
- _jsx(Section, { title: _('website_backend.members.add'), description: _('website_backend.members.addHint'), body: _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `/admin/website/sites/${site.id}/members${options.locale ?? ''}`, layout: "inline", fields: [
1453
- {
1454
- name: 'userId',
1455
- label: _('website_backend.members.user'),
1456
- value: options.values?.userId,
1457
- required: true,
1458
- },
1459
- {
1460
- name: 'role',
1461
- label: _('website_backend.members.role'),
1462
- type: 'select',
1463
- value: options.values?.role ?? 'editor',
1464
- options: SITE_ROLES.map((role) => ({
1465
- value: role,
1466
- label: _(`website_backend.role.${role}`),
1467
- })),
1468
- },
1469
- ], submit: _('website_backend.action.save'), submitVariant: "primary", errors: options.errors }) }) }),
1470
- rows.length === 0
1471
- ? emptyState(_('website_backend.members.empty'), _('website_backend.members.emptyHint'))
1472
- : dataTable(_, {
1473
- rows,
1474
- id: (row) => row.id,
1475
- columns: [
1476
- {
1477
- key: 'user',
1478
- label: _('website_backend.members.user'),
1479
- priority: 'primary',
1480
- cell: (row) => row.userId,
1481
- },
1482
- {
1483
- key: 'role',
1484
- label: _('website_backend.members.role'),
1485
- cell: (row) => badge(_(`website_backend.role.${row.role}`), 'info'),
1486
- },
1487
- {
1488
- key: 'remove',
1489
- label: _('website_backend.action.remove'),
1490
- cell: (row) => (_jsx(RecordActions, { action: `/admin/website/sites/${site.id}/members/${row.id}/remove${options.locale ?? ''}`, size: "compact", actions: [
1491
- {
1492
- value: 'remove',
1493
- label: _('website_backend.action.remove'),
1494
- variant: 'destructive',
1495
- },
1496
- ] })),
1497
- },
1498
- ],
1499
- }),
1500
- ]) }));
1475
+ ]), body: stack([
1476
+ _jsx(Section, { title: _('website_backend.members.add'), description: _('website_backend.members.addHint'), body: _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `/admin/website/sites/${site.id}/members${options.locale ?? ''}`, layout: "inline", fields: [
1477
+ {
1478
+ name: 'userId',
1479
+ label: _('website_backend.members.user'),
1480
+ value: options.values?.userId,
1481
+ required: true,
1482
+ },
1483
+ {
1484
+ name: 'role',
1485
+ label: _('website_backend.members.role'),
1486
+ type: 'select',
1487
+ value: options.values?.role ?? 'editor',
1488
+ options: SITE_ROLES.map((role) => ({
1489
+ value: role,
1490
+ label: _(`website_backend.role.${role}`),
1491
+ })),
1492
+ },
1493
+ ], submit: _('website_backend.action.save'), submitVariant: "primary", errors: options.errors }) }) }),
1494
+ rows.length === 0
1495
+ ? emptyState(_('website_backend.members.empty'), _('website_backend.members.emptyHint'))
1496
+ : collectionTable(_, collection.table),
1497
+ ]) }));
1498
+ };
1501
1499
  /**
1502
1500
  * Which hosts answer for this site, and which one the others defer to.
1503
1501
  *
@@ -1523,21 +1521,72 @@ export const siteDomainsScreen = (_, site, rows, frame, options = {}) => {
1523
1521
  size: 'compact',
1524
1522
  }),
1525
1523
  ]) })));
1526
- return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.domains.title'), frame: frame, body: stack([
1527
- inline([
1528
- linkButton({
1529
- label: _('website_backend.action.backToSite'),
1530
- href: `/admin/website/sites/${site.id}${locale}`,
1524
+ const collection = prepareCollectionTable(_, frame, {
1525
+ rows: options.tableRows ?? rows,
1526
+ id: (row) => row.id,
1527
+ columns: [
1528
+ {
1529
+ key: 'host',
1530
+ label: _('website_backend.domains.host'),
1531
+ priority: 'primary',
1532
+ cell: (row) => row.host,
1533
+ },
1534
+ {
1535
+ key: 'evidence',
1536
+ label: _('website_backend.domains.evidence'),
1537
+ kind: 'status',
1538
+ cell: () => badge(_('website_backend.domains.pendingEvidence'), 'warning'),
1539
+ },
1540
+ {
1541
+ key: 'tls',
1542
+ label: _('website_backend.domains.tls'),
1543
+ kind: 'status',
1544
+ cell: () => badge(_('website_backend.domains.pendingEvidence'), 'warning'),
1545
+ },
1546
+ {
1547
+ key: 'primary',
1548
+ label: _('website_backend.domains.primary'),
1549
+ cell: (row) => row.primary
1550
+ ? badge(_('website_backend.state.yes'), 'positive')
1551
+ : badge(_('website_backend.state.no'), 'neutral'),
1552
+ },
1553
+ {
1554
+ key: 'edit',
1555
+ label: _('website_backend.action.edit'),
1556
+ cell: (row) => linkButton({
1557
+ label: _('website_backend.action.edit'),
1558
+ href: `/admin/website/sites/${site.id}/domains?edit=${encodeURIComponent(row.id)}${locale ? `&${locale.slice(1)}` : ''}`,
1559
+ size: 'compact',
1531
1560
  }),
1532
- ...(editing
1533
- ? [
1534
- linkButton({
1535
- label: _('website_backend.action.cancel'),
1536
- href: `/admin/website/sites/${site.id}/domains${locale}`,
1537
- }),
1538
- ]
1539
- : []),
1540
- ]),
1561
+ },
1562
+ {
1563
+ key: 'remove',
1564
+ label: _('website_backend.action.remove'),
1565
+ cell: (row) => (_jsx(RecordActions, { action: `/admin/website/sites/${site.id}/domains/${row.id}/remove${locale}`, size: "compact", actions: [
1566
+ {
1567
+ value: 'remove',
1568
+ label: _('website_backend.action.remove'),
1569
+ variant: 'destructive',
1570
+ },
1571
+ ] })),
1572
+ },
1573
+ ],
1574
+ responsive: 'stack',
1575
+ }, { paginate: true });
1576
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.domains.title'), frame: collection.frame, actions: inline([
1577
+ linkButton({
1578
+ label: _('website_backend.action.backToSite'),
1579
+ href: `/admin/website/sites/${site.id}${locale}`,
1580
+ }),
1581
+ ...(editing
1582
+ ? [
1583
+ linkButton({
1584
+ label: _('website_backend.action.cancel'),
1585
+ href: `/admin/website/sites/${site.id}/domains${locale}`,
1586
+ }),
1587
+ ]
1588
+ : []),
1589
+ ]), body: stack([
1541
1590
  rows.length === 0
1542
1591
  ? Notice({
1543
1592
  tone: 'warning',
@@ -1605,58 +1654,7 @@ export const siteDomainsScreen = (_, site, rows, frame, options = {}) => {
1605
1654
  }),
1606
1655
  ]) }),
1607
1656
  ], 'loose'),
1608
- rows.length === 0 ? (_jsx(_Fragment, {})) : (dataTable(_, {
1609
- rows,
1610
- id: (row) => row.id,
1611
- columns: [
1612
- {
1613
- key: 'host',
1614
- label: _('website_backend.domains.host'),
1615
- priority: 'primary',
1616
- cell: (row) => row.host,
1617
- },
1618
- {
1619
- key: 'evidence',
1620
- label: _('website_backend.domains.evidence'),
1621
- kind: 'status',
1622
- cell: () => badge(_('website_backend.domains.pendingEvidence'), 'warning'),
1623
- },
1624
- {
1625
- key: 'tls',
1626
- label: _('website_backend.domains.tls'),
1627
- kind: 'status',
1628
- cell: () => badge(_('website_backend.domains.pendingEvidence'), 'warning'),
1629
- },
1630
- {
1631
- key: 'primary',
1632
- label: _('website_backend.domains.primary'),
1633
- cell: (row) => row.primary
1634
- ? badge(_('website_backend.state.yes'), 'positive')
1635
- : badge(_('website_backend.state.no'), 'neutral'),
1636
- },
1637
- {
1638
- key: 'edit',
1639
- label: _('website_backend.action.edit'),
1640
- cell: (row) => linkButton({
1641
- label: _('website_backend.action.edit'),
1642
- href: `/admin/website/sites/${site.id}/domains?edit=${encodeURIComponent(row.id)}${locale ? `&${locale.slice(1)}` : ''}`,
1643
- size: 'compact',
1644
- }),
1645
- },
1646
- {
1647
- key: 'remove',
1648
- label: _('website_backend.action.remove'),
1649
- cell: (row) => (_jsx(RecordActions, { action: `/admin/website/sites/${site.id}/domains/${row.id}/remove${locale}`, size: "compact", actions: [
1650
- {
1651
- value: 'remove',
1652
- label: _('website_backend.action.remove'),
1653
- variant: 'destructive',
1654
- },
1655
- ] })),
1656
- },
1657
- ],
1658
- responsive: 'stack',
1659
- })),
1657
+ rows.length === 0 ? null : collectionTable(_, collection.table),
1660
1658
  ]) }));
1661
1659
  };
1662
1660
  /**
@@ -1669,14 +1667,77 @@ export const siteDomainsScreen = (_, site, rows, frame, options = {}) => {
1669
1667
  export const redirectsScreen = (_, rows, sites, siteId, frame, options = {}) => {
1670
1668
  const editing = options.editing ?? null;
1671
1669
  const values = options.values ?? {};
1670
+ // Two callers with two questions: the state links set `state`, the row's
1671
+ // edit button sets `edit`. Forwarding only one of them left the edit button
1672
+ // pointing back at the plain list.
1672
1673
  const query = (params) => {
1673
- const search = new URLSearchParams({ site: siteId ?? '', ...params });
1674
- if (options.locale)
1675
- search.set('lang', options.locale.slice('?lang='.length));
1676
- return `/admin/website/redirects?${search.toString()}`;
1674
+ const url = new URL(frame.collectionUrl ?? `/admin/website/redirects${options.locale ?? ''}`, 'http://collection.local');
1675
+ url.searchParams.set('site', siteId ?? '');
1676
+ if (params.edit)
1677
+ return withParam(url, 'edit', params.edit, false);
1678
+ url.searchParams.delete('edit');
1679
+ return withParam(url, 'state', params.state ?? null);
1677
1680
  };
1678
- return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.redirects.title'), frame: frame, body: stack([
1679
- siteSwitcher(_, '/admin/website/redirects', sites, siteId, options.locale ?? ''),
1681
+ const collection = prepareCollectionTable(_, frame, {
1682
+ rows,
1683
+ id: (row) => row.id,
1684
+ columns: [
1685
+ {
1686
+ key: 'from',
1687
+ label: _('website_backend.redirects.from'),
1688
+ priority: 'primary',
1689
+ cell: (row) => row.fromPath,
1690
+ },
1691
+ { key: 'to', label: _('website_backend.redirects.to'), cell: (row) => row.toPath },
1692
+ {
1693
+ key: 'kind',
1694
+ label: _('website_backend.redirects.permanent'),
1695
+ cell: (row) => badge(row.permanent ? _('website_backend.redirects.p301') : _('website_backend.redirects.p302'), row.permanent ? 'info' : 'neutral'),
1696
+ },
1697
+ {
1698
+ key: 'status',
1699
+ label: _('website_backend.field.status'),
1700
+ cell: (row) => badge(row.active ? _('website_backend.state.active') : _('website_backend.state.inactive'), row.active ? 'positive' : 'neutral'),
1701
+ },
1702
+ {
1703
+ key: 'edit',
1704
+ label: _('website_backend.action.edit'),
1705
+ cell: (row) => linkButton({
1706
+ label: _('website_backend.action.edit'),
1707
+ href: query({ edit: row.id }),
1708
+ size: 'compact',
1709
+ }),
1710
+ },
1711
+ {
1712
+ // Off rather than deleted: the unique index holds one row per
1713
+ // `fromPath`, so deleting to "free" the path and deactivating
1714
+ // to stop it are the same reversible act, and one of them
1715
+ // keeps the history of what that address used to do.
1716
+ key: 'state',
1717
+ label: _('website_backend.redirects.state'),
1718
+ cell: (row) => (_jsx(RecordActions, { action: `/admin/website/redirects/${row.id}/state${options.locale ?? ''}`, size: "compact", actions: [
1719
+ row.active
1720
+ ? { value: 'deactivate', label: _('website_backend.action.deactivate') }
1721
+ : { value: 'activate', label: _('website_backend.action.activate') },
1722
+ ] })),
1723
+ },
1724
+ ],
1725
+ }, { paginate: true, searchText: (row) => `${row.fromPath} ${row.toPath}` });
1726
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.redirects.title'), frame: collection.frame, controls: stack([
1727
+ siteSwitcher(_, '/admin/website/redirects', sites, siteId, options.locale ?? '', collection.frame),
1728
+ ...(siteId
1729
+ ? [
1730
+ inline([
1731
+ linkButton({ label: _('website_backend.redirects.all'), href: query({}) }),
1732
+ linkButton({ label: _('website_backend.state.active'), href: query({ state: 'active' }) }),
1733
+ linkButton({
1734
+ label: _('website_backend.state.inactive'),
1735
+ href: query({ state: 'inactive' }),
1736
+ }),
1737
+ ]),
1738
+ ]
1739
+ : []),
1740
+ ]), body: stack([
1680
1741
  ...(siteId
1681
1742
  ? [
1682
1743
  _jsx(Section, { title: editing ? _('website_backend.redirects.edit') : _('website_backend.redirects.add'), description: _('website_backend.redirects.addHint'), body: _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `/admin/website/redirects${editing ? `/${editing.id}` : ''}${options.locale ?? ''}`, hidden: { siteId }, layout: "inline", fields: [
@@ -1705,70 +1766,13 @@ export const redirectsScreen = (_, rows, sites, siteId, frame, options = {}) =>
1705
1766
  // The list already had a column for a state nothing could produce:
1706
1767
  // the route wrote `active: true` every time, so every row read
1707
1768
  // "active" for ever and the off switch on the contract was unreachable.
1708
- inline([
1709
- linkButton({ label: _('website_backend.redirects.all'), href: query({}) }),
1710
- linkButton({
1711
- label: _('website_backend.state.active'),
1712
- href: query({ state: 'active' }),
1713
- }),
1714
- linkButton({
1715
- label: _('website_backend.state.inactive'),
1716
- href: query({ state: 'inactive' }),
1717
- }),
1718
- ]),
1719
1769
  ]
1720
1770
  : []),
1721
1771
  !siteId
1722
1772
  ? emptyState(_('website_backend.content.noSite'), _('website_backend.content.noSiteHint'))
1723
1773
  : rows.length === 0
1724
1774
  ? emptyState(_('website_backend.redirects.empty'), _('website_backend.redirects.emptyHint'))
1725
- : dataTable(_, {
1726
- rows,
1727
- id: (row) => row.id,
1728
- columns: [
1729
- {
1730
- key: 'from',
1731
- label: _('website_backend.redirects.from'),
1732
- priority: 'primary',
1733
- cell: (row) => row.fromPath,
1734
- },
1735
- { key: 'to', label: _('website_backend.redirects.to'), cell: (row) => row.toPath },
1736
- {
1737
- key: 'kind',
1738
- label: _('website_backend.redirects.permanent'),
1739
- cell: (row) => badge(row.permanent
1740
- ? _('website_backend.redirects.p301')
1741
- : _('website_backend.redirects.p302'), row.permanent ? 'info' : 'neutral'),
1742
- },
1743
- {
1744
- key: 'status',
1745
- label: _('website_backend.field.status'),
1746
- cell: (row) => badge(row.active ? _('website_backend.state.active') : _('website_backend.state.inactive'), row.active ? 'positive' : 'neutral'),
1747
- },
1748
- {
1749
- key: 'edit',
1750
- label: _('website_backend.action.edit'),
1751
- cell: (row) => linkButton({
1752
- label: _('website_backend.action.edit'),
1753
- href: query({ edit: row.id }),
1754
- size: 'compact',
1755
- }),
1756
- },
1757
- {
1758
- // Off rather than deleted: the unique index holds one row per
1759
- // `fromPath`, so deleting to "free" the path and deactivating
1760
- // to stop it are the same reversible act, and one of them
1761
- // keeps the history of what that address used to do.
1762
- key: 'state',
1763
- label: _('website_backend.redirects.state'),
1764
- cell: (row) => (_jsx(RecordActions, { action: `/admin/website/redirects/${row.id}/state${options.locale ?? ''}`, size: "compact", actions: [
1765
- row.active
1766
- ? { value: 'deactivate', label: _('website_backend.action.deactivate') }
1767
- : { value: 'activate', label: _('website_backend.action.activate') },
1768
- ] })),
1769
- },
1770
- ],
1771
- }),
1775
+ : collectionTable(_, collection.table),
1772
1776
  ]) }));
1773
1777
  };
1774
1778
  /**
@@ -1819,86 +1823,100 @@ const publicationTone = (state) => state === 'active' ? 'positive' : state === '
1819
1823
  * only by an agent, so the atomic path existed and the one-page-at-a-time path
1820
1824
  * was the only one a person could take.
1821
1825
  */
1822
- export const publicationsScreen = (_, rows, entries, sites, siteId, frame, options = {}) => (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.publications.title'), frame: frame, body: stack([
1823
- siteSwitcher(_, '/admin/website/publications', sites, siteId, options.locale ?? ''),
1824
- // Superseded sets accumulate one per activation and are the majority of
1825
- // the list within a week, which buries the two rows anybody came to see.
1826
- ...(siteId
1827
- ? [
1828
- _jsx(Surface, { padding: "compact", body: _jsx(RecordForm, { action: `/admin/website/publications${options.locale ?? ''}`, method: "get", layout: "inline", hidden: { site: siteId }, fields: [
1829
- {
1830
- name: 'state',
1831
- label: _('website_backend.field.status'),
1832
- type: 'select',
1833
- value: options.state ?? 'all',
1834
- options: [
1835
- { value: 'all', label: _('website_backend.state.all') },
1836
- { value: 'prepared', label: _('website_backend.pubstate.prepared') },
1837
- { value: 'active', label: _('website_backend.pubstate.active') },
1838
- { value: 'superseded', label: _('website_backend.pubstate.superseded') },
1839
- ],
1840
- },
1841
- ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }) }),
1842
- ]
1843
- : []),
1844
- ...(options.notice
1845
- ? [_jsx(Notice, { tone: "positive", title: _('website_backend.publications.done'), message: options.notice })]
1846
- : []),
1847
- ...(siteId && entries.length
1848
- ? [
1849
- _jsx(Section, { title: _('website_backend.publications.prepare'), description: _('website_backend.publications.prepareHint'), body: _jsx(Surface, { body: _jsx(RecordForm, { action: `/admin/website/publications${options.locale ?? ''}`, hidden: { siteId }, fields: [
1850
- {
1851
- name: 'entryIds',
1852
- label: _('website_backend.publications.entries'),
1853
- type: 'textarea',
1854
- value: entries.map((entry) => entry.id).join('\n'),
1855
- help: _('website_backend.publications.entriesHint'),
1856
- span: 'full',
1857
- required: true,
1858
- },
1859
- ], submit: _('website_backend.publications.prepare'), submitVariant: "primary", errors: options.errors }) }) }),
1860
- ]
1861
- : []),
1862
- !siteId
1863
- ? emptyState(_('website_backend.content.noSite'), _('website_backend.content.noSiteHint'))
1864
- : rows.length === 0
1865
- ? emptyState(_('website_backend.publications.empty'), _('website_backend.publications.emptyHint'))
1866
- : dataTable(_, {
1867
- rows,
1868
- id: (row) => row.id,
1869
- columns: [
1870
- {
1871
- key: 'prepared',
1872
- label: _('website_backend.publications.preparedAt'),
1873
- kind: 'date',
1874
- priority: 'primary',
1875
- cell: (row) => row.preparedAt,
1876
- },
1877
- {
1878
- key: 'state',
1879
- label: _('website_backend.field.status'),
1880
- cell: (row) => badge(_(`website_backend.pubstate.${row.state}`), publicationTone(row.state)),
1881
- },
1826
+ export const publicationsScreen = (_, rows, entries, sites, siteId, frame, options = {}) => {
1827
+ const collection = prepareCollectionTable(_, frame, {
1828
+ rows,
1829
+ id: (row) => row.id,
1830
+ columns: [
1831
+ {
1832
+ key: 'prepared',
1833
+ label: _('website_backend.publications.preparedAt'),
1834
+ kind: 'date',
1835
+ priority: 'primary',
1836
+ cell: (row) => row.preparedAt,
1837
+ },
1838
+ {
1839
+ key: 'state',
1840
+ label: _('website_backend.field.status'),
1841
+ cell: (row) => badge(_(`website_backend.pubstate.${row.state}`), publicationTone(row.state)),
1842
+ },
1843
+ {
1844
+ key: 'count',
1845
+ label: _('website_backend.publications.entryCount'),
1846
+ kind: 'number',
1847
+ cell: (row) => String(row.entryCount),
1848
+ },
1849
+ {
1850
+ key: 'act',
1851
+ label: _('website_backend.publications.action'),
1852
+ cell: (row) => row.state === 'prepared' ? (_jsx(RecordActions, { action: `/admin/website/publications/${row.id}/activate${options.locale ?? ''}`, hidden: { expectedPublicationId: options.activeId ?? '' }, size: "compact", actions: [
1882
1853
  {
1883
- key: 'count',
1884
- label: _('website_backend.publications.entryCount'),
1885
- kind: 'number',
1886
- cell: (row) => String(row.entryCount),
1854
+ value: 'activate',
1855
+ label: _('website_backend.action.activate'),
1856
+ variant: 'primary',
1887
1857
  },
1888
- {
1889
- key: 'act',
1890
- label: _('website_backend.publications.action'),
1891
- cell: (row) => row.state === 'prepared' ? (_jsx(RecordActions, { action: `/admin/website/publications/${row.id}/activate${options.locale ?? ''}`, hidden: { expectedPublicationId: options.activeId ?? '' }, size: "compact", actions: [
1858
+ ] })) : row.state === 'active' ? (_jsx(RecordActions, { action: `/admin/website/publications/${row.id}/rollback${options.locale ?? ''}`, size: "compact", actions: [{ value: 'rollback', label: _('website_backend.action.rollback') }] })) : (''),
1859
+ },
1860
+ ],
1861
+ }, {
1862
+ paginate: true,
1863
+ searchText: (row) => `${row.preparedAt} ${_(`website_backend.pubstate.${row.state}`)} ${row.entryCount}`,
1864
+ });
1865
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.publications.title'), frame: collection.frame, controls: stack([
1866
+ siteSwitcher(_, '/admin/website/publications', sites, siteId, options.locale ?? '', collection.frame),
1867
+ stack([
1868
+ ...(siteId
1869
+ ? [
1870
+ _jsx(RecordForm, { action: `/admin/website/publications${options.locale ?? ''}`, method: "get", layout: "inline", hidden: {
1871
+ ...collectionQueryKeep(new URL(frame.collectionUrl ?? `/admin/website/publications${options.locale ?? ''}`, 'http://collection.local'), ['state', 'site']),
1872
+ site: siteId,
1873
+ }, fields: [
1874
+ {
1875
+ name: 'state',
1876
+ label: _('website_backend.field.status'),
1877
+ type: 'select',
1878
+ value: options.state ?? 'all',
1879
+ options: [
1880
+ { value: 'all', label: _('website_backend.state.all') },
1881
+ { value: 'prepared', label: _('website_backend.pubstate.prepared') },
1882
+ { value: 'active', label: _('website_backend.pubstate.active') },
1883
+ { value: 'superseded', label: _('website_backend.pubstate.superseded') },
1884
+ ],
1885
+ },
1886
+ ], submit: _('website_backend.action.apply'), submitVariant: "secondary" }),
1887
+ ]
1888
+ : []),
1889
+ ]),
1890
+ ]), body: stack([
1891
+ // Superseded sets accumulate one per activation and are the majority of
1892
+ // the list within a week, which buries the two rows anybody came to see.
1893
+ ...(options.notice
1894
+ ? [
1895
+ _jsx(Notice, { tone: "positive", title: _('website_backend.publications.done'), message: options.notice }),
1896
+ ]
1897
+ : []),
1898
+ ...(siteId && entries.length
1899
+ ? [
1900
+ _jsx(Section, { title: _('website_backend.publications.prepare'), description: _('website_backend.publications.prepareHint'), body: _jsx(Surface, { body: _jsx(RecordForm, { action: `/admin/website/publications${options.locale ?? ''}`, hidden: { siteId }, fields: [
1892
1901
  {
1893
- value: 'activate',
1894
- label: _('website_backend.action.activate'),
1895
- variant: 'primary',
1902
+ name: 'entryIds',
1903
+ label: _('website_backend.publications.entries'),
1904
+ type: 'textarea',
1905
+ value: entries.map((entry) => entry.id).join('\n'),
1906
+ help: _('website_backend.publications.entriesHint'),
1907
+ span: 'full',
1908
+ required: true,
1896
1909
  },
1897
- ] })) : row.state === 'active' ? (_jsx(RecordActions, { action: `/admin/website/publications/${row.id}/rollback${options.locale ?? ''}`, size: "compact", actions: [{ value: 'rollback', label: _('website_backend.action.rollback') }] })) : (''),
1898
- },
1899
- ],
1900
- }),
1901
- ]) }));
1910
+ ], submit: _('website_backend.publications.prepare'), submitVariant: "primary", errors: options.errors }) }) }),
1911
+ ]
1912
+ : []),
1913
+ !siteId
1914
+ ? emptyState(_('website_backend.content.noSite'), _('website_backend.content.noSiteHint'))
1915
+ : rows.length === 0
1916
+ ? emptyState(_('website_backend.publications.empty'), _('website_backend.publications.emptyHint'))
1917
+ : collectionTable(_, collection.table),
1918
+ ]) }));
1919
+ };
1902
1920
  /**
1903
1921
  * The head tags for one page, on the page's own screen.
1904
1922
  *
@@ -1964,33 +1982,34 @@ export const concernsOf = (_, health) => {
1964
1982
  * Read-only and built from reads that already existed. It is a place to notice,
1965
1983
  * and every row leads to the screen that fixes the thing.
1966
1984
  */
1967
- export const siteHealthScreen = (_, rows, frame, locale = '') => {
1985
+ export const siteHealthScreen = (_, rows, frame, locale = '', tableRows = rows) => {
1968
1986
  const troubled = rows.filter((row) => concernsOf(_, row).length > 0);
1969
- return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.health.title'), frame: frame, body: stack([
1970
- rows.length === 0 ? (emptyState(_('website_backend.sites.empty'), _('website_backend.sites.emptyHint'))) : troubled.length === 0 ? (_jsx(Notice, { tone: "positive", title: _('website_backend.health.allWell'), message: _('website_backend.health.allWellHint') })) : (dataTable(_, {
1971
- rows: troubled,
1972
- id: (row) => row.siteId,
1973
- rowHref: (row) => `/admin/website/sites/${row.siteId}${locale}`,
1974
- columns: [
1975
- {
1976
- key: 'site',
1977
- label: _('website_backend.field.site'),
1978
- priority: 'primary',
1979
- cell: (row) => row.title,
1980
- },
1981
- {
1982
- key: 'host',
1983
- label: _('website_backend.domains.host'),
1984
- kind: 'identifier',
1985
- cell: (row) => row.primaryHost ? code(row.primaryHost) : badge(_('website_backend.health.none'), 'danger'),
1986
- },
1987
- {
1988
- key: 'concerns',
1989
- label: _('website_backend.health.concerns'),
1990
- cell: (row) => inline(concernsOf(_, row).map((concern) => badge(concern.label, concern.tone))),
1991
- },
1992
- ],
1993
- })),
1987
+ const collection = prepareCollectionTable(_, frame, {
1988
+ rows: tableRows.filter((row) => concernsOf(_, row).length > 0),
1989
+ id: (row) => row.siteId,
1990
+ rowHref: (row) => `/admin/website/sites/${row.siteId}${locale}`,
1991
+ columns: [
1992
+ {
1993
+ key: 'site',
1994
+ label: _('website_backend.field.site'),
1995
+ priority: 'primary',
1996
+ cell: (row) => row.title,
1997
+ },
1998
+ {
1999
+ key: 'host',
2000
+ label: _('website_backend.domains.host'),
2001
+ kind: 'identifier',
2002
+ cell: (row) => row.primaryHost ? code(row.primaryHost) : badge(_('website_backend.health.none'), 'danger'),
2003
+ },
2004
+ {
2005
+ key: 'concerns',
2006
+ label: _('website_backend.health.concerns'),
2007
+ cell: (row) => inline(concernsOf(_, row).map((concern) => badge(concern.label, concern.tone))),
2008
+ },
2009
+ ],
2010
+ }, { paginate: true });
2011
+ return (_jsx(ListScreenFrame, { translator: _, title: _('website_backend.health.title'), frame: collection.frame, body: stack([
2012
+ rows.length === 0 ? (emptyState(_('website_backend.sites.empty'), _('website_backend.sites.emptyHint'))) : troubled.length === 0 ? (_jsx(Notice, { tone: "positive", title: _('website_backend.health.allWell'), message: _('website_backend.health.allWellHint') })) : (collectionTable(_, collection.table)),
1994
2013
  // The quiet sites are worth showing too: a list that only ever holds
1995
2014
  // problems cannot tell "nothing is wrong" from "nothing was checked".
1996
2015
  ...(rows.length