@ship-ui/core 0.22.14 → 0.22.16
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 +46 -0
- package/assets/mcp/components.json +605 -4
- package/bin/src/scanner.zig +9 -18
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +17 -2
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +442 -0
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-alert.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-blueprint.mjs +23 -10
- package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-checkbox.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-datepicker.mjs +67 -33
- package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-dialog.mjs +14 -5
- package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-divider.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-editor.mjs +2673 -0
- package/fesm2022/ship-ui-core-ship-editor.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-icon.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-list.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-menu.mjs +8 -5
- package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-popover.mjs +14 -5
- package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs +5 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-radio.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-select.mjs +9 -9
- package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-sidenav.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spinner.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spotlight.mjs +77 -24
- package/fesm2022/ship-ui-core-ship-spotlight.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-table.mjs +517 -138
- package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs +24 -3
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-tree.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-tree.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ship-ui-core.mjs +36 -23
- package/fesm2022/ship-ui-core.mjs.map +1 -1
- package/package.json +33 -2
- package/types/ship-ui-core-sh-form-field-experimental.d.ts +2 -0
- package/types/ship-ui-core-ship-a11y-keybindings.d.ts +102 -0
- package/types/ship-ui-core-ship-blueprint.d.ts +2 -1
- package/types/ship-ui-core-ship-checkbox.d.ts +2 -1
- package/types/ship-ui-core-ship-datepicker.d.ts +2 -0
- package/types/ship-ui-core-ship-editor.d.ts +168 -0
- package/types/ship-ui-core-ship-radio.d.ts +2 -1
- package/types/ship-ui-core-ship-spotlight.d.ts +1 -1
- package/types/ship-ui-core-ship-table.d.ts +13 -1
- package/types/ship-ui-core-ship-toggle-card.d.ts +1 -0
- package/types/ship-ui-core-ship-toggle.d.ts +2 -1
- package/types/ship-ui-core.d.ts +3 -0
- package/bin/ship-fg-scanner +0 -0
|
@@ -3,7 +3,7 @@ import { ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/
|
|
|
3
3
|
|
|
4
4
|
class ShipList {
|
|
5
5
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: ShipList, isStandalone: true, selector: "sh-list", ngImport: i0, template: `
|
|
6
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: ShipList, isStandalone: true, selector: "sh-list", host: { attributes: { "role": "list" } }, ngImport: i0, template: `
|
|
7
7
|
<ng-content />
|
|
8
8
|
`, isInline: true, styles: [".sh-sortable{position:relative}.sh-sortable.dragging [draggable],.sh-sortable.dragging .sortable-ghost{cursor:grabbing;transition:transform 40ms linear}.sh-sortable [draggable]{transform:translate(0);transition:none;z-index:2;-webkit-user-select:none;user-select:none}.sh-sortable:not(.sh-sortable-tree) [draggable]{background:var(--base-1)}.sh-sortable:not(.sh-sortable-tree) [draggable]:not(:has([sort-handle])){cursor:grab}.sh-sortable .sortable-ghost{opacity:.5;z-index:10}.sh-sortable.item-dragged-out .sortable-ghost{display:none}.sh-sortable [sort-handle]{cursor:grab}.sh-sortable.sh-sortable-tree [draggable]{transform:none!important;transition:none!important;z-index:auto}.sh-sortable.sh-sortable-tree .sortable-ghost{z-index:0!important}.sh-sortable.sh-sortable-tree .sortable-ghost.drop-before:before,.sh-sortable.sh-sortable-tree .sortable-ghost.drop-after:after{display:none!important}.sh-sortable.sh-sortable-tree .sortable-ghost.drop-inside{outline:none!important;background:inherit!important}.sh-sortable.sh-sortable-tree .drop-inside{background:var(--primary-3)!important;outline:2px solid var(--primary-8)!important;outline-offset:-.125rem;border-radius:var(--shape-1, 4px)}.sh-sortable.sh-sortable-tree .drop-inside .node-icon,.sh-sortable.sh-sortable-tree .drop-inside sh-tree-node .sh-tree-node-left sh-icon{color:var(--primary-8)!important}.sh-sortable.sh-sortable-tree .drop-before{position:relative;z-index:20}.sh-sortable.sh-sortable-tree .drop-before:before{content:\"\";position:absolute;top:-.1875rem;left:calc(var(--tree-padding-left, 12px) + var(--tree-depth, 0) * var(--tree-indent-step, 12px) + .375rem);right:var(--tree-padding-right, 6px);height:.375rem;background-image:radial-gradient(circle at 3px 3px,var(--primary-8) 3px,transparent 3px),linear-gradient(to right,var(--primary-8),var(--primary-8));background-repeat:no-repeat,no-repeat;background-position:left center,6px center;background-size:6px 6px,100% 2px;z-index:10;pointer-events:none}.sh-sortable.sh-sortable-tree .drop-after{position:relative;z-index:20}.sh-sortable.sh-sortable-tree .drop-after:after{content:\"\";position:absolute;bottom:-.1875rem;left:calc(var(--tree-padding-left, 12px) + var(--tree-depth, 0) * var(--tree-indent-step, 12px) + .375rem);right:var(--tree-padding-right, 6px);height:.375rem;background-image:radial-gradient(circle at 3px 3px,var(--primary-8) 3px,transparent 3px),linear-gradient(to right,var(--primary-8),var(--primary-8));background-repeat:no-repeat,no-repeat;background-position:left center,6px center;background-size:6px 6px,100% 2px;z-index:10;pointer-events:none}sh-list{--list-s: var(--shape-2);--list-active-bg: var(--base-1);--list-color: var(--base-9);--list-active-bs: none;--list-item-b: 1px solid transparent;--list-item-active-b: 1px solid --list-active-bg;--list-p: 1.25rem 1rem;--list-item-p: .5rem .75rem;--list-item-gap: .5rem;width:100%;padding:var(--list-p);gap:.5rem;display:flex;flex-direction:column}sh-list.base-1{--list-active-bg: var(--base-1);--list-active-bs: var(--box-shadow-20)}sh-list.outlined{--list-active-bg: transparent;--list-active-bs: none;--list-item-b: 1px solid transparent;--list-item-active-b: 1px solid var(--primary-8)}sh-list.type-b{--list-p: 0;--list-item-p: .625rem .75rem;--list-item-gap: .75rem;--list-s: var(--shape-2)}sh-list.type-b>[action],sh-list.type-b>[item]{color:var(--base-10)}sh-list.type-b>[action].active,sh-list.type-b>[action].selected,sh-list.type-b>[item].active,sh-list.type-b>[item].selected{background:rgb(from var(--base-3) r g b/90%);color:var(--base-12)}sh-list.type-b>[action].active sh-icon:first-child,sh-list.type-b>[action].selected sh-icon:first-child,sh-list.type-b>[item].active sh-icon:first-child,sh-list.type-b>[item].selected sh-icon:first-child{color:var(--primary-8)}sh-list.type-b>[action].active .description,sh-list.type-b>[action].selected .description,sh-list.type-b>[item].active .description,sh-list.type-b>[item].selected .description{color:var(--base-9)}sh-list.type-b>[action] sh-icon:first-child,sh-list.type-b>[item] sh-icon:first-child{font-size:1.125rem;color:var(--base-7);transition:color .15s ease}sh-list.type-b>[action] .text-group,sh-list.type-b>[item] .text-group{display:flex;flex-direction:column;flex:1}sh-list.type-b>[action] .label,sh-list.type-b>[item] .label{font:var(--paragraph-30B)}sh-list.type-b>[action] .description,sh-list.type-b>[item] .description{font:var(--paragraph-40);color:var(--base-7);transition:color .15s ease}sh-list.type-b>[action] .shortcut,sh-list.type-b>[item] .shortcut{display:flex;gap:.25rem}sh-list.type-b>[action] .shortcut kbd,sh-list.type-b>[item] .shortcut kbd{font-family:inherit;background:rgb(from var(--base-3) r g b/80%);border:1px solid rgb(from var(--base-4) r g b/60%);color:var(--base-8);border-radius:var(--shape-1);padding:.125rem .375rem;font-size:.6875rem;line-height:1;box-shadow:0 1px #0000001a}sh-list:empty{padding:0}sh-list>[title]{color:var(--base-8);margin:0 .75rem;font:var(--paragraph-30);line-height:1.5rem}sh-list[shsortable] [item]:active{transform:scale(1)}sh-list>[action],sh-list>[item]{border-radius:var(--list-s);padding:var(--list-item-p);font:var(--paragraph-30B);color:var(--list-color);border:var(--list-item-b);display:flex;align-items:center;gap:var(--list-item-gap);width:100%;-webkit-user-select:none;user-select:none;appearance:none;border:0;text-align:left;text-wrap:balance;background-color:transparent;text-decoration:none;transition:transform 125ms linear,box-shadow 125ms linear;transform:scale(1)}sh-list>[action]:active,sh-list>[item]:active{--list-active-bs: var(--box-shadow-10);transform:scale(.98)}sh-list>[action]:focus,sh-list>[item]:focus{outline:none}sh-list>[action]:focus-visible,sh-list>[item]:focus-visible{outline:2px solid var(--primary-8);outline-offset:2px}sh-list>[action] [suffix],sh-list>[item] [suffix]{margin-left:auto;color:var(--base-8)}sh-list :has(input),sh-list>[action]{cursor:pointer}sh-list>[item]:has(input:checked),sh-list>[action]:has(input:checked),sh-list>[action].active,sh-list>[action].selected{--list-color: var(--base-12);background-color:var(--list-active-bg);box-shadow:var(--list-active-bs);border:var(--list-item-active-b)}sh-list.primary>[item]:has(input:checked) sh-icon:first-child,sh-list.primary>[action]:has(input:checked) sh-icon:first-child,sh-list.primary>[action].active sh-icon:first-child,sh-list.primary>[action].selected sh-icon:first-child{color:var(--primary-8)}sh-list.accent>[item]:has(input:checked) sh-icon:first-child,sh-list.accent>[action]:has(input:checked) sh-icon:first-child,sh-list.accent>[action].active sh-icon:first-child,sh-list.accent>[action].selected sh-icon:first-child{color:var(--accent-8)}sh-list.warn>[item]:has(input:checked) sh-icon:first-child,sh-list.warn>[action]:has(input:checked) sh-icon:first-child,sh-list.warn>[action].active sh-icon:first-child,sh-list.warn>[action].selected sh-icon:first-child{color:var(--warn-8)}sh-list.error>[item]:has(input:checked) sh-icon:first-child,sh-list.error>[action]:has(input:checked) sh-icon:first-child,sh-list.error>[action].active sh-icon:first-child,sh-list.error>[action].selected sh-icon:first-child{color:var(--error-8)}sh-list.success>[item]:has(input:checked) sh-icon:first-child,sh-list.success>[action]:has(input:checked) sh-icon:first-child,sh-list.success>[action].active sh-icon:first-child,sh-list.success>[action].selected sh-icon:first-child{color:var(--success-8)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9
9
|
}
|
|
@@ -11,7 +11,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{ selector: 'sh-list', encapsulation: ViewEncapsulation.None, imports: [], template: `
|
|
13
13
|
<ng-content />
|
|
14
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
14
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
15
|
+
'role': 'list',
|
|
16
|
+
}, styles: [".sh-sortable{position:relative}.sh-sortable.dragging [draggable],.sh-sortable.dragging .sortable-ghost{cursor:grabbing;transition:transform 40ms linear}.sh-sortable [draggable]{transform:translate(0);transition:none;z-index:2;-webkit-user-select:none;user-select:none}.sh-sortable:not(.sh-sortable-tree) [draggable]{background:var(--base-1)}.sh-sortable:not(.sh-sortable-tree) [draggable]:not(:has([sort-handle])){cursor:grab}.sh-sortable .sortable-ghost{opacity:.5;z-index:10}.sh-sortable.item-dragged-out .sortable-ghost{display:none}.sh-sortable [sort-handle]{cursor:grab}.sh-sortable.sh-sortable-tree [draggable]{transform:none!important;transition:none!important;z-index:auto}.sh-sortable.sh-sortable-tree .sortable-ghost{z-index:0!important}.sh-sortable.sh-sortable-tree .sortable-ghost.drop-before:before,.sh-sortable.sh-sortable-tree .sortable-ghost.drop-after:after{display:none!important}.sh-sortable.sh-sortable-tree .sortable-ghost.drop-inside{outline:none!important;background:inherit!important}.sh-sortable.sh-sortable-tree .drop-inside{background:var(--primary-3)!important;outline:2px solid var(--primary-8)!important;outline-offset:-.125rem;border-radius:var(--shape-1, 4px)}.sh-sortable.sh-sortable-tree .drop-inside .node-icon,.sh-sortable.sh-sortable-tree .drop-inside sh-tree-node .sh-tree-node-left sh-icon{color:var(--primary-8)!important}.sh-sortable.sh-sortable-tree .drop-before{position:relative;z-index:20}.sh-sortable.sh-sortable-tree .drop-before:before{content:\"\";position:absolute;top:-.1875rem;left:calc(var(--tree-padding-left, 12px) + var(--tree-depth, 0) * var(--tree-indent-step, 12px) + .375rem);right:var(--tree-padding-right, 6px);height:.375rem;background-image:radial-gradient(circle at 3px 3px,var(--primary-8) 3px,transparent 3px),linear-gradient(to right,var(--primary-8),var(--primary-8));background-repeat:no-repeat,no-repeat;background-position:left center,6px center;background-size:6px 6px,100% 2px;z-index:10;pointer-events:none}.sh-sortable.sh-sortable-tree .drop-after{position:relative;z-index:20}.sh-sortable.sh-sortable-tree .drop-after:after{content:\"\";position:absolute;bottom:-.1875rem;left:calc(var(--tree-padding-left, 12px) + var(--tree-depth, 0) * var(--tree-indent-step, 12px) + .375rem);right:var(--tree-padding-right, 6px);height:.375rem;background-image:radial-gradient(circle at 3px 3px,var(--primary-8) 3px,transparent 3px),linear-gradient(to right,var(--primary-8),var(--primary-8));background-repeat:no-repeat,no-repeat;background-position:left center,6px center;background-size:6px 6px,100% 2px;z-index:10;pointer-events:none}sh-list{--list-s: var(--shape-2);--list-active-bg: var(--base-1);--list-color: var(--base-9);--list-active-bs: none;--list-item-b: 1px solid transparent;--list-item-active-b: 1px solid --list-active-bg;--list-p: 1.25rem 1rem;--list-item-p: .5rem .75rem;--list-item-gap: .5rem;width:100%;padding:var(--list-p);gap:.5rem;display:flex;flex-direction:column}sh-list.base-1{--list-active-bg: var(--base-1);--list-active-bs: var(--box-shadow-20)}sh-list.outlined{--list-active-bg: transparent;--list-active-bs: none;--list-item-b: 1px solid transparent;--list-item-active-b: 1px solid var(--primary-8)}sh-list.type-b{--list-p: 0;--list-item-p: .625rem .75rem;--list-item-gap: .75rem;--list-s: var(--shape-2)}sh-list.type-b>[action],sh-list.type-b>[item]{color:var(--base-10)}sh-list.type-b>[action].active,sh-list.type-b>[action].selected,sh-list.type-b>[item].active,sh-list.type-b>[item].selected{background:rgb(from var(--base-3) r g b/90%);color:var(--base-12)}sh-list.type-b>[action].active sh-icon:first-child,sh-list.type-b>[action].selected sh-icon:first-child,sh-list.type-b>[item].active sh-icon:first-child,sh-list.type-b>[item].selected sh-icon:first-child{color:var(--primary-8)}sh-list.type-b>[action].active .description,sh-list.type-b>[action].selected .description,sh-list.type-b>[item].active .description,sh-list.type-b>[item].selected .description{color:var(--base-9)}sh-list.type-b>[action] sh-icon:first-child,sh-list.type-b>[item] sh-icon:first-child{font-size:1.125rem;color:var(--base-7);transition:color .15s ease}sh-list.type-b>[action] .text-group,sh-list.type-b>[item] .text-group{display:flex;flex-direction:column;flex:1}sh-list.type-b>[action] .label,sh-list.type-b>[item] .label{font:var(--paragraph-30B)}sh-list.type-b>[action] .description,sh-list.type-b>[item] .description{font:var(--paragraph-40);color:var(--base-7);transition:color .15s ease}sh-list.type-b>[action] .shortcut,sh-list.type-b>[item] .shortcut{display:flex;gap:.25rem}sh-list.type-b>[action] .shortcut kbd,sh-list.type-b>[item] .shortcut kbd{font-family:inherit;background:rgb(from var(--base-3) r g b/80%);border:1px solid rgb(from var(--base-4) r g b/60%);color:var(--base-8);border-radius:var(--shape-1);padding:.125rem .375rem;font-size:.6875rem;line-height:1;box-shadow:0 1px #0000001a}sh-list:empty{padding:0}sh-list>[title]{color:var(--base-8);margin:0 .75rem;font:var(--paragraph-30);line-height:1.5rem}sh-list[shsortable] [item]:active{transform:scale(1)}sh-list>[action],sh-list>[item]{border-radius:var(--list-s);padding:var(--list-item-p);font:var(--paragraph-30B);color:var(--list-color);border:var(--list-item-b);display:flex;align-items:center;gap:var(--list-item-gap);width:100%;-webkit-user-select:none;user-select:none;appearance:none;border:0;text-align:left;text-wrap:balance;background-color:transparent;text-decoration:none;transition:transform 125ms linear,box-shadow 125ms linear;transform:scale(1)}sh-list>[action]:active,sh-list>[item]:active{--list-active-bs: var(--box-shadow-10);transform:scale(.98)}sh-list>[action]:focus,sh-list>[item]:focus{outline:none}sh-list>[action]:focus-visible,sh-list>[item]:focus-visible{outline:2px solid var(--primary-8);outline-offset:2px}sh-list>[action] [suffix],sh-list>[item] [suffix]{margin-left:auto;color:var(--base-8)}sh-list :has(input),sh-list>[action]{cursor:pointer}sh-list>[item]:has(input:checked),sh-list>[action]:has(input:checked),sh-list>[action].active,sh-list>[action].selected{--list-color: var(--base-12);background-color:var(--list-active-bg);box-shadow:var(--list-active-bs);border:var(--list-item-active-b)}sh-list.primary>[item]:has(input:checked) sh-icon:first-child,sh-list.primary>[action]:has(input:checked) sh-icon:first-child,sh-list.primary>[action].active sh-icon:first-child,sh-list.primary>[action].selected sh-icon:first-child{color:var(--primary-8)}sh-list.accent>[item]:has(input:checked) sh-icon:first-child,sh-list.accent>[action]:has(input:checked) sh-icon:first-child,sh-list.accent>[action].active sh-icon:first-child,sh-list.accent>[action].selected sh-icon:first-child{color:var(--accent-8)}sh-list.warn>[item]:has(input:checked) sh-icon:first-child,sh-list.warn>[action]:has(input:checked) sh-icon:first-child,sh-list.warn>[action].active sh-icon:first-child,sh-list.warn>[action].selected sh-icon:first-child{color:var(--warn-8)}sh-list.error>[item]:has(input:checked) sh-icon:first-child,sh-list.error>[action]:has(input:checked) sh-icon:first-child,sh-list.error>[action].active sh-icon:first-child,sh-list.error>[action].selected sh-icon:first-child{color:var(--error-8)}sh-list.success>[item]:has(input:checked) sh-icon:first-child,sh-list.success>[action]:has(input:checked) sh-icon:first-child,sh-list.success>[action].active sh-icon:first-child,sh-list.success>[action].selected sh-icon:first-child{color:var(--success-8)}\n"] }]
|
|
15
17
|
}] });
|
|
16
18
|
|
|
17
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-list.mjs","sources":["../../../projects/ship-ui/ship-list/ship-list.ts","../../../projects/ship-ui/ship-list/ship-ui-core-ship-list.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'sh-list',\n styleUrl: './ship-list.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipList {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-list.mjs","sources":["../../../projects/ship-ui/ship-list/ship-list.ts","../../../projects/ship-ui/ship-list/ship-ui-core-ship-list.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'sh-list',\n styleUrl: './ship-list.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'list',\n },\n})\nexport class ShipList {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAea,QAAQ,CAAA;8GAAR,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EART;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kxOAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMU,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAbpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,iBAEJ,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;GAET,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,MAAM;AACf,qBAAA,EAAA,MAAA,EAAA,CAAA,kxOAAA,CAAA,EAAA;;;ACbH;;AAEG;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, DOCUMENT, Renderer2, computed, input, model, output, signal, viewChild, effect, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { ShipFormField } from '@ship-ui/core/ship-form-field';
|
|
4
|
+
import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';
|
|
4
5
|
import { ShipIcon } from '@ship-ui/core/ship-icon';
|
|
5
6
|
import { ShipPopover } from '@ship-ui/core/ship-popover';
|
|
6
7
|
import { observeChildren, createFormInputSignal, generateUniqueId } from '@ship-ui/core';
|
|
@@ -9,6 +10,7 @@ class ShipMenu {
|
|
|
9
10
|
constructor() {
|
|
10
11
|
this.#document = inject(DOCUMENT);
|
|
11
12
|
this.#renderer = inject(Renderer2);
|
|
13
|
+
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
12
14
|
this.parentMenu = inject(ShipMenu, { optional: true, skipSelf: true });
|
|
13
15
|
this.isSubmenu = computed(() => this.parentMenu !== null, /* @ts-ignore */
|
|
14
16
|
...(ngDevMode ? [{ debugName: "isSubmenu" }] : /* istanbul ignore next */ []));
|
|
@@ -114,15 +116,15 @@ class ShipMenu {
|
|
|
114
116
|
if (ShipMenu.openMenus.at(-1) !== this)
|
|
115
117
|
return;
|
|
116
118
|
const activeOptionIndex = this.activeOptionIndex();
|
|
117
|
-
if (e
|
|
119
|
+
if (this.#keybindings.matches(e, 'menu.next')) {
|
|
118
120
|
e.preventDefault();
|
|
119
121
|
this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));
|
|
120
122
|
}
|
|
121
|
-
else if (e
|
|
123
|
+
else if (this.#keybindings.matches(e, 'menu.prev')) {
|
|
122
124
|
e.preventDefault();
|
|
123
125
|
this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));
|
|
124
126
|
}
|
|
125
|
-
else if (e
|
|
127
|
+
else if (this.#keybindings.matches(e, 'menu.open-submenu')) {
|
|
126
128
|
if (activeOptionIndex > -1) {
|
|
127
129
|
const el = this.activeElements()[activeOptionIndex];
|
|
128
130
|
const parent = el.parentElement;
|
|
@@ -138,13 +140,13 @@ class ShipMenu {
|
|
|
138
140
|
}
|
|
139
141
|
}
|
|
140
142
|
}
|
|
141
|
-
else if (e
|
|
143
|
+
else if (this.#keybindings.matches(e, 'menu.close-submenu')) {
|
|
142
144
|
if (this.isSubmenu()) {
|
|
143
145
|
e.preventDefault();
|
|
144
146
|
this.close('closed');
|
|
145
147
|
}
|
|
146
148
|
}
|
|
147
|
-
else if (e
|
|
149
|
+
else if (this.#keybindings.matches(e, 'menu.select')) {
|
|
148
150
|
e.preventDefault();
|
|
149
151
|
if (activeOptionIndex > -1) {
|
|
150
152
|
const el = this.activeElements()[activeOptionIndex];
|
|
@@ -271,6 +273,7 @@ class ShipMenu {
|
|
|
271
273
|
}
|
|
272
274
|
#document;
|
|
273
275
|
#renderer;
|
|
276
|
+
#keybindings;
|
|
274
277
|
static { this.openMenus = []; }
|
|
275
278
|
toggleIsOpen(event) {
|
|
276
279
|
event.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-menu.mjs","sources":["../../../projects/ship-ui/ship-menu/ship-menu.ts","../../../projects/ship-ui/ship-menu/ship-ui-core-ship-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, HostListener, inject, input, model, output, Renderer2, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ShipFormField } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipPopover } from '@ship-ui/core/ship-popover';\nimport { createFormInputSignal } from '@ship-ui/core';\nimport { observeChildren } from '@ship-ui/core';\nimport { generateUniqueId } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-menu',\n styleUrl: './ship-menu.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div\n trigger\n [class.is-open]=\"isOpen()\"\n (click)=\"toggleIsOpen($event)\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n\n @if (isSubmenu()) {\n <sh-icon class=\"submenu-indicator\">caret-right</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input\n type=\"text\"\n #inputRef\n placeholder=\"Search\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n aria-autocomplete=\"list\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\"\n role=\"listbox\"\n [id]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n parentMenu = inject(ShipMenu, { optional: true, skipSelf: true });\n isSubmenu = computed(() => this.parentMenu !== null);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n private static openMenus: ShipMenu[] = [];\n\n openMenusEffect = effect((onCleanup) => {\n if (this.isOpen()) {\n ShipMenu.openMenus.push(this);\n }\n\n onCleanup(() => {\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n });\n });\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => {\n const optionsContainer = this.optionsRef()?.nativeElement;\n if (!optionsContainer) return [];\n return this.options.signal().filter((x) => {\n if (x.disabled) return false;\n return x.closest('.options') === optionsContainer;\n });\n });\n inputValue = createFormInputSignal(this.inputRef);\n\n readonly optionsId = generateUniqueId();\n activeOptionId = signal<string | undefined>(undefined);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n } else {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n // Only handle events if this is the most recently opened menu\n if (ShipMenu.openMenus.at(-1) !== this) return;\n\n const activeOptionIndex = this.activeOptionIndex();\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (e.key === 'ArrowRight') {\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n e.preventDefault();\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n }\n }\n } else if (e.key === 'ArrowLeft') {\n if (this.isSubmenu()) {\n e.preventDefault();\n this.close('closed');\n }\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n } else {\n el.click();\n if (!el.querySelector('sh-checkbox')) {\n queueMicrotask(() => this.close('active'));\n }\n }\n }\n } else if (e.key === 'Tab') {\n let optionElements = this.activeElements();\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (e.shiftKey) {\n if (activeOptionIndex <= 0) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n }\n } else {\n if (activeOptionIndex >= optionElements.length - 1) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n }\n }\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) {\n this.activeElements.set(this.optionsEl());\n return;\n }\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n if (!allOptions[i].id) {\n allOptions[i].id = `${this.optionsId}-option-${i}`;\n }\n allOptions[i].setAttribute('role', 'option');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n\n // Assign IDs to options for ARIA support\n for (let i = 0; i < optionElements.length; i++) {\n if (!optionElements[i].id) {\n optionElements[i].id = `${this.optionsId}-option-${i}`;\n }\n optionElements[i].setAttribute('role', 'option');\n }\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n if (this.isOpen()) {\n this.close('fromPopover');\n } else {\n this.open();\n }\n }\n\n open() {\n if (this.disabled()) return;\n this.isOpen.set(true);\n\n if (this.searchable()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n @HostListener('ship-menu-open', ['$event'])\n onShipMenuOpen(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n\n const customEvent = event as CustomEvent;\n if (customEvent.detail?.keyboard) {\n setTimeout(() => {\n this.activeOptionIndex.set(0);\n }, 50);\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n\n if (activeOptionIndex > -1) {\n const activeOption = optionElements[activeOptionIndex];\n activeOption.scrollIntoView({ block: 'center' });\n activeOption.classList.add('active');\n activeOption.setAttribute('aria-selected', 'true');\n this.activeOptionId.set(activeOption.id);\n } else {\n this.activeOptionId.set(undefined);\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n\n if (this.isSubmenu()) {\n const parentInput = this.parentMenu?.inputRef()?.nativeElement;\n if (parentInput) {\n queueMicrotask(() => parentInput.focus());\n }\n }\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-menu.mjs","sources":["../../../projects/ship-ui/ship-menu/ship-menu.ts","../../../projects/ship-ui/ship-menu/ship-ui-core-ship-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, HostListener, inject, input, model, output, Renderer2, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ShipFormField } from '@ship-ui/core/ship-form-field';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipPopover } from '@ship-ui/core/ship-popover';\nimport { createFormInputSignal } from '@ship-ui/core';\nimport { observeChildren } from '@ship-ui/core';\nimport { generateUniqueId } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-menu',\n styleUrl: './ship-menu.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipPopover, ShipFormField, ShipIcon],\n template: `\n <sh-popover\n #formFieldWrapper\n [(isOpen)]=\"isOpen\"\n [disableOpenByClick]=\"true\"\n (closed)=\"close('fromPopover')\"\n [asMultiLayer]=\"asMultiLayer()\"\n [options]=\"{\n closeOnButton: false,\n closeOnEsc: true,\n }\">\n <div\n trigger\n [class.is-open]=\"isOpen()\"\n (click)=\"toggleIsOpen($event)\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content />\n\n @if (openIndicator()) {\n <sh-icon class=\"open-indicator\">caret-down</sh-icon>\n }\n\n @if (isSubmenu()) {\n <sh-icon class=\"submenu-indicator\">caret-right</sh-icon>\n }\n </div>\n\n <div class=\"form-field-wrap\">\n <sh-form-field class=\"small stretch\" [class.hidden]=\"searchable() === false\">\n <input\n type=\"text\"\n #inputRef\n placeholder=\"Search\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n aria-autocomplete=\"list\" />\n </sh-form-field>\n </div>\n\n <div\n class=\"options\"\n #optionsRef\n (click)=\"close('active')\"\n [class.searching]=\"searchable() && inputValue() !== ''\"\n role=\"listbox\"\n [id]=\"optionsId\"\n [attr.aria-activedescendant]=\"activeOptionId()\">\n <ng-content select=\"[menu]\" />\n </div>\n </sh-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'disabled()',\n '[class.has-search]': 'searchable()',\n '[class.multi-layer]': 'asMultiLayer()',\n },\n})\nexport class ShipMenu {\n #document = inject(DOCUMENT);\n #renderer = inject(Renderer2);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n parentMenu = inject(ShipMenu, { optional: true, skipSelf: true });\n isSubmenu = computed(() => this.parentMenu !== null);\n asMultiLayer = input<boolean>(false);\n openIndicator = input(false);\n disabled = input<boolean>(false);\n customOptionElementSelectors = input<string[]>(['button']);\n keepClickedOptionActive = input<boolean>(false);\n closeOnClick = input<boolean>(true);\n isOpen = model<boolean>(false);\n closed = output<boolean>();\n\n searchable = input<boolean>(false);\n activeOptionIndex = signal<number>(-1);\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputRef');\n optionsRef = viewChild<ElementRef<HTMLDivElement>>('optionsRef');\n\n private static openMenus: ShipMenu[] = [];\n\n openMenusEffect = effect((onCleanup) => {\n if (this.isOpen()) {\n ShipMenu.openMenus.push(this);\n }\n\n onCleanup(() => {\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n });\n });\n\n options = observeChildren<HTMLButtonElement>(this.optionsRef, this.customOptionElementSelectors);\n optionsEl = computed(() => {\n const optionsContainer = this.optionsRef()?.nativeElement;\n if (!optionsContainer) return [];\n return this.options.signal().filter((x) => {\n if (x.disabled) return false;\n return x.closest('.options') === optionsContainer;\n });\n });\n inputValue = createFormInputSignal(this.inputRef);\n\n readonly optionsId = generateUniqueId();\n activeOptionId = signal<string | undefined>(undefined);\n\n abortController: AbortController | null = null;\n optionsEffect = effect(() => {\n if (this.abortController !== null) {\n this.abortController.abort();\n this.abortController = null;\n }\n\n if (!this.isOpen()) return;\n\n this.abortController = new AbortController();\n\n const searchable = this.searchable();\n\n if (!searchable) {\n this.#document.documentElement.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n } else {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.addEventListener('keydown', this.keyDownEventListener, {\n signal: this.abortController.signal,\n });\n }\n }\n\n const inputEl = this.inputRef()?.nativeElement;\n\n if (!inputEl) return;\n\n queueMicrotask(() => inputEl.focus());\n\n if (!this.closeOnClick()) {\n const optionRef = this.optionsRef()?.nativeElement;\n\n optionRef?.addEventListener('click', (e: MouseEvent) => {\n const optionEl = e.target as HTMLButtonElement;\n\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n const clickedOptionIndex = optionElements.findIndex((x) => x === optionEl);\n\n if (clickedOptionIndex > -1) {\n this.activeOptionIndex.set(clickedOptionIndex);\n inputEl.focus();\n }\n });\n }\n });\n\n keyDownEventListener = (e: KeyboardEvent) => {\n // Only handle events if this is the most recently opened menu\n if (ShipMenu.openMenus.at(-1) !== this) return;\n\n const activeOptionIndex = this.activeOptionIndex();\n\n if (this.#keybindings.matches(e, 'menu.next')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.prev')) {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n } else if (this.#keybindings.matches(e, 'menu.open-submenu')) {\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n e.preventDefault();\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n }\n }\n } else if (this.#keybindings.matches(e, 'menu.close-submenu')) {\n if (this.isSubmenu()) {\n e.preventDefault();\n this.close('closed');\n }\n } else if (this.#keybindings.matches(e, 'menu.select')) {\n e.preventDefault();\n if (activeOptionIndex > -1) {\n const el = this.activeElements()[activeOptionIndex as number];\n const parent = el.parentElement;\n\n // For nested menu's\n if (parent?.hasAttribute('trigger')) {\n const event = new CustomEvent('ship-menu-open', {\n bubbles: true,\n cancelable: true,\n detail: { keyboard: true },\n });\n\n el.dispatchEvent(event);\n } else {\n el.click();\n if (!el.querySelector('sh-checkbox')) {\n queueMicrotask(() => this.close('active'));\n }\n }\n }\n } else if (e.key === 'Tab') {\n let optionElements = this.activeElements();\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (e.shiftKey) {\n if (activeOptionIndex <= 0) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.prevActiveIndex(activeOptionIndex));\n }\n } else {\n if (activeOptionIndex >= optionElements.length - 1) {\n e.preventDefault();\n this.close('closed');\n } else {\n e.preventDefault();\n this.activeOptionIndex.set(this.nextActiveIndex(activeOptionIndex));\n }\n }\n }\n };\n\n _lastElementList: HTMLButtonElement[] = [];\n activeElements = signal<HTMLButtonElement[]>([]);\n lastInputValue = '';\n inputValueEffect = effect(() => {\n const searchable = this.searchable();\n\n if (!searchable) {\n this.activeElements.set(this.optionsEl());\n return;\n }\n\n const inputValue = (this.inputValue() ?? '').toLowerCase();\n\n this.#resetActiveOption();\n\n if (!inputValue || inputValue === '') {\n const allOptions = this.optionsEl();\n\n this.activeElements.set(allOptions);\n this._lastElementList = allOptions;\n\n for (let i = 0; i < allOptions.length; i++) {\n this.#renderer.removeStyle(allOptions[i], 'order');\n if (!allOptions[i].id) {\n allOptions[i].id = `${this.optionsId}-option-${i}`;\n }\n allOptions[i].setAttribute('role', 'option');\n }\n\n return;\n }\n\n if (!inputValue || inputValue === '') return;\n\n let optionElements =\n this._lastElementList.length && inputValue.length > this.lastInputValue.length\n ? this._lastElementList\n : this.optionsEl();\n\n this.lastInputValue = inputValue;\n\n for (let i = 0; i < optionElements.length; i++) {\n const el = optionElements[i];\n const textContent = el.textContent?.toLowerCase() || '';\n const score = this.#calculateMatchScore(textContent, inputValue);\n\n (el.value as any) = score;\n }\n\n optionElements = optionElements\n .filter((x) => (x.value as any) > 0)\n .sort((a, b) => (b.value as any) - (a.value as any));\n\n for (let i = 0; i < optionElements.length; i++) {\n this.#renderer.setStyle(optionElements[i], 'order', i);\n }\n\n this.activeElements.set(optionElements);\n this._lastElementList = optionElements;\n\n // Assign IDs to options for ARIA support\n for (let i = 0; i < optionElements.length; i++) {\n if (!optionElements[i].id) {\n optionElements[i].id = `${this.optionsId}-option-${i}`;\n }\n optionElements[i].setAttribute('role', 'option');\n }\n });\n\n toggleIsOpen(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled()) return;\n\n if (this.isOpen()) {\n this.close('fromPopover');\n } else {\n this.open();\n }\n }\n\n open() {\n if (this.disabled()) return;\n this.isOpen.set(true);\n\n if (this.searchable()) {\n setTimeout(() => this.inputRef()?.nativeElement.focus());\n }\n }\n\n @HostListener('ship-menu-open', ['$event'])\n onShipMenuOpen(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n\n const customEvent = event as CustomEvent;\n if (customEvent.detail?.keyboard) {\n setTimeout(() => {\n this.activeOptionIndex.set(0);\n }, 50);\n }\n }\n\n #calculateMatchScore(option: string, input: string): number {\n if (!input) return 0;\n\n let score = 0;\n let lastIndex = -1;\n let matchCount = 0;\n let inSequence = true;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (option.length > lastIndex + 1 && option[lastIndex + 1] === char) {\n score += i === 0 ? 100 : 150;\n lastIndex++;\n matchCount++;\n } else {\n const charIndex = option.indexOf(char, lastIndex + 1);\n\n if (i > 0) {\n inSequence = false;\n }\n\n if (charIndex === -1) {\n return 0;\n }\n\n score += 100;\n\n lastIndex = charIndex;\n matchCount++;\n }\n }\n\n if (inSequence && input.length === matchCount) {\n score += 1000;\n }\n\n score += matchCount * 20;\n\n return score;\n }\n\n activeOptionIndexEffect = effect(() => {\n const optionElements = this.activeElements();\n const activeOptionIndex = this.activeOptionIndex();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n\n if (activeOptionIndex > -1) {\n const activeOption = optionElements[activeOptionIndex];\n activeOption.scrollIntoView({ block: 'center' });\n activeOption.classList.add('active');\n activeOption.setAttribute('aria-selected', 'true');\n this.activeOptionId.set(activeOption.id);\n } else {\n this.activeOptionId.set(undefined);\n }\n });\n\n nextActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === -1) {\n return 0;\n }\n\n if (activeIndex === optionElements.length - 1) {\n return 0;\n }\n\n const nextIndex = activeIndex + 1;\n\n if (optionElements[nextIndex].disabled) {\n return this.nextActiveIndex(nextIndex);\n }\n\n return nextIndex;\n }\n\n prevActiveIndex(activeIndex: number): number {\n let optionElements = this.activeElements();\n\n if (!optionElements.length) {\n const newOptionElements = this.optionsEl();\n this.activeElements.set(newOptionElements);\n optionElements = newOptionElements;\n }\n\n if (activeIndex === 0) {\n return optionElements.length - 1;\n }\n\n if (activeIndex === -1) {\n return optionElements.length - 1;\n }\n\n const prevIndex = activeIndex - 1;\n\n if (optionElements[prevIndex].disabled) {\n return this.prevActiveIndex(prevIndex);\n }\n\n return prevIndex;\n }\n\n close(action: 'fromPopover' | 'closed' | 'active' = 'closed', event?: MouseEvent) {\n this.inputValue.set('');\n\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n\n if (this.closeOnClick()) {\n (!this.keepClickedOptionActive() || action === 'closed') && this.#resetActiveOption();\n\n this.isOpen.set(false);\n this.closed.emit(action === 'active');\n\n if (this.isSubmenu()) {\n const parentInput = this.parentMenu?.inputRef()?.nativeElement;\n if (parentInput) {\n queueMicrotask(() => parentInput.focus());\n }\n }\n }\n }\n\n #resetActiveOption() {\n this.activeOptionIndex.set(-1);\n\n const optionElements = this.optionsEl();\n\n for (let index = 0; index < optionElements.length; index++) {\n optionElements[index].classList.remove('active');\n optionElements[index].removeAttribute('aria-selected');\n }\n }\n\n ngOnDestroy() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n const index = ShipMenu.openMenus.indexOf(this);\n if (index > -1) {\n ShipMenu.openMenus.splice(index, 1);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, DOCUMENT, input, model, output, computed, viewChild, signal, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { generateUniqueId } from '@ship-ui/core';
|
|
4
|
+
import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';
|
|
4
5
|
|
|
5
6
|
const BASE_SPACE = 4;
|
|
6
7
|
const SCROLLABLE_STYLES = ['scroll', 'auto'];
|
|
@@ -13,6 +14,7 @@ const DEFAULT_OPTIONS = {
|
|
|
13
14
|
class ShipPopover {
|
|
14
15
|
constructor() {
|
|
15
16
|
this.#document = inject(DOCUMENT);
|
|
17
|
+
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
16
18
|
this.SUPPORTS_ANCHOR = typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');
|
|
17
19
|
this.asMultiLayer = input(false, /* @ts-ignore */
|
|
18
20
|
...(ngDevMode ? [{ debugName: "asMultiLayer" }] : /* istanbul ignore next */ []));
|
|
@@ -56,11 +58,13 @@ class ShipPopover {
|
|
|
56
58
|
}
|
|
57
59
|
this.openAbort = new AbortController();
|
|
58
60
|
this.#document.addEventListener('keydown', (e) => {
|
|
59
|
-
if (e
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
if (this.#keybindings.matches(e, 'popover.close')) {
|
|
62
|
+
if (!this.defaultOptionMerge().closeOnEsc) {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.isOpen.set(false);
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
}, {
|
|
66
70
|
signal: this.openAbort?.signal,
|
|
@@ -68,6 +72,10 @@ class ShipPopover {
|
|
|
68
72
|
if (!popoverEl.isConnected)
|
|
69
73
|
return;
|
|
70
74
|
popoverEl.showPopover();
|
|
75
|
+
const closeShortcut = this.#keybindings.getShortcut('popover.close');
|
|
76
|
+
if (closeShortcut) {
|
|
77
|
+
popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);
|
|
78
|
+
}
|
|
71
79
|
const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;
|
|
72
80
|
if (isMobileSheet) {
|
|
73
81
|
this.#originalOverflow = this.#document.body.style.overflow;
|
|
@@ -102,6 +110,7 @@ class ShipPopover {
|
|
|
102
110
|
...(ngDevMode ? [{ debugName: "openEffect" }] : /* istanbul ignore next */ []));
|
|
103
111
|
}
|
|
104
112
|
#document;
|
|
113
|
+
#keybindings;
|
|
105
114
|
#originalOverflow;
|
|
106
115
|
toggleIsOpen(event) {
|
|
107
116
|
if (!this.disableOpenByClick()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); // Clear any leftover inline styles\n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n /**\n * Position generators that mirror the CSS position-try-fallbacks.\n * Each returns { left, top } for the popover-content in fixed coordinates.\n */\n\n // bottom span-right: below trigger, left edge aligned with trigger left\n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n // top span-right: above trigger, left edge aligned with trigger left\n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n // bottom span-left: below trigger, right edge aligned with trigger right\n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n // top span-left: above trigger, right edge aligned with trigger right\n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n // right span-bottom: to the right of trigger, top edge aligned with trigger top\n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n // left span-bottom: to the left of trigger, top edge aligned with trigger top\n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n // right center: to the right of trigger, vertically centered\n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // left center: to the left of trigger, vertically centered\n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // right span-top: to the right of trigger, bottom edge aligned with trigger bottom\n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n // left span-top: to the left of trigger, bottom edge aligned with trigger bottom\n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n /** Check if a position fits entirely within the viewport */\n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n /** Clamp a position so the popover stays within the viewport */\n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n // Mirror the CSS position-try-fallbacks order\n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n // Try each position, use the first one that fits\n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n // If nothing fits perfectly, use the first position clamped to viewport\n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n #keybindings = inject(ShipA11yKeybindingsService);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'popover.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n const closeShortcut = this.#keybindings.getShortcut('popover.close');\n if (closeShortcut) {\n popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);\n }\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); // Clear any leftover inline styles\n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n /**\n * Position generators that mirror the CSS position-try-fallbacks.\n * Each returns { left, top } for the popover-content in fixed coordinates.\n */\n\n // bottom span-right: below trigger, left edge aligned with trigger left\n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n // top span-right: above trigger, left edge aligned with trigger left\n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n // bottom span-left: below trigger, right edge aligned with trigger right\n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n // top span-left: above trigger, right edge aligned with trigger right\n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n // right span-bottom: to the right of trigger, top edge aligned with trigger top\n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n // left span-bottom: to the left of trigger, top edge aligned with trigger top\n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n // right center: to the right of trigger, vertically centered\n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // left center: to the left of trigger, vertically centered\n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // right span-top: to the right of trigger, bottom edge aligned with trigger bottom\n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n // left span-top: to the left of trigger, bottom edge aligned with trigger bottom\n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n /** Check if a position fits entirely within the viewport */\n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n /** Clamp a position so the popover stays within the viewport */\n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n // Mirror the CSS position-try-fallbacks order\n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n // Try each position, use the first one that fits\n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n // If nothing fits perfectly, use the first position clamped to viewport\n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ class ShipProgressBar {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipProgressBar, isStandalone: true, selector: "sh-progress-bar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipProgressBar, isStandalone: true, selector: "sh-progress-bar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar", "aria-valuemin": "0", "aria-valuemax": "100" }, properties: { "class": "hostClasses()", "attr.aria-valuenow": "value() !== undefined ? value() : null" } }, ngImport: i0, template: `
|
|
20
20
|
<div class="progress-bar" [style.width.%]="value()"></div>
|
|
21
21
|
`, isInline: true, styles: ["sh-progress-bar{--pb-h: .5rem;--pb-b: var(--base-4);--pb-bg: var(--base-3);--pb-br: var(--shape-2);--pbt-bg: var(--base-6);--pbt-br: inherit;display:block;width:100%;height:var(--pb-h);position:relative;overflow:hidden;border-radius:var(--pb-br);background:var(--pb-bg)}sh-progress-bar .progress-bar{position:absolute;top:0;left:0;bottom:0;height:100%;transform-origin:top left;border-radius:var(--pbt-br);background:var(--pbt-bg)}sh-progress-bar.indeterminate .progress-bar{right:0;animation:indeterminate-progress-bar-stripes 2s linear infinite}sh-progress-bar.indeterminate:after{content:\"\";position:absolute;inset:0;background-color:var(--base-2);animation:indeterminate-progress-bar-stripes-background 2s linear infinite;transform-origin:top left}sh-progress-bar.primary{--pbt-bg: var(--primary-8)}sh-progress-bar.accent{--pbt-bg: var(--accent-8)}sh-progress-bar.warn{--pbt-bg: var(--warn-8)}sh-progress-bar.error{--pbt-bg: var(--error-8)}sh-progress-bar.success{--pbt-bg: var(--success-8)}sh-progress-bar.outlined{--pb-b: var(--border-10);--pb-bg: var(--base-1)}sh-progress-bar.outlined:after{background-color:inherit}sh-progress-bar.flat{--pbt-bg: var(--base-8)}sh-progress-bar.flat:after{background-color:inherit}sh-progress-bar.flat.primary{--pbt-bg: var(--primary-8)}sh-progress-bar.flat.accent{--pbt-bg: var(--accent-8)}sh-progress-bar.flat.warn{--pbt-bg: var(--warn-8)}sh-progress-bar.flat.error{--pbt-bg: var(--error-8)}sh-progress-bar.flat.success{--pbt-bg: var(--success-8)}sh-progress-bar.raised{--pbt-bg: var(--base-g3)}sh-progress-bar.raised.primary{--pbt-bg: var(--primary-g3)}sh-progress-bar.raised.accent{--pbt-bg: var(--accent-g3)}sh-progress-bar.raised.warn{--pbt-bg: var(--warn-g3)}sh-progress-bar.raised.error{--pbt-bg: var(--error-g3)}sh-progress-bar.raised.success{--pbt-bg: var(--success-g3)}@keyframes indeterminate-progress-bar-stripes-background{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(37.651913%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(84.386165%)}to{transform:translate(160.277782%)}}@keyframes indeterminate-progress-bar-stripes{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(83.67142%)}to{transform:translate(200.611057%)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
22
22
|
}
|
|
@@ -26,6 +26,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
26
26
|
<div class="progress-bar" [style.width.%]="value()"></div>
|
|
27
27
|
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
28
28
|
'[class]': 'hostClasses()',
|
|
29
|
+
'role': 'progressbar',
|
|
30
|
+
'aria-valuemin': '0',
|
|
31
|
+
'aria-valuemax': '100',
|
|
32
|
+
'[attr.aria-valuenow]': 'value() !== undefined ? value() : null',
|
|
29
33
|
}, styles: ["sh-progress-bar{--pb-h: .5rem;--pb-b: var(--base-4);--pb-bg: var(--base-3);--pb-br: var(--shape-2);--pbt-bg: var(--base-6);--pbt-br: inherit;display:block;width:100%;height:var(--pb-h);position:relative;overflow:hidden;border-radius:var(--pb-br);background:var(--pb-bg)}sh-progress-bar .progress-bar{position:absolute;top:0;left:0;bottom:0;height:100%;transform-origin:top left;border-radius:var(--pbt-br);background:var(--pbt-bg)}sh-progress-bar.indeterminate .progress-bar{right:0;animation:indeterminate-progress-bar-stripes 2s linear infinite}sh-progress-bar.indeterminate:after{content:\"\";position:absolute;inset:0;background-color:var(--base-2);animation:indeterminate-progress-bar-stripes-background 2s linear infinite;transform-origin:top left}sh-progress-bar.primary{--pbt-bg: var(--primary-8)}sh-progress-bar.accent{--pbt-bg: var(--accent-8)}sh-progress-bar.warn{--pbt-bg: var(--warn-8)}sh-progress-bar.error{--pbt-bg: var(--error-8)}sh-progress-bar.success{--pbt-bg: var(--success-8)}sh-progress-bar.outlined{--pb-b: var(--border-10);--pb-bg: var(--base-1)}sh-progress-bar.outlined:after{background-color:inherit}sh-progress-bar.flat{--pbt-bg: var(--base-8)}sh-progress-bar.flat:after{background-color:inherit}sh-progress-bar.flat.primary{--pbt-bg: var(--primary-8)}sh-progress-bar.flat.accent{--pbt-bg: var(--accent-8)}sh-progress-bar.flat.warn{--pbt-bg: var(--warn-8)}sh-progress-bar.flat.error{--pbt-bg: var(--error-8)}sh-progress-bar.flat.success{--pbt-bg: var(--success-8)}sh-progress-bar.raised{--pbt-bg: var(--base-g3)}sh-progress-bar.raised.primary{--pbt-bg: var(--primary-g3)}sh-progress-bar.raised.accent{--pbt-bg: var(--accent-g3)}sh-progress-bar.raised.warn{--pbt-bg: var(--warn-g3)}sh-progress-bar.raised.error{--pbt-bg: var(--error-g3)}sh-progress-bar.raised.success{--pbt-bg: var(--success-g3)}@keyframes indeterminate-progress-bar-stripes-background{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(37.651913%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(84.386165%)}to{transform:translate(160.277782%)}}@keyframes indeterminate-progress-bar-stripes{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(83.67142%)}to{transform:translate(200.611057%)}}\n"] }]
|
|
30
34
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
|
|
31
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-progress-bar.mjs","sources":["../../../projects/ship-ui/ship-progress-bar/ship-progress-bar.ts","../../../projects/ship-ui/ship-progress-bar/ship-ui-core-ship-progress-bar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\nexport type ShipProgressBarMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'sh-progress-bar',\n styleUrl: './ship-progress-bar.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"progress-bar\" [style.width.%]=\"value()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipProgressBar {\n value = input<number | undefined>(undefined);\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n\n hostClasses = shipComponentClasses('progressBar', {\n color: this.color,\n variant: this.variant,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ship-ui-core-ship-progress-bar.mjs","sources":["../../../projects/ship-ui/ship-progress-bar/ship-progress-bar.ts","../../../projects/ship-ui/ship-progress-bar/ship-ui-core-ship-progress-bar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\nexport type ShipProgressBarMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'sh-progress-bar',\n styleUrl: './ship-progress-bar.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"progress-bar\" [style.width.%]=\"value()\"></div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': 'value() !== undefined ? value() : null',\n },\n})\nexport class ShipProgressBar {\n value = input<number | undefined>(undefined);\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n\n hostClasses = shipComponentClasses('progressBar', {\n color: this.color,\n variant: this.variant,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAuBa,eAAe,CAAA;AAjB5B,IAAA,WAAA,GAAA;QAkBE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAqB,SAAS;kFAAC;QAC5C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAmB,IAAI;kFAAC;QACrC,IAAA,CAAA,OAAO,GAAG,KAAK,CAA0B,IAAI;oFAAC;AAE9C,QAAA,IAAA,CAAA,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AACH,IAAA;8GATY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,GAAA,EAAA,eAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZhB;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k9EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAUU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,iBAEZ,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;GAET,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,eAAe,EAAE,GAAG;AACpB,wBAAA,eAAe,EAAE,KAAK;AACtB,wBAAA,sBAAsB,EAAE,wCAAwC;AACjE,qBAAA,EAAA,MAAA,EAAA,CAAA,k9EAAA,CAAA,EAAA;;;ACrBH;;AAEG;;;;"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ElementRef, viewChild, model, input, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { contentProjectionSignal, classMutationSignal, shipComponentClasses } from '@ship-ui/core';
|
|
4
|
+
import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';
|
|
4
5
|
|
|
5
6
|
class ShipRadio {
|
|
6
7
|
constructor() {
|
|
7
8
|
this._elementRef = inject(ElementRef);
|
|
9
|
+
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
8
10
|
this.internalInput = viewChild('internalInput', /* @ts-ignore */
|
|
9
11
|
...(ngDevMode ? [{ debugName: "internalInput" }] : /* istanbul ignore next */ []));
|
|
10
12
|
this.projectedInputs = contentProjectionSignal('input:not(.internal-input)', {
|
|
@@ -30,24 +32,27 @@ class ShipRadio {
|
|
|
30
32
|
readonly: this.readonly,
|
|
31
33
|
});
|
|
32
34
|
}
|
|
35
|
+
#keybindings;
|
|
33
36
|
onInternalInputChange(event) {
|
|
34
37
|
if (this.disabled())
|
|
35
38
|
return;
|
|
36
39
|
const input = event.target;
|
|
37
40
|
this.checked.set(input.checked);
|
|
38
41
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
inputEl
|
|
42
|
+
onKeyDown(event) {
|
|
43
|
+
if (this.#keybindings.matches(event, 'radio.select')) {
|
|
44
|
+
const inputEl = this.internalInput()?.nativeElement;
|
|
45
|
+
if (inputEl && getComputedStyle(inputEl).display !== 'none') {
|
|
46
|
+
inputEl.click();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this._elementRef.nativeElement.click();
|
|
50
|
+
}
|
|
51
|
+
event.preventDefault();
|
|
43
52
|
}
|
|
44
|
-
else {
|
|
45
|
-
this._elementRef.nativeElement.click();
|
|
46
|
-
}
|
|
47
|
-
event.preventDefault();
|
|
48
53
|
}
|
|
49
54
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipRadio, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipRadio, isStandalone: true, selector: "sh-radio", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, noInternalInput: { classPropertyName: "noInternalInput", publicName: "noInternalInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { listeners: { "keydown
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipRadio, isStandalone: true, selector: "sh-radio", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, noInternalInput: { classPropertyName: "noInternalInput", publicName: "noInternalInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class": "hostClasses()", "attr.disabled": "disabled() ? \"\" : null", "attr.role": "noInternalInput() ? \"radio\" : null", "attr.aria-checked": "noInternalInput() ? checked() : null", "attr.tabindex": "noInternalInput() ? (disabled() ? \"-1\" : \"0\") : null" } }, viewQueries: [{ propertyName: "internalInput", first: true, predicate: ["internalInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
51
56
|
<div class="radio sh-sheet" [class]="currentClassList()"></div>
|
|
52
57
|
|
|
53
58
|
<ng-content />
|
|
@@ -86,12 +91,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
86
91
|
'[attr.aria-checked]': 'noInternalInput() ? checked() : null',
|
|
87
92
|
'[attr.tabindex]': 'noInternalInput() ? (disabled() ? "-1" : "0") : null',
|
|
88
93
|
}, styles: [".sh-radio,sh-radio{--radiod-c: var(--base-8);--radiod-o: 0;--radio-bc: var(--base-4);display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}.sh-radio:focus-visible>.radio,.sh-radio:has(input:focus-visible)>.radio,sh-radio:focus-visible>.radio,sh-radio:has(input:focus-visible)>.radio{outline:2px solid var(--primary-8);outline-offset:2px}.sh-radio>input,sh-radio>input{appearance:none;position:absolute;inset:0;cursor:pointer}.sh-radio>input:focus,.sh-radio>input:focus-visible,sh-radio>input:focus,sh-radio>input:focus-visible{outline:none}.sh-radio:has(>input:not(.internal-input))>input.internal-input,sh-radio:has(>input:not(.internal-input))>input.internal-input{display:none}.sh-radio:has(input[disabled]),.sh-radio[disabled]:not([disabled=false]),sh-radio:has(input[disabled]),sh-radio[disabled]:not([disabled=false]){opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:initial}.sh-radio:has(input:checked),.sh-radio.active,sh-radio:has(input:checked),sh-radio.active{--radiod-o: 1}.sh-radio .radio,sh-radio .radio{display:flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;cursor:pointer;position:relative;border-radius:50%}.sh-radio .radio:after,sh-radio .radio:after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;width:.375rem;height:.375rem;background-color:var(--radiod-c);opacity:var(--radiod-o);transition:opacity 125ms linear}.sh-radio.primary,sh-radio.primary{--radiod-c: var(--primary-8)}.sh-radio.accent,sh-radio.accent{--radiod-c: var(--accent-8)}.sh-radio.warn,sh-radio.warn{--radiod-c: var(--warn-8)}.sh-radio.error,sh-radio.error{--radiod-c: var(--error-8)}.sh-radio.success,sh-radio.success{--radiod-c: var(--success-8)}.sh-radio.flat,.sh-radio.raised,sh-radio.flat,sh-radio.raised{--radiod-c: #fff}.sh-radio.raised:not(:has(input:checked)):not(.active) .radio,.sh-radio.flat:not(:has(input:checked)):not(.active) .radio,sh-radio.raised:not(:has(input:checked)):not(.active) .radio,sh-radio.flat:not(:has(input:checked)):not(.active) .radio{background:transparent;border:var(--border-10);border-color:var(--radio-bc)}\n"] }]
|
|
89
|
-
}], propDecorators: { internalInput: [{ type: i0.ViewChild, args: ['internalInput', { isSignal: true }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], noInternalInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "noInternalInput", required: false }] }],
|
|
90
|
-
type: HostListener,
|
|
91
|
-
args: ['keydown.enter', ['$event']]
|
|
92
|
-
}, {
|
|
94
|
+
}], propDecorators: { internalInput: [{ type: i0.ViewChild, args: ['internalInput', { isSignal: true }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], noInternalInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "noInternalInput", required: false }] }], onKeyDown: [{
|
|
93
95
|
type: HostListener,
|
|
94
|
-
args: ['keydown
|
|
96
|
+
args: ['keydown', ['$event']]
|
|
95
97
|
}] } });
|
|
96
98
|
|
|
97
99
|
/**
|