yafowil.widget.array 1.7__tar.gz → 2.0.0__tar.gz

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 (47) hide show
  1. yafowil_widget_array-2.0.0/.gitignore +18 -0
  2. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/CHANGES.rst +54 -0
  3. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/LICENSE.rst +1 -1
  4. yafowil_widget_array-2.0.0/PKG-INFO +62 -0
  5. yafowil_widget_array-2.0.0/README.rst +39 -0
  6. yafowil_widget_array-2.0.0/pyproject.toml +70 -0
  7. yafowil_widget_array-2.0.0/src/yafowil/widget/array/__init__.py +211 -0
  8. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/example.py +41 -0
  9. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/bootstrap/widget.min.css +1 -0
  10. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/bootstrap5/widget.js +282 -0
  11. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/bootstrap5/widget.min.css +1 -0
  12. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/bootstrap5/widget.min.js +1 -0
  13. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/default/widget.js +261 -0
  14. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/default/widget.min.css +1 -0
  15. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/default/widget.min.js +1 -0
  16. yafowil_widget_array-2.0.0/src/yafowil/widget/array/resources/plone5/widget.min.css +1 -0
  17. yafowil.widget.array-1.7/src/yafowil/widget/array/tests.py → yafowil_widget_array-2.0.0/src/yafowil/widget/array/tests/test_widget.py +188 -121
  18. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/widget.py +28 -9
  19. yafowil.widget.array-1.7/.jshintrc +0 -17
  20. yafowil.widget.array-1.7/MANIFEST.in +0 -6
  21. yafowil.widget.array-1.7/PKG-INFO +0 -202
  22. yafowil.widget.array-1.7/README.rst +0 -22
  23. yafowil.widget.array-1.7/bootstrap.py +0 -170
  24. yafowil.widget.array-1.7/buildout.cfg +0 -32
  25. yafowil.widget.array-1.7/setup.cfg +0 -7
  26. yafowil.widget.array-1.7/setup.py +0 -61
  27. yafowil.widget.array-1.7/src/yafowil/__init__.py +0 -1
  28. yafowil.widget.array-1.7/src/yafowil/widget/__init__.py +0 -1
  29. yafowil.widget.array-1.7/src/yafowil/widget/array/__init__.py +0 -37
  30. yafowil.widget.array-1.7/src/yafowil/widget/array/resources/bootstrap/widget.css +0 -67
  31. yafowil.widget.array-1.7/src/yafowil/widget/array/resources/default/widget.css +0 -65
  32. yafowil.widget.array-1.7/src/yafowil/widget/array/resources/plone5/widget.css +0 -93
  33. yafowil.widget.array-1.7/src/yafowil/widget/array/resources/widget.js +0 -235
  34. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/PKG-INFO +0 -202
  35. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/SOURCES.txt +0 -33
  36. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/dependency_links.txt +0 -1
  37. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/entry_points.txt +0 -5
  38. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/namespace_packages.txt +0 -2
  39. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/not-zip-safe +0 -1
  40. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/requires.txt +0 -5
  41. yafowil.widget.array-1.7/src/yafowil.widget.array.egg-info/top_level.txt +0 -1
  42. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_add.png +0 -0
  43. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_down.png +0 -0
  44. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_down_disabled.png +0 -0
  45. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_remove.png +0 -0
  46. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_up.png +0 -0
  47. {yafowil.widget.array-1.7 → yafowil_widget_array-2.0.0}/src/yafowil/widget/array/resources/default/images/icon_up_disabled.png +0 -0
@@ -0,0 +1,18 @@
1
+ *.egg-info
2
+ *.pyc
3
+ *.pyo
4
+ /.coverage
5
+ /.mxmake/
6
+ /build
7
+ /constraints-mxdev.txt
8
+ /coverage/
9
+ /dist/
10
+ /htmlcov/
11
+ /node_modules/
12
+ /pnpm-lock.yaml
13
+ /py2/
14
+ /py3/
15
+ /pypy3/
16
+ /requirements-mxdev.txt
17
+ /sources/
18
+ /venv/
@@ -1,6 +1,60 @@
1
1
  Changes
2
2
  =======
3
3
 
