codex 1.6.0a7__py3-none-any.whl → 1.6.0a9__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 (517) hide show
  1. codex/integrity.py +5 -6
  2. codex/librarian/importer/{aggregate_metadata.py → aggregate.py} +54 -76
  3. codex/librarian/importer/cache.py +162 -29
  4. codex/librarian/importer/const.py +15 -6
  5. codex/librarian/importer/create_comics.py +101 -17
  6. codex/librarian/importer/create_covers.py +96 -0
  7. codex/librarian/importer/create_fks.py +73 -170
  8. codex/librarian/importer/deleted.py +59 -46
  9. codex/librarian/importer/{clean_metadata.py → extract.py} +33 -4
  10. codex/librarian/importer/failed_imports.py +42 -64
  11. codex/librarian/importer/importer.py +96 -0
  12. codex/librarian/importer/importerd.py +71 -397
  13. codex/librarian/importer/init.py +265 -0
  14. codex/librarian/importer/link_comics.py +26 -81
  15. codex/librarian/importer/link_covers.py +73 -0
  16. codex/librarian/importer/moved.py +76 -104
  17. codex/librarian/importer/query_covers.py +52 -0
  18. codex/librarian/importer/query_fks.py +128 -172
  19. codex/librarian/importer/status.py +2 -39
  20. codex/librarian/importer/tasks.py +22 -13
  21. codex/librarian/janitor/cleanup.py +2 -2
  22. codex/librarian/janitor/janitor.py +10 -0
  23. codex/librarian/librariand.py +7 -1
  24. codex/migrations/0027_import_order_and_covers.py +345 -0
  25. codex/models/comic.py +1 -2
  26. codex/models/groups.py +3 -2
  27. codex/models/paths.py +0 -1
  28. codex/search/query.py +25 -2
  29. codex/search/writing.py +1 -1
  30. codex/serializers/browser/mixins.py +0 -18
  31. codex/serializers/browser/mtime.py +21 -0
  32. codex/serializers/browser/settings.py +2 -3
  33. codex/serializers/choices.py +10 -1
  34. codex/serializers/fields.py +8 -9
  35. codex/serializers/reader.py +5 -5
  36. codex/serializers/route.py +9 -4
  37. codex/settings/settings.py +2 -2
  38. codex/static_root/assets/{VCheckbox-BOUtyxuo.c690f0cdbe48.js → VCheckbox-eNspVUje.da8282a08876.js} +1 -1
  39. codex/static_root/assets/VCheckbox-eNspVUje.da8282a08876.js.br +0 -0
  40. codex/static_root/assets/VCheckbox-eNspVUje.da8282a08876.js.gz +0 -0
  41. codex/static_root/assets/{VCheckbox-BOUtyxuo.js → VCheckbox-eNspVUje.js} +1 -1
  42. codex/static_root/assets/VCheckbox-eNspVUje.js.br +0 -0
  43. codex/static_root/assets/VCheckbox-eNspVUje.js.gz +0 -0
  44. codex/static_root/assets/{VCheckboxBtn-B1-m5pEh.e2b8cbdb92c9.js → VCheckboxBtn-DLzF_WHB.9a47873b8548.js} +1 -1
  45. codex/static_root/assets/VCheckboxBtn-DLzF_WHB.9a47873b8548.js.br +0 -0
  46. codex/static_root/assets/VCheckboxBtn-DLzF_WHB.9a47873b8548.js.gz +0 -0
  47. codex/static_root/assets/{VCheckboxBtn-B1-m5pEh.js → VCheckboxBtn-DLzF_WHB.js} +1 -1
  48. codex/static_root/assets/VCheckboxBtn-DLzF_WHB.js.br +0 -0
  49. codex/static_root/assets/VCheckboxBtn-DLzF_WHB.js.gz +0 -0
  50. codex/static_root/assets/{VCombobox-DjkDXe33.22617ea193b1.js → VCombobox-BIO7lU_B.d607ada71b06.js} +1 -1
  51. codex/static_root/assets/VCombobox-BIO7lU_B.d607ada71b06.js.br +0 -0
  52. codex/static_root/assets/VCombobox-BIO7lU_B.d607ada71b06.js.gz +0 -0
  53. codex/static_root/assets/{VCombobox-DjkDXe33.js → VCombobox-BIO7lU_B.js} +1 -1
  54. codex/static_root/assets/VCombobox-BIO7lU_B.js.br +0 -0
  55. codex/static_root/assets/VCombobox-BIO7lU_B.js.gz +0 -0
  56. codex/static_root/assets/{VDialog-X0zn9AGX.0d89c749b9a6.js → VDialog-87AymJC5.4a46716358c0.js} +1 -1
  57. codex/static_root/assets/VDialog-87AymJC5.4a46716358c0.js.br +0 -0
  58. codex/static_root/assets/VDialog-87AymJC5.4a46716358c0.js.gz +0 -0
  59. codex/static_root/assets/{VDialog-X0zn9AGX.js → VDialog-87AymJC5.js} +1 -1
  60. codex/static_root/assets/VDialog-87AymJC5.js.br +0 -0
  61. codex/static_root/assets/VDialog-87AymJC5.js.gz +0 -0
  62. codex/static_root/assets/{VExpansionPanels-CRevojaF.43d65c777c58.js → VExpansionPanels-CgA3shsd.9e524c73726a.js} +1 -1
  63. codex/static_root/assets/VExpansionPanels-CgA3shsd.9e524c73726a.js.br +0 -0
  64. codex/static_root/assets/VExpansionPanels-CgA3shsd.9e524c73726a.js.gz +0 -0
  65. codex/static_root/assets/{VExpansionPanels-CRevojaF.js → VExpansionPanels-CgA3shsd.js} +1 -1
  66. codex/static_root/assets/VExpansionPanels-CgA3shsd.js.br +0 -0
  67. codex/static_root/assets/VExpansionPanels-CgA3shsd.js.gz +0 -0
  68. codex/static_root/assets/{VRadioGroup-8nrrxjDv.2b4dfb984a8c.js → VRadioGroup-B--7K_v5.4a4e9c2d6c42.js} +1 -1
  69. codex/static_root/assets/VRadioGroup-B--7K_v5.4a4e9c2d6c42.js.br +0 -0
  70. codex/static_root/assets/VRadioGroup-B--7K_v5.4a4e9c2d6c42.js.gz +0 -0
  71. codex/static_root/assets/{VRadioGroup-8nrrxjDv.js → VRadioGroup-B--7K_v5.js} +1 -1
  72. codex/static_root/assets/VRadioGroup-B--7K_v5.js.br +0 -0
  73. codex/static_root/assets/VRadioGroup-B--7K_v5.js.gz +0 -0
  74. codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css +1 -0
  75. codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css.br +0 -0
  76. codex/static_root/assets/VSelect-ARDhJiQK.372c098fb475.css.gz +0 -0
  77. codex/static_root/assets/VSelect-ARDhJiQK.css +1 -0
  78. codex/static_root/assets/VSelect-ARDhJiQK.css.br +0 -0
  79. codex/static_root/assets/VSelect-ARDhJiQK.css.gz +0 -0
  80. codex/static_root/assets/VSelect-BoJq222l.fc714657e214.js +1 -0
  81. codex/static_root/assets/VSelect-BoJq222l.fc714657e214.js.br +0 -0
  82. codex/static_root/assets/VSelect-BoJq222l.fc714657e214.js.gz +0 -0
  83. codex/static_root/assets/VSelect-BoJq222l.js +1 -0
  84. codex/static_root/assets/VSelect-BoJq222l.js.br +0 -0
  85. codex/static_root/assets/VSelect-BoJq222l.js.gz +0 -0
  86. codex/static_root/assets/{VSelectionControl-CGu0oz0K.3030b7a270d6.js → VSelectionControl-CVQ9wkE2.c02186cceba6.js} +1 -1
  87. codex/static_root/assets/VSelectionControl-CVQ9wkE2.c02186cceba6.js.br +0 -0
  88. codex/static_root/assets/VSelectionControl-CVQ9wkE2.c02186cceba6.js.gz +0 -0
  89. codex/static_root/assets/{VSelectionControl-CGu0oz0K.js → VSelectionControl-CVQ9wkE2.js} +1 -1
  90. codex/static_root/assets/VSelectionControl-CVQ9wkE2.js.br +0 -0
  91. codex/static_root/assets/VSelectionControl-CVQ9wkE2.js.gz +0 -0
  92. codex/static_root/assets/{VSlideGroup-D_oNvCOd.71a7101cdddd.js → VSlideGroup-Ce0j2BKK.85e64443a928.js} +1 -1
  93. codex/static_root/assets/VSlideGroup-Ce0j2BKK.85e64443a928.js.br +0 -0
  94. codex/static_root/assets/VSlideGroup-Ce0j2BKK.85e64443a928.js.gz +0 -0
  95. codex/static_root/assets/{VSlideGroup-D_oNvCOd.js → VSlideGroup-Ce0j2BKK.js} +1 -1
  96. codex/static_root/assets/VSlideGroup-Ce0j2BKK.js.br +0 -0
  97. codex/static_root/assets/VSlideGroup-Ce0j2BKK.js.gz +0 -0
  98. codex/static_root/assets/{VTable-C7pKI7gU.087912f706f5.js → VTable-CrWkhkiP.6d530eea0c09.js} +1 -1
  99. codex/static_root/assets/VTable-CrWkhkiP.6d530eea0c09.js.br +0 -0
  100. codex/static_root/assets/VTable-CrWkhkiP.6d530eea0c09.js.gz +0 -0
  101. codex/static_root/assets/{VTable-C7pKI7gU.js → VTable-CrWkhkiP.js} +1 -1
  102. codex/static_root/assets/VTable-CrWkhkiP.js.br +0 -0
  103. codex/static_root/assets/VTable-CrWkhkiP.js.gz +0 -0
  104. codex/static_root/assets/{VTextField-Bs8oq9mk.js → VTextField-CkWbil3K.2cac13161dfe.js} +1 -1
  105. codex/static_root/assets/VTextField-CkWbil3K.2cac13161dfe.js.br +0 -0
  106. codex/static_root/assets/VTextField-CkWbil3K.2cac13161dfe.js.gz +0 -0
  107. codex/static_root/assets/{VTextField-Bs8oq9mk.7999fef12a03.js → VTextField-CkWbil3K.js} +1 -1
  108. codex/static_root/assets/VTextField-CkWbil3K.js.br +0 -0
  109. codex/static_root/assets/VTextField-CkWbil3K.js.gz +0 -0
  110. codex/static_root/assets/{VWindowItem-iyZ1XOkP.409f7d292253.js → VWindowItem-7z55Y4lK.98eb7487e039.js} +1 -1
  111. codex/static_root/assets/VWindowItem-7z55Y4lK.98eb7487e039.js.br +0 -0
  112. codex/static_root/assets/VWindowItem-7z55Y4lK.98eb7487e039.js.gz +0 -0
  113. codex/static_root/assets/{VWindowItem-iyZ1XOkP.js → VWindowItem-7z55Y4lK.js} +1 -1
  114. codex/static_root/assets/VWindowItem-7z55Y4lK.js.br +0 -0
  115. codex/static_root/assets/VWindowItem-7z55Y4lK.js.gz +0 -0
  116. codex/static_root/assets/{admin-B0pCBjma.2407da79bd20.js → admin-D3OK784R.f69891726ec5.js} +1 -1
  117. codex/static_root/assets/admin-D3OK784R.f69891726ec5.js.br +0 -0
  118. codex/static_root/assets/admin-D3OK784R.f69891726ec5.js.gz +0 -0
  119. codex/static_root/assets/{admin-B0pCBjma.js → admin-D3OK784R.js} +1 -1
  120. codex/static_root/assets/admin-D3OK784R.js.br +0 -0
  121. codex/static_root/assets/admin-D3OK784R.js.gz +0 -0
  122. codex/static_root/assets/{admin-drawer-panel-BxoNUHQr.5e2e1a4a255d.js → admin-drawer-panel-1pnfvY8O.5438f252970e.js} +11 -11
  123. codex/static_root/assets/admin-drawer-panel-1pnfvY8O.5438f252970e.js.br +0 -0
  124. codex/static_root/assets/admin-drawer-panel-1pnfvY8O.5438f252970e.js.gz +0 -0
  125. codex/static_root/assets/{admin-drawer-panel-BxoNUHQr.js → admin-drawer-panel-1pnfvY8O.js} +11 -11
  126. codex/static_root/assets/admin-drawer-panel-1pnfvY8O.js.br +0 -0
  127. codex/static_root/assets/admin-drawer-panel-1pnfvY8O.js.gz +0 -0
  128. codex/static_root/assets/browser-BuU2x9y7.css +1 -0
  129. codex/static_root/assets/browser-BuU2x9y7.css.br +0 -0
  130. codex/static_root/assets/browser-BuU2x9y7.css.gz +0 -0
  131. codex/static_root/assets/browser-BuU2x9y7.f67595d24664.css +1 -0
  132. codex/static_root/assets/browser-BuU2x9y7.f67595d24664.css.br +0 -0
  133. codex/static_root/assets/browser-BuU2x9y7.f67595d24664.css.gz +0 -0
  134. codex/static_root/assets/browser-CO9EYHIr.be49367c6a75.js +1 -0
  135. codex/static_root/assets/browser-CO9EYHIr.be49367c6a75.js.br +0 -0
  136. codex/static_root/assets/browser-CO9EYHIr.be49367c6a75.js.gz +0 -0
  137. codex/static_root/assets/browser-CO9EYHIr.js +1 -0
  138. codex/static_root/assets/browser-CO9EYHIr.js.br +0 -0
  139. codex/static_root/assets/browser-CO9EYHIr.js.gz +0 -0
  140. codex/static_root/assets/{change-password-dialog-DZ9dP8_F.930f4cae3cb0.js → change-password-dialog-CjZdzaIk.188c765431ab.js} +1 -1
  141. codex/static_root/assets/change-password-dialog-CjZdzaIk.188c765431ab.js.br +0 -0
  142. codex/static_root/assets/change-password-dialog-CjZdzaIk.188c765431ab.js.gz +0 -0
  143. codex/static_root/assets/{change-password-dialog-DZ9dP8_F.js → change-password-dialog-CjZdzaIk.js} +1 -1
  144. codex/static_root/assets/change-password-dialog-CjZdzaIk.js.br +0 -0
  145. codex/static_root/assets/change-password-dialog-CjZdzaIk.js.gz +0 -0
  146. codex/static_root/assets/{confirm-dialog-RP7JNStF.a752a7c1e697.js → confirm-dialog-jwL7B98r.1cfd579cbcfe.js} +1 -1
  147. codex/static_root/assets/confirm-dialog-jwL7B98r.1cfd579cbcfe.js.br +0 -0
  148. codex/static_root/assets/confirm-dialog-jwL7B98r.1cfd579cbcfe.js.gz +0 -0
  149. codex/static_root/assets/{confirm-dialog-RP7JNStF.js → confirm-dialog-jwL7B98r.js} +1 -1
  150. codex/static_root/assets/confirm-dialog-jwL7B98r.js.br +0 -0
  151. codex/static_root/assets/confirm-dialog-jwL7B98r.js.gz +0 -0
  152. codex/static_root/assets/datetime-column-9w3GcKvo.f9172256f091.js +1 -0
  153. codex/static_root/assets/datetime-column-9w3GcKvo.f9172256f091.js.br +0 -0
  154. codex/static_root/assets/datetime-column-9w3GcKvo.f9172256f091.js.gz +0 -0
  155. codex/static_root/assets/datetime-column-9w3GcKvo.js +1 -0
  156. codex/static_root/assets/datetime-column-9w3GcKvo.js.br +0 -0
  157. codex/static_root/assets/datetime-column-9w3GcKvo.js.gz +0 -0
  158. codex/static_root/assets/datetime-column-DeCthByU.1f3bf499e063.css +1 -0
  159. codex/static_root/assets/datetime-column-DeCthByU.css +1 -0
  160. codex/static_root/assets/{filter-DAdGUt-1.3261cbcd50b5.js → filter-C-pghOri.eeb7c2ecf398.js} +1 -1
  161. codex/static_root/assets/filter-C-pghOri.eeb7c2ecf398.js.br +0 -0
  162. codex/static_root/assets/filter-C-pghOri.eeb7c2ecf398.js.gz +0 -0
  163. codex/static_root/assets/{filter-DAdGUt-1.js → filter-C-pghOri.js} +1 -1
  164. codex/static_root/assets/filter-C-pghOri.js.br +0 -0
  165. codex/static_root/assets/filter-C-pghOri.js.gz +0 -0
  166. codex/static_root/assets/flag-tab-Da2DBNyz.ffbe5ca37e1c.js +1 -0
  167. codex/static_root/assets/flag-tab-Da2DBNyz.ffbe5ca37e1c.js.br +0 -0
  168. codex/static_root/assets/flag-tab-Da2DBNyz.ffbe5ca37e1c.js.gz +0 -0
  169. codex/static_root/assets/flag-tab-Da2DBNyz.js +1 -0
  170. codex/static_root/assets/flag-tab-Da2DBNyz.js.br +0 -0
  171. codex/static_root/assets/flag-tab-Da2DBNyz.js.gz +0 -0
  172. codex/static_root/assets/{group-tab-DEwh4jfB.a95097b5e320.js → group-tab-BONYWOc1.6ddf321a4a56.js} +1 -1
  173. codex/static_root/assets/group-tab-BONYWOc1.6ddf321a4a56.js.br +0 -0
  174. codex/static_root/assets/group-tab-BONYWOc1.6ddf321a4a56.js.gz +0 -0
  175. codex/static_root/assets/{group-tab-DEwh4jfB.js → group-tab-BONYWOc1.js} +1 -1
  176. codex/static_root/assets/group-tab-BONYWOc1.js.br +0 -0
  177. codex/static_root/assets/group-tab-BONYWOc1.js.gz +0 -0
  178. codex/static_root/assets/http-error-D2Jnc20C.32846bc3a43d.js +1 -0
  179. codex/static_root/assets/http-error-D2Jnc20C.32846bc3a43d.js.br +0 -0
  180. codex/static_root/assets/http-error-D2Jnc20C.32846bc3a43d.js.gz +0 -0
  181. codex/static_root/assets/http-error-D2Jnc20C.js +1 -0
  182. codex/static_root/assets/http-error-D2Jnc20C.js.br +0 -0
  183. codex/static_root/assets/http-error-D2Jnc20C.js.gz +0 -0
  184. codex/static_root/assets/{library-tab-DrXvD9B2.js → library-tab-B419agXA.d4b778172aaa.js} +1 -1
  185. codex/static_root/assets/library-tab-B419agXA.d4b778172aaa.js.br +0 -0
  186. codex/static_root/assets/library-tab-B419agXA.d4b778172aaa.js.gz +0 -0
  187. codex/static_root/assets/{library-tab-DrXvD9B2.f765f9d3bae4.js → library-tab-B419agXA.js} +1 -1
  188. codex/static_root/assets/library-tab-B419agXA.js.br +0 -0
  189. codex/static_root/assets/library-tab-B419agXA.js.gz +0 -0
  190. codex/static_root/assets/main-CMQwJ9aG.9836fe81c80a.js +32 -0
  191. codex/static_root/assets/main-CMQwJ9aG.9836fe81c80a.js.br +0 -0
  192. codex/static_root/assets/main-CMQwJ9aG.9836fe81c80a.js.gz +0 -0
  193. codex/static_root/assets/main-CMQwJ9aG.js +32 -0
  194. codex/static_root/assets/main-CMQwJ9aG.js.br +0 -0
  195. codex/static_root/assets/main-CMQwJ9aG.js.gz +0 -0
  196. codex/static_root/assets/pagination-toolbar-DWdp_kmz.css +1 -0
  197. codex/static_root/assets/pagination-toolbar-DWdp_kmz.css.br +0 -0
  198. codex/static_root/assets/pagination-toolbar-DWdp_kmz.css.gz +0 -0
  199. codex/static_root/assets/pagination-toolbar-DWdp_kmz.f98f47e87612.css +1 -0
  200. codex/static_root/assets/pagination-toolbar-DWdp_kmz.f98f47e87612.css.br +0 -0
  201. codex/static_root/assets/pagination-toolbar-DWdp_kmz.f98f47e87612.css.gz +0 -0
  202. codex/static_root/assets/pagination-toolbar-LTuj5U-G.a295defbcd2f.js +1 -0
  203. codex/static_root/assets/pagination-toolbar-LTuj5U-G.a295defbcd2f.js.br +0 -0
  204. codex/static_root/assets/pagination-toolbar-LTuj5U-G.a295defbcd2f.js.gz +0 -0
  205. codex/static_root/assets/pagination-toolbar-LTuj5U-G.js +1 -0
  206. codex/static_root/assets/pagination-toolbar-LTuj5U-G.js.br +0 -0
  207. codex/static_root/assets/pagination-toolbar-LTuj5U-G.js.gz +0 -0
  208. codex/static_root/assets/{pdf-doc-obrBwxa6.ec9bd13a5786.js → pdf-doc-8RVZqILx.2e7166dd26fb.js} +1 -1
  209. codex/static_root/assets/pdf-doc-8RVZqILx.2e7166dd26fb.js.br +0 -0
  210. codex/static_root/assets/pdf-doc-8RVZqILx.2e7166dd26fb.js.gz +0 -0
  211. codex/static_root/assets/{pdf-doc-obrBwxa6.js → pdf-doc-8RVZqILx.js} +1 -1
  212. codex/static_root/assets/pdf-doc-8RVZqILx.js.br +0 -0
  213. codex/static_root/assets/pdf-doc-8RVZqILx.js.gz +0 -0
  214. codex/static_root/assets/reader-CCCfpM3x.1553e45bd775.css +1 -0
  215. codex/static_root/assets/reader-CCCfpM3x.1553e45bd775.css.br +0 -0
  216. codex/static_root/assets/reader-CCCfpM3x.1553e45bd775.css.gz +0 -0
  217. codex/static_root/assets/reader-CCCfpM3x.css +1 -0
  218. codex/static_root/assets/reader-CCCfpM3x.css.br +0 -0
  219. codex/static_root/assets/reader-CCCfpM3x.css.gz +0 -0
  220. codex/static_root/assets/reader-DNnK_Chr.114d0e321547.js +2 -0
  221. codex/static_root/assets/reader-DNnK_Chr.114d0e321547.js.br +0 -0
  222. codex/static_root/assets/reader-DNnK_Chr.114d0e321547.js.gz +0 -0
  223. codex/static_root/assets/reader-DNnK_Chr.js +2 -0
  224. codex/static_root/assets/reader-DNnK_Chr.js.br +0 -0
  225. codex/static_root/assets/reader-DNnK_Chr.js.gz +0 -0
  226. codex/static_root/assets/{relation-chips-CZJcLjc8.1d7426dab654.js → relation-chips-PYua7aXv.428ba0b5861e.js} +1 -1
  227. codex/static_root/assets/relation-chips-PYua7aXv.428ba0b5861e.js.br +0 -0
  228. codex/static_root/assets/relation-chips-PYua7aXv.428ba0b5861e.js.gz +0 -0
  229. codex/static_root/assets/{relation-chips-CZJcLjc8.js → relation-chips-PYua7aXv.js} +1 -1
  230. codex/static_root/assets/relation-chips-PYua7aXv.js.br +0 -0
  231. codex/static_root/assets/relation-chips-PYua7aXv.js.gz +0 -0
  232. codex/static_root/assets/{settings-drawer-7iTnAdjf.337eecf2fdbb.js → settings-drawer-DbN6ISRH.d14f525d8eee.js} +2 -2
  233. codex/static_root/assets/settings-drawer-DbN6ISRH.d14f525d8eee.js.br +0 -0
  234. codex/static_root/assets/settings-drawer-DbN6ISRH.d14f525d8eee.js.gz +0 -0
  235. codex/static_root/assets/{settings-drawer-7iTnAdjf.js → settings-drawer-DbN6ISRH.js} +2 -2
  236. codex/static_root/assets/settings-drawer-DbN6ISRH.js.br +0 -0
  237. codex/static_root/assets/settings-drawer-DbN6ISRH.js.gz +0 -0
  238. codex/static_root/assets/{stats-tab-CQsK1n8O.544bf50ffb22.js → stats-tab-DImNhH8O.d5026283841a.js} +1 -1
  239. codex/static_root/assets/stats-tab-DImNhH8O.d5026283841a.js.br +0 -0
  240. codex/static_root/assets/stats-tab-DImNhH8O.d5026283841a.js.gz +0 -0
  241. codex/static_root/assets/{stats-tab-CQsK1n8O.js → stats-tab-DImNhH8O.js} +1 -1
  242. codex/static_root/assets/stats-tab-DImNhH8O.js.br +0 -0
  243. codex/static_root/assets/stats-tab-DImNhH8O.js.gz +0 -0
  244. codex/static_root/assets/{task-tab-C60TLP6e.63aa929a4ed6.js → task-tab-DPD53kjv.e56a35ff1691.js} +1 -1
  245. codex/static_root/assets/task-tab-DPD53kjv.e56a35ff1691.js.br +0 -0
  246. codex/static_root/assets/task-tab-DPD53kjv.e56a35ff1691.js.gz +0 -0
  247. codex/static_root/assets/{task-tab-C60TLP6e.js → task-tab-DPD53kjv.js} +1 -1
  248. codex/static_root/assets/task-tab-DPD53kjv.js.br +0 -0
  249. codex/static_root/assets/task-tab-DPD53kjv.js.gz +0 -0
  250. codex/static_root/assets/to-case-ehC9Ccyj.a7b8e25b391f.js +1 -0
  251. codex/static_root/assets/to-case-ehC9Ccyj.js +1 -0
  252. codex/static_root/assets/{unauthorized-Bs7NSqea.c55650fac055.js → unauthorized-BOIx7Y18.ee3961abfccb.js} +1 -1
  253. codex/static_root/assets/unauthorized-BOIx7Y18.ee3961abfccb.js.br +0 -0
  254. codex/static_root/assets/unauthorized-BOIx7Y18.ee3961abfccb.js.gz +0 -0
  255. codex/static_root/assets/{unauthorized-Bs7NSqea.js → unauthorized-BOIx7Y18.js} +1 -1
  256. codex/static_root/assets/unauthorized-BOIx7Y18.js.br +0 -0
  257. codex/static_root/assets/unauthorized-BOIx7Y18.js.gz +0 -0
  258. codex/static_root/assets/{user-tab-ChuH7Atm.7e80cf1fb78e.js → user-tab-BABwfxLO.37dd0440fbdd.js} +1 -1
  259. codex/static_root/assets/user-tab-BABwfxLO.37dd0440fbdd.js.br +0 -0
  260. codex/static_root/assets/user-tab-BABwfxLO.37dd0440fbdd.js.gz +0 -0
  261. codex/static_root/assets/{user-tab-ChuH7Atm.js → user-tab-BABwfxLO.js} +1 -1
  262. codex/static_root/assets/user-tab-BABwfxLO.js.br +0 -0
  263. codex/static_root/assets/user-tab-BABwfxLO.js.gz +0 -0
  264. codex/static_root/js/choices-admin.d790df01c20a.json +1 -0
  265. codex/static_root/js/choices-admin.d790df01c20a.json.br +0 -0
  266. codex/static_root/js/choices-admin.d790df01c20a.json.gz +0 -0
  267. codex/static_root/js/choices-admin.json +1 -1
  268. codex/static_root/js/choices-admin.json.br +0 -0
  269. codex/static_root/js/choices-admin.json.gz +0 -0
  270. codex/static_root/js/{choices.079a01e0be1a.json → choices.a0aaaa6c7ef7.json} +1 -1
  271. codex/static_root/js/choices.a0aaaa6c7ef7.json.br +0 -0
  272. codex/static_root/js/choices.a0aaaa6c7ef7.json.gz +0 -0
  273. codex/static_root/js/choices.json +1 -1
  274. codex/static_root/js/choices.json.br +0 -0
  275. codex/static_root/js/choices.json.gz +0 -0
  276. codex/static_root/{manifest.dad79c8475ae.json → manifest.cbea5663003a.json} +239 -239
  277. codex/static_root/manifest.cbea5663003a.json.br +0 -0
  278. codex/static_root/manifest.cbea5663003a.json.gz +0 -0
  279. codex/static_root/manifest.json +239 -239
  280. codex/static_root/manifest.json.br +0 -0
  281. codex/static_root/manifest.json.gz +0 -0
  282. codex/static_root/staticfiles.json +1 -1
  283. codex/urls/api/browser.py +11 -2
  284. codex/urls/api/reader.py +1 -7
  285. codex/urls/api/v3.py +1 -1
  286. codex/urls/opds/binary.py +1 -1
  287. codex/views/admin/auth.py +0 -2
  288. codex/views/admin/tasks.py +10 -1
  289. codex/views/auth.py +2 -4
  290. codex/views/bookmark.py +44 -40
  291. codex/views/browser/annotations.py +38 -174
  292. codex/views/browser/base.py +6 -22
  293. codex/views/browser/breadcrumbs.py +16 -14
  294. codex/views/browser/browser.py +11 -20
  295. codex/views/browser/choices.py +15 -39
  296. codex/views/browser/cover.py +177 -0
  297. codex/views/browser/filters/annotations.py +63 -18
  298. codex/views/browser/filters/bookmark.py +21 -5
  299. codex/views/browser/filters/field.py +1 -2
  300. codex/views/browser/filters/group.py +19 -11
  301. codex/views/browser/filters/search.py +19 -10
  302. codex/views/browser/metadata.py +20 -25
  303. codex/views/browser/mtime.py +72 -0
  304. codex/views/const.py +20 -0
  305. codex/views/opds/binary.py +1 -1
  306. codex/views/opds/urls.py +2 -1
  307. codex/views/opds/util.py +2 -4
  308. codex/views/opds/v1/entry/links.py +18 -33
  309. codex/views/opds/v1/facets.py +2 -1
  310. codex/views/opds/v1/feed.py +42 -23
  311. codex/views/opds/v1/links.py +2 -1
  312. codex/views/opds/v2/feed.py +11 -9
  313. codex/views/opds/v2/links.py +2 -1
  314. codex/views/opds/v2/publications.py +13 -34
  315. codex/views/public.py +0 -2
  316. codex/views/reader/books.py +7 -9
  317. codex/views/reader/reader.py +25 -22
  318. codex/views/session.py +5 -3
  319. codex/views/util.py +32 -0
  320. {codex-1.6.0a7.dist-info → codex-1.6.0a9.dist-info}/METADATA +8 -7
  321. {codex-1.6.0a7.dist-info → codex-1.6.0a9.dist-info}/RECORD +324 -325
  322. codex/librarian/importer/update_comics.py +0 -85
  323. codex/migrations/0027_sort_name.py +0 -139
  324. codex/migrations/0028_custom_covers.py +0 -166
  325. codex/migrations/0029_choices_adminflag_and_timestamp.py +0 -44
  326. codex/serializers/mtime.py +0 -25
  327. codex/static_root/assets/VCheckbox-BOUtyxuo.c690f0cdbe48.js.br +0 -0
  328. codex/static_root/assets/VCheckbox-BOUtyxuo.c690f0cdbe48.js.gz +0 -0
  329. codex/static_root/assets/VCheckbox-BOUtyxuo.js.br +0 -0
  330. codex/static_root/assets/VCheckbox-BOUtyxuo.js.gz +0 -0
  331. codex/static_root/assets/VCheckboxBtn-B1-m5pEh.e2b8cbdb92c9.js.br +0 -0
  332. codex/static_root/assets/VCheckboxBtn-B1-m5pEh.e2b8cbdb92c9.js.gz +0 -0
  333. codex/static_root/assets/VCheckboxBtn-B1-m5pEh.js.br +0 -0
  334. codex/static_root/assets/VCheckboxBtn-B1-m5pEh.js.gz +0 -0
  335. codex/static_root/assets/VCombobox-DjkDXe33.22617ea193b1.js.br +0 -0
  336. codex/static_root/assets/VCombobox-DjkDXe33.22617ea193b1.js.gz +0 -0
  337. codex/static_root/assets/VCombobox-DjkDXe33.js.br +0 -0
  338. codex/static_root/assets/VCombobox-DjkDXe33.js.gz +0 -0
  339. codex/static_root/assets/VDialog-X0zn9AGX.0d89c749b9a6.js.br +0 -0
  340. codex/static_root/assets/VDialog-X0zn9AGX.0d89c749b9a6.js.gz +0 -0
  341. codex/static_root/assets/VDialog-X0zn9AGX.js.br +0 -0
  342. codex/static_root/assets/VDialog-X0zn9AGX.js.gz +0 -0
  343. codex/static_root/assets/VExpansionPanels-CRevojaF.43d65c777c58.js.br +0 -0
  344. codex/static_root/assets/VExpansionPanels-CRevojaF.43d65c777c58.js.gz +0 -0
  345. codex/static_root/assets/VExpansionPanels-CRevojaF.js.br +0 -0
  346. codex/static_root/assets/VExpansionPanels-CRevojaF.js.gz +0 -0
  347. codex/static_root/assets/VRadioGroup-8nrrxjDv.2b4dfb984a8c.js.br +0 -0
  348. codex/static_root/assets/VRadioGroup-8nrrxjDv.2b4dfb984a8c.js.gz +0 -0
  349. codex/static_root/assets/VRadioGroup-8nrrxjDv.js.br +0 -0
  350. codex/static_root/assets/VRadioGroup-8nrrxjDv.js.gz +0 -0
  351. codex/static_root/assets/VSelect-DgfIKRnC.fa7a73a9c415.js +0 -1
  352. codex/static_root/assets/VSelect-DgfIKRnC.fa7a73a9c415.js.br +0 -0
  353. codex/static_root/assets/VSelect-DgfIKRnC.fa7a73a9c415.js.gz +0 -0
  354. codex/static_root/assets/VSelect-DgfIKRnC.js +0 -1
  355. codex/static_root/assets/VSelect-DgfIKRnC.js.br +0 -0
  356. codex/static_root/assets/VSelect-DgfIKRnC.js.gz +0 -0
  357. codex/static_root/assets/VSelect-MGVSeLgr.7cabd30bc5e4.css +0 -1
  358. codex/static_root/assets/VSelect-MGVSeLgr.7cabd30bc5e4.css.br +0 -0
  359. codex/static_root/assets/VSelect-MGVSeLgr.7cabd30bc5e4.css.gz +0 -0
  360. codex/static_root/assets/VSelect-MGVSeLgr.css +0 -1
  361. codex/static_root/assets/VSelect-MGVSeLgr.css.br +0 -0
  362. codex/static_root/assets/VSelect-MGVSeLgr.css.gz +0 -0
  363. codex/static_root/assets/VSelectionControl-CGu0oz0K.3030b7a270d6.js.br +0 -0
  364. codex/static_root/assets/VSelectionControl-CGu0oz0K.3030b7a270d6.js.gz +0 -0
  365. codex/static_root/assets/VSelectionControl-CGu0oz0K.js.br +0 -0
  366. codex/static_root/assets/VSelectionControl-CGu0oz0K.js.gz +0 -0
  367. codex/static_root/assets/VSlideGroup-D_oNvCOd.71a7101cdddd.js.br +0 -0
  368. codex/static_root/assets/VSlideGroup-D_oNvCOd.71a7101cdddd.js.gz +0 -0
  369. codex/static_root/assets/VSlideGroup-D_oNvCOd.js.br +0 -0
  370. codex/static_root/assets/VSlideGroup-D_oNvCOd.js.gz +0 -0
  371. codex/static_root/assets/VTable-C7pKI7gU.087912f706f5.js.br +0 -0
  372. codex/static_root/assets/VTable-C7pKI7gU.087912f706f5.js.gz +0 -0
  373. codex/static_root/assets/VTable-C7pKI7gU.js.br +0 -0
  374. codex/static_root/assets/VTable-C7pKI7gU.js.gz +0 -0
  375. codex/static_root/assets/VTextField-Bs8oq9mk.7999fef12a03.js.br +0 -0
  376. codex/static_root/assets/VTextField-Bs8oq9mk.7999fef12a03.js.gz +0 -0
  377. codex/static_root/assets/VTextField-Bs8oq9mk.js.br +0 -0
  378. codex/static_root/assets/VTextField-Bs8oq9mk.js.gz +0 -0
  379. codex/static_root/assets/VWindowItem-iyZ1XOkP.409f7d292253.js.br +0 -0
  380. codex/static_root/assets/VWindowItem-iyZ1XOkP.409f7d292253.js.gz +0 -0
  381. codex/static_root/assets/VWindowItem-iyZ1XOkP.js.br +0 -0
  382. codex/static_root/assets/VWindowItem-iyZ1XOkP.js.gz +0 -0
  383. codex/static_root/assets/admin-B0pCBjma.2407da79bd20.js.br +0 -0
  384. codex/static_root/assets/admin-B0pCBjma.2407da79bd20.js.gz +0 -0
  385. codex/static_root/assets/admin-B0pCBjma.js.br +0 -0
  386. codex/static_root/assets/admin-B0pCBjma.js.gz +0 -0
  387. codex/static_root/assets/admin-drawer-panel-BxoNUHQr.5e2e1a4a255d.js.br +0 -0
  388. codex/static_root/assets/admin-drawer-panel-BxoNUHQr.5e2e1a4a255d.js.gz +0 -0
  389. codex/static_root/assets/admin-drawer-panel-BxoNUHQr.js.br +0 -0
  390. codex/static_root/assets/admin-drawer-panel-BxoNUHQr.js.gz +0 -0
  391. codex/static_root/assets/browser-DbyAjCNh.577a228a966b.js +0 -1
  392. codex/static_root/assets/browser-DbyAjCNh.577a228a966b.js.br +0 -0
  393. codex/static_root/assets/browser-DbyAjCNh.577a228a966b.js.gz +0 -0
  394. codex/static_root/assets/browser-DbyAjCNh.js +0 -1
  395. codex/static_root/assets/browser-DbyAjCNh.js.br +0 -0
  396. codex/static_root/assets/browser-DbyAjCNh.js.gz +0 -0
  397. codex/static_root/assets/browser-VnzNj1t3.cff861ad2ca3.css +0 -1
  398. codex/static_root/assets/browser-VnzNj1t3.cff861ad2ca3.css.br +0 -0
  399. codex/static_root/assets/browser-VnzNj1t3.cff861ad2ca3.css.gz +0 -0
  400. codex/static_root/assets/browser-VnzNj1t3.css +0 -1
  401. codex/static_root/assets/browser-VnzNj1t3.css.br +0 -0
  402. codex/static_root/assets/browser-VnzNj1t3.css.gz +0 -0
  403. codex/static_root/assets/change-password-dialog-DZ9dP8_F.930f4cae3cb0.js.br +0 -0
  404. codex/static_root/assets/change-password-dialog-DZ9dP8_F.930f4cae3cb0.js.gz +0 -0
  405. codex/static_root/assets/change-password-dialog-DZ9dP8_F.js.br +0 -0
  406. codex/static_root/assets/change-password-dialog-DZ9dP8_F.js.gz +0 -0
  407. codex/static_root/assets/confirm-dialog-RP7JNStF.a752a7c1e697.js.br +0 -0
  408. codex/static_root/assets/confirm-dialog-RP7JNStF.a752a7c1e697.js.gz +0 -0
  409. codex/static_root/assets/confirm-dialog-RP7JNStF.js.br +0 -0
  410. codex/static_root/assets/confirm-dialog-RP7JNStF.js.gz +0 -0
  411. codex/static_root/assets/datetime-column-Cu3WYyPj.54b4c3817b74.js +0 -1
  412. codex/static_root/assets/datetime-column-Cu3WYyPj.54b4c3817b74.js.br +0 -0
  413. codex/static_root/assets/datetime-column-Cu3WYyPj.54b4c3817b74.js.gz +0 -0
  414. codex/static_root/assets/datetime-column-Cu3WYyPj.js +0 -1
  415. codex/static_root/assets/datetime-column-Cu3WYyPj.js.br +0 -0
  416. codex/static_root/assets/datetime-column-Cu3WYyPj.js.gz +0 -0
  417. codex/static_root/assets/datetime-column-Dg_RxTVM.1fa7c5cbead7.css +0 -1
  418. codex/static_root/assets/datetime-column-Dg_RxTVM.1fa7c5cbead7.css.br +0 -0
  419. codex/static_root/assets/datetime-column-Dg_RxTVM.css +0 -1
  420. codex/static_root/assets/datetime-column-Dg_RxTVM.css.br +0 -0
  421. codex/static_root/assets/filter-DAdGUt-1.3261cbcd50b5.js.br +0 -0
  422. codex/static_root/assets/filter-DAdGUt-1.3261cbcd50b5.js.gz +0 -0
  423. codex/static_root/assets/filter-DAdGUt-1.js.br +0 -0
  424. codex/static_root/assets/filter-DAdGUt-1.js.gz +0 -0
  425. codex/static_root/assets/flag-tab-BP7Zs7iQ.cb16ef6363d4.js +0 -1
  426. codex/static_root/assets/flag-tab-BP7Zs7iQ.cb16ef6363d4.js.br +0 -0
  427. codex/static_root/assets/flag-tab-BP7Zs7iQ.cb16ef6363d4.js.gz +0 -0
  428. codex/static_root/assets/flag-tab-BP7Zs7iQ.js +0 -1
  429. codex/static_root/assets/flag-tab-BP7Zs7iQ.js.br +0 -0
  430. codex/static_root/assets/flag-tab-BP7Zs7iQ.js.gz +0 -0
  431. codex/static_root/assets/group-tab-DEwh4jfB.a95097b5e320.js.br +0 -0
  432. codex/static_root/assets/group-tab-DEwh4jfB.a95097b5e320.js.gz +0 -0
  433. codex/static_root/assets/group-tab-DEwh4jfB.js.br +0 -0
  434. codex/static_root/assets/group-tab-DEwh4jfB.js.gz +0 -0
  435. codex/static_root/assets/http-error-xs3mIL8U.e143c472a96c.js +0 -1
  436. codex/static_root/assets/http-error-xs3mIL8U.e143c472a96c.js.br +0 -0
  437. codex/static_root/assets/http-error-xs3mIL8U.e143c472a96c.js.gz +0 -0
  438. codex/static_root/assets/http-error-xs3mIL8U.js +0 -1
  439. codex/static_root/assets/http-error-xs3mIL8U.js.br +0 -0
  440. codex/static_root/assets/http-error-xs3mIL8U.js.gz +0 -0
  441. codex/static_root/assets/library-tab-DrXvD9B2.f765f9d3bae4.js.br +0 -0
  442. codex/static_root/assets/library-tab-DrXvD9B2.f765f9d3bae4.js.gz +0 -0
  443. codex/static_root/assets/library-tab-DrXvD9B2.js.br +0 -0
  444. codex/static_root/assets/library-tab-DrXvD9B2.js.gz +0 -0
  445. codex/static_root/assets/main-Dy9Uqpmh.2f99b1914b3e.js +0 -32
  446. codex/static_root/assets/main-Dy9Uqpmh.2f99b1914b3e.js.br +0 -0
  447. codex/static_root/assets/main-Dy9Uqpmh.2f99b1914b3e.js.gz +0 -0
  448. codex/static_root/assets/main-Dy9Uqpmh.js +0 -32
  449. codex/static_root/assets/main-Dy9Uqpmh.js.br +0 -0
  450. codex/static_root/assets/main-Dy9Uqpmh.js.gz +0 -0
  451. codex/static_root/assets/pagination-toolbar-DbS_HOT1.81222ab51ef4.js +0 -1
  452. codex/static_root/assets/pagination-toolbar-DbS_HOT1.81222ab51ef4.js.br +0 -0
  453. codex/static_root/assets/pagination-toolbar-DbS_HOT1.81222ab51ef4.js.gz +0 -0
  454. codex/static_root/assets/pagination-toolbar-DbS_HOT1.js +0 -1
  455. codex/static_root/assets/pagination-toolbar-DbS_HOT1.js.br +0 -0
  456. codex/static_root/assets/pagination-toolbar-DbS_HOT1.js.gz +0 -0
  457. codex/static_root/assets/pagination-toolbar-r6nbtWxg.4088ab042c0c.css +0 -1
  458. codex/static_root/assets/pagination-toolbar-r6nbtWxg.4088ab042c0c.css.br +0 -0
  459. codex/static_root/assets/pagination-toolbar-r6nbtWxg.4088ab042c0c.css.gz +0 -0
  460. codex/static_root/assets/pagination-toolbar-r6nbtWxg.css +0 -1
  461. codex/static_root/assets/pagination-toolbar-r6nbtWxg.css.br +0 -0
  462. codex/static_root/assets/pagination-toolbar-r6nbtWxg.css.gz +0 -0
  463. codex/static_root/assets/pdf-doc-obrBwxa6.ec9bd13a5786.js.br +0 -0
  464. codex/static_root/assets/pdf-doc-obrBwxa6.ec9bd13a5786.js.gz +0 -0
  465. codex/static_root/assets/pdf-doc-obrBwxa6.js.br +0 -0
  466. codex/static_root/assets/pdf-doc-obrBwxa6.js.gz +0 -0
  467. codex/static_root/assets/reader-BXKUaUeC.953d30b969ef.js +0 -2
  468. codex/static_root/assets/reader-BXKUaUeC.953d30b969ef.js.br +0 -0
  469. codex/static_root/assets/reader-BXKUaUeC.953d30b969ef.js.gz +0 -0
  470. codex/static_root/assets/reader-BXKUaUeC.js +0 -2
  471. codex/static_root/assets/reader-BXKUaUeC.js.br +0 -0
  472. codex/static_root/assets/reader-BXKUaUeC.js.gz +0 -0
  473. codex/static_root/assets/reader-OXJ1KVaW.a463b19d0508.css +0 -1
  474. codex/static_root/assets/reader-OXJ1KVaW.a463b19d0508.css.br +0 -0
  475. codex/static_root/assets/reader-OXJ1KVaW.a463b19d0508.css.gz +0 -0
  476. codex/static_root/assets/reader-OXJ1KVaW.css +0 -1
  477. codex/static_root/assets/reader-OXJ1KVaW.css.br +0 -0
  478. codex/static_root/assets/reader-OXJ1KVaW.css.gz +0 -0
  479. codex/static_root/assets/relation-chips-CZJcLjc8.1d7426dab654.js.br +0 -0
  480. codex/static_root/assets/relation-chips-CZJcLjc8.1d7426dab654.js.gz +0 -0
  481. codex/static_root/assets/relation-chips-CZJcLjc8.js.br +0 -0
  482. codex/static_root/assets/relation-chips-CZJcLjc8.js.gz +0 -0
  483. codex/static_root/assets/settings-drawer-7iTnAdjf.337eecf2fdbb.js.br +0 -0
  484. codex/static_root/assets/settings-drawer-7iTnAdjf.337eecf2fdbb.js.gz +0 -0
  485. codex/static_root/assets/settings-drawer-7iTnAdjf.js.br +0 -0
  486. codex/static_root/assets/settings-drawer-7iTnAdjf.js.gz +0 -0
  487. codex/static_root/assets/stats-tab-CQsK1n8O.544bf50ffb22.js.br +0 -0
  488. codex/static_root/assets/stats-tab-CQsK1n8O.544bf50ffb22.js.gz +0 -0
  489. codex/static_root/assets/stats-tab-CQsK1n8O.js.br +0 -0
  490. codex/static_root/assets/stats-tab-CQsK1n8O.js.gz +0 -0
  491. codex/static_root/assets/task-tab-C60TLP6e.63aa929a4ed6.js.br +0 -0
  492. codex/static_root/assets/task-tab-C60TLP6e.63aa929a4ed6.js.gz +0 -0
  493. codex/static_root/assets/task-tab-C60TLP6e.js.br +0 -0
  494. codex/static_root/assets/task-tab-C60TLP6e.js.gz +0 -0
  495. codex/static_root/assets/to-case-CR9beRR0.21bb805fdab4.js +0 -1
  496. codex/static_root/assets/to-case-CR9beRR0.js +0 -1
  497. codex/static_root/assets/unauthorized-Bs7NSqea.c55650fac055.js.br +0 -0
  498. codex/static_root/assets/unauthorized-Bs7NSqea.c55650fac055.js.gz +0 -0
  499. codex/static_root/assets/unauthorized-Bs7NSqea.js.br +0 -0
  500. codex/static_root/assets/unauthorized-Bs7NSqea.js.gz +0 -0
  501. codex/static_root/assets/user-tab-ChuH7Atm.7e80cf1fb78e.js.br +0 -0
  502. codex/static_root/assets/user-tab-ChuH7Atm.7e80cf1fb78e.js.gz +0 -0
  503. codex/static_root/assets/user-tab-ChuH7Atm.js.br +0 -0
  504. codex/static_root/assets/user-tab-ChuH7Atm.js.gz +0 -0
  505. codex/static_root/js/choices-admin.ef1ff3a8b9da.json +0 -1
  506. codex/static_root/js/choices-admin.ef1ff3a8b9da.json.br +0 -0
  507. codex/static_root/js/choices-admin.ef1ff3a8b9da.json.gz +0 -0
  508. codex/static_root/js/choices.079a01e0be1a.json.br +0 -0
  509. codex/static_root/js/choices.079a01e0be1a.json.gz +0 -0
  510. codex/static_root/manifest.dad79c8475ae.json.br +0 -0
  511. codex/static_root/manifest.dad79c8475ae.json.gz +0 -0
  512. codex/views/cover.py +0 -76
  513. codex/views/mtime.py +0 -70
  514. codex/views/utils.py +0 -26
  515. {codex-1.6.0a7.dist-info → codex-1.6.0a9.dist-info}/LICENSE +0 -0
  516. {codex-1.6.0a7.dist-info → codex-1.6.0a9.dist-info}/WHEEL +0 -0
  517. {codex-1.6.0a7.dist-info → codex-1.6.0a9.dist-info}/entry_points.txt +0 -0
