django-smartbase-admin 0.2.88__py3-none-any.whl → 0.2.89__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.
Files changed (20) hide show
  1. django_smartbase_admin/admin/admin_base.py +0 -1
  2. django_smartbase_admin/engine/admin_base_view.py +1 -0
  3. django_smartbase_admin/engine/filter_widgets.py +18 -13
  4. django_smartbase_admin/static/sb_admin/dist/chart.js +1 -1
  5. django_smartbase_admin/static/sb_admin/dist/main.js +1 -1
  6. django_smartbase_admin/static/sb_admin/dist/main_style.css +1 -1
  7. django_smartbase_admin/static/sb_admin/dist/table.js +1 -1
  8. django_smartbase_admin/static/sb_admin/src/css/_datepicker.css +3 -0
  9. django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css +2 -1
  10. django_smartbase_admin/static/sb_admin/src/js/datepicker.js +71 -9
  11. django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js +72 -46
  12. django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_module.js +16 -9
  13. django_smartbase_admin/static/sb_admin/src/js/utils.js +5 -0
  14. django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/date_field.html +9 -2
  15. django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html +15 -5
  16. django_smartbase_admin/templates/sb_admin/includes/inline_fieldset.html +1 -1
  17. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.89.dist-info}/METADATA +1 -1
  18. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.89.dist-info}/RECORD +20 -20
  19. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.89.dist-info}/LICENSE.md +0 -0
  20. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.89.dist-info}/WHEEL +0 -0
