codex 1.6.1__py3-none-any.whl → 1.6.3__py3-none-any.whl

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.

Potentially problematic release.


This version of codex might be problematic. Click here for more details.

Files changed (492) hide show
  1. codex/exceptions.py +42 -16
  2. codex/librarian/search/update.py +1 -1
  3. codex/serializers/admin/__init__.py +1 -0
  4. codex/serializers/admin/flags.py +15 -0
  5. codex/serializers/admin/groups.py +38 -0
  6. codex/serializers/admin/libraries.py +90 -0
  7. codex/serializers/admin/stats.py +114 -0
  8. codex/serializers/admin/tasks.py +16 -0
  9. codex/serializers/admin/users.py +40 -0
  10. codex/serializers/fields.py +7 -0
  11. codex/serializers/reader.py +8 -3
  12. codex/static_root/assets/VCheckbox-CXQlndFT.c17c006a62e6.js +1 -0
  13. codex/static_root/assets/VCheckbox-CXQlndFT.c17c006a62e6.js.br +0 -0
  14. codex/static_root/assets/VCheckbox-CXQlndFT.c17c006a62e6.js.gz +0 -0
  15. codex/static_root/assets/VCheckbox-CXQlndFT.js +1 -0
  16. codex/static_root/assets/VCheckbox-CXQlndFT.js.br +0 -0
  17. codex/static_root/assets/VCheckbox-CXQlndFT.js.gz +0 -0
  18. codex/static_root/assets/VCheckboxBtn-DB72Bclg.ab414c6ae2b8.js +1 -0
  19. codex/static_root/assets/VCheckboxBtn-DB72Bclg.ab414c6ae2b8.js.br +0 -0
  20. codex/static_root/assets/VCheckboxBtn-DB72Bclg.ab414c6ae2b8.js.gz +0 -0
  21. codex/static_root/assets/VCheckboxBtn-DB72Bclg.js +1 -0
  22. codex/static_root/assets/VCheckboxBtn-DB72Bclg.js.br +0 -0
  23. codex/static_root/assets/VCheckboxBtn-DB72Bclg.js.gz +0 -0
  24. codex/static_root/assets/{VCombobox-pHa6iBaZ.ff88fede19d6.js → VCombobox-BDcFPzYf.0b80447cd638.js} +1 -1
  25. codex/static_root/assets/VCombobox-BDcFPzYf.0b80447cd638.js.br +0 -0
  26. codex/static_root/assets/VCombobox-BDcFPzYf.0b80447cd638.js.gz +0 -0
  27. codex/static_root/assets/{VCombobox-pHa6iBaZ.js → VCombobox-BDcFPzYf.js} +1 -1
  28. codex/static_root/assets/VCombobox-BDcFPzYf.js.br +0 -0
  29. codex/static_root/assets/VCombobox-BDcFPzYf.js.gz +0 -0
  30. codex/static_root/assets/VDialog-BB4zqrGw.2decc14ea597.js +1 -0
  31. codex/static_root/assets/VDialog-BB4zqrGw.2decc14ea597.js.br +0 -0
  32. codex/static_root/assets/VDialog-BB4zqrGw.2decc14ea597.js.gz +0 -0
  33. codex/static_root/assets/VDialog-BB4zqrGw.js +1 -0
  34. codex/static_root/assets/VDialog-BB4zqrGw.js.br +0 -0
  35. codex/static_root/assets/VDialog-BB4zqrGw.js.gz +0 -0
  36. codex/static_root/assets/VExpansionPanels-SZc735F5.19004a0eba16.js +1 -0
  37. codex/static_root/assets/VExpansionPanels-SZc735F5.19004a0eba16.js.br +0 -0
  38. codex/static_root/assets/VExpansionPanels-SZc735F5.19004a0eba16.js.gz +0 -0
  39. codex/static_root/assets/VExpansionPanels-SZc735F5.js +1 -0
  40. codex/static_root/assets/VExpansionPanels-SZc735F5.js.br +0 -0
  41. codex/static_root/assets/VExpansionPanels-SZc735F5.js.gz +0 -0
  42. codex/static_root/assets/VRadioGroup-tFEuhFRq.774e14a4945a.js +1 -0
  43. codex/static_root/assets/VRadioGroup-tFEuhFRq.774e14a4945a.js.br +0 -0
  44. codex/static_root/assets/VRadioGroup-tFEuhFRq.774e14a4945a.js.gz +0 -0
  45. codex/static_root/assets/VRadioGroup-tFEuhFRq.js +1 -0
  46. codex/static_root/assets/VRadioGroup-tFEuhFRq.js.br +0 -0
  47. codex/static_root/assets/VRadioGroup-tFEuhFRq.js.gz +0 -0
  48. codex/static_root/assets/VSelect-Dd5Zy8Uy.f225abf824ff.js +1 -0
  49. codex/static_root/assets/VSelect-Dd5Zy8Uy.f225abf824ff.js.br +0 -0
  50. codex/static_root/assets/VSelect-Dd5Zy8Uy.f225abf824ff.js.gz +0 -0
  51. codex/static_root/assets/VSelect-Dd5Zy8Uy.js +1 -0
  52. codex/static_root/assets/VSelect-Dd5Zy8Uy.js.br +0 -0
  53. codex/static_root/assets/VSelect-Dd5Zy8Uy.js.gz +0 -0
  54. codex/static_root/assets/{VSelectionControl-D4e-QshF.js → VSelectionControl-DImIQPJV.1f14d2113063.js} +1 -1
  55. codex/static_root/assets/VSelectionControl-DImIQPJV.1f14d2113063.js.br +0 -0
  56. codex/static_root/assets/VSelectionControl-DImIQPJV.1f14d2113063.js.gz +0 -0
  57. codex/static_root/assets/{VSelectionControl-D4e-QshF.38721ba52d00.js → VSelectionControl-DImIQPJV.js} +1 -1
  58. codex/static_root/assets/VSelectionControl-DImIQPJV.js.br +0 -0
  59. codex/static_root/assets/VSelectionControl-DImIQPJV.js.gz +0 -0
  60. codex/static_root/assets/{VSlideGroup-BQv5m0ZY.2adc55157521.js → VSlideGroup-CDaAHRAK.783800d70a8a.js} +1 -1
  61. codex/static_root/assets/VSlideGroup-CDaAHRAK.783800d70a8a.js.br +0 -0
  62. codex/static_root/assets/VSlideGroup-CDaAHRAK.783800d70a8a.js.gz +0 -0
  63. codex/static_root/assets/{VSlideGroup-BQv5m0ZY.js → VSlideGroup-CDaAHRAK.js} +1 -1
  64. codex/static_root/assets/VSlideGroup-CDaAHRAK.js.br +0 -0
  65. codex/static_root/assets/VSlideGroup-CDaAHRAK.js.gz +0 -0
  66. codex/static_root/assets/{VTable-BPFJigN3.2b5f59873063.js → VTable-CkCZonsu.81e34381271f.js} +1 -1
  67. codex/static_root/assets/VTable-CkCZonsu.81e34381271f.js.br +0 -0
  68. codex/static_root/assets/VTable-CkCZonsu.81e34381271f.js.gz +0 -0
  69. codex/static_root/assets/{VTable-BPFJigN3.js → VTable-CkCZonsu.js} +1 -1
  70. codex/static_root/assets/VTable-CkCZonsu.js.br +0 -0
  71. codex/static_root/assets/VTable-CkCZonsu.js.gz +0 -0
  72. codex/static_root/assets/VTextField-fNAzFu1M.00dec8623f18.js +1 -0
  73. codex/static_root/assets/VTextField-fNAzFu1M.00dec8623f18.js.br +0 -0
  74. codex/static_root/assets/VTextField-fNAzFu1M.00dec8623f18.js.gz +0 -0
  75. codex/static_root/assets/VTextField-fNAzFu1M.js +1 -0
  76. codex/static_root/assets/VTextField-fNAzFu1M.js.br +0 -0
  77. codex/static_root/assets/VTextField-fNAzFu1M.js.gz +0 -0
  78. codex/static_root/assets/{VWindowItem-C1xK_Fwc.6a80dfed4beb.js → VWindowItem-_YBMW1SU.0836924f8c12.js} +1 -1
  79. codex/static_root/assets/VWindowItem-_YBMW1SU.0836924f8c12.js.br +0 -0
  80. codex/static_root/assets/VWindowItem-_YBMW1SU.0836924f8c12.js.gz +0 -0
  81. codex/static_root/assets/{VWindowItem-C1xK_Fwc.js → VWindowItem-_YBMW1SU.js} +1 -1
  82. codex/static_root/assets/VWindowItem-_YBMW1SU.js.br +0 -0
  83. codex/static_root/assets/VWindowItem-_YBMW1SU.js.gz +0 -0
  84. codex/static_root/assets/{admin-B8Bp2Uih.82c98714bcf1.css → admin-D4sw3N4T.b590f88a62cf.css} +1 -1
  85. codex/static_root/assets/admin-D4sw3N4T.b590f88a62cf.css.br +0 -0
  86. codex/static_root/assets/admin-D4sw3N4T.b590f88a62cf.css.gz +0 -0
  87. codex/static_root/assets/{admin-B8Bp2Uih.css → admin-D4sw3N4T.css} +1 -1
  88. codex/static_root/assets/admin-D4sw3N4T.css.br +0 -0
  89. codex/static_root/assets/admin-D4sw3N4T.css.gz +0 -0
  90. codex/static_root/assets/admin-DYmGyJVg.262e6032ee86.js +1 -0
  91. codex/static_root/assets/admin-DYmGyJVg.262e6032ee86.js.br +0 -0
  92. codex/static_root/assets/admin-DYmGyJVg.262e6032ee86.js.gz +0 -0
  93. codex/static_root/assets/admin-DYmGyJVg.js +1 -0
  94. codex/static_root/assets/admin-DYmGyJVg.js.br +0 -0
  95. codex/static_root/assets/admin-DYmGyJVg.js.gz +0 -0
  96. codex/static_root/assets/admin-drawer-panel-c3f3H29x.fa2b12c75b06.js +56 -0
  97. codex/static_root/assets/admin-drawer-panel-c3f3H29x.fa2b12c75b06.js.br +0 -0
  98. codex/static_root/assets/admin-drawer-panel-c3f3H29x.fa2b12c75b06.js.gz +0 -0
  99. codex/static_root/assets/admin-drawer-panel-c3f3H29x.js +56 -0
  100. codex/static_root/assets/admin-drawer-panel-c3f3H29x.js.br +0 -0
  101. codex/static_root/assets/admin-drawer-panel-c3f3H29x.js.gz +0 -0
  102. codex/static_root/assets/browser-Ck3zWCOk.d98c77747e6d.js +1 -0
  103. codex/static_root/assets/browser-Ck3zWCOk.d98c77747e6d.js.br +0 -0
  104. codex/static_root/assets/browser-Ck3zWCOk.d98c77747e6d.js.gz +0 -0
  105. codex/static_root/assets/browser-Ck3zWCOk.js +1 -0
  106. codex/static_root/assets/browser-Ck3zWCOk.js.br +0 -0
  107. codex/static_root/assets/browser-Ck3zWCOk.js.gz +0 -0
  108. codex/static_root/assets/{browser-DP9eEJ0M.276e8636f8fc.css → browser-DgawKPSA.c7cf59dc4b21.css} +1 -1
  109. codex/static_root/assets/browser-DgawKPSA.c7cf59dc4b21.css.br +0 -0
  110. codex/static_root/assets/browser-DgawKPSA.c7cf59dc4b21.css.gz +0 -0
  111. codex/static_root/assets/{browser-DP9eEJ0M.css → browser-DgawKPSA.css} +1 -1
  112. codex/static_root/assets/browser-DgawKPSA.css.br +0 -0
  113. codex/static_root/assets/browser-DgawKPSA.css.gz +0 -0
  114. codex/static_root/assets/change-password-dialog-BbIO0YI5.2bb0a5dfb190.js +1 -0
  115. codex/static_root/assets/change-password-dialog-BbIO0YI5.2bb0a5dfb190.js.br +0 -0
  116. codex/static_root/assets/change-password-dialog-BbIO0YI5.2bb0a5dfb190.js.gz +0 -0
  117. codex/static_root/assets/change-password-dialog-BbIO0YI5.js +1 -0
  118. codex/static_root/assets/change-password-dialog-BbIO0YI5.js.br +0 -0
  119. codex/static_root/assets/change-password-dialog-BbIO0YI5.js.gz +0 -0
  120. codex/static_root/assets/confirm-dialog-BrzuoYAT.a0a1b6364708.js +1 -0
  121. codex/static_root/assets/confirm-dialog-BrzuoYAT.a0a1b6364708.js.br +0 -0
  122. codex/static_root/assets/confirm-dialog-BrzuoYAT.a0a1b6364708.js.gz +0 -0
  123. codex/static_root/assets/confirm-dialog-BrzuoYAT.js +1 -0
  124. codex/static_root/assets/confirm-dialog-BrzuoYAT.js.br +0 -0
  125. codex/static_root/assets/confirm-dialog-BrzuoYAT.js.gz +0 -0
  126. codex/static_root/assets/{datetime-column-CYmuurug.0f5658d9b9e2.js → datetime-column-D8-UeX_p.e33b1556805b.js} +1 -1
  127. codex/static_root/assets/datetime-column-D8-UeX_p.e33b1556805b.js.br +0 -0
  128. codex/static_root/assets/datetime-column-D8-UeX_p.e33b1556805b.js.gz +0 -0
  129. codex/static_root/assets/{datetime-column-CYmuurug.js → datetime-column-D8-UeX_p.js} +1 -1
  130. codex/static_root/assets/datetime-column-D8-UeX_p.js.br +0 -0
  131. codex/static_root/assets/datetime-column-D8-UeX_p.js.gz +0 -0
  132. codex/static_root/assets/{filter-D0YNadTH.e6ee9bc95c0f.js → filter-XMAX5Nmg.c6ed87350f7d.js} +1 -1
  133. codex/static_root/assets/filter-XMAX5Nmg.c6ed87350f7d.js.br +0 -0
  134. codex/static_root/assets/filter-XMAX5Nmg.c6ed87350f7d.js.gz +0 -0
  135. codex/static_root/assets/{filter-D0YNadTH.js → filter-XMAX5Nmg.js} +1 -1
  136. codex/static_root/assets/filter-XMAX5Nmg.js.br +0 -0
  137. codex/static_root/assets/filter-XMAX5Nmg.js.gz +0 -0
  138. codex/static_root/assets/flag-tab-BLEUVMot.c14936c90346.js +1 -0
  139. codex/static_root/assets/flag-tab-BLEUVMot.c14936c90346.js.br +0 -0
  140. codex/static_root/assets/flag-tab-BLEUVMot.c14936c90346.js.gz +0 -0
  141. codex/static_root/assets/flag-tab-BLEUVMot.js +1 -0
  142. codex/static_root/assets/flag-tab-BLEUVMot.js.br +0 -0
  143. codex/static_root/assets/flag-tab-BLEUVMot.js.gz +0 -0
  144. codex/static_root/assets/group-tab-D9n5gZCA.634223001c44.js +1 -0
  145. codex/static_root/assets/group-tab-D9n5gZCA.634223001c44.js.br +0 -0
  146. codex/static_root/assets/group-tab-D9n5gZCA.634223001c44.js.gz +0 -0
  147. codex/static_root/assets/group-tab-D9n5gZCA.js +1 -0
  148. codex/static_root/assets/group-tab-D9n5gZCA.js.br +0 -0
  149. codex/static_root/assets/group-tab-D9n5gZCA.js.gz +0 -0
  150. codex/static_root/assets/http-error-C_EFLi0c.c7e906206b62.js +1 -0
  151. codex/static_root/assets/http-error-C_EFLi0c.c7e906206b62.js.br +0 -0
  152. codex/static_root/assets/http-error-C_EFLi0c.c7e906206b62.js.gz +0 -0
  153. codex/static_root/assets/http-error-C_EFLi0c.js +1 -0
  154. codex/static_root/assets/http-error-C_EFLi0c.js.br +0 -0
  155. codex/static_root/assets/http-error-C_EFLi0c.js.gz +0 -0
  156. codex/static_root/assets/{library-tab-BN0SfPcH.913e236f625e.css → library-tab-BygwYPnO.94e92aa60bf2.css} +1 -1
  157. codex/static_root/assets/library-tab-BygwYPnO.94e92aa60bf2.css.br +0 -0
  158. codex/static_root/assets/library-tab-BygwYPnO.94e92aa60bf2.css.gz +0 -0
  159. codex/static_root/assets/{library-tab-BN0SfPcH.css → library-tab-BygwYPnO.css} +1 -1
  160. codex/static_root/assets/library-tab-BygwYPnO.css.br +0 -0
  161. codex/static_root/assets/library-tab-BygwYPnO.css.gz +0 -0
  162. codex/static_root/assets/library-tab-fDxuhPBs.285b36d9cec0.js +1 -0
  163. codex/static_root/assets/library-tab-fDxuhPBs.285b36d9cec0.js.br +0 -0
  164. codex/static_root/assets/library-tab-fDxuhPBs.285b36d9cec0.js.gz +0 -0
  165. codex/static_root/assets/library-tab-fDxuhPBs.js +1 -0
  166. codex/static_root/assets/library-tab-fDxuhPBs.js.br +0 -0
  167. codex/static_root/assets/library-tab-fDxuhPBs.js.gz +0 -0
  168. codex/static_root/assets/main-B3MfqYNN.30d1310fc082.js +6 -0
  169. codex/static_root/assets/main-B3MfqYNN.30d1310fc082.js.br +0 -0
  170. codex/static_root/assets/main-B3MfqYNN.30d1310fc082.js.gz +0 -0
  171. codex/static_root/assets/main-B3MfqYNN.js +6 -0
  172. codex/static_root/assets/main-B3MfqYNN.js.br +0 -0
  173. codex/static_root/assets/main-B3MfqYNN.js.gz +0 -0
  174. codex/static_root/assets/pagination-toolbar-BD6nzIKF.f3ca4874c203.js +1 -0
  175. codex/static_root/assets/pagination-toolbar-BD6nzIKF.f3ca4874c203.js.br +0 -0
  176. codex/static_root/assets/pagination-toolbar-BD6nzIKF.f3ca4874c203.js.gz +0 -0
  177. codex/static_root/assets/pagination-toolbar-BD6nzIKF.js +1 -0
  178. codex/static_root/assets/pagination-toolbar-BD6nzIKF.js.br +0 -0
  179. codex/static_root/assets/pagination-toolbar-BD6nzIKF.js.gz +0 -0
  180. codex/static_root/assets/{pdf-doc-MjpbXXnS.85038ab4cb8e.js → pdf-doc-iF15lKRp.de9a9d394438.js} +1 -1
  181. codex/static_root/assets/pdf-doc-iF15lKRp.de9a9d394438.js.br +0 -0
  182. codex/static_root/assets/pdf-doc-iF15lKRp.de9a9d394438.js.gz +0 -0
  183. codex/static_root/assets/{pdf-doc-MjpbXXnS.js → pdf-doc-iF15lKRp.js} +1 -1
  184. codex/static_root/assets/pdf-doc-iF15lKRp.js.br +0 -0
  185. codex/static_root/assets/pdf-doc-iF15lKRp.js.gz +0 -0
  186. codex/static_root/assets/reader-5Ja_bAaT.2fe33a3891f6.js +2 -0
  187. codex/static_root/assets/reader-5Ja_bAaT.2fe33a3891f6.js.br +0 -0
  188. codex/static_root/assets/reader-5Ja_bAaT.2fe33a3891f6.js.gz +0 -0
  189. codex/static_root/assets/reader-5Ja_bAaT.js +2 -0
  190. codex/static_root/assets/reader-5Ja_bAaT.js.br +0 -0
  191. codex/static_root/assets/reader-5Ja_bAaT.js.gz +0 -0
  192. codex/static_root/assets/{reader-DOQuhDYO.css → reader-YbzUiD0T.css} +1 -1
  193. codex/static_root/assets/reader-YbzUiD0T.css.br +0 -0
  194. codex/static_root/assets/reader-YbzUiD0T.css.gz +0 -0
  195. codex/static_root/assets/{reader-DOQuhDYO.df559ad29ab3.css → reader-YbzUiD0T.efb15835b39d.css} +1 -1
  196. codex/static_root/assets/reader-YbzUiD0T.efb15835b39d.css.br +0 -0
  197. codex/static_root/assets/reader-YbzUiD0T.efb15835b39d.css.gz +0 -0
  198. codex/static_root/assets/{relation-chips-Bsc-gUxE.98e65384c3c9.css → relation-chips-BGitp3yx.b3e7d178a615.css} +1 -1
  199. codex/static_root/assets/relation-chips-BGitp3yx.b3e7d178a615.css.br +0 -0
  200. codex/static_root/assets/relation-chips-BGitp3yx.b3e7d178a615.css.gz +0 -0
  201. codex/static_root/assets/{relation-chips-Bsc-gUxE.css → relation-chips-BGitp3yx.css} +1 -1
  202. codex/static_root/assets/relation-chips-BGitp3yx.css.br +0 -0
  203. codex/static_root/assets/relation-chips-BGitp3yx.css.gz +0 -0
  204. codex/static_root/assets/relation-chips-CUWkvLNo.3d18d0c09d39.js +1 -0
  205. codex/static_root/assets/relation-chips-CUWkvLNo.3d18d0c09d39.js.br +0 -0
  206. codex/static_root/assets/relation-chips-CUWkvLNo.3d18d0c09d39.js.gz +0 -0
  207. codex/static_root/assets/relation-chips-CUWkvLNo.js +1 -0
  208. codex/static_root/assets/relation-chips-CUWkvLNo.js.br +0 -0
  209. codex/static_root/assets/relation-chips-CUWkvLNo.js.gz +0 -0
  210. codex/static_root/assets/settings-drawer-rn3JdMxA.a9d7b45c2138.js +2 -0
  211. codex/static_root/assets/settings-drawer-rn3JdMxA.a9d7b45c2138.js.br +0 -0
  212. codex/static_root/assets/settings-drawer-rn3JdMxA.a9d7b45c2138.js.gz +0 -0
  213. codex/static_root/assets/settings-drawer-rn3JdMxA.js +2 -0
  214. codex/static_root/assets/settings-drawer-rn3JdMxA.js.br +0 -0
  215. codex/static_root/assets/settings-drawer-rn3JdMxA.js.gz +0 -0
  216. codex/static_root/assets/stats-tab-B6L-YFRA.1c90593f7b5c.css +1 -0
  217. codex/static_root/assets/stats-tab-B6L-YFRA.1c90593f7b5c.css.br +0 -0
  218. codex/static_root/assets/stats-tab-B6L-YFRA.1c90593f7b5c.css.gz +0 -0
  219. codex/static_root/assets/stats-tab-B6L-YFRA.css +1 -0
  220. codex/static_root/assets/stats-tab-B6L-YFRA.css.br +0 -0
  221. codex/static_root/assets/stats-tab-B6L-YFRA.css.gz +0 -0
  222. codex/static_root/assets/stats-tab-zts2Xsmg.9fb959ccf4da.js +1 -0
  223. codex/static_root/assets/stats-tab-zts2Xsmg.9fb959ccf4da.js.br +0 -0
  224. codex/static_root/assets/stats-tab-zts2Xsmg.9fb959ccf4da.js.gz +0 -0
  225. codex/static_root/assets/stats-tab-zts2Xsmg.js +1 -0
  226. codex/static_root/assets/stats-tab-zts2Xsmg.js.br +0 -0
  227. codex/static_root/assets/stats-tab-zts2Xsmg.js.gz +0 -0
  228. codex/static_root/assets/task-tab-CbzDX0IR.7b43bdf9cf42.js +1 -0
  229. codex/static_root/assets/task-tab-CbzDX0IR.7b43bdf9cf42.js.br +0 -0
  230. codex/static_root/assets/task-tab-CbzDX0IR.7b43bdf9cf42.js.gz +0 -0
  231. codex/static_root/assets/task-tab-CbzDX0IR.js +1 -0
  232. codex/static_root/assets/task-tab-CbzDX0IR.js.br +0 -0
  233. codex/static_root/assets/task-tab-CbzDX0IR.js.gz +0 -0
  234. codex/static_root/assets/unauthorized-CllrtnFV.2a18fab3dd41.js +1 -0
  235. codex/static_root/assets/unauthorized-CllrtnFV.2a18fab3dd41.js.br +0 -0
  236. codex/static_root/assets/unauthorized-CllrtnFV.2a18fab3dd41.js.gz +0 -0
  237. codex/static_root/assets/unauthorized-CllrtnFV.js +1 -0
  238. codex/static_root/assets/unauthorized-CllrtnFV.js.br +0 -0
  239. codex/static_root/assets/unauthorized-CllrtnFV.js.gz +0 -0
  240. codex/static_root/assets/user-tab-FY1xALpi.05a88f51df4f.js +1 -0
  241. codex/static_root/assets/user-tab-FY1xALpi.05a88f51df4f.js.br +0 -0
  242. codex/static_root/assets/user-tab-FY1xALpi.05a88f51df4f.js.gz +0 -0
  243. codex/static_root/assets/user-tab-FY1xALpi.js +1 -0
  244. codex/static_root/assets/user-tab-FY1xALpi.js.br +0 -0
  245. codex/static_root/assets/user-tab-FY1xALpi.js.gz +0 -0
  246. codex/static_root/{manifest.c852d4a311e1.json → manifest.166aa32817b1.json} +229 -241
  247. codex/static_root/manifest.166aa32817b1.json.br +0 -0
  248. codex/static_root/manifest.166aa32817b1.json.gz +0 -0
  249. codex/static_root/manifest.json +229 -241
  250. codex/static_root/manifest.json.br +0 -0
  251. codex/static_root/manifest.json.gz +0 -0
  252. codex/static_root/staticfiles.json +1 -1
  253. codex/views/admin/api_key.py +1 -1
  254. codex/views/admin/flag.py +1 -1
  255. codex/views/admin/group.py +1 -1
  256. codex/views/admin/library.py +1 -1
  257. codex/views/admin/stats.py +41 -7
  258. codex/views/admin/tasks.py +1 -1
  259. codex/views/admin/user.py +1 -1
  260. codex/views/browser/annotations.py +7 -4
  261. codex/views/browser/browser.py +8 -5
  262. codex/views/browser/cover.py +0 -2
  263. codex/views/browser/filters/field.py +15 -6
  264. codex/views/browser/metadata.py +6 -9
  265. codex/views/browser/paginate.py +61 -11
  266. codex/views/browser/validate.py +7 -5
  267. codex/views/opds/binary.py +1 -3
  268. codex/views/opds/const.py +10 -0
  269. codex/views/opds/util.py +10 -0
  270. codex/views/opds/v1/feed.py +5 -23
  271. codex/views/reader/arcs.py +64 -53
  272. codex/views/reader/books.py +38 -38
  273. codex/views/reader/init.py +7 -5
  274. codex/views/reader/reader.py +0 -2
  275. {codex-1.6.1.dist-info → codex-1.6.3.dist-info}/METADATA +1 -1
  276. {codex-1.6.1.dist-info → codex-1.6.3.dist-info}/RECORD +279 -275
  277. codex/serializers/admin.py +0 -268
  278. codex/static_root/assets/VCheckbox-fu1ny9Cc.7f2b43d1ce47.js +0 -1
  279. codex/static_root/assets/VCheckbox-fu1ny9Cc.7f2b43d1ce47.js.br +0 -0
  280. codex/static_root/assets/VCheckbox-fu1ny9Cc.7f2b43d1ce47.js.gz +0 -0
  281. codex/static_root/assets/VCheckbox-fu1ny9Cc.js +0 -1
  282. codex/static_root/assets/VCheckbox-fu1ny9Cc.js.br +0 -0
  283. codex/static_root/assets/VCheckbox-fu1ny9Cc.js.gz +0 -0
  284. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.7469708eff4e.js +0 -1
  285. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.7469708eff4e.js.br +0 -0
  286. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.7469708eff4e.js.gz +0 -0
  287. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.js +0 -1
  288. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.js.br +0 -0
  289. codex/static_root/assets/VCheckboxBtn-ssJU_z8r.js.gz +0 -0
  290. codex/static_root/assets/VCombobox-pHa6iBaZ.ff88fede19d6.js.br +0 -0
  291. codex/static_root/assets/VCombobox-pHa6iBaZ.ff88fede19d6.js.gz +0 -0
  292. codex/static_root/assets/VCombobox-pHa6iBaZ.js.br +0 -0
  293. codex/static_root/assets/VCombobox-pHa6iBaZ.js.gz +0 -0
  294. codex/static_root/assets/VDialog-PmbYIKIh.c0fb4c6eb906.js +0 -1
  295. codex/static_root/assets/VDialog-PmbYIKIh.c0fb4c6eb906.js.br +0 -0
  296. codex/static_root/assets/VDialog-PmbYIKIh.c0fb4c6eb906.js.gz +0 -0
  297. codex/static_root/assets/VDialog-PmbYIKIh.js +0 -1
  298. codex/static_root/assets/VDialog-PmbYIKIh.js.br +0 -0
  299. codex/static_root/assets/VDialog-PmbYIKIh.js.gz +0 -0
  300. codex/static_root/assets/VExpansionPanels-DhRGJRFB.d1fb2c18424b.js +0 -1
  301. codex/static_root/assets/VExpansionPanels-DhRGJRFB.d1fb2c18424b.js.br +0 -0
  302. codex/static_root/assets/VExpansionPanels-DhRGJRFB.d1fb2c18424b.js.gz +0 -0
  303. codex/static_root/assets/VExpansionPanels-DhRGJRFB.js +0 -1
  304. codex/static_root/assets/VExpansionPanels-DhRGJRFB.js.br +0 -0
  305. codex/static_root/assets/VExpansionPanels-DhRGJRFB.js.gz +0 -0
  306. codex/static_root/assets/VRadioGroup-ClT4cR8E.1aa488b49221.js +0 -1
  307. codex/static_root/assets/VRadioGroup-ClT4cR8E.1aa488b49221.js.br +0 -0
  308. codex/static_root/assets/VRadioGroup-ClT4cR8E.1aa488b49221.js.gz +0 -0
  309. codex/static_root/assets/VRadioGroup-ClT4cR8E.js +0 -1
  310. codex/static_root/assets/VRadioGroup-ClT4cR8E.js.br +0 -0
  311. codex/static_root/assets/VRadioGroup-ClT4cR8E.js.gz +0 -0
  312. codex/static_root/assets/VSelect-BBy4FHPj.7421f9feb46b.js +0 -1
  313. codex/static_root/assets/VSelect-BBy4FHPj.7421f9feb46b.js.br +0 -0
  314. codex/static_root/assets/VSelect-BBy4FHPj.7421f9feb46b.js.gz +0 -0
  315. codex/static_root/assets/VSelect-BBy4FHPj.js +0 -1
  316. codex/static_root/assets/VSelect-BBy4FHPj.js.br +0 -0
  317. codex/static_root/assets/VSelect-BBy4FHPj.js.gz +0 -0
  318. codex/static_root/assets/VSelectionControl-D4e-QshF.38721ba52d00.js.br +0 -0
  319. codex/static_root/assets/VSelectionControl-D4e-QshF.38721ba52d00.js.gz +0 -0
  320. codex/static_root/assets/VSelectionControl-D4e-QshF.js.br +0 -0
  321. codex/static_root/assets/VSelectionControl-D4e-QshF.js.gz +0 -0
  322. codex/static_root/assets/VSlideGroup-BQv5m0ZY.2adc55157521.js.br +0 -0
  323. codex/static_root/assets/VSlideGroup-BQv5m0ZY.2adc55157521.js.gz +0 -0
  324. codex/static_root/assets/VSlideGroup-BQv5m0ZY.js.br +0 -0
  325. codex/static_root/assets/VSlideGroup-BQv5m0ZY.js.gz +0 -0
  326. codex/static_root/assets/VTable-BPFJigN3.2b5f59873063.js.br +0 -0
  327. codex/static_root/assets/VTable-BPFJigN3.2b5f59873063.js.gz +0 -0
  328. codex/static_root/assets/VTable-BPFJigN3.js.br +0 -0
  329. codex/static_root/assets/VTable-BPFJigN3.js.gz +0 -0
  330. codex/static_root/assets/VTextField-DuT-8VmG.04e65c2610a4.js +0 -1
  331. codex/static_root/assets/VTextField-DuT-8VmG.04e65c2610a4.js.br +0 -0
  332. codex/static_root/assets/VTextField-DuT-8VmG.04e65c2610a4.js.gz +0 -0
  333. codex/static_root/assets/VTextField-DuT-8VmG.js +0 -1
  334. codex/static_root/assets/VTextField-DuT-8VmG.js.br +0 -0
  335. codex/static_root/assets/VTextField-DuT-8VmG.js.gz +0 -0
  336. codex/static_root/assets/VWindowItem-C1xK_Fwc.6a80dfed4beb.js.br +0 -0
  337. codex/static_root/assets/VWindowItem-C1xK_Fwc.6a80dfed4beb.js.gz +0 -0
  338. codex/static_root/assets/VWindowItem-C1xK_Fwc.js.br +0 -0
  339. codex/static_root/assets/VWindowItem-C1xK_Fwc.js.gz +0 -0
  340. codex/static_root/assets/admin-B8Bp2Uih.82c98714bcf1.css.br +0 -0
  341. codex/static_root/assets/admin-B8Bp2Uih.82c98714bcf1.css.gz +0 -0
  342. codex/static_root/assets/admin-B8Bp2Uih.css.br +0 -0
  343. codex/static_root/assets/admin-B8Bp2Uih.css.gz +0 -0
  344. codex/static_root/assets/admin-DAexM4mM.2fa224507884.js +0 -1
  345. codex/static_root/assets/admin-DAexM4mM.2fa224507884.js.br +0 -0
  346. codex/static_root/assets/admin-DAexM4mM.2fa224507884.js.gz +0 -0
  347. codex/static_root/assets/admin-DAexM4mM.js +0 -1
  348. codex/static_root/assets/admin-DAexM4mM.js.br +0 -0
  349. codex/static_root/assets/admin-DAexM4mM.js.gz +0 -0
  350. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.b9a6113090c9.js +0 -30
  351. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.b9a6113090c9.js.br +0 -0
  352. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.b9a6113090c9.js.gz +0 -0
  353. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.js +0 -30
  354. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.js.br +0 -0
  355. codex/static_root/assets/admin-drawer-panel-SpPhIMP4.js.gz +0 -0
  356. codex/static_root/assets/browser-CWfL6gLS.92842e328420.js +0 -1
  357. codex/static_root/assets/browser-CWfL6gLS.92842e328420.js.br +0 -0
  358. codex/static_root/assets/browser-CWfL6gLS.92842e328420.js.gz +0 -0
  359. codex/static_root/assets/browser-CWfL6gLS.js +0 -1
  360. codex/static_root/assets/browser-CWfL6gLS.js.br +0 -0
  361. codex/static_root/assets/browser-CWfL6gLS.js.gz +0 -0
  362. codex/static_root/assets/browser-DP9eEJ0M.276e8636f8fc.css.br +0 -0
  363. codex/static_root/assets/browser-DP9eEJ0M.276e8636f8fc.css.gz +0 -0
  364. codex/static_root/assets/browser-DP9eEJ0M.css.br +0 -0
  365. codex/static_root/assets/browser-DP9eEJ0M.css.gz +0 -0
  366. codex/static_root/assets/change-password-dialog-BJHFtdXE.0a718e633507.js +0 -1
  367. codex/static_root/assets/change-password-dialog-BJHFtdXE.0a718e633507.js.br +0 -0
  368. codex/static_root/assets/change-password-dialog-BJHFtdXE.0a718e633507.js.gz +0 -0
  369. codex/static_root/assets/change-password-dialog-BJHFtdXE.js +0 -1
  370. codex/static_root/assets/change-password-dialog-BJHFtdXE.js.br +0 -0
  371. codex/static_root/assets/change-password-dialog-BJHFtdXE.js.gz +0 -0
  372. codex/static_root/assets/confirm-dialog-BEiVusri.e3d017feba41.js +0 -1
  373. codex/static_root/assets/confirm-dialog-BEiVusri.e3d017feba41.js.br +0 -0
  374. codex/static_root/assets/confirm-dialog-BEiVusri.e3d017feba41.js.gz +0 -0
  375. codex/static_root/assets/confirm-dialog-BEiVusri.js +0 -1
  376. codex/static_root/assets/confirm-dialog-BEiVusri.js.br +0 -0
  377. codex/static_root/assets/confirm-dialog-BEiVusri.js.gz +0 -0
  378. codex/static_root/assets/datetime-column-CYmuurug.0f5658d9b9e2.js.br +0 -0
  379. codex/static_root/assets/datetime-column-CYmuurug.0f5658d9b9e2.js.gz +0 -0
  380. codex/static_root/assets/datetime-column-CYmuurug.js.br +0 -0
  381. codex/static_root/assets/datetime-column-CYmuurug.js.gz +0 -0
  382. codex/static_root/assets/filter-D0YNadTH.e6ee9bc95c0f.js.br +0 -0
  383. codex/static_root/assets/filter-D0YNadTH.e6ee9bc95c0f.js.gz +0 -0
  384. codex/static_root/assets/filter-D0YNadTH.js.br +0 -0
  385. codex/static_root/assets/filter-D0YNadTH.js.gz +0 -0
  386. codex/static_root/assets/flag-tab-CAsMFvQO.9cc9cd124ee9.js +0 -1
  387. codex/static_root/assets/flag-tab-CAsMFvQO.9cc9cd124ee9.js.br +0 -0
  388. codex/static_root/assets/flag-tab-CAsMFvQO.9cc9cd124ee9.js.gz +0 -0
  389. codex/static_root/assets/flag-tab-CAsMFvQO.js +0 -1
  390. codex/static_root/assets/flag-tab-CAsMFvQO.js.br +0 -0
  391. codex/static_root/assets/flag-tab-CAsMFvQO.js.gz +0 -0
  392. codex/static_root/assets/group-tab-Cr0hebSY.22e6025c588f.js +0 -1
  393. codex/static_root/assets/group-tab-Cr0hebSY.22e6025c588f.js.br +0 -0
  394. codex/static_root/assets/group-tab-Cr0hebSY.22e6025c588f.js.gz +0 -0
  395. codex/static_root/assets/group-tab-Cr0hebSY.js +0 -1
  396. codex/static_root/assets/group-tab-Cr0hebSY.js.br +0 -0
  397. codex/static_root/assets/group-tab-Cr0hebSY.js.gz +0 -0
  398. codex/static_root/assets/http-error-BkvLxw68.a5f561d36571.js +0 -1
  399. codex/static_root/assets/http-error-BkvLxw68.a5f561d36571.js.br +0 -0
  400. codex/static_root/assets/http-error-BkvLxw68.a5f561d36571.js.gz +0 -0
  401. codex/static_root/assets/http-error-BkvLxw68.js +0 -1
  402. codex/static_root/assets/http-error-BkvLxw68.js.br +0 -0
  403. codex/static_root/assets/http-error-BkvLxw68.js.gz +0 -0
  404. codex/static_root/assets/library-tab-BN0SfPcH.913e236f625e.css.br +0 -0
  405. codex/static_root/assets/library-tab-BN0SfPcH.913e236f625e.css.gz +0 -0
  406. codex/static_root/assets/library-tab-BN0SfPcH.css.br +0 -0
  407. codex/static_root/assets/library-tab-BN0SfPcH.css.gz +0 -0
  408. codex/static_root/assets/library-tab-r6YdFmlk.d136e20e3501.js +0 -1
  409. codex/static_root/assets/library-tab-r6YdFmlk.d136e20e3501.js.br +0 -0
  410. codex/static_root/assets/library-tab-r6YdFmlk.d136e20e3501.js.gz +0 -0
  411. codex/static_root/assets/library-tab-r6YdFmlk.js +0 -1
  412. codex/static_root/assets/library-tab-r6YdFmlk.js.br +0 -0
  413. codex/static_root/assets/library-tab-r6YdFmlk.js.gz +0 -0
  414. codex/static_root/assets/main-BMxHA4IB.19ea7128bc87.js +0 -32
  415. codex/static_root/assets/main-BMxHA4IB.19ea7128bc87.js.br +0 -0
  416. codex/static_root/assets/main-BMxHA4IB.19ea7128bc87.js.gz +0 -0
  417. codex/static_root/assets/main-BMxHA4IB.js +0 -32
  418. codex/static_root/assets/main-BMxHA4IB.js.br +0 -0
  419. codex/static_root/assets/main-BMxHA4IB.js.gz +0 -0
  420. codex/static_root/assets/pagination-toolbar-BO02XyZj.b1574d505e3c.js +0 -1
  421. codex/static_root/assets/pagination-toolbar-BO02XyZj.b1574d505e3c.js.br +0 -0
  422. codex/static_root/assets/pagination-toolbar-BO02XyZj.b1574d505e3c.js.gz +0 -0
  423. codex/static_root/assets/pagination-toolbar-BO02XyZj.js +0 -1
  424. codex/static_root/assets/pagination-toolbar-BO02XyZj.js.br +0 -0
  425. codex/static_root/assets/pagination-toolbar-BO02XyZj.js.gz +0 -0
  426. codex/static_root/assets/pdf-doc-MjpbXXnS.85038ab4cb8e.js.br +0 -0
  427. codex/static_root/assets/pdf-doc-MjpbXXnS.85038ab4cb8e.js.gz +0 -0
  428. codex/static_root/assets/pdf-doc-MjpbXXnS.js.br +0 -0
  429. codex/static_root/assets/pdf-doc-MjpbXXnS.js.gz +0 -0
  430. codex/static_root/assets/reader-AMeiJSE6.556392e64785.js +0 -2
  431. codex/static_root/assets/reader-AMeiJSE6.556392e64785.js.br +0 -0
  432. codex/static_root/assets/reader-AMeiJSE6.556392e64785.js.gz +0 -0
  433. codex/static_root/assets/reader-AMeiJSE6.js +0 -2
  434. codex/static_root/assets/reader-AMeiJSE6.js.br +0 -0
  435. codex/static_root/assets/reader-AMeiJSE6.js.gz +0 -0
  436. codex/static_root/assets/reader-DOQuhDYO.css.br +0 -0
  437. codex/static_root/assets/reader-DOQuhDYO.css.gz +0 -0
  438. codex/static_root/assets/reader-DOQuhDYO.df559ad29ab3.css.br +0 -0
  439. codex/static_root/assets/reader-DOQuhDYO.df559ad29ab3.css.gz +0 -0
  440. codex/static_root/assets/relation-chips-Bsc-gUxE.98e65384c3c9.css.br +0 -0
  441. codex/static_root/assets/relation-chips-Bsc-gUxE.98e65384c3c9.css.gz +0 -0
  442. codex/static_root/assets/relation-chips-Bsc-gUxE.css.br +0 -0
  443. codex/static_root/assets/relation-chips-Bsc-gUxE.css.gz +0 -0
  444. codex/static_root/assets/relation-chips-DKzjmNPq.de2203c11719.js +0 -1
  445. codex/static_root/assets/relation-chips-DKzjmNPq.de2203c11719.js.br +0 -0
  446. codex/static_root/assets/relation-chips-DKzjmNPq.de2203c11719.js.gz +0 -0
  447. codex/static_root/assets/relation-chips-DKzjmNPq.js +0 -1
  448. codex/static_root/assets/relation-chips-DKzjmNPq.js.br +0 -0
  449. codex/static_root/assets/relation-chips-DKzjmNPq.js.gz +0 -0
  450. codex/static_root/assets/settings-drawer-DuR_I-os.d1754da85f24.js +0 -2
  451. codex/static_root/assets/settings-drawer-DuR_I-os.d1754da85f24.js.br +0 -0
  452. codex/static_root/assets/settings-drawer-DuR_I-os.d1754da85f24.js.gz +0 -0
  453. codex/static_root/assets/settings-drawer-DuR_I-os.js +0 -2
  454. codex/static_root/assets/settings-drawer-DuR_I-os.js.br +0 -0
  455. codex/static_root/assets/settings-drawer-DuR_I-os.js.gz +0 -0
  456. codex/static_root/assets/stats-tab-B4yKuY0c.a5728396494b.css +0 -1
  457. codex/static_root/assets/stats-tab-B4yKuY0c.a5728396494b.css.br +0 -0
  458. codex/static_root/assets/stats-tab-B4yKuY0c.a5728396494b.css.gz +0 -0
  459. codex/static_root/assets/stats-tab-B4yKuY0c.css +0 -1
  460. codex/static_root/assets/stats-tab-B4yKuY0c.css.br +0 -0
  461. codex/static_root/assets/stats-tab-B4yKuY0c.css.gz +0 -0
  462. codex/static_root/assets/stats-tab-CgBniikR.ce1c6941c844.js +0 -1
  463. codex/static_root/assets/stats-tab-CgBniikR.ce1c6941c844.js.br +0 -0
  464. codex/static_root/assets/stats-tab-CgBniikR.ce1c6941c844.js.gz +0 -0
  465. codex/static_root/assets/stats-tab-CgBniikR.js +0 -1
  466. codex/static_root/assets/stats-tab-CgBniikR.js.br +0 -0
  467. codex/static_root/assets/stats-tab-CgBniikR.js.gz +0 -0
  468. codex/static_root/assets/task-tab-JjKaS7pI.c01782978325.js +0 -1
  469. codex/static_root/assets/task-tab-JjKaS7pI.c01782978325.js.br +0 -0
  470. codex/static_root/assets/task-tab-JjKaS7pI.c01782978325.js.gz +0 -0
  471. codex/static_root/assets/task-tab-JjKaS7pI.js +0 -1
  472. codex/static_root/assets/task-tab-JjKaS7pI.js.br +0 -0
  473. codex/static_root/assets/task-tab-JjKaS7pI.js.gz +0 -0
  474. codex/static_root/assets/to-case-CMMdeNjM.64cd6ddff339.js +0 -1
  475. codex/static_root/assets/to-case-CMMdeNjM.js +0 -1
  476. codex/static_root/assets/unauthorized-Cz-M4lP9.d11776d78241.js +0 -1
  477. codex/static_root/assets/unauthorized-Cz-M4lP9.d11776d78241.js.br +0 -0
  478. codex/static_root/assets/unauthorized-Cz-M4lP9.d11776d78241.js.gz +0 -0
  479. codex/static_root/assets/unauthorized-Cz-M4lP9.js +0 -1
  480. codex/static_root/assets/unauthorized-Cz-M4lP9.js.br +0 -0
  481. codex/static_root/assets/unauthorized-Cz-M4lP9.js.gz +0 -0
  482. codex/static_root/assets/user-tab-HnLW9C3q.7f44c7f960c2.js +0 -1
  483. codex/static_root/assets/user-tab-HnLW9C3q.7f44c7f960c2.js.br +0 -0
  484. codex/static_root/assets/user-tab-HnLW9C3q.7f44c7f960c2.js.gz +0 -0
  485. codex/static_root/assets/user-tab-HnLW9C3q.js +0 -1
  486. codex/static_root/assets/user-tab-HnLW9C3q.js.br +0 -0
  487. codex/static_root/assets/user-tab-HnLW9C3q.js.gz +0 -0
  488. codex/static_root/manifest.c852d4a311e1.json.br +0 -0
  489. codex/static_root/manifest.c852d4a311e1.json.gz +0 -0
  490. {codex-1.6.1.dist-info → codex-1.6.3.dist-info}/LICENSE +0 -0
  491. {codex-1.6.1.dist-info → codex-1.6.3.dist-info}/WHEEL +0 -0
  492. {codex-1.6.1.dist-info → codex-1.6.3.dist-info}/entry_points.txt +0 -0
