accrete 0.0.150__py3-none-any.whl → 0.0.152__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 (43) hide show
  1. accrete/contrib/log/queries.py +3 -1
  2. accrete/contrib/ui/admin.py +9 -1
  3. accrete/contrib/ui/forms.py +57 -0
  4. accrete/contrib/ui/migrations/0001_initial.py +39 -0
  5. accrete/contrib/ui/migrations/0002_alter_theme_color_danger_alter_theme_color_link_and_more.py +38 -0
  6. accrete/contrib/ui/migrations/0003_alter_theme_check_user_or_tenant.py +21 -0
  7. accrete/contrib/ui/migrations/0004_theme_force_tenant_theme.py +18 -0
  8. accrete/contrib/ui/models.py +115 -1
  9. accrete/contrib/ui/response.py +11 -4
  10. accrete/contrib/ui/static/css/accrete.css +26 -57
  11. accrete/contrib/ui/static/css/accrete.css.map +1 -1
  12. accrete/contrib/ui/static/css/accrete.scss +80 -55
  13. accrete/contrib/ui/templates/django/forms/widgets/input.html +1 -1
  14. accrete/contrib/ui/templates/ui/custom_theme.html +19 -0
  15. accrete/contrib/ui/templates/ui/filter/query_input.html +1 -1
  16. accrete/contrib/ui/templates/ui/layout.html +9 -9
  17. accrete/contrib/ui/templates/ui/list.html +2 -2
  18. accrete/contrib/ui/templates/ui/message.html +2 -2
  19. accrete/contrib/ui/templates/ui/modal.html +3 -3
  20. accrete/contrib/ui/templates/ui/table.html +5 -5
  21. accrete/contrib/ui/templates/ui/templatetags/field.html +50 -11
  22. accrete/contrib/ui/templates/ui/widgets/date_weekday.html +1 -1
  23. accrete/contrib/ui/templates/ui/widgets/model_search_select.html +4 -3
  24. accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html +5 -4
  25. accrete/contrib/ui/templatetags/ui.py +34 -4
  26. accrete/contrib/ui/views.py +90 -2
  27. accrete/contrib/ui/widgets/search_select.py +2 -2
  28. accrete/contrib/user/forms.py +1 -1
  29. accrete/contrib/user/migrations/0009_alter_user_theme.py +18 -0
  30. accrete/contrib/user/migrations/0010_alter_user_theme.py +18 -0
  31. accrete/contrib/user/models.py +5 -3
  32. accrete/contrib/user/templates/user/login.html +3 -11
  33. accrete/contrib/user/templates/user/user_preferences.html +27 -15
  34. accrete/contrib/user/views.py +7 -2
  35. accrete/fields.py +4 -2
  36. accrete/managers.py +9 -0
  37. accrete/migrations/0009_alter_accessgroup_name.py +30 -0
  38. accrete/models.py +6 -4
  39. accrete/views.py +32 -20
  40. {accrete-0.0.150.dist-info → accrete-0.0.152.dist-info}/METADATA +1 -1
  41. {accrete-0.0.150.dist-info → accrete-0.0.152.dist-info}/RECORD +43 -34
  42. {accrete-0.0.150.dist-info → accrete-0.0.152.dist-info}/WHEEL +0 -0
  43. {accrete-0.0.150.dist-info → accrete-0.0.152.dist-info}/licenses/LICENSE +0 -0
@@ -1,8 +1,10 @@
1
+ from django.db.models.query import RawQuerySet
2
+
1
3
  from .models import Log
2
4
  from accrete.tenant import get_tenant
3
5
 
4
6
 
5
- def current_log_state(model: str, object_id: int):
7
+ def current_log_state(model: str, object_id: int) -> RawQuerySet:
6
8
  tenant = get_tenant()
7
9
  tenant_id = tenant and tenant.id or None
