@idevs/corelib 0.0.96 → 1.0.0

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 (117) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/README.md +221 -24
  3. package/dist/editors/checkboxButtonEditor.d.ts +3 -1
  4. package/dist/editors/checkboxButtonEditor.d.ts.map +1 -0
  5. package/dist/editors/checkboxButtonEditor.js +28 -18
  6. package/dist/editors/checkboxButtonEditor.js.map +1 -1
  7. package/dist/editors/dateMonthEditor.d.ts +3 -1
  8. package/dist/editors/dateMonthEditor.d.ts.map +1 -0
  9. package/dist/editors/dateMonthEditor.js +14 -7
  10. package/dist/editors/dateMonthEditor.js.map +1 -1
  11. package/dist/editors/index.d.ts +2 -1
  12. package/dist/editors/index.d.ts.map +1 -0
  13. package/dist/editors/index.js +18 -2
  14. package/dist/editors/index.js.map +1 -1
  15. package/dist/formatters/formatters.d.ts +2 -1
  16. package/dist/formatters/formatters.d.ts.map +1 -0
  17. package/dist/formatters/formatters.js +39 -25
  18. package/dist/formatters/formatters.js.map +1 -1
  19. package/dist/formatters/index.d.ts +2 -1
  20. package/dist/formatters/index.d.ts.map +1 -0
  21. package/dist/formatters/index.js +17 -1
  22. package/dist/formatters/index.js.map +1 -1
  23. package/dist/globals/index.d.ts +16 -9
  24. package/dist/globals/index.d.ts.map +1 -0
  25. package/dist/globals/index.js +65 -105
  26. package/dist/globals/index.js.map +1 -1
  27. package/dist/helpers/custom-fonts.d.ts +4 -0
  28. package/dist/helpers/custom-fonts.d.ts.map +1 -0
  29. package/dist/helpers/custom-fonts.js +14 -0
  30. package/dist/helpers/custom-fonts.js.map +1 -0
  31. package/dist/helpers/dialogHelper.d.ts +6 -9
  32. package/dist/helpers/dialogHelper.d.ts.map +1 -0
  33. package/dist/helpers/dialogHelper.js +17 -10
  34. package/dist/helpers/dialogHelper.js.map +1 -1
  35. package/dist/helpers/excelExportHelper.d.ts +2 -1
  36. package/dist/helpers/excelExportHelper.d.ts.map +1 -0
  37. package/dist/helpers/excelExportHelper.js +7 -4
  38. package/dist/helpers/excelExportHelper.js.map +1 -1
  39. package/dist/helpers/gridHelper.d.ts +2 -1
  40. package/dist/helpers/gridHelper.d.ts.map +1 -0
  41. package/dist/helpers/gridHelper.js +14 -9
  42. package/dist/helpers/gridHelper.js.map +1 -1
  43. package/dist/helpers/index.d.ts +2 -1
  44. package/dist/helpers/index.d.ts.map +1 -0
  45. package/dist/helpers/index.js +20 -4
  46. package/dist/helpers/index.js.map +1 -1
  47. package/dist/helpers/pdfExportHelper.d.ts +10 -1
  48. package/dist/helpers/pdfExportHelper.d.ts.map +1 -0
  49. package/dist/helpers/pdfExportHelper.js +169 -7
  50. package/dist/helpers/pdfExportHelper.js.map +1 -1
  51. package/dist/index.d.ts +5 -2
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +26 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/types/common.d.ts +12 -0
  56. package/dist/types/common.d.ts.map +1 -0
  57. package/dist/types/common.js +3 -0
  58. package/dist/types/common.js.map +1 -0
  59. package/dist/types/export.d.ts +50 -0
  60. package/dist/types/export.d.ts.map +1 -0
  61. package/dist/types/export.js +24 -0
  62. package/dist/types/export.js.map +1 -0
  63. package/dist/types/index.d.ts +3 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +19 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/dist/ui/DropdownToolButton.d.ts +2 -1
  68. package/dist/ui/DropdownToolButton.d.ts.map +1 -0
  69. package/dist/ui/DropdownToolButton.js +15 -11
  70. package/dist/ui/DropdownToolButton.js.map +1 -1
  71. package/dist/ui/ToggleToolButton.d.ts +2 -1
  72. package/dist/ui/ToggleToolButton.d.ts.map +1 -0
  73. package/dist/ui/ToggleToolButton.js +7 -3
  74. package/dist/ui/ToggleToolButton.js.map +1 -1
  75. package/dist/ui/index.d.ts +2 -1
  76. package/dist/ui/index.d.ts.map +1 -0
  77. package/dist/ui/index.js +18 -2
  78. package/dist/ui/index.js.map +1 -1
  79. package/dist/utils/date.d.ts +16 -0
  80. package/dist/utils/date.d.ts.map +1 -0
  81. package/dist/utils/date.js +85 -0
  82. package/dist/utils/date.js.map +1 -0
  83. package/dist/utils/dom.d.ts +13 -0
  84. package/dist/utils/dom.d.ts.map +1 -0
  85. package/dist/utils/dom.js +78 -0
  86. package/dist/utils/dom.js.map +1 -0
  87. package/dist/utils/format.d.ts +22 -0
  88. package/dist/utils/format.d.ts.map +1 -0
  89. package/dist/utils/format.js +100 -0
  90. package/dist/utils/format.js.map +1 -0
  91. package/dist/utils/index.d.ts +4 -0
  92. package/dist/utils/index.d.ts.map +1 -0
  93. package/dist/utils/index.js +20 -0
  94. package/dist/utils/index.js.map +1 -0
  95. package/package.json +49 -26
  96. package/dist/ui/ToolDropdownButton.d.ts +0 -49
  97. package/dist/ui/ToolDropdownButton.js +0 -230
  98. package/dist/ui/ToolDropdownButton.js.map +0 -1
  99. package/src/editors/checkboxButtonEditor.ts +0 -184
  100. package/src/editors/dateMonthEditor.ts +0 -47
  101. package/src/editors/index.ts +0 -2
  102. package/src/formatters/formatters.ts +0 -181
  103. package/src/formatters/index.ts +0 -1
  104. package/src/globals/index.ts +0 -385
  105. package/src/helpers/dialogHelper.ts +0 -143
  106. package/src/helpers/excelExportHelper.ts +0 -29
  107. package/src/helpers/gridHelper.ts +0 -107
  108. package/src/helpers/html2pdf.d.ts +0 -19
  109. package/src/helpers/index.ts +0 -4
  110. package/src/helpers/pdfExportHelper.ts +0 -63
  111. package/src/index.ts +0 -5
  112. package/src/tsconfig.json +0 -29
  113. package/src/ui/DropdownToolButton.ts +0 -305
  114. package/src/ui/ToggleToolButton.ts +0 -71
  115. package/src/ui/index.ts +0 -2
  116. /package/{css → dist/css}/idevs.dropdown.css +0 -0
  117. /package/{css → dist/css}/idevs.print.css +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK/C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,MAAM,CASpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,SAAS,IAAI;IACb,SAAS,IAAI;IACb,YAAY,IAAI;IAChB,aAAa,IAAI;IACjB,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,cAAc,IAAI;IAClB,cAAc,IAAI;IAClB,YAAY,IAAI;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAkDpF"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * Formatting utility functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RoundingMethod = void 0;
