alchemy-form 0.3.0-alpha.2 → 0.3.0-alpha.4

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 (46) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/assets/stylesheets/form/elements/_button.scss +1 -1
  3. package/assets/stylesheets/form/elements/_enum_badge.scss +7 -0
  4. package/assets/stylesheets/form/elements/_feedback_input.scss +0 -0
  5. package/assets/stylesheets/form/elements/_field_array.scss +10 -3
  6. package/assets/stylesheets/form/elements/_query_builder.scss +0 -0
  7. package/assets/stylesheets/form/elements/_select.scss +176 -176
  8. package/assets/stylesheets/form/elements/_table.scss +169 -53
  9. package/assets/stylesheets/form/elements/_tabs.scss +25 -35
  10. package/assets/stylesheets/form/elements/_toggle.scss +0 -0
  11. package/assets/stylesheets/form/elements/index.scss +1 -1
  12. package/assets/stylesheets/form/general/_colors.scss +0 -0
  13. package/config/routes.js +10 -0
  14. package/controller/form_api_controller.js +28 -0
  15. package/element/00_form_base.js +82 -27
  16. package/element/al_button.js +12 -1
  17. package/element/al_enum_badge.js +157 -0
  18. package/element/al_field.js +134 -39
  19. package/element/al_field_array.js +22 -0
  20. package/element/al_field_schema.js +222 -55
  21. package/element/al_form.js +9 -6
  22. package/element/al_select.js +2 -2
  23. package/element/al_table.js +10 -1
  24. package/element/al_virtual_scroll.js +2 -1
  25. package/helper/field_recompute_handler.js +0 -2
  26. package/package.json +1 -1
  27. package/view/form/elements/al_enum_badge.hwk +9 -0
  28. package/view/form/elements/alchemy_field.hwk +2 -0
  29. package/view/form/elements/alchemy_field_array.hwk +17 -6
  30. package/view/form/elements/alchemy_field_array_entry.hwk +11 -5
  31. package/view/form/elements/alchemy_field_schema.hwk +2 -2
  32. package/view/form/elements/alchemy_select_item.hwk +1 -1
  33. package/view/form/inputs/edit/enum.hwk +1 -1
  34. package/view/form/inputs/edit/mixed.hwk +9 -0
  35. package/view/form/inputs/edit_sw/fallback.hwk +1 -0
  36. package/view/form/inputs/view/association_alias.hwk +16 -0
  37. package/view/form/inputs/view/schema.hwk +4 -0
  38. package/view/form/inputs/view/string.hwk +1 -1
  39. package/view/form/inputs/view_inline/belongs_to.hwk +16 -0
  40. package/view/form/inputs/view_inline/boolean.hwk +2 -2
  41. package/view/form/inputs/view_inline/datetime.hwk +1 -1
  42. package/view/form/inputs/view_inline/enum.hwk +11 -7
  43. package/view/form/inputs/view_inline/objectid.hwk +1 -1
  44. package/view/form/inputs/view_inline/string.hwk +1 -1
  45. package/view/form/wrappers/edit_sw/default.hwk +1 -0
  46. package/assets/stylesheets/form/elements/_badge.scss +0 -41
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## 0.3.0-alpha.4
2
+
3
+ * Always make `al-field`'s `getFieldType()` method return a string
4
+ * Add the `mixed` field view
5
+ * Just clear the al-table when an falsy fieldset is assigned
6
+ * Explicitly pass on the `self` value in alchemy_select_item
7
+ * Add more info to enum badges
8
+ * Improve array-field buttons
9
+
10
+ ## 0.3.0-alpha.3 (2024-08-04)
11
+
12
+ * Add `original_value_container` property to `<al-field>` elements, for when they're not inside a `<al-form>` element but still need the original container
13
+ * Use `getParentFieldElement()` instead of `alchemy_form` when resolving inherited attributes
14
+ * Also let the `mode` attribute inherit
15
+ * Add template for `view` mode for `schema` fields
16
+ * Move the badge element to `styleboost`
17
+ * Make `al-table` contents responsive/scrollable by default
18
+ * Fix `<al-field-schema>#getSchemaSupplierField()` not finding the supplier field when it's a nested schema
19
+ * Don't let `<al-field-schema>#sub_fields` return meta fields
20
+ * Fix `<al-field-schema>` having issues with nested `<al-field-schema>` fields
21
+ * Make `<al-field>` remember forced `schema` values
22
+ * Prefer `fallback` template over `string` template when no specific template is found for a field
23
+ * Make `<al-field>` prefer the nearest descendant when getting the `value_element` property
24
+ * Support the `<al-field>` `config` property being a `Schema` instance (for now)
25
+ * Add API action to get enum info
26
+ * Make `<al-field-schema>` `original_value` getter aware of it being in an array
27
+
1
28
  ## 0.3.0-alpha.2 (2024-02-25)
