@angular/cdk-experimental 20.0.0-next.0 → 20.0.0-next.10
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/column-resize/index.d.ts +276 -289
- package/combobox/index.d.ts +15 -39
- package/deferred-content/index.d.ts +37 -0
- package/fesm2022/cdk-experimental.mjs +1 -1
- package/fesm2022/cdk-experimental.mjs.map +1 -1
- package/fesm2022/column-resize.mjs +139 -70
- package/fesm2022/column-resize.mjs.map +1 -1
- package/fesm2022/combobox.mjs +19 -26
- package/fesm2022/combobox.mjs.map +1 -1
- package/fesm2022/deferred-content.mjs +60 -0
- package/fesm2022/deferred-content.mjs.map +1 -0
- package/fesm2022/list-focus-Di7m_z_6.mjs +382 -0
- package/fesm2022/list-focus-Di7m_z_6.mjs.map +1 -0
- package/fesm2022/listbox.mjs +42 -21
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/option-f_gNslw8.mjs +367 -0
- package/fesm2022/option-f_gNslw8.mjs.map +1 -0
- package/fesm2022/polyfill-CXksG4af.mjs +14 -0
- package/fesm2022/polyfill-CXksG4af.mjs.map +1 -0
- package/fesm2022/popover-edit.mjs +92 -81
- package/fesm2022/popover-edit.mjs.map +1 -1
- package/fesm2022/scrolling.mjs +7 -11
- package/fesm2022/scrolling.mjs.map +1 -1
- package/fesm2022/selection.mjs +19 -27
- package/fesm2022/selection.mjs.map +1 -1
- package/fesm2022/table-scroll-container.mjs +8 -13
- package/fesm2022/table-scroll-container.mjs.map +1 -1
- package/fesm2022/tabs-BunANY1M.mjs +176 -0
- package/fesm2022/tabs-BunANY1M.mjs.map +1 -0
- package/fesm2022/tabs.mjs +225 -0
- package/fesm2022/tabs.mjs.map +1 -0
- package/fesm2022/ui-patterns.mjs +12 -603
- package/fesm2022/ui-patterns.mjs.map +1 -1
- package/index.d.ts +2 -2
- package/list-navigation.d-DfOSxsSp.d.ts +247 -0
- package/listbox/index.d.ts +46 -39
- package/listbox.d-QWPLmxRe.d.ts +193 -0
- package/package.json +13 -2
- package/popover-edit/index.d.ts +269 -315
- package/scrolling/index.d.ts +34 -47
- package/selection/index.d.ts +119 -161
- package/table-scroll-container/index.d.ts +6 -14
- package/tabs/index.d.ts +128 -0
- package/tabs.d-BAo141mw.d.ts +110 -0
- package/ui-patterns/index.d.ts +4 -391
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-f_gNslw8.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/ui-patterns/behaviors/list-typeahead/list-typeahead.ts","../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/ui-patterns/listbox/listbox.ts","../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/ui-patterns/listbox/option.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {computed, signal} from '@angular/core';\nimport {SignalLike} from '../signal-like/signal-like';\nimport {ListFocus, ListFocusInputs, ListFocusItem} from '../list-focus/list-focus';\n\n/**\n * Represents an item in a collection, such as a listbox option, than can be navigated to by\n * typeahead.\n */\nexport interface ListTypeaheadItem extends ListFocusItem {\n /** The text used by the typeahead search. */\n searchTerm: SignalLike<string>;\n}\n\n/**\n * Represents the required inputs for a collection that contains items that can be navigated to by\n * typeahead.\n */\nexport interface ListTypeaheadInputs<T extends ListTypeaheadItem> extends ListFocusInputs<T> {\n /** The amount of time before the typeahead search is reset. */\n typeaheadDelay: SignalLike<number>;\n}\n\n/** Controls typeahead for a list of items. */\nexport class ListTypeahead<T extends ListTypeaheadItem> {\n /** A reference to the timeout for resetting the typeahead search. */\n timeout?: ReturnType<typeof setTimeout> | undefined;\n\n /** The focus controller of the parent list. */\n focusManager: ListFocus<T>;\n\n /** Whether the user is actively typing a typeahead search query. */\n isTyping = computed(() => this._query().length > 0);\n\n /** Keeps track of the characters that typeahead search is being called with. */\n private _query = signal('');\n\n /** The index where that the typeahead search was initiated from. */\n private _startIndex = signal<number | undefined>(undefined);\n\n constructor(readonly inputs: ListTypeaheadInputs<T> & {focusManager: ListFocus<T>}) {\n this.focusManager = inputs.focusManager;\n }\n\n /** Performs a typeahead search, appending the given character to the search string. */\n search(char: string): boolean {\n if (char.length !== 1) {\n return false;\n }\n\n if (!this.isTyping() && char === ' ') {\n return false;\n }\n\n if (this._startIndex() === undefined) {\n this._startIndex.set(this.focusManager.inputs.activeIndex());\n }\n\n clearTimeout(this.timeout);\n this._query.update(q => q + char.toLowerCase());\n const item = this._getItem();\n\n if (item) {\n this.focusManager.focus(item);\n }\n\n this.timeout = setTimeout(() => {\n this._query.set('');\n this._startIndex.set(undefined);\n }, this.inputs.typeaheadDelay() * 1000);\n\n return true;\n }\n\n /**\n * Returns the first item whose search term matches the\n * current query starting from the the current anchor index.\n */\n private _getItem() {\n let items = this.focusManager.inputs.items();\n const after = items.slice(this._startIndex()! + 1);\n const before = items.slice(0, this._startIndex()!);\n items = after.concat(before);\n items.push(this.inputs.items()[this._startIndex()!]);\n\n const focusableItems = [];\n for (const item of items) {\n if (this.focusManager.isFocusable(item)) {\n focusableItems.push(item);\n }\n }\n\n return focusableItems.find(i => i.searchTerm().toLowerCase().startsWith(this._query()));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ModifierKey as Modifier} from '../behaviors/event-manager/event-manager';\nimport {KeyboardEventManager} from '../behaviors/event-manager/keyboard-event-manager';\nimport {PointerEventManager} from '../behaviors/event-manager/pointer-event-manager';\nimport {OptionPattern} from './option';\nimport {ListSelection, ListSelectionInputs} from '../behaviors/list-selection/list-selection';\nimport {ListTypeahead, ListTypeaheadInputs} from '../behaviors/list-typeahead/list-typeahead';\nimport {ListNavigation, ListNavigationInputs} from '../behaviors/list-navigation/list-navigation';\nimport {ListFocus, ListFocusInputs} from '../behaviors/list-focus/list-focus';\nimport {computed, signal} from '@angular/core';\nimport {SignalLike} from '../behaviors/signal-like/signal-like';\n\n/** The selection operations that the listbox can perform. */\ninterface SelectOptions {\n toggle?: boolean;\n selectOne?: boolean;\n selectRange?: boolean;\n anchor?: boolean;\n}\n\n/** Represents the required inputs for a listbox. */\nexport type ListboxInputs<V> = ListNavigationInputs<OptionPattern<V>> &\n ListSelectionInputs<OptionPattern<V>, V> &\n ListTypeaheadInputs<OptionPattern<V>> &\n ListFocusInputs<OptionPattern<V>> & {\n readonly: SignalLike<boolean>;\n };\n\n/** Controls the state of a listbox. */\nexport class ListboxPattern<V> {\n /** Controls navigation for the listbox. */\n navigation: ListNavigation<OptionPattern<V>>;\n\n /** Controls selection for the listbox. */\n selection: ListSelection<OptionPattern<V>, V>;\n\n /** Controls typeahead for the listbox. */\n typeahead: ListTypeahead<OptionPattern<V>>;\n\n /** Controls focus for the listbox. */\n focusManager: ListFocus<OptionPattern<V>>;\n\n /** Whether the list is vertically or horizontally oriented. */\n orientation: SignalLike<'vertical' | 'horizontal'>;\n\n /** Whether the listbox is disabled. */\n disabled = computed(() => this.focusManager.isListDisabled());\n\n /** Whether the listbox is readonly. */\n readonly: SignalLike<boolean>;\n\n /** The tabindex of the listbox. */\n tabindex = computed(() => this.focusManager.getListTabindex());\n\n /** The id of the current active item. */\n activedescendant = computed(() => this.focusManager.getActiveDescendant());\n\n /** Whether multiple items in the list can be selected at once. */\n multi: SignalLike<boolean>;\n\n /** The number of items in the listbox. */\n setsize = computed(() => this.navigation.inputs.items().length);\n\n /** Whether the listbox selection follows focus. */\n followFocus = computed(() => this.inputs.selectionMode() === 'follow');\n\n /** Whether the listbox should wrap. Used to disable wrapping while range selecting. */\n wrap = signal(true);\n\n /** The key used to navigate to the previous item in the list. */\n prevKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowUp';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n });\n\n /** The key used to navigate to the next item in the list. */\n nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** Represents the space key. Does nothing when the user is actively using typeahead. */\n dynamicSpaceKey = computed(() => (this.typeahead.isTyping() ? '' : ' '));\n\n /** The regexp used to decide if a key should trigger typeahead. */\n typeaheadRegexp = /^.$/; // TODO: Ignore spaces?\n\n /**\n * The uncommitted index for selecting a range of options.\n *\n * NOTE: This is subtly distinct from the \"rangeStartIndex\" in the ListSelection behavior.\n * The anchorIndex does not necessarily represent the start of a range, but represents the most\n * recent index where the user showed intent to begin a range selection. Usually, this is wherever\n * the user most recently pressed the \"Shift\" key, but if the user presses shift + space to select\n * from the anchor, the user is not intending to start a new range from this index.\n *\n * In other words, \"rangeStartIndex\" is only set when a user commits to starting a range selection\n * while \"anchorIndex\" is set whenever a user indicates they may be starting a range selection.\n */\n anchorIndex = signal(0);\n\n /** The keydown event manager for the listbox. */\n keydown = computed(() => {\n const manager = new KeyboardEventManager();\n\n if (this.readonly()) {\n return manager\n .on(this.prevKey, () => this.prev())\n .on(this.nextKey, () => this.next())\n .on('Home', () => this.first())\n .on('End', () => this.last())\n .on(this.typeaheadRegexp, e => this.search(e.key));\n }\n\n if (!this.followFocus()) {\n manager\n .on(this.prevKey, () => this.prev())\n .on(this.nextKey, () => this.next())\n .on('Home', () => this.first())\n .on('End', () => this.last())\n .on(this.typeaheadRegexp, e => this.search(e.key));\n }\n\n if (this.followFocus()) {\n manager\n .on(this.prevKey, () => this.prev({selectOne: true}))\n .on(this.nextKey, () => this.next({selectOne: true}))\n .on('Home', () => this.first({selectOne: true}))\n .on('End', () => this.last({selectOne: true}))\n .on(this.typeaheadRegexp, e => this.search(e.key, {selectOne: true}));\n }\n\n if (this.inputs.multi()) {\n manager\n .on(Modifier.Any, 'Shift', () => this.anchorIndex.set(this.inputs.activeIndex()))\n .on(Modifier.Shift, this.prevKey, () => this.prev({selectRange: true}))\n .on(Modifier.Shift, this.nextKey, () => this.next({selectRange: true}))\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'Home', () =>\n this.first({selectRange: true, anchor: false}),\n )\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'End', () =>\n this.last({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, 'Enter', () =>\n this._updateSelection({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, this.dynamicSpaceKey, () =>\n this._updateSelection({selectRange: true, anchor: false}),\n );\n }\n\n if (!this.followFocus() && this.inputs.multi()) {\n manager\n .on(this.dynamicSpaceKey, () => this.selection.toggle())\n .on('Enter', () => this.selection.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => this.selection.toggleAll());\n }\n\n if (!this.followFocus() && !this.inputs.multi()) {\n manager.on(this.dynamicSpaceKey, () => this.selection.toggleOne());\n manager.on('Enter', () => this.selection.toggleOne());\n }\n\n if (this.inputs.multi() && this.followFocus()) {\n manager\n .on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => this.prev())\n .on([Modifier.Ctrl, Modifier.Meta], this.nextKey, () => this.next())\n .on([Modifier.Ctrl, Modifier.Meta], ' ', () => this.selection.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Enter', () => this.selection.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Home', () => this.first())\n .on([Modifier.Ctrl, Modifier.Meta], 'End', () => this.last())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => {\n this.selection.toggleAll();\n this.selection.select(); // Ensure the currect option remains selected.\n });\n }\n\n return manager;\n });\n\n /** The pointerdown event manager for the listbox. */\n pointerdown = computed(() => {\n const manager = new PointerEventManager();\n\n if (this.readonly()) {\n return manager.on(e => this.goto(e));\n }\n\n if (this.multi()) {\n manager.on(Modifier.Shift, e => this.goto(e, {selectRange: true}));\n }\n\n if (!this.multi() && this.followFocus()) {\n return manager.on(e => this.goto(e, {selectOne: true}));\n }\n\n if (!this.multi() && !this.followFocus()) {\n return manager.on(e => this.goto(e, {toggle: true}));\n }\n\n if (this.multi() && this.followFocus()) {\n return manager\n .on(e => this.goto(e, {selectOne: true}))\n .on(Modifier.Ctrl, e => this.goto(e, {toggle: true}));\n }\n\n if (this.multi() && !this.followFocus()) {\n return manager.on(e => this.goto(e, {toggle: true}));\n }\n\n return manager;\n });\n\n constructor(readonly inputs: ListboxInputs<V>) {\n this.readonly = inputs.readonly;\n this.orientation = inputs.orientation;\n this.multi = inputs.multi;\n\n this.focusManager = new ListFocus(inputs);\n this.selection = new ListSelection({...inputs, focusManager: this.focusManager});\n this.typeahead = new ListTypeahead({...inputs, focusManager: this.focusManager});\n this.navigation = new ListNavigation({\n ...inputs,\n focusManager: this.focusManager,\n wrap: computed(() => this.wrap() && this.inputs.wrap()),\n });\n }\n\n /** Handles keydown events for the listbox. */\n onKeydown(event: KeyboardEvent) {\n if (!this.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n onPointerdown(event: PointerEvent) {\n if (!this.disabled()) {\n this.pointerdown().handle(event);\n }\n }\n\n /** Navigates to the first option in the listbox. */\n first(opts?: SelectOptions) {\n this._navigate(opts, () => this.navigation.first());\n }\n\n /** Navigates to the last option in the listbox. */\n last(opts?: SelectOptions) {\n this._navigate(opts, () => this.navigation.last());\n }\n\n /** Navigates to the next option in the listbox. */\n next(opts?: SelectOptions) {\n this._navigate(opts, () => this.navigation.next());\n }\n\n /** Navigates to the previous option in the listbox. */\n prev(opts?: SelectOptions) {\n this._navigate(opts, () => this.navigation.prev());\n }\n\n /** Navigates to the given item in the listbox. */\n goto(event: PointerEvent, opts?: SelectOptions) {\n const item = this._getItem(event);\n this._navigate(opts, () => this.navigation.goto(item));\n }\n\n /** Handles typeahead search navigation for the listbox. */\n search(char: string, opts?: SelectOptions) {\n this._navigate(opts, () => this.typeahead.search(char));\n }\n\n /**\n * Sets the listbox to it's default initial state.\n *\n * Sets the active index of the listbox to the first focusable selected\n * item if one exists. Otherwise, sets focus to the first focusable item.\n *\n * This method should be called once the listbox and it's options are properly initialized,\n * meaning the ListboxPattern and OptionPatterns should have references to each other before this\n * is called.\n */\n setDefaultState() {\n let firstItem: OptionPattern<V> | null = null;\n\n for (const item of this.inputs.items()) {\n if (this.focusManager.isFocusable(item)) {\n if (!firstItem) {\n firstItem = item;\n }\n if (item.selected()) {\n this.inputs.activeIndex.set(item.index());\n return;\n }\n }\n }\n\n if (firstItem) {\n this.inputs.activeIndex.set(firstItem.index());\n }\n }\n\n /**\n * Safely performs a navigation operation.\n *\n * Handles conditionally disabling wrapping for when a navigation\n * operation is occurring while the user is selecting a range of options.\n *\n * Handles boilerplate calling of focus & selection operations. Also ensures these\n * additional operations are only called if the navigation operation moved focus to a new option.\n */\n private _navigate(opts: SelectOptions = {}, operation: () => boolean) {\n if (opts?.selectRange) {\n this.wrap.set(false);\n this.selection.rangeStartIndex.set(this.anchorIndex());\n }\n\n const moved = operation();\n\n if (moved) {\n this._updateSelection(opts);\n }\n\n this.wrap.set(true);\n }\n\n /** Handles updating selection for the listbox. */\n private _updateSelection(opts: SelectOptions = {anchor: true}) {\n if (opts.toggle) {\n this.selection.toggle();\n }\n if (opts.selectOne) {\n this.selection.selectOne();\n }\n if (opts.selectRange) {\n this.selection.selectRange();\n }\n if (!opts.anchor) {\n this.anchorIndex.set(this.selection.rangeStartIndex());\n }\n }\n\n private _getItem(e: PointerEvent) {\n if (!(e.target instanceof HTMLElement)) {\n return;\n }\n\n const element = e.target.closest('[role=\"option\"]');\n return this.inputs.items().find(i => i.element() === element);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {computed} from '@angular/core';\nimport {ListSelection, ListSelectionItem} from '../behaviors/list-selection/list-selection';\nimport {ListTypeaheadItem} from '../behaviors/list-typeahead/list-typeahead';\nimport {ListNavigation, ListNavigationItem} from '../behaviors/list-navigation/list-navigation';\nimport {ListFocus, ListFocusItem} from '../behaviors/list-focus/list-focus';\nimport {SignalLike} from '../behaviors/signal-like/signal-like';\n\n/**\n * Represents the properties exposed by a listbox that need to be accessed by an option.\n * This exists to avoid circular dependency errors between the listbox and option.\n */\ninterface ListboxPattern<V> {\n focusManager: ListFocus<OptionPattern<V>>;\n selection: ListSelection<OptionPattern<V>, V>;\n navigation: ListNavigation<OptionPattern<V>>;\n}\n\n/** Represents the required inputs for an option in a listbox. */\nexport interface OptionInputs<V>\n extends ListNavigationItem,\n ListSelectionItem<V>,\n ListTypeaheadItem,\n ListFocusItem {\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n}\n\n/** Represents an option in a listbox. */\nexport class OptionPattern<V> {\n /** A unique identifier for the option. */\n id: SignalLike<string>;\n\n /** The value of the option. */\n value: SignalLike<V>;\n\n /** The position of the option in the list. */\n index = computed(\n () =>\n this.listbox()\n ?.navigation.inputs.items()\n .findIndex(i => i.id() === this.id()) ?? -1,\n );\n\n /** Whether the option is active. */\n active = computed(() => this.listbox()?.focusManager.activeItem() === this);\n\n /** Whether the option is selected. */\n selected = computed(() => this.listbox()?.selection.inputs.value().includes(this.value()));\n\n /** Whether the option is disabled. */\n disabled: SignalLike<boolean>;\n\n /** The text used by the typeahead search. */\n searchTerm: SignalLike<string>;\n\n /** A reference to the parent listbox. */\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n\n /** The tabindex of the option. */\n tabindex = computed(() => this.listbox()?.focusManager.getItemTabindex(this));\n\n /** The html element that should receive focus. */\n element: SignalLike<HTMLElement>;\n\n constructor(args: OptionInputs<V>) {\n this.id = args.id;\n this.value = args.value;\n this.listbox = args.listbox;\n this.element = args.element;\n this.disabled = args.disabled;\n this.searchTerm = args.searchTerm;\n }\n}\n"],"names":["Modifier"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** closest implementation that is able to start from non-Element Nodes. */
|
|
2
|
+
function closest(element, selector) {
|
|
3
|
+
if (!(element instanceof Node)) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
let curr = element;
|
|
7
|
+
while (curr != null && !(curr instanceof Element)) {
|
|
8
|
+
curr = curr.parentNode;
|
|
9
|
+
}
|
|
10
|
+
return curr?.closest(selector) ?? null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { closest as c };
|
|
14
|
+
//# sourceMappingURL=polyfill-CXksG4af.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill-CXksG4af.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/popover-edit/polyfill.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/** closest implementation that is able to start from non-Element Nodes. */\nexport function closest(\n element: EventTarget | Element | null | undefined,\n selector: string,\n): Element | null {\n if (!(element instanceof Node)) {\n return null;\n }\n\n let curr: Node | null = element;\n while (curr != null && !(curr instanceof Element)) {\n curr = curr.parentNode;\n }\n\n return curr?.closest(selector) ?? null;\n}\n"],"names":[],"mappings":"AAQA;AACgB,SAAA,OAAO,CACrB,OAAiD,EACjD,QAAgB,EAAA;AAEhB,IAAA,IAAI,EAAE,OAAO,YAAY,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,IAAI;;IAGb,IAAI,IAAI,GAAgB,OAAO;IAC/B,OAAO,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,YAAY,OAAO,CAAC,EAAE;AACjD,QAAA,IAAI,GAAG,IAAI,CAAC,UAAU;;IAGxB,OAAO,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI;AACxC;;;;"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
+
import { c as closest } from './polyfill-CXksG4af.mjs';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, NgZone, Injectable, Injector, afterNextRender, ElementRef, EventEmitter, Directive, Input,
|
|
3
|
+
import { inject, NgZone, Injectable, Injector, afterNextRender, ElementRef, EventEmitter, Directive, Input, DOCUMENT, Renderer2, ViewContainerRef, TemplateRef, NgModule } from '@angular/core';
|
|
3
4
|
import { Subject, pipe, combineLatest, Observable, merge } from 'rxjs';
|
|
4
5
|
import { distinctUntilChanged, startWith, shareReplay, filter, map, auditTime, audit, debounceTime, skip, takeUntil, mapTo, throttleTime, share, withLatestFrom } from 'rxjs/operators';
|
|
5
6
|
import { ControlContainer } from '@angular/forms';
|
|
6
7
|
import { Directionality } from '@angular/cdk/bidi';
|
|
7
8
|
import { RIGHT_ARROW, LEFT_ARROW, DOWN_ARROW, UP_ARROW, hasModifierKey } from '@angular/cdk/keycodes';
|
|
8
|
-
import {
|
|
9
|
+
import { createOverlayRef, createRepositionScrollStrategy, createFlexibleConnectedPositionStrategy, OverlayModule } from '@angular/cdk/overlay';
|
|
9
10
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
10
|
-
import { FocusTrapFactory,
|
|
11
|
+
import { FocusTrapFactory, InteractivityChecker, FocusTrap } from '@angular/cdk/a11y';
|
|
11
12
|
import { ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';
|
|
12
|
-
import { DOCUMENT } from '@angular/common';
|
|
13
|
-
import { _bindEventWithOptions } from '@angular/cdk/platform';
|
|
14
13
|
|
|
15
14
|
/** Selector for finding table cells. */
|
|
16
15
|
const CELL_SELECTOR = '.cdk-cell, .mat-cell, td';
|
|
@@ -24,18 +23,8 @@ const TABLE_SELECTOR = 'table, cdk-table, mat-table';
|
|
|
24
23
|
const EDIT_PANE_CLASS = 'cdk-edit-pane';
|
|
25
24
|
/** Selector for finding the edit lens pane. */
|
|
26
25
|
const EDIT_PANE_SELECTOR = `.${EDIT_PANE_CLASS}, .mat-edit-pane`;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function closest(element, selector) {
|
|
30
|
-
if (!(element instanceof Node)) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
let curr = element;
|
|
34
|
-
while (curr != null && !(curr instanceof Element)) {
|
|
35
|
-
curr = curr.parentNode;
|
|
36
|
-
}
|
|
37
|
-
return curr?.closest(selector) ?? null;
|
|
38
|
-
}
|
|
26
|
+
/** Selector for table rows that should be skipped when moving focus. */
|
|
27
|
+
const SKIP_ROW_FOCUS_SELECTOR = '.cdk-popover-edit-skip-focus, .mat-popover-edit-skip-focus';
|
|
39
28
|
|
|
40
29
|
/** The delay applied to mouse events before hiding or showing hover content. */
|
|
41
30
|
const MOUSE_EVENT_DELAY_MS = 40;
|
|
@@ -211,10 +200,10 @@ class EditEventDispatcher {
|
|
|
211
200
|
_mapAllRowsToSingleRow(mapper) {
|
|
212
201
|
return this.allRows.pipe(map(mapper), this._startWithNullDistinct);
|
|
213
202
|
}
|
|
214
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
215
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
203
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditEventDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditEventDispatcher });
|
|
216
205
|
}
|
|
217
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditEventDispatcher, decorators: [{
|
|
218
207
|
type: Injectable
|
|
219
208
|
}], ctorParameters: () => [] });
|
|
220
209
|
function computeHoverContentState([firstRow, lastRow, activeRow, hoverRow,]) {
|
|
@@ -313,10 +302,10 @@ class EditRef {
|
|
|
313
302
|
reset(value) {
|
|
314
303
|
this._form.reset(value || this._revertFormValue);
|
|
315
304
|
}
|
|
316
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
317
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
305
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
306
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditRef });
|
|
318
307
|
}
|
|
319
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditRef, decorators: [{
|
|
320
309
|
type: Injectable
|
|
321
310
|
}], ctorParameters: () => [] });
|
|
322
311
|
|
|
@@ -349,7 +338,10 @@ class FocusDispatcher {
|
|
|
349
338
|
const rows = Array.from(closest(currentRow, TABLE_SELECTOR).querySelectorAll(ROW_SELECTOR));
|
|
350
339
|
const currentRowIndex = rows.indexOf(currentRow);
|
|
351
340
|
const currentIndexWithinRow = Array.from(currentRow.querySelectorAll(EDITABLE_CELL_SELECTOR)).indexOf(currentCell);
|
|
352
|
-
|
|
341
|
+
let newRowIndex = currentRowIndex + offset;
|
|
342
|
+
while (rows[newRowIndex]?.matches(SKIP_ROW_FOCUS_SELECTOR)) {
|
|
343
|
+
newRowIndex = newRowIndex + (offset > 0 ? 1 : -1);
|
|
344
|
+
}
|
|
353
345
|
if (rows[newRowIndex]) {
|
|
354
346
|
const rowToFocus = Array.from(rows[newRowIndex].querySelectorAll(EDITABLE_CELL_SELECTOR));
|
|
355
347
|
if (rowToFocus[currentIndexWithinRow]) {
|
|
@@ -382,10 +374,10 @@ class FocusDispatcher {
|
|
|
382
374
|
}
|
|
383
375
|
event.preventDefault();
|
|
384
376
|
}
|
|
385
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
386
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
377
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
378
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusDispatcher, providedIn: 'root' });
|
|
387
379
|
}
|
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusDispatcher, decorators: [{
|
|
389
381
|
type: Injectable,
|
|
390
382
|
args: [{ providedIn: 'root' }]
|
|
391
383
|
}], ctorParameters: () => [] });
|
|
@@ -485,8 +477,6 @@ class CdkEditControl {
|
|
|
485
477
|
case 'close':
|
|
486
478
|
this.editRef.close();
|
|
487
479
|
break;
|
|
488
|
-
default:
|
|
489
|
-
break;
|
|
490
480
|
}
|
|
491
481
|
}
|
|
492
482
|
_handleKeydown(event) {
|
|
@@ -505,10 +495,10 @@ class CdkEditControl {
|
|
|
505
495
|
_triggerFormSubmit() {
|
|
506
496
|
this.elementRef.nativeElement.dispatchEvent(new Event('submit'));
|
|
507
497
|
}
|
|
508
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
509
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
498
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
499
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkEditControl, isStandalone: true, selector: "form[cdkEditControl]", inputs: { clickOutBehavior: ["cdkEditControlClickOutBehavior", "clickOutBehavior"], preservedFormValue: ["cdkEditControlPreservedFormValue", "preservedFormValue"], ignoreSubmitUnlessValid: ["cdkEditControlIgnoreSubmitUnlessValid", "ignoreSubmitUnlessValid"] }, outputs: { preservedFormValueChange: "cdkEditControlPreservedFormValueChange" }, host: { listeners: { "ngSubmit": "handleFormSubmit()", "document:click": "handlePossibleClickOut($event)", "keydown": "_handleKeydown($event)" } }, providers: [EditRef], ngImport: i0 });
|
|
510
500
|
}
|
|
511
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
501
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditControl, decorators: [{
|
|
512
502
|
type: Directive,
|
|
513
503
|
args: [{
|
|
514
504
|
selector: 'form[cdkEditControl]',
|
|
@@ -534,10 +524,10 @@ class CdkEditRevert {
|
|
|
534
524
|
revertEdit() {
|
|
535
525
|
this.editRef.reset();
|
|
536
526
|
}
|
|
537
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
538
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
527
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditRevert, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
528
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkEditRevert, isStandalone: true, selector: "button[cdkEditRevert]", inputs: { type: "type" }, host: { attributes: { "type": "button" }, listeners: { "click": "revertEdit()" } }, ngImport: i0 });
|
|
539
529
|
}
|
|
540
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
530
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditRevert, decorators: [{
|
|
541
531
|
type: Directive,
|
|
542
532
|
args: [{
|
|
543
533
|
selector: 'button[cdkEditRevert]',
|
|
@@ -568,10 +558,10 @@ class CdkEditClose {
|
|
|
568
558
|
// the same event sequence if focus was moved quickly.
|
|
569
559
|
this.editRef.close();
|
|
570
560
|
}
|
|
571
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
572
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
561
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditClose, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
562
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkEditClose, isStandalone: true, selector: "[cdkEditClose]", host: { listeners: { "click": "closeEdit()", "keydown.enter": "closeEdit()", "keydown.space": "closeEdit()" } }, ngImport: i0 });
|
|
573
563
|
}
|
|
574
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
564
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditClose, decorators: [{
|
|
575
565
|
type: Directive,
|
|
576
566
|
args: [{
|
|
577
567
|
selector: '[cdkEditClose]',
|
|
@@ -595,13 +585,12 @@ class EditServices {
|
|
|
595
585
|
focusDispatcher = inject(FocusDispatcher);
|
|
596
586
|
focusTrapFactory = inject(FocusTrapFactory);
|
|
597
587
|
ngZone = inject(NgZone);
|
|
598
|
-
overlay = inject(Overlay);
|
|
599
588
|
scrollDispatcher = inject(ScrollDispatcher);
|
|
600
589
|
viewportRuler = inject(ViewportRuler);
|
|
601
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
602
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
590
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditServices, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
591
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditServices });
|
|
603
592
|
}
|
|
604
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
593
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: EditServices, decorators: [{
|
|
605
594
|
type: Injectable
|
|
606
595
|
}] });
|
|
607
596
|
|
|
@@ -648,16 +637,31 @@ class FocusEscapeNotifierFactory {
|
|
|
648
637
|
create(element) {
|
|
649
638
|
return new FocusEscapeNotifier(element, this._checker, this._ngZone, this._document);
|
|
650
639
|
}
|
|
651
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
652
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
640
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusEscapeNotifierFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
641
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusEscapeNotifierFactory, providedIn: 'root' });
|
|
653
642
|
}
|
|
654
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
643
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: FocusEscapeNotifierFactory, decorators: [{
|
|
655
644
|
type: Injectable,
|
|
656
645
|
args: [{ providedIn: 'root' }]
|
|
657
646
|
}] });
|
|
658
647
|
|
|
659
648
|
/** Used for rate-limiting mousemove events. */
|
|
660
649
|
const MOUSE_MOVE_THROTTLE_TIME_MS = 10;
|
|
650
|
+
function hasRowElement(nl) {
|
|
651
|
+
for (let i = 0; i < nl.length; i++) {
|
|
652
|
+
const el = nl[i];
|
|
653
|
+
if (!(el instanceof HTMLElement)) {
|
|
654
|
+
continue;
|
|
655
|
+
}
|
|
656
|
+
if (el.matches(ROW_SELECTOR)) {
|
|
657
|
+
return true;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
return false;
|
|
661
|
+
}
|
|
662
|
+
function isRowMutation(mutation) {
|
|
663
|
+
return hasRowElement(mutation.addedNodes) || hasRowElement(mutation.removedNodes);
|
|
664
|
+
}
|
|
661
665
|
/**
|
|
662
666
|
* A directive that must be attached to enable editability on a table.
|
|
663
667
|
* It is responsible for setting up delegated event handlers and providing the
|
|
@@ -670,10 +674,23 @@ class CdkEditable {
|
|
|
670
674
|
ngZone = inject(NgZone);
|
|
671
675
|
_renderer = inject(Renderer2);
|
|
672
676
|
destroyed = new Subject();
|
|
673
|
-
|
|
677
|
+
_rowsRendered = new Subject();
|
|
678
|
+
_rowMutationObserver = globalThis.MutationObserver
|
|
679
|
+
? new globalThis.MutationObserver(mutations => {
|
|
680
|
+
if (mutations.some(isRowMutation)) {
|
|
681
|
+
this._rowsRendered.next();
|
|
682
|
+
}
|
|
683
|
+
})
|
|
684
|
+
: null;
|
|
674
685
|
constructor() {
|
|
675
|
-
|
|
676
|
-
|
|
686
|
+
// TODO: consider a design where instead of polling for row changes we just use
|
|
687
|
+
// afterRenderEffect + a signal of the rows.
|
|
688
|
+
afterNextRender(() => {
|
|
689
|
+
this._rowsRendered.next();
|
|
690
|
+
this._rowMutationObserver?.observe(this.elementRef.nativeElement, {
|
|
691
|
+
childList: true,
|
|
692
|
+
subtree: true,
|
|
693
|
+
});
|
|
677
694
|
});
|
|
678
695
|
}
|
|
679
696
|
ngAfterViewInit() {
|
|
@@ -682,14 +699,12 @@ class CdkEditable {
|
|
|
682
699
|
ngOnDestroy() {
|
|
683
700
|
this.destroyed.next();
|
|
684
701
|
this.destroyed.complete();
|
|
685
|
-
this.
|
|
702
|
+
this._rowMutationObserver?.disconnect();
|
|
686
703
|
}
|
|
687
704
|
_observableFromEvent(element, name, options) {
|
|
688
705
|
return new Observable(subscriber => {
|
|
689
706
|
const handler = (event) => subscriber.next(event);
|
|
690
|
-
const cleanup = options
|
|
691
|
-
? _bindEventWithOptions(this._renderer, element, name, handler, options)
|
|
692
|
-
: this._renderer.listen(element, name, handler, options);
|
|
707
|
+
const cleanup = this._renderer.listen(element, name, handler, options);
|
|
693
708
|
return () => {
|
|
694
709
|
cleanup();
|
|
695
710
|
subscriber.complete();
|
|
@@ -720,9 +735,10 @@ class CdkEditable {
|
|
|
720
735
|
// Keep track of rows within the table. This is used to know which rows with hover content
|
|
721
736
|
// are first or last in the table. They are kept focusable in case focus enters from above
|
|
722
737
|
// or below the table.
|
|
723
|
-
this.
|
|
738
|
+
this._rowsRendered
|
|
724
739
|
.pipe(
|
|
725
740
|
// Avoid some timing inconsistencies since Angular v19.
|
|
741
|
+
// TODO: see if we can remove this now that we're using MutationObserver.
|
|
726
742
|
debounceTime(0),
|
|
727
743
|
// Optimization: ignore dom changes while focus is within the table as we already
|
|
728
744
|
// ensure that rows above and below the focused/active row are tabbable.
|
|
@@ -737,10 +753,10 @@ class CdkEditable {
|
|
|
737
753
|
.subscribe(this.focusDispatcher.keyObserver);
|
|
738
754
|
});
|
|
739
755
|
}
|
|
740
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
741
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
756
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
757
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkEditable, isStandalone: true, selector: "table[editable], cdk-table[editable], mat-table[editable]", providers: [EditEventDispatcher, EditServices], ngImport: i0 });
|
|
742
758
|
}
|
|
743
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
759
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditable, decorators: [{
|
|
744
760
|
type: Directive,
|
|
745
761
|
args: [{
|
|
746
762
|
selector: 'table[editable], cdk-table[editable], mat-table[editable]',
|
|
@@ -768,6 +784,7 @@ class CdkPopoverEdit {
|
|
|
768
784
|
services = inject(EditServices);
|
|
769
785
|
elementRef = inject(ElementRef);
|
|
770
786
|
viewContainerRef = inject(ViewContainerRef);
|
|
787
|
+
_injector = inject(Injector);
|
|
771
788
|
/** The edit lens template shown over the cell on edit. */
|
|
772
789
|
template = null;
|
|
773
790
|
/**
|
|
@@ -854,11 +871,11 @@ class CdkPopoverEdit {
|
|
|
854
871
|
});
|
|
855
872
|
}
|
|
856
873
|
_createEditOverlay() {
|
|
857
|
-
this.overlayRef = this.
|
|
874
|
+
this.overlayRef = createOverlayRef(this._injector, {
|
|
858
875
|
disposeOnNavigation: true,
|
|
859
876
|
panelClass: this.panelClass(),
|
|
860
877
|
positionStrategy: this._getPositionStrategy(),
|
|
861
|
-
scrollStrategy: this.
|
|
878
|
+
scrollStrategy: createRepositionScrollStrategy(this._injector),
|
|
862
879
|
direction: this.services.directionality,
|
|
863
880
|
});
|
|
864
881
|
this.initFocusTrap();
|
|
@@ -897,9 +914,7 @@ class CdkPopoverEdit {
|
|
|
897
914
|
}
|
|
898
915
|
_getPositionStrategy() {
|
|
899
916
|
const cells = this._getOverlayCells();
|
|
900
|
-
return this.
|
|
901
|
-
.position()
|
|
902
|
-
.flexibleConnectedTo(cells[0])
|
|
917
|
+
return createFlexibleConnectedPositionStrategy(this._injector, cells[0])
|
|
903
918
|
.withGrowAfterOpen()
|
|
904
919
|
.withPush()
|
|
905
920
|
.withViewportMargin(16)
|
|
@@ -938,10 +953,10 @@ class CdkPopoverEdit {
|
|
|
938
953
|
}
|
|
939
954
|
return { width: lastCell.getBoundingClientRect().right - firstCell.getBoundingClientRect().left };
|
|
940
955
|
}
|
|
941
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
942
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
956
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEdit, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
957
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkPopoverEdit, isStandalone: true, selector: "[cdkPopoverEdit]:not([cdkPopoverEditTabOut])", inputs: { template: ["cdkPopoverEdit", "template"], context: ["cdkPopoverEditContext", "context"], colspan: ["cdkPopoverEditColspan", "colspan"], disabled: ["cdkPopoverEditDisabled", "disabled"], ariaLabel: ["cdkPopoverEditAriaLabel", "ariaLabel"] }, host: { properties: { "attr.tabindex": "disabled ? null : 0", "attr.aria-haspopup": "!disabled" }, classAttribute: "cdk-popover-edit-cell" }, ngImport: i0 });
|
|
943
958
|
}
|
|
944
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
959
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEdit, decorators: [{
|
|
945
960
|
type: Directive,
|
|
946
961
|
args: [{
|
|
947
962
|
selector: '[cdkPopoverEdit]:not([cdkPopoverEditTabOut])',
|
|
@@ -968,10 +983,10 @@ class CdkPopoverEditTabOut extends CdkPopoverEdit {
|
|
|
968
983
|
this.closeEditOverlay();
|
|
969
984
|
});
|
|
970
985
|
}
|
|
971
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
972
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
986
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditTabOut, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
987
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkPopoverEditTabOut, isStandalone: true, selector: "[cdkPopoverEdit][cdkPopoverEditTabOut]", inputs: { template: ["cdkPopoverEdit", "template"], context: ["cdkPopoverEditContext", "context"], colspan: ["cdkPopoverEditColspan", "colspan"], disabled: ["cdkPopoverEditDisabled", "disabled"], ariaLabel: ["cdkPopoverEditAriaLabel", "ariaLabel"] }, host: { properties: { "attr.tabindex": "disabled ? null : 0", "attr.aria-haspopup": "!disabled" }, classAttribute: "cdk-popover-edit-cell" }, usesInheritance: true, ngImport: i0 });
|
|
973
988
|
}
|
|
974
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
989
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditTabOut, decorators: [{
|
|
975
990
|
type: Directive,
|
|
976
991
|
args: [{
|
|
977
992
|
selector: '[cdkPopoverEdit][cdkPopoverEditTabOut]',
|
|
@@ -1055,10 +1070,10 @@ class CdkRowHoverContent {
|
|
|
1055
1070
|
}
|
|
1056
1071
|
});
|
|
1057
1072
|
}
|
|
1058
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1059
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
1073
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkRowHoverContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1074
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkRowHoverContent, isStandalone: true, selector: "[cdkRowHoverContent]", ngImport: i0 });
|
|
1060
1075
|
}
|
|
1061
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1076
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkRowHoverContent, decorators: [{
|
|
1062
1077
|
type: Directive,
|
|
1063
1078
|
args: [{
|
|
1064
1079
|
selector: '[cdkRowHoverContent]',
|
|
@@ -1083,10 +1098,10 @@ class CdkEditOpen {
|
|
|
1083
1098
|
this.editEventDispatcher.editing.next(closest(this.elementRef.nativeElement, CELL_SELECTOR));
|
|
1084
1099
|
evt.stopPropagation();
|
|
1085
1100
|
}
|
|
1086
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1087
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
1101
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1102
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0-next.5", type: CdkEditOpen, isStandalone: true, selector: "[cdkEditOpen]", host: { listeners: { "click": "openEdit($event)" } }, ngImport: i0 });
|
|
1088
1103
|
}
|
|
1089
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkEditOpen, decorators: [{
|
|
1090
1105
|
type: Directive,
|
|
1091
1106
|
args: [{
|
|
1092
1107
|
selector: '[cdkEditOpen]',
|
|
@@ -1107,8 +1122,8 @@ const EXPORTED_DECLARATIONS = [
|
|
|
1107
1122
|
CdkEditOpen,
|
|
1108
1123
|
];
|
|
1109
1124
|
class CdkPopoverEditModule {
|
|
1110
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1111
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
1125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1126
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditModule, imports: [OverlayModule, CdkPopoverEdit,
|
|
1112
1127
|
CdkPopoverEditTabOut,
|
|
1113
1128
|
CdkRowHoverContent,
|
|
1114
1129
|
CdkEditControl,
|
|
@@ -1123,9 +1138,9 @@ class CdkPopoverEditModule {
|
|
|
1123
1138
|
CdkEditClose,
|
|
1124
1139
|
CdkEditable,
|
|
1125
1140
|
CdkEditOpen] });
|
|
1126
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
1141
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditModule, imports: [OverlayModule] });
|
|
1127
1142
|
}
|
|
1128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.5", ngImport: i0, type: CdkPopoverEditModule, decorators: [{
|
|
1129
1144
|
type: NgModule,
|
|
1130
1145
|
args: [{
|
|
1131
1146
|
imports: [OverlayModule, ...EXPORTED_DECLARATIONS],
|
|
@@ -1133,9 +1148,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.0", ngImpor
|
|
|
1133
1148
|
}]
|
|
1134
1149
|
}] });
|
|
1135
1150
|
|
|
1136
|
-
/**
|
|
1137
|
-
* Generated bundle index. Do not edit.
|
|
1138
|
-
*/
|
|
1139
|
-
|
|
1140
1151
|
export { CdkEditClose, CdkEditControl, CdkEditOpen, CdkEditRevert, CdkEditable, CdkPopoverEdit, CdkPopoverEditModule, CdkPopoverEditTabOut, CdkRowHoverContent, EditEventDispatcher, EditRef, FocusDispatcher, FormValueContainer, HoverContentState, CELL_SELECTOR as _CELL_SELECTOR, closest as _closest };
|
|
1141
1152
|
//# sourceMappingURL=popover-edit.mjs.map
|