codex/exceptions.py CHANGED
@@ -1,9 +1,10 @@
1
1
  """Special Redirect Error."""
2
2
 
3
- from collections.abc import Mapping
4
3
  from copy import deepcopy
5
4
  from pprint import pformat
5
+ from typing import TYPE_CHECKING
6
6
 
7
+ from django.core.validators import EMPTY_VALUES
7
8
  from django.shortcuts import redirect
8
9
  from django.urls import reverse
9
10
  from django.utils.http import urlencode
@@ -12,9 +13,18 @@ from rest_framework.status import HTTP_303_SEE_OTHER
12
13
 
13
14
  from codex.logger.logging import get_logger
14
15
  from codex.serializers.choices import DEFAULTS
16
+ from codex.serializers.fields import BreadcrumbsField
15
17
  from codex.serializers.route import RouteSerializer
18
+ from codex.views.util import pop_name
19
+
20
+ if TYPE_CHECKING:
21
+ from collections.abc import Mapping
22
+
16
23
 
17
24
  LOG = get_logger(__name__)
25
+ _OPDS_REDIRECT_SETTINGS_KEYS = ("order_by", "top_group")
26
+ _REDIRECT_SETTINGS_KEYS = ("breadcrumbs", *_OPDS_REDIRECT_SETTINGS_KEYS)
27
+ _DEFAULT_ROUTE = DEFAULTS["breadcrumbs"][0]
18
28
 
