codex 1.5.7rc1__py3-none-any.whl → 1.5.8__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 (395) hide show
  1. codex/librarian/importer/aggregate_metadata.py +12 -7
  2. codex/librarian/importer/importerd.py +36 -3
  3. codex/librarian/importer/tasks.py +8 -0
  4. codex/models/comic.py +9 -0
  5. codex/search/backend.py +21 -18
  6. codex/search/indexes.py +9 -4
  7. codex/serializers/browser/page.py +1 -0
  8. codex/static_root/assets/{VCheckbox-DXUwafcN.5d4577e0b16d.js → VCheckbox-CAnsONJ8.1d8ba3df8d9f.js} +1 -1
  9. codex/static_root/assets/VCheckbox-CAnsONJ8.1d8ba3df8d9f.js.br +0 -0
  10. codex/static_root/assets/VCheckbox-CAnsONJ8.1d8ba3df8d9f.js.gz +0 -0
  11. codex/static_root/assets/{VCheckbox-DXUwafcN.js → VCheckbox-CAnsONJ8.js} +1 -1
  12. codex/static_root/assets/VCheckbox-CAnsONJ8.js.br +0 -0
  13. codex/static_root/assets/VCheckbox-CAnsONJ8.js.gz +0 -0
  14. codex/static_root/assets/{VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js → VCheckboxBtn-DQTVBkac.93f2be0971d2.js} +1 -1
  15. codex/static_root/assets/VCheckboxBtn-DQTVBkac.93f2be0971d2.js.br +0 -0
  16. codex/static_root/assets/VCheckboxBtn-DQTVBkac.93f2be0971d2.js.gz +0 -0
  17. codex/static_root/assets/{VCheckboxBtn-DtrZ6IUL.js → VCheckboxBtn-DQTVBkac.js} +1 -1
  18. codex/static_root/assets/VCheckboxBtn-DQTVBkac.js.br +0 -0
  19. codex/static_root/assets/VCheckboxBtn-DQTVBkac.js.gz +0 -0
  20. codex/static_root/assets/{VCombobox-p6JaNJiS.08de72bf3f1d.js → VCombobox-xgzcfu8j.85e27125105c.js} +1 -1
  21. codex/static_root/assets/VCombobox-xgzcfu8j.85e27125105c.js.br +0 -0
  22. codex/static_root/assets/VCombobox-xgzcfu8j.85e27125105c.js.gz +0 -0
  23. codex/static_root/assets/{VCombobox-p6JaNJiS.js → VCombobox-xgzcfu8j.js} +1 -1
  24. codex/static_root/assets/VCombobox-xgzcfu8j.js.br +0 -0
  25. codex/static_root/assets/VCombobox-xgzcfu8j.js.gz +0 -0
  26. codex/static_root/assets/{VDataTableVirtual-Bak8sUxr.0f131a181de8.js → VDataTableVirtual-ohR-xfIW.54047fbf2e77.js} +1 -1
  27. codex/static_root/assets/VDataTableVirtual-ohR-xfIW.54047fbf2e77.js.br +0 -0
  28. codex/static_root/assets/VDataTableVirtual-ohR-xfIW.54047fbf2e77.js.gz +0 -0
  29. codex/static_root/assets/{VDataTableVirtual-Bak8sUxr.js → VDataTableVirtual-ohR-xfIW.js} +1 -1
  30. codex/static_root/assets/VDataTableVirtual-ohR-xfIW.js.br +0 -0
  31. codex/static_root/assets/VDataTableVirtual-ohR-xfIW.js.gz +0 -0
  32. codex/static_root/assets/{VExpansionPanel-BrGvn58l.4330794fe673.js → VExpansionPanel-D77IHp4B.fe0052639210.js} +1 -1
  33. codex/static_root/assets/VExpansionPanel-D77IHp4B.fe0052639210.js.br +0 -0
  34. codex/static_root/assets/VExpansionPanel-D77IHp4B.fe0052639210.js.gz +0 -0
  35. codex/static_root/assets/{VExpansionPanel-BrGvn58l.js → VExpansionPanel-D77IHp4B.js} +1 -1
  36. codex/static_root/assets/VExpansionPanel-D77IHp4B.js.br +0 -0
  37. codex/static_root/assets/VExpansionPanel-D77IHp4B.js.gz +0 -0
  38. codex/static_root/assets/{VMain-CuWbokFS.25c97b3ec973.js → VMain-BcP4P6kJ.26ba71b71a30.js} +1 -1
  39. codex/static_root/assets/VMain-BcP4P6kJ.26ba71b71a30.js.br +0 -0
  40. codex/static_root/assets/VMain-BcP4P6kJ.26ba71b71a30.js.gz +0 -0
  41. codex/static_root/assets/{VMain-CuWbokFS.js → VMain-BcP4P6kJ.js} +1 -1
  42. codex/static_root/assets/VMain-BcP4P6kJ.js.br +0 -0
  43. codex/static_root/assets/VMain-BcP4P6kJ.js.gz +0 -0
  44. codex/static_root/assets/{VRadioGroup-DYMjLsVk.c4d81d70bec4.js → VRadioGroup-DQQmB99C.8e62ca305d42.js} +1 -1
  45. codex/static_root/assets/VRadioGroup-DQQmB99C.8e62ca305d42.js.br +5 -0
  46. codex/static_root/assets/VRadioGroup-DQQmB99C.8e62ca305d42.js.gz +0 -0
  47. codex/static_root/assets/{VRadioGroup-DYMjLsVk.js → VRadioGroup-DQQmB99C.js} +1 -1
  48. codex/static_root/assets/VRadioGroup-DQQmB99C.js.br +5 -0
  49. codex/static_root/assets/VRadioGroup-DQQmB99C.js.gz +0 -0
  50. codex/static_root/assets/{VSelect-CgOC_YIA.js → VSelect-YSL0tIop.c23c0657cf17.js} +1 -1
  51. codex/static_root/assets/VSelect-YSL0tIop.c23c0657cf17.js.br +0 -0
  52. codex/static_root/assets/VSelect-YSL0tIop.c23c0657cf17.js.gz +0 -0
  53. codex/static_root/assets/{VSelect-CgOC_YIA.3d63f40c8ea4.js → VSelect-YSL0tIop.js} +1 -1
  54. codex/static_root/assets/VSelect-YSL0tIop.js.br +0 -0
  55. codex/static_root/assets/VSelect-YSL0tIop.js.gz +0 -0
  56. codex/static_root/assets/{VSelectionControl-CD7bn0s_.0aa74aad8b61.js → VSelectionControl-D0ha1VYk.60bd3aeb20e1.js} +1 -1
  57. codex/static_root/assets/VSelectionControl-D0ha1VYk.60bd3aeb20e1.js.br +0 -0
  58. codex/static_root/assets/VSelectionControl-D0ha1VYk.60bd3aeb20e1.js.gz +0 -0
  59. codex/static_root/assets/{VSelectionControl-CD7bn0s_.js → VSelectionControl-D0ha1VYk.js} +1 -1
  60. codex/static_root/assets/VSelectionControl-D0ha1VYk.js.br +0 -0
  61. codex/static_root/assets/VSelectionControl-D0ha1VYk.js.gz +0 -0
  62. codex/static_root/assets/{VSlideGroup-Bssf4EBT.fc0918385f7e.js → VSlideGroup-BW6pFVGY.13cecf1a7794.js} +1 -1
  63. codex/static_root/assets/VSlideGroup-BW6pFVGY.13cecf1a7794.js.br +0 -0
  64. codex/static_root/assets/VSlideGroup-BW6pFVGY.13cecf1a7794.js.gz +0 -0
  65. codex/static_root/assets/{VSlideGroup-Bssf4EBT.js → VSlideGroup-BW6pFVGY.js} +1 -1
  66. codex/static_root/assets/VSlideGroup-BW6pFVGY.js.br +0 -0
  67. codex/static_root/assets/VSlideGroup-BW6pFVGY.js.gz +0 -0
  68. codex/static_root/assets/{VTable-DqraBe83.1f53f4e0e79f.js → VTable-CXI0Xaio.06b95b33adaf.js} +1 -1
  69. codex/static_root/assets/VTable-CXI0Xaio.06b95b33adaf.js.br +0 -0
  70. codex/static_root/assets/VTable-CXI0Xaio.06b95b33adaf.js.gz +0 -0
  71. codex/static_root/assets/{VTable-DqraBe83.js → VTable-CXI0Xaio.js} +1 -1
  72. codex/static_root/assets/VTable-CXI0Xaio.js.br +0 -0
  73. codex/static_root/assets/VTable-CXI0Xaio.js.gz +0 -0
  74. codex/static_root/assets/{VToolbar-kI3X77C7.js → VToolbar-CnoJq5Ck.5b3dcfbf1c77.js} +2 -2
  75. codex/static_root/assets/VToolbar-CnoJq5Ck.5b3dcfbf1c77.js.br +0 -0
  76. codex/static_root/assets/VToolbar-CnoJq5Ck.5b3dcfbf1c77.js.gz +0 -0
  77. codex/static_root/assets/{VToolbar-kI3X77C7.54fc7a9541e0.js → VToolbar-CnoJq5Ck.js} +2 -2
  78. codex/static_root/assets/VToolbar-CnoJq5Ck.js.br +0 -0
  79. codex/static_root/assets/VToolbar-CnoJq5Ck.js.gz +0 -0
  80. codex/static_root/assets/{VWindowItem-DiY3uz1L.569d029cc939.js → VWindowItem-Cq-qPd5h.291287bcb566.js} +1 -1
  81. codex/static_root/assets/VWindowItem-Cq-qPd5h.291287bcb566.js.br +0 -0
  82. codex/static_root/assets/VWindowItem-Cq-qPd5h.291287bcb566.js.gz +0 -0
  83. codex/static_root/assets/{VWindowItem-DiY3uz1L.js → VWindowItem-Cq-qPd5h.js} +1 -1
  84. codex/static_root/assets/VWindowItem-Cq-qPd5h.js.br +0 -0
  85. codex/static_root/assets/VWindowItem-Cq-qPd5h.js.gz +0 -0
  86. codex/static_root/assets/{admin-BW3Yp8Zu.bdbca238dcd4.js → admin-3sFieyVL.7a879e617e60.js} +1 -1
  87. codex/static_root/assets/admin-3sFieyVL.7a879e617e60.js.br +0 -0
  88. codex/static_root/assets/admin-3sFieyVL.7a879e617e60.js.gz +0 -0
  89. codex/static_root/assets/{admin-BW3Yp8Zu.js → admin-3sFieyVL.js} +1 -1
  90. codex/static_root/assets/admin-3sFieyVL.js.br +0 -0
  91. codex/static_root/assets/admin-3sFieyVL.js.gz +0 -0
  92. codex/static_root/assets/{admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js → admin-drawer-panel-C5XtSLXl.f1df22cd1144.js} +2 -2
  93. codex/static_root/assets/admin-drawer-panel-C5XtSLXl.f1df22cd1144.js.br +0 -0
  94. codex/static_root/assets/admin-drawer-panel-C5XtSLXl.f1df22cd1144.js.gz +0 -0
  95. codex/static_root/assets/{admin-drawer-panel-CJ7EZ2DP.js → admin-drawer-panel-C5XtSLXl.js} +2 -2
  96. codex/static_root/assets/admin-drawer-panel-C5XtSLXl.js.br +0 -0
  97. codex/static_root/assets/admin-drawer-panel-C5XtSLXl.js.gz +0 -0
  98. codex/static_root/assets/{browser-C8SJwVGz.0f7daf93b064.css → browser-2i0QA4La.587673ac534c.css} +1 -1
  99. codex/static_root/assets/browser-2i0QA4La.587673ac534c.css.br +0 -0
  100. codex/static_root/assets/browser-2i0QA4La.587673ac534c.css.gz +0 -0
  101. codex/static_root/assets/{browser-C8SJwVGz.css → browser-2i0QA4La.css} +1 -1
  102. codex/static_root/assets/browser-2i0QA4La.css.br +0 -0
  103. codex/static_root/assets/browser-2i0QA4La.css.gz +0 -0
  104. codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js +1 -0
  105. codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js.br +0 -0
  106. codex/static_root/assets/browser-I1ZoWm1m.76347934dab3.js.gz +0 -0
  107. codex/static_root/assets/browser-I1ZoWm1m.js +1 -0
  108. codex/static_root/assets/browser-I1ZoWm1m.js.br +0 -0
  109. codex/static_root/assets/browser-I1ZoWm1m.js.gz +0 -0
  110. codex/static_root/assets/{change-password-dialog-DvdVuJbx.ea31df1541a2.js → change-password-dialog-BkX8NP9F.6eec04396e20.js} +1 -1
  111. codex/static_root/assets/change-password-dialog-BkX8NP9F.6eec04396e20.js.br +0 -0
  112. codex/static_root/assets/change-password-dialog-BkX8NP9F.6eec04396e20.js.gz +0 -0
  113. codex/static_root/assets/{change-password-dialog-DvdVuJbx.js → change-password-dialog-BkX8NP9F.js} +1 -1
  114. codex/static_root/assets/change-password-dialog-BkX8NP9F.js.br +0 -0
  115. codex/static_root/assets/change-password-dialog-BkX8NP9F.js.gz +0 -0
  116. codex/static_root/assets/{confirm-dialog-oqU_wtjV.38d99c746057.js → confirm-dialog-CKiPNGTr.b80ae71d7170.js} +1 -1
  117. codex/static_root/assets/confirm-dialog-CKiPNGTr.b80ae71d7170.js.br +0 -0
  118. codex/static_root/assets/confirm-dialog-CKiPNGTr.b80ae71d7170.js.gz +0 -0
  119. codex/static_root/assets/{confirm-dialog-oqU_wtjV.js → confirm-dialog-CKiPNGTr.js} +1 -1
  120. codex/static_root/assets/confirm-dialog-CKiPNGTr.js.br +0 -0
  121. codex/static_root/assets/confirm-dialog-CKiPNGTr.js.gz +0 -0
  122. codex/static_root/assets/{confirm-footer-R7VhDN1M.js → confirm-footer-CP02GqhM.8ba00213022b.js} +1 -1
  123. codex/static_root/assets/confirm-footer-CP02GqhM.8ba00213022b.js.br +0 -0
  124. codex/static_root/assets/confirm-footer-CP02GqhM.8ba00213022b.js.gz +0 -0
  125. codex/static_root/assets/{confirm-footer-R7VhDN1M.67adfe281d35.js → confirm-footer-CP02GqhM.js} +1 -1
  126. codex/static_root/assets/confirm-footer-CP02GqhM.js.br +0 -0
  127. codex/static_root/assets/confirm-footer-CP02GqhM.js.gz +0 -0
  128. codex/static_root/assets/{datetime-column-CN_zeeDb.1cf9fd3f22d2.js → datetime-column-BnilMk5Y.96201e187340.js} +1 -1
  129. codex/static_root/assets/datetime-column-BnilMk5Y.96201e187340.js.br +0 -0
  130. codex/static_root/assets/datetime-column-BnilMk5Y.96201e187340.js.gz +0 -0
  131. codex/static_root/assets/{datetime-column-CN_zeeDb.js → datetime-column-BnilMk5Y.js} +1 -1
  132. codex/static_root/assets/datetime-column-BnilMk5Y.js.br +0 -0
  133. codex/static_root/assets/datetime-column-BnilMk5Y.js.gz +0 -0
  134. codex/static_root/assets/{filter-DhorJRK4.f9bf91b3928c.js → filter-Dp8VoLoJ.7dcf871c2c5d.js} +1 -1
  135. codex/static_root/assets/filter-Dp8VoLoJ.7dcf871c2c5d.js.br +0 -0
  136. codex/static_root/assets/filter-Dp8VoLoJ.7dcf871c2c5d.js.gz +0 -0
  137. codex/static_root/assets/{filter-DhorJRK4.js → filter-Dp8VoLoJ.js} +1 -1
  138. codex/static_root/assets/filter-Dp8VoLoJ.js.br +0 -0
  139. codex/static_root/assets/filter-Dp8VoLoJ.js.gz +0 -0
  140. codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js +1 -0
  141. codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js.br +0 -0
  142. codex/static_root/assets/flag-tab-BpATs2Vh.2ba1294488a2.js.gz +0 -0
  143. codex/static_root/assets/flag-tab-BpATs2Vh.js +1 -0
  144. codex/static_root/assets/flag-tab-BpATs2Vh.js.br +0 -0
  145. codex/static_root/assets/flag-tab-BpATs2Vh.js.gz +0 -0
  146. codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css +1 -0
  147. codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.br +1 -0
  148. codex/static_root/assets/flag-tab-DUXtbpA2.8d52c0d4f9e2.css.gz +0 -0
  149. codex/static_root/assets/flag-tab-DUXtbpA2.css +1 -0
  150. codex/static_root/assets/flag-tab-DUXtbpA2.css.br +1 -0
  151. codex/static_root/assets/flag-tab-DUXtbpA2.css.gz +0 -0
  152. codex/static_root/assets/{group-tab-_H9JlSpl.6c9b686b8f94.js → group-tab-BMv-gfGN.08bf0e591bdd.js} +1 -1
  153. codex/static_root/assets/group-tab-BMv-gfGN.08bf0e591bdd.js.br +0 -0
  154. codex/static_root/assets/group-tab-BMv-gfGN.08bf0e591bdd.js.gz +0 -0
  155. codex/static_root/assets/{group-tab-_H9JlSpl.js → group-tab-BMv-gfGN.js} +1 -1
  156. codex/static_root/assets/group-tab-BMv-gfGN.js.br +0 -0
  157. codex/static_root/assets/group-tab-BMv-gfGN.js.gz +0 -0
  158. codex/static_root/assets/{http-error-CV1CbTnY.fed9281e2348.js → http-error-Cb6Mqj4J.064dffeb574f.js} +1 -1
  159. codex/static_root/assets/http-error-Cb6Mqj4J.064dffeb574f.js.br +0 -0
  160. codex/static_root/assets/http-error-Cb6Mqj4J.064dffeb574f.js.gz +0 -0
  161. codex/static_root/assets/{http-error-CV1CbTnY.js → http-error-Cb6Mqj4J.js} +1 -1
  162. codex/static_root/assets/http-error-Cb6Mqj4J.js.br +0 -0
  163. codex/static_root/assets/http-error-Cb6Mqj4J.js.gz +0 -0
  164. codex/static_root/assets/{library-tab-D6k-bjIz.cbd8944c48f1.js → library-tab-CqPR7agm.db811498ed9a.js} +1 -1
  165. codex/static_root/assets/library-tab-CqPR7agm.db811498ed9a.js.br +0 -0
  166. codex/static_root/assets/library-tab-CqPR7agm.db811498ed9a.js.gz +0 -0
  167. codex/static_root/assets/{library-tab-D6k-bjIz.js → library-tab-CqPR7agm.js} +1 -1
  168. codex/static_root/assets/library-tab-CqPR7agm.js.br +0 -0
  169. codex/static_root/assets/library-tab-CqPR7agm.js.gz +0 -0
  170. codex/static_root/assets/{main-C8c_Yy_E.js → main-D1r3hZ0f.d05c749b9988.js} +4 -4
  171. codex/static_root/assets/main-D1r3hZ0f.d05c749b9988.js.br +0 -0
  172. codex/static_root/assets/main-D1r3hZ0f.d05c749b9988.js.gz +0 -0
  173. codex/static_root/assets/{main-C8c_Yy_E.16ff3f5c3880.js → main-D1r3hZ0f.js} +4 -4
  174. codex/static_root/assets/main-D1r3hZ0f.js.br +0 -0
  175. codex/static_root/assets/main-D1r3hZ0f.js.gz +0 -0
  176. codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js +1 -0
  177. codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js.br +0 -0
  178. codex/static_root/assets/metadata-dialog-B8UtDnAu.f3947fec119f.js.gz +0 -0
  179. codex/static_root/assets/metadata-dialog-B8UtDnAu.js +1 -0
  180. codex/static_root/assets/metadata-dialog-B8UtDnAu.js.br +0 -0
  181. codex/static_root/assets/metadata-dialog-B8UtDnAu.js.gz +0 -0
  182. codex/static_root/assets/{metadata-dialog-uikP6x2m.84a7b6c4b6b9.css → metadata-dialog-BGJasBRy.0553851658b5.css} +1 -1
  183. codex/static_root/assets/metadata-dialog-BGJasBRy.0553851658b5.css.br +0 -0
  184. codex/static_root/assets/metadata-dialog-BGJasBRy.0553851658b5.css.gz +0 -0
  185. codex/static_root/assets/{metadata-dialog-uikP6x2m.css → metadata-dialog-BGJasBRy.css} +1 -1
  186. codex/static_root/assets/metadata-dialog-BGJasBRy.css.br +0 -0
  187. codex/static_root/assets/metadata-dialog-BGJasBRy.css.gz +0 -0
  188. codex/static_root/assets/{pdf-doc-DOq4qvUr.89d991424d2f.js → pdf-doc-DWjSqsgP.12c6022d08b7.js} +1 -1
  189. codex/static_root/assets/pdf-doc-DWjSqsgP.12c6022d08b7.js.br +0 -0
  190. codex/static_root/assets/pdf-doc-DWjSqsgP.12c6022d08b7.js.gz +0 -0
  191. codex/static_root/assets/{pdf-doc-DOq4qvUr.js → pdf-doc-DWjSqsgP.js} +1 -1
  192. codex/static_root/assets/pdf-doc-DWjSqsgP.js.br +0 -0
  193. codex/static_root/assets/pdf-doc-DWjSqsgP.js.gz +0 -0
  194. codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js +7 -0
  195. codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js.br +0 -0
  196. codex/static_root/assets/reader-DsBRqChH.ae8ffff757c7.js.gz +0 -0
  197. codex/static_root/assets/reader-DsBRqChH.js +7 -0
  198. codex/static_root/assets/reader-DsBRqChH.js.br +0 -0
  199. codex/static_root/assets/reader-DsBRqChH.js.gz +0 -0
  200. codex/static_root/assets/{stats-tab-VaVi9-_s.186447352c39.js → stats-tab-BFuWdQ3i.625b51e3ee5b.js} +1 -1
  201. codex/static_root/assets/stats-tab-BFuWdQ3i.625b51e3ee5b.js.br +0 -0
  202. codex/static_root/assets/stats-tab-BFuWdQ3i.625b51e3ee5b.js.gz +0 -0
  203. codex/static_root/assets/{stats-tab-VaVi9-_s.js → stats-tab-BFuWdQ3i.js} +1 -1
  204. codex/static_root/assets/stats-tab-BFuWdQ3i.js.br +0 -0
  205. codex/static_root/assets/stats-tab-BFuWdQ3i.js.gz +0 -0
  206. codex/static_root/assets/{task-tab-C0L1rPrr.249d29a1eb6b.js → task-tab-DrTBYMCB.ac4473d3a137.js} +1 -1
  207. codex/static_root/assets/task-tab-DrTBYMCB.ac4473d3a137.js.br +0 -0
  208. codex/static_root/assets/task-tab-DrTBYMCB.ac4473d3a137.js.gz +0 -0
  209. codex/static_root/assets/{task-tab-C0L1rPrr.js → task-tab-DrTBYMCB.js} +1 -1
  210. codex/static_root/assets/task-tab-DrTBYMCB.js.br +0 -0
  211. codex/static_root/assets/task-tab-DrTBYMCB.js.gz +0 -0
  212. codex/static_root/assets/{user-tab-Cj-rHVvF.cbb1700e110d.js → user-tab-CYzh_eX6.a2470464a951.js} +1 -1
  213. codex/static_root/assets/user-tab-CYzh_eX6.a2470464a951.js.br +0 -0
  214. codex/static_root/assets/user-tab-CYzh_eX6.a2470464a951.js.gz +0 -0
  215. codex/static_root/assets/{user-tab-Cj-rHVvF.js → user-tab-CYzh_eX6.js} +1 -1
  216. codex/static_root/assets/user-tab-CYzh_eX6.js.br +0 -0
  217. codex/static_root/assets/user-tab-CYzh_eX6.js.gz +0 -0
  218. codex/static_root/js/{choices-admin.3a2cdebdbfba.json → choices-admin.bb730e4f26ac.json} +1 -1
  219. codex/static_root/js/choices-admin.bb730e4f26ac.json.br +0 -0
  220. codex/static_root/js/{choices-admin.3a2cdebdbfba.json.gz → choices-admin.bb730e4f26ac.json.gz} +0 -0
  221. codex/static_root/js/choices-admin.json +1 -1
  222. codex/static_root/js/choices-admin.json.br +0 -0
  223. codex/static_root/js/choices-admin.json.gz +0 -0
  224. codex/static_root/{manifest.4609de9a4d51.json → manifest.07a0961655a3.json} +209 -209
  225. codex/static_root/manifest.07a0961655a3.json.br +0 -0
  226. codex/static_root/manifest.07a0961655a3.json.gz +0 -0
  227. codex/static_root/manifest.json +209 -209
  228. codex/static_root/manifest.json.br +0 -0
  229. codex/static_root/manifest.json.gz +0 -0
  230. codex/static_root/staticfiles.json +1 -1
  231. codex/templates/search/indexes/codex/comic_text.txt +1 -1
  232. codex/views/browser/base.py +4 -1
  233. codex/views/browser/browser.py +19 -14
  234. codex/views/browser/choices.py +2 -0
  235. codex/views/browser/filters/search.py +3 -1
  236. codex/views/browser/metadata.py +12 -6
  237. codex/views/reader/reader.py +53 -5
  238. {codex-1.5.7rc1.dist-info → codex-1.5.8.dist-info}/METADATA +1 -1
  239. {codex-1.5.7rc1.dist-info → codex-1.5.8.dist-info}/RECORD +242 -242
  240. codex/static_root/assets/VCheckbox-DXUwafcN.5d4577e0b16d.js.br +0 -0
  241. codex/static_root/assets/VCheckbox-DXUwafcN.5d4577e0b16d.js.gz +0 -0
  242. codex/static_root/assets/VCheckbox-DXUwafcN.js.br +0 -0
  243. codex/static_root/assets/VCheckbox-DXUwafcN.js.gz +0 -0
  244. codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js.br +0 -0
  245. codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.4f8f7be34af8.js.gz +0 -0
  246. codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.js.br +0 -0
  247. codex/static_root/assets/VCheckboxBtn-DtrZ6IUL.js.gz +0 -0
  248. codex/static_root/assets/VCombobox-p6JaNJiS.08de72bf3f1d.js.br +0 -0
  249. codex/static_root/assets/VCombobox-p6JaNJiS.08de72bf3f1d.js.gz +0 -0
  250. codex/static_root/assets/VCombobox-p6JaNJiS.js.br +0 -0
  251. codex/static_root/assets/VCombobox-p6JaNJiS.js.gz +0 -0
  252. codex/static_root/assets/VDataTableVirtual-Bak8sUxr.0f131a181de8.js.br +0 -0
  253. codex/static_root/assets/VDataTableVirtual-Bak8sUxr.0f131a181de8.js.gz +0 -0
  254. codex/static_root/assets/VDataTableVirtual-Bak8sUxr.js.br +0 -0
  255. codex/static_root/assets/VDataTableVirtual-Bak8sUxr.js.gz +0 -0
  256. codex/static_root/assets/VExpansionPanel-BrGvn58l.4330794fe673.js.br +0 -0
  257. codex/static_root/assets/VExpansionPanel-BrGvn58l.4330794fe673.js.gz +0 -0
  258. codex/static_root/assets/VExpansionPanel-BrGvn58l.js.br +0 -0
  259. codex/static_root/assets/VExpansionPanel-BrGvn58l.js.gz +0 -0
  260. codex/static_root/assets/VMain-CuWbokFS.25c97b3ec973.js.br +0 -0
  261. codex/static_root/assets/VMain-CuWbokFS.25c97b3ec973.js.gz +0 -0
  262. codex/static_root/assets/VMain-CuWbokFS.js.br +0 -0
  263. codex/static_root/assets/VMain-CuWbokFS.js.gz +0 -0
  264. codex/static_root/assets/VRadioGroup-DYMjLsVk.c4d81d70bec4.js.br +0 -0
  265. codex/static_root/assets/VRadioGroup-DYMjLsVk.c4d81d70bec4.js.gz +0 -0
  266. codex/static_root/assets/VRadioGroup-DYMjLsVk.js.br +0 -0
  267. codex/static_root/assets/VRadioGroup-DYMjLsVk.js.gz +0 -0
  268. codex/static_root/assets/VSelect-CgOC_YIA.3d63f40c8ea4.js.br +0 -0
  269. codex/static_root/assets/VSelect-CgOC_YIA.3d63f40c8ea4.js.gz +0 -0
  270. codex/static_root/assets/VSelect-CgOC_YIA.js.br +0 -0
  271. codex/static_root/assets/VSelect-CgOC_YIA.js.gz +0 -0
  272. codex/static_root/assets/VSelectionControl-CD7bn0s_.0aa74aad8b61.js.br +0 -0
  273. codex/static_root/assets/VSelectionControl-CD7bn0s_.0aa74aad8b61.js.gz +0 -0
  274. codex/static_root/assets/VSelectionControl-CD7bn0s_.js.br +0 -0
  275. codex/static_root/assets/VSelectionControl-CD7bn0s_.js.gz +0 -0
  276. codex/static_root/assets/VSlideGroup-Bssf4EBT.fc0918385f7e.js.br +0 -0
  277. codex/static_root/assets/VSlideGroup-Bssf4EBT.fc0918385f7e.js.gz +0 -0
  278. codex/static_root/assets/VSlideGroup-Bssf4EBT.js.br +0 -0
  279. codex/static_root/assets/VSlideGroup-Bssf4EBT.js.gz +0 -0
  280. codex/static_root/assets/VTable-DqraBe83.1f53f4e0e79f.js.br +0 -0
  281. codex/static_root/assets/VTable-DqraBe83.1f53f4e0e79f.js.gz +0 -0
  282. codex/static_root/assets/VTable-DqraBe83.js.br +0 -0
  283. codex/static_root/assets/VTable-DqraBe83.js.gz +0 -0
  284. codex/static_root/assets/VToolbar-kI3X77C7.54fc7a9541e0.js.br +0 -0
  285. codex/static_root/assets/VToolbar-kI3X77C7.54fc7a9541e0.js.gz +0 -0
  286. codex/static_root/assets/VToolbar-kI3X77C7.js.br +0 -0
  287. codex/static_root/assets/VToolbar-kI3X77C7.js.gz +0 -0
  288. codex/static_root/assets/VWindowItem-DiY3uz1L.569d029cc939.js.br +0 -0
  289. codex/static_root/assets/VWindowItem-DiY3uz1L.569d029cc939.js.gz +0 -0
  290. codex/static_root/assets/VWindowItem-DiY3uz1L.js.br +0 -0
  291. codex/static_root/assets/VWindowItem-DiY3uz1L.js.gz +0 -0
  292. codex/static_root/assets/admin-BW3Yp8Zu.bdbca238dcd4.js.br +0 -0
  293. codex/static_root/assets/admin-BW3Yp8Zu.bdbca238dcd4.js.gz +0 -0
  294. codex/static_root/assets/admin-BW3Yp8Zu.js.br +0 -0
  295. codex/static_root/assets/admin-BW3Yp8Zu.js.gz +0 -0
  296. codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js.br +0 -0
  297. codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.b6a369b30b07.js.gz +0 -0
  298. codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.js.br +0 -0
  299. codex/static_root/assets/admin-drawer-panel-CJ7EZ2DP.js.gz +0 -0
  300. codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js +0 -1
  301. codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js.br +0 -0
  302. codex/static_root/assets/browser-BQuqhnNc.df377a24a88a.js.gz +0 -0
  303. codex/static_root/assets/browser-BQuqhnNc.js +0 -1
  304. codex/static_root/assets/browser-BQuqhnNc.js.br +0 -0
  305. codex/static_root/assets/browser-BQuqhnNc.js.gz +0 -0
  306. codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.br +0 -0
  307. codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.gz +0 -0
  308. codex/static_root/assets/browser-C8SJwVGz.css.br +0 -0
  309. codex/static_root/assets/browser-C8SJwVGz.css.gz +0 -0
  310. codex/static_root/assets/change-password-dialog-DvdVuJbx.ea31df1541a2.js.br +0 -0
  311. codex/static_root/assets/change-password-dialog-DvdVuJbx.ea31df1541a2.js.gz +0 -0
  312. codex/static_root/assets/change-password-dialog-DvdVuJbx.js.br +0 -0
  313. codex/static_root/assets/change-password-dialog-DvdVuJbx.js.gz +0 -0
  314. codex/static_root/assets/confirm-dialog-oqU_wtjV.38d99c746057.js.br +0 -0
  315. codex/static_root/assets/confirm-dialog-oqU_wtjV.38d99c746057.js.gz +0 -0
  316. codex/static_root/assets/confirm-dialog-oqU_wtjV.js.br +0 -0
  317. codex/static_root/assets/confirm-dialog-oqU_wtjV.js.gz +0 -0
  318. codex/static_root/assets/confirm-footer-R7VhDN1M.67adfe281d35.js.br +0 -0
  319. codex/static_root/assets/confirm-footer-R7VhDN1M.67adfe281d35.js.gz +0 -0
  320. codex/static_root/assets/confirm-footer-R7VhDN1M.js.br +0 -0
  321. codex/static_root/assets/confirm-footer-R7VhDN1M.js.gz +0 -0
  322. codex/static_root/assets/datetime-column-CN_zeeDb.1cf9fd3f22d2.js.br +0 -0
  323. codex/static_root/assets/datetime-column-CN_zeeDb.1cf9fd3f22d2.js.gz +0 -0
  324. codex/static_root/assets/datetime-column-CN_zeeDb.js.br +0 -0
  325. codex/static_root/assets/datetime-column-CN_zeeDb.js.gz +0 -0
  326. codex/static_root/assets/filter-DhorJRK4.f9bf91b3928c.js.br +0 -0
  327. codex/static_root/assets/filter-DhorJRK4.f9bf91b3928c.js.gz +0 -0
  328. codex/static_root/assets/filter-DhorJRK4.js.br +0 -0
  329. codex/static_root/assets/filter-DhorJRK4.js.gz +0 -0
  330. codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css +0 -1
  331. codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css.br +0 -1
  332. codex/static_root/assets/flag-tab-BTiZcgOa.81b4fefa02e1.css.gz +0 -0
  333. codex/static_root/assets/flag-tab-BTiZcgOa.css +0 -1
  334. codex/static_root/assets/flag-tab-BTiZcgOa.css.br +0 -1
  335. codex/static_root/assets/flag-tab-BTiZcgOa.css.gz +0 -0
  336. codex/static_root/assets/flag-tab-C-ZU-QYU.c190eb30e5d5.js +0 -1
  337. codex/static_root/assets/flag-tab-C-ZU-QYU.c190eb30e5d5.js.br +0 -0
  338. codex/static_root/assets/flag-tab-C-ZU-QYU.c190eb30e5d5.js.gz +0 -0
  339. codex/static_root/assets/flag-tab-C-ZU-QYU.js +0 -1
  340. codex/static_root/assets/flag-tab-C-ZU-QYU.js.br +0 -0
  341. codex/static_root/assets/flag-tab-C-ZU-QYU.js.gz +0 -0
  342. codex/static_root/assets/group-tab-_H9JlSpl.6c9b686b8f94.js.br +0 -0
  343. codex/static_root/assets/group-tab-_H9JlSpl.6c9b686b8f94.js.gz +0 -0
  344. codex/static_root/assets/group-tab-_H9JlSpl.js.br +0 -0
  345. codex/static_root/assets/group-tab-_H9JlSpl.js.gz +0 -0
  346. codex/static_root/assets/http-error-CV1CbTnY.fed9281e2348.js.br +0 -0
  347. codex/static_root/assets/http-error-CV1CbTnY.fed9281e2348.js.gz +0 -0
  348. codex/static_root/assets/http-error-CV1CbTnY.js.br +0 -0
  349. codex/static_root/assets/http-error-CV1CbTnY.js.gz +0 -0
  350. codex/static_root/assets/library-tab-D6k-bjIz.cbd8944c48f1.js.br +0 -0
  351. codex/static_root/assets/library-tab-D6k-bjIz.cbd8944c48f1.js.gz +0 -0
  352. codex/static_root/assets/library-tab-D6k-bjIz.js.br +0 -0
  353. codex/static_root/assets/library-tab-D6k-bjIz.js.gz +0 -0
  354. codex/static_root/assets/main-C8c_Yy_E.16ff3f5c3880.js.br +0 -0
  355. codex/static_root/assets/main-C8c_Yy_E.16ff3f5c3880.js.gz +0 -0
  356. codex/static_root/assets/main-C8c_Yy_E.js.br +0 -0
  357. codex/static_root/assets/main-C8c_Yy_E.js.gz +0 -0
  358. codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js +0 -1
  359. codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js.br +0 -0
  360. codex/static_root/assets/metadata-dialog-B9q6Xpe7.103141664cd0.js.gz +0 -0
  361. codex/static_root/assets/metadata-dialog-B9q6Xpe7.js +0 -1
  362. codex/static_root/assets/metadata-dialog-B9q6Xpe7.js.br +0 -0
  363. codex/static_root/assets/metadata-dialog-B9q6Xpe7.js.gz +0 -0
  364. codex/static_root/assets/metadata-dialog-uikP6x2m.84a7b6c4b6b9.css.br +0 -0
  365. codex/static_root/assets/metadata-dialog-uikP6x2m.84a7b6c4b6b9.css.gz +0 -0
  366. codex/static_root/assets/metadata-dialog-uikP6x2m.css.br +0 -0
  367. codex/static_root/assets/metadata-dialog-uikP6x2m.css.gz +0 -0
  368. codex/static_root/assets/pdf-doc-DOq4qvUr.89d991424d2f.js.br +0 -0
  369. codex/static_root/assets/pdf-doc-DOq4qvUr.89d991424d2f.js.gz +0 -0
  370. codex/static_root/assets/pdf-doc-DOq4qvUr.js.br +0 -0
  371. codex/static_root/assets/pdf-doc-DOq4qvUr.js.gz +0 -0
  372. codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js +0 -7
  373. codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js.br +0 -0
  374. codex/static_root/assets/reader-BWdhR39E.8f8a692077dc.js.gz +0 -0
  375. codex/static_root/assets/reader-BWdhR39E.js +0 -7
  376. codex/static_root/assets/reader-BWdhR39E.js.br +0 -0
  377. codex/static_root/assets/reader-BWdhR39E.js.gz +0 -0
  378. codex/static_root/assets/stats-tab-VaVi9-_s.186447352c39.js.br +0 -0
  379. codex/static_root/assets/stats-tab-VaVi9-_s.186447352c39.js.gz +0 -0
  380. codex/static_root/assets/stats-tab-VaVi9-_s.js.br +0 -0
  381. codex/static_root/assets/stats-tab-VaVi9-_s.js.gz +0 -0
  382. codex/static_root/assets/task-tab-C0L1rPrr.249d29a1eb6b.js.br +0 -0
  383. codex/static_root/assets/task-tab-C0L1rPrr.249d29a1eb6b.js.gz +0 -0
  384. codex/static_root/assets/task-tab-C0L1rPrr.js.br +0 -0
  385. codex/static_root/assets/task-tab-C0L1rPrr.js.gz +0 -0
  386. codex/static_root/assets/user-tab-Cj-rHVvF.cbb1700e110d.js.br +0 -0
  387. codex/static_root/assets/user-tab-Cj-rHVvF.cbb1700e110d.js.gz +0 -0
  388. codex/static_root/assets/user-tab-Cj-rHVvF.js.br +0 -0
  389. codex/static_root/assets/user-tab-Cj-rHVvF.js.gz +0 -0
  390. codex/static_root/js/choices-admin.3a2cdebdbfba.json.br +0 -0
  391. codex/static_root/manifest.4609de9a4d51.json.br +0 -0
  392. codex/static_root/manifest.4609de9a4d51.json.gz +0 -0
  393. {codex-1.5.7rc1.dist-info → codex-1.5.8.dist-info}/LICENSE +0 -0
  394. {codex-1.5.7rc1.dist-info → codex-1.5.8.dist-info}/WHEEL +0 -0
  395. {codex-1.5.7rc1.dist-info → codex-1.5.8.dist-info}/entry_points.txt +0 -0
