gnui 1.2.17 → 1.2.19

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 (78) hide show
  1. package/dist/js/gnui.esm.js +736 -96
  2. package/dist/js/gnui.js +736 -96
  3. package/dist/js/gnui.min.js +6 -6
  4. package/dist/styles/default.css +1019 -108
  5. package/dist/styles/gpi.css +1019 -108
  6. package/dist/styles/green24.css +1230 -289
  7. package/dist/styles/insights.css +1019 -108
  8. package/dist/styles/nac.css +969 -58
  9. package/dist/styles/ztnac.css +1206 -265
  10. package/package.json +1 -1
  11. package/styleguide/assets/components.js +216 -9
  12. package/styleguide/assets/js/gnui.js +736 -96
  13. package/styleguide/assets/js/gnui.min.js +6 -6
  14. package/styleguide/assets/styles/default.css +1019 -108
  15. package/styleguide/assets/styles/gpi.css +1019 -108
  16. package/styleguide/assets/styles/green24.css +1230 -289
  17. package/styleguide/assets/styles/insights.css +1019 -108
  18. package/styleguide/assets/styles/nac.css +969 -58
  19. package/styleguide/assets/styles/ztnac.css +1206 -265
  20. package/styleguide/category/COLOR/index.html +2 -2
  21. package/styleguide/category/COMPONENT/Alert(js)/index.html +2 -2
  22. package/styleguide/category/COMPONENT/Bignumber/index.html +2 -2
  23. package/styleguide/category/COMPONENT/Breadcrumb/index.html +2 -2
  24. package/styleguide/category/COMPONENT/Calendar(js)/index.html +2 -2
  25. package/styleguide/category/COMPONENT/Card/index.html +2 -2
  26. package/styleguide/category/COMPONENT/Chart(js)/index.html +2 -2
  27. package/styleguide/category/COMPONENT/Datagrid(js)/index.html +136 -9
  28. package/styleguide/category/COMPONENT/Datalist(js)/index.html +2 -2
  29. package/styleguide/category/COMPONENT/Growl(js)/index.html +2 -2
  30. package/styleguide/category/COMPONENT/JsonView(js)/index.html +2 -2
  31. package/styleguide/category/COMPONENT/Loader(js)/index.html +21 -4
  32. package/styleguide/category/COMPONENT/MenuButton(js)/index.html +74 -6
  33. package/styleguide/category/COMPONENT/Message(js)/index.html +2 -2
  34. package/styleguide/category/COMPONENT/Modal(js)/index.html +2 -2
  35. package/styleguide/category/COMPONENT/Pagination(js)/index.html +2 -2
  36. package/styleguide/category/COMPONENT/Panel/index.html +2 -2
  37. package/styleguide/category/COMPONENT/Progressbar(js)/index.html +2 -2
  38. package/styleguide/category/COMPONENT/Tab(js)/index.html +2 -2
  39. package/styleguide/category/COMPONENT/Tagcloud(js)/index.html +2 -2
  40. package/styleguide/category/COMPONENT/Tooltip(js)/index.html +2 -2
  41. package/styleguide/category/COMPONENT/Tree(js)/index.html +2 -2
  42. package/styleguide/category/CONTROLS/Button(js)/index.html +2 -2
  43. package/styleguide/category/CONTROLS/Checkbox/index.html +2 -2
  44. package/styleguide/category/CONTROLS/Colorpicker(js)/index.html +2 -2
  45. package/styleguide/category/CONTROLS/Datepicker(js)/index.html +2 -2
  46. package/styleguide/category/CONTROLS/Dropdown(js)/index.html +2 -2
  47. package/styleguide/category/CONTROLS/File/index.html +2 -2
  48. package/styleguide/category/CONTROLS/Form/Control/index.html +2 -2
  49. package/styleguide/category/CONTROLS/Form/Field/index.html +2 -2
  50. package/styleguide/category/CONTROLS/Form/Plain/index.html +2 -2
  51. package/styleguide/category/CONTROLS/Input/index.html +2 -2
  52. package/styleguide/category/CONTROLS/MultiText(js)/index.html +2 -2
  53. package/styleguide/category/CONTROLS/Picklist(js)/index.html +28 -18
  54. package/styleguide/category/CONTROLS/Radio/index.html +2 -2
  55. package/styleguide/category/CONTROLS/Select/index.html +2 -2
  56. package/styleguide/category/CONTROLS/SelectButton(js)/index.html +2 -2
  57. package/styleguide/category/CONTROLS/Slider/index.html +2 -2
  58. package/styleguide/category/CONTROLS/SortableList(js)/index.html +487 -0
  59. package/styleguide/category/CONTROLS/Switch(js)/index.html +2 -2
  60. package/styleguide/category/CONTROLS/SyntaxInput(js)/index.html +2 -2
  61. package/styleguide/category/CONTROLS/Textarea/index.html +2 -2
  62. package/styleguide/category/CONTROLS/Time(js)/index.html +2 -2
  63. package/styleguide/category/ELEMENTS/Box/index.html +2 -2
  64. package/styleguide/category/ELEMENTS/Icon/index.html +2 -2
  65. package/styleguide/category/ELEMENTS/Image/index.html +2 -2
  66. package/styleguide/category/ELEMENTS/List/index.html +2 -2
  67. package/styleguide/category/ELEMENTS/Table/index.html +2 -2
  68. package/styleguide/category/ELEMENTS/Tag/index.html +2 -2
  69. package/styleguide/category/ELEMENTS/Title/index.html +2 -2
  70. package/styleguide/category/LAYOUT/Container/index.html +2 -2
  71. package/styleguide/category/LAYOUT/Grid/index.html +2 -2
  72. package/styleguide/category/LAYOUT/Splitter(js)/index.html +2 -2
  73. package/styleguide/category/UTILITY/index.html +2 -2
  74. package/styleguide/category/Utils/index.html +2 -2
  75. package/styleguide/color.html +2 -2
  76. package/styleguide/index.html +2 -2
  77. package/styleguide/tag/javascript/index.html +608 -31
  78. package/styleguide/tag/v.0.1.0/index.html +608 -31
@@ -18,7 +18,7 @@
18
18
  transform: translateX(100%);
19
19
  }
20
20
  }
21
- .gn-container:not(:last-child), .gn-tagcloud:not(:last-child), .gn-tab:not(:last-child), .gn-progressbar:not(:last-child), .gn-picklist:not(:last-child), .gn-panel-3:not(:last-child), .gn-panel-2:not(:last-child), .gn-pagination:not(:last-child), .gn-message:not(:last-child), .gn-jsonview .jsonview-header:not(:last-child), .gn-growl:not(:last-child), .gn-gcolor:not(:last-child), .gn-card:not(:last-child), .gn-breadcrumb:not(:last-child), .gn-bignumber:not(:last-child), .gn-alert:not(:last-child), .gn-slider:not(:last-child), .gn-multitext:not(:last-child), .gn-field:not(:last-child), .gn-title:not(:last-child),
21
+ .gn-container:not(:last-child), .gn-tagcloud:not(:last-child), .gn-tab:not(:last-child), .gn-progressbar:not(:last-child), .gn-sortablelist:not(:last-child), .gn-picklist:not(:last-child), .gn-panel-3:not(:last-child), .gn-panel-2:not(:last-child), .gn-pagination:not(:last-child), .gn-message:not(:last-child), .gn-jsonview .jsonview-header:not(:last-child), .gn-growl:not(:last-child), .gn-gcolor:not(:last-child), .gn-card:not(:last-child), .gn-breadcrumb:not(:last-child), .gn-bignumber:not(:last-child), .gn-alert:not(:last-child), .gn-slider:not(:last-child), .gn-multitext:not(:last-child), .gn-field:not(:last-child), .gn-title:not(:last-child),
22
22
  .gn-sub-title:not(:last-child), .gn-table:not(:last-child), .gn-list:not(:last-child), .gn-box-no-line:not(:last-child), .gn-box:not(:last-child) {
23
23
  margin-bottom: 1rem;
24
24
  }
