react-dialogger 1.1.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 (51) hide show
  1. package/README.md +303 -0
  2. package/components/CircularProgress.d.ts +8 -0
  3. package/components/CircularProgress.js +50 -0
  4. package/components/DialogActionBase.d.ts +44 -0
  5. package/components/DialogActionBase.js +222 -0
  6. package/components/DialogBase.d.ts +132 -0
  7. package/components/DialogBase.js +880 -0
  8. package/components/Futures/DialogCloseAction.d.ts +3 -0
  9. package/components/Futures/DialogCloseAction.js +54 -0
  10. package/components/Futures/DialogFullscreenAction.d.ts +3 -0
  11. package/components/Futures/DialogFullscreenAction.js +60 -0
  12. package/components/Futures/DialogHeaderActionsWrapper.d.ts +3 -0
  13. package/components/Futures/DialogHeaderActionsWrapper.js +11 -0
  14. package/components/Futures/DialogProcessing.d.ts +3 -0
  15. package/components/Futures/DialogProcessing.js +41 -0
  16. package/components/Futures/index.d.ts +4 -0
  17. package/components/Futures/index.js +11 -0
  18. package/components/RippleButton.d.ts +15 -0
  19. package/components/RippleButton.js +81 -0
  20. package/components/icons/CloseIcon.d.ts +6 -0
  21. package/components/icons/CloseIcon.js +23 -0
  22. package/components/icons/FullscreenExitIcon.d.ts +6 -0
  23. package/components/icons/FullscreenExitIcon.js +23 -0
  24. package/components/icons/FullscreenIcon.d.ts +6 -0
  25. package/components/icons/FullscreenIcon.js +23 -0
  26. package/components/icons/ResizeIcon.d.ts +6 -0
  27. package/components/icons/ResizeIcon.js +14 -0
  28. package/hooks/useDialogOptions.d.ts +3 -0
  29. package/hooks/useDialogOptions.js +82 -0
  30. package/index.d.ts +8 -0
  31. package/index.js +25 -0
  32. package/models/Dialog.d.ts +44 -0
  33. package/models/Dialog.js +142 -0
  34. package/models/DialogAction.d.ts +54 -0
  35. package/models/DialogAction.js +277 -0
  36. package/models/Resizeable.d.ts +21 -0
  37. package/models/Resizeable.js +87 -0
  38. package/package.json +20 -0
  39. package/styles/circular-progress.css +42 -0
  40. package/styles/dialog.action.css +234 -0
  41. package/styles/dialog.css +336 -0
  42. package/types/DialogActionTypes.d.ts +66 -0
  43. package/types/DialogActionTypes.js +3 -0
  44. package/types/DialogTypes.d.ts +128 -0
  45. package/types/DialogTypes.js +2 -0
  46. package/types/SizePosTypes.d.ts +5 -0
  47. package/types/SizePosTypes.js +2 -0
  48. package/types/index.d.ts +4 -0
  49. package/types/index.js +2 -0
  50. package/types/types.d.ts +58 -0
  51. package/types/types.js +2 -0