@@ -617,6 +617,9 @@ span.flatpickr-weekday {
617
617
  .flatpickr-shortcuts {
618
618
  @apply pt-4 mb-16;
619
619
 
620
+ input[type="radio"] {
621
+ @apply hidden;
622
+ }
620
623
  & > label {
621
624
  @apply p-0;
622
625
  }
@@ -1,5 +1,6 @@
1
1
  .query-builder {
2
- select:not(.select2-hidden-accessible), input:not(.checkbox):not(.choices__input) {
2
+ select:not(.select2-hidden-accessible),
3
+ input:not(.checkbox):not(.radio):not(.choices__input) {
3
4
  @apply !w-full input;
4
5
  }
5
6
 
@@ -1,6 +1,10 @@
1
1
  import flatpickr from "flatpickr"
2
2
  import {createIcon} from "./utils"
3
- import {customActionsPlugin, HIDE_CALENDAR_CLASS, monthYearViewsPlugin} from "./datepicker_plugins"
3
+ import {
4
+ createRadioInput,
5
+ customActionsPlugin,
6
+ monthYearViewsPlugin
7
+ } from "./datepicker_plugins"
4
8
 
5
9
 
6
10
  export default class Datepicker {
@@ -28,20 +32,38 @@ export default class Datepicker {
28
32
  if(datePickerEl.dataset.sbadminDatepicker) {
29
33
  sbadminDatepickerData = JSON.parse(datePickerEl.dataset.sbadminDatepicker)
30
34
  }
35
+
31
36
  flatpickr(datePickerEl, {
32
37
  onReady: (selectedDates, dateStr, instance) => {
33
- const isInTable = datePickerEl.closest('[data-filter-input-name]')
34
- if(!isInTable) {
35
- this.createClear(instance)
36
- }
37
38
  instance.nextMonthNav?.replaceChildren(createIcon('Right-small'))
38
39
  instance.prevMonthNav?.replaceChildren(createIcon('Left-small'))
39
- datePickerEl.addEventListener('clear', () => {
40
+
41
+ const isInTable = datePickerEl.closest('[data-filter-input-name]')
42
+
43
+ // real input element should be present only in filters
44
+ const realInput = document.getElementById(datePickerEl.dataset.sbadminDatepickerRealInputId)
45
+ const mainInput = realInput || datePickerEl
46
+ mainInput.addEventListener('clear', () => {
40
47
  instance.clear()
41
48
  })
42
- if(datePickerEl.classList.contains(HIDE_CALENDAR_CLASS)) {
43
- instance.monthNav.classList.add('!hidden')
44
- instance.innerContainer.classList.add('!hidden')
49
+
50
+
51
+ if(!isInTable){
52
+ this.createClear(instance)
53
+ }
54
+
55
+ if(isInTable && realInput) {
56
+ // set initial value from real input to flatpickr
57
+ realInput.addEventListener('SBTableFilterFormLoad', () => {
58
+ if(!datePickerEl.value) {
59
+ instance.setDate(realInput.value, false, instance.config.dateFormat)
60
+ }
61
+ })
62
+ return
63
+ }
64
+ if(realInput) {
65
+ // advanced filters
66
+ instance.setDate(realInput.value, false, instance.config.dateFormat)
45
67
  }
46
68
  },
47
69
  onClose: function(selectedDates, dateStr, instance) {
@@ -50,12 +72,52 @@ export default class Datepicker {
50
72
  instance.setDate([selectedDates[0],selectedDates[0]], true)
51
73
  }
52
74
  },
75
+ onChange: function(selectedDates, dateStr) {
76
+ const realInput = document.getElementById(datePickerEl.dataset.sbadminDatepickerRealInputId)
77
+ if(realInput) {
78
+ realInput.value = dateStr
79
+ realInput.removeAttribute('data-label')
80
+ realInput.dispatchEvent(new Event('change'))
81
+ }
82
+ },
53
83
  ...options,
54
84
  ...sbadminDatepickerData.flatpickrOptions,
55
85
  ...optionsOverride
56
86
  })
57
87
  }
58
88
 
89
+ initShortcutsDropdown(datePickerEl) {
90
+ const realInput = document.getElementById(datePickerEl.dataset.sbadminDatepickerRealInputId)
91
+ const baseId = realInput.id
92
+ const baseValue = realInput.value
93
+ const el = document.createElement('div')
94
+ const shortcuts = JSON.parse(datePickerEl.dataset.sbadminDatepickerShortcuts)
95
+ el.classList.add('flatpickr-shortcuts', 'dropdown-menu')
96
+ el.addEventListener('change', (e) => {
97
+ realInput.value = e.target.value
98
+ datePickerEl.value = e.target.nextElementSibling.innerText
99
+ })
100
+
101
+ shortcuts.forEach((shortcut, idx) => {
102
+ const checked = JSON.stringify(shortcut.value) === baseValue
103
+ if(checked) {
104
+ datePickerEl.value = shortcut.label
105
+ }
106
+ el.append(createRadioInput(
107
+ `${baseId}_range${idx}`,
108
+ `${baseId}_shortcut`,
109
+ JSON.stringify(shortcut.value),
110
+ shortcut.label,
111
+ checked,
112
+ idx
113
+ ))
114
+ })
115
+ datePickerEl.parentElement.append(el)
116
+ datePickerEl.readOnly = true
117
+ datePickerEl.dataset['bsToggle'] = "dropdown"
118
+ new window.bootstrap5.Dropdown(datePickerEl)
119
+ }
120
+
59
121
  initWidgets(parentEl=null) {
60
122
  const datePickerSelector = {
61
123
  '.js-datepicker': {
@@ -249,74 +249,100 @@ export const monthYearViewsPlugin = (fp) => {
249
249
  }
250
250
  }
251
251
 
252
+ export const createRadioInput = (id, name, value, label, checked, index) => {
253
+ const inputWrapperEl = document.createElement('label')
254
+ inputWrapperEl.classList.add('relative', 'block', 'px-12', 'py-8')
255
+ inputWrapperEl.setAttribute('for', id)
256
+ const labelEl = document.createElement('label')
257
+ labelEl.innerText = label
258
+ labelEl.setAttribute('for', id)
259
+ const inputEl = document.createElement('input')
260
+ inputEl.id = id
261
+ inputEl.name = name
262
+ inputEl.value = value
263
+ inputEl.type = 'radio'
264
+ inputEl.classList.add('radio', 'flatpickr-shortcut')
265
+ inputEl.checked = checked
266
+ inputEl.dataset["index"] = index
267
+ inputWrapperEl.append(inputEl)
268
+ inputWrapperEl.append(labelEl)
269
+ return inputWrapperEl
270
+ }
271
+
252
272
  // eslint-disable-next-line no-unused-vars
253
273
  export const customActionsPlugin = (fp) => {
254
-
255
- const createRadioInput = (id, name, value, label, checked) => {
256
- const inputWrapperEl = document.createElement('label')
257
- inputWrapperEl.classList.add('relative', 'block', 'px-12', 'py-8')
258
- inputWrapperEl.setAttribute('for', id)
259
- const labelEl = document.createElement('label')
260
- labelEl.innerText = label
261
- labelEl.setAttribute('for', id)
262
- const inputEl = document.createElement('input')
263
- inputEl.id = id
264
- inputEl.name = name
265
- inputEl.value = value
266
- inputEl.type = 'radio'
267
- inputEl.classList.add('radio')
268
- inputEl.checked = checked
269
- inputWrapperEl.append(inputEl)
270
- inputWrapperEl.append(labelEl)
271
- return inputWrapperEl
272
- }
273
-
274
- const dateTimeReviver = (key, value) => {
275
- if (key === 'value') {
276
- const newValue = []
277
- value.forEach((val) => {
278
- newValue.push(new Date(val))
279
- })
280
- return newValue
281
- }
282
- return value
283
- }
284
-
285
274
  const createShortcuts = () => {
286
- const baseId = fp.element.id
287
- const baseValue = fp.element.value
275
+ const realInput = document.getElementById(fp.element.dataset.sbadminDatepickerRealInputId)
276
+ const baseId = realInput.id
277
+ const baseValue = realInput.value
288
278
  const el = document.createElement('div')
289
- const shortcuts = JSON.parse(fp.element.dataset.sbadminDatepickerShortcuts, dateTimeReviver)
279
+ const shortcuts = JSON.parse(fp.element.dataset.sbadminDatepickerShortcuts)
290
280
  el.classList.add('flatpickr-shortcuts')
291
281
  el.addEventListener('change', (e) => {
282
+ // on shortcut click/change set new value and label to real input element
292
283
  const value = e.target.value
293
- fp.setDate(shortcuts[value].value, true, fp.config.dateFormat)
284
+ realInput.value = value
285
+ realInput.dataset['label'] = e.target.nextElementSibling.innerText
286
+ realInput.dispatchEvent(new Event('change'))
287
+
288
+ // parse new value and set it to flatpicker
289
+ const shortcutValue = shortcuts[e.target.dataset.index].value
290
+ const from = new Date()
291
+ from.setDate(from.getDate() + shortcutValue[0])
292
+
293
+ const to = new Date()
294
+ to.setDate(to.getDate() + shortcutValue[1])
295
+
296
+ fp.setDate([from, to], false, fp.config.dateFormat)
294
297
  })
295
298
 
296
299
  shortcuts.forEach((shortcut, idx) => {
297
- const fromDateFormatted = fp.formatDate(shortcut.value[0], fp.config.dateFormat)
298
- const toDateFormatted = fp.formatDate(shortcut.value[1], fp.config.dateFormat)
299
- let shortcutValueStr
300
- if (fromDateFormatted === toDateFormatted) {
301
- shortcutValueStr = fromDateFormatted
302
- } else {
303
- shortcutValueStr = fromDateFormatted + fp.config.locale.rangeSeparator + toDateFormatted
300
+ const checked = JSON.stringify(shortcut.value) === baseValue
301
+ if(checked) {
302
+ realInput.dataset['label'] = shortcut.label
304
303
  }
305
304
  el.append(createRadioInput(
306
305
  `${baseId}_range${idx}`,
307
306
  `${baseId}_shortcut`,
308
- idx,
307
+ JSON.stringify(shortcut.value),
309
308
  shortcut.label,
310
- baseValue === shortcutValueStr
309
+ checked,
310
+ idx
311
311
  ))
312
312
  })
313
313
  fp.calendarContainer.prepend(el)
314
+
315
+ realInput.addEventListener('SBTableFilterFormLoad', () => {
316
+ try {
317
+ const shortcutValue = JSON.parse(realInput.value)
318
+ const from = new Date()
319
+ from.setDate(from.getDate() + shortcutValue[0])
320
+
321
+ const to = new Date()
322
+ to.setDate(to.getDate() + shortcutValue[1])
323
+ fp.setDate([from, to], false, fp.config.dateFormat)
324
+
325
+ shortcuts.forEach((shortcut, idx) => {
326
+ if(JSON.stringify(shortcut.value) === realInput.value) {
327
+ document.getElementById(`${baseId}_range${idx}`).checked = true
328
+ realInput.dataset['label'] = shortcut.label
329
+ }
330
+ })
331
+ }
332
+ catch {
333
+ fp.setDate(realInput.value, false, fp.config.dateFormat)
334
+ }
335
+ })
314
336
  }
315
337
 
316
338
 
317
339
  return {
318
340
  onReady: createShortcuts,
341
+ onChange: (selectedDates, dateStr, instance) => {
342
+ const checkedShortcut = instance.element.parentElement.querySelector('input.flatpickr-shortcut:checked')
343
+ if(checkedShortcut){
344
+ checkedShortcut.checked = false
345
+ }
346
+ }
319
347
  }
320
348
  }
321
-
322
- export const HIDE_CALENDAR_CLASS = 'hide-calendar' // used for hiding calendar and only use shortcuts
@@ -1,6 +1,6 @@
1
1
  import { SBAdminTableModule } from "./base_module"
2
2
  import { filterInputValueChangedUtil, filterInputValueChangeListener } from "../utils"
3
- import {customActionsPlugin, HIDE_CALENDAR_CLASS, monthYearViewsPlugin} from "../datepicker_plugins"
3
+ import {customActionsPlugin, monthYearViewsPlugin} from "../datepicker_plugins"
4
4
 
5
5
  export class AdvancedFilterModule extends SBAdminTableModule {
6
6
  constructor(table) {
@@ -104,6 +104,16 @@ export class AdvancedFilterModule extends SBAdminTableModule {
104
104
  widgetEl._flatpickr.calendarContainer?.remove()
105
105
  widgetEl._flatpickr.clear()
106
106
  widgetEl._flatpickr.destroy()
107
+ widgetEl._flatpickr = undefined
108
+ return
109
+ }
110
+ const dropdownInstance = window.bootstrap5.Dropdown.getInstance(widgetEl)
111
+ if(dropdownInstance) {
112
+ dropdownInstance.dispose()
113
+ widgetEl.removeAttribute('data-bs-toggle')
114
+ widgetEl.nextElementSibling?.remove()
115
+ widgetEl.readOnly = false
116
+ widgetEl.value = ""
107
117
  }
108
118
  }
109
119
 
@@ -120,17 +130,14 @@ export class AdvancedFilterModule extends SBAdminTableModule {
120
130
  if (["between", "not_between", "in_the_last", "in_the_next"].includes(rule.operator.type)) {
121
131
  optionsOverride["mode"] = "range"
122
132
  }
133
+ this.destroyDatePicker(widgetEl)
134
+ const shortcuts = JSON.parse(widgetEl.dataset.sbadminDatepickerShortcutsDict)
135
+ widgetEl.dataset.sbadminDatepickerShortcuts = JSON.stringify(shortcuts[rule.operator.type] || [])
123
136
  if (["in_the_last", "in_the_next"].includes(rule.operator.type)) {
124
- // this option does work but there is a bug in certain cases
125
- // optionsOverride["noCalendar"] = true
126
- widgetEl.classList.add(HIDE_CALENDAR_CLASS)
137
+ window.SBAdmin.datepicker.initShortcutsDropdown(widgetEl, {}, optionsOverride)
127
138
  }
128
139
  else {
129
- widgetEl.classList.remove(HIDE_CALENDAR_CLASS)
140
+ window.SBAdmin.datepicker.initFlatPickr(widgetEl, {}, optionsOverride)
130
141
  }
131
- this.destroyDatePicker(widgetEl)
132
- const shortcuts = JSON.parse(widgetEl.dataset.sbadminDatepickerShortcutsDict)
133
- widgetEl.dataset.sbadminDatepickerShortcuts = JSON.stringify(shortcuts[rule.operator.type] || [])
134
- window.SBAdmin.datepicker.initFlatPickr(widgetEl, {}, optionsOverride)
135
142
  }
136
143
  }
@@ -73,6 +73,11 @@ export const filterInputValueChangedUtil = (field) => {
73
73
  if(!valueElem) {
74
74
  return
75
75
  }
76
+ const label = field.dataset.label
77
+ if(label) {
78
+ valueElem.innerHTML = label
79
+ return valueElem
80
+ }
76
81
  const valueOrObject = getObjectOrValue(field.value)
77
82
  if ((field.value === "" || field.value === "[]")) {
78
83
  if(field.dataset.emptyLabel) {
@@ -1,10 +1,17 @@
1
1
  <div class="relative">
2
2
  <input
3
- type="text"
3
+ type="hidden"
4
4
  autocomplete="off"
5
- class="input pl-10 js-datepicker-dynamic"
6
5
  id="{{ filter_widget.input_id }}"
7
6
  name="{{ filter_widget.input_name }}"
7
+ >
8
+ <input
9
+ type="text"
10
+ autocomplete="off"
11
+ class="input pl-10 js-datepicker-dynamic"
12
+ id="{{ filter_widget.input_id }}_picker"
13
+ name="{{ filter_widget.input_name }}_picker"
14
+ data-sbadmin-datepicker-real-input-id="{{ filter_widget.input_id }}"
8
15
  data-sbadmin-datepicker="{{ filter_widget.get_data }}"
9
16
  data-sbadmin-datepicker-shortcuts-dict="{{ filter_widget.get_shortcuts_dict_data }}"
10
17
  >
@@ -1,12 +1,22 @@
1
1
  <div class="dropdown-menu dropdown-menu-datepicker"
2
2
  style="max-width: none; width: auto; height: auto; max-height: none;">
3
3
  <div class="px-12 py-8">
4
- <input form="{{ filter_widget.view_id }}-filter-form" type="text" class="input pl-10 js-datepicker-range"
5
- id="{{ filter_widget.input_id }}" name="{{ filter_widget.input_name }}"
4
+ <input
5
+ type="hidden"
6
+ autocomplete="off"
7
+ id="{{ filter_widget.input_id }}"
8
+ name="{{ filter_widget.input_name }}"
9
+ form="{{ filter_widget.view_id }}-filter-form"
10
+ {% if filter_widget.get_default_value %}value="{{ filter_widget.get_default_value }}"{% endif %}
11
+ {% if not all_filters_visible %}disabled{% endif %}
12
+ >
13
+ <input type="text"
14
+ class="input pl-10 js-datepicker-range"
15
+ id="{{ filter_widget.input_id }}_picker"
16
+ name="{{ filter_widget.input_name }}_picker"
17
+ data-sbadmin-datepicker-real-input-id="{{ filter_widget.input_id }}"
6
18
  data-sbadmin-datepicker="{{ filter_widget.get_data }}"
7
- data-sbadmin-datepicker-shortcuts="{{ filter_widget.get_shortcuts_data }}"
8
- {% if not all_filters_visible %}disabled{% endif %}{% if filter_widget.get_default_value %}
9
- value="{{ filter_widget.get_default_value }}"{% endif %}>
19
+ data-sbadmin-datepicker-shortcuts="{{ filter_widget.get_shortcuts_data }}">
10
20
  </div>
11
21
  {% include "sb_admin/filter_widgets/partials/clear.html" %}
12
22
  </div>
@@ -23,7 +23,7 @@
23
23
  <div class="flex max-xs:flex-wrap gap-x-16">{% endif %}
24
24
 
25
25
  {% for field in line %}
26
- <div class="mb-16 sm:mb-24 max-xs:w-full sm:flex-1{% if field.field.is_hidden %} hidden{% endif %}">
26
+ <div class="mb-16 sm:mb-24 max-xs:w-full sm:flex-1{% if field.field.is_hidden or field.field|is_row_class_field %} hidden{% endif %}">
27
27
  {% if field.is_readonly %}
28
28
  {% call_method field "contents" request %}
29
29
  {% else %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-smartbase-admin
3
- Version: 0.2.88
3
+ Version: 0.2.89
4
4
  Summary:
5
5
  Author: SmartBase
6
6
  Author-email: info@smartbase.sk
@@ -3,14 +3,14 @@ django_smartbase_admin/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
3
3
  django_smartbase_admin/actions/admin_action_list.py,sha256=A-nQiP_iMaH8GPrfd3rtQPdil59WIuzzghfh36wcKhE,19621
4
4
  django_smartbase_admin/actions/advanced_filters.py,sha256=Vm8b6TAwNehR8INjolFG7pEYL4ADO7XUiVOWpb0btM0,13481
5
5
  django_smartbase_admin/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- django_smartbase_admin/admin/admin_base.py,sha256=Wfog5Nc2IBIRcGzWH70xNhT0EJKrnU60-CHt8LhFxMQ,41557
6
+ django_smartbase_admin/admin/admin_base.py,sha256=r6mhLT4PV2_Nq9POcpDUgsvVZE-5UM896TUIrrxNNpE,41478
7
7
  django_smartbase_admin/admin/site.py,sha256=VrJBhwgZsLa2GohvjnNL7m4dVR3S4Ou1V1UzfE1qOoQ,6577
8
8
  django_smartbase_admin/admin/widgets.py,sha256=CaQVLfiSLrZ9GyVSoEl6sxqulaYu_3AAR3ntCipb4zw,19270
9
9
  django_smartbase_admin/apps.py,sha256=C1wT1YUEZNKcUJfpD01nIZEFgYEsuav52WFKvEURRDU,545
10
10
  django_smartbase_admin/compilemessages.py,sha256=-_FEFQlOvE4L8UzSuUxSxZQjgGlwL9IZtmg59fW_kIQ,342
11
11
  django_smartbase_admin/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  django_smartbase_admin/engine/actions.py,sha256=n8PiG60Kj1ECHB4lfVH_jvHMyOjOZ-DvQfO9F2CuqW0,1733
13
- django_smartbase_admin/engine/admin_base_view.py,sha256=8Pd5a2F0PX5euZkVCeWbcF9JxmSvOKf_HQNveBenCDs,29941
13
+ django_smartbase_admin/engine/admin_base_view.py,sha256=9XrX-K7XV-dJCafAUTFHitleV4-n0GdHAciyar3ZAzg,30020
14
14
  django_smartbase_admin/engine/admin_entrypoint_view.py,sha256=jfMfcYPfdre2abHfC4KIxaP_epJFuCeTcujGhGd4Tl4,624
15
15
  django_smartbase_admin/engine/admin_view.py,sha256=9wGffahDR3IYmhL9ZbX8uitwGdXdw5DIL5GnWBawmJM,4238
16
16
  django_smartbase_admin/engine/configuration.py,sha256=P3iSiPm9QBl9etTDJIWzo7DzOBCryGwWtbF288PEtus,8120
@@ -19,7 +19,7 @@ django_smartbase_admin/engine/dashboard.py,sha256=wrvX0GI-SII2pG0DX8Kvy4JFaM6h8e
19
19
  django_smartbase_admin/engine/fake_inline.py,sha256=9C2_mltg2P9-xa3vuoo5X_RcFaCRpKGNSy7t1_iiasE,5802
20
20
  django_smartbase_admin/engine/field.py,sha256=BD_W0ekE5tQJxUGpUA8bo4ZyFk0u2F_6UTPH4drj0JU,10286
21
21
  django_smartbase_admin/engine/field_formatter.py,sha256=eHbXEBwG8jBc9zKpDQ4T64N5J4afF0Cbb8RFeFfgQRg,1950
22
- django_smartbase_admin/engine/filter_widgets.py,sha256=dA5tUQ3d6STmMhMWj0pYH_G1tl0eYX3ZuDQ8b7qHLrE,23767
22
+ django_smartbase_admin/engine/filter_widgets.py,sha256=eIMSeoDxUcULfBJCe1BniM2poqrzRi-7gIERioSCKwY,24049
23
23
  django_smartbase_admin/engine/global_filter_form.py,sha256=jlj6e9VYWDPyUNjcgj3gTIkCZXO01NZOWAeU3jFtkoA,249
24
24
  django_smartbase_admin/engine/menu_item.py,sha256=rMJFG5xm1T0wF8lUmiAZHzKtt9C0LdbpRFvaP0PlngM,2936
25
25
  django_smartbase_admin/engine/modal_view.py,sha256=Qzx9kd9shoqCYes_lYkAvX1ItVL41oi2vORUrYUkZkE,2269
@@ -59,14 +59,14 @@ django_smartbase_admin/static/sb_admin/css/codemirror/codemirror.min.css,sha256=
59
59
  django_smartbase_admin/static/sb_admin/css/codemirror/dracula.min.css,sha256=uo0AmtydVJOOqIJSwJmit3PtOk9VFa6cL5N6ikyzmd8,1646
60
60
  django_smartbase_admin/static/sb_admin/css/coloris/coloris.min.css,sha256=teADOBNAUAYg3wegm5gqu_4ahI-cp-_E87PZH4m52D0,8506
61
61
  django_smartbase_admin/static/sb_admin/css/querybuilder/query-builder.default.min.css,sha256=NpM2HsztsnXTnoq_6D2H2qENmS-xEbXVvInpg87fmGo,3335
62
- django_smartbase_admin/static/sb_admin/dist/chart.js,sha256=KbrU3hgVWMPK9PkquX9orVsCVh6_ANogFMY3jWVbUgY,204690
62
+ django_smartbase_admin/static/sb_admin/dist/chart.js,sha256=junrr52JM6iSKJ2jIXKbAG7LzjU83w2GCQgaq2rjGOg,204742
63
63
  django_smartbase_admin/static/sb_admin/dist/chart.js.LICENSE.txt,sha256=m7M__mzLlrKDz-hky_AC848p_HzYWhziwCLIpXMsj4I,257
64
64
  django_smartbase_admin/static/sb_admin/dist/confirmation_modal.js,sha256=glK-x4oxSAHqiabqXmNFE3FRtzMbpg7TgZiKcPle9_o,1745
65
- django_smartbase_admin/static/sb_admin/dist/main.js,sha256=KE89F9ooogNznFS2CmMQmYRgcI_wCHLV3mROX2AuCXo,376482
65
+ django_smartbase_admin/static/sb_admin/dist/main.js,sha256=4bC9ly00yaje80yiJwKFAL53ENTTDEpXhfbLZhBnXHA,378122
66
66
  django_smartbase_admin/static/sb_admin/dist/main.js.LICENSE.txt,sha256=Z8-1IrzhOFV3eE_WGR7SRfbzN9GRXsvfiU7_E_BkX-k,5600
67
- django_smartbase_admin/static/sb_admin/dist/main_style.css,sha256=0K-kR2kjelOl06qjCVTpPNsh2h2GuxF1gAxpk6gjC6I,153544
67
+ django_smartbase_admin/static/sb_admin/dist/main_style.css,sha256=72BRjvvEW11qwYaMdbldP2BNVuAZsOLYC_nnNKoSJvA,153895
68
68
  django_smartbase_admin/static/sb_admin/dist/main_style.js,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- django_smartbase_admin/static/sb_admin/dist/table.js,sha256=7Tp0N_NO2oTonXPlXG3DUkgHe_VFoXDVwKkJ8PloLYo,589814
69
+ django_smartbase_admin/static/sb_admin/dist/table.js,sha256=95hDWDBSvRPWDGrxQIR0vL2AOPrNvDFY0hKhzyJJynI,590741
70
70
  django_smartbase_admin/static/sb_admin/dist/table.js.LICENSE.txt,sha256=WOKSfEow5EUe0a78P0kcxdWcrQlqn2n6H8idNZqHVDk,462
71
71
  django_smartbase_admin/static/sb_admin/dist/translations.js,sha256=5PRY3zmbnQ9pH-FtNHmsZ5xmYLPOQiO_hR3CBxHIAIo,567
72
72
  django_smartbase_admin/static/sb_admin/favicon/android-chrome-192x192.png,sha256=Og0qXawivKxQWmPPU6dkkGjO0txd-yDXXfemTWXCBDY,18172
@@ -479,7 +479,7 @@ django_smartbase_admin/static/sb_admin/src/css/_base.css,sha256=qSRrfDVGWPYW0ZT0
479
479
  django_smartbase_admin/static/sb_admin/src/css/_choices.css,sha256=HgS0F_NQw_FS94nTAaSrxnCZkSH2ODWylKUH8LrtZxo,1889
480
480
  django_smartbase_admin/static/sb_admin/src/css/_colors.css,sha256=jaEB18XoAeY_I6-FO5b7njsP7BQSUixzH7ClATQBvH0,2825
481
481
  django_smartbase_admin/static/sb_admin/src/css/_components.css,sha256=s7JoCoEB-Tr4EWtLKOh6KMRwVYbLRgj5at0lFretrRE,11820
482
- django_smartbase_admin/static/sb_admin/src/css/_datepicker.css,sha256=5Ja6uuXLr60oHNp6PDQPec2pznqG9syzYVPSKgCAC2s,14025
482
+ django_smartbase_admin/static/sb_admin/src/css/_datepicker.css,sha256=JOyYpJ28tiHCXVGoy5HTWcrtHhcJM6nYcjx85U7dAQE,14080
483
483
  django_smartbase_admin/static/sb_admin/src/css/_filer.css,sha256=9VaLI4A4HuxNqyJv3q9o61Ils2hf7JymgjSp_C-fTnY,1629
484
484
  django_smartbase_admin/static/sb_admin/src/css/_inlines.css,sha256=wLouBJa_qEgLan44zonOqFITWRpDUKD3loqZpATpUj8,4021
485
485
  django_smartbase_admin/static/sb_admin/src/css/_nouislider.css,sha256=y3wmnyoPFkIKiwn9tzRTWGlIFhopgt4OulOf7__e-3k,5587
@@ -491,7 +491,7 @@ django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css,sha256=6
491
491
  django_smartbase_admin/static/sb_admin/src/css/components/_input.css,sha256=-R3Pb2GrMQQ9IIkAQPrED9vO7mW2telsCrvKN2i1lUk,10276
492
492
  django_smartbase_admin/static/sb_admin/src/css/components/_modal.css,sha256=Cimzp6jEQhtViQbYwSDj3oQadfemN0FrbCZN2AOfwaY,4316
493
493
  django_smartbase_admin/static/sb_admin/src/css/components/_nav-tabs.css,sha256=86Ksvd2fX377J6pASPdWH2pzCuP7lpUu1arwZfa-ri4,719
494
- django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css,sha256=OMxvVjxKFEgWvP4_If7iQSaOox88a5BiOzEzNMkryK0,12401
494
+ django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css,sha256=0w9tUk_JV47rSD5E8zM3XnHY9Nw57fU57OXRHGptpj0,12417
495
495
  django_smartbase_admin/static/sb_admin/src/css/components/_toggle.css,sha256=PSLlVIT779DTxUl9UVK1NNoFLj8hTWqicPIDe2E5EsQ,2580
496
496
  django_smartbase_admin/static/sb_admin/src/css/components/_tooltip.css,sha256=5JzpOPLRQBi3xLjKXqCJKyR_neRLYVQP4emhflNT68A,2485
497
497
  django_smartbase_admin/static/sb_admin/src/css/style.css,sha256=M6Z77etzClsxi1NCYiFg0kJurIqkuvYeYIbc5rxx4gQ,739
@@ -500,8 +500,8 @@ django_smartbase_admin/static/sb_admin/src/js/chart.js,sha256=SSryj2X0H9u_7uhfDO
500
500
  django_smartbase_admin/static/sb_admin/src/js/choices.js,sha256=DzrJYV5vq_NywD6KxNIEGmemZENwvcJSNPEPkZKuu1E,4615
501
501
  django_smartbase_admin/static/sb_admin/src/js/code.js,sha256=Q1jKpTsUZhxhaGDRrqHhs_jn9gZPYjB1xf7VSXfiCd0,486
502
502
  django_smartbase_admin/static/sb_admin/src/js/confirmation_modal.js,sha256=9xycy0sYJfT0SxeDucbOmvg9gHSrBo3KngZjCAHkVMM,3610
503
- django_smartbase_admin/static/sb_admin/src/js/datepicker.js,sha256=Xywkvw8n6n8M1v75IpPPyAAjB-xFgaJZzM-hb0nBh4E,4091
504
- django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js,sha256=jPkHbUkvpcZ00jeO5ged-LW7RFQNlHeMO59RQTBfNLg,11040
503
+ django_smartbase_admin/static/sb_admin/src/js/datepicker.js,sha256=_f3a2sMP0lBb-ymI1a6I-_Rly-4Ut88uJSbKeapqsFQ,6412
504
+ django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js,sha256=E3HXFYxRSQOqO-v-5Z9jfdS2RdmYfzmvBSY0c-iKJJs,12208
505
505
  django_smartbase_admin/static/sb_admin/src/js/main.js,sha256=kr6U6y4cDu2LspsqLsw0EsuvxrbahwK42Br0-3RzSFY,9905
506
506
  django_smartbase_admin/static/sb_admin/src/js/multiselect.js,sha256=-mTD2CNCQyBfZTbVgj9khbdApBo6G1pfHNm7c082gsM,3500
507
507
  django_smartbase_admin/static/sb_admin/src/js/range.js,sha256=Vc_NZMKAUzwYpTC1jf8eOpoP_JJsH6x0fzsWwhsKdts,1752
@@ -509,7 +509,7 @@ django_smartbase_admin/static/sb_admin/src/js/sb_ajax_params_tabulator_modifier.
509
509
  django_smartbase_admin/static/sb_admin/src/js/sidebar.js,sha256=gx0MqnLWIRb26-GDvETQ7CE4DucP-L-9-hZ9-oFjuUw,1570
510
510
  django_smartbase_admin/static/sb_admin/src/js/sorting.js,sha256=-56L7MecDqzowVIwIPPTUd46tBR7OTD2DNXBij12TzY,1186
511
511
  django_smartbase_admin/static/sb_admin/src/js/table.js,sha256=X5zFcLP18zW4xCn45lv2pSRf4EcZzHoygQqvj0rrDBI,13796
512
- django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_module.js,sha256=wSvmWlta3CIoFvS3l6LHxoKfcJBszwy4kECeMDXjirU,5286
512
+ django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_module.js,sha256=dYiFFtwkgYyPn_IM8XLEGSDM9jQhtl53CuxJrwo0_U8,5520
513
513
  django_smartbase_admin/static/sb_admin/src/js/table_modules/base_module.js,sha256=M8xM8JGi6CwRwoC_0ADbOPNfg30Sqm8KlP52IZ4ItS8,557
514
514
  django_smartbase_admin/static/sb_admin/src/js/table_modules/column_display_module.js,sha256=hHu0voHiPM2QaPPF5X0YAR0-5T913VS7G_PW4eB3laQ,10655
515
515
  django_smartbase_admin/static/sb_admin/src/js/table_modules/data_edit_module.js,sha256=8tlH28XAkGttcgf2xEUgpgQ2XJ9biKAY3WgdSxO_F9M,902
@@ -522,7 +522,7 @@ django_smartbase_admin/static/sb_admin/src/js/table_modules/selection_module.js,
522
522
  django_smartbase_admin/static/sb_admin/src/js/table_modules/table_params_module.js,sha256=67OJV8l_i7f2Ptm_G76Ri7AWyEfZ8B5BjiztLP819DM,11250
523
523
  django_smartbase_admin/static/sb_admin/src/js/table_modules/views_module.js,sha256=ZdirU9jt_aE_vkVXxMytZ3AaC0q6r57ECijdhV6j3-M,3393
524
524
  django_smartbase_admin/static/sb_admin/src/js/translations.js,sha256=GEizlr_D5yDj00i7jKENkWfDr6gZcg4RQ1Nek22WP4g,954
525
- django_smartbase_admin/static/sb_admin/src/js/utils.js,sha256=g7mFIf7ZBZQyzbWmH_Eg2OKgQvPhE_yw4SFonVQ_AU8,4556
525
+ django_smartbase_admin/static/sb_admin/src/js/utils.js,sha256=I6jvqqmgQVIL-VrWWAZsYSAThl3sThhaG4nxquyd4ic,4677
526
526
  django_smartbase_admin/templates/sb_admin/actions/change_form.html,sha256=Vqp9oZgwagz8bZw7UmsXf692cYLnGl5W-ujQp-aR2Jk,12734
527
527
  django_smartbase_admin/templates/sb_admin/actions/change_password.html,sha256=LhciaKCvlywKMJ6gY9JbEaTkOXjNSFO-mAnWIZfk6sA,3200
528
528
  django_smartbase_admin/templates/sb_admin/actions/dashboard.html,sha256=idjrEnXT0EP8gNHMu9QIneaLRhOJwB6QW92brrg7z1s,272
@@ -565,7 +565,7 @@ django_smartbase_admin/templates/sb_admin/dashboard/widget_base.html,sha256=wStF
565
565
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/autocomplete_field.html,sha256=YmiBxK1bTlJUkI2qOu9tNXVKACgxvsoigNRBkEbFMEM,1626
566
566
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/boolean_field.html,sha256=PNh4r9lV8BJYeSdYzQX1IfLqIVWUCEER_qiXRecxopQ,251
567
567
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/choice_field.html,sha256=y1r1pAZwR64ZFSt7cs5pasQrkaDn2QtFTqC2zyxn63s,316
568
- django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/date_field.html,sha256=836z9l-pP9UPGAxeKxhQatWCz1Horamm1Msy_RLfr4w,388
568
+ django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/date_field.html,sha256=ViAlQzFuGbPG70TgBvbd6l6fu2xBRzDVrSzUVl7XFhc,633
569
569
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/multiple_choice_field.html,sha256=hPI-hkiz6naG5DZoVovRJfueMYi9UKw6oKL1Mw2JK1o,1828
570
570
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/number_range_field.html,sha256=dJh2D-WhWXciBkIjV-Aln7s6JtIWCQqRsNaZ3mhkhdE,627
571
571
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/radio_choice_field.html,sha256=y1r1pAZwR64ZFSt7cs5pasQrkaDn2QtFTqC2zyxn63s,316
@@ -573,7 +573,7 @@ django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/string
573
573
  django_smartbase_admin/templates/sb_admin/filter_widgets/autocomplete_field.html,sha256=biufhvpytO3PtpzuwlEm0mtns5L4KVVPfayg5r-ZSbM,1071
574
574
  django_smartbase_admin/templates/sb_admin/filter_widgets/boolean_field.html,sha256=w7A6ljzbokmY_UO3cG-RpB7aDULbUjo7WyT9vJqGZZY,548
575
575
  django_smartbase_admin/templates/sb_admin/filter_widgets/choice_field.html,sha256=tOFTMskFGrqbR9qNnKRPV3dlcPTzE4UFZp8nqrfb3yk,645
576
- django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html,sha256=lzK-mphnHcBwmTCesu4swztuuVD8X877xwy08egkYB4,781
576
+ django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html,sha256=mxaxV526C78h-MiSKh5cHJnQKi8cwDvNSqOsX6IAIlA,1093
577
577
  django_smartbase_admin/templates/sb_admin/filter_widgets/multiple_choice_field.html,sha256=IUGOLzVrHa-RXjkbM6ebZ0yQyX5OzPcLrIz6s6hIupc,1248
578
578
  django_smartbase_admin/templates/sb_admin/filter_widgets/number_range_field.html,sha256=3d8yYpmvgQZUxCXw80lNpxeLCLTfIy8Xumg4X1nzJFc,1162
579
579
  django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html,sha256=lp8fmVbCjOPkLHEGq6sSc9VNNu-iegJ1f7adbsrc70U,614
@@ -585,7 +585,7 @@ django_smartbase_admin/templates/sb_admin/includes/change_form_title.html,sha256
585
585
  django_smartbase_admin/templates/sb_admin/includes/components.html,sha256=ixhN__EcMbCfjXQXdCElda18sqWZYj9scV3nsR9nXts,18822
586
586
  django_smartbase_admin/templates/sb_admin/includes/confirmation.html,sha256=F2lgUPCIF6pveCSyS7L4k8ifZxa_DoJp-NZb4uwmtyI,1844
587
587
  django_smartbase_admin/templates/sb_admin/includes/fieldset.html,sha256=cSaqkdB2OOMXW4UFysoDQP4x-Wm4fgMtClPHqHepv1o,280
588
- django_smartbase_admin/templates/sb_admin/includes/inline_fieldset.html,sha256=ov6iySp8Oo8VZ8Z54kTHh6PF254OufH2xqmqp0NX_W4,1936
588
+ django_smartbase_admin/templates/sb_admin/includes/inline_fieldset.html,sha256=CfTFCpV7F8p2WAZqTdz9peuvnuZz99193waPPoN2vac,1970
589
589
  django_smartbase_admin/templates/sb_admin/includes/loading.html,sha256=mI-Ya6y0vTOqPVUS9n_GPXmQDvyaDdL9637I5oqcnBE,287
590
590
  django_smartbase_admin/templates/sb_admin/includes/loading_absolute.html,sha256=Eck62NW9ByTw6Mu5QOcYZZJVebhRUNbxTB29XmN5drE,304
591
591
  django_smartbase_admin/templates/sb_admin/includes/notifications.html,sha256=wEEcrcdX3Wrlz-tVCJouiUFSZV_vVEqrc5opV_nifAw,783
@@ -667,7 +667,7 @@ django_smartbase_admin/views/dashboard_view.py,sha256=vtz5emYTQ5WDFeLA8HrcmjSOVd
667
667
  django_smartbase_admin/views/global_filter_view.py,sha256=eYo1moJGyi7jc2cPDA5ZBiEgA7Hmc-DxbQvbqUpDkg8,1127
668
668
  django_smartbase_admin/views/media_view.py,sha256=5BLWXuzynF7nM34t-mf2BQSRN5ojY8HxpLIqt7Jiq9g,292
669
669
  django_smartbase_admin/views/translations_view.py,sha256=tkShf5IWyPDjNhcPQsvh8WXs-EMRCfG_oTD9x-LP1No,20272
670
- django_smartbase_admin-0.2.88.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
671
- django_smartbase_admin-0.2.88.dist-info/METADATA,sha256=p5prKY2J9zqaMffa00EjvqbMdLfcQdMkwvdvwT9qdrE,996
672
- django_smartbase_admin-0.2.88.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
673
- django_smartbase_admin-0.2.88.dist-info/RECORD,,
670
+ django_smartbase_admin-0.2.89.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
671
+ django_smartbase_admin-0.2.89.dist-info/METADATA,sha256=WdbeXuroRC1azMiOrQLOy-RUzvSDlx5CCv_ikbM7BsM,996
672
+ django_smartbase_admin-0.2.89.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
673
+ django_smartbase_admin-0.2.89.dist-info/RECORD,,