codex 1.7.0a1__py3-none-any.whl → 1.7.1__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 (427) hide show
  1. codex/choices.py +43 -28
  2. codex/db.py +1 -2
  3. codex/librarian/bookmark/bookmarkd.py +1 -1
  4. codex/librarian/bookmark/update.py +14 -1
  5. codex/librarian/janitor/integrity.py +11 -10
  6. codex/librarian/janitor/tasks.py +1 -1
  7. codex/serializers/browser/page.py +1 -0
  8. codex/static_root/assets/{VCheckbox-B38iL9f_.81d9c00753e7.js → VCheckbox-Cf74Jfrq.2fbb5106ef5a.js} +1 -1
  9. codex/static_root/assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js.br +0 -0
  10. codex/static_root/assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js.gz +0 -0
  11. codex/static_root/assets/{VCheckbox-B38iL9f_.js → VCheckbox-Cf74Jfrq.js} +1 -1
  12. codex/static_root/assets/VCheckbox-Cf74Jfrq.js.br +0 -0
  13. codex/static_root/assets/VCheckbox-Cf74Jfrq.js.gz +0 -0
  14. codex/static_root/assets/{VCheckboxBtn-BbNnqvzj.aa7fa886f86a.js → VCheckboxBtn-D5jbIiqO.921713d268ba.js} +1 -1
  15. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.921713d268ba.js.br +0 -0
  16. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.921713d268ba.js.gz +0 -0
  17. codex/static_root/assets/{VCheckboxBtn-BbNnqvzj.js → VCheckboxBtn-D5jbIiqO.js} +1 -1
  18. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.js.br +0 -0
  19. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.js.gz +0 -0
  20. codex/static_root/assets/{VCombobox-BaV3XhIr.bf0c945d80a9.js → VCombobox-Dq3Y5j2w.8f4884677e5a.js} +1 -1
  21. codex/static_root/assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js.br +0 -0
  22. codex/static_root/assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js.gz +0 -0
  23. codex/static_root/assets/{VCombobox-BaV3XhIr.js → VCombobox-Dq3Y5j2w.js} +1 -1
  24. codex/static_root/assets/VCombobox-Dq3Y5j2w.js.br +0 -0
  25. codex/static_root/assets/VCombobox-Dq3Y5j2w.js.gz +0 -0
  26. codex/static_root/assets/{VDialog-DJR54d5g.9d6a52f62db3.js → VDialog-BVHV10WD.993b98f2be7f.js} +1 -1
  27. codex/static_root/assets/VDialog-BVHV10WD.993b98f2be7f.js.br +0 -0
  28. codex/static_root/assets/VDialog-BVHV10WD.993b98f2be7f.js.gz +0 -0
  29. codex/static_root/assets/{VDialog-DJR54d5g.js → VDialog-BVHV10WD.js} +1 -1
  30. codex/static_root/assets/VDialog-BVHV10WD.js.br +0 -0
  31. codex/static_root/assets/VDialog-BVHV10WD.js.gz +0 -0
  32. codex/static_root/assets/{VExpansionPanels-CJWqDA9d.acf5acdb3a81.js → VExpansionPanels-BLAGU-dj.e244f3902cf9.js} +1 -1
  33. codex/static_root/assets/VExpansionPanels-BLAGU-dj.e244f3902cf9.js.br +0 -0
  34. codex/static_root/assets/VExpansionPanels-BLAGU-dj.e244f3902cf9.js.gz +0 -0
  35. codex/static_root/assets/{VExpansionPanels-CJWqDA9d.js → VExpansionPanels-BLAGU-dj.js} +1 -1
  36. codex/static_root/assets/VExpansionPanels-BLAGU-dj.js.br +0 -0
  37. codex/static_root/assets/VExpansionPanels-BLAGU-dj.js.gz +0 -0
  38. codex/static_root/assets/{VRadioGroup-BFLE3yCT.8b78cefe4206.js → VRadioGroup-Bnt5BbmK.826e1c2d9134.js} +1 -1
  39. codex/static_root/assets/VRadioGroup-Bnt5BbmK.826e1c2d9134.js.br +0 -0
  40. codex/static_root/assets/VRadioGroup-Bnt5BbmK.826e1c2d9134.js.gz +0 -0
  41. codex/static_root/assets/{VRadioGroup-BFLE3yCT.js → VRadioGroup-Bnt5BbmK.js} +1 -1
  42. codex/static_root/assets/VRadioGroup-Bnt5BbmK.js.br +0 -0
  43. codex/static_root/assets/VRadioGroup-Bnt5BbmK.js.gz +0 -0
  44. codex/static_root/assets/{VSelect-Dvsi19pi.6d38dc99e0a8.js → VSelect-BTo1ZM8U.ea4a7a7bbce9.js} +1 -1
  45. codex/static_root/assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js.br +0 -0
  46. codex/static_root/assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js.gz +0 -0
  47. codex/static_root/assets/{VSelect-Dvsi19pi.js → VSelect-BTo1ZM8U.js} +1 -1
  48. codex/static_root/assets/VSelect-BTo1ZM8U.js.br +0 -0
  49. codex/static_root/assets/VSelect-BTo1ZM8U.js.gz +0 -0
  50. codex/static_root/assets/{VSelectionControl-BioGLzkQ.js → VSelectionControl-CrzLF2bD.965af5336c62.js} +1 -1
  51. codex/static_root/assets/VSelectionControl-CrzLF2bD.965af5336c62.js.br +0 -0
  52. codex/static_root/assets/VSelectionControl-CrzLF2bD.965af5336c62.js.gz +0 -0
  53. codex/static_root/assets/{VSelectionControl-BioGLzkQ.106c3be4b6d4.js → VSelectionControl-CrzLF2bD.js} +1 -1
  54. codex/static_root/assets/VSelectionControl-CrzLF2bD.js.br +0 -0
  55. codex/static_root/assets/VSelectionControl-CrzLF2bD.js.gz +0 -0
  56. codex/static_root/assets/{VSlideGroup-CFkaPBuS.1d168fc87687.js → VSlideGroup-ZRALPG67.9807cdc6b330.js} +1 -1
  57. codex/static_root/assets/VSlideGroup-ZRALPG67.9807cdc6b330.js.br +0 -0
  58. codex/static_root/assets/VSlideGroup-ZRALPG67.9807cdc6b330.js.gz +0 -0
  59. codex/static_root/assets/{VSlideGroup-CFkaPBuS.js → VSlideGroup-ZRALPG67.js} +1 -1
  60. codex/static_root/assets/VSlideGroup-ZRALPG67.js.br +0 -0
  61. codex/static_root/assets/VSlideGroup-ZRALPG67.js.gz +0 -0
  62. codex/static_root/assets/{VTable-B7x3Oih2.d0010dab39ce.js → VTable-Ci8_04Au.1382ab272e40.js} +1 -1
  63. codex/static_root/assets/VTable-Ci8_04Au.1382ab272e40.js.br +0 -0
  64. codex/static_root/assets/VTable-Ci8_04Au.1382ab272e40.js.gz +0 -0
  65. codex/static_root/assets/{VTable-B7x3Oih2.js → VTable-Ci8_04Au.js} +1 -1
  66. codex/static_root/assets/VTable-Ci8_04Au.js.br +0 -0
  67. codex/static_root/assets/VTable-Ci8_04Au.js.gz +0 -0
  68. codex/static_root/assets/{VTextField-rsRdtAxl.488a06f530fe.js → VTextField-D7pt5iJ3.c020691495b7.js} +1 -1
  69. codex/static_root/assets/VTextField-D7pt5iJ3.c020691495b7.js.br +0 -0
  70. codex/static_root/assets/VTextField-D7pt5iJ3.c020691495b7.js.gz +0 -0
  71. codex/static_root/assets/{VTextField-rsRdtAxl.js → VTextField-D7pt5iJ3.js} +1 -1
  72. codex/static_root/assets/VTextField-D7pt5iJ3.js.br +0 -0
  73. codex/static_root/assets/VTextField-D7pt5iJ3.js.gz +0 -0
  74. codex/static_root/assets/{VWindowItem-CibnlNHs.75a48ded87d5.js → VWindowItem-CGBsUHpV.7c57d79cf74a.js} +1 -1
  75. codex/static_root/assets/VWindowItem-CGBsUHpV.7c57d79cf74a.js.br +0 -0
  76. codex/static_root/assets/VWindowItem-CGBsUHpV.7c57d79cf74a.js.gz +0 -0
  77. codex/static_root/assets/{VWindowItem-CibnlNHs.js → VWindowItem-CGBsUHpV.js} +1 -1
  78. codex/static_root/assets/VWindowItem-CGBsUHpV.js.br +0 -0
  79. codex/static_root/assets/VWindowItem-CGBsUHpV.js.gz +0 -0
  80. codex/static_root/assets/{admin-CaVmJ-fa.251f5d3cc755.js → admin-BTXUbxw5.23e0d3602f29.js} +1 -1
  81. codex/static_root/assets/admin-BTXUbxw5.23e0d3602f29.js.br +0 -0
  82. codex/static_root/assets/admin-BTXUbxw5.23e0d3602f29.js.gz +0 -0
  83. codex/static_root/assets/{admin-CaVmJ-fa.js → admin-BTXUbxw5.js} +1 -1
  84. codex/static_root/assets/admin-BTXUbxw5.js.br +0 -0
  85. codex/static_root/assets/admin-BTXUbxw5.js.gz +0 -0
  86. codex/static_root/assets/{admin-menu-Cb7A0Ilo.ddf1e9339257.js → admin-menu-Dbt1Rajw.043fb778ba6c.js} +1 -1
  87. codex/static_root/assets/admin-menu-Dbt1Rajw.043fb778ba6c.js.br +0 -0
  88. codex/static_root/assets/admin-menu-Dbt1Rajw.043fb778ba6c.js.gz +0 -0
  89. codex/static_root/assets/{admin-menu-Cb7A0Ilo.js → admin-menu-Dbt1Rajw.js} +1 -1
  90. codex/static_root/assets/admin-menu-Dbt1Rajw.js.br +0 -0
  91. codex/static_root/assets/admin-menu-Dbt1Rajw.js.gz +0 -0
  92. codex/static_root/assets/{admin-settings-button-progress-DID-drll.979420762aea.js → admin-settings-button-progress-DSOZWzf1.fad596375b9b.js} +1 -1
  93. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.fad596375b9b.js.br +0 -0
  94. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.fad596375b9b.js.gz +0 -0
  95. codex/static_root/assets/{admin-settings-button-progress-DID-drll.js → admin-settings-button-progress-DSOZWzf1.js} +1 -1
  96. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.js.br +0 -0
  97. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.js.gz +0 -0
  98. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css +1 -0
  99. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css.br +0 -0
  100. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css.gz +0 -0
  101. codex/static_root/assets/browser-3Sm5qvA_.css +1 -0
  102. codex/static_root/assets/browser-3Sm5qvA_.css.br +0 -0
  103. codex/static_root/assets/browser-3Sm5qvA_.css.gz +0 -0
  104. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js +1 -0
  105. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js.br +0 -0
  106. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js.gz +0 -0
  107. codex/static_root/assets/browser-Dq-fQLJF.js +1 -0
  108. codex/static_root/assets/browser-Dq-fQLJF.js.br +0 -0
  109. codex/static_root/assets/browser-Dq-fQLJF.js.gz +0 -0
  110. codex/static_root/assets/{change-password-dialog-DXY2Xg9k.4a7ca6108810.js → change-password-dialog-BaGA_bnX.af8ea11b1579.js} +1 -1
  111. codex/static_root/assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js.br +0 -0
  112. codex/static_root/assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js.gz +0 -0
  113. codex/static_root/assets/{change-password-dialog-DXY2Xg9k.js → change-password-dialog-BaGA_bnX.js} +1 -1
  114. codex/static_root/assets/change-password-dialog-BaGA_bnX.js.br +0 -0
  115. codex/static_root/assets/change-password-dialog-BaGA_bnX.js.gz +0 -0
  116. codex/static_root/assets/{confirm-dialog-BEVEU-kA.281b6e877fb5.js → confirm-dialog-X14gSw1w.21504f7c1db4.js} +1 -1
  117. codex/static_root/assets/confirm-dialog-X14gSw1w.21504f7c1db4.js.br +0 -0
  118. codex/static_root/assets/confirm-dialog-X14gSw1w.21504f7c1db4.js.gz +0 -0
  119. codex/static_root/assets/{confirm-dialog-BEVEU-kA.js → confirm-dialog-X14gSw1w.js} +1 -1
  120. codex/static_root/assets/confirm-dialog-X14gSw1w.js.br +0 -0
  121. codex/static_root/assets/confirm-dialog-X14gSw1w.js.gz +0 -0
  122. codex/static_root/assets/{datetime-column-DhrZEHwa.80e95aef7bdb.js → datetime-column-BN2Ulei5.a31061d3729c.js} +1 -1
  123. codex/static_root/assets/datetime-column-BN2Ulei5.a31061d3729c.js.br +0 -0
  124. codex/static_root/assets/datetime-column-BN2Ulei5.a31061d3729c.js.gz +0 -0
  125. codex/static_root/assets/{datetime-column-DhrZEHwa.js → datetime-column-BN2Ulei5.js} +1 -1
  126. codex/static_root/assets/datetime-column-BN2Ulei5.js.br +0 -0
  127. codex/static_root/assets/datetime-column-BN2Ulei5.js.gz +0 -0
  128. codex/static_root/assets/{filter-BJ7TmFiU.3cefe2d609c7.js → filter-CnO_WiBE.4044b9091aae.js} +1 -1
  129. codex/static_root/assets/filter-CnO_WiBE.4044b9091aae.js.br +0 -0
  130. codex/static_root/assets/filter-CnO_WiBE.4044b9091aae.js.gz +0 -0
  131. codex/static_root/assets/{filter-BJ7TmFiU.js → filter-CnO_WiBE.js} +1 -1
  132. codex/static_root/assets/filter-CnO_WiBE.js.br +0 -0
  133. codex/static_root/assets/filter-CnO_WiBE.js.gz +0 -0
  134. codex/static_root/assets/{flag-tab-AJj0sesB.2ab1be15d10f.js → flag-tab-C5NP3j6O.1c692a00884d.js} +1 -1
  135. codex/static_root/assets/flag-tab-C5NP3j6O.1c692a00884d.js.br +0 -0
  136. codex/static_root/assets/flag-tab-C5NP3j6O.1c692a00884d.js.gz +0 -0
  137. codex/static_root/assets/{flag-tab-AJj0sesB.js → flag-tab-C5NP3j6O.js} +1 -1
  138. codex/static_root/assets/flag-tab-C5NP3j6O.js.br +0 -0
  139. codex/static_root/assets/flag-tab-C5NP3j6O.js.gz +0 -0
  140. codex/static_root/assets/{group-tab-DuxOH4Hn.8ac96cfe7c43.js → group-tab-Cq4QjmHS.a9d15dac0289.js} +1 -1
  141. codex/static_root/assets/group-tab-Cq4QjmHS.a9d15dac0289.js.br +0 -0
  142. codex/static_root/assets/group-tab-Cq4QjmHS.a9d15dac0289.js.gz +0 -0
  143. codex/static_root/assets/{group-tab-DuxOH4Hn.js → group-tab-Cq4QjmHS.js} +1 -1
  144. codex/static_root/assets/group-tab-Cq4QjmHS.js.br +0 -0
  145. codex/static_root/assets/group-tab-Cq4QjmHS.js.gz +0 -0
  146. codex/static_root/assets/{http-error-DIeFpbQV.086e1dd09555.js → http-error-DGFbgQC5.da17e7b6d980.js} +1 -1
  147. codex/static_root/assets/http-error-DGFbgQC5.da17e7b6d980.js.br +0 -0
  148. codex/static_root/assets/http-error-DGFbgQC5.da17e7b6d980.js.gz +0 -0
  149. codex/static_root/assets/{http-error-DIeFpbQV.js → http-error-DGFbgQC5.js} +1 -1
  150. codex/static_root/assets/http-error-DGFbgQC5.js.br +0 -0
  151. codex/static_root/assets/http-error-DGFbgQC5.js.gz +0 -0
  152. codex/static_root/assets/{index-MN9BB_He.201e30aa00ef.js → index-BI-1EK3Q.51e5dd220639.js} +1 -1
  153. codex/static_root/assets/index-BI-1EK3Q.51e5dd220639.js.br +0 -0
  154. codex/static_root/assets/index-BI-1EK3Q.51e5dd220639.js.gz +0 -0
  155. codex/static_root/assets/{index-MN9BB_He.js → index-BI-1EK3Q.js} +1 -1
  156. codex/static_root/assets/index-BI-1EK3Q.js.br +0 -0
  157. codex/static_root/assets/index-BI-1EK3Q.js.gz +0 -0
  158. codex/static_root/assets/{library-tab-jpeUUWzV.70dae13f6dab.js → library-tab-woA1HyfN.acfc4f327913.js} +1 -1
  159. codex/static_root/assets/library-tab-woA1HyfN.acfc4f327913.js.br +0 -0
  160. codex/static_root/assets/library-tab-woA1HyfN.acfc4f327913.js.gz +0 -0
  161. codex/static_root/assets/{library-tab-jpeUUWzV.js → library-tab-woA1HyfN.js} +1 -1
  162. codex/static_root/assets/library-tab-woA1HyfN.js.br +0 -0
  163. codex/static_root/assets/library-tab-woA1HyfN.js.gz +0 -0
  164. codex/static_root/assets/{main-Cs7q8tob.86ef2567544d.js → main-Ed96tESk.7777498eb960.js} +15 -15
  165. codex/static_root/assets/main-Ed96tESk.7777498eb960.js.br +0 -0
  166. codex/static_root/assets/main-Ed96tESk.7777498eb960.js.gz +0 -0
  167. codex/static_root/assets/{main-Cs7q8tob.js → main-Ed96tESk.js} +15 -15
  168. codex/static_root/assets/main-Ed96tESk.js.br +0 -0
  169. codex/static_root/assets/main-Ed96tESk.js.gz +0 -0
  170. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js +1 -0
  171. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js.br +0 -0
  172. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js.gz +0 -0
  173. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js +1 -0
  174. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js.br +0 -0
  175. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js.gz +0 -0
  176. codex/static_root/assets/{pagination-toolbar-yeU7sPiY.ce0751d6009d.js → pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js} +1 -1
  177. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js.br +0 -0
  178. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js.gz +0 -0
  179. codex/static_root/assets/{pagination-toolbar-yeU7sPiY.js → pagination-toolbar-Bz5nEUwa.js} +1 -1
  180. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.js.br +0 -0
  181. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.js.gz +0 -0
  182. codex/static_root/assets/{pdf-doc-Czi9tnhD.4d4b8b7ff5d7.js → pdf-doc-6j4uJzw7.59963079f1ec.js} +1 -1
  183. codex/static_root/assets/pdf-doc-6j4uJzw7.59963079f1ec.js.br +0 -0
  184. codex/static_root/assets/pdf-doc-6j4uJzw7.59963079f1ec.js.gz +0 -0
  185. codex/static_root/assets/{pdf-doc-Czi9tnhD.js → pdf-doc-6j4uJzw7.js} +1 -1
  186. codex/static_root/assets/pdf-doc-6j4uJzw7.js.br +0 -0
  187. codex/static_root/assets/pdf-doc-6j4uJzw7.js.gz +0 -0
  188. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js +2 -0
  189. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js.br +0 -0
  190. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js.gz +0 -0
  191. codex/static_root/assets/reader-DAyPkkSs.js +2 -0
  192. codex/static_root/assets/reader-DAyPkkSs.js.br +0 -0
  193. codex/static_root/assets/reader-DAyPkkSs.js.gz +0 -0
  194. codex/static_root/assets/{reader-OpKdTZ_B.css → reader-nD70BeEz.06e85e73c391.css} +1 -1
  195. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.br +0 -0
  196. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.gz +0 -0
  197. codex/static_root/assets/{reader-OpKdTZ_B.ebd1512b7014.css → reader-nD70BeEz.css} +1 -1
  198. codex/static_root/assets/reader-nD70BeEz.css.br +0 -0
  199. codex/static_root/assets/reader-nD70BeEz.css.gz +0 -0
  200. codex/static_root/assets/{relation-chips-CFH0Xf78.62ded2739a22.js → relation-chips-DUOduJmS.8b39d35f8503.js} +1 -1
  201. codex/static_root/assets/relation-chips-DUOduJmS.8b39d35f8503.js.br +0 -0
  202. codex/static_root/assets/relation-chips-DUOduJmS.8b39d35f8503.js.gz +0 -0
  203. codex/static_root/assets/{relation-chips-CFH0Xf78.js → relation-chips-DUOduJmS.js} +1 -1
  204. codex/static_root/assets/relation-chips-DUOduJmS.js.br +0 -0
  205. codex/static_root/assets/relation-chips-DUOduJmS.js.gz +0 -0
  206. codex/static_root/assets/{settings-drawer-DbOztp2R.b6f981108782.js → settings-drawer-lRimDTyf.054f1f057cee.js} +2 -2
  207. codex/static_root/assets/settings-drawer-lRimDTyf.054f1f057cee.js.br +0 -0
  208. codex/static_root/assets/settings-drawer-lRimDTyf.054f1f057cee.js.gz +0 -0
  209. codex/static_root/assets/{settings-drawer-DbOztp2R.js → settings-drawer-lRimDTyf.js} +2 -2
  210. codex/static_root/assets/settings-drawer-lRimDTyf.js.br +0 -0
  211. codex/static_root/assets/settings-drawer-lRimDTyf.js.gz +0 -0
  212. codex/static_root/assets/{stats-tab-DWktIwEj.42666baa0d93.js → stats-tab-Cyli0TxY.f9af7d3387d9.js} +1 -1
  213. codex/static_root/assets/stats-tab-Cyli0TxY.f9af7d3387d9.js.br +0 -0
  214. codex/static_root/assets/stats-tab-Cyli0TxY.f9af7d3387d9.js.gz +0 -0
  215. codex/static_root/assets/{stats-tab-DWktIwEj.js → stats-tab-Cyli0TxY.js} +1 -1
  216. codex/static_root/assets/stats-tab-Cyli0TxY.js.br +0 -0
  217. codex/static_root/assets/stats-tab-Cyli0TxY.js.gz +0 -0
  218. codex/static_root/assets/task-tab-CrRRKMNo.52cc73a5889d.js +1 -0
  219. codex/static_root/assets/task-tab-CrRRKMNo.52cc73a5889d.js.br +0 -0
  220. codex/static_root/assets/task-tab-CrRRKMNo.52cc73a5889d.js.gz +0 -0
  221. codex/static_root/assets/task-tab-CrRRKMNo.js +1 -0
  222. codex/static_root/assets/task-tab-CrRRKMNo.js.br +0 -0
  223. codex/static_root/assets/task-tab-CrRRKMNo.js.gz +0 -0
  224. codex/static_root/assets/{transition-A__CJ90w.970355913cb9.js → transition-CyIqQdeu.7496bae455dc.js} +1 -1
  225. codex/static_root/assets/transition-CyIqQdeu.7496bae455dc.js.br +0 -0
  226. codex/static_root/assets/transition-CyIqQdeu.7496bae455dc.js.gz +0 -0
  227. codex/static_root/assets/{transition-A__CJ90w.js → transition-CyIqQdeu.js} +1 -1
  228. codex/static_root/assets/transition-CyIqQdeu.js.br +0 -0
  229. codex/static_root/assets/transition-CyIqQdeu.js.gz +0 -0
  230. codex/static_root/assets/{unauthorized-FF1nwDKt.b3d6255ddb7f.js → unauthorized-IWC3QdqX.1d5d2dafa046.js} +1 -1
  231. codex/static_root/assets/unauthorized-IWC3QdqX.1d5d2dafa046.js.br +0 -0
  232. codex/static_root/assets/unauthorized-IWC3QdqX.1d5d2dafa046.js.gz +0 -0
  233. codex/static_root/assets/{unauthorized-FF1nwDKt.js → unauthorized-IWC3QdqX.js} +1 -1
  234. codex/static_root/assets/unauthorized-IWC3QdqX.js.br +0 -0
  235. codex/static_root/assets/unauthorized-IWC3QdqX.js.gz +0 -0
  236. codex/static_root/assets/{user-tab-RwMqZeSN.d4ed24177855.js → user-tab-Bt7BG8Ih.8f797a19b7ae.js} +1 -1
  237. codex/static_root/assets/user-tab-Bt7BG8Ih.8f797a19b7ae.js.br +0 -0
  238. codex/static_root/assets/user-tab-Bt7BG8Ih.8f797a19b7ae.js.gz +0 -0
  239. codex/static_root/assets/{user-tab-RwMqZeSN.js → user-tab-Bt7BG8Ih.js} +1 -1
  240. codex/static_root/assets/user-tab-Bt7BG8Ih.js.br +0 -0
  241. codex/static_root/assets/user-tab-Bt7BG8Ih.js.gz +0 -0
  242. codex/static_root/{manifest.8dff5f2fb15e.json → manifest.dbf5ed7a4b40.json} +254 -254
  243. codex/static_root/manifest.dbf5ed7a4b40.json.br +0 -0
  244. codex/static_root/manifest.dbf5ed7a4b40.json.gz +0 -0
  245. codex/static_root/manifest.json +254 -254
  246. codex/static_root/manifest.json.br +0 -0
  247. codex/static_root/manifest.json.gz +0 -0
  248. codex/static_root/staticfiles.json +1 -1
  249. codex/views/admin/tasks.py +1 -2
  250. codex/views/bookmark.py +1 -1
  251. codex/views/browser/annotate/card.py +14 -0
  252. codex/views/browser/annotate/order.py +13 -9
  253. codex/views/browser/metadata/query_intersections.py +0 -2
  254. codex/views/timezone.py +2 -14
  255. {codex-1.7.0a1.dist-info → codex-1.7.1.dist-info}/METADATA +3 -6
  256. {codex-1.7.0a1.dist-info → codex-1.7.1.dist-info}/RECORD +259 -259
  257. codex/static_root/assets/VCheckbox-B38iL9f_.81d9c00753e7.js.br +0 -0
  258. codex/static_root/assets/VCheckbox-B38iL9f_.81d9c00753e7.js.gz +0 -0
  259. codex/static_root/assets/VCheckbox-B38iL9f_.js.br +0 -0
  260. codex/static_root/assets/VCheckbox-B38iL9f_.js.gz +0 -0
  261. codex/static_root/assets/VCheckboxBtn-BbNnqvzj.aa7fa886f86a.js.br +0 -0
  262. codex/static_root/assets/VCheckboxBtn-BbNnqvzj.aa7fa886f86a.js.gz +0 -0
  263. codex/static_root/assets/VCheckboxBtn-BbNnqvzj.js.br +0 -0
  264. codex/static_root/assets/VCheckboxBtn-BbNnqvzj.js.gz +0 -0
  265. codex/static_root/assets/VCombobox-BaV3XhIr.bf0c945d80a9.js.br +0 -0
  266. codex/static_root/assets/VCombobox-BaV3XhIr.bf0c945d80a9.js.gz +0 -0
  267. codex/static_root/assets/VCombobox-BaV3XhIr.js.br +0 -0
  268. codex/static_root/assets/VCombobox-BaV3XhIr.js.gz +0 -0
  269. codex/static_root/assets/VDialog-DJR54d5g.9d6a52f62db3.js.br +0 -0
  270. codex/static_root/assets/VDialog-DJR54d5g.9d6a52f62db3.js.gz +0 -0
  271. codex/static_root/assets/VDialog-DJR54d5g.js.br +0 -0
  272. codex/static_root/assets/VDialog-DJR54d5g.js.gz +0 -0
  273. codex/static_root/assets/VExpansionPanels-CJWqDA9d.acf5acdb3a81.js.br +0 -0
  274. codex/static_root/assets/VExpansionPanels-CJWqDA9d.acf5acdb3a81.js.gz +0 -0
  275. codex/static_root/assets/VExpansionPanels-CJWqDA9d.js.br +0 -0
  276. codex/static_root/assets/VExpansionPanels-CJWqDA9d.js.gz +0 -0
  277. codex/static_root/assets/VRadioGroup-BFLE3yCT.8b78cefe4206.js.br +0 -0
  278. codex/static_root/assets/VRadioGroup-BFLE3yCT.8b78cefe4206.js.gz +0 -0
  279. codex/static_root/assets/VRadioGroup-BFLE3yCT.js.br +0 -0
  280. codex/static_root/assets/VRadioGroup-BFLE3yCT.js.gz +0 -0
  281. codex/static_root/assets/VSelect-Dvsi19pi.6d38dc99e0a8.js.br +0 -0
  282. codex/static_root/assets/VSelect-Dvsi19pi.6d38dc99e0a8.js.gz +0 -0
  283. codex/static_root/assets/VSelect-Dvsi19pi.js.br +0 -0
  284. codex/static_root/assets/VSelect-Dvsi19pi.js.gz +0 -0
  285. codex/static_root/assets/VSelectionControl-BioGLzkQ.106c3be4b6d4.js.br +0 -0
  286. codex/static_root/assets/VSelectionControl-BioGLzkQ.106c3be4b6d4.js.gz +0 -0
  287. codex/static_root/assets/VSelectionControl-BioGLzkQ.js.br +0 -0
  288. codex/static_root/assets/VSelectionControl-BioGLzkQ.js.gz +0 -0
  289. codex/static_root/assets/VSlideGroup-CFkaPBuS.1d168fc87687.js.br +0 -0
  290. codex/static_root/assets/VSlideGroup-CFkaPBuS.1d168fc87687.js.gz +0 -0
  291. codex/static_root/assets/VSlideGroup-CFkaPBuS.js.br +0 -0
  292. codex/static_root/assets/VSlideGroup-CFkaPBuS.js.gz +0 -0
  293. codex/static_root/assets/VTable-B7x3Oih2.d0010dab39ce.js.br +0 -0
  294. codex/static_root/assets/VTable-B7x3Oih2.d0010dab39ce.js.gz +0 -0
  295. codex/static_root/assets/VTable-B7x3Oih2.js.br +0 -0
  296. codex/static_root/assets/VTable-B7x3Oih2.js.gz +0 -0
  297. codex/static_root/assets/VTextField-rsRdtAxl.488a06f530fe.js.br +0 -0
  298. codex/static_root/assets/VTextField-rsRdtAxl.488a06f530fe.js.gz +0 -0
  299. codex/static_root/assets/VTextField-rsRdtAxl.js.br +0 -0
  300. codex/static_root/assets/VTextField-rsRdtAxl.js.gz +0 -0
  301. codex/static_root/assets/VWindowItem-CibnlNHs.75a48ded87d5.js.br +0 -0
  302. codex/static_root/assets/VWindowItem-CibnlNHs.75a48ded87d5.js.gz +0 -0
  303. codex/static_root/assets/VWindowItem-CibnlNHs.js.br +0 -0
  304. codex/static_root/assets/VWindowItem-CibnlNHs.js.gz +0 -0
  305. codex/static_root/assets/admin-CaVmJ-fa.251f5d3cc755.js.br +0 -0
  306. codex/static_root/assets/admin-CaVmJ-fa.251f5d3cc755.js.gz +0 -0
  307. codex/static_root/assets/admin-CaVmJ-fa.js.br +0 -0
  308. codex/static_root/assets/admin-CaVmJ-fa.js.gz +0 -0
  309. codex/static_root/assets/admin-menu-Cb7A0Ilo.ddf1e9339257.js.br +0 -0
  310. codex/static_root/assets/admin-menu-Cb7A0Ilo.ddf1e9339257.js.gz +0 -0
  311. codex/static_root/assets/admin-menu-Cb7A0Ilo.js.br +0 -0
  312. codex/static_root/assets/admin-menu-Cb7A0Ilo.js.gz +0 -0
  313. codex/static_root/assets/admin-settings-button-progress-DID-drll.979420762aea.js.br +0 -0
  314. codex/static_root/assets/admin-settings-button-progress-DID-drll.979420762aea.js.gz +0 -0
  315. codex/static_root/assets/admin-settings-button-progress-DID-drll.js.br +0 -0
  316. codex/static_root/assets/admin-settings-button-progress-DID-drll.js.gz +0 -0
  317. codex/static_root/assets/browser-Br5CorL4.6e2a416309d5.css +0 -1
  318. codex/static_root/assets/browser-Br5CorL4.6e2a416309d5.css.br +0 -0
  319. codex/static_root/assets/browser-Br5CorL4.6e2a416309d5.css.gz +0 -0
  320. codex/static_root/assets/browser-Br5CorL4.css +0 -1
  321. codex/static_root/assets/browser-Br5CorL4.css.br +0 -0
  322. codex/static_root/assets/browser-Br5CorL4.css.gz +0 -0
  323. codex/static_root/assets/browser-xxQTUEuu.1686c20dc492.js +0 -1
  324. codex/static_root/assets/browser-xxQTUEuu.1686c20dc492.js.br +0 -0
  325. codex/static_root/assets/browser-xxQTUEuu.1686c20dc492.js.gz +0 -0
  326. codex/static_root/assets/browser-xxQTUEuu.js +0 -1
  327. codex/static_root/assets/browser-xxQTUEuu.js.br +0 -0
  328. codex/static_root/assets/browser-xxQTUEuu.js.gz +0 -0
  329. codex/static_root/assets/change-password-dialog-DXY2Xg9k.4a7ca6108810.js.br +0 -0
  330. codex/static_root/assets/change-password-dialog-DXY2Xg9k.4a7ca6108810.js.gz +0 -0
  331. codex/static_root/assets/change-password-dialog-DXY2Xg9k.js.br +0 -0
  332. codex/static_root/assets/change-password-dialog-DXY2Xg9k.js.gz +0 -0
  333. codex/static_root/assets/confirm-dialog-BEVEU-kA.281b6e877fb5.js.br +0 -0
  334. codex/static_root/assets/confirm-dialog-BEVEU-kA.281b6e877fb5.js.gz +0 -0
  335. codex/static_root/assets/confirm-dialog-BEVEU-kA.js.br +0 -0
  336. codex/static_root/assets/confirm-dialog-BEVEU-kA.js.gz +0 -0
  337. codex/static_root/assets/datetime-column-DhrZEHwa.80e95aef7bdb.js.br +0 -1
  338. codex/static_root/assets/datetime-column-DhrZEHwa.80e95aef7bdb.js.gz +0 -0
  339. codex/static_root/assets/datetime-column-DhrZEHwa.js.br +0 -1
  340. codex/static_root/assets/datetime-column-DhrZEHwa.js.gz +0 -0
  341. codex/static_root/assets/filter-BJ7TmFiU.3cefe2d609c7.js.br +0 -0
  342. codex/static_root/assets/filter-BJ7TmFiU.3cefe2d609c7.js.gz +0 -0
  343. codex/static_root/assets/filter-BJ7TmFiU.js.br +0 -0
  344. codex/static_root/assets/filter-BJ7TmFiU.js.gz +0 -0
  345. codex/static_root/assets/flag-tab-AJj0sesB.2ab1be15d10f.js.br +0 -0
  346. codex/static_root/assets/flag-tab-AJj0sesB.2ab1be15d10f.js.gz +0 -0
  347. codex/static_root/assets/flag-tab-AJj0sesB.js.br +0 -0
  348. codex/static_root/assets/flag-tab-AJj0sesB.js.gz +0 -0
  349. codex/static_root/assets/group-tab-DuxOH4Hn.8ac96cfe7c43.js.br +0 -0
  350. codex/static_root/assets/group-tab-DuxOH4Hn.8ac96cfe7c43.js.gz +0 -0
  351. codex/static_root/assets/group-tab-DuxOH4Hn.js.br +0 -0
  352. codex/static_root/assets/group-tab-DuxOH4Hn.js.gz +0 -0
  353. codex/static_root/assets/http-error-DIeFpbQV.086e1dd09555.js.br +0 -0
  354. codex/static_root/assets/http-error-DIeFpbQV.086e1dd09555.js.gz +0 -0
  355. codex/static_root/assets/http-error-DIeFpbQV.js.br +0 -0
  356. codex/static_root/assets/http-error-DIeFpbQV.js.gz +0 -0
  357. codex/static_root/assets/index-MN9BB_He.201e30aa00ef.js.br +0 -0
  358. codex/static_root/assets/index-MN9BB_He.201e30aa00ef.js.gz +0 -0
  359. codex/static_root/assets/index-MN9BB_He.js.br +0 -0
  360. codex/static_root/assets/index-MN9BB_He.js.gz +0 -0
  361. codex/static_root/assets/library-tab-jpeUUWzV.70dae13f6dab.js.br +0 -0
  362. codex/static_root/assets/library-tab-jpeUUWzV.70dae13f6dab.js.gz +0 -0
  363. codex/static_root/assets/library-tab-jpeUUWzV.js.br +0 -0
  364. codex/static_root/assets/library-tab-jpeUUWzV.js.gz +0 -0
  365. codex/static_root/assets/main-Cs7q8tob.86ef2567544d.js.br +0 -0
  366. codex/static_root/assets/main-Cs7q8tob.86ef2567544d.js.gz +0 -0
  367. codex/static_root/assets/main-Cs7q8tob.js.br +0 -0
  368. codex/static_root/assets/main-Cs7q8tob.js.gz +0 -0
  369. codex/static_root/assets/pager-full-pdf-D_ecZhu-.ff93ca6c55e0.js +0 -1
  370. codex/static_root/assets/pager-full-pdf-D_ecZhu-.ff93ca6c55e0.js.br +0 -0
  371. codex/static_root/assets/pager-full-pdf-D_ecZhu-.ff93ca6c55e0.js.gz +0 -0
  372. codex/static_root/assets/pager-full-pdf-D_ecZhu-.js +0 -1
  373. codex/static_root/assets/pager-full-pdf-D_ecZhu-.js.br +0 -0
  374. codex/static_root/assets/pager-full-pdf-D_ecZhu-.js.gz +0 -0
  375. codex/static_root/assets/pagination-toolbar-yeU7sPiY.ce0751d6009d.js.br +0 -0
  376. codex/static_root/assets/pagination-toolbar-yeU7sPiY.ce0751d6009d.js.gz +0 -0
  377. codex/static_root/assets/pagination-toolbar-yeU7sPiY.js.br +0 -0
  378. codex/static_root/assets/pagination-toolbar-yeU7sPiY.js.gz +0 -0
  379. codex/static_root/assets/pdf-doc-Czi9tnhD.4d4b8b7ff5d7.js.br +0 -0
  380. codex/static_root/assets/pdf-doc-Czi9tnhD.4d4b8b7ff5d7.js.gz +0 -0
  381. codex/static_root/assets/pdf-doc-Czi9tnhD.js.br +0 -0
  382. codex/static_root/assets/pdf-doc-Czi9tnhD.js.gz +0 -0
  383. codex/static_root/assets/reader-DQKMY8MS.d9d3451f2cff.js +0 -2
  384. codex/static_root/assets/reader-DQKMY8MS.d9d3451f2cff.js.br +0 -0
  385. codex/static_root/assets/reader-DQKMY8MS.d9d3451f2cff.js.gz +0 -0
  386. codex/static_root/assets/reader-DQKMY8MS.js +0 -2
  387. codex/static_root/assets/reader-DQKMY8MS.js.br +0 -0
  388. codex/static_root/assets/reader-DQKMY8MS.js.gz +0 -0
  389. codex/static_root/assets/reader-OpKdTZ_B.css.br +0 -0
  390. codex/static_root/assets/reader-OpKdTZ_B.css.gz +0 -0
  391. codex/static_root/assets/reader-OpKdTZ_B.ebd1512b7014.css.br +0 -0
  392. codex/static_root/assets/reader-OpKdTZ_B.ebd1512b7014.css.gz +0 -0
  393. codex/static_root/assets/relation-chips-CFH0Xf78.62ded2739a22.js.br +0 -0
  394. codex/static_root/assets/relation-chips-CFH0Xf78.62ded2739a22.js.gz +0 -0
  395. codex/static_root/assets/relation-chips-CFH0Xf78.js.br +0 -0
  396. codex/static_root/assets/relation-chips-CFH0Xf78.js.gz +0 -0
  397. codex/static_root/assets/settings-drawer-DbOztp2R.b6f981108782.js.br +0 -0
  398. codex/static_root/assets/settings-drawer-DbOztp2R.b6f981108782.js.gz +0 -0
  399. codex/static_root/assets/settings-drawer-DbOztp2R.js.br +0 -0
  400. codex/static_root/assets/settings-drawer-DbOztp2R.js.gz +0 -0
  401. codex/static_root/assets/stats-tab-DWktIwEj.42666baa0d93.js.br +0 -0
  402. codex/static_root/assets/stats-tab-DWktIwEj.42666baa0d93.js.gz +0 -0
  403. codex/static_root/assets/stats-tab-DWktIwEj.js.br +0 -0
  404. codex/static_root/assets/stats-tab-DWktIwEj.js.gz +0 -0
  405. codex/static_root/assets/task-tab-BtTtKJP6.421692e51e82.js +0 -1
  406. codex/static_root/assets/task-tab-BtTtKJP6.421692e51e82.js.br +0 -0
  407. codex/static_root/assets/task-tab-BtTtKJP6.421692e51e82.js.gz +0 -0
  408. codex/static_root/assets/task-tab-BtTtKJP6.js +0 -1
  409. codex/static_root/assets/task-tab-BtTtKJP6.js.br +0 -0
  410. codex/static_root/assets/task-tab-BtTtKJP6.js.gz +0 -0
  411. codex/static_root/assets/transition-A__CJ90w.970355913cb9.js.br +0 -0
  412. codex/static_root/assets/transition-A__CJ90w.970355913cb9.js.gz +0 -0
  413. codex/static_root/assets/transition-A__CJ90w.js.br +0 -0
  414. codex/static_root/assets/transition-A__CJ90w.js.gz +0 -0
  415. codex/static_root/assets/unauthorized-FF1nwDKt.b3d6255ddb7f.js.br +0 -0
  416. codex/static_root/assets/unauthorized-FF1nwDKt.b3d6255ddb7f.js.gz +0 -0
  417. codex/static_root/assets/unauthorized-FF1nwDKt.js.br +0 -0
  418. codex/static_root/assets/unauthorized-FF1nwDKt.js.gz +0 -0
  419. codex/static_root/assets/user-tab-RwMqZeSN.d4ed24177855.js.br +0 -0
  420. codex/static_root/assets/user-tab-RwMqZeSN.d4ed24177855.js.gz +0 -0
  421. codex/static_root/assets/user-tab-RwMqZeSN.js.br +0 -0
  422. codex/static_root/assets/user-tab-RwMqZeSN.js.gz +0 -0
  423. codex/static_root/manifest.8dff5f2fb15e.json.br +0 -0
  424. codex/static_root/manifest.8dff5f2fb15e.json.gz +0 -0
  425. {codex-1.7.0a1.dist-info → codex-1.7.1.dist-info}/LICENSE +0 -0
  426. {codex-1.7.0a1.dist-info → codex-1.7.1.dist-info}/WHEEL +0 -0
  427. {codex-1.7.0a1.dist-info → codex-1.7.1.dist-info}/entry_points.txt +0 -0
