bpmn-js-rails 0.1.0

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 (63) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +6 -0
  3. data/app/assets/javascripts/bpmn-js/bpmn-modeler.production.min.js +199 -0
  4. data/app/assets/javascripts/bpmn-js/bpmn-viewer.production.min.js +22 -0
  5. data/app/assets/javascripts/dmn-js/dmn-modeler.production.min.js +194 -0
  6. data/app/assets/javascripts/dmn-js/dmn-viewer.production.min.js +16 -0
  7. data/app/assets/javascripts/form-js/form-editor.umd.js +78936 -0
  8. data/app/assets/javascripts/form-js/form-viewer.umd.js +54147 -0
  9. data/app/assets/stylesheets/bpmn-js/bpmn-font/css/bpmn-codes.css +108 -0
  10. data/app/assets/stylesheets/bpmn-js/bpmn-font/css/bpmn-embedded.css +166 -0
  11. data/app/assets/stylesheets/bpmn-js/bpmn-font/css/bpmn.css +164 -0
  12. data/app/assets/stylesheets/bpmn-js/bpmn-font/font/bpmn.eot +0 -0
  13. data/app/assets/stylesheets/bpmn-js/bpmn-font/font/bpmn.svg +224 -0
  14. data/app/assets/stylesheets/bpmn-js/bpmn-font/font/bpmn.ttf +0 -0
  15. data/app/assets/stylesheets/bpmn-js/bpmn-font/font/bpmn.woff +0 -0
  16. data/app/assets/stylesheets/bpmn-js/bpmn-font/font/bpmn.woff2 +0 -0
  17. data/app/assets/stylesheets/bpmn-js/bpmn-js.css +145 -0
  18. data/app/assets/stylesheets/bpmn-js/diagram-js.css +1011 -0
  19. data/app/assets/stylesheets/dmn-js/diagram-js.css +1011 -0
  20. data/app/assets/stylesheets/dmn-js/dmn-font/css/dmn-codes.css +41 -0
  21. data/app/assets/stylesheets/dmn-js/dmn-font/css/dmn-embedded.css +98 -0
  22. data/app/assets/stylesheets/dmn-js/dmn-font/css/dmn.css +97 -0
  23. data/app/assets/stylesheets/dmn-js/dmn-font/font/dmn.eot +0 -0
  24. data/app/assets/stylesheets/dmn-js/dmn-font/font/dmn.svg +90 -0
  25. data/app/assets/stylesheets/dmn-js/dmn-font/font/dmn.ttf +0 -0
  26. data/app/assets/stylesheets/dmn-js/dmn-font/font/dmn.woff +0 -0
  27. data/app/assets/stylesheets/dmn-js/dmn-font/font/dmn.woff2 +0 -0
  28. data/app/assets/stylesheets/dmn-js/dmn-js-boxed-expression-controls.css +130 -0
  29. data/app/assets/stylesheets/dmn-js/dmn-js-boxed-expression.css +186 -0
  30. data/app/assets/stylesheets/dmn-js/dmn-js-decision-table-controls.css +301 -0
  31. data/app/assets/stylesheets/dmn-js/dmn-js-decision-table.css +580 -0
  32. data/app/assets/stylesheets/dmn-js/dmn-js-drd.css +95 -0
  33. data/app/assets/stylesheets/dmn-js/dmn-js-literal-expression.css +165 -0
  34. data/app/assets/stylesheets/dmn-js/dmn-js-shared.css +221 -0
  35. data/app/assets/stylesheets/form-js/form-js-editor.css +2342 -0
  36. data/app/assets/stylesheets/form-js/form-js.css +3694 -0
  37. data/app/helpers/bpmn_js_rails/view_helper.rb +291 -0
  38. data/app/javascript/bpmn_js_rails/controllers/bpmn_js_modeler_controller.js +85 -0
  39. data/app/javascript/bpmn_js_rails/controllers/bpmn_js_viewer_controller.js +46 -0
  40. data/app/javascript/bpmn_js_rails/controllers/dmn_js_modeler_controller.js +102 -0
  41. data/app/javascript/bpmn_js_rails/controllers/dmn_js_viewer_controller.js +45 -0
  42. data/app/javascript/bpmn_js_rails/controllers/form_js_editor_controller.js +80 -0
  43. data/app/javascript/bpmn_js_rails/controllers/form_js_viewer_controller.js +52 -0
  44. data/app/javascript/bpmn_js_rails/index.js +34 -0
  45. data/app/models/bpmn_js_rails/decision.rb +60 -0
  46. data/app/models/bpmn_js_rails/diagram.rb +51 -0
  47. data/app/models/bpmn_js_rails/form.rb +32 -0
  48. data/config/importmap.rb +7 -0
  49. data/config/routes.rb +2 -0
  50. data/db/migrate/20260319000001_create_bpmn_js_rails_diagrams.rb +15 -0
  51. data/db/migrate/20260319000002_create_bpmn_js_rails_forms.rb +15 -0
  52. data/db/migrate/20260319000003_create_bpmn_js_rails_decisions.rb +15 -0
  53. data/lib/bpmn-js-rails.rb +1 -0
  54. data/lib/bpmn_js_rails/engine.rb +30 -0
  55. data/lib/bpmn_js_rails/version.rb +3 -0
  56. data/lib/bpmn_js_rails/version.rb.erb +3 -0
  57. data/lib/bpmn_js_rails.rb +5 -0
  58. data/lib/generators/bpmn_js_rails/install/install_generator.rb +58 -0
  59. data/lib/generators/bpmn_js_rails/install/templates/create_bpmn_js_rails_decisions.rb.erb +15 -0
  60. data/lib/generators/bpmn_js_rails/install/templates/create_bpmn_js_rails_diagrams.rb.erb +15 -0
  61. data/lib/generators/bpmn_js_rails/install/templates/create_bpmn_js_rails_forms.rb.erb +15 -0
  62. data/lib/tasks/form_js_rails_tasks.rake +4 -0
  63. metadata +116 -0
