@daracl/form 0.0.16 → 0.0.18

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 (92) hide show
  1. package/README.md +1 -1
  2. package/dist/DaraForm.d.ts +51 -2
  3. package/dist/FieldInfoMap.d.ts +8 -1
  4. package/dist/FormTemplate.d.ts +2 -2
  5. package/dist/constants.d.ts +5 -1
  6. package/dist/daracl.form.css +688 -0
  7. package/dist/daracl.form.min.css +10 -0
  8. package/dist/daracl.form.min.umd.js +171 -0
  9. package/dist/daracl.form.min.umd.js.map +1 -0
  10. package/dist/daracl.form.umd.js +4477 -0
  11. package/dist/daracl.form.umd.js.map +1 -0
  12. package/dist/defaultOption.d.ts +8 -0
  13. package/dist/event/renderEvents.d.ts +1 -1
  14. package/dist/global.d.ts +6 -0
  15. package/dist/index.cjs +1806 -519
  16. package/dist/index.cjs.map +1 -7
  17. package/dist/index.d.ts +7 -2
  18. package/dist/index.html +193 -348
  19. package/dist/index.js +4090 -3101
  20. package/dist/index.js.map +1 -7
  21. package/dist/index.min.cjs +171 -0
  22. package/dist/index.min.cjs.map +1 -0
  23. package/dist/index.min.js +2910 -0
  24. package/dist/index.min.js.map +1 -0
  25. package/dist/index.umd.d.ts +7 -0
  26. package/dist/renderer/ButtonRender.d.ts +2 -2
  27. package/dist/renderer/CheckboxRender.d.ts +2 -2
  28. package/dist/renderer/CustomRender.d.ts +2 -2
  29. package/dist/renderer/DateRender.d.ts +2 -2
  30. package/dist/renderer/DropdownRender.d.ts +2 -2
  31. package/dist/renderer/FileRender.d.ts +2 -2
  32. package/dist/renderer/GridRender.d.ts +2 -2
  33. package/dist/renderer/GroupRender.d.ts +2 -2
  34. package/dist/renderer/HiddenRender.d.ts +2 -2
  35. package/dist/renderer/NumberRender.d.ts +2 -2
  36. package/dist/renderer/PasswordRender.d.ts +2 -2
  37. package/dist/renderer/RadioRender.d.ts +2 -2
  38. package/dist/renderer/RangeRender.d.ts +2 -2
  39. package/dist/renderer/Render.d.ts +2 -2
  40. package/dist/renderer/TabRender.d.ts +2 -2
  41. package/dist/renderer/TextAreaRender.d.ts +2 -2
  42. package/dist/renderer/TextRender.d.ts +2 -2
  43. package/dist/types/FormField.d.ts +18 -13
  44. package/dist/types/FormOptions.d.ts +1 -1
  45. package/dist/types/style.d.ts +3 -0
  46. package/dist/util/renderFactory.d.ts +1 -1
  47. package/dist/util/styleUtils.d.ts +10 -12
  48. package/dist/util/utils.d.ts +1 -1
  49. package/package.json +129 -140
  50. package/style/abstracts/_index.scss +2 -0
  51. package/style/abstracts/_mixins.scss +22 -0
  52. package/style/abstracts/_variables.scss +1 -0
  53. package/style/base/_base.scss +59 -0
  54. package/style/base/_index.scss +1 -0
  55. package/style/components/_button.scss +16 -0
  56. package/style/components/_field-container.scss +41 -0
  57. package/style/components/_field-group.scss +16 -0
  58. package/style/components/_file-list.scss +33 -0
  59. package/style/components/_form-field.scss +47 -0
  60. package/style/components/_form-group.scss +90 -0
  61. package/style/components/_grid-field.scss +121 -0
  62. package/style/components/_icon.scss +16 -0
  63. package/style/components/_index.scss +11 -0
  64. package/style/components/_label.scss +59 -0
  65. package/style/components/_row.scss +88 -0
  66. package/style/components/_tab.scss +70 -0
  67. package/{dist/index.css → style/daracl.form.css} +19 -66
  68. package/style/daracl.form.css.map +1 -0
  69. package/style/daracl.form.min.css +2 -0
  70. package/style/daracl.form.min.css.map +1 -0
  71. package/style/daracl.form.scss +44 -691
  72. package/style/themes/_common.scss +13 -0
  73. package/style/themes/_dark.scss +20 -0
  74. package/style/themes/_index.scss +14 -0
  75. package/style/themes/_light.scss +20 -0
  76. package/style/themes/_mixin.scss +6 -0
  77. package/dist/commonVender.d.ts +0 -1
  78. package/dist/daracl.form.js +0 -5720
  79. package/dist/daracl.form.js.map +0 -1
  80. package/dist/daracl.form.min.js +0 -7
  81. package/dist/daracl.form.min.js.LICENSE.txt +0 -5
  82. package/dist/daracl.form.min.js.map +0 -1
  83. package/dist/daracl.vender.min.css +0 -5
  84. package/dist/daracl.vender.min.js +0 -2
  85. package/dist/daracl.vender.min.js.LICENSE.txt +0 -3
  86. package/dist/index.css.map +0 -7
  87. package/dist/indexVender.d.ts +0 -6
  88. package/dist/main.css +0 -6
  89. package/dist/main.css.map +0 -1
  90. package/dist/types/DateTimePicker.d.ts +0 -5
  91. package/src/index.ts +0 -5
  92. /package/dist/util/{Lanauage.d.ts → Language.d.ts} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,3 +1,8 @@
