accrete 0.0.150__py3-none-any.whl → 0.0.151__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.
- accrete/contrib/log/queries.py +3 -1
- accrete/contrib/ui/admin.py +9 -1
- accrete/contrib/ui/forms.py +57 -0
- accrete/contrib/ui/migrations/0001_initial.py +39 -0
- accrete/contrib/ui/migrations/0002_alter_theme_color_danger_alter_theme_color_link_and_more.py +38 -0
- accrete/contrib/ui/migrations/0003_alter_theme_check_user_or_tenant.py +21 -0
- accrete/contrib/ui/migrations/0004_theme_force_tenant_theme.py +18 -0
- accrete/contrib/ui/models.py +115 -1
- accrete/contrib/ui/response.py +11 -4
- accrete/contrib/ui/static/css/accrete.css +23 -57
- accrete/contrib/ui/static/css/accrete.css.map +1 -1
- accrete/contrib/ui/static/css/accrete.scss +76 -55
- accrete/contrib/ui/templates/django/forms/widgets/input.html +1 -1
- accrete/contrib/ui/templates/ui/custom_theme.html +19 -0
- accrete/contrib/ui/templates/ui/layout.html +9 -9
- accrete/contrib/ui/templates/ui/list.html +2 -2
- accrete/contrib/ui/templates/ui/message.html +2 -2
- accrete/contrib/ui/templates/ui/modal.html +3 -3
- accrete/contrib/ui/templates/ui/table.html +5 -5
- accrete/contrib/ui/templates/ui/templatetags/field.html +50 -11
- accrete/contrib/ui/templates/ui/widgets/date_weekday.html +1 -1
- accrete/contrib/ui/templates/ui/widgets/model_search_select.html +4 -3
- accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html +5 -4
- accrete/contrib/ui/templatetags/ui.py +34 -4
- accrete/contrib/ui/views.py +90 -2
- accrete/contrib/ui/widgets/search_select.py +2 -2
- accrete/contrib/user/forms.py +1 -1
- accrete/contrib/user/migrations/0009_alter_user_theme.py +18 -0
- accrete/contrib/user/migrations/0010_alter_user_theme.py +18 -0
- accrete/contrib/user/models.py +5 -3
- accrete/contrib/user/templates/user/login.html +3 -11
- accrete/contrib/user/templates/user/user_preferences.html +27 -15
- accrete/contrib/user/views.py +7 -2
- accrete/fields.py +4 -2
- accrete/managers.py +9 -0
- accrete/migrations/0009_alter_accessgroup_name.py +30 -0
- accrete/models.py +6 -4
- accrete/views.py +32 -20
- {accrete-0.0.150.dist-info → accrete-0.0.151.dist-info}/METADATA +1 -1
- {accrete-0.0.150.dist-info → accrete-0.0.151.dist-info}/RECORD +42 -33
- {accrete-0.0.150.dist-info → accrete-0.0.151.dist-info}/WHEEL +0 -0
- {accrete-0.0.150.dist-info → accrete-0.0.151.dist-info}/licenses/LICENSE +0 -0
accrete/contrib/log/queries.py
CHANGED
@@ -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("""
|
accrete/contrib/ui/admin.py
CHANGED
@@ -1,3 +1,11 @@
|
|
1
1
|
from django.contrib import admin
|
2
|
+
from .models import Theme
|
2
3
|
|
3
|
-
|
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
|
+
]
|
accrete/contrib/ui/migrations/0002_alter_theme_color_danger_alter_theme_color_link_and_more.py
ADDED
@@ -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
|
+
]
|
accrete/contrib/ui/models.py
CHANGED
@@ -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
|
-
|
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)
|
accrete/contrib/ui/response.py
CHANGED
@@ -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-
|
6
|
-
--accrete-detail-width:
|
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-
|
9
|
-
--bulma-
|
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);
|
@@ -61,20 +49,9 @@ a {
|
|
61
49
|
border-bottom-color: transparent;
|
62
50
|
border-left-color: transparent; }
|
63
51
|
|
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
52
|
.input:focus, .input:focus-within {
|
76
53
|
box-shadow: none;
|
77
|
-
border
|
54
|
+
border: 1px solid var(--bulma-primary); }
|
78
55
|
|
79
56
|
input[disabled] {
|
80
57
|
background-color: transparent !important;
|
@@ -87,32 +64,21 @@ textarea {
|
|
87
64
|
box-shadow: none !important; }
|
88
65
|
|
89
66
|
textarea:focus {
|
90
|
-
border-color: var(--bulma-
|
67
|
+
border-color: var(--bulma-primary) !important; }
|
91
68
|
|
92
69
|
.is-small.textarea, .is-small.input {
|
93
70
|
border-radius: 0;
|
94
71
|
font-size: var(--bulma-size-small); }
|
95
72
|
|
96
73
|
td > .input, td * .input, td * select, td * .select {
|
97
|
-
border-
|
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; }
|
74
|
+
border-radius: 0; }
|
104
75
|
|
105
76
|
select {
|
106
|
-
|
107
|
-
border-right: transparent !important;
|
108
|
-
border-left: transparent !important;
|
109
|
-
border-radius: 0 !important;
|
110
|
-
box-shadow: none !important;
|
111
|
-
font-weight: bold; }
|
77
|
+
box-shadow: none !important; }
|
112
78
|
|
113
79
|
select:focus {
|
114
80
|
box-shadow: none;
|
115
|
-
border
|
81
|
+
border: 1px solid var(--bulma-primary) !important; }
|
116
82
|
|
117
83
|
#detail-container {
|
118
84
|
flex-shrink: 0;
|
@@ -157,7 +123,7 @@ select:focus {
|
|
157
123
|
max-width: calc(var(--accrete-detail-width) - 6%); }
|
158
124
|
|
159
125
|
.list-entry > .box:hover, .box.selected {
|
160
|
-
box-shadow: 0 0 5px 2px var(--bulma-
|
126
|
+
box-shadow: 0 0 5px 2px var(--bulma-primary); }
|
161
127
|
|
162
128
|
.helptext {
|
163
129
|
font-style: italic !important;
|
@@ -190,11 +156,11 @@ select:focus {
|
|
190
156
|
table.can-compact * tr:first-child {
|
191
157
|
border-top: 1px solid var(--bulma-grey-light); }
|
192
158
|
|
193
|
-
table.can-compact * tr.is-
|
194
|
-
background-color: var(--bulma-
|
159
|
+
table.can-compact * tr.is-primary {
|
160
|
+
background-color: var(--bulma-primary); }
|
195
161
|
|
196
|
-
table.can-compact * tr.is-
|
197
|
-
background-color: var(--bulma-
|
162
|
+
table.can-compact * tr.is-primary:hover {
|
163
|
+
background-color: var(--bulma-primary) !important; }
|
198
164
|
|
199
165
|
table.can-compact > thead {
|
200
166
|
display: none; }
|
@@ -239,11 +205,11 @@ select:focus {
|
|
239
205
|
z-index: 40;
|
240
206
|
box-shadow: 2px 0 20px 0 var(--bulma-grey-light); } }
|
241
207
|
.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-
|
243
|
-
--bulma-menu-item-s: var(--bulma-
|
244
|
-
--bulma-menu-item-l: var(--bulma-
|
245
|
-
--bulma-menu-item-background-l: var(--bulma-
|
246
|
-
--bulma-menu-item-color-l: var(--bulma-
|
208
|
+
--bulma-menu-item-h: var(--bulma-primary-h);
|
209
|
+
--bulma-menu-item-s: var(--bulma-primary-s);
|
210
|
+
--bulma-menu-item-l: var(--bulma-primary-l);
|
211
|
+
--bulma-menu-item-background-l: var(--bulma-primary-l);
|
212
|
+
--bulma-menu-item-color-l: var(--bulma-primary-invert-l); }
|
247
213
|
|
248
214
|
.hoverable *:hover {
|
249
215
|
background-color: var(--accrete-hover-color); }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
|
-
"mappings": "AAAQ,
|
3
|
+
"mappings": "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",
|
4
4
|
"sources": ["accrete.scss"],
|
5
5
|
"names": [],
|
6
6
|
"file": "accrete.css"
|