@syncfusion/ej2-splitbuttons 20.1.47 → 20.2.36

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 (109) hide show
  1. package/dist/ej2-splitbuttons.umd.min.js +2 -2
  2. package/dist/ej2-splitbuttons.umd.min.js.map +1 -1
  3. package/dist/es6/ej2-splitbuttons.es2015.js +11 -3
  4. package/dist/es6/ej2-splitbuttons.es2015.js.map +1 -1
  5. package/dist/es6/ej2-splitbuttons.es5.js +11 -3
  6. package/dist/es6/ej2-splitbuttons.es5.js.map +1 -1
  7. package/dist/global/ej2-splitbuttons.min.js +2 -2
  8. package/dist/global/ej2-splitbuttons.min.js.map +1 -1
  9. package/dist/global/index.d.ts +1 -1
  10. package/dist/ts/button-group/button-group.ts +84 -0
  11. package/dist/ts/common/common.ts +203 -0
  12. package/dist/ts/drop-down-button/drop-down-button.ts +806 -0
  13. package/dist/ts/progress-button/progress-button.ts +689 -0
  14. package/dist/ts/split-button/split-button.ts +501 -0
  15. package/helpers/e2e/dropdownbuttonHelper.js +55 -38
  16. package/helpers/e2e/index.js +10 -8
  17. package/helpers/e2e/progressbuttonHelper.js +52 -35
  18. package/helpers/e2e/splitbuttonHelper.js +58 -41
  19. package/package.json +7 -7
  20. package/src/drop-down-button/drop-down-button.js +11 -3
  21. package/styles/bootstrap-dark.css +4 -338
  22. package/styles/bootstrap.css +4 -333
  23. package/styles/bootstrap4.css +12 -342
  24. package/styles/bootstrap5-dark.css +20 -331
  25. package/styles/bootstrap5.css +18 -329
  26. package/styles/button-group/_fusionnew-definition.scss +31 -0
  27. package/styles/button-group/_layout.scss +1 -1
  28. package/styles/button-group/_material3-definition.scss +31 -0
  29. package/styles/button-group/_theme.scss +48 -12
  30. package/styles/button-group/bootstrap-dark.css +1 -114
  31. package/styles/button-group/bootstrap.css +1 -108
  32. package/styles/button-group/bootstrap4.css +5 -119
  33. package/styles/button-group/bootstrap5-dark.css +15 -108
  34. package/styles/button-group/bootstrap5.css +13 -106
  35. package/styles/button-group/fabric-dark.css +1 -114
  36. package/styles/button-group/fabric.css +1 -114
  37. package/styles/button-group/fluent-dark.css +1 -114
  38. package/styles/button-group/fluent.css +1 -114
  39. package/styles/button-group/highcontrast-light.css +1 -114
  40. package/styles/button-group/highcontrast.css +1 -126
  41. package/styles/button-group/material-dark.css +1 -114
  42. package/styles/button-group/material.css +1 -115
  43. package/styles/button-group/tailwind-dark.css +9 -114
  44. package/styles/button-group/tailwind.css +9 -114
  45. package/styles/drop-down-button/_fusionnew-definition.scss +51 -0
  46. package/styles/drop-down-button/_layout.scss +4 -2
  47. package/styles/drop-down-button/_material3-definition.scss +51 -0
  48. package/styles/drop-down-button/bootstrap-dark.css +2 -36
  49. package/styles/drop-down-button/bootstrap.css +2 -36
  50. package/styles/drop-down-button/bootstrap4.css +3 -36
  51. package/styles/drop-down-button/bootstrap5-dark.css +4 -35
  52. package/styles/drop-down-button/bootstrap5.css +4 -35
  53. package/styles/drop-down-button/fabric-dark.css +2 -36
  54. package/styles/drop-down-button/fabric.css +2 -36
  55. package/styles/drop-down-button/fluent-dark.css +2 -36
  56. package/styles/drop-down-button/fluent.css +2 -36
  57. package/styles/drop-down-button/highcontrast-light.css +2 -36
  58. package/styles/drop-down-button/highcontrast.css +2 -36
  59. package/styles/drop-down-button/icons/_fusionnew.scss +10 -0
  60. package/styles/drop-down-button/icons/_material3.scss +10 -0
  61. package/styles/drop-down-button/material-dark.css +2 -36
  62. package/styles/drop-down-button/material.css +2 -36
  63. package/styles/drop-down-button/tailwind-dark.css +4 -36
  64. package/styles/drop-down-button/tailwind.css +4 -36
  65. package/styles/fabric-dark.css +4 -338
  66. package/styles/fabric.css +4 -338
  67. package/styles/fluent-dark.css +5 -339
  68. package/styles/fluent.css +5 -339
  69. package/styles/highcontrast-light.css +4 -338
  70. package/styles/highcontrast.css +4 -350
  71. package/styles/material-dark.css +4 -338
  72. package/styles/material.css +4 -339
  73. package/styles/progress-button/_fluent-definition.scss +1 -1
  74. package/styles/progress-button/_fusionnew-definition.scss +21 -0
  75. package/styles/progress-button/_material3-definition.scss +21 -0
  76. package/styles/progress-button/bootstrap-dark.css +3 -120
  77. package/styles/progress-button/bootstrap.css +3 -120
  78. package/styles/progress-button/bootstrap4.css +3 -120
  79. package/styles/progress-button/bootstrap5-dark.css +3 -124
  80. package/styles/progress-button/bootstrap5.css +3 -124
  81. package/styles/progress-button/fabric-dark.css +3 -120
  82. package/styles/progress-button/fabric.css +3 -120
  83. package/styles/progress-button/fluent-dark.css +4 -125
  84. package/styles/progress-button/fluent.css +4 -125
  85. package/styles/progress-button/highcontrast-light.css +3 -120
  86. package/styles/progress-button/highcontrast.css +3 -120
  87. package/styles/progress-button/material-dark.css +3 -120
  88. package/styles/progress-button/material.css +3 -120
  89. package/styles/progress-button/tailwind-dark.css +3 -124
  90. package/styles/progress-button/tailwind.css +3 -124
  91. package/styles/split-button/_fusionnew-definition.scss +25 -0
  92. package/styles/split-button/_material3-definition.scss +25 -0
  93. package/styles/split-button/bootstrap-dark.css +1 -71
  94. package/styles/split-button/bootstrap.css +1 -71
  95. package/styles/split-button/bootstrap4.css +4 -70
  96. package/styles/split-button/bootstrap5-dark.css +1 -67
  97. package/styles/split-button/bootstrap5.css +1 -67
  98. package/styles/split-button/fabric-dark.css +1 -71
  99. package/styles/split-button/fabric.css +1 -71
  100. package/styles/split-button/fluent-dark.css +1 -67
  101. package/styles/split-button/fluent.css +1 -67
  102. package/styles/split-button/highcontrast-light.css +1 -71
  103. package/styles/split-button/highcontrast.css +1 -71
  104. package/styles/split-button/material-dark.css +1 -71
  105. package/styles/split-button/material.css +1 -71
  106. package/styles/split-button/tailwind-dark.css +1 -71
  107. package/styles/split-button/tailwind.css +1 -71
  108. package/styles/tailwind-dark.css +14 -343
  109. package/styles/tailwind.css +14 -343