4
+ 2.0.0 (2026-02-03)
5
+ ------------------
6
+
7
+ - Refactor package layout to use ``pyproject.toml`` and implicit namespace packages.
8
+ [rnix]
9
+
10
+ - Update jQuery to version ``4.0.0-beta.2``.
11
+ [lenadax]
12
+
13
+ - Use ``bootstrap-icons`` font instead of glyphicons.
14
+ [lenadax]
15
+
16
+ - Add visual effects to distinguish rows that have been moved or created.
17
+ [lenadax]
18
+
19
+ - Implement dark theme for ``Bootstrap5`` dark theme mode.
20
+ [lenadax]
21
+
22
+ - Use rollup for bundling scss. Use ``make rollup`` to compile js and scss.
23
+ [lenadax]
24
+
25
+ - Use ``webtestrunner`` instead of ``karma`` for js tests. Use ``make wtr`` to run tests.
26
+ [lenadax]
27
+
28
+ - Use ``pnpm`` as package manager.
29
+ [lenadax]
30
+
31
+ - Create Bootstrap5 widget version.
32
+ [lenadax]
33
+
34
+
35
+ 2.0a1 (2023-05-15)
36
+ ------------------
37
+
38
+ - Add ``webresource`` support.
39
+ [rnix]
40
+
41
+ - Add ``inside_template`` JS utility function.
42
+ [rnix]
43
+
44
+ - ``array.hooks`` are deprecated. Use ``on_array_event`` instead.
45
+ [rnix]
46
+
47
+ - Rewrite JavaScript using ES6.
48
+ [rnix]
49
+
50
+
51
+ 1.8 (2025-11-03)
52
+ ----------------
53
+
54
+ - Pin upper versions of dependencies.
55
+ [lenadax]
56
+
57
+
4
58
  1.7 (2022-10-06)
5
59
  ----------------
6
60
 
@@ -2,7 +2,7 @@ License
2
2
  =======
3
3
 
4
4
  Copyright (c) 2011-2021, BlueDynamics Alliance, Austria, Germany, Switzerland
5
- Copyright (c) 2021, Yafowil Contributors
5
+ Copyright (c) 2021-2025, Yafowil Contributors
6
6
  All rights reserved.
7
7
 
