@brickclay-org/ui 0.1.81 → 0.1.82

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
@@ -1063,6 +1063,9 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1063
1063
  gridSelectionActions: _angular_core.InputSignal<boolean>;
1064
1064
  gridMinWidth: _angular_core.InputSignal<string>;
1065
1065
  gridMaxHeight: _angular_core.InputSignal<string>;
1066
+ /** One or two item keys used for the selected grid value/chip label. */
1067
+ gridSelectedLabelKeys: _angular_core.InputSignal<string[]>;
1068
+ gridSelectedLabelSeparator: _angular_core.InputSignal<string>;
1066
1069
  gridApplyText: _angular_core.InputSignal<string>;
1067
1070
  gridClearText: _angular_core.InputSignal<string>;
1068
1071
  /**
@@ -1105,7 +1108,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1105
1108
  disabled: _angular_core.ModelSignal<boolean>;
1106
1109
  loading: _angular_core.InputSignal<boolean>;
1107
1110
  closeOnSelect: _angular_core.InputSignal<boolean>;
1108
- dropdownPosition: _angular_core.InputSignal<"top" | "bottom">;
1111
+ dropdownPosition: _angular_core.InputSignal<"bottom" | "top">;
1109
1112
  hasError: boolean;
1110
1113
  errorMessage: string;
1111
1114
  appendToBody: _angular_core.InputSignal<boolean>;
@@ -1135,7 +1138,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1135
1138
  private gridDraftOptions;
1136
1139
  searchTerm: _angular_core.WritableSignal<string>;
1137
1140
  markedIndex: _angular_core.WritableSignal<number>;
1138
- placement: _angular_core.WritableSignal<"top" | "bottom">;
1141
+ placement: _angular_core.WritableSignal<"bottom" | "top">;
1139
1142
  private originalPanelParent;
1140
1143
  private originalPanelAnchor;
1141
1144
  private panelInBody;
@@ -1187,6 +1190,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1187
1190
  resolveLabel(item: any): string;
1188
1191
  resolveValue(item: any): any;
1189
1192
  resolveGridCell(item: any, column: BkSelectGridColumn): string;
1193
+ private readItemValue;
1190
1194
  gridColumnStyle(column: BkSelectGridColumn): Record<string, string>;
1191
1195
  gridBadgeColor(item: any, column: BkSelectGridColumn): BadgeColor;
1192
1196
  isGridItemSelected(item: any): boolean;
@@ -1276,7 +1280,7 @@ declare class BkSelect implements ControlValueAccessor, AfterViewInit, OnDestroy
1276
1280
  getTooltipIfEllipsed(el: HTMLElement, text: string): string;
1277
1281
  onOptionHover(index: number): void;
1278
1282
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BkSelect, never>;
1279
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BkSelect, "bk-select", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "bindIcon": { "alias": "bindIcon"; "required": false; "isSignal": true; }; "isResponsive": { "alias": "isResponsive"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "notFoundText": { "alias": "notFoundText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "clearAllText": { "alias": "clearAllText"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "colorKey": { "alias": "colorKey"; "required": false; "isSignal": true; }; "dropdownView": { "alias": "dropdownView"; "required": false; "isSignal": true; }; "gridColumns": { "alias": "gridColumns"; "required": false; "isSignal": true; }; "gridSelectionActions": { "alias": "gridSelectionActions"; "required": false; "isSignal": true; }; "gridMinWidth": { "alias": "gridMinWidth"; "required": false; "isSignal": true; }; "gridMaxHeight": { "alias": "gridMaxHeight"; "required": false; "isSignal": true; }; "gridApplyText": { "alias": "gridApplyText"; "required": false; "isSignal": true; }; "gridClearText": { "alias": "gridClearText"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showAvatar": { "alias": "showAvatar"; "required": false; "isSignal": true; }; "avatarKey": { "alias": "avatarKey"; "required": false; "isSignal": true; }; "iconAlt": { "alias": "iconAlt"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "variation": { "alias": "variation"; "required": false; }; "iconSrc": { "alias": "iconSrc"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxLabels": { "alias": "maxLabels"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "allSelect": { "alias": "allSelect"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "appendToBody": { "alias": "appendToBody"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "open": "open"; "close": "close"; "focus": "focus"; "blur": "blur"; "search": "search"; "clear": "clear"; "change": "change"; "scrollToEnd": "scrollToEnd"; }, never, never, true, never>;
1283
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BkSelect, "bk-select", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "bindIcon": { "alias": "bindIcon"; "required": false; "isSignal": true; }; "isResponsive": { "alias": "isResponsive"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "notFoundText": { "alias": "notFoundText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "clearAllText": { "alias": "clearAllText"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "colorKey": { "alias": "colorKey"; "required": false; "isSignal": true; }; "dropdownView": { "alias": "dropdownView"; "required": false; "isSignal": true; }; "gridColumns": { "alias": "gridColumns"; "required": false; "isSignal": true; }; "gridSelectionActions": { "alias": "gridSelectionActions"; "required": false; "isSignal": true; }; "gridMinWidth": { "alias": "gridMinWidth"; "required": false; "isSignal": true; }; "gridMaxHeight": { "alias": "gridMaxHeight"; "required": false; "isSignal": true; }; "gridSelectedLabelKeys": { "alias": "gridSelectedLabelKeys"; "required": false; "isSignal": true; }; "gridSelectedLabelSeparator": { "alias": "gridSelectedLabelSeparator"; "required": false; "isSignal": true; }; "gridApplyText": { "alias": "gridApplyText"; "required": false; "isSignal": true; }; "gridClearText": { "alias": "gridClearText"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showAvatar": { "alias": "showAvatar"; "required": false; "isSignal": true; }; "avatarKey": { "alias": "avatarKey"; "required": false; "isSignal": true; }; "iconAlt": { "alias": "iconAlt"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "variation": { "alias": "variation"; "required": false; }; "iconSrc": { "alias": "iconSrc"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxLabels": { "alias": "maxLabels"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "allSelect": { "alias": "allSelect"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "appendToBody": { "alias": "appendToBody"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "open": "open"; "close": "close"; "focus": "focus"; "blur": "blur"; "search": "search"; "clear": "clear"; "change": "change"; "scrollToEnd": "scrollToEnd"; }, never, never, true, never>;
1280
1284
  }
1281
1285
 
1282
1286
  type BkInputType = 'text' | 'email' | 'password' | 'number' | 'url' | 'tel';
@@ -2320,7 +2324,7 @@ declare class BkHierarchicalSelect implements ControlValueAccessor, AfterViewIni
2320
2324
  /** When true, dropdown is positioned fixed and sized to the trigger (use inside modals/popups). */