1
- import DaraForm from "./DaraForm";
1
+ export { DaraForm } from "./DaraForm";
2
+ export type { FormChangeEvent, FormChangeListener, Unsubscribe } from "./DaraForm";
3
+ export type { FormField, ConditionInfo, ValuesInfo, FileInfo, FieldStyle, GridOptions, OptionCallback } from "@t/FormField";
4
+ export type { FormOptions } from "@t/FormOptions";
5
+ export type { Message } from "@t/Message";
6
+ export type { ValidResult } from "@t/ValidResult";
2
7
  import "../style/daracl.form.scss";
3
- export = DaraForm;
8
+ import "./global";
package/dist/index.html CHANGED
@@ -1,118 +1,43 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Dara Form</title>
3
6
 
4
- <head>
5
- <meta charset="utf-8" />
6
- <title>Dara Form</title>
7
- <script src="/dist/daracl.vender.min.js"></script>
8
- <link href="/dist/daracl.vender.min.css" rel="stylesheet">
9
- </head>
10
-
11
- <body>
12
- <div class="header">
13
- <div class="form-button">
14
- <button type="button" onclick="formObj.addItem()">Add</button>
15
- <button type="button" onclick="formObj.getValue()">getValue</button>
16
- <button type="button" onclick="formObj.getValuePromise()">getValue(true)</button>
17
- <button type="button" onclick="formObj.setValue()">setValue()</button>
18
- <button type="button" onclick="formBuilder.isValidForm()">valid check</button>
19
- <button type="button" onclick="formBuilder.resetForm()">Reset</button>
20
- <button type="button" onclick="formBuilder.setFieldItems()">setFieldItems</button>
21
- </div>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <link rel="stylesheet" href="./daracl.form.min.css" />
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10
+ <script type="text/javascript" src="./daracl.form.umd.js"></script>
11
+ </head>
22
12
 
13
+ <body onload="formObj.load()">
23
14
  <div>
24
- Theme : <label>Light<input type="radio" name="theme-toggle" value="light" checked="true"></label>
25
- <label>Dark<input type="radio" name="theme-toggle" value="dark"></label>
15
+ <div class="form-button">
16
+ <button type="button" onclick="formObj.addItem()">Add</button>
17
+ <button type="button" onclick="formObj.getValue()">getValue</button>
18
+ <button type="button" onclick="formBuilder.isValidForm()">valid check</button>
19
+ <button type="button" onclick="formBuilder.resetForm()">Reset</button>
20
+ </div>
26
21
  </div>
27
- </div>
28
-
29
- <div style="padding: 0px 20px">
30
- <form id="loginForm" class="login-form"></form>
31
-
32
- <form id="formArea" class="test-form aaa-test"></form>
33
-
34
- </div>
35
- <script src="daracl.form.js"></script></body>
36
22
 
