@brickclay-org/ui 0.1.91 → 0.1.93

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/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import * as rxjs from 'rxjs';
7
7
  import { Observable } from 'rxjs';
8
8
  import * as i1 from '@angular/common';
9
9
  import * as i1$3 from '@angular/cdk/drag-drop';
10
- import { CdkDragDrop, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';
10
+ import { CdkDragDrop, CdkDragMove, CdkDragStart, CdkDragEnter } from '@angular/cdk/drag-drop';
11
11
  import { NgxMaskDirective } from 'ngx-mask';
12
12
  import * as i1$2 from '@angular/cdk/dialog';
13
13
  import { CdkDialogContainer, DialogRef } from '@angular/cdk/dialog';
@@ -1579,7 +1579,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1579
1579
  * existing click/Enter-to-open behaviour is unchanged.
1580
1580
  */
1581
1581
  openOnFocus: _angular_core.InputSignal<boolean>;
1582
- dropdownPosition: _angular_core.InputSignal<"bottom" | "top">;
1582
+ dropdownPosition: _angular_core.InputSignal<"top" | "bottom">;
1583
1583
  hasError: boolean;
1584
1584
  errorMessage: string;
1585
1585
  /**
@@ -1618,7 +1618,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1618
1618
  private gridDraftOptions;
1619
1619
  searchTerm: _angular_core.WritableSignal<string>;
1620
1620
  markedIndex: _angular_core.WritableSignal<number>;
1621
- placement: _angular_core.WritableSignal<"bottom" | "top">;
1621
+ placement: _angular_core.WritableSignal<"top" | "bottom">;
1622
1622
  visibleCount: _angular_core.WritableSignal<number>;
1623
1623
  private resizeObserver?;
1624
1624
  /**
@@ -2934,7 +2934,7 @@ declare class BkHierarchicalSelect implements ControlValueAccessor, AfterViewIni
2934
2934
  */
2935
2935
  appendToBody: _angular_core.InputSignal<boolean>;
2936
2936
  /** Open above or below the trigger (also used when appendToBody is true for fixed coordinates). */
2937
- dropdownPosition: _angular_core.InputSignal<"bottom" | "top">;
2937
+ dropdownPosition: _angular_core.InputSignal<"top" | "bottom">;
2938
2938
  /** Key for option color (e.g. "color"). When set, option label and selected value use this color. */
2939
2939
  colorKey: _angular_core.InputSignal<string>;
2940
2940
  /**
@@ -2968,7 +2968,7 @@ declare class BkHierarchicalSelect implements ControlValueAccessor, AfterViewIni
2968
2968
  /** Index of the keyboard-highlighted option within the current level (`filteredItems`). */
2969
2969
  markedIndex: _angular_core.WritableSignal<number>;
2970
2970
  private el;
2971
- placement: _angular_core.WritableSignal<"bottom" | "top">;
2971
+ placement: _angular_core.WritableSignal<"top" | "bottom">;
2972
2972
  /**
2973
2973
  * Panel width, kept equal to the control's — matches the old `dropdownStyle().width`
2974
2974
  * behaviour. Set on open and re-measured by a ResizeObserver on the control while open, so a
@@ -4579,7 +4579,7 @@ declare class BkTd extends BkCellBase implements AfterViewInit, OnDestroy {
4579
4579
  */
4580
4580
  protected readonly truncatedTooltip: _angular_core.WritableSignal<string>;
4581
4581
  /** Forwarded to the content wrapper's `bkTooltip`. Override on a column whose default 'right' would run into its neighbour. */
4582
- tooltipPosition: _angular_core.InputSignal<"left" | "right" | "bottom" | "top">;
4582
+ tooltipPosition: _angular_core.InputSignal<"left" | "right" | "top" | "bottom">;
4583
4583
  /** Only present when `ellipsis()` is true — see the `@else` branch in the template. */
4584
4584
  private ellipsisTextRef?;
4585
4585
  checkbox: _angular_core.InputSignal<boolean>;
@@ -4896,5 +4896,402 @@ declare class BkTreeDrag<T = any> extends BkTableDrag implements OnDestroy {
4896
4896
 
4897
4897
  declare const BK_TABLE: readonly [typeof BkTable, typeof BkTableTitle, typeof BkTableFooter, typeof BkVirtualScroll, typeof BkTh, typeof BkTd, typeof BkTrExpand, typeof BkTableSummary, typeof BkTableDrag, typeof BkDragHandle, typeof BkTreeDrag];
4898
4898
 
4899
- export { ARROW_CORNER_GAP, BKTooltipDirective, BK_DEFAULT_DIALOG_CONFIG, BK_DIALOG_DATA, BK_DIALOG_GLOBAL_CONFIG, BK_TABLE, BkAvatar, BkAvatarGroup, BkAvatarUploader, BkBadge, BkBreadcrumb, BkButton, BkButtonGroup, BkCalendarManagerService, BkCheckbox, BkColumnFilterService, BkColumnSelect, BkCustomCalendar, BkDialogActions, BkDialogClose, BkDialogContent, BkDialogModule, BkDialogRef, BkDialogService, BkDialogTitle, BkDragHandle, BkDropdown, BkFileCard, BkFilePicker, BkGrid, BkHierarchicalSelect, BkIconButton, BkInput, BkInputChips, BkLoader, BkMenu, BkPagination, BkPill, BkPopover, BkRadioButton, BkScheduledDatePicker, BkSelect, BkSpinner, BkTable, BkTableDrag, BkTableFooter, BkTableSummary, BkTableTitle, BkTabs, BkTd, BkTextarea, BkTh, BkTimePicker, BkToastr, BkToastrService, BkToggle, BkTooltipInteractionService, BkTrExpand, BkTreeDrag, BkValidator, BkVirtualScroll, BrickclayIcons, BrickclayLib, CalendarModule, CalendarMonth, CalendarSelection, CalendarWeekday, ColumnFilterOption, DEFAULT_COUNTRY_OPTIONS, NEUTRAL_APPEARANCE, OPPOSITE_SIDE, POPOVER_PLACEMENTS, clamp, containsBkTreeNode, deriveAppearance, flattenBkTreeData, getDialogBackdropAnimation, getDialogPanelAnimation, joinPlacement, moveBkTreeNode, normalizeBkTableSize, parseColor, splitPlacement };
4900
- export type { AvatarFallback, AvatarGroupItem, AvatarSize, AvatarVariant, BadgeColor, BadgeSize, BadgeVariant, BkAnimationKeyframes, BkAvatarFallback, BkAvatarSize, BkCellAlign, BkColumnRef, BkColumnSelectPosition, BkDialogAnimation, BkDialogConfig, BkDialogPosition, BkFilterFn, BkFilterOption, BkInputAutoCapitalize, BkInputAutoComplete, BkInputMode, BkInputSize, BkInputType, BkLoaderVariant, BkPageSize, BkPageSizeVisibility, BkSelectGridColumn, BkSortDirection, BkSortFn, BkSortOrder, BkTableNoResult, BkTableQueryParams, BkTableScroll, BkTableSelection, BkTableSize, BkTableSizeToken, BkTextAreaAutoCapitalize, BkTextAreaAutoComplete, BkTextAreaInputMode, BkTooltipDismissible, BkTreeDragScope, BkTreeDropEvent, BkTreeDropPosition, BkTreeRow, BreadcrumbItem, ButtonSize, ButtonVariant, CalendarRange, ColorAppearance, ColorFill, CountryOption, CustomRangesConfig, DotPosition, DotStatus, DropdownItem, DropdownPlacement, DropdownSize, DropdownTrigger, DropdownVariant, FileState, GroupItem, GroupMode, HierarchicalNode, IconButtonSize, IconButtonVariant, IconOrientation, MenuItem, MenuOrientation, MenuPopupSide, MenuSize, MenuSubmenuMode, MenuTrigger, PillColor, PillSize, PillVariant, PopoverAlign, PopoverPlacement, PopoverSide, ScheduledDateSelection, SortDirection, SpinnerSize, TabIconDirection, TabItem, TableAction, TableBadge, TableColumn, TableIcon, TableRows, TabsColors, TabsOrientation, TabsVariant, TimeConfiguration, ToastConfig, ToastMessage, ToastMethodOptions, ToastPosition, ToastSeverity };
4899
+ /**
4900
+ * Types for bk-kanban.
4901
+ *
4902
+ * The board is content-agnostic by design (see the component's own doc
4903
+ * comment): it only ever moves opaque `T` values between columns and reports
4904
+ * what happened. Every type here describes either a column, or one of the
4905
+ * events the board reports — never anything about what a card renders as.
4906
+ */
4907
+ /** One column/status definition. Any number of columns — no fixed status set
4908
+ * assumed; a workflow with two lanes and one with fifteen both just pass a
4909
+ * `columns` array of the size they need. */
4910
+ interface BkKanbanColumn {
4911
+ id: string;
4912
+ label: string;
4913
+ /** Cap on cards in this column. Omit for no limit — see `wipLimitBehavior`. */
4914
+ wipLimit?: number;
4915
+ /**
4916
+ * Extra class(es) appended to this column's header bar — the row holding
4917
+ * the label, the count badge, and `columnHeaderActionsTemplate`, if any.
4918
+ * Named `colHeaderClass` (not `headerClass`) so it reads unambiguously as
4919
+ * "this column's header" once a column is nested inside `bk-kanban`. Same
4920
+ * idea as `panelClass` on `bk-dialog`/`bk-popover`, or `headerClass` on
4921
+ * `bk-grid`'s `TableColumn`: it only adds to the header's own classes,
4922
+ * bk-kanban's own layout still stands, and nothing stops you passing
4923
+ * whatever you'd pass any other element — a single class, several, a
4924
+ * whole Tailwind utility stack.
4925
+ *
4926
+ * For properties the header doesn't already declare (a `border`,
4927
+ * `box-shadow`, rounded corners) a plain class works exactly as you'd
4928
+ * expect. For its **background** specifically, set the
4929
+ * `--bk-kanban-header-bg` custom property instead of a `bg-*` utility —
4930
+ * Angular injects this component's own stylesheet after the page's
4931
+ * global one, so a same-specificity utility class can never outrank the
4932
+ * header's own background declaration; the custom property exists
4933
+ * precisely so `colHeaderClass` still has a reliable way to change it.
4934
+ */
4935
+ colHeaderClass?: string;
4936
+ /**
4937
+ * Extra class(es) appended to this column's own wrapper — the element
4938
+ * `wipLimit` feedback (`bk-kanban-column-warn`/`bk-kanban-column-live-over`)
4939
+ * already lands on, and the ancestor `colHeaderClass` reaches the header
4940
+ * through. Same idea as `colHeaderClass` one level up: it only adds to the
4941
+ * wrapper's own classes, nothing here replaces bk-kanban's own layout.
4942
+ *
4943
+ * Same background caveat as `colHeaderClass` too — set the
4944
+ * `--bk-kanban-column-bg` custom property rather than a `bg-*` utility to
4945
+ * change the wrapper's background reliably; see `colHeaderClass`'s doc
4946
+ * comment for why.
4947
+ */
4948
+ columnClass?: string;
4949
+ /**
4950
+ * Placeholder text shown in this column's body when it holds no cards,
4951
+ * overriding the board-wide `noDataText` input for this column alone.
4952
+ * Ignored once `emptyStateTemplate` is supplied — a template is a bigger
4953
+ * override than swapping in different words, so it wins outright rather
4954
+ * than being handed a piece of text it may not even render.
4955
+ */
4956
+ noDataText?: string;
4957
+ }
4958
+ /**
4959
+ * How far a drag is allowed to travel.
4960
+ *
4961
+ * `'same'` only reorders within a column (manual prioritization on a board
4962
+ * whose statuses shouldn't change from a drag). `'cross'` only moves cards
4963
+ * between columns, with no in-column reordering. `'both'` (the default)
4964
+ * allows either.
4965
+ */
4966
+ type BkKanbanDragScope = 'same' | 'cross' | 'both';
4967
+ /**
4968
+ * What happens when a drop would push a column's card count past its
4969
+ * `wipLimit`.
4970
+ *
4971
+ * `'block'` rejects the drop — nothing is mutated, so the card returns to
4972
+ * its origin the same way any cancelled CDK drag does. `'warn'` lets the
4973
+ * drop through but flags the column. `'none'` ignores limits at drop time
4974
+ * entirely (they still show in the header, purely as information).
4975
+ * `columnLimitExceeded` fires whenever a drop *would* exceed the limit,
4976
+ * regardless of which of the three is active.
4977
+ */
4978
+ type BkKanbanWipLimitBehavior = 'block' | 'warn' | 'none';
4979
+ /**
4980
+ * When WIP-limit feedback appears relative to the drop.
4981
+ *
4982
+ * `'live'` (default) highlights the hovered column the moment it would go
4983
+ * over, while the drag is still in progress. `'on-drop'` says nothing until
4984
+ * release, when `wipLimitBehavior` takes over. See the component doc for why
4985
+ * `'live'` is the recommended default.
4986
+ */
4987
+ type BkKanbanDragPreviewMode = 'live' | 'on-drop';
4988
+ /**
4989
+ * Where *vertical* scrolling lives once content outgrows the board's given
4990
+ * height (see the doc comment on `.bk-kanban` in `kanban.css` for how that
4991
+ * height is resolved from the host in the first place). Horizontal
4992
+ * scrolling — across columns — always lives on the board itself
4993
+ * (`.bk-kanban`'s own `overflow-x: auto`) regardless of this setting; only
4994
+ * the vertical axis moves.
4995
+ *
4996
+ * `'body'` (default): each column is stretched to the board's height and
4997
+ * scrolls *independently* — its own header stays fixed, only
4998
+ * `.bk-kanban-column-body` (the card list beneath it) scrolls, so a long
4999
+ * column never pushes its own header out of view, and every column can be
5000
+ * at a different scroll position at once.
5001
+ *
5002
+ * `'wrapper'`: the board itself — `.bk-kanban`, the element containing every
5003
+ * column — is what scrolls vertically, all columns together as a single
5004
+ * region (headers included). Columns fall back to their own natural height
5005
+ * here rather than being stretched, since nothing needs bounding
5006
+ * individually any more once the board is the one doing the scrolling.
5007
+ */
5008
+ type BkKanbanColumnScrollMode = 'body' | 'wrapper';
5009
+ /** Emitted once a drag-and-drop completes — a same-column reorder or a
5010
+ * cross-column move. `fromColumnId === toColumnId` for the former. */
5011
+ interface BkKanbanCardMovedEvent<T = any> {
5012
+ card: T;
5013
+ fromColumnId: string;
5014
+ toColumnId: string;
5015
+ newIndex: number;
5016
+ }
5017
+ /** Emitted once a column reorder completes — see `columnDragEnabled`. Unlike
5018
+ * `cardMoved`, there's only one axis to report: columns don't nest inside
5019
+ * one another, so a move is always "this column, from this index, to this
5020
+ * one" rather than needing a from/to pair of containers. */
5021
+ interface BkKanbanColumnMovedEvent {
5022
+ columnId: string;
5023
+ fromIndex: number;
5024
+ toIndex: number;
5025
+ }
5026
+ /**
5027
+ * Emitted when a card (or a region inside it) is clicked.
5028
+ *
5029
+ * `target` is `'card'` for a click anywhere on the card that isn't a more
5030
+ * specific region, or whatever name was given to a
5031
+ * `[bkKanbanClickTarget]="'…'"` element the click landed inside.
5032
+ */
5033
+ interface BkKanbanCardClickedEvent<T = any> {
5034
+ card: T;
5035
+ target: string;
5036
+ }
5037
+ /** Emitted when a drop would put a column over its `wipLimit` — see
5038
+ * `BkKanbanWipLimitBehavior` for when the drop itself still succeeds. */
5039
+ interface BkKanbanColumnLimitExceededEvent {
5040
+ columnId: string;
5041
+ wipLimit: number;
5042
+ attemptedCount: number;
5043
+ }
5044
+ /** Reserved: see `columnActionTriggered` on `BkKanban` and
5045
+ * `BkKanbanColumnActionsContext.trigger`. */
5046
+ interface BkKanbanColumnActionTriggeredEvent {
5047
+ columnId: string;
5048
+ }
5049
+ /**
5050
+ * Template context for `columnHeaderActionsTemplate`.
5051
+ *
5052
+ * `$implicit` and `column` are the same value — both are provided so the
5053
+ * template can use either `let-column` or the more explicit
5054
+ * `let-column="column"`. `trigger()` is there purely for
5055
+ * `columnActionTriggered`; most consumers bind their own click handler on
5056
+ * their own template instead and never call it.
5057
+ */
5058
+ interface BkKanbanColumnActionsContext {
5059
+ $implicit: BkKanbanColumn;
5060
+ column: BkKanbanColumn;
5061
+ trigger: () => void;
5062
+ }
5063
+ /** Template context for `emptyStateTemplate`. */
5064
+ interface BkKanbanEmptyStateContext {
5065
+ $implicit: BkKanbanColumn;
5066
+ column: BkKanbanColumn;
5067
+ }
5068
+ /** Template context for `cardTemplate`. */
5069
+ interface BkKanbanCardContext<T = any> {
5070
+ $implicit: T;
5071
+ card: T;
5072
+ column: BkKanbanColumn;
5073
+ index: number;
5074
+ }
5075
+
5076
+ /**
5077
+ * Content-agnostic kanban board: column layout, card positioning and
5078
+ * drag-and-drop, and nothing about what a card contains or what a click on
5079
+ * one should do.
5080
+ *
5081
+ * The board never renders a card's insides itself — `cardTemplate` does that,
5082
+ * receiving the card and its column as context:
5083
+ *
5084
+ * <bk-kanban
5085
+ * [columns]="columns"
5086
+ * [cards]="cards()"
5087
+ * [cardTemplate]="card"
5088
+ * (cardMoved)="onCardMoved($event)"
5089
+ * (cardClicked)="onCardClicked($event)"
5090
+ * ></bk-kanban>
5091
+ *
5092
+ * <ng-template #card let-card let-column="column">
5093
+ * <div [bkKanbanClickTarget]="'hours'">{{ card.hours }}h</div>
5094
+ * {{ card.title }}
5095
+ * </ng-template>
5096
+ *
5097
+ * That is deliberate, not an oversight — see the package spec's Design
5098
+ * Principles. Three consequences fall out of it directly:
5099
+ *
5100
+ * - **Data ownership stays with the caller.** A move is reported through
5101
+ * `cardMoved`, not applied to some copy of `cards` this component keeps to
5102
+ * itself. Internally it *does* mutate the card objects it was handed
5103
+ * (`columnIdField`'s field, and an `order` field used to remember position
5104
+ * within a column) so the board redraws in the right place immediately,
5105
+ * exactly the way `bk-grid`'s own row-drag mutates `result` in place and
5106
+ * renumbers `sortOrder` — but persistence, and reverting the view if a
5107
+ * save fails, are the host's job. Reverting is just handing back a
5108
+ * `cards` array (or updated objects) that reflect the pre-move state; nothing
5109
+ * further to undo on this end.
5110
+ * - **Clicks are reported, never acted on.** `cardClicked` says which card and
5111
+ * which named region (see `[bkKanbanClickTarget]`); opening a popup or
5112
+ * doing nothing at all is entirely up to whoever is listening.
5113
+ * - **A card's own shape is never inspected**, beyond the two fields above.
5114
+ * Tags, hours, avatars, due dates — the board doesn't know they exist.
5115
+ */
5116
+ declare class BkKanban<T = any> {
5117
+ /** Column/status definitions. Unlimited — the board renders whatever it's given. */
5118
+ columns: _angular_core.InputSignal<BkKanbanColumn[]>;
5119
+ /** Flat card list. Grouped into columns via `columnIdField`, ordered within
5120
+ * a column by an `order` field when the cards carry one, otherwise left in
5121
+ * the sequence they appear here. */
5122
+ cards: _angular_core.InputSignal<readonly T[]>;
5123
+ /** Renders a card's body. Receives `{ $implicit: card, card, column, index }`. */
5124
+ cardTemplate: _angular_core.InputSignal<TemplateRef<BkKanbanCardContext<T>>>;
5125
+ /** Field name, or a resolver function, that gives a card's column id.
5126
+ *
5127
+ * A field name can be both read and written, so a cross-column drop
5128
+ * updates it directly. A resolver function is read-only — the board still
5129
+ * reports the move via `cardMoved`, but leaves updating the source data to
5130
+ * the host, since there's nowhere on a function to write the new value. */
5131
+ columnIdField: _angular_core.InputSignal<string | ((card: T) => string)>;
5132
+ dragEnabled: _angular_core.InputSignal<boolean>;
5133
+ dragScope: _angular_core.InputSignal<BkKanbanDragScope>;
5134
+ wipLimitBehavior: _angular_core.InputSignal<BkKanbanWipLimitBehavior>;
5135
+ /** Lets columns themselves be dragged into a new order, via their header
5136
+ * (`.bk-kanban-column-header` is the drag handle — a card's own drag
5137
+ * keeps working independently, since it's a separate, unconnected drop
5138
+ * list one level down). Off by default: reordering the board's own
5139
+ * columns is a bigger commitment than reordering cards within it, and not
5140
+ * every consumer wants a "To do / In progress / Done" pipeline to be
5141
+ * rearrangeable. `columns` is mutated in place the same way `cards` is
5142
+ * (see the component doc) — persisting the new order, if it needs to be,
5143
+ * is the host's job, done from `columnMoved`. */
5144
+ columnDragEnabled: _angular_core.InputSignal<boolean>;
5145
+ /** See `BkKanbanColumnScrollMode`. */
5146
+ columnScrollMode: _angular_core.InputSignal<BkKanbanColumnScrollMode>;
5147
+ /** Extra class(es) appended to the board's own wrapper — `.bk-kanban-board`
5148
+ * in `kanban.html`, the element that directly contains the scrollable
5149
+ * region holding every column. Same idea as `columnClass`/`colHeaderClass`
5150
+ * one level down: it only adds classes, nothing here replaces bk-kanban's
5151
+ * own layout.
5152
+ *
5153
+ * Deliberately kept off the *scrolling* element itself
5154
+ * (`.bk-kanban`, one level further in): a `padding` or `border` in here
5155
+ * would otherwise become part of what has to be scrolled past, and change
5156
+ * where the scrollbar itself ends up sitting relative to the columns —
5157
+ * this wrapper exists specifically so `boardClass` can decorate (a
5158
+ * background, a border, padding around the whole board) without ever
5159
+ * touching the box CDK and `columnScrollMode` are actually scrolling. */
5160
+ boardClass: _angular_core.InputSignal<string>;
5161
+ /** Identity for `@for`'s `track`. Defaults to position in the rendered column. */
5162
+ trackBy: _angular_core.InputSignal<((card: T) => string | number) | null>;
5163
+ /** Rendered in a fixed slot in every column's header — e.g. an "add card"
5164
+ * button. Receives `BkKanbanColumnActionsContext`. The board owns where it
5165
+ * sits; the consumer owns what it does. */
5166
+ columnHeaderActionsTemplate: _angular_core.InputSignal<TemplateRef<BkKanbanColumnActionsContext> | null>;
5167
+ /** Overrides the built-in "No cards" placeholder for an empty column.
5168
+ * Receives `BkKanbanEmptyStateContext`. Takes priority over both
5169
+ * `noDataText` and a column's own `noDataText` — see `emptyStateText`. */
5170
+ emptyStateTemplate: _angular_core.InputSignal<TemplateRef<BkKanbanEmptyStateContext> | null>;
5171
+ /** Board-wide placeholder text for an empty column, used whenever a column
5172
+ * doesn't set its own `noDataText`. Only read when `emptyStateTemplate`
5173
+ * isn't supplied — see `emptyStateText`. */
5174
+ noDataText: _angular_core.InputSignal<string>;
5175
+ /** Whether a column flags an over-limit drop while still dragging (`'live'`)
5176
+ * or only once the drop is attempted (`'on-drop'`). See the doc block on
5177
+ * `isLiveOverLimit` for how the two relate to `wipLimitBehavior`. */
5178
+ dragPreviewMode: _angular_core.InputSignal<BkKanbanDragPreviewMode>;
5179
+ cardMoved: _angular_core.OutputEmitterRef<BkKanbanCardMovedEvent<T>>;
5180
+ cardClicked: _angular_core.OutputEmitterRef<BkKanbanCardClickedEvent<T>>;
5181
+ columnLimitExceeded: _angular_core.OutputEmitterRef<BkKanbanColumnLimitExceededEvent>;
5182
+ /** A column reorder completed — see `columnDragEnabled`. */
5183
+ columnMoved: _angular_core.OutputEmitterRef<BkKanbanColumnMovedEvent>;
5184
+ /** Reserved — see `BkKanbanColumnActionsContext.trigger`. Most consumers
5185
+ * bind a click handler directly on their own header-actions template and
5186
+ * never reach for this. */
5187
+ columnActionTriggered: _angular_core.OutputEmitterRef<BkKanbanColumnActionTriggeredEvent>;
5188
+ /**
5189
+ * Bumped after every in-place mutation (`setColumnId`, `renumber`) so
5190
+ * `grouped` re-runs even though neither `cards()`'s array identity nor any
5191
+ * card's object identity changed — the same trick as the table demo's
5192
+ * `pgSelectionTick`, needed for exactly the same reason: signals only
5193
+ * notice a new reference, and mutating fields in place is what lets a drop
5194
+ * redraw in the right place without waiting on the host to hand back a
5195
+ * whole new array.
5196
+ */
5197
+ private readonly structureTick;
5198
+ /** Cards grouped by column id, each group in `order` order when present
5199
+ * (falling back to their sequence in `cards()` otherwise). Cards whose
5200
+ * resolved column id matches no known column are dropped silently rather
5201
+ * than rendered nowhere. */
5202
+ private readonly grouped;
5203
+ /** The cards to render for one column, in display order. */
5204
+ cardsFor(columnId: string): T[];
5205
+ private resolveColumnId;
5206
+ private cardOrder;
5207
+ resolveTrackBy(card: T, index: number): string | number;
5208
+ /** Column-header count badge, flagged once the column is over its limit —
5209
+ * only while `wipLimitBehavior` is `'warn'`; `'block'` should never let a
5210
+ * column get there and `'none'` treats the number as pure information. */
5211
+ isColumnOverLimit(column: BkKanbanColumn): boolean;
5212
+ /** "3" with no limit, "3 / 5" with one — the header count badge's label. */
5213
+ columnCountLabel(column: BkKanbanColumn): string;
5214
+ columnActionsContext(column: BkKanbanColumn): BkKanbanColumnActionsContext;
5215
+ emptyStateContext(column: BkKanbanColumn): BkKanbanEmptyStateContext;
5216
+ /** Text for the built-in empty-column placeholder: a column's own
5217
+ * `noDataText` when it sets one, else the board-wide `noDataText` input.
5218
+ * Only consulted when `emptyStateTemplate` isn't supplied — the template
5219
+ * wins outright once given, exactly like `emptyStateContext` itself. */
5220
+ emptyStateText(column: BkKanbanColumn): string;
5221
+ cardContext(card: T, column: BkKanbanColumn, index: number): BkKanbanCardContext<T>;
5222
+ /** Which columns a column's drop list connects to, per `dragScope`. */
5223
+ connectedListIds(columnId: string): string[];
5224
+ /** `'cross'` means *only* moves between columns — reordering within one has
5225
+ * to be switched off at the list level, since a scoped-out `connectedTo`
5226
+ * alone still leaves the list free to sort itself. */
5227
+ readonly sortingDisabled: _angular_core.Signal<boolean>;
5228
+ /**
5229
+ * `columns` is reordered in place — same trick as `cards` (see the
5230
+ * component doc): the array reference the host handed in is mutated
5231
+ * directly (`moveItemInArray`) rather than swapped for a new one, so the
5232
+ * next render just reflects the new order. There's no `structureTick`-style
5233
+ * signal to bump here the way card moves need one — nothing derives
5234
+ * columns through a `computed()` the way `cardsFor` derives through
5235
+ * `grouped`; the template reads `columns()` directly in its `@for`, so the
5236
+ * drop event's own change detection pass is enough.
5237
+ */
5238
+ onColumnDrop(event: CdkDragDrop<BkKanbanColumn[]>): void;
5239
+ private readonly dragSourceColumnId;
5240
+ private readonly hoveredOverLimitColumnId;
5241
+ onDragStarted(column: BkKanbanColumn): void;
5242
+ onDragEnded(): void;
5243
+ /**
5244
+ * Live WIP-limit preview (§12 of the spec): as the dragged card enters a
5245
+ * column, work out whether *landing* here would exceed its `wipLimit` and
5246
+ * flag it immediately — before release, and independent of
5247
+ * `wipLimitBehavior`, which only governs what happens once the card is
5248
+ * actually dropped. A card re-entering its own source column doesn't grow
5249
+ * that column's count, so only a genuine cross-column entry counts as +1.
5250
+ */
5251
+ onListEntered(event: CdkDragEnter<T[]>, column: BkKanbanColumn): void;
5252
+ onListExited(column: BkKanbanColumn): void;
5253
+ isLiveOverLimit(column: BkKanbanColumn): boolean;
5254
+ onDrop(event: CdkDragDrop<T[]>, column: BkKanbanColumn): void;
5255
+ private setColumnId;
5256
+ private renumber;
5257
+ /**
5258
+ * One listener per card resolves both the whole-card click and every
5259
+ * `[bkKanbanClickTarget]` region: `closest()` from the actual event target
5260
+ * finds the nearest marked ancestor within this card, or there isn't one
5261
+ * and it's a plain card click. Either way this fires exactly once — never
5262
+ * once for the region and again for the card underneath it.
5263
+ */
5264
+ onCardClick(event: MouseEvent, card: T): void;
5265
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BkKanban<any>, never>;
5266
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BkKanban<any>, "bk-kanban", ["bkKanban"], { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "cards": { "alias": "cards"; "required": true; "isSignal": true; }; "cardTemplate": { "alias": "cardTemplate"; "required": true; "isSignal": true; }; "columnIdField": { "alias": "columnIdField"; "required": false; "isSignal": true; }; "dragEnabled": { "alias": "dragEnabled"; "required": false; "isSignal": true; }; "dragScope": { "alias": "dragScope"; "required": false; "isSignal": true; }; "wipLimitBehavior": { "alias": "wipLimitBehavior"; "required": false; "isSignal": true; }; "columnDragEnabled": { "alias": "columnDragEnabled"; "required": false; "isSignal": true; }; "columnScrollMode": { "alias": "columnScrollMode"; "required": false; "isSignal": true; }; "boardClass": { "alias": "boardClass"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "columnHeaderActionsTemplate": { "alias": "columnHeaderActionsTemplate"; "required": false; "isSignal": true; }; "emptyStateTemplate": { "alias": "emptyStateTemplate"; "required": false; "isSignal": true; }; "noDataText": { "alias": "noDataText"; "required": false; "isSignal": true; }; "dragPreviewMode": { "alias": "dragPreviewMode"; "required": false; "isSignal": true; }; }, { "cardMoved": "cardMoved"; "cardClicked": "cardClicked"; "columnLimitExceeded": "columnLimitExceeded"; "columnMoved": "columnMoved"; "columnActionTriggered": "columnActionTriggered"; }, never, never, true, never>;
5267
+ }
5268
+
5269
+ /**
5270
+ * Marks an element inside a `cardTemplate` as its own click region.
5271
+ *
5272
+ * `bk-kanban` never attaches a listener to this element directly — it puts
5273
+ * one listener on the whole card and, on click, walks up from
5274
+ * `event.target` (`Element.closest`) looking for the nearest marked
5275
+ * ancestor. That single-listener design is what makes a click on a marked
5276
+ * region resolve to *just* that region's name, instead of firing once for
5277
+ * the region and once more, as a duplicate, for the card underneath it.
5278
+ * This directive's only job is to leave something that walk can find: a
5279
+ * `data-bk-kanban-click-target` attribute carrying the name you gave it.
5280
+ *
5281
+ * <div [bkKanbanClickTarget]="'hours'">{{ card.hours }}h</div>
5282
+ * <div [bkKanbanClickTarget]="'assignee'">
5283
+ * <bk-ui-avatar [name]="card.assignee"></bk-ui-avatar>
5284
+ * </div>
5285
+ *
5286
+ * A click on either fires `cardClicked` with `target: 'hours'` /
5287
+ * `'assignee'`; a click anywhere else on the card falls back to the default
5288
+ * `target: 'card'`. See `BkKanbanCardClickedEvent`.
5289
+ */
5290
+ declare class BkKanbanClickTarget {
5291
+ target: _angular_core.InputSignal<string>;
5292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BkKanbanClickTarget, never>;
5293
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BkKanbanClickTarget, "[bkKanbanClickTarget]", never, { "target": { "alias": "bkKanbanClickTarget"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5294
+ }
5295
+
5296
+ export { ARROW_CORNER_GAP, BKTooltipDirective, BK_DEFAULT_DIALOG_CONFIG, BK_DIALOG_DATA, BK_DIALOG_GLOBAL_CONFIG, BK_TABLE, BkAvatar, BkAvatarGroup, BkAvatarUploader, BkBadge, BkBreadcrumb, BkButton, BkButtonGroup, BkCalendarManagerService, BkCheckbox, BkColumnFilterService, BkColumnSelect, BkCustomCalendar, BkDialogActions, BkDialogClose, BkDialogContent, BkDialogModule, BkDialogRef, BkDialogService, BkDialogTitle, BkDragHandle, BkDropdown, BkFileCard, BkFilePicker, BkGrid, BkHierarchicalSelect, BkIconButton, BkInput, BkInputChips, BkKanban, BkKanbanClickTarget, BkLoader, BkMenu, BkPagination, BkPill, BkPopover, BkRadioButton, BkScheduledDatePicker, BkSelect, BkSpinner, BkTable, BkTableDrag, BkTableFooter, BkTableSummary, BkTableTitle, BkTabs, BkTd, BkTextarea, BkTh, BkTimePicker, BkToastr, BkToastrService, BkToggle, BkTooltipInteractionService, BkTrExpand, BkTreeDrag, BkValidator, BkVirtualScroll, BrickclayIcons, BrickclayLib, CalendarModule, CalendarMonth, CalendarSelection, CalendarWeekday, ColumnFilterOption, DEFAULT_COUNTRY_OPTIONS, NEUTRAL_APPEARANCE, OPPOSITE_SIDE, POPOVER_PLACEMENTS, clamp, containsBkTreeNode, deriveAppearance, flattenBkTreeData, getDialogBackdropAnimation, getDialogPanelAnimation, joinPlacement, moveBkTreeNode, normalizeBkTableSize, parseColor, splitPlacement };
5297
+ export type { AvatarFallback, AvatarGroupItem, AvatarSize, AvatarVariant, BadgeColor, BadgeSize, BadgeVariant, BkAnimationKeyframes, BkAvatarFallback, BkAvatarSize, BkCellAlign, BkColumnRef, BkColumnSelectPosition, BkDialogAnimation, BkDialogConfig, BkDialogPosition, BkFilterFn, BkFilterOption, BkInputAutoCapitalize, BkInputAutoComplete, BkInputMode, BkInputSize, BkInputType, BkKanbanCardClickedEvent, BkKanbanCardContext, BkKanbanCardMovedEvent, BkKanbanColumn, BkKanbanColumnActionTriggeredEvent, BkKanbanColumnActionsContext, BkKanbanColumnLimitExceededEvent, BkKanbanColumnMovedEvent, BkKanbanColumnScrollMode, BkKanbanDragPreviewMode, BkKanbanDragScope, BkKanbanEmptyStateContext, BkKanbanWipLimitBehavior, BkLoaderVariant, BkPageSize, BkPageSizeVisibility, BkSelectGridColumn, BkSortDirection, BkSortFn, BkSortOrder, BkTableNoResult, BkTableQueryParams, BkTableScroll, BkTableSelection, BkTableSize, BkTableSizeToken, BkTextAreaAutoCapitalize, BkTextAreaAutoComplete, BkTextAreaInputMode, BkTooltipDismissible, BkTreeDragScope, BkTreeDropEvent, BkTreeDropPosition, BkTreeRow, BreadcrumbItem, ButtonSize, ButtonVariant, CalendarRange, ColorAppearance, ColorFill, CountryOption, CustomRangesConfig, DotPosition, DotStatus, DropdownItem, DropdownPlacement, DropdownSize, DropdownTrigger, DropdownVariant, FileState, GroupItem, GroupMode, HierarchicalNode, IconButtonSize, IconButtonVariant, IconOrientation, MenuItem, MenuOrientation, MenuPopupSide, MenuSize, MenuSubmenuMode, MenuTrigger, PillColor, PillSize, PillVariant, PopoverAlign, PopoverPlacement, PopoverSide, ScheduledDateSelection, SortDirection, SpinnerSize, TabIconDirection, TabItem, TableAction, TableBadge, TableColumn, TableIcon, TableRows, TabsColors, TabsOrientation, TabsVariant, TimeConfiguration, ToastConfig, ToastMessage, ToastMethodOptions, ToastPosition, ToastSeverity };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brickclay-org/ui",
3
- "version": "0.1.91",
3
+ "version": "0.1.93",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-add": {
6
6
  "save": "dependencies"