gnui 1.2.17 → 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 +724 -92
  2. package/dist/js/gnui.js +724 -92
  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 +724 -92
  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
  }
@@ -2700,7 +2700,7 @@ tag:
2700
2700
  }
2701
2701
  .gn-icon-ext::before {
2702
2702
  content: "\f15b";
2703
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free";
2703
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
2704
2704
  font-weight: 300;
2705
2705
  font-size: 1.6rem;
2706
2706
  }
@@ -4209,10 +4209,6 @@ tag:
4209
4209
  display: block;
4210
4210
  word-break: break-word;
4211
4211
  }
4212
- .gn-title:not(:last-child),
4213
- .gn-sub-title:not(:last-child) {
4214
- margin-bottom: 1rem;
4215
- }
4216
4212
 
4217
4213
  .gn-title {
4218
4214
  color: hsl(0, 0%, 93%);
@@ -5482,6 +5478,7 @@ compile: true
5482
5478
  ```ejs
5483
5479
  <button name="new-button"></button>
5484
5480
  <button name="new-button2"></button>
5481
+ <button name="new-button-submenu">편집 메뉴</button>
5485
5482
  ```
5486
5483
 
5487
5484
  ````
@@ -5521,6 +5518,51 @@ compile: true
5521
5518
  value: 'menu2'
5522
5519
  }]
5523
5520
  });
5521
+ // 서브메뉴 예시
5522
+ Gn.create('menubutton', {
5523
+ target: 'button[name=new-button-submenu]',
5524
+ size: 'normal',
5525
+ textSets: {
5526
+ buttonText: '편집 메뉴'
5527
+ },
5528
+ onSelect: function (value, text, menu, e) {
5529
+ console.log('선택된 메뉴:', { value: value, text: text, menu: menu });
5530
+ },
5531
+ data: [
5532
+ {
5533
+ text: '파일',
5534
+ value: 'file',
5535
+ child: [
5536
+ { text: '새 파일', value: 'file-new' },
5537
+ { text: '열기', value: 'file-open' },
5538
+ {
5539
+ text: '최근 파일',
5540
+ value: 'file-recent',
5541
+ child: [
5542
+ { text: 'document.txt', value: 'file-recent-1' },
5543
+ { text: 'image.png', value: 'file-recent-2' }
5544
+ ]
5545
+ },
5546
+ { text: '저장', value: 'file-save', disabled: true },
5547
+ { text: '다른 이름으로 저장', value: 'file-saveas' }
5548
+ ]
5549
+ },
5550
+ {
5551
+ text: '편집',
5552
+ value: 'edit',
5553
+ actived: true,
5554
+ child: [
5555
+ { text: '실행 취소', value: 'edit-undo' },
5556
+ { text: '다시 실행', value: 'edit-redo' }
5557
+ ]
5558
+ },
5559
+ {
5560
+ text: '도움말',
5561
+ value: 'help',
5562
+ disabled: true
5563
+ }
5564
+ ]
5565
+ });
5524
5566
  ````
5525
5567
 
5526
5568
 
@@ -5577,15 +5619,21 @@ compile: true
5577
5619
  </tr>
5578
5620
  <tr>
5579
5621
  <td colspan="2">data</td>
5580
- <td>Array[{value, text, _html_}]</td>
5622
+ <td>Array[{value, text, html, child, disabled, actived}]</td>
5581
5623
  <td></td>
5582
- <td>메뉴 목록에 출력할 목록</td>
5624
+ <td>메뉴 목록에 출력할 목록<br/>- value: 메뉴 값<br/>- text: 메뉴 텍스트<br/>- html: HTML로 렌더링할 내용<br/>- child: 하위 메뉴 배열 (최대 2단계)<br/>- disabled: 비활성화 여부 (boolean)<br/>- actived: 활성화 상태 표시 여부</td>
5625
+ </tr>
5626
+ <tr>
5627
+ <td colspan="2">disabled</td>
5628
+ <td>boolean</td>
5629
+ <td>false</td>
5630
+ <td>버튼 비활성화 여부</td>
5583
5631
  </tr>
5584
5632
  <tr>
5585
5633
  <td colspan="2">onSelect</td>
5586
- <td>function(value, text)</td>
5634
+ <td>function(value, text, menu, e)</td>
5587
5635
  <td></td>
5588
- <td>메뉴 선택 시 수행될 이벤트</td>
5636
+ <td>메뉴 선택 시 수행될 이벤트<br/>- value: 선택된 메뉴의 값<br/>- text: 선택된 메뉴의 텍스트<br/>- menu: 선택된 메뉴 객체<br/>- e: MouseEvent 객체</td>
5589
5637
  </tr>
5590
5638
  </tbody>
5591
5639
  </table>
@@ -5604,6 +5652,21 @@ compile: true
5604
5652
  <td>void</td>
5605
5653
  <td>버튼명을 변경한다.</td>
5606
5654
  </tr>
5655
+ <tr>
5656
+ <td>reRender(data: Array)</td>
5657
+ <td>void</td>
5658
+ <td>메뉴 데이터를 전달받아 DOM을 다시 생성한다.</td>
5659
+ </tr>
5660
+ <tr>
5661
+ <td>disabled()</td>
5662
+ <td>void</td>
5663
+ <td>버튼을 비활성화한다.</td>
5664
+ </tr>
5665
+ <tr>
5666
+ <td>enabled()</td>
5667
+ <td>void</td>
5668
+ <td>버튼을 활성화한다.</td>
5669
+ </tr>
5607
5670
  </tbody>
5608
5671
  </table>
5609
5672
  */
@@ -5691,6 +5754,47 @@ compile: true
5691
5754
  color: #fff;
5692
5755
  background-color: #aae033;
5693
5756
  }
5757
+ .gn-menuButton .menuButton-menu.is-disabled {
5758
+ pointer-events: none;
5759
+ opacity: 0.5;
5760
+ }
5761
+ .gn-menuButton .menuButton-menu.is-actived {
5762
+ background-color: #2b2b2b;
5763
+ }
5764
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-content {
5765
+ display: flex;
5766
+ align-items: center;
5767
+ justify-content: space-between;
5768
+ width: 100%;
5769
+ }
5770
+ .gn-menuButton .menuButton-menu.has-submenu .menuButton-menu-arrow {
5771
+ margin-left: 10px;
5772
+ display: inline-flex;
5773
+ align-items: center;
5774
+ }
5775
+ .gn-menuButton .menuButton-menu .menuButton-submenu {
5776
+ display: none;
5777
+ position: absolute;
5778
+ left: 100%;
5779
+ top: 0;
5780
+ min-width: 150px;
5781
+ background-color: #2b2b2b;
5782
+ border: 1px solid hsl(0, 0%, 48%);
5783
+ border-radius: 2px;
5784
+ z-index: 21;
5785
+ padding: 0.35rem;
5786
+ }
5787
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu {
5788
+ color: hsl(0, 0%, 86%);
5789
+ cursor: pointer;
5790
+ }
5791
+ .gn-menuButton .menuButton-menu .menuButton-submenu .menuButton-menu:hover {
5792
+ color: #fff;
5793
+ background-color: #aae033;
5794
+ }
5795
+ .gn-menuButton .menuButton-menu:hover > .menuButton-submenu {
5796
+ display: block;
5797
+ }
5694
5798
  .gn-menuButton.is-white button {
5695
5799
  color: hsl(0, 0%, 100%);
5696
5800
  border-color: hsl(0, 0%, 100%);
@@ -9476,7 +9580,7 @@ tag:
9476
9580
  }
