@agung_dhewe/webapps 1.1.2 → 1.2.3

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 (93) hide show
  1. package/lib/fgta5js-dist/fgta5js-v1.8.5.min.js +11 -0
  2. package/lib/fgta5js-dist/fgta5js-v1.8.5.min.js.map +1 -0
  3. package/{libs → lib}/webmodule/module-edit.css +73 -18
  4. package/{libs → lib}/webmodule/module-list.css +13 -0
  5. package/lib/webmodule/module-print.css +28 -0
  6. package/{libs → lib}/webmodule/module.css +13 -6
  7. package/{libs → lib}/webmodule/module.js +14 -4
  8. package/lib/webmodule/pagehelper.mjs +129 -0
  9. package/modules/generator/appgen-io.mjs +153 -76
  10. package/modules/generator/appgen-ui.mjs +234 -167
  11. package/modules/generator/generator-designtemplate-def.html +38 -0
  12. package/modules/generator/generator-designtemplate.html +11 -1492
  13. package/modules/generator/generator.css +103 -65
  14. package/modules/generator/generator.mjs +1 -1
  15. package/modules/generator/generator.svg +98 -0
  16. package/modules/generator/generatorEdit.mjs +43 -35
  17. package/modules/generator/generatorList.mjs +27 -0
  18. package/modules/generator/tpl-designerinfo.html +100 -0
  19. package/modules/generator/tpl-field-checkbox.html +200 -0
  20. package/modules/generator/tpl-field-combobox.html +228 -0
  21. package/modules/generator/tpl-field-datepicker.html +192 -0
  22. package/modules/generator/tpl-field-filebox.html +189 -0
  23. package/modules/generator/tpl-field-numberbox.html +218 -0
  24. package/modules/generator/tpl-field-textbox.html +255 -0
  25. package/modules/generator/tpl-field-timepicker.html +192 -0
  26. package/modules/generator/tpl-searchdesign.html +32 -0
  27. package/modules/generator/tpl-uniquedesign.html +25 -0
  28. package/modules/login/login.css +10 -2
  29. package/package.json +5 -3
  30. package/percobaan/coba-sequencer.js +16 -0
  31. package/src/api.js +12 -9
  32. package/src/apis/generator.api.js +35 -23
  33. package/src/apis/login.api.js +1 -0
  34. package/src/context.js +12 -2
  35. package/src/db.js +58 -32
  36. package/src/generator/createApiModule.js +4 -1
  37. package/src/generator/createIcon.js +24 -2
  38. package/src/generator/createLayoutCss.js +107 -0
  39. package/src/generator/createModuleDetilEditHtml.js +12 -1
  40. package/src/generator/createModuleDetilEditMjs.js +32 -28
  41. package/src/generator/createModuleDetilListHtml.js +14 -7
  42. package/src/generator/createModuleDetilListMjs.js +13 -1
  43. package/src/generator/createModuleHeaderEditHtml.js +13 -1
  44. package/src/generator/createModuleHeaderEditMjs.js +23 -2
  45. package/src/generator/createProgramData.js +3 -2
  46. package/src/generator/createTable.js +45 -38
  47. package/src/generator/helper.js +45 -27
  48. package/src/generator/templates/__rollup-module.ejs +1 -1
  49. package/src/generator/templates/api-module.js.ejs +171 -32
  50. package/src/generator/templates/layout.css.ejs +24 -0
  51. package/src/generator/templates/module-ext.html.ejs +1 -1
  52. package/src/generator/templates/module-ext.mjs.ejs +19 -1
  53. package/src/generator/templates/module.ejs.ejs +8 -0
  54. package/src/generator/templates/module.mjs.ejs +42 -5
  55. package/src/generator/templates/moduleDetilEdit.html.ejs +11 -0
  56. package/src/generator/templates/moduleDetilEdit.mjs.ejs +135 -30
  57. package/src/generator/templates/moduleDetilList.html.ejs +2 -1
  58. package/src/generator/templates/moduleDetilList.mjs.ejs +86 -11
  59. package/src/generator/templates/moduleHeaderEdit.html.ejs +8 -1
  60. package/src/generator/templates/moduleHeaderEdit.mjs.ejs +123 -36
  61. package/src/generator/templates/moduleHeaderList.html.ejs +5 -1
  62. package/src/generator/templates/moduleHeaderList.mjs.ejs +47 -15
  63. package/src/generator/trygenerate.js +18 -2
  64. package/src/generator/worker.js +83 -72
  65. package/src/helper.js +12 -13
  66. package/src/logger.js +12 -12
  67. package/src/notifier.js +29 -0
  68. package/src/routers/generatorApi.js +9 -3
  69. package/src/routers/generatorPage.js +3 -1
  70. package/src/routers/moduleApi.js +1 -1
  71. package/src/routers/modulePage.js +32 -7
  72. package/src/sequencerdoc.js +22 -46
  73. package/src/sequencerline.js +16 -4
  74. package/src/session.js +69 -33
  75. package/src/startup.js +47 -10
  76. package/src/webapps.js +62 -18
  77. package/templates/_lib_debug.ejs +8 -8
  78. package/templates/_lib_production.ejs +2 -2
  79. package/templates/application.page.ejs +39 -6
  80. package/templates/generator.page.ejs +4 -3
  81. package/templates/index.page.ejs +2 -2
  82. package/templates/login.page.ejs +3 -3
  83. package/libs/fgta5js-dist/fgta5js-v1.8.3.min.js +0 -11
  84. package/libs/fgta5js-dist/fgta5js-v1.8.3.min.js.map +0 -1
  85. package/libs/webmodule/pagehelper.mjs +0 -45
  86. package/modules/generator/generator.png +0 -0
  87. /package/{libs/fgta5js-dist/fgta5js-v1.8.3.min.css → lib/fgta5js-dist/fgta5js-v1.8.5.min.css} +0 -0
  88. /package/{libs → lib}/fgta5js-dist/fonts/karla-italic-latin-ext.woff2 +0 -0
  89. /package/{libs → lib}/fgta5js-dist/fonts/karla-italic-latin.woff2 +0 -0
  90. /package/{libs → lib}/fgta5js-dist/fonts/karla-normal-latin-ext.woff2 +0 -0
  91. /package/{libs → lib}/fgta5js-dist/fonts/karla-normal-latin.woff2 +0 -0
  92. /package/{libs → lib}/fgta5js-dist/fonts/karla.css +0 -0
  93. /package/{libs → lib}/webmodule/module-footer.css +0 -0
