codex 1.8.8__py3-none-any.whl → 1.8.10__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 (430) hide show
  1. codex/librarian/bookmark/latest_version.py +2 -6
  2. codex/librarian/librariand.py +5 -3
  3. codex/librarian/restarter/restarter.py +2 -6
  4. codex/librarian/scribe/importer/init.py +4 -4
  5. codex/librarian/scribe/importer/link/many_to_many.py +2 -0
  6. codex/librarian/scribe/importer/link/prepare.py +7 -4
  7. codex/librarian/scribe/importer/query/update_comics.py +22 -12
  8. codex/librarian/scribe/importer/search/prepare.py +1 -1
  9. codex/librarian/scribe/importer/search/sync_m2m.py +28 -27
  10. codex/librarian/scribe/importer/search/update.py +27 -20
  11. codex/librarian/scribe/janitor/adopt_folders.py +2 -7
  12. codex/librarian/scribe/janitor/integrity.py +3 -8
  13. codex/librarian/scribe/lazy_importer.py +2 -6
  14. codex/librarian/scribe/search/optimize.py +4 -7
  15. codex/librarian/scribe/timestamp_update.py +2 -6
  16. codex/librarian/worker.py +27 -0
  17. codex/static_root/assets/{VCheckbox-MwE_xq11.b2e2086608d9.js → VCheckbox-BfVeJY8A.b8e4dee22b3c.js} +1 -1
  18. codex/static_root/assets/VCheckbox-BfVeJY8A.b8e4dee22b3c.js.br +0 -0
  19. codex/static_root/assets/VCheckbox-BfVeJY8A.b8e4dee22b3c.js.gz +0 -0
  20. codex/static_root/assets/{VCheckbox-MwE_xq11.js → VCheckbox-BfVeJY8A.js} +1 -1
  21. codex/static_root/assets/VCheckbox-BfVeJY8A.js.br +0 -0
  22. codex/static_root/assets/VCheckbox-BfVeJY8A.js.gz +0 -0
  23. codex/static_root/assets/{VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js → VCheckboxBtn-dotsoE0r.6b66667a9120.js} +1 -1
  24. codex/static_root/assets/VCheckboxBtn-dotsoE0r.6b66667a9120.js.br +0 -0
  25. codex/static_root/assets/VCheckboxBtn-dotsoE0r.6b66667a9120.js.gz +0 -0
  26. codex/static_root/assets/{VCheckboxBtn-HUjl2ti_.js → VCheckboxBtn-dotsoE0r.js} +1 -1
  27. codex/static_root/assets/VCheckboxBtn-dotsoE0r.js.br +0 -0
  28. codex/static_root/assets/VCheckboxBtn-dotsoE0r.js.gz +0 -0
  29. codex/static_root/assets/{VCombobox-C1Osy24P.73168f28d07b.js → VCombobox-D6t70eT1.a5c82ecd9544.js} +1 -1
  30. codex/static_root/assets/VCombobox-D6t70eT1.a5c82ecd9544.js.br +0 -0
  31. codex/static_root/assets/VCombobox-D6t70eT1.a5c82ecd9544.js.gz +0 -0
  32. codex/static_root/assets/{VCombobox-C1Osy24P.js → VCombobox-D6t70eT1.js} +1 -1
  33. codex/static_root/assets/VCombobox-D6t70eT1.js.br +0 -0
  34. codex/static_root/assets/VCombobox-D6t70eT1.js.gz +0 -0
  35. codex/static_root/assets/{VDialog-c2XXqNJH.a4156ca20133.js → VDialog-Bn_MNvQ-.d1ca39e120b8.js} +1 -1
  36. codex/static_root/assets/VDialog-Bn_MNvQ-.d1ca39e120b8.js.br +0 -0
  37. codex/static_root/assets/VDialog-Bn_MNvQ-.d1ca39e120b8.js.gz +0 -0
  38. codex/static_root/assets/{VDialog-c2XXqNJH.js → VDialog-Bn_MNvQ-.js} +1 -1
  39. codex/static_root/assets/VDialog-Bn_MNvQ-.js.br +0 -0
  40. codex/static_root/assets/VDialog-Bn_MNvQ-.js.gz +0 -0
  41. codex/static_root/assets/{VDivider-C06z3Tn-.d5e3ed421a68.js → VDivider-DOOd4a9s.b14fca685b97.js} +1 -1
  42. codex/static_root/assets/VDivider-DOOd4a9s.b14fca685b97.js.br +0 -0
  43. codex/static_root/assets/VDivider-DOOd4a9s.b14fca685b97.js.gz +0 -0
  44. codex/static_root/assets/{VDivider-C06z3Tn-.js → VDivider-DOOd4a9s.js} +1 -1
  45. codex/static_root/assets/VDivider-DOOd4a9s.js.br +0 -0
  46. codex/static_root/assets/VDivider-DOOd4a9s.js.gz +0 -0
  47. codex/static_root/assets/{VExpansionPanels-B8gzbonk.3532c6d08817.js → VExpansionPanels-Be8WWdca.f7f019bb8480.js} +1 -1
  48. codex/static_root/assets/VExpansionPanels-Be8WWdca.f7f019bb8480.js.br +0 -0
  49. codex/static_root/assets/VExpansionPanels-Be8WWdca.f7f019bb8480.js.gz +0 -0
  50. codex/static_root/assets/{VExpansionPanels-B8gzbonk.js → VExpansionPanels-Be8WWdca.js} +1 -1
  51. codex/static_root/assets/VExpansionPanels-Be8WWdca.js.br +0 -0
  52. codex/static_root/assets/VExpansionPanels-Be8WWdca.js.gz +0 -0
  53. codex/static_root/assets/{VForm-Chf0FU2x.3e8425bff3d0.js → VForm-BRei2Gn2.967e83055611.js} +1 -1
  54. codex/static_root/assets/VForm-BRei2Gn2.967e83055611.js.br +0 -0
  55. codex/static_root/assets/VForm-BRei2Gn2.967e83055611.js.gz +0 -0
  56. codex/static_root/assets/{VForm-Chf0FU2x.js → VForm-BRei2Gn2.js} +1 -1
  57. codex/static_root/assets/VForm-BRei2Gn2.js.br +0 -0
  58. codex/static_root/assets/VForm-BRei2Gn2.js.gz +0 -0
  59. codex/static_root/assets/{VRadioGroup-CHteIFqx.23cb51ee43e1.js → VRadioGroup-DVVCXDtV.79214c05c9a4.js} +1 -1
  60. codex/static_root/assets/VRadioGroup-DVVCXDtV.79214c05c9a4.js.br +0 -0
  61. codex/static_root/assets/VRadioGroup-DVVCXDtV.79214c05c9a4.js.gz +0 -0
  62. codex/static_root/assets/{VRadioGroup-CHteIFqx.js → VRadioGroup-DVVCXDtV.js} +1 -1
  63. codex/static_root/assets/VRadioGroup-DVVCXDtV.js.br +0 -0
  64. codex/static_root/assets/VRadioGroup-DVVCXDtV.js.gz +0 -0
  65. codex/static_root/assets/{VSelect-BqS1Prvd.js → VSelect-CJ_8hyFq.c3d39e72c0b5.js} +1 -1
  66. codex/static_root/assets/VSelect-CJ_8hyFq.c3d39e72c0b5.js.br +0 -0
  67. codex/static_root/assets/VSelect-CJ_8hyFq.c3d39e72c0b5.js.gz +0 -0
  68. codex/static_root/assets/{VSelect-BqS1Prvd.36bbebae4f0d.js → VSelect-CJ_8hyFq.js} +1 -1
  69. codex/static_root/assets/VSelect-CJ_8hyFq.js.br +0 -0
  70. codex/static_root/assets/VSelect-CJ_8hyFq.js.gz +0 -0
  71. codex/static_root/assets/{VSelectionControl-BRWozKsT.js → VSelectionControl-N_wsNRlD.1e50d58ecadb.js} +1 -1
  72. codex/static_root/assets/VSelectionControl-N_wsNRlD.1e50d58ecadb.js.br +0 -0
  73. codex/static_root/assets/VSelectionControl-N_wsNRlD.1e50d58ecadb.js.gz +0 -0
  74. codex/static_root/assets/{VSelectionControl-BRWozKsT.d10531c1a243.js → VSelectionControl-N_wsNRlD.js} +1 -1
  75. codex/static_root/assets/VSelectionControl-N_wsNRlD.js.br +0 -0
  76. codex/static_root/assets/VSelectionControl-N_wsNRlD.js.gz +0 -0
  77. codex/static_root/assets/{VTable-BT6w_ifJ.ee6b710fb398.js → VTable-YgXyPctG.b776e9689646.js} +1 -1
  78. codex/static_root/assets/VTable-YgXyPctG.b776e9689646.js.br +0 -0
  79. codex/static_root/assets/VTable-YgXyPctG.b776e9689646.js.gz +0 -0
  80. codex/static_root/assets/{VTable-BT6w_ifJ.js → VTable-YgXyPctG.js} +1 -1
  81. codex/static_root/assets/VTable-YgXyPctG.js.br +0 -0
  82. codex/static_root/assets/VTable-YgXyPctG.js.gz +0 -0
  83. codex/static_root/assets/{VWindowItem-sfdsG_YK.ee17f6723988.js → VWindowItem-BmpD4isF.61a906c1109e.js} +1 -1
  84. codex/static_root/assets/VWindowItem-BmpD4isF.61a906c1109e.js.br +0 -0
  85. codex/static_root/assets/VWindowItem-BmpD4isF.61a906c1109e.js.gz +0 -0
  86. codex/static_root/assets/{VWindowItem-sfdsG_YK.js → VWindowItem-BmpD4isF.js} +1 -1
  87. codex/static_root/assets/VWindowItem-BmpD4isF.js.br +0 -0
  88. codex/static_root/assets/VWindowItem-BmpD4isF.js.gz +0 -0
  89. codex/static_root/assets/{admin-pnPIiLQj.b791e7869cf5.js → admin-26AnWn-T.fe23350475b4.js} +1 -1
  90. codex/static_root/assets/admin-26AnWn-T.fe23350475b4.js.br +0 -0
  91. codex/static_root/assets/admin-26AnWn-T.fe23350475b4.js.gz +0 -0
  92. codex/static_root/assets/{admin-pnPIiLQj.js → admin-26AnWn-T.js} +1 -1
  93. codex/static_root/assets/admin-26AnWn-T.js.br +0 -0
  94. codex/static_root/assets/admin-26AnWn-T.js.gz +0 -0
  95. codex/static_root/assets/{admin-DuEKXO1g.5c6bfe166705.js → admin-BhRwDL_I.72c00e104cd2.js} +1 -1
  96. codex/static_root/assets/admin-BhRwDL_I.72c00e104cd2.js.br +0 -0
  97. codex/static_root/assets/admin-BhRwDL_I.72c00e104cd2.js.gz +0 -0
  98. codex/static_root/assets/{admin-DuEKXO1g.js → admin-BhRwDL_I.js} +1 -1
  99. codex/static_root/assets/admin-BhRwDL_I.js.br +0 -0
  100. codex/static_root/assets/admin-BhRwDL_I.js.gz +0 -0
  101. codex/static_root/assets/{admin-menu-DBce75Uy.be45a0a53c1a.js → admin-menu-42Q4jLGf.b87cc355497b.js} +1 -1
  102. codex/static_root/assets/admin-menu-42Q4jLGf.b87cc355497b.js.br +0 -0
  103. codex/static_root/assets/admin-menu-42Q4jLGf.b87cc355497b.js.gz +0 -0
  104. codex/static_root/assets/{admin-menu-DBce75Uy.js → admin-menu-42Q4jLGf.js} +1 -1
  105. codex/static_root/assets/admin-menu-42Q4jLGf.js.br +0 -0
  106. codex/static_root/assets/admin-menu-42Q4jLGf.js.gz +0 -0
  107. codex/static_root/assets/{admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js → admin-settings-button-progress-hYnDmn23.ffed6d808c68.js} +1 -1
  108. codex/static_root/assets/admin-settings-button-progress-hYnDmn23.ffed6d808c68.js.br +4 -0
  109. codex/static_root/assets/admin-settings-button-progress-hYnDmn23.ffed6d808c68.js.gz +0 -0
  110. codex/static_root/assets/{admin-settings-button-progress-C4VmW80I.js → admin-settings-button-progress-hYnDmn23.js} +1 -1
  111. codex/static_root/assets/admin-settings-button-progress-hYnDmn23.js.br +4 -0
  112. codex/static_root/assets/admin-settings-button-progress-hYnDmn23.js.gz +0 -0
  113. codex/static_root/assets/{browser-DOuRKBxy.js → browser-BiLF_XL8.d0ffb7b04624.js} +1 -1
  114. codex/static_root/assets/browser-BiLF_XL8.d0ffb7b04624.js.br +0 -0
  115. codex/static_root/assets/browser-BiLF_XL8.d0ffb7b04624.js.gz +0 -0
  116. codex/static_root/assets/{browser-DOuRKBxy.c9a72e4f9498.js → browser-BiLF_XL8.js} +1 -1
  117. codex/static_root/assets/browser-BiLF_XL8.js.br +0 -0
  118. codex/static_root/assets/browser-BiLF_XL8.js.gz +0 -0
  119. codex/static_root/assets/{browser-TRzEFz_k.css → browser-CS6VSg0_.9a6e8eda0520.css} +1 -1
  120. codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.br +0 -0
  121. codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.gz +0 -0
  122. codex/static_root/assets/{browser-TRzEFz_k.e8ae750c4a41.css → browser-CS6VSg0_.css} +1 -1
  123. codex/static_root/assets/browser-CS6VSg0_.css.br +0 -0
  124. codex/static_root/assets/browser-CS6VSg0_.css.gz +0 -0
  125. codex/static_root/assets/{change-password-dialog-B4tB0bVX.5b476ac6a873.js → change-password-dialog-Df28DwbL.7e3eb3fdb42a.js} +1 -1
  126. codex/static_root/assets/change-password-dialog-Df28DwbL.7e3eb3fdb42a.js.br +0 -0
  127. codex/static_root/assets/change-password-dialog-Df28DwbL.7e3eb3fdb42a.js.gz +0 -0
  128. codex/static_root/assets/{change-password-dialog-B4tB0bVX.js → change-password-dialog-Df28DwbL.js} +1 -1
  129. codex/static_root/assets/change-password-dialog-Df28DwbL.js.br +0 -0
  130. codex/static_root/assets/change-password-dialog-Df28DwbL.js.gz +0 -0
  131. codex/static_root/assets/{confirm-dialog-C0DHEcnB.e2d9968f6fea.js → confirm-dialog-DgKUUL0b.bd6e76fa370e.js} +1 -1
  132. codex/static_root/assets/confirm-dialog-DgKUUL0b.bd6e76fa370e.js.br +0 -0
  133. codex/static_root/assets/confirm-dialog-DgKUUL0b.bd6e76fa370e.js.gz +0 -0
  134. codex/static_root/assets/{confirm-dialog-C0DHEcnB.js → confirm-dialog-DgKUUL0b.js} +1 -1
  135. codex/static_root/assets/confirm-dialog-DgKUUL0b.js.br +0 -0
  136. codex/static_root/assets/confirm-dialog-DgKUUL0b.js.gz +0 -0
  137. codex/static_root/assets/{datetime-column-j_CRGEuQ.cc499deb52f7.js → datetime-column-jb1Y13cY.f98386c3c6cf.js} +1 -1
  138. codex/static_root/assets/datetime-column-jb1Y13cY.f98386c3c6cf.js.br +0 -0
  139. codex/static_root/assets/datetime-column-jb1Y13cY.f98386c3c6cf.js.gz +0 -0
  140. codex/static_root/assets/{datetime-column-j_CRGEuQ.js → datetime-column-jb1Y13cY.js} +1 -1
  141. codex/static_root/assets/datetime-column-jb1Y13cY.js.br +0 -0
  142. codex/static_root/assets/datetime-column-jb1Y13cY.js.gz +0 -0
  143. codex/static_root/assets/{filter-Baea_DNH.985ef541d6af.js → filter-DU947LwF.64baedae8854.js} +1 -1
  144. codex/static_root/assets/filter-DU947LwF.64baedae8854.js.br +0 -0
  145. codex/static_root/assets/filter-DU947LwF.64baedae8854.js.gz +0 -0
  146. codex/static_root/assets/{filter-Baea_DNH.js → filter-DU947LwF.js} +1 -1
  147. codex/static_root/assets/filter-DU947LwF.js.br +0 -0
  148. codex/static_root/assets/filter-DU947LwF.js.gz +0 -0
  149. codex/static_root/assets/{flag-tab-DefdNLmr.0cf5a73c1c8c.js → flag-tab-BTT0536t.4219f4036821.js} +1 -1
  150. codex/static_root/assets/flag-tab-BTT0536t.4219f4036821.js.br +0 -0
  151. codex/static_root/assets/flag-tab-BTT0536t.4219f4036821.js.gz +0 -0
  152. codex/static_root/assets/{flag-tab-DefdNLmr.js → flag-tab-BTT0536t.js} +1 -1
  153. codex/static_root/assets/flag-tab-BTT0536t.js.br +0 -0
  154. codex/static_root/assets/flag-tab-BTT0536t.js.gz +0 -0
  155. codex/static_root/assets/{forwardRefs-Bvy6478W.js → forwardRefs-BGAZ1bvO.676c1aac262e.js} +1 -1
  156. codex/static_root/assets/forwardRefs-BGAZ1bvO.676c1aac262e.js.br +0 -0
  157. codex/static_root/assets/forwardRefs-BGAZ1bvO.676c1aac262e.js.gz +0 -0
  158. codex/static_root/assets/{forwardRefs-Bvy6478W.409df679a82f.js → forwardRefs-BGAZ1bvO.js} +1 -1
  159. codex/static_root/assets/forwardRefs-BGAZ1bvO.js.br +0 -0
  160. codex/static_root/assets/forwardRefs-BGAZ1bvO.js.gz +0 -0
  161. codex/static_root/assets/{group-tab-C71MBY7x.483482eaaf8c.js → group-tab-BP-SEY6G.0cb4e211f69e.js} +1 -1
  162. codex/static_root/assets/group-tab-BP-SEY6G.0cb4e211f69e.js.br +0 -0
  163. codex/static_root/assets/group-tab-BP-SEY6G.0cb4e211f69e.js.gz +0 -0
  164. codex/static_root/assets/{group-tab-C71MBY7x.js → group-tab-BP-SEY6G.js} +1 -1
  165. codex/static_root/assets/group-tab-BP-SEY6G.js.br +0 -0
  166. codex/static_root/assets/group-tab-BP-SEY6G.js.gz +0 -0
  167. codex/static_root/assets/{http-error-mPrHO762.70c41cde5ee1.js → http-error-1DNqtVPW.968aac8be867.js} +1 -1
  168. codex/static_root/assets/http-error-1DNqtVPW.968aac8be867.js.br +0 -0
  169. codex/static_root/assets/http-error-1DNqtVPW.968aac8be867.js.gz +0 -0
  170. codex/static_root/assets/{http-error-mPrHO762.js → http-error-1DNqtVPW.js} +1 -1
  171. codex/static_root/assets/http-error-1DNqtVPW.js.br +0 -0
  172. codex/static_root/assets/http-error-1DNqtVPW.js.gz +0 -0
  173. codex/static_root/assets/{index-Bxqss4CY.5f797cedb404.js → index-Cm9w_Tog.a1b4683f2e1d.js} +1 -1
  174. codex/static_root/assets/index-Cm9w_Tog.a1b4683f2e1d.js.br +0 -0
  175. codex/static_root/assets/index-Cm9w_Tog.a1b4683f2e1d.js.gz +0 -0
  176. codex/static_root/assets/{index-Bxqss4CY.js → index-Cm9w_Tog.js} +1 -1
  177. codex/static_root/assets/index-Cm9w_Tog.js.br +0 -0
  178. codex/static_root/assets/index-Cm9w_Tog.js.gz +0 -0
  179. codex/static_root/assets/{library-tab-DG2bhQ_A.e831e11418e2.js → library-tab-C6FTaygv.b5c79b97a5a3.js} +1 -1
  180. codex/static_root/assets/library-tab-C6FTaygv.b5c79b97a5a3.js.br +0 -0
  181. codex/static_root/assets/library-tab-C6FTaygv.b5c79b97a5a3.js.gz +0 -0
  182. codex/static_root/assets/{library-tab-DG2bhQ_A.js → library-tab-C6FTaygv.js} +1 -1
  183. codex/static_root/assets/library-tab-C6FTaygv.js.br +0 -0
  184. codex/static_root/assets/library-tab-C6FTaygv.js.gz +0 -0
  185. codex/static_root/assets/{main-RxUHaWll.d7d671319f8d.js → main-CTlarBH9.047e388380e4.js} +3 -3
  186. codex/static_root/assets/main-CTlarBH9.047e388380e4.js.br +0 -0
  187. codex/static_root/assets/main-CTlarBH9.047e388380e4.js.gz +0 -0
  188. codex/static_root/assets/{main-RxUHaWll.js → main-CTlarBH9.js} +3 -3
  189. codex/static_root/assets/main-CTlarBH9.js.br +0 -0
  190. codex/static_root/assets/main-CTlarBH9.js.gz +0 -0
  191. codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js +1 -0
  192. codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js.br +0 -0
  193. codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js.gz +0 -0
  194. codex/static_root/assets/pager-full-pdf-BRkb6G_B.js +1 -0
  195. codex/static_root/assets/pager-full-pdf-BRkb6G_B.js.br +0 -0
  196. codex/static_root/assets/pager-full-pdf-BRkb6G_B.js.gz +0 -0
  197. codex/static_root/assets/{pagination-toolbar-ChW-jj1Q.js → pagination-toolbar-U9PS3jI7.27a94126052e.js} +1 -1
  198. codex/static_root/assets/pagination-toolbar-U9PS3jI7.27a94126052e.js.br +0 -0
  199. codex/static_root/assets/pagination-toolbar-U9PS3jI7.27a94126052e.js.gz +0 -0
  200. codex/static_root/assets/{pagination-toolbar-ChW-jj1Q.0cf6985b630e.js → pagination-toolbar-U9PS3jI7.js} +1 -1
  201. codex/static_root/assets/pagination-toolbar-U9PS3jI7.js.br +0 -0
  202. codex/static_root/assets/pagination-toolbar-U9PS3jI7.js.gz +0 -0
  203. codex/static_root/assets/{pdf-doc-CfiAAYT8.c4fb1945d1c5.js → pdf-doc-CMzddyqW.5ef7eef50756.js} +1 -1
  204. codex/static_root/assets/pdf-doc-CMzddyqW.5ef7eef50756.js.br +0 -0
  205. codex/static_root/assets/{pdf-doc-CfiAAYT8.c4fb1945d1c5.js.gz → pdf-doc-CMzddyqW.5ef7eef50756.js.gz} +0 -0
  206. codex/static_root/assets/{pdf-doc-CfiAAYT8.js → pdf-doc-CMzddyqW.js} +1 -1
  207. codex/static_root/assets/pdf-doc-CMzddyqW.js.br +0 -0
  208. codex/static_root/assets/{pdf-doc-CfiAAYT8.js.gz → pdf-doc-CMzddyqW.js.gz} +0 -0
  209. codex/static_root/assets/{reader-BNwsMjad.js → reader-DFkGB8xM.ba0585d918b5.js} +2 -2
  210. codex/static_root/assets/reader-DFkGB8xM.ba0585d918b5.js.br +0 -0
  211. codex/static_root/assets/reader-DFkGB8xM.ba0585d918b5.js.gz +0 -0
  212. codex/static_root/assets/{reader-BNwsMjad.78e4ad034141.js → reader-DFkGB8xM.js} +2 -2
  213. codex/static_root/assets/reader-DFkGB8xM.js.br +0 -0
  214. codex/static_root/assets/reader-DFkGB8xM.js.gz +0 -0
  215. codex/static_root/assets/{relation-chips-Cfk3FVE5.eadbc380a353.js → relation-chips-32lE_odZ.7cc1620d4c97.js} +1 -1
  216. codex/static_root/assets/relation-chips-32lE_odZ.7cc1620d4c97.js.br +0 -0
  217. codex/static_root/assets/relation-chips-32lE_odZ.7cc1620d4c97.js.gz +0 -0
  218. codex/static_root/assets/{relation-chips-Cfk3FVE5.js → relation-chips-32lE_odZ.js} +1 -1
  219. codex/static_root/assets/relation-chips-32lE_odZ.js.br +0 -0
  220. codex/static_root/assets/relation-chips-32lE_odZ.js.gz +0 -0
  221. codex/static_root/assets/{settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js → settings-drawer-BaTLfqbD.8693ca4de517.js} +2 -2
  222. codex/static_root/assets/settings-drawer-BaTLfqbD.8693ca4de517.js.br +0 -0
  223. codex/static_root/assets/settings-drawer-BaTLfqbD.8693ca4de517.js.gz +0 -0
  224. codex/static_root/assets/{settings-drawer-BvHMmEFL.js → settings-drawer-BaTLfqbD.js} +2 -2
  225. codex/static_root/assets/settings-drawer-BaTLfqbD.js.br +0 -0
  226. codex/static_root/assets/settings-drawer-BaTLfqbD.js.gz +0 -0
  227. codex/static_root/assets/{ssrBoot-BBuVfjys.ee6df7695a63.js → ssrBoot-CjQLVcFD.0db2c2fe9b66.js} +1 -1
  228. codex/static_root/assets/ssrBoot-CjQLVcFD.0db2c2fe9b66.js.br +0 -0
  229. codex/static_root/assets/ssrBoot-CjQLVcFD.0db2c2fe9b66.js.gz +0 -0
  230. codex/static_root/assets/{ssrBoot-BBuVfjys.js → ssrBoot-CjQLVcFD.js} +1 -1
  231. codex/static_root/assets/ssrBoot-CjQLVcFD.js.br +0 -0
  232. codex/static_root/assets/ssrBoot-CjQLVcFD.js.gz +0 -0
  233. codex/static_root/assets/{stats-tab-BW725H_T.61e34db4cc39.js → stats-tab-WD67DkuY.4cd13274173f.js} +1 -1
  234. codex/static_root/assets/stats-tab-WD67DkuY.4cd13274173f.js.br +0 -0
  235. codex/static_root/assets/stats-tab-WD67DkuY.4cd13274173f.js.gz +0 -0
  236. codex/static_root/assets/{stats-tab-BW725H_T.js → stats-tab-WD67DkuY.js} +1 -1
  237. codex/static_root/assets/stats-tab-WD67DkuY.js.br +0 -0
  238. codex/static_root/assets/stats-tab-WD67DkuY.js.gz +0 -0
  239. codex/static_root/assets/{task-tab-P3x-M3d5.59e0479f2f1e.js → task-tab-CHOLNUJh.bbf1c7a95058.js} +1 -1
  240. codex/static_root/assets/task-tab-CHOLNUJh.bbf1c7a95058.js.br +0 -0
  241. codex/static_root/assets/task-tab-CHOLNUJh.bbf1c7a95058.js.gz +0 -0
  242. codex/static_root/assets/{task-tab-P3x-M3d5.js → task-tab-CHOLNUJh.js} +1 -1
  243. codex/static_root/assets/task-tab-CHOLNUJh.js.br +0 -0
  244. codex/static_root/assets/task-tab-CHOLNUJh.js.gz +0 -0
  245. codex/static_root/assets/{unauthorized-CC6sHmUB.394dffd78457.js → unauthorized-BsEyzLQ2.e54a69cff5c6.js} +1 -1
  246. codex/static_root/assets/unauthorized-BsEyzLQ2.e54a69cff5c6.js.br +0 -0
  247. codex/static_root/assets/unauthorized-BsEyzLQ2.e54a69cff5c6.js.gz +0 -0
  248. codex/static_root/assets/{unauthorized-CC6sHmUB.js → unauthorized-BsEyzLQ2.js} +1 -1
  249. codex/static_root/assets/unauthorized-BsEyzLQ2.js.br +0 -0
  250. codex/static_root/assets/unauthorized-BsEyzLQ2.js.gz +0 -0
  251. codex/static_root/assets/{user-tab-OaDKeq2f.ac3d682c35f1.js → user-tab-CbNhbZzZ.af38f932a795.js} +1 -1
  252. codex/static_root/assets/user-tab-CbNhbZzZ.af38f932a795.js.br +0 -0
  253. codex/static_root/assets/user-tab-CbNhbZzZ.af38f932a795.js.gz +0 -0
  254. codex/static_root/assets/{user-tab-OaDKeq2f.js → user-tab-CbNhbZzZ.js} +1 -1
  255. codex/static_root/assets/user-tab-CbNhbZzZ.js.br +0 -0
  256. codex/static_root/assets/user-tab-CbNhbZzZ.js.gz +0 -0
  257. codex/static_root/{manifest.d51267c3637d.json → manifest.39fe502cd3a2.json} +296 -296
  258. codex/static_root/manifest.39fe502cd3a2.json.br +0 -0
  259. codex/static_root/manifest.39fe502cd3a2.json.gz +0 -0
  260. codex/static_root/manifest.json +296 -296
  261. codex/static_root/manifest.json.br +0 -0
  262. codex/static_root/manifest.json.gz +0 -0
  263. codex/static_root/staticfiles.json +1 -1
  264. {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/METADATA +1 -1
  265. {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/RECORD +268 -268
  266. codex/static_root/assets/VCheckbox-MwE_xq11.b2e2086608d9.js.br +0 -0
  267. codex/static_root/assets/VCheckbox-MwE_xq11.b2e2086608d9.js.gz +0 -0
  268. codex/static_root/assets/VCheckbox-MwE_xq11.js.br +0 -0
  269. codex/static_root/assets/VCheckbox-MwE_xq11.js.gz +0 -0
  270. codex/static_root/assets/VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js.br +0 -0
  271. codex/static_root/assets/VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js.gz +0 -0
  272. codex/static_root/assets/VCheckboxBtn-HUjl2ti_.js.br +0 -0
  273. codex/static_root/assets/VCheckboxBtn-HUjl2ti_.js.gz +0 -0
  274. codex/static_root/assets/VCombobox-C1Osy24P.73168f28d07b.js.br +0 -0
  275. codex/static_root/assets/VCombobox-C1Osy24P.73168f28d07b.js.gz +0 -0
  276. codex/static_root/assets/VCombobox-C1Osy24P.js.br +0 -0
  277. codex/static_root/assets/VCombobox-C1Osy24P.js.gz +0 -0
  278. codex/static_root/assets/VDialog-c2XXqNJH.a4156ca20133.js.br +0 -0
  279. codex/static_root/assets/VDialog-c2XXqNJH.a4156ca20133.js.gz +0 -0
  280. codex/static_root/assets/VDialog-c2XXqNJH.js.br +0 -0
  281. codex/static_root/assets/VDialog-c2XXqNJH.js.gz +0 -0
  282. codex/static_root/assets/VDivider-C06z3Tn-.d5e3ed421a68.js.br +0 -0
  283. codex/static_root/assets/VDivider-C06z3Tn-.d5e3ed421a68.js.gz +0 -0
  284. codex/static_root/assets/VDivider-C06z3Tn-.js.br +0 -0
  285. codex/static_root/assets/VDivider-C06z3Tn-.js.gz +0 -0
  286. codex/static_root/assets/VExpansionPanels-B8gzbonk.3532c6d08817.js.br +0 -0
  287. codex/static_root/assets/VExpansionPanels-B8gzbonk.3532c6d08817.js.gz +0 -0
  288. codex/static_root/assets/VExpansionPanels-B8gzbonk.js.br +0 -0
  289. codex/static_root/assets/VExpansionPanels-B8gzbonk.js.gz +0 -0
  290. codex/static_root/assets/VForm-Chf0FU2x.3e8425bff3d0.js.br +0 -0
  291. codex/static_root/assets/VForm-Chf0FU2x.3e8425bff3d0.js.gz +0 -0
  292. codex/static_root/assets/VForm-Chf0FU2x.js.br +0 -0
  293. codex/static_root/assets/VForm-Chf0FU2x.js.gz +0 -0
  294. codex/static_root/assets/VRadioGroup-CHteIFqx.23cb51ee43e1.js.br +0 -0
  295. codex/static_root/assets/VRadioGroup-CHteIFqx.23cb51ee43e1.js.gz +0 -0
  296. codex/static_root/assets/VRadioGroup-CHteIFqx.js.br +0 -0
  297. codex/static_root/assets/VRadioGroup-CHteIFqx.js.gz +0 -0
  298. codex/static_root/assets/VSelect-BqS1Prvd.36bbebae4f0d.js.br +0 -0
  299. codex/static_root/assets/VSelect-BqS1Prvd.36bbebae4f0d.js.gz +0 -0
  300. codex/static_root/assets/VSelect-BqS1Prvd.js.br +0 -0
  301. codex/static_root/assets/VSelect-BqS1Prvd.js.gz +0 -0
  302. codex/static_root/assets/VSelectionControl-BRWozKsT.d10531c1a243.js.br +0 -0
  303. codex/static_root/assets/VSelectionControl-BRWozKsT.d10531c1a243.js.gz +0 -0
  304. codex/static_root/assets/VSelectionControl-BRWozKsT.js.br +0 -0
  305. codex/static_root/assets/VSelectionControl-BRWozKsT.js.gz +0 -0
  306. codex/static_root/assets/VTable-BT6w_ifJ.ee6b710fb398.js.br +0 -0
  307. codex/static_root/assets/VTable-BT6w_ifJ.ee6b710fb398.js.gz +0 -0
  308. codex/static_root/assets/VTable-BT6w_ifJ.js.br +0 -0
  309. codex/static_root/assets/VTable-BT6w_ifJ.js.gz +0 -0
  310. codex/static_root/assets/VWindowItem-sfdsG_YK.ee17f6723988.js.br +0 -0
  311. codex/static_root/assets/VWindowItem-sfdsG_YK.ee17f6723988.js.gz +0 -0
  312. codex/static_root/assets/VWindowItem-sfdsG_YK.js.br +0 -0
  313. codex/static_root/assets/VWindowItem-sfdsG_YK.js.gz +0 -0
  314. codex/static_root/assets/admin-DuEKXO1g.5c6bfe166705.js.br +0 -0
  315. codex/static_root/assets/admin-DuEKXO1g.5c6bfe166705.js.gz +0 -0
  316. codex/static_root/assets/admin-DuEKXO1g.js.br +0 -0
  317. codex/static_root/assets/admin-DuEKXO1g.js.gz +0 -0
  318. codex/static_root/assets/admin-menu-DBce75Uy.be45a0a53c1a.js.br +0 -0
  319. codex/static_root/assets/admin-menu-DBce75Uy.be45a0a53c1a.js.gz +0 -0
  320. codex/static_root/assets/admin-menu-DBce75Uy.js.br +0 -0
  321. codex/static_root/assets/admin-menu-DBce75Uy.js.gz +0 -0
  322. codex/static_root/assets/admin-pnPIiLQj.b791e7869cf5.js.br +0 -0
  323. codex/static_root/assets/admin-pnPIiLQj.b791e7869cf5.js.gz +0 -0
  324. codex/static_root/assets/admin-pnPIiLQj.js.br +0 -0
  325. codex/static_root/assets/admin-pnPIiLQj.js.gz +0 -0
  326. codex/static_root/assets/admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js.br +0 -0
  327. codex/static_root/assets/admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js.gz +0 -0
  328. codex/static_root/assets/admin-settings-button-progress-C4VmW80I.js.br +0 -0
  329. codex/static_root/assets/admin-settings-button-progress-C4VmW80I.js.gz +0 -0
  330. codex/static_root/assets/browser-DOuRKBxy.c9a72e4f9498.js.br +0 -0
  331. codex/static_root/assets/browser-DOuRKBxy.c9a72e4f9498.js.gz +0 -0
  332. codex/static_root/assets/browser-DOuRKBxy.js.br +0 -0
  333. codex/static_root/assets/browser-DOuRKBxy.js.gz +0 -0
  334. codex/static_root/assets/browser-TRzEFz_k.css.br +0 -0
  335. codex/static_root/assets/browser-TRzEFz_k.css.gz +0 -0
  336. codex/static_root/assets/browser-TRzEFz_k.e8ae750c4a41.css.br +0 -0
  337. codex/static_root/assets/browser-TRzEFz_k.e8ae750c4a41.css.gz +0 -0
  338. codex/static_root/assets/change-password-dialog-B4tB0bVX.5b476ac6a873.js.br +0 -0
  339. codex/static_root/assets/change-password-dialog-B4tB0bVX.5b476ac6a873.js.gz +0 -0
  340. codex/static_root/assets/change-password-dialog-B4tB0bVX.js.br +0 -0
  341. codex/static_root/assets/change-password-dialog-B4tB0bVX.js.gz +0 -0
  342. codex/static_root/assets/confirm-dialog-C0DHEcnB.e2d9968f6fea.js.br +0 -0
  343. codex/static_root/assets/confirm-dialog-C0DHEcnB.e2d9968f6fea.js.gz +0 -0
  344. codex/static_root/assets/confirm-dialog-C0DHEcnB.js.br +0 -0
  345. codex/static_root/assets/confirm-dialog-C0DHEcnB.js.gz +0 -0
  346. codex/static_root/assets/datetime-column-j_CRGEuQ.cc499deb52f7.js.br +0 -4
  347. codex/static_root/assets/datetime-column-j_CRGEuQ.cc499deb52f7.js.gz +0 -0
  348. codex/static_root/assets/datetime-column-j_CRGEuQ.js.br +0 -4
  349. codex/static_root/assets/datetime-column-j_CRGEuQ.js.gz +0 -0
  350. codex/static_root/assets/filter-Baea_DNH.985ef541d6af.js.br +0 -0
  351. codex/static_root/assets/filter-Baea_DNH.985ef541d6af.js.gz +0 -0
  352. codex/static_root/assets/filter-Baea_DNH.js.br +0 -0
  353. codex/static_root/assets/filter-Baea_DNH.js.gz +0 -0
  354. codex/static_root/assets/flag-tab-DefdNLmr.0cf5a73c1c8c.js.br +0 -0
  355. codex/static_root/assets/flag-tab-DefdNLmr.0cf5a73c1c8c.js.gz +0 -0
  356. codex/static_root/assets/flag-tab-DefdNLmr.js.br +0 -0
  357. codex/static_root/assets/flag-tab-DefdNLmr.js.gz +0 -0
  358. codex/static_root/assets/forwardRefs-Bvy6478W.409df679a82f.js.br +0 -0
  359. codex/static_root/assets/forwardRefs-Bvy6478W.409df679a82f.js.gz +0 -0
  360. codex/static_root/assets/forwardRefs-Bvy6478W.js.br +0 -0
  361. codex/static_root/assets/forwardRefs-Bvy6478W.js.gz +0 -0
  362. codex/static_root/assets/group-tab-C71MBY7x.483482eaaf8c.js.br +0 -0
  363. codex/static_root/assets/group-tab-C71MBY7x.483482eaaf8c.js.gz +0 -0
  364. codex/static_root/assets/group-tab-C71MBY7x.js.br +0 -0
  365. codex/static_root/assets/group-tab-C71MBY7x.js.gz +0 -0
  366. codex/static_root/assets/http-error-mPrHO762.70c41cde5ee1.js.br +0 -0
  367. codex/static_root/assets/http-error-mPrHO762.70c41cde5ee1.js.gz +0 -0
  368. codex/static_root/assets/http-error-mPrHO762.js.br +0 -0
  369. codex/static_root/assets/http-error-mPrHO762.js.gz +0 -0
  370. codex/static_root/assets/index-Bxqss4CY.5f797cedb404.js.br +0 -0
  371. codex/static_root/assets/index-Bxqss4CY.5f797cedb404.js.gz +0 -0
  372. codex/static_root/assets/index-Bxqss4CY.js.br +0 -0
  373. codex/static_root/assets/index-Bxqss4CY.js.gz +0 -0
  374. codex/static_root/assets/library-tab-DG2bhQ_A.e831e11418e2.js.br +0 -0
  375. codex/static_root/assets/library-tab-DG2bhQ_A.e831e11418e2.js.gz +0 -0
  376. codex/static_root/assets/library-tab-DG2bhQ_A.js.br +0 -0
  377. codex/static_root/assets/library-tab-DG2bhQ_A.js.gz +0 -0
  378. codex/static_root/assets/main-RxUHaWll.d7d671319f8d.js.br +0 -0
  379. codex/static_root/assets/main-RxUHaWll.d7d671319f8d.js.gz +0 -0
  380. codex/static_root/assets/main-RxUHaWll.js.br +0 -0
  381. codex/static_root/assets/main-RxUHaWll.js.gz +0 -0
  382. codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js +0 -1
  383. codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js.br +0 -0
  384. codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js.gz +0 -0
  385. codex/static_root/assets/pager-full-pdf-DYbA0-qc.js +0 -1
  386. codex/static_root/assets/pager-full-pdf-DYbA0-qc.js.br +0 -0
  387. codex/static_root/assets/pager-full-pdf-DYbA0-qc.js.gz +0 -0
  388. codex/static_root/assets/pagination-toolbar-ChW-jj1Q.0cf6985b630e.js.br +0 -0
  389. codex/static_root/assets/pagination-toolbar-ChW-jj1Q.0cf6985b630e.js.gz +0 -0
  390. codex/static_root/assets/pagination-toolbar-ChW-jj1Q.js.br +0 -0
  391. codex/static_root/assets/pagination-toolbar-ChW-jj1Q.js.gz +0 -0
  392. codex/static_root/assets/pdf-doc-CfiAAYT8.c4fb1945d1c5.js.br +0 -0
  393. codex/static_root/assets/pdf-doc-CfiAAYT8.js.br +0 -0
  394. codex/static_root/assets/reader-BNwsMjad.78e4ad034141.js.br +0 -0
  395. codex/static_root/assets/reader-BNwsMjad.78e4ad034141.js.gz +0 -0
  396. codex/static_root/assets/reader-BNwsMjad.js.br +0 -0
  397. codex/static_root/assets/reader-BNwsMjad.js.gz +0 -0
  398. codex/static_root/assets/relation-chips-Cfk3FVE5.eadbc380a353.js.br +0 -0
  399. codex/static_root/assets/relation-chips-Cfk3FVE5.eadbc380a353.js.gz +0 -0
  400. codex/static_root/assets/relation-chips-Cfk3FVE5.js.br +0 -0
  401. codex/static_root/assets/relation-chips-Cfk3FVE5.js.gz +0 -0
  402. codex/static_root/assets/settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js.br +0 -0
  403. codex/static_root/assets/settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js.gz +0 -0
  404. codex/static_root/assets/settings-drawer-BvHMmEFL.js.br +0 -0
  405. codex/static_root/assets/settings-drawer-BvHMmEFL.js.gz +0 -0
  406. codex/static_root/assets/ssrBoot-BBuVfjys.ee6df7695a63.js.br +0 -0
  407. codex/static_root/assets/ssrBoot-BBuVfjys.ee6df7695a63.js.gz +0 -0
  408. codex/static_root/assets/ssrBoot-BBuVfjys.js.br +0 -0
  409. codex/static_root/assets/ssrBoot-BBuVfjys.js.gz +0 -0
  410. codex/static_root/assets/stats-tab-BW725H_T.61e34db4cc39.js.br +0 -0
  411. codex/static_root/assets/stats-tab-BW725H_T.61e34db4cc39.js.gz +0 -0
  412. codex/static_root/assets/stats-tab-BW725H_T.js.br +0 -0
  413. codex/static_root/assets/stats-tab-BW725H_T.js.gz +0 -0
  414. codex/static_root/assets/task-tab-P3x-M3d5.59e0479f2f1e.js.br +0 -0
  415. codex/static_root/assets/task-tab-P3x-M3d5.59e0479f2f1e.js.gz +0 -0
  416. codex/static_root/assets/task-tab-P3x-M3d5.js.br +0 -0
  417. codex/static_root/assets/task-tab-P3x-M3d5.js.gz +0 -0
  418. codex/static_root/assets/unauthorized-CC6sHmUB.394dffd78457.js.br +0 -0
  419. codex/static_root/assets/unauthorized-CC6sHmUB.394dffd78457.js.gz +0 -0
  420. codex/static_root/assets/unauthorized-CC6sHmUB.js.br +0 -0
  421. codex/static_root/assets/unauthorized-CC6sHmUB.js.gz +0 -0
  422. codex/static_root/assets/user-tab-OaDKeq2f.ac3d682c35f1.js.br +0 -0
  423. codex/static_root/assets/user-tab-OaDKeq2f.ac3d682c35f1.js.gz +0 -0
  424. codex/static_root/assets/user-tab-OaDKeq2f.js.br +0 -0
  425. codex/static_root/assets/user-tab-OaDKeq2f.js.gz +0 -0
  426. codex/static_root/manifest.d51267c3637d.json.br +0 -0
  427. codex/static_root/manifest.d51267c3637d.json.gz +0 -0
  428. {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/WHEEL +0 -0
  429. {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/entry_points.txt +0 -0
  430. {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/licenses/LICENSE +0 -0
@@ -8,7 +8,7 @@ from django.utils import timezone
8
8
 
9
9
  from codex.librarian.scribe.janitor.status import JanitorCodexLatestVersionStatus
10
10
  from codex.librarian.scribe.janitor.tasks import JanitorCodexUpdateTask
11
- from codex.librarian.worker import WorkerStatusMixin
11
+ from codex.librarian.worker import WorkerStatusBase
12
12
  from codex.models import Timestamp
13
13
  from codex.version import PACKAGE_NAME
14
14
 
@@ -18,7 +18,7 @@ _CACHE_EXPIRY = timedelta(days=1) - timedelta(minutes=5)
18
18
  _REPO_TIMEOUT = 5
19
19
 
20
20
 
21
- class CodexLatestVersionUpdater(WorkerStatusMixin):
21
+ class CodexLatestVersionUpdater(WorkerStatusBase):
22
22
  """Methods for fetching the latest version."""
23
23
 
24
24
  @staticmethod
@@ -59,7 +59,3 @@ class CodexLatestVersionUpdater(WorkerStatusMixin):
59
59
  self.log.log(level, log_txt)
60
60
  finally:
61
61
  self.status_controller.finish(status)
62
-
63
- def __init__(self, *args, **kwargs):
64
- """Init Worker."""
65
- self.init_worker(*args, **kwargs)
@@ -10,9 +10,11 @@ from aioprocessing.queues import AioQueue
10
10
  from caseconverter import snakecase
11
11
  from typing_extensions import override
12
12
 
13
- from codex.librarian.bookmark.bookmarkd import BookmarkThread
13
+ from codex.librarian.bookmark.bookmarkd import BookmarkThread # typos: ignore
14
14
  from codex.librarian.bookmark.tasks import BookmarkTask
15
- from codex.librarian.covers.coverd import CoverThread
15
+ from codex.librarian.covers.coverd import ( # codespell:ignore coverd, typos: ignore
16
+ CoverThread,
17
+ )
16
18
  from codex.librarian.covers.tasks import CoverTask
17
19
  from codex.librarian.cron.crond import CronThread
18
20
  from codex.librarian.notifier.notifierd import NotifierThread
@@ -95,7 +97,7 @@ class LibrarianDaemon(Process):
95
97
  case WakeCronTask():
96
98
  self._threads.cron_thread.end_timeout()
97
99
  case CodexRestarterTask():
98
- restarter = CodexRestarter(self.log, self.queue)
100
+ restarter = CodexRestarter(self.log, self.queue, None)
99
101
  restarter.handle_task(task)
100
102
  case LibrarianShutdownTask():
101
103
  self.log.info(f"Shutting down {self.name}...")
@@ -13,10 +13,10 @@ from codex.librarian.restarter.tasks import (
13
13
  )
14
14
  from codex.librarian.status import Status
15
15
  from codex.librarian.tasks import LibrarianShutdownTask
16
- from codex.librarian.worker import WorkerStatusMixin
16
+ from codex.librarian.worker import WorkerStatusBase
17
17
 
18
18
 
19
- class CodexRestarter(WorkerStatusMixin):
19
+ class CodexRestarter(WorkerStatusBase):
20
20
  """Codex restarter."""
21
21
 
22
22
  def _shutdown_codex(self, status, name, sig):
@@ -49,7 +49,3 @@ class CodexRestarter(WorkerStatusMixin):
49
49
  self.shutdown_codex()
50
50
  case _:
51
51
  self.log.warning(f"Unknown Codex RestarterTask: f{task}")
52
-
53
- def __init__(self, *args, **kwargs):
54
- """Init worker."""
55
- self.init_worker(*args, **kwargs)
@@ -1,4 +1,4 @@
1
- """Initiale Importer."""
1
+ """Initialize Importer."""
2
2
 
3
3
  from dataclasses import asdict, dataclass
4
4
  from multiprocessing.queues import Queue
@@ -47,7 +47,7 @@ from codex.librarian.scribe.importer.statii.search import (
47
47
  from codex.librarian.scribe.importer.tasks import ImportTask
48
48
  from codex.librarian.scribe.search.status import SearchIndexCleanStatus
49
49
  from codex.librarian.scribe.status import UpdateGroupTimestampsStatus
50
- from codex.librarian.worker import WorkerStatusMixin
50
+ from codex.librarian.worker import WorkerStatusBase
51
51
  from codex.models import Library
52
52
  from codex.settings import LOGLEVEL
53
53
 
@@ -94,14 +94,14 @@ class Counts:
94
94
  )
95
95
 
96
96
 
97
- class InitImporter(WorkerStatusMixin):
97
+ class InitImporter(WorkerStatusBase):
98
98
  """Initial Importer."""
99
99
 
100
100
  def __init__(
101
101
  self, task: ImportTask, logger_, librarian_queue: Queue, db_write_lock, event
102
102
  ):
103
103
  """Initialize the import."""
104
- self.init_worker(logger_, librarian_queue, db_write_lock)
104
+ super().__init__(logger_, librarian_queue, db_write_lock)
105
105
  self.task: ImportTask = task
106
106
  self.metadata: dict[str, Any] = {}
107
107
  self.counts = Counts()
@@ -84,5 +84,7 @@ class LinkManyToManyImporter(LinkSumImporter):
84
84
  except Exception:
85
85
  self.log.exception(f"Error recreating m2m field: {field_name}")
86
86
  finally:
87
+ self.metadata.pop(LINK_M2MS, None)
88
+ self.metadata.pop(DELETE_M2MS, None)
87
89
  self.status_controller.finish(status)
88
90
  return created_total + del_total
@@ -8,9 +8,9 @@ from django.db.models.query import Q
8
8
  from codex.librarian.scribe.importer.const import (
9
9
  FIELD_NAME_KEYS_REL_MAP,
10
10
  FOLDERS_FIELD_NAME,
11
- FTS_CREATED_M2MS,
12
11
  IDENTIFIERS_FIELD_NAME,
13
12
  LINK_M2MS,
13
+ NON_FTS_FIELDS,
14
14
  )
15
15
  from codex.librarian.scribe.importer.link.const import COMPLEX_MODEL_FIELD_NAMES
16
16
  from codex.librarian.scribe.importer.link.covers import (
@@ -47,9 +47,13 @@ class LinkComicsImporterPrepare(LinkCoversImporter):
47
47
  ):
48
48
  if field_name == IDENTIFIERS_FIELD_NAME:
49
49
  # sources extracton must come before identifiers is minified
50
- sources = tuple(subvalues[0] for subvalues in values)
50
+ # but now identifiers is not indexed at all, yet sources are.
51
+ sources = tuple(sorted({subvalues[0] for subvalues in values}))
51
52
  self.add_links_to_fts(comic_pk, "sources", sources)
52
53
 
54
+ if field_name in NON_FTS_FIELDS:
55
+ return
56
+
53
57
  field_name, fts_values = self.minify_complex_link_to_fts_tuple(
54
58
  field_name, values
55
59
  )
@@ -127,6 +131,5 @@ class LinkComicsImporterPrepare(LinkCoversImporter):
127
131
  )
128
132
  for field, names in md.items():
129
133
  self._link_prepare_named_m2ms(all_m2m_links, comic_pk, field, names)
130
- self.metadata.pop(LINK_M2MS)
131
- self.metadata.pop(FTS_CREATED_M2MS)
134
+ self.metadata.pop(LINK_M2MS, None)
132
135
  return all_m2m_links
@@ -13,12 +13,31 @@ from codex.librarian.scribe.importer.statii.create import (
13
13
  ImporterUpdateComicsStatus,
14
14
  )
15
15
  from codex.librarian.scribe.importer.statii.query import ImporterQueryComicUpdatesStatus
16
+ from codex.librarian.status import Status
16
17
  from codex.models import Comic
17
18
 
18
19
 
19
20
  class QueryUpdateComics(QueryForeignKeysQueryImporter):
20
21
  """Move comics that need only updating into correct structure."""
21
22
 
23
+ def _query_update_comic(self, comic: Comic, status: Status):
24
+ """Query for update one comic."""
25
+ proposed_comic_dict = self.metadata[CREATE_COMICS].pop(comic.path, None)
26
+ if not proposed_comic_dict:
27
+ self.log.warning(
28
+ f"{comic.path} can be updated, but the update metadata was not found."
29
+ )
30
+ return
31
+ update_comic_dict = {
32
+ key: value
33
+ for key, value in proposed_comic_dict.items()
34
+ if getattr(comic, key) != value
35
+ }
36
+ # Update even if update_comic_dict is empty to set stat
37
+ self.metadata[UPDATE_COMICS][comic.pk] = update_comic_dict
38
+ status.increment_complete()
39
+ self.status_controller.update(status)
40
+
22
41
  def query_update_comics(self):
23
42
  """Pop existing comics from create & move to update if needed."""
24
43
  paths = tuple(self.metadata[CREATE_COMICS].keys())
@@ -34,18 +53,9 @@ class QueryUpdateComics(QueryForeignKeysQueryImporter):
34
53
  status.increment_complete(len(paths) - comics.count())
35
54
 
36
55
  for comic in comics:
37
- if self.abort_event.is_set():
38
- return
39
- proposed_comic_dict = self.metadata[CREATE_COMICS].pop(comic.path)
40
- update_comic_dict = {
41
- key: value
42
- for key, value in proposed_comic_dict.items()
43
- if getattr(comic, key) != value
44
- }
45
- if update_comic_dict:
46
- self.metadata[UPDATE_COMICS][comic.pk] = update_comic_dict
47
- status.increment_complete()
48
- self.status_controller.update(status)
56
+ self._query_update_comic(comic, status)
57
+ if self.abort_event.is_set():
58
+ return
49
59
 
50
60
  create_status = ImporterCreateComicsStatus(
51
61
  None, len(self.metadata[CREATE_COMICS])
@@ -65,7 +65,7 @@ class SearchIndexPrepareImporter(SearchIndexCreateUpdateImporter):
65
65
  self.metadata[key] = {}
66
66
  if sub_key not in self.metadata[key]:
67
67
  self.metadata[key][sub_key] = {}
68
- self.log.warning(
68
+ self.log.debug(
69
69
  f"FTS import anomaly, attempting FTS update for comic {sub_key} {field_name}"
70
70
  )
71
71
  # Alternative might be kicking off an FTS sync
@@ -59,32 +59,33 @@ class SearchIndexSyncManyToManyImporter(FinishImporter):
59
59
 
60
60
  def sync_fts_for_m2m_updates(self, already_updated_comicfts_pks: tuple[int, ...]):
61
61
  """Update fts entries for foreign keys."""
62
- count = 0
63
- update_field_names = tuple(self.metadata.get(FTS_UPDATED_M2MS, {}).keys())
64
- if not update_field_names:
65
- self.metadata.pop(FTS_UPDATED_M2MS, None)
66
- return
67
-
68
- update_objs = []
69
- for field_name in update_field_names:
70
- if self.abort_event.is_set():
62
+ try:
63
+ count = 0
64
+ update_field_names = tuple(self.metadata.get(FTS_UPDATED_M2MS, {}).keys())
65
+ if not update_field_names:
71
66
  return
72
- self._sync_fts_for_m2m_updates_model(
73
- field_name,
74
- already_updated_comicfts_pks,
75
- update_field_names,
76
- update_objs,
67
+
68
+ update_objs = []
69
+ for field_name in update_field_names:
70
+ if self.abort_event.is_set():
71
+ return
72
+ self._sync_fts_for_m2m_updates_model(
73
+ field_name,
74
+ already_updated_comicfts_pks,
75
+ update_field_names,
76
+ update_objs,
77
+ )
78
+ count += len(update_objs)
79
+ tags = ", ".join(update_field_names)
80
+ self.log.debug(
81
+ f"Updating {count} search index entries for comics linked to updated tags: {tags}"
77
82
  )
78
- count += len(update_objs)
79
- tags = ", ".join(update_field_names)
80
- self.log.debug(
81
- f"Updating {count} search index entries for comics linked to updated tags: {tags}"
82
- )
83
- if count:
84
- ComicFTS.objects.bulk_update(update_objs, update_field_names)
85
- level = "INFO" if count else "DEBUG"
86
- self.log.log(
87
- level,
88
- f"Updated {count} search indexes entries for comics linked to updated tags: {tags}.",
89
- )
90
- self.metadata.pop(FTS_UPDATED_M2MS, None)
83
+ if count:
84
+ ComicFTS.objects.bulk_update(update_objs, update_field_names)
85
+ level = "INFO" if count else "DEBUG"
86
+ self.log.log(
87
+ level,
88
+ f"Updated {count} search indexes entries for comics linked to updated tags: {tags}.",
89
+ )
90
+ finally:
91
+ self.metadata.pop(FTS_UPDATED_M2MS, None)
@@ -6,6 +6,7 @@ from humanize import naturaldelta
6
6
 
7
7
  from codex.librarian.scribe.importer.const import (
8
8
  FTS_CREATE,
9
+ FTS_CREATED_M2MS,
9
10
  FTS_EXISTING_M2MS,
10
11
  FTS_UPDATE,
11
12
  )
@@ -33,10 +34,13 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
33
34
  obj_list: list[ComicFTS],
34
35
  status: Status,
35
36
  ):
36
- existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(pk)
37
- SearchEntryPrepare.prepare_import_fts_entry(
38
- pk, entry, existing_m2m_values, None, obj_list, status, create=True
39
- )
37
+ if entry:
38
+ existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(pk)
39
+ SearchEntryPrepare.prepare_import_fts_entry(
40
+ pk, entry, existing_m2m_values, None, obj_list, status, create=True
41
+ )
42
+ else:
43
+ status.decrement_total()
40
44
  self.status_controller.update(status)
41
45
 
42
46
  def _update_comicfts_entry(
@@ -46,17 +50,19 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
46
50
  status: Status,
47
51
  ):
48
52
  comic_id = comicfts.comic_id # pyright:ignore[reportAttributeAccessIssue], # ty: ignore[unresolved-attribute]
49
- entry = self.metadata[FTS_UPDATE].pop(comic_id)
50
- existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(comic_id)
51
- SearchEntryPrepare.prepare_import_fts_entry(
52
- comic_id,
53
- entry,
54
- existing_m2m_values,
55
- comicfts,
56
- obj_list,
57
- status,
58
- create=False,
59
- )
53
+ if entry := self.metadata[FTS_UPDATE].pop(comic_id):
54
+ existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(comic_id)
55
+ SearchEntryPrepare.prepare_import_fts_entry(
56
+ comic_id,
57
+ entry,
58
+ existing_m2m_values,
59
+ comicfts,
60
+ obj_list,
61
+ status,
62
+ create=False,
63
+ )
64
+ else:
65
+ status.decrement_total()
60
66
  self.status_controller.update(status)
61
67
 
62
68
  def _update_search_index_operate_get_status(
@@ -71,9 +77,9 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
71
77
  entries = self.metadata.pop(FTS_CREATE, {})
72
78
  pks = tuple(sorted(entries.keys()))
73
79
  obj_list = []
80
+ if self.abort_event.is_set():
81
+ return tuple(obj_list), ()
74
82
  for pk in pks:
75
- if self.abort_event.is_set():
76
- return tuple(obj_list), ()
77
83
  entry = entries.pop(pk)
78
84
  self._create_comicfts_entry(pk, entry, obj_list, status)
79
85
  return tuple(obj_list), pks
@@ -84,9 +90,9 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
84
90
  obj_list = []
85
91
  if pks := tuple(sorted(self.metadata.get(FTS_UPDATE, {}).keys())):
86
92
  comicftss = ComicFTS.objects.filter(comic_id__in=pks)
93
+ if self.abort_event.is_set():
94
+ return tuple(obj_list), ()
87
95
  for comicfts in comicftss:
88
- if self.abort_event.is_set():
89
- return tuple(obj_list), ()
90
96
  self._update_comicfts_entry(comicfts, obj_list, status)
91
97
  if self.metadata[FTS_UPDATE]:
92
98
  # If updates not popped, turn them into creates.
@@ -204,7 +210,8 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
204
210
  if self.abort_event.is_set():
205
211
  self.log.info("Search Index update aborted early.")
206
212
  self.abort_event.clear()
207
- self.metadata.pop(FTS_EXISTING_M2MS)
213
+ self.metadata.pop(FTS_EXISTING_M2MS, None)
214
+ self.metadata.pop(FTS_CREATED_M2MS, None)
208
215
  self.status_controller.finish_many(
209
216
  (ImporterFTSCreateStatus, ImporterFTSUpdateStatus)
210
217
  )
@@ -8,11 +8,11 @@ from codex.librarian.scribe.importer.statii.moved import ImporterMoveFoldersStat
8
8
  from codex.librarian.scribe.importer.tasks import ImportTask
9
9
  from codex.librarian.scribe.janitor.status import JanitorAdoptOrphanFoldersStatus
10
10
  from codex.librarian.scribe.search.tasks import SearchIndexSyncTask
11
- from codex.librarian.worker import WorkerStatusMixin
11
+ from codex.librarian.worker import WorkerStatusAbortableBase
12
12
  from codex.models import Folder, Library
13
13
 
14
14
 
15
- class OrphanFolderAdopter(WorkerStatusMixin):
15
+ class OrphanFolderAdopter(WorkerStatusAbortableBase):
16
16
  """A worker to handle all bulk database updates."""
17
17
 
18
18
  def _adopt_orphan_folders_for_library(self, library):
@@ -74,8 +74,3 @@ class OrphanFolderAdopter(WorkerStatusMixin):
74
74
  self.log.debug("Adopt Orphan Folders aborted early.")
75
75
 
76
76
  self.abort_event.clear()
77
-
78
- def __init__(self, *args, event, **kwargs):
79
- """Initialize Worker."""
80
- self.abort_event = event
81
- self.init_worker(*args, **kwargs)
@@ -1,6 +1,6 @@
1
1
  """Database integrity checks and remedies."""
2
- # Uses app.get_model() because functions may also be called before the models are ready on startup.
3
2
 
3
+ # Uses app.get_model() because functions may also be called before the models are ready on startup.
4
4
  import re
5
5
  from typing import TYPE_CHECKING
6
6
 
@@ -16,7 +16,7 @@ from codex.librarian.scribe.janitor.status import (
16
16
  JanitorDBIntegrityStatus,
17
17
  )
18
18
  from codex.librarian.scribe.janitor.tasks import JanitorFTSRebuildTask
19
- from codex.librarian.worker import WorkerStatusMixin
19
+ from codex.librarian.worker import WorkerStatusAbortableBase
20
20
  from codex.models.base import BaseModel
21
21
  from codex.settings import (
22
22
  CONFIG_PATH,
@@ -323,14 +323,9 @@ def fts_integrity_check(log):
323
323
  return success
324
324
 
325
325
 
326
- class JanitorIntegrity(WorkerStatusMixin):
326
+ class JanitorIntegrity(WorkerStatusAbortableBase):
327
327
  """Integrity Check Mixin."""
328
328
 
329
- def __init__(self, *args, event, **kwargs):
330
- """Init self.log."""
331
- self.abort_event = event
332
- self.init_worker(*args, **kwargs)
333
-
334
329
  def foreign_key_check(self):
335
330
  """Foreign Key Check task."""
336
331
  status = JanitorDBFKIntegrityStatus()
@@ -2,12 +2,12 @@
2
2
 
3
3
  from codex.choices.admin import AdminFlagChoices
4
4
  from codex.librarian.scribe.importer.tasks import ImportTask
5
- from codex.librarian.worker import WorkerMixin
5
+ from codex.librarian.worker import WorkerBase
6
6
  from codex.models.admin import AdminFlag
7
7
  from codex.models.comic import Comic
8
8
 
9
9
 
10
- class LazyImporter(WorkerMixin):
10
+ class LazyImporter(WorkerBase):
11
11
  """Kick off an import task for just these books."""
12
12
 
13
13
  def lazy_import(self, task):
@@ -45,7 +45,3 @@ class LazyImporter(WorkerMixin):
45
45
  force_import_metadata=True,
46
46
  )
47
47
  self.librarian_queue.put(task)
48
-
49
- def __init__(self, *args, **kwargs):
50
- """Initialize Worker."""
51
- self.init_worker(*args, **kwargs)
@@ -3,20 +3,17 @@
3
3
  from django.db import connection
4
4
 
5
5
  from codex.librarian.scribe.search.status import SearchIndexOptimizeStatus
6
- from codex.librarian.worker import WorkerStatusMixin
6
+ from codex.librarian.worker import (
7
+ WorkerStatusAbortableBase,
8
+ )
7
9
 
8
10
  _TABLE = "codex_comicfts"
9
11
  _OPTIMIZE_SQL = f"INSERT INTO {_TABLE}({_TABLE}) VALUES('optimize')"
10
12
 
11
13
 
12
- class SearchIndexerOptimize(WorkerStatusMixin):
14
+ class SearchIndexerOptimize(WorkerStatusAbortableBase):
13
15
  """Search Index optimize methods."""
14
16
 
15
- def __init__(self, *args, event, **kwargs):
16
- """Initialize search engine."""
17
- self.abort_event = event
18
- self.init_worker(*args, **kwargs)
19
-
20
17
  def optimize(self):
21
18
  """Remove records not in the database from the index, trapping exceptions."""
22
19
  status = SearchIndexOptimizeStatus()
@@ -11,7 +11,7 @@ from django.utils import timezone
11
11
 
12
12
  from codex.librarian.notifier.tasks import LIBRARY_CHANGED_TASK
13
13
  from codex.librarian.scribe.status import UpdateGroupTimestampsStatus
14
- from codex.librarian.worker import WorkerStatusMixin
14
+ from codex.librarian.worker import WorkerStatusBase
15
15
  from codex.models import StoryArc, Volume
16
16
  from codex.models.groups import BrowserGroupModel
17
17
  from codex.models.library import Library
@@ -20,7 +20,7 @@ from codex.views.const import GROUP_MODELS
20
20
  _UPDATE_FIELDS = ("updated_at",)
21
21
 
22
22
 
23
- class TimestampUpdater(WorkerStatusMixin):
23
+ class TimestampUpdater(WorkerStatusBase):
24
24
  """Update Groups timestamp for cover cache busting."""
25
25
 
26
26
  @staticmethod
@@ -129,7 +129,3 @@ class TimestampUpdater(WorkerStatusMixin):
129
129
  level = "INFO" if count else "DEBUG"
130
130
  self.log.log(level, f"Updated timestamps for {count} groups.")
131
131
  self.librarian_queue.put(LIBRARY_CHANGED_TASK)
132
-
133
- def __init__(self, log, librarian_queue, db_write_lock):
134
- """Initialize Worker."""
135
- self.init_worker(log, librarian_queue, db_write_lock)
codex/librarian/worker.py CHANGED
@@ -30,3 +30,30 @@ class WorkerStatusMixin(WorkerMixin):
30
30
  self.status_controller = StatusController( # pyright: ignore[reportUninitializedInstanceVariable]
31
31
  logger_, librarian_queue
32
32
  )
33
+
34
+
35
+ class WorkerBase(WorkerMixin):
36
+ """Base for Worker."""
37
+
38
+ def __init__(self, logger_, librarian_queue: Queue, db_write_lock):
39
+ """Initialize Worker."""
40
+ super().__init__()
41
+ self.init_worker(logger_, librarian_queue, db_write_lock)
42
+
43
+
44
+ class WorkerStatusBase(WorkerStatusMixin):
45
+ """Base for Status Worker."""
46
+
47
+ def __init__(self, logger_, librarian_queue: Queue, db_write_lock):
48
+ """Initialize Worker."""
49
+ super().__init__()
50
+ self.init_worker(logger_, librarian_queue, db_write_lock)
51
+
52
+
53
+ class WorkerStatusAbortableBase(WorkerStatusBase):
54
+ """Base for Abortable Status Worker."""
55
+
56
+ def __init__(self, logger_, librarian_queue: Queue, db_write_lock, event):
57
+ """Initialize Abortable Worker."""
58
+ super().__init__(logger_, librarian_queue, db_write_lock)
59
+ self.abort_event = event
@@ -1 +1 @@
1
- import{m as I,V as r}from"./VCheckboxBtn-HUjl2ti_.js";import{u as A,m as F,g as u}from"./VSelectionControl-BRWozKsT.js";import{f as R}from"./forwardRefs-Bvy6478W.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-RxUHaWll.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
1
+ import{m as I,V as r}from"./VCheckboxBtn-dotsoE0r.js";import{u as A,m as F,g as u}from"./VSelectionControl-N_wsNRlD.js";import{f as R}from"./forwardRefs-BGAZ1bvO.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-CTlarBH9.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
@@ -1 +1 @@
1
- import{m as I,V as r}from"./VCheckboxBtn-HUjl2ti_.js";import{u as A,m as F,g as u}from"./VSelectionControl-BRWozKsT.js";import{f as R}from"./forwardRefs-Bvy6478W.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-RxUHaWll.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
1
+ import{m as I,V as r}from"./VCheckboxBtn-dotsoE0r.js";import{u as A,m as F,g as u}from"./VSelectionControl-N_wsNRlD.js";import{f as R}from"./forwardRefs-BGAZ1bvO.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-CTlarBH9.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
@@ -1 +1 @@
1
- import{l as f,k as a}from"./VSelectionControl-BRWozKsT.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-RxUHaWll.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,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(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{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{l as f,k as a}from"./VSelectionControl-N_wsNRlD.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-CTlarBH9.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,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(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{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{l as f,k as a}from"./VSelectionControl-BRWozKsT.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-RxUHaWll.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,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(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{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{l as f,k as a}from"./VSelectionControl-N_wsNRlD.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-CTlarBH9.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,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(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{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{u as ye,t as I,e as Ve,m as pe,a as ke,V as Ce,b as we,f as Se,d as Ie}from"./VSelect-BqS1Prvd.js";import{p as Fe,c as j,q as De}from"./VSelectionControl-BRWozKsT.js";import{u as Pe,f as Re,p as Ae,k as G,l as Te}from"./forwardRefs-Bvy6478W.js";import{u as Ee,m as Me,h as _e}from"./filter-Baea_DNH.js";import{g as Ne,p as Ke,aC as Le,r as _,aU as F,e as J,bE as Be,c as x,aX as N,bF as Oe,t as Ue,aV as D,bG as W,u as ze,a as d,m as k,o as $e,bH as qe,bI as X,bt as He,b as C,bJ as je,F as $,bK as Ge,n as Je,d as We,z as Xe}from"./main-RxUHaWll.js";import{a as Q,g as Qe}from"./VDialog-c2XXqNJH.js";import{a as Ye}from"./VDivider-C06z3Tn-.js";import{V as Ze}from"./VCheckboxBtn-HUjl2ti_.js";const el=Ke({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Me({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...$e(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Ae({transition:!1})},"VCombobox"),rl=Ne()({name:"VCombobox",props:el(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,Y){let{emit:Z,slots:r}=Y;const{t:K}=Le(),m=_(),b=F(!1),y=F(!0),L=F(!1),q=_(),P=_(),n=F(-1);let B=!1;const{items:ee,transformIn:le,transformOut:ae}=ye(e),{textColorClasses:te,textColorStyles:ue}=Pe(()=>m.value?.color),u=J(e,"modelValue",[],l=>le(Be(l)),l=>{const o=ae(l);return e.multiple?o:o[0]??null}),R=Fe(e),A=x(()=>!!(e.chips||r.chip)),g=x(()=>A.value||!!r.selection),V=F(!e.multiple&&!g.value?u.value[0]?.title??"":""),c=x({get:()=>V.value,set:async l=>{if(V.value=l??"",!e.multiple&&!g.value&&(u.value=[I(e,l)],N(()=>P.value?.scrollToIndex(0))),l&&e.multiple&&e.delimiters?.length){const o=e.delimiters.map(Oe).join("|"),i=l.split(new RegExp(`(?:${o})+`));if(i.length>1){for(let a of i)a=a.trim(),a&&(h(I(e,a)),await N());V.value=""}}l||(n.value=-1),y.value=!l}}),ne=x(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:c.value.length),{filteredItems:T,getMatches:oe}=Ee(e,ee,()=>y.value?"":c.value),p=x(()=>e.hideSelected?T.value.filter(l=>!u.value.some(o=>o.value===l.value)):T.value),E=x(()=>e.hideNoData&&!p.value.length||R.isReadonly.value||R.isDisabled.value),O=J(e,"menu"),s=x({get:()=>O.value,set:l=>{O.value&&!l&&q.value?.ΨopenChildren.size||l&&E.value||(O.value=l)}}),H=Ue(()=>s.value?e.closeText:e.openText);D(V,l=>{B?N(()=>B=!1):b.value&&!s.value&&(s.value=!0),Z("update:search",l)}),D(u,l=>{!e.multiple&&!g.value&&(V.value=l[0]?.title??"")});const ie=x(()=>u.value.map(l=>l.value)),U=x(()=>(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&c.value===p.value[0]?.title)&&p.value.length>0&&!y.value&&!L.value),z=_(),se=Ve(z,m);function re(l){B=!0,e.openOnClear&&(s.value=!0)}function ce(){E.value||(s.value=!0)}function ve(l){E.value||(b.value&&(l.preventDefault(),l.stopPropagation()),s.value=!s.value)}function de(l){(X(l)||l.key==="Backspace")&&m.value?.focus()}function fe(l){if(qe(l)||R.isReadonly.value)return;const o=m.value?.selectionStart,i=u.value.length;if(["Enter","ArrowDown","ArrowUp"].includes(l.key)&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(s.value=!0),["Escape"].includes(l.key)&&(s.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(U.value&&["Enter","Tab"].includes(l.key)&&!u.value.some(a=>{let{value:t}=a;return t===p.value[0].value})&&h(T.value[0]),y.value=!0),l.key==="ArrowDown"&&U.value&&z.value?.focus("next"),l.key==="Enter"&&c.value&&(h(I(e,c.value)),g.value&&(V.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&g.value&&u.value.length>0&&!c.value)return h(u.value[0],!1);if(~n.value){l.preventDefault();const a=n.value;h(u.value[n.value],!1),n.value=a>=i-1?i-2:a}else l.key==="Backspace"&&!c.value&&(n.value=i-1);return}if(e.multiple)if(l.key==="ArrowLeft"){if(n.value<0&&o&&o>0)return;const a=n.value>-1?n.value-1:i-1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(c.value.length,c.value.length))}else if(l.key==="ArrowRight"){if(n.value<0)return;const a=n.value+1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(0,0))}else~n.value&&X(l)&&(n.value=-1)}function me(){e.eager&&P.value?.calculateVisibleItems()}function he(){b.value&&(y.value=!0,m.value?.focus())}function h(l){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(t=>(e.valueComparator||W)(t.value,l.value)),a=o??!~i;if(~i){const t=a?[...u.value,l]:[...u.value];t.splice(i,1),u.value=t}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(c.value="")}else{const i=o!==!1;u.value=i?[l]:[],V.value=i&&!g.value?l.title:"",N(()=>{s.value=!1,y.value=!0})}}function be(l){b.value=!0,setTimeout(()=>{L.value=!0})}function ge(l){L.value=!1}function xe(l){(l==null||l===""&&!e.multiple&&!g.value)&&(u.value=[])}return D(b,(l,o)=>{if(!(l||l===o)&&(n.value=-1,s.value=!1,c.value)){if(e.multiple){h(I(e,c.value));return}if(!g.value)return;u.value.some(i=>{let{title:a}=i;return a===c.value})?V.value="":h(I(e,c.value))}}),D(s,()=>{if(!e.hideSelected&&s.value&&u.value.length){const l=p.value.findIndex(o=>u.value.some(i=>(e.valueComparator||W)(i.value,o.value)));He&&window.requestAnimationFrame(()=>{l>=0&&P.value?.scrollToIndex(l)})}}),D(()=>e.items,(l,o)=>{s.value||b.value&&!o.length&&l.length&&(s.value=!0)}),ze(()=>{const l=!!(!e.hideNoData||p.value.length||r["prepend-item"]||r["append-item"]||r["no-data"]),o=u.value.length>0,i=j.filterProps(e);return d(j,k({ref:m},i,{modelValue:c.value,"onUpdate:modelValue":[a=>c.value=a,xe],focused:b.value,"onUpdate:focused":a=>b.value=a,validationValue:u.externalValue,counterValue:ne.value,dirty:o,class:["v-combobox",{"v-combobox--active-menu":s.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!g.value,"v-combobox--selecting-index":n.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:R.isReadonly.value,placeholder:o?void 0:e.placeholder,"onClick:clear":re,"onMousedown:control":ce,onKeydown:fe}),{...r,default:()=>C($,null,[d(ke,k({ref:q,modelValue:s.value,"onUpdate:modelValue":a=>s.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:E.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:me,onAfterLeave:he},e.menuProps),{default:()=>[l&&d(Ce,k({ref:z,filterable:!0,selected:ie.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:be,onFocusout:ge,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},se,e.listProps),{default:()=>[r["prepend-item"]?.(),!p.value.length&&!e.hideNoData&&(r["no-data"]?.()??d(Q,{key:"no-data",title:K(e.noDataText)},null)),d(we,{ref:P,renderless:!0,items:p.value,itemKey:"value"},{default:a=>{let{item:t,index:v,itemRef:M}=a;const w=k(t.props,{ref:M,key:t.value,active:U.value&&v===0?!0:void 0,onClick:()=>h(t,null)});return t.type==="divider"?r.divider?.({props:t.raw,index:v})??d(Ye,k(t.props,{key:`divider-${v}`}),null):t.type==="subheader"?r.subheader?.({props:t.raw,index:v})??d(Se,k(t.props,{key:`subheader-${v}`}),null):r.item?.({item:t,index:v,props:w})??d(Q,k(w,{role:"option"}),{prepend:S=>{let{isSelected:f}=S;return C($,null,[e.multiple&&!e.hideSelected?d(Ze,{key:t.value,modelValue:f,ripple:!1,tabindex:"-1"},null):void 0,t.props.prependAvatar&&d(Qe,{image:t.props.prependAvatar},null),t.props.prependIcon&&d(G,{icon:t.props.prependIcon},null)])},title:()=>y.value?t.title:_e("v-combobox",t.title,oe(t)?.title)})}}),r["append-item"]?.()]})]}),u.value.map((a,t)=>{function v(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const M={"onClick:close":v,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),v(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},w=A.value?!!r.chip:!!r.selection,S=w?Ge(A.value?r.chip({item:a,index:t,props:M}):r.selection({item:a,index:t})):void 0;if(!(w&&!S))return C("div",{key:a.value,class:We(["v-combobox__selection",t===n.value&&["v-combobox__selection--selected",te.value]]),style:Je(t===n.value?ue.value:{})},[A.value?r.chip?d(Te,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):d(Ie,k({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},M),null):S??C("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&t<u.value.length-1&&C("span",{class:"v-combobox__selection-comma"},[Xe(",")])])])})]),"append-inner":function(){for(var a=arguments.length,t=new Array(a),v=0;v<a;v++)t[v]=arguments[v];return C($,null,[r["append-inner"]?.(...t),(!e.hideNoData||e.items.length)&&e.menuIcon?d(G,{class:"v-combobox__menu-icon",color:m.value?.fieldIconColor,icon:e.menuIcon,onMousedown:ve,onClick:je,"aria-label":K(H.value),title:K(H.value),tabindex:"-1"},null):void 0])}})}),Re({isFocused:b,isPristine:y,menu:s,search:c,selectionIndex:n,filteredItems:T,select:h},m)}});export{rl as V};
1
+ import{u as ye,t as I,e as Ve,m as pe,a as ke,V as Ce,b as we,f as Se,d as Ie}from"./VSelect-CJ_8hyFq.js";import{p as Fe,c as j,q as De}from"./VSelectionControl-N_wsNRlD.js";import{u as Pe,f as Re,p as Ae,k as G,l as Te}from"./forwardRefs-BGAZ1bvO.js";import{u as Ee,m as Me,h as _e}from"./filter-DU947LwF.js";import{g as Ne,p as Ke,aC as Le,r as _,aU as F,e as J,bE as Be,c as x,aX as N,bF as Oe,t as Ue,aV as D,bG as W,u as ze,a as d,m as k,o as $e,bH as qe,bI as X,bt as He,b as C,bJ as je,F as $,bK as Ge,n as Je,d as We,z as Xe}from"./main-CTlarBH9.js";import{a as Q,g as Qe}from"./VDialog-Bn_MNvQ-.js";import{a as Ye}from"./VDivider-DOOd4a9s.js";import{V as Ze}from"./VCheckboxBtn-dotsoE0r.js";const el=Ke({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Me({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...$e(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Ae({transition:!1})},"VCombobox"),rl=Ne()({name:"VCombobox",props:el(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,Y){let{emit:Z,slots:r}=Y;const{t:K}=Le(),m=_(),b=F(!1),y=F(!0),L=F(!1),q=_(),P=_(),n=F(-1);let B=!1;const{items:ee,transformIn:le,transformOut:ae}=ye(e),{textColorClasses:te,textColorStyles:ue}=Pe(()=>m.value?.color),u=J(e,"modelValue",[],l=>le(Be(l)),l=>{const o=ae(l);return e.multiple?o:o[0]??null}),R=Fe(e),A=x(()=>!!(e.chips||r.chip)),g=x(()=>A.value||!!r.selection),V=F(!e.multiple&&!g.value?u.value[0]?.title??"":""),c=x({get:()=>V.value,set:async l=>{if(V.value=l??"",!e.multiple&&!g.value&&(u.value=[I(e,l)],N(()=>P.value?.scrollToIndex(0))),l&&e.multiple&&e.delimiters?.length){const o=e.delimiters.map(Oe).join("|"),i=l.split(new RegExp(`(?:${o})+`));if(i.length>1){for(let a of i)a=a.trim(),a&&(h(I(e,a)),await N());V.value=""}}l||(n.value=-1),y.value=!l}}),ne=x(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:c.value.length),{filteredItems:T,getMatches:oe}=Ee(e,ee,()=>y.value?"":c.value),p=x(()=>e.hideSelected?T.value.filter(l=>!u.value.some(o=>o.value===l.value)):T.value),E=x(()=>e.hideNoData&&!p.value.length||R.isReadonly.value||R.isDisabled.value),O=J(e,"menu"),s=x({get:()=>O.value,set:l=>{O.value&&!l&&q.value?.ΨopenChildren.size||l&&E.value||(O.value=l)}}),H=Ue(()=>s.value?e.closeText:e.openText);D(V,l=>{B?N(()=>B=!1):b.value&&!s.value&&(s.value=!0),Z("update:search",l)}),D(u,l=>{!e.multiple&&!g.value&&(V.value=l[0]?.title??"")});const ie=x(()=>u.value.map(l=>l.value)),U=x(()=>(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&c.value===p.value[0]?.title)&&p.value.length>0&&!y.value&&!L.value),z=_(),se=Ve(z,m);function re(l){B=!0,e.openOnClear&&(s.value=!0)}function ce(){E.value||(s.value=!0)}function ve(l){E.value||(b.value&&(l.preventDefault(),l.stopPropagation()),s.value=!s.value)}function de(l){(X(l)||l.key==="Backspace")&&m.value?.focus()}function fe(l){if(qe(l)||R.isReadonly.value)return;const o=m.value?.selectionStart,i=u.value.length;if(["Enter","ArrowDown","ArrowUp"].includes(l.key)&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(s.value=!0),["Escape"].includes(l.key)&&(s.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(U.value&&["Enter","Tab"].includes(l.key)&&!u.value.some(a=>{let{value:t}=a;return t===p.value[0].value})&&h(T.value[0]),y.value=!0),l.key==="ArrowDown"&&U.value&&z.value?.focus("next"),l.key==="Enter"&&c.value&&(h(I(e,c.value)),g.value&&(V.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&g.value&&u.value.length>0&&!c.value)return h(u.value[0],!1);if(~n.value){l.preventDefault();const a=n.value;h(u.value[n.value],!1),n.value=a>=i-1?i-2:a}else l.key==="Backspace"&&!c.value&&(n.value=i-1);return}if(e.multiple)if(l.key==="ArrowLeft"){if(n.value<0&&o&&o>0)return;const a=n.value>-1?n.value-1:i-1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(c.value.length,c.value.length))}else if(l.key==="ArrowRight"){if(n.value<0)return;const a=n.value+1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(0,0))}else~n.value&&X(l)&&(n.value=-1)}function me(){e.eager&&P.value?.calculateVisibleItems()}function he(){b.value&&(y.value=!0,m.value?.focus())}function h(l){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(t=>(e.valueComparator||W)(t.value,l.value)),a=o??!~i;if(~i){const t=a?[...u.value,l]:[...u.value];t.splice(i,1),u.value=t}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(c.value="")}else{const i=o!==!1;u.value=i?[l]:[],V.value=i&&!g.value?l.title:"",N(()=>{s.value=!1,y.value=!0})}}function be(l){b.value=!0,setTimeout(()=>{L.value=!0})}function ge(l){L.value=!1}function xe(l){(l==null||l===""&&!e.multiple&&!g.value)&&(u.value=[])}return D(b,(l,o)=>{if(!(l||l===o)&&(n.value=-1,s.value=!1,c.value)){if(e.multiple){h(I(e,c.value));return}if(!g.value)return;u.value.some(i=>{let{title:a}=i;return a===c.value})?V.value="":h(I(e,c.value))}}),D(s,()=>{if(!e.hideSelected&&s.value&&u.value.length){const l=p.value.findIndex(o=>u.value.some(i=>(e.valueComparator||W)(i.value,o.value)));He&&window.requestAnimationFrame(()=>{l>=0&&P.value?.scrollToIndex(l)})}}),D(()=>e.items,(l,o)=>{s.value||b.value&&!o.length&&l.length&&(s.value=!0)}),ze(()=>{const l=!!(!e.hideNoData||p.value.length||r["prepend-item"]||r["append-item"]||r["no-data"]),o=u.value.length>0,i=j.filterProps(e);return d(j,k({ref:m},i,{modelValue:c.value,"onUpdate:modelValue":[a=>c.value=a,xe],focused:b.value,"onUpdate:focused":a=>b.value=a,validationValue:u.externalValue,counterValue:ne.value,dirty:o,class:["v-combobox",{"v-combobox--active-menu":s.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!g.value,"v-combobox--selecting-index":n.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:R.isReadonly.value,placeholder:o?void 0:e.placeholder,"onClick:clear":re,"onMousedown:control":ce,onKeydown:fe}),{...r,default:()=>C($,null,[d(ke,k({ref:q,modelValue:s.value,"onUpdate:modelValue":a=>s.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:E.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:me,onAfterLeave:he},e.menuProps),{default:()=>[l&&d(Ce,k({ref:z,filterable:!0,selected:ie.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:be,onFocusout:ge,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},se,e.listProps),{default:()=>[r["prepend-item"]?.(),!p.value.length&&!e.hideNoData&&(r["no-data"]?.()??d(Q,{key:"no-data",title:K(e.noDataText)},null)),d(we,{ref:P,renderless:!0,items:p.value,itemKey:"value"},{default:a=>{let{item:t,index:v,itemRef:M}=a;const w=k(t.props,{ref:M,key:t.value,active:U.value&&v===0?!0:void 0,onClick:()=>h(t,null)});return t.type==="divider"?r.divider?.({props:t.raw,index:v})??d(Ye,k(t.props,{key:`divider-${v}`}),null):t.type==="subheader"?r.subheader?.({props:t.raw,index:v})??d(Se,k(t.props,{key:`subheader-${v}`}),null):r.item?.({item:t,index:v,props:w})??d(Q,k(w,{role:"option"}),{prepend:S=>{let{isSelected:f}=S;return C($,null,[e.multiple&&!e.hideSelected?d(Ze,{key:t.value,modelValue:f,ripple:!1,tabindex:"-1"},null):void 0,t.props.prependAvatar&&d(Qe,{image:t.props.prependAvatar},null),t.props.prependIcon&&d(G,{icon:t.props.prependIcon},null)])},title:()=>y.value?t.title:_e("v-combobox",t.title,oe(t)?.title)})}}),r["append-item"]?.()]})]}),u.value.map((a,t)=>{function v(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const M={"onClick:close":v,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),v(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},w=A.value?!!r.chip:!!r.selection,S=w?Ge(A.value?r.chip({item:a,index:t,props:M}):r.selection({item:a,index:t})):void 0;if(!(w&&!S))return C("div",{key:a.value,class:We(["v-combobox__selection",t===n.value&&["v-combobox__selection--selected",te.value]]),style:Je(t===n.value?ue.value:{})},[A.value?r.chip?d(Te,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):d(Ie,k({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},M),null):S??C("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&t<u.value.length-1&&C("span",{class:"v-combobox__selection-comma"},[Xe(",")])])])})]),"append-inner":function(){for(var a=arguments.length,t=new Array(a),v=0;v<a;v++)t[v]=arguments[v];return C($,null,[r["append-inner"]?.(...t),(!e.hideNoData||e.items.length)&&e.menuIcon?d(G,{class:"v-combobox__menu-icon",color:m.value?.fieldIconColor,icon:e.menuIcon,onMousedown:ve,onClick:je,"aria-label":K(H.value),title:K(H.value),tabindex:"-1"},null):void 0])}})}),Re({isFocused:b,isPristine:y,menu:s,search:c,selectionIndex:n,filteredItems:T,select:h},m)}});export{rl as V};