@ketvietlab/ketsuite 0.1.25 → 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 (1073) 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 +20 -30
  595. package/dist/modules/product/product-modal-context.js.map +1 -1
  596. package/dist/modules/product/record-images.d.ts +12 -0
  597. package/dist/modules/product/record-images.d.ts.map +1 -0
  598. package/dist/modules/product/record-images.js +37 -0
  599. package/dist/modules/product/record-images.js.map +1 -0
  600. package/dist/modules/product/search.d.ts +3 -0
  601. package/dist/modules/product/search.d.ts.map +1 -1
  602. package/dist/modules/product/search.js +4 -0
  603. package/dist/modules/product/search.js.map +1 -1
  604. package/dist/modules/product/variant-setup.d.ts +46 -0
  605. package/dist/modules/product/variant-setup.d.ts.map +1 -0
  606. package/dist/modules/product/variant-setup.js +444 -0
  607. package/dist/modules/product/variant-setup.js.map +1 -0
  608. package/dist/modules/product_backend/attribute-search-state.d.ts +22 -0
  609. package/dist/modules/product_backend/attribute-search-state.d.ts.map +1 -0
  610. package/dist/modules/product_backend/attribute-search-state.js +62 -0
  611. package/dist/modules/product_backend/attribute-search-state.js.map +1 -0
  612. package/dist/modules/product_backend/attributes-search.d.ts +10 -0
  613. package/dist/modules/product_backend/attributes-search.d.ts.map +1 -0
  614. package/dist/modules/product_backend/attributes-search.js +67 -0
  615. package/dist/modules/product_backend/attributes-search.js.map +1 -0
  616. package/dist/modules/product_backend/client/attribute-modal.d.mts +62 -0
  617. package/dist/modules/product_backend/client/attribute-modal.d.mts.map +1 -0
  618. package/dist/modules/product_backend/client/attribute-modal.mjs +2 -0
  619. package/dist/modules/product_backend/client/attribute-modal.mjs.map +7 -0
  620. package/dist/modules/product_backend/client/product-modal.d.mts +45 -44
  621. package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -1
  622. package/dist/modules/product_backend/client/product-modal.mjs +1 -1
  623. package/dist/modules/product_backend/client/product-modal.mjs.map +4 -4
  624. package/dist/modules/product_backend/client/product.css +262 -0
  625. package/dist/modules/product_backend/client/variant-editor.d.mts +16 -0
  626. package/dist/modules/product_backend/client/variant-editor.d.mts.map +1 -0
  627. package/dist/modules/product_backend/client/variant-editor.mjs +2 -0
  628. package/dist/modules/product_backend/client/variant-editor.mjs.map +7 -0
  629. package/dist/modules/product_backend/functions.d.ts +3 -0
  630. package/dist/modules/product_backend/functions.d.ts.map +1 -0
  631. package/dist/modules/product_backend/functions.js +29 -0
  632. package/dist/modules/product_backend/functions.js.map +1 -0
  633. package/dist/modules/product_backend/index.d.ts.map +1 -1
  634. package/dist/modules/product_backend/index.js +227 -5
  635. package/dist/modules/product_backend/index.js.map +1 -1
  636. package/dist/modules/product_backend/islands.d.ts +20 -0
  637. package/dist/modules/product_backend/islands.d.ts.map +1 -1
  638. package/dist/modules/product_backend/islands.js +25 -0
  639. package/dist/modules/product_backend/islands.js.map +1 -1
  640. package/dist/modules/product_backend/menus.d.ts.map +1 -1
  641. package/dist/modules/product_backend/menus.js +4 -5
  642. package/dist/modules/product_backend/menus.js.map +1 -1
  643. package/dist/modules/product_backend/modal/attribute-modal-view.d.ts +25 -0
  644. package/dist/modules/product_backend/modal/attribute-modal-view.d.ts.map +1 -0
  645. package/dist/modules/product_backend/modal/attribute-modal-view.js +180 -0
  646. package/dist/modules/product_backend/modal/attribute-modal-view.js.map +1 -0
  647. package/dist/modules/product_backend/modal/product-modal-view.d.ts +25 -6
  648. package/dist/modules/product_backend/modal/product-modal-view.d.ts.map +1 -1
  649. package/dist/modules/product_backend/modal/product-modal-view.js +334 -251
  650. package/dist/modules/product_backend/modal/product-modal-view.js.map +1 -1
  651. package/dist/modules/product_backend/routes.d.ts.map +1 -1
  652. package/dist/modules/product_backend/routes.js +159 -200
  653. package/dist/modules/product_backend/routes.js.map +1 -1
  654. package/dist/modules/product_backend/screens/attributes.d.ts +18 -4
  655. package/dist/modules/product_backend/screens/attributes.d.ts.map +1 -1
  656. package/dist/modules/product_backend/screens/attributes.js +71 -63
  657. package/dist/modules/product_backend/screens/attributes.js.map +1 -1
  658. package/dist/modules/product_backend/screens/list.d.ts +13 -7
  659. package/dist/modules/product_backend/screens/list.d.ts.map +1 -1
  660. package/dist/modules/product_backend/screens/list.js +38 -57
  661. package/dist/modules/product_backend/screens/list.js.map +1 -1
  662. package/dist/modules/product_media/functions.d.ts.map +1 -1
  663. package/dist/modules/product_media/functions.js +2 -0
  664. package/dist/modules/product_media/functions.js.map +1 -1
  665. package/dist/modules/purchase_backend/index.js +116 -208
  666. package/dist/modules/purchase_backend/index.js.map +1 -1
  667. package/dist/modules/purchase_backend/screens/order-list-shared.js +2 -2
  668. package/dist/modules/purchase_backend/screens/order-list-shared.js.map +1 -1
  669. package/dist/modules/purchase_backend/screens/purchase-orders-list.d.ts.map +1 -1
  670. package/dist/modules/purchase_backend/screens/purchase-orders-list.js +11 -13
  671. package/dist/modules/purchase_backend/screens/purchase-orders-list.js.map +1 -1
  672. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts.map +1 -1
  673. package/dist/modules/purchase_backend/screens/rfqs-list.js +10 -15
  674. package/dist/modules/purchase_backend/screens/rfqs-list.js.map +1 -1
  675. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts.map +1 -1
  676. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js +11 -21
  677. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js.map +1 -1
  678. package/dist/modules/purchase_backend/search-functions.d.ts +4 -0
  679. package/dist/modules/purchase_backend/search-functions.d.ts.map +1 -0
  680. package/dist/modules/purchase_backend/search-functions.js +9 -0
  681. package/dist/modules/purchase_backend/search-functions.js.map +1 -0
  682. package/dist/modules/purchase_backend/search.d.ts +128 -0
  683. package/dist/modules/purchase_backend/search.d.ts.map +1 -0
  684. package/dist/modules/purchase_backend/search.js +106 -0
  685. package/dist/modules/purchase_backend/search.js.map +1 -0
  686. package/dist/modules/sale_backend/index.js +83 -32
  687. package/dist/modules/sale_backend/index.js.map +1 -1
  688. package/dist/modules/sale_backend/order-collection.d.ts +7 -0
  689. package/dist/modules/sale_backend/order-collection.d.ts.map +1 -0
  690. package/dist/modules/sale_backend/order-collection.js +27 -0
  691. package/dist/modules/sale_backend/order-collection.js.map +1 -0
  692. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts.map +1 -1
  693. package/dist/modules/sale_backend/screens/invoicing-policies-list.js +10 -14
  694. package/dist/modules/sale_backend/screens/invoicing-policies-list.js.map +1 -1
  695. package/dist/modules/sale_backend/screens/overview.js +2 -2
  696. package/dist/modules/sale_backend/screens/overview.js.map +1 -1
  697. package/dist/modules/sale_backend/screens/quotations-list.d.ts.map +1 -1
  698. package/dist/modules/sale_backend/screens/quotations-list.js +12 -23
  699. package/dist/modules/sale_backend/screens/quotations-list.js.map +1 -1
  700. package/dist/modules/sale_backend/screens/sales-orders-list.d.ts.map +1 -1
  701. package/dist/modules/sale_backend/screens/sales-orders-list.js +11 -20
  702. package/dist/modules/sale_backend/screens/sales-orders-list.js.map +1 -1
  703. package/dist/modules/sale_backend/search-functions.d.ts +4 -0
  704. package/dist/modules/sale_backend/search-functions.d.ts.map +1 -0
  705. package/dist/modules/sale_backend/search-functions.js +9 -0
  706. package/dist/modules/sale_backend/search-functions.js.map +1 -0
  707. package/dist/modules/sale_backend/search.d.ts +146 -0
  708. package/dist/modules/sale_backend/search.d.ts.map +1 -0
  709. package/dist/modules/sale_backend/search.js +112 -0
  710. package/dist/modules/sale_backend/search.js.map +1 -0
  711. package/dist/modules/stock_backend/functions.d.ts +10 -0
  712. package/dist/modules/stock_backend/functions.d.ts.map +1 -0
  713. package/dist/modules/stock_backend/functions.js +19 -0
  714. package/dist/modules/stock_backend/functions.js.map +1 -0
  715. package/dist/modules/stock_backend/index.js +33 -10
  716. package/dist/modules/stock_backend/index.js.map +1 -1
  717. package/dist/modules/stock_backend/routes.d.ts.map +1 -1
  718. package/dist/modules/stock_backend/routes.js +168 -59
  719. package/dist/modules/stock_backend/routes.js.map +1 -1
  720. package/dist/modules/stock_backend/screens/locations-list.d.ts.map +1 -1
  721. package/dist/modules/stock_backend/screens/locations-list.js +11 -22
  722. package/dist/modules/stock_backend/screens/locations-list.js.map +1 -1
  723. package/dist/modules/stock_backend/screens/lots-list.d.ts.map +1 -1
  724. package/dist/modules/stock_backend/screens/lots-list.js +11 -13
  725. package/dist/modules/stock_backend/screens/lots-list.js.map +1 -1
  726. package/dist/modules/stock_backend/screens/picking-types-list.d.ts.map +1 -1
  727. package/dist/modules/stock_backend/screens/picking-types-list.js +11 -22
  728. package/dist/modules/stock_backend/screens/picking-types-list.js.map +1 -1
  729. package/dist/modules/stock_backend/screens/replenishment-list.d.ts.map +1 -1
  730. package/dist/modules/stock_backend/screens/replenishment-list.js +11 -22
  731. package/dist/modules/stock_backend/screens/replenishment-list.js.map +1 -1
  732. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts.map +1 -1
  733. package/dist/modules/stock_backend/screens/stock-routes-list.js +12 -23
  734. package/dist/modules/stock_backend/screens/stock-routes-list.js.map +1 -1
  735. package/dist/modules/stock_backend/screens/transfers-list.d.ts.map +1 -1
  736. package/dist/modules/stock_backend/screens/transfers-list.js +12 -23
  737. package/dist/modules/stock_backend/screens/transfers-list.js.map +1 -1
  738. package/dist/modules/stock_backend/screens/warehouses-list.d.ts.map +1 -1
  739. package/dist/modules/stock_backend/screens/warehouses-list.js +11 -22
  740. package/dist/modules/stock_backend/screens/warehouses-list.js.map +1 -1
  741. package/dist/modules/stock_backend/search.d.ts +257 -0
  742. package/dist/modules/stock_backend/search.d.ts.map +1 -0
  743. package/dist/modules/stock_backend/search.js +349 -0
  744. package/dist/modules/stock_backend/search.js.map +1 -0
  745. package/dist/modules/storage/functions.d.ts.map +1 -1
  746. package/dist/modules/storage/functions.js +28 -5
  747. package/dist/modules/storage/functions.js.map +1 -1
  748. package/dist/modules/storage/jobs.d.ts.map +1 -1
  749. package/dist/modules/storage/jobs.js +120 -2
  750. package/dist/modules/storage/jobs.js.map +1 -1
  751. package/dist/modules/storage/models.d.ts.map +1 -1
  752. package/dist/modules/storage/models.js +21 -0
  753. package/dist/modules/storage/models.js.map +1 -1
  754. package/dist/modules/storage/policy.d.ts +27 -0
  755. package/dist/modules/storage/policy.d.ts.map +1 -1
  756. package/dist/modules/storage/policy.js +14 -0
  757. package/dist/modules/storage/policy.js.map +1 -1
  758. package/dist/modules/storage/routes.d.ts +1 -0
  759. package/dist/modules/storage/routes.d.ts.map +1 -1
  760. package/dist/modules/storage/routes.js +36 -10
  761. package/dist/modules/storage/routes.js.map +1 -1
  762. package/dist/modules/user/access-denial.d.ts +3 -0
  763. package/dist/modules/user/access-denial.d.ts.map +1 -0
  764. package/dist/modules/user/access-denial.js +34 -0
  765. package/dist/modules/user/access-denial.js.map +1 -0
  766. package/dist/modules/user/access-policy.d.ts +16 -0
  767. package/dist/modules/user/access-policy.d.ts.map +1 -0
  768. package/dist/modules/user/access-policy.js +455 -0
  769. package/dist/modules/user/access-policy.js.map +1 -0
  770. package/dist/modules/user/access-surfaces.d.ts +26 -0
  771. package/dist/modules/user/access-surfaces.d.ts.map +1 -0
  772. package/dist/modules/user/access-surfaces.js +76 -0
  773. package/dist/modules/user/access-surfaces.js.map +1 -0
  774. package/dist/modules/user/authorization.d.ts +12 -1
  775. package/dist/modules/user/authorization.d.ts.map +1 -1
  776. package/dist/modules/user/authorization.js +342 -36
  777. package/dist/modules/user/authorization.js.map +1 -1
  778. package/dist/modules/user/functions.d.ts.map +1 -1
  779. package/dist/modules/user/functions.js +26 -3
  780. package/dist/modules/user/functions.js.map +1 -1
  781. package/dist/modules/user/index.d.ts.map +1 -1
  782. package/dist/modules/user/index.js +13 -1
  783. package/dist/modules/user/index.js.map +1 -1
  784. package/dist/modules/user/modal-labels.d.ts +3 -0
  785. package/dist/modules/user/modal-labels.d.ts.map +1 -0
  786. package/dist/modules/user/modal-labels.js +30 -0
  787. package/dist/modules/user/modal-labels.js.map +1 -0
  788. package/dist/modules/user/modal-messages.d.ts +4 -0
  789. package/dist/modules/user/modal-messages.d.ts.map +1 -0
  790. package/dist/modules/user/modal-messages.js +15 -0
  791. package/dist/modules/user/modal-messages.js.map +1 -0
  792. package/dist/modules/user/models.d.ts.map +1 -1
  793. package/dist/modules/user/models.js +48 -0
  794. package/dist/modules/user/models.js.map +1 -1
  795. package/dist/modules/user/permission-areas.d.ts +20 -0
  796. package/dist/modules/user/permission-areas.d.ts.map +1 -0
  797. package/dist/modules/user/permission-areas.js +89 -0
  798. package/dist/modules/user/permission-areas.js.map +1 -0
  799. package/dist/modules/user/policy-jobs.d.ts +4 -0
  800. package/dist/modules/user/policy-jobs.d.ts.map +1 -0
  801. package/dist/modules/user/policy-jobs.js +15 -0
  802. package/dist/modules/user/policy-jobs.js.map +1 -0
  803. package/dist/modules/user/role-modal-context.d.ts +3 -0
  804. package/dist/modules/user/role-modal-context.d.ts.map +1 -0
  805. package/dist/modules/user/role-modal-context.js +264 -0
  806. package/dist/modules/user/role-modal-context.js.map +1 -0
  807. package/dist/modules/user/roles.d.ts.map +1 -1
  808. package/dist/modules/user/roles.js +2 -0
  809. package/dist/modules/user/roles.js.map +1 -1
  810. package/dist/modules/user/user-modal-context.d.ts +5 -1
  811. package/dist/modules/user/user-modal-context.d.ts.map +1 -1
  812. package/dist/modules/user/user-modal-context.js +227 -31
  813. package/dist/modules/user/user-modal-context.js.map +1 -1
  814. package/dist/modules/user_backend/access-options.d.ts +25 -0
  815. package/dist/modules/user_backend/access-options.d.ts.map +1 -0
  816. package/dist/modules/user_backend/access-options.js +38 -0
  817. package/dist/modules/user_backend/access-options.js.map +1 -0
  818. package/dist/modules/user_backend/access-policy-routes.d.ts +3 -0
  819. package/dist/modules/user_backend/access-policy-routes.d.ts.map +1 -0
  820. package/dist/modules/user_backend/access-policy-routes.js +76 -0
  821. package/dist/modules/user_backend/access-policy-routes.js.map +1 -0
  822. package/dist/modules/user_backend/client/access-policy-modal.d.mts +123 -0
  823. package/dist/modules/user_backend/client/access-policy-modal.d.mts.map +1 -0
  824. package/dist/modules/user_backend/client/access-policy-modal.mjs +2 -0
  825. package/dist/modules/user_backend/client/access-policy-modal.mjs.map +7 -0
  826. package/dist/modules/user_backend/client/role-modal.d.mts +103 -0
  827. package/dist/modules/user_backend/client/role-modal.d.mts.map +1 -0
  828. package/dist/modules/user_backend/client/role-modal.mjs +2 -0
  829. package/dist/modules/user_backend/client/role-modal.mjs.map +7 -0
  830. package/dist/modules/user_backend/client/user-modal.d.mts +160 -7
  831. package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -1
  832. package/dist/modules/user_backend/client/user-modal.mjs +1 -1
  833. package/dist/modules/user_backend/client/user-modal.mjs.map +4 -4
  834. package/dist/modules/user_backend/index.d.ts +2 -2
  835. package/dist/modules/user_backend/index.d.ts.map +1 -1
  836. package/dist/modules/user_backend/index.js +4 -2
  837. package/dist/modules/user_backend/index.js.map +1 -1
  838. package/dist/modules/user_backend/islands.d.ts +14 -1
  839. package/dist/modules/user_backend/islands.d.ts.map +1 -1
  840. package/dist/modules/user_backend/islands.js +11 -3
  841. package/dist/modules/user_backend/islands.js.map +1 -1
  842. package/dist/modules/user_backend/managed-role-routes.d.ts +3 -0
  843. package/dist/modules/user_backend/managed-role-routes.d.ts.map +1 -0
  844. package/dist/modules/user_backend/managed-role-routes.js +44 -0
  845. package/dist/modules/user_backend/managed-role-routes.js.map +1 -0
  846. package/dist/modules/user_backend/menus.d.ts.map +1 -1
  847. package/dist/modules/user_backend/menus.js +9 -7
  848. package/dist/modules/user_backend/menus.js.map +1 -1
  849. package/dist/modules/user_backend/messages.d.ts +510 -2
  850. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  851. package/dist/modules/user_backend/messages.js +552 -44
  852. package/dist/modules/user_backend/messages.js.map +1 -1
  853. package/dist/modules/user_backend/modal/access-policy-modal-view.d.ts +43 -0
  854. package/dist/modules/user_backend/modal/access-policy-modal-view.d.ts.map +1 -0
  855. package/dist/modules/user_backend/modal/access-policy-modal-view.js +384 -0
  856. package/dist/modules/user_backend/modal/access-policy-modal-view.js.map +1 -0
  857. package/dist/modules/user_backend/modal/access-surfaces.d.ts +51 -0
  858. package/dist/modules/user_backend/modal/access-surfaces.d.ts.map +1 -0
  859. package/dist/modules/user_backend/modal/access-surfaces.js +138 -0
  860. package/dist/modules/user_backend/modal/access-surfaces.js.map +1 -0
  861. package/dist/modules/user_backend/modal/role-modal-view.d.ts +48 -0
  862. package/dist/modules/user_backend/modal/role-modal-view.d.ts.map +1 -0
  863. package/dist/modules/user_backend/modal/role-modal-view.js +488 -0
  864. package/dist/modules/user_backend/modal/role-modal-view.js.map +1 -0
  865. package/dist/modules/user_backend/modal/user-modal-view.d.ts +45 -0
  866. package/dist/modules/user_backend/modal/user-modal-view.d.ts.map +1 -1
  867. package/dist/modules/user_backend/modal/user-modal-view.js +1317 -71
  868. package/dist/modules/user_backend/modal/user-modal-view.js.map +1 -1
  869. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  870. package/dist/modules/user_backend/routes.js +109 -571
  871. package/dist/modules/user_backend/routes.js.map +1 -1
  872. package/dist/modules/user_backend/screens/access-policies-list.d.ts +31 -0
  873. package/dist/modules/user_backend/screens/access-policies-list.d.ts.map +1 -0
  874. package/dist/modules/user_backend/screens/access-policies-list.js +54 -0
  875. package/dist/modules/user_backend/screens/access-policies-list.js.map +1 -0
  876. package/dist/modules/user_backend/screens/index.d.ts +1 -3
  877. package/dist/modules/user_backend/screens/index.d.ts.map +1 -1
  878. package/dist/modules/user_backend/screens/index.js +2 -3
  879. package/dist/modules/user_backend/screens/index.js.map +1 -1
  880. package/dist/modules/user_backend/screens/roles-list.d.ts +9 -3
  881. package/dist/modules/user_backend/screens/roles-list.d.ts.map +1 -1
  882. package/dist/modules/user_backend/screens/roles-list.js +15 -23
  883. package/dist/modules/user_backend/screens/roles-list.js.map +1 -1
  884. package/dist/modules/user_backend/screens/users-list.d.ts +7 -5
  885. package/dist/modules/user_backend/screens/users-list.d.ts.map +1 -1
  886. package/dist/modules/user_backend/screens/users-list.js +29 -21
  887. package/dist/modules/user_backend/screens/users-list.js.map +1 -1
  888. package/dist/modules/user_backend/search-functions.d.ts +4 -0
  889. package/dist/modules/user_backend/search-functions.d.ts.map +1 -0
  890. package/dist/modules/user_backend/search-functions.js +13 -0
  891. package/dist/modules/user_backend/search-functions.js.map +1 -0
  892. package/dist/modules/user_backend/search.d.ts +128 -0
  893. package/dist/modules/user_backend/search.d.ts.map +1 -0
  894. package/dist/modules/user_backend/search.js +131 -0
  895. package/dist/modules/user_backend/search.js.map +1 -0
  896. package/dist/modules/website/cms.d.ts.map +1 -1
  897. package/dist/modules/website/cms.js +17 -7
  898. package/dist/modules/website/cms.js.map +1 -1
  899. package/dist/modules/website/customer.d.ts +61 -1
  900. package/dist/modules/website/customer.d.ts.map +1 -1
  901. package/dist/modules/website/customer.js +197 -15
  902. package/dist/modules/website/customer.js.map +1 -1
  903. package/dist/modules/website/index.d.ts.map +1 -1
  904. package/dist/modules/website/index.js +16 -2
  905. package/dist/modules/website/index.js.map +1 -1
  906. package/dist/modules/website/models.d.ts.map +1 -1
  907. package/dist/modules/website/models.js +15 -0
  908. package/dist/modules/website/models.js.map +1 -1
  909. package/dist/modules/website/publication.d.ts.map +1 -1
  910. package/dist/modules/website/publication.js +11 -5
  911. package/dist/modules/website/publication.js.map +1 -1
  912. package/dist/modules/website_backend/collection.d.ts +12 -0
  913. package/dist/modules/website_backend/collection.d.ts.map +1 -0
  914. package/dist/modules/website_backend/collection.js +17 -0
  915. package/dist/modules/website_backend/collection.js.map +1 -0
  916. package/dist/modules/website_backend/functions.d.ts +10 -0
  917. package/dist/modules/website_backend/functions.d.ts.map +1 -0
  918. package/dist/modules/website_backend/functions.js +37 -0
  919. package/dist/modules/website_backend/functions.js.map +1 -0
  920. package/dist/modules/website_backend/index.js +2 -0
  921. package/dist/modules/website_backend/index.js.map +1 -1
  922. package/dist/modules/website_backend/routes.d.ts.map +1 -1
  923. package/dist/modules/website_backend/routes.js +124 -29
  924. package/dist/modules/website_backend/routes.js.map +1 -1
  925. package/dist/modules/website_backend/screens/index.d.ts +4 -8
  926. package/dist/modules/website_backend/screens/index.d.ts.map +1 -1
  927. package/dist/modules/website_backend/screens/index.js +685 -666
  928. package/dist/modules/website_backend/screens/index.js.map +1 -1
  929. package/dist/modules/website_backend/screens/page-frame.d.ts +6 -3
  930. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  931. package/dist/modules/website_backend/screens/page-frame.js +3 -3
  932. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  933. package/dist/modules/website_backend/search.d.ts +125 -0
  934. package/dist/modules/website_backend/search.d.ts.map +1 -0
  935. package/dist/modules/website_backend/search.js +135 -0
  936. package/dist/modules/website_backend/search.js.map +1 -0
  937. package/dist/permission-catalogue.d.ts.map +1 -1
  938. package/dist/permission-catalogue.js +178 -24
  939. package/dist/permission-catalogue.js.map +1 -1
  940. package/dist/phone.d.ts +32 -0
  941. package/dist/phone.d.ts.map +1 -0
  942. package/dist/phone.js +101 -0
  943. package/dist/phone.js.map +1 -0
  944. package/dist/role-templates.d.ts +79 -0
  945. package/dist/role-templates.d.ts.map +1 -0
  946. package/dist/role-templates.js +192 -0
  947. package/dist/role-templates.js.map +1 -0
  948. package/dist/scaffold/index.d.ts +1 -1
  949. package/dist/scaffold/index.d.ts.map +1 -1
  950. package/dist/scaffold/index.js +10 -5
  951. package/dist/scaffold/index.js.map +1 -1
  952. package/dist/scaffold/templates/README.md.tmpl +2 -1
  953. package/dist/scaffold/templates/ket.workspace.mjs.tmpl +4 -1
  954. package/dist/scaffold/templates/package.json.tmpl +2 -2
  955. package/dist/ui/actions.d.ts +2 -0
  956. package/dist/ui/actions.d.ts.map +1 -1
  957. package/dist/ui/actions.js +1 -1
  958. package/dist/ui/actions.js.map +1 -1
  959. package/dist/ui/chrome.d.ts +19 -6
  960. package/dist/ui/chrome.d.ts.map +1 -1
  961. package/dist/ui/chrome.js +12 -7
  962. package/dist/ui/chrome.js.map +1 -1
  963. package/dist/ui/client/bulk-selection.d.ts +7 -0
  964. package/dist/ui/client/bulk-selection.d.ts.map +1 -0
  965. package/dist/ui/client/bulk-selection.js +67 -0
  966. package/dist/ui/client/bulk-selection.js.map +1 -0
  967. package/dist/ui/client/ket-table-view.d.ts +3 -0
  968. package/dist/ui/client/ket-table-view.d.ts.map +1 -0
  969. package/dist/ui/client/ket-table-view.js +27 -0
  970. package/dist/ui/client/ket-table-view.js.map +1 -0
  971. package/dist/ui/client/live-doc-shell.d.ts +39 -1
  972. package/dist/ui/client/live-doc-shell.d.ts.map +1 -1
  973. package/dist/ui/client/live-doc-shell.js +41 -2
  974. package/dist/ui/client/live-doc-shell.js.map +1 -1
  975. package/dist/ui/client/live-doc-view.d.ts +29 -1
  976. package/dist/ui/client/live-doc-view.d.ts.map +1 -1
  977. package/dist/ui/client/live-doc-view.js +138 -4
  978. package/dist/ui/client/live-doc-view.js.map +1 -1
  979. package/dist/ui/client/live-doc.d.mts +8 -4
  980. package/dist/ui/client/live-doc.d.mts.map +1 -1
  981. package/dist/ui/client/live-doc.mjs +10 -10
  982. package/dist/ui/client/live-doc.mjs.map +3 -3
  983. package/dist/ui/client/record-modal-form.d.ts +34 -0
  984. package/dist/ui/client/record-modal-form.d.ts.map +1 -1
  985. package/dist/ui/client/record-modal-form.js +17 -1
  986. package/dist/ui/client/record-modal-form.js.map +1 -1
  987. package/dist/ui/client/record-modal.d.ts +56 -6
  988. package/dist/ui/client/record-modal.d.ts.map +1 -1
  989. package/dist/ui/client/record-modal.js +235 -39
  990. package/dist/ui/client/record-modal.js.map +1 -1
  991. package/dist/ui/client/search-filter-view.d.ts +2 -0
  992. package/dist/ui/client/search-filter-view.d.ts.map +1 -0
  993. package/dist/ui/client/search-filter-view.js +6 -0
  994. package/dist/ui/client/search-filter-view.js.map +1 -0
  995. package/dist/ui/client/table-selection-view.d.ts.map +1 -1
  996. package/dist/ui/client/table-selection-view.js +33 -16
  997. package/dist/ui/client/table-selection-view.js.map +1 -1
  998. package/dist/ui/client/user-modal-client.d.ts +6 -0
  999. package/dist/ui/client/user-modal-client.d.ts.map +1 -0
  1000. package/dist/ui/client/user-modal-client.js +4 -0
  1001. package/dist/ui/client/user-modal-client.js.map +1 -0
  1002. package/dist/ui/client/user-workflow.d.ts.map +1 -1
  1003. package/dist/ui/client/user-workflow.js +4 -3
  1004. package/dist/ui/client/user-workflow.js.map +1 -1
  1005. package/dist/ui/client/variant-attribute-create.d.ts +19 -0
  1006. package/dist/ui/client/variant-attribute-create.d.ts.map +1 -0
  1007. package/dist/ui/client/variant-attribute-create.js +177 -0
  1008. package/dist/ui/client/variant-attribute-create.js.map +1 -0
  1009. package/dist/ui/client/variant-editor-view.d.ts +72 -0
  1010. package/dist/ui/client/variant-editor-view.d.ts.map +1 -0
  1011. package/dist/ui/client/variant-editor-view.js +943 -0
  1012. package/dist/ui/client/variant-editor-view.js.map +1 -0
  1013. package/dist/ui/collection-state.d.ts +11 -0
  1014. package/dist/ui/collection-state.d.ts.map +1 -0
  1015. package/dist/ui/collection-state.js +45 -0
  1016. package/dist/ui/collection-state.js.map +1 -0
  1017. package/dist/ui/collection.d.ts +23 -0
  1018. package/dist/ui/collection.d.ts.map +1 -0
  1019. package/dist/ui/collection.js +118 -0
  1020. package/dist/ui/collection.js.map +1 -0
  1021. package/dist/ui/form.d.ts +1 -1
  1022. package/dist/ui/form.d.ts.map +1 -1
  1023. package/dist/ui/form.js +1 -1
  1024. package/dist/ui/form.js.map +1 -1
  1025. package/dist/ui/index.d.ts +3 -1
  1026. package/dist/ui/index.d.ts.map +1 -1
  1027. package/dist/ui/index.js +3 -1
  1028. package/dist/ui/index.js.map +1 -1
  1029. package/dist/ui/layout.d.ts +6 -7
  1030. package/dist/ui/layout.d.ts.map +1 -1
  1031. package/dist/ui/layout.js +25 -10
  1032. package/dist/ui/layout.js.map +1 -1
  1033. package/dist/ui/list-page.d.ts +4 -2
  1034. package/dist/ui/list-page.d.ts.map +1 -1
  1035. package/dist/ui/list-page.js +29 -4
  1036. package/dist/ui/list-page.js.map +1 -1
  1037. package/dist/ui/nav.d.ts +2 -3
  1038. package/dist/ui/nav.d.ts.map +1 -1
  1039. package/dist/ui/nav.js +4 -8
  1040. package/dist/ui/nav.js.map +1 -1
  1041. package/dist/ui/navigation.d.ts +1 -0
  1042. package/dist/ui/navigation.d.ts.map +1 -1
  1043. package/dist/ui/navigation.js +3 -3
  1044. package/dist/ui/navigation.js.map +1 -1
  1045. package/dist/ui/table.d.ts +2 -0
  1046. package/dist/ui/table.d.ts.map +1 -1
  1047. package/dist/ui/table.js +24 -0
  1048. package/dist/ui/table.js.map +1 -1
  1049. package/dist/ui/user-workflow.d.ts +2 -1
  1050. package/dist/ui/user-workflow.d.ts.map +1 -1
  1051. package/dist/ui/user-workflow.js +44 -29
  1052. package/dist/ui/user-workflow.js.map +1 -1
  1053. package/package.json +14 -4
  1054. package/dist/modules/user_backend/access-routes.d.ts +0 -31
  1055. package/dist/modules/user_backend/access-routes.d.ts.map +0 -1
  1056. package/dist/modules/user_backend/access-routes.js +0 -447
  1057. package/dist/modules/user_backend/access-routes.js.map +0 -1
  1058. package/dist/modules/user_backend/screens/presets-form.d.ts +0 -16
  1059. package/dist/modules/user_backend/screens/presets-form.d.ts.map +0 -1
  1060. package/dist/modules/user_backend/screens/presets-form.js +0 -37
  1061. package/dist/modules/user_backend/screens/presets-form.js.map +0 -1
  1062. package/dist/modules/user_backend/screens/role-form.d.ts +0 -21
  1063. package/dist/modules/user_backend/screens/role-form.d.ts.map +0 -1
  1064. package/dist/modules/user_backend/screens/role-form.js +0 -93
  1065. package/dist/modules/user_backend/screens/role-form.js.map +0 -1
  1066. package/dist/modules/user_backend/screens/user-form.d.ts +0 -56
  1067. package/dist/modules/user_backend/screens/user-form.d.ts.map +0 -1
  1068. package/dist/modules/user_backend/screens/user-form.js +0 -202
  1069. package/dist/modules/user_backend/screens/user-form.js.map +0 -1
  1070. package/dist/ui/client/relation-select-view.d.ts +0 -77
  1071. package/dist/ui/client/relation-select-view.d.ts.map +0 -1
  1072. package/dist/ui/client/relation-select-view.js +0 -216
  1073. package/dist/ui/client/relation-select-view.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ declare var V: string[];
