pdm-ui-kit 0.2.0 → 0.3.1
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.
- package/README.md +168 -3
- package/esm2020/lib/components/button-group/button-group.component.mjs +211 -182
- package/esm2020/lib/components/combobox/combobox.component.mjs +136 -14
- package/esm2020/lib/components/context-menu/context-menu.component.mjs +121 -42
- package/esm2020/lib/components/data-table/data-table.component.mjs +3 -3
- package/esm2020/lib/components/date-picker/date-picker.component.mjs +66 -54
- package/esm2020/lib/components/dialog/dialog.component.mjs +111 -94
- package/esm2020/lib/components/hover-card/hover-card.component.mjs +185 -24
- package/esm2020/lib/components/input/input.component.mjs +15 -15
- package/esm2020/lib/components/input-group/input-group.component.mjs +14 -14
- package/esm2020/lib/components/menubar/menubar.component.mjs +105 -29
- package/esm2020/lib/components/popover/popover.component.mjs +107 -75
- package/esm2020/lib/components/select/select.component.mjs +23 -22
- package/esm2020/lib/components/table/table.component.mjs +77 -68
- package/esm2020/lib/components/tabs/tabs.component.mjs +6 -6
- package/esm2020/lib/components/toggle-group/toggle-group.component.mjs +6 -6
- package/esm2020/lib/components/tooltip/tooltip.component.mjs +162 -19
- package/esm2020/lib/overlay/z-index-helper.mjs +69 -0
- package/esm2020/lib/utils/z-index.mjs +25 -28
- package/esm2020/public-api.mjs +67 -66
- package/fesm2015/pdm-ui-kit.mjs +1379 -654
- package/fesm2015/pdm-ui-kit.mjs.map +1 -1
- package/fesm2020/pdm-ui-kit.mjs +1383 -654
- package/fesm2020/pdm-ui-kit.mjs.map +1 -1
- package/lib/components/button-group/button-group.component.d.ts +8 -2
- package/lib/components/combobox/combobox.component.d.ts +20 -3
- package/lib/components/context-menu/context-menu.component.d.ts +17 -8
- package/lib/components/date-picker/date-picker.component.d.ts +5 -6
- package/lib/components/dialog/dialog.component.d.ts +5 -5
- package/lib/components/hover-card/hover-card.component.d.ts +27 -4
- package/lib/components/input/input.component.d.ts +3 -3
- package/lib/components/input-group/input-group.component.d.ts +1 -1
- package/lib/components/menubar/menubar.component.d.ts +16 -8
- package/lib/components/popover/popover.component.d.ts +13 -12
- package/lib/components/select/select.component.d.ts +4 -5
- package/lib/components/table/table.component.d.ts +2 -2
- package/lib/components/tabs/tabs.component.d.ts +1 -1
- package/lib/components/toggle-group/toggle-group.component.d.ts +1 -1
- package/lib/components/tooltip/tooltip.component.d.ts +21 -3
- package/lib/overlay/z-index-helper.d.ts +36 -0
- package/lib/utils/z-index.d.ts +14 -18
- package/package.json +6 -6
- package/public-api.d.ts +66 -65
- package/src/lib/styles/tokens.css +182 -0
package/fesm2020/pdm-ui-kit.mjs
CHANGED
|
@@ -2,11 +2,11 @@ import * as i1 from '@angular/common';
|
|
|
2
2
|
import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, HostListener, ViewChild, ViewChildren, ElementRef, PLATFORM_ID, Directive, Inject, ContentChildren, NgModule } from '@angular/core';
|
|
5
|
-
import * as i1$
|
|
5
|
+
import * as i1$1 from '@angular/cdk/overlay';
|
|
6
6
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
7
|
-
import { icons } from 'lucide';
|
|
8
|
-
import * as i1$1 from '@angular/platform-browser';
|
|
9
7
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
8
|
+
import { icons } from 'lucide';
|
|
9
|
+
import * as i1$2 from '@angular/platform-browser';
|
|
10
10
|
import { format } from 'date-fns';
|
|
11
11
|
|
|
12
12
|
class PdmAccordionComponent {
|
|
@@ -314,198 +314,227 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
314
314
|
type: Input
|
|
315
315
|
}] } });
|
|
316
316
|
|
|
317
|
+
const ROOT_LAYOUT = {
|
|
318
|
+
horizontal: "w-full flex flex-row items-center overflow-x-auto",
|
|
319
|
+
vertical: "flex flex-col items-stretch",
|
|
320
|
+
};
|
|
321
|
+
const ATTACHMENT_EDGE_CLASSES = {
|
|
322
|
+
horizontal: [
|
|
323
|
+
"[&>*]:rounded-none",
|
|
324
|
+
"[&>*:first-child]:rounded-l-md",
|
|
325
|
+
"[&>*:last-child]:rounded-r-md",
|
|
326
|
+
"[&>*:not(:first-child)]:border-l-0",
|
|
327
|
+
"[&>*:not(:first-child)]:-ml-px",
|
|
328
|
+
],
|
|
329
|
+
vertical: [
|
|
330
|
+
"[&>*]:rounded-none",
|
|
331
|
+
"[&>*:first-child]:rounded-t-md",
|
|
332
|
+
"[&>*:last-child]:rounded-b-md",
|
|
333
|
+
"[&>*:not(:first-child)]:border-t-0",
|
|
334
|
+
"[&>*:not(:first-child)]:-mt-px",
|
|
335
|
+
],
|
|
336
|
+
};
|
|
337
|
+
const ATTACHMENT_CONTROL_CLASSES = {
|
|
338
|
+
horizontal: [
|
|
339
|
+
"[&>pdm-button]:flex",
|
|
340
|
+
"[&>pdm-button>button]:h-9",
|
|
341
|
+
"[&>pdm-button>button]:!rounded-none",
|
|
342
|
+
"[&>pdm-button>button]:shadow-none",
|
|
343
|
+
"[&>pdm-button:first-child>button]:!rounded-l-md",
|
|
344
|
+
"[&>pdm-button:last-child>button]:!rounded-r-md",
|
|
345
|
+
"[&>pdm-input]:flex-1",
|
|
346
|
+
"[&>pdm-input]:min-w-0",
|
|
347
|
+
"[&>pdm-input>div]:w-full",
|
|
348
|
+
"[&>pdm-input>div]:min-w-0",
|
|
349
|
+
"[&>pdm-input>div]:!rounded-none",
|
|
350
|
+
"[&>pdm-input>div]:shadow-none",
|
|
351
|
+
"[&>pdm-input>div>input]:!rounded-none",
|
|
352
|
+
"[&>pdm-input>div>input]:bg-background",
|
|
353
|
+
"[&>pdm-input>div>input]:shadow-none",
|
|
354
|
+
"[&>pdm-input:first-child>div]:!rounded-l-md",
|
|
355
|
+
"[&>pdm-input:last-child>div]:!rounded-r-md",
|
|
356
|
+
"[&>pdm-input:first-child>div>input]:!rounded-l-md",
|
|
357
|
+
"[&>pdm-input:last-child>div>input]:!rounded-r-md",
|
|
358
|
+
"[&>pdm-input-group]:min-w-0",
|
|
359
|
+
"[&>pdm-input-group>div]:!rounded-none",
|
|
360
|
+
"[&>pdm-input-group>div]:shadow-none",
|
|
361
|
+
"[&>pdm-input-group:first-child>div]:!rounded-l-md",
|
|
362
|
+
"[&>pdm-input-group:last-child>div]:!rounded-r-md",
|
|
363
|
+
"[&>pdm-select>select]:!rounded-none",
|
|
364
|
+
"[&>pdm-select>select]:shadow-none",
|
|
365
|
+
"[&>pdm-select>div>button]:!rounded-none",
|
|
366
|
+
"[&>pdm-select>div>button]:shadow-none",
|
|
367
|
+
"[&>pdm-select:first-child>select]:!rounded-l-md",
|
|
368
|
+
"[&>pdm-select:last-child>select]:!rounded-r-md",
|
|
369
|
+
"[&>pdm-select:first-child>div>button]:!rounded-l-md",
|
|
370
|
+
"[&>pdm-select:last-child>div>button]:!rounded-r-md",
|
|
371
|
+
"[&>pdm-select:not(:first-child)>div>button]:!rounded-l-none",
|
|
372
|
+
"[&>pdm-select:not(:last-child)>div>button]:!rounded-r-none",
|
|
373
|
+
"[&>pdm-tooltip>span>*]:rounded-none",
|
|
374
|
+
"[&>pdm-tooltip>span>*]:shadow-none",
|
|
375
|
+
"[&>pdm-tooltip:not(:first-child)>span>*]:border-l-0",
|
|
376
|
+
"[&>pdm-tooltip>span>button]:!rounded-none",
|
|
377
|
+
"[&>pdm-tooltip>span>button]:shadow-none",
|
|
378
|
+
"[&>pdm-tooltip:first-child>span>button]:!rounded-l-md",
|
|
379
|
+
"[&>pdm-tooltip:last-child>span>button]:!rounded-r-md",
|
|
380
|
+
"[&>pdm-tooltip>span>input]:!rounded-none",
|
|
381
|
+
"[&>pdm-tooltip>span>input]:bg-background",
|
|
382
|
+
"[&>pdm-tooltip>span>input]:shadow-none",
|
|
383
|
+
"[&>pdm-tooltip:first-child>span>input]:!rounded-l-md",
|
|
384
|
+
"[&>pdm-tooltip:last-child>span>input]:!rounded-r-md",
|
|
385
|
+
"[&>pdm-tooltip>span>select]:!rounded-none",
|
|
386
|
+
"[&>pdm-tooltip>span>select]:shadow-none",
|
|
387
|
+
"[&>pdm-tooltip:first-child>span>select]:!rounded-l-md",
|
|
388
|
+
"[&>pdm-tooltip:last-child>span>select]:!rounded-r-md",
|
|
389
|
+
"[&>pdm-tooltip>span>pdm-button>button]:!rounded-none",
|
|
390
|
+
"[&>pdm-tooltip>span>pdm-button>button]:shadow-none",
|
|
391
|
+
"[&>pdm-tooltip:first-child>span>pdm-button>button]:!rounded-l-md",
|
|
392
|
+
"[&>pdm-tooltip:last-child>span>pdm-button>button]:!rounded-r-md",
|
|
393
|
+
"[&>pdm-tooltip>span>pdm-input>div]:!rounded-none",
|
|
394
|
+
"[&>pdm-tooltip>span>pdm-input>div]:shadow-none",
|
|
395
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:!rounded-none",
|
|
396
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:bg-background",
|
|
397
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:shadow-none",
|
|
398
|
+
"[&>pdm-tooltip:first-child>span>pdm-input>div]:!rounded-l-md",
|
|
399
|
+
"[&>pdm-tooltip:last-child>span>pdm-input>div]:!rounded-r-md",
|
|
400
|
+
"[&>pdm-tooltip:first-child>span>pdm-input>div>input]:!rounded-l-md",
|
|
401
|
+
"[&>pdm-tooltip:last-child>span>pdm-input>div>input]:!rounded-r-md",
|
|
402
|
+
"[&>pdm-tooltip>span>pdm-input-group>div]:!rounded-none",
|
|
403
|
+
"[&>pdm-tooltip>span>pdm-input-group>div]:shadow-none",
|
|
404
|
+
"[&>pdm-tooltip:first-child>span>pdm-input-group>div]:!rounded-l-md",
|
|
405
|
+
"[&>pdm-tooltip:last-child>span>pdm-input-group>div]:!rounded-r-md",
|
|
406
|
+
"[&>pdm-tooltip>span>pdm-select>select]:!rounded-none",
|
|
407
|
+
"[&>pdm-tooltip>span>pdm-select>select]:shadow-none",
|
|
408
|
+
"[&>pdm-tooltip>span>pdm-select>div>button]:!rounded-none",
|
|
409
|
+
"[&>pdm-tooltip>span>pdm-select>div>button]:shadow-none",
|
|
410
|
+
"[&>pdm-tooltip:first-child>span>pdm-select>select]:!rounded-l-md",
|
|
411
|
+
"[&>pdm-tooltip:last-child>span>pdm-select>select]:!rounded-r-md",
|
|
412
|
+
"[&>pdm-tooltip:first-child>span>pdm-select>div>button]:!rounded-l-md",
|
|
413
|
+
"[&>pdm-tooltip:last-child>span>pdm-select>div>button]:!rounded-r-md",
|
|
414
|
+
"[&>pdm-tooltip:not(:first-child)>span>pdm-select>div>button]:!rounded-l-none",
|
|
415
|
+
"[&>pdm-tooltip:not(:last-child)>span>pdm-select>div>button]:!rounded-r-none",
|
|
416
|
+
],
|
|
417
|
+
vertical: [
|
|
418
|
+
"[&>*]:rounded-none",
|
|
419
|
+
"[&>*:first-child]:rounded-t-md",
|
|
420
|
+
"[&>*:last-child]:rounded-b-md",
|
|
421
|
+
"[&>*:not(:first-child)]:border-t-0",
|
|
422
|
+
"[&>*:not(:first-child)]:-mt-px",
|
|
423
|
+
"[&>pdm-button]:flex",
|
|
424
|
+
"[&>pdm-button>button]:h-9",
|
|
425
|
+
"[&>pdm-button>button]:!rounded-none",
|
|
426
|
+
"[&>pdm-button>button]:shadow-none",
|
|
427
|
+
"[&>pdm-button:first-child>button]:!rounded-t-md",
|
|
428
|
+
"[&>pdm-button:last-child>button]:!rounded-b-md",
|
|
429
|
+
"[&>pdm-input>div]:!rounded-none",
|
|
430
|
+
"[&>pdm-input>div]:shadow-none",
|
|
431
|
+
"[&>pdm-input>div>input]:!rounded-none",
|
|
432
|
+
"[&>pdm-input>div>input]:bg-background",
|
|
433
|
+
"[&>pdm-input>div>input]:shadow-none",
|
|
434
|
+
"[&>pdm-input:first-child>div]:!rounded-t-md",
|
|
435
|
+
"[&>pdm-input:last-child>div]:!rounded-b-md",
|
|
436
|
+
"[&>pdm-input:first-child>div>input]:!rounded-t-md",
|
|
437
|
+
"[&>pdm-input:last-child>div>input]:!rounded-b-md",
|
|
438
|
+
"[&>pdm-input-group>div]:!rounded-none",
|
|
439
|
+
"[&>pdm-input-group>div]:shadow-none",
|
|
440
|
+
"[&>pdm-input-group:first-child>div]:!rounded-t-md",
|
|
441
|
+
"[&>pdm-input-group:last-child>div]:!rounded-b-md",
|
|
442
|
+
"[&>pdm-select>select]:!rounded-none",
|
|
443
|
+
"[&>pdm-select>select]:shadow-none",
|
|
444
|
+
"[&>pdm-select>div>button]:!rounded-none",
|
|
445
|
+
"[&>pdm-select>div>button]:shadow-none",
|
|
446
|
+
"[&>pdm-select:first-child>select]:!rounded-t-md",
|
|
447
|
+
"[&>pdm-select:last-child>select]:!rounded-b-md",
|
|
448
|
+
"[&>pdm-select:first-child>div>button]:!rounded-t-md",
|
|
449
|
+
"[&>pdm-select:last-child>div>button]:!rounded-b-md",
|
|
450
|
+
"[&>pdm-select:not(:first-child)>div>button]:!rounded-t-none",
|
|
451
|
+
"[&>pdm-select:not(:last-child)>div>button]:!rounded-b-none",
|
|
452
|
+
"[&>pdm-tooltip>span>*]:rounded-none",
|
|
453
|
+
"[&>pdm-tooltip>span>*]:shadow-none",
|
|
454
|
+
"[&>pdm-tooltip:not(:first-child)>span>*]:border-t-0",
|
|
455
|
+
"[&>pdm-tooltip>span>button]:!rounded-none",
|
|
456
|
+
"[&>pdm-tooltip>span>button]:shadow-none",
|
|
457
|
+
"[&>pdm-tooltip:first-child>span>button]:!rounded-t-md",
|
|
458
|
+
"[&>pdm-tooltip:last-child>span>button]:!rounded-b-md",
|
|
459
|
+
"[&>pdm-tooltip>span>input]:!rounded-none",
|
|
460
|
+
"[&>pdm-tooltip>span>input]:bg-background",
|
|
461
|
+
"[&>pdm-tooltip>span>input]:shadow-none",
|
|
462
|
+
"[&>pdm-tooltip:first-child>span>input]:!rounded-t-md",
|
|
463
|
+
"[&>pdm-tooltip:last-child>span>input]:!rounded-b-md",
|
|
464
|
+
"[&>pdm-tooltip>span>select]:!rounded-none",
|
|
465
|
+
"[&>pdm-tooltip>span>select]:shadow-none",
|
|
466
|
+
"[&>pdm-tooltip:first-child>span>select]:!rounded-t-md",
|
|
467
|
+
"[&>pdm-tooltip:last-child>span>select]:!rounded-b-md",
|
|
468
|
+
"[&>pdm-tooltip>span>pdm-button>button]:!rounded-none",
|
|
469
|
+
"[&>pdm-tooltip>span>pdm-button>button]:shadow-none",
|
|
470
|
+
"[&>pdm-tooltip:first-child>span>pdm-button>button]:!rounded-t-md",
|
|
471
|
+
"[&>pdm-tooltip:last-child>span>pdm-button>button]:!rounded-b-md",
|
|
472
|
+
"[&>pdm-tooltip>span>pdm-input>div]:!rounded-none",
|
|
473
|
+
"[&>pdm-tooltip>span>pdm-input>div]:shadow-none",
|
|
474
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:!rounded-none",
|
|
475
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:bg-background",
|
|
476
|
+
"[&>pdm-tooltip>span>pdm-input>div>input]:shadow-none",
|
|
477
|
+
"[&>pdm-tooltip:first-child>span>pdm-input>div]:!rounded-t-md",
|
|
478
|
+
"[&>pdm-tooltip:last-child>span>pdm-input>div]:!rounded-b-md",
|
|
479
|
+
"[&>pdm-tooltip:first-child>span>pdm-input>div>input]:!rounded-t-md",
|
|
480
|
+
"[&>pdm-tooltip:last-child>span>pdm-input>div>input]:!rounded-b-md",
|
|
481
|
+
"[&>pdm-tooltip>span>pdm-input-group>div]:!rounded-none",
|
|
482
|
+
"[&>pdm-tooltip>span>pdm-input-group>div]:shadow-none",
|
|
483
|
+
"[&>pdm-tooltip:first-child>span>pdm-input-group>div]:!rounded-t-md",
|
|
484
|
+
"[&>pdm-tooltip:last-child>span>pdm-input-group>div]:!rounded-b-md",
|
|
485
|
+
"[&>pdm-tooltip>span>pdm-select>select]:!rounded-none",
|
|
486
|
+
"[&>pdm-tooltip>span>pdm-select>select]:shadow-none",
|
|
487
|
+
"[&>pdm-tooltip>span>pdm-select>div>button]:!rounded-none",
|
|
488
|
+
"[&>pdm-tooltip>span>pdm-select>div>button]:shadow-none",
|
|
489
|
+
"[&>pdm-tooltip:first-child>span>pdm-select>select]:!rounded-t-md",
|
|
490
|
+
"[&>pdm-tooltip:last-child>span>pdm-select>select]:!rounded-b-md",
|
|
491
|
+
"[&>pdm-tooltip:first-child>span>pdm-select>div>button]:!rounded-t-md",
|
|
492
|
+
"[&>pdm-tooltip:last-child>span>pdm-select>div>button]:!rounded-b-md",
|
|
493
|
+
"[&>pdm-tooltip:not(:first-child)>span>pdm-select>div>button]:!rounded-t-none",
|
|
494
|
+
"[&>pdm-tooltip:not(:last-child)>span>pdm-select>div>button]:!rounded-b-none",
|
|
495
|
+
],
|
|
496
|
+
};
|
|
497
|
+
const FOCUS_STACKING_CLASS = "*:focus-visible:relative *:focus-visible:z-10";
|
|
498
|
+
const SEPARATOR_CLASSES = "overflow-hidden rounded-md border border-border bg-secondary shadow-sm";
|
|
317
499
|
class PdmButtonGroupComponent {
|
|
318
500
|
constructor() {
|
|
319
|
-
this.variant =
|
|
501
|
+
this.variant = "default";
|
|
320
502
|
this.separated = true;
|
|
321
|
-
this.className =
|
|
503
|
+
this.className = "";
|
|
504
|
+
}
|
|
505
|
+
get axis() {
|
|
506
|
+
return this.orientation ?? this.direction ?? "horizontal";
|
|
507
|
+
}
|
|
508
|
+
get isVertical() {
|
|
509
|
+
return this.variant === "orientation" || this.axis === "vertical";
|
|
510
|
+
}
|
|
511
|
+
get shouldAttach() {
|
|
512
|
+
return !this.separated && this.variant !== "default";
|
|
513
|
+
}
|
|
514
|
+
get ariaOrientation() {
|
|
515
|
+
return this.isVertical ? "vertical" : "horizontal";
|
|
322
516
|
}
|
|
323
517
|
get rootClasses() {
|
|
324
|
-
const effectiveOrientation = this.orientation ?? this.direction ?? 'horizontal';
|
|
325
|
-
const isVertical = this.variant === 'orientation' || effectiveOrientation === 'vertical';
|
|
326
|
-
const isGroup = this.variant === 'group';
|
|
327
|
-
const isAttached = !this.separated && this.variant !== 'default';
|
|
328
|
-
const isSeparator = this.variant === 'separator';
|
|
329
|
-
const attachedClasses = isAttached && !isGroup
|
|
330
|
-
? isVertical
|
|
331
|
-
? [
|
|
332
|
-
'[&>*]:rounded-none',
|
|
333
|
-
'[&>*:first-child]:rounded-t-md',
|
|
334
|
-
'[&>*:last-child]:rounded-b-md',
|
|
335
|
-
'[&>*:not(:first-child)]:border-t-0',
|
|
336
|
-
'[&>*:not(:first-child)]:-mt-px'
|
|
337
|
-
].join(' ')
|
|
338
|
-
: [
|
|
339
|
-
'[&>*]:rounded-none',
|
|
340
|
-
'[&>*:first-child]:rounded-l-md',
|
|
341
|
-
'[&>*:last-child]:rounded-r-md',
|
|
342
|
-
'[&>*:not(:first-child)]:border-l-0',
|
|
343
|
-
'[&>*:not(:first-child)]:-ml-px'
|
|
344
|
-
].join(' ')
|
|
345
|
-
: '';
|
|
346
|
-
const groupHorizontalClasses = isGroup && !isVertical && !this.separated
|
|
347
|
-
? [
|
|
348
|
-
'[&>*]:rounded-none',
|
|
349
|
-
'[&>*:first-child]:rounded-l-md',
|
|
350
|
-
'[&>*:last-child]:rounded-r-md',
|
|
351
|
-
'[&>*:not(:first-child)]:-ml-px',
|
|
352
|
-
'[&>*:not(:first-child)]:border-l-0',
|
|
353
|
-
'[&>pdm-button]:flex',
|
|
354
|
-
'[&>pdm-button>button]:h-9',
|
|
355
|
-
'[&>pdm-input]:flex-1',
|
|
356
|
-
'[&>pdm-input>div]:w-full',
|
|
357
|
-
'[&>pdm-select>select]:!rounded-none',
|
|
358
|
-
'[&>pdm-select:first-child>select]:!rounded-l-md',
|
|
359
|
-
'[&>pdm-select:last-child>select]:!rounded-r-md',
|
|
360
|
-
'[&>pdm-select>select]:shadow-none',
|
|
361
|
-
'[&>pdm-select>div>button]:!rounded-none',
|
|
362
|
-
'[&>pdm-select:first-child>div>button]:!rounded-l-md',
|
|
363
|
-
'[&>pdm-select:last-child>div>button]:!rounded-r-md',
|
|
364
|
-
'[&>pdm-select:not(:first-child)>div>button]:!rounded-l-none',
|
|
365
|
-
'[&>pdm-select:not(:last-child)>div>button]:!rounded-r-none',
|
|
366
|
-
'[&>pdm-select>div>button]:shadow-none',
|
|
367
|
-
'[&>pdm-button>button]:!rounded-none',
|
|
368
|
-
'[&>pdm-button:first-child>button]:!rounded-l-md',
|
|
369
|
-
'[&>pdm-button:last-child>button]:!rounded-r-md',
|
|
370
|
-
'[&>pdm-input>div>input]:!rounded-none',
|
|
371
|
-
'[&>pdm-input:first-child>div>input]:!rounded-l-md',
|
|
372
|
-
'[&>pdm-input:last-child>div>input]:!rounded-r-md',
|
|
373
|
-
'[&>pdm-input-group>div]:!rounded-none',
|
|
374
|
-
'[&>pdm-input-group:first-child>div]:!rounded-l-md',
|
|
375
|
-
'[&>pdm-input-group:last-child>div]:!rounded-r-md',
|
|
376
|
-
'[&>pdm-input>div>input]:bg-background',
|
|
377
|
-
'[&>pdm-input>div>input]:shadow-none',
|
|
378
|
-
'[&>pdm-button>button]:rounded-l-none',
|
|
379
|
-
'[&>pdm-button>button]:shadow-none',
|
|
380
|
-
'[&>pdm-tooltip>span>*]:rounded-none',
|
|
381
|
-
'[&>pdm-tooltip:first-child>span>*]:rounded-l-md',
|
|
382
|
-
'[&>pdm-tooltip:last-child>span>*]:rounded-r-md',
|
|
383
|
-
'[&>pdm-tooltip:not(:first-child)>span>*]:border-l-0',
|
|
384
|
-
'[&>pdm-tooltip>span>pdm-button>button]:!rounded-none',
|
|
385
|
-
'[&>pdm-tooltip:first-child>span>pdm-button>button]:!rounded-l-md',
|
|
386
|
-
'[&>pdm-tooltip:last-child>span>pdm-button>button]:!rounded-r-md',
|
|
387
|
-
'[&>pdm-tooltip>span>pdm-button>button]:shadow-none',
|
|
388
|
-
'[&>pdm-tooltip>span>button]:!rounded-none',
|
|
389
|
-
'[&>pdm-tooltip:first-child>span>button]:!rounded-l-md',
|
|
390
|
-
'[&>pdm-tooltip:last-child>span>button]:!rounded-r-md',
|
|
391
|
-
'[&>pdm-tooltip>span>button]:shadow-none',
|
|
392
|
-
'[&>pdm-tooltip>span>pdm-input>div>input]:!rounded-none',
|
|
393
|
-
'[&>pdm-tooltip:first-child>span>pdm-input>div>input]:!rounded-l-md',
|
|
394
|
-
'[&>pdm-tooltip:last-child>span>pdm-input>div>input]:!rounded-r-md',
|
|
395
|
-
'[&>pdm-tooltip>span>pdm-input>div>input]:shadow-none',
|
|
396
|
-
'[&>pdm-tooltip>span>input]:!rounded-none',
|
|
397
|
-
'[&>pdm-tooltip:first-child>span>input]:!rounded-l-md',
|
|
398
|
-
'[&>pdm-tooltip:last-child>span>input]:!rounded-r-md',
|
|
399
|
-
'[&>pdm-tooltip>span>input]:shadow-none',
|
|
400
|
-
'[&>pdm-tooltip>span>pdm-input-group>div]:!rounded-none',
|
|
401
|
-
'[&>pdm-tooltip:first-child>span>pdm-input-group>div]:!rounded-l-md',
|
|
402
|
-
'[&>pdm-tooltip:last-child>span>pdm-input-group>div]:!rounded-r-md',
|
|
403
|
-
'[&>pdm-tooltip>span>pdm-select>select]:!rounded-none',
|
|
404
|
-
'[&>pdm-tooltip:first-child>span>pdm-select>select]:!rounded-l-md',
|
|
405
|
-
'[&>pdm-tooltip:last-child>span>pdm-select>select]:!rounded-r-md',
|
|
406
|
-
'[&>pdm-tooltip>span>pdm-select>select]:shadow-none',
|
|
407
|
-
'[&>pdm-tooltip>span>pdm-select>div>button]:!rounded-none',
|
|
408
|
-
'[&>pdm-tooltip:first-child>span>pdm-select>div>button]:!rounded-l-md',
|
|
409
|
-
'[&>pdm-tooltip:last-child>span>pdm-select>div>button]:!rounded-r-md',
|
|
410
|
-
'[&>pdm-tooltip:not(:first-child)>span>pdm-select>div>button]:!rounded-l-none',
|
|
411
|
-
'[&>pdm-tooltip:not(:last-child)>span>pdm-select>div>button]:!rounded-r-none',
|
|
412
|
-
'[&>pdm-tooltip>span>pdm-select>div>button]:shadow-none',
|
|
413
|
-
'[&>pdm-tooltip>span>select]:!rounded-none',
|
|
414
|
-
'[&>pdm-tooltip:first-child>span>select]:!rounded-l-md',
|
|
415
|
-
'[&>pdm-tooltip:last-child>span>select]:!rounded-r-md',
|
|
416
|
-
'[&>pdm-tooltip>span>select]:shadow-none'
|
|
417
|
-
].join(' ')
|
|
418
|
-
: '';
|
|
419
|
-
const groupVerticalClasses = isGroup && isVertical && !this.separated
|
|
420
|
-
? [
|
|
421
|
-
'[&>*]:rounded-none',
|
|
422
|
-
'[&>*:first-child]:rounded-t-md',
|
|
423
|
-
'[&>*:last-child]:rounded-b-md',
|
|
424
|
-
'[&>*:not(:first-child)]:-mt-px',
|
|
425
|
-
'[&>*:not(:first-child)]:border-t-0',
|
|
426
|
-
'[&>pdm-button]:flex',
|
|
427
|
-
'[&>pdm-button>button]:h-9',
|
|
428
|
-
'[&>pdm-button>button]:!rounded-none',
|
|
429
|
-
'[&>pdm-button:first-child>button]:!rounded-t-md',
|
|
430
|
-
'[&>pdm-button:last-child>button]:!rounded-b-md',
|
|
431
|
-
'[&>pdm-input>div>input]:!rounded-none',
|
|
432
|
-
'[&>pdm-input:first-child>div>input]:!rounded-t-md',
|
|
433
|
-
'[&>pdm-input:last-child>div>input]:!rounded-b-md',
|
|
434
|
-
'[&>pdm-input-group>div]:!rounded-none',
|
|
435
|
-
'[&>pdm-input-group:first-child>div]:!rounded-t-md',
|
|
436
|
-
'[&>pdm-input-group:last-child>div]:!rounded-b-md',
|
|
437
|
-
'[&>pdm-select>select]:!rounded-none',
|
|
438
|
-
'[&>pdm-select:first-child>select]:!rounded-t-md',
|
|
439
|
-
'[&>pdm-select:last-child>select]:!rounded-b-md',
|
|
440
|
-
'[&>pdm-select>select]:shadow-none',
|
|
441
|
-
'[&>pdm-select>div>button]:!rounded-none',
|
|
442
|
-
'[&>pdm-select:first-child>div>button]:!rounded-t-md',
|
|
443
|
-
'[&>pdm-select:last-child>div>button]:!rounded-b-md',
|
|
444
|
-
'[&>pdm-select:not(:first-child)>div>button]:!rounded-t-none',
|
|
445
|
-
'[&>pdm-select:not(:last-child)>div>button]:!rounded-b-none',
|
|
446
|
-
'[&>pdm-select>div>button]:shadow-none',
|
|
447
|
-
'[&>pdm-input>div>input]:bg-background',
|
|
448
|
-
'[&>pdm-input>div>input]:shadow-none',
|
|
449
|
-
'[&>pdm-button>button]:shadow-none',
|
|
450
|
-
'[&>pdm-tooltip>span>*]:rounded-none',
|
|
451
|
-
'[&>pdm-tooltip:first-child>span>*]:rounded-t-md',
|
|
452
|
-
'[&>pdm-tooltip:last-child>span>*]:rounded-b-md',
|
|
453
|
-
'[&>pdm-tooltip:not(:first-child)>span>*]:border-t-0',
|
|
454
|
-
'[&>pdm-tooltip>span>pdm-button>button]:!rounded-none',
|
|
455
|
-
'[&>pdm-tooltip:first-child>span>pdm-button>button]:!rounded-t-md',
|
|
456
|
-
'[&>pdm-tooltip:last-child>span>pdm-button>button]:!rounded-b-md',
|
|
457
|
-
'[&>pdm-tooltip>span>pdm-button>button]:shadow-none',
|
|
458
|
-
'[&>pdm-tooltip>span>button]:!rounded-none',
|
|
459
|
-
'[&>pdm-tooltip:first-child>span>button]:!rounded-t-md',
|
|
460
|
-
'[&>pdm-tooltip:last-child>span>button]:!rounded-b-md',
|
|
461
|
-
'[&>pdm-tooltip>span>button]:shadow-none',
|
|
462
|
-
'[&>pdm-tooltip>span>pdm-input>div>input]:!rounded-none',
|
|
463
|
-
'[&>pdm-tooltip:first-child>span>pdm-input>div>input]:!rounded-t-md',
|
|
464
|
-
'[&>pdm-tooltip:last-child>span>pdm-input>div>input]:!rounded-b-md',
|
|
465
|
-
'[&>pdm-tooltip>span>pdm-input>div>input]:shadow-none',
|
|
466
|
-
'[&>pdm-tooltip>span>input]:!rounded-none',
|
|
467
|
-
'[&>pdm-tooltip:first-child>span>input]:!rounded-t-md',
|
|
468
|
-
'[&>pdm-tooltip:last-child>span>input]:!rounded-b-md',
|
|
469
|
-
'[&>pdm-tooltip>span>input]:shadow-none',
|
|
470
|
-
'[&>pdm-tooltip>span>pdm-input-group>div]:!rounded-none',
|
|
471
|
-
'[&>pdm-tooltip:first-child>span>pdm-input-group>div]:!rounded-t-md',
|
|
472
|
-
'[&>pdm-tooltip:last-child>span>pdm-input-group>div]:!rounded-b-md',
|
|
473
|
-
'[&>pdm-tooltip>span>pdm-select>select]:!rounded-none',
|
|
474
|
-
'[&>pdm-tooltip:first-child>span>pdm-select>select]:!rounded-t-md',
|
|
475
|
-
'[&>pdm-tooltip:last-child>span>pdm-select>select]:!rounded-b-md',
|
|
476
|
-
'[&>pdm-tooltip>span>pdm-select>select]:shadow-none',
|
|
477
|
-
'[&>pdm-tooltip>span>pdm-select>div>button]:!rounded-none',
|
|
478
|
-
'[&>pdm-tooltip:first-child>span>pdm-select>div>button]:!rounded-t-md',
|
|
479
|
-
'[&>pdm-tooltip:last-child>span>pdm-select>div>button]:!rounded-b-md',
|
|
480
|
-
'[&>pdm-tooltip:not(:first-child)>span>pdm-select>div>button]:!rounded-t-none',
|
|
481
|
-
'[&>pdm-tooltip:not(:last-child)>span>pdm-select>div>button]:!rounded-b-none',
|
|
482
|
-
'[&>pdm-tooltip>span>pdm-select>div>button]:shadow-none',
|
|
483
|
-
'[&>pdm-tooltip>span>select]:!rounded-none',
|
|
484
|
-
'[&>pdm-tooltip:first-child>span>select]:!rounded-t-md',
|
|
485
|
-
'[&>pdm-tooltip:last-child>span>select]:!rounded-b-md',
|
|
486
|
-
'[&>pdm-tooltip>span>select]:shadow-none'
|
|
487
|
-
].join(' ')
|
|
488
|
-
: '';
|
|
489
518
|
return [
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
this.
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
this.className
|
|
519
|
+
ROOT_LAYOUT[this.isVertical ? "vertical" : "horizontal"],
|
|
520
|
+
this.variant === "default" || this.separated ? "gap-2" : "gap-0",
|
|
521
|
+
this.shouldAttach
|
|
522
|
+
? ATTACHMENT_EDGE_CLASSES[this.isVertical ? "vertical" : "horizontal"].join(" ")
|
|
523
|
+
: "",
|
|
524
|
+
this.shouldAttach
|
|
525
|
+
? ATTACHMENT_CONTROL_CLASSES[this.isVertical ? "vertical" : "horizontal"].join(" ")
|
|
526
|
+
: "",
|
|
527
|
+
this.shouldAttach ? FOCUS_STACKING_CLASS : "",
|
|
528
|
+
this.variant === "separator" ? SEPARATOR_CLASSES : "",
|
|
529
|
+
this.className,
|
|
501
530
|
];
|
|
502
531
|
}
|
|
503
532
|
}
|
|
504
533
|
PdmButtonGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
505
|
-
PdmButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmButtonGroupComponent, selector: "pdm-button-group", inputs: { variant: "variant", orientation: "orientation", direction: "direction", separated: "separated", className: "className" }, ngImport: i0, template: "<div\n role=\"group\"\n [attr.aria-orientation]=\"
|
|
534
|
+
PdmButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmButtonGroupComponent, selector: "pdm-button-group", inputs: { variant: "variant", orientation: "orientation", direction: "direction", separated: "separated", className: "className" }, ngImport: i0, template: "<div\n role=\"group\"\n [attr.aria-orientation]=\"ariaOrientation\"\n [ngClass]=\"rootClasses\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
506
535
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmButtonGroupComponent, decorators: [{
|
|
507
536
|
type: Component,
|
|
508
|
-
args: [{ selector:
|
|
537
|
+
args: [{ selector: "pdm-button-group", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n role=\"group\"\n [attr.aria-orientation]=\"ariaOrientation\"\n [ngClass]=\"rootClasses\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
509
538
|
}], propDecorators: { variant: [{
|
|
510
539
|
type: Input
|
|
511
540
|
}], orientation: [{
|
|
@@ -1535,35 +1564,212 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1535
1564
|
type: Output
|
|
1536
1565
|
}] } });
|
|
1537
1566
|
|
|
1567
|
+
/**
|
|
1568
|
+
* Z-Index helper for overlay components.
|
|
1569
|
+
*
|
|
1570
|
+
* CRITICAL: Consumer custom panelClass MUST NOT replace the base z-index.
|
|
1571
|
+
* This helper ensures z-index is preserved when merging custom classes.
|
|
1572
|
+
*/
|
|
1573
|
+
/**
|
|
1574
|
+
* Base z-index class for overlays - MUST be included in any overlay panel.
|
|
1575
|
+
* This ensures overlays appear above modals (z-50) and drawers (z-40).
|
|
1576
|
+
*/
|
|
1577
|
+
const OVERLAY_BASE_Z_INDEX = "z-[70]";
|
|
1578
|
+
/**
|
|
1579
|
+
* Merge consumer's panelClass with our base z-index.
|
|
1580
|
+
* Consumer classes are APPENDED, not replacing our z-index guarantee.
|
|
1581
|
+
*
|
|
1582
|
+
* @param baseZIndex - Base z-index class to enforce (default: OVERLAY_BASE_Z_INDEX)
|
|
1583
|
+
* @param consumerClasses - Optional additional classes from consumer
|
|
1584
|
+
* @returns Array of classes safe for CDK Overlay panelClass
|
|
1585
|
+
*/
|
|
1586
|
+
function mergeOverlayPanelClass(baseZIndex = OVERLAY_BASE_Z_INDEX, consumerClasses) {
|
|
1587
|
+
const baseClasses = baseZIndex.split(" ");
|
|
1588
|
+
if (!consumerClasses) {
|
|
1589
|
+
return baseClasses;
|
|
1590
|
+
}
|
|
1591
|
+
const consumerClassArray = Array.isArray(consumerClasses)
|
|
1592
|
+
? consumerClasses
|
|
1593
|
+
: consumerClasses.split(" ");
|
|
1594
|
+
// Consumer classes are appended AFTER base classes
|
|
1595
|
+
// This ensures z-index from baseClasses is preserved first
|
|
1596
|
+
return [...baseClasses, ...consumerClassArray];
|
|
1597
|
+
}
|
|
1598
|
+
/**
|
|
1599
|
+
* Create OverlayConfig with guaranteed z-index.
|
|
1600
|
+
* Use this instead of direct OverlayConfig to ensure z-index enforcement.
|
|
1601
|
+
*
|
|
1602
|
+
* @param baseConfig - Base overlay configuration
|
|
1603
|
+
* @param consumerPanelClass - Optional consumer panelClass to merge
|
|
1604
|
+
* @returns OverlayConfig with z-index guarantee
|
|
1605
|
+
*/
|
|
1606
|
+
function createZIndexEnforcedOverlay(baseConfig, consumerPanelClass) {
|
|
1607
|
+
const mergedClasses = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, consumerPanelClass);
|
|
1608
|
+
const existingPanelClass = baseConfig.panelClass;
|
|
1609
|
+
if (existingPanelClass) {
|
|
1610
|
+
const existingArray = Array.isArray(existingPanelClass)
|
|
1611
|
+
? existingPanelClass
|
|
1612
|
+
: existingPanelClass.split(" ");
|
|
1613
|
+
return {
|
|
1614
|
+
...baseConfig,
|
|
1615
|
+
panelClass: [...mergedClasses, ...existingArray],
|
|
1616
|
+
};
|
|
1617
|
+
}
|
|
1618
|
+
return {
|
|
1619
|
+
...baseConfig,
|
|
1620
|
+
panelClass: mergedClasses,
|
|
1621
|
+
};
|
|
1622
|
+
}
|
|
1623
|
+
/**
|
|
1624
|
+
* Helper to extract z-index from a class string for debugging.
|
|
1625
|
+
*/
|
|
1626
|
+
function extractZIndex(classes) {
|
|
1627
|
+
const classArray = Array.isArray(classes) ? classes : classes.split(" ");
|
|
1628
|
+
for (const cls of classArray) {
|
|
1629
|
+
if (cls.startsWith("z-") || cls.startsWith("z-[")) {
|
|
1630
|
+
return cls;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
return null;
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1538
1636
|
class PdmComboboxComponent {
|
|
1539
|
-
constructor() {
|
|
1637
|
+
constructor(overlay, viewContainerRef, elementRef, cdr) {
|
|
1638
|
+
this.overlay = overlay;
|
|
1639
|
+
this.viewContainerRef = viewContainerRef;
|
|
1640
|
+
this.elementRef = elementRef;
|
|
1641
|
+
this.cdr = cdr;
|
|
1540
1642
|
this.open = false;
|
|
1541
|
-
this.placeholder =
|
|
1542
|
-
this.searchPlaceholder =
|
|
1543
|
-
this.className =
|
|
1544
|
-
this.options = [
|
|
1545
|
-
|
|
1643
|
+
this.placeholder = "Select framework...";
|
|
1644
|
+
this.searchPlaceholder = "Search framework";
|
|
1645
|
+
this.className = "";
|
|
1646
|
+
this.options = [
|
|
1647
|
+
"Next.js",
|
|
1648
|
+
"SvelteKit",
|
|
1649
|
+
"Nuxt.js",
|
|
1650
|
+
"Remix",
|
|
1651
|
+
"Astro",
|
|
1652
|
+
];
|
|
1653
|
+
this.value = "";
|
|
1546
1654
|
this.width = 200;
|
|
1655
|
+
this.panelClassName = "";
|
|
1547
1656
|
this.openChange = new EventEmitter();
|
|
1548
1657
|
this.valueChange = new EventEmitter();
|
|
1658
|
+
this.overlayRef = null;
|
|
1659
|
+
this.outsideClickSub = null;
|
|
1660
|
+
}
|
|
1661
|
+
ngOnDestroy() {
|
|
1662
|
+
this.destroyOverlay();
|
|
1549
1663
|
}
|
|
1550
1664
|
get selectedLabel() {
|
|
1551
1665
|
return this.value || this.placeholder;
|
|
1552
1666
|
}
|
|
1553
1667
|
toggle() {
|
|
1554
|
-
|
|
1668
|
+
if (this.open) {
|
|
1669
|
+
this.close();
|
|
1670
|
+
}
|
|
1671
|
+
else {
|
|
1672
|
+
this.openPanel();
|
|
1673
|
+
}
|
|
1555
1674
|
}
|
|
1556
1675
|
select(option) {
|
|
1557
1676
|
this.valueChange.emit(option);
|
|
1677
|
+
this.value = option;
|
|
1678
|
+
this.close();
|
|
1679
|
+
}
|
|
1680
|
+
onEscape() {
|
|
1681
|
+
if (this.open) {
|
|
1682
|
+
this.close();
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
openPanel() {
|
|
1686
|
+
if (this.overlayRef)
|
|
1687
|
+
return;
|
|
1688
|
+
const triggerEl = this.triggerRef?.nativeElement;
|
|
1689
|
+
if (!triggerEl)
|
|
1690
|
+
return;
|
|
1691
|
+
this.open = true;
|
|
1692
|
+
this.openChange.emit(true);
|
|
1693
|
+
this.cdr.markForCheck();
|
|
1694
|
+
const positionStrategy = this.overlay
|
|
1695
|
+
.position()
|
|
1696
|
+
.flexibleConnectedTo(triggerEl)
|
|
1697
|
+
.withPositions(this.getPositionConfigs())
|
|
1698
|
+
.withFlexibleDimensions(false)
|
|
1699
|
+
.withPush(true);
|
|
1700
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
1701
|
+
this.overlayRef = this.overlay.create({
|
|
1702
|
+
positionStrategy,
|
|
1703
|
+
panelClass,
|
|
1704
|
+
});
|
|
1705
|
+
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
1706
|
+
this.overlayRef.attach(portal);
|
|
1707
|
+
// Close on click outside
|
|
1708
|
+
this.outsideClickSub = this.overlayRef
|
|
1709
|
+
.outsidePointerEvents()
|
|
1710
|
+
.subscribe(() => {
|
|
1711
|
+
this.close();
|
|
1712
|
+
});
|
|
1713
|
+
this.cdr.markForCheck();
|
|
1714
|
+
}
|
|
1715
|
+
close() {
|
|
1716
|
+
if (!this.overlayRef)
|
|
1717
|
+
return;
|
|
1718
|
+
this.open = false;
|
|
1558
1719
|
this.openChange.emit(false);
|
|
1720
|
+
this.cdr.markForCheck();
|
|
1721
|
+
this.destroyOverlay();
|
|
1722
|
+
}
|
|
1723
|
+
destroyOverlay() {
|
|
1724
|
+
if (this.outsideClickSub) {
|
|
1725
|
+
this.outsideClickSub.unsubscribe();
|
|
1726
|
+
this.outsideClickSub = null;
|
|
1727
|
+
}
|
|
1728
|
+
if (this.overlayRef) {
|
|
1729
|
+
this.overlayRef.detach();
|
|
1730
|
+
this.overlayRef.dispose();
|
|
1731
|
+
this.overlayRef = null;
|
|
1732
|
+
}
|
|
1733
|
+
}
|
|
1734
|
+
getPositionConfigs() {
|
|
1735
|
+
return [
|
|
1736
|
+
{
|
|
1737
|
+
originX: "start",
|
|
1738
|
+
originY: "bottom",
|
|
1739
|
+
overlayX: "start",
|
|
1740
|
+
overlayY: "top",
|
|
1741
|
+
offsetY: 4,
|
|
1742
|
+
},
|
|
1743
|
+
{
|
|
1744
|
+
originX: "start",
|
|
1745
|
+
originY: "top",
|
|
1746
|
+
overlayX: "start",
|
|
1747
|
+
overlayY: "bottom",
|
|
1748
|
+
offsetY: -4,
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
originX: "end",
|
|
1752
|
+
originY: "bottom",
|
|
1753
|
+
overlayX: "end",
|
|
1754
|
+
overlayY: "top",
|
|
1755
|
+
offsetY: 4,
|
|
1756
|
+
},
|
|
1757
|
+
{
|
|
1758
|
+
originX: "start",
|
|
1759
|
+
originY: "bottom",
|
|
1760
|
+
overlayX: "end",
|
|
1761
|
+
overlayY: "top",
|
|
1762
|
+
offsetY: 4,
|
|
1763
|
+
},
|
|
1764
|
+
];
|
|
1559
1765
|
}
|
|
1560
1766
|
}
|
|
1561
|
-
PdmComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1562
|
-
PdmComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmComboboxComponent, selector: "pdm-combobox", inputs: { open: "open", placeholder: "placeholder", searchPlaceholder: "searchPlaceholder", className: "className", options: "options", value: "value", width: "width" }, outputs: { openChange: "openChange", valueChange: "valueChange" }, ngImport: i0, template: "<div [ngClass]=\"['flex flex-col gap-1', className]\" [style.width.px]=\"width\">\n <button\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggle()\"\n >\n <span
|
|
1767
|
+
PdmComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmComboboxComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1768
|
+
PdmComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmComboboxComponent, selector: "pdm-combobox", inputs: { open: "open", placeholder: "placeholder", searchPlaceholder: "searchPlaceholder", className: "className", options: "options", value: "value", width: "width", panelClassName: "panelClassName" }, outputs: { openChange: "openChange", valueChange: "valueChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"['flex flex-col gap-1', className]\" [style.width.px]=\"width\">\n <button\n #triggerEl\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'listbox'\"\n (click)=\"toggle()\"\n >\n <span\n class=\"min-w-0 flex-1 truncate text-left text-sm font-medium text-foreground\"\n >{{ selectedLabel }}</span\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 15L12 20L17 15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path\n d=\"M17 9L12 4L7 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"w-full rounded-md border border-border bg-popover p-0 text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3 py-2\">\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-muted-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"7\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n ></circle>\n <path\n d=\"M20 20L16.6 16.6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n ></path>\n </svg>\n <div class=\"flex-1 py-2 text-sm text-muted-foreground\">\n {{ searchPlaceholder }}\n </div>\n </div>\n\n <div class=\"p-1\">\n <button\n *ngFor=\"let option of options\"\n type=\"button\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"option === value ? 'bg-accent text-accent-foreground' : ''\"\n role=\"option\"\n [attr.aria-selected]=\"option === value\"\n (click)=\"select(option)\"\n >\n <span class=\"min-w-0 flex-1 truncate\">{{ option }}</span>\n <svg\n *ngIf=\"option === value\"\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12.5L9.2 16.7L19 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1563
1769
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmComboboxComponent, decorators: [{
|
|
1564
1770
|
type: Component,
|
|
1565
|
-
args: [{ selector:
|
|
1566
|
-
}], propDecorators: { open: [{
|
|
1771
|
+
args: [{ selector: "pdm-combobox", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['flex flex-col gap-1', className]\" [style.width.px]=\"width\">\n <button\n #triggerEl\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'listbox'\"\n (click)=\"toggle()\"\n >\n <span\n class=\"min-w-0 flex-1 truncate text-left text-sm font-medium text-foreground\"\n >{{ selectedLabel }}</span\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 15L12 20L17 15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path\n d=\"M17 9L12 4L7 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"w-full rounded-md border border-border bg-popover p-0 text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3 py-2\">\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-muted-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"7\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n ></circle>\n <path\n d=\"M20 20L16.6 16.6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n ></path>\n </svg>\n <div class=\"flex-1 py-2 text-sm text-muted-foreground\">\n {{ searchPlaceholder }}\n </div>\n </div>\n\n <div class=\"p-1\">\n <button\n *ngFor=\"let option of options\"\n type=\"button\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"option === value ? 'bg-accent text-accent-foreground' : ''\"\n role=\"option\"\n [attr.aria-selected]=\"option === value\"\n (click)=\"select(option)\"\n >\n <span class=\"min-w-0 flex-1 truncate\">{{ option }}</span>\n <svg\n *ngIf=\"option === value\"\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12.5L9.2 16.7L19 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
1772
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { open: [{
|
|
1567
1773
|
type: Input
|
|
1568
1774
|
}], placeholder: [{
|
|
1569
1775
|
type: Input
|
|
@@ -1577,10 +1783,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1577
1783
|
type: Input
|
|
1578
1784
|
}], width: [{
|
|
1579
1785
|
type: Input
|
|
1786
|
+
}], panelClassName: [{
|
|
1787
|
+
type: Input
|
|
1580
1788
|
}], openChange: [{
|
|
1581
1789
|
type: Output
|
|
1582
1790
|
}], valueChange: [{
|
|
1583
1791
|
type: Output
|
|
1792
|
+
}], triggerRef: [{
|
|
1793
|
+
type: ViewChild,
|
|
1794
|
+
args: ["triggerEl"]
|
|
1795
|
+
}], panelTemplateRef: [{
|
|
1796
|
+
type: ViewChild,
|
|
1797
|
+
args: ["panelTemplate"]
|
|
1798
|
+
}], onEscape: [{
|
|
1799
|
+
type: HostListener,
|
|
1800
|
+
args: ["document:keydown.escape"]
|
|
1584
1801
|
}] } });
|
|
1585
1802
|
|
|
1586
1803
|
const FALLBACK_NODE = [['circle', { cx: '12', cy: '12', r: '9' }]];
|
|
@@ -1699,12 +1916,12 @@ class PdmIconComponent {
|
|
|
1699
1916
|
.replace(/>/g, '>');
|
|
1700
1917
|
}
|
|
1701
1918
|
}
|
|
1702
|
-
PdmIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmIconComponent, deps: [{ token: i1$
|
|
1919
|
+
PdmIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmIconComponent, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
1703
1920
|
PdmIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmIconComponent, selector: "pdm-icon", inputs: { name: "name", library: "library", assetUrl: "assetUrl", size: "size", strokeWidth: "strokeWidth", className: "className", ariaLabel: "ariaLabel", decorative: "decorative" }, ngImport: i0, template: "<ng-container *ngIf=\"assetUrl; else inlineIcon\">\n <img\n [src]=\"assetUrl\"\n [style.width.px]=\"resolvedSize\"\n [style.height.px]=\"resolvedSize\"\n [ngClass]=\"className\"\n [attr.role]=\"decorative ? null : 'img'\"\n [attr.aria-hidden]=\"decorative ? 'true' : null\"\n [attr.aria-label]=\"!decorative ? ariaLabel || name : null\"\n alt=\"\"\n />\n</ng-container>\n\n<ng-template #inlineIcon>\n <span\n [ngClass]=\"className\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.justify-content]=\"'center'\"\n [style.line-height]=\"0\"\n [style.width.px]=\"resolvedSize\"\n [style.height.px]=\"resolvedSize\"\n [attr.role]=\"decorative ? null : 'img'\"\n [attr.aria-hidden]=\"decorative ? 'true' : null\"\n [attr.aria-label]=\"!decorative ? ariaLabel || name : null\"\n [innerHTML]=\"svgMarkup\"\n ></span>\n</ng-template>\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;line-height:0;flex-shrink:0}:host svg{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1704
1921
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmIconComponent, decorators: [{
|
|
1705
1922
|
type: Component,
|
|
1706
1923
|
args: [{ selector: 'pdm-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"assetUrl; else inlineIcon\">\n <img\n [src]=\"assetUrl\"\n [style.width.px]=\"resolvedSize\"\n [style.height.px]=\"resolvedSize\"\n [ngClass]=\"className\"\n [attr.role]=\"decorative ? null : 'img'\"\n [attr.aria-hidden]=\"decorative ? 'true' : null\"\n [attr.aria-label]=\"!decorative ? ariaLabel || name : null\"\n alt=\"\"\n />\n</ng-container>\n\n<ng-template #inlineIcon>\n <span\n [ngClass]=\"className\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.justify-content]=\"'center'\"\n [style.line-height]=\"0\"\n [style.width.px]=\"resolvedSize\"\n [style.height.px]=\"resolvedSize\"\n [attr.role]=\"decorative ? null : 'img'\"\n [attr.aria-hidden]=\"decorative ? 'true' : null\"\n [attr.aria-label]=\"!decorative ? ariaLabel || name : null\"\n [innerHTML]=\"svgMarkup\"\n ></span>\n</ng-template>\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;line-height:0;flex-shrink:0}:host svg{display:block}\n"] }]
|
|
1707
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
1924
|
+
}], ctorParameters: function () { return [{ type: i1$2.DomSanitizer }]; }, propDecorators: { name: [{
|
|
1708
1925
|
type: Input
|
|
1709
1926
|
}], library: [{
|
|
1710
1927
|
type: Input
|
|
@@ -1794,72 +2011,140 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1794
2011
|
}] } });
|
|
1795
2012
|
|
|
1796
2013
|
class PdmContextMenuComponent {
|
|
1797
|
-
constructor(
|
|
1798
|
-
this.
|
|
2014
|
+
constructor(overlay, viewContainerRef, _elementRef, cdr) {
|
|
2015
|
+
this.overlay = overlay;
|
|
2016
|
+
this.viewContainerRef = viewContainerRef;
|
|
2017
|
+
this._elementRef = _elementRef;
|
|
2018
|
+
this.cdr = cdr;
|
|
1799
2019
|
this.items = [
|
|
1800
|
-
{ type:
|
|
1801
|
-
{
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
{
|
|
1810
|
-
|
|
1811
|
-
|
|
2020
|
+
{ type: "item", label: "Back", value: "back", inset: true, shortcut: "⌘[" },
|
|
2021
|
+
{
|
|
2022
|
+
type: "item",
|
|
2023
|
+
label: "Forward",
|
|
2024
|
+
value: "forward",
|
|
2025
|
+
inset: true,
|
|
2026
|
+
shortcut: "⌘]",
|
|
2027
|
+
disabled: true,
|
|
2028
|
+
},
|
|
2029
|
+
{
|
|
2030
|
+
type: "item",
|
|
2031
|
+
label: "Reload",
|
|
2032
|
+
value: "reload",
|
|
2033
|
+
inset: true,
|
|
2034
|
+
shortcut: "⌘R",
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
type: "item",
|
|
2038
|
+
label: "More Tools",
|
|
2039
|
+
value: "more-tools",
|
|
2040
|
+
inset: true,
|
|
2041
|
+
showChevron: true,
|
|
2042
|
+
},
|
|
2043
|
+
{ type: "separator" },
|
|
2044
|
+
{
|
|
2045
|
+
type: "item",
|
|
2046
|
+
label: "Show Bookmarks Bar",
|
|
2047
|
+
value: "show-bookmarks",
|
|
2048
|
+
checked: true,
|
|
2049
|
+
},
|
|
2050
|
+
{ type: "item", label: "Show Full URLs", value: "show-urls", inset: true },
|
|
2051
|
+
{ type: "separator" },
|
|
2052
|
+
{ type: "label", label: "People" },
|
|
2053
|
+
{ type: "separator" },
|
|
2054
|
+
{ type: "item", label: "Pedro Duarte", value: "pedro", selectedDot: true },
|
|
2055
|
+
{ type: "item", label: "Colm Tuite", value: "colm", inset: true },
|
|
1812
2056
|
];
|
|
1813
|
-
this.className =
|
|
1814
|
-
this.triggerLabel =
|
|
2057
|
+
this.className = "";
|
|
2058
|
+
this.triggerLabel = "Right click here";
|
|
1815
2059
|
this.width = 300;
|
|
1816
2060
|
this.height = 150;
|
|
2061
|
+
this.panelClassName = "";
|
|
1817
2062
|
this.itemSelect = new EventEmitter();
|
|
1818
2063
|
this.open = false;
|
|
1819
2064
|
this.x = 0;
|
|
1820
2065
|
this.y = 0;
|
|
2066
|
+
this.overlayRef = null;
|
|
2067
|
+
this.outsideClickSub = null;
|
|
1821
2068
|
}
|
|
1822
|
-
ngOnInit() {
|
|
1823
|
-
this.boundPointerDown = (event) => this.onDocumentPointerDown(event);
|
|
1824
|
-
document.addEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
1825
|
-
}
|
|
2069
|
+
ngOnInit() { }
|
|
1826
2070
|
ngOnDestroy() {
|
|
1827
|
-
|
|
1828
|
-
document.removeEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
1829
|
-
}
|
|
2071
|
+
this.destroyOverlay();
|
|
1830
2072
|
}
|
|
1831
2073
|
onContextMenu(event) {
|
|
1832
2074
|
event.preventDefault();
|
|
2075
|
+
event.stopPropagation();
|
|
1833
2076
|
this.x = event.clientX;
|
|
1834
2077
|
this.y = event.clientY;
|
|
1835
2078
|
this.open = true;
|
|
2079
|
+
this.cdr.markForCheck();
|
|
2080
|
+
this.createOverlay();
|
|
1836
2081
|
}
|
|
1837
2082
|
select(item) {
|
|
1838
|
-
if (item.disabled ||
|
|
2083
|
+
if (item.disabled ||
|
|
2084
|
+
item.type === "separator" ||
|
|
2085
|
+
item.type === "label" ||
|
|
2086
|
+
!item.value)
|
|
1839
2087
|
return;
|
|
1840
2088
|
this.itemSelect.emit(item.value);
|
|
1841
2089
|
this.open = false;
|
|
2090
|
+
this.cdr.markForCheck();
|
|
2091
|
+
this.destroyOverlay();
|
|
1842
2092
|
}
|
|
1843
|
-
|
|
1844
|
-
if (this.open) {
|
|
1845
|
-
|
|
2093
|
+
onDocumentClick(event) {
|
|
2094
|
+
if (this.open && event.type === "click") {
|
|
2095
|
+
// Don't close on click inside the menu
|
|
2096
|
+
if (this.overlayRef &&
|
|
2097
|
+
this.overlayRef.overlayElement.contains(event.target)) {
|
|
2098
|
+
return;
|
|
2099
|
+
}
|
|
2100
|
+
this.close();
|
|
1846
2101
|
}
|
|
1847
2102
|
}
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
const
|
|
1852
|
-
|
|
1853
|
-
|
|
2103
|
+
createOverlay() {
|
|
2104
|
+
this.destroyOverlay();
|
|
2105
|
+
// Create global position strategy at cursor position
|
|
2106
|
+
const positionStrategy = this.overlay
|
|
2107
|
+
.position()
|
|
2108
|
+
.global()
|
|
2109
|
+
.left(`${this.x}px`)
|
|
2110
|
+
.top(`${this.y}px`);
|
|
2111
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
2112
|
+
this.overlayRef = this.overlay.create({
|
|
2113
|
+
positionStrategy,
|
|
2114
|
+
panelClass,
|
|
2115
|
+
});
|
|
2116
|
+
const portal = new TemplatePortal(this.menuTemplateRef, this.viewContainerRef);
|
|
2117
|
+
this.overlayRef.attach(portal);
|
|
2118
|
+
// Close on click outside
|
|
2119
|
+
this.outsideClickSub = this.overlayRef
|
|
2120
|
+
.outsidePointerEvents()
|
|
2121
|
+
.subscribe(() => {
|
|
2122
|
+
this.close();
|
|
2123
|
+
});
|
|
2124
|
+
}
|
|
2125
|
+
close() {
|
|
2126
|
+
this.open = false;
|
|
2127
|
+
this.cdr.markForCheck();
|
|
2128
|
+
this.destroyOverlay();
|
|
2129
|
+
}
|
|
2130
|
+
destroyOverlay() {
|
|
2131
|
+
if (this.outsideClickSub) {
|
|
2132
|
+
this.outsideClickSub.unsubscribe();
|
|
2133
|
+
this.outsideClickSub = null;
|
|
2134
|
+
}
|
|
2135
|
+
if (this.overlayRef) {
|
|
2136
|
+
this.overlayRef.detach();
|
|
2137
|
+
this.overlayRef.dispose();
|
|
2138
|
+
this.overlayRef = null;
|
|
1854
2139
|
}
|
|
1855
2140
|
}
|
|
1856
2141
|
}
|
|
1857
|
-
PdmContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmContextMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1858
|
-
PdmContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmContextMenuComponent, selector: "pdm-context-menu", inputs: { items: "items", className: "className", triggerLabel: "triggerLabel", width: "width", height: "height" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:keydown.escape": "
|
|
2142
|
+
PdmContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmContextMenuComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2143
|
+
PdmContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmContextMenuComponent, selector: "pdm-context-menu", inputs: { items: "items", className: "className", triggerLabel: "triggerLabel", width: "width", height: "height", panelClassName: "panelClassName" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:keydown.escape": "onDocumentClick()", "document:click": "onDocumentClick()" } }, viewQueries: [{ propertyName: "menuTemplateRef", first: true, predicate: ["menuTemplate"], descendants: true }], ngImport: i0, template: "<div\n class=\"relative\"\n [ngClass]=\"className\"\n (contextmenu)=\"onContextMenu($event)\"\n>\n <div\n class=\"flex items-center justify-center rounded-md border border-dashed border-border\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n >\n <span class=\"text-sm font-medium text-foreground\">{{ triggerLabel }}</span>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-48 max-w-xs rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-52\"\n >\n <div>\n <ng-container *ngFor=\"let item of items\">\n <div\n *ngIf=\"item.type === 'separator'\"\n class=\"-mx-1 my-1 h-px bg-muted\"\n ></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n class=\"px-2 py-1.5 text-sm font-semibold text-foreground\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent py-1.5 pr-2 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n [ngClass]=\"item.inset ? 'pl-8' : 'px-2'\"\n (click)=\"select(item)\"\n >\n <span\n class=\"mr-2 inline-flex w-4 shrink-0 items-center justify-center text-foreground\"\n >\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12.5L9.2 16.7L19 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n <span\n *ngIf=\"item.selectedDot\"\n class=\"h-2 w-2 rounded-full bg-foreground\"\n ></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate text-foreground\">{{\n item.label\n }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{\n item.shortcut\n }}</span>\n <svg\n *ngIf=\"item.showChevron\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-muted-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 6L15 12L9 18\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1859
2144
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmContextMenuComponent, decorators: [{
|
|
1860
2145
|
type: Component,
|
|
1861
|
-
args: [{ selector:
|
|
1862
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { items: [{
|
|
2146
|
+
args: [{ selector: "pdm-context-menu", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"relative\"\n [ngClass]=\"className\"\n (contextmenu)=\"onContextMenu($event)\"\n>\n <div\n class=\"flex items-center justify-center rounded-md border border-dashed border-border\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n >\n <span class=\"text-sm font-medium text-foreground\">{{ triggerLabel }}</span>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-48 max-w-xs rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-52\"\n >\n <div>\n <ng-container *ngFor=\"let item of items\">\n <div\n *ngIf=\"item.type === 'separator'\"\n class=\"-mx-1 my-1 h-px bg-muted\"\n ></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n class=\"px-2 py-1.5 text-sm font-semibold text-foreground\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent py-1.5 pr-2 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n [ngClass]=\"item.inset ? 'pl-8' : 'px-2'\"\n (click)=\"select(item)\"\n >\n <span\n class=\"mr-2 inline-flex w-4 shrink-0 items-center justify-center text-foreground\"\n >\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12.5L9.2 16.7L19 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n <span\n *ngIf=\"item.selectedDot\"\n class=\"h-2 w-2 rounded-full bg-foreground\"\n ></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate text-foreground\">{{\n item.label\n }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{\n item.shortcut\n }}</span>\n <svg\n *ngIf=\"item.showChevron\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-muted-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 6L15 12L9 18\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
2147
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
|
|
1863
2148
|
type: Input
|
|
1864
2149
|
}], className: [{
|
|
1865
2150
|
type: Input
|
|
@@ -1869,11 +2154,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1869
2154
|
type: Input
|
|
1870
2155
|
}], height: [{
|
|
1871
2156
|
type: Input
|
|
2157
|
+
}], panelClassName: [{
|
|
2158
|
+
type: Input
|
|
1872
2159
|
}], itemSelect: [{
|
|
1873
2160
|
type: Output
|
|
1874
|
-
}],
|
|
2161
|
+
}], menuTemplateRef: [{
|
|
2162
|
+
type: ViewChild,
|
|
2163
|
+
args: ["menuTemplate"]
|
|
2164
|
+
}], onDocumentClick: [{
|
|
1875
2165
|
type: HostListener,
|
|
1876
|
-
args: [
|
|
2166
|
+
args: ["document:keydown.escape"]
|
|
2167
|
+
}, {
|
|
2168
|
+
type: HostListener,
|
|
2169
|
+
args: ["document:click"]
|
|
1877
2170
|
}] } });
|
|
1878
2171
|
|
|
1879
2172
|
/**
|
|
@@ -2045,7 +2338,7 @@ class PdmTableComponent {
|
|
|
2045
2338
|
* - data: tabla con bordes y espaciado para data
|
|
2046
2339
|
* - interactive: tabla con hover, sticky header y estilos interactivos
|
|
2047
2340
|
*/
|
|
2048
|
-
this.variant =
|
|
2341
|
+
this.variant = "default";
|
|
2049
2342
|
/**
|
|
2050
2343
|
* Estrategia responsive para la tabla
|
|
2051
2344
|
* - scroll: scroll horizontal en mobile (default, más simple)
|
|
@@ -2053,11 +2346,11 @@ class PdmTableComponent {
|
|
|
2053
2346
|
* - stack: convierte filas en cards en mobile (requiere data-label en celdas)
|
|
2054
2347
|
* - collapse: oculta columnas menos importantes en mobile
|
|
2055
2348
|
*/
|
|
2056
|
-
this.responsiveStrategy =
|
|
2349
|
+
this.responsiveStrategy = "scroll";
|
|
2057
2350
|
/**
|
|
2058
2351
|
* Clases CSS adicionales para el wrapper
|
|
2059
2352
|
*/
|
|
2060
|
-
this.className =
|
|
2353
|
+
this.className = "";
|
|
2061
2354
|
/**
|
|
2062
2355
|
* Si es true, aplica padding negativo en mobile para scroll edge-to-edge
|
|
2063
2356
|
* Útil cuando la tabla está dentro de un container con padding
|
|
@@ -2065,119 +2358,128 @@ class PdmTableComponent {
|
|
|
2065
2358
|
this.fullBleed = false;
|
|
2066
2359
|
}
|
|
2067
2360
|
get wrapperClasses() {
|
|
2068
|
-
const baseClasses = [
|
|
2361
|
+
const baseClasses = ["relative", "w-full"];
|
|
2069
2362
|
const strategyClasses = this.getResponsiveStrategyClasses();
|
|
2070
2363
|
const variantClasses = this.getVariantWrapperClasses();
|
|
2071
2364
|
// Full bleed: scroll edge-to-edge en mobile
|
|
2072
|
-
if (this.fullBleed && this.responsiveStrategy ===
|
|
2073
|
-
baseClasses.push(
|
|
2365
|
+
if (this.fullBleed && this.responsiveStrategy === "scroll") {
|
|
2366
|
+
baseClasses.push("-mx-4", "px-4", "sm:mx-0", "sm:px-0");
|
|
2074
2367
|
}
|
|
2075
2368
|
return [
|
|
2076
2369
|
...baseClasses,
|
|
2077
2370
|
...strategyClasses,
|
|
2078
2371
|
...variantClasses,
|
|
2079
|
-
this.className
|
|
2372
|
+
this.className,
|
|
2080
2373
|
].filter(Boolean);
|
|
2081
2374
|
}
|
|
2082
2375
|
get tableClasses() {
|
|
2083
|
-
const baseClasses = [
|
|
2376
|
+
const baseClasses = ["w-full", "caption-bottom", "text-sm"];
|
|
2084
2377
|
const variantClasses = this.getVariantTableClasses();
|
|
2085
2378
|
const cellClasses = this.getCellClasses();
|
|
2086
2379
|
return [...baseClasses, ...variantClasses, ...cellClasses].filter(Boolean);
|
|
2087
2380
|
}
|
|
2088
2381
|
getResponsiveStrategyClasses() {
|
|
2089
2382
|
const strategy = TABLE_RESPONSIVE[this.responsiveStrategy];
|
|
2090
|
-
if (this.responsiveStrategy ===
|
|
2091
|
-
return [
|
|
2383
|
+
if (this.responsiveStrategy === "scroll") {
|
|
2384
|
+
return ["overflow-x-auto"];
|
|
2092
2385
|
}
|
|
2093
|
-
if (this.responsiveStrategy ===
|
|
2094
|
-
return [
|
|
2386
|
+
if (this.responsiveStrategy === "wrap") {
|
|
2387
|
+
return ["overflow-x-auto"];
|
|
2095
2388
|
}
|
|
2096
|
-
if (this.responsiveStrategy ===
|
|
2389
|
+
if (this.responsiveStrategy === "stack") {
|
|
2097
2390
|
// Stack requiere lógica en el template, aquí solo el wrapper
|
|
2098
2391
|
return [];
|
|
2099
2392
|
}
|
|
2100
|
-
if (this.responsiveStrategy ===
|
|
2101
|
-
return [
|
|
2393
|
+
if (this.responsiveStrategy === "collapse") {
|
|
2394
|
+
return ["overflow-x-auto"];
|
|
2102
2395
|
}
|
|
2103
|
-
return [
|
|
2396
|
+
return ["overflow-auto"];
|
|
2104
2397
|
}
|
|
2105
2398
|
getVariantWrapperClasses() {
|
|
2106
|
-
if (this.variant ===
|
|
2107
|
-
return [
|
|
2399
|
+
if (this.variant === "interactive") {
|
|
2400
|
+
return ["rounded-xl", "border", "border-border", "bg-background"];
|
|
2108
2401
|
}
|
|
2109
|
-
if (this.variant ===
|
|
2110
|
-
return [
|
|
2402
|
+
if (this.variant === "data") {
|
|
2403
|
+
return ["rounded-md", "border", "border-border", "bg-background"];
|
|
2111
2404
|
}
|
|
2112
2405
|
return [];
|
|
2113
2406
|
}
|
|
2114
2407
|
getVariantTableClasses() {
|
|
2115
|
-
if (this.variant ===
|
|
2408
|
+
if (this.variant === "data") {
|
|
2116
2409
|
return [
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2410
|
+
"border-collapse",
|
|
2411
|
+
"text-foreground",
|
|
2412
|
+
"[&_thead_tr]:border-b",
|
|
2413
|
+
"[&_thead_tr]:border-border",
|
|
2414
|
+
"[&_tbody_tr]:border-b",
|
|
2415
|
+
"[&_tbody_tr]:border-border",
|
|
2416
|
+
"[&_tbody_tr:last-child]:border-b-0",
|
|
2417
|
+
"[&_th]:h-10",
|
|
2418
|
+
"[&_th]:px-2",
|
|
2419
|
+
"[&_th]:text-left",
|
|
2420
|
+
"[&_th]:align-middle",
|
|
2421
|
+
"[&_th]:font-medium",
|
|
2422
|
+
"[&_td]:p-2",
|
|
2423
|
+
"[&_td]:align-middle",
|
|
2131
2424
|
];
|
|
2132
2425
|
}
|
|
2133
|
-
if (this.variant ===
|
|
2426
|
+
if (this.variant === "interactive") {
|
|
2134
2427
|
return [
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2428
|
+
"text-foreground",
|
|
2429
|
+
"[&_thead]:sticky",
|
|
2430
|
+
"[&_thead]:top-0",
|
|
2431
|
+
"[&_thead]:z-10",
|
|
2432
|
+
"[&_thead]:bg-muted/70",
|
|
2433
|
+
"[&_thead_tr]:border-b",
|
|
2434
|
+
"[&_thead_tr]:border-border",
|
|
2435
|
+
"[&_th]:h-12",
|
|
2436
|
+
"[&_th]:px-4",
|
|
2437
|
+
"[&_th]:text-left",
|
|
2438
|
+
"[&_th]:align-middle",
|
|
2439
|
+
"[&_th]:text-sm",
|
|
2440
|
+
"[&_th]:font-medium",
|
|
2441
|
+
"[&_tbody_tr]:border-b",
|
|
2442
|
+
"[&_tbody_tr]:border-border",
|
|
2443
|
+
"[&_tbody_tr]:transition-colors",
|
|
2444
|
+
"[&_tbody_tr:hover]:bg-muted/50",
|
|
2445
|
+
"[&_tbody_tr:last-child]:border-b-0",
|
|
2446
|
+
"[&_td]:h-14",
|
|
2447
|
+
"[&_td]:px-4",
|
|
2448
|
+
"[&_td]:align-middle",
|
|
2449
|
+
"[&_td]:text-sm",
|
|
2450
|
+
"[&_svg]:text-muted-foreground",
|
|
2158
2451
|
];
|
|
2159
2452
|
}
|
|
2160
2453
|
return [];
|
|
2161
2454
|
}
|
|
2162
2455
|
getCellClasses() {
|
|
2163
2456
|
// Manejo responsive de whitespace
|
|
2164
|
-
if (this.responsiveStrategy ===
|
|
2457
|
+
if (this.responsiveStrategy === "scroll") {
|
|
2165
2458
|
// En scroll, permitir wrap en mobile, nowrap en desktop
|
|
2166
|
-
return [
|
|
2459
|
+
return [
|
|
2460
|
+
"[&_td]:whitespace-normal",
|
|
2461
|
+
"[&_th]:whitespace-normal",
|
|
2462
|
+
"sm:[&_td]:whitespace-nowrap",
|
|
2463
|
+
"sm:[&_th]:whitespace-nowrap",
|
|
2464
|
+
];
|
|
2167
2465
|
}
|
|
2168
|
-
if (this.responsiveStrategy ===
|
|
2466
|
+
if (this.responsiveStrategy === "wrap") {
|
|
2169
2467
|
// En wrap, siempre permitir wrap
|
|
2170
|
-
return [
|
|
2468
|
+
return [
|
|
2469
|
+
"[&_td]:whitespace-normal",
|
|
2470
|
+
"[&_td]:break-words",
|
|
2471
|
+
"[&_th]:whitespace-normal",
|
|
2472
|
+
];
|
|
2171
2473
|
}
|
|
2172
2474
|
// Default: nowrap (comportamiento anterior para backward compatibility)
|
|
2173
2475
|
return [];
|
|
2174
2476
|
}
|
|
2175
2477
|
}
|
|
2176
2478
|
PdmTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2177
|
-
PdmTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTableComponent, selector: "pdm-table", inputs: { variant: "variant", responsiveStrategy: "responsiveStrategy", className: "className", fullBleed: "fullBleed" }, ngImport: i0, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2479
|
+
PdmTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTableComponent, selector: "pdm-table", inputs: { variant: "variant", responsiveStrategy: "responsiveStrategy", className: "className", fullBleed: "fullBleed" }, ngImport: i0, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2178
2480
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTableComponent, decorators: [{
|
|
2179
2481
|
type: Component,
|
|
2180
|
-
args: [{ selector:
|
|
2482
|
+
args: [{ selector: "pdm-table", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
2181
2483
|
}], propDecorators: { variant: [{
|
|
2182
2484
|
type: Input
|
|
2183
2485
|
}], responsiveStrategy: [{
|
|
@@ -2423,10 +2725,10 @@ class PdmDataTableComponent {
|
|
|
2423
2725
|
}
|
|
2424
2726
|
}
|
|
2425
2727
|
PdmDataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2426
|
-
PdmDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDataTableComponent, selector: "pdm-data-table", inputs: { className: "className", columns: "columns", responsiveStrategy: "responsiveStrategy", selectable: "selectable", showActions: "showActions", showFilter: "showFilter", showPagination: "showPagination", showColumnSelector: "showColumnSelector", filterPlaceholder: "filterPlaceholder", columnsLabel: "columnsLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", emptyLabel: "emptyLabel", rowsSelectedLabel: "rowsSelectedLabel", statusLabel: "statusLabel", emailLabel: "emailLabel", amountLabel: "amountLabel", rows: "rows", page: "page", pageSize: "pageSize", query: "query", filterFn: "filterFn" }, outputs: { queryChange: "queryChange", rowAction: "rowAction", pageChange: "pageChange", selectionChange: "selectionChange", columnSort: "columnSort" }, ngImport: i0, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div
|
|
2728
|
+
PdmDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDataTableComponent, selector: "pdm-data-table", inputs: { className: "className", columns: "columns", responsiveStrategy: "responsiveStrategy", selectable: "selectable", showActions: "showActions", showFilter: "showFilter", showPagination: "showPagination", showColumnSelector: "showColumnSelector", filterPlaceholder: "filterPlaceholder", columnsLabel: "columnsLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", emptyLabel: "emptyLabel", rowsSelectedLabel: "rowsSelectedLabel", statusLabel: "statusLabel", emailLabel: "emailLabel", amountLabel: "amountLabel", rows: "rows", page: "page", pageSize: "pageSize", query: "query", filterFn: "filterFn" }, outputs: { queryChange: "queryChange", rowAction: "rowAction", pageChange: "pageChange", selectionChange: "selectionChange", columnSort: "columnSort" }, ngImport: i0, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div\n *ngIf=\"showFilter || showColumnSelector\"\n class=\"flex w-full flex-col gap-2 py-4 sm:flex-row sm:items-center\"\n >\n <input\n *ngIf=\"showFilter\"\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"query\"\n (input)=\"onQueryInput($event)\"\n class=\"h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n\n <button\n *ngIf=\"showColumnSelector\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm font-medium text-foreground shadow-sm whitespace-nowrap\"\n >\n <span>{{ columnsLabel }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 10L12 15L17 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n\n <!-- Tabla con responsive -->\n <pdm-table\n variant=\"data\"\n [responsiveStrategy]=\"responsiveStrategy\"\n [fullBleed]=\"false\"\n >\n <thead>\n <tr>\n <!-- Columna de selecci\u00F3n -->\n <th *ngIf=\"selectable\" class=\"w-10 px-2 py-2 text-left font-medium\">\n <input\n type=\"checkbox\"\n (change)=\"onToggleAll($event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </th>\n\n <!-- Columnas din\u00E1micas -->\n <th\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getHeaderClass(column)\"\n [ngStyle]=\"getColumnStyle(column)\"\n >\n <!-- Header sortable -->\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n (click)=\"onSort(column)\"\n class=\"inline-flex appearance-none items-center gap-1 rounded-sm border-0 bg-transparent px-3 py-2 text-sm hover:underline\"\n >\n <span>{{ column.label }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 6L4 10L8 14M16 18L20 14L16 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Header no sortable -->\n <span *ngIf=\"!column.sortable\">{{ column.label }}</span>\n </th>\n\n <!-- Columna de acciones -->\n <th *ngIf=\"showActions\" class=\"w-10 px-2 py-2\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!-- Filas con datos -->\n <tr *ngFor=\"let row of pagedRows\">\n <!-- Celda de selecci\u00F3n -->\n <td *ngIf=\"selectable\" class=\"px-2 py-2\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"onToggleRow(row, $event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </td>\n\n <!-- Celdas din\u00E1micas -->\n <td\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getCellClass(column)\"\n >\n <!-- Template personalizado si existe -->\n <ng-container *ngIf=\"column.cellTemplate; else defaultCell\">\n <ng-container\n *ngTemplateOutlet=\"\n column.cellTemplate;\n context: { $implicit: row, value: row[column.key] }\n \"\n >\n </ng-container>\n </ng-container>\n\n <!-- Renderizado default -->\n <ng-template #defaultCell>\n {{ getCellValue(row, column) }}\n </ng-template>\n </td>\n\n <!-- Celda de acciones -->\n <td *ngIf=\"showActions\" class=\"px-2 py-2\">\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 appearance-none items-center justify-center border-0 bg-transparent p-0 hover:text-foreground\"\n (click)=\"onAction(row)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n </svg>\n </button>\n </td>\n </tr>\n\n <!-- Fila vac\u00EDa -->\n <tr *ngIf=\"pagedRows.length === 0\">\n <td\n [attr.colspan]=\"\n effectiveColumns.length +\n (selectable ? 1 : 0) +\n (showActions ? 1 : 0)\n \"\n class=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {{ emptyLabel }}\n </td>\n </tr>\n </tbody>\n </pdm-table>\n\n <!-- Footer: Info + Paginaci\u00F3n -->\n <div\n *ngIf=\"showPagination || selectable\"\n class=\"flex w-full flex-wrap items-center gap-2 py-4 sm:flex-nowrap\"\n >\n <p\n *ngIf=\"selectable\"\n class=\"m-0 flex-1 pr-2 text-sm text-muted-foreground whitespace-nowrap\"\n >\n {{ selectedCount }} of {{ rows.length }} {{ rowsSelectedLabel }}\n </p>\n\n <div *ngIf=\"showPagination\" class=\"flex items-center gap-2 ml-auto\">\n <span class=\"text-sm text-muted-foreground whitespace-nowrap\">\n Page {{ page }} of {{ totalPages }}\n </span>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page <= 1\"\n (click)=\"previous()\"\n >\n {{ previousLabel }}\n </button>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page >= totalPages\"\n (click)=\"next()\"\n >\n {{ nextLabel }}\n </button>\n </div>\n </div>\n</section>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: PdmTableComponent, selector: "pdm-table", inputs: ["variant", "responsiveStrategy", "className", "fullBleed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2427
2729
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableComponent, decorators: [{
|
|
2428
2730
|
type: Component,
|
|
2429
|
-
args: [{ selector: 'pdm-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div
|
|
2731
|
+
args: [{ selector: 'pdm-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div\n *ngIf=\"showFilter || showColumnSelector\"\n class=\"flex w-full flex-col gap-2 py-4 sm:flex-row sm:items-center\"\n >\n <input\n *ngIf=\"showFilter\"\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"query\"\n (input)=\"onQueryInput($event)\"\n class=\"h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n\n <button\n *ngIf=\"showColumnSelector\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm font-medium text-foreground shadow-sm whitespace-nowrap\"\n >\n <span>{{ columnsLabel }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 10L12 15L17 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n\n <!-- Tabla con responsive -->\n <pdm-table\n variant=\"data\"\n [responsiveStrategy]=\"responsiveStrategy\"\n [fullBleed]=\"false\"\n >\n <thead>\n <tr>\n <!-- Columna de selecci\u00F3n -->\n <th *ngIf=\"selectable\" class=\"w-10 px-2 py-2 text-left font-medium\">\n <input\n type=\"checkbox\"\n (change)=\"onToggleAll($event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </th>\n\n <!-- Columnas din\u00E1micas -->\n <th\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getHeaderClass(column)\"\n [ngStyle]=\"getColumnStyle(column)\"\n >\n <!-- Header sortable -->\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n (click)=\"onSort(column)\"\n class=\"inline-flex appearance-none items-center gap-1 rounded-sm border-0 bg-transparent px-3 py-2 text-sm hover:underline\"\n >\n <span>{{ column.label }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 6L4 10L8 14M16 18L20 14L16 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Header no sortable -->\n <span *ngIf=\"!column.sortable\">{{ column.label }}</span>\n </th>\n\n <!-- Columna de acciones -->\n <th *ngIf=\"showActions\" class=\"w-10 px-2 py-2\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!-- Filas con datos -->\n <tr *ngFor=\"let row of pagedRows\">\n <!-- Celda de selecci\u00F3n -->\n <td *ngIf=\"selectable\" class=\"px-2 py-2\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"onToggleRow(row, $event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </td>\n\n <!-- Celdas din\u00E1micas -->\n <td\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getCellClass(column)\"\n >\n <!-- Template personalizado si existe -->\n <ng-container *ngIf=\"column.cellTemplate; else defaultCell\">\n <ng-container\n *ngTemplateOutlet=\"\n column.cellTemplate;\n context: { $implicit: row, value: row[column.key] }\n \"\n >\n </ng-container>\n </ng-container>\n\n <!-- Renderizado default -->\n <ng-template #defaultCell>\n {{ getCellValue(row, column) }}\n </ng-template>\n </td>\n\n <!-- Celda de acciones -->\n <td *ngIf=\"showActions\" class=\"px-2 py-2\">\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 appearance-none items-center justify-center border-0 bg-transparent p-0 hover:text-foreground\"\n (click)=\"onAction(row)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n </svg>\n </button>\n </td>\n </tr>\n\n <!-- Fila vac\u00EDa -->\n <tr *ngIf=\"pagedRows.length === 0\">\n <td\n [attr.colspan]=\"\n effectiveColumns.length +\n (selectable ? 1 : 0) +\n (showActions ? 1 : 0)\n \"\n class=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {{ emptyLabel }}\n </td>\n </tr>\n </tbody>\n </pdm-table>\n\n <!-- Footer: Info + Paginaci\u00F3n -->\n <div\n *ngIf=\"showPagination || selectable\"\n class=\"flex w-full flex-wrap items-center gap-2 py-4 sm:flex-nowrap\"\n >\n <p\n *ngIf=\"selectable\"\n class=\"m-0 flex-1 pr-2 text-sm text-muted-foreground whitespace-nowrap\"\n >\n {{ selectedCount }} of {{ rows.length }} {{ rowsSelectedLabel }}\n </p>\n\n <div *ngIf=\"showPagination\" class=\"flex items-center gap-2 ml-auto\">\n <span class=\"text-sm text-muted-foreground whitespace-nowrap\">\n Page {{ page }} of {{ totalPages }}\n </span>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page <= 1\"\n (click)=\"previous()\"\n >\n {{ previousLabel }}\n </button>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page >= totalPages\"\n (click)=\"next()\"\n >\n {{ nextLabel }}\n </button>\n </div>\n </div>\n</section>\n" }]
|
|
2430
2732
|
}], propDecorators: { className: [{
|
|
2431
2733
|
type: Input
|
|
2432
2734
|
}], columns: [{
|
|
@@ -2559,8 +2861,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
2559
2861
|
|
|
2560
2862
|
let nextDatePickerId = 0;
|
|
2561
2863
|
class PdmDatePickerComponent {
|
|
2562
|
-
constructor(
|
|
2563
|
-
this.elementRef = elementRef;
|
|
2864
|
+
constructor(cdr, overlay, viewContainerRef) {
|
|
2564
2865
|
this.cdr = cdr;
|
|
2565
2866
|
this.overlay = overlay;
|
|
2566
2867
|
this.viewContainerRef = viewContainerRef;
|
|
@@ -2571,21 +2872,21 @@ class PdmDatePickerComponent {
|
|
|
2571
2872
|
this.triggerFocused = false;
|
|
2572
2873
|
this.overlayRef = null;
|
|
2573
2874
|
this.backdropSub = null;
|
|
2574
|
-
this.id =
|
|
2575
|
-
this.variant =
|
|
2576
|
-
this.label =
|
|
2577
|
-
this.labelClassName =
|
|
2578
|
-
this.className =
|
|
2579
|
-
this.triggerClassName =
|
|
2875
|
+
this.id = "";
|
|
2876
|
+
this.variant = "single";
|
|
2877
|
+
this.label = "";
|
|
2878
|
+
this.labelClassName = "";
|
|
2879
|
+
this.className = "";
|
|
2880
|
+
this.triggerClassName = "";
|
|
2580
2881
|
/**
|
|
2581
2882
|
* Additional CSS classes applied to the overlay panel.
|
|
2582
2883
|
* Backward-compatible: mapped to `overlayOptions.panelClass` when `overlayOptions` is not set.
|
|
2583
2884
|
* When both are supplied, `overlayOptions.panelClass` takes precedence.
|
|
2584
2885
|
*/
|
|
2585
|
-
this.panelClassName =
|
|
2586
|
-
this.placeholder =
|
|
2587
|
-
this.rangePlaceholder =
|
|
2588
|
-
this.format =
|
|
2886
|
+
this.panelClassName = "";
|
|
2887
|
+
this.placeholder = "Pick a date";
|
|
2888
|
+
this.rangePlaceholder = "Pick a date range";
|
|
2889
|
+
this.format = "MMM d, yyyy";
|
|
2589
2890
|
this.disabled = false;
|
|
2590
2891
|
this.readonly = false;
|
|
2591
2892
|
this.required = false;
|
|
@@ -2606,7 +2907,7 @@ class PdmDatePickerComponent {
|
|
|
2606
2907
|
set open(value) {
|
|
2607
2908
|
if (this._open === !!value)
|
|
2608
2909
|
return;
|
|
2609
|
-
if (
|
|
2910
|
+
if (value) {
|
|
2610
2911
|
this.openPanel();
|
|
2611
2912
|
}
|
|
2612
2913
|
else {
|
|
@@ -2627,7 +2928,7 @@ class PdmDatePickerComponent {
|
|
|
2627
2928
|
this._rangeValue = value
|
|
2628
2929
|
? {
|
|
2629
2930
|
start: this.normalizeDate(value.start),
|
|
2630
|
-
end: this.normalizeDate(value.end)
|
|
2931
|
+
end: this.normalizeDate(value.end),
|
|
2631
2932
|
}
|
|
2632
2933
|
: null;
|
|
2633
2934
|
this.cdr.markForCheck();
|
|
@@ -2639,7 +2940,7 @@ class PdmDatePickerComponent {
|
|
|
2639
2940
|
this.destroyOverlay();
|
|
2640
2941
|
}
|
|
2641
2942
|
get resolvedVariant() {
|
|
2642
|
-
return this.variant ===
|
|
2943
|
+
return this.variant === "range" ? "range" : "single";
|
|
2643
2944
|
}
|
|
2644
2945
|
get triggerId() {
|
|
2645
2946
|
return this.id || `${this.instanceId}-trigger`;
|
|
@@ -2648,13 +2949,13 @@ class PdmDatePickerComponent {
|
|
|
2648
2949
|
return `${this.id || this.instanceId}-panel`;
|
|
2649
2950
|
}
|
|
2650
2951
|
get hasSingleValue() {
|
|
2651
|
-
return this.resolvedVariant ===
|
|
2952
|
+
return this.resolvedVariant === "single" && !!this._value;
|
|
2652
2953
|
}
|
|
2653
2954
|
get hasRangeValue() {
|
|
2654
|
-
return this.resolvedVariant ===
|
|
2955
|
+
return this.resolvedVariant === "range" && !!this._rangeValue?.start;
|
|
2655
2956
|
}
|
|
2656
2957
|
get displayText() {
|
|
2657
|
-
if (this.resolvedVariant ===
|
|
2958
|
+
if (this.resolvedVariant === "single") {
|
|
2658
2959
|
return this._value ? this.formatDate(this._value) : this.placeholder;
|
|
2659
2960
|
}
|
|
2660
2961
|
const start = this._rangeValue?.start ?? null;
|
|
@@ -2668,29 +2969,29 @@ class PdmDatePickerComponent {
|
|
|
2668
2969
|
return `${this.formatDate(start)} - ${this.formatDate(end)}`;
|
|
2669
2970
|
}
|
|
2670
2971
|
get textClasses() {
|
|
2671
|
-
const hasValue = this.resolvedVariant ===
|
|
2972
|
+
const hasValue = this.resolvedVariant === "single"
|
|
2973
|
+
? this.hasSingleValue
|
|
2974
|
+
: this.hasRangeValue;
|
|
2672
2975
|
return [
|
|
2673
|
-
|
|
2674
|
-
hasValue ?
|
|
2976
|
+
"min-w-0 flex-1 truncate text-left text-sm leading-5",
|
|
2977
|
+
hasValue ? "text-foreground" : "text-muted-foreground",
|
|
2675
2978
|
];
|
|
2676
2979
|
}
|
|
2677
2980
|
get rootClasses() {
|
|
2678
2981
|
return [
|
|
2679
|
-
|
|
2680
|
-
this.resolvedVariant ===
|
|
2681
|
-
this.className
|
|
2982
|
+
"grid gap-2",
|
|
2983
|
+
this.resolvedVariant === "range" ? "w-[280px]" : "w-[197px]",
|
|
2984
|
+
this.className,
|
|
2682
2985
|
];
|
|
2683
2986
|
}
|
|
2684
2987
|
get triggerClasses() {
|
|
2685
2988
|
const focusStyle = this._open || this.triggerFocused;
|
|
2686
2989
|
return [
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
focusStyle
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
this.invalid ? 'border-destructive ring-destructive/20' : '',
|
|
2693
|
-
this.triggerClassName
|
|
2990
|
+
"border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive relative flex w-full appearance-none items-center gap-2 overflow-hidden rounded-lg border bg-background px-3 py-[7.5px] text-left text-sm shadow-sm outline-none transition-colors",
|
|
2991
|
+
"min-h-[36px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
2992
|
+
focusStyle ? "border-ring ring-2 ring-ring/50" : "",
|
|
2993
|
+
this.invalid ? "border-destructive ring-destructive/20" : "",
|
|
2994
|
+
this.triggerClassName,
|
|
2694
2995
|
];
|
|
2695
2996
|
}
|
|
2696
2997
|
toggleOpen() {
|
|
@@ -2721,16 +3022,22 @@ class PdmDatePickerComponent {
|
|
|
2721
3022
|
this._rangeValue = value
|
|
2722
3023
|
? {
|
|
2723
3024
|
start: this.normalizeDate(value.start),
|
|
2724
|
-
end: this.normalizeDate(value.end)
|
|
3025
|
+
end: this.normalizeDate(value.end),
|
|
2725
3026
|
}
|
|
2726
3027
|
: null;
|
|
2727
3028
|
this.rangeValueChange.emit(this._rangeValue
|
|
2728
3029
|
? {
|
|
2729
|
-
start: this._rangeValue.start
|
|
2730
|
-
|
|
3030
|
+
start: this._rangeValue.start
|
|
3031
|
+
? this.cloneDate(this._rangeValue.start)
|
|
3032
|
+
: null,
|
|
3033
|
+
end: this._rangeValue.end
|
|
3034
|
+
? this.cloneDate(this._rangeValue.end)
|
|
3035
|
+
: null,
|
|
2731
3036
|
}
|
|
2732
3037
|
: null);
|
|
2733
|
-
if (this.closeOnSelect &&
|
|
3038
|
+
if (this.closeOnSelect &&
|
|
3039
|
+
this._rangeValue?.start &&
|
|
3040
|
+
this._rangeValue?.end) {
|
|
2734
3041
|
this.setOpen(false);
|
|
2735
3042
|
return;
|
|
2736
3043
|
}
|
|
@@ -2765,20 +3072,26 @@ class PdmDatePickerComponent {
|
|
|
2765
3072
|
this.openChange.emit(true);
|
|
2766
3073
|
this.cdr.markForCheck();
|
|
2767
3074
|
const positionStrategy = createFlexiblePositionStrategy(this.overlay, triggerEl, 8);
|
|
2768
|
-
//
|
|
3075
|
+
// CRITICAL: Use mergeOverlayPanelClass to ensure z-index is never lost.
|
|
3076
|
+
// Consumer classes are appended AFTER base z-index.
|
|
3077
|
+
const zIndexEnforced = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
3078
|
+
// Resolve panelClass: overlayOptions.panelClass wins; otherwise use z-index enforced.
|
|
2769
3079
|
const resolvedPanelClass = this.overlayOptions?.panelClass
|
|
2770
|
-
|
|
3080
|
+
? mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.overlayOptions.panelClass)
|
|
3081
|
+
: zIndexEnforced;
|
|
2771
3082
|
this.overlayRef = this.overlay.create({
|
|
2772
3083
|
positionStrategy,
|
|
2773
3084
|
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
2774
|
-
// Consumer overrides are spread
|
|
3085
|
+
// Consumer overrides are spread first.
|
|
2775
3086
|
...this.overlayOptions,
|
|
2776
|
-
// panelClass always
|
|
2777
|
-
panelClass: resolvedPanelClass
|
|
3087
|
+
// panelClass always enforced last to preserve z-index.
|
|
3088
|
+
panelClass: resolvedPanelClass,
|
|
2778
3089
|
});
|
|
2779
3090
|
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
2780
3091
|
this.overlayRef.attach(portal);
|
|
2781
|
-
this.backdropSub = this.overlayRef
|
|
3092
|
+
this.backdropSub = this.overlayRef
|
|
3093
|
+
.outsidePointerEvents()
|
|
3094
|
+
.subscribe((event) => {
|
|
2782
3095
|
const target = event.target;
|
|
2783
3096
|
if (!triggerEl.contains(target)) {
|
|
2784
3097
|
this.closePanel();
|
|
@@ -2806,10 +3119,10 @@ class PdmDatePickerComponent {
|
|
|
2806
3119
|
}
|
|
2807
3120
|
formatDate(date) {
|
|
2808
3121
|
try {
|
|
2809
|
-
return format(date, this.format ||
|
|
3122
|
+
return format(date, this.format || "MMM d, yyyy");
|
|
2810
3123
|
}
|
|
2811
3124
|
catch {
|
|
2812
|
-
return format(date,
|
|
3125
|
+
return format(date, "MMM d, yyyy");
|
|
2813
3126
|
}
|
|
2814
3127
|
}
|
|
2815
3128
|
normalizeDate(value) {
|
|
@@ -2822,17 +3135,17 @@ class PdmDatePickerComponent {
|
|
|
2822
3135
|
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
2823
3136
|
}
|
|
2824
3137
|
}
|
|
2825
|
-
PdmDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, deps: [{ token: i0.
|
|
3138
|
+
PdmDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2826
3139
|
PdmDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDatePickerComponent, selector: "pdm-date-picker", inputs: { id: "id", variant: "variant", label: "label", labelClassName: "labelClassName", className: "className", triggerClassName: "triggerClassName", panelClassName: "panelClassName", overlayOptions: "overlayOptions", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", allowSameDayRange: "allowSameDayRange", closeOnSelect: "closeOnSelect", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", disabledDates: "disabledDates", isDateDisabled: "isDateDisabled", open: "open", value: "value", rangeValue: "rangeValue" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", openChange: "openChange", monthChange: "monthChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmCalendarComponent, selector: "pdm-calendar", inputs: ["variant", "className", "disabledDates", "minDate", "maxDate", "minYear", "maxYear", "isDateDisabled", "allowSameDayRange", "readonly", "value", "rangeValue", "month"], outputs: ["valueChange", "rangeValueChange", "monthChange", "dateClick", "disabledDateClick"] }, { kind: "component", type: PdmLabelComponent, selector: "pdm-label", inputs: ["forId", "required", "className"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2827
3140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, decorators: [{
|
|
2828
3141
|
type: Component,
|
|
2829
|
-
args: [{ selector:
|
|
2830
|
-
}], ctorParameters: function () { return [{ type: i0.
|
|
3142
|
+
args: [{ selector: "pdm-date-picker", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n" }]
|
|
3143
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { triggerRef: [{
|
|
2831
3144
|
type: ViewChild,
|
|
2832
|
-
args: [
|
|
3145
|
+
args: ["triggerEl"]
|
|
2833
3146
|
}], panelTemplateRef: [{
|
|
2834
3147
|
type: ViewChild,
|
|
2835
|
-
args: [
|
|
3148
|
+
args: ["panelTemplate"]
|
|
2836
3149
|
}], id: [{
|
|
2837
3150
|
type: Input
|
|
2838
3151
|
}], variant: [{
|
|
@@ -2895,7 +3208,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
2895
3208
|
type: Input
|
|
2896
3209
|
}], onEscape: [{
|
|
2897
3210
|
type: HostListener,
|
|
2898
|
-
args: [
|
|
3211
|
+
args: ["document:keydown.escape"]
|
|
2899
3212
|
}] } });
|
|
2900
3213
|
|
|
2901
3214
|
/**
|
|
@@ -2905,15 +3218,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
2905
3218
|
* 1. base (z-0) - Elementos normales del DOM
|
|
2906
3219
|
* 2. dropdown (z-10) - Selects, combobox, date-pickers
|
|
2907
3220
|
* 3. sticky (z-20) - Headers, navigation bars
|
|
2908
|
-
* 4.
|
|
3221
|
+
* 4. drawerBackdrop (z-30) - Backdrop de drawers
|
|
2909
3222
|
* 5. drawer (z-40) - Sidebar drawer, sheets laterales
|
|
2910
|
-
* 6.
|
|
2911
|
-
* 7. modal
|
|
2912
|
-
* 8. popover (z-
|
|
3223
|
+
* 6. modalBackdrop (z-40) - Backdrop de modals ( mismo nivel que drawer)
|
|
3224
|
+
* 7. modal (z-50) - Dialogs, alert-dialogs
|
|
3225
|
+
* 8. popover (z-[70]) - Tooltips, dropdowns DENTRO de modals
|
|
2913
3226
|
* 9. toast (z-[100]) - Notificaciones que deben estar sobre TODO
|
|
2914
3227
|
*
|
|
2915
3228
|
* REGLA CRÍTICA:
|
|
2916
|
-
* - Componentes overlay (select options, dropdown menu, tooltip) SIEMPRE z-
|
|
3229
|
+
* - Componentes overlay (select options, dropdown menu, tooltip) SIEMPRE z-[70] o mayor
|
|
2917
3230
|
* - Esto permite que funcionen DENTRO de modals (z-50)
|
|
2918
3231
|
* - Backdrop de modal debe ser z-40 para estar DEBAJO del contenido del modal (z-50)
|
|
2919
3232
|
*/
|
|
@@ -2921,57 +3234,53 @@ const Z_INDEX = {
|
|
|
2921
3234
|
/**
|
|
2922
3235
|
* Base - contenido normal del DOM
|
|
2923
3236
|
*/
|
|
2924
|
-
base:
|
|
3237
|
+
base: "z-0",
|
|
2925
3238
|
/**
|
|
2926
3239
|
* Dropdown - Selects, combobox, date-pickers
|
|
2927
|
-
* Debe estar SOBRE contenido normal pero BAJO
|
|
3240
|
+
* Debe estar SOBRE contenido normal pero BAJO overlays
|
|
2928
3241
|
*/
|
|
2929
|
-
dropdown:
|
|
3242
|
+
dropdown: "z-10",
|
|
2930
3243
|
/**
|
|
2931
3244
|
* Sticky - Headers, navigation fija
|
|
2932
3245
|
*/
|
|
2933
|
-
sticky:
|
|
2934
|
-
/**
|
|
2935
|
-
* Overlay - Popovers, hover cards, context menus
|
|
2936
|
-
* Debe estar SOBRE sticky pero BAJO modals
|
|
2937
|
-
*/
|
|
2938
|
-
overlay: 'z-30',
|
|
3246
|
+
sticky: "z-20",
|
|
2939
3247
|
/**
|
|
2940
3248
|
* Drawer backdrop - Backdrop de sidebar drawer
|
|
2941
|
-
* Debe estar DEBAJO del drawer panel
|
|
3249
|
+
* Debe estar DEBAJO del drawer panel y DEBAJO de modals
|
|
2942
3250
|
*/
|
|
2943
|
-
drawerBackdrop:
|
|
3251
|
+
drawerBackdrop: "z-30",
|
|
2944
3252
|
/**
|
|
2945
3253
|
* Drawer - Sidebar drawer, sheets laterales
|
|
2946
3254
|
* Debe estar SOBRE su backdrop pero BAJO modals
|
|
2947
3255
|
*/
|
|
2948
|
-
drawer:
|
|
3256
|
+
drawer: "z-40",
|
|
2949
3257
|
/**
|
|
2950
3258
|
* Modal backdrop - Backdrop de dialogs
|
|
2951
|
-
*
|
|
3259
|
+
* Mismo nivel que drawer backdrop (z-40)
|
|
2952
3260
|
*/
|
|
2953
|
-
modalBackdrop:
|
|
3261
|
+
modalBackdrop: "z-40",
|
|
2954
3262
|
/**
|
|
2955
|
-
* Modal - Dialogs, alert-dialogs
|
|
3263
|
+
* Modal - Dialogs, alert-dialogs
|
|
2956
3264
|
* Debe estar SOBRE su backdrop
|
|
2957
3265
|
*/
|
|
2958
|
-
modal:
|
|
3266
|
+
modal: "z-50",
|
|
2959
3267
|
/**
|
|
2960
3268
|
* Popover - Tooltips, dropdowns, selects options DENTRO de modals
|
|
2961
3269
|
* CRÍTICO: Debe ser MAYOR que modal (z-50) para aparecer sobre modals
|
|
3270
|
+
* USAR SIEMPRE mergeOverlayPanelClass() para asegurar este valor
|
|
2962
3271
|
*/
|
|
2963
|
-
popover:
|
|
3272
|
+
popover: "z-[70]",
|
|
2964
3273
|
/**
|
|
2965
3274
|
* Toast - Notificaciones globales
|
|
2966
3275
|
* Debe estar sobre TODO
|
|
2967
3276
|
*/
|
|
2968
|
-
toast:
|
|
3277
|
+
toast: "z-[100]",
|
|
2969
3278
|
};
|
|
2970
3279
|
/**
|
|
2971
3280
|
* Helper para debugging z-index issues
|
|
2972
3281
|
*/
|
|
2973
3282
|
function logZIndexStack(element) {
|
|
2974
|
-
if (typeof window ===
|
|
3283
|
+
if (typeof window === "undefined")
|
|
2975
3284
|
return;
|
|
2976
3285
|
let current = element;
|
|
2977
3286
|
const stack = [];
|
|
@@ -2979,11 +3288,12 @@ function logZIndexStack(element) {
|
|
|
2979
3288
|
const computed = window.getComputedStyle(current);
|
|
2980
3289
|
const zIndex = computed.zIndex;
|
|
2981
3290
|
const position = computed.position;
|
|
2982
|
-
if (zIndex !==
|
|
3291
|
+
if (zIndex !== "auto") {
|
|
2983
3292
|
stack.push({
|
|
2984
|
-
element: current.tagName +
|
|
3293
|
+
element: current.tagName +
|
|
3294
|
+
(current.className ? `.${current.className.split(" ")[0]}` : ""),
|
|
2985
3295
|
zIndex,
|
|
2986
|
-
position
|
|
3296
|
+
position,
|
|
2987
3297
|
});
|
|
2988
3298
|
}
|
|
2989
3299
|
current = current.parentElement;
|
|
@@ -3014,7 +3324,7 @@ function logZIndexStack(element) {
|
|
|
3014
3324
|
class PdmDialogComponent {
|
|
3015
3325
|
constructor() {
|
|
3016
3326
|
this.open = false;
|
|
3017
|
-
this.variant =
|
|
3327
|
+
this.variant = "default";
|
|
3018
3328
|
/**
|
|
3019
3329
|
* Tamaño del dialog
|
|
3020
3330
|
* - responsive: fullscreen mobile, modal desktop (recomendado)
|
|
@@ -3024,21 +3334,21 @@ class PdmDialogComponent {
|
|
|
3024
3334
|
* - xl: 800px max
|
|
3025
3335
|
* - desktop/mobile/mobile-fullscreen: legacy, deprecado
|
|
3026
3336
|
*/
|
|
3027
|
-
this.size =
|
|
3028
|
-
this.title =
|
|
3029
|
-
this.description =
|
|
3337
|
+
this.size = "responsive";
|
|
3338
|
+
this.title = "Edit profile";
|
|
3339
|
+
this.description = "";
|
|
3030
3340
|
this.closeOnBackdrop = true;
|
|
3031
3341
|
this.closeOnEsc = true;
|
|
3032
3342
|
this.showCloseButton = true;
|
|
3033
3343
|
this.showHeader = true;
|
|
3034
3344
|
this.showFooter = true;
|
|
3035
|
-
this.primaryActionText =
|
|
3036
|
-
this.secondaryActionText =
|
|
3037
|
-
this.alignFooter =
|
|
3038
|
-
this.headerClassName =
|
|
3039
|
-
this.bodyClassName =
|
|
3040
|
-
this.footerClassName =
|
|
3041
|
-
this.className =
|
|
3345
|
+
this.primaryActionText = "Save changes";
|
|
3346
|
+
this.secondaryActionText = "Cancel";
|
|
3347
|
+
this.alignFooter = "right";
|
|
3348
|
+
this.headerClassName = "";
|
|
3349
|
+
this.bodyClassName = "";
|
|
3350
|
+
this.footerClassName = "";
|
|
3351
|
+
this.className = "";
|
|
3042
3352
|
this.openChange = new EventEmitter();
|
|
3043
3353
|
this.primaryAction = new EventEmitter();
|
|
3044
3354
|
this.secondaryAction = new EventEmitter();
|
|
@@ -3064,131 +3374,148 @@ class PdmDialogComponent {
|
|
|
3064
3374
|
}
|
|
3065
3375
|
get panelClassName() {
|
|
3066
3376
|
// Legacy sizes (backward compatibility)
|
|
3067
|
-
if (this.size ===
|
|
3068
|
-
return this.
|
|
3377
|
+
if (this.size === "desktop") {
|
|
3378
|
+
return this.buildPanelClasses([
|
|
3379
|
+
"max-w-[640px]",
|
|
3380
|
+
"max-h-[calc(100vh-2rem)]",
|
|
3381
|
+
"rounded-[10px]",
|
|
3382
|
+
]);
|
|
3069
3383
|
}
|
|
3070
|
-
if (this.size ===
|
|
3071
|
-
return this.
|
|
3384
|
+
if (this.size === "mobile") {
|
|
3385
|
+
return this.buildPanelClasses([
|
|
3386
|
+
"max-w-[320px]",
|
|
3387
|
+
"min-h-[240px]",
|
|
3388
|
+
"rounded-[10px]",
|
|
3389
|
+
]);
|
|
3072
3390
|
}
|
|
3073
|
-
if (this.size ===
|
|
3074
|
-
return this.
|
|
3391
|
+
if (this.size === "mobile-fullscreen") {
|
|
3392
|
+
return this.buildPanelClasses([
|
|
3393
|
+
"max-w-[320px]",
|
|
3394
|
+
"h-[min(100dvh,640px)]",
|
|
3395
|
+
"rounded-none",
|
|
3396
|
+
"sm:rounded-[10px]",
|
|
3397
|
+
]);
|
|
3075
3398
|
}
|
|
3076
3399
|
// New responsive mode (recomendado)
|
|
3077
|
-
if (this.size ===
|
|
3078
|
-
return this.
|
|
3400
|
+
if (this.size === "responsive") {
|
|
3401
|
+
return this.buildPanelClasses([
|
|
3079
3402
|
// Mobile: fullscreen con bordes redondeados solo arriba
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3403
|
+
"w-full",
|
|
3404
|
+
"h-full",
|
|
3405
|
+
"max-h-[100dvh]",
|
|
3406
|
+
"rounded-t-[10px]",
|
|
3407
|
+
"sm:rounded-[10px]",
|
|
3085
3408
|
// Desktop: modal centrado
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3409
|
+
"sm:w-auto",
|
|
3410
|
+
"sm:h-auto",
|
|
3411
|
+
"sm:max-w-[640px]",
|
|
3412
|
+
"sm:max-h-[calc(100vh-4rem)]",
|
|
3090
3413
|
]);
|
|
3091
3414
|
}
|
|
3092
3415
|
// New size options
|
|
3093
3416
|
const sizeMap = {
|
|
3094
|
-
sm:
|
|
3095
|
-
md:
|
|
3096
|
-
lg:
|
|
3097
|
-
xl:
|
|
3417
|
+
sm: "sm:max-w-[400px]",
|
|
3418
|
+
md: "sm:max-w-[500px]",
|
|
3419
|
+
lg: "sm:max-w-[640px]",
|
|
3420
|
+
xl: "sm:max-w-[800px]",
|
|
3098
3421
|
};
|
|
3099
3422
|
const maxWidth = sizeMap[this.size] || sizeMap.lg;
|
|
3100
|
-
return this.
|
|
3423
|
+
return this.buildPanelClasses([
|
|
3101
3424
|
// Mobile: fullscreen
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3425
|
+
"w-full",
|
|
3426
|
+
"h-full",
|
|
3427
|
+
"max-h-[100dvh]",
|
|
3428
|
+
"rounded-t-[10px]",
|
|
3106
3429
|
// Desktop: modal
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3430
|
+
"sm:rounded-[10px]",
|
|
3431
|
+
"sm:w-auto",
|
|
3432
|
+
"sm:h-auto",
|
|
3110
3433
|
maxWidth,
|
|
3111
|
-
|
|
3434
|
+
"sm:max-h-[calc(100vh-4rem)]",
|
|
3112
3435
|
]);
|
|
3113
3436
|
}
|
|
3114
|
-
|
|
3437
|
+
buildPanelClasses(sizeClasses) {
|
|
3115
3438
|
const base = [
|
|
3116
|
-
|
|
3439
|
+
"relative",
|
|
3117
3440
|
Z_INDEX.modal,
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3441
|
+
"flex",
|
|
3442
|
+
"flex-col",
|
|
3443
|
+
"border",
|
|
3444
|
+
"border-border",
|
|
3445
|
+
"bg-background",
|
|
3446
|
+
"text-foreground",
|
|
3447
|
+
"shadow-lg",
|
|
3448
|
+
"overflow-hidden",
|
|
3126
3449
|
...sizeClasses,
|
|
3127
|
-
this.className
|
|
3450
|
+
this.className,
|
|
3128
3451
|
];
|
|
3129
|
-
return base.filter(Boolean).join(
|
|
3452
|
+
return base.filter(Boolean).join(" ");
|
|
3130
3453
|
}
|
|
3131
3454
|
get bodyWrapperClassName() {
|
|
3455
|
+
// min-h-0 is CRITICAL for flex child to shrink and allow internal scroll
|
|
3132
3456
|
const base = [
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3457
|
+
"flex-1",
|
|
3458
|
+
"min-h-0",
|
|
3459
|
+
"overflow-y-auto",
|
|
3460
|
+
"px-4",
|
|
3461
|
+
"py-6",
|
|
3462
|
+
"sm:px-6",
|
|
3463
|
+
this.bodyClassName,
|
|
3139
3464
|
];
|
|
3140
|
-
return base.filter(Boolean).join(
|
|
3465
|
+
return base.filter(Boolean).join(" ");
|
|
3141
3466
|
}
|
|
3142
3467
|
get headerWrapperClassName() {
|
|
3143
3468
|
const base = [
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
this.headerClassName
|
|
3469
|
+
"flex",
|
|
3470
|
+
"items-start",
|
|
3471
|
+
"justify-between",
|
|
3472
|
+
"gap-3",
|
|
3473
|
+
"p-4",
|
|
3474
|
+
"sm:p-6",
|
|
3475
|
+
"border-b",
|
|
3476
|
+
"border-border",
|
|
3477
|
+
this.headerClassName,
|
|
3153
3478
|
];
|
|
3154
|
-
return base.filter(Boolean).join(
|
|
3479
|
+
return base.filter(Boolean).join(" ");
|
|
3155
3480
|
}
|
|
3156
3481
|
get footerWrapperClassName() {
|
|
3157
|
-
const effectiveAlign = this.alignFooter ===
|
|
3482
|
+
const effectiveAlign = this.alignFooter === "right" && this.variant === "custom-close"
|
|
3483
|
+
? "left"
|
|
3484
|
+
: this.alignFooter;
|
|
3158
3485
|
const base = [
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
|
|
3486
|
+
"p-4",
|
|
3487
|
+
"sm:p-6",
|
|
3488
|
+
"border-t",
|
|
3489
|
+
"border-border",
|
|
3163
3490
|
// Mobile: siempre full-width
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
|
|
3491
|
+
"flex",
|
|
3492
|
+
"flex-col",
|
|
3493
|
+
"gap-2",
|
|
3167
3494
|
// Desktop: según alignFooter
|
|
3168
|
-
effectiveAlign ===
|
|
3169
|
-
?
|
|
3170
|
-
:
|
|
3171
|
-
effectiveAlign ===
|
|
3172
|
-
effectiveAlign ===
|
|
3173
|
-
this.footerClassName
|
|
3495
|
+
effectiveAlign === "full-width"
|
|
3496
|
+
? "sm:flex-col"
|
|
3497
|
+
: "sm:flex-row sm:items-center",
|
|
3498
|
+
effectiveAlign === "left" ? "sm:justify-start" : "",
|
|
3499
|
+
effectiveAlign === "right" ? "sm:justify-end" : "",
|
|
3500
|
+
this.footerClassName,
|
|
3174
3501
|
];
|
|
3175
|
-
return base.filter(Boolean).join(
|
|
3502
|
+
return base.filter(Boolean).join(" ");
|
|
3176
3503
|
}
|
|
3177
3504
|
get containerClassName() {
|
|
3178
|
-
// Container con backdrop z-
|
|
3505
|
+
// Container con backdrop z-40
|
|
3179
3506
|
// Mobile: fullscreen desde el bottom
|
|
3180
3507
|
// Desktop: centrado
|
|
3181
3508
|
return responsive({
|
|
3182
3509
|
default: `fixed inset-x-0 bottom-0 ${Z_INDEX.modalBackdrop} flex items-end justify-center`,
|
|
3183
|
-
sm: `fixed inset-0 ${Z_INDEX.modalBackdrop} flex items-center justify-center p-4
|
|
3510
|
+
sm: `fixed inset-0 ${Z_INDEX.modalBackdrop} flex items-center justify-center p-4`,
|
|
3184
3511
|
});
|
|
3185
3512
|
}
|
|
3186
3513
|
}
|
|
3187
3514
|
PdmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3188
|
-
PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3515
|
+
PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3189
3516
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, decorators: [{
|
|
3190
3517
|
type: Component,
|
|
3191
|
-
args: [{ selector:
|
|
3518
|
+
args: [{ selector: "pdm-dialog", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
3192
3519
|
}], propDecorators: { open: [{
|
|
3193
3520
|
type: Input
|
|
3194
3521
|
}], variant: [{
|
|
@@ -3231,7 +3558,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
3231
3558
|
type: Output
|
|
3232
3559
|
}], onEsc: [{
|
|
3233
3560
|
type: HostListener,
|
|
3234
|
-
args: [
|
|
3561
|
+
args: ["document:keydown.escape"]
|
|
3235
3562
|
}] } });
|
|
3236
3563
|
|
|
3237
3564
|
/**
|
|
@@ -3682,12 +4009,12 @@ class PdmDropdownMenuComponent {
|
|
|
3682
4009
|
}
|
|
3683
4010
|
}
|
|
3684
4011
|
}
|
|
3685
|
-
PdmDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDropdownMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$
|
|
4012
|
+
PdmDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDropdownMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3686
4013
|
PdmDropdownMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDropdownMenuComponent, selector: "pdm-dropdown-menu", inputs: { triggerText: "triggerText", variant: "variant", items: "items", closeOnSelect: "closeOnSelect", className: "className", panelClassName: "panelClassName", overlayOptions: "overlayOptions" }, outputs: { itemSelect: "itemSelect", itemsChange: "itemsChange" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<button\n #triggerEl\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n ]\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggle()\"\n>\n {{ triggerText }}\n</button>\n\n<ng-template #panelTemplate>\n <div\n class=\"min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <ng-container *ngFor=\"let item of resolvedItems\">\n <div *ngIf=\"item.type === 'separator'\" class=\"-mx-1 my-1 h-px bg-muted\"></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n [ngClass]=\"['px-2 py-1.5 text-sm font-semibold text-foreground', item.inset ? 'pl-8' : '']\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative flex w-full appearance-none cursor-default select-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm text-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',\n item.inset ? 'pl-8' : ''\n ]\"\n (click)=\"select(item)\"\n >\n <span class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center\">\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5 12.5L9.2 16.7L19 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n <span *ngIf=\"item.radioSelected\" class=\"h-2 w-2 rounded-full bg-foreground\"></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n <span *ngIf=\"item.showChevron\" class=\"text-sm text-muted-foreground\">\u203A</span>\n </button>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3687
4014
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDropdownMenuComponent, decorators: [{
|
|
3688
4015
|
type: Component,
|
|
3689
4016
|
args: [{ selector: 'pdm-dropdown-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #triggerEl\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n ]\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggle()\"\n>\n {{ triggerText }}\n</button>\n\n<ng-template #panelTemplate>\n <div\n class=\"min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <ng-container *ngFor=\"let item of resolvedItems\">\n <div *ngIf=\"item.type === 'separator'\" class=\"-mx-1 my-1 h-px bg-muted\"></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n [ngClass]=\"['px-2 py-1.5 text-sm font-semibold text-foreground', item.inset ? 'pl-8' : '']\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative flex w-full appearance-none cursor-default select-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm text-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',\n item.inset ? 'pl-8' : ''\n ]\"\n (click)=\"select(item)\"\n >\n <span class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center\">\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5 12.5L9.2 16.7L19 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n <span *ngIf=\"item.radioSelected\" class=\"h-2 w-2 rounded-full bg-foreground\"></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n <span *ngIf=\"item.showChevron\" class=\"text-sm text-muted-foreground\">\u203A</span>\n </button>\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
3690
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$
|
|
4017
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { triggerText: [{
|
|
3691
4018
|
type: Input
|
|
3692
4019
|
}], variant: [{
|
|
3693
4020
|
type: Input
|
|
@@ -4044,35 +4371,178 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4044
4371
|
}] } });
|
|
4045
4372
|
|
|
4046
4373
|
class PdmHoverCardComponent {
|
|
4047
|
-
constructor() {
|
|
4048
|
-
this.
|
|
4049
|
-
this.
|
|
4050
|
-
this.
|
|
4051
|
-
this.
|
|
4374
|
+
constructor(overlay, viewContainerRef, elementRef, cdr) {
|
|
4375
|
+
this.overlay = overlay;
|
|
4376
|
+
this.viewContainerRef = viewContainerRef;
|
|
4377
|
+
this.elementRef = elementRef;
|
|
4378
|
+
this.cdr = cdr;
|
|
4379
|
+
this.className = "";
|
|
4380
|
+
this.panelClassName = "";
|
|
4381
|
+
this.side = "bottom";
|
|
4382
|
+
this.align = "start";
|
|
4052
4383
|
this.panelWidth = 304;
|
|
4053
4384
|
this.open = false;
|
|
4385
|
+
this.overlayRef = null;
|
|
4386
|
+
this.showTimeout = null;
|
|
4387
|
+
this.hideTimeout = null;
|
|
4054
4388
|
}
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4389
|
+
ngOnDestroy() {
|
|
4390
|
+
this.clearTimeouts();
|
|
4391
|
+
this.destroyOverlay();
|
|
4392
|
+
}
|
|
4393
|
+
onMouseEnter() {
|
|
4394
|
+
this.clearTimeouts();
|
|
4395
|
+
this.showTimeout = setTimeout(() => this.show(), 150);
|
|
4396
|
+
}
|
|
4397
|
+
onMouseLeave() {
|
|
4398
|
+
this.clearTimeouts();
|
|
4399
|
+
this.hideTimeout = setTimeout(() => this.hide(), 150);
|
|
4400
|
+
}
|
|
4401
|
+
onFocusIn() {
|
|
4402
|
+
this.clearTimeouts();
|
|
4403
|
+
this.show();
|
|
4404
|
+
}
|
|
4405
|
+
onFocusOut() {
|
|
4406
|
+
this.clearTimeouts();
|
|
4407
|
+
this.hide();
|
|
4408
|
+
}
|
|
4409
|
+
clearTimeouts() {
|
|
4410
|
+
if (this.showTimeout) {
|
|
4411
|
+
clearTimeout(this.showTimeout);
|
|
4412
|
+
this.showTimeout = null;
|
|
4413
|
+
}
|
|
4414
|
+
if (this.hideTimeout) {
|
|
4415
|
+
clearTimeout(this.hideTimeout);
|
|
4416
|
+
this.hideTimeout = null;
|
|
4417
|
+
}
|
|
4418
|
+
}
|
|
4419
|
+
show() {
|
|
4420
|
+
if (this.open)
|
|
4421
|
+
return;
|
|
4422
|
+
this.open = true;
|
|
4423
|
+
this.cdr.markForCheck();
|
|
4424
|
+
this.createOverlay();
|
|
4425
|
+
}
|
|
4426
|
+
hide() {
|
|
4427
|
+
if (!this.open)
|
|
4428
|
+
return;
|
|
4429
|
+
this.open = false;
|
|
4430
|
+
this.cdr.markForCheck();
|
|
4431
|
+
this.destroyOverlay();
|
|
4432
|
+
}
|
|
4433
|
+
createOverlay() {
|
|
4434
|
+
if (this.overlayRef)
|
|
4435
|
+
return;
|
|
4436
|
+
const triggerEl = this.elementRef.nativeElement.querySelector("[pdmHoverTrigger]") ||
|
|
4437
|
+
this.elementRef.nativeElement;
|
|
4438
|
+
const positionStrategy = this.overlay
|
|
4439
|
+
.position()
|
|
4440
|
+
.flexibleConnectedTo(triggerEl)
|
|
4441
|
+
.withPositions(this.getPositionConfigs())
|
|
4442
|
+
.withFlexibleDimensions(false)
|
|
4443
|
+
.withPush(true);
|
|
4444
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
4445
|
+
this.overlayRef = this.overlay.create({
|
|
4446
|
+
positionStrategy,
|
|
4447
|
+
panelClass,
|
|
4448
|
+
});
|
|
4449
|
+
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
4450
|
+
this.overlayRef.attach(portal);
|
|
4451
|
+
}
|
|
4452
|
+
destroyOverlay() {
|
|
4453
|
+
if (this.overlayRef) {
|
|
4454
|
+
this.overlayRef.detach();
|
|
4455
|
+
this.overlayRef.dispose();
|
|
4456
|
+
this.overlayRef = null;
|
|
4457
|
+
}
|
|
4458
|
+
}
|
|
4459
|
+
getPositionConfigs() {
|
|
4460
|
+
// Map our side/align to CDK positions
|
|
4461
|
+
const configs = [];
|
|
4462
|
+
// Primary position based on side
|
|
4463
|
+
switch (this.side) {
|
|
4464
|
+
case "top":
|
|
4465
|
+
configs.push({
|
|
4466
|
+
originX: this.getAlignX(),
|
|
4467
|
+
originY: "top",
|
|
4468
|
+
overlayX: this.getAlignX(),
|
|
4469
|
+
overlayY: "bottom",
|
|
4470
|
+
offsetY: -8,
|
|
4471
|
+
});
|
|
4472
|
+
break;
|
|
4473
|
+
case "right":
|
|
4474
|
+
configs.push({
|
|
4475
|
+
originX: "end",
|
|
4476
|
+
originY: this.getAlignY(),
|
|
4477
|
+
overlayX: "start",
|
|
4478
|
+
overlayY: this.getAlignY(),
|
|
4479
|
+
offsetX: 8,
|
|
4480
|
+
});
|
|
4481
|
+
break;
|
|
4482
|
+
case "bottom":
|
|
4483
|
+
default:
|
|
4484
|
+
configs.push({
|
|
4485
|
+
originX: this.getAlignX(),
|
|
4486
|
+
originY: "bottom",
|
|
4487
|
+
overlayX: this.getAlignX(),
|
|
4488
|
+
overlayY: "top",
|
|
4489
|
+
offsetY: 8,
|
|
4490
|
+
});
|
|
4491
|
+
break;
|
|
4492
|
+
case "left":
|
|
4493
|
+
configs.push({
|
|
4494
|
+
originX: "start",
|
|
4495
|
+
originY: this.getAlignY(),
|
|
4496
|
+
overlayX: "end",
|
|
4497
|
+
overlayY: this.getAlignY(),
|
|
4498
|
+
offsetX: -8,
|
|
4499
|
+
});
|
|
4500
|
+
break;
|
|
4501
|
+
}
|
|
4502
|
+
// Add fallback positions
|
|
4503
|
+
switch (this.side) {
|
|
4504
|
+
case "top":
|
|
4505
|
+
case "bottom":
|
|
4506
|
+
configs.push({
|
|
4507
|
+
originX: "center",
|
|
4508
|
+
originY: this.side === "top" ? "top" : "bottom",
|
|
4509
|
+
overlayX: "center",
|
|
4510
|
+
overlayY: this.side === "top" ? "bottom" : "top",
|
|
4511
|
+
offsetY: this.side === "top" ? -8 : 8,
|
|
4512
|
+
});
|
|
4513
|
+
break;
|
|
4514
|
+
case "left":
|
|
4515
|
+
case "right":
|
|
4516
|
+
configs.push({
|
|
4517
|
+
originX: this.side === "left" ? "start" : "end",
|
|
4518
|
+
originY: "center",
|
|
4519
|
+
overlayX: this.side === "left" ? "end" : "start",
|
|
4520
|
+
overlayY: "center",
|
|
4521
|
+
offsetX: this.side === "left" ? -8 : 8,
|
|
4522
|
+
});
|
|
4523
|
+
break;
|
|
4524
|
+
}
|
|
4525
|
+
return configs;
|
|
4526
|
+
}
|
|
4527
|
+
getAlignX() {
|
|
4528
|
+
return this.align;
|
|
4529
|
+
}
|
|
4530
|
+
getAlignY() {
|
|
4531
|
+
// Map 'start'/'end' to 'top'/'bottom' for Y axis
|
|
4532
|
+
const alignMap = {
|
|
4533
|
+
start: "top",
|
|
4534
|
+
center: "center",
|
|
4535
|
+
end: "bottom",
|
|
4066
4536
|
};
|
|
4067
|
-
return
|
|
4537
|
+
return alignMap[this.align];
|
|
4068
4538
|
}
|
|
4069
4539
|
}
|
|
4070
|
-
PdmHoverCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmHoverCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4071
|
-
PdmHoverCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmHoverCardComponent, selector: "pdm-hover-card", inputs: { className: "className", panelClassName: "panelClassName", side: "side", align: "align", panelWidth: "panelWidth" }, ngImport: i0, template: "<div\n class=\"relative inline-flex\"\n [ngClass]=\"className\"\n (mouseenter)=\"
|
|
4540
|
+
PdmHoverCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmHoverCardComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4541
|
+
PdmHoverCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmHoverCardComponent, selector: "pdm-hover-card", inputs: { className: "className", panelClassName: "panelClassName", side: "side", align: "align", panelWidth: "panelWidth" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focusin": "onFocusIn()", "focusout": "onFocusOut()" } }, viewQueries: [{ propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div\n class=\"relative inline-flex\"\n [ngClass]=\"className\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n>\n <div>\n <ng-content select=\"[pdmHoverTrigger]\"></ng-content>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <section\n [style.width.px]=\"panelWidth\"\n class=\"rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content select=\"[pdmHoverContent]\"></ng-content>\n </section>\n </ng-template>\n</div>\n", styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4072
4542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmHoverCardComponent, decorators: [{
|
|
4073
4543
|
type: Component,
|
|
4074
|
-
args: [{ selector:
|
|
4075
|
-
}], propDecorators: { className: [{
|
|
4544
|
+
args: [{ selector: "pdm-hover-card", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"relative inline-flex\"\n [ngClass]=\"className\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n>\n <div>\n <ng-content select=\"[pdmHoverTrigger]\"></ng-content>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <section\n [style.width.px]=\"panelWidth\"\n class=\"rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content select=\"[pdmHoverContent]\"></ng-content>\n </section>\n </ng-template>\n</div>\n", styles: [":host{display:inline-flex}\n"] }]
|
|
4545
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { className: [{
|
|
4076
4546
|
type: Input
|
|
4077
4547
|
}], panelClassName: [{
|
|
4078
4548
|
type: Input
|
|
@@ -4082,6 +4552,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4082
4552
|
type: Input
|
|
4083
4553
|
}], panelWidth: [{
|
|
4084
4554
|
type: Input
|
|
4555
|
+
}], panelTemplateRef: [{
|
|
4556
|
+
type: ViewChild,
|
|
4557
|
+
args: ["panelTemplate"]
|
|
4558
|
+
}], onMouseEnter: [{
|
|
4559
|
+
type: HostListener,
|
|
4560
|
+
args: ["mouseenter"]
|
|
4561
|
+
}], onMouseLeave: [{
|
|
4562
|
+
type: HostListener,
|
|
4563
|
+
args: ["mouseleave"]
|
|
4564
|
+
}], onFocusIn: [{
|
|
4565
|
+
type: HostListener,
|
|
4566
|
+
args: ["focusin"]
|
|
4567
|
+
}], onFocusOut: [{
|
|
4568
|
+
type: HostListener,
|
|
4569
|
+
args: ["focusout"]
|
|
4085
4570
|
}] } });
|
|
4086
4571
|
|
|
4087
4572
|
class PdmItemComponent {
|
|
@@ -4106,21 +4591,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4106
4591
|
|
|
4107
4592
|
class PdmInputComponent {
|
|
4108
4593
|
constructor() {
|
|
4109
|
-
this.id =
|
|
4110
|
-
this.type =
|
|
4111
|
-
this.value =
|
|
4112
|
-
this.placeholder =
|
|
4594
|
+
this.id = "";
|
|
4595
|
+
this.type = "text";
|
|
4596
|
+
this.value = "";
|
|
4597
|
+
this.placeholder = "";
|
|
4113
4598
|
this.disabled = false;
|
|
4114
4599
|
this.readonly = false;
|
|
4115
4600
|
this.required = false;
|
|
4116
4601
|
this.invalid = false;
|
|
4117
|
-
this.size =
|
|
4118
|
-
this.roundness =
|
|
4119
|
-
this.className =
|
|
4120
|
-
this.inputClassName =
|
|
4121
|
-
this.label =
|
|
4122
|
-
this.helperText =
|
|
4123
|
-
this.errorText =
|
|
4602
|
+
this.size = "regular";
|
|
4603
|
+
this.roundness = "default";
|
|
4604
|
+
this.className = "";
|
|
4605
|
+
this.inputClassName = "";
|
|
4606
|
+
this.label = "";
|
|
4607
|
+
this.helperText = "";
|
|
4608
|
+
this.errorText = "";
|
|
4124
4609
|
this.valueChange = new EventEmitter();
|
|
4125
4610
|
this.blurred = new EventEmitter();
|
|
4126
4611
|
}
|
|
@@ -4132,10 +4617,10 @@ class PdmInputComponent {
|
|
|
4132
4617
|
}
|
|
4133
4618
|
}
|
|
4134
4619
|
PdmInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4135
|
-
PdmInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputComponent, selector: "pdm-input", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", size: "size", roundness: "roundness", className: "className", inputClassName: "inputClassName", label: "label", helperText: "helperText", errorText: "errorText" }, outputs: { valueChange: "valueChange", blurred: "blurred" }, ngImport: i0, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground'\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 rounded-lg border bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4620
|
+
PdmInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputComponent, selector: "pdm-input", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", size: "size", roundness: "roundness", className: "className", inputClassName: "inputClassName", label: "label", helperText: "helperText", errorText: "errorText" }, outputs: { valueChange: "valueChange", blurred: "blurred" }, ngImport: i0, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground'\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 rounded-lg border bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4136
4621
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputComponent, decorators: [{
|
|
4137
4622
|
type: Component,
|
|
4138
|
-
args: [{ selector:
|
|
4623
|
+
args: [{ selector: "pdm-input", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground'\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 rounded-lg border bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
4139
4624
|
}], propDecorators: { id: [{
|
|
4140
4625
|
type: Input
|
|
4141
4626
|
}], type: [{
|
|
@@ -4249,18 +4734,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4249
4734
|
|
|
4250
4735
|
class PdmInputGroupComponent {
|
|
4251
4736
|
constructor() {
|
|
4252
|
-
this.id =
|
|
4253
|
-
this.type =
|
|
4254
|
-
this.value =
|
|
4255
|
-
this.placeholder =
|
|
4737
|
+
this.id = "";
|
|
4738
|
+
this.type = "text";
|
|
4739
|
+
this.value = "";
|
|
4740
|
+
this.placeholder = "";
|
|
4256
4741
|
this.disabled = false;
|
|
4257
4742
|
this.invalid = false;
|
|
4258
|
-
this.prefixText =
|
|
4259
|
-
this.suffixText =
|
|
4260
|
-
this.prefixIcon =
|
|
4261
|
-
this.suffixIcon =
|
|
4262
|
-
this.buttonText =
|
|
4263
|
-
this.className =
|
|
4743
|
+
this.prefixText = "";
|
|
4744
|
+
this.suffixText = "";
|
|
4745
|
+
this.prefixIcon = "";
|
|
4746
|
+
this.suffixIcon = "";
|
|
4747
|
+
this.buttonText = "";
|
|
4748
|
+
this.className = "";
|
|
4264
4749
|
this.valueChange = new EventEmitter();
|
|
4265
4750
|
this.buttonClick = new EventEmitter();
|
|
4266
4751
|
}
|
|
@@ -4272,10 +4757,10 @@ class PdmInputGroupComponent {
|
|
|
4272
4757
|
}
|
|
4273
4758
|
}
|
|
4274
4759
|
PdmInputGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4275
|
-
PdmInputGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputGroupComponent, selector: "pdm-input-group", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", invalid: "invalid", prefixText: "prefixText", suffixText: "suffixText", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", buttonText: "buttonText", className: "className" }, outputs: { valueChange: "valueChange", buttonClick: "buttonClick" }, ngImport: i0, template: "<div\n [ngClass]=\"[\n 'flex w-full items-
|
|
4760
|
+
PdmInputGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputGroupComponent, selector: "pdm-input-group", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", invalid: "invalid", prefixText: "prefixText", suffixText: "suffixText", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", buttonText: "buttonText", className: "className" }, outputs: { valueChange: "valueChange", buttonClick: "buttonClick" }, ngImport: i0, template: "<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 items-center overflow-hidden rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4276
4761
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputGroupComponent, decorators: [{
|
|
4277
4762
|
type: Component,
|
|
4278
|
-
args: [{ selector:
|
|
4763
|
+
args: [{ selector: "pdm-input-group", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 items-center overflow-hidden rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
4279
4764
|
}], propDecorators: { id: [{
|
|
4280
4765
|
type: Input
|
|
4281
4766
|
}], type: [{
|
|
@@ -4458,35 +4943,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4458
4943
|
}] } });
|
|
4459
4944
|
|
|
4460
4945
|
class PdmMenubarComponent {
|
|
4461
|
-
constructor(elementRef, cdr) {
|
|
4946
|
+
constructor(overlay, viewContainerRef, elementRef, cdr) {
|
|
4947
|
+
this.overlay = overlay;
|
|
4948
|
+
this.viewContainerRef = viewContainerRef;
|
|
4462
4949
|
this.elementRef = elementRef;
|
|
4463
4950
|
this.cdr = cdr;
|
|
4464
4951
|
this.menus = [];
|
|
4465
|
-
this.className =
|
|
4952
|
+
this.className = "";
|
|
4953
|
+
this.panelClassName = "";
|
|
4466
4954
|
this.itemSelect = new EventEmitter();
|
|
4467
4955
|
this.openIndex = -1;
|
|
4956
|
+
this.overlayRef = null;
|
|
4957
|
+
this.outsideClickSub = null;
|
|
4468
4958
|
}
|
|
4469
|
-
ngOnInit() {
|
|
4470
|
-
this.boundPointerDown = (event) => this.onDocumentPointerDown(event);
|
|
4471
|
-
document.addEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
4472
|
-
}
|
|
4959
|
+
ngOnInit() { }
|
|
4473
4960
|
ngOnDestroy() {
|
|
4474
|
-
|
|
4475
|
-
document.removeEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
4476
|
-
}
|
|
4961
|
+
this.destroyOverlay();
|
|
4477
4962
|
}
|
|
4478
|
-
|
|
4963
|
+
onDocumentClickOrEsc(event) {
|
|
4964
|
+
// Close on escape
|
|
4965
|
+
if (event.type === "keydown") {
|
|
4966
|
+
if (this.openIndex >= 0) {
|
|
4967
|
+
this.openIndex = -1;
|
|
4968
|
+
this.cdr.markForCheck();
|
|
4969
|
+
}
|
|
4970
|
+
return;
|
|
4971
|
+
}
|
|
4972
|
+
// Close on click outside
|
|
4479
4973
|
if (this.openIndex >= 0) {
|
|
4480
|
-
|
|
4481
|
-
this.
|
|
4974
|
+
const target = event.target;
|
|
4975
|
+
if (!this.elementRef.nativeElement.contains(target)) {
|
|
4976
|
+
this.openIndex = -1;
|
|
4977
|
+
this.cdr.markForCheck();
|
|
4978
|
+
}
|
|
4482
4979
|
}
|
|
4483
4980
|
}
|
|
4484
|
-
toggle(index) {
|
|
4981
|
+
toggle(index, event) {
|
|
4982
|
+
event.stopPropagation();
|
|
4485
4983
|
this.openIndex = this.openIndex === index ? -1 : index;
|
|
4984
|
+
this.cdr.markForCheck();
|
|
4985
|
+
if (this.openIndex >= 0) {
|
|
4986
|
+
this.createOverlay(event);
|
|
4987
|
+
}
|
|
4988
|
+
else {
|
|
4989
|
+
this.destroyOverlay();
|
|
4990
|
+
}
|
|
4486
4991
|
}
|
|
4487
4992
|
select(value) {
|
|
4488
4993
|
this.itemSelect.emit(value);
|
|
4489
4994
|
this.openIndex = -1;
|
|
4995
|
+
this.cdr.markForCheck();
|
|
4996
|
+
this.destroyOverlay();
|
|
4490
4997
|
}
|
|
4491
4998
|
selectItem(item) {
|
|
4492
4999
|
if (item.disabled || !item.value) {
|
|
@@ -4494,32 +5001,83 @@ class PdmMenubarComponent {
|
|
|
4494
5001
|
}
|
|
4495
5002
|
this.select(item.value);
|
|
4496
5003
|
}
|
|
4497
|
-
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
const
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
5004
|
+
createOverlay(event) {
|
|
5005
|
+
this.destroyOverlay();
|
|
5006
|
+
const triggerEl = event.currentTarget;
|
|
5007
|
+
const positionStrategy = this.overlay
|
|
5008
|
+
.position()
|
|
5009
|
+
.flexibleConnectedTo(triggerEl)
|
|
5010
|
+
.withPositions(this.getPositionConfigs())
|
|
5011
|
+
.withFlexibleDimensions(false)
|
|
5012
|
+
.withPush(true);
|
|
5013
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
5014
|
+
this.overlayRef = this.overlay.create({
|
|
5015
|
+
positionStrategy,
|
|
5016
|
+
panelClass,
|
|
5017
|
+
});
|
|
5018
|
+
const portal = new TemplatePortal(this.menuTemplateRef, this.viewContainerRef);
|
|
5019
|
+
this.overlayRef.attach(portal);
|
|
5020
|
+
// Close on click outside
|
|
5021
|
+
this.outsideClickSub = this.overlayRef
|
|
5022
|
+
.outsidePointerEvents()
|
|
5023
|
+
.subscribe(() => {
|
|
4504
5024
|
this.openIndex = -1;
|
|
4505
5025
|
this.cdr.markForCheck();
|
|
5026
|
+
this.destroyOverlay();
|
|
5027
|
+
});
|
|
5028
|
+
}
|
|
5029
|
+
destroyOverlay() {
|
|
5030
|
+
if (this.outsideClickSub) {
|
|
5031
|
+
this.outsideClickSub.unsubscribe();
|
|
5032
|
+
this.outsideClickSub = null;
|
|
4506
5033
|
}
|
|
5034
|
+
if (this.overlayRef) {
|
|
5035
|
+
this.overlayRef.detach();
|
|
5036
|
+
this.overlayRef.dispose();
|
|
5037
|
+
this.overlayRef = null;
|
|
5038
|
+
}
|
|
5039
|
+
}
|
|
5040
|
+
getPositionConfigs() {
|
|
5041
|
+
return [
|
|
5042
|
+
{
|
|
5043
|
+
originX: "start",
|
|
5044
|
+
originY: "bottom",
|
|
5045
|
+
overlayX: "start",
|
|
5046
|
+
overlayY: "top",
|
|
5047
|
+
offsetY: 4,
|
|
5048
|
+
},
|
|
5049
|
+
{
|
|
5050
|
+
originX: "start",
|
|
5051
|
+
originY: "top",
|
|
5052
|
+
overlayX: "start",
|
|
5053
|
+
overlayY: "bottom",
|
|
5054
|
+
offsetY: -4,
|
|
5055
|
+
},
|
|
5056
|
+
];
|
|
4507
5057
|
}
|
|
4508
5058
|
}
|
|
4509
|
-
PdmMenubarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4510
|
-
PdmMenubarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmMenubarComponent, selector: "pdm-menubar", inputs: { menus: "menus", className: "className" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:keydown.escape": "
|
|
5059
|
+
PdmMenubarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5060
|
+
PdmMenubarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmMenubarComponent, selector: "pdm-menubar", inputs: { menus: "menus", className: "className", panelClassName: "panelClassName" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:click": "onDocumentClickOrEsc()", "document:keydown.escape": "onDocumentClickOrEsc()" } }, viewQueries: [{ propertyName: "menuTemplateRef", first: true, predicate: ["menuTemplate"], descendants: true }], ngImport: i0, template: "<nav\n role=\"menubar\"\n [ngClass]=\"[\n 'inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm',\n className,\n ]\"\n>\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button\n type=\"button\"\n class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-expanded]=\"openIndex === i\"\n (click)=\"toggle(i, $event)\"\n >\n {{ menu.label }}\n </button>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\"\n >\n <button\n *ngFor=\"let item of menus[openIndex]?.items || []\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </ng-template>\n</nav>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4511
5061
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, decorators: [{
|
|
4512
5062
|
type: Component,
|
|
4513
|
-
args: [{ selector:
|
|
4514
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { menus: [{
|
|
5063
|
+
args: [{ selector: "pdm-menubar", changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n role=\"menubar\"\n [ngClass]=\"[\n 'inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm',\n className,\n ]\"\n>\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button\n type=\"button\"\n class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-expanded]=\"openIndex === i\"\n (click)=\"toggle(i, $event)\"\n >\n {{ menu.label }}\n </button>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\"\n >\n <button\n *ngFor=\"let item of menus[openIndex]?.items || []\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </ng-template>\n</nav>\n", styles: [":host{display:block}\n"] }]
|
|
5064
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { menus: [{
|
|
4515
5065
|
type: Input
|
|
4516
5066
|
}], className: [{
|
|
4517
5067
|
type: Input
|
|
5068
|
+
}], panelClassName: [{
|
|
5069
|
+
type: Input
|
|
4518
5070
|
}], itemSelect: [{
|
|
4519
5071
|
type: Output
|
|
4520
|
-
}],
|
|
5072
|
+
}], menuTemplateRef: [{
|
|
5073
|
+
type: ViewChild,
|
|
5074
|
+
args: ["menuTemplate"]
|
|
5075
|
+
}], onDocumentClickOrEsc: [{
|
|
4521
5076
|
type: HostListener,
|
|
4522
|
-
args: [
|
|
5077
|
+
args: ["document:click"]
|
|
5078
|
+
}, {
|
|
5079
|
+
type: HostListener,
|
|
5080
|
+
args: ["document:keydown.escape"]
|
|
4523
5081
|
}] } });
|
|
4524
5082
|
|
|
4525
5083
|
class PdmNativeSelectComponent {
|
|
@@ -4735,18 +5293,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4735
5293
|
}] } });
|
|
4736
5294
|
|
|
4737
5295
|
class PdmSelectComponent {
|
|
4738
|
-
constructor(
|
|
4739
|
-
this.elementRef = elementRef;
|
|
5296
|
+
constructor(cdr, overlay, viewContainerRef) {
|
|
4740
5297
|
this.cdr = cdr;
|
|
4741
5298
|
this.overlay = overlay;
|
|
4742
5299
|
this.viewContainerRef = viewContainerRef;
|
|
4743
|
-
this.id =
|
|
4744
|
-
this.value =
|
|
5300
|
+
this.id = "";
|
|
5301
|
+
this.value = "";
|
|
4745
5302
|
this.options = [];
|
|
4746
5303
|
this.disabled = false;
|
|
4747
5304
|
this.invalid = false;
|
|
4748
|
-
this.className =
|
|
4749
|
-
this.placeholder =
|
|
5305
|
+
this.className = "";
|
|
5306
|
+
this.placeholder = "Select an option";
|
|
4750
5307
|
this.open = false;
|
|
4751
5308
|
this.valueChange = new EventEmitter();
|
|
4752
5309
|
this.overlayRef = null;
|
|
@@ -4769,7 +5326,7 @@ class PdmSelectComponent {
|
|
|
4769
5326
|
return this.projectedOptions.map((d) => ({
|
|
4770
5327
|
label: d.resolvedLabel,
|
|
4771
5328
|
value: d.value,
|
|
4772
|
-
disabled: d.disabled
|
|
5329
|
+
disabled: d.disabled,
|
|
4773
5330
|
}));
|
|
4774
5331
|
}
|
|
4775
5332
|
return this.options;
|
|
@@ -4821,11 +5378,13 @@ class PdmSelectComponent {
|
|
|
4821
5378
|
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
4822
5379
|
width: triggerEl.offsetWidth,
|
|
4823
5380
|
// Consumer overrides are spread last — they win over every default above.
|
|
4824
|
-
...this.overlayOptions
|
|
5381
|
+
...this.overlayOptions,
|
|
4825
5382
|
});
|
|
4826
5383
|
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
4827
5384
|
this.overlayRef.attach(portal);
|
|
4828
|
-
this.backdropSub = this.overlayRef
|
|
5385
|
+
this.backdropSub = this.overlayRef
|
|
5386
|
+
.outsidePointerEvents()
|
|
5387
|
+
.subscribe((event) => {
|
|
4829
5388
|
const target = event.target;
|
|
4830
5389
|
if (!triggerEl.contains(target)) {
|
|
4831
5390
|
this.closePanel();
|
|
@@ -4851,12 +5410,12 @@ class PdmSelectComponent {
|
|
|
4851
5410
|
}
|
|
4852
5411
|
}
|
|
4853
5412
|
}
|
|
4854
|
-
PdmSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmSelectComponent, deps: [{ token: i0.
|
|
4855
|
-
PdmSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmSelectComponent, selector: "pdm-select", inputs: { id: "id", value: "value", options: "options", disabled: "disabled", invalid: "invalid", className: "className", placeholder: "placeholder", overlayOptions: "overlayOptions" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, queries: [{ propertyName: "projectedOptions", predicate: PdmSelectOptionDirective }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5413
|
+
PdmSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmSelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5414
|
+
PdmSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmSelectComponent, selector: "pdm-select", inputs: { id: "id", value: "value", options: "options", disabled: "disabled", invalid: "invalid", className: "className", placeholder: "placeholder", overlayOptions: "overlayOptions" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, queries: [{ propertyName: "projectedOptions", predicate: PdmSelectOptionDirective }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4856
5415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmSelectComponent, decorators: [{
|
|
4857
5416
|
type: Component,
|
|
4858
|
-
args: [{ selector:
|
|
4859
|
-
}], ctorParameters: function () { return [{ type: i0.
|
|
5417
|
+
args: [{ selector: "pdm-select", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
|
|
5418
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { id: [{
|
|
4860
5419
|
type: Input
|
|
4861
5420
|
}], value: [{
|
|
4862
5421
|
type: Input
|
|
@@ -4876,16 +5435,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4876
5435
|
type: Output
|
|
4877
5436
|
}], triggerRef: [{
|
|
4878
5437
|
type: ViewChild,
|
|
4879
|
-
args: [
|
|
5438
|
+
args: ["triggerEl"]
|
|
4880
5439
|
}], panelTemplateRef: [{
|
|
4881
5440
|
type: ViewChild,
|
|
4882
|
-
args: [
|
|
5441
|
+
args: ["panelTemplate"]
|
|
4883
5442
|
}], projectedOptions: [{
|
|
4884
5443
|
type: ContentChildren,
|
|
4885
5444
|
args: [PdmSelectOptionDirective]
|
|
4886
5445
|
}], onEscape: [{
|
|
4887
5446
|
type: HostListener,
|
|
4888
|
-
args: [
|
|
5447
|
+
args: ["document:keydown.escape"]
|
|
4889
5448
|
}] } });
|
|
4890
5449
|
|
|
4891
5450
|
class PdmPaginationComponent {
|
|
@@ -4956,51 +5515,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
4956
5515
|
}] } });
|
|
4957
5516
|
|
|
4958
5517
|
class PdmPopoverComponent {
|
|
4959
|
-
constructor(elementRef, cdr) {
|
|
5518
|
+
constructor(overlay, viewContainerRef, elementRef, cdr) {
|
|
5519
|
+
this.overlay = overlay;
|
|
5520
|
+
this.viewContainerRef = viewContainerRef;
|
|
4960
5521
|
this.elementRef = elementRef;
|
|
4961
5522
|
this.cdr = cdr;
|
|
4962
5523
|
this._open = false;
|
|
4963
|
-
this.triggerText =
|
|
4964
|
-
this.className =
|
|
4965
|
-
this.panelClassName =
|
|
5524
|
+
this.triggerText = "Open";
|
|
5525
|
+
this.className = "";
|
|
5526
|
+
this.panelClassName = "";
|
|
4966
5527
|
this.showTrigger = true;
|
|
4967
5528
|
this.openChange = new EventEmitter();
|
|
4968
|
-
this.
|
|
4969
|
-
|
|
4970
|
-
ngOnInit() {
|
|
4971
|
-
this.boundPointerDown = (event) => this.onDocumentPointerDown(event);
|
|
4972
|
-
document.addEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
5529
|
+
this.overlayRef = null;
|
|
5530
|
+
this.outsideClickSub = null;
|
|
4973
5531
|
}
|
|
5532
|
+
ngOnInit() { }
|
|
4974
5533
|
ngOnDestroy() {
|
|
4975
|
-
|
|
4976
|
-
document.removeEventListener('pointerdown', this.boundPointerDown, { capture: true });
|
|
4977
|
-
}
|
|
5534
|
+
this.destroyOverlay();
|
|
4978
5535
|
}
|
|
4979
5536
|
set open(value) {
|
|
4980
|
-
this._open
|
|
4981
|
-
|
|
4982
|
-
|
|
5537
|
+
if (this._open === !!value)
|
|
5538
|
+
return;
|
|
5539
|
+
if (value) {
|
|
5540
|
+
this.openPanel();
|
|
4983
5541
|
}
|
|
4984
5542
|
else {
|
|
4985
|
-
this.
|
|
5543
|
+
this.closePanel();
|
|
4986
5544
|
}
|
|
4987
|
-
this.cdr.markForCheck();
|
|
4988
5545
|
}
|
|
4989
5546
|
get open() {
|
|
4990
5547
|
return this._open;
|
|
4991
5548
|
}
|
|
4992
|
-
get panelClasses() {
|
|
4993
|
-
const baseClasses = 'min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md';
|
|
4994
|
-
return [
|
|
4995
|
-
this.panelPlacement === 'top'
|
|
4996
|
-
? `absolute bottom-full left-0 ${Z_INDEX.popover} mb-2 ${baseClasses}`
|
|
4997
|
-
: `absolute left-0 top-full ${Z_INDEX.popover} mt-2 ${baseClasses}`,
|
|
4998
|
-
this.panelClassName
|
|
4999
|
-
];
|
|
5000
|
-
}
|
|
5001
5549
|
toggle() {
|
|
5002
5550
|
this.open = !this.open;
|
|
5003
|
-
this.openChange.emit(this.open);
|
|
5004
5551
|
}
|
|
5005
5552
|
onEsc() {
|
|
5006
5553
|
if (this.open) {
|
|
@@ -5008,48 +5555,99 @@ class PdmPopoverComponent {
|
|
|
5008
5555
|
this.openChange.emit(false);
|
|
5009
5556
|
}
|
|
5010
5557
|
}
|
|
5011
|
-
|
|
5012
|
-
this.
|
|
5013
|
-
}
|
|
5014
|
-
onDocumentPointerDown(event) {
|
|
5015
|
-
if (!this.open)
|
|
5558
|
+
openPanel() {
|
|
5559
|
+
if (this.overlayRef)
|
|
5016
5560
|
return;
|
|
5017
|
-
const
|
|
5018
|
-
if (
|
|
5561
|
+
const triggerEl = this.triggerRef?.nativeElement;
|
|
5562
|
+
if (!triggerEl)
|
|
5563
|
+
return;
|
|
5564
|
+
this._open = true;
|
|
5565
|
+
this.openChange.emit(true);
|
|
5566
|
+
this.cdr.markForCheck();
|
|
5567
|
+
const positionStrategy = this.overlay
|
|
5568
|
+
.position()
|
|
5569
|
+
.flexibleConnectedTo(triggerEl)
|
|
5570
|
+
.withPositions(this.getPositionConfigs())
|
|
5571
|
+
.withFlexibleDimensions(false)
|
|
5572
|
+
.withPush(true);
|
|
5573
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
|
|
5574
|
+
this.overlayRef = this.overlay.create({
|
|
5575
|
+
positionStrategy,
|
|
5576
|
+
panelClass,
|
|
5577
|
+
});
|
|
5578
|
+
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
5579
|
+
this.overlayRef.attach(portal);
|
|
5580
|
+
// Close on click outside
|
|
5581
|
+
this.outsideClickSub = this.overlayRef
|
|
5582
|
+
.outsidePointerEvents()
|
|
5583
|
+
.subscribe(() => {
|
|
5019
5584
|
this.open = false;
|
|
5020
5585
|
this.openChange.emit(false);
|
|
5021
|
-
}
|
|
5022
|
-
|
|
5023
|
-
schedulePanelPlacementUpdate() {
|
|
5024
|
-
setTimeout(() => this.updatePanelPlacement());
|
|
5586
|
+
});
|
|
5587
|
+
this.cdr.markForCheck();
|
|
5025
5588
|
}
|
|
5026
|
-
|
|
5027
|
-
if (!this.
|
|
5028
|
-
return;
|
|
5029
|
-
const anchorEl = this.triggerRef?.nativeElement || this.anchorRef?.nativeElement;
|
|
5030
|
-
const panelEl = this.panelRef?.nativeElement;
|
|
5031
|
-
if (!anchorEl || !panelEl || typeof window === 'undefined') {
|
|
5589
|
+
closePanel() {
|
|
5590
|
+
if (!this.overlayRef)
|
|
5032
5591
|
return;
|
|
5592
|
+
this._open = false;
|
|
5593
|
+
this.openChange.emit(false);
|
|
5594
|
+
this.cdr.markForCheck();
|
|
5595
|
+
this.destroyOverlay();
|
|
5596
|
+
}
|
|
5597
|
+
destroyOverlay() {
|
|
5598
|
+
if (this.outsideClickSub) {
|
|
5599
|
+
this.outsideClickSub.unsubscribe();
|
|
5600
|
+
this.outsideClickSub = null;
|
|
5033
5601
|
}
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
const spaceBelow = Math.max(0, viewportHeight - anchorRect.bottom - gap);
|
|
5039
|
-
const spaceAbove = Math.max(0, anchorRect.top - gap);
|
|
5040
|
-
const nextPlacement = spaceBelow < panelHeight && spaceAbove > spaceBelow ? 'top' : 'bottom';
|
|
5041
|
-
if (this.panelPlacement !== nextPlacement) {
|
|
5042
|
-
this.panelPlacement = nextPlacement;
|
|
5043
|
-
this.cdr.markForCheck();
|
|
5602
|
+
if (this.overlayRef) {
|
|
5603
|
+
this.overlayRef.detach();
|
|
5604
|
+
this.overlayRef.dispose();
|
|
5605
|
+
this.overlayRef = null;
|
|
5044
5606
|
}
|
|
5045
5607
|
}
|
|
5608
|
+
getPositionConfigs() {
|
|
5609
|
+
return [
|
|
5610
|
+
// Bottom (default)
|
|
5611
|
+
{
|
|
5612
|
+
originX: "start",
|
|
5613
|
+
originY: "bottom",
|
|
5614
|
+
overlayX: "start",
|
|
5615
|
+
overlayY: "top",
|
|
5616
|
+
offsetY: 8,
|
|
5617
|
+
},
|
|
5618
|
+
// Top (fallback)
|
|
5619
|
+
{
|
|
5620
|
+
originX: "start",
|
|
5621
|
+
originY: "top",
|
|
5622
|
+
overlayX: "start",
|
|
5623
|
+
overlayY: "bottom",
|
|
5624
|
+
offsetY: -8,
|
|
5625
|
+
},
|
|
5626
|
+
// Right
|
|
5627
|
+
{
|
|
5628
|
+
originX: "end",
|
|
5629
|
+
originY: "bottom",
|
|
5630
|
+
overlayX: "start",
|
|
5631
|
+
overlayY: "top",
|
|
5632
|
+
offsetY: 8,
|
|
5633
|
+
},
|
|
5634
|
+
// Left
|
|
5635
|
+
{
|
|
5636
|
+
originX: "start",
|
|
5637
|
+
originY: "bottom",
|
|
5638
|
+
overlayX: "end",
|
|
5639
|
+
overlayY: "top",
|
|
5640
|
+
offsetY: 8,
|
|
5641
|
+
},
|
|
5642
|
+
];
|
|
5643
|
+
}
|
|
5046
5644
|
}
|
|
5047
|
-
PdmPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5048
|
-
PdmPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPopoverComponent, selector: "pdm-popover", inputs: { triggerText: "triggerText", className: "className", panelClassName: "panelClassName", showTrigger: "showTrigger", open: "open" }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown.escape": "onEsc()"
|
|
5645
|
+
PdmPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5646
|
+
PdmPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPopoverComponent, selector: "pdm-popover", inputs: { triggerText: "triggerText", className: "className", panelClassName: "panelClassName", showTrigger: "showTrigger", open: "open" }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"relative inline-block\" [ngClass]=\"className\">\n <button\n #triggerEl\n *ngIf=\"showTrigger\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n {{ triggerText }}\n </button>\n\n <!-- Trigger slot for custom trigger -->\n <ng-content select=\"[pdmPopoverTrigger]\"></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5049
5647
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, decorators: [{
|
|
5050
5648
|
type: Component,
|
|
5051
|
-
args: [{ selector:
|
|
5052
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { triggerText: [{
|
|
5649
|
+
args: [{ selector: "pdm-popover", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative inline-block\" [ngClass]=\"className\">\n <button\n #triggerEl\n *ngIf=\"showTrigger\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n {{ triggerText }}\n </button>\n\n <!-- Trigger slot for custom trigger -->\n <ng-content select=\"[pdmPopoverTrigger]\"></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:inline-block}\n"] }]
|
|
5650
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { triggerText: [{
|
|
5053
5651
|
type: Input
|
|
5054
5652
|
}], className: [{
|
|
5055
5653
|
type: Input
|
|
@@ -5059,26 +5657,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
5059
5657
|
type: Input
|
|
5060
5658
|
}], openChange: [{
|
|
5061
5659
|
type: Output
|
|
5062
|
-
}], anchorRef: [{
|
|
5063
|
-
type: ViewChild,
|
|
5064
|
-
args: ['anchorEl']
|
|
5065
5660
|
}], triggerRef: [{
|
|
5066
5661
|
type: ViewChild,
|
|
5067
|
-
args: [
|
|
5068
|
-
}],
|
|
5662
|
+
args: ["triggerEl"]
|
|
5663
|
+
}], panelTemplateRef: [{
|
|
5069
5664
|
type: ViewChild,
|
|
5070
|
-
args: [
|
|
5665
|
+
args: ["panelTemplate"]
|
|
5071
5666
|
}], open: [{
|
|
5072
5667
|
type: Input
|
|
5073
5668
|
}], onEsc: [{
|
|
5074
5669
|
type: HostListener,
|
|
5075
|
-
args: [
|
|
5076
|
-
}], onViewportChange: [{
|
|
5077
|
-
type: HostListener,
|
|
5078
|
-
args: ['window:resize']
|
|
5079
|
-
}, {
|
|
5080
|
-
type: HostListener,
|
|
5081
|
-
args: ['window:scroll']
|
|
5670
|
+
args: ["document:keydown.escape"]
|
|
5082
5671
|
}] } });
|
|
5083
5672
|
|
|
5084
5673
|
class PdmProgressComponent {
|
|
@@ -5530,8 +6119,8 @@ class PdmTabsComponent {
|
|
|
5530
6119
|
constructor(cdr) {
|
|
5531
6120
|
this.cdr = cdr;
|
|
5532
6121
|
this.items = [];
|
|
5533
|
-
this.value =
|
|
5534
|
-
this.className =
|
|
6122
|
+
this.value = "";
|
|
6123
|
+
this.className = "";
|
|
5535
6124
|
this.valueChange = new EventEmitter();
|
|
5536
6125
|
}
|
|
5537
6126
|
select(item) {
|
|
@@ -5543,10 +6132,10 @@ class PdmTabsComponent {
|
|
|
5543
6132
|
}
|
|
5544
6133
|
}
|
|
5545
6134
|
PdmTabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTabsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5546
|
-
PdmTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTabsComponent, selector: "pdm-tabs", inputs: { items: "items", value: "value", className: "className" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div [ngClass]=\"['w-full', className]\">\n <div\n role=\"tablist\"\n class=\"inline-flex h-8 w-full items-center overflow-x-auto scrollbar-thin rounded-lg bg-muted p-[3px] text-muted-foreground md:w-fit\"\n >\n <button\n *ngFor=\"let item of items\"\n role=\"tab\"\n [attr.aria-selected]=\"value === item.value\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative inline-flex h-[calc(100%-1px)] appearance-none flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-0.5 text-sm font-medium transition-all focus-visible:border-ring focus-visible:outline-none focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 md:flex-initial md:px-4',\n value === item.value ? 'bg-background text-foreground shadow-sm' : 'bg-transparent text-muted-foreground'\n ]\"\n (click)=\"select(item)\"\n type=\"button\"\n >\n {{ item.label }}\n </button>\n </div>\n <div class=\"mt-4\">\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6135
|
+
PdmTabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTabsComponent, selector: "pdm-tabs", inputs: { items: "items", value: "value", className: "className" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div [ngClass]=\"['w-full', className]\">\n <div\n role=\"tablist\"\n class=\"inline-flex h-8 w-full items-center overflow-x-auto scrollbar-thin rounded-lg bg-muted p-[3px] text-muted-foreground md:w-fit\"\n >\n <button\n *ngFor=\"let item of items\"\n role=\"tab\"\n [attr.aria-selected]=\"value === item.value\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative inline-flex h-[calc(100%-1px)] appearance-none flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-0.5 text-sm font-medium transition-all focus-visible:border-ring focus-visible:outline-none focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 md:flex-initial md:px-4',\n value === item.value ? 'bg-background text-foreground shadow-sm' : 'bg-transparent text-muted-foreground'\n ]\"\n (click)=\"select(item)\"\n type=\"button\"\n >\n {{ item.label }}\n </button>\n </div>\n <div class=\"mt-4\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5547
6136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTabsComponent, decorators: [{
|
|
5548
6137
|
type: Component,
|
|
5549
|
-
args: [{ selector:
|
|
6138
|
+
args: [{ selector: "pdm-tabs", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['w-full', className]\">\n <div\n role=\"tablist\"\n class=\"inline-flex h-8 w-full items-center overflow-x-auto scrollbar-thin rounded-lg bg-muted p-[3px] text-muted-foreground md:w-fit\"\n >\n <button\n *ngFor=\"let item of items\"\n role=\"tab\"\n [attr.aria-selected]=\"value === item.value\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative inline-flex h-[calc(100%-1px)] appearance-none flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-0.5 text-sm font-medium transition-all focus-visible:border-ring focus-visible:outline-none focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 md:flex-initial md:px-4',\n value === item.value ? 'bg-background text-foreground shadow-sm' : 'bg-transparent text-muted-foreground'\n ]\"\n (click)=\"select(item)\"\n type=\"button\"\n >\n {{ item.label }}\n </button>\n </div>\n <div class=\"mt-4\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
5550
6139
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
|
|
5551
6140
|
type: Input
|
|
5552
6141
|
}], value: [{
|
|
@@ -5654,8 +6243,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
5654
6243
|
class PdmToggleGroupComponent {
|
|
5655
6244
|
constructor() {
|
|
5656
6245
|
this.items = [];
|
|
5657
|
-
this.value =
|
|
5658
|
-
this.className =
|
|
6246
|
+
this.value = "";
|
|
6247
|
+
this.className = "";
|
|
5659
6248
|
this.valueChange = new EventEmitter();
|
|
5660
6249
|
}
|
|
5661
6250
|
onSelect(next, disabled) {
|
|
@@ -5665,10 +6254,10 @@ class PdmToggleGroupComponent {
|
|
|
5665
6254
|
}
|
|
5666
6255
|
}
|
|
5667
6256
|
PdmToggleGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmToggleGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5668
|
-
PdmToggleGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmToggleGroupComponent, selector: "pdm-toggle-group", inputs: { items: "items", value: "value", className: "className" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div
|
|
6257
|
+
PdmToggleGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmToggleGroupComponent, selector: "pdm-toggle-group", inputs: { items: "items", value: "value", className: "className" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div\n [ngClass]=\"[\n 'flex flex-wrap items-center rounded-md border border-border p-1 gap-1',\n className,\n ]\"\n role=\"group\"\n>\n <button\n *ngFor=\"let item of items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [attr.aria-pressed]=\"item.value === value\"\n [ngClass]=\"[\n 'inline-flex h-8 appearance-none items-center justify-center rounded-sm border-0 bg-transparent px-2.5 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n item.value === value\n ? 'bg-accent text-accent-foreground'\n : 'text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"onSelect(item.value, item.disabled)\"\n >\n {{ item.label }}\n </button>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5669
6258
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmToggleGroupComponent, decorators: [{
|
|
5670
6259
|
type: Component,
|
|
5671
|
-
args: [{ selector:
|
|
6260
|
+
args: [{ selector: "pdm-toggle-group", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"[\n 'flex flex-wrap items-center rounded-md border border-border p-1 gap-1',\n className,\n ]\"\n role=\"group\"\n>\n <button\n *ngFor=\"let item of items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [attr.aria-pressed]=\"item.value === value\"\n [ngClass]=\"[\n 'inline-flex h-8 appearance-none items-center justify-center rounded-sm border-0 bg-transparent px-2.5 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n item.value === value\n ? 'bg-accent text-accent-foreground'\n : 'text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"onSelect(item.value, item.disabled)\"\n >\n {{ item.label }}\n </button>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
5672
6261
|
}], propDecorators: { items: [{
|
|
5673
6262
|
type: Input
|
|
5674
6263
|
}], value: [{
|
|
@@ -5680,33 +6269,173 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
5680
6269
|
}] } });
|
|
5681
6270
|
|
|
5682
6271
|
class PdmTooltipComponent {
|
|
5683
|
-
constructor() {
|
|
5684
|
-
this.
|
|
5685
|
-
this.
|
|
5686
|
-
this.
|
|
6272
|
+
constructor(overlay, viewContainerRef, elementRef, cdr) {
|
|
6273
|
+
this.overlay = overlay;
|
|
6274
|
+
this.viewContainerRef = viewContainerRef;
|
|
6275
|
+
this.elementRef = elementRef;
|
|
6276
|
+
this.cdr = cdr;
|
|
6277
|
+
this.text = "";
|
|
6278
|
+
this.side = "top";
|
|
6279
|
+
this.className = "";
|
|
5687
6280
|
this.open = false;
|
|
6281
|
+
this.overlayRef = null;
|
|
6282
|
+
}
|
|
6283
|
+
ngOnDestroy() {
|
|
6284
|
+
this.destroyOverlay();
|
|
6285
|
+
}
|
|
6286
|
+
onMouseEnter() {
|
|
6287
|
+
this.show();
|
|
6288
|
+
}
|
|
6289
|
+
onMouseLeave() {
|
|
6290
|
+
this.hide();
|
|
6291
|
+
}
|
|
6292
|
+
onFocusIn() {
|
|
6293
|
+
this.show();
|
|
5688
6294
|
}
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
6295
|
+
onFocusOut() {
|
|
6296
|
+
this.hide();
|
|
6297
|
+
}
|
|
6298
|
+
show() {
|
|
6299
|
+
if (this.open || !this.text)
|
|
6300
|
+
return;
|
|
6301
|
+
this.open = true;
|
|
6302
|
+
this.cdr.markForCheck();
|
|
6303
|
+
this.createOverlay();
|
|
6304
|
+
}
|
|
6305
|
+
hide() {
|
|
6306
|
+
if (!this.open)
|
|
6307
|
+
return;
|
|
6308
|
+
this.open = false;
|
|
6309
|
+
this.cdr.markForCheck();
|
|
6310
|
+
this.destroyOverlay();
|
|
6311
|
+
}
|
|
6312
|
+
createOverlay() {
|
|
6313
|
+
if (this.overlayRef)
|
|
6314
|
+
return;
|
|
6315
|
+
const triggerEl = this.elementRef.nativeElement.querySelector(":scope > *") ||
|
|
6316
|
+
this.elementRef.nativeElement;
|
|
6317
|
+
const positionStrategy = this.overlay
|
|
6318
|
+
.position()
|
|
6319
|
+
.flexibleConnectedTo(triggerEl)
|
|
6320
|
+
.withPositions(this.getPositionConfigs())
|
|
6321
|
+
.withFlexibleDimensions(false)
|
|
6322
|
+
.withPush(true);
|
|
6323
|
+
const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX);
|
|
6324
|
+
this.overlayRef = this.overlay.create({
|
|
6325
|
+
positionStrategy,
|
|
6326
|
+
panelClass,
|
|
6327
|
+
});
|
|
6328
|
+
const portal = new TemplatePortal(this.tooltipTemplate, this.viewContainerRef);
|
|
6329
|
+
this.overlayRef.attach(portal);
|
|
6330
|
+
}
|
|
6331
|
+
destroyOverlay() {
|
|
6332
|
+
if (this.overlayRef) {
|
|
6333
|
+
this.overlayRef.detach();
|
|
6334
|
+
this.overlayRef.dispose();
|
|
6335
|
+
this.overlayRef = null;
|
|
6336
|
+
}
|
|
6337
|
+
}
|
|
6338
|
+
getPositionConfigs() {
|
|
6339
|
+
const offset = 4;
|
|
6340
|
+
switch (this.side) {
|
|
6341
|
+
case "bottom":
|
|
6342
|
+
return [
|
|
6343
|
+
{
|
|
6344
|
+
originX: "center",
|
|
6345
|
+
originY: "bottom",
|
|
6346
|
+
overlayX: "center",
|
|
6347
|
+
overlayY: "top",
|
|
6348
|
+
offsetY: offset,
|
|
6349
|
+
},
|
|
6350
|
+
{
|
|
6351
|
+
originX: "center",
|
|
6352
|
+
originY: "top",
|
|
6353
|
+
overlayX: "center",
|
|
6354
|
+
overlayY: "bottom",
|
|
6355
|
+
offsetY: -offset,
|
|
6356
|
+
},
|
|
6357
|
+
];
|
|
6358
|
+
case "left":
|
|
6359
|
+
return [
|
|
6360
|
+
{
|
|
6361
|
+
originX: "start",
|
|
6362
|
+
originY: "center",
|
|
6363
|
+
overlayX: "end",
|
|
6364
|
+
overlayY: "center",
|
|
6365
|
+
offsetX: -offset,
|
|
6366
|
+
},
|
|
6367
|
+
{
|
|
6368
|
+
originX: "end",
|
|
6369
|
+
originY: "center",
|
|
6370
|
+
overlayX: "start",
|
|
6371
|
+
overlayY: "center",
|
|
6372
|
+
offsetX: offset,
|
|
6373
|
+
},
|
|
6374
|
+
];
|
|
6375
|
+
case "right":
|
|
6376
|
+
return [
|
|
6377
|
+
{
|
|
6378
|
+
originX: "end",
|
|
6379
|
+
originY: "center",
|
|
6380
|
+
overlayX: "start",
|
|
6381
|
+
overlayY: "center",
|
|
6382
|
+
offsetX: offset,
|
|
6383
|
+
},
|
|
6384
|
+
{
|
|
6385
|
+
originX: "start",
|
|
6386
|
+
originY: "center",
|
|
6387
|
+
overlayX: "end",
|
|
6388
|
+
overlayY: "center",
|
|
6389
|
+
offsetX: -offset,
|
|
6390
|
+
},
|
|
6391
|
+
];
|
|
6392
|
+
case "top":
|
|
6393
|
+
default:
|
|
6394
|
+
return [
|
|
6395
|
+
{
|
|
6396
|
+
originX: "center",
|
|
6397
|
+
originY: "top",
|
|
6398
|
+
overlayX: "center",
|
|
6399
|
+
overlayY: "bottom",
|
|
6400
|
+
offsetY: -offset,
|
|
6401
|
+
},
|
|
6402
|
+
{
|
|
6403
|
+
originX: "center",
|
|
6404
|
+
originY: "bottom",
|
|
6405
|
+
overlayX: "center",
|
|
6406
|
+
overlayY: "top",
|
|
6407
|
+
offsetY: offset,
|
|
6408
|
+
},
|
|
6409
|
+
];
|
|
6410
|
+
}
|
|
5697
6411
|
}
|
|
5698
6412
|
}
|
|
5699
|
-
PdmTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5700
|
-
PdmTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTooltipComponent, selector: "pdm-tooltip", inputs: { text: "text", side: "side", className: "className" }, ngImport: i0, template: "<span
|
|
6413
|
+
PdmTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTooltipComponent, deps: [{ token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
6414
|
+
PdmTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTooltipComponent, selector: "pdm-tooltip", inputs: { text: "text", side: "side", className: "className" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focusin": "onFocusIn()", "focusout": "onFocusOut()" } }, viewQueries: [{ propertyName: "tooltipTemplate", first: true, predicate: ["tooltipTemplate"], descendants: true }], ngImport: i0, template: "<span\n class=\"relative inline-flex\"\n [ngClass]=\"className\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n>\n <ng-content></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #tooltipTemplate>\n <span\n class=\"pointer-events-none overflow-hidden rounded-md bg-foreground px-3 py-1.5 text-xs text-background animate-in fade-in-0 zoom-in-95\"\n >\n {{ text }}\n </span>\n </ng-template>\n</span>\n", styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5701
6415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTooltipComponent, decorators: [{
|
|
5702
6416
|
type: Component,
|
|
5703
|
-
args: [{ selector:
|
|
5704
|
-
}], propDecorators: { text: [{
|
|
6417
|
+
args: [{ selector: "pdm-tooltip", changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n class=\"relative inline-flex\"\n [ngClass]=\"className\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n>\n <ng-content></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #tooltipTemplate>\n <span\n class=\"pointer-events-none overflow-hidden rounded-md bg-foreground px-3 py-1.5 text-xs text-background animate-in fade-in-0 zoom-in-95\"\n >\n {{ text }}\n </span>\n </ng-template>\n</span>\n", styles: [":host{display:inline-flex}\n"] }]
|
|
6418
|
+
}], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { text: [{
|
|
5705
6419
|
type: Input
|
|
5706
6420
|
}], side: [{
|
|
5707
6421
|
type: Input
|
|
5708
6422
|
}], className: [{
|
|
5709
6423
|
type: Input
|
|
6424
|
+
}], tooltipTemplate: [{
|
|
6425
|
+
type: ViewChild,
|
|
6426
|
+
args: ["tooltipTemplate"]
|
|
6427
|
+
}], onMouseEnter: [{
|
|
6428
|
+
type: HostListener,
|
|
6429
|
+
args: ["mouseenter"]
|
|
6430
|
+
}], onMouseLeave: [{
|
|
6431
|
+
type: HostListener,
|
|
6432
|
+
args: ["mouseleave"]
|
|
6433
|
+
}], onFocusIn: [{
|
|
6434
|
+
type: HostListener,
|
|
6435
|
+
args: ["focusin"]
|
|
6436
|
+
}], onFocusOut: [{
|
|
6437
|
+
type: HostListener,
|
|
6438
|
+
args: ["focusout"]
|
|
5710
6439
|
}] } });
|
|
5711
6440
|
|
|
5712
6441
|
const COMPONENTS = [
|
|
@@ -5907,5 +6636,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
5907
6636
|
* Generated bundle index. Do not edit.
|
|
5908
6637
|
*/
|
|
5909
6638
|
|
|
5910
|
-
export { BREAKPOINTS, PdmAccordionComponent, PdmAlertComponent, PdmAlertDialogComponent, PdmAspectRatioComponent, PdmAvatarComponent, PdmBadgeComponent, PdmBreadcrumbComponent, PdmButtonComponent, PdmButtonGroupComponent, PdmCalendarComponent, PdmCardComponent, PdmCarouselComponent, PdmChartComponent, PdmCheckboxComponent, PdmCollapsibleComponent, PdmComboboxComponent, PdmCommandComponent, PdmContextMenuComponent, PdmDataTableComponent, PdmDatePickerComponent, PdmDialogComponent, PdmDraggableTableComponent, PdmDrawerComponent, PdmDropdownMenuComponent, PdmEmptyComponent, PdmFieldComponent, PdmHoverCardComponent, PdmIconComponent, PdmInputComponent, PdmInputGroupComponent, PdmInputOtpComponent, PdmInputPasswordComponent, PdmItemComponent, PdmKbdComponent, PdmLabelComponent, PdmMenubarComponent, PdmNativeSelectComponent, PdmNavigationMenuComponent, PdmOutsideClickDirective, PdmPaginationComponent, PdmPopoverComponent, PdmProgressComponent, PdmRadioGroupComponent, PdmScrollAreaComponent, PdmSelectComponent, PdmSelectOptionDirective, PdmSeparatorComponent, PdmSheetComponent, PdmSidebarComponent, PdmSkeletonComponent, PdmSliderComponent, PdmSonnerComponent, PdmSpinnerComponent, PdmSwitchComponent, PdmTableComponent, PdmTabsComponent, PdmTextareaComponent, PdmToggleComponent, PdmToggleGroupComponent, PdmTooltipComponent, PdmUiKitModule, RESPONSIVE_CONTAINER, RESPONSIVE_DISPLAY, TABLE_RESPONSIVE, Z_INDEX, createFlexiblePositionStrategy, logZIndexStack, overflowResponsive, responsive, spacingResponsive, widthResponsive };
|
|
6639
|
+
export { BREAKPOINTS, OVERLAY_BASE_Z_INDEX, PdmAccordionComponent, PdmAlertComponent, PdmAlertDialogComponent, PdmAspectRatioComponent, PdmAvatarComponent, PdmBadgeComponent, PdmBreadcrumbComponent, PdmButtonComponent, PdmButtonGroupComponent, PdmCalendarComponent, PdmCardComponent, PdmCarouselComponent, PdmChartComponent, PdmCheckboxComponent, PdmCollapsibleComponent, PdmComboboxComponent, PdmCommandComponent, PdmContextMenuComponent, PdmDataTableComponent, PdmDatePickerComponent, PdmDialogComponent, PdmDraggableTableComponent, PdmDrawerComponent, PdmDropdownMenuComponent, PdmEmptyComponent, PdmFieldComponent, PdmHoverCardComponent, PdmIconComponent, PdmInputComponent, PdmInputGroupComponent, PdmInputOtpComponent, PdmInputPasswordComponent, PdmItemComponent, PdmKbdComponent, PdmLabelComponent, PdmMenubarComponent, PdmNativeSelectComponent, PdmNavigationMenuComponent, PdmOutsideClickDirective, PdmPaginationComponent, PdmPopoverComponent, PdmProgressComponent, PdmRadioGroupComponent, PdmScrollAreaComponent, PdmSelectComponent, PdmSelectOptionDirective, PdmSeparatorComponent, PdmSheetComponent, PdmSidebarComponent, PdmSkeletonComponent, PdmSliderComponent, PdmSonnerComponent, PdmSpinnerComponent, PdmSwitchComponent, PdmTableComponent, PdmTabsComponent, PdmTextareaComponent, PdmToggleComponent, PdmToggleGroupComponent, PdmTooltipComponent, PdmUiKitModule, RESPONSIVE_CONTAINER, RESPONSIVE_DISPLAY, TABLE_RESPONSIVE, Z_INDEX, createFlexiblePositionStrategy, createZIndexEnforcedOverlay, extractZIndex, logZIndexStack, mergeOverlayPanelClass, overflowResponsive, responsive, spacingResponsive, widthResponsive };
|
|
5911
6640
|
//# sourceMappingURL=pdm-ui-kit.mjs.map
|