@@ -2670,7 +2670,7 @@ tag:
2670
2670
  }
2671
2671
  .gn-icon-ext::before {
2672
2672
  content: "\f15b";
2673
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free";
2673
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
2674
2674
  font-weight: 300;
2675
2675
  font-size: 1.6rem;
2676
2676
  }
@@ -4179,10 +4179,6 @@ tag:
4179
4179
  display: block;
4180
4180
  word-break: break-word;
4181
4181
  }
4182
- .gn-title:not(:last-child),
4183
- .gn-sub-title:not(:last-child) {
4184
- margin-bottom: 1rem;
4185
- }
4186
4182
 
4187
4183
  .gn-title {
4188
4184
  color: hsl(0, 0%, 21%);
@@ -5452,6 +5448,7 @@ compile: true
5452
5448
  ```ejs
5453
5449
  <button name="new-button"></button>
5454
5450
  <button name="new-button2"></button>
5451
+ <button name="new-button-submenu">편집 메뉴</button>
5455
5452
  ```
5456
5453
 
5457
5454
  ````
@@ -5491,6 +5488,51 @@ compile: true
5491
5488
  value: 'menu2'
5492
5489
  }]
5493
5490
  });
5491
+ // 서브메뉴 예시
5492
+ Gn.create('menubutton', {
5493
+ target: 'button[name=new-button-submenu]',
5494
+ size: 'normal',
5495
+ textSets: {
5496
+ buttonText: '편집 메뉴'
5497
+ },
5498
+ onSelect: function (value, text, menu, e) {
5499
+ console.log('선택된 메뉴:', { value: value, text: text, menu: menu });
5500
+ },
5501
+ data: [
5502
+ {
5503
+ text: '파일',
5504
+ value: 'file',
5505
+ child: [
5506
+ { text: '새 파일', value: 'file-new' },
5507
+ { text: '열기', value: 'file-open' },
5508
+ {
5509
+ text: '최근 파일',
5510
+ value: 'file-recent',
5511
+ child: [
5512
+ { text: 'document.txt', value: 'file-recent-1' },
5513
+ { text: 'image.png', value: 'file-recent-2' }
5514
+ ]
5515
+ },
5516
+ { text: '저장', value: 'file-save', disabled: true },
5517
+ { text: '다른 이름으로 저장', value: 'file-saveas' }
5518
+ ]
5519
+ },
5520
+ {
5521
+ text: '편집',
5522
+ value: 'edit',
5523
+ actived: true,
5524
+ child: [
5525
+ { text: '실행 취소', value: 'edit-undo' },
5526
+ { text: '다시 실행', value: 'edit-redo' }
5527
+ ]
5528
+ },
5529
+ {
5530
+ text: '도움말',
5531
+ value: 'help',
5532
+ disabled: true
5533
+ }
5534
+ ]
5535
+ });
5494
5536
  ````
5495
5537
 
5496
5538
 
@@ -5547,15 +5589,21 @@ compile: true
5547
5589
  </tr>
5548
5590
  <tr>
5549
5591
  <td colspan="2">data</td>
5550
- <td>Array[{value, text, _html_}]</td>
5592
+ <td>Array[{value, text, html, child, disabled, actived}]</td>
5551
5593
  <td></td>
5552
- <td>메뉴 목록에 출력할 목록</td>
5594
+ <td>메뉴 목록에 출력할 목록<br/>- value: 메뉴 값<br/>- text: 메뉴 텍스트<br/>- html: HTML로 렌더링할 내용<br/>- child: 하위 메뉴 배열 (최대 2단계)<br/>- disabled: 비활성화 여부 (boolean)<br/>- actived: 활성화 상태 표시 여부</td>
5595
+ </tr>
5596
+ <tr>
5597
+ <td colspan="2">disabled</td>
5598
+ <td>boolean</td>
5599
+ <td>false</td>
5600
+ <td>버튼 비활성화 여부</td>
5553
5601
  </tr>
5554
5602
  <tr>
5555
5603
  <td colspan="2">onSelect</td>
5556
- <td>function(value, text)</td>
5604
+ <td>function(value, text, menu, e)</td>
5557
5605
  <td></td>
5558
- <td>메뉴 선택 시 수행될 이벤트</td>
5606
+ <td>메뉴 선택 시 수행될 이벤트<br/>- value: 선택된 메뉴의 값<br/>- text: 선택된 메뉴의 텍스트<br/>- menu: 선택된 메뉴 객체<br/>- e: MouseEvent 객체</td>
5559
5607
  </tr>
5560
5608
  </tbody>
5561
5609
  </table>
@@ -5574,6 +5622,21 @@ compile: true
5574
5622
  <td>void</td>
5575
5623
  <td>버튼명을 변경한다.</td>
5576
5624
  </tr>
5625
+ <tr>
5626
+ <td>reRender(data: Array)</td>
5627
+ <td>void</td>
5628
+ <td>메뉴 데이터를 전달받아 DOM을 다시 생성한다.</td>
5629
+ </tr>
5630
+ <tr>
5631
+ <td>disabled()</td>
5632
+ <td>void</td>
5633
+ <td>버튼을 비활성화한다.</td>
5634
+ </tr>
5635
+ <tr>
5636
+ <td>enabled()</td>
5637
+ <td>void</td>
5638
+ <td>버튼을 활성화한다.</td>
5639
+ </tr>
5577
5640
  </tbody>
5578
5641
  </table>
5579
5642
  */
@@ -5661,6 +5724,47 @@ compile: true
5661
5724
  color: #fff;
5662
5725
  background-color: #00b3af;
5663
5726
  }
5727
+ .gn-menuButton .menuButton-menu.is-disabled {
5728
+ pointer-events: none;
5729
+ opacity: 0.5;
5730
+ }
5731
+ .gn-menuButton .menuButton-menu.is-actived {
5732
+ background-color: hsl(0, 0%, 100%);
5733
+ }
5734
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-content {
5735
+ display: flex;
5736
+ align-items: center;
5737
+ justify-content: space-between;
5738
+ width: 100%;
5739
+ }
5740
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-arrow {
5741
+ margin-left: 10px;
5742
+ display: inline-flex;
5743
+ align-items: center;
5744
+ }
5745
+ .gn-menuButton .menuButton-menu .menuButton-submenu {
5746
+ display: none;
5747
+ position: absolute;
5748
+ left: 100%;
5749
+ top: 0;
5750
+ min-width: 150px;
5751
+ background-color: hsl(0, 0%, 100%);
5752
+ border: 1px solid hsl(0, 0%, 86%);
5753
+ border-radius: 2px;
5754
+ z-index: 21;
5755
+ padding: 0.35rem;
5756
+ }
5757
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu {
5758
+ color: hsl(0, 0%, 29%);
5759
+ cursor: pointer;
5760
+ }
5761
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu:hover {
5762
+ color: #fff;
5763
+ background-color: #00b3af;
5764
+ }
5765
+ .gn-menuButton .menuButton-menu:hover > .menuButton-submenu {
5766
+ display: block;
5767
+ }
5664
5768
  .gn-menuButton.is-white button {
5665
5769
  color: hsl(0, 0%, 100%);
5666
5770
  border-color: hsl(0, 0%, 100%);
@@ -9446,7 +9550,7 @@ tag:
9446
9550
  }