2
+ declare function X(n: any, c?: string): {
3
+ open: (e: any, t: any, i: any) => void;
4
+ close: () => void;
5
+ isOpen: () => any;
6
+ layer: () => any;
7
+ attach: (e: any) => void;
8
+ };
9
+ declare function Y(n: any): {
10
+ view: () => any;
11
+ mount: ({ lifetime: h }: {
12
+ lifetime: any;
13
+ }) => void;
14
+ };
15
+ declare var _: (n: any) => any, W: (n: any) => {
16
+ view: () => any;
17
+ mount: ({ lifetime: h }: {
18
+ lifetime: any;
19
+ }) => void;
20
+ };
21
+ export { V as HOOKS, _ as LightboxThumb, X as createLightbox, Y as createLightboxView, W as lightbox };
22
+ //# sourceMappingURL=lightbox.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightbox.d.mts","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/backend/design/client/lightbox.mjs"],"names":[],"mappings":"AACiH,QAAA,IAAI,CAAC,UAAiV,CAAC;AAAA,iBAAS,CAAC,CAAC,CAAC,KAAA,EAAC,CAAC,SAAW;;;;;;EAA2oH;AAAA,iBAAS,CAAC,CAAC,CAAC,KAAA;;;;;EAA2c;AAAA,QAAA,IAAI,CAAC,iBAAgS,EAAC,CAAC;;;;;CAAQ,CAAC;AAAA,OAAM,EAAC,CAAC,IAAI,KAAK,EAAC,CAAC,IAAI,aAAa,EAAC,CAAC,IAAI,cAAc,EAAC,CAAC,IAAI,kBAAkB,EAAC,CAAC,IAAI,QAAQ,EAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ // @ts-nocheck Generated by tools/build-backend-client.mjs — do not edit.
2
+ import{each as A,signal as f}from"/_ket/view/index.js";import{jsx as u,jsxs as k}from"/_ket/view/jsx-runtime.js";var V=["lightbox","lightbox-thumbs","lightbox-thumb","lightbox-empty","lightbox-layer","lightbox-backdrop","lightbox-toolbar","lightbox-counter","lightbox-tool","lightbox-stage","lightbox-image","lightbox-nav","lightbox-caption"],g=1,w=4,v=.5,$=(n,c)=>n.replace(/\{(\w+)\}/g,(d,s)=>String(c[s]??`{${s}}`)),R=(n,c,d)=>Math.min(d,Math.max(c,n));function X(n,c="lightbox"){let d=f([]),s=f(!1),b=f(0),r=f(g),m=f({x:0,y:0}),h=null,a=new Map,o=null,z=()=>{r.set(g),m.set({x:0,y:0})},S=(e,t,i)=>{e.length&&(h=i instanceof HTMLElement?i:null,d.set(e),b.set(R(t,0,e.length-1)),z(),s.set(!0),queueMicrotask(()=>{typeof document>"u"||document.getElementById(`${c}-lightbox-close`)?.focus()}))},p=()=>{s()&&(s.set(!1),z(),a.clear(),o=null,h?.focus(),h=null)},y=e=>{let t=d().length;t<2||(b.set((b()+e+t)%t),z())},x=e=>{let t=R(e,g,w);r.set(t),t===g&&m.set({x:0,y:0})},L=()=>{let e=[...a.values()];return e.length?{x:e.reduce((t,i)=>t+i.x,0)/e.length,y:e.reduce((t,i)=>t+i.y,0)/e.length}:{x:0,y:0}},P=()=>{let[e,t]=[...a.values()];return e&&t?Math.hypot(e.x-t.x,e.y-t.y):0},C=(e,t)=>{if(t&&o&&a.size===1&&r()===g&&o.distance===null){let i=e.clientX-o.start.x;Math.abs(i)>60&&Math.abs(i)>Math.abs(e.clientY-o.start.y)&&y(i<0?1:-1)}if(a.delete(e.pointerId),e.currentTarget?.releasePointerCapture?.(e.pointerId),!a.size){let i=o;i&&t?setTimeout(()=>o===i?o=null:null,0):o=null;return}o&&(o={...o,start:L(),origin:m(),zoom:r(),distance:null})};return{open:S,close:p,isOpen:()=>s(),layer:()=>{let e=d(),t=e[b()];if(!s()||!t)return null;let i=r(),O=m(),I=e.length>1;return k("div",{"data-ui":"lightbox-layer",role:"dialog","aria-modal":"true","aria-label":t.alt,id:`${c}-lightbox`,children:[u("div",{"data-ui":"lightbox-backdrop","aria-hidden":"true",onClick:p}),k("div",{"data-ui":"lightbox-toolbar",children:[u("span",{"data-ui":"lightbox-counter","aria-live":"polite",children:I?$(n.counter,{index:b()+1,total:e.length}):""}),u("button",{type:"button","data-ui":"lightbox-tool","data-tool":"zoom-out","aria-label":n.zoomOut,title:n.zoomOut,disabled:i<=g,onClick:()=>x(i-v),children:"\u2212"}),u("button",{type:"button","data-ui":"lightbox-tool","data-tool":"zoom-in","aria-label":n.zoomIn,title:n.zoomIn,disabled:i>=w,onClick:()=>x(i+v),children:"+"}),u("button",{type:"button","data-ui":"lightbox-tool","data-tool":"close",id:`${c}-lightbox-close`,"aria-label":n.close,title:n.close,onClick:p,children:"\xD7"})]}),u("div",{role:"presentation","data-ui":"lightbox-stage","data-zoomed":String(i>g),onClick:l=>{l.target===l.currentTarget&&!o?.moved&&p()},onWheel:l=>{l.preventDefault(),x(r()*(l.deltaY<0?1.15:1/1.15))},onPointerDown:l=>{a.set(l.pointerId,{x:l.clientX,y:l.clientY}),l.currentTarget.setPointerCapture?.(l.pointerId),o={start:L(),origin:m(),zoom:r(),distance:a.size>1?P():null,moved:o?.moved===!0&&a.size>1}},onPointerMove:l=>{if(!o||!a.has(l.pointerId))return;a.set(l.pointerId,{x:l.clientX,y:l.clientY});let E=L(),M=E.x-o.start.x,T=E.y-o.start.y;Math.abs(M)+Math.abs(T)>4&&(o.moved=!0),a.size>1&&o.distance&&(x(o.zoom*(P()/o.distance)),o.moved=!0),r()>g&&m.set({x:o.origin.x+M,y:o.origin.y+T})},onPointerUp:l=>C(l,!0),onPointerCancel:l=>C(l,!1),children:u("img",{"data-ui":"lightbox-image",src:t.src,alt:t.alt,draggable:"false",style:`transform: translate(${O.x}px, ${O.y}px) scale(${i})`,onClick:()=>{o?.moved||x(r()>g?g:2)}})}),I?u("button",{type:"button","data-ui":"lightbox-nav","data-direction":"previous","aria-label":n.previous,title:n.previous,onClick:()=>y(-1),children:"\u2039"}):null,I?u("button",{type:"button","data-ui":"lightbox-nav","data-direction":"next","aria-label":n.next,title:n.next,onClick:()=>y(1),children:"\u203A"}):null,t.caption?u("p",{"data-ui":"lightbox-caption",children:t.caption}):null]})},attach:e=>{document.addEventListener("keydown",t=>{if(s()){if(t.key==="Escape")p();else if(t.key==="ArrowLeft")y(-1);else if(t.key==="ArrowRight")y(1);else if(t.key==="+"||t.key==="=")x(r()+v);else if(t.key==="-")x(r()-v);else return;t.preventDefault(),t.stopImmediatePropagation()}},{signal:e,capture:!0}),e.addEventListener("abort",()=>{s.set(!1),a.clear(),o=null})}}}function Y(n){let{id:c,config:d}=n,s=d.labels,b=d.items,r=X(s,c),m=()=>{let h=d.thumbnails==="all"?b:b.slice(0,1);return h.length?u("div",{"data-ui":"lightbox-thumbs",children:A([...h],a=>a.src,a=>_({item:a,labels:s,size:d.size,onOpen:o=>r.open(b,b.indexOf(a),o)}))}):u("span",{"data-ui":"lightbox-empty","data-size":d.size??"medium",children:s.empty??""})};return{view:()=>k("div",{"data-ui":"lightbox",id:c,children:[m(),r.layer()]}),mount:({lifetime:h})=>r.attach(h)}}var _=n=>u("button",{type:"button","data-ui":"lightbox-thumb","data-size":n.size??"medium","aria-label":$(n.labels.open,{alt:n.item.alt}),"aria-haspopup":"dialog",onClick:c=>n.onOpen(c.currentTarget),children:u("img",{src:n.item.thumbnail??n.item.src,alt:"",loading:"lazy",decoding:"async"})}),W=n=>Y(n);export{V as HOOKS,_ as LightboxThumb,X as createLightbox,Y as createLightboxView,W as lightbox};
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../design-system/src/interactions/lightbox/index.tsx"],
4
+ "sourcesContent": ["// A Fancybox-style image viewer, as a ketjs-view island: a thumbnail (or a row of\n// them) that opens a full-screen stage over several images, with zoom (buttons,\n// wheel, keyboard, tap), pan (drag), pinch-to-zoom (two fingers), previous/next\n// (buttons, arrow keys) and a counter.\n//\n// Like relation-select, it owns reactive state rather than being a static control\n// wired by the shared delegator \u2014 zoom level, pan offset and the open item all\n// change on every pointer move. A consuming app mounts it through its own island\n// runtime; everything it needs (the images, the labels) arrives as JSON props.\n\nimport { each, signal } from '@ketvietlab/ketjs-view'\nimport type { IslandController, IslandProps, TemplateResult } from '@ketvietlab/ketjs-view'\n\nexport const HOOKS = [\n 'lightbox',\n 'lightbox-thumbs',\n 'lightbox-thumb',\n 'lightbox-empty',\n 'lightbox-layer',\n 'lightbox-backdrop',\n 'lightbox-toolbar',\n 'lightbox-counter',\n 'lightbox-tool',\n 'lightbox-stage',\n 'lightbox-image',\n 'lightbox-nav',\n 'lightbox-caption',\n] as const\n\nexport type LightboxItem = {\n src: string\n alt: string\n /** A smaller rendition for the trigger; the full `src` is used when omitted. */\n thumbnail?: string | null\n caption?: string | null\n}\n\nexport type LightboxLabels = {\n /** The trigger's accessible name, `{alt}` interpolated. */\n open: string\n close: string\n previous: string\n next: string\n zoomIn: string\n zoomOut: string\n /** `{index}` and `{total}` interpolated. */\n counter: string\n /** Shown in place of a thumbnail when there are no items. */\n empty?: string\n}\n\nexport type LightboxConfig = {\n items: readonly LightboxItem[]\n labels: LightboxLabels\n /** `first` shows one thumbnail that opens the whole set; `all` shows one per item. */\n thumbnails?: 'first' | 'all'\n size?: 'small' | 'medium' | 'large'\n}\n\nexport type LightboxIslandProps = { id: string; config: LightboxConfig }\n\nconst MIN_ZOOM = 1\nconst MAX_ZOOM = 4\nconst ZOOM_STEP = 0.5\n\nconst fill = (template: string, params: Record<string, unknown>): string =>\n template.replace(/\\{(\\w+)\\}/g, (_, name: string) => String(params[name] ?? `{${name}}`))\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(max, Math.max(min, value))\n\n/**\n * The viewer without a trigger of its own: whatever renders thumbnails (a record's\n * image field, the rows of a variant editor) calls `open` with the set to show and\n * places `layer()` anywhere in its own view. `attach` wires the keyboard once, for\n * the lifetime of the island that owns it.\n */\nexport type LightboxController = {\n open: (items: readonly LightboxItem[], at: number, trigger: EventTarget | null) => void\n close: () => void\n isOpen: () => boolean\n layer: () => TemplateResult | null\n attach: (lifetime: AbortSignal) => void\n}\n\nexport function createLightbox(labels: LightboxLabels, id = 'lightbox'): LightboxController {\n const items = signal<readonly LightboxItem[]>([])\n const open = signal(false)\n const index = signal(0)\n const zoom = signal(MIN_ZOOM)\n const pan = signal({ x: 0, y: 0 })\n let returnFocus: HTMLElement | null = null\n // Every pointer down on the stage, so two fingers read as a pinch and one as a pan.\n const pointers = new Map<number, { x: number; y: number }>()\n let gesture: {\n start: { x: number; y: number }\n origin: { x: number; y: number }\n zoom: number\n distance: number | null\n moved: boolean\n } | null = null\n\n const resetView = (): void => {\n zoom.set(MIN_ZOOM)\n pan.set({ x: 0, y: 0 })\n }\n\n const show = (set: readonly LightboxItem[], at: number, trigger: EventTarget | null): void => {\n if (!set.length) return\n returnFocus = trigger instanceof HTMLElement ? trigger : null\n items.set(set)\n index.set(clamp(at, 0, set.length - 1))\n resetView()\n open.set(true)\n queueMicrotask(() => {\n if (typeof document === 'undefined') return\n document.getElementById(`${id}-lightbox-close`)?.focus()\n })\n }\n\n const hide = (): void => {\n if (!open()) return\n open.set(false)\n resetView()\n pointers.clear()\n gesture = null\n returnFocus?.focus()\n returnFocus = null\n }\n\n const step = (delta: number): void => {\n const total = items().length\n if (total < 2) return\n index.set((index() + delta + total) % total)\n resetView()\n }\n\n const zoomTo = (next: number): void => {\n const value = clamp(next, MIN_ZOOM, MAX_ZOOM)\n zoom.set(value)\n // Back at fit size there is nothing to pan across.\n if (value === MIN_ZOOM) pan.set({ x: 0, y: 0 })\n }\n\n const centerOf = (): { x: number; y: number } => {\n const points = [...pointers.values()]\n if (!points.length) return { x: 0, y: 0 }\n return {\n x: points.reduce((sum, point) => sum + point.x, 0) / points.length,\n y: points.reduce((sum, point) => sum + point.y, 0) / points.length,\n }\n }\n\n const distanceOf = (): number => {\n const [a, b] = [...pointers.values()]\n return a && b ? Math.hypot(a.x - b.x, a.y - b.y) : 0\n }\n\n const endPointer = (event: PointerEvent, completed: boolean): void => {\n // At fit size a horizontal swipe with one finger moves to the neighbouring image.\n if (completed && gesture && pointers.size === 1 && zoom() === MIN_ZOOM && gesture.distance === null) {\n const dx = event.clientX - gesture.start.x\n if (Math.abs(dx) > 60 && Math.abs(dx) > Math.abs(event.clientY - gesture.start.y)) step(dx < 0 ? 1 : -1)\n }\n pointers.delete(event.pointerId)\n ;(event.currentTarget as Element | null)?.releasePointerCapture?.(event.pointerId)\n if (!pointers.size) {\n // Keep `moved` until the click that follows this pointerup has been read.\n const finished = gesture\n if (finished && completed) setTimeout(() => (gesture === finished ? (gesture = null) : null), 0)\n else gesture = null\n return\n }\n // One finger lifted from a pinch: carry on as a pan from where things are now.\n if (gesture) gesture = { ...gesture, start: centerOf(), origin: pan(), zoom: zoom(), distance: null }\n }\n\n const layer = (): TemplateResult | null => {\n const set = items()\n const item = set[index()]\n if (!open() || !item) return null\n const scale = zoom()\n const offset = pan()\n const many = set.length > 1\n return (\n <div\n data-ui=\"lightbox-layer\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={item.alt}\n id={`${id}-lightbox`}\n >\n <div data-ui=\"lightbox-backdrop\" aria-hidden=\"true\" onClick={hide} />\n <div data-ui=\"lightbox-toolbar\">\n <span data-ui=\"lightbox-counter\" aria-live=\"polite\">\n {many ? fill(labels.counter, { index: index() + 1, total: set.length }) : ''}\n </span>\n <button\n type=\"button\"\n data-ui=\"lightbox-tool\"\n data-tool=\"zoom-out\"\n aria-label={labels.zoomOut}\n title={labels.zoomOut}\n disabled={scale <= MIN_ZOOM}\n onClick={() => zoomTo(scale - ZOOM_STEP)}\n >\n \u2212\n </button>\n <button\n type=\"button\"\n data-ui=\"lightbox-tool\"\n data-tool=\"zoom-in\"\n aria-label={labels.zoomIn}\n title={labels.zoomIn}\n disabled={scale >= MAX_ZOOM}\n onClick={() => zoomTo(scale + ZOOM_STEP)}\n >\n +\n </button>\n <button\n type=\"button\"\n data-ui=\"lightbox-tool\"\n data-tool=\"close\"\n id={`${id}-lightbox-close`}\n aria-label={labels.close}\n title={labels.close}\n onClick={hide}\n >\n \u00D7\n </button>\n </div>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: pointer gestures on the picture; the keyboard equivalents (+, -, arrows, Escape) are bound on the document while open */}\n <div\n role=\"presentation\"\n data-ui=\"lightbox-stage\"\n data-zoomed={String(scale > MIN_ZOOM)}\n onClick={(event) => {\n // A click on the empty stage around the picture closes, like the backdrop.\n if (event.target === event.currentTarget && !gesture?.moved) hide()\n }}\n onWheel={(event: WheelEvent) => {\n event.preventDefault()\n zoomTo(zoom() * (event.deltaY < 0 ? 1.15 : 1 / 1.15))\n }}\n onPointerDown={(event: PointerEvent) => {\n pointers.set(event.pointerId, { x: event.clientX, y: event.clientY })\n ;(event.currentTarget as Element).setPointerCapture?.(event.pointerId)\n gesture = {\n start: centerOf(),\n origin: pan(),\n zoom: zoom(),\n distance: pointers.size > 1 ? distanceOf() : null,\n moved: gesture?.moved === true && pointers.size > 1,\n }\n }}\n onPointerMove={(event: PointerEvent) => {\n if (!gesture || !pointers.has(event.pointerId)) return\n pointers.set(event.pointerId, { x: event.clientX, y: event.clientY })\n const center = centerOf()\n const dx = center.x - gesture.start.x\n const dy = center.y - gesture.start.y\n if (Math.abs(dx) + Math.abs(dy) > 4) gesture.moved = true\n if (pointers.size > 1 && gesture.distance) {\n // Pinch: scale by how far the fingers spread since they both came down.\n zoomTo(gesture.zoom * (distanceOf() / gesture.distance))\n gesture.moved = true\n }\n if (zoom() > MIN_ZOOM) pan.set({ x: gesture.origin.x + dx, y: gesture.origin.y + dy })\n }}\n onPointerUp={(event: PointerEvent) => endPointer(event, true)}\n onPointerCancel={(event: PointerEvent) => endPointer(event, false)}\n >\n {/* biome-ignore lint/a11y/useKeyWithClickEvents: + and - zoom from the keyboard while the viewer is open */}\n <img\n data-ui=\"lightbox-image\"\n src={item.src}\n alt={item.alt}\n draggable=\"false\"\n style={`transform: translate(${offset.x}px, ${offset.y}px) scale(${scale})`}\n onClick={() => {\n // A tap (not the end of a pan or pinch) toggles between fit and 2\u00D7.\n if (!gesture?.moved) zoomTo(zoom() > MIN_ZOOM ? MIN_ZOOM : 2)\n }}\n />\n </div>\n {many ? (\n <button\n type=\"button\"\n data-ui=\"lightbox-nav\"\n data-direction=\"previous\"\n aria-label={labels.previous}\n title={labels.previous}\n onClick={() => step(-1)}\n >\n \u2039\n </button>\n ) : null}\n {many ? (\n <button\n type=\"button\"\n data-ui=\"lightbox-nav\"\n data-direction=\"next\"\n aria-label={labels.next}\n title={labels.next}\n onClick={() => step(1)}\n >\n \u203A\n </button>\n ) : null}\n {item.caption ? <p data-ui=\"lightbox-caption\">{item.caption}</p> : null}\n </div>\n )\n }\n\n const attach = (lifetime: AbortSignal): void => {\n // Capture phase: an enclosing record modal also closes on Escape, and the\n // viewer on top of it must be the only layer that answers.\n document.addEventListener(\n 'keydown',\n (event) => {\n if (!open()) return\n if (event.key === 'Escape') hide()\n else if (event.key === 'ArrowLeft') step(-1)\n else if (event.key === 'ArrowRight') step(1)\n else if (event.key === '+' || event.key === '=') zoomTo(zoom() + ZOOM_STEP)\n else if (event.key === '-') zoomTo(zoom() - ZOOM_STEP)\n else return\n event.preventDefault()\n event.stopImmediatePropagation()\n },\n { signal: lifetime, capture: true },\n )\n lifetime.addEventListener('abort', () => {\n open.set(false)\n pointers.clear()\n gesture = null\n })\n }\n\n return { open: show, close: hide, isOpen: () => open(), layer, attach }\n}\n\n/** A thumbnail \u2014 or one per item \u2014 that opens the whole set in the viewer. */\nexport function createLightboxView(props: LightboxIslandProps): IslandController {\n const { id, config } = props\n const labels = config.labels\n const items = config.items\n const viewer = createLightbox(labels, id)\n\n const thumbs = (): TemplateResult => {\n const shown = config.thumbnails === 'all' ? items : items.slice(0, 1)\n if (!shown.length)\n return (\n <span data-ui=\"lightbox-empty\" data-size={config.size ?? 'medium'}>\n {labels.empty ?? ''}\n </span>\n )\n return (\n <div data-ui=\"lightbox-thumbs\">\n {each(\n [...shown],\n (item) => item.src,\n (item) =>\n LightboxThumb({\n item,\n labels,\n size: config.size,\n onOpen: (trigger) => viewer.open(items, items.indexOf(item), trigger),\n }),\n )}\n </div>\n )\n }\n\n return {\n view: () => (\n <div data-ui=\"lightbox\" id={id}>\n {thumbs()}\n {viewer.layer()}\n </div>\n ),\n mount: ({ lifetime }) => viewer.attach(lifetime),\n }\n}\n\n/** One thumbnail button, for a view that drives its own `createLightbox` controller. */\nexport const LightboxThumb = (props: {\n item: LightboxItem\n labels: Pick<LightboxLabels, 'open'>\n size?: 'small' | 'medium' | 'large'\n onOpen: (trigger: EventTarget | null) => void\n}): TemplateResult => (\n <button\n type=\"button\"\n data-ui=\"lightbox-thumb\"\n data-size={props.size ?? 'medium'}\n aria-label={fill(props.labels.open, { alt: props.item.alt })}\n aria-haspopup=\"dialog\"\n onClick={(event) => props.onOpen(event.currentTarget)}\n >\n <img src={props.item.thumbnail ?? props.item.src} alt=\"\" loading=\"lazy\" decoding=\"async\" />\n </button>\n)\n\nexport const lightbox = (props: IslandProps): IslandController =>\n createLightboxView(props as unknown as LightboxIslandProps)\n"],
5
+ "mappings": "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",
6
+ "names": ["each", "signal", "jsx", "jsxs", "HOOKS", "MIN_ZOOM", "MAX_ZOOM", "ZOOM_STEP", "fill", "template", "params", "_", "name", "clamp", "value", "min", "max", "createLightbox", "labels", "id", "items", "open", "index", "zoom", "pan", "returnFocus", "pointers", "gesture", "resetView", "show", "set", "at", "trigger", "hide", "step", "delta", "total", "zoomTo", "next", "centerOf", "points", "sum", "point", "distanceOf", "a", "b", "endPointer", "event", "completed", "dx", "finished", "item", "scale", "offset", "many", "center", "dy", "lifetime", "createLightboxView", "props", "config", "viewer", "thumbs", "shown", "LightboxThumb", "lightbox"]
7
+ }
@@ -1,10 +1,19 @@
1
- declare function tt(g: any): {
1
+ declare var le: string[];
2
+ declare function oe(b: any, p?: {}): {
2
3
  view: () => any;
4
+ mount: ({ root: e, lifetime: t }: {
5
+ lifetime: any;
6
+ root: any;
7
+ }) => void;
3
8
  dispose: () => void;
4
9
  };
5
- declare var at: (g: any) => {
10
+ declare var re: (b: any) => {
6
11
  view: () => any;
12
+ mount: ({ root: e, lifetime: t }: {
13
+ lifetime: any;
14
+ root: any;
15
+ }) => void;
7
16
  dispose: () => void;
8
17
  };
9
- export { tt as createRelationSelectView, at as relationSelect };
18
+ export { le as HOOKS, oe as createRelationSelectView, re as relationSelect };
10
19
  //# sourceMappingURL=relation-select.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relation-select.d.mts","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/backend/design/client/relation-select.mjs"],"names":[],"mappings":"AAC0f,iBAAS,EAAE,CAAC,CAAC,KAAA;IAAokM,IAAI;IAAqlE,OAAO;EAAwC;AAAA,QAAA,IAAI,EAAE;;;CAAS,CAAC;AAAA,OAAM,EAAC,EAAE,IAAI,wBAAwB,EAAC,EAAE,IAAI,cAAc,EAAC,CAAC"}
1
+ {"version":3,"file":"relation-select.d.mts","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/backend/design/client/relation-select.mjs"],"names":[],"mappings":"AAC8H,QAAA,IAAI,EAAE,UAAi1B,CAAC;AAAA,iBAAS,EAAE,CAAC,CAAC,KAAA,EAAC,CAAC,KAAG;;;;;;;EAAujT;AAAA,QAAA,IAAI,EAAE;;;;;;;CAAS,CAAC;AAAA,OAAM,EAAC,EAAE,IAAI,KAAK,EAAC,EAAE,IAAI,wBAAwB,EAAC,EAAE,IAAI,cAAc,EAAC,CAAC"}
@@ -1,2 +1,2 @@
1
1
  // @ts-nocheck Generated by tools/build-backend-client.mjs — do not edit.
2
- import{each as I,signal as v}from"/_ket/view/index.js";import{jsx as e,jsxs as r}from"/_ket/view/jsx-runtime.js";var T=g=>Array.isArray(g)?g:[],i=g=>g==null?"":String(g),M=async(g,h,d)=>{let a=await fetch(`/_ket/fn/${encodeURIComponent(g)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json"},body:JSON.stringify(h),signal:d}),o=await a.json();if(!a.ok||o.ok===!1){let b=T(o.errors)[0];throw new Error(i(b?.message??b?.code??o.message??`HTTP ${a.status}`))}return o.value};function tt(g){let{id:h,config:d}=g,a=d.labels,o=d.manager,b=d.multiple===!0,c=v(b?T(d.values).map(i).filter(Boolean):[i(d.value)].filter(Boolean)),H=()=>c()[0]??"",w=t=>c().includes(i(t)),p=v(T(d.options)),y=v(!1),S=v(!1),k=v(""),q=v([]),f=v(!1),R=v(""),m=v(null),E=v(""),P=null,D,V=!1,x=t=>i(t[o?.idField??"id"]),$=t=>i(t[o?.labelField??"name"])||a.noRecords,K=t=>i(t[o?.descriptionField??"ref"]),U=()=>p().find(t=>i(t.value)===H())?.label??a.choose,z=()=>{let t=k().trim().toLocaleLowerCase();return(t?p().filter(l=>`${i(l.label)} ${i(l.description)}`.toLocaleLowerCase().includes(t)):p()).slice(0,7)},L=(t,n,l="")=>{let u=i(t);if(p().some(s=>i(s.value)===u)||p.set([...p(),{value:u,label:i(n),description:i(l)}]),b){c.set(w(u)?c().filter(s=>s!==u):[...c(),u]);return}c.set(u?[u]:[]),y.set(!1),S.set(!1),k.set(""),m.set(null),E.set("")},j=t=>{c.set(c().filter(n=>n!==i(t)))},O=t=>p().find(n=>i(n.value)===i(t))?.label??i(t),F=async()=>{if(!o?.listFunction)return;P?.abort();let t=new AbortController;P=t,f.set(!0),R.set("");try{let n={...o.listInput??{}};n[o.searchParam??"search"]=k().trim(),n[o.limitParam??"limit"]=o.limit??80;let l=await M(o.listFunction,n,t.signal),u=new Set(T(o.excludeIds).map(i));q.set(T(l).filter(s=>!u.has(x(s))))}catch(n){if(V||n instanceof Error&&n.name==="AbortError")return;R.set(n instanceof Error?n.message:a.loadError)}finally{P===t&&f.set(!1)}},B=async()=>{y.set(!1),S.set(!0),m.set(null),E.set(""),await F()},A=()=>{S.set(!1),m.set(null),E.set(""),R.set("")},J=t=>{t.currentTarget instanceof HTMLInputElement&&(k.set(t.currentTarget.value),clearTimeout(D),D=setTimeout(F,180))},N=async t=>{if(t.preventDefault(),!o?.saveFunction||!(t.currentTarget instanceof HTMLFormElement))return;let n=m(),l=n?.id||crypto.randomUUID(),u={...o.saveDefaults??{},id:l};for(let[s,C]of new FormData(t.currentTarget).entries())u[s]=i(C);f.set(!0),R.set("");try{await M(o.saveFunction,u);let s=i(u[o.labelField??"name"]);if(!n?.id){L(l,s),b&&(m.set(null),await F());return}p.set(p().map(C=>i(C.value)===l?{...C,label:s||C.label}:C)),m.set(null),await F()}catch(s){R.set(s instanceof Error?s.message:a.loadError)}finally{f.set(!1)}},_=async t=>{let n=x(t);if(E()!==n){E.set(n);return}if(o?.removeFunction){f.set(!0),R.set("");try{await M(o.removeFunction,{...o.removeDefaults??{},id:n}),j(n),p.set(p().filter(l=>i(l.value)!==n)),E.set(""),await F()}catch(l){R.set(l instanceof Error?l.message:a.loadError)}finally{f.set(!1)}}},G=t=>{let n=m()?.row??o?.saveDefaults??{},l=i(n[t.name]),u=`${h}-relation-editor-${t.name}`;return r("label",{"data-ui":"form-field","data-span":"full",htmlFor:u,children:[r("span",{"data-ui":"form-label",children:[t.label,t.required?r("span",{"data-ui":"form-required","aria-hidden":"true",children:[" ","*"]}):null]}),t.type==="select"?e("select",{"data-ui":"form-control",id:u,name:t.name,required:t.required===!0,children:I(T(t.options),s=>s.value,s=>e("option",{value:s.value,selected:i(s.value)===l,children:s.label}))}):e("input",{"data-ui":"form-control",id:u,type:t.type??"text",name:t.name,value:l,autocomplete:"off",required:t.required===!0})]})},Q=()=>r("form",{"data-ui":"relation-editor",onSubmit:N,children:[e("div",{"data-ui":"form-grid",children:I(T(o?.fields),t=>t.name,G)}),e("div",{"data-ui":"form-actions",children:r("div",{"data-ui":"action-group",children:[e("button",{"data-ui":"action","data-variant":"primary",type:"submit",disabled:f(),children:a.save}),e("button",{"data-ui":"action","data-variant":"tertiary",type:"button",onClick:()=>m.set(null),children:a.cancel})]})})]}),W=t=>{let n=x(t),l=K(t);return r("li",{"data-ui":"relation-dialog-row","data-selected":String(w(n)),children:[r("button",{"data-ui":"relation-dialog-main",type:"button","aria-pressed":b?String(w(n)):null,onClick:()=>L(n,$(t),l),children:[e("strong",{children:$(t)}),l?e("small",{"data-ui":"relation-dialog-meta",children:l}):null]}),r("div",{"data-ui":"relation-dialog-actions",children:[e("button",{"data-ui":"action","data-size":"compact","data-variant":w(n)?"primary":"secondary",type:"button",onClick:()=>L(n,$(t),l),children:w(n)?a.chosen:a.select}),o?.saveFunction?e("button",{"data-ui":"action","data-size":"compact","data-variant":"tertiary",type:"button",onClick:()=>m.set({id:n,row:t}),children:a.edit}):null,o?.removeFunction?e("button",{"data-ui":"action","data-size":"compact","data-variant":"destructive",type:"button",onClick:()=>_(t),children:E()===n?a.confirmRemove:a.remove}):null]})]})},X=()=>r("div",{"data-ui":"modal-layer","data-presentation":"dialog",children:[e("button",{"data-ui":"modal-backdrop",type:"button","aria-label":a.close,onClick:A,children:e("span",{children:a.close})}),r("section",{"data-ui":"modal-sheet","data-size":"large",role:"dialog","aria-modal":"true","aria-labelledby":`${h}-relation-title`,children:[r("header",{"data-ui":"modal-head",children:[e("h2",{"data-ui":"modal-title",id:`${h}-relation-title`,children:a.dialogTitle}),e("button",{"data-ui":"modal-close",type:"button","aria-label":a.close,title:a.close,onClick:A,children:"\xD7"})]}),r("div",{"data-ui":"modal-body",children:[r("div",{"data-ui":"relation-dialog-toolbar",children:[e("input",{"data-ui":"form-control",type:"search",value:k(),autocomplete:"off",placeholder:a.search,"aria-label":a.search,onInput:J}),o?.saveFunction?e("button",{"data-ui":"action","data-variant":"primary",type:"button",onClick:()=>m.set({id:"",row:o.saveDefaults??{}}),children:a.create}):null]}),R()?r("aside",{"data-ui":"notice","data-tone":"danger",role:"alert",children:[r("div",{"data-ui":"notice-copy",children:[e("p",{"data-ui":"notice-title",children:a.loadError}),e("p",{"data-ui":"notice-message",children:R()})]}),e("button",{"data-ui":"action","data-variant":"secondary",type:"button",onClick:F,children:a.retry})]}):null,m()?Q():null,f()?e("p",{"data-ui":"relation-empty",role:"status",children:a.loading}):null,!f()&&!m()?q().length?e("ul",{"data-ui":"relation-dialog-list",children:I(q(),x,W)}):e("p",{"data-ui":"relation-empty",children:a.noRecords}):null]})]})]}),Y=t=>{!(t instanceof KeyboardEvent)||t.key!=="Escape"||(y.set(!1),A())},Z=t=>{t.preventDefault(),y.set(!0),t.currentTarget instanceof HTMLSelectElement&&t.currentTarget.nextElementSibling?.focus()};return{view:()=>r("div",{"data-ui":"relation-select",role:"group","aria-label":d.ariaLabel,onKeydown:Y,children:[r("select",{"data-ui":"relation-native",name:d.name,required:d.required===!0,disabled:d.disabled===!0,tabindex:"-1","aria-hidden":"true",onInvalid:Z,children:[e("option",{value:"",selected:!c().length}),b?c().length?e("option",{value:c().join(","),selected:!0,children:c().map(O).join(", ")}):null:I(p().filter(t=>i(t.value)),t=>t.value,t=>e("option",{value:t.value,selected:i(t.value)===H(),children:t.label}))]}),r("button",{"data-ui":"relation-trigger","data-empty":String(!c().length),type:"button","aria-haspopup":"listbox","aria-label":d.ariaLabel,"aria-expanded":String(y()),"aria-controls":`${h}-relation-menu`,disabled:d.disabled===!0,onClick:()=>y.set(!y()),children:[e("span",{"data-ui":"relation-value",children:b?a.choose:U()}),e("span",{"aria-hidden":"true",children:"\u2304"})]}),b&&c().length?e("ul",{"data-ui":"relation-chips","aria-label":a.chosen,children:I(c(),t=>t,t=>r("li",{"data-ui":"relation-chip",children:[e("span",{children:O(t)}),e("button",{"data-ui":"relation-chip-clear",type:"button","aria-label":`${a.clear}: ${O(t)}`,title:a.clear,disabled:d.disabled===!0,onClick:()=>j(t),children:"\xD7"})]}))}):null,y()?r("div",{"data-ui":"relation-menu",id:`${h}-relation-menu`,children:[e("input",{"data-ui":"relation-search",type:"search",value:k(),autocomplete:"off",placeholder:a.search,"aria-label":a.search,onInput:t=>{t.currentTarget instanceof HTMLInputElement&&k.set(t.currentTarget.value)}}),e("div",{"data-ui":"relation-options",role:"listbox",children:z().length?I(z(),t=>t.value,t=>r("button",{"data-ui":"relation-option",type:"button",role:"option","data-selected":String(w(t.value)),"aria-selected":String(w(t.value)),onClick:()=>L(t.value,t.label,t.description),children:[e("span",{children:t.label}),t.description?e("small",{children:t.description}):null]})):e("p",{"data-ui":"relation-empty",children:a.noRecords})}),e("footer",{"data-ui":"relation-footer",children:e("button",{"data-ui":"action","data-variant":"tertiary",type:"button",onClick:B,children:a.more})})]}):null,S()?X():null]}),dispose:()=>{V=!0,clearTimeout(D),P?.abort()}}}var at=g=>tt(g);export{tt as createRelationSelectView,at as relationSelect};
2
+ import{each as L,effect as ne,signal as f}from"/_ket/view/index.js";import{jsx as a,jsxs as s}from"/_ket/view/jsx-runtime.js";var le=["relation-select","relation-native","relation-trigger","relation-value","relation-caret","relation-chips","relation-chip","relation-chip-clear","relation-menu","relation-search","relation-options","relation-option","relation-footer","relation-empty","relation-editor","relation-dialog-toolbar","relation-search-field","relation-search-icon","relation-dialog-list","relation-dialog-row","relation-dialog-main","relation-dialog-meta","relation-dialog-actions"],C=b=>Array.isArray(b)?b:[],o=b=>b==null?"":String(b),j=async(b,p,k)=>{let c=await fetch(`/_ket/fn/${encodeURIComponent(b)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json"},body:JSON.stringify(p),signal:k}),n=await c.json();if(!c.ok||n.ok===!1){let i=C(n.errors)[0];throw new Error(o(i?.message??i?.code??n.message??`HTTP ${c.status}`))}return n.value};function oe(b,p={}){let{id:k,config:c}=b,n=c.labels,i=c.manager,E=c.multiple===!0,d=f(E?C(c.values).map(o).filter(Boolean):[o(c.value)].filter(Boolean)),K=()=>d()[0]??"",S=e=>d().includes(o(e)),v=f(C(c.options)),z=()=>p.options?.()??v(),F=()=>p.disabled?.()??c.disabled===!0,g=f(!1),x=f(!1),h=f(""),D=f([]),y=f(!1),R=f(""),m=f(null),T=f(""),P=null,A,M=!1,q=e=>o(e[i?.idField??"id"]),$=e=>o(e[i?.labelField??"name"])||n.noRecords,U=e=>o(e[i?.descriptionField??"ref"]),J=()=>v().find(e=>o(e.value)===K())?.label??n.choose,B=()=>{let e=h().trim().toLocaleLowerCase(),t=e?z().filter(l=>`${o(l.label)} ${o(l.description)}`.toLocaleLowerCase().includes(e)):z();return p.options?t:t.slice(0,7)},O=(e,t,l="")=>{if(F())return;let u=o(e);if(v().some(r=>o(r.value)===u)||v.set([...v(),{value:u,label:o(t),description:o(l)}]),E){d.set(S(u)?d().filter(r=>r!==u):[...d(),u]),p.onSelect?.({value:u,label:o(t),description:o(l)});return}d.set(u?[u]:[]),g.set(!1),x.set(!1),h.set(""),m.set(null),T.set(""),p.resetAfterSelect&&d.set([]),p.onSelect?.({value:u,label:o(t),description:o(l)})},N=e=>{d.set(d().filter(t=>t!==o(e)))},H=e=>v().find(t=>o(t.value)===o(e))?.label??o(e),I=async()=>{if(!i?.listFunction)return;P?.abort();let e=new AbortController;P=e,y.set(!0),R.set("");try{let t={...i.listInput??{}};t[i.searchParam??"search"]=h().trim(),t[i.limitParam??"limit"]=i.limit??80;let l=await j(i.listFunction,t,e.signal),u=new Set(C(i.excludeIds).map(o));D.set(C(l).filter(r=>!u.has(q(r))))}catch(t){if(M||t instanceof Error&&t.name==="AbortError")return;R.set(t instanceof Error?t.message:n.loadError)}finally{P===e&&y.set(!1)}},_=async()=>{g.set(!1),x.set(!0),m.set(null),T.set(""),await I()},V=()=>{x.set(!1),m.set(null),T.set(""),R.set("")},G=e=>{e.currentTarget instanceof HTMLInputElement&&(h.set(e.currentTarget.value),clearTimeout(A),A=setTimeout(I,180))},Q=async e=>{if(e.preventDefault(),!i?.saveFunction||!(e.currentTarget instanceof HTMLFormElement))return;let t=m(),l=t?.id||crypto.randomUUID(),u={...i.saveDefaults??{},id:l};for(let[r,w]of new FormData(e.currentTarget).entries())u[r]=o(w);y.set(!0),R.set("");try{await j(i.saveFunction,u);let r=o(u[i.labelField??"name"]);if(!t?.id){O(l,r),E&&(m.set(null),await I());return}v.set(v().map(w=>o(w.value)===l?{...w,label:r||w.label}:w)),m.set(null),await I()}catch(r){R.set(r instanceof Error?r.message:n.loadError)}finally{y.set(!1)}},W=async e=>{let t=q(e);if(T()!==t){T.set(t);return}if(i?.removeFunction){y.set(!0),R.set("");try{await j(i.removeFunction,{...i.removeDefaults??{},id:t}),N(t),v.set(v().filter(l=>o(l.value)!==t)),T.set(""),await I()}catch(l){R.set(l instanceof Error?l.message:n.loadError)}finally{y.set(!1)}}},X=e=>{let t=m()?.row??i?.saveDefaults??{},l=o(t[e.name]),u=`${k}-relation-editor-${e.name}`;return s("label",{"data-ui":"form-field","data-span":"full",htmlFor:u,children:[s("span",{"data-ui":"form-label",children:[e.label,e.required?s("span",{"data-ui":"form-required","aria-hidden":"true",children:[" ","*"]}):null]}),e.type==="select"?a("select",{"data-ui":"form-control",id:u,name:e.name,required:e.required===!0,children:L(C(e.options),r=>r.value,r=>a("option",{value:r.value,selected:o(r.value)===l,children:r.label}))}):a("input",{"data-ui":"form-control",id:u,type:e.type??"text",name:e.name,value:l,autocomplete:"off",required:e.required===!0})]})},Y=()=>s("form",{"data-ui":"relation-editor",onSubmit:Q,children:[a("div",{"data-ui":"form-grid",children:L(C(i?.fields),e=>e.name,X)}),a("div",{"data-ui":"form-actions",children:s("div",{"data-ui":"action-group",children:[a("button",{"data-ui":"action","data-variant":"primary",type:"submit",disabled:y(),children:n.save}),a("button",{"data-ui":"action","data-variant":"tertiary",type:"button",onClick:()=>m.set(null),children:n.cancel})]})})]}),Z=e=>{let t=q(e),l=U(e);return s("li",{"data-ui":"relation-dialog-row","data-selected":String(S(t)),children:[s("button",{"data-ui":"relation-dialog-main",type:"button","aria-pressed":E?String(S(t)):null,onClick:()=>O(t,$(e),l),children:[a("strong",{children:$(e)}),l?a("small",{"data-ui":"relation-dialog-meta",children:l}):null]}),s("div",{"data-ui":"relation-dialog-actions",children:[a("button",{"data-ui":"action","data-size":"compact","data-variant":S(t)?"primary":"secondary",type:"button",onClick:()=>O(t,$(e),l),children:S(t)?n.chosen:n.select}),i?.saveFunction?a("button",{"data-ui":"action","data-size":"compact","data-variant":"tertiary",type:"button",onClick:()=>m.set({id:t,row:e}),children:n.edit}):null,i?.removeFunction?a("button",{"data-ui":"action","data-size":"compact","data-variant":"destructive",type:"button",onClick:()=>W(e),children:T()===t?n.confirmRemove:n.remove}):null]})]})},ee=()=>s("div",{"data-ui":"modal-layer","data-presentation":"dialog",children:[a("button",{"data-ui":"modal-backdrop",type:"button","aria-label":n.close,onClick:V,children:a("span",{children:n.close})}),s("section",{"data-ui":"modal-sheet",role:"dialog","aria-modal":"true","aria-labelledby":`${k}-relation-title`,children:[s("header",{"data-ui":"modal-head",children:[a("h2",{"data-ui":"modal-title",id:`${k}-relation-title`,children:n.dialogTitle}),a("button",{"data-ui":"modal-close",type:"button","aria-label":n.close,title:n.close,onClick:V,children:"\xD7"})]}),s("div",{"data-ui":"modal-body",children:[s("div",{"data-ui":"relation-dialog-toolbar",children:[s("div",{"data-ui":"relation-search-field",children:[a("span",{"data-ui":"relation-search-icon","aria-hidden":"true",children:s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false",children:[a("circle",{cx:"11",cy:"11",r:"8"}),a("path",{d:"m21 21-4.3-4.3"})]})}),a("input",{"data-ui":"field-control",type:"search",value:h(),autocomplete:"off",placeholder:n.search,"aria-label":n.search,onInput:G})]}),i?.saveFunction?a("button",{"data-ui":"action","data-variant":"primary",type:"button",onClick:()=>m.set({id:"",row:i.saveDefaults??{}}),children:n.create}):null]}),R()?s("aside",{"data-ui":"notice","data-tone":"danger",role:"alert",children:[s("div",{"data-ui":"notice-copy",children:[a("p",{"data-ui":"notice-title",children:n.loadError}),a("p",{"data-ui":"notice-message",children:R()})]}),a("button",{"data-ui":"action","data-variant":"secondary",type:"button",onClick:I,children:n.retry})]}):null,m()?Y():null,y()?a("p",{"data-ui":"relation-empty",role:"status",children:n.loading}):null,!y()&&!m()?D().length?a("ul",{"data-ui":"relation-dialog-list",children:L(D(),q,Z)}):a("p",{"data-ui":"relation-empty",children:n.noRecords}):null]})]})]}),te=e=>{if(!(e instanceof KeyboardEvent)||e.key!=="Escape"||!g()&&!x())return;e.preventDefault(),e.stopPropagation();let t=e.currentTarget?.querySelector('[data-ui="relation-trigger"]');g.set(!1),V(),t?.focus()},ae=e=>{e.preventDefault(),g.set(!0),e.currentTarget instanceof HTMLSelectElement&&e.currentTarget.nextElementSibling?.focus()};return{view:()=>s("div",{"data-ui":"relation-select",role:"group","aria-label":c.ariaLabel,onKeydown:te,children:[s("select",{"data-ui":"relation-native",name:c.name,required:c.required===!0,disabled:F(),tabindex:"-1","aria-hidden":"true",onInvalid:ae,children:[a("option",{value:"",selected:!d().length}),E?d().length?a("option",{value:d().join(","),selected:!0,children:d().map(H).join(", ")}):null:L(v().filter(e=>o(e.value)),e=>e.value,e=>a("option",{value:e.value,selected:o(e.value)===K(),children:e.label}))]}),s("button",{"data-ui":"relation-trigger","data-empty":String(!d().length),type:"button","aria-haspopup":"listbox","aria-label":c.ariaLabel,"aria-expanded":String(g()),"aria-controls":`${k}-relation-menu`,disabled:F(),onClick:()=>g.set(!g()),children:[a("span",{"data-ui":"relation-value",children:E?n.choose:J()}),a("span",{"data-ui":"relation-caret","aria-hidden":"true",children:"\u25BE"})]}),E&&d().length?a("ul",{"data-ui":"relation-chips","aria-label":n.chosen,children:L(d(),e=>e,e=>s("li",{"data-ui":"relation-chip",children:[a("span",{children:H(e)}),a("button",{"data-ui":"relation-chip-clear",type:"button","aria-label":`${n.clear}: ${H(e)}`,title:n.clear,disabled:F(),onClick:()=>N(e),children:"\xD7"})]}))}):null,g()?s("div",{"data-ui":"relation-menu",id:`${k}-relation-menu`,children:[a("input",{"data-ui":"relation-search",type:"search",value:h(),autocomplete:"off",placeholder:n.search,"aria-label":n.search,onInput:e=>{e.currentTarget instanceof HTMLInputElement&&h.set(e.currentTarget.value)}}),a("div",{"data-ui":"relation-options",role:"listbox",children:B().length?L(B(),e=>e.value,e=>s("button",{"data-ui":"relation-option",type:"button",role:"option","data-selected":String(S(e.value)),"aria-selected":String(S(e.value)),onClick:()=>O(e.value,e.label,e.description),children:[a("span",{children:e.label}),e.description?a("small",{children:e.description}):null]})):a("p",{"data-ui":"relation-empty",children:n.noRecords})}),i||!p.options||p.onCreate?s("footer",{"data-ui":"relation-footer",children:[i||!p.options?a("button",{"data-ui":"action","data-variant":"tertiary",type:"button",onClick:_,children:n.more}):null,p.onCreate?a("button",{"data-ui":"action","data-variant":"tertiary",type:"button",disabled:F(),onClick:()=>{if(F())return;let e=h().trim();g.set(!1),h.set(""),p.onCreate?.(e)},children:n.create}):null]}):null]}):null,x()?ee():null]}),mount:({root:e,lifetime:t})=>{let l=!0,u=ne(()=>{if(d(),l){l=!1;return}queueMicrotask(()=>{if(M)return;let r=[...e.querySelectorAll('[data-ui="relation-native"]')][0];r instanceof HTMLSelectElement&&r.dispatchEvent(new Event("change",{bubbles:!0}))})});t.addEventListener("abort",u),document.addEventListener("click",r=>{if(!g())return;let w=r.target;w instanceof Node&&e.contains(w)||g.set(!1)},{signal:t})},dispose:()=>{M=!0,clearTimeout(A),P?.abort()}}}var re=b=>oe(b);export{le as HOOKS,oe as createRelationSelectView,re as relationSelect};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../ui/client/relation-select-view.tsx"],
4
- "sourcesContent": ["import { each, signal } from '@ketvietlab/ketjs-view'\nimport type { IslandController, IslandProps, TemplateResult } from '@ketvietlab/ketjs-view'\n\nexport type RelationOption = { value: string; label: string; description?: string | null }\n\nexport type RelationEditorField = {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'select'\n required?: boolean\n options?: RelationOption[]\n}\n\nexport type RelationManager = {\n listFunction: string\n listInput?: Record<string, unknown>\n searchParam?: string\n limitParam?: string\n limit?: number\n idField?: string\n labelField?: string\n descriptionField?: string\n saveFunction?: string\n saveDefaults?: Record<string, unknown>\n removeFunction?: string\n removeDefaults?: Record<string, unknown>\n fields?: RelationEditorField[]\n excludeIds?: string[]\n}\n\nexport type RelationSelectLabels = {\n choose: string\n search: string\n more: string\n noRecords: string\n loading: string\n loadError: string\n dialogTitle: string\n close: string\n select: string\n create: string\n edit: string\n save: string\n cancel: string\n remove: string\n confirmRemove: string\n retry: string\n clear: string\n chosen: string\n}\n\nexport type RelationSelectConfig = {\n name: string\n ariaLabel: string\n value?: string | null\n /**\n * Several records under one field name, joined by a comma on the way out.\n *\n * A repeated form key would not survive `readForm`, which builds a\n * `Record<string, string>` and keeps only the last value \u2014 so a multi-valued\n * field posts one comma-separated string, which is also what the routes that\n * take value lists already parse.\n */\n multiple?: boolean\n values?: string[]\n options: RelationOption[]\n required?: boolean\n disabled?: boolean\n labels: RelationSelectLabels\n manager?: RelationManager\n}\n\ntype RelationRow = Record<string, unknown>\ntype RelationEditor = { id: string; row: RelationRow }\ntype RelationSelectIslandProps = IslandProps & { id: string; config: RelationSelectConfig }\ntype ApiPayload = {\n ok?: boolean\n value?: unknown\n message?: unknown\n errors?: Array<{ message?: unknown; code?: unknown }>\n}\n\nconst array = <Value,>(value: unknown): Value[] => (Array.isArray(value) ? (value as Value[]) : [])\nconst string = (value: unknown): string => (value == null ? '' : String(value))\n\nconst callApi = async (name: string, input: unknown, requestSignal?: AbortSignal): Promise<unknown> => {\n const response = await fetch(`/_ket/fn/${encodeURIComponent(name)}`, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(input),\n signal: requestSignal,\n })\n const payload = (await response.json()) as ApiPayload\n if (!response.ok || payload.ok === false) {\n const domainError = array<{ message?: unknown; code?: unknown }>(payload.errors)[0]\n throw new Error(\n string(domainError?.message ?? domainError?.code ?? payload.message ?? `HTTP ${response.status}`),\n )\n }\n return payload.value\n}\n\nexport function createRelationSelectView(props: RelationSelectIslandProps): IslandController {\n const { id: islandId, config } = props\n const labels = config.labels\n const manager = config.manager\n // One representation for both modes: an array of chosen ids. Single-select is\n // the array of length 0 or 1, so downstream code only branches where the UI\n // genuinely differs \u2014 the trigger and the chips.\n const multiple = config.multiple === true\n const chosen = signal(\n multiple\n ? array<unknown>(config.values).map(string).filter(Boolean)\n : [string(config.value)].filter(Boolean),\n )\n const selected = (): string => chosen()[0] ?? ''\n const isChosen = (value: unknown): boolean => chosen().includes(string(value))\n const options = signal<RelationOption[]>(array<RelationOption>(config.options))\n const open = signal(false)\n const dialog = signal(false)\n const query = signal('')\n const rows = signal<RelationRow[]>([])\n const loading = signal(false)\n const error = signal('')\n const editor = signal<RelationEditor | null>(null)\n const pendingRemove = signal('')\n let activeRequest: AbortController | null = null\n let searchTimer: ReturnType<typeof setTimeout> | undefined\n let disposed = false\n\n const rowId = (row: RelationRow): string => string(row[manager?.idField ?? 'id'])\n const rowLabel = (row: RelationRow): string =>\n string(row[manager?.labelField ?? 'name']) || labels.noRecords\n const rowDescription = (row: RelationRow): string => string(row[manager?.descriptionField ?? 'ref'])\n const selectedLabel = (): string =>\n options().find((entry) => string(entry.value) === selected())?.label ?? labels.choose\n\n const filteredOptions = (): RelationOption[] => {\n const needle = query().trim().toLocaleLowerCase()\n const held = needle\n ? options().filter((entry) =>\n `${string(entry.label)} ${string(entry.description)}`.toLocaleLowerCase().includes(needle),\n )\n : options()\n return held.slice(0, 7)\n }\n\n const choose = (value: unknown, label: unknown, description: unknown = ''): void => {\n const id = string(value)\n if (!options().some((entry) => string(entry.value) === id))\n options.set([...options(), { value: id, label: string(label), description: string(description) }])\n if (multiple) {\n chosen.set(isChosen(id) ? chosen().filter((held) => held !== id) : [...chosen(), id])\n return\n }\n chosen.set(id ? [id] : [])\n open.set(false)\n dialog.set(false)\n query.set('')\n editor.set(null)\n pendingRemove.set('')\n }\n\n const unchoose = (value: unknown): void => {\n chosen.set(chosen().filter((held) => held !== string(value)))\n }\n\n const labelOf = (value: unknown): string =>\n options().find((entry) => string(entry.value) === string(value))?.label ?? string(value)\n\n const loadRows = async (): Promise<void> => {\n if (!manager?.listFunction) return\n activeRequest?.abort()\n const request = new AbortController()\n activeRequest = request\n loading.set(true)\n error.set('')\n try {\n const input: Record<string, unknown> = { ...(manager.listInput ?? {}) }\n input[manager.searchParam ?? 'search'] = query().trim()\n input[manager.limitParam ?? 'limit'] = manager.limit ?? 80\n const value = await callApi(manager.listFunction, input, request.signal)\n const excluded = new Set(array<unknown>(manager.excludeIds).map(string))\n rows.set(array<RelationRow>(value).filter((row) => !excluded.has(rowId(row))))\n } catch (caught) {\n if (disposed || (caught instanceof Error && caught.name === 'AbortError')) return\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n if (activeRequest === request) loading.set(false)\n }\n }\n\n const openDialog = async (): Promise<void> => {\n open.set(false)\n dialog.set(true)\n editor.set(null)\n pendingRemove.set('')\n await loadRows()\n }\n\n const closeDialog = (): void => {\n dialog.set(false)\n editor.set(null)\n pendingRemove.set('')\n error.set('')\n }\n\n const searchManager = (event: Event): void => {\n if (!(event.currentTarget instanceof HTMLInputElement)) return\n query.set(event.currentTarget.value)\n clearTimeout(searchTimer)\n searchTimer = setTimeout(loadRows, 180)\n }\n\n const save = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (!manager?.saveFunction || !(event.currentTarget instanceof HTMLFormElement)) return\n const editing = editor()\n const id = editing?.id || crypto.randomUUID()\n const payload: Record<string, unknown> = { ...(manager.saveDefaults ?? {}), id }\n for (const [name, value] of new FormData(event.currentTarget).entries()) payload[name] = string(value)\n loading.set(true)\n error.set('')\n try {\n await callApi(manager.saveFunction, payload)\n const label = string(payload[manager.labelField ?? 'name'])\n if (!editing?.id) {\n choose(id, label)\n if (multiple) {\n editor.set(null)\n await loadRows()\n }\n return\n }\n options.set(\n options().map((entry) =>\n string(entry.value) === id ? { ...entry, label: label || entry.label } : entry,\n ),\n )\n editor.set(null)\n await loadRows()\n } catch (caught) {\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n loading.set(false)\n }\n }\n\n const remove = async (row: RelationRow): Promise<void> => {\n const id = rowId(row)\n if (pendingRemove() !== id) {\n pendingRemove.set(id)\n return\n }\n if (!manager?.removeFunction) return\n loading.set(true)\n error.set('')\n try {\n await callApi(manager.removeFunction, { ...(manager.removeDefaults ?? {}), id })\n unchoose(id)\n options.set(options().filter((entry) => string(entry.value) !== id))\n pendingRemove.set('')\n await loadRows()\n } catch (caught) {\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n loading.set(false)\n }\n }\n\n const editorField = (field: RelationEditorField): TemplateResult => {\n const held = editor()?.row ?? manager?.saveDefaults ?? {}\n const value = string(held[field.name])\n const fieldId = `${islandId}-relation-editor-${field.name}`\n return (\n <label data-ui=\"form-field\" data-span=\"full\" htmlFor={fieldId}>\n <span data-ui=\"form-label\">\n {field.label}\n {field.required ? (\n <span data-ui=\"form-required\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n ) : null}\n </span>\n {field.type === 'select' ? (\n <select data-ui=\"form-control\" id={fieldId} name={field.name} required={field.required === true}>\n {each(\n array<RelationOption>(field.options),\n (entry) => entry.value,\n (entry) => (\n <option value={entry.value} selected={string(entry.value) === value}>\n {entry.label}\n </option>\n ),\n )}\n </select>\n ) : (\n <input\n data-ui=\"form-control\"\n id={fieldId}\n type={field.type ?? 'text'}\n name={field.name}\n value={value}\n autocomplete=\"off\"\n required={field.required === true}\n />\n )}\n </label>\n )\n }\n\n const editorForm = (): TemplateResult => (\n <form data-ui=\"relation-editor\" onSubmit={save}>\n <div data-ui=\"form-grid\">\n {each(array<RelationEditorField>(manager?.fields), (field) => field.name, editorField)}\n </div>\n <div data-ui=\"form-actions\">\n <div data-ui=\"action-group\">\n <button data-ui=\"action\" data-variant=\"primary\" type=\"submit\" disabled={loading()}>\n {labels.save}\n </button>\n <button data-ui=\"action\" data-variant=\"tertiary\" type=\"button\" onClick={() => editor.set(null)}>\n {labels.cancel}\n </button>\n </div>\n </div>\n </form>\n )\n\n const managerRow = (row: RelationRow): TemplateResult => {\n const id = rowId(row)\n const description = rowDescription(row)\n return (\n <li data-ui=\"relation-dialog-row\" data-selected={String(isChosen(id))}>\n <button\n data-ui=\"relation-dialog-main\"\n type=\"button\"\n aria-pressed={multiple ? String(isChosen(id)) : null}\n onClick={() => choose(id, rowLabel(row), description)}\n >\n <strong>{rowLabel(row)}</strong>\n {description ? <small data-ui=\"relation-dialog-meta\">{description}</small> : null}\n </button>\n <div data-ui=\"relation-dialog-actions\">\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant={isChosen(id) ? 'primary' : 'secondary'}\n type=\"button\"\n onClick={() => choose(id, rowLabel(row), description)}\n >\n {isChosen(id) ? labels.chosen : labels.select}\n </button>\n {manager?.saveFunction ? (\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant=\"tertiary\"\n type=\"button\"\n onClick={() => editor.set({ id, row })}\n >\n {labels.edit}\n </button>\n ) : null}\n {manager?.removeFunction ? (\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant=\"destructive\"\n type=\"button\"\n onClick={() => remove(row)}\n >\n {pendingRemove() === id ? labels.confirmRemove : labels.remove}\n </button>\n ) : null}\n </div>\n </li>\n )\n }\n\n const dialogView = (): TemplateResult => (\n <div data-ui=\"modal-layer\" data-presentation=\"dialog\">\n <button data-ui=\"modal-backdrop\" type=\"button\" aria-label={labels.close} onClick={closeDialog}>\n <span>{labels.close}</span>\n </button>\n <section\n data-ui=\"modal-sheet\"\n data-size=\"large\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={`${islandId}-relation-title`}\n >\n <header data-ui=\"modal-head\">\n <h2 data-ui=\"modal-title\" id={`${islandId}-relation-title`}>\n {labels.dialogTitle}\n </h2>\n <button\n data-ui=\"modal-close\"\n type=\"button\"\n aria-label={labels.close}\n title={labels.close}\n onClick={closeDialog}\n >\n \u00D7\n </button>\n </header>\n <div data-ui=\"modal-body\">\n <div data-ui=\"relation-dialog-toolbar\">\n <input\n data-ui=\"form-control\"\n type=\"search\"\n value={query()}\n autocomplete=\"off\"\n placeholder={labels.search}\n aria-label={labels.search}\n onInput={searchManager}\n />\n {manager?.saveFunction ? (\n <button\n data-ui=\"action\"\n data-variant=\"primary\"\n type=\"button\"\n onClick={() => editor.set({ id: '', row: manager.saveDefaults ?? {} })}\n >\n {labels.create}\n </button>\n ) : null}\n </div>\n {error() ? (\n <aside data-ui=\"notice\" data-tone=\"danger\" role=\"alert\">\n <div data-ui=\"notice-copy\">\n <p data-ui=\"notice-title\">{labels.loadError}</p>\n <p data-ui=\"notice-message\">{error()}</p>\n </div>\n <button data-ui=\"action\" data-variant=\"secondary\" type=\"button\" onClick={loadRows}>\n {labels.retry}\n </button>\n </aside>\n ) : null}\n {editor() ? editorForm() : null}\n {loading() ? (\n <p data-ui=\"relation-empty\" role=\"status\">\n {labels.loading}\n </p>\n ) : null}\n {!loading() && !editor() ? (\n rows().length ? (\n <ul data-ui=\"relation-dialog-list\">{each(rows(), rowId, managerRow)}</ul>\n ) : (\n <p data-ui=\"relation-empty\">{labels.noRecords}</p>\n )\n ) : null}\n </div>\n </section>\n </div>\n )\n\n const handleKeydown = (event: Event): void => {\n if (!(event instanceof KeyboardEvent) || event.key !== 'Escape') return\n open.set(false)\n closeDialog()\n }\n\n const handleInvalid = (event: Event): void => {\n event.preventDefault()\n open.set(true)\n if (event.currentTarget instanceof HTMLSelectElement)\n (event.currentTarget.nextElementSibling as HTMLElement | null)?.focus()\n }\n\n return {\n view: () => (\n <div data-ui=\"relation-select\" role=\"group\" aria-label={config.ariaLabel} onKeydown={handleKeydown}>\n {/* biome-ignore lint/a11y/noAriaHiddenOnFocusable: the off-tab native control preserves form submission and constraint validation while the adjacent trigger is the accessible interactive control. */}\n <select\n data-ui=\"relation-native\"\n name={config.name}\n required={config.required === true}\n disabled={config.disabled === true}\n tabindex=\"-1\"\n aria-hidden=\"true\"\n onInvalid={handleInvalid}\n >\n <option value=\"\" selected={!chosen().length} />\n {multiple ? (\n chosen().length ? (\n <option value={chosen().join(',')} selected>\n {chosen().map(labelOf).join(', ')}\n </option>\n ) : null\n ) : (\n each(\n options().filter((entry) => string(entry.value)),\n (entry) => entry.value,\n (entry) => (\n <option value={entry.value} selected={string(entry.value) === selected()}>\n {entry.label}\n </option>\n ),\n )\n )}\n </select>\n <button\n data-ui=\"relation-trigger\"\n data-empty={String(!chosen().length)}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-label={config.ariaLabel}\n aria-expanded={String(open())}\n aria-controls={`${islandId}-relation-menu`}\n disabled={config.disabled === true}\n onClick={() => open.set(!open())}\n >\n <span data-ui=\"relation-value\">{multiple ? labels.choose : selectedLabel()}</span>\n <span aria-hidden=\"true\">\u2304</span>\n </button>\n {multiple && chosen().length ? (\n <ul data-ui=\"relation-chips\" aria-label={labels.chosen}>\n {each(\n chosen(),\n (value) => value,\n (value) => (\n <li data-ui=\"relation-chip\">\n <span>{labelOf(value)}</span>\n <button\n data-ui=\"relation-chip-clear\"\n type=\"button\"\n aria-label={`${labels.clear}: ${labelOf(value)}`}\n title={labels.clear}\n disabled={config.disabled === true}\n onClick={() => unchoose(value)}\n >\n \u00D7\n </button>\n </li>\n ),\n )}\n </ul>\n ) : null}\n {open() ? (\n <div data-ui=\"relation-menu\" id={`${islandId}-relation-menu`}>\n <input\n data-ui=\"relation-search\"\n type=\"search\"\n value={query()}\n autocomplete=\"off\"\n placeholder={labels.search}\n aria-label={labels.search}\n onInput={(event) => {\n if (event.currentTarget instanceof HTMLInputElement) query.set(event.currentTarget.value)\n }}\n />\n <div data-ui=\"relation-options\" role=\"listbox\">\n {filteredOptions().length ? (\n each(\n filteredOptions(),\n (entry) => entry.value,\n (entry) => (\n <button\n data-ui=\"relation-option\"\n type=\"button\"\n role=\"option\"\n data-selected={String(isChosen(entry.value))}\n aria-selected={String(isChosen(entry.value))}\n onClick={() => choose(entry.value, entry.label, entry.description)}\n >\n <span>{entry.label}</span>\n {entry.description ? <small>{entry.description}</small> : null}\n </button>\n ),\n )\n ) : (\n <p data-ui=\"relation-empty\">{labels.noRecords}</p>\n )}\n </div>\n <footer data-ui=\"relation-footer\">\n <button data-ui=\"action\" data-variant=\"tertiary\" type=\"button\" onClick={openDialog}>\n {labels.more}\n </button>\n </footer>\n </div>\n ) : null}\n {dialog() ? dialogView() : null}\n </div>\n ),\n dispose: () => {\n disposed = true\n clearTimeout(searchTimer)\n activeRequest?.abort()\n },\n }\n}\n\nexport const relationSelect = (props: IslandProps): IslandController =>\n createRelationSelectView(props as RelationSelectIslandProps)\n"],
5
- "mappings": "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",
6
- "names": ["each", "signal", "jsx", "jsxs", "array", "value", "string", "callApi", "name", "input", "requestSignal", "response", "payload", "domainError", "createRelationSelectView", "props", "islandId", "config", "labels", "manager", "multiple", "chosen", "selected", "isChosen", "options", "open", "dialog", "query", "rows", "loading", "error", "editor", "pendingRemove", "activeRequest", "searchTimer", "disposed", "rowId", "row", "rowLabel", "rowDescription", "selectedLabel", "entry", "filteredOptions", "needle", "choose", "label", "description", "id", "held", "unchoose", "labelOf", "loadRows", "request", "excluded", "caught", "openDialog", "closeDialog", "searchManager", "event", "save", "editing", "remove", "editorField", "field", "fieldId", "editorForm", "managerRow", "dialogView", "handleKeydown", "handleInvalid", "relationSelect"]
3
+ "sources": ["../../../../../../design-system/src/interactions/relation-select/index.tsx"],
4
+ "sourcesContent": ["// Unlike its neighbors here, this is a ketjs-view *island*: it owns reactive state\n// (`signal`) and fetches its own data (`/_ket/fn/...`, a ketjs runtime contract, not\n// an application-specific one) rather than being a static, server-rendered control\n// wired up by the shared `attachDesignSystemInteractions` delegator. A consuming app\n// mounts it through its own island runtime (see `defineIsland` in `@ketvietlab/ketjs-view`)\n// and supplies the `manager` config that names which functions to call.\n\nimport { each, effect, signal } from '@ketvietlab/ketjs-view'\nimport type { IslandController, IslandProps, TemplateResult } from '@ketvietlab/ketjs-view'\n\nexport const HOOKS = [\n 'relation-select',\n 'relation-native',\n 'relation-trigger',\n 'relation-value',\n 'relation-caret',\n 'relation-chips',\n 'relation-chip',\n 'relation-chip-clear',\n 'relation-menu',\n 'relation-search',\n 'relation-options',\n 'relation-option',\n 'relation-footer',\n 'relation-empty',\n 'relation-editor',\n 'relation-dialog-toolbar',\n 'relation-search-field',\n 'relation-search-icon',\n 'relation-dialog-list',\n 'relation-dialog-row',\n 'relation-dialog-main',\n 'relation-dialog-meta',\n 'relation-dialog-actions',\n] as const\n\nexport type RelationOption = { value: string; label: string; description?: string | null }\n\nexport type RelationEditorField = {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'select'\n required?: boolean\n options?: RelationOption[]\n}\n\nexport type RelationManager = {\n listFunction: string\n listInput?: Record<string, unknown>\n searchParam?: string\n limitParam?: string\n limit?: number\n idField?: string\n labelField?: string\n descriptionField?: string\n saveFunction?: string\n saveDefaults?: Record<string, unknown>\n removeFunction?: string\n removeDefaults?: Record<string, unknown>\n fields?: RelationEditorField[]\n excludeIds?: string[]\n}\n\nexport type RelationSelectLabels = {\n choose: string\n search: string\n more: string\n noRecords: string\n loading: string\n loadError: string\n dialogTitle: string\n close: string\n select: string\n create: string\n edit: string\n save: string\n cancel: string\n remove: string\n confirmRemove: string\n retry: string\n clear: string\n chosen: string\n}\n\nexport type RelationSelectConfig = {\n name: string\n ariaLabel: string\n value?: string | null\n /**\n * Several records under one field name, joined by a comma on the way out.\n *\n * A repeated form key would not survive `readForm`, which builds a\n * `Record<string, string>` and keeps only the last value \u2014 so a multi-valued\n * field posts one comma-separated string, which is also what the routes that\n * take value lists already parse.\n */\n multiple?: boolean\n values?: string[]\n options: RelationOption[]\n required?: boolean\n disabled?: boolean\n labels: RelationSelectLabels\n manager?: RelationManager\n}\n\n/** Client-only composition hooks; keep callbacks out of serialized island props. */\nexport type RelationSelectCallbacks = {\n options?: () => RelationOption[]\n disabled?: () => boolean\n onSelect?: (option: RelationOption) => void\n onCreate?: (query: string) => void\n /** An add-to-list picker returns to its placeholder after each selection. */\n resetAfterSelect?: boolean\n}\n\ntype RelationRow = Record<string, unknown>\ntype RelationEditor = { id: string; row: RelationRow }\ntype RelationSelectIslandProps = IslandProps & { id: string; config: RelationSelectConfig }\ntype ApiPayload = {\n ok?: boolean\n value?: unknown\n message?: unknown\n errors?: Array<{ message?: unknown; code?: unknown }>\n}\n\nconst array = <Value,>(value: unknown): Value[] => (Array.isArray(value) ? (value as Value[]) : [])\nconst string = (value: unknown): string => (value == null ? '' : String(value))\n\nconst callApi = async (name: string, input: unknown, requestSignal?: AbortSignal): Promise<unknown> => {\n const response = await fetch(`/_ket/fn/${encodeURIComponent(name)}`, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(input),\n signal: requestSignal,\n })\n const payload = (await response.json()) as ApiPayload\n if (!response.ok || payload.ok === false) {\n const domainError = array<{ message?: unknown; code?: unknown }>(payload.errors)[0]\n throw new Error(\n string(domainError?.message ?? domainError?.code ?? payload.message ?? `HTTP ${response.status}`),\n )\n }\n return payload.value\n}\n\nexport function createRelationSelectView(\n props: RelationSelectIslandProps,\n callbacks: RelationSelectCallbacks = {},\n): IslandController {\n const { id: islandId, config } = props\n const labels = config.labels\n const manager = config.manager\n // One representation for both modes: an array of chosen ids. Single-select is\n // the array of length 0 or 1, so downstream code only branches where the UI\n // genuinely differs \u2014 the trigger and the chips.\n const multiple = config.multiple === true\n const chosen = signal(\n multiple\n ? array<unknown>(config.values).map(string).filter(Boolean)\n : [string(config.value)].filter(Boolean),\n )\n const selected = (): string => chosen()[0] ?? ''\n const isChosen = (value: unknown): boolean => chosen().includes(string(value))\n const options = signal<RelationOption[]>(array<RelationOption>(config.options))\n const availableOptions = (): RelationOption[] => callbacks.options?.() ?? options()\n const disabled = (): boolean => callbacks.disabled?.() ?? config.disabled === true\n const open = signal(false)\n const dialog = signal(false)\n const query = signal('')\n const rows = signal<RelationRow[]>([])\n const loading = signal(false)\n const error = signal('')\n const editor = signal<RelationEditor | null>(null)\n const pendingRemove = signal('')\n let activeRequest: AbortController | null = null\n let searchTimer: ReturnType<typeof setTimeout> | undefined\n let disposed = false\n\n const rowId = (row: RelationRow): string => string(row[manager?.idField ?? 'id'])\n const rowLabel = (row: RelationRow): string =>\n string(row[manager?.labelField ?? 'name']) || labels.noRecords\n const rowDescription = (row: RelationRow): string => string(row[manager?.descriptionField ?? 'ref'])\n const selectedLabel = (): string =>\n options().find((entry) => string(entry.value) === selected())?.label ?? labels.choose\n\n const filteredOptions = (): RelationOption[] => {\n const needle = query().trim().toLocaleLowerCase()\n const held = needle\n ? availableOptions().filter((entry) =>\n `${string(entry.label)} ${string(entry.description)}`.toLocaleLowerCase().includes(needle),\n )\n : availableOptions()\n return callbacks.options ? held : held.slice(0, 7)\n }\n\n const choose = (value: unknown, label: unknown, description: unknown = ''): void => {\n if (disabled()) return\n const id = string(value)\n if (!options().some((entry) => string(entry.value) === id))\n options.set([...options(), { value: id, label: string(label), description: string(description) }])\n if (multiple) {\n chosen.set(isChosen(id) ? chosen().filter((held) => held !== id) : [...chosen(), id])\n callbacks.onSelect?.({ value: id, label: string(label), description: string(description) })\n return\n }\n chosen.set(id ? [id] : [])\n open.set(false)\n dialog.set(false)\n query.set('')\n editor.set(null)\n pendingRemove.set('')\n if (callbacks.resetAfterSelect) chosen.set([])\n callbacks.onSelect?.({ value: id, label: string(label), description: string(description) })\n }\n\n const unchoose = (value: unknown): void => {\n chosen.set(chosen().filter((held) => held !== string(value)))\n }\n\n const labelOf = (value: unknown): string =>\n options().find((entry) => string(entry.value) === string(value))?.label ?? string(value)\n\n const loadRows = async (): Promise<void> => {\n if (!manager?.listFunction) return\n activeRequest?.abort()\n const request = new AbortController()\n activeRequest = request\n loading.set(true)\n error.set('')\n try {\n const input: Record<string, unknown> = { ...(manager.listInput ?? {}) }\n input[manager.searchParam ?? 'search'] = query().trim()\n input[manager.limitParam ?? 'limit'] = manager.limit ?? 80\n const value = await callApi(manager.listFunction, input, request.signal)\n const excluded = new Set(array<unknown>(manager.excludeIds).map(string))\n rows.set(array<RelationRow>(value).filter((row) => !excluded.has(rowId(row))))\n } catch (caught) {\n if (disposed || (caught instanceof Error && caught.name === 'AbortError')) return\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n if (activeRequest === request) loading.set(false)\n }\n }\n\n const openDialog = async (): Promise<void> => {\n open.set(false)\n dialog.set(true)\n editor.set(null)\n pendingRemove.set('')\n await loadRows()\n }\n\n const closeDialog = (): void => {\n dialog.set(false)\n editor.set(null)\n pendingRemove.set('')\n error.set('')\n }\n\n const searchManager = (event: Event): void => {\n if (!(event.currentTarget instanceof HTMLInputElement)) return\n query.set(event.currentTarget.value)\n clearTimeout(searchTimer)\n searchTimer = setTimeout(loadRows, 180)\n }\n\n const save = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (!manager?.saveFunction || !(event.currentTarget instanceof HTMLFormElement)) return\n const editing = editor()\n const id = editing?.id || crypto.randomUUID()\n const payload: Record<string, unknown> = { ...(manager.saveDefaults ?? {}), id }\n for (const [name, value] of new FormData(event.currentTarget).entries()) payload[name] = string(value)\n loading.set(true)\n error.set('')\n try {\n await callApi(manager.saveFunction, payload)\n const label = string(payload[manager.labelField ?? 'name'])\n if (!editing?.id) {\n choose(id, label)\n if (multiple) {\n editor.set(null)\n await loadRows()\n }\n return\n }\n options.set(\n options().map((entry) =>\n string(entry.value) === id ? { ...entry, label: label || entry.label } : entry,\n ),\n )\n editor.set(null)\n await loadRows()\n } catch (caught) {\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n loading.set(false)\n }\n }\n\n const remove = async (row: RelationRow): Promise<void> => {\n const id = rowId(row)\n if (pendingRemove() !== id) {\n pendingRemove.set(id)\n return\n }\n if (!manager?.removeFunction) return\n loading.set(true)\n error.set('')\n try {\n await callApi(manager.removeFunction, { ...(manager.removeDefaults ?? {}), id })\n unchoose(id)\n options.set(options().filter((entry) => string(entry.value) !== id))\n pendingRemove.set('')\n await loadRows()\n } catch (caught) {\n error.set(caught instanceof Error ? caught.message : labels.loadError)\n } finally {\n loading.set(false)\n }\n }\n\n const editorField = (field: RelationEditorField): TemplateResult => {\n const held = editor()?.row ?? manager?.saveDefaults ?? {}\n const value = string(held[field.name])\n const fieldId = `${islandId}-relation-editor-${field.name}`\n return (\n <label data-ui=\"form-field\" data-span=\"full\" htmlFor={fieldId}>\n <span data-ui=\"form-label\">\n {field.label}\n {field.required ? (\n <span data-ui=\"form-required\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n ) : null}\n </span>\n {field.type === 'select' ? (\n <select data-ui=\"form-control\" id={fieldId} name={field.name} required={field.required === true}>\n {each(\n array<RelationOption>(field.options),\n (entry) => entry.value,\n (entry) => (\n <option value={entry.value} selected={string(entry.value) === value}>\n {entry.label}\n </option>\n ),\n )}\n </select>\n ) : (\n <input\n data-ui=\"form-control\"\n id={fieldId}\n type={field.type ?? 'text'}\n name={field.name}\n value={value}\n autocomplete=\"off\"\n required={field.required === true}\n />\n )}\n </label>\n )\n }\n\n const editorForm = (): TemplateResult => (\n <form data-ui=\"relation-editor\" onSubmit={save}>\n <div data-ui=\"form-grid\">\n {each(array<RelationEditorField>(manager?.fields), (field) => field.name, editorField)}\n </div>\n <div data-ui=\"form-actions\">\n <div data-ui=\"action-group\">\n <button data-ui=\"action\" data-variant=\"primary\" type=\"submit\" disabled={loading()}>\n {labels.save}\n </button>\n <button data-ui=\"action\" data-variant=\"tertiary\" type=\"button\" onClick={() => editor.set(null)}>\n {labels.cancel}\n </button>\n </div>\n </div>\n </form>\n )\n\n const managerRow = (row: RelationRow): TemplateResult => {\n const id = rowId(row)\n const description = rowDescription(row)\n return (\n <li data-ui=\"relation-dialog-row\" data-selected={String(isChosen(id))}>\n <button\n data-ui=\"relation-dialog-main\"\n type=\"button\"\n aria-pressed={multiple ? String(isChosen(id)) : null}\n onClick={() => choose(id, rowLabel(row), description)}\n >\n <strong>{rowLabel(row)}</strong>\n {description ? <small data-ui=\"relation-dialog-meta\">{description}</small> : null}\n </button>\n <div data-ui=\"relation-dialog-actions\">\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant={isChosen(id) ? 'primary' : 'secondary'}\n type=\"button\"\n onClick={() => choose(id, rowLabel(row), description)}\n >\n {isChosen(id) ? labels.chosen : labels.select}\n </button>\n {manager?.saveFunction ? (\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant=\"tertiary\"\n type=\"button\"\n onClick={() => editor.set({ id, row })}\n >\n {labels.edit}\n </button>\n ) : null}\n {manager?.removeFunction ? (\n <button\n data-ui=\"action\"\n data-size=\"compact\"\n data-variant=\"destructive\"\n type=\"button\"\n onClick={() => remove(row)}\n >\n {pendingRemove() === id ? labels.confirmRemove : labels.remove}\n </button>\n ) : null}\n </div>\n </li>\n )\n }\n\n const dialogView = (): TemplateResult => (\n <div data-ui=\"modal-layer\" data-presentation=\"dialog\">\n <button data-ui=\"modal-backdrop\" type=\"button\" aria-label={labels.close} onClick={closeDialog}>\n <span>{labels.close}</span>\n </button>\n <section\n data-ui=\"modal-sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={`${islandId}-relation-title`}\n >\n <header data-ui=\"modal-head\">\n <h2 data-ui=\"modal-title\" id={`${islandId}-relation-title`}>\n {labels.dialogTitle}\n </h2>\n <button\n data-ui=\"modal-close\"\n type=\"button\"\n aria-label={labels.close}\n title={labels.close}\n onClick={closeDialog}\n >\n \u00D7\n </button>\n </header>\n <div data-ui=\"modal-body\">\n <div data-ui=\"relation-dialog-toolbar\">\n <div data-ui=\"relation-search-field\">\n <span data-ui=\"relation-search-icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n </span>\n <input\n data-ui=\"field-control\"\n type=\"search\"\n value={query()}\n autocomplete=\"off\"\n placeholder={labels.search}\n aria-label={labels.search}\n onInput={searchManager}\n />\n </div>\n {manager?.saveFunction ? (\n <button\n data-ui=\"action\"\n data-variant=\"primary\"\n type=\"button\"\n onClick={() => editor.set({ id: '', row: manager.saveDefaults ?? {} })}\n >\n {labels.create}\n </button>\n ) : null}\n </div>\n {error() ? (\n <aside data-ui=\"notice\" data-tone=\"danger\" role=\"alert\">\n <div data-ui=\"notice-copy\">\n <p data-ui=\"notice-title\">{labels.loadError}</p>\n <p data-ui=\"notice-message\">{error()}</p>\n </div>\n <button data-ui=\"action\" data-variant=\"secondary\" type=\"button\" onClick={loadRows}>\n {labels.retry}\n </button>\n </aside>\n ) : null}\n {editor() ? editorForm() : null}\n {loading() ? (\n <p data-ui=\"relation-empty\" role=\"status\">\n {labels.loading}\n </p>\n ) : null}\n {!loading() && !editor() ? (\n rows().length ? (\n <ul data-ui=\"relation-dialog-list\">{each(rows(), rowId, managerRow)}</ul>\n ) : (\n <p data-ui=\"relation-empty\">{labels.noRecords}</p>\n )\n ) : null}\n </div>\n </section>\n </div>\n )\n\n const handleKeydown = (event: Event): void => {\n if (!(event instanceof KeyboardEvent) || event.key !== 'Escape') return\n if (!open() && !dialog()) return\n event.preventDefault()\n event.stopPropagation()\n const trigger = (event.currentTarget as HTMLElement | null)?.querySelector<HTMLElement>(\n '[data-ui=\"relation-trigger\"]',\n )\n open.set(false)\n closeDialog()\n trigger?.focus()\n }\n\n const handleInvalid = (event: Event): void => {\n event.preventDefault()\n open.set(true)\n if (event.currentTarget instanceof HTMLSelectElement)\n (event.currentTarget.nextElementSibling as HTMLElement | null)?.focus()\n }\n\n return {\n view: () => (\n <div data-ui=\"relation-select\" role=\"group\" aria-label={config.ariaLabel} onKeydown={handleKeydown}>\n {/* biome-ignore lint/a11y/noAriaHiddenOnFocusable: the off-tab native control preserves form submission and constraint validation while the adjacent trigger is the accessible interactive control. */}\n <select\n data-ui=\"relation-native\"\n name={config.name}\n required={config.required === true}\n disabled={disabled()}\n tabindex=\"-1\"\n aria-hidden=\"true\"\n onInvalid={handleInvalid}\n >\n <option value=\"\" selected={!chosen().length} />\n {multiple ? (\n chosen().length ? (\n <option value={chosen().join(',')} selected>\n {chosen().map(labelOf).join(', ')}\n </option>\n ) : null\n ) : (\n each(\n options().filter((entry) => string(entry.value)),\n (entry) => entry.value,\n (entry) => (\n <option value={entry.value} selected={string(entry.value) === selected()}>\n {entry.label}\n </option>\n ),\n )\n )}\n </select>\n <button\n data-ui=\"relation-trigger\"\n data-empty={String(!chosen().length)}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-label={config.ariaLabel}\n aria-expanded={String(open())}\n aria-controls={`${islandId}-relation-menu`}\n disabled={disabled()}\n onClick={() => open.set(!open())}\n >\n <span data-ui=\"relation-value\">{multiple ? labels.choose : selectedLabel()}</span>\n <span data-ui=\"relation-caret\" aria-hidden=\"true\">\n \u25BE\n </span>\n </button>\n {multiple && chosen().length ? (\n <ul data-ui=\"relation-chips\" aria-label={labels.chosen}>\n {each(\n chosen(),\n (value) => value,\n (value) => (\n <li data-ui=\"relation-chip\">\n <span>{labelOf(value)}</span>\n <button\n data-ui=\"relation-chip-clear\"\n type=\"button\"\n aria-label={`${labels.clear}: ${labelOf(value)}`}\n title={labels.clear}\n disabled={disabled()}\n onClick={() => unchoose(value)}\n >\n \u00D7\n </button>\n </li>\n ),\n )}\n </ul>\n ) : null}\n {open() ? (\n <div data-ui=\"relation-menu\" id={`${islandId}-relation-menu`}>\n <input\n data-ui=\"relation-search\"\n type=\"search\"\n value={query()}\n autocomplete=\"off\"\n placeholder={labels.search}\n aria-label={labels.search}\n onInput={(event) => {\n if (event.currentTarget instanceof HTMLInputElement) query.set(event.currentTarget.value)\n }}\n />\n <div data-ui=\"relation-options\" role=\"listbox\">\n {filteredOptions().length ? (\n each(\n filteredOptions(),\n (entry) => entry.value,\n (entry) => (\n <button\n data-ui=\"relation-option\"\n type=\"button\"\n role=\"option\"\n data-selected={String(isChosen(entry.value))}\n aria-selected={String(isChosen(entry.value))}\n onClick={() => choose(entry.value, entry.label, entry.description)}\n >\n <span>{entry.label}</span>\n {entry.description ? <small>{entry.description}</small> : null}\n </button>\n ),\n )\n ) : (\n <p data-ui=\"relation-empty\">{labels.noRecords}</p>\n )}\n </div>\n {manager || !callbacks.options || callbacks.onCreate ? (\n <footer data-ui=\"relation-footer\">\n {manager || !callbacks.options ? (\n <button data-ui=\"action\" data-variant=\"tertiary\" type=\"button\" onClick={openDialog}>\n {labels.more}\n </button>\n ) : null}\n {callbacks.onCreate ? (\n <button\n data-ui=\"action\"\n data-variant=\"tertiary\"\n type=\"button\"\n disabled={disabled()}\n onClick={() => {\n if (disabled()) return\n const name = query().trim()\n open.set(false)\n query.set('')\n callbacks.onCreate?.(name)\n }}\n >\n {labels.create}\n </button>\n ) : null}\n </footer>\n ) : null}\n </div>\n ) : null}\n {dialog() ? dialogView() : null}\n </div>\n ),\n // The hidden native select stands in for a real one \u2014 including firing\n // `change` for whatever the host page already listens for there (a state\n // recomputed off another field's selection, say). Skip the effect's own\n // eager first run: nothing has changed yet, only settled onto its initial value.\n // The dispatch itself waits a microtask: firing it synchronously, still\n // inside the signal write that is choosing this very value, let a listener\n // that reacts by re-rendering (and so disposing and re-mounting this same\n // island) re-enter this instance's own `choose()` while it was still on the\n // stack \u2014 deferring runs it only once the choice has fully settled.\n mount: ({ root, lifetime }) => {\n let first = true\n const stop = effect(() => {\n chosen()\n if (first) {\n first = false\n return\n }\n queueMicrotask(() => {\n if (disposed) return\n const native = [...root.querySelectorAll('[data-ui=\"relation-native\"]')][0]\n if (native instanceof HTMLSelectElement)\n native.dispatchEvent(new Event('change', { bubbles: true }))\n })\n })\n lifetime.addEventListener('abort', stop)\n // The inline dropdown isn't a <details> \u2014 nothing in the shared\n // `attachDesignSystemInteractions` outside-click delegator sees it, so it\n // closes itself the same way every other popup does. The dialog already\n // closes on its own backdrop click.\n document.addEventListener(\n 'click',\n (event) => {\n if (!open()) return\n const target = event.target\n if (target instanceof Node && (root as unknown as Node).contains(target)) return\n open.set(false)\n },\n { signal: lifetime },\n )\n },\n dispose: () => {\n disposed = true\n clearTimeout(searchTimer)\n activeRequest?.abort()\n },\n }\n}\n\nexport const relationSelect = (props: IslandProps): IslandController =>\n createRelationSelectView(props as RelationSelectIslandProps)\n"],
5
+ "mappings": ";AAOA,OAAS,QAAAA,EAAM,UAAAC,GAAQ,UAAAC,MAAc,sBAqUzB,OAYI,OAAAC,EAZJ,QAAAC,MAAA,4BAlUL,IAAMC,GAAQ,CACnB,kBACA,kBACA,mBACA,iBACA,iBACA,iBACA,gBACA,sBACA,gBACA,kBACA,mBACA,kBACA,kBACA,iBACA,kBACA,0BACA,wBACA,uBACA,uBACA,sBACA,uBACA,uBACA,yBACF,EA2FMC,EAAiBC,GAA6B,MAAM,QAAQA,CAAK,EAAKA,EAAoB,CAAC,EAC3FC,EAAUD,GAA4BA,GAAS,KAAO,GAAK,OAAOA,CAAK,EAEvEE,EAAU,MAAOC,EAAcC,EAAgBC,IAAkD,CACrG,IAAMC,EAAW,MAAM,MAAM,YAAY,mBAAmBH,CAAI,CAAC,GAAI,CACnE,OAAQ,OACR,YAAa,cACb,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAUC,CAAK,EAC1B,OAAQC,CACV,CAAC,EACKE,EAAW,MAAMD,EAAS,KAAK,EACrC,GAAI,CAACA,EAAS,IAAMC,EAAQ,KAAO,GAAO,CACxC,IAAMC,EAAcT,EAA6CQ,EAAQ,MAAM,EAAE,CAAC,EAClF,MAAM,IAAI,MACRN,EAAOO,GAAa,SAAWA,GAAa,MAAQD,EAAQ,SAAW,QAAQD,EAAS,MAAM,EAAE,CAClG,CACF,CACA,OAAOC,EAAQ,KACjB,EAEO,SAASE,GACdC,EACAC,EAAqC,CAAC,EACpB,CAClB,GAAM,CAAE,GAAIC,EAAU,OAAAC,CAAO,EAAIH,EAC3BI,EAASD,EAAO,OAChBE,EAAUF,EAAO,QAIjBG,EAAWH,EAAO,WAAa,GAC/BI,EAAStB,EACbqB,EACIjB,EAAec,EAAO,MAAM,EAAE,IAAIZ,CAAM,EAAE,OAAO,OAAO,EACxD,CAACA,EAAOY,EAAO,KAAK,CAAC,EAAE,OAAO,OAAO,CAC3C,EACMK,EAAW,IAAcD,EAAO,EAAE,CAAC,GAAK,GACxCE,EAAYnB,GAA4BiB,EAAO,EAAE,SAAShB,EAAOD,CAAK,CAAC,EACvEoB,EAAUzB,EAAyBI,EAAsBc,EAAO,OAAO,CAAC,EACxEQ,EAAmB,IAAwBV,EAAU,UAAU,GAAKS,EAAQ,EAC5EE,EAAW,IAAeX,EAAU,WAAW,GAAKE,EAAO,WAAa,GACxEU,EAAO5B,EAAO,EAAK,EACnB6B,EAAS7B,EAAO,EAAK,EACrB8B,EAAQ9B,EAAO,EAAE,EACjB+B,EAAO/B,EAAsB,CAAC,CAAC,EAC/BgC,EAAUhC,EAAO,EAAK,EACtBiC,EAAQjC,EAAO,EAAE,EACjBkC,EAASlC,EAA8B,IAAI,EAC3CmC,EAAgBnC,EAAO,EAAE,EAC3BoC,EAAwC,KACxCC,EACAC,EAAW,GAETC,EAASC,GAA6BlC,EAAOkC,EAAIpB,GAAS,SAAW,IAAI,CAAC,EAC1EqB,EAAYD,GAChBlC,EAAOkC,EAAIpB,GAAS,YAAc,MAAM,CAAC,GAAKD,EAAO,UACjDuB,EAAkBF,GAA6BlC,EAAOkC,EAAIpB,GAAS,kBAAoB,KAAK,CAAC,EAC7FuB,EAAgB,IACpBlB,EAAQ,EAAE,KAAMmB,GAAUtC,EAAOsC,EAAM,KAAK,IAAMrB,EAAS,CAAC,GAAG,OAASJ,EAAO,OAE3E0B,EAAkB,IAAwB,CAC9C,IAAMC,EAAShB,EAAM,EAAE,KAAK,EAAE,kBAAkB,EAC1CiB,EAAOD,EACTpB,EAAiB,EAAE,OAAQkB,GACzB,GAAGtC,EAAOsC,EAAM,KAAK,CAAC,IAAItC,EAAOsC,EAAM,WAAW,CAAC,GAAG,kBAAkB,EAAE,SAASE,CAAM,CAC3F,EACApB,EAAiB,EACrB,OAAOV,EAAU,QAAU+B,EAAOA,EAAK,MAAM,EAAG,CAAC,CACnD,EAEMC,EAAS,CAAC3C,EAAgB4C,EAAgBC,EAAuB,KAAa,CAClF,GAAIvB,EAAS,EAAG,OAChB,IAAMwB,EAAK7C,EAAOD,CAAK,EAGvB,GAFKoB,EAAQ,EAAE,KAAMmB,GAAUtC,EAAOsC,EAAM,KAAK,IAAMO,CAAE,GACvD1B,EAAQ,IAAI,CAAC,GAAGA,EAAQ,EAAG,CAAE,MAAO0B,EAAI,MAAO7C,EAAO2C,CAAK,EAAG,YAAa3C,EAAO4C,CAAW,CAAE,CAAC,CAAC,EAC/F7B,EAAU,CACZC,EAAO,IAAIE,EAAS2B,CAAE,EAAI7B,EAAO,EAAE,OAAQyB,GAASA,IAASI,CAAE,EAAI,CAAC,GAAG7B,EAAO,EAAG6B,CAAE,CAAC,EACpFnC,EAAU,WAAW,CAAE,MAAOmC,EAAI,MAAO7C,EAAO2C,CAAK,EAAG,YAAa3C,EAAO4C,CAAW,CAAE,CAAC,EAC1F,MACF,CACA5B,EAAO,IAAI6B,EAAK,CAACA,CAAE,EAAI,CAAC,CAAC,EACzBvB,EAAK,IAAI,EAAK,EACdC,EAAO,IAAI,EAAK,EAChBC,EAAM,IAAI,EAAE,EACZI,EAAO,IAAI,IAAI,EACfC,EAAc,IAAI,EAAE,EAChBnB,EAAU,kBAAkBM,EAAO,IAAI,CAAC,CAAC,EAC7CN,EAAU,WAAW,CAAE,MAAOmC,EAAI,MAAO7C,EAAO2C,CAAK,EAAG,YAAa3C,EAAO4C,CAAW,CAAE,CAAC,CAC5F,EAEME,EAAY/C,GAAyB,CACzCiB,EAAO,IAAIA,EAAO,EAAE,OAAQyB,GAASA,IAASzC,EAAOD,CAAK,CAAC,CAAC,CAC9D,EAEMgD,EAAWhD,GACfoB,EAAQ,EAAE,KAAMmB,GAAUtC,EAAOsC,EAAM,KAAK,IAAMtC,EAAOD,CAAK,CAAC,GAAG,OAASC,EAAOD,CAAK,EAEnFiD,EAAW,SAA2B,CAC1C,GAAI,CAAClC,GAAS,aAAc,OAC5BgB,GAAe,MAAM,EACrB,IAAMmB,EAAU,IAAI,gBACpBnB,EAAgBmB,EAChBvB,EAAQ,IAAI,EAAI,EAChBC,EAAM,IAAI,EAAE,EACZ,GAAI,CACF,IAAMxB,EAAiC,CAAE,GAAIW,EAAQ,WAAa,CAAC,CAAG,EACtEX,EAAMW,EAAQ,aAAe,QAAQ,EAAIU,EAAM,EAAE,KAAK,EACtDrB,EAAMW,EAAQ,YAAc,OAAO,EAAIA,EAAQ,OAAS,GACxD,IAAMf,EAAQ,MAAME,EAAQa,EAAQ,aAAcX,EAAO8C,EAAQ,MAAM,EACjEC,EAAW,IAAI,IAAIpD,EAAegB,EAAQ,UAAU,EAAE,IAAId,CAAM,CAAC,EACvEyB,EAAK,IAAI3B,EAAmBC,CAAK,EAAE,OAAQmC,GAAQ,CAACgB,EAAS,IAAIjB,EAAMC,CAAG,CAAC,CAAC,CAAC,CAC/E,OAASiB,EAAQ,CACf,GAAInB,GAAamB,aAAkB,OAASA,EAAO,OAAS,aAAe,OAC3ExB,EAAM,IAAIwB,aAAkB,MAAQA,EAAO,QAAUtC,EAAO,SAAS,CACvE,QAAE,CACIiB,IAAkBmB,GAASvB,EAAQ,IAAI,EAAK,CAClD,CACF,EAEM0B,EAAa,SAA2B,CAC5C9B,EAAK,IAAI,EAAK,EACdC,EAAO,IAAI,EAAI,EACfK,EAAO,IAAI,IAAI,EACfC,EAAc,IAAI,EAAE,EACpB,MAAMmB,EAAS,CACjB,EAEMK,EAAc,IAAY,CAC9B9B,EAAO,IAAI,EAAK,EAChBK,EAAO,IAAI,IAAI,EACfC,EAAc,IAAI,EAAE,EACpBF,EAAM,IAAI,EAAE,CACd,EAEM2B,EAAiBC,GAAuB,CACtCA,EAAM,yBAAyB,mBACrC/B,EAAM,IAAI+B,EAAM,cAAc,KAAK,EACnC,aAAaxB,CAAW,EACxBA,EAAc,WAAWiB,EAAU,GAAG,EACxC,EAEMQ,EAAO,MAAOD,GAAgC,CAElD,GADAA,EAAM,eAAe,EACjB,CAACzC,GAAS,cAAgB,EAAEyC,EAAM,yBAAyB,iBAAkB,OACjF,IAAME,EAAU7B,EAAO,EACjBiB,EAAKY,GAAS,IAAM,OAAO,WAAW,EACtCnD,EAAmC,CAAE,GAAIQ,EAAQ,cAAgB,CAAC,EAAI,GAAA+B,CAAG,EAC/E,OAAW,CAAC3C,EAAMH,CAAK,IAAK,IAAI,SAASwD,EAAM,aAAa,EAAE,QAAQ,EAAGjD,EAAQJ,CAAI,EAAIF,EAAOD,CAAK,EACrG2B,EAAQ,IAAI,EAAI,EAChBC,EAAM,IAAI,EAAE,EACZ,GAAI,CACF,MAAM1B,EAAQa,EAAQ,aAAcR,CAAO,EAC3C,IAAMqC,EAAQ3C,EAAOM,EAAQQ,EAAQ,YAAc,MAAM,CAAC,EAC1D,GAAI,CAAC2C,GAAS,GAAI,CAChBf,EAAOG,EAAIF,CAAK,EACZ5B,IACFa,EAAO,IAAI,IAAI,EACf,MAAMoB,EAAS,GAEjB,MACF,CACA7B,EAAQ,IACNA,EAAQ,EAAE,IAAKmB,GACbtC,EAAOsC,EAAM,KAAK,IAAMO,EAAK,CAAE,GAAGP,EAAO,MAAOK,GAASL,EAAM,KAAM,EAAIA,CAC3E,CACF,EACAV,EAAO,IAAI,IAAI,EACf,MAAMoB,EAAS,CACjB,OAASG,EAAQ,CACfxB,EAAM,IAAIwB,aAAkB,MAAQA,EAAO,QAAUtC,EAAO,SAAS,CACvE,QAAE,CACAa,EAAQ,IAAI,EAAK,CACnB,CACF,EAEMgC,EAAS,MAAOxB,GAAoC,CACxD,IAAMW,EAAKZ,EAAMC,CAAG,EACpB,GAAIL,EAAc,IAAMgB,EAAI,CAC1BhB,EAAc,IAAIgB,CAAE,EACpB,MACF,CACA,GAAK/B,GAAS,eACd,CAAAY,EAAQ,IAAI,EAAI,EAChBC,EAAM,IAAI,EAAE,EACZ,GAAI,CACF,MAAM1B,EAAQa,EAAQ,eAAgB,CAAE,GAAIA,EAAQ,gBAAkB,CAAC,EAAI,GAAA+B,CAAG,CAAC,EAC/EC,EAASD,CAAE,EACX1B,EAAQ,IAAIA,EAAQ,EAAE,OAAQmB,GAAUtC,EAAOsC,EAAM,KAAK,IAAMO,CAAE,CAAC,EACnEhB,EAAc,IAAI,EAAE,EACpB,MAAMmB,EAAS,CACjB,OAASG,EAAQ,CACfxB,EAAM,IAAIwB,aAAkB,MAAQA,EAAO,QAAUtC,EAAO,SAAS,CACvE,QAAE,CACAa,EAAQ,IAAI,EAAK,CACnB,EACF,EAEMiC,EAAeC,GAA+C,CAClE,IAAMnB,EAAOb,EAAO,GAAG,KAAOd,GAAS,cAAgB,CAAC,EAClDf,EAAQC,EAAOyC,EAAKmB,EAAM,IAAI,CAAC,EAC/BC,EAAU,GAAGlD,CAAQ,oBAAoBiD,EAAM,IAAI,GACzD,OACEhE,EAAC,SAAM,UAAQ,aAAa,YAAU,OAAO,QAASiE,EACpD,UAAAjE,EAAC,QAAK,UAAQ,aACX,UAAAgE,EAAM,MACNA,EAAM,SACLhE,EAAC,QAAK,UAAQ,gBAAgB,cAAY,OACvC,cAAI,KAEP,EACE,MACN,EACCgE,EAAM,OAAS,SACdjE,EAAC,UAAO,UAAQ,eAAe,GAAIkE,EAAS,KAAMD,EAAM,KAAM,SAAUA,EAAM,WAAa,GACxF,SAAApE,EACCM,EAAsB8D,EAAM,OAAO,EAClCtB,GAAUA,EAAM,MAChBA,GACC3C,EAAC,UAAO,MAAO2C,EAAM,MAAO,SAAUtC,EAAOsC,EAAM,KAAK,IAAMvC,EAC3D,SAAAuC,EAAM,MACT,CAEJ,EACF,EAEA3C,EAAC,SACC,UAAQ,eACR,GAAIkE,EACJ,KAAMD,EAAM,MAAQ,OACpB,KAAMA,EAAM,KACZ,MAAO7D,EACP,aAAa,MACb,SAAU6D,EAAM,WAAa,GAC/B,GAEJ,CAEJ,EAEME,EAAa,IACjBlE,EAAC,QAAK,UAAQ,kBAAkB,SAAU4D,EACxC,UAAA7D,EAAC,OAAI,UAAQ,YACV,SAAAH,EAAKM,EAA2BgB,GAAS,MAAM,EAAI8C,GAAUA,EAAM,KAAMD,CAAW,EACvF,EACAhE,EAAC,OAAI,UAAQ,eACX,SAAAC,EAAC,OAAI,UAAQ,eACX,UAAAD,EAAC,UAAO,UAAQ,SAAS,eAAa,UAAU,KAAK,SAAS,SAAU+B,EAAQ,EAC7E,SAAAb,EAAO,KACV,EACAlB,EAAC,UAAO,UAAQ,SAAS,eAAa,WAAW,KAAK,SAAS,QAAS,IAAMiC,EAAO,IAAI,IAAI,EAC1F,SAAAf,EAAO,OACV,GACF,EACF,GACF,EAGIkD,EAAc7B,GAAqC,CACvD,IAAMW,EAAKZ,EAAMC,CAAG,EACdU,EAAcR,EAAeF,CAAG,EACtC,OACEtC,EAAC,MAAG,UAAQ,sBAAsB,gBAAe,OAAOsB,EAAS2B,CAAE,CAAC,EAClE,UAAAjD,EAAC,UACC,UAAQ,uBACR,KAAK,SACL,eAAcmB,EAAW,OAAOG,EAAS2B,CAAE,CAAC,EAAI,KAChD,QAAS,IAAMH,EAAOG,EAAIV,EAASD,CAAG,EAAGU,CAAW,EAEpD,UAAAjD,EAAC,UAAQ,SAAAwC,EAASD,CAAG,EAAE,EACtBU,EAAcjD,EAAC,SAAM,UAAQ,uBAAwB,SAAAiD,EAAY,EAAW,MAC/E,EACAhD,EAAC,OAAI,UAAQ,0BACX,UAAAD,EAAC,UACC,UAAQ,SACR,YAAU,UACV,eAAcuB,EAAS2B,CAAE,EAAI,UAAY,YACzC,KAAK,SACL,QAAS,IAAMH,EAAOG,EAAIV,EAASD,CAAG,EAAGU,CAAW,EAEnD,SAAA1B,EAAS2B,CAAE,EAAIhC,EAAO,OAASA,EAAO,OACzC,EACCC,GAAS,aACRnB,EAAC,UACC,UAAQ,SACR,YAAU,UACV,eAAa,WACb,KAAK,SACL,QAAS,IAAMiC,EAAO,IAAI,CAAE,GAAAiB,EAAI,IAAAX,CAAI,CAAC,EAEpC,SAAArB,EAAO,KACV,EACE,KACHC,GAAS,eACRnB,EAAC,UACC,UAAQ,SACR,YAAU,UACV,eAAa,cACb,KAAK,SACL,QAAS,IAAM+D,EAAOxB,CAAG,EAExB,SAAAL,EAAc,IAAMgB,EAAKhC,EAAO,cAAgBA,EAAO,OAC1D,EACE,MACN,GACF,CAEJ,EAEMmD,GAAa,IACjBpE,EAAC,OAAI,UAAQ,cAAc,oBAAkB,SAC3C,UAAAD,EAAC,UAAO,UAAQ,iBAAiB,KAAK,SAAS,aAAYkB,EAAO,MAAO,QAASwC,EAChF,SAAA1D,EAAC,QAAM,SAAAkB,EAAO,MAAM,EACtB,EACAjB,EAAC,WACC,UAAQ,cACR,KAAK,SACL,aAAW,OACX,kBAAiB,GAAGe,CAAQ,kBAE5B,UAAAf,EAAC,UAAO,UAAQ,aACd,UAAAD,EAAC,MAAG,UAAQ,cAAc,GAAI,GAAGgB,CAAQ,kBACtC,SAAAE,EAAO,YACV,EACAlB,EAAC,UACC,UAAQ,cACR,KAAK,SACL,aAAYkB,EAAO,MACnB,MAAOA,EAAO,MACd,QAASwC,EACV,gBAED,GACF,EACAzD,EAAC,OAAI,UAAQ,aACX,UAAAA,EAAC,OAAI,UAAQ,0BACX,UAAAA,EAAC,OAAI,UAAQ,wBACX,UAAAD,EAAC,QAAK,UAAQ,uBAAuB,cAAY,OAC/C,SAAAC,EAAC,OACC,QAAQ,YACR,KAAK,OACL,OAAO,eACP,eAAa,IACb,iBAAe,QACf,kBAAgB,QAChB,cAAY,OACZ,UAAU,QAEV,UAAAD,EAAC,UAAO,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI,EAC9BA,EAAC,QAAK,EAAE,iBAAiB,GAC3B,EACF,EACAA,EAAC,SACC,UAAQ,gBACR,KAAK,SACL,MAAO6B,EAAM,EACb,aAAa,MACb,YAAaX,EAAO,OACpB,aAAYA,EAAO,OACnB,QAASyC,EACX,GACF,EACCxC,GAAS,aACRnB,EAAC,UACC,UAAQ,SACR,eAAa,UACb,KAAK,SACL,QAAS,IAAMiC,EAAO,IAAI,CAAE,GAAI,GAAI,IAAKd,EAAQ,cAAgB,CAAC,CAAE,CAAC,EAEpE,SAAAD,EAAO,OACV,EACE,MACN,EACCc,EAAM,EACL/B,EAAC,SAAM,UAAQ,SAAS,YAAU,SAAS,KAAK,QAC9C,UAAAA,EAAC,OAAI,UAAQ,cACX,UAAAD,EAAC,KAAE,UAAQ,eAAgB,SAAAkB,EAAO,UAAU,EAC5ClB,EAAC,KAAE,UAAQ,iBAAkB,SAAAgC,EAAM,EAAE,GACvC,EACAhC,EAAC,UAAO,UAAQ,SAAS,eAAa,YAAY,KAAK,SAAS,QAASqD,EACtE,SAAAnC,EAAO,MACV,GACF,EACE,KACHe,EAAO,EAAIkC,EAAW,EAAI,KAC1BpC,EAAQ,EACP/B,EAAC,KAAE,UAAQ,iBAAiB,KAAK,SAC9B,SAAAkB,EAAO,QACV,EACE,KACH,CAACa,EAAQ,GAAK,CAACE,EAAO,EACrBH,EAAK,EAAE,OACL9B,EAAC,MAAG,UAAQ,uBAAwB,SAAAH,EAAKiC,EAAK,EAAGQ,EAAO8B,CAAU,EAAE,EAEpEpE,EAAC,KAAE,UAAQ,iBAAkB,SAAAkB,EAAO,UAAU,EAE9C,MACN,GACF,GACF,EAGIoD,GAAiBV,GAAuB,CAE5C,GADI,EAAEA,aAAiB,gBAAkBA,EAAM,MAAQ,UACnD,CAACjC,EAAK,GAAK,CAACC,EAAO,EAAG,OAC1BgC,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,IAAMW,EAAWX,EAAM,eAAsC,cAC3D,8BACF,EACAjC,EAAK,IAAI,EAAK,EACd+B,EAAY,EACZa,GAAS,MAAM,CACjB,EAEMC,GAAiBZ,GAAuB,CAC5CA,EAAM,eAAe,EACrBjC,EAAK,IAAI,EAAI,EACTiC,EAAM,yBAAyB,mBAChCA,EAAM,cAAc,oBAA2C,MAAM,CAC1E,EAEA,MAAO,CACL,KAAM,IACJ3D,EAAC,OAAI,UAAQ,kBAAkB,KAAK,QAAQ,aAAYgB,EAAO,UAAW,UAAWqD,GAEnF,UAAArE,EAAC,UACC,UAAQ,kBACR,KAAMgB,EAAO,KACb,SAAUA,EAAO,WAAa,GAC9B,SAAUS,EAAS,EACnB,SAAS,KACT,cAAY,OACZ,UAAW8C,GAEX,UAAAxE,EAAC,UAAO,MAAM,GAAG,SAAU,CAACqB,EAAO,EAAE,OAAQ,EAC5CD,EACCC,EAAO,EAAE,OACPrB,EAAC,UAAO,MAAOqB,EAAO,EAAE,KAAK,GAAG,EAAG,SAAQ,GACxC,SAAAA,EAAO,EAAE,IAAI+B,CAAO,EAAE,KAAK,IAAI,EAClC,EACE,KAEJvD,EACE2B,EAAQ,EAAE,OAAQmB,GAAUtC,EAAOsC,EAAM,KAAK,CAAC,EAC9CA,GAAUA,EAAM,MAChBA,GACC3C,EAAC,UAAO,MAAO2C,EAAM,MAAO,SAAUtC,EAAOsC,EAAM,KAAK,IAAMrB,EAAS,EACpE,SAAAqB,EAAM,MACT,CAEJ,GAEJ,EACA1C,EAAC,UACC,UAAQ,mBACR,aAAY,OAAO,CAACoB,EAAO,EAAE,MAAM,EACnC,KAAK,SACL,gBAAc,UACd,aAAYJ,EAAO,UACnB,gBAAe,OAAOU,EAAK,CAAC,EAC5B,gBAAe,GAAGX,CAAQ,iBAC1B,SAAUU,EAAS,EACnB,QAAS,IAAMC,EAAK,IAAI,CAACA,EAAK,CAAC,EAE/B,UAAA3B,EAAC,QAAK,UAAQ,iBAAkB,SAAAoB,EAAWF,EAAO,OAASwB,EAAc,EAAE,EAC3E1C,EAAC,QAAK,UAAQ,iBAAiB,cAAY,OAAO,kBAElD,GACF,EACCoB,GAAYC,EAAO,EAAE,OACpBrB,EAAC,MAAG,UAAQ,iBAAiB,aAAYkB,EAAO,OAC7C,SAAArB,EACCwB,EAAO,EACNjB,GAAUA,EACVA,GACCH,EAAC,MAAG,UAAQ,gBACV,UAAAD,EAAC,QAAM,SAAAoD,EAAQhD,CAAK,EAAE,EACtBJ,EAAC,UACC,UAAQ,sBACR,KAAK,SACL,aAAY,GAAGkB,EAAO,KAAK,KAAKkC,EAAQhD,CAAK,CAAC,GAC9C,MAAOc,EAAO,MACd,SAAUQ,EAAS,EACnB,QAAS,IAAMyB,EAAS/C,CAAK,EAC9B,gBAED,GACF,CAEJ,EACF,EACE,KACHuB,EAAK,EACJ1B,EAAC,OAAI,UAAQ,gBAAgB,GAAI,GAAGe,CAAQ,iBAC1C,UAAAhB,EAAC,SACC,UAAQ,kBACR,KAAK,SACL,MAAO6B,EAAM,EACb,aAAa,MACb,YAAaX,EAAO,OACpB,aAAYA,EAAO,OACnB,QAAU0C,GAAU,CACdA,EAAM,yBAAyB,kBAAkB/B,EAAM,IAAI+B,EAAM,cAAc,KAAK,CAC1F,EACF,EACA5D,EAAC,OAAI,UAAQ,mBAAmB,KAAK,UAClC,SAAA4C,EAAgB,EAAE,OACjB/C,EACE+C,EAAgB,EACfD,GAAUA,EAAM,MAChBA,GACC1C,EAAC,UACC,UAAQ,kBACR,KAAK,SACL,KAAK,SACL,gBAAe,OAAOsB,EAASoB,EAAM,KAAK,CAAC,EAC3C,gBAAe,OAAOpB,EAASoB,EAAM,KAAK,CAAC,EAC3C,QAAS,IAAMI,EAAOJ,EAAM,MAAOA,EAAM,MAAOA,EAAM,WAAW,EAEjE,UAAA3C,EAAC,QAAM,SAAA2C,EAAM,MAAM,EAClBA,EAAM,YAAc3C,EAAC,SAAO,SAAA2C,EAAM,YAAY,EAAW,MAC5D,CAEJ,EAEA3C,EAAC,KAAE,UAAQ,iBAAkB,SAAAkB,EAAO,UAAU,EAElD,EACCC,GAAW,CAACJ,EAAU,SAAWA,EAAU,SAC1Cd,EAAC,UAAO,UAAQ,kBACb,UAAAkB,GAAW,CAACJ,EAAU,QACrBf,EAAC,UAAO,UAAQ,SAAS,eAAa,WAAW,KAAK,SAAS,QAASyD,EACrE,SAAAvC,EAAO,KACV,EACE,KACHH,EAAU,SACTf,EAAC,UACC,UAAQ,SACR,eAAa,WACb,KAAK,SACL,SAAU0B,EAAS,EACnB,QAAS,IAAM,CACb,GAAIA,EAAS,EAAG,OAChB,IAAMnB,EAAOsB,EAAM,EAAE,KAAK,EAC1BF,EAAK,IAAI,EAAK,EACdE,EAAM,IAAI,EAAE,EACZd,EAAU,WAAWR,CAAI,CAC3B,EAEC,SAAAW,EAAO,OACV,EACE,MACN,EACE,MACN,EACE,KACHU,EAAO,EAAIyC,GAAW,EAAI,MAC7B,EAWF,MAAO,CAAC,CAAE,KAAAI,EAAM,SAAAC,CAAS,IAAM,CAC7B,IAAIC,EAAQ,GACNC,EAAO9E,GAAO,IAAM,CAExB,GADAuB,EAAO,EACHsD,EAAO,CACTA,EAAQ,GACR,MACF,CACA,eAAe,IAAM,CACnB,GAAItC,EAAU,OACd,IAAMwC,EAAS,CAAC,GAAGJ,EAAK,iBAAiB,6BAA6B,CAAC,EAAE,CAAC,EACtEI,aAAkB,mBACpBA,EAAO,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,CAC/D,CAAC,CACH,CAAC,EACDH,EAAS,iBAAiB,QAASE,CAAI,EAKvC,SAAS,iBACP,QACChB,GAAU,CACT,GAAI,CAACjC,EAAK,EAAG,OACb,IAAMmD,EAASlB,EAAM,OACjBkB,aAAkB,MAASL,EAAyB,SAASK,CAAM,GACvEnD,EAAK,IAAI,EAAK,CAChB,EACA,CAAE,OAAQ+C,CAAS,CACrB,CACF,EACA,QAAS,IAAM,CACbrC,EAAW,GACX,aAAaD,CAAW,EACxBD,GAAe,MAAM,CACvB,CACF,CACF,CAEO,IAAM4C,GAAkBjE,GAC7BD,GAAyBC,CAAkC",
6
+ "names": ["each", "effect", "signal", "jsx", "jsxs", "HOOKS", "array", "value", "string", "callApi", "name", "input", "requestSignal", "response", "payload", "domainError", "createRelationSelectView", "props", "callbacks", "islandId", "config", "labels", "manager", "multiple", "chosen", "selected", "isChosen", "options", "availableOptions", "disabled", "open", "dialog", "query", "rows", "loading", "error", "editor", "pendingRemove", "activeRequest", "searchTimer", "disposed", "rowId", "row", "rowLabel", "rowDescription", "selectedLabel", "entry", "filteredOptions", "needle", "held", "choose", "label", "description", "id", "unchoose", "labelOf", "loadRows", "request", "excluded", "caught", "openDialog", "closeDialog", "searchManager", "event", "save", "editing", "remove", "editorField", "field", "fieldId", "editorForm", "managerRow", "dialogView", "handleKeydown", "trigger", "handleInvalid", "root", "lifetime", "first", "stop", "native", "target", "relationSelect"]
7
7
  }