@@ -1,85 +0,0 @@
1
- """Bulk update comic objects."""
2
-
3
- from django.db.models import NOT_PROVIDED
4
- from django.db.models.functions import Now
5
-
6
- from codex.librarian.importer.const import (
7
- BULK_UPDATE_COMIC_FIELDS,
8
- BULK_UPDATE_COMIC_FIELDS_WITH_VALUES,
9
- )
10
- from codex.librarian.importer.link_comics import LinkComicsMixin
11
- from codex.librarian.importer.status import ImportStatusTypes, status_notify
12
- from codex.models import (
13
- Comic,
14
- )
15
-
16
-
17
- class UpdateComicsMixin(LinkComicsMixin):
18
- """Create comics methods."""
19
-
20
- def _bulk_update_comics_add_comic(self, static_data, comic, results):
21
- """Add one comic and stats to the bulk update list."""
22
- try:
23
- library, mds, now = static_data
24
- md = mds.pop(comic.path)
25
- self.get_comic_fk_links(md, library, comic.path)
26
- for field_name in BULK_UPDATE_COMIC_FIELDS_WITH_VALUES:
27
- value = md.get(field_name)
28
- if value is None:
29
- default_value = Comic._meta.get_field(field_name).default
30
- if default_value != NOT_PROVIDED:
31
- value = default_value
32
- setattr(comic, field_name, value)
33
- comic.presave()
34
- comic.updated_at = now
35
- update_comics, comic_pks, comic_update_paths = results
36
- update_comics.append(comic)
37
- comic_pks.append(comic.pk)
38
- comic_update_paths.add(comic.path)
39
- except Exception:
40
- self.log.exception(f"Error preparing {comic} for update.")
41
-
42
- @status_notify(status_type=ImportStatusTypes.FILES_MODIFIED, updates=False)
43
- def bulk_update_comics(self, comic_paths, library, create_paths, mds, **kwargs):
44
- """Bulk update comics, and move nonextant comics into create job.."""
45
- count = 0
46
- if not comic_paths:
47
- return count
48
-
49
- self.log.debug(
50
- f"Preparing {len(comic_paths)} comics for update in library {library.path}."
51
- )
52
- # Get existing comics to update
53
- comics = Comic.objects.filter(library=library, path__in=comic_paths).only(
54
- *BULK_UPDATE_COMIC_FIELDS
55
- )
56
-
57
- # set attributes for each comic
58
- update_comics = []
59
- now = Now()
60
- comic_pks = []
61
- comic_update_paths = set()
62
- static_data = library, mds, now
63
- results = update_comics, comic_pks, comic_update_paths
64
- for comic in comics.iterator():
65
- self._bulk_update_comics_add_comic(static_data, comic, results)
66
-
67
- converted_create_paths = frozenset(set(comic_paths) - comic_update_paths)
68
- create_paths.update(converted_create_paths)
69
- count = len(converted_create_paths)
70
- if count:
71
- self.log.info(f"Converted {count} update paths to create paths.")
72
-
73
- self.log.debug(f"Bulk updating {len(update_comics)} comics.")
74
- try:
75
- Comic.objects.bulk_update(update_comics, BULK_UPDATE_COMIC_FIELDS)
76
- count = len(update_comics)
77
-
78
- self._remove_covers(comic_pks, False) # type: ignore
79
- self.log.debug(f"Purging covers for {len(comic_pks)} updated comics.")
80
- if count:
81
- self.log.info(f"Updated {count} comics.")
82
- except Exception:
83
- self.log.exception(f"While updating {comic_update_paths}")
84
-
85
- return count
@@ -1,139 +0,0 @@
1
- """Generated by Django 5.0.4 on 2024-05-05 23:11."""
2
-
3
- import os
4
- from contextlib import suppress
5
- from pathlib import Path
6
-
7
- from django.db import migrations, models
8
-
9
- from codex.models.util import get_sort_name
10
-
11
- CONFIG_PATH = Path(os.environ.get("CODEX_CONFIG_DIR", Path.cwd() / "config"))
12
- COVER_ROOT = CONFIG_PATH / "cache" / "covers"
13
- _GROUP_MODEL_NAMES = (
14
- "publisher",
15
- "imprint",
16
- "series",
17
- "storyarc",
18
- "folder",
19
- "comic",
20
- "failedimport",
21
- )
22
-
23
-
24
- def _set_sort_name(obj):
25
- """Create sort_name for model."""
26
- obj.sort_name = get_sort_name(obj.name)
27
-
28
-
29
- def _generate_sort_name(apps, _schema_editor):
30
- """Update new sort_name field."""
31
- for model_name in _GROUP_MODEL_NAMES:
32
- model = apps.get_model("codex", model_name)
33
- update_fields = ("sort_name",)
34
- only_fields = ("name", *update_fields)
35
- update_groups = []
36
- objs = model.objects.only(*only_fields)
37
- for obj in objs:
38
- _set_sort_name(obj)
39
- update_groups.append(obj)
40
- if update_groups:
41
- model.objects.bulk_update(update_groups, update_fields)
42
- print(f"\tUpdated sort_name for {len(update_groups)} {model_name}s")
43
-
44
-
45
- def _remove_cover_symlinks(_apps, _schema_editor):
46
- """Remove old missing cover symlinks."""
47
- # Handled programmatically now.
48
- count = 0
49
- for dirpath_str, _, filenames in os.walk(COVER_ROOT):
50
- dirpath = Path(dirpath_str)
51
- for filename in filenames:
52
- full_path = dirpath / filename
53
- if full_path.is_symlink():
54
- with suppress(OSError):
55
- full_path.unlink(missing_ok=True)
56
- count += 1
57
- if count:
58
- print(f"Removed {count} missing-cover symlinks from cover cache.")
59
-
60
-
61
- class Migration(migrations.Migration):
62
- """Migrate."""
63
-
64
- dependencies = [
65
- ("codex", "0026_comicbox_1"),
66
- ]
67
-
68
- operations = [
69
- migrations.AddField(
70
- model_name="comic",
71
- name="sort_name",
72
- field=models.CharField(db_index=True, default="", max_length=128),
73
- ),
74
- migrations.AddField(
75
- model_name="failedimport",
76
- name="sort_name",
77
- field=models.CharField(db_index=True, default="", max_length=128),
78
- ),
79
- migrations.AddField(
80
- model_name="folder",
81
- name="sort_name",
82
- field=models.CharField(db_index=True, default="", max_length=128),
83
- ),
84
- migrations.AddField(
85
- model_name="imprint",
86
- name="sort_name",
87
- field=models.CharField(db_index=True, default="", max_length=128),
88
- ),
89
- migrations.AddField(
90
- model_name="publisher",
91
- name="sort_name",
92
- field=models.CharField(db_index=True, default="", max_length=128),
93
- ),
94
- migrations.AddField(
95
- model_name="series",
96
- name="sort_name",
97
- field=models.CharField(db_index=True, default="", max_length=128),
98
- ),
99
- migrations.AddField(
100
- model_name="storyarc",
101
- name="sort_name",
102
- field=models.CharField(db_index=True, default="", max_length=128),
103
- ),
104
- migrations.AlterField(
105
- model_name="adminflag",
106
- name="key",
107
- field=models.CharField(
108
- choices=[
109
- ("FV", "Folder View"),
110
- ("RG", "Registration"),
111
- ("NU", "Non Users"),
112
- ("AU", "Auto Update"),
113
- ("SO", "Search Index Optimize"),
114
- ("IM", "Import Metadata"),
115
- ],
116
- db_index=True,
117
- max_length=2,
118
- ),
119
- ),
120
- migrations.AlterField(
121
- model_name="adminflag",
122
- name="key",
123
- field=models.CharField(
124
- choices=[
125
- ("FV", "Folder View"),
126
- ("RG", "Registration"),
127
- ("NU", "Non Users"),
128
- ("AU", "Auto Update"),
129
- ("SO", "Search Index Optimize"),
130
- ("IM", "Import Metadata"),
131
- ("DC", "Dynamic Group Covers"),
132
- ],
133
- db_index=True,
134
- max_length=2,
135
- ),
136
- ),
137
- migrations.RunPython(_generate_sort_name),
138
- migrations.RunPython(_remove_cover_symlinks),
139
- ]
@@ -1,166 +0,0 @@
1
- """Generated by Django 5.0.6 on 2024-05-23 03:50."""
2
-
3
- import django.db.models.deletion
4
- from django.db import migrations, models
5
-
6
-
7
- class Migration(migrations.Migration):
8
- """Migrate db."""
9
-
10
- dependencies = [
11
- ("codex", "0027_sort_name"),
12
- ]
13
-
14
- operations = [
15
- migrations.RemoveField(
16
- model_name="failedimport",
17
- name="sort_name",
18
- ),
19
- migrations.AddField(
20
- model_name="library",
21
- name="covers_only",
22
- field=models.BooleanField(db_index=True, default=False),
23
- ),
24
- migrations.AlterField(
25
- model_name="librarianstatus",
26
- name="status_type",
27
- field=models.CharField(
28
- choices=[
29
- ("CCC", "Create Covers"),
30
- ("CCD", "Purge Covers"),
31
- ("CFO", "Find Orphan"),
32
- ("IDM", "Dirs Moved"),
33
- ("IFM", "Files Moved"),
34
- ("ITR", "Aggregate Tags"),
35
- ("ITQ", "Query Missing Fks"),
36
- ("ITC", "Create Fks"),
37
- ("IDU", "Dirs Modified"),
38
- ("IFU", "Files Modified"),
39
- ("IFC", "Files Created"),
40
- ("IMQ", "Query M2M Fields"),
41
- ("IMC", "Link M2M Fields"),
42
- ("IDD", "Dirs Deleted"),
43
- ("IFD", "Files Deleted"),
44
- ("IFI", "Failed Imports"),
45
- ("ICQ", "Query Missing Covers"),
46
- ("ICM", "Covers Moved"),
47
- ("ICU", "Covers Modified"),
48
- ("ICC", "Covers Created"),
49
- ("ICD", "Covers Deleted"),
50
- ("ICL", "Covers Link"),
51
- ("JTD", "Cleanup Fk"),
52
- ("JCU", "Codex Update"),
53
- ("JCR", "Codex Restart"),
54
- ("JCS", "Codex Stop"),
55
- ("JDO", "Db Optimize"),
56
- ("JDB", "Db Backup"),
57
- ("JSD", "Cleanup Sessions"),
58
- ("JCD", "Cleanup Covers"),
59
- ("SIX", "Search Index Clear"),
60
- ("SIU", "Search Index Update"),
61
- ("SID", "Search Index Remove"),
62
- ("SIM", "Search Index Merge"),
63
- ("WPO", "Poll"),
64
- ],
65
- db_index=True,
66
- max_length=3,
67
- ),
68
- ),
69
- migrations.CreateModel(
70
- name="CustomCover",
71
- fields=[
72
- (
73
- "id",
74
- models.AutoField(
75
- auto_created=True,
76
- primary_key=True,
77
- serialize=False,
78
- verbose_name="ID",
79
- ),
80
- ),
81
- ("created_at", models.DateTimeField(auto_now_add=True)),
82
- ("updated_at", models.DateTimeField(auto_now=True)),
83
- ("path", models.CharField(db_index=True, max_length=4095)),
84
- ("stat", models.JSONField(null=True)),
85
- (
86
- "group",
87
- models.CharField(
88
- choices=[
89
- ("p", "P"),
90
- ("i", "I"),
91
- ("s", "S"),
92
- ("a", "A"),
93
- ("f", "F"),
94
- ],
95
- db_index=True,
96
- max_length=1,
97
- ),
98
- ),
99
- (
100
- "sort_name",
101
- models.CharField(db_index=True, default="", max_length=128),
102
- ),
103
- (
104
- "library",
105
- models.ForeignKey(
106
- on_delete=django.db.models.deletion.CASCADE, to="codex.library"
107
- ),
108
- ),
109
- ],
110
- options={
111
- "get_latest_by": "updated_at",
112
- "abstract": False,
113
- "unique_together": {("library", "path")},
114
- },
115
- ),
116
- migrations.AddField(
117
- model_name="folder",
118
- name="custom_cover",
119
- field=models.ForeignKey(
120
- default=None,
121
- null=True,
122
- on_delete=django.db.models.deletion.SET_DEFAULT,
123
- to="codex.customcover",
124
- ),
125
- ),
126
- migrations.AddField(
127
- model_name="imprint",
128
- name="custom_cover",
129
- field=models.ForeignKey(
130
- default=None,
131
- null=True,
132
- on_delete=django.db.models.deletion.SET_DEFAULT,
133
- to="codex.customcover",
134
- ),
135
- ),
136
- migrations.AddField(
137
- model_name="publisher",
138
- name="custom_cover",
139
- field=models.ForeignKey(
140
- default=None,
141
- null=True,
142
- on_delete=django.db.models.deletion.SET_DEFAULT,
143
- to="codex.customcover",
144
- ),
145
- ),
146
- migrations.AddField(
147
- model_name="series",
148
- name="custom_cover",
149
- field=models.ForeignKey(
150
- default=None,
151
- null=True,
152
- on_delete=django.db.models.deletion.SET_DEFAULT,
153
- to="codex.customcover",
154
- ),
155
- ),
156
- migrations.AddField(
157
- model_name="storyarc",
158
- name="custom_cover",
159
- field=models.ForeignKey(
160
- default=None,
161
- null=True,
162
- on_delete=django.db.models.deletion.SET_DEFAULT,
163
- to="codex.customcover",
164
- ),
165
- ),
166
- ]
@@ -1,44 +0,0 @@
1
- """Generated by Django 5.0.6 on 2024-05-25 21:19."""
2
-
3
- from django.db import migrations, models
4
-
5
-
6
- class Migration(migrations.Migration):
7
- """Migrate db."""
8
-
9
- dependencies = [
10
- ("codex", "0028_custom_covers"),
11
- ]
12
-
13
- operations = [
14
- migrations.AlterField(
15
- model_name="adminflag",
16
- name="key",
17
- field=models.CharField(
18
- choices=[
19
- ("FV", "Folder View"),
20
- ("RG", "Registration"),
21
- ("NU", "Non Users"),
22
- ("AU", "Auto Update"),
23
- ("SO", "Search Index Optimize"),
24
- ("IM", "Import Metadata"),
25
- ],
26
- db_index=True,
27
- max_length=2,
28
- ),
29
- ),
30
- migrations.AlterField(
31
- model_name="timestamp",
32
- name="key",
33
- field=models.CharField(
34
- choices=[
35
- ("JA", "Janitor"),
36
- ("VR", "Codex Version"),
37
- ("SI", "Search Index UUID"),
38
- ("AP", "API Key"),
39
- ],
40
- db_index=True,
41
- max_length=2,
42
- ),
43
- ),
44
- ]
@@ -1,25 +0,0 @@
1
- """Group Mtimes."""
2
-
3
- from rest_framework.serializers import BooleanField, Serializer
4
-
5
- from codex.serializers.fields import IntListField, TimestampField
6
-
7
-
8
- class GroupMtimeSerializer(Serializer):
9
- """Group Mtimes."""
10
-
11
- pks = IntListField(read_only=True)
12
- mtime = TimestampField(read_only=True)
13
-
14
-
15
- class GroupsMtimeSerializer(Serializer):
16
- """Groups Mtimes."""
17
-
18
- groups = GroupMtimeSerializer(many=True)
19
- use_bookmark_filter = BooleanField(read_only=True)
20
-
21
-
22
- class MtimeSerializer(Serializer):
23
- """Max mtime for all submitted groups."""
24
-
25
- max_mtime = TimestampField(read_only=True)
@@ -1 +0,0 @@
1
- import{m as He,V as he}from"./VTextField-Bs8oq9mk.js";import{E as q,cT as Ue,M as ie,cM as ze,aB as xe,N as Te,c0 as Ae,O as Q,P as De,bY as Ge,aF as Ne,aE as te,R as le,S as u,aw as L,bh as oe,cX as ge,cc as qe,aA as $e,c5 as je,bZ as Xe,bi as We,bf as Ye,cx as Ze,c7 as Je,bX as Ee,cd as Qe,c$ as et,aC as tt,c8 as lt,bj as at,d0 as nt,az as se,b_ as ot,bg as st,h as D,b7 as ye,b8 as it,d1 as ut,d2 as ct,ao as Z,bk as J,ba as rt,U as X,cH as de,as as Re,d3 as Be,F as dt,r as j,i as vt,s as K,p as ft,d4 as mt,a as N,n as fe,d5 as ke,d6 as pt,d7 as be,I as Oe,w as Ve,co as Fe,a7 as ce,d8 as ht,a3 as ve,b3 as gt,G as yt,b6 as kt,cn as bt,K as ne,cl as Vt,d9 as Ct,da as Pt,b4 as St,cF as wt,bx as It,ar as Ce,cI as xt,ak as Tt,db as Pe,cL as At}from"./admin-drawer-panel-BxoNUHQr.js";import{g as Dt}from"./VSelectionControl-CGu0oz0K.js";import{d as Et,u as Rt,e as Se,g as we,f as Le}from"./VDialog-X0zn9AGX.js";import{l as Bt}from"./main-Dy9Uqpmh.js";import{V as Ot}from"./VCheckboxBtn-B1-m5pEh.js";import{m as Ft,V as Ie}from"./VSlideGroup-D_oNvCOd.js";const Me=Symbol.for("vuetify:v-chip-group"),Lt=q({column:Boolean,filter:Boolean,valueComparator:{type:Function,default:Ue},...Ft(),...ie(),...ze({selectedClass:"v-chip--selected"}),...xe(),...Te(),...Ae({variant:"tonal"})},"VChipGroup"),sl=Q()({name:"VChipGroup",props:Lt(),emits:{"update:modelValue":e=>!0},setup(e,m){let{slots:n}=m;const{themeClasses:r}=De(e),{isSelected:o,select:p,next:k,prev:s,selected:l}=Ge(e,Me);return Ne({VChip:{color:te(e,"color"),disabled:te(e,"disabled"),filter:te(e,"filter"),variant:te(e,"variant")}}),le(()=>{const y=Ie.filterProps(e);return u(Ie,L(y,{class:["v-chip-group",{"v-chip-group--column":e.column},r.value,e.class],style:e.style}),{default:()=>{var S;return[(S=n.default)==null?void 0:S.call(n,{isSelected:o,select:p,next:k,prev:s,selected:l.value})]}})}),{}}}),Mt=q({activeClass:String,appendAvatar:String,appendIcon:oe,closable:Boolean,closeIcon:{type:oe,default:"$delete"},closeLabel:{type:String,default:"$vuetify.close"},draggable:Boolean,filter:Boolean,filterIcon:{type:String,default:"$complete"},label:Boolean,link:{type:Boolean,default:void 0},pill:Boolean,prependAvatar:String,prependIcon:oe,ripple:{type:[Boolean,Object],default:!0},text:String,modelValue:{type:Boolean,default:!0},onClick:ge(),onClickOnce:ge(),...qe(),...ie(),...$e(),...je(),...Xe(),...We(),...Ye(),...Ze(),...xe({tag:"span"}),...Te(),...Ae({variant:"tonal"})},"VChip"),_t=Q()({name:"VChip",directives:{Ripple:Je},props:Mt(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0,"group:selected":e=>!0,click:e=>!0},setup(e,m){let{attrs:n,emit:r,slots:o}=m;const{t:p}=Ee(),{borderClasses:k}=Qe(e),{colorClasses:s,colorStyles:l,variantClasses:y}=et(e),{densityClasses:S}=tt(e),{elevationClasses:B}=lt(e),{roundedClasses:v}=at(e),{sizeClasses:P}=nt(e),{themeClasses:w}=De(e),c=se(e,"modelValue"),t=ot(e,Me,!1),f=st(e,n),b=D(()=>e.link!==!1&&f.isLink.value),I=D(()=>!e.disabled&&e.link!==!1&&(!!t||e.link||f.isClickable.value)),x=D(()=>({"aria-label":p(e.closeLabel),onClick(h){h.preventDefault(),h.stopPropagation(),c.value=!1,r("click:close",h)}}));function H(h){var M;r("click",h),I.value&&((M=f.navigate)==null||M.call(f,h),t==null||t.toggle())}function ee(h){(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),H(h))}return()=>{const h=f.isLink.value?"a":e.tag,M=!!(e.appendIcon||e.appendAvatar),U=!!(M||o.append),_=!!(o.close||e.closable),z=!!(o.filter||e.filter)&&t,W=!!(e.prependIcon||e.prependAvatar),G=!!(W||o.prepend),$=!t||t.isSelected.value;return c.value&&ye(u(h,{class:["v-chip",{"v-chip--disabled":e.disabled,"v-chip--label":e.label,"v-chip--link":I.value,"v-chip--filter":z,"v-chip--pill":e.pill},w.value,k.value,$?s.value:void 0,S.value,B.value,v.value,P.value,y.value,t==null?void 0:t.selectedClass.value,e.class],style:[$?l.value:void 0,e.style],disabled:e.disabled||void 0,draggable:e.draggable,href:f.href.value,tabindex:I.value?0:void 0,onClick:H,onKeydown:I.value&&!b.value&&ee},{default:()=>{var F;return[ut(I.value,"v-chip"),z&&u(ct,{key:"filter"},{default:()=>[ye(u("div",{class:"v-chip__filter"},[o.filter?u(J,{key:"filter-defaults",disabled:!e.filterIcon,defaults:{VIcon:{icon:e.filterIcon}}},o.filter):u(Z,{key:"filter-icon",icon:e.filterIcon},null)]),[[rt,t.isSelected.value]])]}),G&&u("div",{key:"prepend",class:"v-chip__prepend"},[o.prepend?u(J,{key:"prepend-defaults",disabled:!W,defaults:{VAvatar:{image:e.prependAvatar,start:!0},VIcon:{icon:e.prependIcon,start:!0}}},o.prepend):u(X,null,[e.prependIcon&&u(Z,{key:"prepend-icon",icon:e.prependIcon,start:!0},null),e.prependAvatar&&u(de,{key:"prepend-avatar",image:e.prependAvatar,start:!0},null)])]),u("div",{class:"v-chip__content","data-no-activator":""},[((F=o.default)==null?void 0:F.call(o,{isSelected:t==null?void 0:t.isSelected.value,selectedClass:t==null?void 0:t.selectedClass.value,select:t==null?void 0:t.select,toggle:t==null?void 0:t.toggle,value:t==null?void 0:t.value.value,disabled:e.disabled}))??e.text]),U&&u("div",{key:"append",class:"v-chip__append"},[o.append?u(J,{key:"append-defaults",disabled:!M,defaults:{VAvatar:{end:!0,image:e.appendAvatar},VIcon:{end:!0,icon:e.appendIcon}}},o.append):u(X,null,[e.appendIcon&&u(Z,{key:"append-icon",end:!0,icon:e.appendIcon},null),e.appendAvatar&&u(de,{key:"append-avatar",end:!0,image:e.appendAvatar},null)])]),_&&u("button",L({key:"close",class:"v-chip__close",type:"button"},x.value),[o.close?u(J,{key:"close-defaults",defaults:{VIcon:{icon:e.closeIcon,size:"x-small"}}},o.close):u(Z,{key:"close-icon",icon:e.closeIcon,size:"x-small"},null)])]}}),[[it("ripple"),I.value&&e.ripple,null]])}}}),Kt=q({id:String,...Re(Et({closeDelay:250,closeOnContentClick:!0,locationStrategy:"connected",openDelay:300,scrim:!1,scrollStrategy:"reposition",transition:{component:Be}}),["absolute"])},"VMenu"),Ht=Q()({name:"VMenu",props:Kt(),emits:{"update:modelValue":e=>!0},setup(e,m){let{slots:n}=m;const r=se(e,"modelValue"),{scopeId:o}=Rt(),p=dt(),k=D(()=>e.id||`v-menu-${p}`),s=j(),l=vt(Se,null),y=K(0);ft(Se,{register(){++y.value},unregister(){--y.value},closeParents(c){setTimeout(()=>{!y.value&&!e.persistent&&(c==null||c&&!mt(c,s.value.contentEl))&&(r.value=!1,l==null||l.closeParents())},40)}});async function S(c){var b,I,x;const t=c.relatedTarget,f=c.target;await fe(),r.value&&t!==f&&((b=s.value)!=null&&b.contentEl)&&((I=s.value)!=null&&I.globalTop)&&![document,s.value.contentEl].includes(f)&&!s.value.contentEl.contains(f)&&((x=ke(s.value.contentEl)[0])==null||x.focus())}N(r,c=>{c?(l==null||l.register(),document.addEventListener("focusin",S,{once:!0})):(l==null||l.unregister(),document.removeEventListener("focusin",S))});function B(c){l==null||l.closeParents(c)}function v(c){var t,f,b;if(!e.disabled)if(c.key==="Tab"||c.key==="Enter"&&!e.closeOnContentClick){if(c.key==="Enter"&&c.target instanceof HTMLTextAreaElement)return;c.key==="Enter"&&c.preventDefault(),pt(ke((t=s.value)==null?void 0:t.contentEl,!1),c.shiftKey?"prev":"next",x=>x.tabIndex>=0)||(r.value=!1,(b=(f=s.value)==null?void 0:f.activatorEl)==null||b.focus())}else["Enter"," "].includes(c.key)&&e.closeOnContentClick&&(r.value=!1,l==null||l.closeParents())}function P(c){var f;if(e.disabled)return;const t=(f=s.value)==null?void 0:f.contentEl;t&&r.value?c.key==="ArrowDown"?(c.preventDefault(),be(t,"next")):c.key==="ArrowUp"&&(c.preventDefault(),be(t,"prev")):["ArrowDown","ArrowUp"].includes(c.key)&&(r.value=!0,c.preventDefault(),setTimeout(()=>setTimeout(()=>P(c))))}const w=D(()=>L({"aria-haspopup":"menu","aria-expanded":String(r.value),"aria-owns":k.value,onKeydown:P},e.activatorProps));return le(()=>{const c=we.filterProps(e);return u(we,L({ref:s,id:k.value,class:["v-menu",e.class],style:e.style},c,{modelValue:r.value,"onUpdate:modelValue":t=>r.value=t,absolute:!0,activatorProps:w.value,"onClick:outside":B,onKeydown:v},o),{activator:n.activator,default:function(){for(var t=arguments.length,f=new Array(t),b=0;b<t;b++)f[b]=arguments[b];return u(J,{root:"VMenu"},{default:()=>{var I;return[(I=n.default)==null?void 0:I.call(n,...f)]}})}})}),Le({id:k,ΨopenChildren:y},s)}}),Ut=q({renderless:Boolean,...ie()},"VVirtualScrollItem"),zt=Q()({name:"VVirtualScrollItem",inheritAttrs:!1,props:Ut(),emits:{"update:height":e=>!0},setup(e,m){let{attrs:n,emit:r,slots:o}=m;const{resizeRef:p,contentRect:k}=Oe(void 0,"border");N(()=>{var s;return(s=k.value)==null?void 0:s.height},s=>{s!=null&&r("update:height",s)}),le(()=>{var s,l;return e.renderless?u(X,null,[(s=o.default)==null?void 0:s.call(o,{itemRef:p})]):u("div",L({ref:p,class:["v-virtual-scroll__item",e.class],style:e.style},n),[(l=o.default)==null?void 0:l.call(o)])})}}),Gt=-1,Nt=1,re=100,qt=q({itemHeight:{type:[Number,String],default:null},height:[Number,String]},"virtual");function $t(e,m){const n=Bt(),r=K(0);Ve(()=>{r.value=parseFloat(e.itemHeight||0)});const o=K(0),p=K(Math.ceil((parseInt(e.height)||n.height.value)/(r.value||16))||1),k=K(0),s=K(0),l=j(),y=j();let S=0;const{resizeRef:B,contentRect:v}=Oe();Ve(()=>{B.value=l.value});const P=D(()=>{var a;return l.value===document.documentElement?n.height.value:((a=v.value)==null?void 0:a.height)||parseInt(e.height)||0}),w=D(()=>!!(l.value&&y.value&&P.value&&r.value));let c=Array.from({length:m.value.length}),t=Array.from({length:m.value.length});const f=K(0);let b=-1;function I(a){return c[a]||r.value}const x=ht(()=>{const a=performance.now();t[0]=0;const d=m.value.length;for(let T=1;T<=d-1;T++)t[T]=(t[T-1]||0)+I(T-1);f.value=Math.max(f.value,performance.now()-a)},f),H=N(w,a=>{a&&(H(),S=y.value.offsetTop,x.immediate(),F(),~b&&fe(()=>{ve&&window.requestAnimationFrame(()=>{ae(b),b=-1})}))});Fe(()=>{x.clear()});function ee(a,d){const T=c[a],C=r.value;r.value=C?Math.min(r.value,d):d,(T!==d||C!==r.value)&&(c[a]=d,x())}function h(a){return a=ce(a,0,m.value.length-1),t[a]||0}function M(a){return jt(t,a)}let U=0,_=0,z=0;N(P,(a,d)=>{d&&(F(),a<d&&requestAnimationFrame(()=>{_=0,F()}))});function W(){if(!l.value||!y.value)return;const a=l.value.scrollTop,d=performance.now();d-z>500?(_=Math.sign(a-U),S=y.value.offsetTop):_=a-U,U=a,z=d,F()}function G(){!l.value||!y.value||(_=0,z=0,F())}let $=-1;function F(){cancelAnimationFrame($),$=requestAnimationFrame(ue)}function ue(){if(!l.value||!P.value)return;const a=U-S,d=Math.sign(_),T=Math.max(0,a-re),C=ce(M(T),0,m.value.length),g=a+P.value+re,A=ce(M(g)+1,C+1,m.value.length);if((d!==Gt||C<o.value)&&(d!==Nt||A>p.value)){const V=h(o.value)-h(C),E=h(A)-h(p.value);Math.max(V,E)>re?(o.value=C,p.value=A):(C<=0&&(o.value=C),A>=m.value.length&&(p.value=A))}k.value=h(o.value),s.value=h(m.value.length)-h(p.value)}function ae(a){const d=h(a);!l.value||a&&!d?b=a:l.value.scrollTop=d}const i=D(()=>m.value.slice(o.value,p.value).map((a,d)=>({raw:a,index:d+o.value})));return N(m,()=>{c=Array.from({length:m.value.length}),t=Array.from({length:m.value.length}),x.immediate(),F()},{deep:!0}),{containerRef:l,markerRef:y,computedItems:i,paddingTop:k,paddingBottom:s,scrollToIndex:ae,handleScroll:W,handleScrollend:G,handleItemResize:ee}}function jt(e,m){let n=e.length-1,r=0,o=0,p=null,k=-1;if(e[n]<m)return n;for(;r<=n;)if(o=r+n>>1,p=e[o],p>m)n=o-1;else if(p<m)k=o,r=o+1;else return p===m?o:r;return k}const Xt=q({items:{type:Array,default:()=>[]},renderless:Boolean,...qt(),...ie(),...gt()},"VVirtualScroll"),Wt=Q()({name:"VVirtualScroll",props:Xt(),setup(e,m){let{slots:n}=m;const r=yt("VVirtualScroll"),{dimensionStyles:o}=kt(e),{containerRef:p,markerRef:k,handleScroll:s,handleScrollend:l,handleItemResize:y,scrollToIndex:S,paddingTop:B,paddingBottom:v,computedItems:P}=$t(e,te(e,"items"));return bt(()=>e.renderless,()=>{function w(){var f,b;const t=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1)?"addEventListener":"removeEventListener";p.value===document.documentElement?(document[t]("scroll",s,{passive:!0}),document[t]("scrollend",l)):((f=p.value)==null||f[t]("scroll",s,{passive:!0}),(b=p.value)==null||b[t]("scrollend",l))}Vt(()=>{p.value=Ct(r.vnode.el,!0),w(!0)}),Fe(w)}),le(()=>{const w=P.value.map(c=>u(zt,{key:c.index,renderless:e.renderless,"onUpdate:height":t=>y(c.index,t)},{default:t=>{var f;return(f=n.default)==null?void 0:f.call(n,{item:c.raw,index:c.index,...t})}}));return e.renderless?u(X,null,[u("div",{ref:k,class:"v-virtual-scroll__spacer",style:{paddingTop:ne(B.value)}},null),w,u("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:ne(v.value)}},null)]):u("div",{ref:p,class:["v-virtual-scroll",e.class],onScrollPassive:s,onScrollend:l,style:[o.value,e.style]},[u("div",{ref:k,class:"v-virtual-scroll__container",style:{paddingTop:ne(B.value),paddingBottom:ne(v.value)}},[w])])}),{scrollToIndex:S}}});function Yt(e,m){const n=K(!1);let r;function o(s){cancelAnimationFrame(r),n.value=!0,r=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>{n.value=!1})})}async function p(){await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>{if(n.value){const l=N(n,()=>{l(),s()})}else s()})}async function k(s){var S,B;if(s.key==="Tab"&&((S=m.value)==null||S.focus()),!["PageDown","PageUp","Home","End"].includes(s.key))return;const l=(B=e.value)==null?void 0:B.$el;if(!l)return;(s.key==="Home"||s.key==="End")&&l.scrollTo({top:s.key==="Home"?0:l.scrollHeight,behavior:"smooth"}),await p();const y=l.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(s.key==="PageDown"||s.key==="Home"){const v=l.getBoundingClientRect().top;for(const P of y)if(P.getBoundingClientRect().top>=v){P.focus();break}}else{const v=l.getBoundingClientRect().bottom;for(const P of[...y].reverse())if(P.getBoundingClientRect().bottom<=v){P.focus();break}}}return{onListScroll:o,onListKeydown:k}}const Zt=q({chips:Boolean,closableChips:Boolean,closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"},eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuIcon:{type:oe,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,...Pt({itemChildren:!1})},"Select"),Jt=q({...Zt(),...Re(He({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...St({transition:{component:Be}})},"VSelect"),il=Q()({name:"VSelect",props:Jt(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,m){let{slots:n}=m;const{t:r}=Ee(),o=j(),p=j(),k=j(),s=se(e,"menu"),l=D({get:()=>s.value,set:i=>{var a;s.value&&!i&&((a=p.value)!=null&&a.ΨopenChildren)||(s.value=i)}}),{items:y,transformIn:S,transformOut:B}=wt(e),v=se(e,"modelValue",[],i=>S(i===null?[null]:At(i)),i=>{const a=B(i);return e.multiple?a:a[0]??null}),P=D(()=>typeof e.counterValue=="function"?e.counterValue(v.value):typeof e.counterValue=="number"?e.counterValue:v.value.length),w=Dt(),c=D(()=>v.value.map(i=>i.value)),t=K(!1),f=D(()=>l.value?e.closeText:e.openText);let b="",I;const x=D(()=>e.hideSelected?y.value.filter(i=>!v.value.some(a=>e.valueComparator(a,i))):y.value),H=D(()=>e.hideNoData&&!x.value.length||e.readonly||(w==null?void 0:w.isReadonly.value)),ee=D(()=>{var i;return{...e.menuProps,activatorProps:{...((i=e.menuProps)==null?void 0:i.activatorProps)||{},"aria-haspopup":"listbox"}}}),h=j(),{onListScroll:M,onListKeydown:U}=Yt(h,o);function _(i){e.openOnClear&&(l.value=!0)}function z(){H.value||(l.value=!l.value)}function W(i){var g,A;if(!i.key||e.readonly||w!=null&&w.isReadonly.value)return;["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(i.key)&&i.preventDefault(),["Enter","ArrowDown"," "].includes(i.key)&&(l.value=!0),["Escape","Tab"].includes(i.key)&&(l.value=!1),i.key==="Home"?(g=h.value)==null||g.focus("first"):i.key==="End"&&((A=h.value)==null||A.focus("last"));const a=1e3;function d(V){const E=V.key.length===1,R=!V.ctrlKey&&!V.metaKey&&!V.altKey;return E&&R}if(e.multiple||!d(i))return;const T=performance.now();T-I>a&&(b=""),b+=i.key.toLowerCase(),I=T;const C=y.value.find(V=>V.title.toLowerCase().startsWith(b));if(C!==void 0){v.value=[C];const V=x.value.indexOf(C);ve&&window.requestAnimationFrame(()=>{var E;V>=0&&((E=k.value)==null||E.scrollToIndex(V))})}}function G(i){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!i.props.disabled)if(e.multiple){const d=v.value.findIndex(C=>e.valueComparator(C.value,i.value)),T=a??!~d;if(~d){const C=T?[...v.value,i]:[...v.value];C.splice(d,1),v.value=C}else T&&(v.value=[...v.value,i])}else{const d=a!==!1;v.value=d?[i]:[],fe(()=>{l.value=!1})}}function $(i){var a;(a=h.value)!=null&&a.$el.contains(i.relatedTarget)||(l.value=!1)}function F(){var i;t.value&&((i=o.value)==null||i.focus())}function ue(i){t.value=!0}function ae(i){if(i==null)v.value=[];else if(Pe(o.value,":autofill")||Pe(o.value,":-webkit-autofill")){const a=y.value.find(d=>d.title===i);a&&G(a)}else o.value&&(o.value.value="")}return N(l,()=>{if(!e.hideSelected&&l.value&&v.value.length){const i=x.value.findIndex(a=>v.value.some(d=>e.valueComparator(d.value,a.value)));ve&&window.requestAnimationFrame(()=>{var a;i>=0&&((a=k.value)==null||a.scrollToIndex(i))})}}),N(()=>e.items,(i,a)=>{l.value||t.value&&!a.length&&i.length&&(l.value=!0)}),le(()=>{const i=!!(e.chips||n.chip),a=!!(!e.hideNoData||x.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),d=v.value.length>0,T=he.filterProps(e),C=d||!t.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder;return u(he,L({ref:o},T,{modelValue:v.value.map(g=>g.props.value).join(", "),"onUpdate:modelValue":ae,focused:t.value,"onUpdate:focused":g=>t.value=g,validationValue:v.externalValue,counterValue:P.value,dirty:d,class:["v-select",{"v-select--active-menu":l.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":v.value.length,"v-select--selection-slot":!!n.selection},e.class],style:e.style,inputmode:"none",placeholder:C,"onClick:clear":_,"onMousedown:control":z,onBlur:$,onKeydown:W,"aria-label":r(f.value),title:r(f.value)}),{...n,default:()=>u(X,null,[u(Ht,L({ref:p,modelValue:l.value,"onUpdate:modelValue":g=>l.value=g,activator:"parent",contentClass:"v-select__content",disabled:H.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:F},ee.value),{default:()=>[a&&u(It,L({ref:h,selected:c.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:g=>g.preventDefault(),onKeydown:U,onFocusin:ue,onScrollPassive:M,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var g,A,V;return[(g=n["prepend-item"])==null?void 0:g.call(n),!x.value.length&&!e.hideNoData&&(((A=n["no-data"])==null?void 0:A.call(n))??u(Ce,{title:r(e.noDataText)},null)),u(Wt,{ref:k,renderless:!0,items:x.value},{default:E=>{var pe;let{item:R,index:Y,itemRef:O}=E;const me=L(R.props,{ref:O,key:Y,onClick:()=>G(R,null)});return((pe=n.item)==null?void 0:pe.call(n,{item:R,index:Y,props:me}))??u(Ce,L(me,{role:"option"}),{prepend:_e=>{let{isSelected:Ke}=_e;return u(X,null,[e.multiple&&!e.hideSelected?u(Ot,{key:R.value,modelValue:Ke,ripple:!1,tabindex:"-1"},null):void 0,R.props.prependAvatar&&u(de,{image:R.props.prependAvatar},null),R.props.prependIcon&&u(Z,{icon:R.props.prependIcon},null)])}})}}),(V=n["append-item"])==null?void 0:V.call(n)]}})]}),v.value.map((g,A)=>{function V(O){O.stopPropagation(),O.preventDefault(),G(g,!1)}const E={"onClick:close":V,onKeydown(O){O.key!=="Enter"&&O.key!==" "||(O.preventDefault(),O.stopPropagation(),V(O))},onMousedown(O){O.preventDefault(),O.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},R=i?!!n.chip:!!n.selection,Y=R?xt(i?n.chip({item:g,index:A,props:E}):n.selection({item:g,index:A})):void 0;if(!(R&&!Y))return u("div",{key:g.value,class:"v-select__selection"},[i?n.chip?u(J,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:g.title}}},{default:()=>[Y]}):u(_t,L({key:"chip",closable:e.closableChips,size:"small",text:g.title,disabled:g.props.disabled},E),null):Y??u("span",{class:"v-select__selection-text"},[g.title,e.multiple&&A<v.value.length-1&&u("span",{class:"v-select__selection-comma"},[Tt(",")])])])})]),"append-inner":function(){var E;for(var g=arguments.length,A=new Array(g),V=0;V<g;V++)A[V]=arguments[V];return u(X,null,[(E=n["append-inner"])==null?void 0:E.call(n,...A),e.menuIcon?u(Z,{class:"v-select__menu-icon",icon:e.menuIcon},null):void 0])}})}),Le({isFocused:t,menu:l,select:G},o)}});export{il as V,Ht as a,Wt as b,_t as c,sl as d,qt as e,$t as f,zt as g,Zt as m,Yt as u};
@@ -1 +0,0 @@
1
- import{m as He,V as he}from"./VTextField-Bs8oq9mk.js";import{E as q,cT as Ue,M as ie,cM as ze,aB as xe,N as Te,c0 as Ae,O as Q,P as De,bY as Ge,aF as Ne,aE as te,R as le,S as u,aw as L,bh as oe,cX as ge,cc as qe,aA as $e,c5 as je,bZ as Xe,bi as We,bf as Ye,cx as Ze,c7 as Je,bX as Ee,cd as Qe,c$ as et,aC as tt,c8 as lt,bj as at,d0 as nt,az as se,b_ as ot,bg as st,h as D,b7 as ye,b8 as it,d1 as ut,d2 as ct,ao as Z,bk as J,ba as rt,U as X,cH as de,as as Re,d3 as Be,F as dt,r as j,i as vt,s as K,p as ft,d4 as mt,a as N,n as fe,d5 as ke,d6 as pt,d7 as be,I as Oe,w as Ve,co as Fe,a7 as ce,d8 as ht,a3 as ve,b3 as gt,G as yt,b6 as kt,cn as bt,K as ne,cl as Vt,d9 as Ct,da as Pt,b4 as St,cF as wt,bx as It,ar as Ce,cI as xt,ak as Tt,db as Pe,cL as At}from"./admin-drawer-panel-BxoNUHQr.js";import{g as Dt}from"./VSelectionControl-CGu0oz0K.js";import{d as Et,u as Rt,e as Se,g as we,f as Le}from"./VDialog-X0zn9AGX.js";import{l as Bt}from"./main-Dy9Uqpmh.js";import{V as Ot}from"./VCheckboxBtn-B1-m5pEh.js";import{m as Ft,V as Ie}from"./VSlideGroup-D_oNvCOd.js";const Me=Symbol.for("vuetify:v-chip-group"),Lt=q({column:Boolean,filter:Boolean,valueComparator:{type:Function,default:Ue},...Ft(),...ie(),...ze({selectedClass:"v-chip--selected"}),...xe(),...Te(),...Ae({variant:"tonal"})},"VChipGroup"),sl=Q()({name:"VChipGroup",props:Lt(),emits:{"update:modelValue":e=>!0},setup(e,m){let{slots:n}=m;const{themeClasses:r}=De(e),{isSelected:o,select:p,next:k,prev:s,selected:l}=Ge(e,Me);return Ne({VChip:{color:te(e,"color"),disabled:te(e,"disabled"),filter:te(e,"filter"),variant:te(e,"variant")}}),le(()=>{const y=Ie.filterProps(e);return u(Ie,L(y,{class:["v-chip-group",{"v-chip-group--column":e.column},r.value,e.class],style:e.style}),{default:()=>{var S;return[(S=n.default)==null?void 0:S.call(n,{isSelected:o,select:p,next:k,prev:s,selected:l.value})]}})}),{}}}),Mt=q({activeClass:String,appendAvatar:String,appendIcon:oe,closable:Boolean,closeIcon:{type:oe,default:"$delete"},closeLabel:{type:String,default:"$vuetify.close"},draggable:Boolean,filter:Boolean,filterIcon:{type:String,default:"$complete"},label:Boolean,link:{type:Boolean,default:void 0},pill:Boolean,prependAvatar:String,prependIcon:oe,ripple:{type:[Boolean,Object],default:!0},text:String,modelValue:{type:Boolean,default:!0},onClick:ge(),onClickOnce:ge(),...qe(),...ie(),...$e(),...je(),...Xe(),...We(),...Ye(),...Ze(),...xe({tag:"span"}),...Te(),...Ae({variant:"tonal"})},"VChip"),_t=Q()({name:"VChip",directives:{Ripple:Je},props:Mt(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0,"group:selected":e=>!0,click:e=>!0},setup(e,m){let{attrs:n,emit:r,slots:o}=m;const{t:p}=Ee(),{borderClasses:k}=Qe(e),{colorClasses:s,colorStyles:l,variantClasses:y}=et(e),{densityClasses:S}=tt(e),{elevationClasses:B}=lt(e),{roundedClasses:v}=at(e),{sizeClasses:P}=nt(e),{themeClasses:w}=De(e),c=se(e,"modelValue"),t=ot(e,Me,!1),f=st(e,n),b=D(()=>e.link!==!1&&f.isLink.value),I=D(()=>!e.disabled&&e.link!==!1&&(!!t||e.link||f.isClickable.value)),x=D(()=>({"aria-label":p(e.closeLabel),onClick(h){h.preventDefault(),h.stopPropagation(),c.value=!1,r("click:close",h)}}));function H(h){var M;r("click",h),I.value&&((M=f.navigate)==null||M.call(f,h),t==null||t.toggle())}function ee(h){(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),H(h))}return()=>{const h=f.isLink.value?"a":e.tag,M=!!(e.appendIcon||e.appendAvatar),U=!!(M||o.append),_=!!(o.close||e.closable),z=!!(o.filter||e.filter)&&t,W=!!(e.prependIcon||e.prependAvatar),G=!!(W||o.prepend),$=!t||t.isSelected.value;return c.value&&ye(u(h,{class:["v-chip",{"v-chip--disabled":e.disabled,"v-chip--label":e.label,"v-chip--link":I.value,"v-chip--filter":z,"v-chip--pill":e.pill},w.value,k.value,$?s.value:void 0,S.value,B.value,v.value,P.value,y.value,t==null?void 0:t.selectedClass.value,e.class],style:[$?l.value:void 0,e.style],disabled:e.disabled||void 0,draggable:e.draggable,href:f.href.value,tabindex:I.value?0:void 0,onClick:H,onKeydown:I.value&&!b.value&&ee},{default:()=>{var F;return[ut(I.value,"v-chip"),z&&u(ct,{key:"filter"},{default:()=>[ye(u("div",{class:"v-chip__filter"},[o.filter?u(J,{key:"filter-defaults",disabled:!e.filterIcon,defaults:{VIcon:{icon:e.filterIcon}}},o.filter):u(Z,{key:"filter-icon",icon:e.filterIcon},null)]),[[rt,t.isSelected.value]])]}),G&&u("div",{key:"prepend",class:"v-chip__prepend"},[o.prepend?u(J,{key:"prepend-defaults",disabled:!W,defaults:{VAvatar:{image:e.prependAvatar,start:!0},VIcon:{icon:e.prependIcon,start:!0}}},o.prepend):u(X,null,[e.prependIcon&&u(Z,{key:"prepend-icon",icon:e.prependIcon,start:!0},null),e.prependAvatar&&u(de,{key:"prepend-avatar",image:e.prependAvatar,start:!0},null)])]),u("div",{class:"v-chip__content","data-no-activator":""},[((F=o.default)==null?void 0:F.call(o,{isSelected:t==null?void 0:t.isSelected.value,selectedClass:t==null?void 0:t.selectedClass.value,select:t==null?void 0:t.select,toggle:t==null?void 0:t.toggle,value:t==null?void 0:t.value.value,disabled:e.disabled}))??e.text]),U&&u("div",{key:"append",class:"v-chip__append"},[o.append?u(J,{key:"append-defaults",disabled:!M,defaults:{VAvatar:{end:!0,image:e.appendAvatar},VIcon:{end:!0,icon:e.appendIcon}}},o.append):u(X,null,[e.appendIcon&&u(Z,{key:"append-icon",end:!0,icon:e.appendIcon},null),e.appendAvatar&&u(de,{key:"append-avatar",end:!0,image:e.appendAvatar},null)])]),_&&u("button",L({key:"close",class:"v-chip__close",type:"button"},x.value),[o.close?u(J,{key:"close-defaults",defaults:{VIcon:{icon:e.closeIcon,size:"x-small"}}},o.close):u(Z,{key:"close-icon",icon:e.closeIcon,size:"x-small"},null)])]}}),[[it("ripple"),I.value&&e.ripple,null]])}}}),Kt=q({id:String,...Re(Et({closeDelay:250,closeOnContentClick:!0,locationStrategy:"connected",openDelay:300,scrim:!1,scrollStrategy:"reposition",transition:{component:Be}}),["absolute"])},"VMenu"),Ht=Q()({name:"VMenu",props:Kt(),emits:{"update:modelValue":e=>!0},setup(e,m){let{slots:n}=m;const r=se(e,"modelValue"),{scopeId:o}=Rt(),p=dt(),k=D(()=>e.id||`v-menu-${p}`),s=j(),l=vt(Se,null),y=K(0);ft(Se,{register(){++y.value},unregister(){--y.value},closeParents(c){setTimeout(()=>{!y.value&&!e.persistent&&(c==null||c&&!mt(c,s.value.contentEl))&&(r.value=!1,l==null||l.closeParents())},40)}});async function S(c){var b,I,x;const t=c.relatedTarget,f=c.target;await fe(),r.value&&t!==f&&((b=s.value)!=null&&b.contentEl)&&((I=s.value)!=null&&I.globalTop)&&![document,s.value.contentEl].includes(f)&&!s.value.contentEl.contains(f)&&((x=ke(s.value.contentEl)[0])==null||x.focus())}N(r,c=>{c?(l==null||l.register(),document.addEventListener("focusin",S,{once:!0})):(l==null||l.unregister(),document.removeEventListener("focusin",S))});function B(c){l==null||l.closeParents(c)}function v(c){var t,f,b;if(!e.disabled)if(c.key==="Tab"||c.key==="Enter"&&!e.closeOnContentClick){if(c.key==="Enter"&&c.target instanceof HTMLTextAreaElement)return;c.key==="Enter"&&c.preventDefault(),pt(ke((t=s.value)==null?void 0:t.contentEl,!1),c.shiftKey?"prev":"next",x=>x.tabIndex>=0)||(r.value=!1,(b=(f=s.value)==null?void 0:f.activatorEl)==null||b.focus())}else["Enter"," "].includes(c.key)&&e.closeOnContentClick&&(r.value=!1,l==null||l.closeParents())}function P(c){var f;if(e.disabled)return;const t=(f=s.value)==null?void 0:f.contentEl;t&&r.value?c.key==="ArrowDown"?(c.preventDefault(),be(t,"next")):c.key==="ArrowUp"&&(c.preventDefault(),be(t,"prev")):["ArrowDown","ArrowUp"].includes(c.key)&&(r.value=!0,c.preventDefault(),setTimeout(()=>setTimeout(()=>P(c))))}const w=D(()=>L({"aria-haspopup":"menu","aria-expanded":String(r.value),"aria-owns":k.value,onKeydown:P},e.activatorProps));return le(()=>{const c=we.filterProps(e);return u(we,L({ref:s,id:k.value,class:["v-menu",e.class],style:e.style},c,{modelValue:r.value,"onUpdate:modelValue":t=>r.value=t,absolute:!0,activatorProps:w.value,"onClick:outside":B,onKeydown:v},o),{activator:n.activator,default:function(){for(var t=arguments.length,f=new Array(t),b=0;b<t;b++)f[b]=arguments[b];return u(J,{root:"VMenu"},{default:()=>{var I;return[(I=n.default)==null?void 0:I.call(n,...f)]}})}})}),Le({id:k,ΨopenChildren:y},s)}}),Ut=q({renderless:Boolean,...ie()},"VVirtualScrollItem"),zt=Q()({name:"VVirtualScrollItem",inheritAttrs:!1,props:Ut(),emits:{"update:height":e=>!0},setup(e,m){let{attrs:n,emit:r,slots:o}=m;const{resizeRef:p,contentRect:k}=Oe(void 0,"border");N(()=>{var s;return(s=k.value)==null?void 0:s.height},s=>{s!=null&&r("update:height",s)}),le(()=>{var s,l;return e.renderless?u(X,null,[(s=o.default)==null?void 0:s.call(o,{itemRef:p})]):u("div",L({ref:p,class:["v-virtual-scroll__item",e.class],style:e.style},n),[(l=o.default)==null?void 0:l.call(o)])})}}),Gt=-1,Nt=1,re=100,qt=q({itemHeight:{type:[Number,String],default:null},height:[Number,String]},"virtual");function $t(e,m){const n=Bt(),r=K(0);Ve(()=>{r.value=parseFloat(e.itemHeight||0)});const o=K(0),p=K(Math.ceil((parseInt(e.height)||n.height.value)/(r.value||16))||1),k=K(0),s=K(0),l=j(),y=j();let S=0;const{resizeRef:B,contentRect:v}=Oe();Ve(()=>{B.value=l.value});const P=D(()=>{var a;return l.value===document.documentElement?n.height.value:((a=v.value)==null?void 0:a.height)||parseInt(e.height)||0}),w=D(()=>!!(l.value&&y.value&&P.value&&r.value));let c=Array.from({length:m.value.length}),t=Array.from({length:m.value.length});const f=K(0);let b=-1;function I(a){return c[a]||r.value}const x=ht(()=>{const a=performance.now();t[0]=0;const d=m.value.length;for(let T=1;T<=d-1;T++)t[T]=(t[T-1]||0)+I(T-1);f.value=Math.max(f.value,performance.now()-a)},f),H=N(w,a=>{a&&(H(),S=y.value.offsetTop,x.immediate(),F(),~b&&fe(()=>{ve&&window.requestAnimationFrame(()=>{ae(b),b=-1})}))});Fe(()=>{x.clear()});function ee(a,d){const T=c[a],C=r.value;r.value=C?Math.min(r.value,d):d,(T!==d||C!==r.value)&&(c[a]=d,x())}function h(a){return a=ce(a,0,m.value.length-1),t[a]||0}function M(a){return jt(t,a)}let U=0,_=0,z=0;N(P,(a,d)=>{d&&(F(),a<d&&requestAnimationFrame(()=>{_=0,F()}))});function W(){if(!l.value||!y.value)return;const a=l.value.scrollTop,d=performance.now();d-z>500?(_=Math.sign(a-U),S=y.value.offsetTop):_=a-U,U=a,z=d,F()}function G(){!l.value||!y.value||(_=0,z=0,F())}let $=-1;function F(){cancelAnimationFrame($),$=requestAnimationFrame(ue)}function ue(){if(!l.value||!P.value)return;const a=U-S,d=Math.sign(_),T=Math.max(0,a-re),C=ce(M(T),0,m.value.length),g=a+P.value+re,A=ce(M(g)+1,C+1,m.value.length);if((d!==Gt||C<o.value)&&(d!==Nt||A>p.value)){const V=h(o.value)-h(C),E=h(A)-h(p.value);Math.max(V,E)>re?(o.value=C,p.value=A):(C<=0&&(o.value=C),A>=m.value.length&&(p.value=A))}k.value=h(o.value),s.value=h(m.value.length)-h(p.value)}function ae(a){const d=h(a);!l.value||a&&!d?b=a:l.value.scrollTop=d}const i=D(()=>m.value.slice(o.value,p.value).map((a,d)=>({raw:a,index:d+o.value})));return N(m,()=>{c=Array.from({length:m.value.length}),t=Array.from({length:m.value.length}),x.immediate(),F()},{deep:!0}),{containerRef:l,markerRef:y,computedItems:i,paddingTop:k,paddingBottom:s,scrollToIndex:ae,handleScroll:W,handleScrollend:G,handleItemResize:ee}}function jt(e,m){let n=e.length-1,r=0,o=0,p=null,k=-1;if(e[n]<m)return n;for(;r<=n;)if(o=r+n>>1,p=e[o],p>m)n=o-1;else if(p<m)k=o,r=o+1;else return p===m?o:r;return k}const Xt=q({items:{type:Array,default:()=>[]},renderless:Boolean,...qt(),...ie(),...gt()},"VVirtualScroll"),Wt=Q()({name:"VVirtualScroll",props:Xt(),setup(e,m){let{slots:n}=m;const r=yt("VVirtualScroll"),{dimensionStyles:o}=kt(e),{containerRef:p,markerRef:k,handleScroll:s,handleScrollend:l,handleItemResize:y,scrollToIndex:S,paddingTop:B,paddingBottom:v,computedItems:P}=$t(e,te(e,"items"));return bt(()=>e.renderless,()=>{function w(){var f,b;const t=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1)?"addEventListener":"removeEventListener";p.value===document.documentElement?(document[t]("scroll",s,{passive:!0}),document[t]("scrollend",l)):((f=p.value)==null||f[t]("scroll",s,{passive:!0}),(b=p.value)==null||b[t]("scrollend",l))}Vt(()=>{p.value=Ct(r.vnode.el,!0),w(!0)}),Fe(w)}),le(()=>{const w=P.value.map(c=>u(zt,{key:c.index,renderless:e.renderless,"onUpdate:height":t=>y(c.index,t)},{default:t=>{var f;return(f=n.default)==null?void 0:f.call(n,{item:c.raw,index:c.index,...t})}}));return e.renderless?u(X,null,[u("div",{ref:k,class:"v-virtual-scroll__spacer",style:{paddingTop:ne(B.value)}},null),w,u("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:ne(v.value)}},null)]):u("div",{ref:p,class:["v-virtual-scroll",e.class],onScrollPassive:s,onScrollend:l,style:[o.value,e.style]},[u("div",{ref:k,class:"v-virtual-scroll__container",style:{paddingTop:ne(B.value),paddingBottom:ne(v.value)}},[w])])}),{scrollToIndex:S}}});function Yt(e,m){const n=K(!1);let r;function o(s){cancelAnimationFrame(r),n.value=!0,r=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>{n.value=!1})})}async function p(){await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>requestAnimationFrame(s)),await new Promise(s=>{if(n.value){const l=N(n,()=>{l(),s()})}else s()})}async function k(s){var S,B;if(s.key==="Tab"&&((S=m.value)==null||S.focus()),!["PageDown","PageUp","Home","End"].includes(s.key))return;const l=(B=e.value)==null?void 0:B.$el;if(!l)return;(s.key==="Home"||s.key==="End")&&l.scrollTo({top:s.key==="Home"?0:l.scrollHeight,behavior:"smooth"}),await p();const y=l.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(s.key==="PageDown"||s.key==="Home"){const v=l.getBoundingClientRect().top;for(const P of y)if(P.getBoundingClientRect().top>=v){P.focus();break}}else{const v=l.getBoundingClientRect().bottom;for(const P of[...y].reverse())if(P.getBoundingClientRect().bottom<=v){P.focus();break}}}return{onListScroll:o,onListKeydown:k}}const Zt=q({chips:Boolean,closableChips:Boolean,closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"},eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuIcon:{type:oe,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,...Pt({itemChildren:!1})},"Select"),Jt=q({...Zt(),...Re(He({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...St({transition:{component:Be}})},"VSelect"),il=Q()({name:"VSelect",props:Jt(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,m){let{slots:n}=m;const{t:r}=Ee(),o=j(),p=j(),k=j(),s=se(e,"menu"),l=D({get:()=>s.value,set:i=>{var a;s.value&&!i&&((a=p.value)!=null&&a.ΨopenChildren)||(s.value=i)}}),{items:y,transformIn:S,transformOut:B}=wt(e),v=se(e,"modelValue",[],i=>S(i===null?[null]:At(i)),i=>{const a=B(i);return e.multiple?a:a[0]??null}),P=D(()=>typeof e.counterValue=="function"?e.counterValue(v.value):typeof e.counterValue=="number"?e.counterValue:v.value.length),w=Dt(),c=D(()=>v.value.map(i=>i.value)),t=K(!1),f=D(()=>l.value?e.closeText:e.openText);let b="",I;const x=D(()=>e.hideSelected?y.value.filter(i=>!v.value.some(a=>e.valueComparator(a,i))):y.value),H=D(()=>e.hideNoData&&!x.value.length||e.readonly||(w==null?void 0:w.isReadonly.value)),ee=D(()=>{var i;return{...e.menuProps,activatorProps:{...((i=e.menuProps)==null?void 0:i.activatorProps)||{},"aria-haspopup":"listbox"}}}),h=j(),{onListScroll:M,onListKeydown:U}=Yt(h,o);function _(i){e.openOnClear&&(l.value=!0)}function z(){H.value||(l.value=!l.value)}function W(i){var g,A;if(!i.key||e.readonly||w!=null&&w.isReadonly.value)return;["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(i.key)&&i.preventDefault(),["Enter","ArrowDown"," "].includes(i.key)&&(l.value=!0),["Escape","Tab"].includes(i.key)&&(l.value=!1),i.key==="Home"?(g=h.value)==null||g.focus("first"):i.key==="End"&&((A=h.value)==null||A.focus("last"));const a=1e3;function d(V){const E=V.key.length===1,R=!V.ctrlKey&&!V.metaKey&&!V.altKey;return E&&R}if(e.multiple||!d(i))return;const T=performance.now();T-I>a&&(b=""),b+=i.key.toLowerCase(),I=T;const C=y.value.find(V=>V.title.toLowerCase().startsWith(b));if(C!==void 0){v.value=[C];const V=x.value.indexOf(C);ve&&window.requestAnimationFrame(()=>{var E;V>=0&&((E=k.value)==null||E.scrollToIndex(V))})}}function G(i){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!i.props.disabled)if(e.multiple){const d=v.value.findIndex(C=>e.valueComparator(C.value,i.value)),T=a??!~d;if(~d){const C=T?[...v.value,i]:[...v.value];C.splice(d,1),v.value=C}else T&&(v.value=[...v.value,i])}else{const d=a!==!1;v.value=d?[i]:[],fe(()=>{l.value=!1})}}function $(i){var a;(a=h.value)!=null&&a.$el.contains(i.relatedTarget)||(l.value=!1)}function F(){var i;t.value&&((i=o.value)==null||i.focus())}function ue(i){t.value=!0}function ae(i){if(i==null)v.value=[];else if(Pe(o.value,":autofill")||Pe(o.value,":-webkit-autofill")){const a=y.value.find(d=>d.title===i);a&&G(a)}else o.value&&(o.value.value="")}return N(l,()=>{if(!e.hideSelected&&l.value&&v.value.length){const i=x.value.findIndex(a=>v.value.some(d=>e.valueComparator(d.value,a.value)));ve&&window.requestAnimationFrame(()=>{var a;i>=0&&((a=k.value)==null||a.scrollToIndex(i))})}}),N(()=>e.items,(i,a)=>{l.value||t.value&&!a.length&&i.length&&(l.value=!0)}),le(()=>{const i=!!(e.chips||n.chip),a=!!(!e.hideNoData||x.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),d=v.value.length>0,T=he.filterProps(e),C=d||!t.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder;return u(he,L({ref:o},T,{modelValue:v.value.map(g=>g.props.value).join(", "),"onUpdate:modelValue":ae,focused:t.value,"onUpdate:focused":g=>t.value=g,validationValue:v.externalValue,counterValue:P.value,dirty:d,class:["v-select",{"v-select--active-menu":l.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":v.value.length,"v-select--selection-slot":!!n.selection},e.class],style:e.style,inputmode:"none",placeholder:C,"onClick:clear":_,"onMousedown:control":z,onBlur:$,onKeydown:W,"aria-label":r(f.value),title:r(f.value)}),{...n,default:()=>u(X,null,[u(Ht,L({ref:p,modelValue:l.value,"onUpdate:modelValue":g=>l.value=g,activator:"parent",contentClass:"v-select__content",disabled:H.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:F},ee.value),{default:()=>[a&&u(It,L({ref:h,selected:c.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:g=>g.preventDefault(),onKeydown:U,onFocusin:ue,onScrollPassive:M,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var g,A,V;return[(g=n["prepend-item"])==null?void 0:g.call(n),!x.value.length&&!e.hideNoData&&(((A=n["no-data"])==null?void 0:A.call(n))??u(Ce,{title:r(e.noDataText)},null)),u(Wt,{ref:k,renderless:!0,items:x.value},{default:E=>{var pe;let{item:R,index:Y,itemRef:O}=E;const me=L(R.props,{ref:O,key:Y,onClick:()=>G(R,null)});return((pe=n.item)==null?void 0:pe.call(n,{item:R,index:Y,props:me}))??u(Ce,L(me,{role:"option"}),{prepend:_e=>{let{isSelected:Ke}=_e;return u(X,null,[e.multiple&&!e.hideSelected?u(Ot,{key:R.value,modelValue:Ke,ripple:!1,tabindex:"-1"},null):void 0,R.props.prependAvatar&&u(de,{image:R.props.prependAvatar},null),R.props.prependIcon&&u(Z,{icon:R.props.prependIcon},null)])}})}}),(V=n["append-item"])==null?void 0:V.call(n)]}})]}),v.value.map((g,A)=>{function V(O){O.stopPropagation(),O.preventDefault(),G(g,!1)}const E={"onClick:close":V,onKeydown(O){O.key!=="Enter"&&O.key!==" "||(O.preventDefault(),O.stopPropagation(),V(O))},onMousedown(O){O.preventDefault(),O.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},R=i?!!n.chip:!!n.selection,Y=R?xt(i?n.chip({item:g,index:A,props:E}):n.selection({item:g,index:A})):void 0;if(!(R&&!Y))return u("div",{key:g.value,class:"v-select__selection"},[i?n.chip?u(J,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:g.title}}},{default:()=>[Y]}):u(_t,L({key:"chip",closable:e.closableChips,size:"small",text:g.title,disabled:g.props.disabled},E),null):Y??u("span",{class:"v-select__selection-text"},[g.title,e.multiple&&A<v.value.length-1&&u("span",{class:"v-select__selection-comma"},[Tt(",")])])])})]),"append-inner":function(){var E;for(var g=arguments.length,A=new Array(g),V=0;V<g;V++)A[V]=arguments[V];return u(X,null,[(E=n["append-inner"])==null?void 0:E.call(n,...A),e.menuIcon?u(Z,{class:"v-select__menu-icon",icon:e.menuIcon},null):void 0])}})}),Le({isFocused:t,menu:l,select:G},o)}});export{il as V,Ht as a,Wt as b,_t as c,sl as d,qt as e,$t as f,zt as g,Zt as m,Yt as u};