19
29
 
20
30
  class SeeOtherRedirectError(APIException):
@@ -24,33 +34,49 @@ class SeeOtherRedirectError(APIException):
24
34
  default_code = "redirect"
25
35
  default_detail = "redirect to a valid route"
26
36
 
27
- def __init__(self, detail: Mapping[str, str | dict]):
37
+ def __init__(self, detail):
28
38
  """Create a response to pass to the exception handler."""
39
+ # Copy to edit and not write over refs
29
40
  detail = dict(detail)
30
- route: dict = detail.get("route", {}) # type: ignore
31
- params: dict = route.get("params", DEFAULTS["breadcrumbs"][0])
32
- # Save route in server format for redirect reverse
33
- params.pop("name", None)
41
+
42
+ # Get route params
43
+ route = detail.get("route", {})
44
+ params = route.get("params", _DEFAULT_ROUTE)
45
+ params = pop_name(params)
46
+ route = deepcopy(route)
47
+ route["params"] = params
48
+
49
+ # For OPDS
34
50
  self.route_kwargs = params
35
- # Serialize route for detail
51
+
36
52
  serializer = RouteSerializer(params)
37
- route = deepcopy(route)
38
53
  route["params"] = serializer.data
39
54
  detail["route"] = route
40
- # Pop uneccissary breadcrumbs.
41
- detail.get("settings", {}).pop("breadcrumbs", None) # type: ignore
42
- self.detail: Mapping[str, str | Mapping] = detail # type: ignore
43
- LOG.debug(f"redirect {pformat(detail)}")
55
+
56
+ filtered_settings = {}
57
+ settings = detail.get("settings", {})
58
+ for key in _REDIRECT_SETTINGS_KEYS:
59
+ value = settings.get(key)
60
+ if value in EMPTY_VALUES:
61
+ continue
62
+ if key == "breadcrumbs":
63
+ value = BreadcrumbsField().to_representation(value)
64
+ filtered_settings[key] = value
65
+ detail["settings"] = filtered_settings
66
+
67
+ self.detail = detail
68
+
69
+ LOG.debug(f"redirect {pformat(self.detail)}")
44
70
  # super().__init__ converts every type into strings! do not use it.