9477
9581
  .gn-select::after {
9478
9582
  content: "\f107";
9479
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9583
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
9480
9584
  font-weight: 900;
9481
9585
  position: absolute;
9482
9586
  right: 0.5rem;
@@ -12638,9 +12742,13 @@ tag:
12638
12742
  ```ejs
12639
12743
  <div class="new-grid"></div>
12640
12744
 
12641
- <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12745
+ <div style="width: 100%; height: 100px; overflow-x: auto; margin-top: 20px;">
12642
12746
  <div class="new-grid2"></div>
12643
12747
  </div>
12748
+
12749
+ <div style="width: 100%; height: 350px; overflow-x: auto; margin-top: 20px;">
12750
+ <div class="new-grid3"></div>
12751
+ </div>
12644
12752
  ```
12645
12753
  ````
12646
12754
  Gn.create('datagrid', {
@@ -12753,19 +12861,122 @@ Gn.create('datagrid', {
12753
12861
  })
12754
12862
  Gn.create('datagrid', {
12755
12863
  target: '.new-grid2',
12864
+ headers: [
12865
+ {
12866
+ label: 'no',
12867
+ key: 'number',
12868
+ onSelect: function () {
12869
+ // eslint-disable-next-line prefer-rest-params
12870
+ console.log(arguments);
12871
+ },
12872
+ template: function (k, d) {
12873
+ return '<span>' + d[k] + '</span>';
12874
+ },
12875
+ draggable: true,
12876
+ sortable: true,
12877
+ sort: 'asc'
12878
+ },
12879
+ {
12880
+ label: '제목',
12881
+ key: 'title',
12882
+ style: {
12883
+ width: '250px'
12884
+ },
12885
+ className: 'has-text-right',
12886
+ draggable: true,
12887
+ bodyClass: 'has-text-left',
12888
+ sortable: true
12889
+ },
12890
+ {
12891
+ label: '날짜',
12892
+ key: 'date',
12893
+ style: {
12894
+ width: '150px'
12895
+ },
12896
+ className: 'has-text-center',
12897
+ bodyClass: 'has-text-left'
12898
+ }
12899
+ ],
12900
+ data: [
12901
+ {
12902
+ number: '1',
12903
+ title: '하나',
12904
+ date: '2020-09-19',
12905
+ desc: 'hello, world',
12906
+ child: [
12907
+ {
12908
+ number: '1-1',
12909
+ title: '1-하나',
12910
+ date: '2020-09-19'
12911
+ },
12912
+ {
12913
+ number: '1-2',
12914
+ title: '1-둘',
12915
+ date: '2020-09-19',
12916
+ desc: 'hello, world',
12917
+ child: [
12918
+ {
12919
+ number: '1-2-1',
12920
+ title: '1-둘-1',
12921
+ date: '2020-09-19',
12922
+ desc: 'hello, world',
12923
+ child: [
12924
+ {
12925
+ number: '1-2-1-1',
12926
+ title: '1-둘-1-1',
12927
+ desc: 'hello, world',
12928
+ date: '2020-09-19'
12929
+ }
12930
+ ]
12931
+ }
12932
+ ]
12933
+ }
12934
+ ],
12935
+ color: 'is-danger-light'
12936
+ },
12937
+ {
12938
+ number: '2',
12939
+ title: '둘',
12940
+ date: '2020-09-19',
12941
+ desc: 'hello, world'
12942
+ }
12943
+ ],
12944
+ hasHeader: false,
12945
+ hasCheck: true,
12946
+ hasDelete: true,
12947
+ textSets: {
12948
+ deleteConfirmMessage: '파일을 삭제하시겠습니까?'
12949
+ },
12950
+ // onDelete 에서 false 를 반환하면 해당 행 삭제를 취소할 수 있다.
12951
+ onDelete: (data, index) => {
12952
+ console.log(data, index);
12953
+ // 예) 특정 조건에 따라 삭제 취소
12954
+ // if (index === 0) {
12955
+ // return false;
12956
+ // }
12957
+ }
12958
+ })
12959
+ Gn.create('datagrid', {
12960
+ target: '.new-grid3',
12756
12961
  headers: [
12757
12962
  {
12758
12963
  label: 'row data numbers',
12759
12964
  key: 'number',
12760
12965
  style: { width: '50px' },
12761
12966
  sortable: true,
12762
- draggable: true
12967
+ draggable: true,
12968
+ template: function (k, d) {
12969
+ return '<span>' + d[k] + '</span>';
12970
+ }
12763
12971
  },
12764
12972
  {
12765
12973
  label: '제목',
12766
12974
  key: 'title',
12767
12975
  sortable: true,
12768
- draggable: true
12976
+ draggable: true,
12977
+ template: function (k, d) {
12978
+ return '<span>' + d[k] + '</span>';
12979
+ }
12769
12980
  },
12770
12981
  {
12771
12982
  label: '날짜를 표시하는 컬럼입니다',
@@ -12828,8 +13039,6 @@ Gn.create('datagrid', {
12828
13039
  paginator: {
12829
13040
  rows: 30
12830
13041
  },
12831
- hasDelete: true,
12832
- fixHeader: true,
12833
13042
  onChange: updatedData => {
12834
13043
  console.log(updatedData)
12835
13044
  }
@@ -12944,7 +13153,7 @@ Gn.create('datagrid', {
12944
13153
  <b>color:is-warning-light</b> => 행의 색 변경</td>
12945
13154
  </tr>
12946
13155
  <tr>
12947
- <td rowspan="3">textSets</td>
13156
+ <td rowspan="4">textSets</td>
12948
13157
  <td>noData</td>
12949
13158
  <td>string</td>
12950
13159
  <td>No records available.</td>
@@ -12962,6 +13171,12 @@ Gn.create('datagrid', {
12962
13171
  <td></td>
12963
13172
  <td>삭제버튼 헤더표시문구</td>
12964
13173
  </tr>
13174
+ <tr>
13175
+ <td>deleteConfirmMessage</td>
13176
+ <td>string</td>
13177
+ <td></td>
13178
+ <td>삭제 확인 창 표시문구 - 삭제 버튼 클릭시 확인 창 출력</td>
13179
+ </tr>
12965
13180
  <tr>
12966
13181
  <td colspan="2">childField</td>
12967
13182
  <td>string</td>
@@ -12986,6 +13201,12 @@ Gn.create('datagrid', {
12986
13201
  <td>false</td>
12987
13202
  <td>삭제버튼 생성 여부</td>
12988
13203
  </tr>
13204
+ <tr>
13205
+ <td colspan="2">hasHeader</td>
13206
+ <td>boolean</td>
13207
+ <td>true</td>
13208
+ <td>헤더 생성 여부</td>
13209
+ </tr>
12989
13210
  <tr>
12990
13211
  <td colspan="2">readonly</td>
12991
13212
  <td>boolean</td>
@@ -13083,6 +13304,12 @@ Gn.create('datagrid', {
13083
13304
  <td></td>
13084
13305
  <td>이동, 삭제 등의 데이터 변경이 있는 경우, 변경된 데이터를 가져오기 위한 이벤트핸들러</td>
13085
13306
  </tr>
13307
+ <tr>
13308
+ <td colspan="2">onDelete</td>
13309
+ <td>function(deletedData, index)</td>
13310
+ <td>deletedData, index 를 인자로 받으며, false 를 반환하면 해당 행 삭제를 취소한다.</td>
13311
+ <td>삭제 버튼 클릭 시 삭제 대상 데이터와 인덱스를 받을 수 있는 이벤트핸들러<br>onChange 보다 먼저 동작하며, onDelete 에서 false 를 반환하면 실제 삭제 및 onChange 호출이 수행되지 않는다.</td>
13312
+ </tr>
13086
13313
  </tbody>
13087
13314
  </table>
13088
13315
 
@@ -13268,11 +13495,11 @@ Gn.create('datagrid', {
13268
13495
  }
13269
13496
  .gn-datagrid .gn-datagrid-body-row .is-toggler::before {
13270
13497
  content: "\f0d7";
13271
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13498
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
13272
13499
  font-weight: 700;
13273
13500
  }
13274
13501
  .gn-datagrid .gn-datagrid-body-row.has-child[data-depth="0"] .is-toggler {
13275
- margin-left: -3px;
13502
+ margin-left: -6px;
13276
13503
  }
13277
13504
  .gn-datagrid .gn-datagrid-body-row.is-collapsed .is-toggler::before {
13278
13505
  content: "\f0da";
@@ -13472,6 +13699,9 @@ Gn.create('datagrid', {
13472
13699
  .gn-datagrid.has-left-padding .gn-datagrid-body-row:not(.has-child)[data-depth="0"] .gn-datagrid-body-cell:first-child {
13473
13700
  padding-left: 15px;
13474
13701
  }
13702
+ .gn-datagrid.is-headless .gn-datagrid-body-row:first-child {
13703
+ border-top: 1px solid #111111;
13704
+ }
13475
13705
  .gn-datagrid .gn-datagrid-header-cell {
13476
13706
  border-right: 1px solid #111111;
13477
13707
  padding: 0.55rem;
@@ -17186,11 +17416,21 @@ tag:
17186
17416
  <div class="gn-loader is-info"></div>
17187
17417
  ```
17188
17418
 
17419
+ ```html
17420
+ <div class="gn-loader is-inline"></div>
17421
+ <div class="gn-loader is-inline is-success"></div>
17422
+ <div class="gn-loader is-inline is-warning"></div>
17423
+ <div class="gn-loader is-inline is-danger"></div>
17424
+ <div class="gn-loader is-inline is-info"></div>
17425
+ <div class="gn-loader is-inline is-primary"></div>
17426
+ ```
17427
+
17189
17428
  ### 타입
17190
17429
 
17191
17430
  ```html
17192
17431
  <div class="gn-loader is-bounce"></div><br>
17193
17432
  <div class="gn-loader is-move"></div>
17433
+ <div class="gn-loader is-inline"></div><br>
17194
17434
  ```
17195
17435
 
17196
17436
  ### 생성 옵션
@@ -17250,7 +17490,7 @@ Gn.create('button', {
17250
17490
  <td colspan="2">type</td>
17251
17491
  <td>string</td>
17252
17492
  <td></td>
17253
- <td>'bounce','move','circle'</td>
17493
+ <td>'inline','bounce','move','</td>
17254
17494
  </tr>
17255
17495
  <tr>
17256
17496
  <td colspan="2">positionX</td>
@@ -17359,6 +17599,7 @@ Gn.create('button', {
17359
17599
  .gn-loader.is-small {
17360
17600
  width: 15px;
17361
17601
  height: 15px;
17602
+ border-width: 5px;
17362
17603
  }
17363
17604
  .gn-loader.is-normal {
17364
17605
  width: 25px;
@@ -17444,6 +17685,82 @@ Gn.create('button', {
17444
17685
  border: 13px solid #aae033;
17445
17686
  animation: move 1.5s ease-in-out infinite alternate;
17446
17687
  }
17688
+ .gn-loader.is-inline {
17689
+ border: 0;
17690
+ position: relative;
17691
+ margin-left: 10px;
17692
+ margin-right: 10px;
17693
+ animation-delay: -0.12s;
17694
+ background: hsl(0, 0%, 29%);
17695
+ }
17696
+ .gn-loader.is-inline, .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17697
+ display: inline-block !important;
17698
+ width: 3px;
17699
+ height: 3px;
17700
+ animation: colorPulse 1.4s ease-in-out infinite;
17701
+ border-radius: 50%;
17702
+ }
17703
+ .gn-loader.is-inline::before, .gn-loader.is-inline::after {
17704
+ content: "";
17705
+ position: absolute;
17706
+ top: 0;
17707
+ }
17708
+ .gn-loader.is-inline::before {
17709
+ animation-delay: -0.24s;
17710
+ margin-left: -8px;
17711
+ }
17712
+ .gn-loader.is-inline::after {
17713
+ animation-delay: 0s;
17714
+ margin-left: 8px;
17715
+ }
17716
+ .gn-loader.is-inline.is-white, .gn-loader.is-inline.is-white::before, .gn-loader.is-inline.is-white::after {
17717
+ animation-name: colorPulse-white;
17718
+ }
17719
+ .gn-loader.is-inline.is-black, .gn-loader.is-inline.is-black::before, .gn-loader.is-inline.is-black::after {
17720
+ animation-name: colorPulse-black;
17721
+ }
17722
+ .gn-loader.is-inline.is-light, .gn-loader.is-inline.is-light::before, .gn-loader.is-inline.is-light::after {
17723
+ animation-name: colorPulse-light;
17724
+ }
17725
+ .gn-loader.is-inline.is-dark, .gn-loader.is-inline.is-dark::before, .gn-loader.is-inline.is-dark::after {
17726
+ animation-name: colorPulse-dark;
17727
+ }
17728
+ .gn-loader.is-inline.is-primary, .gn-loader.is-inline.is-primary::before, .gn-loader.is-inline.is-primary::after {
17729
+ animation-name: colorPulse-primary;
17730
+ }
17731
+ .gn-loader.is-inline.is-link, .gn-loader.is-inline.is-link::before, .gn-loader.is-inline.is-link::after {
17732
+ animation-name: colorPulse-link;
17733
+ }
17734
+ .gn-loader.is-inline.is-info, .gn-loader.is-inline.is-info::before, .gn-loader.is-inline.is-info::after {
17735
+ animation-name: colorPulse-info;
17736
+ }
17737
+ .gn-loader.is-inline.is-cancel, .gn-loader.is-inline.is-cancel::before, .gn-loader.is-inline.is-cancel::after {
17738
+ animation-name: colorPulse-cancel;
17739
+ }
17740
+ .gn-loader.is-inline.is-success, .gn-loader.is-inline.is-success::before, .gn-loader.is-inline.is-success::after {
17741
+ animation-name: colorPulse-success;
17742
+ }
17743
+ .gn-loader.is-inline.is-warning, .gn-loader.is-inline.is-warning::before, .gn-loader.is-inline.is-warning::after {
17744
+ animation-name: colorPulse-warning;
17745
+ }
17746
+ .gn-loader.is-inline.is-danger, .gn-loader.is-inline.is-danger::before, .gn-loader.is-inline.is-danger::after {
17747
+ animation-name: colorPulse-danger;
17748
+ }
17749
+ .gn-loader.is-inline.is-trans, .gn-loader.is-inline.is-trans::before, .gn-loader.is-inline.is-trans::after {
17750
+ animation-name: colorPulse-trans;
17751
+ }
17752
+ .gn-loader.is-inline.is-help, .gn-loader.is-inline.is-help::before, .gn-loader.is-inline.is-help::after {
17753
+ animation-name: colorPulse-help;
17754
+ }
17755
+ .gn-loader.is-inline.is-plain, .gn-loader.is-inline.is-plain::before, .gn-loader.is-inline.is-plain::after {
17756
+ animation-name: colorPulse-plain;
17757
+ }
17758
+ .gn-loader.is-inline.is-secondary, .gn-loader.is-inline.is-secondary::before, .gn-loader.is-inline.is-secondary::after {
17759
+ animation-name: colorPulse-secondary;
17760
+ }
17761
+ .gn-loader.is-inline.is-mono, .gn-loader.is-inline.is-mono::before, .gn-loader.is-inline.is-mono::after {
17762
+ animation-name: colorPulse-mono;
17763
+ }
17447
17764
 
17448
17765
  @keyframes load-spin {
17449
17766
  0% {
@@ -17472,56 +17789,260 @@ Gn.create('button', {
17472
17789
  transform: translateX(15px);
17473
17790
  }
17474
17791
  }
17475
- /*
17476
- ---
17477
- name: Message
17478
- category:
17479
- - COMPONENT/Message(js)
17480
- tag:
17481
- - v.0.1.0
17482
- - javascript
17483
- ---
17484
-
17485
-
17486
- ### 기본 메세지 알림
17487
- -Text with icon / Text only 선택 사용 할 수 있다.
17488
-
17489
- ```html
17490
- <div class="gn-message is-success has-arrange">
17491
- <span class="gn-icon is-normal">
17492
- <i class="fas fa-check"></i>
17493
- </span>
17494
- <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
17495
- </div>
17496
- <div class="gn-message is-warning has-arrange">
17497
- <span class="gn-icon is-normal">
17498
- <i class="fas fa-exclamation-circle"></i>
17499
- </span>
17500
- <p>Warning! There was a problem with your network connection.</p>
17501
- <span class="gn-icon is-close is-dark">
17502
- <i class="fas fa-times"></i>
17503
- </span>
17504
- </div>
17505
- <div class="gn-message is-danger has-arrange">
17506
- <span class="gn-icon is-normal">
17507
- <i class="fas fa-exclamation-triangle"></i>
17508
- </span>
17509
- <p>Error! A problem has been occurred while submitting your data.</p>
17510
- </div>
17511
- <div class="gn-message is-info has-arrange">
17512
- <span class="gn-icon is-normal">
17513
- <i class="fas fa-info-circle"></i>
17514
- </span>
17515
- <p>Info! Please read the comments carefully.</p>
17516
- <span class="gn-icon is-close is-dark">
17517
- <i class="fas fa-times"></i>
17518
- </span>
17519
- </div>
17520
- <div class="gn-message is-guide has-arrange">
17521
- <span class="gn-icon is-normal">
17522
- <i class="fas fa-info-circle"></i>
17523
- </span>
17524
- <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17792
+ @keyframes colorPulse {
17793
+ 0%, 70%, 100% {
17794
+ background: hsl(0, 0%, 29%);
17795
+ /* 비활성 색상 */
17796
+ transform: scale(1);
17797
+ }
17798
+ 35% {
17799
+ background: #aae033;
17800
+ /* 활성 색상 */
17801
+ transform: scale(1.1);
17802
+ }
17803
+ }
17804
+ @keyframes colorPulse-white {
17805
+ 0%, 70%, 100% {
17806
+ background: hsl(0, 0%, 71%);
17807
+ /* 비활성 색상 */
17808
+ transform: scale(1);
17809
+ }
17810
+ 35% {
17811
+ background: hsl(0, 0%, 100%);
17812
+ /* 활성 색상 */
17813
+ transform: scale(1.1);
17814
+ }
17815
+ }
17816
+ @keyframes colorPulse-black {
17817
+ 0%, 70%, 100% {
17818
+ background: hsl(0, 0%, 86%);
17819
+ /* 비활성 색상 */
17820
+ transform: scale(1);
17821
+ }
17822
+ 35% {
17823
+ background: hsl(0, 0%, 4%);
17824
+ /* 활성 색상 */
17825
+ transform: scale(1.1);
17826
+ }
17827
+ }
17828
+ @keyframes colorPulse-light {
17829
+ 0%, 70%, 100% {
17830
+ background: hsl(0, 0%, 93%);
17831
+ /* 비활성 색상 */
17832
+ transform: scale(1);
17833
+ }
17834
+ 35% {
17835
+ background: hsl(0, 0%, 96%);
17836
+ /* 활성 색상 */
17837
+ transform: scale(1.1);
17838
+ }
17839
+ }
17840
+ @keyframes colorPulse-dark {
17841
+ 0%, 70%, 100% {
17842
+ background: hsl(0, 0%, 86%);
17843
+ /* 비활성 색상 */
17844
+ transform: scale(1);
17845
+ }
17846
+ 35% {
17847
+ background: hsl(0, 0%, 20%);
17848
+ /* 활성 색상 */
17849
+ transform: scale(1.1);
17850
+ }
17851
+ }
17852
+ @keyframes colorPulse-primary {
17853
+ 0%, 70%, 100% {
17854
+ background: rgb(247.6212765957, 252.3089361702, 237.2910638298);
17855
+ /* 비활성 색상 */
17856
+ transform: scale(1);
17857
+ }
17858
+ 35% {
17859
+ background: #aae033;
17860
+ /* 활성 색상 */
17861
+ transform: scale(1.1);
17862
+ }
17863
+ }
17864
+ @keyframes colorPulse-link {
17865
+ 0%, 70%, 100% {
17866
+ background: hsl(217, 71%, 96%);
17867
+ /* 비활성 색상 */
17868
+ transform: scale(1);
17869
+ }
17870
+ 35% {
17871
+ background: hsl(217, 71%, 53%);
17872
+ /* 활성 색상 */
17873
+ transform: scale(1.1);
17874
+ }
17875
+ }
17876
+ @keyframes colorPulse-info {
17877
+ 0%, 70%, 100% {
17878
+ background: hsl(204, 71%, 96%);
17879
+ /* 비활성 색상 */
17880
+ transform: scale(1);
17881
+ }
17882
+ 35% {
17883
+ background: hsl(204, 71%, 53%);
17884
+ /* 활성 색상 */
17885
+ transform: scale(1.1);
17886
+ }
17887
+ }
17888
+ @keyframes colorPulse-cancel {
17889
+ 0%, 70%, 100% {
17890
+ background: hsl(0, 0%, 96%);
17891
+ /* 비활성 색상 */
17892
+ transform: scale(1);
17893
+ }
17894
+ 35% {
17895
+ background: hsl(0, 0%, 71%);
17896
+ /* 활성 색상 */
17897
+ transform: scale(1.1);
17898
+ }
17899
+ }
17900
+ @keyframes colorPulse-success {
17901
+ 0%, 70%, 100% {
17902
+ background: hsl(141, 53%, 96%);
17903
+ /* 비활성 색상 */
17904
+ transform: scale(1);
17905
+ }
17906
+ 35% {
17907
+ background: hsl(141, 53%, 53%);
17908
+ /* 활성 색상 */
17909
+ transform: scale(1.1);
17910
+ }
17911
+ }
17912
+ @keyframes colorPulse-warning {
17913
+ 0%, 70%, 100% {
17914
+ background: hsl(38, 100%, 96%);
17915
+ /* 비활성 색상 */
17916
+ transform: scale(1);
17917
+ }
17918
+ 35% {
17919
+ background: hsl(38, 100%, 50%);
17920
+ /* 활성 색상 */
17921
+ transform: scale(1.1);
17922
+ }
17923
+ }
17924
+ @keyframes colorPulse-danger {
17925
+ 0%, 70%, 100% {
17926
+ background: hsl(348, 86%, 96%);
17927
+ /* 비활성 색상 */
17928
+ transform: scale(1);
17929
+ }
17930
+ 35% {
17931
+ background: hsl(348, 86%, 61%);
17932
+ /* 활성 색상 */
17933
+ transform: scale(1.1);
17934
+ }
17935
+ }
17936
+ @keyframes colorPulse-trans {
17937
+ 0%, 70%, 100% {
17938
+ background: hsl(0, 0%, 100%);
17939
+ /* 비활성 색상 */
17940
+ transform: scale(1);
17941
+ }
17942
+ 35% {
17943
+ background: hsl(0, 0%, 100%);
17944
+ /* 활성 색상 */
17945
+ transform: scale(1.1);
17946
+ }
17947
+ }
17948
+ @keyframes colorPulse-help {
17949
+ 0%, 70%, 100% {
17950
+ background: hsl(203, 96%, 96%);
17951
+ /* 비활성 색상 */
17952
+ transform: scale(1);
17953
+ }
17954
+ 35% {
17955
+ background: hsl(203, 96%, 43%);
17956
+ /* 활성 색상 */
17957
+ transform: scale(1.1);
17958
+ }
17959
+ }
17960
+ @keyframes colorPulse-plain {
17961
+ 0%, 70%, 100% {
17962
+ background: hsl(171, 100%, 29%);
17963
+ /* 비활성 색상 */
17964
+ transform: scale(1);
17965
+ }
17966
+ 35% {
17967
+ background: #fff;
17968
+ /* 활성 색상 */
17969
+ transform: scale(1.1);
17970
+ }
17971
+ }
17972
+ @keyframes colorPulse-secondary {
17973
+ 0%, 70%, 100% {
17974
+ background: rgb(234.6, 245.08, 255);
17975
+ /* 비활성 색상 */
17976
+ transform: scale(1);
17977
+ }
17978
+ 35% {
17979
+ background: #0083ff;
17980
+ /* 활성 색상 */
17981
+ transform: scale(1.1);
17982
+ }
17983
+ }
17984
+ @keyframes colorPulse-mono {
17985
+ 0%, 70%, 100% {
17986
+ background: rgb(244.8, 244.8, 244.8);
17987
+ /* 비활성 색상 */
17988
+ transform: scale(1);
17989
+ }
17990
+ 35% {
17991
+ background: #656565;
17992
+ /* 활성 색상 */
17993
+ transform: scale(1.1);
17994
+ }
17995
+ }
17996
+ /*
17997
+ ---
17998
+ name: Message
17999
+ category:
18000
+ - COMPONENT/Message(js)
18001
+ tag:
18002
+ - v.0.1.0
18003
+ - javascript
18004
+ ---
18005
+
18006
+
18007
+ ### 기본 메세지 알림
18008
+ -Text with icon / Text only 선택 사용 할 수 있다.
18009
+
18010
+ ```html
18011
+ <div class="gn-message is-success has-arrange">
18012
+ <span class="gn-icon is-normal">
18013
+ <i class="fas fa-check"></i>
18014
+ </span>
18015
+ <p>Success! Your message has been sent successfully. <br/> Success! Your message has been sent successfully. </p>
18016
+ </div>
18017
+ <div class="gn-message is-warning has-arrange">
18018
+ <span class="gn-icon is-normal">
18019
+ <i class="fas fa-exclamation-circle"></i>
18020
+ </span>
18021
+ <p>Warning! There was a problem with your network connection.</p>
18022
+ <span class="gn-icon is-close is-dark">
18023
+ <i class="fas fa-times"></i>
18024
+ </span>
18025
+ </div>
18026
+ <div class="gn-message is-danger has-arrange">
18027
+ <span class="gn-icon is-normal">
18028
+ <i class="fas fa-exclamation-triangle"></i>
18029
+ </span>
18030
+ <p>Error! A problem has been occurred while submitting your data.</p>
18031
+ </div>
18032
+ <div class="gn-message is-info has-arrange">
18033
+ <span class="gn-icon is-normal">
18034
+ <i class="fas fa-info-circle"></i>
18035
+ </span>
18036
+ <p>Info! Please read the comments carefully.</p>
18037
+ <span class="gn-icon is-close is-dark">
18038
+ <i class="fas fa-times"></i>
18039
+ </span>
18040
+ </div>
18041
+ <div class="gn-message is-guide has-arrange">
18042
+ <span class="gn-icon is-normal">
18043
+ <i class="fas fa-info-circle"></i>
18044
+ </span>
18045
+ <p> 가이드 메시지 한글 폰드 테스트 Guide!</p>
17525
18046
  </div>
17526
18047
 
17527
18048
  ```
@@ -19040,22 +19561,26 @@ tag:
19040
19561
  ```
19041
19562
  ````
19042
19563
  Gn.create('picklist', {
19043
- target: '.new-picklist',
19044
- data : {
19564
+ target: '.new-picklist',
19565
+ data: {
19045
19566
  source: [
19046
- { value: 'item1', text: '항목1' },
19047
- { value: 'item2', text: '항목2' },
19048
- { value: 'item5', text: '항목3' },
19049
- { value: 'item4', text: '항목4' },
19050
- { value: 'item5', text: '항목5' },
19051
- { value: 'item6', text: '항목6' },
19052
- { value: 'item7', text: '항목7' },
19053
- { value: 'item8', text: '항목8' }
19567
+ { value: '항목1', text: 'item1', html: '<span class="gn-tag is-primary">항목1</span> item1' },
19568
+ { value: '항목2', text: 'item2', html: '<span class="gn-tag is-danger">항목2</span> item2' },
19569
+ { value: '항목3', text: 'item3', html: '<span class="gn-tag is-warning">항목3</span> item3' }
19054
19570
  ],
19055
- target: [],
19571
+ target: [
19572
+ { value: '항목4', text: 'item4', html: '<span class="gn-tag is-help">항목4</span> item4' },
19573
+ { value: '항목5', text: 'item5', html: '<span class="gn-tag is-success">항목5</span> item5' }
19574
+ ]
19056
19575
  },
19576
+ hasSourceSearch: true,
19577
+ hasTargetSearch: true,
19057
19578
  width: '80%',
19058
- height: 180
19579
+ height: 180,
19580
+ onChange: function (s, t) {
19581
+ console.log(s, t);
19582
+ },
19583
+ orderable: 'target'
19059
19584
  });
19060
19585
  Gn.create('picklist', {
19061
19586
  target: '.new-picklist-v',
@@ -19092,15 +19617,21 @@ tag:
19092
19617
  <tr>
19093
19618
  <td rowspan="2">data</td>
19094
19619
  <td>source</td>
19095
- <td>array[{value: string|array, text: string}]</td>
19620
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19096
19621
  <td></td>
19097
- <td>source 항목 배열</td>
19622
+ <td>source 항목 배열<br>
19623
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19624
+ 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
19625
+ </td>
19098
19626
  </tr>
19099
19627
  <tr>
19100
19628
  <td>target</td>
19101
- <td>array[{value: string|array, text: string}]</td>
19629
+ <td>array[{value: string|array, text: string, html?: string, icon?:string}]</td>
19102
19630
  <td></td>
19103
- <td>target 항목 배열</td>
19631
+ <td>target 항목 배열<br>
19632
+ html: 옵션 html(html이 있는 경우 text가 있는 항목만 선택 가능하다.)<br>
19633
+ 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
19634
+ </td>
19104
19635
  </tr>
19105
19636
  <tr>
19106
19637
  <td rowspan="3">textSets</td>
@@ -19254,23 +19785,17 @@ tag:
19254
19785
  .gn-picklist .picklist-caption + .dropdown-items {
19255
19786
  border-radius: 0 0 2px 2px;
19256
19787
  }
19257
- .gn-picklist .picklist-source {
19788
+ .gn-picklist .gn-dropdown {
19789
+ display: block;
19790
+ }
19791
+ .gn-picklist .picklist-source,
19792
+ .gn-picklist .picklist-target {
19258
19793
  display: flex;
19259
19794
  flex-basis: calc(50% - 16px);
19260
19795
  width: calc(50% - 16px);
19261
19796
  flex-grow: 0;
19262
19797
  flex-shrink: 0;
19263
19798
  }
19264
- .gn-picklist .picklist-source > .gn-dropdown {
19265
- order: 2;
19266
- width: 100%;
19267
- }
19268
- .gn-picklist .picklist-source .picklist-controls {
19269
- order: 1;
19270
- }
19271
- .gn-picklist .gn-dropdown {
19272
- display: block;
19273
- }
19274
19799
  .gn-picklist .picklist-source.no-controls,
19275
19800
  .gn-picklist .picklist-target.no-controls {
19276
19801
  flex-basis: calc(50% - 45px);
@@ -19281,23 +19806,22 @@ tag:
19281
19806
  width: 100%;
19282
19807
  height: 100%;
19283
19808
  }
19284
- .gn-picklist.is-vertical .picklist-source,
19285
- .gn-picklist .picklist-target {
19286
- display: flex;
19287
- flex-basis: calc(50% - 16px);
19288
- width: calc(50% - 16px);
19289
- flex-grow: 0;
19290
- flex-shrink: 0;
19291
- }
19292
- .gn-picklist.is-vertical .picklist-source > .gn-dropdown,
19809
+ .gn-picklist .picklist-source > .gn-dropdown,
19293
19810
  .gn-picklist .picklist-target > .gn-dropdown {
19294
19811
  order: 1;
19295
19812
  width: 100%;
19296
19813
  }
19297
- .gn-picklist.is-vertical .picklist-source .picklist-controls,
19814
+ .gn-picklist .picklist-source .picklist-controls,
19298
19815
  .gn-picklist .picklist-target .picklist-controls {
19299
19816
  order: 2;
19300
19817
  }
19818
+ .gn-picklist .picklist-source > .gn-dropdown {
19819
+ order: 2;
19820
+ width: 100%;
19821
+ }
19822
+ .gn-picklist .picklist-source .picklist-controls {
19823
+ order: 1;
19824
+ }
19301
19825
  .gn-picklist .picklist-controls {
19302
19826
  margin: 0.5rem;
19303
19827
  }
@@ -19307,6 +19831,16 @@ tag:
19307
19831
  .gn-picklist.is-vertical {
19308
19832
  flex-direction: column;
19309
19833
  }
19834
+ .gn-picklist.is-vertical .picklist-source,
19835
+ .gn-picklist.is-vertical .picklist-target {
19836
+ width: calc(100% - 32px);
19837
+ }
19838
+ .gn-picklist.is-vertical .picklist-source > .gn-dropdown {
19839
+ order: 1;
19840
+ }
19841
+ .gn-picklist.is-vertical .picklist-source .picklist-controls {
19842
+ order: 2;
19843
+ }
19310
19844
  .gn-picklist.is-vertical > .picklist-controls {
19311
19845
  width: 90%;
19312
19846
  width: calc(100% - 50px);
@@ -19317,6 +19851,382 @@ tag:
19317
19851
  box-shadow: 0 0 0 0.1em rgba(241.077, 70.023, 104.2338, 0.7);
19318
19852
  }
19319
19853
 
19854
+ /*
19855
+ ---
19856
+ name: SortableList
19857
+ category:
19858
+ - CONTROLS/SortableList(js)
19859
+ tag:
19860
+ - v.0.1.0
19861
+ - javascript
19862
+ ---
19863
+ ### 기본 사용
19864
+
19865
+ ```html
19866
+ <div class="gn-sortablelist">
19867
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center">
19868
+ <button type="button" class="gn-button is-outline">
19869
+ <span class="gn-icon">
19870
+ <i class="fas fa-angle-double-up"></i>
19871
+ </span>
19872
+ </button>
19873
+ <button type="button" class="gn-button is-outline">
19874
+ <span class="gn-icon">
19875
+ <i class="fas fa-angle-up"></i>
19876
+ </span>
19877
+ </button>
19878
+ <button type="button" class="gn-button is-outline">
19879
+ <span class="gn-icon">
19880
+ <i class="fas fa-angle-down"></i>
19881
+ </span>
19882
+ </button>
19883
+ <button type="button" class="gn-button is-outline">
19884
+ <span class="gn-icon">
19885
+ <i class="fas fa-angle-double-down"></i>
19886
+ </span>
19887
+ </button>
19888
+ </div>
19889
+ <div class="gn-dropdown is-opened sortablelist-items">
19890
+ <div class="dropdown-items">
19891
+ <ul class="sortablelist-rows">
19892
+ <li class="dropdown-item">항목 1</li>
19893
+ <li class="dropdown-item">항목 2</li>
19894
+ <li class="dropdown-item">항목 3</li>
19895
+ <li class="dropdown-item">항목 4</li>
19896
+ </ul>
19897
+ </div>
19898
+ </div>
19899
+ </div>
19900
+ ```
19901
+
19902
+ ### 버튼 우측 배치
19903
+
19904
+ ```html
19905
+ <div class="gn-sortablelist">
19906
+ <div class="gn-dropdown is-opened sortablelist-items">
19907
+ <div class="dropdown-items">
19908
+ <ul class="sortablelist-rows">
19909
+ <li class="dropdown-item">항목 1</li>
19910
+ <li class="dropdown-item">항목 2</li>
19911
+ <li class="dropdown-item">항목 3</li>
19912
+ </ul>
19913
+ </div>
19914
+ </div>
19915
+ <div class="sortablelist-controls gn-control is-small has-arrange is-vertical is-center is-right">
19916
+ <button type="button" class="gn-button is-outline">
19917
+ <span class="gn-icon">
19918
+ <i class="fas fa-angle-double-up"></i>
19919
+ </span>
19920
+ </button>
19921
+ <button type="button" class="gn-button is-outline">
19922
+ <span class="gn-icon">
19923
+ <i class="fas fa-angle-up"></i>
19924
+ </span>
19925
+ </button>
19926
+ <button type="button" class="gn-button is-outline">
19927
+ <span class="gn-icon">
19928
+ <i class="fas fa-angle-down"></i>
19929
+ </span>
19930
+ </button>
19931
+ <button type="button" class="gn-button is-outline">
19932
+ <span class="gn-icon">
19933
+ <i class="fas fa-angle-double-down"></i>
19934
+ </span>
19935
+ </button>
19936
+ </div>
19937
+ </div>
19938
+ ```
19939
+
19940
+ ### 생성 옵션
19941
+ ```ejs
19942
+ <div class="new-sortablelist"></div>
19943
+ <div class="new-sortablelist-drag"></div>
19944
+ <div class="new-sortablelist-cols"></div>
19945
+ ```
19946
+ ````
19947
+ // 단일 컬럼
19948
+ Gn.create('sortablelist', {
19949
+ target: '.new-sortablelist',
19950
+ data: [
19951
+ { value: '1', text: '항목 1' },
19952
+ { value: '2', text: '항목 2' },
19953
+ { value: '3', text: '항목 3' },
19954
+ { value: '4', text: '항목 4' },
19955
+ { value: '5', text: '항목 5' },
19956
+ { value: '6', text: '항목 6' },
19957
+ { value: '7', text: '항목 7' },
19958
+ { value: '8', text: '항목 8' },
19959
+ { value: '9', text: '항목 9' },
19960
+ { value: '10', text: '항목 10' }
19961
+ ]
19962
+ });
19963
+ // 드래그 앤 드롭
19964
+ Gn.create('sortablelist', {
19965
+ target: '.new-sortablelist-drag',
19966
+ data: [
19967
+ { value: 'a', text: '항목 A' },
19968
+ { value: 'b', text: '항목 B' },
19969
+ { value: 'c', text: '항목 C' },
19970
+ { value: 'd', text: '항목 D' },
19971
+ { value: 'e', text: '항목 E' },
19972
+ { value: 'f', text: '항목 F' },
19973
+ { value: 'g', text: '항목 G' },
19974
+ { value: 'h', text: '항목 H' },
19975
+ { value: 'i', text: '항목 I' },
19976
+ { value: 'j', text: '항목 J' }
19977
+ ],
19978
+ draggable: true
19979
+ });
19980
+ // 다중 컬럼
19981
+ Gn.create('sortablelist', {
19982
+ target: '.new-sortablelist-cols',
19983
+ buttonPosition: 'right',
19984
+ data: [
19985
+ { value: 'x1', cols: ['항목1', '카테고리A', '1000'] },
19986
+ { value: 'x2', cols: ['항목2', '카테고리B', '2000'] },
19987
+ { value: 'x3', cols: ['항목3', '카테고리C', '3000'] },
19988
+ { value: 'x4', cols: ['항목4', '카테고리D', '4000'] },
19989
+ { value: 'x5', cols: ['항목5', '카테고리E', '5000'] },
19990
+ { value: 'x6', cols: ['항목6', '카테고리F', '6000'] },
19991
+ { value: 'x7', cols: ['항목7', '카테고리G', '7000'] },
19992
+ { value: 'x8', cols: ['항목8', '카테고리H', '8000'] },
19993
+ { value: 'x9', cols: ['항목9', '카테고리I', '9000'] },
19994
+ { value: 'x10', cols: ['항목10', '카테고리J', '10000'] }
19995
+ ]
19996
+ });
19997
+ ````
19998
+
19999
+ ### 데이터 모델 (SortableListItem)
20000
+
20001
+ <table class="gn-table is-full is-border">
20002
+ <thead>
20003
+ <th>필드</th>
20004
+ <th>type</th>
20005
+ <th>필수</th>
20006
+ <th>description</th>
20007
+ </thead>
20008
+ <tbody>
20009
+ <tr>
20010
+ <td>value</td>
20011
+ <td>string</td>
20012
+ <td>Y</td>
20013
+ <td>고유 값 (빈 문자열 불가)</td>
20014
+ </tr>
20015
+ <tr>
20016
+ <td>text</td>
20017
+ <td>string</td>
20018
+ <td>N</td>
20019
+ <td>단일 컬럼 표시 텍스트</td>
20020
+ </tr>
20021
+ <tr>
20022
+ <td>cols</td>
20023
+ <td>string[]</td>
20024
+ <td>N</td>
20025
+ <td>다중 컬럼 표시 값 배열</td>
20026
+ </tr>
20027
+ </tbody>
20028
+ </table>
20029
+
20030
+ ### 옵션
20031
+ <table class="gn-table is-full is-border">
20032
+ <thead>
20033
+ <th colspan="2">name</th>
20034
+ <th>type</th>
20035
+ <th>default</th>
20036
+ <th>description</th>
20037
+ </thead>
20038
+ <tbody>
20039
+ <tr>
20040
+ <td colspan="2">target</td>
20041
+ <td>string</td>
20042
+ <td></td>
20043
+ <td>sortablelist를 표시할 대상의 선택자(selector)</td>
20044
+ </tr>
20045
+ <tr>
20046
+ <td colspan="2">data</td>
20047
+ <td>SortableListItem[]</td>
20048
+ <td></td>
20049
+ <td>sortablelist에 표시할 데이터 배열</td>
20050
+ </tr>
20051
+ <tr>
20052
+ <td colspan="2">buttonPosition</td>
20053
+ <td>left | right</td>
20054
+ <td>left</td>
20055
+ <td>순서 변경 버튼 위치</td>
20056
+ </tr>
20057
+ <tr>
20058
+ <td colspan="2">draggable</td>
20059
+ <td>boolean</td>
20060
+ <td>false</td>
20061
+ <td>드래그 앤 드롭 순서 변경 활성화 여부</td>
20062
+ </tr>
20063
+ <tr>
20064
+ <td>textSets</td>
20065
+ <td>noData</td>
20066
+ <td>string</td>
20067
+ <td>No records available.</td>
20068
+ <td>데이터가 없을 경우 출력 메시지</td>
20069
+ </tr>
20070
+ <tr>
20071
+ <td colspan="2">disabled</td>
20072
+ <td>boolean</td>
20073
+ <td>false</td>
20074
+ <td>컴포넌트 비활성화 여부</td>
20075
+ </tr>
20076
+ <tr>
20077
+ <td colspan="2">width</td>
20078
+ <td>number, string</td>
20079
+ <td>100%</td>
20080
+ <td>컴포넌트 너비</td>
20081
+ </tr>
20082
+ <tr>
20083
+ <td colspan="2">height</td>
20084
+ <td>number, string</td>
20085
+ <td>150</td>
20086
+ <td>리스트 높이 (미지정 시 150)</td>
20087
+ </tr>
20088
+ <tr>
20089
+ <td colspan="2">onChange</td>
20090
+ <td>function(data)</td>
20091
+ <td></td>
20092
+ <td>데이터 변경 시 발생 이벤트</td>
20093
+ </tr>
20094
+ </tbody>
20095
+ </table>
20096
+
20097
+ ### 메소드
20098
+
20099
+ <table class="gn-table is-full is-border">
20100
+ <thead>
20101
+ <th>name</th>
20102
+ <th>return</th>
20103
+ <th>description</th>
20104
+ </thead>
20105
+ <tbody>
20106
+ <tr>
20107
+ <td>getData()</td>
20108
+ <td>SortableListItem[]</td>
20109
+ <td>현재 데이터 배열을 반환한다.</td>
20110
+ </tr>
20111
+ <tr>
20112
+ <td>setData(data: SortableListItem[]})</td>
20113
+ <td>void</td>
20114
+ <td>데이터 배열을 설정하고 다시 렌더링한다.</td>
20115
+ </tr>
20116
+ <tr>
20117
+ <td>disable()</td>
20118
+ <td>void</td>
20119
+ <td>컴포넌트를 비활성화한다.</td>
20120
+ </tr>
20121
+ <tr>
20122
+ <td>enable()</td>
20123
+ <td>void</td>
20124
+ <td>컴포넌트를 활성화한다.</td>
20125
+ </tr>
20126
+ </tbody>
20127
+ </table>
20128
+
20129
+ */
20130
+ .gn-sortablelist {
20131
+ display: flex;
20132
+ align-items: stretch;
20133
+ -webkit-user-select: none;
20134
+ -moz-user-select: none;
20135
+ user-select: none;
20136
+ }
20137
+ .gn-sortablelist .gn-dropdown {
20138
+ display: block;
20139
+ }
20140
+ .gn-sortablelist .sortablelist-items {
20141
+ flex: 1 1 auto;
20142
+ }
20143
+ .gn-sortablelist .sortablelist-controls {
20144
+ margin: 0.5rem;
20145
+ }
20146
+ .gn-sortablelist .sortablelist-controls .gn-button {
20147
+ padding: 0.25rem 0.75rem;
20148
+ }
20149
+ .gn-sortablelist .sortablelist-controls.is-right {
20150
+ order: 2;
20151
+ margin-left: 0.5rem;
20152
+ margin-right: 0;
20153
+ justify-content: center;
20154
+ }
20155
+ .gn-sortablelist .sortablelist-rows {
20156
+ margin: 0;
20157
+ padding: 0;
20158
+ list-style: none;
20159
+ }
20160
+ .gn-sortablelist .sortablelist-cols {
20161
+ display: flex;
20162
+ gap: 0.5rem;
20163
+ width: 100%;
20164
+ }
20165
+ .gn-sortablelist .sortablelist-col {
20166
+ flex: 1 1 0;
20167
+ min-width: 0;
20168
+ }
20169
+ .gn-sortablelist .dropdown-item.is-empty {
20170
+ color: hsl(0, 0%, 48%);
20171
+ }
20172
+ .gn-sortablelist .dropdown-item.is-dragging {
20173
+ opacity: 0.6;
20174
+ }
20175
+ .gn-sortablelist .dropdown-item.is-group-dragging {
20176
+ outline: 1px dashed hsl(0, 0%, 71%);
20177
+ }
20178
+ .gn-sortablelist .dropdown-item.is-drag-over-top,
20179
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20180
+ background-color: hsl(0, 0%, 96%);
20181
+ }
20182
+ .gn-sortablelist .dropdown-item.is-drag-over-top {
20183
+ box-shadow: inset 0 2px 0 0 #aae033;
20184
+ }
20185
+ .gn-sortablelist .dropdown-item.is-drag-over-bottom {
20186
+ box-shadow: inset 0 -2px 0 0 #aae033;
20187
+ }
20188
+
20189
+ .sortablelist-drag-preview {
20190
+ position: absolute;
20191
+ top: -9999px;
20192
+ left: -9999px;
20193
+ display: inline-flex;
20194
+ align-items: flex-start;
20195
+ gap: 8px;
20196
+ padding: 6px 10px;
20197
+ border-radius: 8px;
20198
+ background-color: hsl(0, 0%, 20%);
20199
+ color: hsl(0, 0%, 98%);
20200
+ font-size: 12px;
20201
+ line-height: 1;
20202
+ }
20203
+
20204
+ .sortablelist-drag-preview::before {
20205
+ content: attr(data-count);
20206
+ min-width: 18px;
20207
+ height: 18px;
20208
+ padding: 0 6px;
20209
+ border-radius: 999px;
20210
+ background-color: hsl(0, 0%, 98%);
20211
+ color: hsl(0, 0%, 20%);
20212
+ font-size: 11px;
20213
+ line-height: 18px;
20214
+ text-align: center;
20215
+ }
20216
+
20217
+ .sortablelist-drag-preview-list {
20218
+ display: flex;
20219
+ flex-direction: column;
20220
+ gap: 4px;
20221
+ }
20222
+
20223
+ .sortablelist-drag-preview .dropdown-item.is-ghost {
20224
+ padding: 4px 8px;
20225
+ background-color: hsl(0, 0%, 18%);
20226
+ border-radius: 4px;
20227
+ color: hsl(0, 0%, 98%);
20228
+ }
20229
+
19320
20230
  /*
19321
20231
  ---
19322
20232
  name: Progressbar
@@ -19896,6 +20806,7 @@ tag:
19896
20806
  .gn-tab > ul {
19897
20807
  display: flex;
19898
20808
  border-bottom: 1px solid hsl(0, 0%, 48%);
20809
+ padding-bottom: 0px;
19899
20810
  }
19900
20811
  .gn-tab.is-center > ul {
19901
20812
  justify-content: center;
@@ -21045,7 +21956,7 @@ Gn.create('tree', {
21045
21956
  }
21046
21957
  .gn-tree li .tree-item .is-toggler::before {
21047
21958
  content: "\f0da";
21048
- font-family: "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21959
+ font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 5 Free", "FontAwesome";
21049
21960
  font-weight: 900;
21050
21961
  }
21051
21962
  .gn-tree li .tree-item + ul {