2
29
 
3
30
  * Added `.alchemy-badge` class
@@ -13,6 +40,7 @@
13
40
  * Add settings editor element
14
41
  * Make `readonly` attribute work on `al-field` and `al-form` elements
15
42
  * Use "alchemy-field-title" and "alchemy-field-description" microcopy in `al-field` labels
43
+ * Add `zone` attribute for use in the microcopy system
16
44
 
17
45
  ## 0.2.10 (2024-01-15)
18
46
 
@@ -1,7 +1,7 @@
1
1
  @use "styleboost";
2
2
 
3
3
  al-button {
4
- @extend .default-button;
4
+ @extend .button;
5
5
 
6
6
  display: inline-block;
7
7
  position: relative;
@@ -0,0 +1,7 @@
1
+ @use "styleboost";
2
+
3
+ @layer defaults {
4
+ al-enum-badge {
5
+ @extend .badge;
6
+ }
7
+ }
@@ -5,13 +5,20 @@ al-field-array {
5
5
  al-field-array-entry {
6
6
  display: flex;
7
7
 
8
- > .button {
8
+ > .button-remove-wrapper {
9
9
  display: flex;
10
10
  align-content: center;
11
- padding-left: 0.5rem;
11
+ padding-left: 0.75rem;
12
+
13
+ > .remove {
14
+ height: 100%;
15
+ display: flex;
16
+ flex-flow: column;
17
+ gap: 0.5em;
18
+ }
12
19
  }
13
20
 
14
- .button .remove > * {
21
+ .button-remove-wrapper .remove > * {
15
22
  writing-mode: vertical-rl;
16
23
  }
17
24
  }
@@ -1,215 +1,215 @@
1
- al-select {
2
- box-sizing: border-box;
3
- position: relative;
4
- display: block;
1
+ @use "styleboost";
2
+ @use "styleboost/inputs";
5
3
 
6
- --active-item-bg: #a7deff;
7
- --active-item-fg: #272727;
4
+ @layer defaults {
5
+ $accent: styleboost.themePropertyVar('color', 'accent', 'form');
6
+ $accent_rgb: styleboost.themePropertyVar('color', 'accent-rgb', 'form');
8
7
 
9
- --selected-item-bg: #31317a;
10
- --selected-item-fg: #f5f5f5;
8
+ al-select {
9
+ // Only extend the input defaults (custom properties),
10
+ // that way we don't inherit the actual applied values to padding etc
11
+ @extend .input-defaults;
11
12
 
12
- .dropdown-content,
13
- .value-wrapper,
14
- .dropdown {
15
- box-sizing: border-box;
16
- }
13
+ --al-select-color-active-item-bg: var(--color-t-current-bg, var(--color-t-primary-bg));
14
+ --al-select-color-active-item-fg: var(--color-t-current-bg-text, var(--color-t-primary-bg-text));
17
15
 
18
- &:focus {
19
- .value-wrapper {
20
- border-color: rgba(82, 168, 236, 0.8) !important;
16
+ --al-select-color-selected-item-bg: var(--color-t-current-fill, var(--color-t-primary-fill));
17
+ --al-select-color-selected-item-fg: var(--color-t-current-fill-text, var(--color-t-primary-fill-text));
18
+
19
+ --color-p-select-border: var(--color-t-current-bg-subtle);
20
+
21
+ --color-p-input-active-item-bg: var(--color-p-input-accent);
22
+ --color-p-input-active-item-bg-text: var(--color-p-input-accent-text);
23
+
24
+ --color-p-input-selected-item-bg: var(--color-p-input-accent);
25
+ --color-p-input-selected-item-bg-text: var(--color-p-input-accent-text);
26
+
27
+ display: block;
28
+ border-radius: var(--size-p-input-border-radius);
29
+ border-width: var(--size-p-input-border);
30
+ border-style: var(--style-p-input-border);
31
+
32
+ &:focus {
33
+ .value-wrapper {
34
+ border-color: rgba(#{$accent_rgb}, 0.8) !important;
35
+ }
21
36
  }
22
- }
23
37
 
24
- // Default styles:
25
- // for inputs with single & multiple values
26
- .value-wrapper {
27
- border: 1px solid #d0d0d0;
28
- padding: 8px 8px;
29
- display: inline-block;
30
- width: 100%;
31
- position: relative;
32
- z-index: 1;
33
- border-radius: 3px;
34
- display: flex;
35
- flex-wrap: wrap;
36
- //box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
37
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
38
-
39
- align-items: center;
40
-
41
- input.type-area {
42
- height: 1.5rem !important;
38
+ // The value wrapper is the main visible part of the select
39
+ .value-wrapper {
40
+ border-radius: var(--size-p-input-border-radius);
41
+
42
+ padding-bottom: var(--size-p-input-spacer-y);
43
+ padding-top: var(--size-p-input-spacer-y);
44
+ padding-left: var(--size-p-input-spacer-x);
45
+ padding-right: var(--size-p-input-spacer-x);
46
+
47
+ width: 100%;
48
+ display: flex;
49
+ position: relative;
50
+ z-index: 1;
51
+ flex-wrap: wrap;
52
+ align-items: center;
53
+
54
+ input.type-area {
55
+ height: 1.5rem !important;
56
+ }
43
57
  }
44
- }
45
58
 
46
- &[aria-expanded="true"] .value-wrapper {
47
- border-radius: 3px 3px 0 0;
48
- }
59
+ &[aria-expanded="true"] {
60
+ border-radius: var(--size-p-input-border-radius) var(--size-p-input-border-radius) 0 0;
61
+ }
49
62
 
50
- // Single value input
51
- &:not([multiple]) {
52
- .value-wrapper {
53
- border-color: #b8b8b8;
54
- background-image: linear-gradient(to bottom, #fefefe, #f2f2f2);
55
- cursor: pointer;
63
+ // Single value input
64
+ &:not([multiple]) {
65
+ .value-wrapper {
66
+ //border-color: #b8b8b8;
67
+
68
+ cursor: pointer;
69
+
70
+ &::after {
71
+ position: absolute;
72
+ top: 50%;
73
+ right: 15px;
74
+ display: block;
75
+ width: 0;
76
+ height: 0;
77
+ margin-top: -3px;
78
+ border-color: #808080 transparent transparent transparent;
79
+ border-style: solid;
80
+ border-width: 5px 5px 0 5px;
81
+ content: ' ';
82
+ }
83
+ }
56
84
 
57
- &::after {
58
- position: absolute;
59
- top: 50%;
60
- right: 15px;
61
- display: block;
62
- width: 0;
63
- height: 0;
64
- margin-top: -3px;
65
- border-color: #808080 transparent transparent transparent;
66
- border-style: solid;
67
- border-width: 5px 5px 0 5px;
68
- content: ' ';
85
+ &[aria-expanded="false"] .value-wrapper .type-area {
86
+ cursor: pointer;
69
87
  }
70
88
  }
71
89
 
72
- &[aria-expanded="true"] .value-wrapper {
73
- background-image: none;
90
+ // Multiple value input
91
+ &[multiple] {
92
+ .value-wrapper {
93
+ cursor: text;
94
+ }
74
95
  }
75
96
 
76
- &[aria-expanded="false"] .value-wrapper .type-area {
77
- cursor: pointer;
97
+ .value-wrapper {
98
+ min-width: 5rem;
99
+ overflow: hidden;
78
100
  }
79
- }
80
101
 
81
- // Multiple value input
82
- &[multiple] {
83
- .value-wrapper {
84
- cursor: text;
102
+ .type-area {
103
+ font-family: inherit;
104
+ //font-size: 13px;
105
+ //line-height: 18px;
106
+ display: inline-block !important;
107
+ padding: 0 !important;
108
+ min-height: 0 !important;
109
+ max-height: none !important;
110
+ max-width: 100% !important;
111
+ margin: 0 1px !important;
112
+ text-indent: 0 !important;
113
+ border: 0 none !important;
114
+ background: none !important;
115
+ line-height: inherit !important;
116
+ box-shadow: none !important;
117
+ outline: none !important;
118
+ flex: 0 1 auto;
119
+ margin-right: 20px !important;
85
120
  }
86
- }
87
121
 
88
- .value-wrapper {
89
- min-width: 5rem;
90
- overflow: hidden;
91
- background: #fff;
122
+ .dropdown {
123
+ @extend .input-defaults;
92
124
 
93
- color: #303030;
94
- font-family: inherit;
95
- font-size: 13px;
96
- line-height: 18px;
97
- -webkit-font-smoothing: inherit;
98
- }
125
+ // The dropdown has to be hidden by default
126
+ display: none;
127
+ position: absolute;
128
+ z-index: 999999;
129
+ left: 0px;
99
130
 
100
- .type-area {
101
- color: #303030;
102
- font-family: inherit;
103
- font-size: 13px;
104
- line-height: 18px;
105
- display: inline-block !important;
106
- padding: 0 !important;
107
- min-height: 0 !important;
108
- max-height: none !important;
109
- max-width: 100% !important;
110
- margin: 0 1px !important;
111
- text-indent: 0 !important;
112
- border: 0 none !important;
113
- background: none !important;
114
- line-height: inherit !important;
115
- box-shadow: none !important;
116
- outline: none !important;
117
- flex: 0 1 auto;
118
- margin-right: 20px !important;
119
- }
131
+ margin: 0 0 0 -1px;
120
132
 
121
- .dropdown {
122
- color: #303030;
123
- font-family: inherit;
124
- font-size: 13px;
125
- line-height: 18px;
126
- -webkit-font-smoothing: inherit;
127
- display: none;
128
-
129
- position: absolute;
130
- z-index: 999999;
131
- border: 1px solid #d0d0d0;
132
- background: #fff;
133
- margin: -1px 0 0 0;
134
- border-top: 0 none;
135
-
136
- // Make it scroll
137
- overflow-y: auto;
138
- overflow-x: hidden;
139
- max-height: 200px;
140
- }
133
+ border-radius: 0 0 var(--size-p-input-border-radius) var(--size-p-input-border-radius);
134
+ border-width: var(--size-p-input-border);
135
+ border-style: var(--style-p-input-border);
136
+ border-color: inherit;
141
137
 
142
- .dropdown-content {
143
- display: flex;
144
- }
138
+ border-top: 0 none;
145
139
 
146
- .dropdown-content {
147
- flex-flow: column nowrap;
148
- }
140
+ // Make it scroll
141
+ overflow-y: auto;
142
+ overflow-x: hidden;
143
+ max-height: 200px;
149
144
 
150
- .dropdown [role="option"] {
151
- cursor: pointer;
152
- overflow: hidden;
153
- padding: 6px 8px;
154
- flex: 1 0;
155
- }
145
+ scrollbar-width: thin;
156
146
 
157
- .dropdown [role="option"] {
147
+ [role="option"] {
148
+ cursor: pointer;
149
+ overflow: hidden;
150
+ padding: 6px 8px;
151
+ flex: 1 0;
158
152
 
159
- &:hover,
160
- &.focused {
161
- background-color: var(--active-item-bg, #f5fafd);
162
- color: var(--active-item-fg, #495c68);
163
- }
153
+ &:hover,
154
+ &.focused {
155
+ background-color: var(--color-p-input-active-item-bg);
156
+ color: var(--color-p-input-active-item-bg-text);
157
+ }
164
158
 
165
- &[selected] {
166
- background-color: var(--selected-item-bg, #f5fafd);
167
- color: var(--selected-item-fg, #495c68);
159
+ &[selected] {
160
+ background-color: var(--color-p-input-selected-item-bg);
161
+ color: var(--color-p-input-selected-item-bg-text);
162
+ }
163
+ }
168
164
  }
169
- }
170
-
171
- &[aria-expanded="true"] .dropdown {
172
- display: block !important;
173
- }
174
165
 
175
- div.value {
176
- display: inline-block;
177
- cursor: pointer;
178
- margin: 0 3px 3px 0;
179
- padding: 2px 6px;
180
- border-color: 1px solid #0073bb;
181
- background-color: #1b9dec;
182
- background-image: linear-gradient(to bottom, #1da7ee, #178ee9);
183
- box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
184
- border-radius: 3px;
185
- text-shadow: 0 1px 0 rgba(0,51,83,0.3);
186
- white-space: nowrap;
187
- color: white;
188
- }
166
+ .dropdown-content {
167
+ display: flex;
168
+ flex-flow: column nowrap;
169
+ }
189
170
 
190
- .result-info {
191
- position: fixed;
192
- left: -200vw;
193
- width: 1px;
194
- height: 1px;
195
- }
171
+ &[aria-expanded="true"] .dropdown {
172
+ display: block !important;
173
+ }
196
174
 
197
- &[multiple] .value-wrapper {
198
- al-select-item {
175
+ div.value {
199
176
  display: inline-block;
177
+ cursor: pointer;
178
+ margin: 0 3px 3px 0;
179
+ padding: 2px 6px;
180
+ border-color: 1px solid #{$accent};
200
181
 
201
- text-shadow: 0 1px 0 rgba(0,51,83,0.3);
202
- background-image: linear-gradient(to bottom, #1da7ee, #178ee9);
203
- background-repeat: repeat-x;
182
+ background-color: var(--color-p-input-selected-item-bg);
183
+ color: var(--color-p-input-selected-item-bg-text);
184
+
185
+ box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
204
186
  border-radius: 3px;
205
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), inset 0 1px rgba(255, 255, 255, 0.03);
206
- padding: 2px 6px;
207
- margin: 0 3px 3px 0;
208
- color: white;
209
- border: 1px solid #0073bb;
187
+ text-shadow: 0 1px 0 rgba(0,51,83,0.3);
188
+ white-space: nowrap;
189
+ }
190
+
191
+ .result-info {
192
+ position: fixed;
193
+ left: -200vw;
194
+ width: 1px;
195
+ height: 1px;
196
+ }
197
+
198
+ &[multiple] .value-wrapper {
199
+ al-select-item {
200
+ display: inline-block;
201
+
202
+ text-shadow: 0 1px 0 rgba(0,51,83,0.3);
203
+ background-color: var(--color-p-input-selected-item-bg);
204
+ color: var(--color-p-input-selected-item-bg-text);
205
+
206
+ border-radius: 3px;
207
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), inset 0 1px rgba(255, 255, 255, 0.03);
208
+ padding: 2px 6px;
209
+ margin: 0 3px 3px 0;
210
+
211
+ border: 1px solid #{$accent};
210
212
 
211
- &.active {
212
- background-image: linear-gradient(to bottom, #008fd8, #0075cf);
213
213
  }
214
214
  }
215
215
  }