django-smartbase-admin 1.0.38__py3-none-any.whl → 1.0.41__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 (26) hide show
  1. django_smartbase_admin/actions/admin_action_list.py +5 -0
  2. django_smartbase_admin/admin/widgets.py +52 -5
  3. django_smartbase_admin/engine/dashboard.py +2 -0
  4. django_smartbase_admin/engine/field_formatter.py +25 -15
  5. django_smartbase_admin/engine/filter_widgets.py +41 -6
  6. django_smartbase_admin/static/sb_admin/dist/main.js +1 -1
  7. django_smartbase_admin/static/sb_admin/dist/main_style.css +1 -1
  8. django_smartbase_admin/static/sb_admin/dist/table.js +1 -1
  9. django_smartbase_admin/static/sb_admin/js/sbadmin_prepopulated_fields_init.js +25 -0
  10. django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css +6 -0
  11. django_smartbase_admin/static/sb_admin/src/js/autocomplete.js +7 -7
  12. django_smartbase_admin/static/sb_admin/src/js/main.js +2 -0
  13. django_smartbase_admin/static/sb_admin/src/js/radio.js +31 -0
  14. django_smartbase_admin/static/sb_admin/src/js/table_modules/detail_view_module.js +50 -1
  15. django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js +7 -0
  16. django_smartbase_admin/templates/sb_admin/actions/change_form.html +7 -2
  17. django_smartbase_admin/templates/sb_admin/actions/list.html +1 -1
  18. django_smartbase_admin/templates/sb_admin/components/filters.html +1 -0
  19. django_smartbase_admin/templates/sb_admin/filter_widgets/boolean_field.html +1 -14
  20. django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html +2 -1
  21. django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html +3 -1
  22. django_smartbase_admin/templatetags/sb_admin_tags.py +30 -0
  23. {django_smartbase_admin-1.0.38.dist-info → django_smartbase_admin-1.0.41.dist-info}/METADATA +1 -1
  24. {django_smartbase_admin-1.0.38.dist-info → django_smartbase_admin-1.0.41.dist-info}/RECORD +26 -24
  25. {django_smartbase_admin-1.0.38.dist-info → django_smartbase_admin-1.0.41.dist-info}/LICENSE.md +0 -0
  26. {django_smartbase_admin-1.0.38.dist-info → django_smartbase_admin-1.0.41.dist-info}/WHEEL +0 -0
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ {
4
+ function init_prepopulate(container) {
5
+ const $ = django.jQuery;
6
+ const scripts = container.querySelectorAll('script[id^="sbadmin_prepopulated_fields_"][type="application/json"]');
7
+ for (const el of scripts) {
8
+ let fields = [];
9
+ try {
10
+ fields = JSON.parse(el.textContent);
11
+ } catch (e) {
12
+ fields = [];
13
+ }
14
+ for (const f of fields) {
15
+ $(f.id).data('dependency_list', f.dependency_list).prepopulate(f.dependency_ids, f.maxLength, f.allowUnicode);
16
+ }
17
+ }
18
+ return true;
19
+ }
20
+
21
+ window.init_prepopulate = init_prepopulate;
22
+ init_prepopulate(document);
23
+ }
24
+
25
+
@@ -71,6 +71,12 @@
71
71
  &:focus {
72
72
  @apply text-primary;
73
73
  }
74
+
75
+ .loader,
76
+ .loader:after {
77
+ width: 20px;
78
+ height: 20px;
79
+ }
74
80
  }
75
81
 
76
82
  .btn[data-bs-toggle="dropdown"] {
@@ -17,12 +17,8 @@ export default class Autocomplete {
17
17
  const choiceElementsInline = document.querySelectorAll(`#${event.target.id} [data-autocomplete-data-id]`)
18
18
  choiceElementsInline.forEach((choiceInput) => {
19
19
  choiceInput.setAttribute('data-autocomplete-data-id', choiceInput.getAttribute('data-autocomplete-data-id').replace('__prefix__', totalFormsCount))
20
- this.initAutocomplete(choiceInput, totalFormsCount)
21
20
  })
22
- this.handleDynamiclyAddedAutocomplete(event.target)
23
- })
24
- document.body.addEventListener('SBModalShown', () => {
25
- this.handleDynamiclyAddedAutocomplete(document.getElementById('sb-admin-modal'))
21
+ this.handleDynamiclyAddedAutocomplete(event.target, totalFormsCount)
26
22
  })
27
23
  this.handleDynamiclyAddedAutocomplete(document)
28
24
  document.body.addEventListener('sbadmin:modal-change-form-response', (event) => {
@@ -31,10 +27,10 @@ export default class Autocomplete {
31
27
  })
32
28
  }
33
29
 