8
8
  Redistribution and use in source and binary forms, with or without
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: yafowil.widget.array
3
+ Version: 2.0.0
4
+ Summary: Array Widget for YAFOWIL
5
+ Author-email: Yafowil Contributors <dev@conestack.org>
6
+ License: Simplified BSD
7
+ License-File: LICENSE.rst
8
+ Classifier: Environment :: Web Environment
9
+ Classifier: License :: OSI Approved :: BSD License
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
18
+ Requires-Dist: yafowil>3.99
19
+ Provides-Extra: test
20
+ Requires-Dist: lxml; extra == 'test'
21
+ Requires-Dist: pytest; extra == 'test'
22
+ Description-Content-Type: text/x-rst
23
+
24
+ .. image:: https://img.shields.io/pypi/v/yafowil.widget.array.svg
25
+ :target: https://pypi.python.org/pypi/yafowil.widget.array
26
+ :alt: Latest PyPI version
27
+
28
+ .. image:: https://img.shields.io/pypi/dm/yafowil.widget.array.svg
29
+ :target: https://pypi.python.org/pypi/yafowil.widget.array
30
+ :alt: Number of PyPI downloads
31
+
32
+ .. image:: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_py.yaml/badge.svg
33
+ :target: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_py.yaml
34
+ :alt: Test yafowil.widget.array Python
35
+
36
+ .. image:: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_js.yaml/badge.svg
37
+ :target: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_js.yaml
38
+ :alt: Test yafowil.widget.array JS
39
+
40
+ This is an **array widget** for for `YAFOWIL
41
+ <http://pypi.python.org/pypi/yafowil>`_.
42
+
43
+ - `Documentation <http://docs.yafowil.info/en/latest/blueprints.html#array>`_
44
+ - `DEMO - see it Live <http://demo.yafowil.info/++widget++yafowil.widget.array/index.html>`_
45
+
46
+ Source Code
47
+ ===========
48
+
49
+ The sources are in a GIT DVCS with its main branches at
50
+ `github <http://github.com/conestack/yafowil.widget.array>`_.
51
+
52
+ We'd be happy to see many forks and pull-requests to make YAFOWIL even better.
53
+
54
+
55
+ Contributors
56
+ ============
57
+
58
+ - Robert Niederreiter
59
+
60
+ - Georg Bernhard
61
+
62
+ - Lena Daxenbichler
@@ -0,0 +1,39 @@
1
+ .. image:: https://img.shields.io/pypi/v/yafowil.widget.array.svg
2
+ :target: https://pypi.python.org/pypi/yafowil.widget.array
3
+ :alt: Latest PyPI version
4
+
5
+ .. image:: https://img.shields.io/pypi/dm/yafowil.widget.array.svg
6
+ :target: https://pypi.python.org/pypi/yafowil.widget.array
7
+ :alt: Number of PyPI downloads
8
+
9
+ .. image:: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_py.yaml/badge.svg
10
+ :target: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_py.yaml
11
+ :alt: Test yafowil.widget.array Python
12
+
13
+ .. image:: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_js.yaml/badge.svg
14
+ :target: https://github.com/conestack/yafowil.widget.array/actions/workflows/test_js.yaml
15
+ :alt: Test yafowil.widget.array JS
16
+
17
+ This is an **array widget** for for `YAFOWIL
18
+ <http://pypi.python.org/pypi/yafowil>`_.
19
+
20
+ - `Documentation <http://docs.yafowil.info/en/latest/blueprints.html#array>`_
21
+ - `DEMO - see it Live <http://demo.yafowil.info/++widget++yafowil.widget.array/index.html>`_
22
+
23
+ Source Code
24
+ ===========
25
+
26
+ The sources are in a GIT DVCS with its main branches at
27
+ `github <http://github.com/conestack/yafowil.widget.array>`_.
28
+
29
+ We'd be happy to see many forks and pull-requests to make YAFOWIL even better.
30
+
31
+
32
+ Contributors
33
+ ============
34
+
35
+ - Robert Niederreiter
36
+
37
+ - Georg Bernhard
38
+
39
+ - Lena Daxenbichler
@@ -0,0 +1,70 @@
1
+ [build-system]
2
+ requires = ["hatchling", "hatch-fancy-pypi-readme"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "yafowil.widget.array"
7
+ version = "2.0.0"
8
+ description = "Array Widget for YAFOWIL"
9
+ readme = "README.rst"
10
+ license = {text = "Simplified BSD"}
11
+ authors = [{name = "Yafowil Contributors", email = "dev@conestack.org"}]
12
+ classifiers = [
13
+ "Environment :: Web Environment",
14
+ "Operating System :: OS Independent",
15
+ "Programming Language :: Python",
16
+ "Programming Language :: Python :: 3.10",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ "Programming Language :: Python :: 3.14",
21
+ "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
22
+ "License :: OSI Approved :: BSD License",
23
+ ]
24
+ dependencies = [
25
+ "yafowil>3.99",
26
+ ]
27
+
28
+ [project.optional-dependencies]
29
+ test = [
30
+ "lxml",
31
+ "pytest",
32
+ ]
33
+
34
+ [project.entry-points."yafowil.plugin"]
35
+ register = "yafowil.widget.array:register"
36
+ example = "yafowil.widget.array.example:get_example"
37
+
38
+ [tool.hatch.metadata.hooks.fancy-pypi-readme]
39
+ content-type = "text/x-rst"
40
+ fragments = [
41
+ {path = "README.rst"},
42
+ {text = "\n\n"},
43
+ {path = "CHANGES.rst"},
44
+ {text = "\n\n"},
45
+ {path = "LICENSE.rst"},
46
+ ]
47
+
48
+ [tool.hatch.build.targets.sdist]
49
+ exclude = [
50
+ "/.github/",
51
+ "/js/",
52
+ "/Makefile",
53
+ "/mx.ini",
54
+ "/mxmake.yaml",
55
+ "/package-lock.json",
56
+ "/package.json",
57
+ "/pnpm-lock.yaml",
58
+ "/scss",
59
+ ]
60
+
61
+ [tool.hatch.build.targets.wheel]
62
+ packages = ["src/yafowil"]
63
+
64
+ [tool.pytest.ini_options]
65
+ consider_namespace_packages = true
66
+ addopts = ["--import-mode=importlib"]
67
+ pythonpath = "src"
68
+
69
+ [tool.zest-releaser]
70
+ create-wheel = true
@@ -0,0 +1,211 @@
1
+ from yafowil.base import factory
2
+ from yafowil.utils import entry_point
3
+ import os
4
+ import webresource as wr
5
+
6
+
7
+ resources_dir = os.path.join(os.path.dirname(__file__), 'resources')
8
+
9
+
10
+ ##############################################################################
11
+ # Common
12
+ ##############################################################################
13
+
14
+ # webresource ################################################################
15
+
16
+ array_js = wr.ScriptResource(
17
+ name='yafowil-array-js',
18
+ directory=os.path.join(resources_dir, 'default'),
19
+ path='yafowil-array/default',
20
+ depends='jquery-js',
21
+ resource='widget.js',
22
+ compressed='widget.min.js'
23
+ )
24
+
25
+ # B/C resources ##############################################################
26
+
27
+ js = [{
28
+ 'group': 'yafowil.widget.array.common',
29
+ 'resource': 'default/widget.js',
30
+ 'order': 20,
31
+ }]
32
+
33
+
34
+ ##############################################################################
35
+ # Default
36
+ ##############################################################################
37
+
38
+ # webresource ################################################################
39
+
40
+ default_resources = wr.ResourceGroup(
41
+ name='yafowil.widget.array',
42
+ directory=resources_dir,
43
+ path='yafowil-array'
44
+ )
45
+ default_resources.add(array_js)
46
+ default_resources.add(wr.StyleResource(
47
+ name='yafowil-array-css',
48
+ directory=os.path.join(resources_dir, 'default'),
49
+ path='yafowil-array/default',
50
+ resource='widget.min.css'
51
+ ))
52
+
53
+ # B/C resources ##############################################################
54
+
55
+ default_css = [{
56
+ 'group': 'yafowil.widget.array.common',
57
+ 'resource': 'default/widget.min.css',
58
+ 'order': 20,
59
+ }]
60
+
61
+
62
+ ##############################################################################
63
+ # Bootstrap
64
+ ##############################################################################
65
+
66
+ # webresource ################################################################
67
+
68
+ bootstrap_resources = wr.ResourceGroup(
69
+ name='yafowil.widget.array',
70
+ directory=resources_dir,
71
+ path='yafowil-array'
72
+ )
73
+ bootstrap_resources.add(array_js)
74
+ bootstrap_resources.add(wr.StyleResource(
75
+ name='yafowil-array-css',
76
+ directory=os.path.join(resources_dir, 'bootstrap'),
77
+ path='yafowil-array/bootstrap',
78
+ resource='widget.min.css'
79
+ ))
80
+
81
+ # B/C resources ##############################################################
82
+
83
+ bootstrap_css = [{
84
+ 'group': 'yafowil.widget.array.common',
85
+ 'resource': 'bootstrap/widget.min.css',
86
+ 'order': 20,
87
+ }]
88
+
89
+
90
+ ##############################################################################
91
+ # Bootstrap 5
92
+ ##############################################################################
93
+
94
+ # webresource ################################################################
95
+ bootstrap5_resources = wr.ResourceGroup(
96
+ name='yafowil.widget.array',
97
+ directory=resources_dir,
98
+ path='yafowil-array'
99
+ )
100
+ bootstrap5_js = wr.ScriptResource(
101
+ name='yafowil-array-js',
102
+ directory=os.path.join(resources_dir, 'bootstrap5'),
103
+ path='yafowil-array/bootstrap5',
104
+ depends='jquery-js',
105
+ resource='widget.js',
106
+ compressed='widget.min.js'
107
+ )
108
+ bootstrap5_resources.add(bootstrap5_js)
109
+ bootstrap5_resources.add(wr.StyleResource(
110
+ name='yafowil-array-css',
111
+ directory=os.path.join(resources_dir, 'bootstrap5'),
112
+ path='yafowil-array/bootstrap5',
113
+ resource='widget.min.css'
114
+ ))
115
+
116
+ # B/C resources ##############################################################
117
+
118
+ bootstrap5_css = [{
119
+ 'group': 'yafowil.widget.array.common',
120
+ 'resource': 'bootstrap5/widget.min.css',
121
+ 'order': 20,
122
+ }]
123
+
124
+
125
+
126
+ ##############################################################################
127
+ # Plone5
128
+ ##############################################################################
129
+
130
+ # webresource ################################################################
131
+
132
+ plone5_resources = wr.ResourceGroup(
133
+ name='yafowil.widget.array',
134
+ directory=resources_dir,
135
+ path='yafowil-array'
136
+ )
137
+ plone5_resources.add(array_js)
138
+ plone5_resources.add(wr.StyleResource(
139
+ name='yafowil-array-css',
140
+ directory=os.path.join(resources_dir, 'plone5'),
141
+ path='yafowil-array/plone5',
142
+ resource='widget.min.css'
143
+ ))
144
+
145
+ # B/C resources ##############################################################
146
+
147
+ plone5_css = [{
148
+ 'group': 'yafowil.widget.array.common',
149
+ 'resource': 'plone5/widget.min.css',
150
+ 'order': 20,
151
+ }]
152
+
153
+
154
+ ##############################################################################
155
+ # Registration
156
+ ##############################################################################
157
+
158
+ @entry_point(order=10)
159
+ def register():
160
+ from yafowil.widget.array import widget # noqa
161
+
162
+ widget_name = 'yafowil.widget.array'
163
+
164
+ # Default
165
+ factory.register_theme(
166
+ 'default',
167
+ widget_name,
168
+ resources_dir,
169
+ js=js,
170
+ css=default_css
171
+ )
172
+ factory.register_resources('default', widget_name, default_resources)
173
+
174
+ # Bootstrap
175
+ factory.register_theme(
176
+ ['bootstrap', 'bootstrap3'],
177
+ widget_name,
178
+ resources_dir,
179
+ js=js,
180
+ css=bootstrap_css
181
+ )
182
+ factory.register_resources(
183
+ ['bootstrap', 'bootstrap3'],
184
+ widget_name,
185
+ bootstrap_resources
186
+ )
187
+
188
+ # Bootstrap 5
189
+ factory.register_theme(
190
+ ['bootstrap5'],
191
+ widget_name,
192
+ resources_dir,
193
+ js=bootstrap5_js,
194
+ css=bootstrap5_css
195
+ )
196
+
197
+ factory.register_resources(
198
+ ['bootstrap5'],
199
+ widget_name,
200
+ bootstrap5_resources
201
+ )
202
+
203
+ # Plone 5
204
+ factory.register_theme(
205
+ 'plone5',
206
+ widget_name,
207
+ resources_dir,
208
+ js=js,
209
+ css=plone5_css
210
+ )
211
+ factory.register_resources('plone5', widget_name, plone5_resources)
@@ -366,6 +366,46 @@ def array_with_array_with_array_with_compounds():
366
366
  }