2321
2325
  appendToBody: _angular_core.InputSignal<boolean>;
2322
2326
  /** Open above or below the trigger (also used when appendToBody is true for fixed coordinates). */
2323
- dropdownPosition: _angular_core.InputSignal<"top" | "bottom">;
2327
+ dropdownPosition: _angular_core.InputSignal<"bottom" | "top">;
2324
2328
  /** Key for option color (e.g. "color"). When set, option label and selected value use this color. */
2325
2329
  colorKey: _angular_core.InputSignal<string>;
2326
2330
  /**
@@ -2349,7 +2353,7 @@ declare class BkHierarchicalSelect implements ControlValueAccessor, AfterViewIni
2349
2353
  controlWrapper: ElementRef<HTMLDivElement>;
2350
2354
  dropdownPanel?: ElementRef<HTMLDivElement>;
2351
2355
  private el;
2352
- placement: _angular_core.WritableSignal<"top" | "bottom">;
2356
+ placement: _angular_core.WritableSignal<"bottom" | "top">;
2353
2357
  private originalPanelParent;
2354
2358
  private originalPanelAnchor;
2355
2359
  private panelInBody;
@@ -3891,7 +3895,7 @@ declare class BkTd extends BkCellBase implements AfterViewInit, OnDestroy {
3891
3895
  */
3892
3896
  protected readonly truncatedTooltip: _angular_core.WritableSignal<string>;
3893
3897
  /** Forwarded to the content wrapper's `bkTooltip`. Override on a column whose default 'right' would run into its neighbour. */
3894
- tooltipPosition: _angular_core.InputSignal<"left" | "right" | "top" | "bottom">;
3898
+ tooltipPosition: _angular_core.InputSignal<"bottom" | "top" | "left" | "right">;
3895
3899
  /** Only present when `ellipsis()` is true — see the `@else` branch in the template. */
3896
3900
  private ellipsisTextRef?;
3897
3901
  checkbox: _angular_core.InputSignal<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brickclay-org/ui",
3
- "version": "0.1.81",
3
+ "version": "0.1.82",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-add": {
6
6
  "save": "dependencies"
@@ -130,6 +130,12 @@
130
130
  max-width: 140px;
131
131
  }
132
132
 