@@ -0,0 +1,10 @@
1
+ declare var st: (a: any) => {
2
+ view: () => any;
3
+ mount: ({ root: e, lifetime: t }: {
4
+ lifetime: any;
5
+ root: any;
6
+ }) => void;
7
+ dispose: () => void;
8
+ };
9
+ export { st as searchFilter };
10
+ //# sourceMappingURL=search-filter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-filter.d.mts","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/backend/design/client/search-filter.mjs"],"names":[],"mappings":"AACs66B,QAAA,IAAI,EAAE;;;;;;;CAAS,CAAC;AAAsrS,OAAM,EAAC,EAAE,IAAI,YAAY,EAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ // @ts-nocheck Generated by tools/build-backend-client.mjs — do not edit.
2
+ import{each as Ia}from"/_ket/view/index.js";import{Fragment as Aa,jsx as Ka,jsxs as Ba}from"/_ket/view/jsx-runtime.js";var Ae=["action","action-leading","action-label","action-spinner","action-group"];import{jsx as Na,jsxs as Xa}from"/_ket/view/jsx-runtime.js";var Be=["badge","tag","tag-remove","count-badge","avatar","code","text","media-label","media-label-image","media-label-copy"];import{each as za}from"/_ket/view/index.js";import{Fragment as _a,jsx as Ua,jsxs as Wa}from"/_ket/view/jsx-runtime.js";var $e=["notice","notice-mark","notice-copy","notice-title","notice-message","notice-actions","empty","empty-mark","empty-title","empty-message","empty-actions","loading","loading-label"];import{each as Hi}from"/_ket/view/index.js";import{each as bi}from"/_ket/view/index.js";import{jsx as P,jsxs as Y}from"/_ket/view/jsx-runtime.js";var Je=["modal-layer","modal-backdrop","modal-sheet","modal-head","modal-heading","modal-title-row","modal-title","modal-description","modal-close","modal-body","modal-actions"],Q=a=>{let r=a.mode==="client",i=a.mode==="embedded";return Y("div",{"data-ui":"modal-layer","data-mode":a.mode??"overlay","data-route-modal":i||r?null:"true","data-client-modal":r?"true":null,"data-presentation":a.presentation??"sheet","data-unsaved-prompt":a.unsavedPrompt??null,children:[r?P("button",{"data-ui":"modal-backdrop",type:"button","aria-hidden":"true",tabIndex:-1,children:P("span",{children:a.closeLabel})}):P("a",{"data-ui":"modal-backdrop",href:a.closeHref??"#","aria-label":a.closeLabel,children:P("span",{children:a.closeLabel})}),Y("section",{id:a.id,"data-ui":"modal-sheet","data-size":a.size??"default","data-height":a.height==="fixed"?"fixed":null,style:a.height==="fixed"&&a.fixedHeight?`height: ${a.fixedHeight} !important`:"",...a.dialogSemantics==="parent"?{}:{role:"dialog","aria-modal":i?"false":"true"},"aria-labelledby":a.dialogSemantics==="parent"?null:`${a.id}-title`,"aria-describedby":a.dialogSemantics!=="parent"&&a.description?`${a.id}-description`:null,tabindex:i?null:"-1",children:[Y("header",{"data-ui":"modal-head",children:[Y("div",{"data-ui":"modal-heading",children:[Y("div",{"data-ui":"modal-title-row",children:[P("h2",{"data-ui":"modal-title",id:`${a.id}-title`,children:a.title}),a.status!==void 0&&a.status]}),!!a.description&&P("p",{"data-ui":"modal-description",id:`${a.id}-description`,children:a.description})]}),r?P("button",{"data-ui":"modal-close",type:"button","aria-label":a.closeLabel,title:a.closeLabel,children:"\xD7"}):P("a",{"data-ui":"modal-close",href:a.closeHref??"#","aria-label":a.closeLabel,title:a.closeLabel,children:"\xD7"})]}),P("div",{"data-ui":"modal-body",children:a.body}),a.actions!==void 0&&P("footer",{"data-ui":"modal-actions",children:a.actions})]})]})};import{Fragment as ai,jsx as ei,jsxs as ti}from"/_ket/view/jsx-runtime.js";import{Fragment as di,jsx as oi,jsxs as si}from"/_ket/view/jsx-runtime.js";var Xe=["app-shell","app-shell-topbar","app-topbar","app-location-bar","app-location-context","app-brand","app-topbar-brand","app-topbar-context","global-search-trigger","global-search-trigger-label","global-search-shortcut","global-search-dialog","global-search","global-search-input","global-search-submit","app-sidebar","app-main","app-right-rail","page","page-context","page-header","page-heading","page-eyebrow","page-title-row","page-title","page-description","page-subline","page-status","page-actions","page-meta","page-body","record-canvas","record-content","record-section","record-section-title"];import{Fragment as yi,jsx as hi,jsxs as vi}from"/_ket/view/jsx-runtime.js";var qe=["stack","inline","grid","card-grid","surface","surface-head","surface-heading","surface-title","surface-description","surface-actions","disclosure","disclosure-summary","disclosure-body","section","section-head","section-eyebrow","section-title","section-description","section-actions","section-body","content-card","card-media","card-head","card-leading","card-heading","card-eyebrow","card-title","card-summary","card-status","card-body","card-meta","card-actions","kanban","kanban-card","kanban-media","kanban-title","kanban-meta","kanban-note","kanban-actions","metric","metric-icon","metric-label","metric-value","metric-detail"];import{each as ki}from"/_ket/view/index.js";import{Fragment as Pi,jsx as Ci}from"/_ket/view/jsx-runtime.js";import{jsx as Di,jsxs as Ki}from"/_ket/view/jsx-runtime.js";var Ge=["field","field-label","field-required","field-control","field-options","field-option","field-option-input","field-help","field-error"];import{each as $i}from"/_ket/view/index.js";import{jsx as Ni,jsxs as Xi}from"/_ket/view/jsx-runtime.js";var ze=["breadcrumbs","breadcrumb","breadcrumb-overflow","breadcrumb-overflow-trigger","breadcrumb-overflow-list","nav-list","nav-item","nav-item-leading","nav-item-label","nav-item-count","tabs","tab","tab-count","tabbed-view","tabbed-view-context","tab-panel"];import{jsx as zi,jsxs as Vi}from"/_ket/view/jsx-runtime.js";var Ve=["progress","progress-label","progress-value","progress-track","progress-bar"];import{each as Wi}from"/_ket/view/index.js";import{Fragment as ji,jsx as Yi,jsxs as Qi}from"/_ket/view/jsx-runtime.js";var Ue=["menu","menu-trigger","menu-trigger-count","menu-panel","menu-search","menu-search-input","menu-label","menu-separator","menu-item","menu-item-leading","menu-item-copy","menu-item-check","menu-item-shortcut"];import{jsx as an,jsxs as nn}from"/_ket/view/jsx-runtime.js";var _e=["popover","popover-trigger","popover-panel","popover-close"];import{jsx as on,jsxs as sn}from"/_ket/view/jsx-runtime.js";var We=["tooltip","tooltip-trigger","tooltip-content"];import{jsx as gn}from"/_ket/view/jsx-runtime.js";var Ze=["dialog","confirm-dialog-message"];import{each as pn}from"/_ket/view/index.js";import{jsx as yn,jsxs as vn}from"/_ket/view/jsx-runtime.js";var Ye=["toast-region","toast","toast-copy","toast-title","toast-message","toast-actions"];import{jsx as Tn}from"/_ket/view/jsx-runtime.js";var Qe=["spinner","visually-hidden"];import{each as Rn}from"/_ket/view/index.js";import{jsx as Cn}from"/_ket/view/jsx-runtime.js";var je=["skeleton","skeleton-line"];import{each as On,effect as Hn,signal as En}from"/_ket/view/index.js";import{jsx as Dn,jsxs as In}from"/_ket/view/jsx-runtime.js";var et=["relation-select","relation-native","relation-trigger","relation-value","relation-caret","relation-chips","relation-chip","relation-chip-clear","relation-menu","relation-search","relation-options","relation-option","relation-footer","relation-empty","relation-editor","relation-dialog-toolbar","relation-search-field","relation-search-icon","relation-dialog-list","relation-dialog-row","relation-dialog-main","relation-dialog-meta","relation-dialog-actions"];import{each as Bn,signal as $n}from"/_ket/view/index.js";import{jsx as Nn,jsxs as Xn}from"/_ket/view/jsx-runtime.js";var tt=["lightbox","lightbox-thumbs","lightbox-thumb","lightbox-empty","lightbox-layer","lightbox-backdrop","lightbox-toolbar","lightbox-counter","lightbox-tool","lightbox-stage","lightbox-image","lightbox-nav","lightbox-caption"];import{each as h,signal as g}from"/_ket/view/index.js";import{Fragment as F,jsx as n,jsxs as o}from"/_ket/view/jsx-runtime.js";var it=["search-filter","search-filter-bar","search-filter-section-toggle","search-filter-sheet","search-filter-clear","search-filter-icon","search-filter-field","search-filter-input","search-filter-facets","search-filter-facet","search-filter-facet-remove","search-filter-suggestions","search-filter-suggestion","search-filter-toggle","search-filter-columns","search-filter-column","search-filter-column-title","search-filter-empty","search-filter-grouping","search-filter-grouping-head","search-filter-grouping-list","search-filter-grouping-item","search-filter-grouping-order","search-filter-grouping-label","search-filter-grouping-actions","search-filter-grouping-action","search-filter-grouping-clear","search-filter-grouping-add-label","custom-filter","custom-filter-row","custom-filter-add","custom-group-by","favorite-list","favorite-item","favorite-item-default","favorite-item-remove","favorite-save","favorite-save-toggle","favorite-save-row"],ha={text:["contains","notContains","equals","notEquals","startsWith","isSet","isNotSet"],number:["equals","notEquals","gt","gte","lt","lte","between","isSet","isNotSet"],boolean:["isTrue","isFalse"],selection:["equals","notEquals","anyOf","isSet","isNotSet"],reference:["equals","notEquals","anyOf","isSet","isNotSet"],date:["equals","notEquals","gt","gte","lt","lte","between","isSet","isNotSet"],datetime:["equals","notEquals","gt","gte","lt","lte","between","isSet","isNotSet"]},nt={contains:"contains",notContains:"does not contain",equals:"is",notEquals:"is not",startsWith:"starts with",gt:"is greater than",gte:"is greater than or equal to",lt:"is less than",lte:"is less than or equal to",between:"is between",anyOf:"is any of",isTrue:"is true",isFalse:"is false",isSet:"is set",isNotSet:"is not set"},re=a=>a==="isTrue"||a==="isFalse"||a==="isSet"||a==="isNotSet",at=(a,r)=>a.type==="text"?{field:a.value,operator:"contains",value:r}:a.type==="number"&&/^-?\d+$/.test(r)?{field:a.value,operator:"equals",value:r}:null,he=a=>{let r=a.operatorLabels?.[a.operator]??nt[a.operator],i=`${a.fieldLabel} ${r}`;if(re(a.operator)||a.value==null||a.value==="")return i;let S=(Array.isArray(a.value)?a.value:a.operator==="anyOf"||a.operator==="between"?String(a.value).split(",").map(c=>c.trim()):[a.value]).map(c=>a.choices?.find(G=>G.value===String(c))?.label??String(c)).join(", ");return`${i}: ${S}`},rt=a=>a==null?"":String(a),le=class extends Error{retryable;constructor(r,i){super(r),this.retryable=i}},ne=async(a,r)=>{let i;try{i=await fetch(`/_ket/fn/${encodeURIComponent(a)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json"},body:JSON.stringify(r)})}catch(S){throw new le(S instanceof Error?S.message:"network error",!0)}let I=await i.json().catch(()=>({}));if(!i.ok||I.ok===!1){let S=I.errors?.[0];throw new le(rt(S?.message??I.message??`HTTP ${i.status}`),i.status>=500)}return I.value},lt=a=>a.flatMap(r=>r.options?.length?lt(r.options):[r]);function ot(a){let{config:r}=a,i={clearFilters:"Clear filters",close:"Close",favoriteCancel:"Cancel",favoriteError:"Could not save changes to saved searches",valueFrom:"From",valueTo:"To",groupByApplied:r.labels.groupBy,groupByAdd:r.labels.customGroupByPlaceholder,groupByClear:r.labels.clear,groupByMoveEarlier:"Move earlier",groupByMoveLater:"Move later",...r.labels},I=e=>i.operatorLabels?.[e]??nt[e],S=r.capabilities??{},c=r.manager,G=S.groupBy!==!1&&r.groupBy.length>0,ee=lt(r.groupBy),zt=e=>r.customFilterFields.filter(t=>at(t,e)),d=g(r.facets),C=g(r.favorites),oe=()=>S.favorites!==!1&&!!(C().length||c?.saveFavoriteFunction||r.favoriteHref),b=g(Object.fromEntries((r.customFilters??[]).map(e=>[e.id,{field:e.field,operator:e.operator,value:e.value}]))),p=g(r.query??""),T=g(!1),O=g(""),H=g(""),f=g(""),y=g(!1),w=g("filter"),L=g(!1),k=g(!1),E=g(""),Te=null,te=null,se=e=>{let t=[...J?.querySelectorAll(e)??[]][0];typeof HTMLElement<"u"&&t instanceof HTMLElement&&t.focus()},z=()=>{k.set(!1),queueMicrotask(()=>{y()||L()?se('[data-ui="favorite-save-toggle"]'):te?.focus()})},D=()=>{k.set(!1),y.set(!1)},we=e=>{let t=e.target instanceof Element?e.target.closest('details[data-ui="disclosure"][open]'):null;if(!(t instanceof HTMLDetailsElement))return!1;t.open=!1;let l=t.querySelector("summary");return l instanceof HTMLElement&&l.focus(),e.preventDefault(),e.stopPropagation(),!0},de=()=>{let e=[...J?.querySelectorAll('[data-ui="search-filter-sheet"]')??[]][0];return typeof HTMLDialogElement<"u"&&e instanceof HTMLDialogElement?e:null},ue=()=>{D(),de()?.close(),L.set(!1),Te?.focus()},Vt=e=>{w()!==e&&k.set(!1),w.set(e),y.set(!0),T.set(!1)},Ut=e=>{te=e.currentTarget;let t=y()&&w()!=="filter";if(t&&k.set(!1),w.set("filter"),T.set(!1),!window.matchMedia("(max-width: 640px)").matches){t&&e.preventDefault();return}e.preventDefault(),Te=e.currentTarget,D(),L.set(!0),queueMicrotask(()=>{let l=de();l&&!l.open&&(l.showModal(),se('[data-ui="search-filter-sheet"] [data-ui="modal-close"]'))})},V=g(""),U=g(!1),v=g(!1),R=g(""),_={facets:d(),rules:b()},K=g(null),J=null,ae=e=>{if(p.set(e),!!J)for(let t of J.querySelectorAll('[data-ui="search-filter-input"]'))t instanceof HTMLInputElement&&t.value!==e&&(t.value=e)},N=(e,t)=>d().some(l=>l.type===e&&l.id===t),A=e=>d().filter(t=>t.type===e).length,W=()=>d().find(e=>e.type==="favorite")?.id??"",X=()=>d().filter(e=>e.type==="groupBy"),ke=e=>{let t=r.customFilterFields.find(l=>l.value===e);return t?ha[t.type]:[]},Re=()=>({...c?.applyInput??{},query:p(),facets:d(),filters:d().filter(e=>e.type==="filter"&&!b()[e.id]).map(e=>e.id),groupBy:d().filter(e=>e.type==="groupBy").map(e=>e.id),favoriteId:W()||null,customFilters:Object.entries(b()).map(([e,t])=>({id:e,...t}))}),B=0,ce=null,me=!1,x=async(e="")=>{if(D(),!c?.applyFunction)return;let t=++B;ce?.abort();let l=new AbortController;ce=l;let s={facets:d(),rules:b()};v.set(!0),R.set(""),K.set(null);try{let u=await ne(c.applyFunction,Re());if(t!==B)return;let m=document.getElementById(c.bodyId);if(m&&typeof u?.html=="string"&&(m.innerHTML=u.html),typeof u?.href=="string"&&typeof u.html!="string"){let $,da={id:a.id,href:u.href,signal:l.signal,respondWith:ua=>{$=ua}};me=!0;try{document.dispatchEvent?.(new CustomEvent("ket:search-filter-navigate",{detail:da}))}finally{me=!1}$?await $:window.location.assign(u.href)}else typeof u?.href=="string"&&history.pushState(null,"",u.href);t===B&&(_=s)}catch(u){if(t!==B||(d.set(_.facets),b.set(_.rules),e&&!p()&&ae(e),u instanceof Error&&"retryable"in u&&u.retryable===!0&&K.set({...s,consumed:e}),u instanceof Error&&u.name==="AbortError"))return;R.set(i.applyError)}finally{t===B&&v.set(!1)}},_t=()=>{let e=K();e&&(d.set(e.facets),b.set(e.rules),e.consumed&&p()===e.consumed&&ae(""),x(e.consumed))},M=()=>{W()&&d.set(d().filter(e=>e.type!=="favorite"))},Z=e=>{if(e.type!=="favorite"&&M(),d.set(d().filter(t=>t.id!==e.id)),b()[e.id]){let t={...b()};delete t[e.id],b.set(t)}x()},Wt=e=>{if(M(),N("filter",e.id)){Z({id:e.id,type:"filter",label:e.label});return}d.set([...d(),{id:e.id,type:"filter",label:e.label}]),x()},Pe=e=>{if(!(!N("groupBy",e.id)&&X().length>=(r.maxGroupBy??1/0))){if(M(),N("groupBy",e.id)){Z({id:e.id,type:"groupBy",label:e.label});return}d.set([...d(),{id:e.id,type:"groupBy",label:e.label}]),x()}},Zt=()=>{d.set(d().filter(e=>e.type==="field"||e.type==="groupBy")),b.set({}),x()},Ce=()=>r.customFilterFields.find(e=>e.value===O()),Le=()=>{let e=Ce(),t=H();if(!e||!ke(e.value).includes(t))return!1;if(re(t))return!0;if(!f().trim()||t==="between"&&!E().trim())return!1;let l=t==="between"?[f(),E()]:t==="anyOf"?f().split(","):[f()];return!(e.type==="number"&&l.some(s=>!Number.isFinite(Number(s)))||e.choices&&l.some(s=>!e.choices.some(u=>u.value===s)))},Yt=()=>{let e=r.customFilterFields.find(m=>m.value===O()),t=H();if(!e||!Le())return;let l=re(t)?"":t==="between"?`${f().trim()},${E().trim()}`:f().trim(),s=he({fieldLabel:e.label,operator:t,value:l,choices:e.choices,operatorLabels:i.operatorLabels});M();let u=`custom-filter:${crypto.randomUUID()}`;b.set({...b(),[u]:{field:e.value,operator:t,value:l}}),d.set([...d(),{id:u,type:"filter",label:s}]),O.set(""),H.set(""),f.set(""),E.set(""),x()},Qt=e=>{e.currentTarget instanceof HTMLInputElement&&(p.set(e.currentTarget.value),T.set(e.currentTarget.value.trim()!==""))},Fe=()=>{let e=p().trim();e&&(M(),d.set([...d().filter(t=>t.type!=="field"),{id:`query:${crypto.randomUUID()}`,type:"field",label:e}]),ae(""),T.set(!1),x(e))},jt=e=>{let t=p().trim(),l=t?at(e,t):null;if(!l)return;M();let s=`custom-filter:${crypto.randomUUID()}`;b.set({...b(),[s]:l}),d.set([...d(),{id:s,type:"filter",label:he({fieldLabel:e.label,operator:l.operator,value:l.value,choices:e.choices,operatorLabels:i.operatorLabels})}]),ae(""),T.set(!1),x(t)},ea=e=>{e instanceof KeyboardEvent&&(e.key==="Enter"?(e.preventDefault(),Fe()):e.key==="Escape"&&T.set(!1))},Oe=e=>{d.set([...d().filter(t=>t.type!=="favorite"),{id:e.id,type:"favorite",label:e.label}]),x()},He=(e,t)=>{let l=X(),s=l.findIndex($=>$.id===e.id),u=s+t;if(s<0||u<0||u>=l.length)return;let m=[...l];[m[s],m[u]]=[m[u],m[s]],M(),d.set([...d().filter($=>$.type!=="groupBy"),...m]),x()},ta=()=>{X().length&&(M(),d.set(d().filter(e=>e.type!=="groupBy")),x())},aa=async e=>{e.preventDefault();let t=V().trim();if(!(!t||!c?.saveFavoriteFunction)){v.set(!0),R.set(""),K.set(null);try{let l=await ne(c.saveFavoriteFunction,{name:t,isDefault:U(),state:Re()}),s=U(),u={id:rt(l?.id)||crypto.randomUUID(),label:t,isDefault:s,active:!0};C.set([...C().map(m=>s?{...m,isDefault:!1}:m),u]),Oe(u),V.set(""),U.set(!1),z()}catch{R.set(i.favoriteError)}finally{v.set(!1)}}},ia=async e=>{if(c?.deleteFavoriteFunction){v.set(!0),R.set(""),K.set(null);try{await ne(c.deleteFavoriteFunction,{...c.applyInput??{},id:e.id}),C.set(C().filter(t=>t.id!==e.id)),W()===e.id&&Z({id:e.id,type:"favorite",label:e.label})}catch{R.set(i.favoriteError)}finally{v.set(!1)}}},na=async e=>{if(c?.setDefaultFavoriteFunction){v.set(!0),R.set(""),K.set(null);try{await ne(c.setDefaultFavoriteFunction,{...c.applyInput??{},id:e.id}),C.set(C().map(t=>({...t,isDefault:t.id===e.id})))}catch{R.set(i.favoriteError)}finally{v.set(!1)}}},ra=e=>o("li",{"data-ui":"search-filter-facet","data-type":e.type,children:[o("span",{children:[e.type==="field"?`${i.searchGenericLabel}: `:e.type==="groupBy"?`${i.groupBy}: `:"",e.label]}),n("button",{"data-ui":"search-filter-facet-remove",type:"button","aria-label":`${i.clear}: ${e.label}`,title:i.clear,onClick:()=>Z(e),children:"\xD7"})]}),Ee=(e,t)=>{let l=t&&t.group!==e.group?n("hr",{"data-ui":"menu-separator"}):null;if(e.options?.length)return o(F,{children:[l,o("details",{"data-ui":"disclosure",children:[n("summary",{"data-ui":"disclosure-summary",children:e.label}),n("div",{"data-ui":"disclosure-body",children:h(e.options,u=>u.id,(u,m)=>Ee(u,m===0?null:e.options[m-1]))})]})]});let s=N("filter",e.id);return o(F,{children:[l,o("button",{"data-ui":"menu-item",type:"button","aria-pressed":String(s),onClick:()=>Wt(e),children:[n("span",{"data-ui":"menu-item-check","aria-hidden":"true",children:s?"\u2713":""}),n("span",{"data-ui":"menu-item-copy",children:n("span",{children:e.label})})]})]})},Me=(e,t)=>{let l=t&&t.group!==e.group?n("hr",{"data-ui":"menu-separator"}):null;if(e.options?.length)return o(F,{children:[l,o("details",{"data-ui":"disclosure",children:[n("summary",{"data-ui":"disclosure-summary",children:e.label}),n("div",{"data-ui":"disclosure-body",children:h(e.options,u=>u.id,(u,m)=>Me(u,m===0?null:e.options[m-1]))})]})]});let s=N("groupBy",e.id);return s?n(F,{}):o(F,{children:[l,o("button",{"data-ui":"menu-item",type:"button",disabled:X().length>=(r.maxGroupBy??1/0),onClick:()=>Pe(e),children:[n("span",{"data-ui":"menu-item-check","aria-hidden":"true",children:s?"\u2713":""}),n("span",{"data-ui":"menu-item-copy",children:n("span",{children:e.label})})]})]})},la=e=>o("li",{"data-ui":"favorite-item","data-active":String(e.id===W()),children:[n("button",{"data-ui":"menu-item",type:"button",onClick:()=>Oe(e),children:n("span",{"data-ui":"menu-item-copy",children:n("span",{children:e.label})})}),o("div",{"data-ui":"favorite-item-actions",children:[c?.setDefaultFavoriteFunction&&n("button",{"data-ui":"favorite-item-default",type:"button","data-default":String(e.isDefault),"aria-label":i.favoriteSetDefault,title:i.favoriteSetDefault,onClick:()=>na(e),children:e.isDefault?"\u2605":"\u2606"}),c?.deleteFavoriteFunction&&n("button",{"data-ui":"favorite-item-remove",type:"button","aria-label":`${i.favoriteRemove}: ${e.label}`,title:i.favoriteRemove,onClick:()=>ia(e),children:"\xD7"})]})]}),ge=(e,t)=>o("h3",{"data-ui":"search-filter-column-title",children:[e,t?` (${t})`:""]}),oa=()=>{let e=X();return e.length?o("section",{"data-ui":"search-filter-grouping","aria-label":i.groupByApplied,children:[o("div",{"data-ui":"search-filter-grouping-head",children:[n("span",{children:i.groupByApplied}),n("button",{"data-ui":"search-filter-grouping-clear",type:"button",onClick:ta,children:i.groupByClear})]}),n("ol",{"data-ui":"search-filter-grouping-list",children:h(e,t=>t.id,(t,l)=>o("li",{"data-ui":"search-filter-grouping-item",children:[n("span",{"data-ui":"search-filter-grouping-order",children:String(l+1)}),n("span",{"data-ui":"search-filter-grouping-label",children:t.label}),o("span",{"data-ui":"search-filter-grouping-actions",children:[l>0&&n("button",{"data-ui":"search-filter-grouping-action",type:"button","aria-label":`${i.groupByMoveEarlier}: ${t.label}`,title:`${i.groupByMoveEarlier}: ${t.label}`,onClick:()=>He(t,-1),children:"\u2191"}),l+1<e.length&&n("button",{"data-ui":"search-filter-grouping-action",type:"button","aria-label":`${i.groupByMoveLater}: ${t.label}`,title:`${i.groupByMoveLater}: ${t.label}`,onClick:()=>He(t,1),children:"\u2193"}),n("button",{"data-ui":"search-filter-grouping-action","data-action":"remove",type:"button","aria-label":`${i.clear}: ${t.label}`,title:`${i.clear}: ${t.label}`,onClick:()=>Z(t),children:"\xD7"})]})]}))})]}):n(F,{})},sa=()=>{let e=Ce(),t=H();if(!e||!t||re(t))return null;if(e.choices)return o("select",{"aria-label":i.customFilterValue,multiple:t==="anyOf",onChange:s=>{s.currentTarget instanceof HTMLSelectElement&&f.set(Array.from(s.currentTarget.selectedOptions).map(u=>u.value).filter(Boolean).join(","))},children:[n("option",{value:"",disabled:!0,selected:!f(),children:i.customFilterValue}),h(e.choices,s=>s.value,s=>n("option",{value:s.value,selected:f().split(",").includes(s.value),children:s.label}))]});let l=e.type==="number"?"number":e.type==="date"?"date":e.type==="datetime"?"datetime-local":"text";return o(F,{children:[n("input",{type:l,step:e.type==="number"?"any":void 0,autocomplete:"off","aria-label":t==="between"?i.valueFrom:i.customFilterValue,placeholder:i.customFilterValue,value:f(),onInput:s=>{s.currentTarget instanceof HTMLInputElement&&f.set(s.currentTarget.value)}}),t==="between"?n("input",{type:l,step:e.type==="number"?"any":void 0,"aria-label":i.valueTo,value:E(),onInput:s=>{s.currentTarget instanceof HTMLInputElement&&E.set(s.currentTarget.value)}}):null]})},be=e=>n("svg",{"data-ui":"search-filter-icon",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",children:n("path",{d:e==="filter"?"M4 5h16M7 12h10M10 19h4":e==="groupBy"?"M4 4h6v6H4zM14 4h6v6h-6zM4 14h6v6H4zM14 14h6v6h-6z":e==="favorite"?"M6 3h12v18l-6-4-6 4z":"M21 21l-5-5M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0"})}),Ie=(e,t)=>o("button",{"data-ui":"search-filter-section-toggle","data-section":e,type:"button","aria-expanded":String(y()&&w()===e),"aria-controls":`${a.id}-panel`,onClick:l=>{l.stopPropagation(),te=l.currentTarget,y()&&w()===e?D():Vt(e)},children:[be(e),n("span",{children:t}),A(e)?n("span",{"data-ui":"menu-trigger-count",children:String(A(e))}):null]}),De=()=>o("div",{"data-ui":"search-filter-columns","data-columns":1+Number(G)+Number(oe()),"data-panel":L()?"all":w(),children:[o("div",{"data-ui":"search-filter-column","data-facet-type":"filter",children:[ge(i.filters,A("filter")),h(r.filters,e=>e.id,(e,t)=>Ee(e,t===0?null:r.filters[t-1])),S.customFilters!==!1&&r.customFilterFields.length>0&&o(F,{children:[n("hr",{"data-ui":"menu-separator"}),o("div",{"data-ui":"custom-filter",children:[o("div",{"data-ui":"custom-filter-row",children:[o("select",{"aria-label":i.customFilterField,onChange:e=>{e.currentTarget instanceof HTMLSelectElement&&(O.set(e.currentTarget.value),H.set(""),f.set(""),E.set(""))},children:[n("option",{value:"",disabled:!0,selected:!O(),children:i.customFilterField}),h(r.customFilterFields,e=>e.value,e=>n("option",{value:e.value,selected:e.value===O(),children:e.label}))]}),o("select",{"aria-label":i.customFilterOperator,disabled:!O(),onChange:e=>{e.currentTarget instanceof HTMLSelectElement&&(H.set(e.currentTarget.value),f.set(""),E.set(""))},children:[n("option",{value:"",disabled:!0,selected:!H(),children:i.customFilterOperator}),h(ke(O()),e=>e,e=>n("option",{value:e,selected:e===H(),children:I(e)}))]}),sa()]}),n("button",{"data-ui":"custom-filter-add",type:"button",disabled:!Le(),onClick:Yt,children:i.customFilterAdd})]})]})]}),G&&o("div",{"data-ui":"search-filter-column","data-facet-type":"groupBy",children:[ge(i.groupBy,A("groupBy")),oa(),r.groupBy.length?n("p",{"data-ui":"search-filter-grouping-add-label",children:i.groupByAdd}):null,h(r.groupBy,e=>e.id,(e,t)=>Me(e,t===0?null:r.groupBy[t-1])),ee.length?n("hr",{"data-ui":"menu-separator"}):null,ee.length?o("select",{"data-ui":"custom-group-by",disabled:X().length>=(r.maxGroupBy??1/0),"aria-label":i.customGroupByPlaceholder,onChange:e=>{if(!(e.currentTarget instanceof HTMLSelectElement))return;let t=e.currentTarget,l=ee.find(s=>s.id===t.value);t.value="",l&&!N("groupBy",l.id)&&Pe(l)},children:[n("option",{value:"",disabled:!0,selected:!0,children:i.customGroupByPlaceholder}),h(ee,e=>e.id,e=>n("option",{value:e.id,children:e.label}))]}):null]}),oe()&&o("div",{"data-ui":"search-filter-column","data-facet-type":"favorite",children:[ge(i.favorites,W()?1:0),r.favoriteHref?n("a",{"data-ui":"menu-item",href:r.favoriteHref,children:i.saveSearch}):c?.saveFavoriteFunction?n("button",{"data-ui":"favorite-save-toggle",type:"button","aria-expanded":String(k()),"aria-controls":`${a.id}-favorite-form`,onClick:()=>{k()?z():(k.set(!0),queueMicrotask(()=>se('[data-ui="favorite-save"] input[type="text"]')))},children:i.saveSearch}):null,c?.saveFavoriteFunction&&k()&&!r.favoriteHref?o("form",{id:`${a.id}-favorite-form`,"data-ui":"favorite-save","aria-label":i.saveSearch,onSubmit:aa,children:[o("div",{"data-ui":"favorite-save-row",children:[n("input",{type:"text",autocomplete:"off",placeholder:i.favoriteName,"aria-label":i.favoriteName,value:V(),onInput:e=>{e.currentTarget instanceof HTMLInputElement&&V.set(e.currentTarget.value)}}),o("label",{children:[n("input",{type:"checkbox",checked:U(),onChange:e=>{e.currentTarget instanceof HTMLInputElement&&U.set(e.currentTarget.checked)}}),i.favoriteDefault]})]}),n("button",{"data-ui":"action","data-variant":"primary","data-size":"compact",type:"submit",disabled:!V().trim(),children:i.favoriteSaveAction}),n("button",{"data-ui":"action","data-variant":"secondary",type:"button",onClick:e=>{e.stopPropagation(),z()},children:i.favoriteCancel})]}):null,C().length?n("ul",{"data-ui":"favorite-list",children:h(C(),e=>e.id,la)}):n("p",{"data-ui":"search-filter-empty",children:i.noFavorites})]})]}),Ke=()=>R()?o("aside",{"data-ui":"notice","data-pattern":"notice","data-tone":"danger",role:"alert",children:[n("div",{"data-ui":"notice-copy",children:n("p",{"data-ui":"notice-message",children:R()})}),K()?n("div",{"data-ui":"notice-actions",children:n("button",{"data-ui":"action","data-variant":"secondary",type:"button",onClick:_t,children:i.retry})}):null]}):null;return{view:()=>o("div",{"data-ui":"search-filter",id:a.id,role:"search","aria-label":i.searchLabel,"data-name":r.name,"data-size":r.size??"default","data-busy":v()?"true":null,onKeydown:e=>{if(!(e.key!=="Escape"||L()||!y())&&!we(e)){if(e.preventDefault(),e.stopPropagation(),k()){z();return}D(),queueMicrotask(()=>te?.focus())}},children:[o("div",{"data-ui":"search-filter-bar",children:[o("div",{"data-ui":"search-filter-field",children:[be("search"),n("input",{"data-ui":"search-filter-input",type:"search",value:p(),autocomplete:"off",placeholder:i.searchPlaceholder,"aria-label":i.searchLabel,onInput:Qt,onKeydown:ea,onFocus:()=>{p().trim()&&T.set(!0)}}),T()&&p().trim()?o("div",{"data-ui":"search-filter-suggestions",role:"group","aria-label":i.searchGenericLabel,children:[o("button",{"data-ui":"search-filter-suggestion",type:"button",onClick:Fe,children:[i.searchGenericLabel,": ",o("b",{children:['"',p().trim(),'"']})]}),h(zt(p().trim()),e=>e.value,e=>o("button",{"data-ui":"search-filter-suggestion",type:"button",onClick:()=>jt(e),children:[i.searchFieldPrefix," ",n("b",{children:e.label})," ",i.searchFieldPreposition,":"," ",o("b",{children:['"',p().trim(),'"']})]}))]}):null]}),o("details",{"data-ui":"menu","data-variant":"search-filter","data-align":"end","data-active":A("filter")?"true":null,open:y()===!0?!0:void 0,onToggle:e=>{e.currentTarget instanceof HTMLDetailsElement&&(e.currentTarget.open?y.set(!0):D())},children:[o("summary",{"data-ui":"search-filter-toggle",role:"button","aria-expanded":String(L()||y()&&w()==="filter"),"aria-label":i.filters,title:i.filters,onClick:Ut,"aria-controls":`${a.id}-panel`,children:[be("filter"),n("span",{children:i.filters}),A("filter")?n("span",{"data-ui":"menu-trigger-count",children:String(A("filter"))}):null]}),n("div",{id:`${a.id}-panel`,"data-ui":"menu-panel",role:"group","aria-label":w()==="filter"?i.filters:w()==="groupBy"?i.groupBy:i.favorites,children:L()?null:De()})]}),G?Ie("groupBy",i.groupBy):null,oe()?Ie("favorite",i.favorites):null]}),d().length?o("ul",{"data-ui":"search-filter-facets",children:[h(d(),e=>e.id,ra),d().some(e=>e.type==="filter"||e.type==="favorite")?n("li",{children:n("button",{"data-ui":"search-filter-clear",type:"button",onClick:Zt,children:i.clearFilters})}):null]}):null,n("dialog",{"data-ui":"search-filter-sheet","aria-label":i.toggleLabel,onKeydown:e=>{if(e.key==="Escape"){if(we(e))return;if(e.preventDefault(),e.stopPropagation(),k()){z();return}ue()}},onCancel:e=>{e.preventDefault(),ue()},onClick:e=>{e.target instanceof Element&&e.target.closest('[data-ui="modal-close"], [data-ui="modal-backdrop"]')&&ue()},children:L()?n(Q,{id:`${a.id}-sheet`,mode:"client",dialogSemantics:"parent",title:i.toggleLabel,closeLabel:i.close,body:o(F,{children:[Ke(),De()]})}):null}),L()?null:Ke()]}),mount:({root:e,lifetime:t})=>{J=e,document.addEventListener("ket:navigation-start",()=>{me||(B++,ce?.abort(),d.set(_.facets),b.set(_.rules),v.set(!1))},{signal:t}),document.addEventListener("click",l=>{if(!T()&&!y())return;let s=l.target;s instanceof Node&&e.contains(s)||(T.set(!1),D())},{signal:t})},dispose:()=>{B++,v.set(!1),de()?.close(),J=null}}}var st=a=>ot(a);import{each as Qn,effect as jn,signal as er}from"/_ket/view/index.js";import{jsx as Wn}from"/_ket/view/jsx-runtime.js";var dt=["formatted-date","formatted-number","formatted-money"];import{Fragment as rr,jsx as lr,jsxs as or}from"/_ket/view/jsx-runtime.js";var mt=["ket-table","kt-scroll","kt-selection-target","kt-grid","kt-select-col","kt-select-all","kt-col","kt-sort-button","kt-sort-icon","kt-row","kt-cell","kt-person","kt-select-cell","kt-row-select","kt-row-link","kt-group-row","kt-group-cell","kt-group-toggle","kt-group-indent","kt-group-count","kt-group-pager","kt-pager","kt-pager-label","kt-pager-button","kt-select-persisted","kt-caption","kt-tools"];var dr=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","summary",'[tabindex]:not([tabindex="-1"])'].join(",");var Ta=['[data-ui="timeframe-menu"]','[data-ui="view-settings"]'],ur=Ta.map(a=>`${a}[open]`).join(", ");import{jsx as gr,jsxs as br}from"/_ket/view/jsx-runtime.js";import{jsx as vr,jsxs as xr}from"/_ket/view/jsx-runtime.js";var ft=["switch-control","switch-track"];import{each as wr}from"/_ket/view/index.js";import{Fragment as Lr,jsx as Pr,jsxs as Cr}from"/_ket/view/jsx-runtime.js";var pt=["combobox","combobox-input-row","combobox-toggle","combobox-listbox","combobox-option","combobox-empty","tag-picker"];import{jsx as Mr,jsxs as Ir}from"/_ket/view/jsx-runtime.js";var ht=["date-range"];import{jsx as Br,jsxs as $r}from"/_ket/view/jsx-runtime.js";var yt=["file-upload","drop-zone","upload-status"];import{jsx as qr}from"/_ket/view/jsx-runtime.js";var vt=["relation-picker"];import{each as Vr}from"/_ket/view/index.js";import{jsx as Zr,jsxs as Yr}from"/_ket/view/jsx-runtime.js";var xt=["search-bar","filter-bar","applied-filters","applied-filter","saved-views","saved-view","view-settings","view-settings-options"];import{jsx as tl,jsxs as al}from"/_ket/view/jsx-runtime.js";var St=["inline-edit","inline-edit-value","inline-edit-form","inline-edit-actions"];import{each as fl}from"/_ket/view/index.js";import{each as ol}from"/_ket/view/index.js";import{Fragment as ml,jsx as ul,jsxs as cl}from"/_ket/view/jsx-runtime.js";var Tt=["list-chrome","list-chrome-row","list-search","list-search-label","list-search-input","list-search-submit","list-filter-menus","list-facets","list-facet","list-facet-count","list-view-switch","list-view","list-sort","list-sort-label","list-sort-select","list-status","list-actions","bulk-actions","bulk-summary","bulk-count","bulk-action-list","pager-bar","pager-summary","pager-pages","pager-page","pager-actions","pager-link"];import{jsx as vl,jsxs as xl}from"/_ket/view/jsx-runtime.js";var wt=["resource-list","resource-list-item","resource-list-select","resource-list-link"];import{each as wl}from"/_ket/view/index.js";import{jsx as Rl,jsxs as Pl}from"/_ket/view/jsx-runtime.js";var kt=["data-grid-scroll","data-grid","data-grid-cap","data-grid-cell"];import{each as Fl}from"/_ket/view/index.js";import{jsx as Hl,jsxs as El}from"/_ket/view/jsx-runtime.js";var Rt=["tree","tree-item","tree-link","tree-grid","tree-grid-row"];import{each as Dl}from"/_ket/view/index.js";import{jsx as Al,jsxs as Bl}from"/_ket/view/jsx-runtime.js";var Pt=["data-matrix","data-matrix-head","data-matrix-heading","data-matrix-eyebrow","data-matrix-title","data-matrix-description","data-matrix-summary","data-matrix-scroll","data-matrix-table","data-matrix-column","data-matrix-row-head","data-matrix-row-leading","data-matrix-row-title","data-matrix-row-description","data-matrix-row-status","data-matrix-row-actions","data-matrix-cell"];import{each as Nl}from"/_ket/view/index.js";import{jsx as ql,jsxs as Gl}from"/_ket/view/jsx-runtime.js";var Ct=["bar-chart","bar-chart-rows","bar-chart-row","bar-chart-label","bar-chart-caption","bar-chart-track","bar-chart-fill","bar-chart-segment","bar-chart-value","bar-chart-scale","bar-chart-legend","bar-chart-legend-item","bar-chart-legend-swatch","bar-chart-empty"];import{each as Ul}from"/_ket/view/index.js";import{jsx as Wl,jsxs as Zl}from"/_ket/view/jsx-runtime.js";var Lt=["timeframe","timeframe-menu","timeframe-trigger","timeframe-label","timeframe-value","timeframe-content","timeframe-option","timeframe-option-label","timeframe-option-detail","timeframe-range","timeframe-asof","timeframe-note"];import{each as jl}from"/_ket/view/index.js";import{jsx as ao,jsxs as io}from"/_ket/view/jsx-runtime.js";var Ft=["description-list","key-value","key-value-label","key-value-value","person","person-body","avatar-group","status"];import{each as lo}from"/_ket/view/index.js";import{jsx as mo,jsxs as go}from"/_ket/view/jsx-runtime.js";var Ht=["record-summary","record-summary-main","record-actions","record-rail"];import{each as po}from"/_ket/view/index.js";import{jsx as xo,jsxs as So}from"/_ket/view/jsx-runtime.js";var Et=["activity-timeline","activity-item","activity-marker","audit-log","audit-item"];import{each as ko}from"/_ket/view/index.js";import{jsx as Co,jsxs as Lo}from"/_ket/view/jsx-runtime.js";var Mt=["attachments","attachment","media-gallery","media-item"];import{each as Ho}from"/_ket/view/index.js";import{Fragment as Do,jsx as Mo,jsxs as Io}from"/_ket/view/jsx-runtime.js";var It=["app-navigation","navigation-trigger","navigation-toggle","navigation-trigger-icon","navigation-trigger-identity","navigation-trigger-label","navigation-layer","navigation-backdrop","navigation-drawer","navigation-header","navigation-identity","navigation-context","navigation-close","navigation-groups","navigation-group","navigation-group-label","navigation-items","navigation-supplementary","navigation-item","navigation-branch","navigation-branch-trigger","navigation-children","navigation-item-leading","navigation-item-copy","navigation-item-label","navigation-item-description","navigation-item-count","navigation-footer"];import{each as Jo}from"/_ket/view/index.js";import{Fragment as Vo,jsx as Go,jsxs as zo}from"/_ket/view/jsx-runtime.js";var Dt=["table-scroll","table","table-caption","select-col","select-all","col","sort-link","sort-icon","row","group-row","group-cell","group-link","group-indent","group-count","group-pager","group-pager-actions","cell","select-cell","row-select","row-link"];import{Fragment as ts,jsx as es,jsxs as as}from"/_ket/view/jsx-runtime.js";var Kt=["list-page","list-page-context","list-page-header","list-page-heading","list-page-title-row","list-page-eyebrow","list-page-title","list-page-description","list-page-actions","list-page-tools","list-page-toolbar","list-page-controls","list-page-status","list-page-body","list-page-footer"];import{jsx as ls,jsxs as os}from"/_ket/view/jsx-runtime.js";var At=["record-page","record-page-context","record-page-header","record-page-title-row","record-page-heading","record-page-title","record-page-subline","record-page-status","record-page-description","record-page-actions","record-page-meta","record-page-controller","record-page-navigation","record-page-layout","record-page-body","record-page-aside"];var Bt=["form-page","form-page-context","form-page-header","form-page-title-row","form-page-heading","form-page-title","form-page-subline","form-page-status","form-page-description","form-page-actions","form-page-meta","form-page-controller","form-page-navigation","form-page-layout","form-page-body","form-page-aside"];import{jsx as ps,jsxs as hs}from"/_ket/view/jsx-runtime.js";var $t=["dashboard-page","dashboard-page-context","dashboard-page-header","dashboard-page-heading","dashboard-page-eyebrow","dashboard-page-title-row","dashboard-page-title","dashboard-page-subline","dashboard-page-status","dashboard-page-description","dashboard-page-actions","dashboard-page-meta","dashboard-page-body"];var Jt=["board-page","board-page-context","board-page-header","board-page-heading","board-page-eyebrow","board-page-title-row","board-page-title","board-page-subline","board-page-status","board-page-description","board-page-actions","board-page-meta","board-page-toolbar","board-page-controls","board-page-body"];import{each as Ps}from"/_ket/view/index.js";import{jsx as Ls,jsxs as Fs}from"/_ket/view/jsx-runtime.js";var Nt=["pipeline","pipeline-step","pipeline-arrow","pipeline-step-label","pipeline-step-value","pipeline-step-node"];import{each as Is}from"/_ket/view/index.js";import{jsx as Bs,jsxs as $s}from"/_ket/view/jsx-runtime.js";var Xt=["record-form","form-errors","form-grid","form-actions"];import{each as Us}from"/_ket/view/index.js";import{jsx as Ys,jsxs as Qs}from"/_ket/view/jsx-runtime.js";var qt=["reorder-list","reorder-list-value","reorder-list-rows","reorder-list-row","reorder-list-content","reorder-list-controls"];var Gt={actions:Ae,feedback:$e,fields:Ge,status:Be,navigation:ze,progress:Ve,menu:Ue,reorderList:qt,popover:_e,tooltip:We,dialog:Ze,toast:Ye,spinner:Qe,skeleton:je,lightbox:tt,relationSelect:et,searchFilter:it,ketTable:mt,scalarFields:ft,combobox:pt,dateTime:ht,upload:yt,relationPicker:vt,listControls:xt,inlineEdit:St,resourceList:wt,dataGrid:kt,tree:Rt,matrix:Pt,barChart:Ct,timeframe:Lt,recordDisplay:Ft,formattedValues:dt,recordComposition:Ht,activity:Et,media:Mt,layouts:qe,shell:Xe,appNavigation:It,table:Dt,listChrome:Tt,listPage:Kt,formPage:Bt,recordPage:At,dashboardPage:$t,boardPage:Jt,modal:Je,pipeline:Nt,form:Xt},Ha=[...new Set(Object.values(Gt).flat())].sort(),Ea=Object.freeze(Object.fromEntries(Object.entries(Gt).map(([a,r])=>[a,[...r]])));export{st as searchFilter};