@@ -0,0 +1,234 @@
1
+ .ripple-button {
2
+ border-radius: 4px;
3
+ padding: 4px 8px;
4
+ overflow: hidden;
5
+ position: relative;
6
+ cursor: pointer;
7
+ text-transform: uppercase;
8
+ font-weight: bold;
9
+ min-height: 30px;
10
+ width: auto;
11
+ transition: width 1s;
12
+ display: inline-block;
13
+ }
14
+ .ripple-button .ripple {
15
+ width: 20px;
16
+ height: 20px;
17
+ position: absolute;
18
+ display: block;
19
+ content: "";
20
+ border-radius: 9999px;
21
+ opacity: 0.5;
22
+ animation: 0.9s ease 1 forwards ripple-effect;
23
+ }
24
+ .ripple-button .content {
25
+ position: relative;
26
+ z-index: 2;
27
+ display: flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ }
31
+
32
+ @keyframes ripple-effect {
33
+ 0% {
34
+ transform: scale(1) translate3d(0, 0, 0);
35
+ opacity: 1;
36
+ }
37
+ 50% {
38
+ transform: scale(10) translate3d(0, 0, 0);
39
+ opacity: 0.375;
40
+ }
41
+ 100% {
42
+ transform: scale(35) translate3d(0, 0, 0);
43
+ opacity: 0;
44
+ }
45
+ }
46
+ .ripple-button-contained {
47
+ border: none;
48
+ box-shadow: 0 0 5px #a8a8a8;
49
+ color: #fff;
50
+ }
51
+
52
+ .ripple-button-outlined {
53
+ border-width: 1px;
54
+ border-style: solid;
55
+ box-shadow: 0 0 2px #a8a8a8;
56
+ background: none !important;
57
+ }
58
+
59
+ .ripple-button-text {
60
+ border: none;
61
+ background: none !important;
62
+ }
63
+
64
+ .ripple-button-disabled.ripple-button-contained {
65
+ background-color: #f0f0f0 !important;
66
+ box-shadow: 0 0 5px #c2c2c2;
67
+ }
68
+
69
+ .ripple-button-disabled.ripple-button-outlined {
70
+ border-color: #e6e6e6 !important;
71
+ }
72
+
73
+ .ripple-button-disabled {
74
+ color: #acacac !important;
75
+ cursor: default !important;
76
+ box-shadow: none;
77
+ }
78
+
79
+ .ripple-button .content {
80
+ display: flex;
81
+ align-items: center;
82
+ column-gap: 2px;
83
+ }
84
+
85
+ .ripple-button-primary {
86
+ background: #1976d2;
87
+ border-color: #72a5d8;
88
+ }
89
+
90
+ .ripple-button-primary.ripple-button-outlined, .ripple-button-primary.ripple-button-text {
91
+ color: #6ea8e2;
92
+ }
93
+
94
+ .ripple-button-primary.ripple-button-outlined, .ripple-button-primary.ripple-button-text {
95
+ color: #6ea8e2;
96
+ }
97
+
98
+ .ripple-button-primary.ripple-button-outlined:hover, .ripple-button-primary.ripple-button-text:hover {
99
+ color: #5b88b6;
100
+ }
101
+
102
+ .ripple-button-primary.ripple-button-outlined:active, .ripple-button-primary.ripple-button-text:active {
103
+ color: #859eb8;
104
+ }
105
+
106
+ .ripple-button.ripple-button-primary > .ripple {
107
+ background: #e0e1fd;
108
+ }
109
+
110
+ .ripple-button-success {
111
+ background: #35800f;
112
+ border-color: #6daa4e;
113
+ }
114
+
115
+ .ripple-button-success.ripple-button-outlined, .ripple-button-success.ripple-button-text {
116
+ color: #35800f;
117
+ }
118
+
119
+ .ripple-button-success.ripple-button-outlined:hover, .ripple-button-success.ripple-button-text:hover {
120
+ color: #35800f;
121
+ }
122
+
123
+ .ripple-button-success.ripple-button-outlined:active, .ripple-button-success.ripple-button-text:active {
124
+ color: #35800f;
125
+ }
126
+
127
+ .ripple-button.ripple-button-success > .ripple {
128
+ background: #e3ffd9;
129
+ }
130
+
131
+ .ripple-button-error {
132
+ background: #c01616;
133
+ border-color: #d15e5e;
134
+ }
135
+
136
+ .ripple-button-error.ripple-button-outlined, .ripple-button-error.ripple-button-text {
137
+ color: #cc2a2a;
138
+ }
139
+
140
+ .ripple-button-error.ripple-button-outlined:hover, .ripple-button-error.ripple-button-text:hover {
141
+ color: #c03232;
142
+ }
143
+
144
+ .ripple-button-error.ripple-button-outlined:active, .ripple-button-error.ripple-button-text:active {
145
+ color: #c02424;
146
+ }
147
+
148
+ .ripple-button.ripple-button-error > .ripple {
149
+ background: #ffd9d9;
150
+ }
151
+
152
+ .ripple-button-warning {
153
+ background: #b5ac01;
154
+ border-color: #978f01;
155
+ }
156
+
157
+ .ripple-button-warning.ripple-button-outlined, .ripple-button-warning.ripple-button-text {
158
+ color: #b5ac01;
159
+ }
160
+
161
+ .ripple-button-warning.ripple-button-outlined:hover, .ripple-button-warning.ripple-button-text:hover {
162
+ color: #a09a00;
163
+ }
164
+
165
+ .ripple-button-warning.ripple-button-outlined:active, .ripple-button-warning.ripple-button-text:active {
166
+ color: #847d00;
167
+ }
168
+
169
+ .ripple-button.ripple-button-warning > .ripple {
170
+ background: #fffcd9;
171
+ }
172
+
173
+ .ripple-button-info {
174
+ background: #69b8e1;
175
+ border-color: #5898b9;
176
+ }
177
+
178
+ .ripple-button-info.ripple-button-outlined, .ripple-button-info.ripple-button-text {
179
+ color: #69b8e1;
180
+ }
181
+
182
+ .ripple-button-info.ripple-button-outlined:hover, .ripple-button-info.ripple-button-text:hover {
183
+ color: #69b8e1;
184
+ }
185
+
186
+ .ripple-button-info.ripple-button-outlined:active, .ripple-button-info.ripple-button-text:active {
187
+ color: #79bee1;
188
+ }
189
+
190
+ .ripple-button.ripple-button-info > .ripple {
191
+ background: #fffcd9;
192
+ }
193
+
194
+ .ripple-button-secondary {
195
+ background: #a769e1;
196
+ border-color: #8758b9;
197
+ }
198
+
199
+ .ripple-button-secondary.ripple-button-outlined, .ripple-button-secondary.ripple-button-text {
200
+ color: #a769e1;
201
+ }
202
+
203
+ .ripple-button-secondary.ripple-button-outlined:hover, .ripple-button-secondary.ripple-button-text:hover {
204
+ color: #a369e1;
205
+ }
206
+
207
+ .ripple-button-secondary.ripple-button-outlined:active, .ripple-button-secondary.ripple-button-text:active {
208
+ color: #c479e1;
209
+ }
210
+
211
+ .ripple-button.ripple-button-secondary > .ripple {
212
+ background: #f2d9ff;
213
+ }
214
+
215
+ .ripple-button-default {
216
+ background: #ffffff;
217
+ border-color: #3a3a3a;
218
+ }
219
+
220
+ .ripple-button-default.ripple-button-contained, .ripple-button-default.ripple-button-text, .ripple-button-default.ripple-button-outlined {
221
+ color: #5f5f5f;
222
+ }
223
+
224
+ .ripple-button-default.ripple-button-outlined:hover, .ripple-button-default.ripple-button-text:hover {
225
+ color: #797979;
226
+ }
227
+
228
+ .ripple-button-default.ripple-button-outlined:active, .ripple-button-default.ripple-button-text:active {
229
+ color: #b7b7b7;
230
+ }
231
+
232
+ .ripple-button.ripple-button-default > .ripple {
233
+ background: #ffffff;
234
+ }
@@ -0,0 +1,336 @@
1
+ @charset "UTF-8";
2
+ @keyframes pos-in-flex-start {
3
+ from {
4
+ margin-top: -50px;
5
+ opacity: 0;
6
+ }
7
+ to {
8
+ margin-top: 0;
9
+ opacity: 1;
10
+ }
11
+ }
12
+ @keyframes pos-out-flex-start {
13
+ from {
14
+ margin-top: 0;
15
+ opacity: 1;
16
+ }
17
+ to {
18
+ margin-top: -50px;
19
+ opacity: 0;
20
+ }
21
+ }
22
+ /*@keyframes pos-in-flex-end {from {bottom: -1000px; opacity: 0}to {bottom: 40px; opacity: 1;}}*/
23
+ @keyframes pos-in-flex-end {
24
+ from {
25
+ transform: translateY(100%);
26
+ opacity: 0;
27
+ }
28
+ to {
29
+ transform: translateY(0);
30
+ opacity: 1;
31
+ }
32
+ }
33
+ /*@keyframes pos-out-flex-end {from {bottom: 40px; opacity: 1} to {bottom: -1000px; opacity: 0;}}*/
34
+ @keyframes pos-out-flex-end {
35
+ from {
36
+ transform: translateY(0);
37
+ opacity: 1;
38
+ }
39
+ to {
40
+ transform: translateY(100%);
41
+ opacity: 0;
42
+ }
43
+ }
44
+ .show-position-flex-start {
45
+ /*animation: pos-in-flex-start .3s;*/
46
+ position: absolute;
47
+ top: 40px;
48
+ animation: pos-in-flex-start 0.3s forwards;
49
+ }
50
+
51
+ .hide-position-flex-start {
52
+ /*animation: pos-out-flex-start .3s;*/
53
+ position: absolute;
54
+ top: 40px;
55
+ animation-fill-mode: forwards;
56
+ animation: pos-out-flex-start 0.3s;
57
+ transform: translateY(100%); /* Çıkış için ayarlama */
58
+ }
59
+
60
+ .show-position-flex-end {
61
+ position: absolute;
62
+ bottom: 40px;
63
+ animation: pos-in-flex-end 0.3s forwards;
64
+ }
65
+
66
+ .hide-position-flex-end {
67
+ position: absolute;
68
+ bottom: 40px;
69
+ animation: pos-out-flex-end 0.3s;
70
+ transform: translateY(100%); /* Çıkış için ayarlama */
71
+ animation-fill-mode: forwards;
72
+ }
73
+
74
+ @keyframes backdrop-show {
75
+ from {
76
+ opacity: 0;
77
+ }
78
+ to {
79
+ opacity: 1;
80
+ }
81
+ }
82
+ @keyframes backdrop-hide {
83
+ from {
84
+ opacity: 1;
85
+ }
86
+ to {
87
+ opacity: 0;
88
+ }
89
+ }
90
+ .dialog-backdrop-show {
91
+ animation: backdrop-show 0.3s;
92
+ animation-fill-mode: forwards;
93
+ }
94
+
95
+ .dialog-backdrop-hide {
96
+ animation: backdrop-hide 0.3s;
97
+ animation-fill-mode: forwards;
98
+ }
99
+
100
+ @media (width < 500px) {
101
+ .dialog-width-xs {
102
+ width: 100%;
103
+ }
104
+ .dialog-width-md {
105
+ width: 100%;
106
+ }
107
+ }
108
+ @media (width > 500px) and (width < 750px) {
109
+ .dialog-width-xs {
110
+ width: 400px;
111
+ }
112
+ .dialog-width-sm {
113
+ width: 600px;
114
+ }
115
+ .dialog-width-md {
116
+ width: 100%;
117
+ }
118
+ .dialog-width-lg {
119
+ width: 100%;
120
+ }
121
+ .dialog-width-xl {
122
+ width: 100%;
123
+ }
124
+ }
125
+ @media (width > 750px) and (width < 1000px) {
126
+ .dialog-width-xs {
127
+ width: 400px;
128
+ }
129
+ .dialog-width-sm {
130
+ width: 600px;
131
+ }
132
+ .dialog-width-md {
133
+ width: 900px;
134
+ }
135
+ .dialog-width-lg {
136
+ width: 100%;
137
+ }
138
+ .dialog-width-xl {
139
+ width: 100%;
140
+ }
141
+ }
142
+ @media (width > 1000px) and (width < 1500px) {
143
+ .dialog-width-xs {
144
+ width: 400px;
145
+ }
146
+ .dialog-width-sm {
147
+ width: 600px;
148
+ }
149
+ .dialog-width-md {
150
+ width: 900px;
151
+ }
152
+ .dialog-width-lg {
153
+ width: 100%;
154
+ }
155
+ .dialog-width-xl {
156
+ width: 1250px;
157
+ }
158
+ }
159
+ @media (width > 1501px) {
160
+ .dialog-width-xs {
161
+ width: 400px;
162
+ }
163
+ .dialog-width-sm {
164
+ width: 600px;
165
+ }
166
+ .dialog-width-md {
167
+ width: 900px;
168
+ }
169
+ .dialog-width-lg {
170
+ width: 1200px;
171
+ }
172
+ .dialog-width-xl {
173
+ width: 100%;
174
+ }
175
+ }
176
+ .appinsource-dialog-root {
177
+ position: fixed;
178
+ right: 0;
179
+ bottom: 0;
180
+ top: 0;
181
+ left: 0;
182
+ z-index: 1201;
183
+ }
184
+
185
+ .dialog-backdrop {
186
+ background-color: rgba(207, 207, 207, 0.4);
187
+ padding: 20px;
188
+ display: flex;
189
+ /*width: 100%;*/
190
+ height: 100%;
191
+ }
192
+
193
+ .drag-handle {
194
+ cursor: move;
195
+ }
196
+
197
+ .no-select-on-resize {
198
+ user-select: none; /* Metin seçimini devre dışı bırakır */
199
+ -webkit-user-select: none; /* Safari */
200
+ -ms-user-select: none; /* IE/Edge */
201
+ }
202
+
203
+ .dialog-main {
204
+ top: 20px;
205
+ box-shadow: 0 0 20px #252525;
206
+ border-radius: 10px;
207
+ background-color: white;
208
+ display: flex;
209
+ flex-direction: column;
210
+ overflow: clip;
211
+ }
212
+ .dialog-main .dialog-header {
213
+ min-height: 64px;
214
+ padding: 10px 20px 10px 20px;
215
+ display: flex;
216
+ flex: 1;
217
+ justify-content: space-between;
218
+ align-items: center;
219
+ border-bottom: 0.5px solid rgba(0, 0, 0, 0.2);
220
+ }
221
+ .dialog-main .dialog-header .header-actions-wrapper {
222
+ display: flex;
223
+ flex-direction: row;
224
+ }
225
+ .dialog-main .dialog-header .close-icon-wrapper {
226
+ cursor: pointer !important;
227
+ }
228
+ .dialog-main .dialog-header .close-icon-wrapper .close-icon {
229
+ fill: #666666;
230
+ width: 30px;
231
+ }
232
+ .dialog-main .dialog-header .close-icon-wrapper *:hover {
233
+ color: #CCCCCC;
234
+ }
235
+ .dialog-main .dialog-header .fullscreen-icon-wrapper {
236
+ display: flex;
237
+ justify-items: center;
238
+ align-items: center;
239
+ cursor: pointer;
240
+ }
241
+ .dialog-main .dialog-header .fullscreen-icon-wrapper .fullscreen-icon, .dialog-main .dialog-header .fullscreen-icon-wrapper .fullscreen-exit-icon {
242
+ fill: #286e94;
243
+ width: 30px;
244
+ }
245
+ .dialog-main .dialog-body {
246
+ display: flex;
247
+ position: relative;
248
+ padding: 10px 20px 10px 20px;
249
+ overflow: auto;
250
+ flex-direction: column;
251
+ }
252
+ .dialog-main .dialog-body .dialog-content-placeholder {
253
+ position: absolute;
254
+ top: 0;
255
+ left: 0;
256
+ width: 100%;
257
+ height: 100%;
258
+ flex-direction: column;
259
+ justify-content: center;
260
+ align-items: center;
261
+ z-index: 2;
262
+ }
263
+ .dialog-main .dialog-footer {
264
+ min-height: 64px;
265
+ border-top: 0.5px solid rgba(0, 0, 0, 0.2);
266
+ padding: 10px 20px 10px 20px;
267
+ bottom: 0;
268
+ display: flex;
269
+ flex-direction: row;
270
+ column-gap: 10px;
271
+ align-items: center;
272
+ justify-content: space-between;
273
+ }
274
+ .dialog-main .resizable-handle {
275
+ position: absolute;
276
+ width: 20px;
277
+ height: 20px;
278
+ /*background: repeating-linear-gradient(
279
+ 45deg,
280
+ #ccc,
281
+ #ccc 2px,
282
+ transparent 2px,
283
+ transparent 4px
284
+ );*/
285
+ bottom: 0;
286
+ right: 0;
287
+ cursor: se-resize; /* Sağ alt köşe için özel imleç */
288
+ }
289
+ .dialog-main .resizable-handle .resizable-handle-icon svg {
290
+ transform: rotate(-135deg);
291
+ display: flex;
292
+ fill: #286e94;
293
+ position: absolute;
294
+ right: 0;
295
+ bottom: 0;
296
+ }
297
+
298
+ .fullscreen {
299
+ -webkit-transform: inherit !important;
300
+ -moz-transform: inherit !important;
301
+ -o-transform: inherit !important;
302
+ transform: inherit !important;
303
+ width: 100% !important;
304
+ height: 100% !important;
305
+ position: absolute !important;
306
+ top: 0 !important;
307
+ left: 0 !important;
308
+ border-radius: 0 !important;
309
+ }
310
+
311
+ .no-user-select {
312
+ user-select: none;
313
+ }
314
+
315
+ /* Scrollbar genişliği */
316
+ ::-webkit-scrollbar {
317
+ width: 12px;
318
+ height: 8px;
319
+ }
320
+
321
+ /* Scrollbar arka planı */
322
+ ::-webkit-scrollbar-track {
323
+ background: #f0f0f0;
324
+ /* border-radius: 10px;*/
325
+ }
326
+
327
+ /* Scrollbarın kendisi */
328
+ ::-webkit-scrollbar-thumb {
329
+ background: #b4b4b4;
330
+ border-radius: 10px;
331
+ }
332
+
333
+ /* Scrollbar üzerine gelindiğinde */
334
+ ::-webkit-scrollbar-thumb:hover {
335
+ background: #40abff;
336
+ }
@@ -0,0 +1,66 @@
1
+ import { DialogAction } from "../models/DialogAction";
2
+ import { IDialogDef, IListenerDialogDef, IStateDef } from "./DialogTypes";
3
+ import { TValues, ICoords } from "./types";
4
+ import DialogBase from "../components/DialogBase";
5
+ import DialogActionBase from "../components/DialogActionBase";
6
+ import { CSSProperties } from "react";
7
+ import * as React from "react";
8
+ export type ActionDialogDef = Omit<IDialogDef, 'switchFullScreen'>;
9
+ export type ActionDef = Pick<DialogAction, 'onClick' | 'setInProcess' | 'getLabel' | 'getColor' | 'getVariant' | 'isDisabled' | 'setOptions' | 'state' | 'isInProcess' | 'setLabel' | 'name'>;
10
+ export type ActionBaseDef = Pick<DialogActionBase, 'setOptions' | 'setInProcess' | 'getLabel' | 'options' | 'click' | 'remove'>;
11
+ export interface IDialogActionDef extends ActionBaseDef {
12
+ }
13
+ export type DialogActionType = (button: ActionBaseDef, dialog: Omit<IDialogDef, 'switchFullScreen'>) => void;
14
+ export interface ActionProps {
15
+ name: string;
16
+ options?: DialogActionOptionsType;
17
+ /**
18
+ * @deprecated
19
+ * @see options.label */
20
+ label?: string;
21
+ onClick: DialogActionType;
22
+ dialogBaseComponent: DialogBase;
23
+ /**
24
+ * @deprecated
25
+ * @see options.variant */
26
+ variant?: TBVariant;
27
+ /**
28
+ * @deprecated
29
+ * @see options.color */
30
+ color?: TBColor;
31
+ /**
32
+ * @deprecated
33
+ * */
34
+ onLoad?: (button: DialogActionBase) => void;
35
+ /**
36
+ * @deprecated
37
+ * */
38
+ onUpdate?: (button: DialogActionBase) => void;
39
+ inProcess?: boolean;
40
+ /**
41
+ * @deprecated
42
+ * @see options.disabled */
43
+ disabled?: boolean;
44
+ style?: CSSProperties;
45
+ baseStyle?: CSSProperties;
46
+ fontFamily?: string;
47
+ stateListener?: TDialogStateListenerForActionCallbackType;
48
+ }
49
+ export interface ActionState {
50
+ isRippling: boolean;
51
+ coords: ICoords;
52
+ }
53
+ export type TBVariant = "contained" | "outlined" | "text";
54
+ export type TBColor = "primary" | "success" | "error" | "warning" | "info" | "secondary" | "default";
55
+ export type DialogActionOptionsType = {
56
+ label?: string;
57
+ variant?: TBVariant;
58
+ color?: TBColor;
59
+ disabled?: boolean;
60
+ prevDisabled?: boolean;
61
+ style?: React.CSSProperties;
62
+ baseStyle?: React.CSSProperties;
63
+ };
64
+ type TListenerButtonType = Pick<DialogActionBase, Exclude<keyof ActionDef, 'onClick' | 'getStateListener' | 'name'>>;
65
+ export type TDialogStateListenerForActionCallbackType = (state: IStateDef, values: TValues, button: TListenerButtonType, dialog: IListenerDialogDef) => void;
66
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ ;