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