@mesgflow/ui-kit 0.6.0 → 0.8.0
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/README.md +56 -5
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
- package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
- package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
- package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
- package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
- package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
- package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
- package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
- package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
- package/package.json +91 -3
- package/schematics/collection.json +10 -0
- package/schematics/migration.json +10 -0
- package/schematics/migrations/v0-7.cjs +70 -0
- package/schematics/ng-add/index.cjs +234 -0
- package/schematics/ng-add/schema.json +43 -0
- package/tokens/color.css +96 -0
- package/tokens/controls.css +145 -0
- package/tokens/elevation.css +62 -6
- package/tokens/motion.css +304 -66
- package/tokens/radius.css +14 -0
- package/tokens.css +1 -0
- package/tokens.json +1583 -0
- package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
- package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
- package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
- package/types/mesgflow-ui-kit-button.d.ts +23 -38
- package/types/mesgflow-ui-kit-card.d.ts +26 -16
- package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
- package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
- package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
- package/types/mesgflow-ui-kit-command.d.ts +2 -2
- package/types/mesgflow-ui-kit-core.d.ts +279 -21
- package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
- package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
- package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
- package/types/mesgflow-ui-kit-field.d.ts +17 -8
- package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
- package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
- package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
- package/types/mesgflow-ui-kit-input.d.ts +64 -2
- package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
- package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
- package/types/mesgflow-ui-kit-mention.d.ts +59 -0
- package/types/mesgflow-ui-kit-menu.d.ts +41 -2
- package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
- package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
- package/types/mesgflow-ui-kit-popover.d.ts +13 -5
- package/types/mesgflow-ui-kit-progress.d.ts +33 -12
- package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
- package/types/mesgflow-ui-kit-radio.d.ts +2 -2
- package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
- package/types/mesgflow-ui-kit-slider.d.ts +60 -1
- package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
- package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
- package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
- package/types/mesgflow-ui-kit-table.d.ts +2 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
- package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-toast.d.ts +48 -22
- package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
- package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
- package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
- package/types/mesgflow-ui-kit.d.ts +88 -5444
|
@@ -3,7 +3,7 @@ import { OverlayModule } from '@angular/cdk/overlay';
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { model, input, inject, computed, signal, viewChild, forwardRef, Component } from '@angular/core';
|
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
-
import { MF_COLOR_PICKER_LABELS, cn } from '@mesgflow/ui-kit/core';
|
|
6
|
+
import { MF_COLOR_PICKER_LABELS, cn, focusRecipe } from '@mesgflow/ui-kit/core';
|
|
7
7
|
import { Icon } from '@mesgflow/ui-kit/icon';
|
|
8
8
|
import { Popover } from '@mesgflow/ui-kit/popover';
|
|
9
9
|
|
|
@@ -187,19 +187,21 @@ class ColorPicker {
|
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
classes = computed(() => cn('flex aspect-square h-control-md shrink-0 items-center justify-center rounded-md border border-border shadow-control transition-colors duration-fast ease-emphasis ' +
|
|
190
|
-
'hover:border-border-strong
|
|
190
|
+
'hover:border-border-strong ' +
|
|
191
|
+
focusRecipe +
|
|
192
|
+
' ' +
|
|
191
193
|
(this.disabled() ? 'pointer-events-none cursor-not-allowed opacity-50' : 'cursor-pointer')), /* @ts-ignore */
|
|
192
194
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
193
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
194
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: ColorPicker, isStandalone: true, selector: "mf-color-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, palette: { classPropertyName: "palette", publicName: "palette", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "inline-flex" }, providers: [
|
|
195
197
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },
|
|
196
|
-
], viewQueries: [{ propertyName: "areaEl", first: true, predicate: ["area"], descendants: true, isSignal: true }, { propertyName: "hueTrackEl", first: true, predicate: ["hueTrack"], descendants: true, isSignal: true }], exportAs: ["mfColorPicker"], ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-
|
|
198
|
+
], viewQueries: [{ propertyName: "areaEl", first: true, predicate: ["area"], descendants: true, isSignal: true }, { propertyName: "hueTrackEl", first: true, predicate: ["hueTrack"], descendants: true, isSignal: true }], exportAs: ["mfColorPicker"], ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg\"\r\n (click)=\"pickWithEyeDropper()\"\r\n [attr.aria-label]=\"colorPickerLabels().pickFromScreenAriaLabel\"\r\n >\r\n <span mfIcon [size]=\"16\">colorize</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (palette().length > 0) {\r\n <div class=\"mt-3 flex flex-wrap gap-1.5\">\r\n @for (color of palette(); track color) {\r\n <button\r\n type=\"button\"\r\n class=\"h-6 w-6 rounded-sm border border-border transition-transform duration-fast hover:scale-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus-ring\"\r\n [style.background]=\"color\"\r\n [attr.aria-label]=\"color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</mf-popover>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }] });
|
|
197
199
|
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ColorPicker, decorators: [{
|
|
199
201
|
type: Component,
|
|
200
202
|
args: [{ selector: 'mf-color-picker', exportAs: 'mfColorPicker', host: { class: 'inline-flex' }, imports: [OverlayModule, Icon, Popover], providers: [
|
|
201
203
|
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },
|
|
202
|
-
], template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-
|
|
204
|
+
], template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg\"\r\n (click)=\"pickWithEyeDropper()\"\r\n [attr.aria-label]=\"colorPickerLabels().pickFromScreenAriaLabel\"\r\n >\r\n <span mfIcon [size]=\"16\">colorize</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (palette().length > 0) {\r\n <div class=\"mt-3 flex flex-wrap gap-1.5\">\r\n @for (color of palette(); track color) {\r\n <button\r\n type=\"button\"\r\n class=\"h-6 w-6 rounded-sm border border-border transition-transform duration-fast hover:scale-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus-ring\"\r\n [style.background]=\"color\"\r\n [attr.aria-label]=\"color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</mf-popover>\r\n" }]
|
|
203
205
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], palette: [{ type: i0.Input, args: [{ isSignal: true, alias: "palette", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], areaEl: [{ type: i0.ViewChild, args: ['area', { isSignal: true }] }], hueTrackEl: [{ type: i0.ViewChild, args: ['hueTrack', { isSignal: true }] }] } });
|
|
204
206
|
|
|
205
207
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-color-picker.mjs","sources":["../../../projects/ui-kit/color-picker/color.ts","../../../projects/ui-kit/color-picker/color-picker.ts","../../../projects/ui-kit/color-picker/color-picker.html","../../../projects/ui-kit/color-picker/mesgflow-ui-kit-color-picker.ts"],"sourcesContent":["export interface Hsv {\r\n h: number; // 0-360\r\n s: number; // 0-100\r\n v: number; // 0-100\r\n}\r\n\r\nexport interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex.trim());\r\n if (!match) return null;\r\n return { r: parseInt(match[1], 16), g: parseInt(match[2], 16), b: parseInt(match[3], 16) };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (n: number) =>\r\n Math.round(Math.min(255, Math.max(0, n)))\r\n .toString(16)\r\n .padStart(2, '0');\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nexport function rgbToHsv({ r, g, b }: Rgb): Hsv {\r\n const rn = r / 255;\r\n const gn = g / 255;\r\n const bn = b / 255;\r\n const max = Math.max(rn, gn, bn);\r\n const min = Math.min(rn, gn, bn);\r\n const delta = max - min;\r\n\r\n let h = 0;\r\n if (delta !== 0) {\r\n if (max === rn) h = 60 * (((gn - bn) / delta) % 6);\r\n else if (max === gn) h = 60 * ((bn - rn) / delta + 2);\r\n else h = 60 * ((rn - gn) / delta + 4);\r\n }\r\n if (h < 0) h += 360;\r\n\r\n const s = max === 0 ? 0 : (delta / max) * 100;\r\n const v = max * 100;\r\n\r\n return { h, s, v };\r\n}\r\n\r\nexport function hsvToRgb({ h, s, v }: Hsv): Rgb {\r\n const sn = s / 100;\r\n const vn = v / 100;\r\n const c = vn * sn;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = vn - c;\r\n\r\n let rp: number;\r\n let gp: number;\r\n let bp: number;\r\n if (h < 60) [rp, gp, bp] = [c, x, 0];\r\n else if (h < 120) [rp, gp, bp] = [x, c, 0];\r\n else if (h < 180) [rp, gp, bp] = [0, c, x];\r\n else if (h < 240) [rp, gp, bp] = [0, x, c];\r\n else if (h < 300) [rp, gp, bp] = [x, 0, c];\r\n else [rp, gp, bp] = [c, 0, x];\r\n\r\n return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { cn, MF_COLOR_PICKER_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { hexToRgb, hsvToRgb, rgbToHex, rgbToHsv, type Hsv } from './color';\r\n\r\ninterface EyeDropperResult {\r\n sRGBHex: string;\r\n}\r\n\r\ninterface EyeDropperApi {\r\n open(): Promise<EyeDropperResult>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n EyeDropper?: new () => EyeDropperApi;\r\n }\r\n}\r\n\r\n/**\r\n * `<mf-color-picker [(value)]=\"brandColor\" [palette]=\"brandPalette\" />` —\r\n * HSV alanı + hue slider + hex girdi + marka paleti + (destekleniyorsa)\r\n * `EyeDropper` API. `@angular/aria`'da hazır bir color-picker pattern'i YOK\r\n * — HSV alanı ve hue slider'ı `Slider`'daki AYNI hand-rolled pointer/klavye\r\n * yaklaşımıyla kuruldu. Overlay pozisyonlaması `Select`'in kanıtlanmış\r\n * `cdkConnectedOverlay` deseni.\r\n */\r\n@Component({\r\n selector: 'mf-color-picker',\r\n exportAs: 'mfColorPicker',\r\n host: { class: 'inline-flex' },\r\n imports: [OverlayModule, Icon, Popover],\r\n templateUrl: './color-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },\r\n ],\r\n})\r\nexport class ColorPicker implements ControlValueAccessor {\r\n /** Varsayılan — kitin kendi marka rengi (`--color-primary-600`, bkz. tokens/color.css) — jenerik bir Tailwind yeşili DEĞİL. */\r\n readonly value = model('#004d40');\r\n readonly palette = input<string[]>([]);\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly colorPickerLabels = inject(MF_COLOR_PICKER_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.colorPickerLabels().ariaLabel,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly hexDraft = signal('');\r\n\r\n protected readonly areaEl = viewChild<ElementRef<HTMLElement>>('area');\r\n protected readonly hueTrackEl = viewChild<ElementRef<HTMLElement>>('hueTrack');\r\n\r\n protected readonly hsv = computed<Hsv>(() =>\r\n rgbToHsv(hexToRgb(this.value()) ?? { r: 0, g: 0, b: 0 }),\r\n );\r\n\r\n protected readonly areaBackground = computed(\r\n () =>\r\n `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent), hsl(${this.hsv().h}, 100%, 50%)`,\r\n );\r\n\r\n protected readonly supportsEyeDropper = typeof window !== 'undefined' && !!window.EyeDropper;\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value || '#000000');\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.disabled()) return;\r\n this.hexDraft.set(this.value());\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.onTouched();\r\n }\r\n\r\n private setHsv(next: Partial<Hsv>): void {\r\n const hex = rgbToHex(hsvToRgb({ ...this.hsv(), ...next }));\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected onAreaPointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n protected onAreaPointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n private updateFromAreaPointer(event: PointerEvent): void {\r\n const rect = this.areaEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const s = Math.min(100, Math.max(0, ((event.clientX - rect.left) / rect.width) * 100));\r\n const v = Math.min(100, Math.max(0, 100 - ((event.clientY - rect.top) / rect.height) * 100));\r\n this.setHsv({ s, v });\r\n }\r\n\r\n protected onHuePointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n protected onHuePointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n private updateFromHuePointer(event: PointerEvent): void {\r\n const rect = this.hueTrackEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const h = Math.min(360, Math.max(0, ((event.clientX - rect.left) / rect.width) * 360));\r\n this.setHsv({ h });\r\n }\r\n\r\n protected onHexInput(raw: string): void {\r\n this.hexDraft.set(raw);\r\n const rgb = hexToRgb(raw);\r\n if (rgb) {\r\n const hex = rgbToHex(rgb);\r\n this.value.set(hex);\r\n this.onChange(hex);\r\n }\r\n }\r\n\r\n protected selectPaletteColor(hex: string): void {\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected async pickWithEyeDropper(): Promise<void> {\r\n if (!window.EyeDropper) return;\r\n try {\r\n const result = await new window.EyeDropper().open();\r\n this.value.set(result.sRGBHex);\r\n this.hexDraft.set(result.sRGBHex);\r\n this.onChange(result.sRGBHex);\r\n } catch {\r\n // Kullanıcı Escape ile iptal etti — sessizce yut, gerçek bir hata değil.\r\n }\r\n }\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex aspect-square h-control-md shrink-0 items-center justify-center rounded-md border border-border shadow-control transition-colors duration-fast ease-emphasis ' +\r\n 'hover:border-border-strong focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n (this.disabled() ? 'pointer-events-none cursor-not-allowed opacity-50' : 'cursor-pointer'),\r\n ),\r\n );\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg\"\r\n (click)=\"pickWithEyeDropper()\"\r\n [attr.aria-label]=\"colorPickerLabels().pickFromScreenAriaLabel\"\r\n >\r\n <span mfIcon [size]=\"16\">colorize</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (palette().length > 0) {\r\n <div class=\"mt-3 flex flex-wrap gap-1.5\">\r\n @for (color of palette(); track color) {\r\n <button\r\n type=\"button\"\r\n class=\"h-6 w-6 rounded-sm border border-border transition-transform duration-fast hover:scale-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus-ring\"\r\n [style.background]=\"color\"\r\n [attr.aria-label]=\"color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</mf-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-color-picker.mjs","sources":["../../../projects/ui-kit/color-picker/color.ts","../../../projects/ui-kit/color-picker/color-picker.ts","../../../projects/ui-kit/color-picker/color-picker.html","../../../projects/ui-kit/color-picker/mesgflow-ui-kit-color-picker.ts"],"sourcesContent":["export interface Hsv {\r\n h: number; // 0-360\r\n s: number; // 0-100\r\n v: number; // 0-100\r\n}\r\n\r\nexport interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex.trim());\r\n if (!match) return null;\r\n return { r: parseInt(match[1], 16), g: parseInt(match[2], 16), b: parseInt(match[3], 16) };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (n: number) =>\r\n Math.round(Math.min(255, Math.max(0, n)))\r\n .toString(16)\r\n .padStart(2, '0');\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nexport function rgbToHsv({ r, g, b }: Rgb): Hsv {\r\n const rn = r / 255;\r\n const gn = g / 255;\r\n const bn = b / 255;\r\n const max = Math.max(rn, gn, bn);\r\n const min = Math.min(rn, gn, bn);\r\n const delta = max - min;\r\n\r\n let h = 0;\r\n if (delta !== 0) {\r\n if (max === rn) h = 60 * (((gn - bn) / delta) % 6);\r\n else if (max === gn) h = 60 * ((bn - rn) / delta + 2);\r\n else h = 60 * ((rn - gn) / delta + 4);\r\n }\r\n if (h < 0) h += 360;\r\n\r\n const s = max === 0 ? 0 : (delta / max) * 100;\r\n const v = max * 100;\r\n\r\n return { h, s, v };\r\n}\r\n\r\nexport function hsvToRgb({ h, s, v }: Hsv): Rgb {\r\n const sn = s / 100;\r\n const vn = v / 100;\r\n const c = vn * sn;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = vn - c;\r\n\r\n let rp: number;\r\n let gp: number;\r\n let bp: number;\r\n if (h < 60) [rp, gp, bp] = [c, x, 0];\r\n else if (h < 120) [rp, gp, bp] = [x, c, 0];\r\n else if (h < 180) [rp, gp, bp] = [0, c, x];\r\n else if (h < 240) [rp, gp, bp] = [0, x, c];\r\n else if (h < 300) [rp, gp, bp] = [x, 0, c];\r\n else [rp, gp, bp] = [c, 0, x];\r\n\r\n return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { cn, MF_COLOR_PICKER_LABELS, focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { hexToRgb, hsvToRgb, rgbToHex, rgbToHsv, type Hsv } from './color';\r\n\r\ninterface EyeDropperResult {\r\n sRGBHex: string;\r\n}\r\n\r\ninterface EyeDropperApi {\r\n open(): Promise<EyeDropperResult>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n EyeDropper?: new () => EyeDropperApi;\r\n }\r\n}\r\n\r\n/**\r\n * `<mf-color-picker [(value)]=\"brandColor\" [palette]=\"brandPalette\" />` —\r\n * HSV alanı + hue slider + hex girdi + marka paleti + (destekleniyorsa)\r\n * `EyeDropper` API. `@angular/aria`'da hazır bir color-picker pattern'i YOK\r\n * — HSV alanı ve hue slider'ı `Slider`'daki AYNI hand-rolled pointer/klavye\r\n * yaklaşımıyla kuruldu. Overlay pozisyonlaması `Select`'in kanıtlanmış\r\n * `cdkConnectedOverlay` deseni.\r\n */\r\n@Component({\r\n selector: 'mf-color-picker',\r\n exportAs: 'mfColorPicker',\r\n host: { class: 'inline-flex' },\r\n imports: [OverlayModule, Icon, Popover],\r\n templateUrl: './color-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },\r\n ],\r\n})\r\nexport class ColorPicker implements ControlValueAccessor {\r\n /** Varsayılan — kitin kendi marka rengi (`--color-primary-600`, bkz. tokens/color.css) — jenerik bir Tailwind yeşili DEĞİL. */\r\n readonly value = model('#004d40');\r\n readonly palette = input<string[]>([]);\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly colorPickerLabels = inject(MF_COLOR_PICKER_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.colorPickerLabels().ariaLabel,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly hexDraft = signal('');\r\n\r\n protected readonly areaEl = viewChild<ElementRef<HTMLElement>>('area');\r\n protected readonly hueTrackEl = viewChild<ElementRef<HTMLElement>>('hueTrack');\r\n\r\n protected readonly hsv = computed<Hsv>(() =>\r\n rgbToHsv(hexToRgb(this.value()) ?? { r: 0, g: 0, b: 0 }),\r\n );\r\n\r\n protected readonly areaBackground = computed(\r\n () =>\r\n `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent), hsl(${this.hsv().h}, 100%, 50%)`,\r\n );\r\n\r\n protected readonly supportsEyeDropper = typeof window !== 'undefined' && !!window.EyeDropper;\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value || '#000000');\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.disabled()) return;\r\n this.hexDraft.set(this.value());\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.onTouched();\r\n }\r\n\r\n private setHsv(next: Partial<Hsv>): void {\r\n const hex = rgbToHex(hsvToRgb({ ...this.hsv(), ...next }));\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected onAreaPointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n protected onAreaPointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n private updateFromAreaPointer(event: PointerEvent): void {\r\n const rect = this.areaEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const s = Math.min(100, Math.max(0, ((event.clientX - rect.left) / rect.width) * 100));\r\n const v = Math.min(100, Math.max(0, 100 - ((event.clientY - rect.top) / rect.height) * 100));\r\n this.setHsv({ s, v });\r\n }\r\n\r\n protected onHuePointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n protected onHuePointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n private updateFromHuePointer(event: PointerEvent): void {\r\n const rect = this.hueTrackEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const h = Math.min(360, Math.max(0, ((event.clientX - rect.left) / rect.width) * 360));\r\n this.setHsv({ h });\r\n }\r\n\r\n protected onHexInput(raw: string): void {\r\n this.hexDraft.set(raw);\r\n const rgb = hexToRgb(raw);\r\n if (rgb) {\r\n const hex = rgbToHex(rgb);\r\n this.value.set(hex);\r\n this.onChange(hex);\r\n }\r\n }\r\n\r\n protected selectPaletteColor(hex: string): void {\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected async pickWithEyeDropper(): Promise<void> {\r\n if (!window.EyeDropper) return;\r\n try {\r\n const result = await new window.EyeDropper().open();\r\n this.value.set(result.sRGBHex);\r\n this.hexDraft.set(result.sRGBHex);\r\n this.onChange(result.sRGBHex);\r\n } catch {\r\n // Kullanıcı Escape ile iptal etti — sessizce yut, gerçek bir hata değil.\r\n }\r\n }\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex aspect-square h-control-md shrink-0 items-center justify-center rounded-md border border-border shadow-control transition-colors duration-fast ease-emphasis ' +\r\n 'hover:border-border-strong ' +\r\n focusRecipe +\r\n ' ' +\r\n (this.disabled() ? 'pointer-events-none cursor-not-allowed opacity-50' : 'cursor-pointer'),\r\n ),\r\n );\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg\"\r\n (click)=\"pickWithEyeDropper()\"\r\n [attr.aria-label]=\"colorPickerLabels().pickFromScreenAriaLabel\"\r\n >\r\n <span mfIcon [size]=\"16\">colorize</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (palette().length > 0) {\r\n <div class=\"mt-3 flex flex-wrap gap-1.5\">\r\n @for (color of palette(); track color) {\r\n <button\r\n type=\"button\"\r\n class=\"h-6 w-6 rounded-sm border border-border transition-transform duration-fast hover:scale-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus-ring\"\r\n [style.background]=\"color\"\r\n [attr.aria-label]=\"color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</mf-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i1 from '@angular/cdk/overlay';
|
|
2
2
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { input, model, inject, computed, signal, forwardRef, Component } from '@angular/core';
|
|
4
|
+
import { input, model, booleanAttribute, output, inject, computed, viewChild, signal, forwardRef, Component } from '@angular/core';
|
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
-
import { MF_COMBOBOX_LABELS, cn } from '@mesgflow/ui-kit/core';
|
|
6
|
+
import { focusRecipe, MF_COMBOBOX_LABELS, nextId, cn } from '@mesgflow/ui-kit/core';
|
|
7
7
|
import { Icon } from '@mesgflow/ui-kit/icon';
|
|
8
8
|
import { Popover } from '@mesgflow/ui-kit/popover';
|
|
9
9
|
import { cva } from 'class-variance-authority';
|
|
@@ -12,7 +12,9 @@ import { cva } from 'class-variance-authority';
|
|
|
12
12
|
const comboboxTriggerVariants = cva('w-full rounded-md border border-border bg-surface pe-9 text-sm text-fg shadow-control ' +
|
|
13
13
|
'transition-colors duration-fast ease-emphasis placeholder:text-fg-subtle ' +
|
|
14
14
|
'hover:border-border-strong ' +
|
|
15
|
-
'focus:border-accent
|
|
15
|
+
'focus:border-accent ' +
|
|
16
|
+
focusRecipe +
|
|
17
|
+
' ' +
|
|
16
18
|
'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:hover:border-border', {
|
|
17
19
|
variants: {
|
|
18
20
|
size: {
|
|
@@ -30,7 +32,7 @@ const comboboxTriggerVariants = cva('w-full rounded-md border border-border bg-s
|
|
|
30
32
|
const comboboxOptionVariants = cva('flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2.5 py-1.5 text-fg-muted transition-colors duration-fast ease-emphasis', {
|
|
31
33
|
variants: {
|
|
32
34
|
highlighted: {
|
|
33
|
-
true: 'bg-
|
|
35
|
+
true: 'bg-state-hover text-fg',
|
|
34
36
|
false: '',
|
|
35
37
|
},
|
|
36
38
|
selected: {
|
|
@@ -41,63 +43,94 @@ const comboboxOptionVariants = cva('flex cursor-pointer items-center justify-bet
|
|
|
41
43
|
defaultVariants: { highlighted: false, selected: false },
|
|
42
44
|
});
|
|
43
45
|
|
|
44
|
-
let comboboxIdSeq = 0;
|
|
45
46
|
/**
|
|
46
|
-
* `<mf-combobox [options]="opts" [(value)]="chosen"
|
|
47
|
+
* `<mf-combobox [options]="opts" [(value)]="chosen" />` — filtrelenebilir tekli seçim.
|
|
48
|
+
* `<mf-combobox multiple [options]="opts" [(values)]="tags" creatable (create)="add($event)" />`
|
|
49
|
+
* — çoklu seçim (çipler), isteğe bağlı "oluştur" satırı.
|
|
47
50
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* deseni (highlighted index, `role="listbox"`/`role="option"`) buraya
|
|
53
|
-
* genişletmek, dört ayrı directive'i (Combobox/ComboboxPopup/ComboboxWidget/
|
|
54
|
-
* Listbox/Option) doğru sırayla bağlamaktan daha az riskli.
|
|
51
|
+
* ARIA 1.2 combobox deseni: input `role="combobox"` + `aria-controls` (listbox)
|
|
52
|
+
* + `aria-activedescendant` (vurgulanan satır; odak input'ta kalır). Çoklu
|
|
53
|
+
* modda listbox `aria-multiselectable`, seçim sonrası panel AÇIK kalır ve
|
|
54
|
+
* sorgu temizlenir; boş sorguda Backspace son çipi kaldırır.
|
|
55
55
|
*
|
|
56
|
-
* `(mousedown)="$event.preventDefault()"` seçenek satırında ZORUNLU —
|
|
57
|
-
*
|
|
58
|
-
* (klasik combobox tuzağı).
|
|
56
|
+
* `(mousedown)="$event.preventDefault()"` seçenek satırında ZORUNLU — aksi
|
|
57
|
+
* halde input'un `blur`'ı `click`'ten ÖNCE tetiklenip paneli kapatır.
|
|
59
58
|
*/
|
|
60
59
|
class Combobox {
|
|
61
60
|
options = input.required(/* @ts-ignore */
|
|
62
61
|
...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
63
62
|
value = model(null, /* @ts-ignore */
|
|
64
63
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
64
|
+
/** Çoklu modda seçili değerler. */
|
|
65
|
+
values = model([], /* @ts-ignore */
|
|
66
|
+
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
67
|
+
multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
68
|
+
/** Sorgu hiçbir etiketle birebir eşleşmezse listenin sonunda "oluştur" satırı. */
|
|
69
|
+
creatable = input(false, { ...(ngDevMode ? { debugName: "creatable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
65
70
|
placeholder = input(/* @ts-ignore */
|
|
66
71
|
...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
67
|
-
disabled = input(false, /*
|
|
68
|
-
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
72
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
69
73
|
size = input('md', /* @ts-ignore */
|
|
70
74
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
71
|
-
hasError = input(false, /*
|
|
72
|
-
...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
|
|
75
|
+
hasError = input(false, { ...(ngDevMode ? { debugName: "hasError" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
73
76
|
ariaLabel = input('', /* @ts-ignore */
|
|
74
77
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
78
|
+
/** Harici `<label for>` / `mf-field for` için input id'si. */
|
|
79
|
+
inputId = input(/* @ts-ignore */
|
|
80
|
+
...(ngDevMode ? [undefined, { debugName: "inputId" }] : /* istanbul ignore next */ []));
|
|
81
|
+
/** "Oluştur" satırı seçildi — tüketici seçeneği ekleyip seçer. */
|
|
82
|
+
create = output();
|
|
75
83
|
onChange = () => { };
|
|
76
84
|
onTouched = () => { };
|
|
77
|
-
|
|
78
|
-
effectivePlaceholder = computed(() => this.placeholder() ?? this.
|
|
85
|
+
labels = inject(MF_COMBOBOX_LABELS);
|
|
86
|
+
effectivePlaceholder = computed(() => this.placeholder() ?? this.labels().placeholder, /* @ts-ignore */
|
|
79
87
|
...(ngDevMode ? [{ debugName: "effectivePlaceholder" }] : /* istanbul ignore next */ []));
|
|
88
|
+
inputEl = viewChild('inputEl', /* @ts-ignore */
|
|
89
|
+
...(ngDevMode ? [{ debugName: "inputEl" }] : /* istanbul ignore next */ []));
|
|
80
90
|
open = signal(false, /* @ts-ignore */
|
|
81
91
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
82
92
|
query = signal('', /* @ts-ignore */
|
|
83
93
|
...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
|
|
84
94
|
highlighted = signal(0, /* @ts-ignore */
|
|
85
95
|
...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
|
|
86
|
-
|
|
96
|
+
listboxId = nextId('mf-combobox-listbox');
|
|
97
|
+
optionIdPrefix = nextId('mf-combobox-option');
|
|
98
|
+
triggerClasses = computed(() => cn(comboboxTriggerVariants({ size: this.size(), hasError: this.hasError() }), this.multiple() && 'flex flex-wrap items-center gap-1 cursor-text focus-within:border-accent'), /* @ts-ignore */
|
|
87
99
|
...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
|
|
88
|
-
/** ARIA 1.2 combobox deseni: input'un `aria-controls`'ü panel listbox'ına işaret etmeli. */
|
|
89
|
-
listboxId = `mf-combobox-listbox-${++comboboxIdSeq}`;
|
|
90
100
|
selectedLabel = computed(() => this.options().find((o) => o.value === this.value())?.label ?? '', /* @ts-ignore */
|
|
91
101
|
...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
selectedOptions = computed(() => {
|
|
103
|
+
const values = this.values();
|
|
104
|
+
return values
|
|
105
|
+
.map((v) => this.options().find((o) => o.value === v))
|
|
106
|
+
.filter((o) => !!o);
|
|
97
107
|
}, /* @ts-ignore */
|
|
98
|
-
...(ngDevMode ? [{ debugName: "
|
|
108
|
+
...(ngDevMode ? [{ debugName: "selectedOptions" }] : /* istanbul ignore next */ []));
|
|
109
|
+
rows = computed(() => {
|
|
110
|
+
const q = this.query().trim().toLocaleLowerCase();
|
|
111
|
+
const matches = !q
|
|
112
|
+
? this.options()
|
|
113
|
+
: this.options().filter((o) => `${o.label} ${o.description ?? ''}`.toLocaleLowerCase().includes(q));
|
|
114
|
+
const rows = matches.map((option) => ({ kind: 'option', option }));
|
|
115
|
+
const exact = this.options().some((o) => o.label.toLocaleLowerCase() === q);
|
|
116
|
+
if (this.creatable() && q && !exact)
|
|
117
|
+
rows.push({ kind: 'create', query: this.query().trim() });
|
|
118
|
+
return rows;
|
|
119
|
+
}, /* @ts-ignore */
|
|
120
|
+
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
121
|
+
activeDescendant = computed(() => this.open() && this.rows().length ? `${this.optionIdPrefix}-${this.highlighted()}` : null, /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "activeDescendant" }] : /* istanbul ignore next */ []));
|
|
123
|
+
createLabel(query) {
|
|
124
|
+
return this.labels().create.replace('{query}', query);
|
|
125
|
+
}
|
|
126
|
+
removeLabel(label) {
|
|
127
|
+
return this.labels().remove.replace('{label}', label);
|
|
128
|
+
}
|
|
99
129
|
writeValue(value) {
|
|
100
|
-
this.
|
|
130
|
+
if (this.multiple())
|
|
131
|
+
this.values.set(Array.isArray(value) ? value : []);
|
|
132
|
+
else
|
|
133
|
+
this.value.set(value ?? null);
|
|
101
134
|
}
|
|
102
135
|
registerOnChange(fn) {
|
|
103
136
|
this.onChange = fn;
|
|
@@ -112,66 +145,113 @@ class Combobox {
|
|
|
112
145
|
this.highlighted.set(0);
|
|
113
146
|
this.open.set(true);
|
|
114
147
|
}
|
|
148
|
+
focusInput() {
|
|
149
|
+
this.inputEl()?.nativeElement.focus();
|
|
150
|
+
}
|
|
115
151
|
onQueryInput(raw) {
|
|
116
152
|
this.query.set(raw);
|
|
117
153
|
this.highlighted.set(0);
|
|
118
154
|
if (!this.open())
|
|
119
155
|
this.open.set(true);
|
|
120
156
|
}
|
|
121
|
-
|
|
157
|
+
choose(row) {
|
|
158
|
+
if (row.kind === 'create') {
|
|
159
|
+
this.create.emit(row.query);
|
|
160
|
+
this.query.set('');
|
|
161
|
+
if (!this.multiple())
|
|
162
|
+
this.close();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const option = row.option;
|
|
166
|
+
if (option.disabled)
|
|
167
|
+
return;
|
|
168
|
+
if (this.multiple()) {
|
|
169
|
+
const values = this.values();
|
|
170
|
+
const next = values.includes(option.value)
|
|
171
|
+
? values.filter((v) => v !== option.value)
|
|
172
|
+
: [...values, option.value];
|
|
173
|
+
this.values.set(next);
|
|
174
|
+
this.onChange(next);
|
|
175
|
+
this.query.set('');
|
|
176
|
+
this.focusInput();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
122
179
|
this.value.set(option.value);
|
|
123
180
|
this.onChange(option.value);
|
|
124
181
|
this.close();
|
|
125
182
|
}
|
|
183
|
+
removeValue(value) {
|
|
184
|
+
const next = this.values().filter((v) => v !== value);
|
|
185
|
+
this.values.set(next);
|
|
186
|
+
this.onChange(next);
|
|
187
|
+
this.focusInput();
|
|
188
|
+
}
|
|
126
189
|
close() {
|
|
127
190
|
this.open.set(false);
|
|
128
191
|
this.query.set('');
|
|
129
192
|
this.onTouched();
|
|
130
193
|
}
|
|
131
194
|
isSelected(option) {
|
|
132
|
-
return option.value === this.value();
|
|
195
|
+
return this.multiple() ? this.values().includes(option.value) : option.value === this.value();
|
|
133
196
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
selected: this.isSelected(option),
|
|
138
|
-
}));
|
|
197
|
+
rowClasses(row, index) {
|
|
198
|
+
const selected = row.kind === 'option' && this.isSelected(row.option);
|
|
199
|
+
return cn(comboboxOptionVariants({ highlighted: index === this.highlighted() && !selected, selected }), row.kind === 'option' && row.option.disabled && 'pointer-events-none opacity-50', selected && index === this.highlighted() && 'outline-1 -outline-offset-1 outline-accent/40');
|
|
139
200
|
}
|
|
140
201
|
onKeydown(event) {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
202
|
+
const rows = this.rows();
|
|
203
|
+
switch (event.key) {
|
|
204
|
+
case 'Escape':
|
|
205
|
+
if (this.open()) {
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
this.close();
|
|
208
|
+
}
|
|
209
|
+
return;
|
|
210
|
+
case 'ArrowDown':
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
if (!this.open()) {
|
|
213
|
+
this.open.set(true);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.highlighted.update((i) => Math.min(rows.length - 1, i + 1));
|
|
217
|
+
return;
|
|
218
|
+
case 'ArrowUp':
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
this.highlighted.update((i) => Math.max(0, i - 1));
|
|
221
|
+
return;
|
|
222
|
+
case 'Home':
|
|
223
|
+
if (this.open()) {
|
|
224
|
+
event.preventDefault();
|
|
225
|
+
this.highlighted.set(0);
|
|
226
|
+
}
|
|
227
|
+
return;
|
|
228
|
+
case 'End':
|
|
229
|
+
if (this.open()) {
|
|
230
|
+
event.preventDefault();
|
|
231
|
+
this.highlighted.set(Math.max(0, rows.length - 1));
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
case 'Enter': {
|
|
235
|
+
event.preventDefault();
|
|
236
|
+
const row = rows[this.highlighted()];
|
|
237
|
+
if (row)
|
|
238
|
+
this.choose(row);
|
|
151
239
|
return;
|
|
152
240
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this.highlighted.update((i) => Math.max(0, i - 1));
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (event.key === 'Enter') {
|
|
162
|
-
event.preventDefault();
|
|
163
|
-
const option = options[this.highlighted()];
|
|
164
|
-
if (option)
|
|
165
|
-
this.select(option);
|
|
241
|
+
case 'Backspace':
|
|
242
|
+
if (this.multiple() && !this.query() && this.values().length) {
|
|
243
|
+
this.removeValue(this.values()[this.values().length - 1]);
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
166
246
|
}
|
|
167
247
|
}
|
|
168
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
169
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.
|
|
248
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Combobox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Combobox, isStandalone: true, selector: "mf-combobox", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, creatable: { classPropertyName: "creatable", publicName: "creatable", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", values: "valuesChange", create: "create" }, host: { classAttribute: "block" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Combobox), multi: true }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], exportAs: ["mfCombobox"], ngImport: i0, template: "<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"relative\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"multiple() ? triggerClasses() : ''\"\r\n (click)=\"multiple() && focusInput()\"\r\n>\r\n @if (multiple()) {\r\n @for (option of selectedOptions(); track option.label) {\r\n <span\r\n class=\"inline-flex max-w-full items-center gap-1 rounded-sm bg-primary-tint py-0.5 ps-2 pe-1 text-xs font-medium text-primary-tint-fg animate-pop\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n <button\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n class=\"flex h-4 w-4 items-center justify-center rounded-xs text-primary-tint-fg/70 hover:bg-state-hover hover:text-primary-tint-fg\"\r\n [attr.aria-label]=\"removeLabel(option.label)\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"$event.stopPropagation(); removeValue(option.value)\"\r\n >\r\n <span mfIcon [size]=\"12\">close</span>\r\n </button>\r\n </span>\r\n }\r\n }\r\n <input\r\n #inputEl\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n autocomplete=\"off\"\r\n [attr.id]=\"inputId() || null\"\r\n [class]=\"\r\n multiple()\r\n ? 'min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg outline-none placeholder:text-fg-subtle'\r\n : triggerClasses()\r\n \"\r\n [value]=\"open() || multiple() ? query() : selectedLabel()\"\r\n [placeholder]=\"multiple() && selectedOptions().length ? '' : effectivePlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"listboxId\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-invalid]=\"hasError() || null\"\r\n (focus)=\"onFocus()\"\r\n (input)=\"onQueryInput($any($event.target).value)\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"close()\"\r\n />\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 end-3 -translate-y-1/2 text-fg-subtle\"\r\n >unfold_more</span\r\n >\r\n</div>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [hasBackdrop]=\"false\"\r\n [matchTriggerWidth]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n [id]=\"listboxId\"\r\n role=\"listbox\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n class=\"max-h-64 min-w-[8rem] overflow-y-auto text-sm\"\r\n >\r\n @for (row of rows(); track $index; let i = $index) {\r\n <!--\r\n Sat\u0131rlar B\u0130LEREK odaklanabilir de\u011Fil \u2014 odak input'ta kal\u0131r, vurgulanan\r\n sat\u0131r aria-activedescendant ile duyurulur.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [id]=\"optionIdPrefix + '-' + i\"\r\n [attr.aria-selected]=\"row.kind === 'option' ? isSelected(row.option) : false\"\r\n [attr.aria-disabled]=\"(row.kind === 'option' && row.option.disabled) || null\"\r\n [class]=\"rowClasses(row, i)\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"choose(row)\"\r\n >\r\n @if (row.kind === 'option') {\r\n <span class=\"min-w-0\">\r\n <span class=\"block truncate\">{{ row.option.label }}</span>\r\n @if (row.option.description) {\r\n <span class=\"block truncate text-xs text-fg-subtle\">{{\r\n row.option.description\r\n }}</span>\r\n }\r\n </span>\r\n @if (isSelected(row.option)) {\r\n <span mfIcon [size]=\"16\" class=\"shrink-0\">check</span>\r\n }\r\n } @else {\r\n <span class=\"flex items-center gap-2 text-accent\">\r\n <span mfIcon [size]=\"16\">add</span>\r\n <span class=\"truncate\">{{ createLabel(row.query) }}</span>\r\n </span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-3 text-center text-fg-subtle\">{{ labels().noResults }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }] });
|
|
170
250
|
}
|
|
171
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Combobox, decorators: [{
|
|
172
252
|
type: Component,
|
|
173
|
-
args: [{ selector: 'mf-combobox', exportAs: 'mfCombobox', host: { class: 'block' }, imports: [OverlayModule, Icon, Popover], providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Combobox), multi: true }], template: "<div
|
|
174
|
-
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
253
|
+
args: [{ selector: 'mf-combobox', exportAs: 'mfCombobox', host: { class: 'block' }, imports: [OverlayModule, Icon, Popover], providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Combobox), multi: true }], template: "<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"relative\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"multiple() ? triggerClasses() : ''\"\r\n (click)=\"multiple() && focusInput()\"\r\n>\r\n @if (multiple()) {\r\n @for (option of selectedOptions(); track option.label) {\r\n <span\r\n class=\"inline-flex max-w-full items-center gap-1 rounded-sm bg-primary-tint py-0.5 ps-2 pe-1 text-xs font-medium text-primary-tint-fg animate-pop\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n <button\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n class=\"flex h-4 w-4 items-center justify-center rounded-xs text-primary-tint-fg/70 hover:bg-state-hover hover:text-primary-tint-fg\"\r\n [attr.aria-label]=\"removeLabel(option.label)\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"$event.stopPropagation(); removeValue(option.value)\"\r\n >\r\n <span mfIcon [size]=\"12\">close</span>\r\n </button>\r\n </span>\r\n }\r\n }\r\n <input\r\n #inputEl\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n autocomplete=\"off\"\r\n [attr.id]=\"inputId() || null\"\r\n [class]=\"\r\n multiple()\r\n ? 'min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg outline-none placeholder:text-fg-subtle'\r\n : triggerClasses()\r\n \"\r\n [value]=\"open() || multiple() ? query() : selectedLabel()\"\r\n [placeholder]=\"multiple() && selectedOptions().length ? '' : effectivePlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"listboxId\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-invalid]=\"hasError() || null\"\r\n (focus)=\"onFocus()\"\r\n (input)=\"onQueryInput($any($event.target).value)\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"close()\"\r\n />\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 end-3 -translate-y-1/2 text-fg-subtle\"\r\n >unfold_more</span\r\n >\r\n</div>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [hasBackdrop]=\"false\"\r\n [matchTriggerWidth]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n [id]=\"listboxId\"\r\n role=\"listbox\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n class=\"max-h-64 min-w-[8rem] overflow-y-auto text-sm\"\r\n >\r\n @for (row of rows(); track $index; let i = $index) {\r\n <!--\r\n Sat\u0131rlar B\u0130LEREK odaklanabilir de\u011Fil \u2014 odak input'ta kal\u0131r, vurgulanan\r\n sat\u0131r aria-activedescendant ile duyurulur.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [id]=\"optionIdPrefix + '-' + i\"\r\n [attr.aria-selected]=\"row.kind === 'option' ? isSelected(row.option) : false\"\r\n [attr.aria-disabled]=\"(row.kind === 'option' && row.option.disabled) || null\"\r\n [class]=\"rowClasses(row, i)\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"choose(row)\"\r\n >\r\n @if (row.kind === 'option') {\r\n <span class=\"min-w-0\">\r\n <span class=\"block truncate\">{{ row.option.label }}</span>\r\n @if (row.option.description) {\r\n <span class=\"block truncate text-xs text-fg-subtle\">{{\r\n row.option.description\r\n }}</span>\r\n }\r\n </span>\r\n @if (isSelected(row.option)) {\r\n <span mfIcon [size]=\"16\" class=\"shrink-0\">check</span>\r\n }\r\n } @else {\r\n <span class=\"flex items-center gap-2 text-accent\">\r\n <span mfIcon [size]=\"16\">add</span>\r\n <span class=\"truncate\">{{ createLabel(row.query) }}</span>\r\n </span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-3 text-center text-fg-subtle\">{{ labels().noResults }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n" }]
|
|
254
|
+
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }, { type: i0.Output, args: ["valuesChange"] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], creatable: [{ type: i0.Input, args: [{ isSignal: true, alias: "creatable", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], create: [{ type: i0.Output, args: ["create"] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
|
|
175
255
|
|
|
176
256
|
/**
|
|
177
257
|
* Generated bundle index. Do not edit.
|