gnui 1.2.16 → 1.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/js/gnui.esm.js +772 -111
  2. package/dist/js/gnui.js +772 -111
  3. package/dist/js/gnui.min.js +6 -6
  4. package/dist/styles/default.css +1018 -108
  5. package/dist/styles/gpi.css +1018 -108
  6. package/dist/styles/green24.css +1229 -289
  7. package/dist/styles/insights.css +1018 -108
  8. package/dist/styles/nac.css +1019 -109
  9. package/dist/styles/ztnac.css +1205 -265
  10. package/package.json +2 -2
  11. package/styleguide/assets/components.js +216 -9
  12. package/styleguide/assets/js/gnui.js +772 -111
  13. package/styleguide/assets/js/gnui.min.js +6 -6
  14. package/styleguide/assets/styles/default.css +1018 -108
  15. package/styleguide/assets/styles/gpi.css +1018 -108
  16. package/styleguide/assets/styles/green24.css +1229 -289
  17. package/styleguide/assets/styles/insights.css +1018 -108
  18. package/styleguide/assets/styles/nac.css +1019 -109
  19. package/styleguide/assets/styles/ztnac.css +1205 -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
  }
@@ -2708,7 +2708,7 @@ tag:
2708
2708
  }
2709
2709
  .gn-icon-ext::before {
2710
2710
  content: "\f15b";
2711
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free";
2711
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
2712
2712
  font-weight: 300;
2713
2713
  font-size: 1.6rem;
2714
2714
  }
@@ -4217,10 +4217,6 @@ tag:
4217
4217
  display: block;
4218
4218
  word-break: break-word;
4219
4219
  }
4220
- .gn-title:not(:last-child),
4221
- .gn-sub-title:not(:last-child) {
4222
- margin-bottom: 1rem;
4223
- }
4224
4220
 
4225
4221
  .gn-title {
4226
4222
  color: #535353;
@@ -5490,6 +5486,7 @@ compile: true
5490
5486
  ```ejs
5491
5487
  <button name="new-button"></button>
5492
5488
  <button name="new-button2"></button>
5489
+ <button name="new-button-submenu">편집 메뉴</button>
5493
5490
  ```
5494
5491
 
5495
5492
  ````
@@ -5529,6 +5526,51 @@ compile: true
5529
5526
  value: 'menu2'
5530
5527
  }]
5531
5528
  });
5529
+ // 서브메뉴 예시
5530
+ Gn.create('menubutton', {
5531
+ target: 'button[name=new-button-submenu]',
5532
+ size: 'normal',
5533
+ textSets: {
5534
+ buttonText: '편집 메뉴'
5535
+ },
5536
+ onSelect: function (value, text, menu, e) {
5537
+ console.log('선택된 메뉴:', { value: value, text: text, menu: menu });
5538
+ },
5539
+ data: [
5540
+ {
5541
+ text: '파일',
5542
+ value: 'file',
5543
+ child: [
5544
+ { text: '새 파일', value: 'file-new' },
5545
+ { text: '열기', value: 'file-open' },
5546
+ {
5547
+ text: '최근 파일',
5548
+ value: 'file-recent',
5549
+ child: [
5550
+ { text: 'document.txt', value: 'file-recent-1' },
5551
+ { text: 'image.png', value: 'file-recent-2' }
5552
+ ]
5553
+ },
5554
+ { text: '저장', value: 'file-save', disabled: true },
5555
+ { text: '다른 이름으로 저장', value: 'file-saveas' }
5556
+ ]
5557
+ },
5558
+ {
5559
+ text: '편집',
5560
+ value: 'edit',
5561
+ actived: true,
5562
+ child: [
5563
+ { text: '실행 취소', value: 'edit-undo' },
5564
+ { text: '다시 실행', value: 'edit-redo' }
5565
+ ]
5566
+ },
5567
+ {
5568
+ text: '도움말',
5569
+ value: 'help',
5570
+ disabled: true
5571
+ }
5572
+ ]
5573
+ });
5532
5574
  ````
5533
5575
 
5534
5576
 
@@ -5585,15 +5627,21 @@ compile: true
5585
5627
  </tr>
5586
5628
  <tr>
5587
5629
  <td colspan="2">data</td>
5588
- <td>Array[{value, text, _html_}]</td>
5630
+ <td>Array[{value, text, html, child, disabled, actived}]</td>
5589
5631
  <td></td>
5590
- <td>메뉴 목록에 출력할 목록</td>
5632
+ <td>메뉴 목록에 출력할 목록<br/>- value: 메뉴 값<br/>- text: 메뉴 텍스트<br/>- html: HTML로 렌더링할 내용<br/>- child: 하위 메뉴 배열 (최대 2단계)<br/>- disabled: 비활성화 여부 (boolean)<br/>- actived: 활성화 상태 표시 여부</td>
5633
+ </tr>
5634
+ <tr>
5635
+ <td colspan="2">disabled</td>
5636
+ <td>boolean</td>
5637
+ <td>false</td>
5638
+ <td>버튼 비활성화 여부</td>
5591
5639
  </tr>
5592
5640
  <tr>
5593
5641
  <td colspan="2">onSelect</td>
5594
- <td>function(value, text)</td>
5642
+ <td>function(value, text, menu, e)</td>
5595
5643
  <td></td>
5596
- <td>메뉴 선택 시 수행될 이벤트</td>
5644
+ <td>메뉴 선택 시 수행될 이벤트<br/>- value: 선택된 메뉴의 값<br/>- text: 선택된 메뉴의 텍스트<br/>- menu: 선택된 메뉴 객체<br/>- e: MouseEvent 객체</td>
5597
5645
  </tr>
5598
5646
  </tbody>
5599
5647
  </table>
@@ -5612,6 +5660,21 @@ compile: true
5612
5660
  <td>void</td>
5613
5661
  <td>버튼명을 변경한다.</td>
5614
5662
  </tr>
5663
+ <tr>
5664
+ <td>reRender(data: Array)</td>
5665
+ <td>void</td>
5666
+ <td>메뉴 데이터를 전달받아 DOM을 다시 생성한다.</td>
5667
+ </tr>
5668
+ <tr>
5669
+ <td>disabled()</td>
5670
+ <td>void</td>
5671
+ <td>버튼을 비활성화한다.</td>
5672
+ </tr>
5673
+ <tr>
5674
+ <td>enabled()</td>
5675
+ <td>void</td>
5676
+ <td>버튼을 활성화한다.</td>
5677
+ </tr>
5615
5678
  </tbody>
5616
5679
  </table>
5617
5680
  */
@@ -5699,6 +5762,47 @@ compile: true
5699
5762
  color: #fff;
5700
5763
  background-color: #88b50f;
5701
5764
  }