@@ -4,7 +4,7 @@ import * as Extender from './generator-ext.mjs'
4
4
 
5
5
 
6
6
  const CurrentState = {}
7
- const Crsl = Context.Crsl
7
+ const Crsl = Context.Crsl
8
8
  const CurrentSectionId = Context.Sections.generatorEdit
9
9
  const CurrentSection = Crsl.Items[CurrentSectionId]
10
10
 
@@ -22,16 +22,16 @@ export const Section = CurrentSection
22
22
  export async function init(self, args) {
23
23
  console.log('initializing generatorEdit ...')
24
24
 
25
- CurrentSection.addEventListener($fgta5.Section.EVT_BACKBUTTONCLICK, async (evt)=>{
26
- backToList(self, evt)
27
- })
25
+ CurrentSection.addEventListener($fgta5.Section.EVT_BACKBUTTONCLICK, async (evt) => {
26
+ backToList(self, evt)
27
+ })
28
28
 
29
29
 
30
- btn_new.addEventListener('click', (evt)=>{ btn_new_click(self, evt)})
31
- btn_save.addEventListener('click', (evt)=>{ btn_save_click(self, evt)})
32
- btn_generate.addEventListener('click', (evt)=>{ btn_generate_click(self, evt) })
30
+ btn_new.addEventListener('click', (evt) => { btn_new_click(self, evt) })
31
+ btn_save.addEventListener('click', (evt) => { btn_save_click(self, evt) })
32
+ btn_generate.addEventListener('click', (evt) => { btn_generate_click(self, evt) })
33
33
 
34
- obj_appname.addEventListener('change', (evt)=>{ obj_appname_change(self, evt) })
34
+ obj_appname.addEventListener('change', (evt) => { obj_appname_change(self, evt) })
35
35
 
36
36
  await ui.Init(Context)
37
37
 
@@ -45,13 +45,16 @@ export async function openSelectedData(self, params) {
45
45
  let mask = $fgta5.Modal.createMask()
46
46
  try {
47
47
  const id = params.keyvalue
48
-
48
+
49
49
  console.log(params)
50
50
  const result = await openData(self, id)
51
51
  const data = result.generator_data
52
52
 
53
53
  data.id = result.generator_id
54
-
54
+
55
+ const el_title = document.getElementById('application-title')
56
+ el_title.innerHTML = `Generator: ${data.title}`
57
+
55
58
  ui.load(data)
56
59
  } catch (err) {
57
60
  throw err
@@ -63,11 +66,14 @@ export async function openSelectedData(self, params) {
63
66
 
64
67
 
65
68
  export function keyboardAction(self, actionName) {
66
- if (actionName=='save') {
69
+ if (actionName == 'save') {
67
70
  btn_save.click()
68
- } else if (actionName=='escape') {
71
+ } else if (actionName == 'escape') {
69
72
  const listSection = Crsl.Items[Context.Sections.generatorList]
70
- listSection.show({direction:1})
73
+ listSection.show({ direction: 1 })
74
+
75
+ const el_title = document.getElementById('application-title')
76
+ el_title.innerHTML = `Generator`
71
77
  }
72
78
  }
73
79
 
@@ -88,6 +94,8 @@ async function backToList(self, evt) {
88
94
  let goback = true
89
95
  if (goback) {
90
96
  evt.detail.fn_ShowNextSection()
97
+ const el_title = document.getElementById('application-title')
98
+ el_title.innerHTML = `Generator`
91
99
  }
92
100
  }
93
101
 
@@ -96,11 +104,11 @@ async function obj_appname_change(self, evt) {
96
104
  const el = evt.target
97
105
  const value = el.value
98
106
 
99
- if (Context.appsUrls[value]===undefined) {
107
+ if (Context.appsUrls[value] === undefined) {
100
108
  const resp = await $fgta5.MessageBox.error(`nama apps '${value}' tidak teregister di daftar apps`)
101
109
  return
102
110
  }
103
-
111
+
104
112
  // console.log(Context.appsUrls[value].directory)
105
113
  obj_directory.value = Context.appsUrls[value].directory
106
114
  }
@@ -108,17 +116,17 @@ async function obj_appname_change(self, evt) {
108
116
 
109
117
  async function btn_new_click(self, evt) {
110
118
  console.log('btn_new_click')
111
- const sourceSection = evt.target.getAttribute('data-sectionsource')
119
+ const sourceSection = evt.target.getAttribute('data-sectionsource')
112
120
  const generatorList = self.Modules.generatorList
113
121
  const listsecid = generatorList.Section.Id
114
- const fromListSection = sourceSection===listsecid
122
+ const fromListSection = sourceSection === listsecid
115
123
  if (fromListSection) {
116
124
  // btn new di klik dari list
117
125
  await CurrentSection.show()
118
126
 
119
127
  // cek id, jika tidak kosong, perlu di-reset
120
128
  const id = document.getElementById('obj_programid')
121
- if (id!='') {
129
+ if (id != '') {
122
130
  await ui.reset()
123
131
  await ui.NewData()
124
132
  ui.updateCache()
@@ -126,19 +134,19 @@ async function btn_new_click(self, evt) {
126
134
 
127
135
  } else {
128
136
  const resp = await $fgta5.MessageBox.confirm('apakah anda yakin akan membuat data baru?')
129
- if (resp=='ok') {
137
+ if (resp == 'ok') {
130
138
  await ui.reset()
131
139
  await ui.NewData()
132
140
  ui.updateCache()
133
141
  }
134
- }
135
-
142
+ }
143
+
136
144
  }
137
145
 
138
146
  async function btn_save_click(self, evt) {
139
147
  console.log('btn_save_click')
140
148
  const data = await ui.getCurrentData()
141
-
149
+
142
150
  let mask = $fgta5.Modal.createMask()
143
151
  try {
144
152
  const result = await Save(self, data)
@@ -155,15 +163,15 @@ async function btn_save_click(self, evt) {
155
163
  }
156
164
 
157
165
 
158
- async function btn_generate_click(self, evt) {
166
+ async function btn_generate_click(self, evt) {
159
167
  console.log('btn_generate_click')
160
168
  const data = await ui.getCurrentData()
161
-
169
+
162
170
  let mask = $fgta5.Modal.createMask()
163
171
  btn_generate.disabled = true
164
172
  ui.pauseAutoSave(true)
165
173
  try {
166
- if (data.id=='') {
174
+ if (data.id == '') {
167
175
  throw new Error('save dahulu sebelum generate')
168
176
  }
169
177
  const result = await Generate(self, data, mask)
@@ -185,32 +193,32 @@ async function btn_generate_click(self, evt) {
185
193
  async function Save(self, data) {
186
194
  const url = `/${Context.moduleName}/save`
187
195
  try {
188
- const result = await Module.apiCall(url, { data })
189
- return result
196
+ const result = await Module.apiCall(url, { data })
197
+ return result
190
198
  } catch (err) {
191
- throw err
192
- }
199
+ throw err
200
+ }
193
201
  }
194
202
 
195
203
  async function Generate(self, data, mask) {
196
- return new Promise(async (resolve, reject)=>{
204
+ return new Promise(async (resolve, reject) => {
197
205
  const jobId = Date.now()
198
206
  const clientId = `${Context.notifierId}-${jobId}`
199
207
  const notifierSocket = Context.notifierSocket
200
- const ws = new WebSocket(`${notifierSocket}/?clientId=${clientId}`);
201
-
208
+ const ws = new WebSocket(`${notifierSocket}/?clientId=${clientId}`);
209
+
202
210
  ws.onmessage = (event) => {
203
211
  const data = JSON.parse(event.data);
204
212
  if (data.status === 'done') {
205
213
  ws.close();
206
214
  resolve(data);
207
- } else if (data.status=='error') {
215
+ } else if (data.status == 'error') {
208
216
  ws.close();
209
217
  reject(new Error(data.info.message))
210
- } else if (data.status=='message') {
218
+ } else if (data.status == 'message') {
211
219
  console.log(data)
212
220
  mask.setText(data.info.message)
213
- } else if (data.status==='timeout') {
221
+ } else if (data.status === 'timeout') {
214
222
  ws.close();
215
223
  reject(new Error('generate timeout'));
216
224
  }
@@ -11,6 +11,9 @@ const tbl = new $fgta5.Gridview('generatorList-tbl')
11
11
  const pnl_search = document.getElementById('generatorList-pnl_search')
12
12
  const btn_gridload = new $fgta5.ActionButton('generatorList-btn_gridload')
13
13
 
14
+
15
+
16
+
14
17
  export const Section = CurrentSection
15
18
  export const SearchParams = {}
16
19
 
@@ -50,6 +53,30 @@ export async function init(self, args) {
50
53
  } else {
51
54
  console.warn(`'initSearchParams' tidak diimplementasikan di extender`)
52
55
  }
56
+
57
+
58
+ // keyboard listener in search parameter
59
+ const el_txt_appname = document.getElementById('generatorList-txt_appname')
60
+ const el_txt_searchtext = document.getElementById('generatorList-txt_searchtext')
61
+ const el_btn_search = document.getElementById('generatorList-btn_gridload')
62
+
63
+ el_txt_appname.addEventListener('keydown', evt=>{
64
+ if (evt.key=='Enter') {
65
+ el_txt_searchtext.focus()
66
+ evt.stopPropagation()
67
+ evt.preventDefault()
68
+ }
69
+ })
70
+
71
+ el_txt_searchtext.addEventListener('keydown', evt=>{
72
+ if (evt.key=='Enter') {
73
+ el_btn_search.click()
74
+ el_txt_searchtext.blur()
75
+ evt.stopPropagation()
76
+ evt.preventDefault()
77
+ }
78
+ })
79
+
53
80
 
54
81
  } catch (err) {
55
82
  throw err
@@ -0,0 +1,100 @@
1
+ <!-- DESIGNER INFO -->
2
+ <div name="designer-info" class="designer-info">
3
+ <div name="col_title" data-tag="content">
4
+ {title}
5
+ </div>
6
+
7
+ <div data-tag="label" style="margin-top: 8px">Name</div>
8
+ <div data-tag="content" name="col_name" style="margin-top: 8px">{name}</div>
9
+
10
+ <div data-tag="label" style="margin-top: 15px">Table</div>
11
+ <div data-tag="content" name="col_table" style="margin-top: 15px">{table}</div>
12
+
13
+ <div data-tag="label" style="margin-top: 5px">PK</div>
14
+ <div data-tag="content" name="col_pk" style="margin-top: 5px">{pk}</div>
15
+
16
+ <div data-tag="label" style="margin-top: 10px">Table Desc</div>
17
+ <div data-tag="content" style="border: 0; margin-top: 10px">
18
+ <input name="table-descr" type="text" style="padding: 3px 0 3px 3px; width: 100%; background-color: #fcffd1; border-width: 0 0 1px 0">
19
+ </div>
20
+
21
+ <div data-tag="label">&nbsp;</div>
22
+ <div data-tag="content" style="border: 0; margin-top: 5px; display: flex; gap: 20px">
23
+ <label style="font-weight: normal;">
24
+ <input type="checkbox" name="skip-regenerate-table">
25
+ Skip Regenerate Table
26
+ </label>
27
+ </div>
28
+
29
+
30
+
31
+ <div data-tag="label" style="margin-top: 15px" data-bindhead>bind h.title</div>
32
+ <div data-tag="content" style="border: 0; margin-top: 15px" data-bindhead>
33
+ <input name="bind_head_title" type="text" style="padding: 3px 0 3px 3px; width: 300px;">
34
+ </div>
35
+
36
+ <div data-tag="label" style="margin-top: 15px" data-bindhead>bind h.descr</div>
37
+ <div data-tag="content" style="border: 0; margin-top: 15px" data-bindhead>
38
+ <input name="bind_head_descr" type="text" style="padding: 3px 0 3px 3px; width: 300px;">
39
+ </div>
40
+
41
+
42
+ <div data-tag="label" style="margin-top: 15px">Form</div>
43
+ <div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px">
44
+ <label>
45
+ <input type="checkbox" name="form-grid-layout">
46
+ Grid Layout
47
+ </label>
48
+ <label data-entity-header>
49
+ <input type="checkbox" name="allow-form-new">
50
+ Allow New Data
51
+ </label>
52
+ <label data-entity-header>
53
+ <input type="checkbox" name="allow-form-edit">
54
+ Allow Edit Data
55
+ </label>
56
+ </div>
57
+
58
+ <div data-tag="label" style="margin-top: 15px" data-control>Data Control</div>
59
+ <div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px" data-control>
60
+ <label>
61
+ <input type="checkbox" name="allow-row-add">
62
+ Allow Add Row
63
+ </label>
64
+ <label>
65
+ <input type="checkbox" name="allow-row-remove">
66
+ Allow Remove Row
67
+ </label>
68
+ <label>
69
+ <input type="checkbox" name="allow-row-edit">
70
+ Allow Edit Row
71
+ </label>
72
+ </div>
73
+
74
+ <div data-tag="label" style="margin-top: 15px" data-autoid>Row Identifier</div>
75
+ <div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px" data-autoid>
76
+ <div>
77
+ <select name="identifier-method">
78
+ <option value="manual" selected>Manual</option>
79
+ <option value="auto-by-default">Auto By Default (Numeric Only)</option>
80
+ <option value="auto-always">Auto Always (Numeric Only)</option>
81
+ <option value="auto-yearly">Auto Yearly (for Document) </option>
82
+ <option value="auto-monthly">Auto Monthly (for Document)</option>
83
+ <option value="auto-yearly-short">Auto Yearly (short, for entity)</option>
84
+ <option value="auto-custom">Auto Custom Sequencer</option>
85
+ </select>
86
+
87
+ <label style="margin-left: 40px; margin-right: 5px;">Prefix (doc_id)</label>
88
+ <input name="identifier-prefix" type="text" style="width: 40px; padding: 3px 0 3px 3px;" maxlength="4">
89
+
90
+ <label style="margin-left: 15px; margin-right: 5px;">Block</label>
91
+ <input name="identifier-block" type="text" style="width: 30px; padding: 3px 0 3px 3px;" value="3">
92
+
93
+ <label style="margin-left: 15px; margin-right: 5px;">Length</label>
94
+ <input name="identifier-length" type="number" style="width: 30px; padding: 3px 0 3px 3px;" value="6">
95
+ </div>
96
+
97
+
98
+ </div>
99
+
100
+ </div>
@@ -0,0 +1,200 @@
1
+ <!-- CHECKBOX -->
2
+ <div name="design-data-field" class="design-data-field" data-template="checkbox">
3
+ <div name="component-type" data-detil data-fieldtitle>
4
+ <div style="display: flex; justify-content: left; align-items: center; gap: 5px;" field-handle-bar class="field-handle-bar">
5
+ <div name="icon-pk" class="design-data-field-icon-pk"></div>
6
+ <div name="icon" class="design-data-field-icon">
7
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M3 8h42v32H3z" style="fill:#fff;stroke:#000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"/><path d="m12 24.5 8 9.5 16-19" style="fill:none;stroke:#000;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"/></svg>
8
+ </div>
9
+ <div name="title">
10
+ Checkbox
11
+ </div>
12
+ <div class="field-remove-button">
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <div data-detil data-fieldform>
17
+ <!-- 1 2 3 4 5 6 -->
18
+ <label>Field name</label><div>
19
+ <input type="text" name="fieldname"></div>
20
+
21
+ <label>Type</label>
22
+ <div>
23
+ <select name="datatype">
24
+ <option value="boolean" selected>boolean</option>
25
+ </select>
26
+ </div>
27
+
28
+ <div></div>
29
+ <div></div>
30
+
31
+
32
+
33
+ <label>Default Value</label>
34
+ <div>
35
+ <label>
36
+ <input name="defaultvalue" type="checkbox" value="1">
37
+ Checked
38
+ </label>
39
+ </div>
40
+ <div></div>
41
+ <div></div>
42
+ <div>
43
+ <input name="allownull" type="checkbox" value="1" style="transform: translateY(2px); visibility: hidden;" disabled> <!-- AllowNull-->
44
+ </div>
45
+ <div>
46
+ <input type="text" style="visibility: hidden;">
47
+ </div>
48
+
49
+
50
+ <label>Description</label>
51
+ <div style="grid-column: span 5;"><input type="text" name="description"></div>
52
+
53
+
54
+
55
+
56
+ <div>
57
+ <input type="text" style="visibility: hidden;"> <!-- agar tinggi baris tidak terlihat sempet, karena di baris ini hanya checkbox-->
58
+ </div>
59
+ <div style="grid-column: span 5; display: flex; align-items: center;">
60
+ <label>
61
+ <input type="checkbox" name="showingrid" style="transform: translateY(2px);" checked >
62
+ Show in GridView
63
+ </label>
64
+ <label style="margin-left: 40px">
65
+ <input type="checkbox" name="showinform" style="transform: translateY(2px);" checked>
66
+ Show in Form
67
+ </label>
68
+ <label style="margin-left: 20px">
69
+ <input type="checkbox" name="disabledinform" style="transform: translateY(2px);">
70
+ Disabled
71
+ </label>
72
+ </div>
73
+ <div style="display: block; height: 1rem; grid-column: span 6;"></div>
74
+
75
+
76
+ <label>Object Name</label>
77
+ <input type="text" name="objectname">
78
+ <div style="grid-column: span 4;"></div>
79
+
80
+ <label>D.Position</label>
81
+ <div style="grid-column: span 5; display: flex; column-gap: 10px; align-items: center;">
82
+ <label style="transform: translateY(-1px); margin-left: 20px">Row</label>
83
+ <input type="text" name="input-dposrow" style="width: 30px" value="auto">
84
+
85
+ <label style="transform: translateY(-1px);">Span</label>
86
+ <input type="text" name="input-dposrowspan" style="width: 30px">
87
+
88
+ <label style="transform: translateY(-1px); margin-left: 50px">Col</label>
89
+ <input type="text" name="input-dposcol" style="width: 30px" value="1">
90
+
91
+ <label style="transform: translateY(-1px);">Span</label>
92
+ <input type="text" name="input-dposcolspan" style="width: 30px" value="2">
93
+
94
+ <label style="transform: translateY(-1px); margin-left: 50px">Style</label>
95
+ <input type="text" name="input-dposstyle" style="width: 100%">
96
+ </div>
97
+
98
+
99
+
100
+ <label>Text</label>
101
+ <input type="text" name="labeltext">
102
+ <label>Caption</label>
103
+ <div style="grid-column: span 3;">
104
+ <input type="text" name="caption">
105
+ </div>
106
+
107
+
108
+ <label>Information</label>
109
+ <div style="grid-column: span 5;">
110
+ <input name="information" type="text" >
111
+ </div>
112
+
113
+
114
+ <label>Container CSS</label>
115
+ <input type="text" name="input-containercss">
116
+
117
+ <label>InLine Style</label>
118
+ <div style="grid-column: span 3;">
119
+ <input type="text" name="input-inlinestyle">
120
+ </div>
121
+
122
+
123
+
124
+ <div style="display: block; height: 1rem; grid-column: span 6;"></div>
125
+ <label>Grid</label>
126
+ <div style="grid-column: span 5;" name="validation">
127
+
128
+ <label style="grid-column: span 2; transform: translateY(5px); ">Formatter</label>
129
+ <input name="gridformatter" type="text" value="checkmark(value)">
130
+
131
+ <label style="grid-column: span 2; transform: translateY(5px); ">CSS</label>
132
+ <input name="gridcss" type="text">
133
+
134
+ <label style="grid-column: span 2; transform: translateY(5px); ">Inline Style</label>
135
+ <input name="gridinlinestyle" type="text" value='text-align:center'>
136
+
137
+ <label style="grid-column: span 2; transform: translateY(5px); ">Index</label>
138
+ <div style="display: flex">
139
+ <input type="text" name="index" value="0" style="width: 50px">
140
+ <label style="margin-left: 20px">
141
+ <input name="gridsorting" type="checkbox" value="1" style="transform: translateY(2px);" >
142
+ Sorting
143
+ </label>
144
+ </div>
145
+
146
+ </div>
147
+
148
+
149
+
150
+ <div style="display: block; height: 1rem; grid-column: span 6;"></div>
151
+ <label>Validation</label>
152
+ <div style="grid-column: span 5;" name="validation">
153
+ <div name="defaultinvalidmessage" style="grid-column: span 2;">Default Invalid Message</div>
154
+ <input type="text" name="msg_invalid_default" placeholder="invalid message">
155
+
156
+ <label style="grid-column: span 2;">
157
+ <input name="hascustomvalidator" type="checkbox" value="1" style="transform: translateY(2px);" >
158
+ Custom Validator
159
+ </label>
160
+ <input name="validator" type="text" >
161
+
162
+ </div>
163
+
164
+ <div style="display: block; height: 1rem; grid-column: span 6;"></div>
165
+ <label name="validation" style="transform: translateY(10px);">Handle Event</label>
166
+ <div style="grid-column: span 5; padding-left: 10px; display: flex; gap: 30px; flex-wrap: wrap;" >
167
+
168
+ <label>
169
+ <input name="ishandlechanged" type="checkbox" value="1" style="transform: translateY(2px);" >
170
+ Changed
171
+ </label>
172
+
173
+ <label>
174
+ <input name="ishandlechecked" type="checkbox" value="1" style="transform: translateY(2px);" >
175
+ Checked
176
+ </label>
177
+
178
+ <label>
179
+ <input name="ishandleunchecked" type="checkbox" value="1" style="transform: translateY(2px);">
180
+ UnChecked
181
+ </label>
182
+
183
+ </div>
184
+
185
+ </div>
186
+
187
+
188
+
189
+ <div name="component-summary" data-summary style="display: none;" draggable="true" field-handle-bar class="field-handle-bar">
190
+ <div name="icon-pk" class="design-data-field-icon-pk"></div>
191
+ <div name="icon" class="design-data-field-icon">
192
+ </div>
193
+ <div name="title">
194
+ <input type="text" name="fieldname-summary" placeholder="checkbox field name">
195
+ </div>
196
+ <div class="field-remove-button">
197
+ </div>
198
+ </div>
199
+
200
+ </div>