45
71
 
46
72
  def _add_query_params(self, url):
47
73
  """Change OPDS settings like the frontend does with error.detail."""
48
74
  query_params = {}
49
75
  settings: Mapping = self.detail.get("settings", {}) # type: ignore
50
- if top_group := settings.get("top_group"):
51
- query_params["top_group"] = top_group
52
- if order_by := settings.get("order_by"):
53
- query_params["order_by"] = order_by
76
+ for key in _OPDS_REDIRECT_SETTINGS_KEYS:
77
+ value = settings.get(key)
78
+ if value not in EMPTY_VALUES:
79
+ query_params[key] = value
54
80
  if query_params:
55
81
  url += "?" + urlencode(query_params)
56
82
  return url
@@ -358,5 +358,5 @@ class UpdateMixin(RemoveMixin):
358
358
  except Exception:
359
359
  self.log.exception("Update search index")
360
360
  finally:
361
- until = start_time + 1
361
+ until = start_time + 2
362
362
  self.status_controller.finish_many(self._STATUS_FINISH_TYPES, until=until)
@@ -0,0 +1 @@
1
+ """Admin view serialzers."""
@@ -0,0 +1,15 @@
1
+ """Admin flag serializers."""
2
+
3
+ from codex.models import AdminFlag
4
+ from codex.serializers.models.base import BaseModelSerializer
5
+
6
+
7
+ class AdminFlagSerializer(BaseModelSerializer):
8
+ """Admin Flag Serializer."""
9
+
10
+ class Meta(BaseModelSerializer.Meta):
11
+ """Specify Model."""
12
+
13
+ model = AdminFlag
14
+ fields = ("key", "on")
15
+ read_only_fields = ("key",)
@@ -0,0 +1,38 @@
1
+ """Admin group serializers."""
2
+
3
+ from django.contrib.auth.models import Group
4
+ from rest_framework.serializers import (
5
+ BooleanField,
6
+ )
7
+
8
+ from codex.models.admin import GroupAuth
9
+ from codex.serializers.models.base import BaseModelSerializer
10
+
11
+
12
+ class GroupSerializer(BaseModelSerializer):
13
+ """Group Serialier."""
14
+
15
+ exclude = BooleanField(default=False, source="groupauth.exclude")
16
+
17
+ class Meta(BaseModelSerializer.Meta):
18
+ """Specify Model."""
19
+
20
+ model = Group
21
+ fields = ("pk", "name", "library_set", "user_set", "exclude")
22
+ read_only_fields = ("pk",)
23
+
24
+ def update(self, instance, validated_data):
25
+ """Update with nested GroupAuth."""
26
+ exclude = validated_data.pop("groupauth", {}).get("exclude")
27
+ if exclude is not None:
28
+ groupauth = GroupAuth.objects.get(group=instance)
29
+ groupauth.exclude = exclude
30
+ groupauth.save()
31
+ return super().update(instance, validated_data)
32
+
33
+ def create(self, validated_data):
34
+ """Create with nested GroupAuth."""
35
+ exclude = validated_data.pop("groupauth", {}).get("exclude", False)
36
+ instance = super().create(validated_data)
37
+ GroupAuth.objects.create(group=instance, exclude=exclude)
38
+ return instance
@@ -0,0 +1,90 @@
1
+ """Admin libraries serializers."""
2
+
3
+ from pathlib import Path
4
+
5
+ from rest_framework.serializers import (
6
+ BooleanField,
7
+ CharField,
8
+ ListField,
9
+ Serializer,
10
+ ValidationError,
11
+ )
12
+
13
+ from codex.models import FailedImport, Library
14
+ from codex.serializers.models.base import BaseModelSerializer
15
+
16
+
17
+ class LibrarySerializer(BaseModelSerializer):
18
+ """Library Serializer."""
19
+
20
+ class Meta(BaseModelSerializer.Meta):
21
+ """Specify Model."""
22
+
23
+ model = Library
24
+ fields = (
25
+ "pk",
26
+ "path",
27
+ "events",
28
+ "last_poll",
29
+ "poll",
30
+ "poll_every",
31
+ "groups",
32
+ "covers_only",
33
+ )
34
+ read_only_fields = ("last_poll", "pk", "covers_only")
35
+
36
+ def validate_path(self, path):
37
+ """Validate new library paths."""
38
+ ppath = Path(path).resolve()
39
+ if not ppath.is_dir():
40
+ reason = "Not a valid folder on this server"
41
+ raise ValidationError(reason)
42
+ existing_path_strs = Library.objects.values_list("path", flat=True)
43
+ for existing_path_str in existing_path_strs:
44
+ existing_path = Path(existing_path_str)
45
+ if existing_path.is_relative_to(ppath):
46
+ reason = "Parent of existing library path"
47
+ raise ValidationError(reason)
48
+ if ppath.is_relative_to(existing_path):
49
+ reason = "Child of existing library path"
50
+ raise ValidationError(reason)
51
+ return path
52
+
53
+
54
+ class FailedImportSerializer(BaseModelSerializer):
55
+ """Failed Import Serializer."""
56
+
57
+ class Meta(BaseModelSerializer.Meta):
58
+ """Specify Model."""
59
+
60
+ model = FailedImport
61
+ fields = ("pk", "path", "created_at")
62
+ read_only_fields = ("pk", "path", "created_at")
63
+
64
+
65
+ class AdminFolderListSerializer(Serializer):
66
+ """Get a list of dirs."""
67
+
68
+ root_folder = CharField(read_only=True)
69
+ folders = ListField(child=CharField(read_only=True))
70
+
71
+
72
+ class AdminFolderSerializer(Serializer):
73
+ """Validate a dir."""
74
+
75
+ path = CharField(default=".")
76
+ show_hidden = BooleanField(default=False)
77
+
78
+ def validate_path(self, path):
79
+ """Validate the path is an existing directory."""
80
+ ppath = Path(path)
81
+ if not ppath.resolve().is_dir():
82
+ reason = "Not a directory"
83
+ raise ValidationError(reason)
84
+ return path
85
+
86
+ def validate_show_hidden(self, show_hidden):
87
+ """Snakecase the showHidden field."""
88
+ return (
89
+ show_hidden == "true" or self.initial_data.get("showHidden") == "true" # type: ignore
90
+ )
@@ -0,0 +1,114 @@
1
+ """Admin stats serializers."""
2
+
3
+ from rest_framework.fields import MultipleChoiceField
4
+ from rest_framework.serializers import (
5
+ BooleanField,
6
+ CharField,
7
+ IntegerField,
8
+ Serializer,
9
+ )
10
+
11
+ from codex.serializers.fields import CountDictField
12
+
13
+
14
+ class AdminGroupSerializer(Serializer):
15
+ """Group Counts."""
16
+
17
+ publishers_count = IntegerField(required=False, read_only=True)
18
+ imprints_count = IntegerField(required=False, read_only=True)
19
+ series_count = IntegerField(required=False, read_only=True)
20
+ volumes_count = IntegerField(required=False, read_only=True)
21
+ issues_count = IntegerField(required=False, read_only=True)
22
+ folders_count = IntegerField(required=False, read_only=True)
23
+ story_arcs_count = IntegerField(required=False, read_only=True)
24
+
25
+
26
+ class AdminFileTypeSerializer(Serializer):
27
+ """File Type Counts."""
28
+
29
+ pdf_count = IntegerField(required=False, read_only=True)
30
+ cbz_count = IntegerField(required=False, read_only=True)
31
+ cbr_count = IntegerField(required=False, read_only=True)
32
+ cbt_count = IntegerField(required=False, read_only=True)
33
+ unknown_count = IntegerField(required=False, read_only=True)
34
+
35
+
36
+ class AdminComicMetadataSerializer(Serializer):
37
+ """Metadata Counts."""
38
+
39
+ age_ratings_count = IntegerField(required=False, read_only=True)
40
+ characters_count = IntegerField(required=False, read_only=True)
41
+ contributors_count = IntegerField(required=False, read_only=True)
42
+ contributor_persons_count = IntegerField(required=False, read_only=True)
43
+ contributor_roles_count = IntegerField(required=False, read_only=True)
44
+ countries_count = IntegerField(required=False, read_only=True)
45
+ genres_count = IntegerField(required=False, read_only=True)
46
+ identifiers_count = IntegerField(required=False, read_only=True)
47
+ identifier_types_count = IntegerField(required=False, read_only=True)
48
+ languages_count = IntegerField(required=False, read_only=True)
49
+ locations_count = IntegerField(required=False, read_only=True)
50
+ original_formats_count = IntegerField(required=False, read_only=True)
51
+ series_groups_count = IntegerField(required=False, read_only=True)
52
+ scan_infos_count = IntegerField(required=False, read_only=True)
53
+ story_arcs_count = IntegerField(required=False)
54
+ story_arc_numbers_count = IntegerField(required=False, read_only=True)
55
+ tags_count = IntegerField(required=False, read_only=True)
56
+ taggers_count = IntegerField(required=False, read_only=True)
57
+ teams_count = IntegerField(required=False, read_only=True)
58
+
59
+
60
+ class AdminConfigSerializer(Serializer):
61
+ """Config Information."""
62
+
63
+ api_key = CharField(required=False, read_only=True)
64
+ user_groups_count = IntegerField(required=False, read_only=True)
65
+ libraries_count = IntegerField(required=False, read_only=True)
66
+ anonymous_users_count = IntegerField(required=False, read_only=True)
67
+ registered_users_count = IntegerField(required=False, read_only=True)
68
+
69
+
70
+ class AdminSessionsSerializer(Serializer):
71
+ """Session Settings."""
72
+
73
+ top_group = CountDictField(required=False, read_only=True)
74
+ order_by = CountDictField(required=False, read_only=True)
75
+ dynamic_covers = CountDictField(required=False, read_only=True)
76
+ finish_on_last_page = CountDictField(required=False, read_only=True)
77
+ fit_to = CountDictField(required=False, read_only=True)
78
+ reading_direction = CountDictField(required=False, read_only=True)
79
+
80
+
81
+ class AdminPlatformSerializer(Serializer):
82
+ """Platform Information."""
83
+
84
+ docker = BooleanField(read_only=True)
85
+ machine = CharField(read_only=True)
86
+ cores = IntegerField(read_only=True)
87
+ system = CharField(read_only=True)
88
+ system_release = CharField(read_only=True)
89
+ python = CharField(read_only=True)
90
+ codex = CharField(read_only=True)
91
+
92
+
93
+ class AdminStatsSerializer(Serializer):
94
+ """Admin Stats Tab."""
95
+
96
+ platform = AdminPlatformSerializer(required=False)
97
+ config = AdminConfigSerializer(required=False)
98
+ sessions = AdminSessionsSerializer(required=False)
99
+ groups = AdminGroupSerializer(required=False)
100
+ file_types = AdminFileTypeSerializer(required=False)
101
+ metadata = AdminComicMetadataSerializer(required=False)
102
+
103
+
104
+ class AdminStatsRequestSerializer(Serializer):
105
+ """Admin Stats Tab Request."""
106
+
107
+ PARAMS_CHOICES = ("groups", "fileTypes", "platform", "config", "groups", "metadata")
108
+ params = MultipleChoiceField(choices=PARAMS_CHOICES, required=False)
109
+
110
+
111
+ class APIKeySerializer(Serializer):
112
+ """API Key."""
113
+
114
+ api_key = CharField(source="name")
@@ -0,0 +1,16 @@
1
+ """Admin tasks serializers."""
2
+
3
+ from rest_framework.serializers import (
4
+ ChoiceField,
5
+ IntegerField,
6
+ Serializer,
7
+ )
8
+
9
+ from codex.serializers.choices import CHOICES
10
+
11
+
12
+ class AdminLibrarianTaskSerializer(Serializer):
13
+ """Get tasks from front end."""
14
+
15
+ task = ChoiceField(choices=CHOICES["admin"]["tasks"])
16
+ library_id = IntegerField(required=False)
@@ -0,0 +1,40 @@
1
+ """User serializers."""
2
+
3
+ from django.contrib.auth.models import User
4
+ from rest_framework.serializers import (
5
+ CharField,
6
+ DateTimeField,
7
+ Serializer,
8
+ )
9
+
10
+ from codex.serializers.models.base import BaseModelSerializer
11
+
12
+
13
+ class UserSerializer(BaseModelSerializer):
14
+ """User Serializer."""
15
+
16
+ last_active = DateTimeField(
17
+ read_only=True, source="useractive.updated_at", allow_null=True
18
+ )
19
+
20
+ class Meta(BaseModelSerializer.Meta):
21
+ """Specify Model."""
22
+
23
+ model = User
24
+ fields = (
25
+ "pk",
26
+ "username",
27
+ "groups",
28
+ "is_staff",
29
+ "is_active",
30
+ "last_active",
31
+ "last_login",
32
+ "date_joined",
33
+ )
34
+ read_only_fields = ("pk", "last_active", "last_login", "date_joined")
35
+
36
+
37
+ class UserChangePasswordSerializer(Serializer):
38
+ """Special User Change Password Serializer."""
39
+
40
+ password = CharField(write_only=True)
@@ -10,6 +10,7 @@ from rest_framework.serializers import (
10
10
  BooleanField,
11
11
  CharField,
12
12
  ChoiceField,
13
+ DictField,
13
14
  FloatField,
14
15
  IntegerField,
15
16
  ListField,
@@ -147,3 +148,9 @@ class LanguageField(PyCountryField):
147
148
  """Serializer to long language name."""
148
149
 
149
150
  LOOKUP_MODULE = pycountry.languages
151
+
152
+
153
+ class CountDictField(DictField):
154
+ """Dict for counting things."""
155
+
156
+ child = IntegerField(read_only=True)
@@ -10,7 +10,10 @@ from rest_framework.serializers import (
10
10
  )
11
11
 
12
12
  from codex.models import Bookmark
13
- from codex.serializers.browser.settings import BrowserSettingsShowGroupFlagsSerializer
13
+ from codex.serializers.browser.settings import (
14
+ BrowserSettingsFilterSerializer,
15
+ BrowserSettingsShowGroupFlagsSerializer,
16
+ )
14
17
  from codex.serializers.fields import BreadcrumbsField, TimestampField, TopGroupField
15
18
  from codex.serializers.route import RouteSerializer, SimpleRouteSerializer
16
19
 
@@ -43,10 +46,11 @@ class ReaderComicSerializer(Serializer):
43
46
  class ReaderArcSerializer(SimpleRouteSerializer):
44
47
  """Information about the current Arc."""
45
48
 
46
- name = CharField(required=False)
47
- index = IntegerField(required=False)
48
49
  count = IntegerField(required=False)
50
+ index = IntegerField(required=False)
51
+ filters = BrowserSettingsFilterSerializer(required=False)
49
52
  mtime = TimestampField(read_only=True)
53
+ name = CharField(required=False)
50
54
 
51
55
 
52
56
  class ReaderViewInputSerializer(Serializer):
@@ -54,6 +58,7 @@ class ReaderViewInputSerializer(Serializer):
54
58
 
55
59
  arc = ReaderArcSerializer(required=False)
56
60
  breadcrumbs = BreadcrumbsField(required=False)
61
+ browser_arc = ReaderArcSerializer(required=False)
57
62
  show = BrowserSettingsShowGroupFlagsSerializer(required=False)
58
63
  top_group = TopGroupField(required=False)
59
64
 
@@ -0,0 +1 @@
1
+ import{m as g,V as t}from"./VCheckboxBtn-DB72Bclg.js";import{a as A,u as I,V as l}from"./VSelectionControl-DImIQPJV.js";import{F as B,aq as U,P as R,ay as q,G as D,h as E,S as G,cE as M,T as u,au as r}from"./admin-drawer-panel-c3f3H29x.js";const N=B({...A(),...U(g(),["inline"])},"VCheckbox"),j=R()({name:"VCheckbox",inheritAttrs:!1,props:N(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=q(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=D(),p=E(()=>e.id||`checkbox-${V}`);return G(()=>{const[b,f]=M(d),v=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:y,isValid:C}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:y.value},f,{error:C.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{j as V};
@@ -0,0 +1 @@
1
+ import{m as g,V as t}from"./VCheckboxBtn-DB72Bclg.js";import{a as A,u as I,V as l}from"./VSelectionControl-DImIQPJV.js";import{F as B,aq as U,P as R,ay as q,G as D,h as E,S as G,cE as M,T as u,au as r}from"./admin-drawer-panel-c3f3H29x.js";const N=B({...A(),...U(g(),["inline"])},"VCheckbox"),j=R()({name:"VCheckbox",inheritAttrs:!1,props:N(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=q(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=D(),p=E(()=>e.id||`checkbox-${V}`);return G(()=>{const[b,f]=M(d),v=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:y,isValid:C}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:y.value},f,{error:C.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{j as V};
@@ -0,0 +1 @@
1
+ import{c as f,d as o}from"./VSelectionControl-DImIQPJV.js";import{F as V,bf as v,P as I,ay as c,h as l,S as h,aq as k,T as x,au as b}from"./admin-drawer-panel-c3f3H29x.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:v,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:u}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function s(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return h(()=>{const a=k(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,s],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),u)}),{}}});export{B as V,C as m};
@@ -0,0 +1 @@
1
+ import{c as f,d as o}from"./VSelectionControl-DImIQPJV.js";import{F as V,bf as v,P as I,ay as c,h as l,S as h,aq as k,T as x,au as b}from"./admin-drawer-panel-c3f3H29x.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:v,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:u}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function s(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return h(()=>{const a=k(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,s],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),u)}),{}}});export{B as V,C as m};
@@ -1 +1 @@
1
- import{m as Ce,u as ke,V as pe,a as we,b as Se}from"./VSelect-BBy4FHPj.js";import{m as Fe,V as G}from"./VTextField-DuT-8VmG.js";import{E as Ie,ao as Pe,b3 as De,O as Re,bZ as Ae,r as N,s as P,aw as J,h as b,cN as _e,aq as Te,cO as D,a as R,n as X,ag as Ee,R as Me,S as i,U as O,as as I,bv as Ne,aY as ee,cP as Oe,aP as le,cQ as Le,bg as Ke,aj as Ue,cR as Be,at as je,cS as qe,cT as ze}from"./admin-drawer-panel-SpPhIMP4.js";import{m as He,u as $e}from"./filter-D0YNadTH.js";import{g as Qe}from"./VSelectionControl-D4e-QshF.js";import{V as We}from"./VCheckboxBtn-ssJU_z8r.js";function Ye(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(O,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ze=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ze(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var W;let{emit:A,slots:o}=g;const{t:L}=Ae(),V=N(),x=P(!1),C=P(!0),K=P(!1),H=N(),$=N(),U=J(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=H.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),Q=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=J(e,"modelValue",[],l=>ne(ze(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=Qe(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),k=P(!e.multiple&&!y.value?((W=n.value[0])==null?void 0:W.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!y.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),k.value="")}l||(s.value=-1),C.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(k,l=>{B?X(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!y.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=$e(e,te,()=>C.value?"":v.value),p=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=p.value[0])==null?void 0:t.title))&&p.value.length>0&&!C.value&&!K.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),z=N(),{onListScroll:ve,onListKeydown:de}=ke(z,V);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){q.value||(c.value=!0)}function be(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(qe(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(T.value[0]),C.value=!0),l.key==="ArrowDown"&&j.value&&((a=z.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),y.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(C.value=!0,(l=V.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],k.value=r&&!y.value?l.title:"",X(()=>{c.value=!1,C.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function Ve(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?k.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Ee&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=$.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Me(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=G.filterProps(e);return i(G,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(O,null,[i(pe,I({ref:H,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Ne,I({ref:z,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:L(e.noDataText)},null)),i(we,{ref:$,renderless:!0,items:p.value},{default:w=>{var Z;let{item:d,index:S,itemRef:f}=w;const Y=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Z=o.item)==null?void 0:Z.call(o,{item:d,index:S,props:Y}))??i(ee,I(Y,{role:"option"}),{prepend:E=>{let{isSelected:M}=E;return i(O,null,[e.multiple&&!e.hideSelected?i(We,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Oe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var E,M;return C.value?d.title:Ye(d.title,(E=re(d))==null?void 0:E.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Le(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(O,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":L(Q.value),title:L(Q.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:C,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},V)}});export{tl as V};
1
+ import{m as Ce,u as ke,V as pe,a as we,b as Se}from"./VSelect-Dd5Zy8Uy.js";import{m as Fe,V as X}from"./VTextField-fNAzFu1M.js";import{F as Ie,aq as Pe,b5 as De,P as Re,c0 as _e,r as L,s as P,ay as Y,h as b,cQ as Ae,as as Te,cR as D,a as R,n as Z,ai as Me,S as Ee,T as i,V as N,au as I,bx as Le,a_ as ee,cS as Ne,aR as le,cT as Oe,bi as Ke,al as Ue,cU as Be,av as je,cV as qe,cW as ze}from"./admin-drawer-panel-c3f3H29x.js";import{m as He,u as We}from"./filter-XMAX5Nmg.js";import{g as $e}from"./VSelectionControl-DImIQPJV.js";import{V as Qe}from"./VCheckboxBtn-DB72Bclg.js";function Ge(e,g,_){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,_)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+_)])]):e}const Je=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Je(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var Q;let{emit:_,slots:o}=g;const{t:O}=_e(),V=L(),x=P(!1),C=P(!0),K=P(!1),H=L(),W=L(),U=Y(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=H.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=Ae(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=Y(e,"modelValue",[],l=>ne(ze(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),A=b(()=>!!(e.chips||o.chip)),y=b(()=>A.value||!!o.selection),k=P(!e.multiple&&!y.value?((Q=n.value[0])==null?void 0:Q.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!y.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),k.value="")}l||(s.value=-1),C.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(k,l=>{B?Z(()=>B=!1):x.value&&!c.value&&(c.value=!0),_("update:search",l)}),R(n,l=>{var t;!e.multiple&&!y.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>C.value?"":v.value),p=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=p.value[0])==null?void 0:t.title))&&p.value.length>0&&!C.value&&!K.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),z=L(),{onListScroll:ve,onListKeydown:de}=ke(z,V);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){q.value||(c.value=!0)}function be(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(qe(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(T.value[0]),C.value=!0),l.key==="ArrowDown"&&j.value&&((a=z.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),y.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(C.value=!0,(l=V.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],k.value=r&&!y.value?l.title:"",Z(()=>{c.value=!1,C.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function Ve(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?k.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(pe,I({ref:H,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:z,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:p.value},{default:w=>{var J;let{item:d,index:S,itemRef:f}=w;const G=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((J=o.item)==null?void 0:J.call(o,{item:d,index:S,props:G}))??i(ee,I(G,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return C.value?d.title:Ge(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=A.value?!!o.chip:!!o.selection,S=d?Oe(A.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[A.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:C,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},V)}});export{tl as V};
@@ -1 +1 @@
1
- import{m as Ce,u as ke,V as pe,a as we,b as Se}from"./VSelect-BBy4FHPj.js";import{m as Fe,V as G}from"./VTextField-DuT-8VmG.js";import{E as Ie,ao as Pe,b3 as De,O as Re,bZ as Ae,r as N,s as P,aw as J,h as b,cN as _e,aq as Te,cO as D,a as R,n as X,ag as Ee,R as Me,S as i,U as O,as as I,bv as Ne,aY as ee,cP as Oe,aP as le,cQ as Le,bg as Ke,aj as Ue,cR as Be,at as je,cS as qe,cT as ze}from"./admin-drawer-panel-SpPhIMP4.js";import{m as He,u as $e}from"./filter-D0YNadTH.js";import{g as Qe}from"./VSelectionControl-D4e-QshF.js";import{V as We}from"./VCheckboxBtn-ssJU_z8r.js";function Ye(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(O,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ze=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ze(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var W;let{emit:A,slots:o}=g;const{t:L}=Ae(),V=N(),x=P(!1),C=P(!0),K=P(!1),H=N(),$=N(),U=J(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=H.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),Q=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=J(e,"modelValue",[],l=>ne(ze(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=Qe(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),k=P(!e.multiple&&!y.value?((W=n.value[0])==null?void 0:W.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!y.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),k.value="")}l||(s.value=-1),C.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(k,l=>{B?X(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!y.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=$e(e,te,()=>C.value?"":v.value),p=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=p.value[0])==null?void 0:t.title))&&p.value.length>0&&!C.value&&!K.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),z=N(),{onListScroll:ve,onListKeydown:de}=ke(z,V);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){q.value||(c.value=!0)}function be(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(qe(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(T.value[0]),C.value=!0),l.key==="ArrowDown"&&j.value&&((a=z.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),y.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(C.value=!0,(l=V.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],k.value=r&&!y.value?l.title:"",X(()=>{c.value=!1,C.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function Ve(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?k.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Ee&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=$.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Me(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=G.filterProps(e);return i(G,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(O,null,[i(pe,I({ref:H,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Ne,I({ref:z,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:L(e.noDataText)},null)),i(we,{ref:$,renderless:!0,items:p.value},{default:w=>{var Z;let{item:d,index:S,itemRef:f}=w;const Y=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Z=o.item)==null?void 0:Z.call(o,{item:d,index:S,props:Y}))??i(ee,I(Y,{role:"option"}),{prepend:E=>{let{isSelected:M}=E;return i(O,null,[e.multiple&&!e.hideSelected?i(We,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Oe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var E,M;return C.value?d.title:Ye(d.title,(E=re(d))==null?void 0:E.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Le(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(O,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":L(Q.value),title:L(Q.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:C,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},V)}});export{tl as V};
1
+ import{m as Ce,u as ke,V as pe,a as we,b as Se}from"./VSelect-Dd5Zy8Uy.js";import{m as Fe,V as X}from"./VTextField-fNAzFu1M.js";import{F as Ie,aq as Pe,b5 as De,P as Re,c0 as _e,r as L,s as P,ay as Y,h as b,cQ as Ae,as as Te,cR as D,a as R,n as Z,ai as Me,S as Ee,T as i,V as N,au as I,bx as Le,a_ as ee,cS as Ne,aR as le,cT as Oe,bi as Ke,al as Ue,cU as Be,av as je,cV as qe,cW as ze}from"./admin-drawer-panel-c3f3H29x.js";import{m as He,u as We}from"./filter-XMAX5Nmg.js";import{g as $e}from"./VSelectionControl-DImIQPJV.js";import{V as Qe}from"./VCheckboxBtn-DB72Bclg.js";function Ge(e,g,_){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,_)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+_)])]):e}const Je=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...He({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Je(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var Q;let{emit:_,slots:o}=g;const{t:O}=_e(),V=L(),x=P(!1),C=P(!0),K=P(!1),H=L(),W=L(),U=Y(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=H.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=Ae(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=Y(e,"modelValue",[],l=>ne(ze(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),A=b(()=>!!(e.chips||o.chip)),y=b(()=>A.value||!!o.selection),k=P(!e.multiple&&!y.value?((Q=n.value[0])==null?void 0:Q.title)??"":""),v=b({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!y.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),k.value="")}l||(s.value=-1),C.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(k,l=>{B?Z(()=>B=!1):x.value&&!c.value&&(c.value=!0),_("update:search",l)}),R(n,l=>{var t;!e.multiple&&!y.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>C.value?"":v.value),p=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=p.value[0])==null?void 0:t.title))&&p.value.length>0&&!C.value&&!K.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),z=L(),{onListScroll:ve,onListKeydown:de}=ke(z,V);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){q.value||(c.value=!0)}function be(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(qe(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(T.value[0]),C.value=!0),l.key==="ArrowDown"&&j.value&&((a=z.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),y.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(C.value=!0,(l=V.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],k.value=r&&!y.value?l.title:"",Z(()=>{c.value=!1,C.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function ye(l){K.value=!1}function Ve(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?k.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(pe,I({ref:H,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:z,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:ye,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:p.value},{default:w=>{var J;let{item:d,index:S,itemRef:f}=w;const G=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((J=o.item)==null?void 0:J.call(o,{item:d,index:S,props:G}))??i(ee,I(G,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return C.value?d.title:Ge(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=A.value?!!o.chip:!!o.selection,S=d?Oe(A.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[A.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:C,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},V)}});export{tl as V};