7
+ exports.toTimeString = toTimeString;
8
+ exports.dateToNumber = dateToNumber;
9
+ exports.toDecimalString = toDecimalString;
10
+ exports.truncateString = truncateString;
11
+ exports.stringToNumber = stringToNumber;
12
+ exports.roundByMethod = roundByMethod;
13
+ function toTimeString(value) {
14
+ const hours = `0${Math.floor(value / 60)}`.slice(-2);
15
+ const minutes = `0${value % 60}`.slice(-2);
16
+ return `${hours}:${minutes}`;
17
+ }
18
+ function dateToNumber(date) {
19
+ const hours = date.getHours();
20
+ const minutes = date.getMinutes();
21
+ const seconds = date.getSeconds();
22
+ return hours * 60 + minutes + seconds / 60;
23
+ }
24
+ function toDecimalString(value, precision = 0) {
25
+ const options = {
26
+ minimumFractionDigits: precision,
27
+ maximumFractionDigits: precision,
28
+ };
29
+ let formatted = Intl.NumberFormat('en-US', options).format(value);
30
+ const parsed = parseFloat(formatted.replace(/,/g, '')).toString();
31
+ return Intl.NumberFormat('en-US', options).format(parseFloat(parsed));
32
+ }
33
+ function truncateString(str, maxLength) {
34
+ return str.length > maxLength ? str.substring(0, maxLength - 1) + '…' : str;
35
+ }
36
+ function stringToNumber(str) {
37
+ return str ? parseFloat(str.replace(/,/g, '')) : 0;
38
+ }
39
+ var RoundingMethod;
40
+ (function (RoundingMethod) {
41
+ RoundingMethod[RoundingMethod["None"] = 0] = "None";
42
+ RoundingMethod[RoundingMethod["Quarter25"] = 1] = "Quarter25";
43
+ RoundingMethod[RoundingMethod["Quarter50"] = 2] = "Quarter50";
44
+ RoundingMethod[RoundingMethod["FloorToWhole"] = 3] = "FloorToWhole";
45
+ RoundingMethod[RoundingMethod["CeilQuarter25"] = 4] = "CeilQuarter25";
46
+ RoundingMethod[RoundingMethod["CeilQuarter50"] = 5] = "CeilQuarter50";
47
+ RoundingMethod[RoundingMethod["CeilToWhole"] = 6] = "CeilToWhole";
48
+ RoundingMethod[RoundingMethod["RoundQuarter25"] = 7] = "RoundQuarter25";
49
+ RoundingMethod[RoundingMethod["RoundQuarter50"] = 8] = "RoundQuarter50";
50
+ RoundingMethod[RoundingMethod["RoundToWhole"] = 9] = "RoundToWhole";
51
+ })(RoundingMethod || (exports.RoundingMethod = RoundingMethod = {}));
52
+ function roundByMethod(value, method) {
53
+ const input = typeof value === 'string' ? parseFloat(value) : value;
54
+ let result = Number.isNaN(input) ? 0 : input;
55
+ if (result === 0)
56
+ return 0;
57
+ const rounded = parseFloat(result.toFixed(2));
58
+ switch (method) {
59
+ case RoundingMethod.Quarter25:
60
+ result = rounded - (parseFloat(((rounded % 1) * 100).toFixed(2)) % 25) / 100;
61
+ break;
62
+ case RoundingMethod.Quarter50:
63
+ result = rounded - (parseFloat(((rounded % 1) * 100).toFixed(2)) % 50) / 100;
64
+ break;
65
+ case RoundingMethod.FloorToWhole:
66
+ result = Math.floor(rounded);
67
+ break;
68
+ case RoundingMethod.CeilQuarter25:
69
+ result =
70
+ Math.floor(rounded) +
71
+ (Math.floor((rounded % 1) * 100) + (25 - (Math.floor((rounded % 1) * 100) % 25))) / 100;
72
+ break;
73
+ case RoundingMethod.CeilQuarter50:
74
+ result =
75
+ Math.floor(rounded) +
76
+ (Math.floor((rounded % 1) * 100) + (50 - (Math.floor((rounded % 1) * 100) % 50))) / 100;
77
+ break;
78
+ case RoundingMethod.CeilToWhole:
79
+ result = Math.ceil(rounded);
80
+ break;
81
+ case RoundingMethod.RoundQuarter25:
82
+ result =
83
+ Math.floor(rounded) +
84
+ (parseFloat((parseFloat(((rounded % 1) * 100).toString()) / 25).toFixed(0)) * 25) / 100;
85
+ break;
86
+ case RoundingMethod.RoundQuarter50:
87
+ result =
88
+ Math.floor(rounded) +
89
+ (parseFloat((parseFloat(((rounded % 1) * 100).toString()) / 50).toFixed(0)) * 50) / 100;
90
+ break;
91
+ case RoundingMethod.RoundToWhole:
92
+ result = parseFloat(rounded.toFixed(0));
93
+ break;
94
+ default:
95
+ result = rounded;
96
+ break;
97
+ }
98
+ return result;
99
+ }
100
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './date';
2
+ export * from './dom';
3
+ export * from './format';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./date"), exports);
18
+ __exportStar(require("./dom"), exports);
19
+ __exportStar(require("./format"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAsB;AACtB,wCAAqB;AACrB,2CAAwB"}
package/package.json CHANGED
@@ -1,13 +1,30 @@
1
1
  {
2
2
  "name": "@idevs/corelib",
3
- "version": "0.0.96",
4
- "description": "Extended library for Serenity Framework",
5
- "main": "src/index.js",
3
+ "version": "1.0.0",
4
+ "description": "Extended library components and utilities for Serenity Framework",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
6
15
  "scripts": {
16
+ "build": "tsc && npm run build:css",
17
+ "build:css": "cp -r css dist/",
18
+ "build:watch": "tsc --watch",
19
+ "clean": "rm -rf dist",
20
+ "dev": "npm run build:watch",
21
+ "format": "prettier --write \"src/**/*.{ts,js,json}\" \"*.{md,json}\"",
22
+ "format:check": "prettier --check \"src/**/*.{ts,js,json}\" \"*.{md,json}\"",
23
+ "lint": "eslint src",
24
+ "lint:fix": "eslint src --fix",
25
+ "prepublishOnly": "npm run clean && npm run build",
7
26
  "test": "echo \"Error: no test specified\" && exit 1",
8
- "build": "tsc -p ./src/tsconfig.json",
9
- "format": "prettier --ignore-path .gitignore --write \"src/**/*.+(js|ts|json)\" \"dist/**/*.+(js|ts|json)\"",
10
- "lint": "eslint --ignore-path .eslintignore -c .eslintrc --ext .js,.ts ./src"
27
+ "typecheck": "tsc --noEmit"
11
28
  },
12
29
  "keywords": [
13
30
  "idevs",
@@ -18,9 +35,10 @@
18
35
  "author": "Sarawut Phaekuntod",
19
36
  "license": "MIT",
20
37
  "files": [
21
- "./dist/**/*",
22
- "./src/**/*",
23
- "./css/**/*"
38
+ "dist/**/*",
39
+ "README.md",
40
+ "LICENSE",
41
+ "CHANGELOG.md"
24
42
  ],
25
43
  "publishConfig": {
26
44
  "access": "public"
@@ -30,25 +48,30 @@
30
48
  "url": "git+https://github.com/klomkling/idevs.corelib"
31
49
  },
32
50
  "dependencies": {
33
- "@serenity-is/corelib": "^8.6.2",
34
- "@serenity-is/sleekgrid": "^1.9.0",
35
- "@types/jquery": "^3.5.29",
36
- "@types/jquery.validation": "^1.16.10",
37
- "@types/jqueryui": "^1.12.22",
38
- "@types/toastr": "^2.1.43",
39
- "@typescript-eslint/typescript-estree": "^8.1.0"
51
+ "@serenity-is/corelib": "^8.8.6",
52
+ "@serenity-is/sleekgrid": "^1.9.6",
53
+ "html-to-pdfmake": "^2.5.30",
54
+ "pdfmake": "^0.2.20",
55
+ "html2pdf.js": "^0.10.3",
56
+ "jspdf": "^3.0.1"
40
57
  },
41
58
  "devDependencies": {
42
- "@serenity-is/tsbuild": "^8.6.0",
59
+ "@eslint/js": "^9.33.0",
60
+ "@serenity-is/tsbuild": "^8.8.7",
61
+ "@types/html-to-pdfmake": "^2.4.4",
62
+ "@types/jquery": "^3.5.32",
63
+ "@types/jquery.validation": "^1.17.0",
64
+ "@types/jqueryui": "^1.12.24",
43
65
  "@types/jspdf": "^2.0.0",
44
- "@typescript-eslint/eslint-plugin": "^5.62.0",
45
- "@typescript-eslint/parser": "^5.62.0",
46
- "bootstrap": "^5.3.3",
47
- "eslint": "^8.57.0",
48
- "eslint-config-prettier": "^8.10.0",
49
- "html2pdf.js": "^0.10.2",
50
- "jspdf": "^2.5.1",
51
- "prettier": "^2.8.8",
52
- "typescript": "^5.5.4"
66
+ "@types/pdfmake": "^0.2.11",
67
+ "@types/toastr": "^2.1.43",
68
+ "@typescript-eslint/eslint-plugin": "^8.39.1",
69
+ "@typescript-eslint/parser": "^8.39.1",
70
+ "@typescript-eslint/typescript-estree": "^8.39.1",
71
+ "bootstrap": "^5.3.7",
72
+ "eslint": "^9.33.0",
73
+ "eslint-config-prettier": "^10.1.8",
74
+ "prettier": "^3.6.2",
75
+ "typescript": "^5.9.2"
53
76
  }
54
77
  }
@@ -1,49 +0,0 @@
1
- /// <reference types="jquery" />
2
- export type ToolDropdownButtonOptions = {
3
- title?: string;
4
- cssClass?: string;
5
- icon?: string;
6
- disabled?: boolean;
7
- dropdownMenuPosition?: 'right';
8
- isDropUp?: boolean;
9
- };
10
- export type ToolDropdownButtonItem = {
11
- key: string;
12
- title?: string;
13
- hint?: string;
14
- cssClass?: string;
15
- icon?: string;
16
- onClick?: (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => void;
17
- isSeparator?: boolean;
18
- disabled?: boolean;
19
- isDropdownHeader?: boolean;
20
- dropdownHeaderTitle?: string;
21
- };
22
- export type ToolDropdownSideButtonItem = {
23
- key: string;
24
- title?: string;
25
- hint?: string;
26
- cssClass?: string;
27
- icon?: string;
28
- onClick?: (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => void;
29
- disabled?: boolean;
30
- };
31
- export declare class ToolDropdownButton {
32
- element: JQuery;
33
- private isDisabled;
34
- private itemDisablingState;
35
- private options;
36
- constructor(container: JQuery, buttons: ToolDropdownButtonItem[], opt?: ToolDropdownButtonOptions);
37
- private getDisablingStateItem;
38
- private setDisablingStateItem;
39
- private removeDisablingStateItem;
40
- private buildBaseDropdown;
41
- addDropdownItems(buttons: ToolDropdownButtonItem[]): void;
42
- addDropdownItem(button: ToolDropdownButtonItem, idx?: number): void;
43
- enableDropdown(enable: boolean): void;
44
- enableDropdownItemByKey(key: string, enable: boolean): void;
45
- enableSideButtonByKey(key: string, enable: boolean): void;
46
- removeDropdownItem(key: string): void;
47
- removeSideButtonItem(key: string): void;
48
- addSideButtonItem(button: ToolDropdownSideButtonItem, idx?: number): void;
49
- }
@@ -1,230 +0,0 @@
1
- /// <reference types="bootstrap" />
2
- import { coalesce, first, isEmptyOrNull, tryFirst } from '@serenity-is/corelib/q';
3
- export class ToolDropdownButton {
4
- constructor(container, buttons, opt) {
5
- this.element = null;
6
- this.isDisabled = false;
7
- this.itemDisablingState = [];
8
- this.options = opt || {};
9
- this.isDisabled = this.options.disabled || false;
10
- this.element = this.buildBaseDropdown();
11
- this.addDropdownItems(buttons);
12
- this.element.on('click', () => {
13
- $('.dropdown-toggle', this.element).dropdown('toggle');
14
- });
15
- container.append(this.element);
16
- }
17
- getDisablingStateItem(key) {
18
- if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {
19
- return first(this.itemDisablingState, x => x.key == key).disabled || false;
20
- }
21
- return false;
22
- }
23
- setDisablingStateItem(key, value) {
24
- if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {
25
- first(this.itemDisablingState, x => x.key == key).disabled = value || false;
26
- return;
27
- }
28
- this.itemDisablingState.push({ key: key, disabled: value || false });
29
- }
30
- removeDisablingStateItem(key) {
31
- this.itemDisablingState.some((item, idx) => {
32
- if (item.key == key) {
33
- this.itemDisablingState.splice(idx, 1);
34
- return true;
35
- }
36
- });
37
- }
38
- buildBaseDropdown() {
39
- const dropdownTemplate = `<div class="buttons-inner dropdown" style="overflow: visible">
40
- <div class="idevs-tool-dropdown-button tool-button icon-tool-button ${coalesce(this.options.cssClass, '')} ${this.options.isDropUp ? 'dropup' : ''} ${this.isDisabled ? 'disabled' : ''}" style="cursor: unset;">
41
- <div class="button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}"
42
- data-bs-toggle="dropdown"
43
- style="cursor: pointer;">
44
- <span class="button-inner">
45
- <i class="${this.options.icon}"></i>
46
- ${coalesce(this.options.title, '')}
47
- </span>
48
- <i class="caret"></i>
49
- </div>
50
- <ul class="dropdown-menu ${this.options.dropdownMenuPosition == 'right' ? 'dropdown-menu-right' : ''}"></ul>
51
- </div>
52
- </div>`;
53
- return $(dropdownTemplate);
54
- }
55
- addDropdownItems(buttons) {
56
- if (buttons && buttons.length > 0) {
57
- buttons.forEach(button => {
58
- this.addDropdownItem(button);
59
- });
60
- }
61
- }
62
- addDropdownItem(button, idx) {
63
- if (!isEmptyOrNull(button.key)) {
64
- if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {
65
- alert(`Dropdown has existed key: ${button.key}`);
66
- return;
67
- }
68
- this.setDisablingStateItem(button.key, button.disabled || false);
69
- }
70
- let dropdownItemElement;
71
- if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {
72
- dropdownItemElement = $(`<li class="dropdown-header ${coalesce(button.cssClass, '')}">${button.dropdownHeaderTitle}</li>`);
73
- }
74
- else {
75
- if (button.isSeparator) {
76
- dropdownItemElement = $(`<li class="dropdown-divider"></li>`);
77
- }
78
- else {
79
- dropdownItemElement = $(`<li class="${button.disabled ? 'disabled' : ''}"
80
- title="${coalesce(button.hint, '')}"
81
- data-idevs-key="${coalesce(button.key, '')}">
82
- <a href="#" class="${coalesce(button.cssClass, 'dropdown-item')}">
83
- <i class="${coalesce(button.icon, '')}"></i>
84
- ${button.title}
85
- </a>
86
- </li>`);
87
- dropdownItemElement.on('click', (e) => {
88
- e.preventDefault();
89
- if (this.isDisabled) {
90
- return;
91
- }
92
- let buttonIsDisabled = button.disabled;
93
- if (!isEmptyOrNull(button.key)) {
94
- buttonIsDisabled = this.getDisablingStateItem(button.key);
95
- }
96
- if (buttonIsDisabled) {
97
- return;
98
- }
99
- button.onClick(e);
100
- });
101
- }
102
- }
103
- if (idx === null || typeof idx === 'undefined') {
104
- this.element.find('.dropdown-menu').append(dropdownItemElement);
105
- return;
106
- }
107
- if (idx <= 0) {
108
- this.element.find('.dropdown-menu').prepend(dropdownItemElement);
109
- return;
110
- }
111
- const nbrOfButtons = this.element.find(`.dropdown-menu > li`).length;
112
- if (idx > nbrOfButtons) {
113
- idx = nbrOfButtons;
114
- }
115
- this.element.find(`.dropdown-menu > li:nth-child(${idx})`).after(dropdownItemElement);
116
- }
117
- enableDropdown(enable) {
118
- const drd = this.element.find('.dropdown').first();
119
- if (drd) {
120
- if (enable) {
121
- if (drd.hasClass('disabled')) {
122
- drd.removeClass('disabled');
123
- }
124
- }
125
- else {
126
- if (!drd.hasClass('disabled')) {
127
- drd.addClass('disabled');
128
- }
129
- }
130
- }
131
- const drdToggle = this.element.find('.dropdown-toggle').first();
132
- if (drdToggle) {
133
- if (enable) {
134
- if (drdToggle.hasClass('disabled')) {
135
- drd.removeClass('disabled');
136
- }
137
- else {
138
- if (!drdToggle.hasClass('disabled')) {
139
- drdToggle.addClass('disabled');
140
- }
141
- }
142
- }
143
- }
144
- this.isDisabled = !enable;
145
- }
146
- enableDropdownItemByKey(key, enable) {
147
- const drdItem = this.element.find(`.dropdown-menu li[data-idevs-key="${key}"]`).first();
148
- if (drdItem) {
149
- if (enable) {
150
- if (drdItem.hasClass('disabled')) {
151
- drdItem.removeClass('disabled');
152
- }
153
- }
154
- else {
155
- if (!drdItem.hasClass('disabled')) {
156
- drdItem.addClass('disabled');
157
- }
158
- }
159
- }
160
- this.setDisablingStateItem(key, !enable);
161
- }
162
- enableSideButtonByKey(key, enable) {
163
- const tButton = this.element.find(`.tool-button[data-idevs-key="${key}"]`).first();
164
- if (tButton) {
165
- if (enable) {
166
- if (tButton.hasClass('disabled')) {
167
- tButton.removeClass('disabled');
168
- }
169
- }
170
- else {
171
- if (!tButton.hasClass('disabled')) {
172
- tButton.addClass('disabled');
173
- }
174
- }
175
- }
176
- this.setDisablingStateItem(key, !enable);
177
- }
178
- removeDropdownItem(key) {
179
- this.element.find(`.dropdown-menu li[data-idevs-key="${key}"]`).remove();
180
- this.removeDisablingStateItem(key);
181
- }
182
- removeSideButtonItem(key) {
183
- this.element.find(`.tool-button[data-idevs-key="${key}"]`).remove();
184
- this.removeDisablingStateItem(key);
185
- }
186
- addSideButtonItem(button, idx) {
187
- if (!isEmptyOrNull(button.key)) {
188
- if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {
189
- alert(`Dropdown has existed key: ${button.key}`);
190
- return;
191
- }
192
- this.setDisablingStateItem(button.key, button.disabled || false);
193
- }
194
- const sideButtonTemplate = `<div class="tool-button add-button icon-tool-button ${coalesce(button.cssClass, '')} ${button.disabled ? 'disabled' : ''}"
195
- data-idevs-key="${coalesce(button.key, '')}"
196
- title="${coalesce(button.title, '')}">
197
- <div class="button-outer">
198
- <span class="button-inner">
199
- <i class="${coalesce(button.icon, '')}"></i>
200
- </span>
201
- </div>
202
- </div>`;
203
- const sideButton = $(sideButtonTemplate);
204
- sideButton.on('click', (e) => {
205
- e.preventDefault();
206
- let buttonIsDisabled = button.disabled;
207
- if (!isEmptyOrNull(button.key)) {
208
- buttonIsDisabled = this.getDisablingStateItem(button.key);
209
- }
210
- if (buttonIsDisabled) {
211
- return;
212
- }
213
- button.onClick(e);
214
- });
215
- if (idx === null || typeof idx === 'undefined') {
216
- this.element.append(sideButton);
217
- return;
218
- }
219
- if (idx <= 0) {
220
- this.element.prepend(sideButton);
221
- return;
222
- }
223
- const nbrOfButtons = this.element.find(`div.tool-button`).length;
224
- if (idx > nbrOfButtons) {
225
- idx = nbrOfButtons;
226
- }
227
- this.element.find(`div.tool-button:nth-child(${idx})`).after(sideButton);
228
- }
229
- }
230
- //# sourceMappingURL=ToolDropdownButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolDropdownButton.js","sourceRoot":"","sources":["../../src/ui/ToolDropdownButton.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"bootstrap\" />\n\nimport { coalesce, first, isEmptyOrNull, tryFirst } from '@serenity-is/corelib/q'\n\nexport type ToolDropdownButtonOptions = {\n title?: string\n cssClass?: string\n icon?: string\n disabled?: boolean\n dropdownMenuPosition?: 'right'\n isDropUp?: boolean\n}\n\nexport type ToolDropdownButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => void\n isSeparator?: boolean\n disabled?: boolean\n isDropdownHeader?: boolean\n dropdownHeaderTitle?: string\n}\n\nexport type ToolDropdownSideButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => void\n disabled?: boolean\n}\n\nexport class ToolDropdownButton {\n public element: JQuery = null\n private isDisabled = false\n private itemDisablingState: { key: string; disabled: boolean }[] = []\n private options: ToolDropdownButtonOptions\n\n public constructor(container: JQuery, buttons: ToolDropdownButtonItem[], opt?: ToolDropdownButtonOptions) {\n this.options = opt || {}\n this.isDisabled = this.options.disabled || false\n this.element = this.buildBaseDropdown()\n this.addDropdownItems(buttons)\n\n this.element.on('click', () => {\n $('.dropdown-toggle', this.element).dropdown('toggle')\n })\n\n container.append(this.element)\n }\n\n private getDisablingStateItem(key: string): boolean {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n return first(this.itemDisablingState, x => x.key == key).disabled || false\n }\n\n return false\n }\n\n private setDisablingStateItem(key: string, value: boolean) {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n first(this.itemDisablingState, x => x.key == key).disabled = value || false\n return\n }\n\n this.itemDisablingState.push({ key: key, disabled: value || false })\n }\n\n private removeDisablingStateItem(key: string) {\n this.itemDisablingState.some((item, idx) => {\n if (item.key == key) {\n this.itemDisablingState.splice(idx, 1)\n\n return true\n }\n })\n }\n\n private buildBaseDropdown(): JQuery {\n const dropdownTemplate = `<div class=\"buttons-inner dropdown\" style=\"overflow: visible\">\n <div class=\"idevs-tool-dropdown-button tool-button icon-tool-button ${coalesce(this.options.cssClass, '')} ${\n this.options.isDropUp ? 'dropup' : ''\n } ${this.isDisabled ? 'disabled' : ''}\" style=\"cursor: unset;\">\n <div class=\"button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}\"\n data-bs-toggle=\"dropdown\"\n style=\"cursor: pointer;\">\n <span class=\"button-inner\">\n <i class=\"${this.options.icon}\"></i>\n ${coalesce(this.options.title, '')}\n </span>\n <i class=\"caret\"></i>\n </div>\n <ul class=\"dropdown-menu ${this.options.dropdownMenuPosition == 'right' ? 'dropdown-menu-right' : ''}\"></ul>\n </div>\n</div>`\n\n return $(dropdownTemplate)\n }\n\n public addDropdownItems(buttons: ToolDropdownButtonItem[]) {\n if (buttons && buttons.length > 0) {\n buttons.forEach(button => {\n this.addDropdownItem(button)\n })\n }\n }\n\n public addDropdownItem(button: ToolDropdownButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n let dropdownItemElement: JQuery\n\n if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {\n dropdownItemElement = $(\n `<li class=\"dropdown-header ${coalesce(button.cssClass, '')}\">${button.dropdownHeaderTitle}</li>`,\n )\n } else {\n if (button.isSeparator) {\n dropdownItemElement = $(`<li class=\"dropdown-divider\"></li>`)\n } else {\n dropdownItemElement = $(`<li class=\"${button.disabled ? 'disabled' : ''}\"\n title=\"${coalesce(button.hint, '')}\"\n data-idevs-key=\"${coalesce(button.key, '')}\">\n <a href=\"#\" class=\"${coalesce(button.cssClass, 'dropdown-item')}\">\n <i class=\"${coalesce(button.icon, '')}\"></i>\n ${button.title}\n </a>\n </li>`)\n\n dropdownItemElement.on('click', (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => {\n e.preventDefault()\n\n if (this.isDisabled) {\n return\n }\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n }\n }\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.find('.dropdown-menu').append(dropdownItemElement)\n return\n }\n\n if (idx <= 0) {\n this.element.find('.dropdown-menu').prepend(dropdownItemElement)\n return\n }\n\n const nbrOfButtons = this.element.find(`.dropdown-menu > li`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`.dropdown-menu > li:nth-child(${idx})`).after(dropdownItemElement)\n }\n\n public enableDropdown(enable: boolean) {\n const drd = this.element.find('.dropdown').first()\n if (drd) {\n if (enable) {\n if (drd.hasClass('disabled')) {\n drd.removeClass('disabled')\n }\n } else {\n if (!drd.hasClass('disabled')) {\n drd.addClass('disabled')\n }\n }\n }\n\n const drdToggle = this.element.find('.dropdown-toggle').first()\n if (drdToggle) {\n if (enable) {\n if (drdToggle.hasClass('disabled')) {\n drd.removeClass('disabled')\n } else {\n if (!drdToggle.hasClass('disabled')) {\n drdToggle.addClass('disabled')\n }\n }\n }\n }\n\n this.isDisabled = !enable\n }\n\n public enableDropdownItemByKey(key: string, enable: boolean) {\n const drdItem = this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).first()\n if (drdItem) {\n if (enable) {\n if (drdItem.hasClass('disabled')) {\n drdItem.removeClass('disabled')\n }\n } else {\n if (!drdItem.hasClass('disabled')) {\n drdItem.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public enableSideButtonByKey(key: string, enable: boolean) {\n const tButton = this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).first()\n if (tButton) {\n if (enable) {\n if (tButton.hasClass('disabled')) {\n tButton.removeClass('disabled')\n }\n } else {\n if (!tButton.hasClass('disabled')) {\n tButton.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public removeDropdownItem(key: string) {\n this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public removeSideButtonItem(key: string) {\n this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public addSideButtonItem(button: ToolDropdownSideButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n const sideButtonTemplate = `<div class=\"tool-button add-button icon-tool-button ${coalesce(button.cssClass, '')} ${\n button.disabled ? 'disabled' : ''\n }\"\n data-idevs-key=\"${coalesce(button.key, '')}\"\n title=\"${coalesce(button.title, '')}\">\n <div class=\"button-outer\">\n <span class=\"button-inner\">\n <i class=\"${coalesce(button.icon, '')}\"></i>\n </span>\n </div>\n </div>`\n\n const sideButton = $(sideButtonTemplate)\n\n sideButton.on('click', (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => {\n e.preventDefault()\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.append(sideButton)\n return\n }\n\n if (idx <= 0) {\n this.element.prepend(sideButton)\n return\n }\n\n const nbrOfButtons = this.element.find(`div.tool-button`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`div.tool-button:nth-child(${idx})`).after(sideButton)\n }\n}\n"]}