@nixxie-cms/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/CHANGELOG.md +3158 -0
  2. package/LICENSE +21 -0
  3. package/README.md +6 -0
  4. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.cjs.d.ts +2 -0
  5. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.cjs.js +244 -0
  6. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.esm.js +235 -0
  7. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/package.json +4 -0
  8. package/___internal-do-not-use-will-break-in-patch/admin-ui/next-config/package.json +4 -0
  9. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.cjs.d.ts +2 -0
  10. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.cjs.js +59 -0
  11. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.esm.js +55 -0
  12. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/package.json +4 -0
  13. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.cjs.d.ts +2 -0
  14. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.cjs.js +116 -0
  15. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.esm.js +112 -0
  16. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/package.json +4 -0
  17. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.cjs.d.ts +2 -0
  18. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.cjs.js +336 -0
  19. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.esm.js +332 -0
  20. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/package.json +4 -0
  21. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.cjs.d.ts +2 -0
  22. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.cjs.js +463 -0
  23. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.esm.js +455 -0
  24. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/package.json +4 -0
  25. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.cjs.d.ts +2 -0
  26. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.cjs.js +1195 -0
  27. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.esm.js +1187 -0
  28. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/package.json +4 -0
  29. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.cjs.d.ts +2 -0
  30. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.cjs.js +40 -0
  31. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.esm.js +35 -0
  32. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/package.json +4 -0
  33. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.cjs.d.ts +2 -0
  34. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.cjs.js +51 -0
  35. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.esm.js +38 -0
  36. package/___internal-do-not-use-will-break-in-patch/artifacts/package.json +4 -0
  37. package/access/dist/nixxie-cms-core-access.cjs.d.ts +2 -0
  38. package/access/dist/nixxie-cms-core-access.cjs.js +26 -0
  39. package/access/dist/nixxie-cms-core-access.esm.js +19 -0
  40. package/access/package.json +4 -0
  41. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.cjs.d.ts +2 -0
  42. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.cjs.js +87 -0
  43. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.esm.js +2 -0
  44. package/admin-ui/apollo/package.json +4 -0
  45. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.d.ts +2 -0
  46. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.js +77 -0
  47. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.esm.js +58 -0
  48. package/admin-ui/components/package.json +4 -0
  49. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.d.ts +2 -0
  50. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.js +35 -0
  51. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.esm.js +23 -0
  52. package/admin-ui/context/package.json +4 -0
  53. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.cjs.d.ts +3 -0
  54. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.cjs.js +18 -0
  55. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.esm.js +2 -0
  56. package/admin-ui/image/package.json +4 -0
  57. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.cjs.d.ts +2 -0
  58. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.cjs.js +34 -0
  59. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.esm.js +12 -0
  60. package/admin-ui/router/package.json +4 -0
  61. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.cjs.d.ts +2 -0
  62. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.cjs.js +45 -0
  63. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.esm.js +22 -0
  64. package/admin-ui/utils/package.json +4 -0
  65. package/bin/cli.js +3 -0
  66. package/context/dist/nixxie-cms-core-context.cjs.d.ts +2 -0
  67. package/context/dist/nixxie-cms-core-context.cjs.js +31 -0
  68. package/context/dist/nixxie-cms-core-context.esm.js +23 -0
  69. package/context/package.json +4 -0
  70. package/dist/CreateItemDialog-33335548.esm.js +55 -0
  71. package/dist/CreateItemDialog-56cf59b7.cjs.js +57 -0
  72. package/dist/Errors-575adfa3.cjs.js +147 -0
  73. package/dist/Errors-bf24759e.esm.js +143 -0
  74. package/dist/Field-47f85161.esm.js +278 -0
  75. package/dist/Field-ed8d7627.cjs.js +287 -0
  76. package/dist/Fields-956d9a14.esm.js +203 -0
  77. package/dist/Fields-e2c28056.cjs.js +206 -0
  78. package/dist/GraphQLErrorNotice-cd74180d.cjs.js +57 -0
  79. package/dist/GraphQLErrorNotice-d9f0931b.esm.js +55 -0
  80. package/dist/NullableFieldWrapper-6ea48af3.esm.js +71 -0
  81. package/dist/NullableFieldWrapper-daa0a080.cjs.js +74 -0
  82. package/dist/PageContainer-27c27f10.cjs.js +1144 -0
  83. package/dist/PageContainer-7db73317.esm.js +1129 -0
  84. package/dist/actionData-64d4c37a.esm.js +28 -0
  85. package/dist/actionData-7858738d.cjs.js +32 -0
  86. package/dist/admin-meta-14c60fec.esm.js +210 -0
  87. package/dist/admin-meta-18d0c276.cjs.js +217 -0
  88. package/dist/admin-meta-graphql-6f7f5331.esm.js +142 -0
  89. package/dist/admin-meta-graphql-c8f926e9.cjs.js +144 -0
  90. package/dist/common-1a350e11.cjs.js +324 -0
  91. package/dist/common-29fc82e6.esm.js +315 -0
  92. package/dist/context-3132c3ed.esm.js +419 -0
  93. package/dist/context-e7a45152.cjs.js +432 -0
  94. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts +6 -0
  95. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts.map +1 -0
  96. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts +10 -0
  97. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts.map +1 -0
  98. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts +6 -0
  99. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts.map +1 -0
  100. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts +2 -0
  101. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts.map +1 -0
  102. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts +6 -0
  103. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts.map +1 -0
  104. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts +12 -0
  105. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts.map +1 -0
  106. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts +7 -0
  107. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts.map +1 -0
  108. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts +6 -0
  109. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts.map +1 -0
  110. package/dist/declarations/src/access.d.ts +12 -0
  111. package/dist/declarations/src/access.d.ts.map +1 -0
  112. package/dist/declarations/src/admin-ui/apollo.d.ts +8 -0
  113. package/dist/declarations/src/admin-ui/apollo.d.ts.map +1 -0
  114. package/dist/declarations/src/admin-ui/components/CellContainer.d.ts +5 -0
  115. package/dist/declarations/src/admin-ui/components/CellContainer.d.ts.map +1 -0
  116. package/dist/declarations/src/admin-ui/components/CreateItemDialog.d.ts +5 -0
  117. package/dist/declarations/src/admin-ui/components/CreateItemDialog.d.ts.map +1 -0
  118. package/dist/declarations/src/admin-ui/components/Errors.d.ts +28 -0
  119. package/dist/declarations/src/admin-ui/components/Errors.d.ts.map +1 -0
  120. package/dist/declarations/src/admin-ui/components/GraphQLErrorNotice.d.ts +6 -0
  121. package/dist/declarations/src/admin-ui/components/GraphQLErrorNotice.d.ts.map +1 -0
  122. package/dist/declarations/src/admin-ui/components/InlineCode.d.ts +3 -0
  123. package/dist/declarations/src/admin-ui/components/InlineCode.d.ts.map +1 -0
  124. package/dist/declarations/src/admin-ui/components/Logo.d.ts +2 -0
  125. package/dist/declarations/src/admin-ui/components/Logo.d.ts.map +1 -0
  126. package/dist/declarations/src/admin-ui/components/Navigation.d.ts +22 -0
  127. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -0
  128. package/dist/declarations/src/admin-ui/components/NullableFieldWrapper.d.ts +33 -0
  129. package/dist/declarations/src/admin-ui/components/NullableFieldWrapper.d.ts.map +1 -0
  130. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts +10 -0
  131. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts.map +1 -0
  132. package/dist/declarations/src/admin-ui/components/index.d.ts +11 -0
  133. package/dist/declarations/src/admin-ui/components/index.d.ts.map +1 -0
  134. package/dist/declarations/src/admin-ui/context.d.ts +50 -0
  135. package/dist/declarations/src/admin-ui/context.d.ts.map +1 -0
  136. package/dist/declarations/src/admin-ui/image.d.ts +3 -0
  137. package/dist/declarations/src/admin-ui/image.d.ts.map +1 -0
  138. package/dist/declarations/src/admin-ui/router.d.ts +15 -0
  139. package/dist/declarations/src/admin-ui/router.d.ts.map +1 -0
  140. package/dist/declarations/src/admin-ui/utils/Fields.d.ts +16 -0
  141. package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -0
  142. package/dist/declarations/src/admin-ui/utils/filters.d.ts +10 -0
  143. package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -0
  144. package/dist/declarations/src/admin-ui/utils/index.d.ts +8 -0
  145. package/dist/declarations/src/admin-ui/utils/index.d.ts.map +1 -0
  146. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +24 -0
  147. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -0
  148. package/dist/declarations/src/admin-ui/utils/utils.d.ts +8 -0
  149. package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -0
  150. package/dist/declarations/src/artifacts.d.ts +14 -0
  151. package/dist/declarations/src/artifacts.d.ts.map +1 -0
  152. package/dist/declarations/src/context.d.ts +2 -0
  153. package/dist/declarations/src/context.d.ts.map +1 -0
  154. package/dist/declarations/src/fields/filters/enum-filter.d.ts +27 -0
  155. package/dist/declarations/src/fields/filters/enum-filter.d.ts.map +1 -0
  156. package/dist/declarations/src/fields/filters/index.d.ts +2 -0
  157. package/dist/declarations/src/fields/filters/index.d.ts.map +1 -0
  158. package/dist/declarations/src/fields/filters/internal.d.ts +21 -0
  159. package/dist/declarations/src/fields/filters/internal.d.ts.map +1 -0
  160. package/dist/declarations/src/fields/filters/providers/mysql.d.ts +182 -0
  161. package/dist/declarations/src/fields/filters/providers/mysql.d.ts.map +1 -0
  162. package/dist/declarations/src/fields/filters/providers/postgresql.d.ts +182 -0
  163. package/dist/declarations/src/fields/filters/providers/postgresql.d.ts.map +1 -0
  164. package/dist/declarations/src/fields/filters/providers/sqlite.d.ts +179 -0
  165. package/dist/declarations/src/fields/filters/providers/sqlite.d.ts.map +1 -0
  166. package/dist/declarations/src/fields/index.d.ts +35 -0
  167. package/dist/declarations/src/fields/index.d.ts.map +1 -0
  168. package/dist/declarations/src/fields/types/bigInt/index.d.ts +20 -0
  169. package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -0
  170. package/dist/declarations/src/fields/types/bigInt/views/index.d.ts +24 -0
  171. package/dist/declarations/src/fields/types/bigInt/views/index.d.ts.map +1 -0
  172. package/dist/declarations/src/fields/types/bytes/index.d.ts +70 -0
  173. package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -0
  174. package/dist/declarations/src/fields/types/bytes/views/index.d.ts +24 -0
  175. package/dist/declarations/src/fields/types/bytes/views/index.d.ts.map +1 -0
  176. package/dist/declarations/src/fields/types/calendarDay/index.d.ts +15 -0
  177. package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -0
  178. package/dist/declarations/src/fields/types/calendarDay/views/index.d.ts +18 -0
  179. package/dist/declarations/src/fields/types/calendarDay/views/index.d.ts.map +1 -0
  180. package/dist/declarations/src/fields/types/checkbox/index.d.ts +11 -0
  181. package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -0
  182. package/dist/declarations/src/fields/types/checkbox/views/index.d.ts +9 -0
  183. package/dist/declarations/src/fields/types/checkbox/views/index.d.ts.map +1 -0
  184. package/dist/declarations/src/fields/types/decimal/index.d.ts +20 -0
  185. package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -0
  186. package/dist/declarations/src/fields/types/decimal/views/index.d.ts +22 -0
  187. package/dist/declarations/src/fields/types/decimal/views/index.d.ts.map +1 -0
  188. package/dist/declarations/src/fields/types/file/index.d.ts +34 -0
  189. package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -0
  190. package/dist/declarations/src/fields/types/file/views/Field.d.ts +17 -0
  191. package/dist/declarations/src/fields/types/file/views/Field.d.ts.map +1 -0
  192. package/dist/declarations/src/fields/types/file/views/index.d.ts +29 -0
  193. package/dist/declarations/src/fields/types/file/views/index.d.ts.map +1 -0
  194. package/dist/declarations/src/fields/types/float/index.d.ts +18 -0
  195. package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -0
  196. package/dist/declarations/src/fields/types/float/views/index.d.ts +22 -0
  197. package/dist/declarations/src/fields/types/float/views/index.d.ts.map +1 -0
  198. package/dist/declarations/src/fields/types/image/index.d.ts +34 -0
  199. package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -0
  200. package/dist/declarations/src/fields/types/image/utils.d.ts +2 -0
  201. package/dist/declarations/src/fields/types/image/utils.d.ts.map +1 -0
  202. package/dist/declarations/src/fields/types/image/views/Field.d.ts +4 -0
  203. package/dist/declarations/src/fields/types/image/views/Field.d.ts.map +1 -0
  204. package/dist/declarations/src/fields/types/image/views/index.d.ts +49 -0
  205. package/dist/declarations/src/fields/types/image/views/index.d.ts.map +1 -0
  206. package/dist/declarations/src/fields/types/integer/index.d.ts +20 -0
  207. package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -0
  208. package/dist/declarations/src/fields/types/integer/views/index.d.ts +23 -0
  209. package/dist/declarations/src/fields/types/integer/views/index.d.ts.map +1 -0
  210. package/dist/declarations/src/fields/types/json/index.d.ts +25 -0
  211. package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -0
  212. package/dist/declarations/src/fields/types/json/views/index.d.ts +9 -0
  213. package/dist/declarations/src/fields/types/json/views/index.d.ts.map +1 -0
  214. package/dist/declarations/src/fields/types/multiselect/index.d.ts +50 -0
  215. package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -0
  216. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts +26 -0
  217. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -0
  218. package/dist/declarations/src/fields/types/password/index.d.ts +49 -0
  219. package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -0
  220. package/dist/declarations/src/fields/types/password/views/index.d.ts +47 -0
  221. package/dist/declarations/src/fields/types/password/views/index.d.ts.map +1 -0
  222. package/dist/declarations/src/fields/types/relationship/index.d.ts +113 -0
  223. package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -0
  224. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +26 -0
  225. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -0
  226. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +24 -0
  227. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -0
  228. package/dist/declarations/src/fields/types/relationship/views/index.d.ts +27 -0
  229. package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -0
  230. package/dist/declarations/src/fields/types/relationship/views/types.d.ts +39 -0
  231. package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -0
  232. package/dist/declarations/src/fields/types/select/index.d.ts +42 -0
  233. package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -0
  234. package/dist/declarations/src/fields/types/select/views/index.d.ts +32 -0
  235. package/dist/declarations/src/fields/types/select/views/index.d.ts.map +1 -0
  236. package/dist/declarations/src/fields/types/text/index.d.ts +58 -0
  237. package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -0
  238. package/dist/declarations/src/fields/types/text/views/index.d.ts +36 -0
  239. package/dist/declarations/src/fields/types/text/views/index.d.ts.map +1 -0
  240. package/dist/declarations/src/fields/types/timestamp/index.d.ts +19 -0
  241. package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -0
  242. package/dist/declarations/src/fields/types/timestamp/views/index.d.ts +14 -0
  243. package/dist/declarations/src/fields/types/timestamp/views/index.d.ts.map +1 -0
  244. package/dist/declarations/src/fields/types/timestamp/views/utils.d.ts +14 -0
  245. package/dist/declarations/src/fields/types/timestamp/views/utils.d.ts.map +1 -0
  246. package/dist/declarations/src/fields/types/virtual/index.d.ts +40 -0
  247. package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -0
  248. package/dist/declarations/src/fields/types/virtual/views/index.d.ts +7 -0
  249. package/dist/declarations/src/fields/types/virtual/views/index.d.ts.map +1 -0
  250. package/dist/declarations/src/graphql-ts.d.ts +5 -0
  251. package/dist/declarations/src/graphql-ts.d.ts.map +1 -0
  252. package/dist/declarations/src/helpers.d.ts +121 -0
  253. package/dist/declarations/src/helpers.d.ts.map +1 -0
  254. package/dist/declarations/src/index.d.ts +6 -0
  255. package/dist/declarations/src/index.d.ts.map +1 -0
  256. package/dist/declarations/src/lib/admin-meta.d.ts +71 -0
  257. package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -0
  258. package/dist/declarations/src/lib/core/access-control.d.ts +39 -0
  259. package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -0
  260. package/dist/declarations/src/lib/core/initialise-lists.d.ts +131 -0
  261. package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -0
  262. package/dist/declarations/src/lib/core/resolve-relationships.d.ts +30 -0
  263. package/dist/declarations/src/lib/core/resolve-relationships.d.ts.map +1 -0
  264. package/dist/declarations/src/lib/core/where-inputs.d.ts +15 -0
  265. package/dist/declarations/src/lib/core/where-inputs.d.ts.map +1 -0
  266. package/dist/declarations/src/lib/express.d.ts +10 -0
  267. package/dist/declarations/src/lib/express.d.ts.map +1 -0
  268. package/dist/declarations/src/lib/migrations.d.ts +13 -0
  269. package/dist/declarations/src/lib/migrations.d.ts.map +1 -0
  270. package/dist/declarations/src/lib/system.d.ts +35 -0
  271. package/dist/declarations/src/lib/system.d.ts.map +1 -0
  272. package/dist/declarations/src/schema.d.ts +40 -0
  273. package/dist/declarations/src/schema.d.ts.map +1 -0
  274. package/dist/declarations/src/scripts/cli.d.ts +11 -0
  275. package/dist/declarations/src/scripts/cli.d.ts.map +1 -0
  276. package/dist/declarations/src/scripts/index.d.ts +2 -0
  277. package/dist/declarations/src/scripts/index.d.ts.map +1 -0
  278. package/dist/declarations/src/scripts/utils.d.ts +7 -0
  279. package/dist/declarations/src/scripts/utils.d.ts.map +1 -0
  280. package/dist/declarations/src/session.d.ts +86 -0
  281. package/dist/declarations/src/session.d.ts.map +1 -0
  282. package/dist/declarations/src/testing.d.ts +2 -0
  283. package/dist/declarations/src/testing.d.ts.map +1 -0
  284. package/dist/declarations/src/types/admin-meta.d.ts +190 -0
  285. package/dist/declarations/src/types/admin-meta.d.ts.map +1 -0
  286. package/dist/declarations/src/types/config/access-control.d.ts +108 -0
  287. package/dist/declarations/src/types/config/access-control.d.ts.map +1 -0
  288. package/dist/declarations/src/types/config/fields.d.ts +67 -0
  289. package/dist/declarations/src/types/config/fields.d.ts.map +1 -0
  290. package/dist/declarations/src/types/config/hooks.d.ts +441 -0
  291. package/dist/declarations/src/types/config/hooks.d.ts.map +1 -0
  292. package/dist/declarations/src/types/config/index.d.ts +283 -0
  293. package/dist/declarations/src/types/config/index.d.ts.map +1 -0
  294. package/dist/declarations/src/types/config/lists.d.ts +430 -0
  295. package/dist/declarations/src/types/config/lists.d.ts.map +1 -0
  296. package/dist/declarations/src/types/context.d.ts +458 -0
  297. package/dist/declarations/src/types/context.d.ts.map +1 -0
  298. package/dist/declarations/src/types/core.d.ts +9 -0
  299. package/dist/declarations/src/types/core.d.ts.map +1 -0
  300. package/dist/declarations/src/types/index.d.ts +9 -0
  301. package/dist/declarations/src/types/index.d.ts.map +1 -0
  302. package/dist/declarations/src/types/next-fields.d.ts +308 -0
  303. package/dist/declarations/src/types/next-fields.d.ts.map +1 -0
  304. package/dist/declarations/src/types/prisma.d.ts +13 -0
  305. package/dist/declarations/src/types/prisma.d.ts.map +1 -0
  306. package/dist/declarations/src/types/schema/g.d.ts +7 -0
  307. package/dist/declarations/src/types/schema/g.d.ts.map +1 -0
  308. package/dist/declarations/src/types/schema/gWithContext.d.ts +12 -0
  309. package/dist/declarations/src/types/schema/gWithContext.d.ts.map +1 -0
  310. package/dist/declarations/src/types/schema/index.d.ts +4 -0
  311. package/dist/declarations/src/types/schema/index.d.ts.map +1 -0
  312. package/dist/declarations/src/types/schema/legacy-alias.d.ts +28 -0
  313. package/dist/declarations/src/types/schema/scalars.d.ts +22 -0
  314. package/dist/declarations/src/types/schema/scalars.d.ts.map +1 -0
  315. package/dist/declarations/src/types/session.d.ts +28 -0
  316. package/dist/declarations/src/types/session.d.ts.map +1 -0
  317. package/dist/declarations/src/types/type-info.d.ts +35 -0
  318. package/dist/declarations/src/types/type-info.d.ts.map +1 -0
  319. package/dist/declarations/src/types/utils.d.ts +78 -0
  320. package/dist/declarations/src/types/utils.d.ts.map +1 -0
  321. package/dist/declarations/types/dist/nixxie-cms-core-types.cjs.d.ts +2 -0
  322. package/dist/express-6743b918.esm.js +476 -0
  323. package/dist/express-e9ed9a7d.cjs.js +495 -0
  324. package/dist/filters-8c8616f9.esm.js +89 -0
  325. package/dist/filters-b3e5eb50.cjs.js +96 -0
  326. package/dist/index-24b78415.esm.js +419 -0
  327. package/dist/index-ac01583b.cjs.js +425 -0
  328. package/dist/migrations-996e66a0.esm.js +76 -0
  329. package/dist/migrations-ab2e0fd4.cjs.js +78 -0
  330. package/dist/next-fields-49c025ef.cjs.js +251 -0
  331. package/dist/next-fields-9bf04ed8.esm.js +241 -0
  332. package/dist/nixxie-cms-core.cjs.d.ts +2 -0
  333. package/dist/nixxie-cms-core.cjs.js +522 -0
  334. package/dist/nixxie-cms-core.esm.js +504 -0
  335. package/dist/non-null-graphql-17b83ddc.cjs.js +72 -0
  336. package/dist/non-null-graphql-5315718c.esm.js +67 -0
  337. package/dist/pick-5fe45878.cjs.js +71 -0
  338. package/dist/pick-b7ef3115.esm.js +68 -0
  339. package/dist/resolve-hooks-17aafd37.esm.js +2026 -0
  340. package/dist/resolve-hooks-66fe8a8e.cjs.js +2043 -0
  341. package/dist/system-48c5f6df.cjs.js +4283 -0
  342. package/dist/system-dfec2f0a.esm.js +4273 -0
  343. package/dist/useCreateItem-1be4987e.cjs.js +160 -0
  344. package/dist/useCreateItem-1f94d252.esm.js +157 -0
  345. package/dist/useFilter-0b5a1ee6.esm.js +118 -0
  346. package/dist/useFilter-1a4e6900.cjs.js +120 -0
  347. package/dist/utils-0cc426c8.esm.js +19 -0
  348. package/dist/utils-1b632a8f.cjs.js +21 -0
  349. package/dist/utils-230cddb1.cjs.js +150 -0
  350. package/dist/utils-5e1d4d28.esm.js +138 -0
  351. package/dist/utils-b031e11c.cjs.js +49 -0
  352. package/dist/utils-e74e3527.cjs.js +87 -0
  353. package/dist/utils-ef2cd0f4.esm.js +80 -0
  354. package/dist/utils-f9556354.esm.js +41 -0
  355. package/fields/dist/nixxie-cms-core-fields.cjs.d.ts +2 -0
  356. package/fields/dist/nixxie-cms-core-fields.cjs.js +1808 -0
  357. package/fields/dist/nixxie-cms-core-fields.esm.js +1785 -0
  358. package/fields/package.json +4 -0
  359. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.cjs.d.ts +2 -0
  360. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.cjs.js +258 -0
  361. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.esm.js +253 -0
  362. package/fields/types/bigInt/views/package.json +4 -0
  363. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.d.ts +2 -0
  364. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +221 -0
  365. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +216 -0
  366. package/fields/types/bytes/package.json +4 -0
  367. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.d.ts +2 -0
  368. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.js +239 -0
  369. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.esm.js +234 -0
  370. package/fields/types/bytes/views/package.json +4 -0
  371. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.cjs.d.ts +2 -0
  372. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.cjs.js +147 -0
  373. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.esm.js +141 -0
  374. package/fields/types/calendarDay/views/package.json +4 -0
  375. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.cjs.d.ts +2 -0
  376. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.cjs.js +126 -0
  377. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.esm.js +120 -0
  378. package/fields/types/checkbox/views/package.json +4 -0
  379. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.cjs.d.ts +2 -0
  380. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.cjs.js +248 -0
  381. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.esm.js +239 -0
  382. package/fields/types/decimal/views/package.json +4 -0
  383. package/fields/types/file/utils/package.json +4 -0
  384. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.cjs.d.ts +2 -0
  385. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.cjs.js +86 -0
  386. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.esm.js +81 -0
  387. package/fields/types/file/views/package.json +4 -0
  388. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.cjs.d.ts +2 -0
  389. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.cjs.js +237 -0
  390. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.esm.js +232 -0
  391. package/fields/types/float/views/package.json +4 -0
  392. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.cjs.d.ts +2 -0
  393. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.cjs.js +7 -0
  394. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.esm.js +3 -0
  395. package/fields/types/image/utils/package.json +4 -0
  396. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.cjs.d.ts +2 -0
  397. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.cjs.js +361 -0
  398. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.esm.js +354 -0
  399. package/fields/types/image/views/package.json +4 -0
  400. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.cjs.d.ts +2 -0
  401. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.cjs.js +254 -0
  402. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.esm.js +249 -0
  403. package/fields/types/integer/views/package.json +4 -0
  404. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.cjs.d.ts +2 -0
  405. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.cjs.js +83 -0
  406. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.esm.js +77 -0
  407. package/fields/types/json/views/package.json +4 -0
  408. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.d.ts +2 -0
  409. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +147 -0
  410. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +141 -0
  411. package/fields/types/multiselect/views/package.json +4 -0
  412. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.d.ts +2 -0
  413. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +206 -0
  414. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +196 -0
  415. package/fields/types/password/package.json +4 -0
  416. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.cjs.d.ts +2 -0
  417. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.cjs.js +330 -0
  418. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.esm.js +320 -0
  419. package/fields/types/password/views/package.json +4 -0
  420. package/fields/types/relationship/views/RelationshipSelect/package.json +4 -0
  421. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.d.ts +2 -0
  422. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.js +1213 -0
  423. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.esm.js +1201 -0
  424. package/fields/types/relationship/views/package.json +4 -0
  425. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.d.ts +2 -0
  426. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.js +422 -0
  427. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.esm.js +416 -0
  428. package/fields/types/select/views/package.json +4 -0
  429. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.d.ts +2 -0
  430. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.js +316 -0
  431. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.esm.js +311 -0
  432. package/fields/types/text/views/package.json +4 -0
  433. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.cjs.d.ts +2 -0
  434. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.cjs.js +285 -0
  435. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.esm.js +279 -0
  436. package/fields/types/timestamp/views/package.json +4 -0
  437. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.cjs.d.ts +2 -0
  438. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.cjs.js +54 -0
  439. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.esm.js +48 -0
  440. package/fields/types/virtual/views/package.json +4 -0
  441. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.cjs.d.ts +2 -0
  442. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.cjs.js +45 -0
  443. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.esm.js +2 -0
  444. package/graphql-ts/package.json +4 -0
  445. package/package.json +339 -0
  446. package/schema/package.json +4 -0
  447. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.d.ts +2 -0
  448. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +1607 -0
  449. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +1586 -0
  450. package/scripts/cli/package.json +4 -0
  451. package/scripts/dist/nixxie-cms-core-scripts.cjs.d.ts +2 -0
  452. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +73 -0
  453. package/scripts/dist/nixxie-cms-core-scripts.esm.js +71 -0
  454. package/scripts/package.json +4 -0
  455. package/session/dist/nixxie-cms-core-session.cjs.d.ts +2 -0
  456. package/session/dist/nixxie-cms-core-session.cjs.js +157 -0
  457. package/session/dist/nixxie-cms-core-session.esm.js +129 -0
  458. package/session/package.json +4 -0
  459. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.tsx +167 -0
  460. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.tsx +22 -0
  461. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.tsx +71 -0
  462. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.tsx +333 -0
  463. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/common.tsx +358 -0
  464. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.tsx +483 -0
  465. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/FilterAdd.tsx +221 -0
  466. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/PaginationControls.tsx +170 -0
  467. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/Tag.tsx +72 -0
  468. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.tsx +1006 -0
  469. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.tsx +24 -0
  470. package/src/___internal-do-not-use-will-break-in-patch/artifacts.ts +5 -0
  471. package/src/access.ts +25 -0
  472. package/src/admin-ui/admin-meta-graphql.ts +168 -0
  473. package/src/admin-ui/apollo.tsx +35 -0
  474. package/src/admin-ui/components/CellContainer.tsx +6 -0
  475. package/src/admin-ui/components/CommandPalette.tsx +431 -0
  476. package/src/admin-ui/components/Container.tsx +14 -0
  477. package/src/admin-ui/components/CreateButtonLink.tsx +46 -0
  478. package/src/admin-ui/components/CreateItemDialog.tsx +56 -0
  479. package/src/admin-ui/components/EmptyState.tsx +52 -0
  480. package/src/admin-ui/components/Errors.tsx +130 -0
  481. package/src/admin-ui/components/GraphQLErrorNotice.tsx +78 -0
  482. package/src/admin-ui/components/InlineCode.tsx +17 -0
  483. package/src/admin-ui/components/Logo.tsx +70 -0
  484. package/src/admin-ui/components/Navigation.tsx +385 -0
  485. package/src/admin-ui/components/NullableFieldWrapper.tsx +72 -0
  486. package/src/admin-ui/components/PageContainer.tsx +310 -0
  487. package/src/admin-ui/components/WelcomeDialog.tsx +119 -0
  488. package/src/admin-ui/components/index.ts +23 -0
  489. package/src/admin-ui/context.tsx +338 -0
  490. package/src/admin-ui/image.tsx +2 -0
  491. package/src/admin-ui/index.tsx +1 -0
  492. package/src/admin-ui/router.tsx +24 -0
  493. package/src/admin-ui/system/generateAdminUI.ts +155 -0
  494. package/src/admin-ui/system/index.ts +1 -0
  495. package/src/admin-ui/templates/app.ts +60 -0
  496. package/src/admin-ui/templates/create-item.ts +5 -0
  497. package/src/admin-ui/templates/home.ts +2 -0
  498. package/src/admin-ui/templates/index.ts +53 -0
  499. package/src/admin-ui/templates/item.tsx +5 -0
  500. package/src/admin-ui/templates/list.tsx +5 -0
  501. package/src/admin-ui/templates/next-config.ts +16 -0
  502. package/src/admin-ui/templates/no-access.ts +7 -0
  503. package/src/admin-ui/utils/Fields.tsx +241 -0
  504. package/src/admin-ui/utils/actionData.ts +36 -0
  505. package/src/admin-ui/utils/filters.ts +148 -0
  506. package/src/admin-ui/utils/index.ts +10 -0
  507. package/src/admin-ui/utils/pick.ts +12 -0
  508. package/src/admin-ui/utils/useCreateItem.ts +171 -0
  509. package/src/admin-ui/utils/usePreventNavigation.tsx +31 -0
  510. package/src/admin-ui/utils/utils.tsx +127 -0
  511. package/src/artifacts.ts +110 -0
  512. package/src/context.ts +1 -0
  513. package/src/fields/filters/enum-filter.ts +77 -0
  514. package/src/fields/filters/index.ts +1 -0
  515. package/src/fields/filters/internal.ts +89 -0
  516. package/src/fields/filters/providers/mysql.ts +450 -0
  517. package/src/fields/filters/providers/postgresql.ts +448 -0
  518. package/src/fields/filters/providers/sqlite.ts +442 -0
  519. package/src/fields/index.ts +34 -0
  520. package/src/fields/non-null-graphql.ts +115 -0
  521. package/src/fields/resolve-hooks.ts +61 -0
  522. package/src/fields/types/bigInt/index.ts +181 -0
  523. package/src/fields/types/bigInt/views/index.tsx +254 -0
  524. package/src/fields/types/bytes/index.ts +275 -0
  525. package/src/fields/types/bytes/views/index.tsx +190 -0
  526. package/src/fields/types/calendarDay/index.ts +194 -0
  527. package/src/fields/types/calendarDay/views/index.tsx +144 -0
  528. package/src/fields/types/checkbox/index.ts +76 -0
  529. package/src/fields/types/checkbox/views/index.tsx +97 -0
  530. package/src/fields/types/decimal/index.ts +182 -0
  531. package/src/fields/types/decimal/views/index.tsx +215 -0
  532. package/src/fields/types/file/index.ts +168 -0
  533. package/src/fields/types/file/views/Field.tsx +300 -0
  534. package/src/fields/types/file/views/index.tsx +74 -0
  535. package/src/fields/types/float/index.ts +133 -0
  536. package/src/fields/types/float/views/index.tsx +215 -0
  537. package/src/fields/types/image/index.ts +244 -0
  538. package/src/fields/types/image/internal-utils.ts +58 -0
  539. package/src/fields/types/image/utils.ts +1 -0
  540. package/src/fields/types/image/views/Field.tsx +295 -0
  541. package/src/fields/types/image/views/index.tsx +92 -0
  542. package/src/fields/types/integer/index.ts +156 -0
  543. package/src/fields/types/integer/views/index.tsx +255 -0
  544. package/src/fields/types/json/index.ts +77 -0
  545. package/src/fields/types/json/views/index.tsx +76 -0
  546. package/src/fields/types/multiselect/index.ts +212 -0
  547. package/src/fields/types/multiselect/views/index.tsx +151 -0
  548. package/src/fields/types/password/index.ts +241 -0
  549. package/src/fields/types/password/views/index.tsx +342 -0
  550. package/src/fields/types/relationship/index.ts +381 -0
  551. package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -0
  552. package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -0
  553. package/src/fields/types/relationship/views/ContextualActions.tsx +139 -0
  554. package/src/fields/types/relationship/views/RelationshipTable.tsx +190 -0
  555. package/src/fields/types/relationship/views/index.tsx +492 -0
  556. package/src/fields/types/relationship/views/types.ts +46 -0
  557. package/src/fields/types/relationship/views/useApolloQuery.ts +185 -0
  558. package/src/fields/types/relationship/views/useFilter.tsx +109 -0
  559. package/src/fields/types/select/index.ts +226 -0
  560. package/src/fields/types/select/views/SegmentedControl.tsx +83 -0
  561. package/src/fields/types/select/views/index.tsx +318 -0
  562. package/src/fields/types/text/index.ts +207 -0
  563. package/src/fields/types/text/views/index.tsx +273 -0
  564. package/src/fields/types/timestamp/index.ts +116 -0
  565. package/src/fields/types/timestamp/views/__tests__/index.tsx +68 -0
  566. package/src/fields/types/timestamp/views/__tests__/utils.tsx +16 -0
  567. package/src/fields/types/timestamp/views/index.tsx +262 -0
  568. package/src/fields/types/timestamp/views/utils.ts +22 -0
  569. package/src/fields/types/virtual/index.ts +108 -0
  570. package/src/fields/types/virtual/views/index.tsx +53 -0
  571. package/src/graphql-ts.ts +32 -0
  572. package/src/helpers.ts +316 -0
  573. package/src/index.ts +20 -0
  574. package/src/lib/admin-meta-graphql.ts +407 -0
  575. package/src/lib/admin-meta.ts +369 -0
  576. package/src/lib/coerceAndValidateForGraphQLInput.ts +29 -0
  577. package/src/lib/context/api.ts +99 -0
  578. package/src/lib/context/createContext.ts +161 -0
  579. package/src/lib/context/graphql.ts +300 -0
  580. package/src/lib/core/access-control.ts +434 -0
  581. package/src/lib/core/field-assertions.ts +118 -0
  582. package/src/lib/core/filter-order-access.ts +48 -0
  583. package/src/lib/core/graphql-errors.ts +76 -0
  584. package/src/lib/core/hooks.ts +111 -0
  585. package/src/lib/core/initialise-lists.ts +1097 -0
  586. package/src/lib/core/mutations/index.ts +917 -0
  587. package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -0
  588. package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -0
  589. package/src/lib/core/prisma-schema-printer.ts +256 -0
  590. package/src/lib/core/queries/index.ts +66 -0
  591. package/src/lib/core/queries/output-field.ts +178 -0
  592. package/src/lib/core/queries/resolvers.ts +258 -0
  593. package/src/lib/core/resolve-relationships.ts +303 -0
  594. package/src/lib/core/utils.ts +56 -0
  595. package/src/lib/core/where-inputs.ts +130 -0
  596. package/src/lib/express.ts +109 -0
  597. package/src/lib/graphql.ts +83 -0
  598. package/src/lib/id-field.ts +214 -0
  599. package/src/lib/middleware.ts +68 -0
  600. package/src/lib/migrations.ts +90 -0
  601. package/src/lib/otel.ts +43 -0
  602. package/src/lib/prompts.ts +29 -0
  603. package/src/lib/system.ts +207 -0
  604. package/src/lib/telemetry.ts +342 -0
  605. package/src/lib/typescript-schema-printer.ts +227 -0
  606. package/src/lib/utils.ts +21 -0
  607. package/src/pkg-dir.ts +6 -0
  608. package/src/schema.ts +233 -0
  609. package/src/scripts/build.ts +64 -0
  610. package/src/scripts/cli.ts +124 -0
  611. package/src/scripts/dev.ts +452 -0
  612. package/src/scripts/esbuild.ts +120 -0
  613. package/src/scripts/index.ts +20 -0
  614. package/src/scripts/migrate.ts +214 -0
  615. package/src/scripts/prisma.ts +49 -0
  616. package/src/scripts/start.ts +76 -0
  617. package/src/scripts/telemetry.ts +37 -0
  618. package/src/scripts/utils.ts +22 -0
  619. package/src/session.ts +168 -0
  620. package/src/testing.ts +23 -0
  621. package/src/types/admin-meta.ts +218 -0
  622. package/src/types/config/access-control.ts +186 -0
  623. package/src/types/config/fields.ts +96 -0
  624. package/src/types/config/hooks.ts +529 -0
  625. package/src/types/config/index.ts +333 -0
  626. package/src/types/config/lists.ts +565 -0
  627. package/src/types/context.ts +530 -0
  628. package/src/types/core.ts +16 -0
  629. package/src/types/index.ts +8 -0
  630. package/src/types/next-fields.ts +499 -0
  631. package/src/types/prisma.ts +16 -0
  632. package/src/types/schema/g.ts +5 -0
  633. package/src/types/schema/gWithContext.ts +20 -0
  634. package/src/types/schema/index.ts +4 -0
  635. package/src/types/schema/legacy-alias.d.ts +28 -0
  636. package/src/types/schema/legacy-alias.js +1 -0
  637. package/src/types/schema/scalars.ts +220 -0
  638. package/src/types/session.ts +26 -0
  639. package/src/types/telemetry.ts +51 -0
  640. package/src/types/type-info.ts +38 -0
  641. package/src/types/type-tests.ts +21 -0
  642. package/src/types/utils.ts +108 -0
  643. package/static/admin-error.html +53 -0
  644. package/static/dev-loading.html +146 -0
  645. package/static/favicon.ico +0 -0
  646. package/static/favicon.svg +4 -0
  647. package/system/package.json +4 -0
  648. package/testing/dist/nixxie-cms-core-testing.cjs.d.ts +2 -0
  649. package/testing/dist/nixxie-cms-core-testing.cjs.js +29 -0
  650. package/testing/dist/nixxie-cms-core-testing.esm.js +21 -0
  651. package/testing/package.json +4 -0
  652. package/tests/conditional-filters.test.ts +326 -0
  653. package/tests/telemetry.test.ts +361 -0
  654. package/tsconfig.json +20 -0
  655. package/types/dist/nixxie-cms-core-types.cjs.d.ts +2 -0
  656. package/types/dist/nixxie-cms-core-types.cjs.js +29 -0
  657. package/types/dist/nixxie-cms-core-types.esm.js +9 -0
  658. package/types/package.json +4 -0