367
367
 
368
368
 
369
+ DOC_ARRAY_DISPLAY = """\
370
+ Display Mode
371
+ ------------
372
+
373
+ Display mode renders the widget and its children uneditable.
374
+
375
+ .. code-block:: python
376
+
377
+ value = ['1', '2', '3', '4']
378
+ array = factory('#array', value=value, mode='display', props={
379
+ 'label': 'An Array in display mode',
380
+ 'help': 'I am an array',
381
+ })
382
+ array['field'] = factory('#arrayfield:text', props={
383
+ 'label': 'Entry in display mode',
384
+ 'help': 'I am an array entry',
385
+ })
386
+ """
387
+
388
+
389
+ def array_display():
390
+ form = factory(
391
+ 'fieldset',
392
+ name='yafowil.widget.array_display')
393
+ value = ['I am not editable.', 'Me neither!']
394
+ array = form['array'] = factory('#array', mode='display', value=value, props={
395
+ 'label': 'An Array in display mode',
396
+ 'help': 'I am an array'
397
+ })
398
+ array['field'] = factory('#arrayfield:text', props={
399
+ 'label': 'Entry in display mode',
400
+ 'help': 'I am an array entry',
401
+ })
402
+ return {
403
+ 'widget': form,
404
+ 'doc': DOC_ARRAY_DISPLAY,
405
+ 'title': 'Display Mode',
406
+ }
407
+
408
+
369
409
  def get_example():