34
- handleDynamiclyAddedAutocomplete(el) {
30
+ handleDynamiclyAddedAutocomplete(el, totalFormsCount) {
35
31
  const choiceElements = el.querySelectorAll('.js-autocomplete')
36
32
  choiceElements.forEach((choiceInput) => {
37
- this.initAutocomplete(choiceInput)
33
+ this.initAutocomplete(choiceInput, totalFormsCount)
38
34
  })
39
35
  el.querySelectorAll('.js-autocomplete-detail').forEach(item => {
40
36
  filterInputValueChangedUtil(item)
@@ -45,6 +41,10 @@ export default class Autocomplete {
45
41
  }
46
42
 
47
43
  initAutocomplete(choiceInput, totalFormsCount = null) {
44
+ if (choiceInput.closest('.choices')) {
45
+ console.warn('Attempted to initialize already initialized autocomplete!', choiceInput)
46
+ return
47
+ }
48
48
  const dataEl = document.getElementById(choiceInput.dataset.autocompleteDataId)
49
49
  const autocompleteData = JSON.parse(dataEl.textContent)
50
50
  let inputElId = autocompleteData.input_id
@@ -30,6 +30,7 @@ import Autocomplete from "./autocomplete"
30
30
  import ChoicesJS from "./choices"
31
31
  import {setCookie, setDropdownLabel} from "./utils"
32
32
  import Multiselect from "./multiselect"
33
+ import Radio from "./radio"
33
34
 
34
35
  class Main {
35
36
  constructor() {
@@ -162,6 +163,7 @@ class Main {
162
163
  this.datepicker = new Datepicker(target)
163
164
  this.range = new Range(null, null, target)
164
165
  this.multiselect = new Multiselect(null, null, target)
166
+ this.radio = new Radio(null, target)
165
167
  }
166
168
 
167
169
  handleLocationHashFromTabs() {
@@ -0,0 +1,31 @@
1
+ export default class Radio {
2
+ constructor(selector_override, target) {
3
+ target = target || document
4
+ const selector = selector_override || '.js-radio-choice-widget'
5
+ this.wrapperSelector = '.js-radio-choice-widget-wrapper'
6
+
7
+ target.querySelectorAll(selector).forEach(el => {
8
+ this.initRadio(el)
9
+ })
10
+ }
11
+
12
+ getRadios(base_input) {
13
+ return base_input.closest(this.wrapperSelector)?.querySelectorAll("input[type='radio']")
14
+ }
15
+
16
+ initRadio(base_input) {
17
+ base_input.addEventListener('SBTableFilterFormLoad', () => {
18
+ if (!base_input.value) {
19
+ return
20
+ }
21
+ this.getRadios(base_input).forEach(el => {
22
+ if(el.value === base_input.value) {
23
+ el.checked = true
24
+ }
25
+ })
26
+ })
27
+ base_input.addEventListener('clear', () => {
28
+ base_input.closest(this.wrapperSelector)?.querySelectorAll("input[type='radio']").forEach(el => el.checked = false)
29
+ })
30
+ }
31
+ }
@@ -3,12 +3,61 @@ import {SBAdminTableModule} from "./base_module"
3
3
 
4
4
  export class DetailViewModule extends SBAdminTableModule {
5
5
 
6
+ getDetailUrl(row) {
7
+ return this.table.tableDetailUrl.replace(this.table.constants.OBJECT_ID_PLACEHOLDER, row.getData()[this.table.tableIdColumnName]) + '?_changelist_filters=' + encodeURIComponent(this.table.getUrlParamsString().replace('?' + this.table.constants.BASE_PARAMS_NAME + '=', '' + this.table.constants.BASE_PARAMS_NAME + '='))
8
+ }
9
+
6
10
  afterInit() {
11
+ // Handle middle mouse button clicks via mousedown to prevent browser scroll
12
+ this.table.tabulator.element.addEventListener("mousedown", (e) => {
13
+ // Check if middle mouse button (button === 1) and prevent default scroll behavior
14
+ if (e.button === 1) {
15
+ const rowElement = e.target.closest(".tabulator-row")
16
+ if (rowElement && !e.target.closest(".row-select-wrapper") && !e.target.closest(".row-prevent-click")) {
17
+ e.preventDefault()
18
+ }
19
+ }
20
+ }, true) // Use capture phase to catch event early
21
+
22
+ // Handle auxclick event (modern way to handle middle/right mouse clicks)
23
+ // This is the proper event for middle clicks and preserves user-initiated context
24
+ this.table.tabulator.element.addEventListener("auxclick", (e) => {
25
+ // Check if middle mouse button (button === 1)
26
+ if (e.button === 1) {
27
+ const rowElement = e.target.closest(".tabulator-row")
28
+ if (rowElement && !e.target.closest(".row-select-wrapper") && !e.target.closest(".row-prevent-click")) {
29
+ e.preventDefault()
30
+ e.stopPropagation()
31
+
32
+ // Find the row by matching the element
33
+ const rows = this.table.tabulator.getRows()
34
+ let row = null
35
+ for (let i = 0; i < rows.length; i++) {
36
+ if (rows[i].getElement() === rowElement) {
37
+ row = rows[i]
38
+ break
39
+ }
40
+ }
41
+
42
+ if (row) {
43
+ // Use window.open directly - browsers may focus new tabs, but this is the most reliable method
44
+ // Note: Browser security restrictions prevent programmatic prevention of focus changes
45
+ window.open(this.getDetailUrl(row), '_blank', 'noopener')
46
+ }
47
+ }
48
+ }
49
+ }, true)
50
+
51
+ // Handle regular left clicks
7
52
  this.table.tabulator.on("rowClick", (e, row) => {
8
53
  if (e.target.closest(".row-select-wrapper") || e.target.closest(".row-prevent-click")) {
9
54
  return
10
55
  }
11
- window.location = this.table.tableDetailUrl.replace(this.table.constants.OBJECT_ID_PLACEHOLDER, row.getData()[this.table.tableIdColumnName]) + '?_changelist_filters=' + encodeURIComponent(this.table.getUrlParamsString().replace('?' + this.table.constants.BASE_PARAMS_NAME + '=', '' + this.table.constants.BASE_PARAMS_NAME + '='))
56
+ // Skip if middle mouse button (already handled by mousedown/auxclick)
57
+ if (e.button === 1 || e.which === 2) {
58
+ return
59
+ }
60
+ window.location = this.getDetailUrl(row)
12
61
  })
13
62
  }
14
63
  }
@@ -44,6 +44,12 @@ export class FilterModule extends SBAdminTableModule {
44
44
  return document.querySelector(`#${this.table.viewId}-${field}`)
45
45
  }
46
46
 
47
+ hideDropdown(dropdownButton) {
48
+ if (dropdownButton?.dataset?.sbadminCloseOnChange === '1') {
49
+ window.bootstrap5?.Dropdown?.getInstance(dropdownButton)?.hide()
50
+ }
51
+ }
52
+
47
53
  filterInputValueChanged(field) {
48
54
  const valueElem = filterInputValueChangedUtil(field)
49
55
  if (!valueElem) {
@@ -54,6 +60,7 @@ export class FilterModule extends SBAdminTableModule {
54
60
 
55
61
  changeFilterButtonState(valueElem) {
56
62
  const dropdownButton = valueElem.closest('button')
63
+ this.hideDropdown(dropdownButton)
57
64
  if (valueElem.innerHTML) {
58
65
  dropdownButton.classList.remove('empty')
59
66
  return
@@ -20,8 +20,7 @@
20
20
  data-model-name="{{ opts.model_name }}"
21
21
  {% endif %}>
22
22
  </script>
23
- {# JavaScript for prepopulated fields #}
24
- {% prepopulated_fields_js %}
23
+ <script src="{% static 'sb_admin/js/sbadmin_prepopulated_fields_init.js' %}"></script>
25
24
  {% endblock %}
26
25
 
27
26
  {% block content %}
@@ -282,5 +281,11 @@
282
281
  {% endblock %}
283
282
  {% endif %}
284
283
  </form>
284
+ {% sb_admin_prepopulated_fields_init %}
285
+ {% if sbadmin_is_modal %}
286
+ <script>
287
+ init_prepopulate(document.getElementById("modal-content"));
288
+ </script>
289
+ {% endif %}
285
290
  {% endblock %}
286
291
  {% endblock %}
@@ -28,7 +28,7 @@
28
28
  {% for list_action in content_context.list_actions %}
29
29
  {% if not list_action.sub_actions %}
30
30
  <li>
31
- {% include "sb_admin/actions/partials/action_link.html" with action=list_action view_id=view_id extra_classes="dropdown-menu-link items-center" %}
31
+ {% include list_action.template with action=list_action view_id=view_id dropdown=True extra_classes="dropdown-menu-link items-center" %}
32
32
  </li>
33
33
  {% endif %}
34
34
  {% endfor %}
@@ -8,6 +8,7 @@
8
8
  <button
9
9
  data-bs-toggle="dropdown"
10
10
  aria-expanded="false"
11
+ {% if filter_field.filter_widget.close_dropdown_on_change %}data-sbadmin-close-on-change="1"{% endif %}
11
12
  class="js-filter-dropdown-button empty {% if default_button %}btn{% else %}filter-dropdown-button{% endif %}">
12
13
  <span>
13
14
  {{ filter_field.title|capfirst }}: <span
@@ -1,14 +1 @@
1
- {% load i18n %}
2
-
3
- <div class="dropdown-menu">
4
- <div class="px-12 py-8 relative">
5
- <select form="{{ filter_widget.view_id }}-filter-form" class="input pl-10 pr-38"
6
- id="{{ filter_widget.input_id }}" name="{{ filter_widget.input_name }}"
7
- {% if not all_filters_visible %}disabled{% endif %}>
8
- <option value="true">{% trans 'Yes' %}</option>
9
- <option value="false">{% trans 'No' %}</option>
10
- </select>
11
- </div>
12
- {% include "sb_admin/filter_widgets/partials/clear.html" %}
13
- </div>
14
-
1
+ {% include "sb_admin/filter_widgets/radio_choice_field.html" %}
@@ -1,5 +1,5 @@
1
1
  {% load i18n %}
2
-
2
+ {% if filter_field.filter_widget.allow_clear %}
3
3
  <div class="relative px-12 py-8 flex">
4
4
  {% if not all_filters_visible %}
5
5
  <button type="button"
@@ -19,3 +19,4 @@
19
19
  {% trans 'Clear' %}
20
20
  </button>
21
21
  </div>
22
+ {% endif %}
@@ -1,6 +1,7 @@
1
- <div class="dropdown-menu">
1
+ <div class="dropdown-menu js-radio-choice-widget-wrapper">
2
2
  <ul class="relative">
3
3
  <input form="{{ filter_widget.view_id }}-filter-form" type="hidden"
4
+ class="js-radio-choice-widget"
4
5
  id="{{ filter_widget.input_id }}" name="{{ filter_widget.input_name }}"
5
6
  {% if not all_filters_visible %}disabled{% endif %}{% if filter_widget.get_default_value %}
6
7
  value="{{ filter_widget.get_default_value }}"{% endif %}>
@@ -15,4 +16,5 @@
15
16
  </li>
16
17
  {% endfor %}
17
18
  </ul>
19
+ {% include "sb_admin/filter_widgets/partials/clear.html" %}
18
20
  </div>
@@ -50,6 +50,36 @@ def get_item(dictionary, key):
50
50
  return dictionary.get(key, None) if dictionary else None
51
51
 
52
52
 
53
+ @register.simple_tag(takes_context=True)
54
+ def sb_admin_prepopulated_fields_init(context):
55
+ adminform = context.get("adminform")
56
+ if not adminform:
57
+ return ""
58
+
59
+ data = []
60
+ for f in adminform.prepopulated_fields:
61
+ bf = f["field"]
62
+ deps = f["dependencies"]
63
+ data.append(
64
+ {
65
+ "id": f"#{bf.id_for_label}",
66
+ "name": bf.name,
67
+ "dependency_ids": [f"#{d.id_for_label}" for d in deps],
68
+ "dependency_list": [d.name for d in deps],
69
+ "maxLength": getattr(bf.field, "max_length", None) or 50,
70
+ "allowUnicode": bool(getattr(bf.field, "allow_unicode", False)),
71
+ }
72
+ )
73
+
74
+ opts = context.get("opts")
75
+ element_id = (
76
+ f"sbadmin_prepopulated_fields_{opts.app_label}_{opts.model_name}"
77
+ if opts
78
+ else "sbadmin_prepopulated_fields"
79
+ )
80
+ return mark_safe(get_json_script(data, element_id))
81
+
82
+
53
83
  @register.tag(name="submit_row")
54
84
  def submit_row_tag(parser, token):
55
85
  return InclusionSBAdminNode(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-smartbase-admin
3
- Version: 1.0.38
3
+ Version: 1.0.41
4
4
  Summary:
5
5
  Home-page: https://smartbase-sk.github.io/django-smartbase-admin-docs/
6
6
  License: MIT
@@ -1,11 +1,11 @@
1
1
  django_smartbase_admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  django_smartbase_admin/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- django_smartbase_admin/actions/admin_action_list.py,sha256=VzC1ghdYPXXYDd_6JCqy41M8M2kkOLJGc8QIwPvvdEs,19825
3
+ django_smartbase_admin/actions/admin_action_list.py,sha256=UHeLe2z0qS5L8OIJsG-AjqzhwQpiooJ2xHG2NMVG7II,20115
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
6
  django_smartbase_admin/admin/admin_base.py,sha256=_LhpECtcP0NDb-0PEI3AY6WFYw94aCWGviCrrSl-R-s,49564
7
7
  django_smartbase_admin/admin/site.py,sha256=bU71Zcts2hRcusZq1l44q9Mlr8jOEjGHeM6MNAaS6Gc,9903
8
- django_smartbase_admin/admin/widgets.py,sha256=T2_haNKqky_D6tHkzDcxjZzqHeP9DEDi0thcVFiaYCI,34241
8
+ django_smartbase_admin/admin/widgets.py,sha256=4EiRb3vUxN6OZe3gfYidaSbbpxrdxYMmSrtoBW6DBS4,36154
9
9
  django_smartbase_admin/apps.py,sha256=heZq5O2GHlkJdhUCHbRR7Nmm0irSxnL9NMqY43_O7V4,599
10
10
  django_smartbase_admin/compilemessages.py,sha256=-_FEFQlOvE4L8UzSuUxSxZQjgGlwL9IZtmg59fW_kIQ,342
11
11
  django_smartbase_admin/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -15,11 +15,11 @@ django_smartbase_admin/engine/admin_entrypoint_view.py,sha256=jfMfcYPfdre2abHfC4
15
15
  django_smartbase_admin/engine/admin_view.py,sha256=9wGffahDR3IYmhL9ZbX8uitwGdXdw5DIL5GnWBawmJM,4238
16
16
  django_smartbase_admin/engine/configuration.py,sha256=h_UBpzFyZPSzk9aNNH-V6xGsELjfHWOgQCO65LEf6nc,14049
17
17
  django_smartbase_admin/engine/const.py,sha256=BP5I2UcCtV0bIlk_YUuVFHrDHRM9-gbCL0sJUX-q4Wo,2600
18
- django_smartbase_admin/engine/dashboard.py,sha256=yXi0oUTybqeo2_o2G3skp27W79u_SKjqcaXGKXR4pus,24488
18
+ django_smartbase_admin/engine/dashboard.py,sha256=aaeZkQkim6nIsrXTCFhFiQss1OyifZQNbC4fg15_Wac,24566
19
19
  django_smartbase_admin/engine/fake_inline.py,sha256=tGLX3yHANYBsVPcDk6yQqn8RN-JGdaV-RdHcxh9-61w,6190
20
20
  django_smartbase_admin/engine/field.py,sha256=AkcEs9hYqIJHy9cLgchWfC1wpWTRzFNm7byEIf0DuLU,10858
21
- django_smartbase_admin/engine/field_formatter.py,sha256=QtcegfJoZPkRExviRk1fyl04KGkVx0eg_Jb5ab42aNE,2114
22
- django_smartbase_admin/engine/filter_widgets.py,sha256=Pg9uqH22StmfwNkEbML0ytAJFsOtdgmDvmBpVp35h1k,33331
21
+ django_smartbase_admin/engine/field_formatter.py,sha256=3NxapC_ee39saPKhJ4kHM3cQ604oG8E4m4On5P8xIZg,2513
22
+ django_smartbase_admin/engine/filter_widgets.py,sha256=HT_oc_FRkm-DYm6zM9RYuK3G96Tu5htYPmm85RSB0pg,34466
23
23
  django_smartbase_admin/engine/global_filter_form.py,sha256=jlj6e9VYWDPyUNjcgj3gTIkCZXO01NZOWAeU3jFtkoA,249
24
24
  django_smartbase_admin/engine/menu_item.py,sha256=HP5EwjxBYygAg72RsgQyde62DI9CDg_pDzc8FqlUPEc,3028
25
25
  django_smartbase_admin/engine/modal_view.py,sha256=heo9r-RaRm2MuGtPd_fhWM2jRmxtctM-L59YZQOoOvs,2308
@@ -68,11 +68,11 @@ django_smartbase_admin/static/sb_admin/dist/calendar_style.js,sha256=47DEQpj8HBS
68
68
  django_smartbase_admin/static/sb_admin/dist/chart.js,sha256=nBru0P3RvzaNeQch6qkuL1Wi_c9ICz94HXLXmyYTMW8,205022
69
69
  django_smartbase_admin/static/sb_admin/dist/chart.js.LICENSE.txt,sha256=m7M__mzLlrKDz-hky_AC848p_HzYWhziwCLIpXMsj4I,257
70
70
  django_smartbase_admin/static/sb_admin/dist/confirmation_modal.js,sha256=glK-x4oxSAHqiabqXmNFE3FRtzMbpg7TgZiKcPle9_o,1745
71
- django_smartbase_admin/static/sb_admin/dist/main.js,sha256=S9F0bd-rm-541kDyUBrJnFL6RjknCEkED51je35LyAg,385342
71
+ django_smartbase_admin/static/sb_admin/dist/main.js,sha256=GOyDHndu9TO0_IORpyFcK5t2osBD7wWectgPMolLhqc,385952
72
72
  django_smartbase_admin/static/sb_admin/dist/main.js.LICENSE.txt,sha256=Z8-1IrzhOFV3eE_WGR7SRfbzN9GRXsvfiU7_E_BkX-k,5600
73
- django_smartbase_admin/static/sb_admin/dist/main_style.css,sha256=--alMURJO1ar5wZsUQjTOzeVmyPvxqmTaNbRs2lomIA,178843
73
+ django_smartbase_admin/static/sb_admin/dist/main_style.css,sha256=tS-Usr6Wc0MWuNJm29fLh66RqWzGm1aqipNLdFIqpjk,178928
74
74
  django_smartbase_admin/static/sb_admin/dist/main_style.js,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- django_smartbase_admin/static/sb_admin/dist/table.js,sha256=ellAKCmVs6r3AjERQ5UZ3NUCLT6uY5KQmGMM-ciyI7I,592340
75
+ django_smartbase_admin/static/sb_admin/dist/table.js,sha256=550M2DEFLGPBzJscTtGxCDny_uZ_PFEHSm7F9RVkV3A,593325
76
76
  django_smartbase_admin/static/sb_admin/dist/table.js.LICENSE.txt,sha256=WOKSfEow5EUe0a78P0kcxdWcrQlqn2n6H8idNZqHVDk,462
77
77
  django_smartbase_admin/static/sb_admin/dist/translations.js,sha256=5PRY3zmbnQ9pH-FtNHmsZ5xmYLPOQiO_hR3CBxHIAIo,567
78
78
  django_smartbase_admin/static/sb_admin/dist/tree_widget.js,sha256=KjJhKnGfAAOmhtcL3NrlS1ejf2kw5SDfFpP17v0JekA,6872
@@ -345,6 +345,7 @@ django_smartbase_admin/static/sb_admin/js/prices.js,sha256=ylJRc66S29EPyB8IG2Wcf
345
345
  django_smartbase_admin/static/sb_admin/js/querybuilder/jQuery.extendext.js,sha256=g0pOP9xwUS9WgQ0Oo6XexDDsl6p2tAR5n-ouO756t2c,4564
346
346
  django_smartbase_admin/static/sb_admin/js/querybuilder/query-builder.min.js,sha256=VWVRmHkPrZOcqYDkRiOYv-xVdckeB7tstHUJz7_pWpc,72497
347
347
  django_smartbase_admin/static/sb_admin/js/remove-me.js,sha256=58rFGRSCvxYqJI-_rYVF9YQjC03EemiEahZzWFHknmg,932
348
+ django_smartbase_admin/static/sb_admin/js/sbadmin_prepopulated_fields_init.js,sha256=Ngs8vTlBPKbXFleam-hIufnDlbdSjXK2S4Vh-lbE894,722
348
349
  django_smartbase_admin/static/sb_admin/js/tabulator.min.js,sha256=0EyacGIK0jSUNrcdtifwl11D0-K_hNdnFn33vJkpkFY,387673
349
350
  django_smartbase_admin/static/sb_admin/sprites/sb_admin/Accept-email.svg,sha256=Rxizrh_Ckal_LmaCLYxH1r62CXpEjVTJYh4QFmV7u2I,527
350
351
  django_smartbase_admin/static/sb_admin/sprites/sb_admin/Ad-product.svg,sha256=3ybwil9wnVkC6B-CfgXAfjwiLgYbtpiTTSc4Tk9Hf34,682
@@ -522,7 +523,7 @@ django_smartbase_admin/static/sb_admin/src/css/_tailwind_base.css,sha256=GGQZxH5
522
523
  django_smartbase_admin/static/sb_admin/src/css/_utilities.css,sha256=CwCzAMaTUSP8Wr-6zdusKPuMtS970u0Qb1RQ23TG_LM,901
523
524
  django_smartbase_admin/static/sb_admin/src/css/calendar.css,sha256=HC9vjkwnJqwAdtf7eH4AJ295m6Qa3bbcCFObhe949O0,3645
524
525
  django_smartbase_admin/static/sb_admin/src/css/components/_button.css,sha256=19jJ4xPNuE9KodmQrWTVJK7VcAsVrhhpIhWNU2evCag,5597
525
- django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css,sha256=ONfGX6cyBUjeXIMaCXWS3cGE1iaCKp4rGeENQZVPW3E,2299
526
+ django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css,sha256=BSLmNmvCOx6y8iGDtej4B1gNSBTzpZny3pw1TdYSQpY,2402
526
527
  django_smartbase_admin/static/sb_admin/src/css/components/_input.css,sha256=O1odbSQb-qtWo8HJ0UVzYpGJgYx2DD7Kat21lvXK9Ks,11210
527
528
  django_smartbase_admin/static/sb_admin/src/css/components/_modal.css,sha256=9fy9f6QXAeOCW7VWSBbx45umK37PyGRiHBQF1WGF09Q,4327
528
529
  django_smartbase_admin/static/sb_admin/src/css/components/_nav-tabs.css,sha256=86Ksvd2fX377J6pASPdWH2pzCuP7lpUu1arwZfa-ri4,719
@@ -531,7 +532,7 @@ django_smartbase_admin/static/sb_admin/src/css/components/_toggle.css,sha256=Qiw
531
532
  django_smartbase_admin/static/sb_admin/src/css/components/_tooltip.css,sha256=RnJQcJ-1MX-9jsMOeApuMaMaENJyiD-8UIg8wmDrXRE,2291
532
533
  django_smartbase_admin/static/sb_admin/src/css/style.css,sha256=H0ySPWtk4_EEfS4hygySKjC06ob1EWAy3sDPiGI3HUs,738
533
534
  django_smartbase_admin/static/sb_admin/src/css/tree_widget.css,sha256=dVltYkRkd8DciWc0iMW0hXkTO08LiWcS5PFesRQIr9M,11148
534
- django_smartbase_admin/static/sb_admin/src/js/autocomplete.js,sha256=fXYd6Ctt1gsIDdXfpaNTC8sevpbdJKGafl8TyHxvRDg,14652
535
+ django_smartbase_admin/static/sb_admin/src/js/autocomplete.js,sha256=ER6Y1sQGP3IxM4lzE7QLUfzim72wXz21ZVP5S8vp7QI,14643
535
536
  django_smartbase_admin/static/sb_admin/src/js/calendar.js,sha256=FweC-a1YVl4rVoQV8kbXeCflwnBt0moODJCfxARQNl0,2036
536
537
  django_smartbase_admin/static/sb_admin/src/js/chart.js,sha256=kAXTsM3pCasDDmj2HfqOksPts5O87By4HORJX36n3t0,4497
537
538
  django_smartbase_admin/static/sb_admin/src/js/choices.js,sha256=Wi9uX67JvYCuVqgFJJboDbs8iGd_nFhTmeJMZUbHpyk,4901
@@ -539,8 +540,9 @@ django_smartbase_admin/static/sb_admin/src/js/code.js,sha256=Q1jKpTsUZhxhaGDRrqH
539
540
  django_smartbase_admin/static/sb_admin/src/js/confirmation_modal.js,sha256=9xycy0sYJfT0SxeDucbOmvg9gHSrBo3KngZjCAHkVMM,3610
540
541
  django_smartbase_admin/static/sb_admin/src/js/datepicker.js,sha256=wnFhncPKMkodmf75jSd3PHIy9xO_WRFdxFjf6Qsgp7g,6710
541
542
  django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js,sha256=DVIyCJpxn8Gx1mx3QHxbRN4nlpJRlilKix6BK_zcUVc,12382
542
- django_smartbase_admin/static/sb_admin/src/js/main.js,sha256=Pb-fgKq0xvY50QJuEpjoLkISCST8fOHBnk_Wn-KJySI,20293
543
+ django_smartbase_admin/static/sb_admin/src/js/main.js,sha256=6Ty5URyrxhLMoZd9J2RUOf3ku3oWX31gg6fFeTZlFEA,20366
543
544
  django_smartbase_admin/static/sb_admin/src/js/multiselect.js,sha256=GuWjIpdkfvXi-oBNdK3gImjrzef4550MKMy71iYrywk,4066
545
+ django_smartbase_admin/static/sb_admin/src/js/radio.js,sha256=zJaGdgWY1xuxXFvcuuneJDjx7xYYNxMCf0wy4zJXAiE,1078
544
546
  django_smartbase_admin/static/sb_admin/src/js/range.js,sha256=k_1EIK0R-mrg3ScopUm2UDuYeaCg_VLTjtdJoN-8MXc,1794
545
547
  django_smartbase_admin/static/sb_admin/src/js/sb_ajax_params_tabulator_modifier.js,sha256=vJsAfRlXYeUH-hXLyVukim-UBRUHhv2J9UZHKAALOKo,650
546
548
  django_smartbase_admin/static/sb_admin/src/js/sidebar.js,sha256=gx0MqnLWIRb26-GDvETQ7CE4DucP-L-9-hZ9-oFjuUw,1570
@@ -550,8 +552,8 @@ django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_modu
550
552
  django_smartbase_admin/static/sb_admin/src/js/table_modules/base_module.js,sha256=M8xM8JGi6CwRwoC_0ADbOPNfg30Sqm8KlP52IZ4ItS8,557
551
553
  django_smartbase_admin/static/sb_admin/src/js/table_modules/column_display_module.js,sha256=hHu0voHiPM2QaPPF5X0YAR0-5T913VS7G_PW4eB3laQ,10655
552
554
  django_smartbase_admin/static/sb_admin/src/js/table_modules/data_edit_module.js,sha256=8tlH28XAkGttcgf2xEUgpgQ2XJ9biKAY3WgdSxO_F9M,902
553
- django_smartbase_admin/static/sb_admin/src/js/table_modules/detail_view_module.js,sha256=hs3uN_NRDnJQSUHUZJACR4L1Lw82HTsI-Kco9kdh-Ek,686
554
- django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js,sha256=kdsOX9ToIOQ3mZC6EmFwrWJRD-wMN5ipZSuuH8vViOk,4444
555
+ django_smartbase_admin/static/sb_admin/src/js/table_modules/detail_view_module.js,sha256=VpMRM-uQROikCbK4Y8knp7-yiuWZmvcexO8Ie2Gjz1M,3056
556
+ django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js,sha256=c45_eKdoP8CbHSjOn_KUSMHJBRGw2pqDhK-_nim5d3A,4684
555
557
  django_smartbase_admin/static/sb_admin/src/js/table_modules/full_text_search_module.js,sha256=9ZfnZXvaTOphhRU0B7H0rsghUBWzTOSyVK1FZIj6bIE,573
556
558
  django_smartbase_admin/static/sb_admin/src/js/table_modules/header_tabs_module.js,sha256=zT2CYKfMSd0903ASUzIbT8HwTkF6id3w4j5IJpwONp8,2888
557
559
  django_smartbase_admin/static/sb_admin/src/js/table_modules/movable_columns_module.js,sha256=X0FQykK63v8vcE3-qZhkWZA2ajp8QTCLFv0PvkeLVvY,7694
@@ -561,12 +563,12 @@ django_smartbase_admin/static/sb_admin/src/js/table_modules/views_module.js,sha2
561
563
  django_smartbase_admin/static/sb_admin/src/js/translations.js,sha256=GEizlr_D5yDj00i7jKENkWfDr6gZcg4RQ1Nek22WP4g,954
562
564
  django_smartbase_admin/static/sb_admin/src/js/tree_widget.js,sha256=LEu8LNycEIK4drqfUORXDOzFW2EzYg6AWmlM4H35VdM,18426
563
565
  django_smartbase_admin/static/sb_admin/src/js/utils.js,sha256=8hBr_dr1F_SQKLvuh9Z4t3q3KnSP2cmth7-x0Ih2T4w,5500
564
- django_smartbase_admin/templates/sb_admin/actions/change_form.html,sha256=XzG1_gstbpryuA5kdsGHNOuQ2YGgQcTuoXVFZQb_ujI,16556
566
+ django_smartbase_admin/templates/sb_admin/actions/change_form.html,sha256=cep-uSTBBxwiTpfWbdCcfl9g8Nh6fJOLTs63wJm9oP0,16790
565
567
  django_smartbase_admin/templates/sb_admin/actions/change_password.html,sha256=LhciaKCvlywKMJ6gY9JbEaTkOXjNSFO-mAnWIZfk6sA,3200
566
568
  django_smartbase_admin/templates/sb_admin/actions/dashboard.html,sha256=ur4OFSKJrB71Sl8O5fF0BsV86zLq1tyiadmrDUy9aJ0,297
567
569
  django_smartbase_admin/templates/sb_admin/actions/delete_confirmation.html,sha256=4AeJLqGGPVBYXS9XQSNTnMvsT3I6QttyNLThE8gEZHE,3205
568
570
  django_smartbase_admin/templates/sb_admin/actions/delete_selected_confirmation.html,sha256=hQl8C3j22LI6fVPAMqRd4d_kXNKzcCNJDuhOzEZKBGE,3308
569
- django_smartbase_admin/templates/sb_admin/actions/list.html,sha256=7qbTcnwrrkRG2GQClGNZ1eqOSkjYDDDWn6OICwgFTjo,6885
571
+ django_smartbase_admin/templates/sb_admin/actions/list.html,sha256=gdT2WyxaU8Yk1kZChw5UzjIZ6kAYqdmWXpIgHa829Cc,6875
570
572
  django_smartbase_admin/templates/sb_admin/actions/media.html,sha256=UYe6QzEuqCFZOj1J9vVFHFKvUZDaVBBLFOzHHI8SEyk,122
571
573
  django_smartbase_admin/templates/sb_admin/actions/object_history.html,sha256=7EdXW3oa3kFfWb2ICyKDJmTlTWmjAA3SgONd26QFDzA,1949
572
574
  django_smartbase_admin/templates/sb_admin/actions/partials/action_link.html,sha256=k8ygmP8zPzazUQn7cabdNGQ9Kla_zrIlCDUHuRKILKs,684
@@ -594,7 +596,7 @@ django_smartbase_admin/templates/sb_admin/authentification/password_reset_form.h
594
596
  django_smartbase_admin/templates/sb_admin/blank_base.html,sha256=6dx_P_jiV2x-IojddDPdeWQiPmQ0hBxL8c4c7SljeTQ,76
595
597
  django_smartbase_admin/templates/sb_admin/components/buttons.html,sha256=355xSISqDlQQ873YrU8d8NX7LhaHfshQslYCAkaXAbU,1982
596
598
  django_smartbase_admin/templates/sb_admin/components/columns.html,sha256=JsrESM8cZLNZ5BIZJ9UZL-RdsYyLdMVYBBovi2sD0oA,996
597
- django_smartbase_admin/templates/sb_admin/components/filters.html,sha256=TlcbJeQb4KJdL4944cU77r5FNp1oe8m7kn6nlsG_1co,2663
599
+ django_smartbase_admin/templates/sb_admin/components/filters.html,sha256=mPT1kuDVFiEi9iMrykxoOGfuwD55OWYrCmQf4lP3x6Y,2787
598
600
  django_smartbase_admin/templates/sb_admin/components/filters_v2.html,sha256=sWJwakrXLP7SChZTOJl8AdObhQOlVbbdJaP-Q47JENY,7114
599
601
  django_smartbase_admin/templates/sb_admin/components/inputs.html,sha256=h1rfHTk2y9PsmgVpH8zbbtZmZoNB18tp-KLZZ45ddOU,10938
600
602
  django_smartbase_admin/templates/sb_admin/config/view.html,sha256=26X-VD2Y-l9yLrSavu1JxhrBOUSfB00bFFVC9q_sTL8,4177
@@ -613,13 +615,13 @@ django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/radio_
613
615
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/string_field.html,sha256=Kw0pk0zu5aPHY_MWz6CZUDs4WRMJtUuryjjC07NR6t8,186
614
616
  django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/tree_select_filter.html,sha256=I__J12tJ7pi2hEzXCTXKY3vtP-C6V3aeVpHkkz_t7kE,65
615
617
  django_smartbase_admin/templates/sb_admin/filter_widgets/autocomplete_field.html,sha256=biufhvpytO3PtpzuwlEm0mtns5L4KVVPfayg5r-ZSbM,1071
616
- django_smartbase_admin/templates/sb_admin/filter_widgets/boolean_field.html,sha256=w7A6ljzbokmY_UO3cG-RpB7aDULbUjo7WyT9vJqGZZY,548
618
+ django_smartbase_admin/templates/sb_admin/filter_widgets/boolean_field.html,sha256=aFOWIvxYPcmnZmVvcIyT-BjE3dLAmQojem1TzWUTLTY,64
617
619
  django_smartbase_admin/templates/sb_admin/filter_widgets/choice_field.html,sha256=tOFTMskFGrqbR9qNnKRPV3dlcPTzE4UFZp8nqrfb3yk,645
618
620
  django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html,sha256=WR2fqKv8P2XG2xCpE0FXgKfl4gj3Gmlo3ZAOep1xYQY,1144
619
621
  django_smartbase_admin/templates/sb_admin/filter_widgets/multiple_choice_field.html,sha256=q9bERN_gP793_fizMH-w2wOl7j_6PLz-jUJG1iXkGyw,2052
620
622
  django_smartbase_admin/templates/sb_admin/filter_widgets/number_range_field.html,sha256=3d8yYpmvgQZUxCXw80lNpxeLCLTfIy8Xumg4X1nzJFc,1162
621
- django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html,sha256=FzgPxr2VA61Zn9wGjOkmKneKJPl_CdjsaqPOn485ud0,829
622
- django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html,sha256=iWY1TqA0Wl7bHH7XtpPzD4PgtKmLtmzX3pnQIEwSXBs,1212
623
+ django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html,sha256=KPu--aP2qpaqsznHLgth_thtaeSVFC-RGlCCs4Yzy0I,887
624
+ django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html,sha256=sM494Li-tLiAAI5Nx_iCb8OOn8TfUZYxj1ZoXGk_azk,1354
623
625
  django_smartbase_admin/templates/sb_admin/filter_widgets/string_field.html,sha256=_GJsgYk4CqHMqFWQsIBdDhLnThb6rb1pF0stOpOB40o,548
624
626
  django_smartbase_admin/templates/sb_admin/filter_widgets/tree_select_filter.html,sha256=6-jUnM9-UW4xKTilF8UgjT0zkafZh2xsR0M1N0obNj8,1243
625
627
  django_smartbase_admin/templates/sb_admin/fonts.html,sha256=TX6dIrqFKTnPL3Gsi8wAIWIW1szze1IhBEAHeRz9wOU,1121
@@ -706,7 +708,7 @@ django_smartbase_admin/templates/sb_admin/widgets/tree_select_inline.html,sha256
706
708
  django_smartbase_admin/templates/sb_admin/widgets/url.html,sha256=piw2218tiWPfOwncIvSGAW14Gc5FIzkL_YllirK4yTs,160
707
709
  django_smartbase_admin/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
708
710
  django_smartbase_admin/templatetags/base.py,sha256=XF1wUQxUjULXfdlV-PeHvITfbw65LTHjlDzRikJa_F4,1520
709
- django_smartbase_admin/templatetags/sb_admin_tags.py,sha256=Xd5Y3zPBTr7Rkg-V2-X47YH8YoqCGr831SudZrHKYb8,9656
711
+ django_smartbase_admin/templatetags/sb_admin_tags.py,sha256=yHp-M0IVdjYs14P-FeEQz6d-tv3zti0uvQ0Y08Hxr84,10613
710
712
  django_smartbase_admin/urls.py,sha256=Bjdewssljt0LIefjixBem9JN0kkghPvmrIETj3GdXbY,17
711
713
  django_smartbase_admin/utils.py,sha256=1SHuRAeEvXsPOHdE525o9iHTLY7DT6auUCx2mBa_w2Q,3400
712
714
  django_smartbase_admin/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -715,7 +717,7 @@ django_smartbase_admin/views/global_filter_view.py,sha256=eYo1moJGyi7jc2cPDA5ZBi
715
717
  django_smartbase_admin/views/media_view.py,sha256=5BLWXuzynF7nM34t-mf2BQSRN5ojY8HxpLIqt7Jiq9g,292
716
718
  django_smartbase_admin/views/translations_view.py,sha256=hktmkJIZ0EJxgnzjHLIoRDY0ckFa5wkbaoFZg32UWYw,20441
717
719
  django_smartbase_admin/views/user_config_view.py,sha256=hUSmwxgGXJog7vhiD-zGpm6smo31sLNzW2VoXapHIjc,1865
718
- django_smartbase_admin-1.0.38.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
719
- django_smartbase_admin-1.0.38.dist-info/METADATA,sha256=qc6M9cunTJGwHCzmcXGyVvOhx1YjrwgKa2bujwj-7as,6697
720
- django_smartbase_admin-1.0.38.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
721
- django_smartbase_admin-1.0.38.dist-info/RECORD,,
720
+ django_smartbase_admin-1.0.41.dist-info/LICENSE.md,sha256=okRGMBOYvyhprt2eTpX_QXqpzC0MODF-U7zX-4fKPjQ,1078
721
+ django_smartbase_admin-1.0.41.dist-info/METADATA,sha256=adzmtZJHtyzXfJEnleM3jp_Lw01Dn6WTap2_oP5wEb4,6697
722
+ django_smartbase_admin-1.0.41.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
723
+ django_smartbase_admin-1.0.41.dist-info/RECORD,,