@@ -0,0 +1,1195 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var isDeepEqual = require('fast-deep-equal');
6
+ var router = require('next/router');
7
+ var react = require('react');
8
+ var actionBar = require('@keystar/ui/action-bar');
9
+ var button = require('@keystar/ui/button');
10
+ var dialog = require('@keystar/ui/dialog');
11
+ var icon = require('@keystar/ui/icon');
12
+ var all = require('@keystar/ui/icon/all');
13
+ var chevronDownIcon = require('@keystar/ui/icon/icons/chevronDownIcon');
14
+ var searchXIcon = require('@keystar/ui/icon/icons/searchXIcon');
15
+ var textSelectIcon = require('@keystar/ui/icon/icons/textSelectIcon');
16
+ var undo2Icon = require('@keystar/ui/icon/icons/undo2Icon');
17
+ var layout = require('@keystar/ui/layout');
18
+ var menu = require('@keystar/ui/menu');
19
+ var progress = require('@keystar/ui/progress');
20
+ var searchField = require('@keystar/ui/search-field');
21
+ var slots = require('@keystar/ui/slots');
22
+ var style = require('@keystar/ui/style');
23
+ var table = require('@keystar/ui/table');
24
+ var toast = require('@keystar/ui/toast');
25
+ var tooltip = require('@keystar/ui/tooltip');
26
+ var typography = require('@keystar/ui/typography');
27
+ var link = require('@keystar/ui/link');
28
+ var notice = require('@keystar/ui/notice');
29
+ var client = require('@apollo/client');
30
+ var react$1 = require('@apollo/client/react');
31
+ var pick = require('../../../../../dist/pick-5fe45878.cjs.js');
32
+ var utils$1 = require('../../../../../dist/utils-230cddb1.cjs.js');
33
+ var GraphQLErrorNotice = require('../../../../../dist/GraphQLErrorNotice-cd74180d.cjs.js');
34
+ var PageContainer = require('../../../../../dist/PageContainer-27c27f10.cjs.js');
35
+ var adminUi_context_dist_nixxieCmsCoreAdminUiContext = require('../../../../../dist/context-e7a45152.cjs.js');
36
+ require('@react-aria/utils');
37
+ require('@keystar/ui/icon/icons/chevronRightIcon');
38
+ require('@keystar/ui/icon/icons/textCursorInputIcon');
39
+ var filters = require('../../../../../dist/filters-b3e5eb50.cjs.js');
40
+ var jsxRuntime = require('react/jsx-runtime');
41
+ var actionData = require('../../../../../dist/actionData-7858738d.cjs.js');
42
+ var useFilter = require('../../../../../dist/useFilter-1a4e6900.cjs.js');
43
+ var picker = require('@keystar/ui/picker');
44
+ var xIcon = require('@keystar/ui/icon/icons/xIcon');
45
+ var utils = require('@keystar/ui/utils');
46
+ require('graphql');
47
+ require('next/head');
48
+ require('next/link');
49
+ require('apollo-upload-client/UploadHttpLink.mjs');
50
+ require('@keystar/ui/core');
51
+ require('@nixxie-cms/core/admin-ui/router');
52
+ require('@keystar/ui/icon/icons/chevronLeftIcon');
53
+ require('@keystar/ui/tag');
54
+ require('../../../../../dist/admin-meta-graphql-c8f926e9.cjs.js');
55
+
56
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
57
+
58
+ var isDeepEqual__default = /*#__PURE__*/_interopDefault(isDeepEqual);
59
+
60
+ function FilterAdd({
61
+ listKey,
62
+ onAdd,
63
+ isDisabled
64
+ }) {
65
+ const triggerRef = react.useRef(null);
66
+ const [state, setState] = react.useState({
67
+ kind: 'selecting-field'
68
+ });
69
+ const [forceValidation, setForceValidation] = react.useState(false);
70
+ const formId = react.useId();
71
+ const {
72
+ fieldsWithFilters,
73
+ filtersByFieldThenType,
74
+ list
75
+ } = useFilterFields(listKey);
76
+ const resetState = () => {
77
+ setState({
78
+ kind: 'selecting-field'
79
+ });
80
+ setForceValidation(false);
81
+ // This is a bit of a hack to ensure the trigger button is focused after the
82
+ // dialog closes, since we're forking the render
83
+ setTimeout(() => {
84
+ var _triggerRef$current;
85
+ triggerRef === null || triggerRef === void 0 || (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 || _triggerRef$current.focus();
86
+ }, 200);
87
+ };
88
+ const onSubmit = event => {
89
+ if (event.target !== event.currentTarget) return;
90
+ event.preventDefault();
91
+ setForceValidation(true);
92
+ if (state.kind !== 'filter-value') return;
93
+
94
+ // TODO: Special "empty" types need to be documented somewhere. Filters that
95
+ // have no editable value, basically `null` or `!null`. Which offers:
96
+ // * better DX — we can avoid weird nullable types and UIs that don't make sense
97
+ // * better UX — users don't have to jump through mental hoops, like "is not exactly" + submit empty field
98
+ if (state.filterType !== 'empty' && state.filterType !== 'not_empty' && state.filterValue == null) {
99
+ return;
100
+ }
101
+ onAdd({
102
+ field: state.fieldPath,
103
+ type: state.filterType,
104
+ value: state.filterValue
105
+ });
106
+ resetState();
107
+ };
108
+ if (state.kind === 'filter-value') {
109
+ const {
110
+ Filter
111
+ } = fieldsWithFilters[state.fieldPath].controller.filter;
112
+ const fieldLabel = list.fields[state.fieldPath].label;
113
+ const filterTypes = filtersByFieldThenType[state.fieldPath];
114
+ const typeLabel = filterTypes[state.filterType];
115
+ return /*#__PURE__*/jsxRuntime.jsxs(dialog.DialogTrigger, {
116
+ type: "popover",
117
+ mobileType: "tray",
118
+ defaultOpen: true,
119
+ onOpenChange: isOpen => !isOpen && resetState(),
120
+ children: [/*#__PURE__*/jsxRuntime.jsxs(button.ActionButton, {
121
+ children: [/*#__PURE__*/jsxRuntime.jsx(typography.Text, {
122
+ children: "Filter"
123
+ }), /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
124
+ src: chevronDownIcon.chevronDownIcon
125
+ })]
126
+ }), /*#__PURE__*/jsxRuntime.jsxs(dialog.Dialog, {
127
+ children: [/*#__PURE__*/jsxRuntime.jsxs(typography.Heading, {
128
+ children: ["Filter by ", fieldLabel.toLocaleLowerCase()]
129
+ }), /*#__PURE__*/jsxRuntime.jsx(slots.Content, {
130
+ children: /*#__PURE__*/jsxRuntime.jsxs("form", {
131
+ onSubmit: onSubmit,
132
+ id: formId,
133
+ children: [/*#__PURE__*/jsxRuntime.jsx("button", {
134
+ type: "submit",
135
+ form: formId,
136
+ style: {
137
+ display: 'none'
138
+ }
139
+ }), /*#__PURE__*/jsxRuntime.jsxs(layout.Grid, {
140
+ gap: "large",
141
+ rows: "auto minmax(0, 1fr)",
142
+ height: "100%",
143
+ children: [/*#__PURE__*/jsxRuntime.jsx(picker.Picker, {
144
+ width: "100%",
145
+ "aria-label": "filter type",
146
+ isRequired: true,
147
+ items: Object.keys(filterTypes).map(filterType => ({
148
+ label: filterTypes[filterType],
149
+ value: filterType
150
+ })),
151
+ selectedKey: state.filterType,
152
+ onSelectionChange: key => {
153
+ if (key) {
154
+ setState({
155
+ kind: 'filter-value',
156
+ fieldPath: state.fieldPath,
157
+ filterValue: fieldsWithFilters[state.fieldPath].controller.filter.types[key].initialValue,
158
+ filterType: key
159
+ });
160
+ }
161
+ },
162
+ children: item => /*#__PURE__*/jsxRuntime.jsx(menu.Item, {
163
+ children: item.label
164
+ }, item.value)
165
+ }), /*#__PURE__*/jsxRuntime.jsx(Filter, {
166
+ autoFocus: true,
167
+ context: "add",
168
+ forceValidation: forceValidation,
169
+ typeLabel: typeLabel,
170
+ type: state.filterType,
171
+ value: state.filterValue,
172
+ onChange: value => {
173
+ setState(state => ({
174
+ ...state,
175
+ filterValue: value
176
+ }));
177
+ }
178
+ })]
179
+ })]
180
+ })
181
+ }), /*#__PURE__*/jsxRuntime.jsxs(button.ButtonGroup, {
182
+ children: [/*#__PURE__*/jsxRuntime.jsx(button.Button, {
183
+ onPress: resetState,
184
+ children: "Cancel"
185
+ }), /*#__PURE__*/jsxRuntime.jsx(button.Button, {
186
+ prominence: "high",
187
+ type: "submit",
188
+ form: formId,
189
+ children: "Add"
190
+ })]
191
+ })]
192
+ })]
193
+ });
194
+ }
195
+ return /*#__PURE__*/jsxRuntime.jsx(react.Fragment, {
196
+ children: /*#__PURE__*/jsxRuntime.jsxs(menu.MenuTrigger, {
197
+ children: [/*#__PURE__*/jsxRuntime.jsxs(button.ActionButton, {
198
+ ref: triggerRef,
199
+ isDisabled: isDisabled,
200
+ children: [/*#__PURE__*/jsxRuntime.jsx(typography.Text, {
201
+ children: "Filter"
202
+ }), /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
203
+ src: chevronDownIcon.chevronDownIcon
204
+ })]
205
+ }), /*#__PURE__*/jsxRuntime.jsx(menu.Menu, {
206
+ items: Object.keys(filtersByFieldThenType).map(fieldPath => ({
207
+ label: fieldsWithFilters[fieldPath].label,
208
+ value: fieldPath
209
+ })),
210
+ onAction: fieldPath => {
211
+ const filterType = Object.keys(filtersByFieldThenType[fieldPath])[0];
212
+ setState({
213
+ kind: 'filter-value',
214
+ fieldPath: fieldPath,
215
+ filterType,
216
+ filterValue: fieldsWithFilters[fieldPath].controller.filter.types[filterType].initialValue
217
+ });
218
+ },
219
+ children: item => /*#__PURE__*/jsxRuntime.jsx(menu.Item, {
220
+ children: item.label
221
+ }, item.value)
222
+ })]
223
+ })
224
+ });
225
+ }
226
+
227
+ // TODO: broken if user uses the same filter twice
228
+ function useFilterFields(listKey) {
229
+ const list = adminUi_context_dist_nixxieCmsCoreAdminUiContext.useList(listKey);
230
+ const fieldsWithFilters = react.useMemo(() => {
231
+ const fieldsWithFilters = {};
232
+ for (const fieldPath in list.fields) {
233
+ const field = list.fields[fieldPath];
234
+ if (field.isFilterable && field.controller.filter) {
235
+ fieldsWithFilters[fieldPath] = field;
236
+ }
237
+ }
238
+ return fieldsWithFilters;
239
+ }, [list.fields]);
240
+ const filtersByFieldThenType = react.useMemo(() => {
241
+ const filtersByFieldThenType = {};
242
+ for (const fieldPath in fieldsWithFilters) {
243
+ const field = fieldsWithFilters[fieldPath];
244
+ const filters = {};
245
+ for (const filterType in field.controller.filter.types) {
246
+ filters[filterType] = field.controller.filter.types[filterType].label;
247
+ }
248
+ filtersByFieldThenType[fieldPath] = filters;
249
+ }
250
+ return filtersByFieldThenType;
251
+ }, [fieldsWithFilters]);
252
+ return {
253
+ fieldsWithFilters,
254
+ filtersByFieldThenType,
255
+ list
256
+ };
257
+ }
258
+
259
+ // TODO: move to @keystar/ui and implement properly
260
+ function Tag(props) {
261
+ const {
262
+ children,
263
+ onRemove
264
+ } = props;
265
+ const rootId = react.useId();
266
+ const textId = utils.composeId(rootId, 'label');
267
+ const removeId = utils.composeId(rootId, 'remove');
268
+ return /*#__PURE__*/jsxRuntime.jsxs(button.ActionButton, {
269
+ "aria-labelledby": [textId, removeId].join(' '),
270
+ onKeyDown: e => {
271
+ if (!onRemove) {
272
+ return;
273
+ }
274
+ if (e.key === 'Backspace' || e.key === 'Delete') {
275
+ onRemove();
276
+ }
277
+ },
278
+ UNSAFE_className: style.css({
279
+ borderRadius: style.tokenSchema.size.radius.full,
280
+ height: style.tokenSchema.size.element.small,
281
+ paddingInlineStart: style.tokenSchema.size.space.small,
282
+ paddingInlineEnd: 0
283
+ }),
284
+ children: [/*#__PURE__*/jsxRuntime.jsx(slots.SlotProvider, {
285
+ slots: {
286
+ text: {
287
+ id: textId
288
+ }
289
+ },
290
+ children: children
291
+ }), onRemove && /*#__PURE__*/jsxRuntime.jsx("span", {
292
+ role: "button",
293
+ className: style.css({
294
+ alignItems: 'center',
295
+ borderRadius: '50%',
296
+ display: 'flex',
297
+ justifyContent: 'center',
298
+ height: style.tokenSchema.size.element.small,
299
+ width: style.tokenSchema.size.element.small,
300
+ ':hover': {
301
+ backgroundColor: style.tokenSchema.color.alias.backgroundHovered
302
+ },
303
+ ':active': {
304
+ backgroundColor: style.tokenSchema.color.alias.backgroundPressed
305
+ }
306
+ }),
307
+ onClick: e => {
308
+ e.preventDefault();
309
+ e.stopPropagation();
310
+ onRemove();
311
+ },
312
+ children: /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
313
+ id: removeId,
314
+ src: xIcon.xIcon,
315
+ "aria-label": "backspace to remove"
316
+ })
317
+ })]
318
+ });
319
+ }
320
+
321
+ function FilterTag({
322
+ filter,
323
+ field,
324
+ onChange,
325
+ onRemove
326
+ }) {
327
+ const Label = field.controller.filter.Label;
328
+ const tagElement = /*#__PURE__*/jsxRuntime.jsx(Tag, {
329
+ onRemove: onRemove,
330
+ children: /*#__PURE__*/jsxRuntime.jsxs(typography.Text, {
331
+ children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
332
+ children: [field.label, " "]
333
+ }), /*#__PURE__*/jsxRuntime.jsx(Label, {
334
+ label: field.controller.filter.types[filter.type].label,
335
+ type: filter.type,
336
+ value: filter.value
337
+ })]
338
+ })
339
+ });
340
+
341
+ // TODO: Special "empty" types need to be documented somewhere. Filters that
342
+ // have no editable value, basically `null` or `!null`. Which offers:
343
+ // * better DX — we can avoid weird nullable types and UIs that don't make sense
344
+ // * better UX — users don't have to jump through mental hoops, like "is not exactly" + submit empty field
345
+ if (filter.type === 'empty' || filter.type === 'not_empty') return tagElement;
346
+ return /*#__PURE__*/jsxRuntime.jsxs(dialog.DialogTrigger, {
347
+ type: "popover",
348
+ mobileType: "tray",
349
+ children: [tagElement, onDismiss => /*#__PURE__*/jsxRuntime.jsx(FilterEdit, {
350
+ onChange: onChange,
351
+ onDismiss: onDismiss,
352
+ field: field,
353
+ filter: filter
354
+ })]
355
+ });
356
+ }
357
+ function FilterEdit({
358
+ filter,
359
+ field,
360
+ onChange: onAdd,
361
+ onDismiss
362
+ }) {
363
+ var _field$controller$fil;
364
+ const formId = react.useId();
365
+ const [value, setValue] = react.useState(filter.value);
366
+ const onSubmit = event => {
367
+ if (event.target !== event.currentTarget) return;
368
+ event.preventDefault();
369
+ onAdd({
370
+ ...filter,
371
+ value
372
+ });
373
+ onDismiss();
374
+ };
375
+ const Filter = field.controller.filter.Filter;
376
+ const filterTypeLabel = (_field$controller$fil = field.controller.filter) === null || _field$controller$fil === void 0 ? void 0 : _field$controller$fil.types[filter.type].label;
377
+ return /*#__PURE__*/jsxRuntime.jsxs(dialog.Dialog, {
378
+ children: [/*#__PURE__*/jsxRuntime.jsx(typography.Heading, {
379
+ children: field.label
380
+ }), /*#__PURE__*/jsxRuntime.jsx(slots.Content, {
381
+ children: /*#__PURE__*/jsxRuntime.jsx("form", {
382
+ onSubmit: onSubmit,
383
+ id: formId,
384
+ children: /*#__PURE__*/jsxRuntime.jsx(Filter, {
385
+ autoFocus: true,
386
+ context: "edit",
387
+ typeLabel: filterTypeLabel,
388
+ onChange: setValue,
389
+ type: filter.type,
390
+ value: value
391
+ })
392
+ })
393
+ }), /*#__PURE__*/jsxRuntime.jsxs(button.ButtonGroup, {
394
+ children: [/*#__PURE__*/jsxRuntime.jsx(button.Button, {
395
+ onPress: onDismiss,
396
+ children: "Cancel"
397
+ }), /*#__PURE__*/jsxRuntime.jsx(button.Button, {
398
+ type: "submit",
399
+ prominence: "high",
400
+ form: formId,
401
+ children: "Save"
402
+ })]
403
+ })]
404
+ });
405
+ }
406
+ function getFilters(list, query) {
407
+ const param_ = query.filter;
408
+ const params = Array.isArray(param_) ? param_ : typeof param_ === 'string' ? [param_] : [];
409
+ if (!params.length) {
410
+ if (!list.initialFilter) return [];
411
+ const filters = [];
412
+ for (const [fieldKey, filter] of Object.entries(list.initialFilter)) {
413
+ const {
414
+ controller
415
+ } = list.fields[fieldKey];
416
+ for (const f of (_controller$filter$pa = (_controller$filter = controller.filter) === null || _controller$filter === void 0 ? void 0 : _controller$filter.parseGraphQL(filter)) !== null && _controller$filter$pa !== void 0 ? _controller$filter$pa : []) {
417
+ var _controller$filter$pa, _controller$filter;
418
+ filters.push({
419
+ field: fieldKey,
420
+ ...f
421
+ });
422
+ }
423
+ }
424
+ return filters;
425
+ }
426
+ const filters = [];
427
+ for (const [fieldPath, field] of Object.entries(list.fields)) {
428
+ if (!field.isFilterable) continue;
429
+ if (!field.controller.filter) continue;
430
+ for (const filterType in field.controller.filter.types) {
431
+ const prefix = `${fieldPath}_${filterType}`;
432
+ for (const queryFilter of params) {
433
+ if (!queryFilter.startsWith(prefix)) continue;
434
+ if (queryFilter === prefix) {
435
+ filters.push({
436
+ type: filterType,
437
+ field: fieldPath,
438
+ value: null
439
+ });
440
+ continue;
441
+ }
442
+ const queryValue = queryFilter.slice(prefix.length + 1);
443
+ try {
444
+ const value = JSON.parse(queryValue);
445
+ filters.push({
446
+ type: filterType,
447
+ field: fieldPath,
448
+ value
449
+ });
450
+ } catch (e) {
451
+ console.error('Error parsing filter', queryFilter);
452
+ }
453
+ }
454
+ }
455
+ }
456
+ return filters;
457
+ }
458
+ function getSort(list, query) {
459
+ const param = typeof query.sortBy === 'string' ? query.sortBy : null;
460
+ if (param === '') return null;
461
+ if (!param) {
462
+ if (!list.initialSort) return null;
463
+ return {
464
+ column: list.initialSort.field,
465
+ direction: list.initialSort.direction === 'ASC' ? 'ascending' : 'descending'
466
+ };
467
+ }
468
+ const fieldKey = param.startsWith('-') ? param.slice(1) : param;
469
+ const direction = param.startsWith('-') ? 'descending' : 'ascending';
470
+ const field = list.fields[fieldKey];
471
+ if (!field) return null;
472
+ if (!field.isOrderable) return null;
473
+ return {
474
+ column: fieldKey,
475
+ direction
476
+ };
477
+ }
478
+ function getCurrentPage(_, query) {
479
+ const currentPage = Number(query.page);
480
+ if (Number.isNaN(currentPage) || currentPage < 1) return 1;
481
+ return currentPage;
482
+ }
483
+ function getPageSize(list, query) {
484
+ const pageSize = Number(query.pageSize);
485
+ if (Number.isNaN(pageSize) || pageSize < 1) return list.pageSize;
486
+ return adminUi_context_dist_nixxieCmsCoreAdminUiContext.snapValueToClosest(pageSize);
487
+ }
488
+ function getColumns(list, query) {
489
+ const param_ = query.column;
490
+ const params = Array.isArray(param_) ? param_ : typeof param_ === 'string' ? [param_] : [];
491
+ if (!params.length) return list.initialColumns;
492
+ return params;
493
+ }
494
+ const getListPage = props => () => /*#__PURE__*/jsxRuntime.jsx(ListPage, {
495
+ ...props
496
+ });
497
+ function ListPage({
498
+ listKey
499
+ }) {
500
+ var _list$hideCreate, _data$items$map, _data$items, _data$items4;
501
+ const localStorageListKey = `nixxie.list.${listKey}.list.page.info`;
502
+ const list = adminUi_context_dist_nixxieCmsCoreAdminUiContext.useList(listKey);
503
+ const {
504
+ query,
505
+ replace: routerReplace,
506
+ isReady
507
+ } = router.useRouter();
508
+ const [loaded, setLoaded] = react.useState(false);
509
+ const [sort, setSort] = react.useState(() => getSort(list, {}));
510
+ const [columns, setColumns] = react.useState(list.initialColumns);
511
+ const [filters$1, setFilters] = react.useState(() => getFilters(list, {}));
512
+ const [currentPage, setCurrentPage] = react.useState(1);
513
+ const [pageSize, setPageSize] = react.useState(list.pageSize);
514
+ const [searchString, setSearchString] = react.useState('');
515
+ const [selectedItems, setSelectedItems] = react.useState(() => new Set([]));
516
+ const [activeAction, setActiveAction] = react.useState(null);
517
+ const [actionResult, setActionResult] = react.useState(null);
518
+ const dirty = react.useMemo(() => {
519
+ const defaultFilters = getFilters(list, {});
520
+ const defaultSort = getSort(list, {});
521
+ return !!searchString || !isDeepEqual__default["default"](filters$1, defaultFilters) || !isDeepEqual__default["default"](sort, defaultSort) || !isDeepEqual__default["default"](columns, list.initialColumns);
522
+ }, [searchString, filters$1, sort, columns, list.initialColumns]);
523
+ react.useEffect(() => {
524
+ if (!isReady) return;
525
+ if (loaded) return;
526
+ let localStorageQuery;
527
+ try {
528
+ var _localStorage$getItem;
529
+ localStorageQuery = JSON.parse((_localStorage$getItem = localStorage.getItem(localStorageListKey)) !== null && _localStorage$getItem !== void 0 ? _localStorage$getItem : '{}');
530
+ } catch {}
531
+ setSort(getSort(list, {
532
+ ...localStorageQuery,
533
+ ...query
534
+ }));
535
+ setColumns(getColumns(list, {
536
+ ...localStorageQuery,
537
+ ...query
538
+ }));
539
+ setFilters(getFilters(list, {
540
+ ...localStorageQuery,
541
+ ...query
542
+ }));
543
+ setCurrentPage(getCurrentPage(list, {
544
+ ...localStorageQuery,
545
+ ...query
546
+ }));
547
+ setPageSize(getPageSize(list, {
548
+ ...localStorageQuery,
549
+ ...query
550
+ }));
551
+ setSearchString(typeof query.search === 'string' ? query.search : '');
552
+ setLoaded(true);
553
+ }, [list, isReady]);
554
+ react.useEffect(() => {
555
+ if (!isReady) return;
556
+ if (!loaded) return; // TODO: stop this race condition properly
557
+ const updatedQuery = {
558
+ ...(columns.length ? {
559
+ column: columns
560
+ } : {}),
561
+ ...(sort ? {
562
+ sortBy: sort.direction === 'ascending' ? sort.column : `-${sort.column}`
563
+ } : {}),
564
+ ...(filters$1.length ? {
565
+ filter: function () {
566
+ const result = [];
567
+ for (const filter of filters$1) {
568
+ if (filter.type === 'not_empty' || filter.type === 'empty') {
569
+ result.push(`${filter.field}_${filter.type}`);
570
+ continue;
571
+ }
572
+ result.push(`${filter.field}_${filter.type}_${JSON.stringify(filter.value)}`);
573
+ }
574
+ return result;
575
+ }()
576
+ } : {}),
577
+ ...(currentPage > 1 ? {
578
+ page: currentPage
579
+ } : {}),
580
+ ...(pageSize !== list.pageSize ? {
581
+ pageSize
582
+ } : {}),
583
+ ...(searchString ? {
584
+ search: searchString
585
+ } : {})
586
+ };
587
+ localStorage.setItem(localStorageListKey, JSON.stringify(updatedQuery));
588
+ routerReplace({
589
+ query: updatedQuery
590
+ });
591
+ }, [columns, sort, filters$1, currentPage, pageSize, searchString, list, loaded]);
592
+ const allowCreate = !((_list$hideCreate = list.hideCreate) !== null && _list$hideCreate !== void 0 ? _list$hideCreate : true);
593
+ const isConstrained = Boolean(filters$1.length || query.search);
594
+ const readableFields = Object.values(list.fields).map(f => ({
595
+ id: f.key,
596
+ value: f.key,
597
+ label: f.label,
598
+ isDisabled: f.listView.fieldMode === 'read'
599
+ }));
600
+ const where = react.useMemo(() => filters$1.map(filter => {
601
+ return list.fields[filter.field].controller.filter.graphql({
602
+ type: filter.type,
603
+ value: filter.value
604
+ });
605
+ }), [list, filters$1]);
606
+ const actionsAvailable = react.useMemo(() => list.actions.filter(x => filters.isActionAvailable(x, x.listView)), [list.actions]);
607
+ const actionConditionalFilterFieldKeys = react.useMemo(() => {
608
+ const fieldKeys = new Set();
609
+ for (const action of actionsAvailable) {
610
+ for (const fieldKey of filters.getConditionalFilterFieldKeys(action.listView.actionMode)) {
611
+ fieldKeys.add(fieldKey);
612
+ }
613
+ }
614
+ return fieldKeys;
615
+ }, [actionsAvailable]);
616
+ const search = useFilter.useSearchFilter(searchString, list, list.initialSearchFields);
617
+ const {
618
+ data,
619
+ error,
620
+ refetch,
621
+ loading
622
+ } = react$1.useQuery(react.useMemo(() => {
623
+ const fieldKeys = new Set(columns); // only the shown columns
624
+
625
+ // and any fields needed by the action filters
626
+ for (const fieldKey of actionConditionalFilterFieldKeys) {
627
+ fieldKeys.add(fieldKey);
628
+ }
629
+ for (const action of actionsAvailable) {
630
+ for (const arg of action.graphql.arguments) {
631
+ if (!arg.source) continue;
632
+ fieldKeys.add(arg.source.itemField);
633
+ }
634
+ }
635
+ const fieldsToQuery = [...fieldKeys].filter(fieldKey => fieldKey !== 'id') // id is always included
636
+ .map(fieldKey => {
637
+ var _list$fields$fieldKey;
638
+ return (_list$fields$fieldKey = list.fields[fieldKey]) === null || _list$fields$fieldKey === void 0 ? void 0 : _list$fields$fieldKey.controller.graphqlSelection;
639
+ }).filter(Boolean).join('\n');
640
+
641
+ // TODO: less interpolation
642
+ return client.gql`
643
+ query (
644
+ $where: ${list.graphql.names.whereInputName},
645
+ $take: Int!,
646
+ $skip: Int!,
647
+ $orderBy: [${list.graphql.names.listOrderName}!]
648
+ ) {
649
+ items: ${list.graphql.names.listQueryName}(
650
+ where: $where,
651
+ take: $take,
652
+ skip: $skip,
653
+ orderBy: $orderBy
654
+ ) {
655
+ id
656
+ ${fieldsToQuery}
657
+ }
658
+ count: ${list.graphql.names.listQueryCountName}(where: $where)
659
+ }
660
+ `;
661
+ }, [list, list.fields, columns, actionsAvailable, actionConditionalFilterFieldKeys]), {
662
+ fetchPolicy: 'cache-and-network',
663
+ errorPolicy: 'all',
664
+ variables: {
665
+ where: {
666
+ ...(where.length ? {
667
+ AND: where
668
+ } : {}),
669
+ ...(search.length ? {
670
+ OR: search
671
+ } : {})
672
+ },
673
+ take: pageSize,
674
+ skip: (currentPage - 1) * pageSize,
675
+ orderBy: sort ? [{
676
+ [sort.column]: sort.direction === 'ascending' ? 'asc' : 'desc'
677
+ }] : undefined
678
+ }
679
+ });
680
+ react.useEffect(() => {
681
+ if (typeof (data === null || data === void 0 ? void 0 : data.count) !== 'number') return;
682
+ const lastPage = Math.max(Math.ceil(data.count / pageSize), 1);
683
+ if (currentPage > lastPage) {
684
+ setCurrentPage(lastPage);
685
+ }
686
+ }, [data]);
687
+ const selectedItemIds = (selectedItems === 'all' ? (_data$items$map = data === null || data === void 0 || (_data$items = data.items) === null || _data$items === void 0 ? void 0 : _data$items.map(item => item.id)) !== null && _data$items$map !== void 0 ? _data$items$map : [] : Array.from(selectedItems)).map(String);
688
+ const isEmpty = Boolean((data === null || data === void 0 ? void 0 : data.count) === 0 && !isConstrained);
689
+ const headers = columns.map(column => {
690
+ var _data$items2;
691
+ const field = list.fields[column];
692
+ if (!field) return;
693
+ return {
694
+ id: field.key,
695
+ label: field.label,
696
+ allowsSorting: !isConstrained && !(data !== null && data !== void 0 && (_data$items2 = data.items) !== null && _data$items2 !== void 0 && _data$items2.length) ? false : field.isOrderable
697
+ };
698
+ }).filter(x => Boolean(x));
699
+ function onAddFilter(newFilter) {
700
+ setFilters(prevFilters => [...prevFilters, newFilter]);
701
+ }
702
+ function resetToDefaults() {
703
+ const defaultFilters = getFilters(list, {});
704
+ const defaultSort = getSort(list, {});
705
+ setSearchString('');
706
+ setColumns(list.initialColumns);
707
+ setFilters(defaultFilters);
708
+ setSort(defaultSort);
709
+ }
710
+ const actionsList = [...actionsAvailable, ...(list.hideDelete ? [] : [{
711
+ key: 'delete',
712
+ label: 'Delete',
713
+ icon: 'trash2Icon',
714
+ graphql: {
715
+ arguments: [],
716
+ names: {
717
+ one: list.graphql.names.deleteMutationName,
718
+ many: list.graphql.names.deleteManyMutationName
719
+ }
720
+ },
721
+ messages: {
722
+ promptTitle: 'Delete {singular}?',
723
+ promptTitleMany: 'Delete {count} {singular|plural}?',
724
+ prompt: 'Are you sure you want to delete {singular}? This action cannot be undone.',
725
+ promptMany: 'Are you sure you want to delete {count} {singular|plural}? This action cannot be undone.',
726
+ promptConfirmLabel: 'Yes, delete',
727
+ promptConfirmLabelMany: 'Yes, delete',
728
+ success: 'Deleted {singular}.',
729
+ successMany: 'Deleted {countSuccess} {singular|plural}.',
730
+ fail: 'Unable to delete {singular}.',
731
+ failMany: 'Unable to delete {countFail} {singular|plural}.'
732
+ },
733
+ itemView: null,
734
+ // unusud
735
+ listView: {
736
+ actionMode: list.hideDelete ? 'hidden' : 'enabled'
737
+ }
738
+ }])];
739
+ const selectionMode = actionsList.length > 0 ? 'multiple' : 'none';
740
+ const selectedRows = react.useMemo(() => {
741
+ var _data$items$filter, _data$items3;
742
+ return (_data$items$filter = data === null || data === void 0 || (_data$items3 = data.items) === null || _data$items3 === void 0 ? void 0 : _data$items3.filter(item => selectedItemIds.includes(String(item.id)))) !== null && _data$items$filter !== void 0 ? _data$items$filter : [];
743
+ }, [data === null || data === void 0 ? void 0 : data.items, selectedItemIds]);
744
+ const actionConditionalFilterFields = react.useMemo(() => pick.pick(list.fields, actionConditionalFilterFieldKeys), [actionConditionalFilterFieldKeys, list.fields]);
745
+ const serializedSelectedRows = react.useMemo(() => selectedRows.map(row => {
746
+ const value = utils$1.deserializeItemToValue(actionConditionalFilterFields, row);
747
+ return filters.serializeItemForConditionalFilters(actionConditionalFilterFields, value);
748
+ }), [actionConditionalFilterFields, selectedRows]);
749
+ const {
750
+ actions,
751
+ disabledKeys: disabledActionKeys
752
+ } = react.useMemo(() => {
753
+ const disabledKeys = [];
754
+ const actions = [];
755
+ for (const action of actionsList) {
756
+ let actionMode;
757
+ for (const serializedValue of serializedSelectedRows) {
758
+ const mode = filters.resolveActionMode(action.listView.actionMode, serializedValue);
759
+ if (mode === 'hidden') {
760
+ actionMode = 'hidden';
761
+ break;
762
+ }
763
+ if (mode === 'disabled') actionMode = 'disabled';
764
+ }
765
+ if (actionMode === 'hidden') continue;
766
+ if (actionMode === 'disabled') disabledKeys.push(action.key);
767
+ actions.push(action);
768
+ }
769
+ return {
770
+ actions,
771
+ disabledKeys
772
+ };
773
+ }, [actionsList, serializedSelectedRows]);
774
+ return /*#__PURE__*/jsxRuntime.jsx(PageContainer.PageContainer, {
775
+ header: /*#__PURE__*/jsxRuntime.jsx(ListPageHeader, {
776
+ listKey: listKey,
777
+ showCreate: allowCreate
778
+ }),
779
+ title: list.label,
780
+ children: /*#__PURE__*/jsxRuntime.jsxs(layout.VStack, {
781
+ flex: true,
782
+ gap: "large",
783
+ paddingX: "xlarge",
784
+ paddingY: "xlarge",
785
+ minHeight: 0,
786
+ minWidth: 0,
787
+ children: [/*#__PURE__*/jsxRuntime.jsxs(layout.HStack, {
788
+ gap: "regular",
789
+ alignItems: "center",
790
+ children: [/*#__PURE__*/jsxRuntime.jsx(searchField.SearchField, {
791
+ "aria-label": "Search",
792
+ isDisabled: isEmpty,
793
+ onClear: () => setSearchString(''),
794
+ onChange: v => setSearchString(v),
795
+ placeholder: "Search\u2026",
796
+ value: searchString,
797
+ width: "alias.singleLineWidth",
798
+ flexGrow: {
799
+ mobile: 1,
800
+ tablet: 0
801
+ }
802
+ }), /*#__PURE__*/jsxRuntime.jsx(FilterAdd, {
803
+ listKey: listKey,
804
+ onAdd: onAddFilter,
805
+ isDisabled: isEmpty
806
+ }), /*#__PURE__*/jsxRuntime.jsxs(menu.MenuTrigger, {
807
+ children: [/*#__PURE__*/jsxRuntime.jsxs(button.ActionButton, {
808
+ isDisabled: isEmpty,
809
+ children: [/*#__PURE__*/jsxRuntime.jsx(typography.Text, {
810
+ children: "Columns"
811
+ }), /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
812
+ src: chevronDownIcon.chevronDownIcon
813
+ })]
814
+ }), /*#__PURE__*/jsxRuntime.jsx(menu.Menu, {
815
+ items: readableFields,
816
+ disallowEmptySelection: true,
817
+ onSelectionChange: selection => {
818
+ if (selection === 'all') {
819
+ setColumns(readableFields.map(field => field.id));
820
+ } else {
821
+ setColumns(readableFields.filter(f => selection.has(f.id)).map(f => f.id));
822
+ }
823
+ },
824
+ selectionMode: "multiple",
825
+ selectedKeys: columns,
826
+ children: item => /*#__PURE__*/jsxRuntime.jsx(actionBar.Item, {
827
+ children: item.label
828
+ }, item.value)
829
+ })]
830
+ }), dirty ? /*#__PURE__*/jsxRuntime.jsxs(tooltip.TooltipTrigger, {
831
+ children: [/*#__PURE__*/jsxRuntime.jsx(button.ActionButton, {
832
+ "aria-label": "reset",
833
+ onPress: resetToDefaults,
834
+ prominence: "low",
835
+ children: /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
836
+ src: undo2Icon.undo2Icon
837
+ })
838
+ }), /*#__PURE__*/jsxRuntime.jsx(tooltip.Tooltip, {
839
+ children: "Reset to defaults"
840
+ })]
841
+ }) : null, isReady && loading && /*#__PURE__*/jsxRuntime.jsx(progress.ProgressCircle, {
842
+ "aria-label": "Loading\u2026",
843
+ size: "small",
844
+ isIndeterminate: true
845
+ })]
846
+ }), filters$1.length ? /*#__PURE__*/jsxRuntime.jsx(layout.Flex, {
847
+ gap: "small",
848
+ wrap: true,
849
+ children: filters$1.map((filter, i) => {
850
+ const field = list.fields[filter.field];
851
+ function onRemove() {
852
+ setFilters(prevFilters => prevFilters.filter(f => f !== filter));
853
+ }
854
+ function onChange(updatedFilter) {
855
+ setFilters(prevFilters => [...prevFilters.filter(f => f !== filter), updatedFilter]);
856
+ }
857
+ return /*#__PURE__*/jsxRuntime.jsx(FilterTag, {
858
+ field: field,
859
+ filter: filter,
860
+ onChange: onChange,
861
+ onRemove: onRemove
862
+ }, i);
863
+ })
864
+ }) : null, /*#__PURE__*/jsxRuntime.jsx(GraphQLErrorNotice.GraphQLErrorNotice, {
865
+ errors: [error]
866
+ }), /*#__PURE__*/jsxRuntime.jsxs(actionBar.ActionBarContainer, {
867
+ flex: true,
868
+ minHeight: "scale.3000",
869
+ children: [/*#__PURE__*/jsxRuntime.jsxs(table.TableView, {
870
+ "aria-labelledby": LIST_PAGE_TITLE_ID,
871
+ selectionMode: selectionMode,
872
+ onSortChange: setSort,
873
+ sortDescriptor: sort !== null && sort !== void 0 ? sort : undefined,
874
+ density: "spacious",
875
+ overflowMode: "truncate",
876
+ onSelectionChange: setSelectedItems,
877
+ selectedKeys: selectedItems,
878
+ renderEmptyState: () => loading ? /*#__PURE__*/jsxRuntime.jsx(progress.ProgressCircle, {
879
+ "aria-label": "Preparing items",
880
+ isIndeterminate: true
881
+ }) : isConstrained ? /*#__PURE__*/jsxRuntime.jsx(utils$1.EmptyState, {
882
+ icon: searchXIcon.searchXIcon,
883
+ title: "No results",
884
+ message: "No items found. Try adjusting your search or filters."
885
+ }) : /*#__PURE__*/jsxRuntime.jsx(utils$1.EmptyState, {
886
+ icon: textSelectIcon.textSelectIcon,
887
+ title: "Empty list",
888
+ message: "Add the first item to see it here."
889
+ }),
890
+ flex: true,
891
+ UNSAFE_style: {
892
+ opacity: loading && !!data ? 0.5 : undefined
893
+ },
894
+ children: [/*#__PURE__*/jsxRuntime.jsx(table.TableHeader, {
895
+ columns: headers,
896
+ children: ({
897
+ label,
898
+ id,
899
+ ...options
900
+ }) => /*#__PURE__*/jsxRuntime.jsx(table.Column, {
901
+ isRowHeader: true,
902
+ ...options,
903
+ children: label
904
+ }, id)
905
+ }), /*#__PURE__*/jsxRuntime.jsx(table.TableBody, {
906
+ items: (_data$items4 = data === null || data === void 0 ? void 0 : data.items) !== null && _data$items4 !== void 0 ? _data$items4 : [],
907
+ children: row => {
908
+ return /*#__PURE__*/jsxRuntime.jsx(table.Row, {
909
+ href: `/${list.path}/${row === null || row === void 0 ? void 0 : row.id}`,
910
+ children: key => {
911
+ const field = list.fields[key];
912
+ const value = row[key];
913
+ const CellContent = field.views.Cell;
914
+ return /*#__PURE__*/jsxRuntime.jsx(table.Cell, {
915
+ children: CellContent ? /*#__PURE__*/jsxRuntime.jsx(CellContent, {
916
+ value: value,
917
+ field: field.controller,
918
+ item: row
919
+ }) : /*#__PURE__*/jsxRuntime.jsx(typography.Text, {
920
+ children: value === null || value === void 0 ? void 0 : value.toString()
921
+ })
922
+ });
923
+ }
924
+ });
925
+ }
926
+ })]
927
+ }), /*#__PURE__*/jsxRuntime.jsx(actionBar.ActionBar, {
928
+ selectedItemCount: selectedItemIds.length,
929
+ onClearSelection: () => setSelectedItems(new Set()),
930
+ UNSAFE_className: style.css({
931
+ // TODO: update in @keystar/ui package
932
+ // make `tokenSchema.size.shadow.regular` token "0 1px 4px"
933
+ 'div:has([data-focus-scope-start])': {
934
+ backgroundColor: style.tokenSchema.color.background.canvas,
935
+ border: `${style.tokenSchema.size.border.regular} solid ${style.tokenSchema.color.border.emphasis}`,
936
+ borderRadius: style.tokenSchema.size.radius.regular,
937
+ boxShadow: `0 1px 4px ${style.tokenSchema.color.shadow.regular}`
938
+ }
939
+ }),
940
+ disabledKeys: disabledActionKeys,
941
+ onAction: setActiveAction,
942
+ children: [...function* () {
943
+ for (const action of actions) {
944
+ const iconComponent = action.icon ? all.allIcons[action.icon] : null;
945
+ yield /*#__PURE__*/jsxRuntime.jsxs(actionBar.Item, {
946
+ textValue: action.label,
947
+ children: [iconComponent ? /*#__PURE__*/jsxRuntime.jsx(icon.Icon, {
948
+ src: iconComponent
949
+ }) : null, /*#__PURE__*/jsxRuntime.jsx(typography.Text, {
950
+ children: action.label
951
+ })]
952
+ }, action.key);
953
+ }
954
+ }()]
955
+ })]
956
+ }), !!(data !== null && data !== void 0 && data.count) && /*#__PURE__*/jsxRuntime.jsx(adminUi_context_dist_nixxieCmsCoreAdminUiContext.PaginationControls, {
957
+ singular: list.singular,
958
+ plural: list.plural,
959
+ currentPage: currentPage,
960
+ pageSize: pageSize,
961
+ total: data.count,
962
+ onChangePage: page => setCurrentPage(page),
963
+ onChangePageSize: pageSize => setPageSize(pageSize),
964
+ defaultPageSize: list.pageSize
965
+ }), /*#__PURE__*/jsxRuntime.jsx(dialog.DialogContainer, {
966
+ onDismiss: () => {
967
+ setActiveAction(null);
968
+ },
969
+ children: actions.filter(action => action.key === activeAction).map(action => {
970
+ var _data$items5;
971
+ return /*#__PURE__*/jsxRuntime.jsx(ActionItemsDialog, {
972
+ itemIds: selectedItemIds,
973
+ items: (_data$items5 = data === null || data === void 0 ? void 0 : data.items) !== null && _data$items5 !== void 0 ? _data$items5 : [],
974
+ action: action,
975
+ list: list,
976
+ onSuccess: remaining => {
977
+ refetch();
978
+ setSelectedItems(remaining);
979
+ },
980
+ onErrors: setActionResult
981
+ });
982
+ }).pop()
983
+ }), /*#__PURE__*/jsxRuntime.jsx(dialog.DialogContainer, {
984
+ onDismiss: () => setActionResult(null),
985
+ isDismissable: true,
986
+ children: actionResult ? /*#__PURE__*/jsxRuntime.jsxs(dialog.Dialog, {
987
+ children: [/*#__PURE__*/jsxRuntime.jsxs(typography.Heading, {
988
+ children: ["Error details for ", actionResult.action.label, " action"]
989
+ }), /*#__PURE__*/jsxRuntime.jsx(slots.Content, {
990
+ children: /*#__PURE__*/jsxRuntime.jsx(layout.VStack, {
991
+ gap: "large",
992
+ children: [...function* () {
993
+ const {
994
+ action,
995
+ errors: actionErrors
996
+ } = actionResult;
997
+ for (const [itemId, itemActionErrors] of Object.entries(actionErrors)) {
998
+ var _data$items$find, _data$items6, _ref;
999
+ const item = (_data$items$find = data === null || data === void 0 || (_data$items6 = data.items) === null || _data$items6 === void 0 ? void 0 : _data$items6.find(i => i.id === itemId)) !== null && _data$items$find !== void 0 ? _data$items$find : null;
1000
+ const itemLabel = (_ref = item === null || item === void 0 ? void 0 : item[list.labelField]) !== null && _ref !== void 0 ? _ref : itemId;
1001
+ const href = `/${list.path}/${itemId}`;
1002
+ for (const error of itemActionErrors) {
1003
+ yield /*#__PURE__*/jsxRuntime.jsx(layout.VStack, {
1004
+ gap: "regular",
1005
+ children: /*#__PURE__*/jsxRuntime.jsxs(notice.Notice, {
1006
+ tone: "critical",
1007
+ children: [/*#__PURE__*/jsxRuntime.jsxs(slots.Content, {
1008
+ children: [/*#__PURE__*/jsxRuntime.jsxs(typography.Text, {
1009
+ children: ["You might try running the action again from", ' ', /*#__PURE__*/jsxRuntime.jsxs(link.TextLink, {
1010
+ href: href,
1011
+ children: ["the ", list.singular.toLowerCase(), "."]
1012
+ })]
1013
+ }), /*#__PURE__*/jsxRuntime.jsx(layout.Box, {
1014
+ elementType: "pre",
1015
+ backgroundColor: "critical",
1016
+ borderRadius: "regular",
1017
+ maxHeight: "100%",
1018
+ overflow: "auto",
1019
+ children: /*#__PURE__*/jsxRuntime.jsx(typography.Text, {
1020
+ color: "critical",
1021
+ UNSAFE_className: style.css({
1022
+ fontFamily: style.tokenSchema.typography.fontFamily.code
1023
+ }),
1024
+ children: error.message
1025
+ })
1026
+ })]
1027
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
1028
+ children: /*#__PURE__*/jsxRuntime.jsx(typography.Heading, {
1029
+ children: replace(action.messages.fail, list, {
1030
+ ...action,
1031
+ itemLabel
1032
+ }, false)
1033
+ })
1034
+ })]
1035
+ })
1036
+ }, itemId);
1037
+ }
1038
+ }
1039
+ }()]
1040
+ })
1041
+ })]
1042
+ }) : null
1043
+ })]
1044
+ })
1045
+ });
1046
+ }
1047
+ const LIST_PAGE_TITLE_ID = 'nixxie-list-page-title';
1048
+ function ListPageHeader({
1049
+ listKey,
1050
+ showCreate
1051
+ }) {
1052
+ const list = adminUi_context_dist_nixxieCmsCoreAdminUiContext.useList(listKey);
1053
+ return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
1054
+ children: [/*#__PURE__*/jsxRuntime.jsx(typography.Heading, {
1055
+ id: LIST_PAGE_TITLE_ID,
1056
+ elementType: "h1",
1057
+ size: "small",
1058
+ children: list.label
1059
+ }), showCreate && /*#__PURE__*/jsxRuntime.jsx(pick.CreateButtonLink, {
1060
+ list: list,
1061
+ children: `New ${list.singular.toLocaleLowerCase()}`
1062
+ })]
1063
+ });
1064
+ }
1065
+ function replace(s, list, args, many) {
1066
+ var _args$itemLabel;
1067
+ s = s.replaceAll('{Label}', args.label);
1068
+ s = s.replaceAll('{label}', args.label.toLowerCase());
1069
+ if (s.includes('{singular|plural}')) s = s.replaceAll('{singular|plural}', many ? '{plural}' : '{singular}');
1070
+ if (s.includes('{Singular}')) s = s.replaceAll('{Singular}', list.singular);
1071
+ if (s.includes('{Plural}')) s = s.replaceAll('{Plural}', list.plural);
1072
+ if (s.includes('{singular}')) s = s.replaceAll('{singular}', list.singular.toLowerCase());
1073
+ if (s.includes('{plural}')) s = s.replaceAll('{plural}', list.plural.toLowerCase());
1074
+ if ('count' in args) s = s.replaceAll('{count}', String(args.count));
1075
+ if ('countFail' in args) s = s.replaceAll('{countFail}', String(args.countFail));
1076
+ if ('countSuccess' in args) s = s.replaceAll('{countSuccess}', String(args.countSuccess));
1077
+ if ('itemLabel' in args) s = s.replaceAll('{itemLabel}', (_args$itemLabel = args.itemLabel) !== null && _args$itemLabel !== void 0 ? _args$itemLabel : '');
1078
+ return s;
1079
+ }
1080
+ function ActionItemsDialog({
1081
+ list,
1082
+ itemIds,
1083
+ items,
1084
+ onSuccess,
1085
+ onErrors,
1086
+ action
1087
+ }) {
1088
+ const actionMutation = action.key === 'delete' ? client.gql`mutation($where: [${list.graphql.names.whereUniqueInputName}!]!) {
1089
+ results: ${action.graphql.names.many}(where: $where) {
1090
+ id
1091
+ }
1092
+ }` : client.gql`mutation($data: [${action.graphql.names.one[0].toUpperCase()}${action.graphql.names.one.slice(1)}Args!]!) {
1093
+ results: ${action.graphql.names.many}(data: $data) {
1094
+ id
1095
+ }
1096
+ }`;
1097
+ const [actionOnItems] = react$1.useMutation(actionMutation, {
1098
+ variables: action.key === 'delete' ? {
1099
+ where: itemIds.map(id => ({
1100
+ id
1101
+ }))
1102
+ } : {
1103
+ data: itemIds.flatMap(id => {
1104
+ const row = items.find(item => String(item.id) === id);
1105
+ if (!row) {
1106
+ return [];
1107
+ }
1108
+ const deserialized = utils$1.deserializeItemToValue(list.fields, row);
1109
+ const args = actionData.getActionArguments(list, action, deserialized);
1110
+ return {
1111
+ where: {
1112
+ id
1113
+ },
1114
+ ...args
1115
+ };
1116
+ })
1117
+ },
1118
+ errorPolicy: 'all'
1119
+ });
1120
+ const {
1121
+ messages: m
1122
+ } = action;
1123
+ async function onTryAction() {
1124
+ try {
1125
+ const {
1126
+ error
1127
+ } = await actionOnItems();
1128
+ const failed = new Set();
1129
+ const actionErrors = {};
1130
+ let countFail = 0;
1131
+ if (client.CombinedGraphQLErrors.is(error)) {
1132
+ countFail = error.errors.length;
1133
+ for (const err of (_error$errors = error.errors) !== null && _error$errors !== void 0 ? _error$errors : []) {
1134
+ var _error$errors, _err$path, _actionErrors$itemId;
1135
+ const i = (_err$path = err.path) === null || _err$path === void 0 ? void 0 : _err$path[1];
1136
+ if (typeof i !== 'number') continue;
1137
+ const itemId = itemIds[i];
1138
+ failed.add(itemId);
1139
+ (_actionErrors$itemId = actionErrors[itemId]) !== null && _actionErrors$itemId !== void 0 ? _actionErrors$itemId : actionErrors[itemId] = [];
1140
+ actionErrors[itemId].push(err);
1141
+ }
1142
+ }
1143
+ const countSuccess = itemIds.length - countFail;
1144
+ if (countSuccess) {
1145
+ toast.toastQueue.neutral(replace(m.successMany, list, {
1146
+ ...action,
1147
+ count: itemIds.length,
1148
+ countFail,
1149
+ countSuccess
1150
+ }, countSuccess > 1), {
1151
+ timeout: 5000
1152
+ });
1153
+ }
1154
+ if (countFail) {
1155
+ toast.toastQueue.critical(replace(m.failMany, list, {
1156
+ ...action,
1157
+ count: itemIds.length,
1158
+ countFail,
1159
+ countSuccess
1160
+ }, countFail > 1), {
1161
+ actionLabel: 'Details',
1162
+ onAction: () => onErrors({
1163
+ action,
1164
+ errors: actionErrors
1165
+ }),
1166
+ shouldCloseOnAction: true
1167
+ });
1168
+ }
1169
+ return onSuccess(failed);
1170
+ } catch (error) {
1171
+ console.error(error);
1172
+ }
1173
+ }
1174
+ return /*#__PURE__*/jsxRuntime.jsx(dialog.AlertDialog, {
1175
+ tone: action.key === 'delete' ? 'critical' : 'neutral',
1176
+ title: replace(m.promptTitleMany, list, {
1177
+ ...action,
1178
+ count: itemIds.length
1179
+ }, itemIds.length > 1),
1180
+ cancelLabel: "Cancel",
1181
+ primaryActionLabel: replace(m.promptConfirmLabelMany, list, {
1182
+ ...action,
1183
+ count: itemIds.length
1184
+ }, itemIds.length > 1),
1185
+ onPrimaryAction: onTryAction,
1186
+ children: /*#__PURE__*/jsxRuntime.jsx(typography.Text, {
1187
+ children: replace(m.promptMany, list, {
1188
+ ...action,
1189
+ count: itemIds.length
1190
+ }, itemIds.length > 1)
1191
+ })
1192
+ });
1193
+ }
1194
+
1195
+ exports.getListPage = getListPage;