codex 1.6.8__py3-none-any.whl → 1.6.9__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 (429) hide show
  1. codex/librarian/cron/__init__.py +1 -0
  2. codex/librarian/cron/crond.py +84 -0
  3. codex/librarian/janitor/time.py +12 -0
  4. codex/librarian/librariand.py +9 -3
  5. codex/librarian/tasks.py +5 -1
  6. codex/librarian/telemeter/__init__.py +1 -0
  7. codex/librarian/{stats.py → telemeter/stats.py} +1 -0
  8. codex/librarian/telemeter/tasks.py +8 -0
  9. codex/librarian/telemeter/telemeter.py +77 -0
  10. codex/librarian/telemeter/time.py +48 -0
  11. codex/migrations/0028_telemeter.py +48 -0
  12. codex/models/admin.py +2 -0
  13. codex/settings/settings.py +1 -1
  14. codex/static_root/assets/{VCheckbox-DE3METqJ.947b68d61150.js → VCheckbox-dIScsEcb.d54e90dd2ea2.js} +1 -1
  15. codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.br +0 -0
  16. codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.gz +0 -0
  17. codex/static_root/assets/{VCheckbox-DE3METqJ.js → VCheckbox-dIScsEcb.js} +1 -1
  18. codex/static_root/assets/VCheckbox-dIScsEcb.js.br +0 -0
  19. codex/static_root/assets/VCheckbox-dIScsEcb.js.gz +0 -0
  20. codex/static_root/assets/{VCheckboxBtn-DetOzpfX.e4293f13e16f.js → VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js} +1 -1
  21. codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.br +0 -0
  22. codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.gz +0 -0
  23. codex/static_root/assets/{VCheckboxBtn-DetOzpfX.js → VCheckboxBtn-BpLxL6DP.js} +1 -1
  24. codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.br +0 -0
  25. codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.gz +0 -0
  26. codex/static_root/assets/{VCombobox-D2XmpiHi.3427b660b686.js → VCombobox-BiTvNSAL.d1884eaf76e6.js} +1 -1
  27. codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.br +0 -0
  28. codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.gz +0 -0
  29. codex/static_root/assets/{VCombobox-D2XmpiHi.js → VCombobox-BiTvNSAL.js} +1 -1
  30. codex/static_root/assets/VCombobox-BiTvNSAL.js.br +0 -0
  31. codex/static_root/assets/VCombobox-BiTvNSAL.js.gz +0 -0
  32. codex/static_root/assets/{VDialog-BXw6XFu7.38cde34df95a.js → VDialog-DO_IeNl2.1e644515ee26.js} +1 -1
  33. codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.br +0 -0
  34. codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.gz +0 -0
  35. codex/static_root/assets/{VDialog-BXw6XFu7.js → VDialog-DO_IeNl2.js} +1 -1
  36. codex/static_root/assets/VDialog-DO_IeNl2.js.br +0 -0
  37. codex/static_root/assets/VDialog-DO_IeNl2.js.gz +0 -0
  38. codex/static_root/assets/{VExpansionPanels-cdsBiWJW.289873cadd1b.js → VExpansionPanels-paVX7c3D.3be9407a80fd.js} +1 -1
  39. codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.br +0 -0
  40. codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.gz +0 -0
  41. codex/static_root/assets/{VExpansionPanels-cdsBiWJW.js → VExpansionPanels-paVX7c3D.js} +1 -1
  42. codex/static_root/assets/VExpansionPanels-paVX7c3D.js.br +0 -0
  43. codex/static_root/assets/VExpansionPanels-paVX7c3D.js.gz +0 -0
  44. codex/static_root/assets/{VRadioGroup-DPsPhrgJ.2232643fa4b2.js → VRadioGroup-CLZGmBdz.1e41ea70fba8.js} +1 -1
  45. codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.br +0 -0
  46. codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.gz +0 -0
  47. codex/static_root/assets/{VRadioGroup-DPsPhrgJ.js → VRadioGroup-CLZGmBdz.js} +1 -1
  48. codex/static_root/assets/VRadioGroup-CLZGmBdz.js.br +0 -0
  49. codex/static_root/assets/VRadioGroup-CLZGmBdz.js.gz +0 -0
  50. codex/static_root/assets/{VSelect-wpuzLrPv.f46f25efca5b.js → VSelect-Cwd7Ke2J.fd98b8f830af.js} +1 -1
  51. codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.br +0 -0
  52. codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.gz +0 -0
  53. codex/static_root/assets/{VSelect-wpuzLrPv.js → VSelect-Cwd7Ke2J.js} +1 -1
  54. codex/static_root/assets/VSelect-Cwd7Ke2J.js.br +0 -0
  55. codex/static_root/assets/VSelect-Cwd7Ke2J.js.gz +0 -0
  56. codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css +1 -0
  57. codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.br +0 -0
  58. codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.gz +0 -0
  59. codex/static_root/assets/VSelectionControl-BFq--28I.css +1 -0
  60. codex/static_root/assets/VSelectionControl-BFq--28I.css.br +0 -0
  61. codex/static_root/assets/VSelectionControl-BFq--28I.css.gz +0 -0
  62. codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js +1 -0
  63. codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.br +0 -0
  64. codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.gz +0 -0
  65. codex/static_root/assets/VSelectionControl-BTjn8uTI.js +1 -0
  66. codex/static_root/assets/VSelectionControl-BTjn8uTI.js.br +0 -0
  67. codex/static_root/assets/VSelectionControl-BTjn8uTI.js.gz +0 -0
  68. codex/static_root/assets/{VSlideGroup-KhqCfdKQ.984b37842a8b.js → VSlideGroup-D4BlVRr8.10a79fd58813.js} +1 -1
  69. codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.br +0 -0
  70. codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.gz +0 -0
  71. codex/static_root/assets/{VSlideGroup-KhqCfdKQ.js → VSlideGroup-D4BlVRr8.js} +1 -1
  72. codex/static_root/assets/VSlideGroup-D4BlVRr8.js.br +0 -0
  73. codex/static_root/assets/VSlideGroup-D4BlVRr8.js.gz +0 -0
  74. codex/static_root/assets/{VTable-CJJzxZcw.edb1bb582e5c.js → VTable-IQf8Xj4J.2e69b517b235.js} +1 -1
  75. codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.br +0 -0
  76. codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.gz +0 -0
  77. codex/static_root/assets/{VTable-CJJzxZcw.js → VTable-IQf8Xj4J.js} +1 -1
  78. codex/static_root/assets/VTable-IQf8Xj4J.js.br +0 -0
  79. codex/static_root/assets/VTable-IQf8Xj4J.js.gz +0 -0
  80. codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css +1 -0
  81. codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.br +0 -0
  82. codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.gz +0 -0
  83. codex/static_root/assets/VTextField-BssVoDhB.css +1 -0
  84. codex/static_root/assets/VTextField-BssVoDhB.css.br +0 -0
  85. codex/static_root/assets/VTextField-BssVoDhB.css.gz +0 -0
  86. codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js +1 -0
  87. codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.br +0 -0
  88. codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.gz +0 -0
  89. codex/static_root/assets/VTextField-DKXmWQyx.js +1 -0
  90. codex/static_root/assets/VTextField-DKXmWQyx.js.br +0 -0
  91. codex/static_root/assets/VTextField-DKXmWQyx.js.gz +0 -0
  92. codex/static_root/assets/{VWindowItem-BWJJgE5I.8daf8cde5589.js → VWindowItem-clwRzf0Z.01620e37f020.js} +1 -1
  93. codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.br +0 -0
  94. codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.gz +0 -0
  95. codex/static_root/assets/{VWindowItem-BWJJgE5I.js → VWindowItem-clwRzf0Z.js} +1 -1
  96. codex/static_root/assets/VWindowItem-clwRzf0Z.js.br +0 -0
  97. codex/static_root/assets/VWindowItem-clwRzf0Z.js.gz +0 -0
  98. codex/static_root/assets/{admin-DrXckZDB.5feb8fde2d3a.js → admin-BMM4khnn.eeb686da7f67.js} +1 -1
  99. codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.br +0 -0
  100. codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.gz +0 -0
  101. codex/static_root/assets/{admin-DrXckZDB.js → admin-BMM4khnn.js} +1 -1
  102. codex/static_root/assets/admin-BMM4khnn.js.br +0 -0
  103. codex/static_root/assets/admin-BMM4khnn.js.gz +0 -0
  104. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css +1 -0
  105. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.br +0 -0
  106. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.gz +0 -0
  107. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css +1 -0
  108. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.br +0 -0
  109. codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.gz +0 -0
  110. codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js +56 -0
  111. codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.br +0 -0
  112. codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.gz +0 -0
  113. codex/static_root/assets/admin-drawer-panel-SQytza6T.js +56 -0
  114. codex/static_root/assets/admin-drawer-panel-SQytza6T.js.br +0 -0
  115. codex/static_root/assets/admin-drawer-panel-SQytza6T.js.gz +0 -0
  116. codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js +1 -0
  117. codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.br +0 -0
  118. codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.gz +0 -0
  119. codex/static_root/assets/browser-D6WDXwID.js +1 -0
  120. codex/static_root/assets/browser-D6WDXwID.js.br +0 -0
  121. codex/static_root/assets/browser-D6WDXwID.js.gz +0 -0
  122. codex/static_root/assets/{change-password-dialog-Cm6AnxGf.66f4e604144b.js → change-password-dialog-CD1pdXK9.8b94f4f171c6.js} +1 -1
  123. codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.br +0 -0
  124. codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.gz +0 -0
  125. codex/static_root/assets/{change-password-dialog-Cm6AnxGf.js → change-password-dialog-CD1pdXK9.js} +1 -1
  126. codex/static_root/assets/change-password-dialog-CD1pdXK9.js.br +0 -0
  127. codex/static_root/assets/change-password-dialog-CD1pdXK9.js.gz +0 -0
  128. codex/static_root/assets/{confirm-dialog-Mznixjrb.927eaa9bea39.js → confirm-dialog-_HotKBZZ.2e586037b3e1.js} +1 -1
  129. codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.br +0 -0
  130. codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.gz +0 -0
  131. codex/static_root/assets/{confirm-dialog-Mznixjrb.js → confirm-dialog-_HotKBZZ.js} +1 -1
  132. codex/static_root/assets/confirm-dialog-_HotKBZZ.js.br +0 -0
  133. codex/static_root/assets/confirm-dialog-_HotKBZZ.js.gz +0 -0
  134. codex/static_root/assets/{datetime-column-DqSk_iUb.260bcbb4c8e2.js → datetime-column-D93BsvcX.5caf2255bdc3.js} +1 -1
  135. codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.br +0 -0
  136. codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.gz +0 -0
  137. codex/static_root/assets/{datetime-column-DqSk_iUb.js → datetime-column-D93BsvcX.js} +1 -1
  138. codex/static_root/assets/datetime-column-D93BsvcX.js.br +0 -0
  139. codex/static_root/assets/datetime-column-D93BsvcX.js.gz +0 -0
  140. codex/static_root/assets/{filter-CvqVrkAJ.8996d1b1db2a.js → filter-ji46VTOR.f7b9ed6fec13.js} +1 -1
  141. codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.br +0 -0
  142. codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.gz +0 -0
  143. codex/static_root/assets/{filter-CvqVrkAJ.js → filter-ji46VTOR.js} +1 -1
  144. codex/static_root/assets/filter-ji46VTOR.js.br +0 -0
  145. codex/static_root/assets/filter-ji46VTOR.js.gz +0 -0
  146. codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js +1 -0
  147. codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.br +0 -0
  148. codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.gz +0 -0
  149. codex/static_root/assets/flag-tab-CRfBTBsz.js +1 -0
  150. codex/static_root/assets/flag-tab-CRfBTBsz.js.br +0 -0
  151. codex/static_root/assets/flag-tab-CRfBTBsz.js.gz +0 -0
  152. codex/static_root/assets/{group-tab-89t0MyqI.1c743da230be.js → group-tab-CMX07Y1c.98dd5e2d0bfc.js} +1 -1
  153. codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.br +0 -0
  154. codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.gz +0 -0
  155. codex/static_root/assets/{group-tab-89t0MyqI.js → group-tab-CMX07Y1c.js} +1 -1
  156. codex/static_root/assets/group-tab-CMX07Y1c.js.br +0 -0
  157. codex/static_root/assets/group-tab-CMX07Y1c.js.gz +0 -0
  158. codex/static_root/assets/{http-error-BJTIqHG7.68507d59e73a.js → http-error-CzJHczxG.6ee3173d40a5.js} +1 -1
  159. codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.br +0 -0
  160. codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.gz +0 -0
  161. codex/static_root/assets/{http-error-BJTIqHG7.js → http-error-CzJHczxG.js} +1 -1
  162. codex/static_root/assets/http-error-CzJHczxG.js.br +0 -0
  163. codex/static_root/assets/http-error-CzJHczxG.js.gz +0 -0
  164. codex/static_root/assets/{library-tab-DoebKL9-.6eef922082b3.js → library-tab-DfZENbbA.1117ad225bde.js} +1 -1
  165. codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.br +0 -0
  166. codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.gz +0 -0
  167. codex/static_root/assets/{library-tab-DoebKL9-.js → library-tab-DfZENbbA.js} +1 -1
  168. codex/static_root/assets/library-tab-DfZENbbA.js.br +0 -0
  169. codex/static_root/assets/library-tab-DfZENbbA.js.gz +0 -0
  170. codex/static_root/assets/{main-DArXKRWW.47a8064195fe.js → main-EAqCu0p6.e749a8bc2923.js} +3 -3
  171. codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.br +0 -0
  172. codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.gz +0 -0
  173. codex/static_root/assets/{main-DArXKRWW.js → main-EAqCu0p6.js} +3 -3
  174. codex/static_root/assets/main-EAqCu0p6.js.br +0 -0
  175. codex/static_root/assets/main-EAqCu0p6.js.gz +0 -0
  176. codex/static_root/assets/{pagination-toolbar-m9-HzvQE.178146e802bf.js → pagination-toolbar-m4o9cYJ6.df24ef17e904.js} +1 -1
  177. codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.br +0 -0
  178. codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.gz +0 -0
  179. codex/static_root/assets/{pagination-toolbar-m9-HzvQE.js → pagination-toolbar-m4o9cYJ6.js} +1 -1
  180. codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.br +0 -0
  181. codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.gz +0 -0
  182. codex/static_root/assets/{pdf-doc-xL1qP1mK.643e4fab2b8d.js → pdf-doc-RJuKdcoH.4be4a68338de.js} +1 -1
  183. codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.br +0 -0
  184. codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.gz +0 -0
  185. codex/static_root/assets/{pdf-doc-xL1qP1mK.js → pdf-doc-RJuKdcoH.js} +1 -1
  186. codex/static_root/assets/pdf-doc-RJuKdcoH.js.br +0 -0
  187. codex/static_root/assets/pdf-doc-RJuKdcoH.js.gz +0 -0
  188. codex/static_root/assets/{reader-DwHuZOrV.b6067501f379.js → reader-BYz5uPEm.e2db8893aa10.js} +2 -2
  189. codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.br +0 -0
  190. codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.gz +0 -0
  191. codex/static_root/assets/{reader-DwHuZOrV.js → reader-BYz5uPEm.js} +2 -2
  192. codex/static_root/assets/reader-BYz5uPEm.js.br +0 -0
  193. codex/static_root/assets/reader-BYz5uPEm.js.gz +0 -0
  194. codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js +1 -0
  195. codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.br +0 -0
  196. codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.gz +0 -0
  197. codex/static_root/assets/relation-chips-BQX3oeiS.js +1 -0
  198. codex/static_root/assets/relation-chips-BQX3oeiS.js.br +0 -0
  199. codex/static_root/assets/relation-chips-BQX3oeiS.js.gz +0 -0
  200. codex/static_root/assets/{settings-drawer-CUQX8aKC.js → settings-drawer-C5t3OYPS.3fb97d35ae92.js} +2 -2
  201. codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.br +0 -0
  202. codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.gz +0 -0
  203. codex/static_root/assets/{settings-drawer-CUQX8aKC.82a95dcef142.js → settings-drawer-C5t3OYPS.js} +2 -2
  204. codex/static_root/assets/settings-drawer-C5t3OYPS.js.br +0 -0
  205. codex/static_root/assets/settings-drawer-C5t3OYPS.js.gz +0 -0
  206. codex/static_root/assets/{stats-tab-CI0u-X7Y.2d1b6a0d4139.css → stats-tab-BVZzfwi1.28f07f038e88.css} +1 -1
  207. codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.br +0 -0
  208. codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.gz +0 -0
  209. codex/static_root/assets/{stats-tab-CI0u-X7Y.css → stats-tab-BVZzfwi1.css} +1 -1
  210. codex/static_root/assets/stats-tab-BVZzfwi1.css.br +0 -0
  211. codex/static_root/assets/stats-tab-BVZzfwi1.css.gz +0 -0
  212. codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js +1 -0
  213. codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.br +0 -0
  214. codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.gz +0 -0
  215. codex/static_root/assets/stats-tab-BZrcMjtP.js +1 -0
  216. codex/static_root/assets/stats-tab-BZrcMjtP.js.br +0 -0
  217. codex/static_root/assets/stats-tab-BZrcMjtP.js.gz +0 -0
  218. codex/static_root/assets/{task-tab-RfF_m-c2.4ea612865931.js → task-tab-aLrGKXQT.f8498ed38d40.js} +1 -1
  219. codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.br +0 -0
  220. codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.gz +0 -0
  221. codex/static_root/assets/{task-tab-RfF_m-c2.js → task-tab-aLrGKXQT.js} +1 -1
  222. codex/static_root/assets/task-tab-aLrGKXQT.js.br +0 -0
  223. codex/static_root/assets/task-tab-aLrGKXQT.js.gz +0 -0
  224. codex/static_root/assets/{unauthorized-BY4OkaUc.7a55b1214630.js → unauthorized-DpTUrdQV.0c1bfe81f457.js} +1 -1
  225. codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.br +0 -0
  226. codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.gz +0 -0
  227. codex/static_root/assets/{unauthorized-BY4OkaUc.js → unauthorized-DpTUrdQV.js} +1 -1
  228. codex/static_root/assets/unauthorized-DpTUrdQV.js.br +0 -0
  229. codex/static_root/assets/unauthorized-DpTUrdQV.js.gz +0 -0
  230. codex/static_root/assets/{user-tab-tSrCTVFj.6c5b9a53a03a.js → user-tab-B_CPCP10.d1a264b97a0f.js} +1 -1
  231. codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.br +0 -0
  232. codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.gz +0 -0
  233. codex/static_root/assets/{user-tab-tSrCTVFj.js → user-tab-B_CPCP10.js} +1 -1
  234. codex/static_root/assets/user-tab-B_CPCP10.js.br +0 -0
  235. codex/static_root/assets/user-tab-B_CPCP10.js.gz +0 -0
  236. codex/static_root/js/{choices-admin.3521e2a863df.json → choices-admin.1eca6d2c22cf.json} +1 -1
  237. codex/static_root/js/choices-admin.1eca6d2c22cf.json.br +0 -0
  238. codex/static_root/js/choices-admin.1eca6d2c22cf.json.gz +0 -0
  239. codex/static_root/js/choices-admin.json +1 -1
  240. codex/static_root/js/choices-admin.json.br +0 -0
  241. codex/static_root/js/choices-admin.json.gz +0 -0
  242. codex/static_root/{manifest.37e83529bf91.json → manifest.3d6dd67354d1.json} +220 -220
  243. codex/static_root/manifest.3d6dd67354d1.json.br +0 -0
  244. codex/static_root/manifest.3d6dd67354d1.json.gz +0 -0
  245. codex/static_root/manifest.json +220 -220
  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/flag.py +10 -1
  250. codex/views/admin/stats.py +1 -1
  251. codex/views/reader/page.py +3 -4
  252. {codex-1.6.8.dist-info → codex-1.6.9.dist-info}/METADATA +39 -44
  253. {codex-1.6.8.dist-info → codex-1.6.9.dist-info}/RECORD +256 -249
  254. codex/librarian/janitor/janitord.py +0 -76
  255. codex/static_root/assets/VCheckbox-DE3METqJ.947b68d61150.js.br +0 -0
  256. codex/static_root/assets/VCheckbox-DE3METqJ.947b68d61150.js.gz +0 -0
  257. codex/static_root/assets/VCheckbox-DE3METqJ.js.br +0 -0
  258. codex/static_root/assets/VCheckbox-DE3METqJ.js.gz +0 -0
  259. codex/static_root/assets/VCheckboxBtn-DetOzpfX.e4293f13e16f.js.br +0 -0
  260. codex/static_root/assets/VCheckboxBtn-DetOzpfX.e4293f13e16f.js.gz +0 -0
  261. codex/static_root/assets/VCheckboxBtn-DetOzpfX.js.br +0 -0
  262. codex/static_root/assets/VCheckboxBtn-DetOzpfX.js.gz +0 -0
  263. codex/static_root/assets/VCombobox-D2XmpiHi.3427b660b686.js.br +0 -0
  264. codex/static_root/assets/VCombobox-D2XmpiHi.3427b660b686.js.gz +0 -0
  265. codex/static_root/assets/VCombobox-D2XmpiHi.js.br +0 -0
  266. codex/static_root/assets/VCombobox-D2XmpiHi.js.gz +0 -0
  267. codex/static_root/assets/VDialog-BXw6XFu7.38cde34df95a.js.br +0 -0
  268. codex/static_root/assets/VDialog-BXw6XFu7.38cde34df95a.js.gz +0 -0
  269. codex/static_root/assets/VDialog-BXw6XFu7.js.br +0 -0
  270. codex/static_root/assets/VDialog-BXw6XFu7.js.gz +0 -0
  271. codex/static_root/assets/VExpansionPanels-cdsBiWJW.289873cadd1b.js.br +0 -0
  272. codex/static_root/assets/VExpansionPanels-cdsBiWJW.289873cadd1b.js.gz +0 -0
  273. codex/static_root/assets/VExpansionPanels-cdsBiWJW.js.br +0 -0
  274. codex/static_root/assets/VExpansionPanels-cdsBiWJW.js.gz +0 -0
  275. codex/static_root/assets/VRadioGroup-DPsPhrgJ.2232643fa4b2.js.br +0 -0
  276. codex/static_root/assets/VRadioGroup-DPsPhrgJ.2232643fa4b2.js.gz +0 -0
  277. codex/static_root/assets/VRadioGroup-DPsPhrgJ.js.br +0 -0
  278. codex/static_root/assets/VRadioGroup-DPsPhrgJ.js.gz +0 -0
  279. codex/static_root/assets/VSelect-wpuzLrPv.f46f25efca5b.js.br +0 -0
  280. codex/static_root/assets/VSelect-wpuzLrPv.f46f25efca5b.js.gz +0 -0
  281. codex/static_root/assets/VSelect-wpuzLrPv.js.br +0 -0
  282. codex/static_root/assets/VSelect-wpuzLrPv.js.gz +0 -0
  283. codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css +0 -1
  284. codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css.br +0 -0
  285. codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css.gz +0 -0
  286. codex/static_root/assets/VSelectionControl-AnuOsZjr.css +0 -1
  287. codex/static_root/assets/VSelectionControl-AnuOsZjr.css.br +0 -0
  288. codex/static_root/assets/VSelectionControl-AnuOsZjr.css.gz +0 -0
  289. codex/static_root/assets/VSelectionControl-DTgtf_T6.bbb99484db2e.js +0 -1
  290. codex/static_root/assets/VSelectionControl-DTgtf_T6.bbb99484db2e.js.br +0 -0
  291. codex/static_root/assets/VSelectionControl-DTgtf_T6.bbb99484db2e.js.gz +0 -0
  292. codex/static_root/assets/VSelectionControl-DTgtf_T6.js +0 -1
  293. codex/static_root/assets/VSelectionControl-DTgtf_T6.js.br +0 -0
  294. codex/static_root/assets/VSelectionControl-DTgtf_T6.js.gz +0 -0
  295. codex/static_root/assets/VSlideGroup-KhqCfdKQ.984b37842a8b.js.br +0 -0
  296. codex/static_root/assets/VSlideGroup-KhqCfdKQ.984b37842a8b.js.gz +0 -0
  297. codex/static_root/assets/VSlideGroup-KhqCfdKQ.js.br +0 -0
  298. codex/static_root/assets/VSlideGroup-KhqCfdKQ.js.gz +0 -0
  299. codex/static_root/assets/VTable-CJJzxZcw.edb1bb582e5c.js.br +0 -0
  300. codex/static_root/assets/VTable-CJJzxZcw.edb1bb582e5c.js.gz +0 -0
  301. codex/static_root/assets/VTable-CJJzxZcw.js.br +0 -0
  302. codex/static_root/assets/VTable-CJJzxZcw.js.gz +0 -0
  303. codex/static_root/assets/VTextField-BJxb_QuX.79ef5fb485f2.js +0 -1
  304. codex/static_root/assets/VTextField-BJxb_QuX.79ef5fb485f2.js.br +0 -0
  305. codex/static_root/assets/VTextField-BJxb_QuX.79ef5fb485f2.js.gz +0 -0
  306. codex/static_root/assets/VTextField-BJxb_QuX.js +0 -1
  307. codex/static_root/assets/VTextField-BJxb_QuX.js.br +0 -0
  308. codex/static_root/assets/VTextField-BJxb_QuX.js.gz +0 -0
  309. codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css +0 -1
  310. codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css.br +0 -0
  311. codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css.gz +0 -0
  312. codex/static_root/assets/VTextField-Bc1tD4nS.css +0 -1
  313. codex/static_root/assets/VTextField-Bc1tD4nS.css.br +0 -0
  314. codex/static_root/assets/VTextField-Bc1tD4nS.css.gz +0 -0
  315. codex/static_root/assets/VWindowItem-BWJJgE5I.8daf8cde5589.js.br +0 -0
  316. codex/static_root/assets/VWindowItem-BWJJgE5I.8daf8cde5589.js.gz +0 -0
  317. codex/static_root/assets/VWindowItem-BWJJgE5I.js.br +0 -0
  318. codex/static_root/assets/VWindowItem-BWJJgE5I.js.gz +0 -0
  319. codex/static_root/assets/admin-DrXckZDB.5feb8fde2d3a.js.br +0 -0
  320. codex/static_root/assets/admin-DrXckZDB.5feb8fde2d3a.js.gz +0 -0
  321. codex/static_root/assets/admin-DrXckZDB.js.br +0 -0
  322. codex/static_root/assets/admin-DrXckZDB.js.gz +0 -0
  323. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.6b03e2a2ae14.js +0 -56
  324. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.6b03e2a2ae14.js.br +0 -0
  325. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.6b03e2a2ae14.js.gz +0 -0
  326. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.js +0 -56
  327. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.js.br +0 -0
  328. codex/static_root/assets/admin-drawer-panel-Crj9u2NV.js.gz +0 -0
  329. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css +0 -1
  330. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css.br +0 -0
  331. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css.gz +0 -0
  332. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css +0 -1
  333. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css.br +0 -0
  334. codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css.gz +0 -0
  335. codex/static_root/assets/browser-C50xLvMD.ebeac0d428d2.js +0 -1
  336. codex/static_root/assets/browser-C50xLvMD.ebeac0d428d2.js.br +0 -0
  337. codex/static_root/assets/browser-C50xLvMD.ebeac0d428d2.js.gz +0 -0
  338. codex/static_root/assets/browser-C50xLvMD.js +0 -1
  339. codex/static_root/assets/browser-C50xLvMD.js.br +0 -0
  340. codex/static_root/assets/browser-C50xLvMD.js.gz +0 -0
  341. codex/static_root/assets/change-password-dialog-Cm6AnxGf.66f4e604144b.js.br +0 -0
  342. codex/static_root/assets/change-password-dialog-Cm6AnxGf.66f4e604144b.js.gz +0 -0
  343. codex/static_root/assets/change-password-dialog-Cm6AnxGf.js.br +0 -0
  344. codex/static_root/assets/change-password-dialog-Cm6AnxGf.js.gz +0 -0
  345. codex/static_root/assets/confirm-dialog-Mznixjrb.927eaa9bea39.js.br +0 -0
  346. codex/static_root/assets/confirm-dialog-Mznixjrb.927eaa9bea39.js.gz +0 -0
  347. codex/static_root/assets/confirm-dialog-Mznixjrb.js.br +0 -0
  348. codex/static_root/assets/confirm-dialog-Mznixjrb.js.gz +0 -0
  349. codex/static_root/assets/datetime-column-DqSk_iUb.260bcbb4c8e2.js.br +0 -0
  350. codex/static_root/assets/datetime-column-DqSk_iUb.260bcbb4c8e2.js.gz +0 -0
  351. codex/static_root/assets/datetime-column-DqSk_iUb.js.br +0 -0
  352. codex/static_root/assets/datetime-column-DqSk_iUb.js.gz +0 -0
  353. codex/static_root/assets/filter-CvqVrkAJ.8996d1b1db2a.js.br +0 -0
  354. codex/static_root/assets/filter-CvqVrkAJ.8996d1b1db2a.js.gz +0 -0
  355. codex/static_root/assets/filter-CvqVrkAJ.js.br +0 -0
  356. codex/static_root/assets/filter-CvqVrkAJ.js.gz +0 -0
  357. codex/static_root/assets/flag-tab-Bdh3jAbG.7731e3229cca.js +0 -1
  358. codex/static_root/assets/flag-tab-Bdh3jAbG.7731e3229cca.js.br +0 -0
  359. codex/static_root/assets/flag-tab-Bdh3jAbG.7731e3229cca.js.gz +0 -0
  360. codex/static_root/assets/flag-tab-Bdh3jAbG.js +0 -1
  361. codex/static_root/assets/flag-tab-Bdh3jAbG.js.br +0 -0
  362. codex/static_root/assets/flag-tab-Bdh3jAbG.js.gz +0 -0
  363. codex/static_root/assets/group-tab-89t0MyqI.1c743da230be.js.br +0 -0
  364. codex/static_root/assets/group-tab-89t0MyqI.1c743da230be.js.gz +0 -0
  365. codex/static_root/assets/group-tab-89t0MyqI.js.br +0 -0
  366. codex/static_root/assets/group-tab-89t0MyqI.js.gz +0 -0
  367. codex/static_root/assets/http-error-BJTIqHG7.68507d59e73a.js.br +0 -3
  368. codex/static_root/assets/http-error-BJTIqHG7.68507d59e73a.js.gz +0 -0
  369. codex/static_root/assets/http-error-BJTIqHG7.js.br +0 -3
  370. codex/static_root/assets/http-error-BJTIqHG7.js.gz +0 -0
  371. codex/static_root/assets/library-tab-DoebKL9-.6eef922082b3.js.br +0 -0
  372. codex/static_root/assets/library-tab-DoebKL9-.6eef922082b3.js.gz +0 -0
  373. codex/static_root/assets/library-tab-DoebKL9-.js.br +0 -0
  374. codex/static_root/assets/library-tab-DoebKL9-.js.gz +0 -0
  375. codex/static_root/assets/main-DArXKRWW.47a8064195fe.js.br +0 -0
  376. codex/static_root/assets/main-DArXKRWW.47a8064195fe.js.gz +0 -0
  377. codex/static_root/assets/main-DArXKRWW.js.br +0 -0
  378. codex/static_root/assets/main-DArXKRWW.js.gz +0 -0
  379. codex/static_root/assets/pagination-toolbar-m9-HzvQE.178146e802bf.js.br +0 -0
  380. codex/static_root/assets/pagination-toolbar-m9-HzvQE.178146e802bf.js.gz +0 -0
  381. codex/static_root/assets/pagination-toolbar-m9-HzvQE.js.br +0 -0
  382. codex/static_root/assets/pagination-toolbar-m9-HzvQE.js.gz +0 -0
  383. codex/static_root/assets/pdf-doc-xL1qP1mK.643e4fab2b8d.js.br +0 -0
  384. codex/static_root/assets/pdf-doc-xL1qP1mK.643e4fab2b8d.js.gz +0 -0
  385. codex/static_root/assets/pdf-doc-xL1qP1mK.js.br +0 -0
  386. codex/static_root/assets/pdf-doc-xL1qP1mK.js.gz +0 -0
  387. codex/static_root/assets/reader-DwHuZOrV.b6067501f379.js.br +0 -0
  388. codex/static_root/assets/reader-DwHuZOrV.b6067501f379.js.gz +0 -0
  389. codex/static_root/assets/reader-DwHuZOrV.js.br +0 -0
  390. codex/static_root/assets/reader-DwHuZOrV.js.gz +0 -0
  391. codex/static_root/assets/relation-chips-CCg5vRIV.59c17fb77441.js +0 -1
  392. codex/static_root/assets/relation-chips-CCg5vRIV.59c17fb77441.js.br +0 -0
  393. codex/static_root/assets/relation-chips-CCg5vRIV.59c17fb77441.js.gz +0 -0
  394. codex/static_root/assets/relation-chips-CCg5vRIV.js +0 -1
  395. codex/static_root/assets/relation-chips-CCg5vRIV.js.br +0 -0
  396. codex/static_root/assets/relation-chips-CCg5vRIV.js.gz +0 -0
  397. codex/static_root/assets/settings-drawer-CUQX8aKC.82a95dcef142.js.br +0 -0
  398. codex/static_root/assets/settings-drawer-CUQX8aKC.82a95dcef142.js.gz +0 -0
  399. codex/static_root/assets/settings-drawer-CUQX8aKC.js.br +0 -0
  400. codex/static_root/assets/settings-drawer-CUQX8aKC.js.gz +0 -0
  401. codex/static_root/assets/stats-tab-CI0u-X7Y.2d1b6a0d4139.css.br +0 -0
  402. codex/static_root/assets/stats-tab-CI0u-X7Y.2d1b6a0d4139.css.gz +0 -0
  403. codex/static_root/assets/stats-tab-CI0u-X7Y.css.br +0 -0
  404. codex/static_root/assets/stats-tab-CI0u-X7Y.css.gz +0 -0
  405. codex/static_root/assets/stats-tab-CyDREZdm.000d9e8e00a1.js +0 -1
  406. codex/static_root/assets/stats-tab-CyDREZdm.000d9e8e00a1.js.br +0 -0
  407. codex/static_root/assets/stats-tab-CyDREZdm.000d9e8e00a1.js.gz +0 -0
  408. codex/static_root/assets/stats-tab-CyDREZdm.js +0 -1
  409. codex/static_root/assets/stats-tab-CyDREZdm.js.br +0 -0
  410. codex/static_root/assets/stats-tab-CyDREZdm.js.gz +0 -0
  411. codex/static_root/assets/task-tab-RfF_m-c2.4ea612865931.js.br +0 -0
  412. codex/static_root/assets/task-tab-RfF_m-c2.4ea612865931.js.gz +0 -0
  413. codex/static_root/assets/task-tab-RfF_m-c2.js.br +0 -0
  414. codex/static_root/assets/task-tab-RfF_m-c2.js.gz +0 -0
  415. codex/static_root/assets/unauthorized-BY4OkaUc.7a55b1214630.js.br +0 -0
  416. codex/static_root/assets/unauthorized-BY4OkaUc.7a55b1214630.js.gz +0 -0
  417. codex/static_root/assets/unauthorized-BY4OkaUc.js.br +0 -0
  418. codex/static_root/assets/unauthorized-BY4OkaUc.js.gz +0 -0
  419. codex/static_root/assets/user-tab-tSrCTVFj.6c5b9a53a03a.js.br +0 -0
  420. codex/static_root/assets/user-tab-tSrCTVFj.6c5b9a53a03a.js.gz +0 -0
  421. codex/static_root/assets/user-tab-tSrCTVFj.js.br +0 -0
  422. codex/static_root/assets/user-tab-tSrCTVFj.js.gz +0 -0
  423. codex/static_root/js/choices-admin.3521e2a863df.json.br +0 -0
  424. codex/static_root/js/choices-admin.3521e2a863df.json.gz +0 -0
  425. codex/static_root/manifest.37e83529bf91.json.br +0 -0
  426. codex/static_root/manifest.37e83529bf91.json.gz +0 -0
  427. {codex-1.6.8.dist-info → codex-1.6.9.dist-info}/LICENSE +0 -0
  428. {codex-1.6.8.dist-info → codex-1.6.9.dist-info}/WHEEL +0 -0
  429. {codex-1.6.8.dist-info → codex-1.6.9.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1 @@
1
+ """Crond thread."""
@@ -0,0 +1,84 @@
1
+ """Perform maintenance tasks."""
2
+
3
+ from threading import Condition, Event
4
+ from time import sleep
5
+ from types import MappingProxyType
6
+
7
+ from django.utils import timezone as django_timezone
8
+
9
+ from codex.librarian.janitor.tasks import JanitorNightlyTask
10
+ from codex.librarian.janitor.time import get_janitor_time
11
+ from codex.librarian.telemeter.tasks import TelemeterTask
12
+ from codex.librarian.telemeter.time import get_telemeter_time
13
+ from codex.threads import NamedThread
14
+
15
+ _TASK_TIME_FUNCTION_MAP = MappingProxyType(
16
+ {
17
+ JanitorNightlyTask: get_janitor_time,
18
+ TelemeterTask: get_telemeter_time,
19
+ }
20
+ )
21
+
22
+
23
+ class CronThread(NamedThread):
24
+ """Run nightly cleanups."""
25
+
26
+ def __init__(self, *args, **kwargs):
27
+ """Initialize this thread with the worker."""
28
+ self._stop_event = Event()
29
+ self._cond = Condition()
30
+ self._task_times = ()
31
+ super().__init__(*args, name=self.__class__.__name__, daemon=True, **kwargs)
32
+
33
+ def _update_task_times(self):
34
+ task_times = {}
35
+ for task_class, func in _TASK_TIME_FUNCTION_MAP.items():
36
+ if dttm := func(self.log):
37
+ task_times[dttm] = task_class
38
+
39
+ task_tuple = tuple(sorted(task_times.items()))
40
+
41
+ # There's always at least the janitor job
42
+ self._next_time = task_tuple[0][0]
43
+ self._task_times = task_tuple
44
+
45
+ def _get_timeout(self):
46
+ now = django_timezone.now()
47
+ delta = self._next_time - now
48
+ return max(0, int(delta.total_seconds()))
49
+
50
+ def _run_expired_jobs(self):
51
+ now = django_timezone.now()
52
+ for dttm, task_class in self._task_times:
53
+ if dttm < now:
54
+ self.librarian_queue.put(task_class())
55
+ else:
56
+ break
57
+
58
+ def run(self):
59
+ """Cron loop."""
60
+ try:
61
+ self.run_start()
62
+ with self._cond:
63
+ while not self._stop_event.is_set():
64
+ self._run_expired_jobs()
65
+ self._update_task_times()
66
+ timeout = self._get_timeout()
67
+ self.log.debug(f"Next scheduled job at {self._next_time}.")
68
+ self._cond.wait(timeout=timeout)
69
+ if self._stop_event.is_set():
70
+ break
71
+ sleep(2) # fixes any time rounding problems
72
+ except Exception:
73
+ self.log.exception(f"In {self.__class__.__name__}")
74
+ self.log.debug(f"Stopped {self.__class__.__name__}.")
75
+
76
+ def end_timeout(self):
77
+ """End the timeout wait."""
78
+ with self._cond:
79
+ self._cond.notify()
80
+
81
+ def stop(self):
82
+ """Stop the cron thread."""
83
+ self._stop_event.set()
84
+ self.end_timeout()
@@ -0,0 +1,12 @@
1
+ """Janitor Scheduled time."""
2
+
3
+ from datetime import datetime, time, timedelta
4
+
5
+ from django.utils import timezone as django_timezone
6
+
7
+
8
+ def get_janitor_time(_log):
9
+ """Get midnight relative to now."""
10
+ tomorrow = django_timezone.now() + timedelta(days=1)
11
+ tomorrow = tomorrow.astimezone()
12
+ return datetime.combine(tomorrow, time.min).astimezone()
@@ -9,6 +9,7 @@ from caseconverter import snakecase
9
9
 
10
10
  from codex.librarian.covers.coverd import CoverThread
11
11
  from codex.librarian.covers.tasks import CoverTask
12
+ from codex.librarian.cron.crond import CronThread
12
13
  from codex.librarian.delayed_taskd import DelayedTasksThread
13
14
  from codex.librarian.importer.importerd import ComicImporterThread
14
15
  from codex.librarian.importer.tasks import (
@@ -16,7 +17,6 @@ from codex.librarian.importer.tasks import (
16
17
  ImportTask,
17
18
  )
18
19
  from codex.librarian.janitor.janitor import Janitor
19
- from codex.librarian.janitor.janitord import JanitorThread
20
20
  from codex.librarian.janitor.tasks import JanitorTask
21
21
  from codex.librarian.notifier.notifierd import NotifierThread
22
22
  from codex.librarian.notifier.tasks import NotifierTask
@@ -26,7 +26,9 @@ from codex.librarian.search.tasks import (
26
26
  SearchIndexerTask,
27
27
  SearchIndexRebuildIfDBChangedTask,
28
28
  )
29
- from codex.librarian.tasks import DelayedTasks, LibrarianShutdownTask
29
+ from codex.librarian.tasks import DelayedTasks, LibrarianShutdownTask, WakeCronTask
30
+ from codex.librarian.telemeter.tasks import TelemeterTask
31
+ from codex.librarian.telemeter.telemeter import send_telemetry
30
32
  from codex.librarian.watchdog.event_batcherd import WatchdogEventBatcherThread
31
33
  from codex.librarian.watchdog.observers import (
32
34
  LibraryEventObserver,
@@ -52,7 +54,7 @@ class LibrarianDaemon(Process, LoggerBaseMixin):
52
54
  WatchdogEventBatcherThread,
53
55
  LibraryEventObserver,
54
56
  LibraryPollingObserver,
55
- JanitorThread,
57
+ CronThread,
56
58
  )
57
59
  _THREAD_CLASS_MAP = MappingProxyType(
58
60
  {
@@ -105,6 +107,10 @@ class LibrarianDaemon(Process, LoggerBaseMixin):
105
107
  self.log.debug("Told search indexers to stop for db updates.")
106
108
  else:
107
109
  self._threads.search_indexer_thread.queue.put(task)
110
+ case WakeCronTask():
111
+ self._threads.cron_thread.end_timeout()
112
+ case TelemeterTask():
113
+ send_telemetry(self.log)
108
114
  case JanitorTask():
109
115
  self.janitor.run(task)
110
116
  case DelayedTasks():
codex/librarian/tasks.py CHANGED
@@ -12,4 +12,8 @@ class DelayedTasks:
12
12
 
13
13
 
14
14
  class LibrarianShutdownTask:
15
- """Empty task."""
15
+ """Signal task."""
16
+
17
+
18
+ class WakeCronTask:
19
+ """Signal task."""
@@ -0,0 +1 @@
1
+ """Telemeter."""
@@ -138,6 +138,7 @@ class CodexStats:
138
138
  def _get_groups(self, obj):
139
139
  """Add dict of groups information to object."""
140
140
  groups = self._get_model_counts("groups")
141
+ groups["issue_count"] = groups.pop("comic_count", 0)
141
142
  obj["groups"] = groups
142
143
 
143
144
  @staticmethod
@@ -0,0 +1,8 @@
1
+ """Telemter tasks."""
2
+
3
+ from dataclasses import dataclass
4
+
5
+
6
+ @dataclass
7
+ class TelemeterTask:
8
+ """Send telemetry."""
@@ -0,0 +1,77 @@
1
+ """Telemeter job."""
2
+
3
+ import json
4
+ from base64 import a85decode
5
+ from logging import getLogger
6
+ from lzma import compress
7
+ from uuid import uuid4
8
+
9
+ from requests import post
10
+
11
+ from codex.librarian.telemeter.stats import CodexStats
12
+ from codex.models.admin import AdminFlag, Timestamp
13
+ from codex.settings.settings import DEBUG
14
+
15
+ # Version
16
+ _APP_NAME = "codex"
17
+ _VERSION = "0"
18
+
19
+ # Sending
20
+ # this isn't meant to fool you. it's meant to discourage lazy scraper bots.
21
+ _BASE = "".join(
22
+ (
23
+ a85decode(b"BQS?8F#ks-@:XCm@;\\+").decode(),
24
+ a85decode(b"Ea`frF)to6Bk]hRFCB94/c").decode(),
25
+ a85decode(b"@rGmhGV*rI@:Wqi/n&^<").decode(),
26
+ )
27
+ )
28
+ _HEADERS = {"Content-Type": "application/xz"}
29
+ _POST = _BASE + f"/stats/{_APP_NAME}/{_VERSION}"
30
+ _TIMEOUT = 5
31
+
32
+ LOG = getLogger(__name__)
33
+
34
+
35
+ def get_telemeter_timestamp():
36
+ """Get or create timestamp."""
37
+ key = Timestamp.TimestampChoices.TELEMETER_SENT.value
38
+ defaults = {"key": key}
39
+ ts, _ = Timestamp.objects.get_or_create(defaults=defaults, key=key)
40
+ if not ts.version:
41
+ ts.version = str(uuid4())
42
+ ts.save()
43
+ return ts
44
+
45
+
46
+ def _post_stats(log, data):
47
+ """Post telemetry to endpoint."""
48
+ data_json = json.dumps(data)
49
+ json_bytes = data_json.encode()
50
+ compressed_data = compress(json_bytes)
51
+ if DEBUG:
52
+ msg = f"{_POST} {len(compressed_data)}, {_HEADERS}, {_TIMEOUT}"
53
+ log.debug(msg)
54
+ else:
55
+ response = post(_POST, data=compressed_data, headers=_HEADERS, timeout=_TIMEOUT)
56
+ response.raise_for_status()
57
+
58
+
59
+ def _send_telemetry(log):
60
+ """Send telemetry to server."""
61
+ if not AdminFlag.objects.get(key=AdminFlag.FlagChoices.SEND_TELEMETRY.value).on:
62
+ reason = "Send Telemetry flag set to off."
63
+ raise ValueError(reason)
64
+ ts = get_telemeter_timestamp()
65
+ stats = CodexStats().get()
66
+ data = {"stats": stats, "uuid": ts.version}
67
+ _post_stats(log, data)
68
+ log.debug("Sent anonymous telemetry")
69
+ ts.save() # update updated_at
70
+
71
+
72
+ def send_telemetry(log):
73
+ """Send anonymous telemetry during one window per week."""
74
+ try:
75
+ _send_telemetry(log)
76
+ except Exception as exc:
77
+ log.debug(f"Failed to send anonyomous telemetry: {exc}")
@@ -0,0 +1,48 @@
1
+ """Get telemeter send time."""
2
+
3
+ from datetime import datetime, timedelta, timezone
4
+ from uuid import UUID
5
+
6
+ from codex.librarian.telemeter.telemeter import get_telemeter_timestamp
7
+ from codex.models.admin import AdminFlag
8
+
9
+ # Timing
10
+ _ONE_DAY = 24 * 60 * 60
11
+ _SECS_PER_WEEK = 7 * _ONE_DAY
12
+ _MAX_UUID = 2**128
13
+ _UUID_DIVISOR = _MAX_UUID / _SECS_PER_WEEK
14
+
15
+
16
+ def _get_utc_start_of_week():
17
+ """Get timestamp for this Monady 00:00:00."""
18
+ # Monday, now o'clock.
19
+ utc_now = datetime.now(tz=timezone.utc)
20
+ start_of_week = utc_now - timedelta(days=utc_now.weekday())
21
+ # Monday, midnight.
22
+ return start_of_week.replace(hour=0, minute=0, second=0, microsecond=0).astimezone(
23
+ tz=timezone.utc
24
+ )
25
+
26
+
27
+ def get_telemeter_time(log):
28
+ """Get the time to send telemetry."""
29
+ # Should we schedule telemeter at all?
30
+ if not AdminFlag.objects.get(key=AdminFlag.FlagChoices.SEND_TELEMETRY.value).on:
31
+ log.debug("Telemeter disabled. Not scheduled.")
32
+ return 0
33
+
34
+ ts = get_telemeter_timestamp()
35
+ now = datetime.now(tz=timezone.utc)
36
+ since = ts.created_at - now
37
+ if abs(since.total_seconds()) < _ONE_DAY:
38
+ # if created within a day it's not time again.
39
+ log.debug("Telemeter created recently. Not scheduled.")
40
+ return 0
41
+
42
+ # Compute schedule time
43
+ start_of_week = _get_utc_start_of_week()
44
+ uuid = UUID(ts.version)
45
+ seconds_after_week_start = uuid.int / _UUID_DIVISOR
46
+ time_of_week = timedelta(seconds=seconds_after_week_start)
47
+ telemeter_time = start_of_week + time_of_week
48
+ return telemeter_time.astimezone(tz=timezone.utc)
@@ -0,0 +1,48 @@
1
+ """Generated by Django 5.0.6 on 2024-07-02 21:01."""
2
+
3
+ from typing import ClassVar
4
+
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ """Migrate db."""
10
+
11
+ dependencies: ClassVar[list] = [ # type: ignore
12
+ ("codex", "0027_import_order_and_covers"),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AlterField(
17
+ model_name="adminflag",
18
+ name="key",
19
+ field=models.CharField(
20
+ choices=[
21
+ ("FV", "Folder View"),
22
+ ("RG", "Registration"),
23
+ ("NU", "Non Users"),
24
+ ("AU", "Auto Update"),
25
+ ("SO", "Search Index Optimize"),
26
+ ("IM", "Import Metadata"),
27
+ ("ST", "Send Telemetry"),
28
+ ],
29
+ db_index=True,
30
+ max_length=2,
31
+ ),
32
+ ),
33
+ migrations.AlterField(
34
+ model_name="timestamp",
35
+ name="key",
36
+ field=models.CharField(
37
+ choices=[
38
+ ("JA", "Janitor"),
39
+ ("VR", "Codex Version"),
40
+ ("SI", "Search Index UUID"),
41
+ ("AP", "API Key"),
42
+ ("TS", "Telemeter Sent"),
43
+ ],
44
+ db_index=True,
45
+ max_length=2,
46
+ ),
47
+ ),
48
+ ]
codex/models/admin.py CHANGED
@@ -39,6 +39,7 @@ class AdminFlag(BaseModel):
39
39
  AUTO_UPDATE = "AU"
40
40
  SEARCH_INDEX_OPTIMIZE = "SO"
41
41
  IMPORT_METADATA = "IM"
42
+ SEND_TELEMETRY = "ST"
42
43
 
43
44
  FALSE_DEFAULTS = frozenset({FlagChoices.AUTO_UPDATE})
44
45
 
@@ -86,6 +87,7 @@ class Timestamp(BaseModel):
86
87
  CODEX_VERSION = "VR", _("Codex Version")
87
88
  SEARCH_INDEX_UUID = "SI", _("Search Index UUID")
88
89
  API_KEY = "AP", _("API Key")
90
+ TELEMETER_SENT = "TS", _("Telemeter Sent")
89
91
 
90
92
  key = CharField(db_index=True, max_length=2, choices=TimestampChoices.choices)
91
93
  version = CharField(max_length=MAX_FIELD_LEN, default="")
@@ -25,7 +25,7 @@ from codex.settings.whitenoise import immutable_file_test
25
25
  # Undocumented Environment Variables #
26
26
  ######################################
27
27
  # SECURITY WARNING: don't run with debug turned on in production!
28
- DEBUG = bool(environ.get("DEBUG", "").lower() not in ("0", "false", ""))
28
+ DEBUG = bool(environ.get("DEBUG", "").lower() not in {"0", "false", ""})
29
29
  BUILD = environ.get("BUILD", False)
30
30
  # Slow query middleware
31
31
  # limit in seconds
@@ -1 +1 @@
1
- import{m as g,V as t}from"./VCheckboxBtn-DetOzpfX.js";import{a as A,u as I,V as l}from"./VSelectionControl-DTgtf_T6.js";import{F as B,an as U,P as R,av as D,G as E,h as G,S as M,cE as N,T as u,ar as r}from"./admin-drawer-panel-Crj9u2NV.js";const S=B({...A(),...U(g(),["inline"])},"VCheckbox"),q=R()({name:"VCheckbox",inheritAttrs:!1,props:S(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=E(),p=G(()=>e.id||`checkbox-${V}`);return M(()=>{const[b,v]=N(d),f=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,f,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},v,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{q as V};
1
+ import{m as g,V as t}from"./VCheckboxBtn-BpLxL6DP.js";import{a as A,u as I,V as l}from"./VSelectionControl-BTjn8uTI.js";import{F as B,an as U,P as R,av as D,G as E,h as G,S as M,cE as N,T as u,ar as r}from"./admin-drawer-panel-SQytza6T.js";const S=B({...A(),...U(g(),["inline"])},"VCheckbox"),q=R()({name:"VCheckbox",inheritAttrs:!1,props:S(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=E(),p=G(()=>e.id||`checkbox-${V}`);return M(()=>{const[b,v]=N(d),f=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,f,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},v,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{q as V};
@@ -1 +1 @@
1
- import{m as g,V as t}from"./VCheckboxBtn-DetOzpfX.js";import{a as A,u as I,V as l}from"./VSelectionControl-DTgtf_T6.js";import{F as B,an as U,P as R,av as D,G as E,h as G,S as M,cE as N,T as u,ar as r}from"./admin-drawer-panel-Crj9u2NV.js";const S=B({...A(),...U(g(),["inline"])},"VCheckbox"),q=R()({name:"VCheckbox",inheritAttrs:!1,props:S(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=E(),p=G(()=>e.id||`checkbox-${V}`);return M(()=>{const[b,v]=N(d),f=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,f,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},v,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{q as V};
1
+ import{m as g,V as t}from"./VCheckboxBtn-BpLxL6DP.js";import{a as A,u as I,V as l}from"./VSelectionControl-BTjn8uTI.js";import{F as B,an as U,P as R,av as D,G as E,h as G,S as M,cE as N,T as u,ar as r}from"./admin-drawer-panel-SQytza6T.js";const S=B({...A(),...U(g(),["inline"])},"VCheckbox"),q=R()({name:"VCheckbox",inheritAttrs:!1,props:S(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:d,slots:a}=c;const s=D(e,"modelValue"),{isFocused:n,focus:i,blur:m}=I(e),V=E(),p=G(()=>e.id||`checkbox-${V}`);return M(()=>{const[b,v]=N(d),f=l.filterProps(e),k=t.filterProps(e);return u(l,r({class:["v-checkbox",e.class]},b,f,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:p.value,focused:n.value,style:e.style}),{...a,default:o=>{let{id:h,messagesId:x,isDisabled:P,isReadonly:C,isValid:y}=o;return u(t,r(k,{id:h.value,"aria-describedby":x.value,disabled:P.value,readonly:C.value},v,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":F=>s.value=F,onFocus:i,onBlur:m}),a)}})}),{}}});export{q as V};
@@ -1 +1 @@
1
- import{c as f,d as o}from"./VSelectionControl-DTgtf_T6.js";import{F as v,be as V,P as I,av as c,h as l,S as h,an as k,T as x,ar as b}from"./admin-drawer-panel-Crj9u2NV.js";const C=v({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots: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 h(()=>{const a=k(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{B as V,C as m};
1
+ import{c as f,d as o}from"./VSelectionControl-BTjn8uTI.js";import{F as v,be as V,P as I,av as c,h as l,S as h,an as k,T as x,ar as b}from"./admin-drawer-panel-SQytza6T.js";const C=v({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots: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 h(()=>{const a=k(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{B as V,C as m};
@@ -1 +1 @@
1
- import{c as f,d as o}from"./VSelectionControl-DTgtf_T6.js";import{F as v,be as V,P as I,av as c,h as l,S as h,an as k,T as x,ar as b}from"./admin-drawer-panel-Crj9u2NV.js";const C=v({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots: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 h(()=>{const a=k(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{B as V,C as m};
1
+ import{c as f,d as o}from"./VSelectionControl-BTjn8uTI.js";import{F as v,be as V,P as I,av as c,h as l,S as h,an as k,T as x,ar as b}from"./admin-drawer-panel-SQytza6T.js";const C=v({indeterminate:Boolean,indeterminateIcon:{type:V,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=I()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots: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 h(()=>{const a=k(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{B as V,C as m};
@@ -1 +1 @@
1
- import{m as pe,u as Ce,V as ke,a as we,b as Se}from"./VSelect-wpuzLrPv.js";import{m as Fe,V as J}from"./VTextField-BJxb_QuX.js";import{F as Ie,an as Pe,b4 as De,P as Re,c0 as Ae,r as L,s as P,av as X,h as b,cQ as _e,ap as Te,cR as D,a as R,n as Y,ai as Me,S as Ee,T as i,V as N,ar as I,bx as Le,aZ as ee,cS as Ne,aQ as le,cT as Oe,bh as Ke,al as Ue,cU as Be,as as je,cV as ze,cW as He}from"./admin-drawer-panel-Crj9u2NV.js";import{m as Qe,u as We}from"./filter-CvqVrkAJ.js";import{g as $e}from"./VSelectionControl-DTgtf_T6.js";import{V as qe}from"./VCheckboxBtn-DetOzpfX.js";function Ze(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ge=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Qe({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ge(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var q;let{emit:A,slots:o}=g;const{t:O}=Ae(),y=L(),x=P(!1),p=P(!0),K=P(!1),Q=L(),W=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=Q.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=y.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=X(e,"modelValue",[],l=>ne(He(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),_=b(()=>!!(e.chips||o.chip)),V=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!V.value?((q=n.value[0])==null?void 0:q.title)??"":""),v=b({get:()=>C.value,set:l=>{var t;if(C.value=l??"",!e.multiple&&!V.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),C.value="")}l||(s.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(C,l=>{B?Y(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!V.value&&(C.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>p.value?"":v.value),k=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=k.value[0])==null?void 0:t.title))&&k.value.length>0&&!p.value&&!K.value}),z=b(()=>e.hideNoData&&!k.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=L(),{onListScroll:ve,onListKeydown:de}=Ce(H,y);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(ze(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.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===k.value[0].value})&&h(T.value[0]),p.value=!0),l.key==="ArrowDown"&&j.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),V.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&V.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=y.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],C.value=r&&!V.value?l.title:"",Y(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function Ve(l){K.value=!1}function ye(l){(l==null||l===""&&!e.multiple&&!V.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!V.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?C.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=k.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||k.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=J.filterProps(e);return i(J,I({ref:y},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,ye],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!V.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(ke,I({ref:Q,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:Ve,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!k.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:k.value},{default:w=>{var G;let{item:d,index:S,itemRef:f}=w;const Z=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((G=o.item)==null?void 0:G.call(o,{item:d,index:S,props:Z}))??i(ee,I(Z,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return p.value?d.title:Ze(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Oe(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},y)}});export{tl as V};
1
+ import{m as pe,u as Ce,V as ke,a as we,b as Se}from"./VSelect-Cwd7Ke2J.js";import{m as Fe,V as J}from"./VTextField-DKXmWQyx.js";import{F as Ie,an as Pe,b4 as De,P as Re,c0 as Ae,r as L,s as P,av as X,h as b,cQ as _e,ap as Te,cR as D,a as R,n as Y,ai as Me,S as Ee,T as i,V as N,ar as I,bx as Le,aZ as ee,cS as Ne,aQ as le,cT as Oe,bh as Ke,al as Ue,cU as Be,as as je,cV as ze,cW as He}from"./admin-drawer-panel-SQytza6T.js";import{m as Qe,u as We}from"./filter-ji46VTOR.js";import{g as $e}from"./VSelectionControl-BTjn8uTI.js";import{V as qe}from"./VCheckboxBtn-BpLxL6DP.js";function Ze(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ge=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Qe({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ge(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var q;let{emit:A,slots:o}=g;const{t:O}=Ae(),y=L(),x=P(!1),p=P(!0),K=P(!1),Q=L(),W=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=Q.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=y.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=X(e,"modelValue",[],l=>ne(He(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),_=b(()=>!!(e.chips||o.chip)),V=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!V.value?((q=n.value[0])==null?void 0:q.title)??"":""),v=b({get:()=>C.value,set:l=>{var t;if(C.value=l??"",!e.multiple&&!V.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),C.value="")}l||(s.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(C,l=>{B?Y(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!V.value&&(C.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>p.value?"":v.value),k=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=k.value[0])==null?void 0:t.title))&&k.value.length>0&&!p.value&&!K.value}),z=b(()=>e.hideNoData&&!k.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=L(),{onListScroll:ve,onListKeydown:de}=Ce(H,y);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(ze(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.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===k.value[0].value})&&h(T.value[0]),p.value=!0),l.key==="ArrowDown"&&j.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),V.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&V.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=y.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],C.value=r&&!V.value?l.title:"",Y(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function Ve(l){K.value=!1}function ye(l){(l==null||l===""&&!e.multiple&&!V.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!V.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?C.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=k.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||k.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=J.filterProps(e);return i(J,I({ref:y},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,ye],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!V.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(ke,I({ref:Q,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:Ve,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!k.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:k.value},{default:w=>{var G;let{item:d,index:S,itemRef:f}=w;const Z=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((G=o.item)==null?void 0:G.call(o,{item:d,index:S,props:Z}))??i(ee,I(Z,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return p.value?d.title:Ze(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Oe(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},y)}});export{tl as V};
@@ -1 +1 @@
1
- import{m as pe,u as Ce,V as ke,a as we,b as Se}from"./VSelect-wpuzLrPv.js";import{m as Fe,V as J}from"./VTextField-BJxb_QuX.js";import{F as Ie,an as Pe,b4 as De,P as Re,c0 as Ae,r as L,s as P,av as X,h as b,cQ as _e,ap as Te,cR as D,a as R,n as Y,ai as Me,S as Ee,T as i,V as N,ar as I,bx as Le,aZ as ee,cS as Ne,aQ as le,cT as Oe,bh as Ke,al as Ue,cU as Be,as as je,cV as ze,cW as He}from"./admin-drawer-panel-Crj9u2NV.js";import{m as Qe,u as We}from"./filter-CvqVrkAJ.js";import{g as $e}from"./VSelectionControl-DTgtf_T6.js";import{V as qe}from"./VCheckboxBtn-DetOzpfX.js";function Ze(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ge=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Qe({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ge(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var q;let{emit:A,slots:o}=g;const{t:O}=Ae(),y=L(),x=P(!1),p=P(!0),K=P(!1),Q=L(),W=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=Q.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=y.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=X(e,"modelValue",[],l=>ne(He(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),_=b(()=>!!(e.chips||o.chip)),V=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!V.value?((q=n.value[0])==null?void 0:q.title)??"":""),v=b({get:()=>C.value,set:l=>{var t;if(C.value=l??"",!e.multiple&&!V.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),C.value="")}l||(s.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(C,l=>{B?Y(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!V.value&&(C.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>p.value?"":v.value),k=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=k.value[0])==null?void 0:t.title))&&k.value.length>0&&!p.value&&!K.value}),z=b(()=>e.hideNoData&&!k.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=L(),{onListScroll:ve,onListKeydown:de}=Ce(H,y);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(ze(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.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===k.value[0].value})&&h(T.value[0]),p.value=!0),l.key==="ArrowDown"&&j.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),V.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&V.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=y.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],C.value=r&&!V.value?l.title:"",Y(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function Ve(l){K.value=!1}function ye(l){(l==null||l===""&&!e.multiple&&!V.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!V.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?C.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=k.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||k.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=J.filterProps(e);return i(J,I({ref:y},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,ye],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!V.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(ke,I({ref:Q,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:Ve,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!k.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:k.value},{default:w=>{var G;let{item:d,index:S,itemRef:f}=w;const Z=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((G=o.item)==null?void 0:G.call(o,{item:d,index:S,props:Z}))??i(ee,I(Z,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return p.value?d.title:Ze(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Oe(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},y)}});export{tl as V};
1
+ import{m as pe,u as Ce,V as ke,a as we,b as Se}from"./VSelect-Cwd7Ke2J.js";import{m as Fe,V as J}from"./VTextField-DKXmWQyx.js";import{F as Ie,an as Pe,b4 as De,P as Re,c0 as Ae,r as L,s as P,av as X,h as b,cQ as _e,ap as Te,cR as D,a as R,n as Y,ai as Me,S as Ee,T as i,V as N,ar as I,bx as Le,aZ as ee,cS as Ne,aQ as le,cT as Oe,bh as Ke,al as Ue,cU as Be,as as je,cV as ze,cW as He}from"./admin-drawer-panel-SQytza6T.js";import{m as Qe,u as We}from"./filter-ji46VTOR.js";import{g as $e}from"./VSelectionControl-BTjn8uTI.js";import{V as qe}from"./VCheckboxBtn-BpLxL6DP.js";function Ze(e,g,A){if(g==null)return e;if(Array.isArray(g))throw new Error("Multiple matches is not implemented");return typeof g=="number"&&~g?i(N,null,[i("span",{class:"v-combobox__unmask"},[e.substr(0,g)]),i("span",{class:"v-combobox__mask"},[e.substr(g,A)]),i("span",{class:"v-combobox__unmask"},[e.substr(g+A)])]):e}const Ge=Ie({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Qe({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...Pe(Fe({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...De({transition:!1})},"VCombobox"),tl=Re()({name:"VCombobox",props:Ge(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,g){var q;let{emit:A,slots:o}=g;const{t:O}=Ae(),y=L(),x=P(!1),p=P(!0),K=P(!1),Q=L(),W=L(),U=X(e,"menu"),c=b({get:()=>U.value,set:l=>{var t;U.value&&!l&&((t=Q.value)!=null&&t.ΨopenChildren)||(U.value=l)}}),s=P(-1);let B=!1;const ae=b(()=>{var l;return(l=y.value)==null?void 0:l.color}),$=b(()=>c.value?e.closeText:e.openText),{items:te,transformIn:ne,transformOut:ue}=_e(e),{textColorClasses:oe,textColorStyles:ie}=Te(ae),n=X(e,"modelValue",[],l=>ne(He(l)),l=>{const t=ue(l);return e.multiple?t:t[0]??null}),F=$e(),_=b(()=>!!(e.chips||o.chip)),V=b(()=>_.value||!!o.selection),C=P(!e.multiple&&!V.value?((q=n.value[0])==null?void 0:q.title)??"":""),v=b({get:()=>C.value,set:l=>{var t;if(C.value=l??"",!e.multiple&&!V.value&&(n.value=[D(e,l)]),l&&e.multiple&&((t=e.delimiters)!=null&&t.length)){const r=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));r.length>1&&(r.forEach(a=>{a=a.trim(),a&&h(D(e,a))}),C.value="")}l||(s.value=-1),p.value=!l}}),se=b(()=>typeof e.counterValue=="function"?e.counterValue(n.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?n.value.length:v.value.length);R(C,l=>{B?Y(()=>B=!1):x.value&&!c.value&&(c.value=!0),A("update:search",l)}),R(n,l=>{var t;!e.multiple&&!V.value&&(C.value=((t=l[0])==null?void 0:t.title)??"")});const{filteredItems:T,getMatches:re}=We(e,te,()=>p.value?"":v.value),k=b(()=>e.hideSelected?T.value.filter(l=>!n.value.some(t=>t.value===l.value)):T.value),ce=b(()=>n.value.map(l=>l.value)),j=b(()=>{var t;return(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&v.value===((t=k.value[0])==null?void 0:t.title))&&k.value.length>0&&!p.value&&!K.value}),z=b(()=>e.hideNoData&&!k.value.length||e.readonly||(F==null?void 0:F.isReadonly.value)),H=L(),{onListScroll:ve,onListKeydown:de}=Ce(H,y);function fe(l){B=!0,e.openOnClear&&(c.value=!0)}function me(){z.value||(c.value=!0)}function be(l){z.value||(x.value&&(l.preventDefault(),l.stopPropagation()),c.value=!c.value)}function he(l){var a;if(ze(l)||e.readonly||F!=null&&F.isReadonly.value)return;const t=y.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===k.value[0].value})&&h(T.value[0]),p.value=!0),l.key==="ArrowDown"&&j.value&&((a=H.value)==null||a.focus("next")),l.key==="Enter"&&v.value&&(h(D(e,v.value)),V.value&&(C.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&V.value&&n.value.length>0&&!v.value)return h(n.value[0],!1);if(~s.value){const u=s.value;h(n.value[s.value],!1),s.value=u>=r-1?r-2:u}else l.key==="Backspace"&&!v.value&&(s.value=r-1)}if(e.multiple){if(l.key==="ArrowLeft"){if(s.value<0&&t>0)return;const u=s.value>-1?s.value-1:r-1;n.value[u]?s.value=u:(s.value=-1,y.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,y.value.setSelectionRange(0,0))}}}function ge(){var l;x.value&&(p.value=!0,(l=y.value)==null||l.focus())}function h(l){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const r=n.value.findIndex(u=>e.valueComparator(u.value,l.value)),a=t??!~r;if(~r){const u=a?[...n.value,l]:[...n.value];u.splice(r,1),n.value=u}else a&&(n.value=[...n.value,l]);e.clearOnSelect&&(v.value="")}else{const r=t!==!1;n.value=r?[l]:[],C.value=r&&!V.value?l.title:"",Y(()=>{c.value=!1,p.value=!0})}}function xe(l){x.value=!0,setTimeout(()=>{K.value=!0})}function Ve(l){K.value=!1}function ye(l){(l==null||l===""&&!e.multiple&&!V.value)&&(n.value=[])}return R(x,(l,t)=>{if(!(l||l===t)&&(s.value=-1,c.value=!1,v.value)){if(e.multiple){h(D(e,v.value));return}if(!V.value)return;n.value.some(r=>{let{title:a}=r;return a===v.value})?C.value="":h(D(e,v.value))}}),R(c,()=>{if(!e.hideSelected&&c.value&&n.value.length){const l=k.value.findIndex(t=>n.value.some(r=>e.valueComparator(r.value,t.value)));Me&&window.requestAnimationFrame(()=>{var t;l>=0&&((t=W.value)==null||t.scrollToIndex(l))})}}),R(()=>e.items,(l,t)=>{c.value||x.value&&!t.length&&l.length&&(c.value=!0)}),Ee(()=>{const l=!!(!e.hideNoData||k.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),t=n.value.length>0,r=J.filterProps(e);return i(J,I({ref:y},r,{modelValue:v.value,"onUpdate:modelValue":[a=>v.value=a,ye],focused:x.value,"onUpdate:focused":a=>x.value=a,validationValue:n.externalValue,counterValue:se.value,dirty:t,class:["v-combobox",{"v-combobox--active-menu":c.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!V.value,"v-combobox--selecting-index":s.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:e.readonly,placeholder:t?void 0:e.placeholder,"onClick:clear":fe,"onMousedown:control":me,onKeydown:he}),{...o,default:()=>i(N,null,[i(ke,I({ref:Q,modelValue:c.value,"onUpdate:modelValue":a=>c.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:z.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterLeave:ge},e.menuProps),{default:()=>[l&&i(Le,I({ref:H,selected:ce.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:xe,onFocusout:Ve,onScrollPassive:ve,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},e.listProps),{default:()=>{var a,u,m;return[(a=o["prepend-item"])==null?void 0:a.call(o),!k.value.length&&!e.hideNoData&&(((u=o["no-data"])==null?void 0:u.call(o))??i(ee,{title:O(e.noDataText)},null)),i(we,{ref:W,renderless:!0,items:k.value},{default:w=>{var G;let{item:d,index:S,itemRef:f}=w;const Z=I(d.props,{ref:f,key:S,active:j.value&&S===0?!0:void 0,onClick:()=>h(d,null)});return((G=o.item)==null?void 0:G.call(o,{item:d,index:S,props:Z}))??i(ee,I(Z,{role:"option"}),{prepend:M=>{let{isSelected:E}=M;return i(N,null,[e.multiple&&!e.hideSelected?i(qe,{key:d.value,modelValue:E,ripple:!1,tabindex:"-1"},null):void 0,d.props.prependAvatar&&i(Ne,{image:d.props.prependAvatar},null),d.props.prependIcon&&i(le,{icon:d.props.prependIcon},null)])},title:()=>{var M,E;return p.value?d.title:Ze(d.title,(M=re(d))==null?void 0:M.title,((E=v.value)==null?void 0:E.length)??0)}})}}),(m=o["append-item"])==null?void 0:m.call(o)]}})]}),n.value.map((a,u)=>{function m(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const w={"onClick:close":m,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),m(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},d=_.value?!!o.chip:!!o.selection,S=d?Oe(_.value?o.chip({item:a,index:u,props:w}):o.selection({item:a,index:u})):void 0;if(!(d&&!S))return i("div",{key:a.value,class:["v-combobox__selection",u===s.value&&["v-combobox__selection--selected",oe.value]],style:u===s.value?ie.value:{}},[_.value?o.chip?i(Ke,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):i(Se,I({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},w),null):S??i("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&u<n.value.length-1&&i("span",{class:"v-combobox__selection-comma"},[Ue(",")])])])})]),"append-inner":function(){var w;for(var a=arguments.length,u=new Array(a),m=0;m<a;m++)u[m]=arguments[m];return i(N,null,[(w=o["append-inner"])==null?void 0:w.call(o,...u),(!e.hideNoData||e.items.length)&&e.menuIcon?i(le,{class:"v-combobox__menu-icon",icon:e.menuIcon,onMousedown:be,onClick:Be,"aria-label":O($.value),title:O($.value),tabindex:"-1"},null):void 0])}})}),je({isFocused:x,isPristine:p,menu:c,search:v,selectionIndex:s,filteredItems:T,select:h},y)}});export{tl as V};
@@ -1 +1 @@
1
- import{_ as F,$ as S,aF as D,T as v,a0 as E,al as V,aH as T,aq as b,F as $,db as h,dc as A,P as L,av as _,aB as k,r as w,ai as I,a as P,n as R,S as N,df as y,ar as m,bh as O,as as q,dg as z}from"./admin-drawer-panel-Crj9u2NV.js";const H={name:"ConfirmFooter",props:{confirmText:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["confirm","cancel"]},M={class:"confirmFooter"};function U(e,l,f,c,s,g){return S(),D("footer",M,[v(b,{class:"confirmButton",disabled:f.disabled,onClick:l[0]||(l[0]=t=>e.$emit("confirm"))},{default:E(()=>[V(T(f.confirmText),1)]),_:1},8,["disabled"]),v(b,{class:"cancelButton",onClick:l[1]||(l[1]=t=>e.$emit("cancel"))},{default:E(()=>[V(" Cancel ")]),_:1})])}const G=F(H,[["render",U],["__scopeId","data-v-24df1550"]]),W=$({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,...h({origin:"center center",scrollStrategy:"block",transition:{component:A},zIndex:2400})},"VDialog"),J=L()({name:"VDialog",props:W(),emits:{"update:modelValue":e=>!0,afterLeave:()=>!0},setup(e,l){let{emit:f,slots:c}=l;const s=_(e,"modelValue"),{scopeId:g}=k(),t=w();function p(a){var r,u;const n=a.relatedTarget,i=a.target;if(n!==i&&((r=t.value)!=null&&r.contentEl)&&((u=t.value)!=null&&u.globalTop)&&![document,t.value.contentEl].includes(i)&&!t.value.contentEl.contains(i)){const o=z(t.value.contentEl);if(!o.length)return;const d=o[0],C=o[o.length-1];n===d?C.focus():d.focus()}}I&&P(()=>s.value&&e.retainFocus,a=>{a?document.addEventListener("focusin",p):document.removeEventListener("focusin",p)},{immediate:!0});function B(){var a;(a=t.value)!=null&&a.contentEl&&!t.value.contentEl.contains(document.activeElement)&&t.value.contentEl.focus({preventScroll:!0})}function x(){f("afterLeave")}return P(s,async a=>{var n;a||(await R(),(n=t.value.activatorEl)==null||n.focus({preventScroll:!0}))}),N(()=>{const a=y.filterProps(e),n=m({"aria-haspopup":"dialog","aria-expanded":String(s.value)},e.activatorProps),i=m({tabindex:-1},e.contentProps);return v(y,m({ref:t,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},a,{modelValue:s.value,"onUpdate:modelValue":r=>s.value=r,"aria-modal":"true",activatorProps:n,contentProps:i,role:"dialog",onAfterEnter:B,onAfterLeave:x},g),{activator:c.activator,default:function(){for(var r=arguments.length,u=new Array(r),o=0;o<r;o++)u[o]=arguments[o];return v(O,{root:"VDialog"},{default:()=>{var d;return[(d=c.default)==null?void 0:d.call(c,...u)]}})}})}),q({},t)}});export{G as C,J as V};
1
+ import{_ as F,$ as S,aF as D,T as v,a0 as E,al as V,aH as T,aq as b,F as h,dc as $,dd as A,P as L,av as _,aB as k,r as w,ai as I,a as P,n as R,S as N,dg as y,ar as m,bh as O,as as q,dh as z}from"./admin-drawer-panel-SQytza6T.js";const H={name:"ConfirmFooter",props:{confirmText:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["confirm","cancel"]},M={class:"confirmFooter"};function U(e,l,f,c,s,g){return S(),D("footer",M,[v(b,{class:"confirmButton",disabled:f.disabled,onClick:l[0]||(l[0]=t=>e.$emit("confirm"))},{default:E(()=>[V(T(f.confirmText),1)]),_:1},8,["disabled"]),v(b,{class:"cancelButton",onClick:l[1]||(l[1]=t=>e.$emit("cancel"))},{default:E(()=>[V(" Cancel ")]),_:1})])}const G=F(H,[["render",U],["__scopeId","data-v-24df1550"]]),W=h({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,...$({origin:"center center",scrollStrategy:"block",transition:{component:A},zIndex:2400})},"VDialog"),J=L()({name:"VDialog",props:W(),emits:{"update:modelValue":e=>!0,afterLeave:()=>!0},setup(e,l){let{emit:f,slots:c}=l;const s=_(e,"modelValue"),{scopeId:g}=k(),t=w();function p(a){var r,u;const n=a.relatedTarget,i=a.target;if(n!==i&&((r=t.value)!=null&&r.contentEl)&&((u=t.value)!=null&&u.globalTop)&&![document,t.value.contentEl].includes(i)&&!t.value.contentEl.contains(i)){const o=z(t.value.contentEl);if(!o.length)return;const d=o[0],C=o[o.length-1];n===d?C.focus():d.focus()}}I&&P(()=>s.value&&e.retainFocus,a=>{a?document.addEventListener("focusin",p):document.removeEventListener("focusin",p)},{immediate:!0});function B(){var a;(a=t.value)!=null&&a.contentEl&&!t.value.contentEl.contains(document.activeElement)&&t.value.contentEl.focus({preventScroll:!0})}function x(){f("afterLeave")}return P(s,async a=>{var n;a||(await R(),(n=t.value.activatorEl)==null||n.focus({preventScroll:!0}))}),N(()=>{const a=y.filterProps(e),n=m({"aria-haspopup":"dialog","aria-expanded":String(s.value)},e.activatorProps),i=m({tabindex:-1},e.contentProps);return v(y,m({ref:t,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},a,{modelValue:s.value,"onUpdate:modelValue":r=>s.value=r,"aria-modal":"true",activatorProps:n,contentProps:i,role:"dialog",onAfterEnter:B,onAfterLeave:x},g),{activator:c.activator,default:function(){for(var r=arguments.length,u=new Array(r),o=0;o<r;o++)u[o]=arguments[o];return v(O,{root:"VDialog"},{default:()=>{var d;return[(d=c.default)==null?void 0:d.call(c,...u)]}})}})}),q({},t)}});export{G as C,J as V};
@@ -1 +1 @@
1
- import{_ as F,$ as S,aF as D,T as v,a0 as E,al as V,aH as T,aq as b,F as $,db as h,dc as A,P as L,av as _,aB as k,r as w,ai as I,a as P,n as R,S as N,df as y,ar as m,bh as O,as as q,dg as z}from"./admin-drawer-panel-Crj9u2NV.js";const H={name:"ConfirmFooter",props:{confirmText:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["confirm","cancel"]},M={class:"confirmFooter"};function U(e,l,f,c,s,g){return S(),D("footer",M,[v(b,{class:"confirmButton",disabled:f.disabled,onClick:l[0]||(l[0]=t=>e.$emit("confirm"))},{default:E(()=>[V(T(f.confirmText),1)]),_:1},8,["disabled"]),v(b,{class:"cancelButton",onClick:l[1]||(l[1]=t=>e.$emit("cancel"))},{default:E(()=>[V(" Cancel ")]),_:1})])}const G=F(H,[["render",U],["__scopeId","data-v-24df1550"]]),W=$({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,...h({origin:"center center",scrollStrategy:"block",transition:{component:A},zIndex:2400})},"VDialog"),J=L()({name:"VDialog",props:W(),emits:{"update:modelValue":e=>!0,afterLeave:()=>!0},setup(e,l){let{emit:f,slots:c}=l;const s=_(e,"modelValue"),{scopeId:g}=k(),t=w();function p(a){var r,u;const n=a.relatedTarget,i=a.target;if(n!==i&&((r=t.value)!=null&&r.contentEl)&&((u=t.value)!=null&&u.globalTop)&&![document,t.value.contentEl].includes(i)&&!t.value.contentEl.contains(i)){const o=z(t.value.contentEl);if(!o.length)return;const d=o[0],C=o[o.length-1];n===d?C.focus():d.focus()}}I&&P(()=>s.value&&e.retainFocus,a=>{a?document.addEventListener("focusin",p):document.removeEventListener("focusin",p)},{immediate:!0});function B(){var a;(a=t.value)!=null&&a.contentEl&&!t.value.contentEl.contains(document.activeElement)&&t.value.contentEl.focus({preventScroll:!0})}function x(){f("afterLeave")}return P(s,async a=>{var n;a||(await R(),(n=t.value.activatorEl)==null||n.focus({preventScroll:!0}))}),N(()=>{const a=y.filterProps(e),n=m({"aria-haspopup":"dialog","aria-expanded":String(s.value)},e.activatorProps),i=m({tabindex:-1},e.contentProps);return v(y,m({ref:t,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},a,{modelValue:s.value,"onUpdate:modelValue":r=>s.value=r,"aria-modal":"true",activatorProps:n,contentProps:i,role:"dialog",onAfterEnter:B,onAfterLeave:x},g),{activator:c.activator,default:function(){for(var r=arguments.length,u=new Array(r),o=0;o<r;o++)u[o]=arguments[o];return v(O,{root:"VDialog"},{default:()=>{var d;return[(d=c.default)==null?void 0:d.call(c,...u)]}})}})}),q({},t)}});export{G as C,J as V};
1
+ import{_ as F,$ as S,aF as D,T as v,a0 as E,al as V,aH as T,aq as b,F as h,dc as $,dd as A,P as L,av as _,aB as k,r as w,ai as I,a as P,n as R,S as N,dg as y,ar as m,bh as O,as as q,dh as z}from"./admin-drawer-panel-SQytza6T.js";const H={name:"ConfirmFooter",props:{confirmText:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["confirm","cancel"]},M={class:"confirmFooter"};function U(e,l,f,c,s,g){return S(),D("footer",M,[v(b,{class:"confirmButton",disabled:f.disabled,onClick:l[0]||(l[0]=t=>e.$emit("confirm"))},{default:E(()=>[V(T(f.confirmText),1)]),_:1},8,["disabled"]),v(b,{class:"cancelButton",onClick:l[1]||(l[1]=t=>e.$emit("cancel"))},{default:E(()=>[V(" Cancel ")]),_:1})])}const G=F(H,[["render",U],["__scopeId","data-v-24df1550"]]),W=h({fullscreen:Boolean,retainFocus:{type:Boolean,default:!0},scrollable:Boolean,...$({origin:"center center",scrollStrategy:"block",transition:{component:A},zIndex:2400})},"VDialog"),J=L()({name:"VDialog",props:W(),emits:{"update:modelValue":e=>!0,afterLeave:()=>!0},setup(e,l){let{emit:f,slots:c}=l;const s=_(e,"modelValue"),{scopeId:g}=k(),t=w();function p(a){var r,u;const n=a.relatedTarget,i=a.target;if(n!==i&&((r=t.value)!=null&&r.contentEl)&&((u=t.value)!=null&&u.globalTop)&&![document,t.value.contentEl].includes(i)&&!t.value.contentEl.contains(i)){const o=z(t.value.contentEl);if(!o.length)return;const d=o[0],C=o[o.length-1];n===d?C.focus():d.focus()}}I&&P(()=>s.value&&e.retainFocus,a=>{a?document.addEventListener("focusin",p):document.removeEventListener("focusin",p)},{immediate:!0});function B(){var a;(a=t.value)!=null&&a.contentEl&&!t.value.contentEl.contains(document.activeElement)&&t.value.contentEl.focus({preventScroll:!0})}function x(){f("afterLeave")}return P(s,async a=>{var n;a||(await R(),(n=t.value.activatorEl)==null||n.focus({preventScroll:!0}))}),N(()=>{const a=y.filterProps(e),n=m({"aria-haspopup":"dialog","aria-expanded":String(s.value)},e.activatorProps),i=m({tabindex:-1},e.contentProps);return v(y,m({ref:t,class:["v-dialog",{"v-dialog--fullscreen":e.fullscreen,"v-dialog--scrollable":e.scrollable},e.class],style:e.style},a,{modelValue:s.value,"onUpdate:modelValue":r=>s.value=r,"aria-modal":"true",activatorProps:n,contentProps:i,role:"dialog",onAfterEnter:B,onAfterLeave:x},g),{activator:c.activator,default:function(){for(var r=arguments.length,u=new Array(r),o=0;o<r;o++)u[o]=arguments[o];return v(O,{root:"VDialog"},{default:()=>{var d;return[(d=c.default)==null?void 0:d.call(c,...u)]}})}})}),q({},t)}});export{G as C,J as V};
@@ -1 +1 @@
1
- import{F as P,N as V,c3 as L,P as b,i as C,c7 as z,S as m,T as l,aU as I,bY as $,bS as j,be as E,cf as F,az as h,h as r,b7 as N,bh as T,aQ as O,cd as Q,c2 as Y,bf as U,ax as w,c5 as X,cg as q,bg as H,p as J,cX as K,cY as M,O as W,c1 as Z,Q as ee,aC as ae,aA as t}from"./admin-drawer-panel-Crj9u2NV.js";const p=Symbol.for("vuetify:v-expansion-panel"),A=P({...V(),...L()},"VExpansionPanelText"),S=b()({name:"VExpansionPanelText",props:A(),setup(e,d){let{slots:n}=d;const a=C(p);if(!a)throw new Error("[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel");const{hasContent:i,onAfterLeave:u}=z(e,a.isSelected);return m(()=>l(j,{onAfterLeave:u},{default:()=>{var o;return[I(l("div",{class:["v-expansion-panel-text",e.class],style:e.style},[n.default&&i.value&&l("div",{class:"v-expansion-panel-text__wrapper"},[(o=n.default)==null?void 0:o.call(n)])]),[[$,a.isSelected.value]])]}})),{}}}),B=P({color:String,expandIcon:{type:E,default:"$expand"},collapseIcon:{type:E,default:"$collapse"},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...V()},"VExpansionPanelTitle"),k=b()({name:"VExpansionPanelTitle",directives:{Ripple:F},props:B(),setup(e,d){let{slots:n}=d;const a=C(p);if(!a)throw new Error("[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel");const{backgroundColorClasses:i,backgroundColorStyles:u}=h(e,"color"),o=r(()=>({collapseIcon:e.collapseIcon,disabled:a.disabled.value,expanded:a.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),v=r(()=>a.isSelected.value?e.collapseIcon:e.expandIcon);return m(()=>{var f;return I(l("button",{class:["v-expansion-panel-title",{"v-expansion-panel-title--active":a.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},i.value,e.class],style:[u.value,e.style],type:"button",tabindex:a.disabled.value?-1:void 0,disabled:a.disabled.value,"aria-expanded":a.isSelected.value,onClick:e.readonly?void 0:a.toggle},[l("span",{class:"v-expansion-panel-title__overlay"},null),(f=n.default)==null?void 0:f.call(n,o.value),!e.hideActions&&l(T,{defaults:{VIcon:{icon:v.value}}},{default:()=>{var x;return[l("span",{class:"v-expansion-panel-title__icon"},[((x=n.actions)==null?void 0:x.call(n,o.value))??l(O,null,null)])]}})]),[[N("ripple"),e.ripple]])}),{}}}),_=P({title:String,text:String,bgColor:String,...Q(),...Y(),...U(),...w(),...B(),...A()},"VExpansionPanel"),se=b()({name:"VExpansionPanel",props:_(),emits:{"group:selected":e=>!0},setup(e,d){let{slots:n}=d;const a=X(e,p),{backgroundColorClasses:i,backgroundColorStyles:u}=h(e,"bgColor"),{elevationClasses:o}=q(e),{roundedClasses:v}=H(e),f=r(()=>(a==null?void 0:a.disabled.value)||e.disabled),x=r(()=>a.group.items.value.reduce((c,s,y)=>(a.group.selected.value.includes(s.id)&&c.push(y),c),[])),D=r(()=>{const c=a.group.items.value.findIndex(s=>s.id===a.id);return!a.isSelected.value&&x.value.some(s=>s-c===1)}),R=r(()=>{const c=a.group.items.value.findIndex(s=>s.id===a.id);return!a.isSelected.value&&x.value.some(s=>s-c===-1)});return J(p,a),m(()=>{const c=!!(n.text||e.text),s=!!(n.title||e.title),y=k.filterProps(e),G=S.filterProps(e);return l(e.tag,{class:["v-expansion-panel",{"v-expansion-panel--active":a.isSelected.value,"v-expansion-panel--before-active":D.value,"v-expansion-panel--after-active":R.value,"v-expansion-panel--disabled":f.value},v.value,i.value,e.class],style:[u.value,e.style]},{default:()=>[l("div",{class:["v-expansion-panel__shadow",...o.value]},null),l(T,{defaults:{VExpansionPanelTitle:{...y},VExpansionPanelText:{...G}}},{default:()=>{var g;return[s&&l(k,{key:"title"},{default:()=>[n.title?n.title():e.title]}),c&&l(S,{key:"text"},{default:()=>[n.text?n.text():e.text]}),(g=n.default)==null?void 0:g.call(n)]}})]})}),{groupItem:a}}}),ne=["default","accordion","inset","popout"],le=P({flat:Boolean,...K(),...M(_(),["bgColor","collapseIcon","color","eager","elevation","expandIcon","focusable","hideActions","readonly","ripple","rounded","tile","static"]),...W(),...V(),...w(),variant:{type:String,default:"default",validator:e=>ne.includes(e)}},"VExpansionPanels"),oe=b()({name:"VExpansionPanels",props:le(),emits:{"update:modelValue":e=>!0},setup(e,d){let{slots:n}=d;const{next:a,prev:i}=Z(e,p),{themeClasses:u}=ee(e),o=r(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return ae({VExpansionPanel:{bgColor:t(e,"bgColor"),collapseIcon:t(e,"collapseIcon"),color:t(e,"color"),eager:t(e,"eager"),elevation:t(e,"elevation"),expandIcon:t(e,"expandIcon"),focusable:t(e,"focusable"),hideActions:t(e,"hideActions"),readonly:t(e,"readonly"),ripple:t(e,"ripple"),rounded:t(e,"rounded"),static:t(e,"static")}}),m(()=>l(e.tag,{class:["v-expansion-panels",{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},u.value,o.value,e.class],style:e.style},{default:()=>{var v;return[(v=n.default)==null?void 0:v.call(n,{prev:i,next:a})]}})),{next:a,prev:i}}});export{se as V,k as a,S as b,oe as c};
1
+ import{F as P,N as V,c3 as L,P as b,i as C,c7 as z,S as m,T as l,aU as I,bY as $,bS as j,be as E,cf as F,az as h,h as r,b7 as N,bh as T,aQ as O,cd as Q,c2 as Y,bf as U,ax as w,c5 as X,cg as q,bg as H,p as J,cX as K,cY as M,O as W,c1 as Z,Q as ee,aC as ae,aA as t}from"./admin-drawer-panel-SQytza6T.js";const p=Symbol.for("vuetify:v-expansion-panel"),A=P({...V(),...L()},"VExpansionPanelText"),S=b()({name:"VExpansionPanelText",props:A(),setup(e,d){let{slots:n}=d;const a=C(p);if(!a)throw new Error("[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel");const{hasContent:i,onAfterLeave:u}=z(e,a.isSelected);return m(()=>l(j,{onAfterLeave:u},{default:()=>{var o;return[I(l("div",{class:["v-expansion-panel-text",e.class],style:e.style},[n.default&&i.value&&l("div",{class:"v-expansion-panel-text__wrapper"},[(o=n.default)==null?void 0:o.call(n)])]),[[$,a.isSelected.value]])]}})),{}}}),B=P({color:String,expandIcon:{type:E,default:"$expand"},collapseIcon:{type:E,default:"$collapse"},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...V()},"VExpansionPanelTitle"),k=b()({name:"VExpansionPanelTitle",directives:{Ripple:F},props:B(),setup(e,d){let{slots:n}=d;const a=C(p);if(!a)throw new Error("[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel");const{backgroundColorClasses:i,backgroundColorStyles:u}=h(e,"color"),o=r(()=>({collapseIcon:e.collapseIcon,disabled:a.disabled.value,expanded:a.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),v=r(()=>a.isSelected.value?e.collapseIcon:e.expandIcon);return m(()=>{var f;return I(l("button",{class:["v-expansion-panel-title",{"v-expansion-panel-title--active":a.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},i.value,e.class],style:[u.value,e.style],type:"button",tabindex:a.disabled.value?-1:void 0,disabled:a.disabled.value,"aria-expanded":a.isSelected.value,onClick:e.readonly?void 0:a.toggle},[l("span",{class:"v-expansion-panel-title__overlay"},null),(f=n.default)==null?void 0:f.call(n,o.value),!e.hideActions&&l(T,{defaults:{VIcon:{icon:v.value}}},{default:()=>{var x;return[l("span",{class:"v-expansion-panel-title__icon"},[((x=n.actions)==null?void 0:x.call(n,o.value))??l(O,null,null)])]}})]),[[N("ripple"),e.ripple]])}),{}}}),_=P({title:String,text:String,bgColor:String,...Q(),...Y(),...U(),...w(),...B(),...A()},"VExpansionPanel"),se=b()({name:"VExpansionPanel",props:_(),emits:{"group:selected":e=>!0},setup(e,d){let{slots:n}=d;const a=X(e,p),{backgroundColorClasses:i,backgroundColorStyles:u}=h(e,"bgColor"),{elevationClasses:o}=q(e),{roundedClasses:v}=H(e),f=r(()=>(a==null?void 0:a.disabled.value)||e.disabled),x=r(()=>a.group.items.value.reduce((c,s,y)=>(a.group.selected.value.includes(s.id)&&c.push(y),c),[])),D=r(()=>{const c=a.group.items.value.findIndex(s=>s.id===a.id);return!a.isSelected.value&&x.value.some(s=>s-c===1)}),R=r(()=>{const c=a.group.items.value.findIndex(s=>s.id===a.id);return!a.isSelected.value&&x.value.some(s=>s-c===-1)});return J(p,a),m(()=>{const c=!!(n.text||e.text),s=!!(n.title||e.title),y=k.filterProps(e),G=S.filterProps(e);return l(e.tag,{class:["v-expansion-panel",{"v-expansion-panel--active":a.isSelected.value,"v-expansion-panel--before-active":D.value,"v-expansion-panel--after-active":R.value,"v-expansion-panel--disabled":f.value},v.value,i.value,e.class],style:[u.value,e.style]},{default:()=>[l("div",{class:["v-expansion-panel__shadow",...o.value]},null),l(T,{defaults:{VExpansionPanelTitle:{...y},VExpansionPanelText:{...G}}},{default:()=>{var g;return[s&&l(k,{key:"title"},{default:()=>[n.title?n.title():e.title]}),c&&l(S,{key:"text"},{default:()=>[n.text?n.text():e.text]}),(g=n.default)==null?void 0:g.call(n)]}})]})}),{groupItem:a}}}),ne=["default","accordion","inset","popout"],le=P({flat:Boolean,...K(),...M(_(),["bgColor","collapseIcon","color","eager","elevation","expandIcon","focusable","hideActions","readonly","ripple","rounded","tile","static"]),...W(),...V(),...w(),variant:{type:String,default:"default",validator:e=>ne.includes(e)}},"VExpansionPanels"),oe=b()({name:"VExpansionPanels",props:le(),emits:{"update:modelValue":e=>!0},setup(e,d){let{slots:n}=d;const{next:a,prev:i}=Z(e,p),{themeClasses:u}=ee(e),o=r(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return ae({VExpansionPanel:{bgColor:t(e,"bgColor"),collapseIcon:t(e,"collapseIcon"),color:t(e,"color"),eager:t(e,"eager"),elevation:t(e,"elevation"),expandIcon:t(e,"expandIcon"),focusable:t(e,"focusable"),hideActions:t(e,"hideActions"),readonly:t(e,"readonly"),ripple:t(e,"ripple"),rounded:t(e,"rounded"),static:t(e,"static")}}),m(()=>l(e.tag,{class:["v-expansion-panels",{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},u.value,o.value,e.class],style:e.style},{default:()=>{var v;return[(v=n.default)==null?void 0:v.call(n,{prev:i,next:a})]}})),{next:a,prev:i}}});export{se as V,k as a,S as b,oe as c};