133
+ /* Grid selections may combine two column values, so allow wider chips without
134
+ changing the established list-mode multi-select sizing. */
135
+ .bk-select-container.bk-grid-view .bk-multi-badge-item {
136
+ max-width: 175px;
137
+ }
138
+
133
139
  .bk-multi-badge-item-text {
134
140
  @apply text-[10px] leading-[12px] font-normal text-[#6B7080];
135
141
  white-space: nowrap;
@@ -167,6 +173,36 @@
167
173
  /* Opt-in grid dropdown. List-mode selectors above and below remain unchanged. */
168
174
  .bk-grid-scroll {
169
175
  @apply overflow-auto -mx-2.5;
176
+ scrollbar-width: thin;
177
+ scrollbar-color: #D6D7DC transparent;
178
+ }
179
+
180
+ .bk-grid-scroll::-webkit-scrollbar {
181
+ width: 6px;
182
+ height: 6px;
183
+ }
184
+
185
+ .bk-grid-scroll::-webkit-scrollbar-track {
186
+ background: transparent;
187
+ }
188
+
189
+ .bk-grid-scroll::-webkit-scrollbar-thumb {
190
+ background: #D6D7DC;
191
+ border-radius: 999px;
192
+ }
193
+
194
+ .bk-grid-scroll::-webkit-scrollbar-thumb:hover {
195
+ background: #909090;
196
+ }
197
+
198
+ .bk-grid-scroll::-webkit-scrollbar-button {
199
+ display: none;
200
+ }
201
+
202
+ /* Unlike list options, the grid header should meet the panel's top edge. */
203
+ .bk-dropdown-panel.bk-grid-panel {
204
+ padding-top: 0;
205
+ padding-bottom: 0;
170
206
  }
171
207
 
172
208
  .bk-select-grid {
@@ -175,7 +211,7 @@
175
211
  }
176
212
 
177
213
  .bk-select-grid th {
178
- @apply sticky top-0 z-10 bg-[#F8F8F8] px-4 py-2.5 font-semibold whitespace-nowrap border-b border-[#E3E3E7];
214
+ @apply sticky top-0 z-10 bg-[#F1F1F3] px-4 py-2.5 font-semibold whitespace-nowrap border-b border-[#E3E3E7];
179
215
  }
180
216
 
181
217
  .bk-select-grid td {
@@ -214,13 +250,58 @@
214
250
  }
215
251
 
216
252
  .bk-grid-footer {
217
- @apply flex items-center justify-between gap-4 px-1 pt-2.5 text-xs text-[#6B7080];
253
+ @apply flex items-center justify-between gap-4 px-1 py-2.5 text-xs text-[#6B7080];
218
254
  }
219
255
 
220
256
  .bk-grid-footer-actions {
221
257
  @apply flex items-center gap-2;
222
258
  }
223
259
 
260
+ /* Grid density follows the select's existing `variation="sm"` contract. The
261
+ class lives on the panel so it keeps working when appendToBody relocates it. */
262
+ .bk-dropdown-panel.bk-grid-compact {
263
+ padding: 0 0.5rem;
264
+ }
265
+
266
+ .bk-dropdown-panel.bk-grid-compact .bk-dropdown-search {
267
+ @apply px-1 pt-1;
268
+ }
269
+
270
+ .bk-dropdown-panel.bk-grid-compact .bk-search-wrapper {
271
+ @apply px-2 py-1;
272
+ }
273
+
274
+ .bk-dropdown-panel.bk-grid-compact .bk-search-input {
275
+ @apply text-xs;
276
+ }
277
+
278
+ .bk-dropdown-panel.bk-grid-compact .bk-grid-scroll {
279
+ @apply -mx-2;
280
+ }
281
+
282
+ .bk-dropdown-panel.bk-grid-compact .bk-select-grid {
283
+ @apply text-xs;
284
+ }
285
+
286
+ .bk-dropdown-panel.bk-grid-compact .bk-select-grid th,
287
+ .bk-dropdown-panel.bk-grid-compact .bk-select-grid td {
288
+ @apply px-3 py-1.5;
289
+ }
290
+
291
+ .bk-dropdown-panel.bk-grid-compact .bk-grid-checkbox-column {
292
+ width: 40px;
293
+ min-width: 40px;
294
+ @apply !px-3;
295
+ }
296
+
297
+ .bk-dropdown-panel.bk-grid-compact .bk-grid-footer {
298
+ @apply gap-3 px-0 py-1.5 text-[11px];
299
+ }
300
+
301
+ .bk-dropdown-panel.bk-grid-compact .bk-grid-footer-actions {
302
+ @apply gap-1.5;
303
+ }
304
+
224
305
  @media (max-width: 640px) {
225
306
  .bk-grid-scroll {
226
307
  max-width: calc(100vw - 32px);