@guildofgleks/ui 21.3.0 → 21.3.1

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.
@@ -85,6 +85,8 @@ type GogTabsAlign = 'start' | 'center' | 'end' | 'stretch';
85
85
  type GogDateSelectionMode = 'single' | 'range';
86
86
  /** Clock convention for `gog-datepicker`'s time section. */
87
87
  type GogHourFormat = '12' | '24';
88
+ /** Matches the native CSS `resize` value space, applied to `gog-textarea`'s field. */
89
+ type GogTextareaResize = 'vertical' | 'horizontal' | 'both' | 'none';
88
90
 
89
91
  declare class ButtonComponent {
90
92
  variant: _angular_core.InputSignal<GogVariant>;
@@ -739,6 +741,13 @@ declare class AutocompleteComponent<TOption = GogDropdownOption, TValue = string
739
741
  readonly filterLocal: _angular_core.InputSignal<boolean>;
740
742
  /** How many characters before the panel opens at all. */
741
743
  readonly minLength: _angular_core.InputSignal<number | undefined>;
744
+ /**
745
+ * Whether focusing the field opens the panel immediately, showing the full option list —
746
+ * before `minLength` would otherwise have let anything through. Off, the field behaves as
747
+ * before: nothing opens until enough has been typed. Unset, falls back to
748
+ * `GOG_CONFIG.autocomplete.openOnFocus`, then to `true`.
749
+ */
750
+ readonly openOnFocus: _angular_core.InputSignal<boolean | undefined>;
742
751
  /** Milliseconds of quiet before `gogSearch` fires. `0` emits on every keystroke. */
743
752
  readonly searchDebounce: _angular_core.InputSignal<number | undefined>;
744
753
  /** Shows a spinner in the trailing slot — for a server-backed source that is still loading. */
@@ -759,6 +768,12 @@ declare class AutocompleteComponent<TOption = GogDropdownOption, TValue = string
759
768
  readonly forceSelection: _angular_core.InputSignal<boolean>;
760
769
  /** The current query, debounced. Wire a server-side lookup to this. */
761
770
  readonly gogSearch: _angular_core.OutputEmitterRef<string>;
771
+ /**
772
+ * Fires when the panel is scrolled to the end of the option list — the signal to fetch and
773
+ * append another page of a large or server-backed source, rather than handing the whole
774
+ * thing over up front. Forwarded from the panel's own `gog-scroll`.
775
+ */
776
+ readonly gogLoadMore: _angular_core.OutputEmitterRef<void>;
762
777
  protected readonly panelTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
763
778
  /** A cleared autocomplete is `null`, whatever `TValue` the consumer bound. */
764
779
  protected readonly emptyValue: TValue;
@@ -780,8 +795,17 @@ declare class AutocompleteComponent<TOption = GogDropdownOption, TValue = string
780
795
  protected optionId(index: number): string;
781
796
  protected readonly resolvedMinLength: _angular_core.Signal<number>;
782
797
  private readonly resolvedDebounce;
798
+ protected readonly resolvedOpenOnFocus: _angular_core.Signal<boolean>;
783
799
  /** What is actually in the `<input>`. Not the same thing as the committed `value`. */
784
800
  protected readonly query: _angular_core.WritableSignal<string>;
801
+ /**
802
+ * True right after `openOnFocus` opens the panel, until the user actually types. The field
803
+ * may already be showing a previously-selected label at that point — this keeps the panel's
804
+ * list unfiltered by it, so focusing shows every option rather than just the one that
805
+ * happens to match the current text. Cleared on the first keystroke, so filtering resumes
806
+ * exactly as before.
807
+ */
808
+ protected readonly browsingAll: _angular_core.WritableSignal<boolean>;
785
809
  /**
786
810
  * Which option the arrows have highlighted. `-1` means none — Enter then does nothing rather
787
811
  * than committing whichever row happened to be first, which is what stops a fast typist from
@@ -829,7 +853,7 @@ declare class AutocompleteComponent<TOption = GogDropdownOption, TValue = string
829
853
  private scheduleSearch;
830
854
  private cancelPendingSearch;
831
855
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutocompleteComponent<any, any>, never>;
832
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutocompleteComponent<any, any>, "gog-autocomplete", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterLocal": { "alias": "filterLocal"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "searchDebounce": { "alias": "searchDebounce"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "forceSelection": { "alias": "forceSelection"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "gogSearch": "gogSearch"; }, never, never, true, never>;
856
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutocompleteComponent<any, any>, "gog-autocomplete", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterLocal": { "alias": "filterLocal"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; "isSignal": true; }; "searchDebounce": { "alias": "searchDebounce"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "forceSelection": { "alias": "forceSelection"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "gogSearch": "gogSearch"; "gogLoadMore": "gogLoadMore"; }, never, never, true, never>;
833
857
  }
834
858
 
835
859
  /**
@@ -885,7 +909,7 @@ declare class GogBadgeDirective {
885
909
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GogBadgeDirective, "[gogBadge]", never, { "gogBadge": { "alias": "gogBadge"; "required": false; "isSignal": true; }; "badgePosition": { "alias": "badgePosition"; "required": false; "isSignal": true; }; "badgeVariant": { "alias": "badgeVariant"; "required": false; "isSignal": true; }; "badgeDot": { "alias": "badgeDot"; "required": false; "isSignal": true; }; "badgeMax": { "alias": "badgeMax"; "required": false; "isSignal": true; }; "badgeHidden": { "alias": "badgeHidden"; "required": false; "isSignal": true; }; "badgeAriaLabel": { "alias": "badgeAriaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
886
910
  }
887
911
 
888
- type GogIconName = 'check' | 'close' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'calendar' | 'clock' | 'sort' | 'sort-up' | 'sort-down' | 'success' | 'error' | 'warning' | 'info' | 'checkbox' | 'checkbox-checked' | 'eye' | 'eye-off';
912
+ type GogIconName = 'check' | 'close' | 'chevron-up' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'calendar' | 'clock' | 'sort' | 'sort-up' | 'sort-down' | 'success' | 'error' | 'warning' | 'info' | 'checkbox' | 'checkbox-checked' | 'eye' | 'eye-off' | 'copy';
889
913
  declare const ICON_DEFS: Record<GogIconName, string>;
890
914
 
891
915
  declare class IconComponent {
@@ -1132,6 +1156,26 @@ declare class TabsComponent implements GogTabsState {
1132
1156
  readonly size: _angular_core.InputSignal<GogSize>;
1133
1157
  readonly fullWidth: _angular_core.InputSignal<boolean>;
1134
1158
  readonly ariaLabel: _angular_core.InputSignal<string>;
1159
+ /**
1160
+ * Whether selecting a tab scrolls the (possibly overflowing) header row so the active tab
1161
+ * stays in view — centered where there's room, so its neighbours on both sides stay visible
1162
+ * too, the same "always show what's around the current position" idea `gog-paginator` uses
1163
+ * for pages. Reacts to `activeIndex` however it changes: a click, the arrow keys, or a
1164
+ * consumer setting it directly. On by default; turn it off for a header that never actually
1165
+ * overflows, or to own the scroll position yourself.
1166
+ */
1167
+ readonly scrollActiveIntoView: _angular_core.InputSignal<boolean>;
1168
+ /**
1169
+ * Whether the header row shows its own draggable scroll thumb/track. Native scrolling
1170
+ * (wheel, touch, keyboard) works the same regardless; this is purely the visual affordance.
1171
+ *
1172
+ * Unset, it follows `scrollActiveIntoView`: hidden while that's on, since a second scroll
1173
+ * indicator sitting right next to the active-tab underline reads as two conflicting signals
1174
+ * for the same thing once selecting a tab already moves the row on its own; shown while it's
1175
+ * off, since the track is then the only way to reach an off-screen tab without a keyboard.
1176
+ * Set explicitly to pin it either way regardless of `scrollActiveIntoView`.
1177
+ */
1178
+ readonly showScrollTrack: _angular_core.InputSignal<boolean | undefined>;
1135
1179
  /** Emits the newly active index whenever it changes, including via keyboard. */
1136
1180
  readonly gogTabChange: _angular_core.OutputEmitterRef<number>;
1137
1181
  protected readonly headerSlot: _angular_core.Signal<GogTabHeaderDirective | undefined>;
@@ -1144,6 +1188,13 @@ declare class TabsComponent implements GogTabsState {
1144
1188
  protected readonly resolvedIndex: _angular_core.Signal<number>;
1145
1189
  /** Read by each `gog-tab` through `GOG_TABS_STATE`; see `tabs-state.ts`. */
1146
1190
  readonly activeTab: _angular_core.Signal<TabComponent | null>;
1191
+ /** See `showScrollTrack`'s doc for why this defaults off precisely when the other is on. */
1192
+ protected readonly resolvedShowScrollTrack: _angular_core.Signal<boolean>;
1193
+ private readonly isBrowser;
1194
+ /** Instant for the first scroll (page load shouldn't animate into place), smooth after. */
1195
+ private hasScrolledOnce;
1196
+ constructor();
1197
+ private prefersReducedMotion;
1147
1198
  protected readonly hostClasses: _angular_core.Signal<string>;
1148
1199
  protected selectIndex(index: number): void;
1149
1200
  protected headerContext(tab: TabComponent, index: number): GogTabHeaderContext;
@@ -1154,7 +1205,7 @@ declare class TabsComponent implements GogTabsState {
1154
1205
  */
1155
1206
  protected onHeaderKeydown(event: KeyboardEvent): void;
1156
1207
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsComponent, never>;
1157
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "gog-tabs", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "gogTabChange": "gogTabChange"; }, ["tabs", "headerSlot"], ["*"], true, never>;
1208
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "gog-tabs", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "scrollActiveIntoView": { "alias": "scrollActiveIntoView"; "required": false; "isSignal": true; }; "showScrollTrack": { "alias": "showScrollTrack"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "gogTabChange": "gogTabChange"; }, ["tabs", "headerSlot"], ["*"], true, never>;
1158
1209
  }
1159
1210
 
1160
1211
  /**
@@ -2086,6 +2137,20 @@ declare class InputfieldComponent implements ControlValueAccessor, DoCheck {
2086
2137
  readonly max: _angular_core.InputSignal<number | null>;
2087
2138
  /** Only applied when `type="number"`. */
2088
2139
  readonly step: _angular_core.InputSignal<number | null>;
2140
+ /**
2141
+ * Whether a `type="number"` field shows the library's own increment/decrement buttons in
2142
+ * place of the browser's native (and inconsistently-styled across platforms) spin glyphs.
2143
+ * The native glyphs are always hidden on a number field regardless of this — off just means
2144
+ * no stepper UI at all, not a fallback to the native one. Arrow-key stepping on the focused
2145
+ * field keeps working either way; that's native `<input type="number">` behaviour, unrelated
2146
+ * to which glyphs are visible. Unset, falls back to `GOG_CONFIG.inputfield.showSpinButtons`,
2147
+ * then to `true`.
2148
+ */
2149
+ readonly showSpinButtons: _angular_core.InputSignal<boolean | undefined>;
2150
+ /** aria-label for the number field's increment button. */
2151
+ readonly incrementLabel: _angular_core.InputSignal<string>;
2152
+ /** aria-label for the number field's decrement button. */
2153
+ readonly decrementLabel: _angular_core.InputSignal<string>;
2089
2154
  readonly errorMessage: _angular_core.InputSignal<string>;
2090
2155
  /**
2091
2156
  * See `GogErrorDisplay`. Unset, falls back to `GOG_CONFIG.control.errorDisplay`, then to
@@ -2169,9 +2234,15 @@ declare class InputfieldComponent implements ControlValueAccessor, DoCheck {
2169
2234
  * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.
2170
2235
  */
2171
2236
  protected readonly sizeClass: _angular_core.Signal<string>;
2237
+ protected readonly resolvedShowSpinButtons: _angular_core.Signal<boolean>;
2172
2238
  protected readonly isDisabled: _angular_core.Signal<boolean>;
2173
2239
  protected readonly isPasswordField: _angular_core.Signal<boolean>;
2174
2240
  protected readonly isNumberField: _angular_core.Signal<boolean>;
2241
+ protected readonly hasSpinButtons: _angular_core.Signal<boolean>;
2242
+ /** Current field value as a number, or `null` while empty. */
2243
+ private readonly numericValue;
2244
+ protected readonly isAtMin: _angular_core.Signal<boolean>;
2245
+ protected readonly isAtMax: _angular_core.Signal<boolean>;
2175
2246
  protected readonly effectiveType: _angular_core.Signal<"number" | "text" | "password" | "email" | "date">;
2176
2247
  protected readonly effectiveAutocomplete: _angular_core.Signal<string>;
2177
2248
  protected readonly hasError: _angular_core.Signal<boolean>;
@@ -2211,12 +2282,14 @@ declare class InputfieldComponent implements ControlValueAccessor, DoCheck {
2211
2282
  protected onIconStartClick(): void;
2212
2283
  protected onIconEndClick(): void;
2213
2284
  onInput(event: Event): void;
2285
+ /** Increments (`direction: 1`) or decrements (`direction: -1`) by `step`, clamped to min/max. */
2286
+ protected stepValue(direction: 1 | -1): void;
2214
2287
  /** Clears the field and notifies any attached form, then returns focus to the input. */
2215
2288
  protected clearValue(event: Event): void;
2216
2289
  onFocus(): void;
2217
2290
  onBlur(): void;
2218
2291
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputfieldComponent, never>;
2219
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputfieldComponent, "gog-inputfield", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errorDisplay": { "alias": "errorDisplay"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "iconStartTemplate": { "alias": "iconStartTemplate"; "required": false; "isSignal": true; }; "iconEndTemplate": { "alias": "iconEndTemplate"; "required": false; "isSignal": true; }; "iconStartFn": { "alias": "iconStartFn"; "required": false; "isSignal": true; }; "iconEndFn": { "alias": "iconEndFn"; "required": false; "isSignal": true; }; "iconStartLabel": { "alias": "iconStartLabel"; "required": false; "isSignal": true; }; "iconEndLabel": { "alias": "iconEndLabel"; "required": false; "isSignal": true; }; "showPasswordLabel": { "alias": "showPasswordLabel"; "required": false; "isSignal": true; }; "hidePasswordLabel": { "alias": "hidePasswordLabel"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "floatLabelShowPlaceholder": { "alias": "floatLabelShowPlaceholder"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["addonStart", "addonEnd"], ["[gogInputAddonStart]", "[gogInputAddonEnd]"], true, never>;
2292
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputfieldComponent, "gog-inputfield", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "showSpinButtons": { "alias": "showSpinButtons"; "required": false; "isSignal": true; }; "incrementLabel": { "alias": "incrementLabel"; "required": false; "isSignal": true; }; "decrementLabel": { "alias": "decrementLabel"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errorDisplay": { "alias": "errorDisplay"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "iconStart": { "alias": "iconStart"; "required": false; "isSignal": true; }; "iconEnd": { "alias": "iconEnd"; "required": false; "isSignal": true; }; "iconStartTemplate": { "alias": "iconStartTemplate"; "required": false; "isSignal": true; }; "iconEndTemplate": { "alias": "iconEndTemplate"; "required": false; "isSignal": true; }; "iconStartFn": { "alias": "iconStartFn"; "required": false; "isSignal": true; }; "iconEndFn": { "alias": "iconEndFn"; "required": false; "isSignal": true; }; "iconStartLabel": { "alias": "iconStartLabel"; "required": false; "isSignal": true; }; "iconEndLabel": { "alias": "iconEndLabel"; "required": false; "isSignal": true; }; "showPasswordLabel": { "alias": "showPasswordLabel"; "required": false; "isSignal": true; }; "hidePasswordLabel": { "alias": "hidePasswordLabel"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "floatLabelShowPlaceholder": { "alias": "floatLabelShowPlaceholder"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["addonStart", "addonEnd"], ["[gogInputAddonStart]", "[gogInputAddonEnd]"], true, never>;
2220
2293
  }
2221
2294
 
2222
2295
  declare class TextareaComponent implements ControlValueAccessor, DoCheck {
@@ -2235,6 +2308,14 @@ declare class TextareaComponent implements ControlValueAccessor, DoCheck {
2235
2308
  readonly size: _angular_core.InputSignal<GogSize | undefined>;
2236
2309
  /** Native `rows` attribute, controlling the field's initial height. */
2237
2310
  readonly rows: _angular_core.InputSignal<number>;
2311
+ /**
2312
+ * Which direction(s) the field's own drag handle resizes it in — matches the native CSS
2313
+ * `resize` value space (`'vertical'`, `'horizontal'`, `'both'`, `'none'`). Unset, falls back
2314
+ * to `GOG_CONFIG.textarea.resize`, then to `'vertical'`, matching a plain `<textarea>`. The
2315
+ * handle itself is restyled to be more visible than the browser's default glyph; `'none'`
2316
+ * removes it entirely.
2317
+ */
2318
+ readonly resize: _angular_core.InputSignal<GogTextareaResize | undefined>;
2238
2319
  /**
2239
2320
  * Full width of the container by default, matching every other field-style control.
2240
2321
  * Set to `false` to shrink the field to fit its content instead.
@@ -2255,9 +2336,11 @@ declare class TextareaComponent implements ControlValueAccessor, DoCheck {
2255
2336
  readonly value: _angular_core.ModelSignal<string>;
2256
2337
  private readonly ngControl;
2257
2338
  private readonly globalConfig;
2339
+ private readonly destroyRef;
2258
2340
  private readonly cvaDisabled;
2259
2341
  /** Instance input → `GOG_CONFIG` → the component's own default. See `resolveConfigured`. */
2260
2342
  protected readonly resolvedSize: _angular_core.Signal<GogSize>;
2343
+ protected readonly resolvedResize: _angular_core.Signal<GogTextareaResize>;
2261
2344
  private readonly resolvedErrorDisplay;
2262
2345
  private readonly errorState;
2263
2346
  /** Set from `(focus)`/`(blur)` on the `<textarea>` — see `onFocus`/`onBlur`. */
@@ -2272,6 +2355,15 @@ declare class TextareaComponent implements ControlValueAccessor, DoCheck {
2272
2355
  * isn't scrolling, which shifts the resting layout of every textarea.
2273
2356
  */
2274
2357
  protected readonly scrollbarWidth: _angular_core.WritableSignal<number>;
2358
+ /**
2359
+ * How far the field's own right/bottom edge currently sits from its container's — 0 unless
2360
+ * the user has dragged the resize handle to make the field narrower/shorter than its
2361
+ * container. The resize grip is anchored to the container (a `<textarea>` can't reliably
2362
+ * host `::after`), so without this it stays put at the container's original corner instead
2363
+ * of following the field's own as it's resized.
2364
+ */
2365
+ protected readonly resizeInsetRight: _angular_core.WritableSignal<number>;
2366
+ protected readonly resizeInsetBottom: _angular_core.WritableSignal<number>;
2275
2367
  /**
2276
2368
  * The single size modifier, replacing one `[class.gog-input-wrapper--<size>]` binding per size.
2277
2369
  * Empty for `'md'`: that is this component's default size and has no modifier rule of its own — every `gog-input-wrapper--*` chain bottoms out at it.
@@ -2302,7 +2394,7 @@ declare class TextareaComponent implements ControlValueAccessor, DoCheck {
2302
2394
  onFocus(): void;
2303
2395
  onBlur(): void;
2304
2396
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
2305
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "gog-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errorDisplay": { "alias": "errorDisplay"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "floatLabelShowPlaceholder": { "alias": "floatLabelShowPlaceholder"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
2397
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "gog-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errorDisplay": { "alias": "errorDisplay"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "floatLabelShowPlaceholder": { "alias": "floatLabelShowPlaceholder"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
2306
2398
  }
2307
2399
 
2308
2400
  declare class ChipComponent {
@@ -2651,6 +2743,17 @@ declare class ScrollComponent {
2651
2743
  * for what each value does.
2652
2744
  */
2653
2745
  readonly overscrollBehavior: _angular_core.InputSignal<GogScrollOverscrollBehavior | undefined>;
2746
+ /**
2747
+ * Whether the overlay thumb/track ever renders. Native scrolling — wheel, touch, keyboard,
2748
+ * focus-into-view, and any programmatic `scrollTo`/`scrollIntoView` — keeps working exactly
2749
+ * the same either way; this only controls the visual affordance, not `overflow` or scroll
2750
+ * containment (see `viewportOverflowY`/`X`). Off suits a viewport whose *position* is already
2751
+ * driven some other way — `gog-tabs`' `scrollActiveIntoView` is the case this exists for,
2752
+ * where a second, independent scroll indicator next to the active-tab underline reads as two
2753
+ * conflicting signals for the same thing. Unset, falls back to `GOG_CONFIG.scroll.showTrack`,
2754
+ * then to `true`.
2755
+ */
2756
+ readonly showTrack: _angular_core.InputSignal<boolean | undefined>;
2654
2757
  readonly gogScroll: _angular_core.OutputEmitterRef<GogScrollMetrics>;
2655
2758
  readonly gogReachStart: _angular_core.OutputEmitterRef<GogScrollDirection>;
2656
2759
  readonly gogReachEnd: _angular_core.OutputEmitterRef<GogScrollDirection>;
@@ -2686,6 +2789,7 @@ declare class ScrollComponent {
2686
2789
  protected readonly resolvedAutoHide: _angular_core.Signal<boolean>;
2687
2790
  protected readonly resolvedHideDelay: _angular_core.Signal<number>;
2688
2791
  protected readonly resolvedOverscrollBehavior: _angular_core.Signal<GogScrollOverscrollBehavior>;
2792
+ protected readonly resolvedShowTrack: _angular_core.Signal<boolean>;
2689
2793
  /**
2690
2794
  * Only applies `resolvedOverscrollBehavior` on an axis that's actually acting as a scroll
2691
2795
  * container — on an axis that's `visible` (see viewportOverflowY/X above) there is no
@@ -2732,7 +2836,7 @@ declare class ScrollComponent {
2732
2836
  private measure;
2733
2837
  private checkReach;
2734
2838
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollComponent, never>;
2735
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollComponent, "gog-scroll", never, { "axis": { "alias": "axis"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "autoHide": { "alias": "autoHide"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; "reachThreshold": { "alias": "reachThreshold"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "overscrollBehavior": { "alias": "overscrollBehavior"; "required": false; "isSignal": true; }; }, { "gogScroll": "gogScroll"; "gogReachStart": "gogReachStart"; "gogReachEnd": "gogReachEnd"; }, never, ["*"], true, never>;
2839
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollComponent, "gog-scroll", never, { "axis": { "alias": "axis"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "autoHide": { "alias": "autoHide"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; "reachThreshold": { "alias": "reachThreshold"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "overscrollBehavior": { "alias": "overscrollBehavior"; "required": false; "isSignal": true; }; "showTrack": { "alias": "showTrack"; "required": false; "isSignal": true; }; }, { "gogScroll": "gogScroll"; "gogReachStart": "gogReachStart"; "gogReachEnd": "gogReachEnd"; }, never, ["*"], true, never>;
2736
2840
  }
2737
2841
 
2738
2842
  declare class SpinnerOverlayComponent {
@@ -3067,6 +3171,11 @@ interface GogGlobalConfig {
3067
3171
  hideDelay?: number;
3068
3172
  size?: GogScrollSize;
3069
3173
  overscrollBehavior?: GogScrollOverscrollBehavior;
3174
+ /**
3175
+ * Whether the overlay thumb/track ever renders. Scrolling itself is unaffected either way
3176
+ * — this is purely the visual affordance. Defaults to `true`.
3177
+ */
3178
+ showTrack?: boolean;
3070
3179
  };
3071
3180
  button?: {
3072
3181
  debounce?: number;
@@ -3152,6 +3261,27 @@ interface GogGlobalConfig {
3152
3261
  searchDebounce?: number;
3153
3262
  /** How many characters before the panel opens at all. */
3154
3263
  minLength?: number;
3264
+ /**
3265
+ * Whether focusing the field opens the panel immediately, showing the full option list.
3266
+ * Defaults to `true`.
3267
+ */
3268
+ openOnFocus?: boolean;
3269
+ };
3270
+ /** Applies to `gog-inputfield`. */
3271
+ inputfield?: {
3272
+ /**
3273
+ * Whether a `type="number"` field shows the library's own spin buttons in place of the
3274
+ * browser's native ones. Defaults to `true`.
3275
+ */
3276
+ showSpinButtons?: boolean;
3277
+ };
3278
+ /** Applies to `gog-textarea`. */
3279
+ textarea?: {
3280
+ /**
3281
+ * Which direction(s) the field's own drag handle resizes it in — matches the native CSS
3282
+ * `resize` value space. Defaults to `'vertical'`.
3283
+ */
3284
+ resize?: GogTextareaResize;
3155
3285
  };
3156
3286
  toast?: {
3157
3287
  position?: ToastPosition;
@@ -3277,4 +3407,4 @@ declare const GOG_TOKEN_GROUPS: readonly GogTokenGroup[];
3277
3407
  type GogTooltipSide = 'top' | 'bottom' | 'left' | 'right';
3278
3408
 
3279
3409
  export { AccordionComponent, AutocompleteComponent, ButtonComponent, ButtonToggleGroupComponent, CalendarComponent, CheckboxComponent, ChipComponent, CollapsibleComponent, Column, ConfirmationDialogComponent, DIALOG_DATA, DIALOG_REF, DatepickerComponent, DialogComponent, DialogService, DividerComponent, GOG_CONFIG, GOG_TABS_STATE, GOG_TOKEN_GROUPS, GogAccordionChevronDirective, GogAccordionContentDirective, GogAccordionHeaderDirective, GogBadgeDirective, GogButtonToggleOptionDirective, GogCheckboxIconDirective, GogCollapsibleContentDirective, GogCollapsibleTriggerDirective, GogColumn, GogColumnBodyDirective, GogColumnHeaderDirective, GogDropdownBase, GogDropdownChevronDirective, GogDropdownOptionDirective, GogFloatLabelState, GogInputAddonEndDirective, GogInputAddonStartDirective, GogMultiselectClearIconDirective, GogTabContentDirective, GogTabHeaderDirective, GogTagIconDirective, GogTooltipDirective, ICON_DEFS, IconComponent, InputfieldComponent, MultiselectComponent, PaginatorComponent, ProgressbarComponent, RadioGroupComponent, ScrollComponent, SelectComponent, SkeletonComponent, SliderComponent, SpinnerComponent, SpinnerOverlayComponent, TabComponent, TableComponent, TabsComponent, TagComponent, TemplateDirective, TextareaComponent, ThemeService, ToastComponent, ToastContainerComponent, ToastService, ToggleComponent, addDays, addMonths, addYears, buildMonthGrid, clampDate, copyTimeOnto, daysInMonth, defaultCompare, formatDate, getByPath, isAfterDay, isBeforeDay, isInRange, isSameDay, isSameMonth, isSameOptionValue, isWithinBounds, localeFirstDayOfWeek, monthNames, parseDate, provideGogConfig, readOption, resolveConfigured, startOfDay, weekdayNames, withTime };
3280
- export type { ConfirmDialogData, DialogConfig, DialogHandle, DialogRef, GogAccordionChevronContext, GogAccordionHeaderContext, GogAccordionItem, GogAccordionToggleEvent, GogBadgePosition, GogButtonToggleAppearance, GogButtonToggleOptionContext, GogCalendarDay, GogColumnBodyContext, GogColumnHeaderContext, GogDateRange, GogDateSelectionMode, GogDatepickerValue, GogDividerVariant, GogDropdownDirection, GogDropdownFilterPosition, GogDropdownOption, GogDropdownOptionContext, GogFloatLabelVariant, GogGlobalConfig, GogHourFormat, GogIconName, GogMultiselectOption, GogOptionAccessor, GogOrientation, GogPaginatorRangeMode, GogProgressbarMode, GogProgressbarVariant, GogRadioOption, GogScrollAxis, GogScrollMetrics, GogScrollOverscrollBehavior, GogScrollSize, GogSelectOption, GogSize, GogSkeletonAnimation, GogSkeletonShape, GogSliderOrientation, GogSpinnerVariant, GogTabHeaderContext, GogTableBodyContext, GogTableHeaderContext, GogTabsAlign, GogTabsState, GogTagShape, GogTagVariant, GogTokenGroup, GogTokenLayer, GogTokenName, GogTooltipPosition, GogTooltipSide, GogVariant, OpenDialog, SortDirection, Toast, ToastAction, ToastConfig, ToastPosition, ToastType };
3410
+ export type { ConfirmDialogData, DialogConfig, DialogHandle, DialogRef, GogAccordionChevronContext, GogAccordionHeaderContext, GogAccordionItem, GogAccordionToggleEvent, GogBadgePosition, GogButtonToggleAppearance, GogButtonToggleOptionContext, GogCalendarDay, GogColumnBodyContext, GogColumnHeaderContext, GogDateRange, GogDateSelectionMode, GogDatepickerValue, GogDividerVariant, GogDropdownDirection, GogDropdownFilterPosition, GogDropdownOption, GogDropdownOptionContext, GogFloatLabelVariant, GogGlobalConfig, GogHourFormat, GogIconName, GogMultiselectOption, GogOptionAccessor, GogOrientation, GogPaginatorRangeMode, GogProgressbarMode, GogProgressbarVariant, GogRadioOption, GogScrollAxis, GogScrollMetrics, GogScrollOverscrollBehavior, GogScrollSize, GogSelectOption, GogSize, GogSkeletonAnimation, GogSkeletonShape, GogSliderOrientation, GogSpinnerVariant, GogTabHeaderContext, GogTableBodyContext, GogTableHeaderContext, GogTabsAlign, GogTabsState, GogTagShape, GogTagVariant, GogTextareaResize, GogTokenGroup, GogTokenLayer, GogTokenName, GogTooltipPosition, GogTooltipSide, GogVariant, OpenDialog, SortDirection, Toast, ToastAction, ToastConfig, ToastPosition, ToastType };