23
+ <div style="padding: 20px">
24
+ <form id="formArea"></form>
25
+ </div>
26
+ </body>
37
27
  </html>
38
28
  <style>
39
29
  .form-button {
40
30
  text-align: center;
41
31
  }
42
-
43
- :root {
44
- --bg: #ffffff;
45
- --bg-color: #070d19;
46
-
47
- }
48
-
49
- body.dark {
50
- --bg: #070d19;
51
- --bg-color: #ffffff;
52
-
53
- }
54
-
55
- body {
56
- background-color: var(--bg);
57
- }
58
-
59
- .header {
60
- color: var(--bg-color);
61
- }
62
32
  </style>
63
33
  <script>
64
-
65
- const THEME_KEY = "form-theme";
66
- const theme = localStorage.getItem(THEME_KEY);
67
-
68
- if (theme) setMainTheme(theme);
69
-
70
- function setMainTheme(theme, persist = false) {
71
- const classList = document.body.classList;
72
-
73
- classList.remove("light", "dark");
74
-
75
- classList.add(theme);
76
-
77
- if (persist) {
78
- localStorage.setItem(THEME_KEY, theme);
79
- }
80
- }
81
-
82
- function load() {
83
- // theme
84
- const toggler = document.querySelectorAll('[name="theme-toggle"]');
85
- const theme = localStorage.getItem(THEME_KEY);
86
-
87
- if (toggler) {
88
- if (theme === "dark") {
89
- document.querySelector('[name="theme-toggle"][value="dark"]').checked = true;
90
- }
91
-
92
- toggler.forEach((el) => {
93
- el.addEventListener("click", (e) => {
94
- setMainTheme(el.value, true);
95
- });
96
- })
97
- }
98
- }
99
- load();
100
-
101
34
  var formInfo = {
102
35
  message: "This value is not valid",
36
+ mode: "horizontal",
103
37
  //mode: 'vertical',
38
+ //width: '600px',
104
39
  //autoFocus: false,
105
- //useTypeValue: false,
106
- style: {
107
- //width: '600px',
108
- position: 'left-left',
109
- labelWidth: '3'
110
-
111
- },
112
- // form load 이후 호출.
113
- onMounted: function () {
114
- console.log(this)
115
- },
40
+ labelWidth: "150px",
116
41
  message: {
117
42
  empty: "{name} 필수 입력사항입니다.",
118
43
  string: {
@@ -134,11 +59,22 @@
134
59
  renderType: "hidden",
135
60
  defaultValue: "asdf",
136
61
  },
62
+ {
63
+ name: "uid",
64
+ label: "아이디",
65
+ tooltip: "아이디를 넣어주세요.",
66
+ description: "설명설명설명",
67
+ placeholder: "아이디를 넣어주세요.",
68
+ required: true,
69
+ rule: {
70
+ minLength: 3,
71
+ maxLength: 100,
72
+ },
73
+ validator: (param) => {},
74
+ },
137
75
  {
138
76
  name: "uname",
139
- label: "Text",
140
- renderType: 'text',
141
- template: '<div id="customElementID">111</div>',
77
+ label: "이름",
142
78
  required: true,
143
79
  rule: {
144
80
  minLength: 2,
@@ -147,186 +83,42 @@
147
83
  onChange: (arg) => {
148
84
  console.log(arg);
149
85
  },
150
- renderer: {
151
- mounted: () => {
152
- console.log(document.getElementById('customElementID'))
153
- }
154
- , getValue() {
155
- return '21';
156
- }
157
- , valid1(field, rowElement) {
158
- const val = this.getValue();
159
- return { name: field.name, message: 'custom type not valid' };
160
- }
161
- }
162
- },
163
- , {
164
- name: "cmpCredId111",
165
- label: "Dropdown",
166
- renderType: "dropdown",
167
- tooltip: "credentials 넣어주세요.",
168
- defaultValue: '222',
169
- required: true,
170
- listItem: {
171
- labelField: "credName",
172
- valueField: "credId",
173
- list: [{ credId: "11", credName: "credNam11" }, { credId: "22", credName: "credName" }, { credId: "33", credName: "credName33" }],
174
- },
175
- description: "drop down 설명",
176
- onChange: (aaa) => {
177
- console.log(aaa)
178
-
179
- if (aaa.newValue == '22') return false;
180
-
181
- return true;
182
- }
183
86
  },
184
-
185
-
186
87
  {
187
- label: 'Password'
188
- , orientation: 'vertical'
189
- , conditional: {
190
- show: true,
191
- custom: function () {
192
-
193
- return true;
194
- }
195
- }
196
- , children: [{
197
- name: 'upw'
198
- , label: '비밀번호'
199
- , style: {
200
- labelHide: true
201
- }
202
- , renderType: 'password'
203
- , regexpType: 'number-char'
204
- , rule: {
205
- minLength: 3
206
- }
207
- , different: {
208
- field: 'uid',
209
- message: '아이디와 달라야 합니다.'
210
- }
211
- }
212
- , {
213
- name: 'confirmUpw'
214
- , label: '확인 비밀번호'
215
- , style: {
216
- labelHide: true
217
- }
218
- , renderType: 'password'
219
- , identical: {
220
- field: 'upw',
221
- message: '비밀번호가 같아야합니다.'
222
- }
223
- }]
224
- }
225
-
226
- , {
227
- name: "birth",
228
- label: "Date",
88
+ name: "birth2",
89
+ label: "생년월일2",
229
90
  required: true,
230
91
  renderType: "date",
231
- customOptions: {
232
- mode: 'date'
233
- }
234
- },
235
- {
236
- name: "sex",
237
- label: "Radio",
238
- required: true,
239
- renderType: "radio",
240
- listItem: {
241
- list: [
242
- { label: "남", value: "Y", selected: true },
243
- { label: "여", value: "X" },
244
- ],
92
+ rendererOptions: {
93
+ isEmbed: false,
94
+ mode: "datetime",
95
+ initialDate: new Date(),
245
96
  },
246
- },
247
- {
248
- name: "picture",
249
- label: "File",
250
- required: true,
251
- renderType: "file",
252
- listItem: {
253
- list: [
254
- ],
97
+ onChange: (arg) => {
98
+ console.log(arg);
255
99
  },
256
100
  },
257
101
 
258
-
259
102
  {
260
- label: "Checkbox",
261
-
262
- name: "checkbox11",
263
- required: true,
264
- renderType: "checkbox",
265
- defaultValue: '',
266
- listItem: {
267
- orientation: "horizontal", // 'vertical , horizontal'
268
- list: [
269
- { label: "checkbox value", value: "Y", selected: true }
270
- , { label: "checkbox value111", value: "Y1" }
271
- , { label: "checkbox value222", value: "Y2", disabled: true }
272
- , { label: "checkbox value333", value: "Y3" }
273
- ],
274
- },
275
- onChange: (arg) => {
276
- console.log(arg);
277
- },
278
- }
279
- , {
280
- label: "라벨주소",
281
- name: 'newAddress',
282
- renderType: 'radio',
283
- //defaultValue: 'N',
284
- listItem: {
285
- orientation: "horizontal", // 'vertical , horizontal'
286
- list: [
287
- { label: "추가1", value: "Y", selected: true },
288
- { label: "추가", value: "N" }
289
- ],
290
- }
291
- , description: `<div><a href="asdf">111111111111111</a></div>`
292
- , orientation: "horizontal" // 'vertical , horizontal'
293
- , conditional: {
294
- show: true,
295
- custom: function () {
296
- return true;
297
- },
298
- },
103
+ label: "주소",
104
+ viewMode: "vertical", // 'vertical , horizontal'
299
105
  children: [
300
-
301
106
  {
302
- name: "address32",
303
- label: "주소",
304
- orientation: 'vertical',
305
- style: {
306
- labelHide: false,
307
- position: 'left',
308
- labelWidth: '120px',
309
- },
107
+ name: "newAddress",
108
+ label: "신규주소여부",
109
+ hideLabel: true,
310
110
  required: true,
311
- rule: {
312
- minLength: 2,
313
- maxLength: 100,
111
+ renderType: "checkbox",
112
+ values: [{ label: "option1", selected: true }],
113
+ onChange: (arg) => {
114
+ console.log(arg);
314
115
  },
315
- conditional: {
316
- show: false,
317
- field: "newAddress",
318
- eq: "N",
319
- //custom?: OptionCallback
320
- }
321
116
  },
322
117
  {
323
118
  name: "address",
324
- label: "주소2",
119
+ label: "주소",
325
120
  hideLabel: true,
326
121
  required: true,
327
- style: {
328
- labelHide: false,
329
- },
330
122
  rule: {
331
123
  minLength: 2,
332
124
  maxLength: 100,
@@ -340,44 +132,33 @@
340
132
  },
341
133
  {
342
134
  name: "address2",
343
- label: "주소3",
344
- style: {
345
- //width: '200px',
346
- labelHide: false,
347
- position: 'left'
348
- },
135
+ label: "주소1",
136
+ hideLabel: true,
349
137
  required: true,
350
138
  rule: {
351
139
  minLength: 2,
352
140
  maxLength: 100,
353
141
  },
354
142
  conditional: {
355
- show: true,
143
+ show: false,
356
144
  field: "newAddress",
357
- eq: "Y",
145
+ eq: true,
358
146
  //custom?: OptionCallback
359
147
  },
360
148
  },
361
149
  {
150
+ name: "hiddenMode1",
362
151
  renderType: "text",
363
152
  label: "주소 하위1",
364
- //childLabelWidth: "",
365
- orientation: "horizontal", // 'vertical , horizontal, horizontal-row'
366
- style: {
367
- labelWidth: "200px",
368
- labelHide: false
369
- },
370
- conditional: {
371
- show: true,
372
- custom: function () {
373
- return true;
374
- },
375
- },
153
+ childLabelWidth: "10%",
154
+ viewMode: "horizontal", // 'vertical , horizontal, horizontal-row'
155
+ hideLabel: true,
376
156
  children: [
377
157
  {
378
158
  name: "address22222",
379
159
  label: "주소1",
380
160
  labelWidth: "150px",
161
+ renderType: "text",
381
162
  },
382
163
  {
383
164
  name: "address222333322",
@@ -396,16 +177,141 @@
396
177
  },
397
178
  ],
398
179
  },
399
-
180
+ {
181
+ name: "uemail",
182
+ label: "이메일",
183
+ required: true,
184
+ regexpType: "email",
185
+ rule: {
186
+ maxLength: 100,
187
+ },
188
+ typeMessage: "The input is not a valid email address",
189
+ isValid: function (fieldInfo) {},
190
+
191
+ conditional: {
192
+ show: false,
193
+ field: "newAddress",
194
+ eq: true,
195
+ //custom?: OptionCallback
196
+ },
197
+ },
198
+ {
199
+ name: "age",
200
+ label: "나이",
201
+ renderType: "range",
202
+ required: true,
203
+ rule: {
204
+ minimum: 0,
205
+ maximum: 200,
206
+ },
207
+ defaultValue: 0,
208
+ typeMessage: "The input is not a valid email address",
209
+ isValid: function (fieldInfo) {},
210
+ },
211
+ {
212
+ name: "upw",
213
+ label: "비밀번호",
214
+ renderType: "password",
215
+ regexpType: "number-char",
216
+ rule: {
217
+ minLength: 8,
218
+ },
219
+ different: {
220
+ field: "uid",
221
+ message: "아이디와 달라야 합니다.",
222
+ },
223
+ },
224
+ {
225
+ name: "confirmUpw",
226
+ label: "비밀번호",
227
+ renderType: "password",
228
+ identical: {
229
+ field: "upw",
230
+ message: "비밀번호가 같아야합니다.",
231
+ },
232
+ },
233
+ {
234
+ name: "file",
235
+ label: "사진",
236
+ renderType: "file",
237
+ required: true,
238
+ values: [
239
+ { fileId: "test", fileName: "aaa.zip" },
240
+ { fileId: "test", fileName: "bbb.zip" },
241
+ ],
242
+ },
243
+ {
244
+ name: "dropdown",
245
+ label: "드랍다운",
246
+ renderType: "dropdown",
247
+ required: true,
248
+ values: [
249
+ { label: "All", value: "" },
250
+ { label: "option1", value: "1", selected: true },
251
+ { label: "option2", value: "2" },
252
+ ],
253
+ },
254
+ {
255
+ name: "useYn",
256
+ label: "사용여부",
257
+ required: true,
258
+ renderType: "radio",
259
+ values: [
260
+ { label: "Y", value: "Y", selected: true },
261
+ { label: "N", value: "N" },
262
+ ],
263
+ },
264
+ {
265
+ name: "check",
266
+ label: "checkbox",
267
+ required: true,
268
+ renderType: "checkbox",
269
+ values: [
270
+ { label: "option1", value: "1" },
271
+ { label: "option2", value: "2" },
272
+ { label: "option3", value: "3" },
273
+ ],
274
+ },
275
+ {
276
+ name: "birth",
277
+ label: "생년월일",
278
+ required: true,
279
+ renderType: "date",
280
+ rendererOptions: {
281
+ isEmbed: false,
282
+ mode: "datetime",
283
+ initialDate: new Date(),
284
+ },
285
+ onChange: (arg) => {
286
+ console.log(arg);
287
+ },
288
+ },
289
+ {
290
+ name: "textarea",
291
+ label: "텍스트 area",
292
+ placeholder: "신규주소 선택하",
293
+ renderType: "textarea",
294
+ },
295
+ {
296
+ name: "customField",
297
+ label: "custom Render",
298
+ renderType: "custom",
299
+ renderer: {
300
+ template: () => {
301
+ return "asdfawefwafwaef";
302
+ },
303
+ getValue: () => {
304
+ return "custom field value";
305
+ },
306
+ },
307
+ },
400
308
  ],
401
309
  };
402
310
 
403
-
404
311
  var rowIdx = 0;
405
312
  var formBuilder;
406
313
  var formObj = {
407
314
  load: () => {
408
- // formBuilder = loginForm;
409
315
  formBuilder = Daracl.form.create(document.getElementById("formArea"), formInfo);
410
316
  },
411
317
  addItem: () => {
@@ -418,68 +324,7 @@
418
324
  });
419
325
  },
420
326
  getValue: () => {
421
- let formValue = formBuilder.getValue();
422
- console.log('getValue : ', formValue, JSON.stringify(formValue))
423
- alert('파일은 콘솔 확인\n' + JSON.stringify(formValue));
424
- },
425
- getValuePromise: () => {
426
- formBuilder
427
- .getValue(true)
428
- .then((aa) => {
429
- console.log(aa);
430
-
431
- for (let [name, value] of aa.entries()) {
432
- console.log(`${name} : ${value}`);
433
- }
434
-
435
- alert("form data console 확인");
436
- })
437
- .catch((e) => {
438
- alert(e.message);
439
- });
440
- },
441
- setFieldItems: () => {
442
- formBuilder.setFieldItems("picture", [
443
- { fileId: "test1", fileName: "aaa.zip" },
444
- { fileId: "test2", fileName: "bbb.zip" },
445
- ]);
446
- formBuilder.setValue({ sex: "X" }, false);
447
- },
448
-
449
- setValue: () => {
450
- formBuilder.setValue(
451
- {
452
- "hiddenMode": "asdf",
453
- "이름222222": "이름222222",
454
- "tab": {
455
- "tab1": {
456
- "tabPicture": [{ fileId: "test1", fileName: "aaa.zip" }],
457
- "tabPictureRemoveIds": [],
458
- "grid": [
459
- { key: 'aaa', value: 'bbb', cre: 'credId' },
460
- { key: 'key임', value: 'value임', cre: 'credId' }
461
- ],
462
- "uname222": "uname222vvvv",
463
- "uname222333": "uname222333vvvv",
464
- "child tab": {
465
- "child-tab1": {
466
- "child-uname222": "child-uname222 uname222"
467
- },
468
- "child-uname2-tab2": {
469
- "child-uname333": "child-uname2-tab2 uname333"
470
- }
471
- }
472
- },
473
- "tab2": {
474
- "uname333": "tab2 uname333 value"
475
- }
476
- }
477
- }, false);
327
+ alert(JSON.stringify(formBuilder.getValue()));
478
328
  },
479
329
  };
480
-
481
- formObj.load();
482
-
483
- window.formBuilder = formBuilder;
484
- window.formObj = formObj;
485
- </script>
330
+ </script>