django-smartbase-admin 0.2.88__py3-none-any.whl → 0.2.90__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 +34 -15
  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 +77 -42
  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.90.dist-info}/METADATA +1 -1
  18. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.90.dist-info}/RECORD +20 -20
  19. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.90.dist-info}/LICENSE.md +0 -0
  20. {django_smartbase_admin-0.2.88.dist-info → django_smartbase_admin-0.2.90.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,109 @@ 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) => {
274
+ const setInitialValueAndLabel = (realInput, shortcuts, baseId) => {
275
+ const shortcutValue = JSON.parse(realInput.value)
276
+ const from = new Date()
277
+ from.setDate(from.getDate() + shortcutValue[0])
254
278
 
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
- }
279
+ const to = new Date()
280
+ to.setDate(to.getDate() + shortcutValue[1])
281
+ fp.setDate([from, to], false, fp.config.dateFormat)
273
282
 
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
+ shortcuts.forEach((shortcut, idx) => {
284
+ if(JSON.stringify(shortcut.value) === realInput.value) {
285
+ document.getElementById(`${baseId}_range${idx}`).checked = true
286
+ realInput.dataset['label'] = shortcut.label
287
+ }
288
+ })
283
289
  }
284
290
 
291
+
285
292
  const createShortcuts = () => {
286
- const baseId = fp.element.id
287
- const baseValue = fp.element.value
293
+ const realInput = document.getElementById(fp.element.dataset.sbadminDatepickerRealInputId)
294
+ const baseId = realInput.id
295
+ const baseValue = realInput.value
288
296
  const el = document.createElement('div')
289
- const shortcuts = JSON.parse(fp.element.dataset.sbadminDatepickerShortcuts, dateTimeReviver)
297
+ const shortcuts = JSON.parse(fp.element.dataset.sbadminDatepickerShortcuts)
290
298
  el.classList.add('flatpickr-shortcuts')
291
299
  el.addEventListener('change', (e) => {
300
+ // on shortcut click/change set new value and label to real input element
292
301
  const value = e.target.value
293
- fp.setDate(shortcuts[value].value, true, fp.config.dateFormat)
302
+ realInput.value = value
303
+ realInput.dataset['label'] = e.target.nextElementSibling.innerText
304
+ realInput.dispatchEvent(new Event('change'))
305
+
306
+ // parse new value and set it to flatpicker
307
+ const shortcutValue = shortcuts[e.target.dataset.index].value
308
+ const from = new Date()
309
+ from.setDate(from.getDate() + shortcutValue[0])
310
+
311
+ const to = new Date()
312
+ to.setDate(to.getDate() + shortcutValue[1])
313
+
314
+ fp.setDate([from, to], false, fp.config.dateFormat)
294
315
  })
295
316
 
296
317
  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
318
+ const checked = JSON.stringify(shortcut.value) === baseValue
319
+ if(checked) {
320
+ realInput.dataset['label'] = shortcut.label
304
321
  }
305
322
  el.append(createRadioInput(
306
323
  `${baseId}_range${idx}`,
307
324
  `${baseId}_shortcut`,
308
- idx,
325
+ JSON.stringify(shortcut.value),
309
326
  shortcut.label,
310
- baseValue === shortcutValueStr
327
+ checked,
328
+ idx
311
329
  ))
312
330
  })
313
331
  fp.calendarContainer.prepend(el)
332
+
333
+ if(realInput.value){
334
+ setInitialValueAndLabel(realInput, shortcuts, baseId)
335
+ }
336
+
337
+ realInput.addEventListener('SBTableFilterFormLoad', () => {
338
+ try {
339
+ setInitialValueAndLabel(realInput, shortcuts, baseId)
340
+ }
341
+ catch {
342
+ fp.setDate(realInput.value, false, fp.config.dateFormat)
343
+ }
344
+ })
314
345
  }
315
346
 
316
347
 
317
348
  return {
318
349
  onReady: createShortcuts,
350
+ onChange: (selectedDates, dateStr, instance) => {
351
+ const checkedShortcut = instance.element.parentElement.querySelector('input.flatpickr-shortcut:checked')
352
+ if(checkedShortcut){
353
+ checkedShortcut.checked = false
354
+ }
355
+ }
319
356
  }
320
357
  }
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 }}" data-label="{{ filter_widget.get_default_label }}"{% 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.90
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=q1BC1uHS_6QlKowbQA9STpy61RpYKaPsstdQL2z7eks,24613
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=EatmY7YHjaLg1TFJ_F_cGDiUmrDhE1U-rm9SLaxh-xU,378174
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=mDdVEmvypTDjEjFndwhj07Pwepua8WDpIb0JhkCJIYE,590793
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=d_EkPi0qv_74diVL4inJs8n1os4t1Ss6hp6-gY4_6hU,12368
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=WR2fqKv8P2XG2xCpE0FXgKfl4gj3Gmlo3ZAOep1xYQY,1144
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.90.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
671
+ django_smartbase_admin-0.2.90.dist-info/METADATA,sha256=g-c6gRy3W7RNKPZV9DwylMisylBXR9TxNZNK_Vcx1RA,996
672
+ django_smartbase_admin-0.2.90.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
673
+ django_smartbase_admin-0.2.90.dist-info/RECORD,,