@brickclay-org/ui 0.0.83 → 0.0.85

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
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { OnInit, OnDestroy, OnChanges, EventEmitter, ElementRef, SimpleChanges, AfterViewInit, QueryList, ComponentRef, Type, InjectionToken, Renderer2, ApplicationRef, EnvironmentInjector, ChangeDetectorRef } from '@angular/core';
3
- import { ControlValueAccessor, NgControl, NgModel, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
3
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors, NgControl, NgModel } from '@angular/forms';
4
4
  import * as rxjs from 'rxjs';
5
5
  import { Observable } from 'rxjs';
6
6
  import * as i1 from '@angular/common';
@@ -59,7 +59,7 @@ declare class CalendarSelection {
59
59
  endTime: string | null;
60
60
  selectedDates?: string[];
61
61
  }
62
- declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {
62
+ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlValueAccessor, Validator {
63
63
  private calendarManager;
64
64
  enableTimepicker: boolean;
65
65
  autoApply: boolean;
@@ -76,6 +76,7 @@ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlV
76
76
  dualCalendar: boolean;
77
77
  showRanges: boolean;
78
78
  timeFormat: 12 | 24;
79
+ clearableTime: boolean;
79
80
  enableSeconds: boolean;
80
81
  customRanges?: Record<string, CalendarRange>;
81
82
  multiDateSelection: boolean;
@@ -163,6 +164,12 @@ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlV
163
164
  startTime: string | null;
164
165
  /** Current end time string in 12-hour format with AM/PM (e.g. "2:00 AM"). Synced with ngModel/CalendarSelection. */
165
166
  endTime: string | null;
167
+ /** ngModel binding for single-calendar time picker (null = no time). */
168
+ singleTimeModel: string | null;
169
+ /** ngModel binding for dual-calendar start time picker (null = no time). */
170
+ startTimeModel: string | null;
171
+ /** ngModel binding for dual-calendar end time picker (null = no time). */
172
+ endTimeModel: string | null;
166
173
  openTimePickerId: string | null;
167
174
  closePickerCounter: {
168
175
  [key: string]: number;
@@ -178,6 +185,8 @@ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlV
178
185
  registerOnChange(fn: (value: CalendarSelection | null) => void): void;
179
186
  registerOnTouched(fn: () => void): void;
180
187
  setDisabledState(isDisabled: boolean): void;
188
+ /** Validator: when required is true, value must have a date selected. */
189
+ validate(control: AbstractControl): ValidationErrors | null;
181
190
  /** Call from template when control loses focus (for CVA touched state). */
182
191
  markAsTouched(): void;
183
192
  /** Apply CalendarSelection to internal state (startDate, endDate, startTime, endTime, selectedDates, calendar view). */
@@ -234,8 +243,8 @@ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlV
234
243
  onTimePickerClosed(pickerId: string): void;
235
244
  shouldClosePicker(pickerId: string): number;
236
245
  private parsePickerTimeString;
237
- onSingleTimePickerChange(time: string): void;
238
- onDualTimePickerChange(time: string, isStart?: boolean): void;
246
+ onSingleTimePickerChange(time: string | null): void;
247
+ onDualTimePickerChange(time: string | null, isStart?: boolean): void;
239
248
  onTimeChange(event: any, isStart?: boolean): void;
240
249
  onSingleTimeChange(event: any): void;
241
250
  incrementHour(isStart?: boolean): void;
@@ -265,7 +274,7 @@ declare class BkCustomCalendar implements OnInit, OnDestroy, OnChanges, ControlV
265
274
  private parseDateString;
266
275
  formatDateToString(date: Date): string;
267
276
  static ɵfac: i0.ɵɵFactoryDeclaration<BkCustomCalendar, never>;
268
- static ɵcmp: i0.ɵɵComponentDeclaration<BkCustomCalendar, "bk-custom-calendar", never, { "enableTimepicker": { "alias": "enableTimepicker"; "required": false; }; "autoApply": { "alias": "autoApply"; "required": false; }; "closeOnAutoApply": { "alias": "closeOnAutoApply"; "required": false; }; "showCancel": { "alias": "showCancel"; "required": false; }; "linkedCalendars": { "alias": "linkedCalendars"; "required": false; }; "singleDatePicker": { "alias": "singleDatePicker"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "showISOWeekNumbers": { "alias": "showISOWeekNumbers"; "required": false; }; "customRangeDirection": { "alias": "customRangeDirection"; "required": false; }; "lockStartDate": { "alias": "lockStartDate"; "required": false; }; "position": { "alias": "position"; "required": false; }; "drop": { "alias": "drop"; "required": false; }; "dualCalendar": { "alias": "dualCalendar"; "required": false; }; "showRanges": { "alias": "showRanges"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "enableSeconds": { "alias": "enableSeconds"; "required": false; }; "customRanges": { "alias": "customRanges"; "required": false; }; "multiDateSelection": { "alias": "multiDateSelection"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "opens": { "alias": "opens"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "appendToBody": { "alias": "appendToBody"; "required": false; }; "isDisplayCrossIcon": { "alias": "isDisplayCrossIcon"; "required": false; }; "hasError": { "alias": "hasError"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "showCancelApply": { "alias": "showCancelApply"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "displayFormat": { "alias": "displayFormat"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "selected": "selected"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
277
+ static ɵcmp: i0.ɵɵComponentDeclaration<BkCustomCalendar, "bk-custom-calendar", never, { "enableTimepicker": { "alias": "enableTimepicker"; "required": false; }; "autoApply": { "alias": "autoApply"; "required": false; }; "closeOnAutoApply": { "alias": "closeOnAutoApply"; "required": false; }; "showCancel": { "alias": "showCancel"; "required": false; }; "linkedCalendars": { "alias": "linkedCalendars"; "required": false; }; "singleDatePicker": { "alias": "singleDatePicker"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "showISOWeekNumbers": { "alias": "showISOWeekNumbers"; "required": false; }; "customRangeDirection": { "alias": "customRangeDirection"; "required": false; }; "lockStartDate": { "alias": "lockStartDate"; "required": false; }; "position": { "alias": "position"; "required": false; }; "drop": { "alias": "drop"; "required": false; }; "dualCalendar": { "alias": "dualCalendar"; "required": false; }; "showRanges": { "alias": "showRanges"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "clearableTime": { "alias": "clearableTime"; "required": false; }; "enableSeconds": { "alias": "enableSeconds"; "required": false; }; "customRanges": { "alias": "customRanges"; "required": false; }; "multiDateSelection": { "alias": "multiDateSelection"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "opens": { "alias": "opens"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "appendToBody": { "alias": "appendToBody"; "required": false; }; "isDisplayCrossIcon": { "alias": "isDisplayCrossIcon"; "required": false; }; "hasError": { "alias": "hasError"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "showCancelApply": { "alias": "showCancelApply"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "displayFormat": { "alias": "displayFormat"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "selected": "selected"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
269
278
  }
270
279
 
271
280
  interface TimeConfiguration {
@@ -319,17 +328,17 @@ declare class BkScheduledDatePicker implements OnInit {
319
328
  shouldClosePicker(pickerId: string): number;
320
329
  onSingleDateSelected(event: CalendarSelection): void;
321
330
  onSingleAllDayChange(): void;
322
- onSingleStartTimeChange(time: string): void;
323
- onSingleEndTimeChange(time: string): void;
331
+ onSingleStartTimeChange(time: string | null): void;
332
+ onSingleEndTimeChange(time: string | null): void;
324
333
  updateSingleDateTimes(): void;
325
334
  onMultipleDatesSelected(event: CalendarSelection): void;
326
335
  onMultipleDateAllDayChange(index: number): void;
327
- onMultipleDateStartTimeChange(index: number, time: string): void;
328
- onMultipleDateEndTimeChange(index: number, time: string): void;
336
+ onMultipleDateStartTimeChange(index: number, time: string | null): void;
337
+ onMultipleDateEndTimeChange(index: number, time: string | null): void;
329
338
  onRangeSelected(event: CalendarSelection): void;
330
339
  onRangeAllDayChange(): void;
331
- onRangeStartTimeChange(time: string): void;
332
- onRangeEndTimeChange(time: string): void;
340
+ onRangeStartTimeChange(time: string | null): void;
341
+ onRangeEndTimeChange(time: string | null): void;
333
342
  updateRangeTimes(): void;
334
343
  parseTimeString(timeStr: string): {
335
344
  hours: number;
@@ -344,33 +353,70 @@ declare class BkScheduledDatePicker implements OnInit {
344
353
  static ɵcmp: i0.ɵɵComponentDeclaration<BkScheduledDatePicker, "bk-scheduled-date-picker", never, { "timeFormat": { "alias": "timeFormat"; "required": false; }; "enableSeconds": { "alias": "enableSeconds"; "required": false; }; }, { "scheduled": "scheduled"; "cleared": "cleared"; }, never, never, true, never>;
345
354
  }
346
355
 
347
- declare class BkTimePicker implements OnInit, OnChanges, AfterViewInit {
348
- value: string;
356
+ declare class BkTimePicker implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor {
357
+ required: boolean;
358
+ /** @deprecated Prefer [(ngModel)]. When ngModel is not used, this sets the initial/current time. */
359
+ value: string | null;
349
360
  label: string;
350
361
  placeholder: string;
362
+ clearable: boolean;
351
363
  position: 'left' | 'right';
352
364
  pickerId: string;
353
365
  closePicker: number;
354
366
  timeFormat: 12 | 24;
355
367
  showSeconds: boolean;
356
- timeChange: EventEmitter<string>;
368
+ change: EventEmitter<string | null>;
369
+ /** Alias for (change) for backward compatibility */
370
+ timeChange: EventEmitter<string | null>;
357
371
  pickerOpened: EventEmitter<string>;
358
372
  pickerClosed: EventEmitter<string>;
373
+ /** CVA: called when the control value is set (e.g. ngModel or programmatic) */
374
+ private onChange;
375
+ /** CVA: called when the control is touched (blur / close picker) */
376
+ private onTouched;
377
+ disabled: boolean;
359
378
  timeScrollElements: QueryList<ElementRef>;
379
+ minuteScrollElements: QueryList<ElementRef>;
380
+ secondScrollElements: QueryList<ElementRef>;
381
+ /** Cyclic wheel: item height and cycle size (0-59). Middle block starts at CYCLE_SIZE * ITEM_HEIGHT */
382
+ private readonly ITEM_HEIGHT;
383
+ private readonly WHEEL_CYCLE;
384
+ private readonly MIDDLE_OFFSET;
385
+ private readonly VIEWPORT_HEIGHT;
386
+ /** Repeated 0-59 for infinite scroll (minutes and seconds) */
387
+ wheelMinutes: number[];
388
+ wheelSeconds: number[];
360
389
  showPicker: boolean;
361
390
  currentHour: number;
362
391
  currentMinute: number;
363
392
  currentAMPM: string;
364
393
  currentSecond: number;
394
+ /** When null, input shows placeholder; otherwise the selected time string. */
395
+ private _modelValue;
365
396
  brickclayIcons: {
366
397
  readonly arrowleft: "assets/icons/chevron-left.svg";
367
398
  readonly arrowRight: "assets/icons/chevron-right.svg";
368
399
  readonly calenderIcon: "assets/icons/calender.svg";
369
400
  readonly timerIcon: "assets/icons/timer.svg";
370
401
  };
402
+ writeValue(value: string | null): void;
403
+ registerOnChange(fn: (value: string | null) => void): void;
404
+ registerOnTouched(fn: () => void): void;
405
+ setDisabledState(isDisabled: boolean): void;
406
+ /** Display string for the input; empty when value is null. */
407
+ getDisplayValue(): string;
408
+ /** True when a time is selected (show clear button). */
409
+ get hasValue(): boolean;
410
+ /** Reset dropdown to default time (used when opening with null value). 12h → 12:00 PM, 24h → 00:00 */
411
+ private setDefaultsForDropdown;
412
+ /** Clear the time value and notify CVA. */
413
+ clear(): void;
414
+ /** Call when control loses focus or picker closes (for CVA touched state). */
415
+ markAsTouched(): void;
371
416
  ngOnInit(): void;
372
417
  ngAfterViewInit(): void;
373
- parseTimeValue(): void;
418
+ /** @param timeStr Optional; when not provided uses this.value (from @Input). Empty/null sets defaults. */
419
+ parseTimeValue(timeStr?: string | null): void;
374
420
  getHours(): number[];
375
421
  getMinutes(): number[];
376
422
  getSeconds(): number[];
@@ -389,12 +435,19 @@ declare class BkTimePicker implements OnInit, OnChanges, AfterViewInit {
389
435
  onAMPMChange(ampm: string): void;
390
436
  updateTime(): void;
391
437
  scrollToSelectedTimes(): void;
438
+ /** Position wheel so the selected value is at the top of the viewport. */
439
+ private initMinuteWheelScroll;
440
+ private initSecondWheelScroll;
441
+ /** Scroll position -> value 0-59 (value at top of viewport). Recenter when in first or third block. */
442
+ private wheelScrollToValue;
443
+ onMinuteWheelScroll(): void;
444
+ onSecondWheelScroll(): void;
392
445
  onDocumentClick(event: MouseEvent): void;
393
446
  private previousCloseCounter;
394
447
  ngOnChanges(changes: SimpleChanges): void;
395
448
  onInputKeydown(event: KeyboardEvent): void;
396
449
  static ɵfac: i0.ɵɵFactoryDeclaration<BkTimePicker, never>;
397
- static ɵcmp: i0.ɵɵComponentDeclaration<BkTimePicker, "bk-time-picker", never, { "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "position": { "alias": "position"; "required": false; }; "pickerId": { "alias": "pickerId"; "required": false; }; "closePicker": { "alias": "closePicker"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "showSeconds": { "alias": "showSeconds"; "required": false; }; }, { "timeChange": "timeChange"; "pickerOpened": "pickerOpened"; "pickerClosed": "pickerClosed"; }, never, never, true, never>;
450
+ static ɵcmp: i0.ɵɵComponentDeclaration<BkTimePicker, "bk-time-picker", never, { "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "position": { "alias": "position"; "required": false; }; "pickerId": { "alias": "pickerId"; "required": false; }; "closePicker": { "alias": "closePicker"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "showSeconds": { "alias": "showSeconds"; "required": false; }; }, { "change": "change"; "timeChange": "timeChange"; "pickerOpened": "pickerOpened"; "pickerClosed": "pickerClosed"; }, never, never, true, never>;
398
451
  }
399
452
 
400
453
  /**
@@ -635,6 +688,7 @@ interface TableColumn<T = any> {
635
688
  /** show / hide both th + td */
636
689
  visible?: boolean;
637
690
  actions?: TableAction[] | ((row: T) => TableAction[]);
691
+ checkbox?: boolean;
638
692
  }
639
693
  interface TableAction<T = any> {
640
694
  name: string;
@@ -669,6 +723,9 @@ declare class BkGrid<T = any> {
669
723
  result: T[];
670
724
  actions: TableAction<T>[] | ((row: T) => TableAction<T>[]);
671
725
  customClass: string;
726
+ change: EventEmitter<{
727
+ row: T;
728
+ }>;
672
729
  actionClick: EventEmitter<{
673
730
  action: string;
674
731
  row: T;
@@ -686,6 +743,8 @@ declare class BkGrid<T = any> {
686
743
  sort(column: TableColumn<T>, index: number): void;
687
744
  isColumnVisible(column: TableColumn<T>): boolean;
688
745
  getCellValue(row: T, column: TableColumn<T>): string;
746
+ getCheckboxValue(row: T, column: TableColumn<T>): boolean;
747
+ setCheckboxValue(row: T, column: TableColumn<T>, value: boolean): void;
689
748
  getBadge(row: T, column: TableColumn<T>): TableBadge | undefined;
690
749
  getIcons(row: T, column: TableColumn<T>): TableIcon[];
691
750
  getRowActions(row: T, column?: TableColumn<T>): TableAction<T>[];
@@ -696,7 +755,7 @@ declare class BkGrid<T = any> {
696
755
  onDragMoved(event: CdkDragMove<any>): void;
697
756
  onDragStart(event: CdkDragStart<any>): void;
698
757
  static ɵfac: i0.ɵɵFactoryDeclaration<BkGrid<any>, never>;
699
- static ɵcmp: i0.ɵɵComponentDeclaration<BkGrid<any>, "bk-grid", never, { "draggable": { "alias": "draggable"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "result": { "alias": "result"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; }, { "actionClick": "actionClick"; "sortChange": "sortChange"; "dragDropChange": "dragDropChange"; }, never, never, true, never>;
758
+ static ɵcmp: i0.ɵɵComponentDeclaration<BkGrid<any>, "bk-grid", never, { "draggable": { "alias": "draggable"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "result": { "alias": "result"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; }, { "change": "change"; "actionClick": "actionClick"; "sortChange": "sortChange"; "dragDropChange": "dragDropChange"; }, never, never, true, never>;
700
759
  }
701
760
 
702
761
  declare class BkSelect implements ControlValueAccessor {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brickclay-org/ui",
3
- "version": "0.0.83",
3
+ "version": "0.0.85",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-add": {
6
6
  "save": "dependencies"
@@ -35,7 +35,7 @@
35
35
  }
36
36
 
37
37
  .btn-icon.primary {
38
- @apply border-0
38
+ @apply border-0;
39
39
  }
40
40
 
41
41
  /* --- SIZES (Square Dimensions) --- */