5765
+ .gn-menuButton .menuButton-menu.is-disabled {
5766
+ pointer-events: none;
5767
+ opacity: 0.5;
5768
+ }
5769
+ .gn-menuButton .menuButton-menu.is-actived {
5770
+ background-color: hsl(0, 0%, 100%);
5771
+ }
5772
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-content {
5773
+ display: flex;
5774
+ align-items: center;
5775
+ justify-content: space-between;
5776
+ width: 100%;
5777
+ }
5778
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-arrow {
5779
+ margin-left: 10px;
5780
+ display: inline-flex;
5781
+ align-items: center;
5782
+ }
5783
+ .gn-menuButton .menuButton-menu .menuButton-submenu {
5784
+ display: none;
5785
+ position: absolute;
5786
+ left: 100%;
5787
+ top: 0;
5788
+ min-width: 150px;
5789
+ background-color: hsl(0, 0%, 100%);
5790
+ border: 1px solid #bebebe;
5791
+ border-radius: 2px;
5792
+ z-index: 21;
5793
+ padding: 0.35rem;
5794
+ }
5795
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu {
5796
+ color: hsl(0, 0%, 29%);
5797
+ cursor: pointer;
5798
+ }
5799
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu:hover {
5800
+ color: #fff;
5801
+ background-color: #88b50f;
5802
+ }
5803
+ .gn-menuButton .menuButton-menu:hover > .menuButton-submenu {
5804
+ display: block;
5805
+ }
5702
5806
  .gn-menuButton.is-white button {
5703
5807
  color: hsl(0, 0%, 100%);
5704
5808
  border-color: hsl(0, 0%, 100%);
@@ -9484,7 +9588,7 @@ tag:
9484
9588
  }