@@ -0,0 +1,84 @@
1
+ import { addClass, createElement as internalCreateElement, isNullOrUndefined } from '@syncfusion/ej2-base';
2
+ import { ButtonModel, Button } from '@syncfusion/ej2-buttons';
3
+
4
+ /**
5
+ * Initialize ButtonGroup CSS component with specified properties.
6
+ * ```html
7
+ * <div id='buttongroup'>
8
+ * <button></button>
9
+ * <button></button>
10
+ * <button></button>
11
+ * </div>
12
+ * ```
13
+ * ```typescript
14
+ * createButtonGroup('#buttongroup', {
15
+ * cssClass: 'e-outline',
16
+ * buttons: [
17
+ * { content: 'Day' },
18
+ * { content: 'Week' },
19
+ * { content: 'Work Week'}
20
+ * ]
21
+ * });
22
+ * ```
23
+ *
24
+ * @param {string} selector
25
+ * @param {CreateButtonGroupModel} options
26
+ * @returns HTMLElement
27
+ */
28
+
29
+ /**
30
+ * Creates button group.
31
+ *
32
+ * @param {string} selector - Specifies the selector.
33
+ * @param {CreateButtonGroupModel} options - Specifies the button group model.
34
+ * @param {Function} createElement - Specifies the element.
35
+ * @returns {HTMLElement} - Button group element.
36
+ */
37
+ export function createButtonGroup(selector: string, options: CreateButtonGroupModel = {}, createElement?: Function): HTMLElement {
38
+ let child: Element;
39
+ let btnElem: Element;
40
+ let nextChild: Element;
41
+ let btnModel: ButtonModel | null;
42
+ if (isNullOrUndefined(createElement)) {
43
+ createElement = internalCreateElement;
44
+ }
45
+ const wrapper: HTMLElement = document.querySelector(selector) as HTMLElement;
46
+ addClass([wrapper], ['e-btn-group', 'e-css']);
47
+ wrapper.setAttribute('role', 'group');
48
+ const childs: HTMLCollection = wrapper.children;
49
+ options.buttons = options.buttons || [] as ButtonModel[];
50
+ for (let i: number = 0, j: number = 0; j < childs.length; i++, j++) {
51
+ child = childs[j];
52
+ btnModel = options.buttons[i];
53
+ if (btnModel !== null) {
54
+ if (child.tagName === 'BUTTON') {
55
+ btnElem = child;
56
+ } else {
57
+ btnElem = createElement('label');
58
+ nextChild = childs[j + 1];
59
+ if (nextChild) {
60
+ wrapper.insertBefore(btnElem, nextChild);
61
+ } else {
62
+ wrapper.appendChild(btnElem);
63
+ }
64
+ if (child.id) {
65
+ btnElem.setAttribute('for', child.id);
66
+ }
67
+ if (btnModel && btnModel.disabled) {
68
+ (child as HTMLInputElement).disabled = true;
69
+ }
70
+ j++;
71
+ }
72
+ if (options.cssClass && btnModel && !btnModel.cssClass) {
73
+ btnModel.cssClass = options.cssClass;
74
+ }
75
+ new Button(btnModel || {}, btnElem as HTMLButtonElement);
76
+ }
77
+ }
78
+ return wrapper;
79
+ }
80
+
81
+ export interface CreateButtonGroupModel {
82
+ cssClass?: string;
83
+ buttons?: (ButtonModel | null)[];
84
+ }
@@ -0,0 +1,203 @@
1
+ import { ChildProperty, extend, deleteObject, Property, BaseEventArgs, addClass, isNullOrUndefined } from '@syncfusion/ej2-base';
2
+ import { ItemModel } from './common-model';
3
+ /**
4
+ * Defines the icon position of Split Button.
5
+ */
6
+ export type SplitButtonIconPosition = 'Left' | 'Top';
7
+
8
+ /**
9
+ * @param {Object} props - Specifies the properties
10
+ * @param {string[]} model - Specifies the model
11
+ * @returns {Object} Component Model
12
+ */
13
+ export function getModel(props: Object, model: string[]): Object {
14
+
15
+ const obj: Object = extend({}, props);
16
+ for (const prop of Object.keys(obj)) {
17
+ if ((model).indexOf(prop) < 0) {
18
+ deleteObject(obj, prop);
19
+ }
20
+ }
21
+
22
+ return obj as Object;
23
+ }
24
+
25
+ /** @hidden
26
+ * @param {HTMLElement} ul - Specifies the UL element
27
+ * @param {number} keyCode - Specifies the keycode
28
+ * @returns {void}
29
+ */
30
+ export function upDownKeyHandler(ul: HTMLElement, keyCode: number): void {
31
+ const defaultIdx: number = keyCode === 40 ? 0 : ul.childElementCount - 1;
32
+ let liIdx: number = defaultIdx;
33
+ let li: Element;
34
+ const selectedLi: Element = ul.querySelector('.e-selected');
35
+ if (selectedLi) { selectedLi.classList.remove('e-selected'); }
36
+ for (let i: number = 0, len: number = ul.children.length; i < len; i++) {
37
+ if (ul.children[i].classList.contains('e-focused')) {
38
+ li = ul.children[i];
39
+ liIdx = i;
40
+ li.classList.remove('e-focused');
41
+ if (keyCode === 40) {
42
+ liIdx++;
43
+ } else {
44
+ liIdx--;
45
+ }
46
+ if (liIdx === (keyCode === 40 ? ul.childElementCount : -1)) {
47
+ liIdx = defaultIdx;
48
+ }
49
+ }
50
+ }
51
+ li = ul.children[liIdx];
52
+ liIdx = isValidLI(ul, li, liIdx, keyCode);
53
+ if (liIdx !== -1) {
54
+ addClass([ul.children[liIdx]], 'e-focused');
55
+ (ul.children[liIdx] as HTMLElement).focus();
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Get Valid LI element
61
+ *
62
+ * @param {HTMLElement} ul - Specifies the UL element
63
+ * @param {Element} li - Specifies the LI element
64
+ * @param {number} index - Specifies the index
65
+ * @param {number} keyCode - Specifies the keycode
66
+ * @param {number} count - Specifies the count
67
+ * @returns {number} - Index
68
+ */
69
+ function isValidLI(ul: HTMLElement, li: Element, index: number, keyCode: number, count: number = 0): number {
70
+ if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {
71
+ if (index === (keyCode === 40 ? ul.childElementCount - 1 : 0)) {
72
+ index = keyCode === 40 ? 0 : ul.childElementCount - 1;
73
+ } else {
74
+ if (keyCode === 40) {
75
+ index++;
76
+ } else {
77
+ index--;
78
+ }
79
+ }
80
+ }
81
+ li = ul.children[index];
82
+ if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {
83
+ count++;
84
+ if (count === ul.childElementCount) {
85
+ return index = -1;
86
+ }
87
+ index = isValidLI(ul, li, index, keyCode, count);
88
+ }
89
+ return index;
90
+ }
91
+
92
+ /** @hidden
93
+ * @param {HTMLElement} popup - Specifies the popup element.
94
+ * @returns {void}
95
+ */
96
+ export function setBlankIconStyle(popup: HTMLElement): void {
97
+ const blankIconList: HTMLElement[] = [].slice.call(popup.getElementsByClassName('e-blank-icon'));
98
+ if (!blankIconList.length) { return; }
99
+ let iconLi: HTMLElement = popup.querySelector('.e-item:not(.e-blank-icon):not(.e-separator)') as HTMLElement;
100
+ if (isNullOrUndefined(iconLi)) {return; }
101
+ if (iconLi.classList.contains('e-url')) { iconLi = iconLi.querySelector('.e-menu-url'); }
102
+ const icon: HTMLElement = iconLi.querySelector('.e-menu-icon') as HTMLElement;
103
+ let cssProp: { padding: string, margin: string };
104
+ const enableRtl: boolean = popup.classList.contains('e-rtl');
105
+ if (enableRtl) {
106
+ cssProp = { padding: 'paddingRight', margin: 'marginLeft' };
107
+ } else {
108
+ cssProp = { padding: 'paddingLeft', margin: 'marginRight' };
109
+ }
110
+ /* eslint-disable */
111
+ let size: string = `${parseInt(getComputedStyle(icon).fontSize, 10) + parseInt(
112
+ (enableRtl ? (getComputedStyle(icon) as any)[cssProp.margin] : (getComputedStyle(icon) as any)[cssProp.margin]), 10)
113
+ + parseInt(getComputedStyle(iconLi).paddingLeft, 10)}px`;
114
+ blankIconList.forEach((li: HTMLElement): void => {
115
+ if (li.classList.contains('e-url')) {
116
+ ((li.querySelector('.e-menu-url') as HTMLElement).style as any)[cssProp.padding] = size;
117
+ } else {
118
+ (li.style as any)[cssProp.padding] = size;
119
+ }
120
+ });
121
+ /* eslint-enable */
122
+ }
123
+
124
+ /**
125
+ * Defines the items of Split Button/DropDownButton.
126
+ */
127
+ export class Item extends ChildProperty<Item> {
128
+ /**
129
+ * Defines class/multiple classes separated by a space for the item that is used to include an icon.
130
+ * Action item can include font icon and sprite image.
131
+ *
132
+ * @default ''
133
+ */
134
+ @Property('')
135
+ public iconCss: string;
136
+
137
+ /**
138
+ * Specifies the id for item.
139
+ *
140
+ * @default ''
141
+ */
142
+ @Property('')
143
+ public id: string;
144
+
145
+ /**
146
+ * Specifies separator between the items. Separator are horizontal lines used to group action items.
147
+ *
148
+ * @default false
149
+ */
150
+ @Property(false)
151
+ public separator: boolean;
152
+
153
+ /**
154
+ * Specifies text for item.
155
+ *
156
+ * @default ''
157
+ */
158
+ @Property('')
159
+ public text: string;
160
+
161
+ /**
162
+ * Specifies url for item that creates the anchor link to navigate to the url provided.
163
+ *
164
+ * @default ''
165
+ */
166
+ @Property('')
167
+ public url: string;
168
+
169
+ /**
170
+ * Used to enable or disable the item.
171
+ *
172
+ * @default false
173
+ */
174
+ @Property(false)
175
+ public disabled: boolean;
176
+ }
177
+
178
+ /**
179
+ * Interface for before item render / select event.
180
+ */
181
+ export interface MenuEventArgs extends BaseEventArgs {
182
+ element: HTMLElement;
183
+ item: ItemModel;
184
+ }
185
+
186
+ /**
187
+ * Interface for before open / close event.
188
+ */
189
+ export interface BeforeOpenCloseMenuEventArgs extends BaseEventArgs {
190
+ element: HTMLElement;
191
+ items: ItemModel[];
192
+ event: Event;
193
+ cancel?: boolean;
194
+ }
195
+
196
+ /**
197
+ * Interface for open/close event.
198
+ */
199
+ export interface OpenCloseMenuEventArgs extends BaseEventArgs {
200
+ element: HTMLElement;
201
+ items: ItemModel[];
202
+ parentItem?: ItemModel;
203
+ }