@koobiq/components-experimental 18.5.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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/esm2022/form-field/cleaner.mjs +47 -0
  4. package/esm2022/form-field/form-field.mjs +235 -0
  5. package/esm2022/form-field/form-field.module.mjs +56 -0
  6. package/esm2022/form-field/hint.mjs +157 -0
  7. package/esm2022/form-field/index.mjs +2 -0
  8. package/esm2022/form-field/koobiq-components-experimental-form-field.mjs +5 -0
  9. package/esm2022/form-field/label.mjs +26 -0
  10. package/esm2022/form-field/password-toggle.mjs +65 -0
  11. package/esm2022/form-field/prefix.mjs +18 -0
  12. package/esm2022/form-field/public-api.mjs +10 -0
  13. package/esm2022/form-field/stepper.mjs +82 -0
  14. package/esm2022/form-field/suffix.mjs +18 -0
  15. package/esm2022/index.mjs +2 -0
  16. package/esm2022/koobiq-components-experimental.mjs +5 -0
  17. package/esm2022/public-api.mjs +2 -0
  18. package/fesm2022/koobiq-components-experimental-form-field.mjs +668 -0
  19. package/fesm2022/koobiq-components-experimental-form-field.mjs.map +1 -0
  20. package/fesm2022/koobiq-components-experimental.mjs +4 -0
  21. package/fesm2022/koobiq-components-experimental.mjs.map +1 -0
  22. package/form-field/README.md +0 -0
  23. package/form-field/_form-field-theme.scss +81 -0
  24. package/form-field/_hint-theme.scss +59 -0
  25. package/form-field/cleaner.d.ts +14 -0
  26. package/form-field/cleaner.scss +5 -0
  27. package/form-field/form-field-tokens.scss +63 -0
  28. package/form-field/form-field.d.ts +99 -0
  29. package/form-field/form-field.module.d.ts +14 -0
  30. package/form-field/form-field.scss +69 -0
  31. package/form-field/hint-tokens.scss +44 -0
  32. package/form-field/hint.d.ts +55 -0
  33. package/form-field/hint.scss +18 -0
  34. package/form-field/index.d.ts +1 -0
  35. package/form-field/label.d.ts +8 -0
  36. package/form-field/password-toggle.d.ts +16 -0
  37. package/form-field/password-toggle.scss +13 -0
  38. package/form-field/prefix.d.ts +6 -0
  39. package/form-field/public-api.d.ts +9 -0
  40. package/form-field/stepper.d.ts +14 -0
  41. package/form-field/stepper.scss +21 -0
  42. package/form-field/suffix.d.ts +6 -0
  43. package/index.d.ts +1 -0
  44. package/package.json +54 -0
  45. package/public-api.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koobiq-components-experimental-form-field.mjs","sources":["../../../packages/components-experimental/form-field/cleaner.ts","../../../packages/components-experimental/form-field/hint.ts","../../../packages/components-experimental/form-field/hint.html","../../../packages/components-experimental/form-field/label.ts","../../../packages/components-experimental/form-field/password-toggle.ts","../../../packages/components-experimental/form-field/prefix.ts","../../../packages/components-experimental/form-field/stepper.ts","../../../packages/components-experimental/form-field/suffix.ts","../../../packages/components-experimental/form-field/form-field.ts","../../../packages/components-experimental/form-field/form-field.html","../../../packages/components-experimental/form-field/form-field.module.ts","../../../packages/components-experimental/form-field/koobiq-components-experimental-form-field.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { KBQ_FORM_FIELD_REF } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqFormField } from './form-field';\n\n/**\n * KbqCleaner to be placed in end of the form field.\n * Resets form control by click.\n */\n@Component({\n standalone: true,\n imports: [KbqIconModule],\n selector: 'kbq-cleaner',\n exportAs: 'kbqCleaner',\n template: `\n <i\n [autoColor]=\"true\"\n kbq-icon-button=\"kbq-xmark-circle_16\"\n ></i>\n `,\n styleUrl: './cleaner.scss',\n host: {\n class: 'kbq-cleaner___EXPERIMENTAL',\n '(click)': 'clean($event)',\n '[style.visibility]': 'visible ? \"visible\" : \"hidden\"',\n '[attr.aria-hidden]': '!visible'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqCleaner {\n // @TODO fix types (#DS-2915)\n private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true }) as unknown as KbqFormField | undefined;\n\n /** Whether to display the cleaner. */\n get visible(): boolean {\n return !this.formField?.disabled && !!this.formField?.control?.ngControl?.value;\n }\n\n /** Clean the form field control. */\n protected clean(event: MouseEvent): void {\n event.stopPropagation();\n\n this.formField?.control?.ngControl?.reset();\n this.formField?.control?.focus();\n }\n}\n","import { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { KBQ_FORM_FIELD_REF, KbqComponentColors } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqFormField } from './form-field';\n\nlet nextUniqueId = 0;\n\n/** Hint text to be shown below the form field control. */\n@Component({\n standalone: true,\n selector: 'kbq-hint',\n exportAs: 'kbqHint',\n templateUrl: './hint.html',\n styleUrls: [\n './hint.scss',\n './hint-tokens.scss'\n ],\n host: {\n class: 'kbq-hint___EXPERIMENTAL',\n '[attr.id]': 'id',\n '[class.kbq-error]': 'color === colors.Error',\n '[class.kbq-contrast-fade]': 'color === colors.ContrastFade',\n '[class.kbq-success]': 'color === colors.Success',\n '[class.kbq-warning]': 'color === colors.Warning',\n '[class.kbq-hint_fill-text-off]': 'fillTextOff',\n '[class.kbq-hint_compact]': 'compact'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqHint {\n /** Unique ID for the hint. */\n @Input() id: string = `kbq-hint-${nextUniqueId++}`;\n\n /** Component colors */\n protected colors = KbqComponentColors;\n\n /** Hint color */\n @Input() set color(color: KbqComponentColors) {\n this._color = color;\n }\n\n get color(): KbqComponentColors | undefined {\n return this._color;\n }\n\n private _color: KbqComponentColors | undefined;\n\n /** Disables `color` for the hint text. */\n @Input({ transform: booleanAttribute }) set fillTextOff(fillTextOff: boolean) {\n this._fillTextOff = fillTextOff;\n }\n\n get fillTextOff(): boolean {\n return this._fillTextOff;\n }\n\n private _fillTextOff: boolean = false;\n\n /** Makes the hint size smaller. */\n @Input({ transform: booleanAttribute }) compact: boolean = false;\n}\n\n/** Error text to be shown below the form field control. */\n@Component({\n standalone: true,\n selector: 'kbq-error',\n exportAs: 'kbqError',\n templateUrl: './hint.html',\n styleUrls: [\n './hint.scss',\n './hint-tokens.scss'\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqError extends KbqHint {\n /** @docs-private */\n @Input() set color(_color: null) {}\n\n /** Overrides the hint `color` property. */\n get color(): KbqComponentColors.Error {\n return KbqComponentColors.Error;\n }\n\n /** @docs-private */\n @Input() set fillTextOff(_fillTextOff: null) {}\n\n /** Overrides the hint `fillTextOff` property. */\n get fillTextOff(): boolean {\n return false;\n }\n}\n\n/** Password hint to be shown below the password form field control. */\n@Component({\n standalone: true,\n imports: [NgClass, KbqIconModule],\n selector: 'kbq-password-hint',\n template: `\n <i\n [ngClass]=\"icon\"\n kbq-icon=\"\"\n ></i>\n\n <span class=\"kbq-hint_text\">\n <ng-content />\n </span>\n `,\n host: {\n class: 'kbq-password-hint___EXPERIMENTAL'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqPasswordHint extends KbqHint {\n /** Whether the form field control has an error. */\n @Input({ transform: booleanAttribute }) hasError: boolean = false;\n\n /** @docs-private */\n @Input() set fillTextOff(_fillTextOff: null) {}\n\n /** Overrides the hint `fillTextOff` property. */\n get fillTextOff(): boolean {\n return true;\n }\n\n // @TODO fix types (#DS-2915)\n private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true }) as unknown as KbqFormField | undefined;\n\n /** @docs-private */\n @Input() set color(_color: null) {}\n\n /** Overrides the hint `color` property. */\n get color(): KbqComponentColors {\n if (this.formField?.invalid && this.hasError) {\n return KbqComponentColors.Error;\n }\n\n if ((!this.formField?.invalid && !this.hasError) || !this.hasError) {\n return KbqComponentColors.Success;\n }\n\n return KbqComponentColors.ContrastFade;\n }\n\n /** The form field hint icon. */\n protected get icon(): string {\n return this.hasError ? 'kbq-xmark-s_16' : 'kbq-check-s_16';\n }\n}\n","<ng-content select=\"[kbq-icon]\" />\n\n<span class=\"kbq-hint_text\">\n <ng-content />\n</span>\n","import { Directive, Input } from '@angular/core';\n\nlet nextUniqueId = 0;\n\n/** Label for the form field. */\n@Directive({\n selector: 'kbq-label',\n standalone: true,\n host: {\n class: 'kbq-label___EXPERIMENTAL',\n '[attr.id]': 'id'\n }\n})\nexport class KbqLabel {\n /** Unique id for the label. */\n @Input() id: string = `kbq-label-${nextUniqueId++}`;\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { KBQ_FORM_FIELD_REF } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputPassword } from '@koobiq/components/input';\nimport { KbqFormField } from './form-field';\n\n/** @docs-private */\nconst getKbqPasswordToggleMissingControlError = (): Error => {\n return Error('kbq-password-toggle should use with kbqInputPassword');\n};\n\n/** Component which changes password visibility. */\n@Component({\n standalone: true,\n imports: [NgClass, KbqIconModule],\n selector: `kbq-password-toggle`,\n exportAs: 'kbqPasswordToggle',\n template: `\n <i\n [ngClass]=\"icon\"\n [autoColor]=\"true\"\n kbq-icon-button=\"\"\n ></i>\n `,\n styleUrl: './password-toggle.scss',\n host: {\n class: 'kbq-password-toggle___EXPERIMENTAL',\n\n '[style.visibility]': 'visible ? \"visible\" : \"hidden\"',\n '[attr.aria-hidden]': '!visible',\n\n '(click)': 'toggleType($event)',\n '(keydown.ENTER)': 'toggleType($event)',\n '(keydown.SPACE)': 'toggleType($event)'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPasswordToggle {\n // @TODO fix types (#DS-2915)\n private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true }) as unknown as KbqFormField | undefined;\n\n /** Form field password control. */\n protected get control(): KbqInputPassword {\n const control = this.formField?.control;\n if (!(control instanceof KbqInputPassword)) {\n throw getKbqPasswordToggleMissingControlError();\n }\n return control;\n }\n\n /** The icon selector. */\n protected get icon(): string {\n return this.control.elementType === 'password' ? 'kbq-eye_16' : 'kbq-eye-slash_16';\n }\n\n /** Whether to display the password toggle. */\n get visible(): boolean {\n return !this.formField?.disabled && !!this.control?.ngControl?.value;\n }\n\n /** Toggles the password visibility. */\n protected toggleType(event: KeyboardEvent | MouseEvent): void {\n event.stopPropagation();\n\n this.control.toggleType();\n }\n}\n","import { Directive } from '@angular/core';\n\n/** KbqPrefix to be placed in front of the form field. */\n@Directive({\n standalone: true,\n selector: '[kbqPrefix]',\n host: {\n class: 'kbq-prefix___EXPERIMENTAL'\n }\n})\nexport class KbqPrefix {}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { KBQ_FORM_FIELD_REF } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqNumberInput } from '@koobiq/components/input';\nimport { KbqFormField } from './form-field';\n\n/** @docs-private */\nconst getKbqStepperToggleMissingControlError = (): Error => {\n return Error('kbq-stepper should use with kbqNumberInput');\n};\n\n/** Component which allow to increment or decrement number value. */\n@Component({\n standalone: true,\n selector: 'kbq-stepper',\n exportAs: 'kbqStepper',\n imports: [KbqIconModule],\n template: `\n <i\n class=\"kbq-stepper_step-up\"\n [small]=\"true\"\n [tabindex]=\"-1\"\n [autoColor]=\"true\"\n (click)=\"stepUp($event)\"\n kbq-icon-button=\"kbq-chevron-down_16\"\n ></i>\n <i\n class=\"kbq-stepper_step-down\"\n [small]=\"true\"\n [tabindex]=\"-1\"\n [autoColor]=\"true\"\n (mousedown)=\"stepDown($event)\"\n kbq-icon-button=\"kbq-chevron-down_16\"\n ></i>\n `,\n styleUrl: './stepper.scss',\n host: {\n class: 'kbq-stepper___EXPERIMENTAL',\n '[style.visibility]': 'visible ? \"visible\" : \"hidden\"',\n '[attr.aria-hidden]': '!visible'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqStepper {\n // @TODO fix types (#DS-2915)\n private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true }) as unknown as KbqFormField | undefined;\n\n /** Whether the stepper is visible. */\n get visible(): boolean {\n return !!((this.formField?.focused || this.formField?.hovered) && !this.formField?.disabled);\n }\n\n /** Form field number control. */\n protected get control(): KbqNumberInput {\n const control = this.formField?.control;\n if (!(control instanceof KbqInput && control.numberInput)) {\n throw getKbqStepperToggleMissingControlError();\n }\n return control.numberInput;\n }\n\n protected stepUp(event: MouseEvent) {\n event.stopPropagation();\n this.control.stepUp(this.control.step);\n }\n\n protected stepDown(event: MouseEvent) {\n event.stopPropagation();\n this.control.stepDown(this.control.step);\n }\n}\n","import { Directive } from '@angular/core';\n\n/** KbqSuffix to be placed at the end of the form field. */\n@Directive({\n standalone: true,\n selector: '[kbqSuffix]',\n host: {\n class: 'kbq-suffix___EXPERIMENTAL'\n }\n})\nexport class KbqSuffix {}\n","import {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControlDirective } from '@angular/forms';\nimport { ESCAPE, F8 } from '@koobiq/cdk/keycodes';\nimport { KBQ_FORM_FIELD_REF } from '@koobiq/components/core';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { merge } from 'rxjs';\nimport { KbqCleaner } from './cleaner';\nimport { KbqError, KbqHint, KbqPasswordHint } from './hint';\nimport { KbqLabel } from './label';\nimport { KbqPasswordToggle } from './password-toggle';\nimport { KbqPrefix } from './prefix';\nimport { KbqStepper } from './stepper';\nimport { KbqSuffix } from './suffix';\n\n/**\n * Default options for the kbq-form-field that can be configured using the `KBQ_FORM_FIELD_DEFAULT_OPTIONS` injection token.\n */\nexport type KbqFormFieldDefaultOptions = Partial<{\n /** Disables form field borders and shadows. */\n noBorders: boolean;\n}>;\n\n/** Injection token that can be used to configure the default options for all kbq-form-field's. */\nexport const KBQ_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken<KbqFormFieldDefaultOptions>(\n 'KBQ_FORM_FIELD_DEFAULT_OPTIONS'\n);\n\n/** @docs-private */\nexport const getKbqFormFieldMissingControlError = (): Error => {\n return Error('kbq-form-field must contain a KbqFormFieldControl');\n};\n\n/** Container for form controls that applies styling and behavior. */\n@Component({\n standalone: true,\n selector: 'kbq-form-field',\n exportAs: 'kbqFormField',\n templateUrl: './form-field.html',\n styleUrls: [\n './form-field.scss',\n './form-field-tokens.scss',\n /**\n * KbqInput is a directive and can't have styles, so we need to include its styles here.\n * The KbqInput styles are fairly minimal so it shouldn't be a big deal for people who aren't using KbqInput.\n * @TODO should be refactored (#DS-2910)\n */\n './../../components/input/input.scss',\n './../../components/input/input-tokens.scss',\n './../../components/tags/tag-input-tokens.scss',\n './../../components/timepicker/timepicker.scss',\n './../../components/datepicker/datepicker-input.scss',\n './../../components/textarea/textarea.scss',\n './../../components/textarea/textarea-tokens.scss'\n ],\n host: {\n class: 'kbq-form-field___EXPERIMENTAL',\n '[class.kbq-form-field_invalid]': 'invalid',\n '[class.kbq-form-field_focused]': 'focused',\n '[class.kbq-form-field_disabled]': 'disabled',\n '[class.kbq-form-field_no-borders]': 'shouldDisableBorders',\n\n '[class.ng-untouched]': 'shouldBeForwarded(\"untouched\")',\n '[class.ng-touched]': 'shouldBeForwarded(\"touched\")',\n '[class.ng-pristine]': 'shouldBeForwarded(\"pristine\")',\n '[class.ng-dirty]': 'shouldBeForwarded(\"dirty\")',\n '[class.ng-valid]': 'shouldBeForwarded(\"valid\")',\n '[class.ng-invalid]': 'shouldBeForwarded(\"invalid\")',\n '[class.ng-pending]': 'shouldBeForwarded(\"pending\")',\n\n '(keydown)': 'onKeyDown($event)',\n '(mouseenter)': 'mouseenter($event)',\n '(mouseleave)': 'mouseleave($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: KBQ_FORM_FIELD_REF, useExisting: KbqFormField }]\n})\nexport class KbqFormField implements AfterContentInit, AfterViewInit {\n /** Disables form field borders and shadows. */\n @Input({ transform: booleanAttribute }) noBorders: boolean | undefined;\n\n @ContentChild(KbqFormFieldControl) private readonly _control: KbqFormFieldControl<unknown>;\n @ViewChild('connectionContainer') private readonly connectionContainerRef: ElementRef;\n @ContentChild(KbqStepper) private readonly stepper: KbqStepper;\n @ContentChild(KbqCleaner) private readonly cleaner: KbqCleaner | null;\n @ContentChild(KbqLabel) private readonly label: KbqLabel | null;\n @ContentChild(KbqPasswordToggle) private readonly passwordToggle: KbqPasswordToggle | null;\n @ContentChildren(KbqHint) private readonly hint: QueryList<KbqHint>;\n @ContentChildren(KbqPasswordHint) private readonly passwordHint: QueryList<KbqPasswordHint>;\n @ContentChildren(KbqSuffix) private readonly suffix: QueryList<KbqSuffix>;\n @ContentChildren(KbqPrefix) private readonly prefix: QueryList<KbqPrefix>;\n @ContentChildren(KbqError) private readonly error: QueryList<KbqError>;\n\n canCleanerClearByEsc: boolean = true;\n\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly defaultOptions = inject(KBQ_FORM_FIELD_DEFAULT_OPTIONS, { optional: true });\n\n /** The form field's control. */\n get control() {\n if (!this._control) {\n throw getKbqFormFieldMissingControlError();\n }\n return this._control;\n }\n\n /** Determines if borders and shadows should be disabled. */\n get shouldDisableBorders(): boolean {\n return this.noBorders || !!this.defaultOptions?.noBorders;\n }\n\n /** Whether the form field control is focused. */\n get focused(): boolean {\n return !!this.control?.focused;\n }\n\n /** Whether the form field is hovered. */\n get hovered(): boolean {\n return !!this._hovered;\n }\n\n /** Whether the form field is invalid. */\n get invalid(): boolean {\n return !!this.control?.errorState;\n }\n\n /** Checks whether the form-field contains kbq-hint */\n get hasHint(): boolean {\n return this.hint?.length > 0;\n }\n\n /** Checks whether the form-field contains kbq-password-hint */\n get hasPasswordHint(): boolean {\n return this.passwordHint?.length > 0;\n }\n\n /** Checks whether the form-field contains kbq-password-toggle */\n get hasPasswordToggle(): boolean {\n return !!this.passwordToggle;\n }\n\n /** Checks whether the form-field contains kbq-label */\n get hasLabel(): boolean {\n return !!this.label;\n }\n\n /** Checks whether the form-field contains kbqSuffix */\n get hasSuffix(): boolean {\n return this.suffix?.length > 0;\n }\n\n /** Checks whether the form-field contains kbqPrefix */\n get hasPrefix(): boolean {\n return this.prefix?.length > 0;\n }\n\n /** Checks whether the form-field contains kbq-cleaner */\n get hasCleaner(): boolean {\n return !!this.cleaner;\n }\n\n /** Checks whether the form-field contains kbq-stepper */\n get hasStepper(): boolean {\n return !!this.stepper;\n }\n\n /** Checks whether the form-field contains kbq-error */\n get hasError(): boolean {\n return this.error.length > 0;\n }\n\n /** Whether the form field is disabled. */\n get disabled(): boolean {\n return !!this.control?.disabled;\n }\n\n private _hovered: boolean = false;\n\n ngAfterContentInit(): void {\n this.initializeControl();\n this.initializePrefixAndSuffix();\n this.initializeHint();\n }\n\n ngAfterViewInit(): void {\n // Because the above changes a value used in the template after it was checked, we need\n // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n this.changeDetectorRef.detectChanges();\n }\n\n /** Focuses the control. */\n focus(options?: FocusOptions): void {\n this.control.focus(options);\n }\n\n /** Handles a click on the control's container. */\n protected onContainerClick(event: MouseEvent): void {\n if (this.control.onContainerClick) {\n this.control.onContainerClick(event);\n }\n }\n\n /** Handles keydown events. */\n protected onKeyDown(event: KeyboardEvent): void {\n // @TODO should move into KbqPasswordToggle (#DS-2910)\n if (this.control.controlType === 'input-password' && event.altKey && event.keyCode === F8) {\n (this.control as unknown as { toggleType(): void }).toggleType();\n }\n // @TODO should move into KbqCleaner (#DS-2910)\n if (this.canCleanerClearByEsc && event.keyCode === ESCAPE && this.focused && this.hasCleaner) {\n this.control?.ngControl?.reset();\n event.preventDefault();\n }\n }\n\n /** Handles mouseenter events. */\n protected mouseenter(_event: MouseEvent): void {\n this._hovered = true;\n }\n\n /** Handles mouseleave events. */\n protected mouseleave(_event: MouseEvent): void {\n this._hovered = false;\n }\n\n /**\n * Gets an ElementRef for the element that a overlay attached to the form-field should be positioned relative to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this.connectionContainerRef || this.elementRef;\n }\n\n /**\n * Determines whether a class from the AbstractControlDirective should be forwarded to the host element.\n */\n protected shouldBeForwarded(property: keyof AbstractControlDirective): boolean {\n return this.control.ngControl?.[property];\n }\n\n /** Initializes the kbqPrefix and kbqSuffix containers. */\n private initializePrefixAndSuffix(): void {\n // Mark the form field as dirty whenever the prefix or suffix children change. This is necessary because we\n // conditionally display the prefix/suffix containers based on whether there is projected content.\n merge(this.prefix.changes, this.suffix.changes)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n }\n\n /** Initializes the KbqHint, KbqError and KbqPasswordHint containers. */\n private initializeHint(): void {\n merge(this.hint.changes, this.error.changes, this.passwordHint.changes)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n }\n\n /** Initializes the form field control. */\n private initializeControl(): void {\n if (this.control.controlType) {\n this.elementRef.nativeElement.classList.add(`kbq-form-field-type-${this.control.controlType}`);\n }\n\n this.control.stateChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n\n this.control.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","@if (hasLabel) {\n <label\n class=\"kbq-form-field_label\"\n [attr.for]=\"control.id\"\n >\n <ng-content select=\"kbq-label\" />\n </label>\n}\n\n<div\n #connectionContainer\n class=\"kbq-form-field_container\"\n (click)=\"onContainerClick($event)\"\n>\n @if (hasPrefix) {\n <div class=\"kbq-form-field_prefix\">\n <ng-content select=\"[kbqPrefix]\" />\n </div>\n }\n\n <div class=\"kbq-form-field_control\">\n <ng-content />\n </div>\n\n @if (hasSuffix || hasCleaner || hasPasswordToggle || hasStepper) {\n <div class=\"kbq-form-field_suffix\">\n <ng-content select=\"kbq-cleaner\" />\n\n <ng-content select=\"kbq-password-toggle\" />\n\n <ng-content select=\"kbq-stepper\" />\n\n <ng-content select=\"[kbqSuffix]\" />\n </div>\n }\n</div>\n\n@if (hasHint || hasPasswordHint || hasError) {\n <div class=\"kbq-form-field_hint\">\n @if (invalid) {\n <ng-content select=\"kbq-error\" />\n }\n\n <ng-content select=\"kbq-hint, kbq-password-hint\" />\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { KbqCleaner } from './cleaner';\nimport { KbqFormField } from './form-field';\nimport { KbqError, KbqHint, KbqPasswordHint } from './hint';\nimport { KbqLabel } from './label';\nimport { KbqPasswordToggle } from './password-toggle';\nimport { KbqPrefix } from './prefix';\nimport { KbqStepper } from './stepper';\nimport { KbqSuffix } from './suffix';\n\nconst COMPONENTS = [\n KbqFormField,\n KbqHint,\n KbqError,\n KbqPrefix,\n KbqSuffix,\n KbqCleaner,\n KbqStepper,\n KbqPasswordToggle,\n KbqLabel,\n KbqPasswordHint\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqFormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextUniqueId"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ //# sourceMappingURL=koobiq-components-experimental.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koobiq-components-experimental.mjs","sources":["../../../packages/components-experimental/koobiq-components-experimental.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;AAEG"}
File without changes
@@ -0,0 +1,81 @@
1
+ @use '../../components/core/styles/common/tokens' as *;
2
+
3
+ @mixin kbq-form-field-state($state-name) {
4
+ .kbq-form-field_container {
5
+ border-color: var(--kbq-form-field-#{$state-name}-border-color);
6
+ background-color: var(--kbq-form-field-#{$state-name}-background);
7
+ }
8
+
9
+ .kbq-input,
10
+ .kbq-tag-input,
11
+ .kbq-textarea {
12
+ color: var(--kbq-form-field-#{$state-name}-text);
13
+
14
+ &::placeholder {
15
+ color: var(--kbq-form-field-#{$state-name}-placeholder);
16
+ }
17
+
18
+ &::-ms-input-placeholder {
19
+ color: var(--kbq-form-field-#{$state-name}-placeholder);
20
+ }
21
+
22
+ &::-webkit-input-placeholder {
23
+ color: var(--kbq-form-field-#{$state-name}-placeholder);
24
+ }
25
+ }
26
+ }
27
+
28
+ @mixin kbq-form-field-theme() {
29
+ .kbq-form-field___EXPERIMENTAL {
30
+ @include kbq-form-field-state(default);
31
+
32
+ & .kbq-input {
33
+ &:-webkit-autofill,
34
+ &:-webkit-autofill:hover,
35
+ &:-webkit-autofill:focus {
36
+ -webkit-box-shadow: inset 0 0 0 40rem var(--kbq-form-field-states-autofill-background);
37
+ -webkit-text-fill-color: var(--kbq-form-field-states-autofill-text);
38
+ caret-color: var(--kbq-form-field-states-autofill-text);
39
+ }
40
+ }
41
+
42
+ &.kbq-form-field_focused {
43
+ @include kbq-form-field-state(states-focused);
44
+
45
+ & .kbq-form-field_container {
46
+ box-shadow: 0 0 0.1px 1px var(--kbq-form-field-states-focused-focus-outline);
47
+ }
48
+ }
49
+
50
+ &.kbq-form-field_invalid {
51
+ @include kbq-form-field-state(states-error);
52
+
53
+ &.kbq-form-field_focused .kbq-form-field_container {
54
+ box-shadow: 0 0 0.1px 1px var(--kbq-form-field-states-error-focused-focus-outline);
55
+ }
56
+ }
57
+
58
+ &.kbq-form-field_disabled {
59
+ @include kbq-form-field-state(states-disabled);
60
+
61
+ .kbq-icon {
62
+ color: var(--kbq-form-field-states-disabled-text);
63
+ -webkit-text-fill-color: var(--kbq-form-field-states-disabled-text);
64
+ }
65
+ }
66
+
67
+ .kbq-hint___EXPERIMENTAL {
68
+ color: var(--kbq-form-field-hint-text);
69
+ }
70
+ }
71
+ }
72
+
73
+ @mixin kbq-form-field-typography() {
74
+ .kbq-form-field___EXPERIMENTAL {
75
+ @include kbq-typography-level-to-styles_css-variables(typography, text-normal);
76
+
77
+ .kbq-hint___EXPERIMENTAL:not(.kbq-password-hint___EXPERIMENTAL) .kbq-hint_text {
78
+ @include kbq-typography-level-to-styles_css-variables(typography, text-compact);
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,59 @@
1
+ @use '../../components/core/styles/common/tokens' as *;
2
+
3
+ @mixin kbq-hint-color($type, $style-name) {
4
+ color: var(--kbq-hint-#{$type}-#{$style-name}-text);
5
+
6
+ & .kbq-icon {
7
+ color: var(--kbq-hint-#{$type}-#{$style-name}-icon) !important;
8
+ }
9
+ }
10
+
11
+ @mixin kbq-hint-theme() {
12
+ .kbq-hint___EXPERIMENTAL {
13
+ &.kbq-contrast-fade {
14
+ @include kbq-hint-color(fill-text-on, fade-contrast);
15
+ }
16
+
17
+ &.kbq-success {
18
+ @include kbq-hint-color(fill-text-on, success);
19
+ }
20
+
21
+ &.kbq-warning {
22
+ @include kbq-hint-color(fill-text-on, warning);
23
+ }
24
+
25
+ &.kbq-error {
26
+ @include kbq-hint-color(fill-text-on, error);
27
+ }
28
+
29
+ &.kbq-hint_fill-text-off {
30
+ &.kbq-contrast-fade {
31
+ @include kbq-hint-color(fill-text-off, fade-contrast);
32
+ }
33
+
34
+ &.kbq-success {
35
+ @include kbq-hint-color(fill-text-off, success);
36
+ }
37
+
38
+ &.kbq-warning {
39
+ @include kbq-hint-color(fill-text-off, warning);
40
+ }
41
+
42
+ &.kbq-error {
43
+ @include kbq-hint-color(fill-text-off, error);
44
+ }
45
+ }
46
+ }
47
+ }
48
+
49
+ @mixin kbq-hint-typography() {
50
+ .kbq-hint___EXPERIMENTAL {
51
+ .kbq-hint_text {
52
+ @include kbq-typography-level-to-styles_css-variables(typography, text-normal-medium);
53
+ }
54
+
55
+ &.kbq-hint_compact .kbq-hint_text {
56
+ @include kbq-typography-level-to-styles_css-variables(typography, text-compact);
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * KbqCleaner to be placed in end of the form field.
4
+ * Resets form control by click.
5
+ */
6
+ export declare class KbqCleaner {
7
+ private readonly formField;
8
+ /** Whether to display the cleaner. */
9
+ get visible(): boolean;
10
+ /** Clean the form field control. */
11
+ protected clean(event: MouseEvent): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqCleaner, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqCleaner, "kbq-cleaner", ["kbqCleaner"], {}, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,5 @@
1
+ .kbq-cleaner___EXPERIMENTAL {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ }
@@ -0,0 +1,63 @@
1
+ .kbq-form-field___EXPERIMENTAL {
2
+ --kbq-form-field-size-height: var(--kbq-size-3xl);
3
+ --kbq-form-field-size-border-width: 1px;
4
+ --kbq-form-field-size-border-radius: var(--kbq-size-border-radius);
5
+ --kbq-form-field-size-icon-size: var(--kbq-size-l);
6
+ --kbq-form-field-size-icon-margin-left: var(--kbq-size-s);
7
+ --kbq-form-field-size-icon-margin-right: var(--kbq-size-s);
8
+ --kbq-form-field-size-icon-button-size: var(--kbq-size-xxl);
9
+ --kbq-form-field-size-icon-button-margin-right: var(--kbq-size-xxs);
10
+ --kbq-form-field-size-icon-button-margin-left: var(--kbq-size-xxs);
11
+ }
12
+
13
+ :where(.kbq-light, .theme-light, .kbq-theme-light) {
14
+ --kbq-form-field-default-border-color: var(--kbq-line-contrast-fade);
15
+ --kbq-form-field-default-background: var(--kbq-background-bg);
16
+ --kbq-form-field-default-placeholder: var(--kbq-foreground-contrast-tertiary);
17
+ --kbq-form-field-default-text: var(--kbq-foreground-contrast);
18
+ --kbq-form-field-states-focused-border-color: var(--kbq-states-line-focus-theme);
19
+ --kbq-form-field-states-focused-background: var(--kbq-background-bg);
20
+ --kbq-form-field-states-focused-placeholder: var(--kbq-foreground-contrast-tertiary);
21
+ --kbq-form-field-states-focused-text: var(--kbq-foreground-contrast);
22
+ --kbq-form-field-states-focused-focus-outline: var(--kbq-states-line-focus-theme);
23
+ --kbq-form-field-states-error-border-color: var(--kbq-line-error);
24
+ --kbq-form-field-states-error-background: var(--kbq-states-background-error-less);
25
+ --kbq-form-field-states-error-placeholder: var(--kbq-foreground-error-tertiary);
26
+ --kbq-form-field-states-error-text: var(--kbq-foreground-error);
27
+ --kbq-form-field-states-error-focused-focus-outline: var(--kbq-states-line-focus-error);
28
+ --kbq-form-field-states-autofill-border-color: var(--kbq-states-line-focus-theme);
29
+ --kbq-form-field-states-autofill-background: var(--kbq-background-theme-fade);
30
+ --kbq-form-field-states-autofill-placeholder: var(--kbq-foreground-contrast-tertiary);
31
+ --kbq-form-field-states-autofill-text: var(--kbq-foreground-contrast);
32
+ --kbq-form-field-states-disabled-border-color: var(--kbq-states-line-disabled);
33
+ --kbq-form-field-states-disabled-background: var(--kbq-states-background-disabled);
34
+ --kbq-form-field-states-disabled-placeholder: var(--kbq-states-foreground-disabled);
35
+ --kbq-form-field-states-disabled-text: var(--kbq-states-foreground-disabled);
36
+ --kbq-form-field-hint-text: var(--kbq-foreground-contrast-secondary);
37
+ }
38
+
39
+ :where(.kbq-dark, .theme-dark, .kbq-theme-dark) {
40
+ --kbq-form-field-default-border-color: var(--kbq-line-contrast-fade);
41
+ --kbq-form-field-default-background: var(--kbq-background-bg);
42
+ --kbq-form-field-default-placeholder: var(--kbq-foreground-contrast-tertiary);
43
+ --kbq-form-field-default-text: var(--kbq-foreground-contrast);
44
+ --kbq-form-field-states-focused-border-color: var(--kbq-states-line-focus-theme);
45
+ --kbq-form-field-states-focused-background: var(--kbq-background-bg);
46
+ --kbq-form-field-states-focused-placeholder: var(--kbq-foreground-contrast-tertiary);
47
+ --kbq-form-field-states-focused-text: var(--kbq-foreground-contrast);
48
+ --kbq-form-field-states-focused-focus-outline: var(--kbq-states-line-focus-theme);
49
+ --kbq-form-field-states-error-border-color: var(--kbq-line-error);
50
+ --kbq-form-field-states-error-background: var(--kbq-states-background-error-less);
51
+ --kbq-form-field-states-error-placeholder: var(--kbq-foreground-error-tertiary);
52
+ --kbq-form-field-states-error-text: var(--kbq-foreground-error);
53
+ --kbq-form-field-states-error-focused-focus-outline: var(--kbq-states-line-focus-error);
54
+ --kbq-form-field-states-autofill-border-color: var(--kbq-states-line-focus-theme);
55
+ --kbq-form-field-states-autofill-background: var(--kbq-background-theme-fade);
56
+ --kbq-form-field-states-autofill-placeholder: var(--kbq-foreground-contrast-tertiary);
57
+ --kbq-form-field-states-autofill-text: var(--kbq-foreground-contrast);
58
+ --kbq-form-field-states-disabled-border-color: var(--kbq-states-line-disabled);
59
+ --kbq-form-field-states-disabled-background: var(--kbq-states-background-disabled);
60
+ --kbq-form-field-states-disabled-placeholder: var(--kbq-states-foreground-disabled);
61
+ --kbq-form-field-states-disabled-text: var(--kbq-states-foreground-disabled);
62
+ --kbq-form-field-hint-text: var(--kbq-foreground-contrast-secondary);
63
+ }
@@ -0,0 +1,99 @@
1
+ import { AfterContentInit, AfterViewInit, ElementRef, InjectionToken } from '@angular/core';
2
+ import { AbstractControlDirective } from '@angular/forms';
3
+ import { KbqFormFieldControl } from '@koobiq/components/form-field';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Default options for the kbq-form-field that can be configured using the `KBQ_FORM_FIELD_DEFAULT_OPTIONS` injection token.
7
+ */
8
+ export type KbqFormFieldDefaultOptions = Partial<{
9
+ /** Disables form field borders and shadows. */
10
+ noBorders: boolean;
11
+ }>;
12
+ /** Injection token that can be used to configure the default options for all kbq-form-field's. */
13
+ export declare const KBQ_FORM_FIELD_DEFAULT_OPTIONS: InjectionToken<Partial<{
14
+ /** Disables form field borders and shadows. */
15
+ noBorders: boolean;
16
+ }>>;
17
+ /** @docs-private */
18
+ export declare const getKbqFormFieldMissingControlError: () => Error;
19
+ /** Container for form controls that applies styling and behavior. */
20
+ export declare class KbqFormField implements AfterContentInit, AfterViewInit {
21
+ /** Disables form field borders and shadows. */
22
+ noBorders: boolean | undefined;
23
+ private readonly _control;
24
+ private readonly connectionContainerRef;
25
+ private readonly stepper;
26
+ private readonly cleaner;
27
+ private readonly label;
28
+ private readonly passwordToggle;
29
+ private readonly hint;
30
+ private readonly passwordHint;
31
+ private readonly suffix;
32
+ private readonly prefix;
33
+ private readonly error;
34
+ canCleanerClearByEsc: boolean;
35
+ private readonly changeDetectorRef;
36
+ private readonly destroyRef;
37
+ private readonly elementRef;
38
+ private readonly defaultOptions;
39
+ /** The form field's control. */
40
+ get control(): KbqFormFieldControl<unknown>;
41
+ /** Determines if borders and shadows should be disabled. */
42
+ get shouldDisableBorders(): boolean;
43
+ /** Whether the form field control is focused. */
44
+ get focused(): boolean;
45
+ /** Whether the form field is hovered. */
46
+ get hovered(): boolean;
47
+ /** Whether the form field is invalid. */
48
+ get invalid(): boolean;
49
+ /** Checks whether the form-field contains kbq-hint */
50
+ get hasHint(): boolean;
51
+ /** Checks whether the form-field contains kbq-password-hint */
52
+ get hasPasswordHint(): boolean;
53
+ /** Checks whether the form-field contains kbq-password-toggle */
54
+ get hasPasswordToggle(): boolean;
55
+ /** Checks whether the form-field contains kbq-label */
56
+ get hasLabel(): boolean;
57
+ /** Checks whether the form-field contains kbqSuffix */
58
+ get hasSuffix(): boolean;
59
+ /** Checks whether the form-field contains kbqPrefix */
60
+ get hasPrefix(): boolean;
61
+ /** Checks whether the form-field contains kbq-cleaner */
62
+ get hasCleaner(): boolean;
63
+ /** Checks whether the form-field contains kbq-stepper */
64
+ get hasStepper(): boolean;
65
+ /** Checks whether the form-field contains kbq-error */
66
+ get hasError(): boolean;
67
+ /** Whether the form field is disabled. */
68
+ get disabled(): boolean;
69
+ private _hovered;
70
+ ngAfterContentInit(): void;
71
+ ngAfterViewInit(): void;
72
+ /** Focuses the control. */
73
+ focus(options?: FocusOptions): void;
74
+ /** Handles a click on the control's container. */
75
+ protected onContainerClick(event: MouseEvent): void;
76
+ /** Handles keydown events. */
77
+ protected onKeyDown(event: KeyboardEvent): void;
78
+ /** Handles mouseenter events. */
79
+ protected mouseenter(_event: MouseEvent): void;
80
+ /** Handles mouseleave events. */
81
+ protected mouseleave(_event: MouseEvent): void;
82
+ /**
83
+ * Gets an ElementRef for the element that a overlay attached to the form-field should be positioned relative to.
84
+ */
85
+ getConnectedOverlayOrigin(): ElementRef;
86
+ /**
87
+ * Determines whether a class from the AbstractControlDirective should be forwarded to the host element.
88
+ */
89
+ protected shouldBeForwarded(property: keyof AbstractControlDirective): boolean;
90
+ /** Initializes the kbqPrefix and kbqSuffix containers. */
91
+ private initializePrefixAndSuffix;
92
+ /** Initializes the KbqHint, KbqError and KbqPasswordHint containers. */
93
+ private initializeHint;
94
+ /** Initializes the form field control. */
95
+ private initializeControl;
96
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqFormField, never>;
97
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqFormField, "kbq-form-field", ["kbqFormField"], { "noBorders": { "alias": "noBorders"; "required": false; }; }, {}, ["_control", "stepper", "cleaner", "label", "passwordToggle", "hint", "passwordHint", "suffix", "prefix", "error"], ["kbq-label", "[kbqPrefix]", "*", "kbq-cleaner", "kbq-password-toggle", "kbq-stepper", "[kbqSuffix]", "kbq-error", "kbq-hint, kbq-password-hint"], true, never>;
98
+ static ngAcceptInputType_noBorders: unknown;
99
+ }
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./form-field";
3
+ import * as i2 from "./hint";
4
+ import * as i3 from "./prefix";
5
+ import * as i4 from "./suffix";
6
+ import * as i5 from "./cleaner";
7
+ import * as i6 from "./stepper";
8
+ import * as i7 from "./password-toggle";
9
+ import * as i8 from "./label";
10
+ export declare class KbqFormFieldModule {
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqFormFieldModule, never>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KbqFormFieldModule, never, [typeof i1.KbqFormField, typeof i2.KbqHint, typeof i2.KbqError, typeof i3.KbqPrefix, typeof i4.KbqSuffix, typeof i5.KbqCleaner, typeof i6.KbqStepper, typeof i7.KbqPasswordToggle, typeof i8.KbqLabel, typeof i2.KbqPasswordHint], [typeof i1.KbqFormField, typeof i2.KbqHint, typeof i2.KbqError, typeof i3.KbqPrefix, typeof i4.KbqSuffix, typeof i5.KbqCleaner, typeof i6.KbqStepper, typeof i7.KbqPasswordToggle, typeof i8.KbqLabel, typeof i2.KbqPasswordHint]>;
13
+ static ɵinj: i0.ɵɵInjectorDeclaration<KbqFormFieldModule>;
14
+ }
@@ -0,0 +1,69 @@
1
+ @use './form-field-theme' as *;
2
+
3
+ .kbq-form-field___EXPERIMENTAL {
4
+ display: inline-block;
5
+ width: 100%;
6
+
7
+ .kbq-form-field_container {
8
+ box-sizing: border-box;
9
+
10
+ display: flex;
11
+ justify-content: space-between;
12
+ align-items: center;
13
+
14
+ border-width: var(--kbq-form-field-size-border-width);
15
+ border-style: solid;
16
+ border-color: transparent;
17
+ border-radius: var(--kbq-form-field-size-border-radius);
18
+ }
19
+
20
+ .kbq-form-field:not(.kbq-form-field-type-textarea) {
21
+ height: var(--kbq-form-field-size-height);
22
+ }
23
+
24
+ &,
25
+ .kbq-input,
26
+ .kbq-textarea {
27
+ border-radius: var(--kbq-form-field-size-border-radius);
28
+ }
29
+
30
+ &.kbq-form-field_no-borders .kbq-form-field_container {
31
+ border-color: transparent !important;
32
+ box-shadow: none !important;
33
+ }
34
+
35
+ .kbq-form-field_control {
36
+ flex-grow: 1;
37
+ }
38
+
39
+ .kbq-form-field_label {
40
+ display: flex;
41
+ margin-bottom: var(--kbq-size-s);
42
+ }
43
+
44
+ .kbq-form-field_prefix,
45
+ .kbq-form-field_suffix {
46
+ display: flex;
47
+ justify-content: center;
48
+ align-items: center;
49
+ gap: var(--kbq-size-xxs);
50
+ }
51
+
52
+ .kbq-form-field_prefix {
53
+ margin-left: var(--kbq-size-s);
54
+ }
55
+
56
+ .kbq-form-field_suffix {
57
+ margin-right: var(--kbq-size-s);
58
+ }
59
+
60
+ .kbq-form-field_hint {
61
+ display: flex;
62
+ flex-direction: column;
63
+ margin-top: var(--kbq-size-s);
64
+ gap: var(--kbq-size-xxs);
65
+ }
66
+ }
67
+
68
+ @include kbq-form-field-theme();
69
+ @include kbq-form-field-typography();
@@ -0,0 +1,44 @@
1
+ .kbq-hint___EXPERIMENTAL {
2
+ --kbq-hint-size-normal-margin-top: var(--kbq-size-3xs);
3
+ --kbq-hint-size-normal-content-padding: var(--kbq-size-xxs);
4
+ --kbq-hint-size-compact-margin-top: 0;
5
+ --kbq-hint-size-compact-content-padding: var(--kbq-size-xxs);
6
+ }
7
+
8
+ :where(.kbq-light, .theme-light, .kbq-theme-light) {
9
+ --kbq-hint-fill-text-off-fade-contrast-text: var(--kbq-foreground-contrast);
10
+ --kbq-hint-fill-text-off-fade-contrast-icon: var(--kbq-icon-contrast-fade);
11
+ --kbq-hint-fill-text-off-success-text: var(--kbq-foreground-contrast);
12
+ --kbq-hint-fill-text-off-success-icon: var(--kbq-icon-success);
13
+ --kbq-hint-fill-text-off-warning-text: var(--kbq-foreground-contrast);
14
+ --kbq-hint-fill-text-off-warning-icon: var(--kbq-icon-warning);
15
+ --kbq-hint-fill-text-off-error-text: var(--kbq-foreground-contrast);
16
+ --kbq-hint-fill-text-off-error-icon: var(--kbq-icon-error);
17
+ --kbq-hint-fill-text-on-fade-contrast-text: var(--kbq-foreground-contrast);
18
+ --kbq-hint-fill-text-on-fade-contrast-icon: var(--kbq-icon-contrast-fade);
19
+ --kbq-hint-fill-text-on-success-text: var(--kbq-foreground-success);
20
+ --kbq-hint-fill-text-on-success-icon: var(--kbq-icon-success);
21
+ --kbq-hint-fill-text-on-warning-text: var(--kbq-foreground-warning);
22
+ --kbq-hint-fill-text-on-warning-icon: var(--kbq-icon-warning);
23
+ --kbq-hint-fill-text-on-error-text: var(--kbq-foreground-error);
24
+ --kbq-hint-fill-text-on-error-icon: var(--kbq-icon-error);
25
+ }
26
+
27
+ :where(.kbq-dark, .theme-dark, .kbq-theme-dark) {
28
+ --kbq-hint-fill-text-off-fade-contrast-text: var(--kbq-foreground-contrast);
29
+ --kbq-hint-fill-text-off-fade-contrast-icon: var(--kbq-icon-contrast-fade);
30
+ --kbq-hint-fill-text-off-success-text: var(--kbq-foreground-contrast);
31
+ --kbq-hint-fill-text-off-success-icon: var(--kbq-icon-success);
32
+ --kbq-hint-fill-text-off-warning-text: var(--kbq-foreground-contrast);
33
+ --kbq-hint-fill-text-off-warning-icon: var(--kbq-icon-warning);
34
+ --kbq-hint-fill-text-off-error-text: var(--kbq-foreground-contrast);
35
+ --kbq-hint-fill-text-off-error-icon: var(--kbq-icon-error);
36
+ --kbq-hint-fill-text-on-fade-contrast-text: var(--kbq-foreground-contrast);
37
+ --kbq-hint-fill-text-on-fade-contrast-icon: var(--kbq-icon-contrast-fade);
38
+ --kbq-hint-fill-text-on-success-text: var(--kbq-foreground-success);
39
+ --kbq-hint-fill-text-on-success-icon: var(--kbq-icon-success);
40
+ --kbq-hint-fill-text-on-warning-text: var(--kbq-foreground-warning);
41
+ --kbq-hint-fill-text-on-warning-icon: var(--kbq-icon-warning);
42
+ --kbq-hint-fill-text-on-error-text: var(--kbq-foreground-error);
43
+ --kbq-hint-fill-text-on-error-icon: var(--kbq-icon-error);
44
+ }
@@ -0,0 +1,55 @@
1
+ import { KbqComponentColors } from '@koobiq/components/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Hint text to be shown below the form field control. */
4
+ export declare class KbqHint {
5
+ /** Unique ID for the hint. */
6
+ id: string;
7
+ /** Component colors */
8
+ protected colors: typeof KbqComponentColors;
9
+ /** Hint color */
10
+ set color(color: KbqComponentColors);
11
+ get color(): KbqComponentColors | undefined;
12
+ private _color;
13
+ /** Disables `color` for the hint text. */
14
+ set fillTextOff(fillTextOff: boolean);
15
+ get fillTextOff(): boolean;
16
+ private _fillTextOff;
17
+ /** Makes the hint size smaller. */
18
+ compact: boolean;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqHint, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqHint, "kbq-hint", ["kbqHint"], { "id": { "alias": "id"; "required": false; }; "color": { "alias": "color"; "required": false; }; "fillTextOff": { "alias": "fillTextOff"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; }, {}, never, ["[kbq-icon]", "*"], true, never>;
21
+ static ngAcceptInputType_fillTextOff: unknown;
22
+ static ngAcceptInputType_compact: unknown;
23
+ }
24
+ /** Error text to be shown below the form field control. */
25
+ export declare class KbqError extends KbqHint {
26
+ /** @docs-private */
27
+ set color(_color: null);
28
+ /** Overrides the hint `color` property. */
29
+ get color(): KbqComponentColors.Error;
30
+ /** @docs-private */
31
+ set fillTextOff(_fillTextOff: null);
32
+ /** Overrides the hint `fillTextOff` property. */
33
+ get fillTextOff(): boolean;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqError, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqError, "kbq-error", ["kbqError"], { "color": { "alias": "color"; "required": false; }; "fillTextOff": { "alias": "fillTextOff"; "required": false; }; }, {}, never, ["[kbq-icon]", "*"], true, never>;
36
+ }
37
+ /** Password hint to be shown below the password form field control. */
38
+ export declare class KbqPasswordHint extends KbqHint {
39
+ /** Whether the form field control has an error. */
40
+ hasError: boolean;
41
+ /** @docs-private */
42
+ set fillTextOff(_fillTextOff: null);
43
+ /** Overrides the hint `fillTextOff` property. */
44
+ get fillTextOff(): boolean;
45
+ private readonly formField;
46
+ /** @docs-private */
47
+ set color(_color: null);
48
+ /** Overrides the hint `color` property. */
49
+ get color(): KbqComponentColors;
50
+ /** The form field hint icon. */
51
+ protected get icon(): string;
52
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqPasswordHint, never>;
53
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqPasswordHint, "kbq-password-hint", never, { "hasError": { "alias": "hasError"; "required": false; }; "fillTextOff": { "alias": "fillTextOff"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, {}, never, ["*"], true, never>;
54
+ static ngAcceptInputType_hasError: unknown;
55
+ }