codex/choices.py CHANGED
@@ -175,7 +175,7 @@ ADMIN_TASK_GROUPS = MappingProxyType(
175
175
  "tasks": (
176
176
  {
177
177
  "title": "Libraries",
178
- "tasks": (
178
+ "tasks": [
179
179
  {
180
180
  "value": "poll",
181
181
  "title": "Poll All Libraries",
@@ -198,11 +198,11 @@ ADMIN_TASK_GROUPS = MappingProxyType(
198
198
  "title": "Sync Watchdog with DB",
199
199
  "desc": "Ensure the Watchdog file watcher is enabled per database preferences for each library",
200
200
  },
201
- ),
201
+ ],
202
202
  },
203
203
  {
204
204
  "title": "Covers",
205
- "tasks": (
205
+ "tasks": [
206
206
  {
207
207
  "value": "purge_comic_covers",
208
208
  "title": "Remove Comic Covers",
@@ -220,16 +220,21 @@ ADMIN_TASK_GROUPS = MappingProxyType(
220
220
  "title": "Update Group Timestamps",
221
221
  "desc": "Force the update of group timestamps. Will bust the browser cache for browser views and covers.",
222
222
  },
223
- ),
223
+ ],
224
224
  },
225
225
  {
226
226
  "title": "Search Index",
227
- "tasks": (
227
+ "tasks": [
228
228
  {
229
229
  "value": "search_index_update",
230
230
  "title": "Update Search Index",
231
231
  "desc": "with recently changed comics",
232
232
  },
233
+ {
234
+ "value": "search_index_optimize",
235
+ "title": "Optimize Search Index",
236
+ "desc": "Merge Search Index for optimal lookup time. Runs nightly.",
237
+ },
233
238
  {
234
239
  "value": "search_index_rebuild",
235
240
  "title": "Rebuild Search Index",
@@ -241,17 +246,6 @@ ADMIN_TASK_GROUPS = MappingProxyType(
241
246
  "title": "Remove Stale Index Entries",
242
247
  "desc": "Remove search index entries that are no longer in the library.",
243
248
  },
244
- {
245
- "value": "search_index_merge_small",
246
- "title": "Merge Small Search Index Segments",
247
- "desc": "Improves search lookup times. Runs nightly if the Optimize Admin Flag is off.",
248
- },
249
- {
250
- "value": "search_index_optimize",
251
- "title": "Merge Search Index Into One Segment",
252
- "desc": "Reduces disk space and improves search lookup times. Runs nightly if the Optimize Admin Flag is on.",
253
- "confirm": "This can take a long time.",
254
- },
255
249
  {
256
250
  "value": "search_index_abort",
257
251
  "title": "Abort Search Indexing",
@@ -262,11 +256,21 @@ ADMIN_TASK_GROUPS = MappingProxyType(
262
256
  "title": "Clear Search Index",
263
257
  "desc": "of all entries",
264
258
  },
265
- ),
259
+ {
260
+ "value": "db_fts_integrity_check",
261
+ "title": "Integrity Check Search Index",
262
+ "desc": "Repairs Search Index on failure. Runs nightly",
263
+ },
264
+ {
265
+ "value": "db_fts_rebuild",
266
+ "title": "Repair Search Index",
267
+ "desc": "Probably faster than Rebuild if integrity check fails.",
268
+ },
269
+ ],
266
270
  },
267
271
  {
268
272
  "title": "Database",
269
- "tasks": (
273
+ "tasks": [
270
274
  {
271
275
  "value": "db_vacuum",
272
276
  "title": "Optimize & Compact Database",
@@ -278,15 +282,21 @@ ADMIN_TASK_GROUPS = MappingProxyType(
278
282
  "desc": "Runs nightly",
279
283
  },
280
284
  {
281
- "value": "db_search_sync",
282
- "title": "Sync Search Index to DB",
283
- "desc": "Check to see if this database matches the current search index. If there is a mismatch, rebuild the search index. Runs on startup.",
285
+ "value": "db_foreign_key_check",
286
+ "title": "Remove Illegal Foreign Keys",
287
+ "desc": "Check for and remove illegal foreign keys. Mark affected comics for update. Runs nightly.",
284
288
  },
285
- ),
289
+ {
290
+ "value": "db_integrity_check",
291
+ "title": "Check Database Integrity",
292
+ "desc": "Check logs for results. Runs nightly.",
293
+ "confirm": "Can take a while on large databases, Are you sure?",
294
+ },
295
+ ],
286
296
  },
287
297
  {
288
298
  "title": "Codex Software",
289
- "tasks": (
299
+ "tasks": [
290
300
  {
291
301
  "value": "codex_latest_version",
292
302
  "title": "Check for Codex Latest Version",
@@ -310,11 +320,11 @@ ADMIN_TASK_GROUPS = MappingProxyType(
310
320
  "desc": "Immediately",
311
321
  "confirm": "Are you sure?",
312
322
  },
313
- ),
323
+ ],
314
324
  },
315
325
  {
316
326
  "title": "Notify",
317
- "tasks": (
327
+ "tasks": [
318
328
  {
319
329
  "value": "notify_library_changed",
320
330
  "title": "Notify Library Changed ",
@@ -325,11 +335,11 @@ ADMIN_TASK_GROUPS = MappingProxyType(
325
335
  "title": "Notify Librarian Status",
326
336
  "desc": "Signal Admin clients to fetch librarian status.",
327
337
  },
328
- ),
338
+ ],
329
339
  },
330
340
  {
331
341
  "title": "Cleanup",
332
- "tasks": (
342
+ "tasks": [
333
343
  {
334
344
  "value": "cleanup_fks",
335
345
  "title": "Remove Orphan Tags",
@@ -350,6 +360,11 @@ ADMIN_TASK_GROUPS = MappingProxyType(
350
360
  "title": "Remove Orphan Cover Thumbnails",
351
361
  "desc": "no longer have source comics or custom images. Runs nightly.",
352
362
  },
363
+ {
364
+ "value": "cleanup_bookmarks",
365
+ "title": "Remove Orphan Bookmarks",
366
+ "desc": "Owned by no session or user. Runs nightly.",
367
+ },
353
368
  {
354
369
  "value": "adopt_folders",
355
370
  "title": "Adopt Orphan Folders",
@@ -366,7 +381,7 @@ ADMIN_TASK_GROUPS = MappingProxyType(
366
381
  "desc": "Runs several tasks above that also run nightly.",
367
382
  "confirm": "Launches several tasks that run nightly anyway.",
368
383
  },
369
- ),
384
+ ],
370
385
  },
371
386
  )
372
387
  }
codex/db.py CHANGED
@@ -71,8 +71,7 @@ def _repair_db():
71
71
  if FIX_FOREIGN_KEYS:
72
72
  fix_foreign_keys()
73
73
  if INTEGRITY_CHECK:
74
- long = INTEGRITY_CHECK == "full"
75
- integrity_check(long)
74
+ integrity_check()
76
75
  success = fts_integrity_check() if FTS_INTEGRITY_CHECK else True
77
76
  if FTS_REBUILD or not success:
78
77
  fts_rebuild()
@@ -29,7 +29,7 @@ class BookmarkThread(AggregateMessageQueuedThread, BookmarkUpdate):
29
29
  auth_filter, comic_filter = filters
30
30
  auth_filter = dict(auth_filter)
31
31
  comic_filter = dict(comic_filter)
32
- self.update_bookmarks(auth_filter, comic_filter, updates)
32
+ self.update_bookmarks(auth_filter, comic_filter, updates, self.log)
33
33
  self.log.debug(f"updated {auth_filter | comic_filter}")
34
34
  cleanup.add(filters)
35
35
  except Exception:
@@ -8,6 +8,7 @@ from django.db.models.query import Q
8
8
  from codex.librarian.mp_queue import LIBRARIAN_QUEUE
9
9
  from codex.librarian.notifier.tasks import NotifierTask
10
10
  from codex.models import Bookmark, Comic
11
+ from codex.models.admin import UserActive
11
12
  from codex.views.auth import GroupACLMixin
12
13
  from codex.views.mixins import BookmarkSearchMixin
13
14
 
@@ -136,7 +137,17 @@ class BookmarkUpdate(GroupACLMixin, BookmarkSearchMixin):
136
137
  return count
137
138
 
138
139
  @classmethod
139
- def update_bookmarks(cls, auth_filter, comic_filter, updates):
140
+ def _update_user_active(cls, user, log):
141
+ """Update user active."""
142
+ # Offline because profile gets hit rapidly in succession.
143
+ try:
144
+ UserActive.objects.update_or_create(user=user)
145
+ except Exception as exc:
146
+ reason = f"update user activity {exc}"
147
+ log.warning(reason)
148
+
149
+ @classmethod
150
+ def update_bookmarks(cls, auth_filter, comic_filter, updates, log):
140
151
  """Update a user bookmark."""
141
152
  search_kwargs = cls.get_bookmark_search_kwargs(auth_filter, comic_filter)
142
153
 
@@ -148,6 +159,8 @@ class BookmarkUpdate(GroupACLMixin, BookmarkSearchMixin):
148
159
 
149
160
  count = cls._update_bookmarks(search_kwargs, updates, user)
150
161
  count += cls._create_bookmarks(comic_filter, search_kwargs, updates, user)
162
+ if user:
163
+ cls._update_user_active(user, log)
151
164
  if count:
152
165
  uid = next(iter(auth_filter.values()))
153
166
  cls._notify_library_changed(uid)
@@ -277,23 +277,24 @@ def _is_integrity_ok(results):
277
277
  )
278
278
 
279
279
 
280
- def integrity_check(long=False, log=None):
280
+ def integrity_check(long=True, log=None):
281
281
  """Run sqlite3 integrity check."""
282
+ if not log:
283
+ log = LOG
282
284
  pragma = "integrity_check" if long else "quick_check"
283
285
  sql = _PRAGMA_TMPL % pragma
286
+ log.debug(f"Running database '{sql}'...")
284
287
  results = _exec_sql(sql)
285
288
 
286
- if not log:
287
- log = LOG
288
-
289
289
  if _is_integrity_ok(results):
290
- length = "thorough" if long else "quick"
291
- log.info(f"Database passed {length} integrity check.")
290
+ length = "" if long else "quick "
291
+ log.info(f"Database passed {length}integrity check.")
292
292
  else:
293
- log.error(
294
- "Database integrity compromised. See the README for database rebuild instructions."
293
+ log.warning(f"Database '{sql}' returned results:")
294
+ log.warning(results)
295
+ log.warning(
296
+ "See the README for database rebuild instructions if the above warning looks severe."
295
297
  )
296
- log.error(results)
297
298
 
298
299
 
299
300
  def fts_rebuild(log=None):
@@ -341,7 +342,7 @@ class IntegrityMixin(WorkerBaseMixin):
341
342
 
342
343
  def integrity_check(self, long=False):
343
344
  """Integrity check task."""
344
- subtitle = "Thorough" if long else "Quick"
345
+ subtitle = "" if long else "Quick"
345
346
  status = Status(JanitorStatusTypes.INTEGRITY_CHECK, subtitle=subtitle)
346
347
  try:
347
348
  self.status_controller.start(status)
@@ -81,7 +81,7 @@ class JanitorForeignKeyCheck(JanitorTask):
81
81
  class JanitorIntegrityCheck(JanitorTask):
82
82
  """Check integrity and warn."""
83
83
 
84
- long: bool = False
84
+ long: bool = True
85
85
 
86
86
 
87
87
  @dataclass
@@ -21,6 +21,7 @@ class BrowserCardSerializer(BrowserAggregateSerializerMixin):
21
21
  publisher_name = CharField(read_only=True)
22
22
  series_name = CharField(read_only=True)
23
23
  volume_name = CharField(read_only=True)
24
+ file_name = CharField(read_only=True)
24
25
  name = CharField(read_only=True)
25
26
  issue_number = DecimalField(
26
27
  max_digits=16,
@@ -1 +1 @@
1
- import{m as A,V as t}from"./VCheckboxBtn-BbNnqvzj.js";import{f as F,u as I,g as l}from"./VSelectionControl-BioGLzkQ.js";import{p as B,d as U,g as R,k as D,br as M,f as N,h as $,bs as j,a as u,i as r}from"./main-Cs7q8tob.js";const q=B({...F(),...U(A(),["inline"])},"VCheckbox"),G=R()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,d){let{attrs:c,slots:a}=d;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=M(),b=N(()=>e.id||`checkbox-${V}`);return $(()=>{const[p,f]=j(c),k=l.filterProps(e),v=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},p,k,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:b.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:g}=o;return u(t,r(v,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:g.value===!1,modelValue:s.value,"onUpdate:modelValue":y=>s.value=y,onFocus:i,onBlur:m}),a)}})}),{}}});export{G as V};
1
+ import{m as A,V as t}from"./VCheckboxBtn-D5jbIiqO.js";import{f as F,u as I,g as l}from"./VSelectionControl-CrzLF2bD.js";import{p as B,d as U,g as R,k as D,br as M,f as N,h as $,bs as j,a as u,i as r}from"./main-Ed96tESk.js";const q=B({...F(),...U(A(),["inline"])},"VCheckbox"),G=R()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,d){let{attrs:c,slots:a}=d;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=M(),b=N(()=>e.id||`checkbox-${V}`);return $(()=>{const[p,f]=j(c),k=l.filterProps(e),v=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},p,k,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:b.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:g}=o;return u(t,r(v,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:g.value===!1,modelValue:s.value,"onUpdate:modelValue":y=>s.value=y,onFocus:i,onBlur:m}),a)}})}),{}}});export{G as V};
@@ -1 +1 @@
1
- import{m as A,V as t}from"./VCheckboxBtn-BbNnqvzj.js";import{f as F,u as I,g as l}from"./VSelectionControl-BioGLzkQ.js";import{p as B,d as U,g as R,k as D,br as M,f as N,h as $,bs as j,a as u,i as r}from"./main-Cs7q8tob.js";const q=B({...F(),...U(A(),["inline"])},"VCheckbox"),G=R()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,d){let{attrs:c,slots:a}=d;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=M(),b=N(()=>e.id||`checkbox-${V}`);return $(()=>{const[p,f]=j(c),k=l.filterProps(e),v=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},p,k,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:b.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:g}=o;return u(t,r(v,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:g.value===!1,modelValue:s.value,"onUpdate:modelValue":y=>s.value=y,onFocus:i,onBlur:m}),a)}})}),{}}});export{G as V};
1
+ import{m as A,V as t}from"./VCheckboxBtn-D5jbIiqO.js";import{f as F,u as I,g as l}from"./VSelectionControl-CrzLF2bD.js";import{p as B,d as U,g as R,k as D,br as M,f as N,h as $,bs as j,a as u,i as r}from"./main-Ed96tESk.js";const q=B({...F(),...U(A(),["inline"])},"VCheckbox"),G=R()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,d){let{attrs:c,slots:a}=d;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=M(),b=N(()=>e.id||`checkbox-${V}`);return $(()=>{const[p,f]=j(c),k=l.filterProps(e),v=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},p,k,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:b.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:g}=o;return u(t,r(v,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},f,{error:g.value===!1,modelValue:s.value,"onUpdate:modelValue":y=>s.value=y,onFocus:i,onBlur:m}),a)}})}),{}}});export{G as V};
@@ -1 +1 @@
1
- import{j as f,k as o}from"./VSelectionControl-BioGLzkQ.js";import{p as k,a0 as V,g as v,k as c,f as l,h as I,d as h,a as x,i as b}from"./main-Cs7q8tob.js";const C=k({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=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),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=h(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
1
+ import{j as f,k as o}from"./VSelectionControl-CrzLF2bD.js";import{p as k,a0 as V,g as v,k as c,f as l,h as I,d as h,a as x,i as b}from"./main-Ed96tESk.js";const C=k({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=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),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=h(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
@@ -1 +1 @@
1
- import{j as f,k as o}from"./VSelectionControl-BioGLzkQ.js";import{p as k,a0 as V,g as v,k as c,f as l,h as I,d as h,a as x,i as b}from"./main-Cs7q8tob.js";const C=k({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=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),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=h(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
1
+ import{j as f,k as o}from"./VSelectionControl-CrzLF2bD.js";import{p as k,a0 as V,g as v,k as c,f as l,h as I,d as h,a as x,i as b}from"./main-Ed96tESk.js";const C=k({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),y=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),d=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const a=h(o.filterProps(e),["modelValue"]);return x(o,b(a,{modelValue:n.value,"onUpdate:modelValue":[m=>n.value=m,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:d.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{y as V,C as m};
@@ -1 +1 @@
1
- import{m as Ce,u as pe,t as A,f as we,V as Se,a as Fe,b as Ie,c as Ae}from"./VSelect-Dvsi19pi.js";import{m as De,a as X,V as Y,e as Pe}from"./VTextField-rsRdtAxl.js";import{e as Re,u as _e,V as Z}from"./transition-A__CJ90w.js";import{m as Ee,u as Te}from"./filter-BJ7TmFiU.js";import{o as Me}from"./VSelectionControl-BioGLzkQ.js";import{h as Ne,f as Le}from"./VDialog-DJR54d5g.js";import{p as Oe,d as Be,g as Ke,aS as Ue,e as N,aT as D,k as ee,f as b,aU as P,aW as le,bq as ze,h as je,a as i,F as L,i as I,bA as qe,b as He,bB as We,bC as $e,bD as Ge,bE as Je}from"./main-Cs7q8tob.js";import{V as Qe}from"./VCheckboxBtn-BbNnqvzj.js";function Xe(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(L,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Ye=Oe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ee({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Be(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Re({transition:!1})},"VCombobox"),il=Ke()({name:"VCombobox",props:Ye(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var G;let{emit:R,slots:o}=g;const{t:O}=Ue(),V=N(),x=D(!1),k=D(!0),B=D(!1),W=N(),K=N(),U=ee(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=W.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=D(-1);let z=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=pe(e),{textColorClasses:oe,textColorStyles:ie}=_e(ae),n=ee(e,"modelValue",[],l=>ne(Je(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),F=Me(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=D(!e.multiple&&!y.value?((G=n.value[0])==null?void 0:G.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);P(C,l=>{z?le(()=>z=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),P(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Te(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!B.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=N(),ve=we(H,V);function de(l){z=!0,e.openOnClear&&(c.value=!0)}function fe(){q.value||(c.value=!0)}function me(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;$e(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(Ge(l)||e.readonly||F!=null&&F.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&j.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=K.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",le(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{B.value=!0})}function ye(l){B.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return P(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),P(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));ze&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=K.value)==null||a.scrollToIndex(l))})}}),P(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),je(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(L,null,[i(Se,I({ref:W,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Fe,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(Y,{title:O(e.noDataText)},null)),i(Ie,{ref:K,renderless:!0,items:p.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Q=o.item)==null?void 0:Q.call(o,{item:d,index:S,props:J}))??i(Y,I(J,{role:"option"}),{prepend:T=>{let{isSelected:M}=T;return i(L,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Pe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(Z,{icon:d.props.prependIcon},null)])},title:()=>{var T,M;return k.value?d.title:Xe(d.title,(T=re(d))==null?void 0:T.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?qe(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ne,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ae,I({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[He(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(L,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(Z,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:We,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),Le({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{il as V};
1
+ import{m as Ce,u as pe,t as A,f as we,V as Se,a as Fe,b as Ie,c as Ae}from"./VSelect-BTo1ZM8U.js";import{m as De,a as X,V as Y,e as Pe}from"./VTextField-D7pt5iJ3.js";import{e as Re,u as _e,V as Z}from"./transition-CyIqQdeu.js";import{m as Ee,u as Te}from"./filter-CnO_WiBE.js";import{o as Me}from"./VSelectionControl-CrzLF2bD.js";import{h as Ne,f as Le}from"./VDialog-BVHV10WD.js";import{p as Oe,d as Be,g as Ke,aS as Ue,e as N,aT as D,k as ee,f as b,aU as P,aW as le,bq as ze,h as je,a as i,F as L,i as I,bA as qe,b as He,bB as We,bC as $e,bD as Ge,bE as Je}from"./main-Ed96tESk.js";import{V as Qe}from"./VCheckboxBtn-D5jbIiqO.js";function Xe(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(L,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Ye=Oe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ee({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Be(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Re({transition:!1})},"VCombobox"),il=Ke()({name:"VCombobox",props:Ye(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var G;let{emit:R,slots:o}=g;const{t:O}=Ue(),V=N(),x=D(!1),k=D(!0),B=D(!1),W=N(),K=N(),U=ee(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=W.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=D(-1);let z=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=pe(e),{textColorClasses:oe,textColorStyles:ie}=_e(ae),n=ee(e,"modelValue",[],l=>ne(Je(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),F=Me(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=D(!e.multiple&&!y.value?((G=n.value[0])==null?void 0:G.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);P(C,l=>{z?le(()=>z=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),P(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Te(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!B.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=N(),ve=we(H,V);function de(l){z=!0,e.openOnClear&&(c.value=!0)}function fe(){q.value||(c.value=!0)}function me(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;$e(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(Ge(l)||e.readonly||F!=null&&F.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&j.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=K.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",le(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{B.value=!0})}function ye(l){B.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return P(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),P(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));ze&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=K.value)==null||a.scrollToIndex(l))})}}),P(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),je(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(L,null,[i(Se,I({ref:W,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Fe,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(Y,{title:O(e.noDataText)},null)),i(Ie,{ref:K,renderless:!0,items:p.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Q=o.item)==null?void 0:Q.call(o,{item:d,index:S,props:J}))??i(Y,I(J,{role:"option"}),{prepend:T=>{let{isSelected:M}=T;return i(L,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Pe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(Z,{icon:d.props.prependIcon},null)])},title:()=>{var T,M;return k.value?d.title:Xe(d.title,(T=re(d))==null?void 0:T.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?qe(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ne,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ae,I({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[He(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(L,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(Z,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:We,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),Le({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{il as V};
@@ -1 +1 @@
1
- import{m as Ce,u as pe,t as A,f as we,V as Se,a as Fe,b as Ie,c as Ae}from"./VSelect-Dvsi19pi.js";import{m as De,a as X,V as Y,e as Pe}from"./VTextField-rsRdtAxl.js";import{e as Re,u as _e,V as Z}from"./transition-A__CJ90w.js";import{m as Ee,u as Te}from"./filter-BJ7TmFiU.js";import{o as Me}from"./VSelectionControl-BioGLzkQ.js";import{h as Ne,f as Le}from"./VDialog-DJR54d5g.js";import{p as Oe,d as Be,g as Ke,aS as Ue,e as N,aT as D,k as ee,f as b,aU as P,aW as le,bq as ze,h as je,a as i,F as L,i as I,bA as qe,b as He,bB as We,bC as $e,bD as Ge,bE as Je}from"./main-Cs7q8tob.js";import{V as Qe}from"./VCheckboxBtn-BbNnqvzj.js";function Xe(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(L,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Ye=Oe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ee({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Be(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Re({transition:!1})},"VCombobox"),il=Ke()({name:"VCombobox",props:Ye(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var G;let{emit:R,slots:o}=g;const{t:O}=Ue(),V=N(),x=D(!1),k=D(!0),B=D(!1),W=N(),K=N(),U=ee(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=W.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=D(-1);let z=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=pe(e),{textColorClasses:oe,textColorStyles:ie}=_e(ae),n=ee(e,"modelValue",[],l=>ne(Je(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),F=Me(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=D(!e.multiple&&!y.value?((G=n.value[0])==null?void 0:G.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);P(C,l=>{z?le(()=>z=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),P(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Te(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!B.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=N(),ve=we(H,V);function de(l){z=!0,e.openOnClear&&(c.value=!0)}function fe(){q.value||(c.value=!0)}function me(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;$e(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(Ge(l)||e.readonly||F!=null&&F.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&j.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=K.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",le(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{B.value=!0})}function ye(l){B.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return P(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),P(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));ze&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=K.value)==null||a.scrollToIndex(l))})}}),P(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),je(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(L,null,[i(Se,I({ref:W,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Fe,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(Y,{title:O(e.noDataText)},null)),i(Ie,{ref:K,renderless:!0,items:p.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Q=o.item)==null?void 0:Q.call(o,{item:d,index:S,props:J}))??i(Y,I(J,{role:"option"}),{prepend:T=>{let{isSelected:M}=T;return i(L,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Pe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(Z,{icon:d.props.prependIcon},null)])},title:()=>{var T,M;return k.value?d.title:Xe(d.title,(T=re(d))==null?void 0:T.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?qe(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ne,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ae,I({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[He(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(L,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(Z,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:We,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),Le({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{il as V};
1
+ import{m as Ce,u as pe,t as A,f as we,V as Se,a as Fe,b as Ie,c as Ae}from"./VSelect-BTo1ZM8U.js";import{m as De,a as X,V as Y,e as Pe}from"./VTextField-D7pt5iJ3.js";import{e as Re,u as _e,V as Z}from"./transition-CyIqQdeu.js";import{m as Ee,u as Te}from"./filter-CnO_WiBE.js";import{o as Me}from"./VSelectionControl-CrzLF2bD.js";import{h as Ne,f as Le}from"./VDialog-BVHV10WD.js";import{p as Oe,d as Be,g as Ke,aS as Ue,e as N,aT as D,k as ee,f as b,aU as P,aW as le,bq as ze,h as je,a as i,F as L,i as I,bA as qe,b as He,bB as We,bC as $e,bD as Ge,bE as Je}from"./main-Ed96tESk.js";import{V as Qe}from"./VCheckboxBtn-D5jbIiqO.js";function Xe(e,g,R){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(L,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,R)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+R)])]):e}const Ye=Oe({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ee({filterKeys:["title"]}),...Ce({hideNoData:!0,returnObject:!0}),...Be(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Re({transition:!1})},"VCombobox"),il=Ke()({name:"VCombobox",props:Ye(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var G;let{emit:R,slots:o}=g;const{t:O}=Ue(),V=N(),x=D(!1),k=D(!0),B=D(!1),W=N(),K=N(),U=ee(e,"menu"),c=b({get:()=>U.value,set:l=>{var a;U.value&&!l&&((a=W.value)!=null&&a.ΨopenChildren.size)||(U.value=l)}}),s=D(-1);let z=!1;const ae=b(()=>{var l;return(l=V.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=pe(e),{textColorClasses:oe,textColorStyles:ie}=_e(ae),n=ee(e,"modelValue",[],l=>ne(Je(l)),l=>{const a=ue(l);return e.multiple?a:a[0]??null}),F=Me(),_=b(()=>!!(e.chips||o.chip)),y=b(()=>_.value||!!o.selection),C=D(!e.multiple&&!y.value?((G=n.value[0])==null?void 0:G.title)??"":""),v=b({get:()=>C.value,set:l=>{var a;if(C.value=l??"",!e.multiple&&!y.value&&(n.value=[A(e,l)]),l&&e.multiple&&((a=e.delimiters)!=null&&a.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(t=>{t=t.trim(),t&&h(A(e,t))}),C.value="")}l||(s.value=-1),k.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);P(C,l=>{z?le(()=>z=!1):x.value&&!c.value&&(c.value=!0),R("update:search",l)}),P(n,l=>{var a;!e.multiple&&!y.value&&(C.value=((a=l[0])==null?void 0:a.title)??"")});const{filteredItems:E,getMatches:re}=Te(e,te,()=>k.value?"":v.value),p=b(()=>e.hideSelected?E.value.filter(l=>!n.value.some(a=>a.value===l.value)):E.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var a;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((a=p.value[0])==null?void 0:a.title))&&p.value.length>0&&!k.value&&!B.value}),q=b(()=>e.hideNoData&&!p.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=N(),ve=we(H,V);function de(l){z=!0,e.openOnClear&&(c.value=!0)}function fe(){q.value||(c.value=!0)}function me(l){q.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function be(l){var a;$e(l)&&((a=V.value)==null||a.focus())}function he(l){var t;if(Ge(l)||e.readonly||F!=null&&F.isReadonly.value)return;const a=V.value.selectionStart,r=n.value.length;if((s.value>-1||["Enter","ArrowDown","ArrowUp"].includes(l.key))&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(c.value=!0),["Escape"].includes(l.key)&&(c.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(j.value&&["Enter","Tab"].includes(l.key)&&!n.value.some(u=>{let{value:m}=u;return m===p.value[0].value})&&h(E.value[0]),k.value=!0),l.key==="ArrowDown"&&j.value&&((t=H.value)==null||t.focus("next")),l.key==="Enter"&&v.value&&(h(A(e,v.value)),y.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&y.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&a>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(v.value.length,v.value.length))}if(l.key==="ArrowRight"){if(s.value<0)return;const u=s.value+1;n.value[u]?s.value=u:(s.value=-1,V.value.setSelectionRange(0,0))}}}function ge(){var l;e.eager&&((l=K.value)==null||l.calculateVisibleItems())}function Ve(){var l;x.value&&(k.value=!0,(l=V.value)==null||l.focus())}function h(l){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),t=a??!~r;if(~r){const u=t?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else t&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=a!==!1;n.value=r?[l]:[],C.value=r&&!y.value?l.title:"",le(()=>{c.value=!1,k.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{B.value=!0})}function ye(l){B.value=!1}function ke(l){(l==null||l===""&&!e.multiple&&!y.value)&&(n.value=[])}return P(x,(l,a)=>{if(!(l||l===a)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(A(e,v.value));return}if(!y.value)return;n.value.some(r=>{let{title:t}=r;return t===v.value})?C.value="":h(A(e,v.value))}}),P(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=p.value.findIndex(a=>n.value.some(r=>e.valueComparator(r.value,a.value)));ze&&window.requestAnimationFrame(()=>{var a;l>=0&&((a=K.value)==null||a.scrollToIndex(l))})}}),P(()=>e.items,(l,a)=>{c.value||x.value&&!a.length&&l.length&&(c.value=!0)}),je(()=>{const l=!!(!e.hideNoData||p.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),a=n.value.length>0,r=X.filterProps(e);return i(X,I({ref:V},r,{modelValue:v.value,"onUpdate:modelValue":[t=>v.value=t,ke],focused:x.value,"onUpdate:focused":t=>x.value=t,validationValue:n.externalValue,counterValue:se.value,dirty:a,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!y.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:a?void 0:e.placeholder,"onClick:clear":de,"onMousedown:control":fe,onKeydown:he}),{...o,default:()=>i(L,null,[i(Se,I({ref:W,modelValue:c.value,"onUpdate:modelValue":t=>c.value=t,activator:"parent",contentClass:"v-combobox__content",disabled:q.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:ge,onAfterLeave:Ve},e.menuProps),{default:()=>[l&&i(Fe,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:t=>t.preventDefault(),onKeydown:be,onFocusin:xe,onFocusout:ye,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ve,e.listProps),{default:()=>{var t,u,m;return[(t=o["prepend-item"])==null?void 0:t.call(o),!p.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(Y,{title:O(e.noDataText)},null)),i(Ie,{ref:K,renderless:!0,items:p.value},{default:w=>{var Q;let{item:d,index:S,itemRef:f}=w;const J=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((Q=o.item)==null?void 0:Q.call(o,{item:d,index:S,props:J}))??i(Y,I(J,{role:"option"}),{prepend:T=>{let{isSelected:M}=T;return i(L,null,[e.multiple&&!e.hideSelected?i(Qe,{key:d.value,modelValue:M,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Pe,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(Z,{icon:d.props.prependIcon},null)])},title:()=>{var T,M;return k.value?d.title:Xe(d.title,(T=re(d))==null?void 0:T.title,((M=v.value)==null?void 0:M.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((t,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(t,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?qe(_.value?o.chip({item:t,index:u,props:w}):o.selection({item:t,index:u})):void 0;if(!(d&&!S))return i("div",{key:t.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ne,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:t.title}}},{default:()=>[S]}):i(Ae,I({key:"chip",closable:e.closableChips,size:"small",text:t.title,disabled:t.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[t.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[He(",")])])])})]),"append-inner":function(){var w;for(var t=arguments.length,u=new Array(t),m=0;m<t;m++)u[m]=arguments[m];return i(L,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(Z,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:me,onClick:We,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),Le({isFocused:x,isPristine:k,menu:c,search:v,selectionIndex:s,filteredItems:E,select:h},V)}});export{il as V};