370
410
  return [
371
411
  array_with_leafs(),
@@ -374,4 +414,5 @@ def get_example():
374
414
  array_with_array_with_compounds(),
375
415
  array_with_array_with_array_with_leafs(),
376
416
  array_with_array_with_array_with_compounds(),
417
+ array_display(),
377
418
  ]
@@ -0,0 +1 @@
1
+ .arraytemplate{display:none}.icon-circle-arrow-down,.icon-circle-arrow-up,.icon-minus-sign,.icon-plus-sign{display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;margin-left:2px;position:relative;top:1px}.icon-plus-sign:before{content:""}.icon-minus-sign:before{content:""}.icon-circle-arrow-up:before{content:""}.icon-circle-arrow-down:before{content:""}.array table{border-radius:4px;margin-bottom:0}.array table table{border-right:1px solid #ddd;margin-top:10px}.array table table th{padding-left:0}.array table td.widget{padding:0 0 10px}.array table td.widget .form-group{margin:0}.array table th{vertical-align:middle}.array table td.actions,.array table th.head_actions{width:5.5em}.array .array_actions{display:inline-block;margin-top:.6em;padding-right:.45em;width:5.5em}.array .array_actions a{background:none;float:right}.array .array_actions a.array_row_down_disabled,.array .array_actions a.array_row_up_disabled{filter:alpha(opacity=40);opacity:.4}.array .array_actions span{color:var(--yafowil-accent-color,#0d6efd)}