9485
9589
  .gn-select::after {
9486
9590
  content: "\f107";
9487
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9591
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9488
9592
  font-weight: 900;
9489
9593
  position: absolute;
9490
9594
  right: 0.5rem;
@@ -12646,9 +12750,13 @@ tag:
12646
12750
  ```ejs
12647
12751
  <div class="new-grid"></div>
12648
12752
 
12649
- <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12753
+ <div style="width: 100%; height: 100px; overflow-x: auto; margin-top: 20px;">
12650
12754
  <div class="new-grid2"></div>
12651
12755
  </div>
12756
+
12757
+ <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12758
+ <div class="new-grid3"></div>
12759
+ </div>
12652
12760
  ```
12653
12761
  ````
12654
12762
  Gn.create('datagrid', {
@@ -12761,19 +12869,122 @@ Gn.create('datagrid', {
12761
12869
  })
12762
12870
  Gn.create('datagrid', {
12763
12871
  target: '.new-grid2',
12872
+ headers: [
12873
+ {
12874
+ label: 'no',
12875
+ key: 'number',
12876
+ onSelect: function () {
12877
+ // eslint-disable-next-line prefer-rest-params
12878
+ console.log(arguments);
12879
+ },
12880
+ template: function (k, d) {
12881
+ return '<span>' + d[k] + '</span>';
12882
+ },
12883
+ draggable: true,
12884
+ sortable: true,
12885
+ sort: 'asc'
12886
+ },
12887
+ {
12888
+ label: '제목',
12889
+ key: 'title',
12890
+ style: {
12891
+ width: '250px'
12892
+ },
12893
+ className: 'has-text-right',
12894
+ draggable: true,
12895
+ bodyClass: 'has-text-left',
12896
+ sortable: true
12897
+ },
12898
+ {
12899
+ label: '날짜',
12900
+ key: 'date',
12901
+ style: {
12902
+ width: '150px'
12903
+ },
12904
+ className: 'has-text-center',
12905
+ bodyClass: 'has-text-left'
12906
+ }
12907
+ ],
12908
+ data: [
12909
+ {
12910
+ number: '1',
12911
+ title: '하나',
12912
+ date: '2020-09-19',
12913
+ desc: 'hello, world',
12914
+ child: [
12915
+ {
12916
+ number: '1-1',
12917
+ title: '1-하나',
12918
+ date: '2020-09-19'
12919
+ },
12920
+ {
12921
+ number: '1-2',
12922
+ title: '1-둘',
12923
+ date: '2020-09-19',
12924
+ desc: 'hello, world',
12925
+ child: [
12926
+ {
12927
+ number: '1-2-1',
12928
+ title: '1-둘-1',
12929
+ date: '2020-09-19',
12930
+ desc: 'hello, world',
12931
+ child: [
12932
+ {
12933
+ number: '1-2-1-1',
12934
+ title: '1-둘-1-1',
12935
+ desc: 'hello, world',
12936
+ date: '2020-09-19'
12937
+ }
12938
+ ]
12939
+ }
12940
+ ]
12941
+ }
12942
+ ],
12943
+ color: 'is-danger-light'
12944
+ },
12945
+ {
12946
+ number: '2',
12947
+ title: '둘',
12948
+ date: '2020-09-19',
12949
+ desc: 'hello, world'
12950
+ }
12951
+ ],
12952
+ hasHeader: false,
12953
+ hasCheck: true,
12954
+ hasDelete: true,
12955
+ textSets: {
12956
+ deleteConfirmMessage: '파일을 삭제하시겠습니까?'
12957
+ },
12958
+ // onDelete 에서 false 를 반환하면 해당 행 삭제를 취소할 수 있다.
12959
+ onDelete: (data, index) => {
12960
+ console.log(data, index);
12961
+ // 예) 특정 조건에 따라 삭제 취소
12962
+ // if (index === 0) {
12963
+ // return false;
12964
+ // }
12965
+ }
12966
+ })
12967
+ Gn.create('datagrid', {
12968
+ target: '.new-grid3',
12764
12969
  headers: [
12765
12970
  {
12766
12971
  label: 'row data numbers',
12767
12972
  key: 'number',
12768
12973
  style: { width: '50px' },
12769
12974
  sortable: true,
12770
- draggable: true
12975
+ draggable: true,
12976
+ template: function (k, d) {
12977
+ return '<span>' + d[k] + '</span>';
12978
+ }
12771
12979
  },
12772
12980
  {
12773
12981
  label: '제목',
12774
12982
  key: 'title',
12775
12983
  sortable: true,
12776
- draggable: true
12984
+ draggable: true,
12985
+ template: function (k, d) {
12986
+ return '<span>' + d[k] + '</span>';
12987
+ }
12777
12988
  },
12778
12989
  {
12779
12990
  label: '날짜를 표시하는 컬럼입니다',
@@ -12836,8 +13047,6 @@ Gn.create('datagrid', {
12836
13047
  paginator: {
12837
13048
  rows: 30
12838
13049
  },
12839
- hasDelete: true,
12840
- fixHeader: true,
12841
13050
  onChange: updatedData => {
12842
13051
  console.log(updatedData)
12843
13052
  }
@@ -12952,7 +13161,7 @@ Gn.create('datagrid', {
12952
13161
  <b>color:is-warning-light</b> => 행의 색 변경</td>
12953
13162
  </tr>
12954
13163
  <tr>
12955
- <td rowspan="3">textSets</td>
13164
+ <td rowspan="4">textSets</td>
12956
13165
  <td>noData</td>
12957
13166
  <td>string</td>
12958
13167
  <td>No records available.</td>
@@ -12970,6 +13179,12 @@ Gn.create('datagrid', {
12970
13179
  <td></td>
12971
13180
  <td>삭제버튼 헤더표시문구</td>
12972
13181
  </tr>
13182
+ <tr>
13183
+ <td>deleteConfirmMessage</td>
13184
+ <td>string</td>
13185
+ <td></td>
13186
+ <td>삭제 확인 창 표시문구 - 삭제 버튼 클릭시 확인 창 출력</td>
13187
+ </tr>
12973
13188
  <tr>
12974
13189
  <td colspan="2">childField</td>
12975
13190
  <td>string</td>
@@ -12994,6 +13209,12 @@ Gn.create('datagrid', {
12994
13209
  <td>false</td>
12995
13210
  <td>삭제버튼 생성 여부</td>
12996
13211
  </tr>
13212
+ <tr>
13213
+ <td colspan="2">hasHeader</td>
13214
+ <td>boolean</td>
13215
+ <td>true</td>
13216
+ <td>헤더 생성 여부</td>
13217
+ </tr>
12997
13218
  <tr>
12998
13219
  <td colspan="2">readonly</td>
12999
13220
  <td>boolean</td>
@@ -13091,6 +13312,12 @@ Gn.create('datagrid', {
13091
13312
  <td></td>
13092
13313
  <td>이동, 삭제 등의 데이터 변경이 있는 경우, 변경된 데이터를 가져오기 위한 이벤트핸들러</td>
13093
13314
  </tr>
13315
+ <tr>
13316
+ <td colspan="2">onDelete</td>
13317
+ <td>function(deletedData, index)</td>
13318
+ <td>deletedData, index 를 인자로 받으며, false 를 반환하면 해당 행 삭제를 취소한다.</td>
13319
+ <td>삭제 버튼 클릭 시 삭제 대상 데이터와 인덱스를 받을 수 있는 이벤트핸들러<br>onChange 보다 먼저 동작하며, onDelete 에서 false 를 반환하면 실제 삭제 및 onChange 호출이 수행되지 않는다.</td>
13320
+ </tr>
13094
13321
  </tbody>
13095
13322
  </table>
13096
13323
 
@@ -13276,11 +13503,11 @@ Gn.create('datagrid', {
13276
13503
  }
13277
13504
  .gn-datagrid .gn-datagrid-body-row .is-toggler::before {
13278
13505
  content: "\f0d7";
13279
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13506
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13280
13507
  font-weight: 700;
13281
13508
  }
13282
13509
  .gn-datagrid .gn-datagrid-body-row.has-child[data-depth="0"] .is-toggler {
13283
- margin-left: -3px;
13510
+ margin-left: -6px;
13284
13511
  }
13285
13512
  .gn-datagrid .gn-datagrid-body-row.is-collapsed .is-toggler::before {
13286
13513
  content: "\f0da";
@@ -13480,6 +13707,9 @@ Gn.create('datagrid', {
13480
13707
  .gn-datagrid.has-left-padding .gn-datagrid-body-row:not(.has-child)[data-depth="0"] .gn-datagrid-body-cell:first-child {
13481
13708
  padding-left: 15px;
13482
13709
  }
13710
+ .gn-datagrid.is-headless .gn-datagrid-body-row:first-child {
13711
+ border-top: 1px solid #bebebe;
13712
+ }
13483
13713
  .gn-datagrid .gn-datagrid-header-cell {
13484
13714
  border-right: 1px solid #bebebe;
13485
13715
  padding: 0.55rem;
@@ -14860,7 +15090,6 @@ tag:
14860
15090
  }
14861
15091
  .gn-dropdown.is-open .dropdown-items {
14862
15092
  display: block;
14863
- max-width: 100%;
14864
15093
  }
14865
15094
  .gn-dropdown.is-top .dropdown-items {
14866
15095
  top: auto;
@@ -17195,11 +17424,21 @@ tag:
17195
17424
  <div class="gn-loader is-info"></div>
17196
17425
  ```
17197
17426
 
17427
+ ```html
17428
+ <div class="gn-loader is-inline"></div>
17429
+ <div class="gn-loader is-inline is-success"></div>
17430
+ <div class="gn-loader is-inline is-warning"></div>
17431
+ <div class="gn-loader is-inline is-danger"></div>
17432
+ <div class="gn-loader is-inline is-info"></div>
17433
+ <div class="gn-loader is-inline is-primary"></div>
17434
+ ```
17435
+
17198
17436
  ### 타입
17199
17437
 
17200
17438
  ```html
17201
17439
  <div class="gn-loader is-bounce"></div><br>
17202
17440
  <div class="gn-loader is-move"></div>
17441
+ <div class="gn-loader is-inline"></div><br>
17203
17442
  ```
17204
17443
 
17205
17444
  ### 생성 옵션
@@ -17259,7 +17498,7 @@ Gn.create('button', {
17259
17498
  <td colspan="2">type</td>
17260
17499
  <td>string</td>
17261
17500
  <td></td>
17262
- <td>'bounce','move','circle'</td>
17501
+ <td>'inline','bounce','move','</td>
17263
17502
  </tr>
17264
17503
  <tr>
17265
17504
  <td colspan="2">positionX</td>
@@ -17368,6 +17607,7 @@ Gn.create('button', {
17368
17607
  .gn-loader.is-small {
17369
17608
  width: 15px;
17370
17609
  height: 15px;
17610
+ border-width: 5px;
17371
17611
  }
17372
17612
  .gn-loader.is-normal {
17373
17613
  width: 25px;
@@ -17453,6 +17693,82 @@ Gn.create('button', {
17453
17693
  border: 13px solid #88b50f;
17454
17694
  animation: move 1.5s ease-in-out infinite alternate;
17455
17695
  }
17696
+ .gn-loader.is-inline {
17697
+ border: 0;
17698
+ position: relative;
17699
+ margin-left: 10px;
17700
+ margin-right: 10px;
17701
+ animation-delay: -0.12s;
17702
+ background: #e1e1e1;
17703
+ }
17704
+ .gn-loader.is-inline, .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17705
+ display: inline-block !important;
17706
+ width: 3px;
17707
+ height: 3px;
17708
+ animation: colorPulse 1.4s ease-in-out infinite;
17709
+ border-radius: 50%;
17710
+ }
17711
+ .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17712
+ content: "";
17713
+ position: absolute;
17714
+ top: 0;
17715
+ }
17716
+ .gn-loader.is-inline::before {
17717
+ animation-delay: -0.24s;
17718
+ margin-left: -8px;
17719
+ }
17720
+ .gn-loader.is-inline::after {
17721
+ animation-delay: 0s;
17722
+ margin-left: 8px;
17723
+ }
17724
+ .gn-loader.is-inline.is-white, .gn-loader.is-inline.is-white::before, .gn-loader.is-inline.is-white::after {
17725
+ animation-name: colorPulse-white;
17726
+ }
17727
+ .gn-loader.is-inline.is-black, .gn-loader.is-inline.is-black::before, .gn-loader.is-inline.is-black::after {
17728
+ animation-name: colorPulse-black;
17729
+ }
17730
+ .gn-loader.is-inline.is-light, .gn-loader.is-inline.is-light::before, .gn-loader.is-inline.is-light::after {
17731
+ animation-name: colorPulse-light;
17732
+ }
17733
+ .gn-loader.is-inline.is-dark, .gn-loader.is-inline.is-dark::before, .gn-loader.is-inline.is-dark::after {
17734
+ animation-name: colorPulse-dark;
17735
+ }
17736
+ .gn-loader.is-inline.is-primary, .gn-loader.is-inline.is-primary::before, .gn-loader.is-inline.is-primary::after {
17737
+ animation-name: colorPulse-primary;
17738
+ }
17739
+ .gn-loader.is-inline.is-link, .gn-loader.is-inline.is-link::before, .gn-loader.is-inline.is-link::after {
17740
+ animation-name: colorPulse-link;
17741
+ }
17742
+ .gn-loader.is-inline.is-info, .gn-loader.is-inline.is-info::before, .gn-loader.is-inline.is-info::after {
17743
+ animation-name: colorPulse-info;
17744
+ }
17745
+ .gn-loader.is-inline.is-cancel, .gn-loader.is-inline.is-cancel::before, .gn-loader.is-inline.is-cancel::after {
17746
+ animation-name: colorPulse-cancel;
17747
+ }
17748
+ .gn-loader.is-inline.is-success, .gn-loader.is-inline.is-success::before, .gn-loader.is-inline.is-success::after {
17749
+ animation-name: colorPulse-success;
17750
+ }
17751
+ .gn-loader.is-inline.is-warning, .gn-loader.is-inline.is-warning::before, .gn-loader.is-inline.is-warning::after {
17752
+ animation-name: colorPulse-warning;
17753
+ }
17754
+ .gn-loader.is-inline.is-danger, .gn-loader.is-inline.is-danger::before, .gn-loader.is-inline.is-danger::after {
17755
+ animation-name: colorPulse-danger;
17756
+ }
17757
+ .gn-loader.is-inline.is-trans, .gn-loader.is-inline.is-trans::before, .gn-loader.is-inline.is-trans::after {
17758
+ animation-name: colorPulse-trans;
17759
+ }
17760
+ .gn-loader.is-inline.is-help, .gn-loader.is-inline.is-help::before, .gn-loader.is-inline.is-help::after {
17761
+ animation-name: colorPulse-help;
17762
+ }
17763
+ .gn-loader.is-inline.is-plain, .gn-loader.is-inline.is-plain::before, .gn-loader.is-inline.is-plain::after {
17764
+ animation-name: colorPulse-plain;
17765
+ }
17766
+ .gn-loader.is-inline.is-secondary, .gn-loader.is-inline.is-secondary::before, .gn-loader.is-inline.is-secondary::after {
17767
+ animation-name: colorPulse-secondary;
17768
+ }
17769
+ .gn-loader.is-inline.is-mono, .gn-loader.is-inline.is-mono::before, .gn-loader.is-inline.is-mono::after {
17770
+ animation-name: colorPulse-mono;
17771
+ }
17456
17772
 
17457
17773
  @keyframes load-spin {
17458
17774
  0% {
@@ -17481,56 +17797,260 @@ Gn.create('button', {
17481
17797
  transform: translateX(15px);
17482
17798
  }
17483
17799
  }
17484
- /*
17485
- ---
17486
- name: Message
17487
- category:
17488
- - COMPONENT/Message(js)
17489
- tag:
17490
- - v.0.1.0
17491
- - javascript
17492
- ---
17493
-
17494
-
17495
- ### 기본 메세지 알림
17496
- -Text with icon / Text only 선택 사용 할 수 있다.
17497
-
17498
- ```html
17499
- <div class="gn-message is-success has-arrange">
17500
- <span class="gn-icon is-normal">
17501
- <i class="fas fa-check"></i>
17502
- </span>
17503
- <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
17504
- </div>
17505
- <div class="gn-message is-warning has-arrange">
17506
- <span class="gn-icon is-normal">
17507
- <i class="fas fa-exclamation-circle"></i>
17508
- </span>
17509
- <p>Warning! There was a problem with your network connection.</p>
17510
- <span class="gn-icon is-close is-dark">
17511
- <i class="fas fa-times"></i>
17512
- </span>
17513
- </div>
17514
- <div class="gn-message is-danger has-arrange">
17515
- <span class="gn-icon is-normal">
17516
- <i class="fas fa-exclamation-triangle"></i>
17517
- </span>
17518
- <p>Error! A problem has been occurred while submitting your data.</p>
17519
- </div>
17520
- <div class="gn-message is-info has-arrange">
17521
- <span class="gn-icon is-normal">
17522
- <i class="fas fa-info-circle"></i>
17523
- </span>
17524
- <p>Info! Please read the comments carefully.</p>
17525
- <span class="gn-icon is-close is-dark">
17526
- <i class="fas fa-times"></i>
17527
- </span>
17528
- </div>
17529
- <div class="gn-message is-guide has-arrange">
17530
- <span class="gn-icon is-normal">
17531
- <i class="fas fa-info-circle"></i>
17532
- </span>
17533
- <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17800
+ @keyframes colorPulse {
17801
+ 0%, 70%, 100% {
17802
+ background: #e1e1e1;
17803
+ /* 비활성 색상 */
17804
+ transform: scale(1);
17805
+ }
17806
+ 35% {
17807
+ background: #88b50f;
17808
+ /* 활성 색상 */
17809
+ transform: scale(1.1);
17810
+ }
17811
+ }
17812
+ @keyframes colorPulse-white {
17813
+ 0%, 70%, 100% {
17814
+ background: hsl(0, 0%, 71%);
17815
+ /* 비활성 색상 */
17816
+ transform: scale(1);
17817
+ }
17818
+ 35% {
17819
+ background: hsl(0, 0%, 100%);
17820
+ /* 활성 색상 */
17821
+ transform: scale(1.1);
17822
+ }
17823
+ }
17824
+ @keyframes colorPulse-black {
17825
+ 0%, 70%, 100% {
17826
+ background: hsl(0, 0%, 86%);
17827
+ /* 비활성 색상 */
17828
+ transform: scale(1);
17829
+ }
17830
+ 35% {
17831
+ background: hsl(0, 0%, 4%);
17832
+ /* 활성 색상 */
17833
+ transform: scale(1.1);
17834
+ }
17835
+ }
17836
+ @keyframes colorPulse-light {
17837
+ 0%, 70%, 100% {
17838
+ background: hsl(0, 0%, 93%);
17839
+ /* 비활성 색상 */
17840
+ transform: scale(1);
17841
+ }
17842
+ 35% {
17843
+ background: hsl(0, 0%, 96%);
17844
+ /* 활성 색상 */
17845
+ transform: scale(1.1);
17846
+ }
17847
+ }
17848
+ @keyframes colorPulse-dark {
17849
+ 0%, 70%, 100% {
17850
+ background: hsl(0, 0%, 86%);
17851
+ /* 비활성 색상 */
17852
+ transform: scale(1);
17853
+ }
17854
+ 35% {
17855
+ background: hsl(0, 0%, 20%);
17856
+ /* 활성 색상 */
17857
+ transform: scale(1.1);
17858
+ }
17859
+ }
17860
+ @keyframes colorPulse-primary {
17861
+ 0%, 70%, 100% {
17862
+ background: rgb(248.7551020408, 253.4387755102, 236.1612244898);
17863
+ /* 비활성 색상 */
17864
+ transform: scale(1);
17865
+ }
17866
+ 35% {
17867
+ background: #88b50f;
17868
+ /* 활성 색상 */
17869
+ transform: scale(1.1);
17870
+ }
17871
+ }
17872
+ @keyframes colorPulse-link {
17873
+ 0%, 70%, 100% {
17874
+ background: hsl(217, 71%, 96%);
17875
+ /* 비활성 색상 */
17876
+ transform: scale(1);
17877
+ }
17878
+ 35% {
17879
+ background: hsl(217, 71%, 53%);
17880
+ /* 활성 색상 */
17881
+ transform: scale(1.1);
17882
+ }
17883
+ }
17884
+ @keyframes colorPulse-info {
17885
+ 0%, 70%, 100% {
17886
+ background: hsl(204, 71%, 96%);
17887
+ /* 비활성 색상 */
17888
+ transform: scale(1);
17889
+ }
17890
+ 35% {
17891
+ background: hsl(204, 71%, 53%);
17892
+ /* 활성 색상 */
17893
+ transform: scale(1.1);
17894
+ }
17895
+ }
17896
+ @keyframes colorPulse-cancel {
17897
+ 0%, 70%, 100% {
17898
+ background: hsl(0, 0%, 96%);
17899
+ /* 비활성 색상 */
17900
+ transform: scale(1);
17901
+ }
17902
+ 35% {
17903
+ background: hsl(0, 0%, 71%);
17904
+ /* 활성 색상 */
17905
+ transform: scale(1.1);
17906
+ }
17907
+ }
17908
+ @keyframes colorPulse-success {
17909
+ 0%, 70%, 100% {
17910
+ background: hsl(141, 53%, 96%);
17911
+ /* 비활성 색상 */
17912
+ transform: scale(1);
17913
+ }
17914
+ 35% {
17915
+ background: hsl(141, 53%, 53%);
17916
+ /* 활성 색상 */
17917
+ transform: scale(1.1);
17918
+ }
17919
+ }
17920
+ @keyframes colorPulse-warning {
17921
+ 0%, 70%, 100% {
17922
+ background: hsl(38, 100%, 96%);
17923
+ /* 비활성 색상 */
17924
+ transform: scale(1);
17925
+ }
17926
+ 35% {
17927
+ background: hsl(38, 100%, 50%);
17928
+ /* 활성 색상 */
17929
+ transform: scale(1.1);
17930
+ }
17931
+ }
17932
+ @keyframes colorPulse-danger {
17933
+ 0%, 70%, 100% {
17934
+ background: hsl(348, 86%, 96%);
17935
+ /* 비활성 색상 */
17936
+ transform: scale(1);
17937
+ }
17938
+ 35% {
17939
+ background: hsl(348, 86%, 61%);
17940
+ /* 활성 색상 */
17941
+ transform: scale(1.1);
17942
+ }
17943
+ }
17944
+ @keyframes colorPulse-trans {
17945
+ 0%, 70%, 100% {
17946
+ background: hsl(0, 0%, 100%);
17947
+ /* 비활성 색상 */
17948
+ transform: scale(1);
17949
+ }
17950
+ 35% {
17951
+ background: hsl(0, 0%, 100%);
17952
+ /* 활성 색상 */
17953
+ transform: scale(1.1);
17954
+ }
17955
+ }
17956
+ @keyframes colorPulse-help {
17957
+ 0%, 70%, 100% {
17958
+ background: hsl(203, 96%, 96%);
17959
+ /* 비활성 색상 */
17960
+ transform: scale(1);
17961
+ }
17962
+ 35% {
17963
+ background: hsl(203, 96%, 43%);
17964
+ /* 활성 색상 */
17965
+ transform: scale(1.1);
17966
+ }
17967
+ }
17968
+ @keyframes colorPulse-plain {
17969
+ 0%, 70%, 100% {
17970
+ background: #ffffff;
17971
+ /* 비활성 색상 */
17972
+ transform: scale(1);
17973
+ }
17974
+ 35% {
17975
+ background: #ece8e8;
17976
+ /* 활성 색상 */
17977
+ transform: scale(1.1);
17978
+ }
17979
+ }
17980
+ @keyframes colorPulse-secondary {
17981
+ 0%, 70%, 100% {
17982
+ background: rgb(234.6, 246.9169811321, 255);
17983
+ /* 비활성 색상 */
17984
+ transform: scale(1);
17985
+ }
17986
+ 35% {
17987
+ background: #0080d4;
17988
+ /* 활성 색상 */
17989
+ transform: scale(1.1);
17990
+ }
17991
+ }
17992
+ @keyframes colorPulse-mono {
17993
+ 0%, 70%, 100% {
17994
+ background: rgb(244.8, 244.8, 244.8);
17995
+ /* 비활성 색상 */
17996
+ transform: scale(1);
17997
+ }
17998
+ 35% {
17999
+ background: #656565;
18000
+ /* 활성 색상 */
18001
+ transform: scale(1.1);
18002
+ }
18003
+ }
18004
+ /*
18005
+ ---
18006
+ name: Message
18007
+ category:
18008
+ - COMPONENT/Message(js)
18009
+ tag:
18010
+ - v.0.1.0
18011
+ - javascript
18012
+ ---
18013
+
18014
+
18015
+ ### 기본 메세지 알림
18016
+ -Text with icon / Text only 선택 사용 할 수 있다.
18017
+
18018
+ ```html
18019
+ <div class="gn-message is-success has-arrange">
18020
+ <span class="gn-icon is-normal">
18021
+ <i class="fas fa-check"></i>
18022
+ </span>
18023
+ <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
18024
+ </div>
18025
+ <div class="gn-message is-warning has-arrange">
18026
+ <span class="gn-icon is-normal">
18027
+ <i class="fas fa-exclamation-circle"></i>
18028
+ </span>
18029
+ <p>Warning! There was a problem with your network connection.</p>
18030
+ <span class="gn-icon is-close is-dark">
18031
+ <i class="fas fa-times"></i>
18032
+ </span>
18033
+ </div>
18034
+ <div class="gn-message is-danger has-arrange">
18035
+ <span class="gn-icon is-normal">
18036
+ <i class="fas fa-exclamation-triangle"></i>
18037
+ </span>
18038
+ <p>Error! A problem has been occurred while submitting your data.</p>
18039
+ </div>
18040
+ <div class="gn-message is-info has-arrange">
18041
+ <span class="gn-icon is-normal">
18042
+ <i class="fas fa-info-circle"></i>
18043
+ </span>
18044
+ <p>Info! Please read the comments carefully.</p>
18045
+ <span class="gn-icon is-close is-dark">
18046
+ <i class="fas fa-times"></i>
18047
+ </span>
18048
+ </div>
18049
+ <div class="gn-message is-guide has-arrange">
18050
+ <span class="gn-icon is-normal">
18051
+ <i class="fas fa-info-circle"></i>
18052
+ </span>
18053
+ <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17534
18054
  </div>
17535
18055
 
17536
18056
  ```
@@ -19049,22 +19569,26 @@ tag:
19049
19569
  ```
19050
19570
  ````
19051
19571
  Gn.create('picklist', {
19052
- target: '.new-picklist',
19053
- data : {
19572
+ target: '.new-picklist',
19573
+ data: {
19054
19574
  source: [
19055
- { value: 'item1', text: '항목1' },
19056
- { value: 'item2', text: '항목2' },
19057
- { value: 'item5', text: '항목3' },
19058
- { value: 'item4', text: '항목4' },
19059
- { value: 'item5', text: '항목5' },
19060
- { value: 'item6', text: '항목6' },
19061
- { value: 'item7', text: '항목7' },
19062
- { value: 'item8', text: '항목8' }
19575
+ { value: '항목1', text: 'item1', html: '<span class="gn-tag is-primary">항목1</span> item1' },
19576
+ { value: '항목2', text: 'item2', html: '<span class="gn-tag is-danger">항목2</span> item2' },
19577
+ { value: '항목3', text: 'item3', html: '<span class="gn-tag is-warning">항목3</span> item3' }
19063
19578
  ],
19064
- target: [],
19579
+ target: [
19580
+ { value: '항목4', text: 'item4', html: '<span class="gn-tag is-help">항목4</span> item4' },
19581
+ { value: '항목5', text: 'item5', html: '<span class="gn-tag is-success">항목5</span> item5' }
19582
+ ]
19065
19583
  },
19584
+ hasSourceSearch: true,
19585
+ hasTargetSearch: true,
19066
19586
  width: '80%',
19067
- height: 180
19587
+ height: 180,
19588
+ onChange: function (s, t) {
19589
+ console.log(s, t);
19590
+ },
19591
+ orderable: 'target'
19068
19592
  });
19069
19593
  Gn.create('picklist', {
19070
19594
  target: '.new-picklist-v',
@@ -19101,15 +19625,21 @@ tag:
19101
19625
  <tr>
19102
19626
  <td rowspan="2">data</td>
19103
19627
  <td>source</td>
19104
- <td>array[{value: string|array, text: string}]</td>
19628
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19105
19629
  <td></td>
19106
- <td>source 항목 배열</td>
19630
+ <td>source 항목 배열<br>
19631
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19632
+ 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
19633
+ </td>
19107
19634
  </tr>
19108
19635
  <tr>
19109
19636
  <td>target</td>
19110
- <td>array[{value: string|array, text: string}]</td>
19637
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19111
19638
  <td></td>
19112
- <td>target 항목 배열</td>
19639
+ <td>target 항목 배열<br>
19640
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19641
+ 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
19642
+ </td>
19113
19643
  </tr>
19114
19644
  <tr>
19115
19645
  <td rowspan="3">textSets</td>
@@ -19263,23 +19793,17 @@ tag:
19263
19793
  .gn-picklist .picklist-caption + .dropdown-items {
19264
19794
  border-radius: 0 0 2px 2px;
19265
19795
  }
19266
- .gn-picklist .picklist-source {
19796
+ .gn-picklist .gn-dropdown {
19797
+ display: block;
19798
+ }
19799
+ .gn-picklist .picklist-source,
19800
+ .gn-picklist .picklist-target {
19267
19801
  display: flex;
19268
19802
  flex-basis: calc(50% - 16px);
19269
19803
  width: calc(50% - 16px);
19270
19804
  flex-grow: 0;
19271
19805
  flex-shrink: 0;
19272
19806
  }
19273
- .gn-picklist .picklist-source > .gn-dropdown {
19274
- order: 2;
19275
- width: 100%;
19276
- }
19277
- .gn-picklist .picklist-source .picklist-controls {
19278
- order: 1;
19279
- }
19280
- .gn-picklist .gn-dropdown {
19281
- display: block;
19282
- }
19283
19807
  .gn-picklist .picklist-source.no-controls,
19284
19808
  .gn-picklist .picklist-target.no-controls {
19285
19809
  flex-basis: calc(50% - 45px);
@@ -19290,23 +19814,22 @@ tag:
19290
19814
  width: 100%;
19291
19815
  height: 100%;
19292
19816
  }
19293
- .gn-picklist.is-vertical .picklist-source,
19294
- .gn-picklist .picklist-target {
19295
- display: flex;
19296
- flex-basis: calc(50% - 16px);
19297
- width: calc(50% - 16px);
19298
- flex-grow: 0;
19299
- flex-shrink: 0;
19300
- }
19301
- .gn-picklist.is-vertical .picklist-source > .gn-dropdown,
19817
+ .gn-picklist .picklist-source > .gn-dropdown,
19302
19818
  .gn-picklist .picklist-target > .gn-dropdown {
19303
19819
  order: 1;
19304
19820
  width: 100%;
19305
19821
  }
19306
- .gn-picklist.is-vertical .picklist-source .picklist-controls,
19822
+ .gn-picklist .picklist-source .picklist-controls,
19307
19823
  .gn-picklist .picklist-target .picklist-controls {
19308
19824
  order: 2;
19309
19825
  }
19826
+ .gn-picklist .picklist-source > .gn-dropdown {
19827
+ order: 2;
19828
+ width: 100%;
19829
+ }
19830
+ .gn-picklist .picklist-source .picklist-controls {
19831
+ order: 1;
19832
+ }
19310
19833
  .gn-picklist .picklist-controls {
19311
19834
  margin: 0.5rem;
19312
19835
  }
@@ -19316,6 +19839,16 @@ tag:
19316
19839
  .gn-picklist.is-vertical {
19317
19840
  flex-direction: column;
19318
19841
  }
19842
+ .gn-picklist.is-vertical .picklist-source,
19843
+ .gn-picklist.is-vertical .picklist-target {
19844
+ width: calc(100% - 32px);
19845
+ }
19846
+ .gn-picklist.is-vertical .picklist-source > .gn-dropdown {
19847
+ order: 1;
19848
+ }
19849
+ .gn-picklist.is-vertical .picklist-source .picklist-controls {
19850
+ order: 2;
19851
+ }
19319
19852
  .gn-picklist.is-vertical > .picklist-controls {
19320
19853
  width: 90%;
19321
19854
  width: calc(100% - 50px);
@@ -19326,6 +19859,382 @@ tag:
19326
19859
  box-shadow: 0 0 0 0.1em rgba(241.077, 70.023, 104.2338, 0.7);
19327
19860
  }
19328
19861
 
19862
+ /*
19863
+ ---
19864
+ name: SortableList
19865
+ category:
19866
+ - CONTROLS/SortableList(js)
19867
+ tag:
19868
+ - v.0.1.0
19869
+ - javascript
19870
+ ---
19871
+ ### 기본 사용
19872
+
19873
+ ```html
19874
+ <div class="gn-sortablelist">
19875
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center">
19876
+ <button type="button" class="gn-button is-outline">
19877
+ <span class="gn-icon">
19878
+ <i class="fas fa-angle-double-up"></i>
19879
+ </span>
19880
+ </button>
19881
+ <button type="button" class="gn-button is-outline">
19882
+ <span class="gn-icon">
19883
+ <i class="fas fa-angle-up"></i>
19884
+ </span>
19885
+ </button>
19886
+ <button type="button" class="gn-button is-outline">
19887
+ <span class="gn-icon">
19888
+ <i class="fas fa-angle-down"></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-double-down"></i>
19894
+ </span>
19895
+ </button>
19896
+ </div>
19897
+ <div class="gn-dropdown is-opened sortablelist-items">
19898
+ <div class="dropdown-items">
19899
+ <ul class="sortablelist-rows">
19900
+ <li class="dropdown-item">항목 1</li>
19901
+ <li class="dropdown-item">항목 2</li>
19902
+ <li class="dropdown-item">항목 3</li>
19903
+ <li class="dropdown-item">항목 4</li>
19904
+ </ul>
19905
+ </div>
19906
+ </div>
19907
+ </div>
19908
+ ```
19909
+
19910
+ ### 버튼 우측 배치
19911
+
19912
+ ```html
19913
+ <div class="gn-sortablelist">
19914
+ <div class="gn-dropdown is-opened sortablelist-items">
19915
+ <div class="dropdown-items">
19916
+ <ul class="sortablelist-rows">
19917
+ <li class="dropdown-item">항목 1</li>
19918
+ <li class="dropdown-item">항목 2</li>
19919
+ <li class="dropdown-item">항목 3</li>
19920
+ </ul>
19921
+ </div>
19922
+ </div>
19923
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center is-right">
19924
+ <button type="button" class="gn-button is-outline">
19925
+ <span class="gn-icon">
19926
+ <i class="fas fa-angle-double-up"></i>
19927
+ </span>
19928
+ </button>
19929
+ <button type="button" class="gn-button is-outline">
19930
+ <span class="gn-icon">
19931
+ <i class="fas fa-angle-up"></i>
19932
+ </span>
19933
+ </button>
19934
+ <button type="button" class="gn-button is-outline">
19935
+ <span class="gn-icon">
19936
+ <i class="fas fa-angle-down"></i>
19937
+ </span>
19938
+ </button>
19939
+ <button type="button" class="gn-button is-outline">
19940
+ <span class="gn-icon">
19941
+ <i class="fas fa-angle-double-down"></i>
19942
+ </span>
19943
+ </button>
19944
+ </div>
19945
+ </div>
19946
+ ```
19947
+
19948
+ ### 생성 옵션
19949
+ ```ejs
19950
+ <div class="new-sortablelist"></div>
19951
+ <div class="new-sortablelist-drag"></div>
19952
+ <div class="new-sortablelist-cols"></div>
19953
+ ```
19954
+ ````
19955
+ // 단일 컬럼
19956
+ Gn.create('sortablelist', {
19957
+ target: '.new-sortablelist',
19958
+ data: [
19959
+ { value: '1', text: '항목 1' },
19960
+ { value: '2', text: '항목 2' },
19961
+ { value: '3', text: '항목 3' },
19962
+ { value: '4', text: '항목 4' },
19963
+ { value: '5', text: '항목 5' },
19964
+ { value: '6', text: '항목 6' },
19965
+ { value: '7', text: '항목 7' },
19966
+ { value: '8', text: '항목 8' },
19967
+ { value: '9', text: '항목 9' },
19968
+ { value: '10', text: '항목 10' }
19969
+ ]
19970
+ });
19971
+ // 드래그 앤 드롭
19972
+ Gn.create('sortablelist', {
19973
+ target: '.new-sortablelist-drag',
19974
+ data: [
19975
+ { value: 'a', text: '항목 A' },
19976
+ { value: 'b', text: '항목 B' },
19977
+ { value: 'c', text: '항목 C' },
19978
+ { value: 'd', text: '항목 D' },
19979
+ { value: 'e', text: '항목 E' },
19980
+ { value: 'f', text: '항목 F' },
19981
+ { value: 'g', text: '항목 G' },
19982
+ { value: 'h', text: '항목 H' },
19983
+ { value: 'i', text: '항목 I' },
19984
+ { value: 'j', text: '항목 J' }
19985
+ ],
19986
+ draggable: true
19987
+ });
19988
+ // 다중 컬럼
19989
+ Gn.create('sortablelist', {
19990
+ target: '.new-sortablelist-cols',
19991
+ buttonPosition: 'right',
19992
+ data: [
19993
+ { value: 'x1', cols: ['항목1', '카테고리A', '1000'] },
19994
+ { value: 'x2', cols: ['항목2', '카테고리B', '2000'] },
19995
+ { value: 'x3', cols: ['항목3', '카테고리C', '3000'] },
19996
+ { value: 'x4', cols: ['항목4', '카테고리D', '4000'] },
19997
+ { value: 'x5', cols: ['항목5', '카테고리E', '5000'] },
19998
+ { value: 'x6', cols: ['항목6', '카테고리F', '6000'] },
19999
+ { value: 'x7', cols: ['항목7', '카테고리G', '7000'] },
20000
+ { value: 'x8', cols: ['항목8', '카테고리H', '8000'] },
20001
+ { value: 'x9', cols: ['항목9', '카테고리I', '9000'] },
20002
+ { value: 'x10', cols: ['항목10', '카테고리J', '10000'] }
20003
+ ]
20004
+ });
20005
+ ````
20006
+
20007
+ ### 데이터 모델 (SortableListItem)
20008
+
20009
+ <table class="gn-table is-full is-border">
20010
+ <thead>
20011
+ <th>필드</th>
20012
+ <th>type</th>
20013
+ <th>필수</th>
20014
+ <th>description</th>
20015
+ </thead>
20016
+ <tbody>
20017
+ <tr>
20018
+ <td>value</td>
20019
+ <td>string</td>
20020
+ <td>Y</td>
20021
+ <td>고유 값 (빈 문자열 불가)</td>
20022
+ </tr>
20023
+ <tr>
20024
+ <td>text</td>
20025
+ <td>string</td>
20026
+ <td>N</td>
20027
+ <td>단일 컬럼 표시 텍스트</td>
20028
+ </tr>
20029
+ <tr>
20030
+ <td>cols</td>
20031
+ <td>string[]</td>
20032
+ <td>N</td>
20033
+ <td>다중 컬럼 표시 값 배열</td>
20034
+ </tr>
20035
+ </tbody>
20036
+ </table>
20037
+
20038
+ ### 옵션
20039
+ <table class="gn-table is-full is-border">
20040
+ <thead>
20041
+ <th colspan="2">name</th>
20042
+ <th>type</th>
20043
+ <th>default</th>
20044
+ <th>description</th>
20045
+ </thead>
20046
+ <tbody>
20047
+ <tr>
20048
+ <td colspan="2">target</td>
20049
+ <td>string</td>
20050
+ <td></td>
20051
+ <td>sortablelist를 표시할 대상의 선택자(selector)</td>
20052
+ </tr>
20053
+ <tr>
20054
+ <td colspan="2">data</td>
20055
+ <td>SortableListItem[]</td>
20056
+ <td></td>
20057
+ <td>sortablelist에 표시할 데이터 배열</td>
20058
+ </tr>
20059
+ <tr>
20060
+ <td colspan="2">buttonPosition</td>
20061
+ <td>left | right</td>
20062
+ <td>left</td>
20063
+ <td>순서 변경 버튼 위치</td>
20064
+ </tr>
20065
+ <tr>
20066
+ <td colspan="2">draggable</td>
20067
+ <td>boolean</td>
20068
+ <td>false</td>
20069
+ <td>드래그 앤 드롭 순서 변경 활성화 여부</td>
20070
+ </tr>
20071
+ <tr>
20072
+ <td>textSets</td>
20073
+ <td>noData</td>
20074
+ <td>string</td>
20075
+ <td>No records available.</td>
20076
+ <td>데이터가 없을 경우 출력 메시지</td>
20077
+ </tr>
20078
+ <tr>
20079
+ <td colspan="2">disabled</td>
20080
+ <td>boolean</td>
20081
+ <td>false</td>
20082
+ <td>컴포넌트 비활성화 여부</td>
20083
+ </tr>
20084
+ <tr>
20085
+ <td colspan="2">width</td>
20086
+ <td>number, string</td>
20087
+ <td>100%</td>
20088
+ <td>컴포넌트 너비</td>
20089
+ </tr>
20090
+ <tr>
20091
+ <td colspan="2">height</td>
20092
+ <td>number, string</td>
20093
+ <td>150</td>
20094
+ <td>리스트 높이 (미지정 시 150)</td>
20095
+ </tr>
20096
+ <tr>
20097
+ <td colspan="2">onChange</td>
20098
+ <td>function(data)</td>
20099
+ <td></td>
20100
+ <td>데이터 변경 시 발생 이벤트</td>
20101
+ </tr>
20102
+ </tbody>
20103
+ </table>
20104
+
20105
+ ### 메소드
20106
+
20107
+ <table class="gn-table is-full is-border">
20108
+ <thead>
20109
+ <th>name</th>
20110
+ <th>return</th>
20111
+ <th>description</th>
20112
+ </thead>
20113
+ <tbody>
20114
+ <tr>
20115
+ <td>getData()</td>
20116
+ <td>SortableListItem[]</td>
20117
+ <td>현재 데이터 배열을 반환한다.</td>
20118
+ </tr>
20119
+ <tr>
20120
+ <td>setData(data: SortableListItem[]})</td>
20121
+ <td>void</td>
20122
+ <td>데이터 배열을 설정하고 다시 렌더링한다.</td>
20123
+ </tr>
20124
+ <tr>
20125
+ <td>disable()</td>
20126
+ <td>void</td>
20127
+ <td>컴포넌트를 비활성화한다.</td>
20128
+ </tr>
20129
+ <tr>
20130
+ <td>enable()</td>
20131
+ <td>void</td>
20132
+ <td>컴포넌트를 활성화한다.</td>
20133
+ </tr>
20134
+ </tbody>
20135
+ </table>
20136
+
20137
+ */
20138
+ .gn-sortablelist {
20139
+ display: flex;
20140
+ align-items: stretch;
20141
+ -webkit-user-select: none;
20142
+ -moz-user-select: none;
20143
+ user-select: none;
20144
+ }
20145
+ .gn-sortablelist .gn-dropdown {
20146
+ display: block;
20147
+ }
20148
+ .gn-sortablelist .sortablelist-items {
20149
+ flex: 1 1 auto;
20150
+ }
20151
+ .gn-sortablelist .sortablelist-controls {
20152
+ margin: 0.5rem;
20153
+ }
20154
+ .gn-sortablelist .sortablelist-controls .gn-button {
20155
+ padding: 0.25rem 0.75rem;
20156
+ }
20157
+ .gn-sortablelist .sortablelist-controls.is-right {
20158
+ order: 2;
20159
+ margin-left: 0.5rem;
20160
+ margin-right: 0;
20161
+ justify-content: center;
20162
+ }
20163
+ .gn-sortablelist .sortablelist-rows {
20164
+ margin: 0;
20165
+ padding: 0;
20166
+ list-style: none;
20167
+ }
20168
+ .gn-sortablelist .sortablelist-cols {
20169
+ display: flex;
20170
+ gap: 0.5rem;
20171
+ width: 100%;
20172
+ }
20173
+ .gn-sortablelist .sortablelist-col {
20174
+ flex: 1 1 0;
20175
+ min-width: 0;
20176
+ }
20177
+ .gn-sortablelist .dropdown-item.is-empty {
20178
+ color: hsl(0, 0%, 48%);
20179
+ }
20180
+ .gn-sortablelist .dropdown-item.is-dragging {
20181
+ opacity: 0.6;
20182
+ }
20183
+ .gn-sortablelist .dropdown-item.is-group-dragging {
20184
+ outline: 1px dashed hsl(0, 0%, 71%);
20185
+ }
20186
+ .gn-sortablelist .dropdown-item.is-drag-over-top,
20187
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20188
+ background-color: hsl(0, 0%, 96%);
20189
+ }
20190
+ .gn-sortablelist .dropdown-item.is-drag-over-top {
20191
+ box-shadow: inset 0 2px 0 0 #88b50f;
20192
+ }
20193
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20194
+ box-shadow: inset 0 -2px 0 0 #88b50f;
20195
+ }
20196
+
20197
+ .sortablelist-drag-preview {
20198
+ position: absolute;
20199
+ top: -9999px;
20200
+ left: -9999px;
20201
+ display: inline-flex;
20202
+ align-items: flex-start;
20203
+ gap: 8px;
20204
+ padding: 6px 10px;
20205
+ border-radius: 8px;
20206
+ background-color: hsl(0, 0%, 20%);
20207
+ color: hsl(0, 0%, 98%);
20208
+ font-size: 12px;
20209
+ line-height: 1;
20210
+ }
20211
+
20212
+ .sortablelist-drag-preview::before {
20213
+ content: attr(data-count);
20214
+ min-width: 18px;
20215
+ height: 18px;
20216
+ padding: 0 6px;
20217
+ border-radius: 999px;
20218
+ background-color: hsl(0, 0%, 98%);
20219
+ color: hsl(0, 0%, 20%);
20220
+ font-size: 11px;
20221
+ line-height: 18px;
20222
+ text-align: center;
20223
+ }
20224
+
20225
+ .sortablelist-drag-preview-list {
20226
+ display: flex;
20227
+ flex-direction: column;
20228
+ gap: 4px;
20229
+ }
20230
+
20231
+ .sortablelist-drag-preview .dropdown-item.is-ghost {
20232
+ padding: 4px 8px;
20233
+ background-color: hsl(0, 0%, 18%);
20234
+ border-radius: 4px;
20235
+ color: hsl(0, 0%, 98%);
20236
+ }
20237
+
19329
20238
  /*
19330
20239
  ---
19331
20240
  name: Progressbar
@@ -19905,6 +20814,7 @@ tag:
19905
20814
  .gn-tab > ul {
19906
20815
  display: flex;
19907
20816
  border-bottom: 1px solid #bebebe;
20817
+ padding-bottom: 0px;
19908
20818
  }
19909
20819
  .gn-tab.is-center > ul {
19910
20820
  justify-content: center;
@@ -21054,7 +21964,7 @@ Gn.create('tree', {
21054
21964
  }
21055
21965
  .gn-tree li .tree-item .is-toggler::before {
21056
21966
  content: "\f0da";
21057
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21967
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21058
21968
  font-weight: 900;
21059
21969
  }
21060
21970
  .gn-tree li .tree-item + ul {