9447
9551
  .gn-select::after {
9448
9552
  content: "\f107";
9449
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9553
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9450
9554
  font-weight: 900;
9451
9555
  position: absolute;
9452
9556
  right: 0.5rem;
@@ -12608,9 +12712,13 @@ tag:
12608
12712
  ```ejs
12609
12713
  <div class="new-grid"></div>
12610
12714
 
12611
- <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12715
+ <div style="width: 100%; height: 100px; overflow-x: auto; margin-top: 20px;">
12612
12716
  <div class="new-grid2"></div>
12613
12717
  </div>
12718
+
12719
+ <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12720
+ <div class="new-grid3"></div>
12721
+ </div>
12614
12722
  ```
12615
12723
  ````
12616
12724
  Gn.create('datagrid', {
@@ -12723,19 +12831,122 @@ Gn.create('datagrid', {
12723
12831
  })
12724
12832
  Gn.create('datagrid', {
12725
12833
  target: '.new-grid2',
12834
+ headers: [
12835
+ {
12836
+ label: 'no',
12837
+ key: 'number',
12838
+ onSelect: function () {
12839
+ // eslint-disable-next-line prefer-rest-params
12840
+ console.log(arguments);
12841
+ },
12842
+ template: function (k, d) {
12843
+ return '<span>' + d[k] + '</span>';
12844
+ },
12845
+ draggable: true,
12846
+ sortable: true,
12847
+ sort: 'asc'
12848
+ },
12849
+ {
12850
+ label: '제목',
12851
+ key: 'title',
12852
+ style: {
12853
+ width: '250px'
12854
+ },
12855
+ className: 'has-text-right',
12856
+ draggable: true,
12857
+ bodyClass: 'has-text-left',
12858
+ sortable: true
12859
+ },
12860
+ {
12861
+ label: '날짜',
12862
+ key: 'date',
12863
+ style: {
12864
+ width: '150px'
12865
+ },
12866
+ className: 'has-text-center',
12867
+ bodyClass: 'has-text-left'
12868
+ }
12869
+ ],
12870
+ data: [
12871
+ {
12872
+ number: '1',
12873
+ title: '하나',
12874
+ date: '2020-09-19',
12875
+ desc: 'hello, world',
12876
+ child: [
12877
+ {
12878
+ number: '1-1',
12879
+ title: '1-하나',
12880
+ date: '2020-09-19'
12881
+ },
12882
+ {
12883
+ number: '1-2',
12884
+ title: '1-둘',
12885
+ date: '2020-09-19',
12886
+ desc: 'hello, world',
12887
+ child: [
12888
+ {
12889
+ number: '1-2-1',
12890
+ title: '1-둘-1',
12891
+ date: '2020-09-19',
12892
+ desc: 'hello, world',
12893
+ child: [
12894
+ {
12895
+ number: '1-2-1-1',
12896
+ title: '1-둘-1-1',
12897
+ desc: 'hello, world',
12898
+ date: '2020-09-19'
12899
+ }
12900
+ ]
12901
+ }
12902
+ ]
12903
+ }
12904
+ ],
12905
+ color: 'is-danger-light'
12906
+ },
12907
+ {
12908
+ number: '2',
12909
+ title: '둘',
12910
+ date: '2020-09-19',
12911
+ desc: 'hello, world'
12912
+ }
12913
+ ],
12914
+ hasHeader: false,
12915
+ hasCheck: true,
12916
+ hasDelete: true,
12917
+ textSets: {
12918
+ deleteConfirmMessage: '파일을 삭제하시겠습니까?'
12919
+ },
12920
+ // onDelete 에서 false 를 반환하면 해당 행 삭제를 취소할 수 있다.
12921
+ onDelete: (data, index) => {
12922
+ console.log(data, index);
12923
+ // 예) 특정 조건에 따라 삭제 취소
12924
+ // if (index === 0) {
12925
+ // return false;
12926
+ // }
12927
+ }
12928
+ })
12929
+ Gn.create('datagrid', {
12930
+ target: '.new-grid3',
12726
12931
  headers: [
12727
12932
  {
12728
12933
  label: 'row data numbers',
12729
12934
  key: 'number',
12730
12935
  style: { width: '50px' },
12731
12936
  sortable: true,
12732
- draggable: true
12937
+ draggable: true,
12938
+ template: function (k, d) {
12939
+ return '<span>' + d[k] + '</span>';
12940
+ }
12733
12941
  },
12734
12942
  {
12735
12943
  label: '제목',
12736
12944
  key: 'title',
12737
12945
  sortable: true,
12738
- draggable: true
12946
+ draggable: true,
12947
+ template: function (k, d) {
12948
+ return '<span>' + d[k] + '</span>';
12949
+ }
12739
12950
  },
12740
12951
  {
12741
12952
  label: '날짜를 표시하는 컬럼입니다',
@@ -12798,8 +13009,6 @@ Gn.create('datagrid', {
12798
13009
  paginator: {
12799
13010
  rows: 30
12800
13011
  },
12801
- hasDelete: true,
12802
- fixHeader: true,
12803
13012
  onChange: updatedData => {
12804
13013
  console.log(updatedData)
12805
13014
  }
@@ -12914,7 +13123,7 @@ Gn.create('datagrid', {
12914
13123
  <b>color:is-warning-light</b> => 행의 색 변경</td>
12915
13124
  </tr>
12916
13125
  <tr>
12917
- <td rowspan="3">textSets</td>
13126
+ <td rowspan="4">textSets</td>
12918
13127
  <td>noData</td>
12919
13128
  <td>string</td>
12920
13129
  <td>No records available.</td>
@@ -12932,6 +13141,12 @@ Gn.create('datagrid', {
12932
13141
  <td></td>
12933
13142
  <td>삭제버튼 헤더표시문구</td>
12934
13143
  </tr>
13144
+ <tr>
13145
+ <td>deleteConfirmMessage</td>
13146
+ <td>string</td>
13147
+ <td></td>
13148
+ <td>삭제 확인 창 표시문구 - 삭제 버튼 클릭시 확인 창 출력</td>
13149
+ </tr>
12935
13150
  <tr>
12936
13151
  <td colspan="2">childField</td>
12937
13152
  <td>string</td>
@@ -12956,6 +13171,12 @@ Gn.create('datagrid', {
12956
13171
  <td>false</td>
12957
13172
  <td>삭제버튼 생성 여부</td>
12958
13173
  </tr>
13174
+ <tr>
13175
+ <td colspan="2">hasHeader</td>
13176
+ <td>boolean</td>
13177
+ <td>true</td>
13178
+ <td>헤더 생성 여부</td>
13179
+ </tr>
12959
13180
  <tr>
12960
13181
  <td colspan="2">readonly</td>
12961
13182
  <td>boolean</td>
@@ -13053,6 +13274,12 @@ Gn.create('datagrid', {
13053
13274
  <td></td>
13054
13275
  <td>이동, 삭제 등의 데이터 변경이 있는 경우, 변경된 데이터를 가져오기 위한 이벤트핸들러</td>
13055
13276
  </tr>
13277
+ <tr>
13278
+ <td colspan="2">onDelete</td>
13279
+ <td>function(deletedData, index)</td>
13280
+ <td>deletedData, index 를 인자로 받으며, false 를 반환하면 해당 행 삭제를 취소한다.</td>
13281
+ <td>삭제 버튼 클릭 시 삭제 대상 데이터와 인덱스를 받을 수 있는 이벤트핸들러<br>onChange 보다 먼저 동작하며, onDelete 에서 false 를 반환하면 실제 삭제 및 onChange 호출이 수행되지 않는다.</td>
13282
+ </tr>
13056
13283
  </tbody>
13057
13284
  </table>
13058
13285
 
@@ -13238,11 +13465,11 @@ Gn.create('datagrid', {
13238
13465
  }
13239
13466
  .gn-datagrid .gn-datagrid-body-row .is-toggler::before {
13240
13467
  content: "\f0d7";
13241
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13468
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13242
13469
  font-weight: 700;
13243
13470
  }
13244
13471
  .gn-datagrid .gn-datagrid-body-row.has-child[data-depth="0"] .is-toggler {
13245
- margin-left: -3px;
13472
+ margin-left: -6px;
13246
13473
  }
13247
13474
  .gn-datagrid .gn-datagrid-body-row.is-collapsed .is-toggler::before {
13248
13475
  content: "\f0da";
@@ -13442,6 +13669,9 @@ Gn.create('datagrid', {
13442
13669
  .gn-datagrid.has-left-padding .gn-datagrid-body-row:not(.has-child)[data-depth="0"] .gn-datagrid-body-cell:first-child {
13443
13670
  padding-left: 15px;
13444
13671
  }
13672
+ .gn-datagrid.is-headless .gn-datagrid-body-row:first-child {
13673
+ border-top: 1px solid hsl(0, 0%, 86%);
13674
+ }
13445
13675
  .gn-datagrid .gn-datagrid-header-cell {
13446
13676
  border-right: 1px solid hsl(0, 0%, 86%);
13447
13677
  padding: 0.55rem;
@@ -17156,11 +17386,21 @@ tag:
17156
17386
  <div class="gn-loader is-info"></div>
17157
17387
  ```
17158
17388
 
17389
+ ```html
17390
+ <div class="gn-loader is-inline"></div>
17391
+ <div class="gn-loader is-inline is-success"></div>
17392
+ <div class="gn-loader is-inline is-warning"></div>
17393
+ <div class="gn-loader is-inline is-danger"></div>
17394
+ <div class="gn-loader is-inline is-info"></div>
17395
+ <div class="gn-loader is-inline is-primary"></div>
17396
+ ```
17397
+
17159
17398
  ### 타입
17160
17399
 
17161
17400
  ```html
17162
17401
  <div class="gn-loader is-bounce"></div><br>
17163
17402
  <div class="gn-loader is-move"></div>
17403
+ <div class="gn-loader is-inline"></div><br>
17164
17404
  ```
17165
17405
 
17166
17406
  ### 생성 옵션
@@ -17220,7 +17460,7 @@ Gn.create('button', {
17220
17460
  <td colspan="2">type</td>
17221
17461
  <td>string</td>
17222
17462
  <td></td>
17223
- <td>'bounce','move','circle'</td>
17463
+ <td>'inline','bounce','move','</td>
17224
17464
  </tr>
17225
17465
  <tr>
17226
17466
  <td colspan="2">positionX</td>
@@ -17329,6 +17569,7 @@ Gn.create('button', {
17329
17569
  .gn-loader.is-small {
17330
17570
  width: 15px;
17331
17571
  height: 15px;
17572
+ border-width: 5px;
17332
17573
  }
17333
17574
  .gn-loader.is-normal {
17334
17575
  width: 25px;
@@ -17414,6 +17655,82 @@ Gn.create('button', {
17414
17655
  border: 13px solid #00b3af;
17415
17656
  animation: move 1.5s ease-in-out infinite alternate;
17416
17657
  }
17658
+ .gn-loader.is-inline {
17659
+ border: 0;
17660
+ position: relative;
17661
+ margin-left: 10px;
17662
+ margin-right: 10px;
17663
+ animation-delay: -0.12s;
17664
+ background: hsl(0, 0%, 96%);
17665
+ }
17666
+ .gn-loader.is-inline, .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17667
+ display: inline-block !important;
17668
+ width: 3px;
17669
+ height: 3px;
17670
+ animation: colorPulse 1.4s ease-in-out infinite;
17671
+ border-radius: 50%;
17672
+ }
17673
+ .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17674
+ content: "";
17675
+ position: absolute;
17676
+ top: 0;
17677
+ }
17678
+ .gn-loader.is-inline::before {
17679
+ animation-delay: -0.24s;
17680
+ margin-left: -8px;
17681
+ }
17682
+ .gn-loader.is-inline::after {
17683
+ animation-delay: 0s;
17684
+ margin-left: 8px;
17685
+ }
17686
+ .gn-loader.is-inline.is-white, .gn-loader.is-inline.is-white::before, .gn-loader.is-inline.is-white::after {
17687
+ animation-name: colorPulse-white;
17688
+ }
17689
+ .gn-loader.is-inline.is-black, .gn-loader.is-inline.is-black::before, .gn-loader.is-inline.is-black::after {
17690
+ animation-name: colorPulse-black;
17691
+ }
17692
+ .gn-loader.is-inline.is-light, .gn-loader.is-inline.is-light::before, .gn-loader.is-inline.is-light::after {
17693
+ animation-name: colorPulse-light;
17694
+ }
17695
+ .gn-loader.is-inline.is-dark, .gn-loader.is-inline.is-dark::before, .gn-loader.is-inline.is-dark::after {
17696
+ animation-name: colorPulse-dark;
17697
+ }
17698
+ .gn-loader.is-inline.is-primary, .gn-loader.is-inline.is-primary::before, .gn-loader.is-inline.is-primary::after {
17699
+ animation-name: colorPulse-primary;
17700
+ }
17701
+ .gn-loader.is-inline.is-link, .gn-loader.is-inline.is-link::before, .gn-loader.is-inline.is-link::after {
17702
+ animation-name: colorPulse-link;
17703
+ }
17704
+ .gn-loader.is-inline.is-info, .gn-loader.is-inline.is-info::before, .gn-loader.is-inline.is-info::after {
17705
+ animation-name: colorPulse-info;
17706
+ }
17707
+ .gn-loader.is-inline.is-cancel, .gn-loader.is-inline.is-cancel::before, .gn-loader.is-inline.is-cancel::after {
17708
+ animation-name: colorPulse-cancel;
17709
+ }
17710
+ .gn-loader.is-inline.is-success, .gn-loader.is-inline.is-success::before, .gn-loader.is-inline.is-success::after {
17711
+ animation-name: colorPulse-success;
17712
+ }
17713
+ .gn-loader.is-inline.is-warning, .gn-loader.is-inline.is-warning::before, .gn-loader.is-inline.is-warning::after {
17714
+ animation-name: colorPulse-warning;
17715
+ }
17716
+ .gn-loader.is-inline.is-danger, .gn-loader.is-inline.is-danger::before, .gn-loader.is-inline.is-danger::after {
17717
+ animation-name: colorPulse-danger;
17718
+ }
17719
+ .gn-loader.is-inline.is-trans, .gn-loader.is-inline.is-trans::before, .gn-loader.is-inline.is-trans::after {
17720
+ animation-name: colorPulse-trans;
17721
+ }
17722
+ .gn-loader.is-inline.is-help, .gn-loader.is-inline.is-help::before, .gn-loader.is-inline.is-help::after {
17723
+ animation-name: colorPulse-help;
17724
+ }
17725
+ .gn-loader.is-inline.is-plain, .gn-loader.is-inline.is-plain::before, .gn-loader.is-inline.is-plain::after {
17726
+ animation-name: colorPulse-plain;
17727
+ }
17728
+ .gn-loader.is-inline.is-secondary, .gn-loader.is-inline.is-secondary::before, .gn-loader.is-inline.is-secondary::after {
17729
+ animation-name: colorPulse-secondary;
17730
+ }
17731
+ .gn-loader.is-inline.is-mono, .gn-loader.is-inline.is-mono::before, .gn-loader.is-inline.is-mono::after {
17732
+ animation-name: colorPulse-mono;
17733
+ }
17417
17734
 
17418
17735
  @keyframes load-spin {
17419
17736
  0% {
@@ -17442,56 +17759,260 @@ Gn.create('button', {
17442
17759
  transform: translateX(15px);
17443
17760
  }
17444
17761
  }
17445
- /*
17446
- ---
17447
- name: Message
17448
- category:
17449
- - COMPONENT/Message(js)
17450
- tag:
17451
- - v.0.1.0
17452
- - javascript
17453
- ---
17454
-
17455
-
17456
- ### 기본 메세지 알림
17457
- -Text with icon / Text only 선택 사용 할 수 있다.
17458
-
17459
- ```html
17460
- <div class="gn-message is-success has-arrange">
17461
- <span class="gn-icon is-normal">
17462
- <i class="fas fa-check"></i>
17463
- </span>
17464
- <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
17465
- </div>
17466
- <div class="gn-message is-warning has-arrange">
17467
- <span class="gn-icon is-normal">
17468
- <i class="fas fa-exclamation-circle"></i>
17469
- </span>
17470
- <p>Warning! There was a problem with your network connection.</p>
17471
- <span class="gn-icon is-close is-dark">
17472
- <i class="fas fa-times"></i>
17473
- </span>
17474
- </div>
17475
- <div class="gn-message is-danger has-arrange">
17476
- <span class="gn-icon is-normal">
17477
- <i class="fas fa-exclamation-triangle"></i>
17478
- </span>
17479
- <p>Error! A problem has been occurred while submitting your data.</p>
17480
- </div>
17481
- <div class="gn-message is-info has-arrange">
17482
- <span class="gn-icon is-normal">
17483
- <i class="fas fa-info-circle"></i>
17484
- </span>
17485
- <p>Info! Please read the comments carefully.</p>
17486
- <span class="gn-icon is-close is-dark">
17487
- <i class="fas fa-times"></i>
17488
- </span>
17489
- </div>
17490
- <div class="gn-message is-guide has-arrange">
17491
- <span class="gn-icon is-normal">
17492
- <i class="fas fa-info-circle"></i>
17493
- </span>
17494
- <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17762
+ @keyframes colorPulse {
17763
+ 0%, 70%, 100% {
17764
+ background: hsl(0, 0%, 96%);
17765
+ /* 비활성 색상 */
17766
+ transform: scale(1);
17767
+ }
17768
+ 35% {
17769
+ background: #00b3af;
17770
+ /* 활성 색상 */
17771
+ transform: scale(1.1);
17772
+ }
17773
+ }
17774
+ @keyframes colorPulse-white {
17775
+ 0%, 70%, 100% {
17776
+ background: hsl(0, 0%, 71%);
17777
+ /* 비활성 색상 */
17778
+ transform: scale(1);
17779
+ }
17780
+ 35% {
17781
+ background: hsl(0, 0%, 100%);
17782
+ /* 활성 색상 */
17783
+ transform: scale(1.1);
17784
+ }
17785
+ }
17786
+ @keyframes colorPulse-black {
17787
+ 0%, 70%, 100% {
17788
+ background: hsl(0, 0%, 86%);
17789
+ /* 비활성 색상 */
17790
+ transform: scale(1);
17791
+ }
17792
+ 35% {
17793
+ background: hsl(0, 0%, 4%);
17794
+ /* 활성 색상 */
17795
+ transform: scale(1.1);
17796
+ }
17797
+ }
17798
+ @keyframes colorPulse-light {
17799
+ 0%, 70%, 100% {
17800
+ background: hsl(0, 0%, 93%);
17801
+ /* 비활성 색상 */
17802
+ transform: scale(1);
17803
+ }
17804
+ 35% {
17805
+ background: hsl(0, 0%, 96%);
17806
+ /* 활성 색상 */
17807
+ transform: scale(1.1);
17808
+ }
17809
+ }
17810
+ @keyframes colorPulse-dark {
17811
+ 0%, 70%, 100% {
17812
+ background: hsl(0, 0%, 86%);
17813
+ /* 비활성 색상 */
17814
+ transform: scale(1);
17815
+ }
17816
+ 35% {
17817
+ background: hsl(0, 0%, 20%);
17818
+ /* 활성 색상 */
17819
+ transform: scale(1.1);
17820
+ }
17821
+ }
17822
+ @keyframes colorPulse-primary {
17823
+ 0%, 70%, 100% {
17824
+ background: rgb(234.6, 255, 254.5441340782);
17825
+ /* 비활성 색상 */
17826
+ transform: scale(1);
17827
+ }
17828
+ 35% {
17829
+ background: #00b3af;
17830
+ /* 활성 색상 */
17831
+ transform: scale(1.1);
17832
+ }
17833
+ }
17834
+ @keyframes colorPulse-link {
17835
+ 0%, 70%, 100% {
17836
+ background: hsl(217, 71%, 96%);
17837
+ /* 비활성 색상 */
17838
+ transform: scale(1);
17839
+ }
17840
+ 35% {
17841
+ background: hsl(217, 71%, 53%);
17842
+ /* 활성 색상 */
17843
+ transform: scale(1.1);
17844
+ }
17845
+ }
17846
+ @keyframes colorPulse-info {
17847
+ 0%, 70%, 100% {
17848
+ background: hsl(204, 71%, 96%);
17849
+ /* 비활성 색상 */
17850
+ transform: scale(1);
17851
+ }
17852
+ 35% {
17853
+ background: hsl(204, 71%, 53%);
17854
+ /* 활성 색상 */
17855
+ transform: scale(1.1);
17856
+ }
17857
+ }
17858
+ @keyframes colorPulse-cancel {
17859
+ 0%, 70%, 100% {
17860
+ background: hsl(0, 0%, 96%);
17861
+ /* 비활성 색상 */
17862
+ transform: scale(1);
17863
+ }
17864
+ 35% {
17865
+ background: hsl(0, 0%, 71%);
17866
+ /* 활성 색상 */
17867
+ transform: scale(1.1);
17868
+ }
17869
+ }
17870
+ @keyframes colorPulse-success {
17871
+ 0%, 70%, 100% {
17872
+ background: hsl(141, 53%, 96%);
17873
+ /* 비활성 색상 */
17874
+ transform: scale(1);
17875
+ }
17876
+ 35% {
17877
+ background: hsl(141, 53%, 53%);
17878
+ /* 활성 색상 */
17879
+ transform: scale(1.1);
17880
+ }
17881
+ }
17882
+ @keyframes colorPulse-warning {
17883
+ 0%, 70%, 100% {
17884
+ background: hsl(38, 100%, 96%);
17885
+ /* 비활성 색상 */
17886
+ transform: scale(1);
17887
+ }
17888
+ 35% {
17889
+ background: hsl(38, 100%, 50%);
17890
+ /* 활성 색상 */
17891
+ transform: scale(1.1);
17892
+ }
17893
+ }
17894
+ @keyframes colorPulse-danger {
17895
+ 0%, 70%, 100% {
17896
+ background: hsl(348, 86%, 96%);
17897
+ /* 비활성 색상 */
17898
+ transform: scale(1);
17899
+ }
17900
+ 35% {
17901
+ background: hsl(348, 86%, 61%);
17902
+ /* 활성 색상 */
17903
+ transform: scale(1.1);
17904
+ }
17905
+ }
17906
+ @keyframes colorPulse-trans {
17907
+ 0%, 70%, 100% {
17908
+ background: hsl(0, 0%, 100%);
17909
+ /* 비활성 색상 */
17910
+ transform: scale(1);
17911
+ }
17912
+ 35% {
17913
+ background: hsl(0, 0%, 100%);
17914
+ /* 활성 색상 */
17915
+ transform: scale(1.1);
17916
+ }
17917
+ }
17918
+ @keyframes colorPulse-help {
17919
+ 0%, 70%, 100% {
17920
+ background: hsl(203, 96%, 96%);
17921
+ /* 비활성 색상 */
17922
+ transform: scale(1);
17923
+ }
17924
+ 35% {
17925
+ background: hsl(203, 96%, 43%);
17926
+ /* 활성 색상 */
17927
+ transform: scale(1.1);
17928
+ }
17929
+ }
17930
+ @keyframes colorPulse-plain {
17931
+ 0%, 70%, 100% {
17932
+ background: hsl(171, 100%, 29%);
17933
+ /* 비활성 색상 */
17934
+ transform: scale(1);
17935
+ }
17936
+ 35% {
17937
+ background: #fff;
17938
+ /* 활성 색상 */
17939
+ transform: scale(1.1);
17940
+ }
17941
+ }
17942
+ @keyframes colorPulse-secondary {
17943
+ 0%, 70%, 100% {
17944
+ background: rgb(238.641509434, 244.1264150943, 250.958490566);
17945
+ /* 비활성 색상 */
17946
+ transform: scale(1);
17947
+ }
17948
+ 35% {
17949
+ background: #2a63aa;
17950
+ /* 활성 색상 */
17951
+ transform: scale(1.1);
17952
+ }
17953
+ }
17954
+ @keyframes colorPulse-mono {
17955
+ 0%, 70%, 100% {
17956
+ background: rgb(244.8, 244.8, 244.8);
17957
+ /* 비활성 색상 */
17958
+ transform: scale(1);
17959
+ }
17960
+ 35% {
17961
+ background: #656565;
17962
+ /* 활성 색상 */
17963
+ transform: scale(1.1);
17964
+ }
17965
+ }
17966
+ /*
17967
+ ---
17968
+ name: Message
17969
+ category:
17970
+ - COMPONENT/Message(js)
17971
+ tag:
17972
+ - v.0.1.0
17973
+ - javascript
17974
+ ---
17975
+
17976
+
17977
+ ### 기본 메세지 알림
17978
+ -Text with icon / Text only 선택 사용 할 수 있다.
17979
+
17980
+ ```html
17981
+ <div class="gn-message is-success has-arrange">
17982
+ <span class="gn-icon is-normal">
17983
+ <i class="fas fa-check"></i>
17984
+ </span>
17985
+ <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
17986
+ </div>
17987
+ <div class="gn-message is-warning has-arrange">
17988
+ <span class="gn-icon is-normal">
17989
+ <i class="fas fa-exclamation-circle"></i>
17990
+ </span>
17991
+ <p>Warning! There was a problem with your network connection.</p>
17992
+ <span class="gn-icon is-close is-dark">
17993
+ <i class="fas fa-times"></i>
17994
+ </span>
17995
+ </div>
17996
+ <div class="gn-message is-danger has-arrange">
17997
+ <span class="gn-icon is-normal">
17998
+ <i class="fas fa-exclamation-triangle"></i>
17999
+ </span>
18000
+ <p>Error! A problem has been occurred while submitting your data.</p>
18001
+ </div>
18002
+ <div class="gn-message is-info has-arrange">
18003
+ <span class="gn-icon is-normal">
18004
+ <i class="fas fa-info-circle"></i>
18005
+ </span>
18006
+ <p>Info! Please read the comments carefully.</p>
18007
+ <span class="gn-icon is-close is-dark">
18008
+ <i class="fas fa-times"></i>
18009
+ </span>
18010
+ </div>
18011
+ <div class="gn-message is-guide has-arrange">
18012
+ <span class="gn-icon is-normal">
18013
+ <i class="fas fa-info-circle"></i>
18014
+ </span>
18015
+ <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17495
18016
  </div>
17496
18017
 
17497
18018
  ```
@@ -19010,22 +19531,26 @@ tag:
19010
19531
  ```
19011
19532
  ````
19012
19533
  Gn.create('picklist', {
19013
- target: '.new-picklist',
19014
- data : {
19534
+ target: '.new-picklist',
19535
+ data: {
19015
19536
  source: [
19016
- { value: 'item1', text: '항목1' },
19017
- { value: 'item2', text: '항목2' },
19018
- { value: 'item5', text: '항목3' },
19019
- { value: 'item4', text: '항목4' },
19020
- { value: 'item5', text: '항목5' },
19021
- { value: 'item6', text: '항목6' },
19022
- { value: 'item7', text: '항목7' },
19023
- { value: 'item8', text: '항목8' }
19537
+ { value: '항목1', text: 'item1', html: '<span class="gn-tag is-primary">항목1</span> item1' },
19538
+ { value: '항목2', text: 'item2', html: '<span class="gn-tag is-danger">항목2</span> item2' },
19539
+ { value: '항목3', text: 'item3', html: '<span class="gn-tag is-warning">항목3</span> item3' }
19024
19540
  ],
19025
- target: [],
19541
+ target: [
19542
+ { value: '항목4', text: 'item4', html: '<span class="gn-tag is-help">항목4</span> item4' },
19543
+ { value: '항목5', text: 'item5', html: '<span class="gn-tag is-success">항목5</span> item5' }
19544
+ ]
19026
19545
  },
19546
+ hasSourceSearch: true,
19547
+ hasTargetSearch: true,
19027
19548
  width: '80%',
19028
- height: 180
19549
+ height: 180,
19550
+ onChange: function (s, t) {
19551
+ console.log(s, t);
19552
+ },
19553
+ orderable: 'target'
19029
19554
  });
19030
19555
  Gn.create('picklist', {
19031
19556
  target: '.new-picklist-v',
@@ -19062,15 +19587,21 @@ tag:
19062
19587
  <tr>
19063
19588
  <td rowspan="2">data</td>
19064
19589
  <td>source</td>
19065
- <td>array[{value: string|array, text: string}]</td>
19590
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19066
19591
  <td></td>
19067
- <td>source 항목 배열</td>
19592
+ <td>source 항목 배열<br>
19593
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19594
+ icon : <a href="https://fontawesome.com/cheatsheet?from=io" target="_blank">font awesome <span class="gn-icon is-small"><i class="fas fa-external-link-alt"></i></span></a> solid icon name
19595
+ </td>
19068
19596
  </tr>
19069
19597
  <tr>
19070
19598
  <td>target</td>
19071
- <td>array[{value: string|array, text: string}]</td>
19599
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19072
19600
  <td></td>
19073
- <td>target 항목 배열</td>
19601
+ <td>target 항목 배열<br>
19602
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19603
+ icon : <a href="https://fontawesome.com/cheatsheet?from=io" target="_blank">font awesome <span class="gn-icon is-small"><i class="fas fa-external-link-alt"></i></span></a> solid icon name
19604
+ </td>
19074
19605
  </tr>
19075
19606
  <tr>
19076
19607
  <td rowspan="3">textSets</td>
@@ -19224,23 +19755,17 @@ tag:
19224
19755
  .gn-picklist .picklist-caption + .dropdown-items {
19225
19756
  border-radius: 0 0 2px 2px;
19226
19757
  }
19227
- .gn-picklist .picklist-source {
19758
+ .gn-picklist .gn-dropdown {
19759
+ display: block;
19760
+ }
19761
+ .gn-picklist .picklist-source,
19762
+ .gn-picklist .picklist-target {
19228
19763
  display: flex;
19229
19764
  flex-basis: calc(50% - 16px);
19230
19765
  width: calc(50% - 16px);
19231
19766
  flex-grow: 0;
19232
19767
  flex-shrink: 0;
19233
19768
  }
19234
- .gn-picklist .picklist-source > .gn-dropdown {
19235
- order: 2;
19236
- width: 100%;
19237
- }
19238
- .gn-picklist .picklist-source .picklist-controls {
19239
- order: 1;
19240
- }
19241
- .gn-picklist .gn-dropdown {
19242
- display: block;
19243
- }
19244
19769
  .gn-picklist .picklist-source.no-controls,
19245
19770
  .gn-picklist .picklist-target.no-controls {
19246
19771
  flex-basis: calc(50% - 45px);
@@ -19251,23 +19776,22 @@ tag:
19251
19776
  width: 100%;
19252
19777
  height: 100%;
19253
19778
  }
19254
- .gn-picklist.is-vertical .picklist-source,
19255
- .gn-picklist .picklist-target {
19256
- display: flex;
19257
- flex-basis: calc(50% - 16px);
19258
- width: calc(50% - 16px);
19259
- flex-grow: 0;
19260
- flex-shrink: 0;
19261
- }
19262
- .gn-picklist.is-vertical .picklist-source > .gn-dropdown,
19779
+ .gn-picklist .picklist-source > .gn-dropdown,
19263
19780
  .gn-picklist .picklist-target > .gn-dropdown {
19264
19781
  order: 1;
19265
19782
  width: 100%;
19266
19783
  }
19267
- .gn-picklist.is-vertical .picklist-source .picklist-controls,
19784
+ .gn-picklist .picklist-source .picklist-controls,
19268
19785
  .gn-picklist .picklist-target .picklist-controls {
19269
19786
  order: 2;
19270
19787
  }
19788
+ .gn-picklist .picklist-source > .gn-dropdown {
19789
+ order: 2;
19790
+ width: 100%;
19791
+ }
19792
+ .gn-picklist .picklist-source .picklist-controls {
19793
+ order: 1;
19794
+ }
19271
19795
  .gn-picklist .picklist-controls {
19272
19796
  margin: 0.5rem;
19273
19797
  }
@@ -19277,6 +19801,16 @@ tag:
19277
19801
  .gn-picklist.is-vertical {
19278
19802
  flex-direction: column;
19279
19803
  }
19804
+ .gn-picklist.is-vertical .picklist-source,
19805
+ .gn-picklist.is-vertical .picklist-target {
19806
+ width: calc(100% - 32px);
19807
+ }
19808
+ .gn-picklist.is-vertical .picklist-source > .gn-dropdown {
19809
+ order: 1;
19810
+ }
19811
+ .gn-picklist.is-vertical .picklist-source .picklist-controls {
19812
+ order: 2;
19813
+ }
19280
19814
  .gn-picklist.is-vertical > .picklist-controls {
19281
19815
  width: 90%;
19282
19816
  width: calc(100% - 50px);
@@ -19287,6 +19821,382 @@ tag:
19287
19821
  box-shadow: 0 0 0 0.1em rgba(241.077, 70.023, 104.2338, 0.7);
19288
19822
  }
19289
19823
 
19824
+ /*
19825
+ ---
19826
+ name: SortableList
19827
+ category:
19828
+ - CONTROLS/SortableList(js)
19829
+ tag:
19830
+ - v.0.1.0
19831
+ - javascript
19832
+ ---
19833
+ ### 기본 사용
19834
+
19835
+ ```html
19836
+ <div class="gn-sortablelist">
19837
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center">
19838
+ <button type="button" class="gn-button is-outline">
19839
+ <span class="gn-icon">
19840
+ <i class="fas fa-angle-double-up"></i>
19841
+ </span>
19842
+ </button>
19843
+ <button type="button" class="gn-button is-outline">
19844
+ <span class="gn-icon">
19845
+ <i class="fas fa-angle-up"></i>
19846
+ </span>
19847
+ </button>
19848
+ <button type="button" class="gn-button is-outline">
19849
+ <span class="gn-icon">
19850
+ <i class="fas fa-angle-down"></i>
19851
+ </span>
19852
+ </button>
19853
+ <button type="button" class="gn-button is-outline">
19854
+ <span class="gn-icon">
19855
+ <i class="fas fa-angle-double-down"></i>
19856
+ </span>
19857
+ </button>
19858
+ </div>
19859
+ <div class="gn-dropdown is-opened sortablelist-items">
19860
+ <div class="dropdown-items">
19861
+ <ul class="sortablelist-rows">
19862
+ <li class="dropdown-item">항목 1</li>
19863
+ <li class="dropdown-item">항목 2</li>
19864
+ <li class="dropdown-item">항목 3</li>
19865
+ <li class="dropdown-item">항목 4</li>
19866
+ </ul>
19867
+ </div>
19868
+ </div>
19869
+ </div>
19870
+ ```
19871
+
19872
+ ### 버튼 우측 배치
19873
+
19874
+ ```html
19875
+ <div class="gn-sortablelist">
19876
+ <div class="gn-dropdown is-opened sortablelist-items">
19877
+ <div class="dropdown-items">
19878
+ <ul class="sortablelist-rows">
19879
+ <li class="dropdown-item">항목 1</li>
19880
+ <li class="dropdown-item">항목 2</li>
19881
+ <li class="dropdown-item">항목 3</li>
19882
+ </ul>
19883
+ </div>
19884
+ </div>
19885
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center is-right">
19886
+ <button type="button" class="gn-button is-outline">
19887
+ <span class="gn-icon">
19888
+ <i class="fas fa-angle-double-up"></i>
19889
+ </span>
19890
+ </button>
19891
+ <button type="button" class="gn-button is-outline">
19892
+ <span class="gn-icon">
19893
+ <i class="fas fa-angle-up"></i>
19894
+ </span>
19895
+ </button>
19896
+ <button type="button" class="gn-button is-outline">
19897
+ <span class="gn-icon">
19898
+ <i class="fas fa-angle-down"></i>
19899
+ </span>
19900
+ </button>
19901
+ <button type="button" class="gn-button is-outline">
19902
+ <span class="gn-icon">
19903
+ <i class="fas fa-angle-double-down"></i>
19904
+ </span>
19905
+ </button>
19906
+ </div>
19907
+ </div>
19908
+ ```
19909
+
19910
+ ### 생성 옵션
19911
+ ```ejs
19912
+ <div class="new-sortablelist"></div>
19913
+ <div class="new-sortablelist-drag"></div>
19914
+ <div class="new-sortablelist-cols"></div>
19915
+ ```
19916
+ ````
19917
+ // 단일 컬럼
19918
+ Gn.create('sortablelist', {
19919
+ target: '.new-sortablelist',
19920
+ data: [
19921
+ { value: '1', text: '항목 1' },
19922
+ { value: '2', text: '항목 2' },
19923
+ { value: '3', text: '항목 3' },
19924
+ { value: '4', text: '항목 4' },
19925
+ { value: '5', text: '항목 5' },
19926
+ { value: '6', text: '항목 6' },
19927
+ { value: '7', text: '항목 7' },
19928
+ { value: '8', text: '항목 8' },
19929
+ { value: '9', text: '항목 9' },
19930
+ { value: '10', text: '항목 10' }
19931
+ ]
19932
+ });
19933
+ // 드래그 앤 드롭
19934
+ Gn.create('sortablelist', {
19935
+ target: '.new-sortablelist-drag',
19936
+ data: [
19937
+ { value: 'a', text: '항목 A' },
19938
+ { value: 'b', text: '항목 B' },
19939
+ { value: 'c', text: '항목 C' },
19940
+ { value: 'd', text: '항목 D' },
19941
+ { value: 'e', text: '항목 E' },
19942
+ { value: 'f', text: '항목 F' },
19943
+ { value: 'g', text: '항목 G' },
19944
+ { value: 'h', text: '항목 H' },
19945
+ { value: 'i', text: '항목 I' },
19946
+ { value: 'j', text: '항목 J' }
19947
+ ],
19948
+ draggable: true
19949
+ });
19950
+ // 다중 컬럼
19951
+ Gn.create('sortablelist', {
19952
+ target: '.new-sortablelist-cols',
19953
+ buttonPosition: 'right',
19954
+ data: [
19955
+ { value: 'x1', cols: ['항목1', '카테고리A', '1000'] },
19956
+ { value: 'x2', cols: ['항목2', '카테고리B', '2000'] },
19957
+ { value: 'x3', cols: ['항목3', '카테고리C', '3000'] },
19958
+ { value: 'x4', cols: ['항목4', '카테고리D', '4000'] },
19959
+ { value: 'x5', cols: ['항목5', '카테고리E', '5000'] },
19960
+ { value: 'x6', cols: ['항목6', '카테고리F', '6000'] },
19961
+ { value: 'x7', cols: ['항목7', '카테고리G', '7000'] },
19962
+ { value: 'x8', cols: ['항목8', '카테고리H', '8000'] },
19963
+ { value: 'x9', cols: ['항목9', '카테고리I', '9000'] },
19964
+ { value: 'x10', cols: ['항목10', '카테고리J', '10000'] }
19965
+ ]
19966
+ });
19967
+ ````
19968
+
19969
+ ### 데이터 모델 (SortableListItem)
19970
+
19971
+ <table class="gn-table is-full is-border">
19972
+ <thead>
19973
+ <th>필드</th>
19974
+ <th>type</th>
19975
+ <th>필수</th>
19976
+ <th>description</th>
19977
+ </thead>
19978
+ <tbody>
19979
+ <tr>
19980
+ <td>value</td>
19981
+ <td>string</td>
19982
+ <td>Y</td>
19983
+ <td>고유 값 (빈 문자열 불가)</td>
19984
+ </tr>
19985
+ <tr>
19986
+ <td>text</td>
19987
+ <td>string</td>
19988
+ <td>N</td>
19989
+ <td>단일 컬럼 표시 텍스트</td>
19990
+ </tr>
19991
+ <tr>
19992
+ <td>cols</td>
19993
+ <td>string[]</td>
19994
+ <td>N</td>
19995
+ <td>다중 컬럼 표시 값 배열</td>
19996
+ </tr>
19997
+ </tbody>
19998
+ </table>
19999
+
20000
+ ### 옵션
20001
+ <table class="gn-table is-full is-border">
20002
+ <thead>
20003
+ <th colspan="2">name</th>
20004
+ <th>type</th>
20005
+ <th>default</th>
20006
+ <th>description</th>
20007
+ </thead>
20008
+ <tbody>
20009
+ <tr>
20010
+ <td colspan="2">target</td>
20011
+ <td>string</td>
20012
+ <td></td>
20013
+ <td>sortablelist를 표시할 대상의 선택자(selector)</td>
20014
+ </tr>
20015
+ <tr>
20016
+ <td colspan="2">data</td>
20017
+ <td>SortableListItem[]</td>
20018
+ <td></td>
20019
+ <td>sortablelist에 표시할 데이터 배열</td>
20020
+ </tr>
20021
+ <tr>
20022
+ <td colspan="2">buttonPosition</td>
20023
+ <td>left | right</td>
20024
+ <td>left</td>
20025
+ <td>순서 변경 버튼 위치</td>
20026
+ </tr>
20027
+ <tr>
20028
+ <td colspan="2">draggable</td>
20029
+ <td>boolean</td>
20030
+ <td>false</td>
20031
+ <td>드래그 앤 드롭 순서 변경 활성화 여부</td>
20032
+ </tr>
20033
+ <tr>
20034
+ <td>textSets</td>
20035
+ <td>noData</td>
20036
+ <td>string</td>
20037
+ <td>No records available.</td>
20038
+ <td>데이터가 없을 경우 출력 메시지</td>
20039
+ </tr>
20040
+ <tr>
20041
+ <td colspan="2">disabled</td>
20042
+ <td>boolean</td>
20043
+ <td>false</td>
20044
+ <td>컴포넌트 비활성화 여부</td>
20045
+ </tr>
20046
+ <tr>
20047
+ <td colspan="2">width</td>
20048
+ <td>number, string</td>
20049
+ <td>100%</td>
20050
+ <td>컴포넌트 너비</td>
20051
+ </tr>
20052
+ <tr>
20053
+ <td colspan="2">height</td>
20054
+ <td>number, string</td>
20055
+ <td>150</td>
20056
+ <td>리스트 높이 (미지정 시 150)</td>
20057
+ </tr>
20058
+ <tr>
20059
+ <td colspan="2">onChange</td>
20060
+ <td>function(data)</td>
20061
+ <td></td>
20062
+ <td>데이터 변경 시 발생 이벤트</td>
20063
+ </tr>
20064
+ </tbody>
20065
+ </table>
20066
+
20067
+ ### 메소드
20068
+
20069
+ <table class="gn-table is-full is-border">
20070
+ <thead>
20071
+ <th>name</th>
20072
+ <th>return</th>
20073
+ <th>description</th>
20074
+ </thead>
20075
+ <tbody>
20076
+ <tr>
20077
+ <td>getData()</td>
20078
+ <td>SortableListItem[]</td>
20079
+ <td>현재 데이터 배열을 반환한다.</td>
20080
+ </tr>
20081
+ <tr>
20082
+ <td>setData(data: SortableListItem[]})</td>
20083
+ <td>void</td>
20084
+ <td>데이터 배열을 설정하고 다시 렌더링한다.</td>
20085
+ </tr>
20086
+ <tr>
20087
+ <td>disable()</td>
20088
+ <td>void</td>
20089
+ <td>컴포넌트를 비활성화한다.</td>
20090
+ </tr>
20091
+ <tr>
20092
+ <td>enable()</td>
20093
+ <td>void</td>
20094
+ <td>컴포넌트를 활성화한다.</td>
20095
+ </tr>
20096
+ </tbody>
20097
+ </table>
20098
+
20099
+ */
20100
+ .gn-sortablelist {
20101
+ display: flex;
20102
+ align-items: stretch;
20103
+ -webkit-user-select: none;
20104
+ -moz-user-select: none;
20105
+ user-select: none;
20106
+ }
20107
+ .gn-sortablelist .gn-dropdown {
20108
+ display: block;
20109
+ }
20110
+ .gn-sortablelist .sortablelist-items {
20111
+ flex: 1 1 auto;
20112
+ }
20113
+ .gn-sortablelist .sortablelist-controls {
20114
+ margin: 0.5rem;
20115
+ }
20116
+ .gn-sortablelist .sortablelist-controls .gn-button {
20117
+ padding: 0.25rem 0.75rem;
20118
+ }
20119
+ .gn-sortablelist .sortablelist-controls.is-right {
20120
+ order: 2;
20121
+ margin-left: 0.5rem;
20122
+ margin-right: 0;
20123
+ justify-content: center;
20124
+ }
20125
+ .gn-sortablelist .sortablelist-rows {
20126
+ margin: 0;
20127
+ padding: 0;
20128
+ list-style: none;
20129
+ }
20130
+ .gn-sortablelist .sortablelist-cols {
20131
+ display: flex;
20132
+ gap: 0.5rem;
20133
+ width: 100%;
20134
+ }
20135
+ .gn-sortablelist .sortablelist-col {
20136
+ flex: 1 1 0;
20137
+ min-width: 0;
20138
+ }
20139
+ .gn-sortablelist .dropdown-item.is-empty {
20140
+ color: hsl(0, 0%, 48%);
20141
+ }
20142
+ .gn-sortablelist .dropdown-item.is-dragging {
20143
+ opacity: 0.6;
20144
+ }
20145
+ .gn-sortablelist .dropdown-item.is-group-dragging {
20146
+ outline: 1px dashed hsl(0, 0%, 71%);
20147
+ }
20148
+ .gn-sortablelist .dropdown-item.is-drag-over-top,
20149
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20150
+ background-color: hsl(0, 0%, 96%);
20151
+ }
20152
+ .gn-sortablelist .dropdown-item.is-drag-over-top {
20153
+ box-shadow: inset 0 2px 0 0 #00b3af;
20154
+ }
20155
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20156
+ box-shadow: inset 0 -2px 0 0 #00b3af;
20157
+ }
20158
+
20159
+ .sortablelist-drag-preview {
20160
+ position: absolute;
20161
+ top: -9999px;
20162
+ left: -9999px;
20163
+ display: inline-flex;
20164
+ align-items: flex-start;
20165
+ gap: 8px;
20166
+ padding: 6px 10px;
20167
+ border-radius: 8px;
20168
+ background-color: hsl(0, 0%, 20%);
20169
+ color: hsl(0, 0%, 98%);
20170
+ font-size: 12px;
20171
+ line-height: 1;
20172
+ }
20173
+
20174
+ .sortablelist-drag-preview::before {
20175
+ content: attr(data-count);
20176
+ min-width: 18px;
20177
+ height: 18px;
20178
+ padding: 0 6px;
20179
+ border-radius: 999px;
20180
+ background-color: hsl(0, 0%, 98%);
20181
+ color: hsl(0, 0%, 20%);
20182
+ font-size: 11px;
20183
+ line-height: 18px;
20184
+ text-align: center;
20185
+ }
20186
+
20187
+ .sortablelist-drag-preview-list {
20188
+ display: flex;
20189
+ flex-direction: column;
20190
+ gap: 4px;
20191
+ }
20192
+
20193
+ .sortablelist-drag-preview .dropdown-item.is-ghost {
20194
+ padding: 4px 8px;
20195
+ background-color: hsl(0, 0%, 18%);
20196
+ border-radius: 4px;
20197
+ color: hsl(0, 0%, 98%);
20198
+ }
20199
+
19290
20200
  /*
19291
20201
  ---
19292
20202
  name: Progressbar
@@ -19866,6 +20776,7 @@ tag:
19866
20776
  .gn-tab > ul {
19867
20777
  display: flex;
19868
20778
  border-bottom: 1px solid hsl(0, 0%, 86%);
20779
+ padding-bottom: 0px;
19869
20780
  }
19870
20781
  .gn-tab.is-center > ul {
19871
20782
  justify-content: center;
@@ -21015,7 +21926,7 @@ Gn.create('tree', {
21015
21926
  }
21016
21927
  .gn-tree li .tree-item .is-toggler::before {
21017
21928
  content: "\f0da";
21018
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21929
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21019
21930
  font-weight: 900;
21020
21931
  }
21021
21932
  .gn-tree li .tree-item + ul {