8
10
  logs = Log.objects.raw("""
@@ -1,3 +1,11 @@
1
1
  from django.contrib import admin
2
+ from .models import Theme
2
3
 
3
- # Register your models here.
4
+
5
+ class ThemeAdmin(admin.ModelAdmin):
6
+ model = Theme
7
+ list_display = ('pk', 'user', 'tenant')
8
+ search_fields = ('pk', 'user', 'tenant')
9
+
10
+
11
+ admin.site.register(Theme, ThemeAdmin)
@@ -0,0 +1,57 @@
1
+ from django import forms
2
+ from django.db.models import Q
3
+ from django.utils.translation import gettext_lazy as _
4
+ from . models import Theme
5
+
6
+
7
+ class ThemeForm(forms.ModelForm):
8
+
9
+ class Meta:
10
+ model = Theme
11
+ fields = [
12
+ 'user',
13
+ 'tenant',
14
+ 'color_primary',
15
+ 'color_success',
16
+ 'color_link',
17
+ 'color_warning',
18
+ 'color_danger'
19
+ ]
20
+ widgets = {
21
+ 'color_primary': forms.widgets.TextInput(attrs={'type': 'color', 'autocomplete': 'off'}),
22
+ 'color_success': forms.widgets.TextInput(attrs={'type': 'color', 'autocomplete': 'off'}),
23
+ 'color_link': forms.widgets.TextInput(attrs={'type': 'color', 'autocomplete': 'off'}),
24
+ 'color_warning': forms.widgets.TextInput(attrs={'type': 'color', 'autocomplete': 'off'}),
25
+ 'color_danger': forms.widgets.TextInput(attrs={'type': 'color', 'autocomplete': 'off'}),
26
+ 'user': forms.widgets.HiddenInput(),
27
+ 'tenant': forms.widgets.HiddenInput()
28
+ }
29
+
30
+ def _clean_color(self, hex_color: str):
31
+ if not hex_color.startswith('#'):
32
+ hex_color = f'#{hex_color}'
33
+ if len(hex_color) != 7:
34
+ raise forms.ValidationError(_(
35
+ 'Color must be of length 7 and including the starting "#"'
36
+ ))
37
+ return hex_color
38
+
39
+ def clean_color_primary(self):
40
+ color = self._clean_color(self.cleaned_data.get('color_primary'))
41
+ return color
42
+
43
+ def clean_color_success(self):
44
+ color = self._clean_color(self.cleaned_data.get('color_success'))
45
+ return color
46
+
47
+ def clean_color_link(self):
48
+ color = self._clean_color(self.cleaned_data.get('color_link'))
49
+ return color
50
+
51
+ def clean_color_warning(self):
52
+ color = self._clean_color(self.cleaned_data.get('color_warning'))
53
+ return color
54
+
55
+ def clean_color_danger(self):
56
+ color = self._clean_color(self.cleaned_data.get('color_danger'))
57
+ return color
@@ -0,0 +1,39 @@
1
+ # Generated by Django 5.2.1 on 2025-08-07 16:18
2
+
3
+ import django.db.models.deletion
4
+ from django.conf import settings
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ initial = True
11
+
12
+ dependencies = [
13
+ ('accrete', '0009_alter_accessgroup_name'),
14
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+ ]
16
+
17
+ operations = [
18
+ migrations.CreateModel(
19
+ name='Theme',
20
+ fields=[
21
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22
+ ('color_primary', models.CharField(max_length=7, verbose_name='Primary Color')),
23
+ ('color_success', models.CharField(max_length=7, verbose_name='Success Color')),
24
+ ('color_link', models.CharField(max_length=7, verbose_name='Link Color')),
25
+ ('color_warning', models.CharField(max_length=7, verbose_name='Warning Color')),
26
+ ('color_danger', models.CharField(max_length=7, verbose_name='Danger Color')),
27
+ ('theme_markup', models.TextField(blank=True, null=True, verbose_name='Theme Markup')),
28
+ ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tenant_themes', to='accrete.tenant', verbose_name='Tenant')),
29
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_themes', to=settings.AUTH_USER_MODEL, verbose_name='User')),
30
+ ],
31
+ options={
32
+ 'verbose_name': 'Theme',
33
+ 'verbose_name_plural': 'Themes',
34
+ 'db_table': 'accrete_theme',
35
+ 'ordering': ['pk'],
36
+ 'constraints': [models.CheckConstraint(condition=models.Q(('user__isnull', True), ('tenant__isnull', True), _connector='XOR'), name='check_user_or_tenant', violation_error_message='')],
37
+ },
38
+ ),
39
+ ]
@@ -0,0 +1,38 @@
1
+ # Generated by Django 5.2.1 on 2025-08-07 17:11
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('ui', '0001_initial'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name='theme',
15
+ name='color_danger',
16
+ field=models.CharField(default='#FF6584', max_length=7, verbose_name='Danger Color'),
17
+ ),
18
+ migrations.AlterField(
19
+ model_name='theme',
20
+ name='color_link',
21
+ field=models.CharField(default='#65D0FE', max_length=7, verbose_name='Link Color'),
22
+ ),
23
+ migrations.AlterField(
24
+ model_name='theme',
25
+ name='color_primary',
26
+ field=models.CharField(default='#46C68D', max_length=7, verbose_name='Primary Color'),
27
+ ),
28
+ migrations.AlterField(
29
+ model_name='theme',
30
+ name='color_success',
31
+ field=models.CharField(default='#46C68D', max_length=7, verbose_name='Success Color'),
32
+ ),
33
+ migrations.AlterField(
34
+ model_name='theme',
35
+ name='color_warning',
36
+ field=models.CharField(default='#FEB600', max_length=7, verbose_name='Warning Color'),
37
+ ),
38
+ ]
@@ -0,0 +1,21 @@
1
+ # Generated by Django 5.2.1 on 2025-08-08 06:13
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('accrete', '0009_alter_accessgroup_name'),
11
+ ('ui', '0002_alter_theme_color_danger_alter_theme_color_link_and_more'),
12
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AlterConstraint(
17
+ model_name='theme',
18
+ name='check_user_or_tenant',
19
+ constraint=models.CheckConstraint(condition=models.Q(('user__isnull', True), ('tenant__isnull', True), _connector='XOR'), name='check_user_or_tenant', violation_error_message='A theme must be assigned either to a user or a tenant.'),
20
+ ),
21
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.2.1 on 2025-08-08 06:27
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('ui', '0003_alter_theme_check_user_or_tenant'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name='theme',
15
+ name='force_tenant_theme',
16
+ field=models.BooleanField(default=False, help_text='Apply this theme regardless of user preferences', verbose_name='Force Tenant Theme'),
17
+ ),
18
+ ]
@@ -1,3 +1,117 @@
1
+ import colorsys
2
+
3
+ from django.conf import settings
1
4
  from django.db import models
5
+ from django.utils.translation import gettext_lazy as _
6
+ from django.template.loader import render_to_string
7
+
8
+
9
+ class Theme(models.Model):
10
+
11
+ class Meta:
12
+ verbose_name = _('Theme')
13
+ verbose_name_plural = _('Themes')
14
+ db_table = 'accrete_theme'
15
+ ordering = ['pk']
16
+ constraints = [
17
+ models.CheckConstraint(
18
+ name='check_user_or_tenant',
19
+ violation_error_message=_(
20
+ 'A theme must be assigned either to a user or a tenant.'
21
+ ),
22
+ condition=(
23
+ models.Q(user__isnull=True) ^ models.Q(tenant__isnull=True)
24
+ )
25
+ )
26
+ ]
27
+
28
+ user = models.ForeignKey(
29
+ verbose_name=_('User'),
30
+ to=settings.AUTH_USER_MODEL,
31
+ on_delete=models.CASCADE,
32
+ related_name='user_themes',
33
+ null=True,
34
+ blank=True
35
+ )
36
+
37
+ tenant = models.ForeignKey(
38
+ verbose_name=_('Tenant'),
39
+ to='accrete.Tenant',
40
+ on_delete=models.CASCADE,
41
+ related_name='tenant_themes',
42
+ null=True,
43
+ blank=True
44
+ )
45
+
46
+ force_tenant_theme = models.BooleanField(
47
+ verbose_name=_('Force Tenant Theme'),
48
+ default=False,
49
+ help_text=_('Apply this theme regardless of user preferences')
50
+ )
51
+
52
+ color_primary = models.CharField(
53
+ verbose_name=_('Primary Color'),
54
+ max_length=7,
55
+ default='#46C68D'
56
+ )
57
+
58
+ color_success = models.CharField(
59
+ verbose_name=_('Success Color'),
60
+ max_length=7,
61
+ default='#46C68D'
62
+ )
63
+
64
+ color_link = models.CharField(
65
+ verbose_name=_('Link Color'),
66
+ max_length=7,
67
+ default='#65D0FE'
68
+ )
69
+
70
+ color_warning = models.CharField(
71
+ verbose_name=_('Warning Color'),
72
+ max_length=7,
73
+ default='#FEB600'
74
+ )
75
+
76
+ color_danger = models.CharField(
77
+ verbose_name=_('Danger Color'),
78
+ max_length=7,
79
+ default='#FF6584'
80
+ )
81
+
82
+ theme_markup = models.TextField(
83
+ verbose_name=_('Theme Markup'),
84
+ null=True,
85
+ blank=True
86
+ )
87
+
88
+ def generate_markup(self) -> str:
89
+ def hex_to_hsl(hex_color: str) -> dict:
90
+ hex_color = hex_color.removeprefix('#')
91
+ rgb = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
92
+ rgb = [x/255.0 for x in rgb]
93
+ h, l, s = colorsys.rgb_to_hls(*rgb)
94
+
95
+ return {
96
+ 'h': round(h * 360),
97
+ 's': round(s * 100),
98
+ 'l': round(l * 100)
99
+ }
100
+ ctx = {
101
+ 'primary': hex_to_hsl(self.color_primary),
102
+ 'success': hex_to_hsl(self.color_success),
103
+ 'link': hex_to_hsl(self.color_link),
104
+ 'warning': hex_to_hsl(self.color_warning),
105
+ 'danger': hex_to_hsl(self.color_danger)
106
+ }
107
+ return render_to_string('ui/custom_theme.html', ctx)
2
108
 
3
- # Create your models here.
109
+ def save(
110
+ self,
111
+ force_insert=False,
112
+ force_update=False,
113
+ using=None,
114
+ update_fields=None,
115
+ ):
116
+ self.theme_markup = self.generate_markup()
117
+ super().save(force_insert, force_update, using, update_fields)
@@ -8,6 +8,7 @@ from django.db.models import Model
8
8
  from django.http import HttpResponse
9
9
  from django.template.loader import render_to_string
10
10
  from django.utils.translation import gettext_lazy as _
11
+ from django.utils.functional import Promise
11
12
  from accrete.contrib.ui import Filter
12
13
 
13
14
 
@@ -121,7 +122,8 @@ class ListResponse(WindowResponse):
121
122
  column_height: str = '150px',
122
123
  overview_template: str = 'ui/list.html',
123
124
  detail_header_template: str = None,
124
- detail_data_template: str = None
125
+ detail_data_template: str = None,
126
+ detail_enabled: bool = True
125
127
  ):
126
128
  assert page is not None or ui_filter is not None, _(
127
129
  'Argument page or ui_filter must be supplied'
@@ -141,6 +143,7 @@ class ListResponse(WindowResponse):
141
143
  self.column_height = column_height
142
144
  self.detail_header_template = detail_header_template
143
145
  self.detail_data_template = detail_data_template
146
+ self.detail_enabled = detail_enabled
144
147
 
145
148
  def _has_panel(self):
146
149
  return bool(self.panel_template or self.ui_filter)
@@ -154,6 +157,7 @@ class ListResponse(WindowResponse):
154
157
  'endless_scroll': self.endless_scroll,
155
158
  'column_count': self.column_count,
156
159
  'column_height': self.column_height,
160
+ 'detail_enabled': self.detail_enabled,
157
161
  'detail_header_template': self.detail_header_template,
158
162
  'detail_data_template': self.detail_data_template,
159
163
  'show_content_right': str(bool(
@@ -215,10 +219,10 @@ class TableResponse(WindowResponse):
215
219
 
216
220
  def __init__(
217
221
  self, *,
218
- title: str,
222
+ title: str | Promise,
219
223
  context: dict,
220
- instance_label: str,
221
224
  fields: list[str],
225
+ instance_label: str | Promise | None = None,
222
226
  footer: dict = None,
223
227
  page: paginator.Page = None,
224
228
  ui_filter: Filter = None,
@@ -280,12 +284,14 @@ class TableRowResponse(Response):
280
284
  self, *,
281
285
  instance: Model,
282
286
  fields: list[str],
287
+ instance_label: str | Promise | None = None,
283
288
  footer: dict = None,
284
289
  page: paginator.Page = None,
285
290
  ):
286
291
  super().__init__(template=self.base_template, context={})
287
292
  self.instance = instance
288
293
  self.fields = fields
294
+ self.instance_label = instance_label
289
295
  self.footer = footer
290
296
  self.page = page
291
297
 
@@ -294,6 +300,7 @@ class TableRowResponse(Response):
294
300
  context.update({
295
301
  'instance': self.instance,
296
302
  'fields': self.fields,
303
+ 'instance_label': self.instance_label,
297
304
  'footer': self.footer,
298
305
  'page': self.page
299
306
  })
@@ -346,7 +353,7 @@ class ModalResponse(Response):
346
353
  modal_id: str,
347
354
  template: str,
348
355
  context: dict,
349
- title: str = None,
356
+ title: str | Promise = None,
350
357
  is_update: bool = False,
351
358
  is_blocking: bool = False,
352
359
  modal_width: str = None
@@ -1,30 +1,18 @@
1
- @import url(../bulma/css/bulma.css);
1
+ @import url(../bulma/css/bulma.min.css);
2
2
  :root {
3
3
  --bulma-body-size: .9em;
4
4
  --bulma-navbar-height: 40px;
5
- --bulma-menu-item-selected-h: --bulma-success-h;
6
- --accrete-detail-width: 500px;
5
+ --bulma-menu-item-selected-h: var(--bulma-primary-h);
6
+ --accrete-detail-width: 35em;
7
+ --bulma-primary-h: 153.28deg;
8
+ --bulma-primary-s: 52.89%;
9
+ --bulma-primary-l: 52.55%;
7
10
  --accrete-action-panel-width: 320px;
8
- --bulma-input-icon-focus-color: var(--bulma-success);
9
- --bulma-input-arrow: var(--bulma-success);
10
- --bulma-arrow-color: var(--bulma-success);
11
- --bulma-menu-nested-list-margin: .5em 0 0.5em 0.75em;
12
- --bulma-navbar-burger-color: var(--bulma-success);
13
- --accrete-hover-color: #F0F2F4; }
14
-
15
- html[data-theme='light'] {
16
- --bulma-menu-item-h: var(--bulma-success-h);
17
- --bulma-menu-item-s: var(--bulma-success-s);
18
- --bulma-menu-item-l: var(--bulma-success-l);
19
- --bulma-menu-item-background-l: 50%;
20
- --bulma-menu-item-color-l: 10%;
21
- --bulma-navbar-burger-color: var(--bulma-success);
22
- --bulma-input-disabled-border-color: var(--bulma-input-border-color) !important;
11
+ --bulma-input-arrow: var(--bulma-primary);
12
+ --bulma-arrow-color: var(--bulma-primary);
23
13
  --accrete-hover-color: #F0F2F4; }
24
14
 
25
15
  html[data-theme='dark'] {
26
- --bulma-navbar-burger-color: var(--bulma-success);
27
- --bulma-input-disabled-border-color: var(--bulma-input-border-color) !important;
28
16
  --accrete-hover-color: #1E2128; }
29
17
  html[data-theme='dark'] .button.is-light {
30
18
  --bulma-button-h: var(--bulma-dark-h);
@@ -54,6 +42,9 @@ a {
54
42
  .navbar-burger {
55
43
  color: black; }
56
44
 
45
+ .button {
46
+ box-shadow: none; }
47
+
57
48
  .button.is-subtle {
58
49
  box-shadow: none;
59
50
  border-top-color: transparent;
@@ -61,20 +52,9 @@ a {
61
52
  border-bottom-color: transparent;
62
53
  border-left-color: transparent; }
63
54
 
64
- .input {
65
- border-top: none;
66
- border-right: none;
67
- border-left: none;
68
- border-top-left-radius: 0;
69
- border-top-right-radius: 0;
70
- border-bottom-right-radius: 0;
71
- border-bottom-left-radius: 0;
72
- box-shadow: none;
73
- font-weight: bold; }
74
-
75
55
  .input:focus, .input:focus-within {
76
56
  box-shadow: none;
77
- border-bottom: 1px solid var(--bulma-success); }
57
+ border: 1px solid var(--bulma-primary); }
78
58
 
79
59
  input[disabled] {
80
60
  background-color: transparent !important;
@@ -87,32 +67,21 @@ textarea {
87
67
  box-shadow: none !important; }
88
68
 
89
69
  textarea:focus {
90
- border-color: var(--bulma-success) !important; }
70
+ border-color: var(--bulma-primary) !important; }
91
71
 
92
72
  .is-small.textarea, .is-small.input {
93
73
  border-radius: 0;
94
74
  font-size: var(--bulma-size-small); }
95
75
 
96
76
  td > .input, td * .input, td * select, td * .select {
97
- border-top: none !important;
98
- border-right: none !important;
99
- border-bottom: none !important;
100
- border-left: none !important; }
101
-
102
- td:has(.input:focus) {
103
- border-bottom: 1px solid var(--bulma-success) !important; }
77
+ border-radius: 0; }
104
78
 
105
79
  select {
106
- border-top: transparent !important;
107
- border-right: transparent !important;
108
- border-left: transparent !important;
109
- border-radius: 0 !important;
110
- box-shadow: none !important;
111
- font-weight: bold; }
80
+ box-shadow: none !important; }
112
81
 
113
82
  select:focus {
114
83
  box-shadow: none;
115
- border-bottom: 1px solid var(--bulma-success) !important; }
84
+ border: 1px solid var(--bulma-primary) !important; }
116
85
 
117
86
  #detail-container {
118
87
  flex-shrink: 0;
@@ -157,7 +126,7 @@ select:focus {
157
126
  max-width: calc(var(--accrete-detail-width) - 6%); }
158
127
 
159
128
  .list-entry > .box:hover, .box.selected {
160
- box-shadow: 0 0 5px 2px var(--bulma-success); }
129
+ box-shadow: 0 0 5px 2px var(--bulma-primary); }
161
130
 
162
131
  .helptext {
163
132
  font-style: italic !important;
@@ -190,11 +159,11 @@ select:focus {
190
159
  table.can-compact * tr:first-child {
191
160
  border-top: 1px solid var(--bulma-grey-light); }
192
161
 
193
- table.can-compact * tr.is-success {
194
- background-color: var(--bulma-success); }
162
+ table.can-compact * tr.is-primary {
163
+ background-color: var(--bulma-primary); }
195
164
 
196
- table.can-compact * tr.is-success:hover {
197
- background-color: var(--bulma-success) !important; }
165
+ table.can-compact * tr.is-primary:hover {
166
+ background-color: var(--bulma-primary) !important; }
198
167
 
199
168
  table.can-compact > thead {
200
169
  display: none; }
@@ -239,11 +208,11 @@ select:focus {
239
208
  z-index: 40;
240
209
  box-shadow: 2px 0 20px 0 var(--bulma-grey-light); } }
241
210
  .menu-list a.is-active, .menu-list a.is-selected, .menu-list button.is-active, .menu-list button.is-selected, .menu-list .menu-item.is-active, .menu-list .menu-item.is-selected {
242
- --bulma-menu-item-h: var(--bulma-success-h);
243
- --bulma-menu-item-s: var(--bulma-success-s);
244
- --bulma-menu-item-l: var(--bulma-success-l);
245
- --bulma-menu-item-background-l: var(--bulma-success-l);
246
- --bulma-menu-item-color-l: var(--bulma-success-invert-l); }
211
+ --bulma-menu-item-h: var(--bulma-primary-h);
212
+ --bulma-menu-item-s: var(--bulma-primary-s);
213
+ --bulma-menu-item-l: var(--bulma-primary-l);
214
+ --bulma-menu-item-background-l: var(--bulma-primary-l);
215
+ --bulma-menu-item-color-l: var(--bulma-primary-invert-l); }
247
216
 
248
217
  .hoverable *:hover {
249
218
  background-color: var(--accrete-hover-color); }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "mappings": "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",
3
+ "mappings": "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",
4
4
  "sources": ["accrete.scss"],
5
5
  "names": [],
6
6
  "file": "accrete.css"