meta_workflows 0.9.30 → 0.9.32
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.
- checksums.yaml +4 -4
- data/README.md +20 -5
- data/app/assets/javascripts/meta_workflows/controllers/lexi_form_submit_controller.js +17 -3
- data/app/assets/javascripts/meta_workflows/controllers/structured_form_submit_controller.js +45 -30
- data/app/assets/stylesheets/meta_workflows/application.css +94 -31
- data/app/controllers/concerns/meta_workflows/tray_configurable.rb +37 -0
- data/app/controllers/meta_workflows/application_controller.rb +0 -9
- data/app/views/meta_workflows/_checkbox_input.html.erb +1 -15
- data/app/views/meta_workflows/_lexi_chat_right_tray.html.erb +6 -3
- data/app/views/meta_workflows/_radio_input.html.erb +1 -0
- data/app/views/meta_workflows/_slider_input.html.erb +1 -0
- data/lib/meta_workflows/version.rb +1 -1
- metadata +3 -3
- data/app/controllers/concerns/tray_configurable.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b6e5652802f3f166ea4d2bc4860e7c3967f5be1b39fb92858dacceb7ce59990
|
4
|
+
data.tar.gz: d4ccc1608e8683b73d5a7f38e9a49fc2c7511820bd03abacb3bbacb487722313
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7ea1140103f59aa5667044d9000eb483c06fd5624ed7b761777d3b51e57e7971d040cf5295eee9e2a64a6e0f36d960f6953b65e8440b535520e0155dfd49260
|
7
|
+
data.tar.gz: 54a7458c7905680b5cb8a56dfb8a985d8bde3878cc7a7e6e3b745023c8571d6e4a6381d70b5e48668df77cd2eaf8fe2dedaf811b9dd79f551df196bb8851cdf4
|
data/README.md
CHANGED
@@ -746,7 +746,8 @@ MetaWorkflows provides a flexible tray system for building modern, multi-pane la
|
|
746
746
|
| Delta | Bottom tray | Optional collapsible tray at the bottom |
|
747
747
|
|
748
748
|
### How It Works
|
749
|
-
- The tray system is controlled by a `TrayConfigurable` concern included in your
|
749
|
+
- The tray system is controlled by a `MetaWorkflows::TrayConfigurable` concern included in your `ApplicationController`.
|
750
|
+
- The concern requires your `ApplicationController` to implement a `configure_trays` method - it will raise `NotImplementedError` if not implemented.
|
750
751
|
- By default, all trays are hidden. You must explicitly set `visible: true` for any tray you want to show.
|
751
752
|
- The engine's layout will automatically respect your tray configuration.
|
752
753
|
|
@@ -756,8 +757,17 @@ MetaWorkflows provides a flexible tray system for building modern, multi-pane la
|
|
756
757
|
|
757
758
|
```ruby
|
758
759
|
class ApplicationController < ActionController::Base
|
759
|
-
include TrayConfigurable
|
760
|
+
include MetaWorkflows::TrayConfigurable
|
760
761
|
before_action :configure_trays
|
762
|
+
|
763
|
+
private
|
764
|
+
|
765
|
+
def configure_trays
|
766
|
+
# ApplicationController must implement this method - it will raise NotImplementedError if not defined
|
767
|
+
tray_config[:beta][:visible] = false
|
768
|
+
tray_config[:gamma][:visible] = false
|
769
|
+
tray_config[:delta][:visible] = false
|
770
|
+
end
|
761
771
|
end
|
762
772
|
```
|
763
773
|
|
@@ -765,8 +775,10 @@ MetaWorkflows provides a flexible tray system for building modern, multi-pane la
|
|
765
775
|
|
766
776
|
```ruby
|
767
777
|
class PostsController < ApplicationController
|
778
|
+
private
|
779
|
+
|
768
780
|
def configure_trays
|
769
|
-
super
|
781
|
+
super # Call parent implementation first
|
770
782
|
tray_config[:beta][:visible] = true # Show Beta (left) tray
|
771
783
|
tray_config[:gamma][:visible] = false # Hide Gamma (right) tray
|
772
784
|
tray_config[:delta][:collapsible] = false # Make Delta (bottom) tray not collapsible
|
@@ -775,6 +787,7 @@ MetaWorkflows provides a flexible tray system for building modern, multi-pane la
|
|
775
787
|
```
|
776
788
|
|
777
789
|
3. **Default Behavior:**
|
790
|
+
- Your `ApplicationController` must implement the `configure_trays` method or a `NotImplementedError` will be raised.
|
778
791
|
- All trays are hidden unless set to `visible: true`.
|
779
792
|
- Trays are collapsible by default; set `collapsible: false` to disable collapsing.
|
780
793
|
|
@@ -785,8 +798,10 @@ MetaWorkflows provides a flexible tray system for building modern, multi-pane la
|
|
785
798
|
|
786
799
|
```ruby
|
787
800
|
class DashboardController < ApplicationController
|
801
|
+
private
|
802
|
+
|
788
803
|
def configure_trays
|
789
|
-
super
|
804
|
+
super # Call parent implementation first
|
790
805
|
tray_config[:beta][:visible] = true
|
791
806
|
tray_config[:gamma][:visible] = false
|
792
807
|
tray_config[:delta][:visible] = false
|
@@ -799,7 +814,7 @@ end
|
|
799
814
|
- You can override tray configuration per controller or per action as needed.
|
800
815
|
- The main content area (Alpha tray) is always visible and holds your page content.
|
801
816
|
|
802
|
-
For more advanced usage or to contribute improvements, see the tray logic in `TrayConfigurable` and the engine layout file.
|
817
|
+
For more advanced usage or to contribute improvements, see the tray logic in `MetaWorkflows::TrayConfigurable` and the engine layout file.
|
803
818
|
|
804
819
|
## Confluence Documentation
|
805
820
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Controller } from '@hotwired/stimulus';
|
2
2
|
|
3
3
|
export default class extends Controller {
|
4
|
-
static targets = ['textarea', 'form', 'structuredInputForm', 'hiddenMessage'];
|
4
|
+
static targets = ['textarea', 'form', 'structuredInputForm', 'hiddenMessage', 'structuredInput'];
|
5
5
|
|
6
6
|
connect() {
|
7
7
|
this.submitted = false;
|
@@ -14,7 +14,6 @@ export default class extends Controller {
|
|
14
14
|
handleKeyDown(event) {
|
15
15
|
if (event.key === 'Enter' && !event.shiftKey) {
|
16
16
|
event.preventDefault();
|
17
|
-
event.stopPropagation();
|
18
17
|
this.handleSubmit();
|
19
18
|
}
|
20
19
|
}
|
@@ -24,7 +23,22 @@ export default class extends Controller {
|
|
24
23
|
return;
|
25
24
|
}
|
26
25
|
|
27
|
-
|
26
|
+
// Check if we have structured input selections
|
27
|
+
const hasStructuredSelections = this.hasStructuredInputTargets.some(input =>
|
28
|
+
input.checked || (input.type === 'range' && input.value !== input.min)
|
29
|
+
);
|
30
|
+
|
31
|
+
if (hasStructuredSelections) {
|
32
|
+
// Submit the structured form to StructuredHumansController
|
33
|
+
this.submitted = true;
|
34
|
+
this.hideStructuredInputForm();
|
35
|
+
this.structuredInputFormTarget.requestSubmit();
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
// Otherwise, handle normal text submission to HumansController
|
40
|
+
const textValue = this.hasTextareaTarget ? this.textareaTarget.value.trim() : '';
|
41
|
+
if (!textValue) {
|
28
42
|
return;
|
29
43
|
}
|
30
44
|
|
@@ -1,42 +1,61 @@
|
|
1
1
|
import { Controller } from '@hotwired/stimulus';
|
2
2
|
|
3
3
|
export default class extends Controller {
|
4
|
-
static targets = ['form', '
|
4
|
+
static targets = ['form', 'checkbox', 'slider'];
|
5
5
|
|
6
6
|
connect() {
|
7
7
|
this.submitted = false;
|
8
|
+
this.setupKeyboardListener();
|
8
9
|
}
|
9
10
|
|
10
|
-
|
11
|
-
this.
|
11
|
+
disconnect() {
|
12
|
+
this.removeKeyboardListener();
|
12
13
|
}
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
setupKeyboardListener() {
|
16
|
+
this.keydownHandler = this.handleKeyDown.bind(this);
|
17
|
+
if (this.hasFormTarget) {
|
18
|
+
this.formTarget.addEventListener('keydown', this.keydownHandler);
|
19
|
+
}
|
17
20
|
}
|
18
21
|
|
19
|
-
|
20
|
-
this.
|
22
|
+
removeKeyboardListener() {
|
23
|
+
if (this.keydownHandler && this.hasFormTarget) {
|
24
|
+
this.formTarget.removeEventListener('keydown', this.keydownHandler);
|
25
|
+
}
|
21
26
|
}
|
22
27
|
|
23
|
-
|
24
|
-
|
28
|
+
handleKeyDown(event) {
|
29
|
+
if (event.key === 'Enter' && !event.shiftKey) {
|
30
|
+
// Check if we have selected checkboxes
|
31
|
+
const selectedCheckboxes = this.checkboxTargets.filter(checkbox => checkbox.checked);
|
32
|
+
|
33
|
+
if (selectedCheckboxes.length > 0) {
|
34
|
+
event.preventDefault();
|
35
|
+
event.stopPropagation();
|
36
|
+
this.handleSubmit();
|
37
|
+
}
|
38
|
+
}
|
25
39
|
}
|
26
40
|
|
27
|
-
|
28
|
-
this.
|
41
|
+
sliderTargetConnected(slider) {
|
42
|
+
this.updateSliderAria(slider);
|
43
|
+
this.updateSliderFill(slider);
|
29
44
|
}
|
30
45
|
|
31
|
-
|
32
|
-
|
46
|
+
updateSliderAria(slider) {
|
47
|
+
slider.setAttribute('aria-valuenow', slider.value);
|
48
|
+
slider.setAttribute('aria-valuetext', slider.value);
|
49
|
+
}
|
33
50
|
|
34
|
-
|
35
|
-
|
51
|
+
updateSliderFill(slider) {
|
52
|
+
const percentage = ((slider.value - slider.min) / (slider.max - slider.min)) * 100;
|
53
|
+
slider.style.setProperty('--slider-fill', `${percentage}%`);
|
36
54
|
}
|
37
55
|
|
38
|
-
|
39
|
-
this.
|
56
|
+
handleSliderChange(event) {
|
57
|
+
this.updateSliderAria(event.target);
|
58
|
+
this.updateSliderFill(event.target);
|
40
59
|
}
|
41
60
|
|
42
61
|
handleSubmit() {
|
@@ -48,19 +67,15 @@ export default class extends Controller {
|
|
48
67
|
this.hideFormAndSubmit();
|
49
68
|
}
|
50
69
|
|
51
|
-
|
52
|
-
|
70
|
+
hideFormAndSubmit() {
|
71
|
+
// Hide the structured input form
|
72
|
+
if (this.hasFormTarget) {
|
73
|
+
this.formTarget.style.display = 'none';
|
74
|
+
}
|
53
75
|
|
54
|
-
|
55
|
-
|
76
|
+
// Submit the form to StructuredHumansController
|
77
|
+
if (this.hasFormTarget) {
|
78
|
+
this.formTarget.requestSubmit();
|
56
79
|
}
|
57
|
-
|
58
|
-
this.submitted = true;
|
59
|
-
this.hideFormAndSubmit();
|
60
|
-
}
|
61
|
-
|
62
|
-
hideFormAndSubmit() {
|
63
|
-
this.formTarget.style.display = 'none';
|
64
|
-
this.formTarget.requestSubmit();
|
65
80
|
}
|
66
81
|
}
|
@@ -840,8 +840,7 @@
|
|
840
840
|
padding: 1rem;
|
841
841
|
background-color: rgba(255, 255, 255, 0.9);
|
842
842
|
border-radius: 0.75rem;
|
843
|
-
|
844
|
-
margin-bottom: 1rem;
|
843
|
+
margin-bottom: .5rem;
|
845
844
|
}
|
846
845
|
|
847
846
|
.structured-input-options {
|
@@ -856,28 +855,28 @@
|
|
856
855
|
align-items: center;
|
857
856
|
gap: 0.75rem;
|
858
857
|
padding: 0.75rem 1rem;
|
859
|
-
border:
|
858
|
+
border: 2px solid transparent;
|
860
859
|
border-radius: 0.5rem;
|
861
860
|
background-color: white;
|
862
861
|
cursor: pointer;
|
863
862
|
transition: all 0.2s ease;
|
863
|
+
background-image: linear-gradient(white, white), linear-gradient(var(--gray-300), var(--gray-300));
|
864
|
+
background-origin: border-box;
|
865
|
+
background-clip: padding-box, border-box;
|
864
866
|
}
|
865
867
|
|
866
868
|
.structured-radio-option:hover {
|
867
|
-
background-
|
868
|
-
|
869
|
+
background-image: linear-gradient(white, white), linear-gradient(45deg, #F3B51C, #E87C66, #F3B51C, #E87C66);
|
870
|
+
background-size: auto, 300% 300%;
|
871
|
+
animation: animatedgradient 3s ease alternate infinite;
|
869
872
|
}
|
870
873
|
|
871
874
|
.structured-radio-option:has(.structured-radio-input:checked) {
|
872
875
|
background-color: var(--purple-50);
|
873
|
-
border-color: var(--purple-500);
|
874
876
|
}
|
875
877
|
|
876
878
|
.structured-radio-input {
|
877
|
-
|
878
|
-
height: 1.25rem;
|
879
|
-
accent-color: var(--purple-600);
|
880
|
-
cursor: pointer;
|
879
|
+
display: none;
|
881
880
|
}
|
882
881
|
|
883
882
|
.structured-radio-label {
|
@@ -894,27 +893,32 @@
|
|
894
893
|
align-items: center;
|
895
894
|
gap: 0.75rem;
|
896
895
|
padding: 0.75rem 1rem;
|
897
|
-
border:
|
896
|
+
border: 2px solid transparent;
|
898
897
|
border-radius: 0.5rem;
|
899
898
|
background-color: white;
|
900
899
|
cursor: pointer;
|
901
900
|
transition: all 0.2s ease;
|
901
|
+
background-image: linear-gradient(white, white), linear-gradient(var(--gray-300), var(--gray-300));
|
902
|
+
background-origin: border-box;
|
903
|
+
background-clip: padding-box, border-box;
|
902
904
|
}
|
903
905
|
|
904
906
|
.structured-checkbox-option:hover {
|
905
|
-
background-
|
906
|
-
|
907
|
+
background-image: linear-gradient(white, white), linear-gradient(45deg, #F3B51C, #E87C66, #F3B51C, #E87C66);
|
908
|
+
background-size: auto, 300% 300%;
|
909
|
+
animation: animatedgradient 3s ease alternate infinite;
|
907
910
|
}
|
908
911
|
|
909
912
|
.structured-checkbox-option:has(.structured-checkbox-input:checked) {
|
910
|
-
background-
|
911
|
-
border-color: var(--purple-500);
|
913
|
+
background-image: linear-gradient(white, white), linear-gradient(45deg, #F3B51C, #E87C66);
|
912
914
|
}
|
913
915
|
|
916
|
+
|
917
|
+
|
914
918
|
.structured-checkbox-input {
|
915
919
|
width: 1.25rem;
|
916
920
|
height: 1.25rem;
|
917
|
-
accent-color: var(--purple-
|
921
|
+
accent-color: var(--purple-700);
|
918
922
|
cursor: pointer;
|
919
923
|
}
|
920
924
|
|
@@ -929,12 +933,14 @@
|
|
929
933
|
/* Slider Styles */
|
930
934
|
.structured-slider-container {
|
931
935
|
padding: 1rem;
|
936
|
+
border: 1px solid var(--gray-300);
|
937
|
+
border-radius: 0.5rem;
|
938
|
+
background-color: var(--gray-50);
|
932
939
|
}
|
933
940
|
|
934
941
|
.structured-slider-labels {
|
935
942
|
display: flex;
|
936
943
|
justify-content: space-between;
|
937
|
-
margin-bottom: 1rem;
|
938
944
|
font-size: 0.875rem;
|
939
945
|
color: var(--gray-600);
|
940
946
|
font-weight: 500;
|
@@ -948,46 +954,90 @@
|
|
948
954
|
|
949
955
|
.structured-slider-input {
|
950
956
|
width: 100%;
|
951
|
-
height:
|
957
|
+
height: 1rem;
|
952
958
|
border-radius: 0.25rem;
|
953
|
-
background:
|
959
|
+
background: transparent;
|
954
960
|
outline: none;
|
955
961
|
-webkit-appearance: none;
|
956
962
|
appearance: none;
|
957
963
|
cursor: pointer;
|
964
|
+
--slider-fill: 0%;
|
965
|
+
border: none;
|
966
|
+
}
|
967
|
+
|
968
|
+
.structured-slider-input::-webkit-slider-runnable-track {
|
969
|
+
width: 100%;
|
970
|
+
height: 1rem;
|
971
|
+
border-radius: 0.25rem;
|
972
|
+
background: linear-gradient(90deg,
|
973
|
+
#F3B51C 0%,
|
974
|
+
#E87C66 var(--slider-fill),
|
975
|
+
#e5e7eb var(--slider-fill),
|
976
|
+
#e5e7eb 100%
|
977
|
+
);
|
978
|
+
background-size: 100% 100%;
|
979
|
+
background-repeat: no-repeat;
|
980
|
+
border: 1px solid var(--gray-300);
|
981
|
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
982
|
+
}
|
983
|
+
|
984
|
+
.structured-slider-input::-moz-range-track {
|
985
|
+
width: 100%;
|
986
|
+
height: 1rem;
|
987
|
+
border-radius: 0.25rem;
|
988
|
+
background: linear-gradient(90deg,
|
989
|
+
#F3B51C 0%,
|
990
|
+
#E87C66 var(--slider-fill),
|
991
|
+
#e5e7eb var(--slider-fill),
|
992
|
+
#e5e7eb 100%
|
993
|
+
);
|
994
|
+
background-size: 100% 100%;
|
995
|
+
background-repeat: no-repeat;
|
996
|
+
border: 1px solid var(--gray-300);
|
997
|
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
958
998
|
}
|
959
999
|
|
960
1000
|
.structured-slider-input::-webkit-slider-thumb {
|
961
1001
|
-webkit-appearance: none;
|
962
1002
|
appearance: none;
|
963
|
-
width:
|
964
|
-
height:
|
965
|
-
border-radius:
|
966
|
-
background: var(--purple-
|
1003
|
+
width: 2.25rem;
|
1004
|
+
height: 2.25rem;
|
1005
|
+
border-radius: 0.5625rem;
|
1006
|
+
background: var(--purple-700);
|
1007
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='white' viewBox='0 0 320 512'%3e%3cpath d='M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z'/%3e%3c/svg%3e");
|
1008
|
+
background-size: 12px 12px;
|
1009
|
+
background-position: center;
|
1010
|
+
background-repeat: no-repeat;
|
967
1011
|
cursor: pointer;
|
968
1012
|
border: 2px solid white;
|
969
|
-
box-shadow: 0
|
1013
|
+
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.25);
|
970
1014
|
transition: all 0.2s ease;
|
1015
|
+
margin-top: -0.65rem;
|
971
1016
|
}
|
972
1017
|
|
973
1018
|
.structured-slider-input::-webkit-slider-thumb:hover {
|
974
|
-
background: var(--purple-
|
1019
|
+
background-color: var(--purple-800);
|
975
1020
|
transform: scale(1.1);
|
976
1021
|
}
|
977
1022
|
|
978
1023
|
.structured-slider-input::-moz-range-thumb {
|
979
|
-
width:
|
980
|
-
height:
|
981
|
-
border-radius:
|
982
|
-
background: var(--purple-
|
1024
|
+
width: 2.25rem;
|
1025
|
+
height: 2.25rem;
|
1026
|
+
border-radius: 0.5625rem;
|
1027
|
+
background: var(--purple-700);
|
1028
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='white' viewBox='0 0 320 512'%3e%3cpath d='M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z'/%3e%3c/svg%3e");
|
1029
|
+
background-size: 12px 12px;
|
1030
|
+
background-position: center;
|
1031
|
+
background-repeat: no-repeat;
|
983
1032
|
cursor: pointer;
|
984
1033
|
border: 2px solid white;
|
985
|
-
box-shadow: 0
|
1034
|
+
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.25);
|
986
1035
|
transition: all 0.2s ease;
|
1036
|
+
margin-top: -0.65rem;
|
987
1037
|
}
|
988
1038
|
|
989
1039
|
.structured-slider-input::-moz-range-thumb:hover {
|
990
|
-
background: var(--purple-
|
1040
|
+
background-color: var(--purple-800);
|
991
1041
|
transform: scale(1.1);
|
992
1042
|
}
|
993
1043
|
|
@@ -1062,3 +1112,16 @@
|
|
1062
1112
|
white-space: nowrap;
|
1063
1113
|
border: 0;
|
1064
1114
|
}
|
1115
|
+
|
1116
|
+
/* Animated Gradient Keyframes */
|
1117
|
+
@keyframes animatedgradient {
|
1118
|
+
0% {
|
1119
|
+
background-position: 0% 50%;
|
1120
|
+
}
|
1121
|
+
50% {
|
1122
|
+
background-position: 100% 50%;
|
1123
|
+
}
|
1124
|
+
100% {
|
1125
|
+
background-position: 0% 50%;
|
1126
|
+
}
|
1127
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MetaWorkflows
|
4
|
+
module TrayConfigurable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
helper_method :tray_config
|
9
|
+
end
|
10
|
+
|
11
|
+
def tray_config
|
12
|
+
@tray_config ||= {
|
13
|
+
beta: {
|
14
|
+
visible: true,
|
15
|
+
collapsible: true,
|
16
|
+
lexi: false
|
17
|
+
},
|
18
|
+
gamma: {
|
19
|
+
visible: true,
|
20
|
+
collapsible: true,
|
21
|
+
lexi: false
|
22
|
+
},
|
23
|
+
delta: {
|
24
|
+
visible: true,
|
25
|
+
collapsible: true,
|
26
|
+
lexi: false
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
# Override in controllers to customize tray configuration
|
32
|
+
# This method should be called as a before_action in the application controller.
|
33
|
+
def configure_trays
|
34
|
+
raise NotImplementedError, "#{self.class.name} must implement #configure_trays to define tray configuration"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -4,15 +4,6 @@ module MetaWorkflows
|
|
4
4
|
class ApplicationController < ActionController::Base
|
5
5
|
protect_from_forgery with: :exception
|
6
6
|
|
7
|
-
include TrayConfigurable
|
8
|
-
before_action :configure_trays
|
9
|
-
|
10
|
-
def configure_trays
|
11
|
-
super
|
12
|
-
tray_config[:beta][:visible] = false
|
13
|
-
tray_config[:gamma][:visible] = false
|
14
|
-
tray_config[:delta][:visible] = false
|
15
|
-
end
|
16
7
|
# Add any MetaWorkflows-specific controller functionality here
|
17
8
|
# This ensures proper engine isolation
|
18
9
|
end
|
@@ -12,6 +12,7 @@
|
|
12
12
|
value="<%= option['value'] %>"
|
13
13
|
class="structured-checkbox-input"
|
14
14
|
data-meta-workflows--structured-form-submit-target="checkbox"
|
15
|
+
data-meta-workflows--lexi-form-submit-target="structuredInput"
|
15
16
|
data-action="change->meta-workflows--structured-form-submit#handleCheckboxChange"
|
16
17
|
aria-describedby="structured-checkbox-help"
|
17
18
|
>
|
@@ -22,19 +23,4 @@
|
|
22
23
|
<% end %>
|
23
24
|
</div>
|
24
25
|
<div id="structured-checkbox-help" class="sr-only">Use space to select/deselect options</div>
|
25
|
-
|
26
|
-
<div class="structured-submit-container">
|
27
|
-
<button
|
28
|
-
type="submit"
|
29
|
-
class="structured-submit-button"
|
30
|
-
data-meta-workflows--structured-form-submit-target="submitButton"
|
31
|
-
data-action="click->meta-workflows--structured-form-submit#handleCheckboxSubmit"
|
32
|
-
disabled
|
33
|
-
aria-describedby="structured-submit-help"
|
34
|
-
aria-label="Submit your selections"
|
35
|
-
>
|
36
|
-
<i class="fa-solid fa-arrow-up"></i>
|
37
|
-
</button>
|
38
|
-
<div id="structured-submit-help" class="sr-only">Submit your selections. Button is disabled until at least one option is selected.</div>
|
39
|
-
</div>
|
40
26
|
</div>
|
@@ -36,12 +36,15 @@
|
|
36
36
|
} %>
|
37
37
|
</div>
|
38
38
|
|
39
|
+
<!-- Structured inputs area (above avatar) -->
|
40
|
+
<div class="structured-input-area" data-controller="meta-workflows--lexi-form-submit">
|
41
|
+
<%= render meta_structured_input, record: local_assigns[:record], structured_input_config: false, is_structured_input: false %>
|
42
|
+
</div>
|
43
|
+
|
39
44
|
<!-- Avatar and input area pinned to bottom -->
|
40
45
|
<div class="lexi-chat-bottom">
|
41
46
|
<%= image_tag("lexi-expanded.png", alt: "Lexi Avatar", class: "lexi-avatar") %>
|
42
|
-
<div class="lexi-input-wrapper"
|
43
|
-
<%= render meta_structured_input, record: local_assigns[:record], structured_input_config: false, is_structured_input: false %>
|
44
|
-
|
47
|
+
<div class="lexi-input-wrapper">
|
45
48
|
<%= render partial: meta_response_form, locals: {record: local_assigns[:record], response_enabled: true, workflow_execution_id: active_execution&.id,
|
46
49
|
chat_id: active_execution&.workflow_steps&.last&.chat&.id, workflow_execution: active_execution, is_structured_input: is_structured_input } %>
|
47
50
|
</div>
|
@@ -12,6 +12,7 @@
|
|
12
12
|
name="single_choice_selection"
|
13
13
|
value="<%= option['value'] %>"
|
14
14
|
class="structured-radio-input"
|
15
|
+
data-meta-workflows--lexi-form-submit-target="structuredInput"
|
15
16
|
data-action="change->meta-workflows--structured-form-submit#handleSubmit"
|
16
17
|
aria-describedby="structured-radio-help"
|
17
18
|
required
|
@@ -19,6 +19,7 @@
|
|
19
19
|
value="<%= options['min']['value'] %>"
|
20
20
|
class="structured-slider-input"
|
21
21
|
data-meta-workflows--structured-form-submit-target="slider"
|
22
|
+
data-meta-workflows--lexi-form-submit-target="structuredInput"
|
22
23
|
data-action="change->meta-workflows--structured-form-submit#handleSubmit input->meta-workflows--structured-form-submit#handleSliderChange"
|
23
24
|
aria-describedby="structured-slider-help"
|
24
25
|
aria-valuemin="<%= options['min']['value'] %>"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module MetaWorkflows
|
4
4
|
MAJOR = 0
|
5
5
|
MINOR = 9
|
6
|
-
PATCH =
|
6
|
+
PATCH = 32 # this is automatically incremented by the build process
|
7
7
|
|
8
8
|
VERSION = "#{MetaWorkflows::MAJOR}.#{MetaWorkflows::MINOR}.#{MetaWorkflows::PATCH}".freeze
|
9
9
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meta_workflows
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.32
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonid Medovyy
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-07-
|
12
|
+
date: 2025-07-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -130,7 +130,7 @@ files:
|
|
130
130
|
- app/assets/javascripts/meta_workflows_manifest.js
|
131
131
|
- app/assets/stylesheets/meta_workflows/application.css
|
132
132
|
- app/controllers/concerns/meta_workflows/streamable.rb
|
133
|
-
- app/controllers/concerns/tray_configurable.rb
|
133
|
+
- app/controllers/concerns/meta_workflows/tray_configurable.rb
|
134
134
|
- app/controllers/meta_workflows/application_controller.rb
|
135
135
|
- app/controllers/meta_workflows/base_debug_controller.rb
|
136
136
|
- app/controllers/meta_workflows/debug_controller.rb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TrayConfigurable
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
helper_method :tray_config
|
8
|
-
end
|
9
|
-
|
10
|
-
def tray_config
|
11
|
-
@tray_config ||= {
|
12
|
-
beta: {
|
13
|
-
visible: true,
|
14
|
-
collapsible: true,
|
15
|
-
lexi: false
|
16
|
-
},
|
17
|
-
gamma: {
|
18
|
-
visible: true,
|
19
|
-
collapsible: true,
|
20
|
-
lexi: false
|
21
|
-
},
|
22
|
-
delta: {
|
23
|
-
visible: true,
|
24
|
-
collapsible: true,
|
25
|
-
lexi: false
|
26
|
-
}
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
# Override in controllers to customize tray configuration
|
31
|
-
def configure_trays
|
32
|
-
# Example:
|
33
|
-
# tray_config[:beta][:visible] = true
|
34
|
-
# tray_config[:gamma][:collapsible] = false
|
35
|
-
end
|
36
|
-
end
|