@@ -94,13 +94,14 @@ class AggregateMetadataMixin(CleanMetadataMixin):
94
94
  m2m_md = {}
95
95
  failed_import = {}
96
96
  try:
97
- with Comicbox(path) as cb:
98
- if import_metadata:
97
+ if import_metadata:
98
+ with Comicbox(path) as cb:
99
99
  md = cb.to_dict()
100
100
  md = md.get("comicbox", {})
101
- md["file_type"] = cb.get_file_type()
102
- if "page_count" not in md:
103
- md["page_count"] = cb.get_page_count()
101
+ if "file_type" not in md:
102
+ md["file_type"] = cb.get_file_type()
103
+ if "page_count" not in md:
104
+ md["page_count"] = cb.get_page_count()
104
105
 
105
106
  md["path"] = path
106
107
  md = self.clean_md(md)
@@ -242,11 +243,12 @@ class AggregateMetadataMixin(CleanMetadataMixin):
242
243
  self.status_controller.update(status)
243
244
 
244
245
  @status_notify(status_type=ImportStatusTypes.AGGREGATE_TAGS)
245
- def get_aggregate_metadata(
246
+ def get_aggregate_metadata( # noqa: PLR0913
246
247
  self,
247
248
  all_paths,
248
249
  library_path,
249
250
  metadata,
251
+ force_import_metadata,
250
252
  status=None,
251
253
  ):
252
254
  """Get aggregated metatada for the paths given."""
@@ -263,7 +265,10 @@ class AggregateMetadataMixin(CleanMetadataMixin):
263
265
  if status and status.complete is None:
264
266
  status.complete = 0
265
267
  key = AdminFlag.FlagChoices.IMPORT_METADATA.value # type: ignore
266
- import_metadata = AdminFlag.objects.get(key=key).on
268
+ if force_import_metadata:
269
+ import_metadata = True
270
+ else:
271
+ import_metadata = AdminFlag.objects.get(key=key).on
267
272
  if not import_metadata:
268
273
  self.log.warn("Admin flag set to NOT import metadata.")
269
274
  data = (all_failed_imports, all_mds, all_m2m_mds, all_fks, status)
@@ -13,13 +13,17 @@ from codex.librarian.importer.deleted import DeletedMixin
13
13
  from codex.librarian.importer.failed_imports import FailedImportsMixin
14
14
  from codex.librarian.importer.moved import MovedMixin
15
15
  from codex.librarian.importer.status import ImportStatusTypes
16
- from codex.librarian.importer.tasks import AdoptOrphanFoldersTask, ImportDBDiffTask
16
+ from codex.librarian.importer.tasks import (
17
+ AdoptOrphanFoldersTask,
18
+ ImportDBDiffTask,
19
+ LazyImportComicsTask,
20
+ )
17
21
  from codex.librarian.importer.update_comics import UpdateComicsMixin
18
22
  from codex.librarian.notifier.tasks import FAILED_IMPORTS_TASK, LIBRARY_CHANGED_TASK
19
23
  from codex.librarian.search.status import SearchIndexStatusTypes
20
24
  from codex.librarian.search.tasks import SearchIndexAbortTask, SearchIndexUpdateTask
21
25
  from codex.librarian.tasks import DelayedTasks
22
- from codex.models import Library
26
+ from codex.models import Comic, Library
23
27
  from codex.status import Status
24
28
 
25
29
  _WRITE_WAIT_EXPIRY = 60
@@ -253,7 +257,10 @@ class ComicImporterThread(
253
257
  FIS: fis,
254
258
  }
255
259
  self.get_aggregate_metadata(
256
- modified_paths | created_paths, library.path, all_metadata
260
+ modified_paths | created_paths,
261
+ library.path,
262
+ all_metadata,
263
+ task.force_import_metadata,
257
264
  )
258
265
  all_metadata = None
259
266
  modified_paths -= fis.keys()
@@ -287,11 +294,37 @@ class ComicImporterThread(
287
294
  changed_args = (library, start_time, imported_count)
288
295
  self._finish_apply(changed, new_failed_imports, changed_args)
289
296
 
297
+ def _lazy_import_metadata(self, task):
298
+ """Kick off an import task for just these books."""
299
+ import_comics = Comic.objects.filter(pk__in=task.pks).only("path", "library_id")
300
+ library_path_map = {}
301
+ for import_comic in import_comics:
302
+ library_id = import_comic.library_id # type: ignore
303
+ if library_id not in library_path_map:
304
+ library_path_map[library_id] = set()
305
+ library_path_map[library_id].add(import_comic.path)
306
+
307
+ for library_id, paths in library_path_map.items():
308
+ task = ImportDBDiffTask(
309
+ library_id=library_id,
310
+ dirs_moved={},
311
+ files_moved={},
312
+ dirs_modified=frozenset(),
313
+ files_modified=frozenset(paths),
314
+ files_created=frozenset(),
315
+ dirs_deleted=frozenset(),
316
+ files_deleted=frozenset(),
317
+ force_import_metadata=True,
318
+ )
319
+ self._apply(task)
320
+
290
321
  def process_item(self, item):
291
322
  """Run the updater."""
292
323
  task = item
293
324
  if isinstance(task, ImportDBDiffTask):
294
325
  self._apply(task)
326
+ elif isinstance(task, LazyImportComicsTask):
327
+ self._lazy_import_metadata(task)
295
328
  elif isinstance(task, AdoptOrphanFoldersTask):
296
329
  self.adopt_orphan_folders()
297
330
  else:
@@ -21,6 +21,14 @@ class ImportDBDiffTask(ImportTask):
21
21
  files_created: frozenset[str]
22
22
  dirs_deleted: frozenset[str]
23
23
  files_deleted: frozenset[str]
24
+ force_import_metadata: bool = False
25
+
26
+
27
+ @dataclass
28
+ class LazyImportComicsTask(ImportTask):
29
+ """Lazy import of metadaa for existing comics."""
30
+
31
+ pks: frozenset[int]
24
32
 
25
33
 
26
34
  @dataclass
codex/models/comic.py CHANGED
@@ -270,3 +270,12 @@ class Comic(WatchedPath):
270
270
  def __str__(self):
271
271
  """Most common text representation for logging."""
272
272
  return self.get_title(self)
273
+
274
+ def issue(self) -> str:
275
+ """Combine issue parts for search."""
276
+ res = ""
277
+ if self.issue_number is not None:
278
+ res += str(self.issue_number.normalize())
279
+ if self.issue_suffix:
280
+ res += self.issue_suffix
281
+ return res
codex/search/backend.py CHANGED
@@ -7,11 +7,16 @@ from types import MappingProxyType
7
7
 
8
8
  from django.utils.timezone import now
9
9
  from humanfriendly import InvalidSize, parse_size
10
- from whoosh.analysis import CharsetFilter, StandardAnalyzer, StemFilter
10
+ from whoosh.analysis import (
11
+ CharsetFilter,
12
+ StemFilter,
13
+ StemmingAnalyzer,
14
+ )
11
15
  from whoosh.fields import BOOLEAN, DATETIME, NUMERIC, TEXT, FieldType, Schema
12
16
  from whoosh.filedb.filestore import FileStorage
13
17
  from whoosh.index import EmptyIndexError
14
18
  from whoosh.qparser import (
19
+ CopyFieldPlugin,
15
20
  FieldAliasPlugin,
16
21
  GtLtPlugin,
17
22
  OperatorsPlugin,
@@ -93,7 +98,8 @@ class FILESIZE(NUMERIC):
93
98
 
94
99
 
95
100
  TEXT_ANALYZER = (
96
- StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
101
+ # StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
102
+ StemmingAnalyzer(minsize=1) | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
97
103
  )
98
104
 
99
105
 
@@ -118,7 +124,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
118
124
  "file_type": ("type",),
119
125
  "identifier": ("id", "nss"),
120
126
  "identifier_type": ("idtype", "id_type", "nid"),
121
- "issue_number": ("issue", "number"),
127
+ "issue_number": ("number",),
122
128
  "locations": ("location",),
123
129
  "monochrome": gen_multipart_field_aliases("black_and_white"),
124
130
  "name": ("title",),
@@ -138,6 +144,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
138
144
  RESERVED_CHARACTERS = ()
139
145
  RESERVED_WORDS = ()
140
146
  FIELD_ALIAS_PLUGIN = FieldAliasPlugin(FIELDMAP)
147
+ COPY_FIELD_PLUGIN = CopyFieldPlugin({"issue_number": "issue_suffix"})
141
148
  OPERATORS_PLUGIN = OperatorsPlugin(
142
149
  ops=None,
143
150
  clean=False,
@@ -188,6 +195,8 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
188
195
  _CPU_MULTIPLIER = CPU_MULTIPLIER
189
196
  _CHUNK_PER_GB = CHUNK_PER_GB
190
197
  _MAX_CHUNK_SIZE = MAX_CHUNK_SIZE
198
+ _DECIMAL_FIELD_NAMES = frozenset({"decimal", "float"})
199
+ _DATETIME_FIELD_NAMES = frozenset({"date", "datetime"})
191
200
 
192
201
  def __init__(self, connection_alias, **connection_options):
193
202
  """Init worker queues."""
@@ -210,10 +219,6 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
210
219
  int(mem_limit_gb * self._CHUNK_PER_GB), self._MAX_CHUNK_SIZE
211
220
  )
212
221
 
213
- @staticmethod
214
- def _get_text_analyzer():
215
- return StandardAnalyzer() | CharsetFilter(accent_map) | StemFilter(cachesize=-1)
216
-
217
222
  def build_schema(self, fields):
218
223
  """Customize Codex Schema.
219
224
 
@@ -242,20 +247,15 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
242
247
  signed=False,
243
248
  stored=field_class.stored,
244
249
  )
245
- elif field_class.field_type == "float":
246
- # my only floats are small decimals.
250
+ elif field_class.field_type in self._DECIMAL_FIELD_NAMES:
247
251
  schema_fields[index_fieldname] = NUMERIC(
248
- numtype=int, # Decimal is converted to int in NUMERIC
249
- bits=64,
252
+ numtype=float, # type: ignore
250
253
  field_boost=field_class.boost,
251
- signed=False,
252
- decimal_places=2,
253
254
  stored=field_class.stored,
254
255
  )
255
- elif field_class.field_type in ["date", "datetime"]:
256
+ elif field_class.field_type in self._DATETIME_FIELD_NAMES:
256
257
  schema_fields[index_fieldname] = DATETIME(
257
258
  stored=field_class.stored,
258
- # sortable=True # index_fieldname == "updated_at"
259
259
  )
260
260
  elif field_class.field_type == "boolean":
261
261
  # Field boost isn't supported on BOOLEAN as of 1.8.2.
@@ -264,9 +264,7 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
264
264
  schema_fields[index_fieldname] = TEXT(
265
265
  stored=True,
266
266
  analyzer=TEXT_ANALYZER,
267
- # analyzer=field_class.analyzer or StemmingAnalyzer(),
268
267
  field_boost=field_class.boost,
269
- # sortable=True,
270
268
  spelling=field_class.document is True,
271
269
  )
272
270
  if field_class.document:
@@ -318,7 +316,12 @@ class CodexSearchBackend(WhooshSearchBackend, WorkerBaseMixin):
318
316
  # https://github.com/mchaput/whoosh/pull/11
319
317
  self.parser.remove_plugin_class(WhitespacePlugin)
320
318
  self.parser.replace_plugin(self.OPERATORS_PLUGIN)
321
- plugins = [WhitespacePlugin, self.FIELD_ALIAS_PLUGIN, GtLtPlugin]
319
+ plugins = [
320
+ WhitespacePlugin,
321
+ self.COPY_FIELD_PLUGIN,
322
+ self.FIELD_ALIAS_PLUGIN,
323
+ GtLtPlugin,
324
+ ]
322
325
  plugins += [DateParserPlugin(basedate=now())]
323
326
  self.parser.add_plugins(plugins)
324
327
 
codex/search/indexes.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Haystack search indexes."""
2
2
 
3
- from codex._vendor.haystack.fields import CharField, IntegerField
3
+ from codex._vendor.haystack.fields import CharField, FloatField, IntegerField
4
4
  from codex._vendor.haystack.indexes import Indexable, ModelSearchIndex
5
5
  from codex.models import Comic
6
6
 
@@ -40,18 +40,23 @@ class ComicIndex(ModelSearchIndex, Indexable):
40
40
  tags = CharField(model_attr="tags__name", null=True)
41
41
  teams = CharField(model_attr="teams__name", null=True)
42
42
 
43
+ # This makes issue field searching exact rather than fuzzy
44
+ issue = CharField(model_attr="issue", null=True)
45
+
46
+ # Floats are a better search experience than fixed decimals
47
+ issue_number = FloatField(model_attr="issue_number", null=True)
48
+ community_rating = FloatField(model_attr="community_rating", null=True)
49
+ critical_rating = FloatField(model_attr="critical_rating", null=True)
50
+
43
51
  class Meta:
44
52
  """Model & field include list."""
45
53
 
46
54
  model = Comic
47
55
  fields = (
48
- "community_rating",
49
56
  "created_at",
50
- "critical_rating",
51
57
  "day",
52
58
  "date",
53
59
  "decade",
54
- "issue_number",
55
60
  "issue_suffix",
56
61
  "month",
57
62
  "monochrome",
@@ -47,6 +47,7 @@ class BrowserAdminFlagsSerializer(Serializer):
47
47
  """These choices change with browse context."""
48
48
 
49
49
  folder_view = BooleanField(read_only=True)
50
+ import_metadata = BooleanField(read_only=True)
50
51
 
51
52
 
52
53
  class BrowserTitleSerializer(Serializer):
@@ -1 +1 @@
1
- import{m as A,V as t}from"./VCheckboxBtn-DtrZ6IUL.js";import{a as F,u as I,V as l}from"./VSelectionControl-CD7bn0s_.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-CJ7EZ2DP.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=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=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(d),v=l.filterProps(e),h=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:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{w as V};
1
+ import{m as A,V as t}from"./VCheckboxBtn-DQTVBkac.js";import{a as F,u as I,V as l}from"./VSelectionControl-D0ha1VYk.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-C5XtSLXl.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=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=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(d),v=l.filterProps(e),h=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:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{w as V};
@@ -1 +1 @@
1
- import{m as A,V as t}from"./VCheckboxBtn-DtrZ6IUL.js";import{a as F,u as I,V as l}from"./VSelectionControl-CD7bn0s_.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-CJ7EZ2DP.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=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=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(d),v=l.filterProps(e),h=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:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{w as V};
1
+ import{m as A,V as t}from"./VCheckboxBtn-DQTVBkac.js";import{a as F,u as I,V as l}from"./VSelectionControl-D0ha1VYk.js";import{x as B,ah as U,G as R,ar as D,C as G,h as K,K as L,c5 as M,L as u,am as r}from"./admin-drawer-panel-C5XtSLXl.js";const N=B({...F(),...U(A(),["inline"])},"VCheckbox"),w=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=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=G(),p=K(()=>e.id||`checkbox-${V}`);return L(()=>{const[b,f]=M(d),v=l.filterProps(e),h=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:k,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(h,{id:k.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:i,onBlur:m}),a)}})}),{}}});export{w as V};
@@ -1 +1 @@
1
- import{c as f,d as o}from"./VSelectionControl-CD7bn0s_.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-CJ7EZ2DP.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
1
+ import{c as f,d as o}from"./VSelectionControl-D0ha1VYk.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-C5XtSLXl.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
@@ -1 +1 @@
1
- import{c as f,d as o}from"./VSelectionControl-CD7bn0s_.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-CJ7EZ2DP.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
1
+ import{c as f,d as o}from"./VSelectionControl-D0ha1VYk.js";import{x as V,co as h,G as v,ar as c,h as l,K as x,ah as I,L as k,am as b}from"./admin-drawer-panel-C5XtSLXl.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:h,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(a){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return x(()=>{const a=I(o.filterProps(e),["modelValue"]);return k(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
@@ -1 +1 @@
1
- import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-CgOC_YIA.js";import{c as Fe,a as X}from"./VSlideGroup-Bssf4EBT.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-CJ7EZ2DP.js";import{m as He,u as $e}from"./filter-DhorJRK4.js";import{g as qe}from"./VSelectionControl-CD7bn0s_.js";import{f as Ge}from"./confirm-footer-R7VhDN1M.js";import{V as We}from"./VCheckboxBtn-DtrZ6IUL.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=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"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):h.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.value.selectionStart,i=u.value.length;if((r.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.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}),{...n,default:()=>s(K,null,[s(pe,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,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,o,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};
1
+ import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-YSL0tIop.js";import{c as Fe,a as X}from"./VSlideGroup-BW6pFVGY.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-C5XtSLXl.js";import{m as He,u as $e}from"./filter-Dp8VoLoJ.js";import{g as qe}from"./VSelectionControl-D0ha1VYk.js";import{f as Ge}from"./confirm-footer-CP02GqhM.js";import{V as We}from"./VCheckboxBtn-DQTVBkac.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=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"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):h.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.value.selectionStart,i=u.value.length;if((r.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.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}),{...n,default:()=>s(K,null,[s(pe,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,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,o,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};
@@ -1 +1 @@
1
- import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-CgOC_YIA.js";import{c as Fe,a as X}from"./VSlideGroup-Bssf4EBT.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-CJ7EZ2DP.js";import{m as He,u as $e}from"./filter-DhorJRK4.js";import{g as qe}from"./VSelectionControl-CD7bn0s_.js";import{f as Ge}from"./confirm-footer-R7VhDN1M.js";import{V as We}from"./VCheckboxBtn-DtrZ6IUL.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=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"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):h.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.value.selectionStart,i=u.value.length;if((r.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.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}),{...n,default:()=>s(K,null,[s(pe,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,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,o,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};
1
+ import{m as Ce,u as ke,a as pe,b as we,c as Se}from"./VSelect-YSL0tIop.js";import{c as Fe,a as X}from"./VSlideGroup-BW6pFVGY.js";import{x as Ie,ah as Pe,bb as De,G as Ae,bE as Re,r as O,s as P,ar as Y,h as m,cs as _e,aj as Te,ct as D,a as A,n as Z,V as Me,K as Ee,L as s,al as K,am as I,aO as Le,ag as ee,cu as Ne,ad as le,cv as Oe,c6 as Ke,aa as Be,cw as Ue,cx as je,cy as ze}from"./admin-drawer-panel-C5XtSLXl.js";import{m as He,u as $e}from"./filter-Dp8VoLoJ.js";import{g as qe}from"./VSelectionControl-D0ha1VYk.js";import{f as Ge}from"./confirm-footer-CP02GqhM.js";import{V as We}from"./VCheckboxBtn-DQTVBkac.js";function Je(e,b,R){if(b==null)return e;if(Array.isArray(b))throw new Error("Multiple matches is not implemented");return typeof b=="number"&&~b?s(K,null,[s("span",{class:"v-combobox__unmask"},[e.substr(0,b)]),s("span",{class:"v-combobox__mask"},[e.substr(b,R)]),s("span",{class:"v-combobox__unmask"},[e.substr(b+R)])]):e}const Qe=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"),ul=Ae()({name:"VCombobox",props:Qe(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,b){var W;let{emit:R,slots:n}=b;const{t:B}=Re(),y=O(),h=P(!1),V=P(!0),_=P(!1),$=O(),q=O(),U=Y(e,"menu"),c=m({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=$.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),r=P(-1);let j=!1;const ae=m(()=>{var l;return(l=y.value)==null?void 0:l.color}),G=m(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ue,transformOut:ne}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),u=Y(e,"modelValue",[],l=>ue(ze(l)),l=>{const t=ne(l);return e.multiple?t:t[0]??null}),F=qe(),T=m(()=>!!(e.chips||n.chip)),C=m(()=>T.value||!!n.selection),k=P(!e.multiple&&!C.value?((W=u.value[0])==null?void 0:W.title)??"":""),v=m({get:()=>k.value,set:l=>{var t;if(k.value=l??"",!e.multiple&&!C.value&&(u.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const i=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));i.length>1&&(i.forEach(a=>{a=a.trim(),a&&f(D(e,a))}),k.value="")}l||(r.value=-1),V.value=!l}}),se=m(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:v.value.length);A(k,l=>{j?Z(()=>j=!1):h.value&&!c.value&&(c.value=!0),R("update:search",l)}),A(u,l=>{var t;!e.multiple&&!C.value&&(k.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:M,getMatches:re}=$e(e,te,()=>V.value?"":v.value),g=m(()=>e.hideSelected?M.value.filter(l=>!u.value.some(t=>t.value===l.value)):M.value),ce=m(()=>u.value.map(l=>l.value)),E=m(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=g.value[0])==null?void 0:t.title))&&g.value.length>0&&!V.value&&!_.value}),z=m(()=>e.hideNoData&&!g.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=O(),{onListScroll:ve,onListKeydown:de}=ke(H,y);function fe(l){j=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(h.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(je(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.value.selectionStart,i=u.value.length;if((r.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)&&(E.value&&["Enter","Tab"].includes(l.key)&&f(M.value[0]),V.value=!0),l.key==="ArrowDown"&&E.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(f(D(e,v.value)),C.value&&(k.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&C.value&&u.value.length>0)return f(u.value[0],!1);if(r.value<0){l.key==="Backspace"&&!v.value&&(r.value=i-1);return}const o=r.value;f(u.value[r.value],!1),r.value=o>=i-1?i-2:o}if(e.multiple){if(l.key==="ArrowLeft"){if(r.value<0&&t>0)return;const o=r.value>-1?r.value-1:i-1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(r.value<0)return;const o=r.value+1;u.value[o]?r.value=o:(r.value=-1,y.value.setSelectionRange(0,0))}}}function ge(){var l;h.value&&(V.value=!0,(l=y.value)==null||l.focus())}function f(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(o=>e.valueComparator(o.value,l.value)),a=t??!~i;if(~i){const o=a?[...u.value,l]:[...u.value];o.splice(i,1),u.value=o}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(v.value="")}else{const i=t!==!1;u.value=i?[l]:[],k.value=i&&!C.value?l.title:"",Z(()=>{c.value=!1,V.value=!0})}}function xe(l){h.value=!0,setTimeout(()=>{_.value=!0})}function ye(l){_.value=!1}function Ve(l){(l==null||l===""&&!e.multiple)&&(u.value=[])}return A(h,(l,t)=>{if(!(l||l===t)){if(r.value=-1,c.value=!1,E.value&&!_.value&&!u.value.some(i=>{let{value:a}=i;return a===g.value[0].value})){f(g.value[0]);return}if(v.value){if(e.multiple){f(D(e,v.value));return}if(!C.value)return;u.value.some(i=>{let{title:a}=i;return a===v.value})?k.value="":f(D(e,v.value))}}}),A(c,()=>{if(!e.hideSelected&&c.value&&u.value.length){const l=g.value.findIndex(t=>u.value.some(i=>e.valueComparator(i.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=q.value)==null||t.scrollToIndex(l))})}}),A(()=>e.items,(l,t)=>{c.value||h.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||g.value.length||n["prepend-item"]||n["append-item"]||n["no-data"]),t=u.value.length>0,i=X.filterProps(e);return s(X,I({ref:y},i,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,Ve],focused:h.value,"onUpdate:focused":a=>h.value=a,validationValue:u.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!C.value,"v-combobox--selecting-index":r.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}),{...n,default:()=>s(K,null,[s(pe,I({ref:$,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&s(Le,I({ref:H,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,o,x;return[(a=n["prepend-item"])==null?void 0:a.call(n),!g.value.length&&!e.hideNoData&&(((o=n["no-data"])==null?void 0:o.call(n))??s(ee,{title:B(e.noDataText)},null)),s(we,{ref:q,renderless:!0,items:g.value},{default:p=>{var Q;let{item:d,index:w,itemRef:S}=p;const J=I(d.props,{ref:S,key:w,active:E.value&&w===0?!0:void 0,onClick:()=>f(d,null)});return((Q=n.item)==null?void 0:Q.call(n,{item:d,index:w,props:J}))??s(ee,I(J,{role:"option"}),{prepend:L=>{let{isSelected:N}=L;return s(K,null,[e.multiple&&!e.hideSelected?s(We,{key:d.value,modelValue:N,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&s(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&s(le,{icon:d.props.prependIcon},null)])},title:()=>{var L,N;return V.value?d.title:Je(d.title,(L=re(d))==null?void 0:L.title,((N=v.value)==null?void 0:N.length)??0)}})}}),(x=n["append-item"])==null?void 0:x.call(n)]}})]}),u.value.map((a,o)=>{function x(S){S.stopPropagation(),S.preventDefault(),f(a,!1)}const p={"onClick:close":x,onMousedown(S){S.preventDefault(),S.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=T.value?!!n.chip:!!n.selection,w=d?Oe(T.value?n.chip({item:a,index:o,props:p}):n.selection({item:a,index:o})):void 0;if(!(d&&!w))return s("div",{key:a.value,class:["v-combobox__selection",o===r.value&&["v-combobox__selection--selected",oe.value]],style:o===r.value?ie.value:{}},[T.value?n.chip?s(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[w]}):s(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},p),null):w??s("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&o<u.value.length-1&&s("span",{class:"v-combobox__selection-comma"},[Be(",")])])])})]),"append-inner":function(){var p;for(var a=arguments.length,o=new Array(a),x=0;x<a;x++)o[x]=arguments[x];return s(K,null,[(p=n["append-inner"])==null?void 0:p.call(n,...o),(!e.hideNoData||e.items.length)&&e.menuIcon?s(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Ue,"aria-label":B(G.value),title:B(G.value)},null):void 0])}})}),Ge({isFocused:h,isPristine:V,menu:c,search:v,selectionIndex:r,filteredItems:M,select:f},y)}});export{ul as V};