@@ -0,0 +1,186 @@
1
+ .dmn-boxed-expression-container {
2
+ --element-properties-background-color: var(--color-white);
3
+ --element-properties-border-color: var(--color-grey-225-10-15);
4
+ --element-properties-color: var(--color-grey-225-10-15);
5
+ --boxed-expression-color: var(--color-grey-225-10-15);
6
+ --boxed-expression-properties-border-color: var(--color-grey-225-10-15);
7
+ --boxed-expression-properties-color: var(--color-grey-225-10-15);
8
+ --powered-by-overlay-background-color: var(--color-black-opacity-20);
9
+ --powered-by-overlay-content-background-color: var(--color-white);
10
+ --powered-by-overlay-content-border-color: var(--color-grey-225-10-75);
11
+ --powered-by-overlay-content-color: var(--color-grey-225-10-15);
12
+ --textarea-border-color: var(--color-grey-225-10-15);
13
+ --textarea-color: var(--color-grey-225-10-15);
14
+ --view-drd-button-background-color: var(--color-white);
15
+ --view-drd-button-border-color: var(--color-grey-225-10-75);
16
+ --view-drd-button-color: var(--color-grey-225-10-15);
17
+ --view-drd-button-hover-background-color: var(--color-grey-225-10-97);
18
+ --boxed-expression-font-family: 'Arial', sans-serif;
19
+ --boxed-expression-font-family-monospace: monospace;
20
+ --section-padding: 20px;
21
+ --padding: 12px;
22
+ --font-size: 14px;
23
+ --font-size-big: 16px;
24
+ --font-size-bigger: 21px;
25
+
26
+ font-family: var(--boxed-expression-font-family);
27
+ color: var(--boxed-expression-color);
28
+ width: 100%;
29
+ height: 100%;
30
+ }
31
+
32
+ .dmn-boxed-expression-container .viewer-container {
33
+ width: 100%;
34
+ height: 100%;
35
+ overflow: auto;
36
+ display: flex;
37
+ flex-direction: column;
38
+ font-size: var(--font-size);
39
+ }
40
+
41
+ .dmn-boxed-expression-container * {
42
+ box-sizing: border-box;
43
+ }
44
+
45
+ .dmn-boxed-expression-container .dmn-boxed-expression-section {
46
+ border: 1px solid var(--element-properties-border-color);
47
+
48
+ & + .dmn-boxed-expression-section {
49
+ border-top: none;
50
+ }
51
+ }
52
+
53
+ .dmn-boxed-expression-container h2 {
54
+ margin: 0;
55
+ font-size: var(--font-size-big);
56
+ }
57
+
58
+ /* element properties */
59
+ .dmn-boxed-expression-container .element-properties {
60
+ padding: var(--section-padding);
61
+ color: var(--element-properties-color);
62
+ position: relative;
63
+ min-width: 192px;
64
+ }
65
+
66
+ .dmn-boxed-expression-container .element-name {
67
+ margin: 0;
68
+ font-size: var(--font-size-bigger);
69
+ font-weight: normal;
70
+ white-space: pre;
71
+ text-overflow: ellipsis;
72
+ overflow: hidden;
73
+ }
74
+
75
+ .dmn-boxed-expression-container .textarea .content-editable {
76
+ height: 100%;
77
+ box-sizing: border-box;
78
+ }
79
+
80
+ .dmn-boxed-expression-container .element-name.editor:not(.focussed):hover {
81
+ cursor: text;
82
+ }
83
+
84
+ .dmn-boxed-expression-container .element-name.focussed .content-editable {
85
+ text-overflow: unset;
86
+ }
87
+
88
+ /* textarea */
89
+ .dmn-boxed-expression-container .textarea {
90
+ box-sizing: border-box;
91
+ width: 100%;
92
+ padding: var(--padding);
93
+ font-family: var(--boxed-expression-font-family-monospace);
94
+ line-height: 1.4;
95
+ white-space: pre;
96
+ font-size: var(--font-size);
97
+ color: var(--textarea-color);
98
+ min-height: 250px;
99
+ overflow: auto;
100
+ }
101
+
102
+ .dmn-boxed-expression-container .textarea div:focus {
103
+ outline: none;
104
+ }
105
+
106
+ .dmn-boxed-expression-container .textarea.editor {
107
+ height: 100%;
108
+ cursor: text;
109
+ }
110
+
111
+ .dmn-boxed-expression-container .textarea:not(.editor) {
112
+ cursor: default;
113
+ }
114
+
115
+ /* view drd */
116
+ .dmn-boxed-expression-container .view-drd {
117
+ margin-right: 10px;
118
+ padding-bottom: 10px;
119
+ }
120
+
121
+ .dmn-boxed-expression-container .view-drd .view-drd-button {
122
+ background: var(--view-drd-button-background-color);
123
+ padding: 8px;
124
+ border: solid 1px var(--view-drd-button-border-color);
125
+ border-radius: 2px;
126
+ font-size: 14px;
127
+ color: var(--view-drd-button-color);
128
+ font-weight: bold;
129
+ cursor: pointer;
130
+ }
131
+
132
+ .dmn-boxed-expression-container .view-drd .view-drd-button:hover {
133
+ background: var(--view-drd-button-hover-background-color);
134
+ }
135
+
136
+ /* function definition */
137
+ .dmn-boxed-expression-container .function-definition {
138
+ display: grid;
139
+ grid-template-columns: 50px auto;
140
+ grid-template-rows: 50px auto;
141
+
142
+ & .function-definition-kind, & .function-definition-parameters {
143
+ position: relative;
144
+ }
145
+ }
146
+
147
+ .dmn-boxed-expression-container .function-definition .function-definition-kind {
148
+ display: flex;
149
+ justify-content: center;
150
+ align-items: center;
151
+ height: 100%;
152
+ width: 100%;
153
+ font-size: var(--font-size-bigger);
154
+ }
155
+
156
+ .dmn-boxed-expression-container .function-definition .function-definition-parameters {
157
+ display: flex;
158
+ align-items: center;
159
+ padding-left: var(--padding);
160
+ border-left: 1px solid var(--element-properties-border-color);
161
+ font-size: var(--font-size-big);
162
+ }
163
+
164
+ .dmn-boxed-expression-container .function-definition .function-definition-body {
165
+ grid-column: span 2;
166
+ border-top: 1px solid var(--element-properties-border-color);
167
+ }
168
+
169
+ /* element-variable */
170
+
171
+ .dmn-boxed-expression-container .element-variable {
172
+ padding: var(--section-padding);
173
+ display: inline-grid;
174
+ grid: auto / 1fr 1fr;
175
+ gap: 10px 20px;
176
+
177
+ & > h2 {
178
+ grid-column: span 2;
179
+ }
180
+
181
+ & .element-variable-name-label, & .element-variable-type-label {
182
+ display: block;
183
+ padding-bottom: 7px;
184
+ color: var(--color-grey-225-10-35)
185
+ }
186
+ }
@@ -0,0 +1,301 @@
1
+ .dmn-decision-table-container {
2
+ --allowed-values-placeholder-color: var(--color-grey-225-10-35);
3
+ --cell-description-editor-border-color: var(--color-grey-225-10-15);
4
+ --create-inputs-border-color: var(--color-grey-225-10-75);
5
+ --create-inputs-color: var(--color-grey-225-10-35);
6
+ --create-inputs-hover-color: var(--color-grey-225-10-15);
7
+ --context-menu-background-color: var(--color-white);
8
+ --context-menu-border-color: var(--color-grey-225-10-75);
9
+ --context-menu-color: var(--color-grey-225-10-15);
10
+ --context-menu-box-shadow-color: var(--color-black-opacity-10);
11
+ --context-menu-group-entry-border-color: var(--color-grey-225-10-75);
12
+ --context-menu-group-entry-disabled-color: var(--color-grey-225-10-75);
13
+ --context-menu-group-entry-hover-background-color: var(--color-grey-225-10-95);
14
+ --drag-and-drop-handle-color: var(--color-grey-225-10-55);
15
+ --drag-and-drop-handle-hover-color: var(--color-grey-225-10-15);
16
+ --form-control-label-color: var(--color-grey-225-10-15);
17
+ --hint-color: var(--color-grey-225-10-15);
18
+ --edit-button-color: var(--color-grey-225-10-15);
19
+ --edit-button-background-color: var(--color-grey-225-10-97);
20
+ --edit-button-border-color: var(--color-grey-225-10-75);
21
+ --edit-button-box-shadow-color: var(--color-black-opacity-10);
22
+ --edit-button-disabled-color: var(--color-grey-225-10-75);
23
+ }
24
+
25
+ /* simple string edit */
26
+ .dmn-decision-table-container .simple-string-edit,
27
+ .dmn-decision-table-container .simple-date-edit {
28
+ width: 250px;
29
+ }
30
+
31
+ .dmn-decision-table-container .input-expression-edit {
32
+ width: 300px;
33
+ }
34
+
35
+ .dmn-decision-table-container .dms-form-control {
36
+ padding: 9px 0;
37
+ }
38
+
39
+ .dmn-decision-table-container .allowed-values-edit .dms-form-control {
40
+ display: flex;
41
+ flex-direction: column;
42
+ }
43
+
44
+ .dmn-decision-table-container .allowed-values-edit .values {
45
+ display: flex;
46
+ flex-wrap: wrap;
47
+ }
48
+
49
+ .dmn-decision-table-container .allowed-values-edit .placeholder {
50
+ color: var(--allowed-values-placeholder-color);
51
+ }
52
+
53
+ /** create inputs **/
54
+ .dmn-decision-table-container thead .input-cell.create-inputs,
55
+ .dmn-decision-table-container tbody .input-cell.create-inputs {
56
+ white-space: normal;
57
+ border-color: var(--create-inputs-border-color);
58
+ color: var(--create-inputs-color);
59
+ min-width: 50px;
60
+ width: 50px;
61
+ }
62
+
63
+ .dmn-decision-table-container thead .input-cell.create-inputs {
64
+ text-align: center;
65
+ }
66
+
67
+ .dmn-decision-table-container .create-inputs .add-input {
68
+ right: 50%;
69
+ }
70
+
71
+ .dmn-decision-table-container .create-inputs:hover {
72
+ border-color: var(--create-inputs-hover-color);
73
+ color: var(--create-inputs-hover-color);
74
+ }
75
+
76
+ .dmn-decision-table-container th.create-inputs {
77
+ vertical-align: top;
78
+ }
79
+
80
+ /** end create inputs **/
81
+
82
+ /* TODO(nikku): namespace and refactor context menu styles */
83
+ .dmn-decision-table-container .context-menu {
84
+ position: absolute;
85
+ background: var(--context-menu-background-color);
86
+ border: solid 1px var(--context-menu-border-color);
87
+ border-radius: 2px;
88
+ font-size: 14px;
89
+ color: var(--context-menu-color);
90
+ z-index: 6;
91
+ box-shadow: 1px 1px 1px 1px var(--context-menu-box-shadow-color);
92
+ }
93
+
94
+ .dmn-decision-table-container .context-menu .context-menu-container {
95
+ margin: 8px;
96
+ }
97
+
98
+ .dmn-decision-table-container .context-menu .context-menu-flex {
99
+ display: flex;
100
+ flex-direction: column;
101
+ }
102
+
103
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-group-entry {
104
+ display: flex;
105
+ flex-direction: row;
106
+ align-items: stretch;
107
+ width: 100%;
108
+ padding: 8px 16px;
109
+ cursor: default;
110
+ white-space: nowrap;
111
+ }
112
+
113
+ .dmn-decision-table-container .context-menu-group .context-menu-group-entry:hover {
114
+ background-color: var(--context-menu-group-entry-hover-background-color);
115
+ }
116
+
117
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-group-entry.disabled {
118
+ pointer-events: none;
119
+ color: var(--context-menu-group-entry-disabled-color);
120
+ }
121
+
122
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-group-entry .context-menu-group-entry-icon {
123
+ display: inline-block;
124
+ text-align: center;
125
+ width: 14px;
126
+ margin-right: 6px;
127
+ }
128
+
129
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-group-entry .context-menu-group-entry-icon::before {
130
+ margin: 0;
131
+ }
132
+
133
+ .dmn-decision-table-container .context-menu-group:not(:last-child)::after {
134
+ content: '';
135
+ display: block;
136
+ margin: 0 8px;
137
+ border-bottom: 1px solid var(--context-menu-group-entry-border-color);
138
+ height: 1px;
139
+ }
140
+
141
+ /* input/output editor */
142
+
143
+ .dmn-decision-table-container .context-menu .context-menu-container.input-edit,
144
+ .dmn-decision-table-container .context-menu .context-menu-container.output-edit {
145
+ margin: 34px 10px 10px;
146
+ }
147
+
148
+ .dmn-decision-table-container .context-menu .context-menu-container.type-ref-edit,
149
+ .dmn-decision-table-container .context-menu .context-menu-container.allowed-values-edit {
150
+ margin: 10px;
151
+ }
152
+
153
+ .dmn-decision-table-container .dms-output-label,
154
+ .dmn-decision-table-container .dms-input-label {
155
+ padding-right: 30px;
156
+ padding-left: 0;
157
+ border: none;
158
+ font-size: 16px;
159
+ white-space: nowrap;
160
+ }
161
+
162
+ .dmn-decision-table-container .dms-form-control:first-child {
163
+ padding-top: 0;
164
+ }
165
+
166
+ .dmn-decision-table-container .dms-form-control .dms-label {
167
+ display: block;
168
+ margin: unset;
169
+ margin-bottom: 6px;
170
+ color: var(--form-control-label-color);
171
+ font-weight: normal;
172
+ }
173
+
174
+ .dmn-decision-table-container .dms-form-control .dms-input {
175
+ padding-right: 24px;
176
+ border-radius: 3px;
177
+ }
178
+
179
+ .dmn-decision-table-container .dms-form-control .dms-list-component {
180
+ max-width: 179px;
181
+ }
182
+
183
+ /* expression language */
184
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-entry-set-expression-language {
185
+ flex-direction: column;
186
+ }
187
+
188
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-entry-set-expression-language:hover {
189
+ background-color: unset;
190
+ }
191
+
192
+ .dmn-decision-table-container .context-menu .context-menu-group .context-menu-entry-set-expression-language .expression-language {
193
+ margin-top: 8px;
194
+ }
195
+
196
+ /* drag and drop */
197
+ .dmn-icon-drag {
198
+ color: transparent;
199
+ }
200
+
201
+ .dmn-icon-drag:hover {
202
+ color: var(--drag-and-drop-handle-hover-color);
203
+ }
204
+
205
+ .dmn-decision-table-container th .dmn-icon-drag {
206
+ position: absolute;
207
+ left: 4px;
208
+ top: 10px;
209
+ transform: translateY(-50%);
210
+ }
211
+
212
+ .dmn-decision-table-container th:hover .dmn-icon-drag,
213
+ .dmn-decision-table-container td:hover .dmn-icon-drag {
214
+ color: var(--drag-and-drop-handle-color);
215
+ }
216
+
217
+ .dmn-decision-table-container .input-cell.input-editor:hover .clause,
218
+ .dmn-decision-table-container .output-cell.output-editor:hover .clause {
219
+ visibility: hidden;
220
+ }
221
+
222
+ .dmn-icon-drag.horizontal,
223
+ .dmn-icon-drag.vertical {
224
+ cursor: grab;
225
+ }
226
+
227
+ /* description editor */
228
+
229
+ .dmn-decision-table-container .context-menu .description-editor {
230
+ margin: 0;
231
+ padding: 5px 0;
232
+ width: 192px;
233
+ border-left: solid 3px var(--cell-description-editor-border-color);
234
+ }
235
+
236
+ .dmn-decision-table-container .description-editor .dms-input {
237
+ border: none;
238
+ min-height: 0;
239
+ }
240
+
241
+ /* end description editor */
242
+
243
+ .dmn-decision-table-container .resize-column-handle {
244
+ width: 25px;
245
+ height: 100%;
246
+ position: absolute;
247
+ top: 0;
248
+ right: -5px;
249
+ z-index: 1;
250
+ cursor: col-resize;
251
+ }
252
+
253
+ .dmn-decision-table-container .resize-column-handle:last-child {
254
+ width: 20px;
255
+ right: 0;
256
+ }
257
+
258
+ /* cell editor */
259
+ .dmn-decision-table-container .cell-editor:focus-within .dmn-expression-language {
260
+ display: none;
261
+ }
262
+
263
+ .dmn-decision-table-container .cell-editor,
264
+ .dmn-decision-table-container .cell-editor .cm-scroller {
265
+ line-height: 1.4;
266
+ font-family: monospace;
267
+ }
268
+
269
+ .dmn-decision-table-container .cell-editor .feel-editor.focussed > :nth-child(2) {
270
+ display: none;
271
+ }
272
+
273
+ /* edit-button */
274
+
275
+ .dmn-decision-table-container .edit-button {
276
+ color: var(--edit-button-color);
277
+ background-color: var(--edit-button-background-color);
278
+ position: absolute;
279
+ top: 2px;
280
+ left: 2px;
281
+ padding: 4px;
282
+ border-radius: 2px;
283
+ border: solid 1px var(--edit-button-border-color);
284
+ font-size: var(--font-size);
285
+ box-shadow: 1px 1px 1px 1px var(--edit-button-box-shadow-color);
286
+ }
287
+
288
+ .dmn-decision-table-container :not(:has(:focus-visible)) .edit-button {
289
+ clip-path: inset(50%);
290
+ height: 1px;
291
+ overflow: hidden;
292
+ position: absolute;
293
+ white-space: nowrap;
294
+ width: 1px;
295
+ }
296
+
297
+ /* context menu */
298
+
299
+ .dmn-decision-table-container .context-menu-group-entry.focused {
300
+ background-color: var(--color-grey-225-10-95);
301
+ }