{"version":3,"file":"kotti-ui.cjs","sources":["../source/kotti-accordion/types.ts","../source/kotti-actionbar/types.ts","../source/zod-utilities/enums.ts","../source/kotti-avatar/types.ts","../source/zod-utilities/refinements.ts","../source/kotti-avatar-group/types.ts","../source/kotti-banner/types.ts","../source/kotti-breadcrumb/types.ts","../source/kotti-button/types.ts","../source/kotti-card/types.ts","../source/kotti-comment/utilities.ts","../source/kotti-comment/types.ts","../source/kotti-drawer/types.ts","../source/kotti-field/constants.ts","../source/kotti-field/types.ts","../source/kotti-field-currency/types.ts","../source/kotti-field-date/constants.ts","../source/kotti-field-date/types.ts","../source/kotti-field-file-upload/types.ts","../source/kotti-field-inline-edit/types.ts","../source/kotti-field-number/types.ts","../source/kotti-field-password/types.ts","../source/kotti-field-radio-group/types.ts","../source/kotti-field-select/types.ts","../source/kotti-field-text-area/types.ts","../source/kotti-field-text/types.ts","../source/kotti-field-toggle/types.ts","../source/kotti-file-upload/types.ts","../source/kotti-filters/types.ts","../source/kotti-heading/types.ts","../source/kotti-line/types.ts","../source/kotti-modal/types.ts","../source/kotti-navbar/types.ts","../source/kotti-pagination/types.ts","../source/kotti-popover/types.ts","../source/kotti-row/types.ts","../source/kotti-table/standard-table/types.ts","../source/kotti-table/table/types.ts","../source/kotti-table/types.ts","../source/kotti-tag/types.ts","../source/kotti-toaster/types.ts","../source/kotti-user-menu/types.ts","../source/kotti-value-label/types.ts","../source/types/decimal-separator.ts","../source/types/kotti.ts","../source/utilities/common.ts","../source/utilities/tippy.ts","../source/make-props.ts","../source/kotti-accordion/hooks.ts","../source/kotti-accordion/KtAccordion.vue","../source/kotti-accordion/index.ts","../source/kotti-actionbar/KtActionbar.vue","../source/kotti-actionbar/index.ts","../source/constants.ts","../source/kotti-avatar/KtAvatar.vue","../source/kotti-avatar/index.ts","../source/kotti-avatar-group/KtAvatarGroup.vue","../source/kotti-avatar-group/index.ts","../source/kotti-button/KtButton.vue","../source/shared-components/menu-option/MenuOptionItem.vue","../source/kotti-button/components/ActionsItem.vue","../source/kotti-button/hooks/use-actions-tippy.ts","../source/kotti-button/KtSplitButton.vue","../source/kotti-button/index.ts","../source/kotti-banner/KtBanner.vue","../source/kotti-banner/index.ts","../source/kotti-breadcrumb/KtBreadcrumb.vue","../source/kotti-breadcrumb/index.ts","../source/kotti-button-group/KtButtonGroup.vue","../source/kotti-button-group/index.ts","../source/kotti-loading/types.ts","../source/kotti-loading/KtLoading.vue","../source/kotti-loading/index.ts","../source/kotti-card/KtCard.vue","../source/kotti-card/index.ts","../source/kotti-row/constants.ts","../source/kotti-col/index.ts","../source/kotti-i18n/constants.ts","../source/kotti-i18n/locales/de-DE.ts","../source/kotti-i18n/locales/en-US.ts","../source/kotti-i18n/locales/es-ES.ts","../source/kotti-i18n/locales/fr-FR.ts","../source/kotti-i18n/locales/ja-JP.ts","../source/kotti-i18n/locales/uk-UA.ts","../source/kotti-i18n/utilities.ts","../source/kotti-i18n/hooks.ts","../source/kotti-comment/components/CommentActions.vue","../source/kotti-comment/components/CommentHeader.vue","../source/kotti-comment/hooks.ts","../source/kotti-comment/components/CommentTextArea.vue","../source/kotti-comment/components/CommentInlineEdit.vue","../source/kotti-comment/components/CommentEntry.vue","../source/kotti-comment/KtCommentInput.vue","../source/kotti-comment/KtComment.vue","../source/kotti-comment/index.ts","../source/kotti-drawer/KtDrawer.vue","../source/kotti-drawer/index.ts","../source/kotti-field/components/FieldHelpText.vue","../source/kotti-label/types.ts","../source/kotti-label/KtLabel.vue","../source/kotti-label/index.ts","../source/kotti-form/constants.ts","../source/kotti-field/errors.ts","../source/kotti-field/hooks.ts","../source/kotti-field/KtField.vue","../source/kotti-field/index.ts","../source/kotti-field/meta.ts","../source/kotti-field-currency/constants.ts","../source/kotti-field-currency/utilities.ts","../source/kotti-field-currency/input-formatter.ts","../source/kotti-field-currency/KtFieldCurrency.vue","../source/kotti-field-currency/index.ts","../source/kotti-popover/constants.ts","../source/utilities/color-scheme.ts","../source/kotti-field-date/hooks.ts","../source/kotti-field-date/components/FieldTime.vue","../source/kotti-field-date/components/GenericDateField.vue","../source/kotti-field-date/KtFieldDate.vue","../source/kotti-field-date/KtFieldDateRange.vue","../source/kotti-field-date/KtFieldDateTime.vue","../source/kotti-field-date/KtFieldDateTimeRange.vue","../source/kotti-field-date/index.ts","../source/kotti-field-file-upload/constants.ts","../source/kotti-field-file-upload/formatters.ts","../source/kotti-field-file-upload/utils/common.ts","../source/kotti-field-file-upload/validators.ts","../source/kotti-field-file-upload/components/DropArea.vue","../source/kotti-field-file-upload/components/ActionButton.vue","../source/kotti-field-file-upload/components/ItemLayout.vue","../source/kotti-field-file-upload/components/FileItem.vue","../source/kotti-field-file-upload/components/PreUploadedFileItem.vue","../source/shared-components/ScrollableContainer.vue","../source/kotti-modal/KtModal.vue","../source/kotti-modal/index.ts","../source/kotti-field-file-upload/components/TakePhoto/utils/common.ts","../source/kotti-field-file-upload/components/TakePhoto/utils/web-rtc.ts","../source/kotti-field-file-upload/components/TakePhoto/Capture.vue","../source/kotti-field-file-upload/components/TakePhoto/Error.vue","../source/kotti-field-file-upload/components/TakePhoto/Review.vue","../source/kotti-field-file-upload/components/TakePhoto/TakePhoto.vue","../source/kotti-field-file-upload/utils/files.ts","../source/kotti-field-file-upload/KtFieldFileUpload.vue","../source/kotti-field-file-upload/index.ts","../source/kotti-field-inline-edit/constants.ts","../source/kotti-field-inline-edit/components/ConfirmButton.vue","../source/kotti-field-inline-edit/components/EditIcon.vue","../source/kotti-field-inline-edit/utils.ts","../source/kotti-field-inline-edit/hooks.ts","../source/kotti-field-inline-edit/KtFieldInlineEdit.vue","../source/kotti-field-inline-edit/index.ts","../source/kotti-field-number/constants.ts","../source/kotti-field-number/utilities.ts","../source/kotti-field-number/KtFieldNumber.vue","../source/kotti-field-number/index.ts","../source/kotti-field-password/constants.ts","../source/kotti-field-password/KtFieldPassword.vue","../source/kotti-field-password/index.ts","../source/kotti-field-radio-group/constants.ts","../source/shared-components/ToggleRadio.vue","../source/kotti-field-radio-group/KtFieldRadioGroup.vue","../source/kotti-field-radio-group/index.ts","../source/kotti-field-select/constants.ts","../source/kotti-tag/KtTag.vue","../source/kotti-tag/index.ts","../source/kotti-field-select/hooks/use-select-tippy.ts","../source/kotti-field-select/components/ActionIcon.vue","../source/kotti-field-select/components/OptionsItem.vue","../source/kotti-field-select/components/Options.vue","../source/kotti-field-select/components/GenericSelectField.vue","../source/kotti-field-select/KtFieldMultiSelect.vue","../source/kotti-field-select/KtFieldMultiSelectRemote.vue","../source/kotti-field-select/KtFieldSingleSelect.vue","../source/kotti-field-select/KtFieldSingleSelectRemote.vue","../source/kotti-field-select/index.ts","../source/kotti-field-text/constants.ts","../source/kotti-field-text/KtFieldText.vue","../source/kotti-field-text/index.ts","../source/kotti-field-text-area/constants.ts","../source/kotti-field-text-area/KtFieldTextArea.vue","../source/kotti-field-text-area/index.ts","../source/kotti-field-toggle/constants.ts","../source/shared-components/toggle-inner/ToggleBox.vue","../source/shared-components/toggle-inner/ToggleSwitch.vue","../source/shared-components/toggle-inner/ToggleInner.vue","../source/kotti-field-toggle/KtFieldToggle.vue","../source/kotti-field-toggle/KtFieldToggleGroup.vue","../source/kotti-field-toggle/index.ts","../source/kotti-field-file-upload/components/ProgressBar.vue","../source/kotti-file-upload/components/UploadedFileItem.vue","../source/kotti-file-upload/utilities.ts","../source/kotti-file-upload/KtFileUpload.vue","../source/kotti-file-upload/index.ts","../source/kotti-filters/components/ButtonLink.vue","../source/kotti-filters/components/FilterActions.vue","../source/kotti-filters/utils.ts","../source/kotti-form/errors.ts","../source/kotti-form/utilities.ts","../source/kotti-form/KtForm.vue","../source/kotti-form/index.ts","../source/kotti-filters/components/FilterRow.vue","../source/kotti-filters/components/FilterList.vue","../source/kotti-filters/components/FilterSearch.vue","../source/kotti-filters/validators.ts","../source/kotti-filters/KtFilters.vue","../source/kotti-filters/index.ts","../source/kotti-form-controller-list/components/FormControllerListItem.vue","../source/kotti-form-controller-list/KtFormControllerList.vue","../source/kotti-form-controller-list/index.ts","../source/kotti-form-controller-object/KtFormControllerObject.vue","../source/kotti-form-controller-object/index.ts","../source/kotti-form-submit/errors.ts","../source/kotti-form-submit/KtFormSubmit.vue","../source/kotti-form-submit/index.ts","../source/kotti-heading/KtHeading.vue","../source/kotti-heading/index.ts","../source/kotti-i18n/KtI18nContext.vue","../source/kotti-i18n/index.ts","../source/kotti-line/KtLine.vue","../source/kotti-line/index.ts","../source/kotti-navbar/components/NavbarTooltip.vue","../source/kotti-navbar/components/NavbarLogo.vue","../source/kotti-navbar/components/NavbarMenu.vue","../source/kotti-navbar/components/NavbarNotification.vue","../source/kotti-navbar/components/NavbarQuickLink.vue","../source/kotti-navbar/constants.ts","../source/kotti-navbar/KtNavbar.vue","../source/kotti-navbar/index.ts","../source/kotti-pagination/utils.ts","../source/kotti-pagination/components/PaginationExpanded.vue","../source/kotti-pagination/components/PaginationFlexible.vue","../source/kotti-pagination/components/PaginationFractionated.vue","../source/kotti-pagination/KtPagination.vue","../source/kotti-pagination/index.ts","../source/kotti-popover/components/ContextEscapeWrapper.vue","../source/kotti-popover/components/IconTextItem.vue","../source/kotti-popover/KtPopover.vue","../source/kotti-popover/index.ts","../source/kotti-row/index.ts","../source/kotti-table/components/SearchInput.vue","../source/kotti-table/KtColumnSelector.vue","../source/kotti-table/table/context.ts","../source/kotti-table/table/use-computed-ref.ts","../source/kotti-table/table/hooks.ts","../source/kotti-table/table/row.ts","../source/kotti-table/KtTable.vue","../source/kotti-table/standard-table/utilities/filters.ts","../source/kotti-table/standard-table/components/filters/Boolean.vue","../source/kotti-table/standard-table/utilities/date.ts","../source/kotti-table/standard-table/components/filters/DateRange.vue","../source/kotti-table/standard-table/components/filters/MultiSelect.vue","../source/kotti-table/standard-table/components/filters/NumberRange.vue","../source/kotti-table/standard-table/components/filters/SingleSelect.vue","../source/kotti-table/standard-table/components/FilterList.vue","../source/kotti-table/standard-table/components/Filters.vue","../source/kotti-table/standard-table/utilities/translation.ts","../source/kotti-table/standard-table/components/GlobalSelection.vue","../source/kotti-table/standard-table/components/PageSize.vue","../source/kotti-table/standard-table/components/Pagination.vue","../source/kotti-table/standard-table/context.ts","../source/kotti-table/KtStandardTable.vue","../source/kotti-table/standard-table/simple-hash.ts","../source/kotti-table/standard-table/storage.ts","../source/kotti-table/standard-table/hooks.ts","../source/kotti-table/table/column-helper.ts","../source/kotti-table/table/local.ts","../source/kotti-table/index.ts","../source/kotti-toaster/context.ts","../source/kotti-toaster/KtToast.vue","../source/kotti-toaster/KtToastProvider.vue","../source/kotti-toaster/KtToaster.vue","../source/kotti-toaster/create-deferred.ts","../source/kotti-toaster/create-toaster.ts","../source/kotti-toaster/index.ts","../source/kotti-user-menu/KtUserMenu.vue","../source/kotti-user-menu/index.ts","../source/kotti-value-label/KtValueLabel.vue","../source/kotti-value-label/index.ts","../source/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nexport namespace KottiAccordion {\n\texport const propsSchema = z.object({\n\t\tdataTest: z.string().nullable().default(null),\n\t\ticon: yocoIconSchema.nullable().default(null),\n\t\tisClosed: z.boolean().default(false),\n\t\ttitle: z.string(),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nexport namespace KottiActionbar {\n\texport const menuItemSchema = z.object({\n\t\tactive: z.boolean().default(false),\n\t\tcomponent: z.string().default('a'),\n\t\tdisabled: z.boolean().default(false),\n\t\ticon: yocoIconSchema,\n\t\tlabel: z.string(),\n\t\tprops: z.record(z.unknown()).optional(),\n\t})\n\texport type MenuItem = z.output<typeof menuItemSchema>\n\n\texport const propsSchema = z.object({\n\t\theaderTitle: z.string().nullable().default(null),\n\t\tmenu: z.array(menuItemSchema).default(() => []),\n\t\tmenuStyle: z\n\t\t\t.object({\n\t\t\t\ticonPosition: z.enum(['left', 'right']),\n\t\t\t})\n\t\t\t.default({\n\t\t\t\ticonPosition: 'left',\n\t\t\t}),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\ntype EnumLike = {\n\t[k: string]: string\n}\n\ntype OneOrMore<T> = [T, ...T[]]\n\n/**\n * returns enum and the union of enum members\n * https://stackoverflow.com/a/77528920\n */\nexport type EnumToPrimitiveUnion<T extends EnumLike> =\n\tT extends Record<string, infer V extends string> ? `${V}` : never\n\n/**\n * Function that takes in an enum,\n * and creates a union of zod.enum and zod.nativeEnum\n *\n * To allow usage of string props rather than enum members on component props.\n * e.g. to allow `'danger'` instead of `SomeEnum.DANGER`, if needed.\n */\nexport function createLooseZodEnumSchema<E extends EnumLike>(\n\tsomeEnum: E,\n): z.ZodUnion<\n\t[z.ZodEnum<OneOrMore<EnumToPrimitiveUnion<E>>>, z.ZodNativeEnum<E>]\n> {\n\tconst enumValues = Object.values(someEnum) as OneOrMore<\n\t\tEnumToPrimitiveUnion<E>\n\t>\n\n\treturn z.union([z.enum(enumValues), z.nativeEnum(someEnum)])\n}\n","import { z } from 'zod'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiAvatar {\n\texport enum Size {\n\t\tLARGE = 'lg',\n\t\tMEDIUM = 'md',\n\t\tSMALL = 'sm',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tisHoverable: z.boolean().default(false),\n\t\tname: z.string().nullable().default(null),\n\t\tsize: createLooseZodEnumSchema(Size).default(Size.MEDIUM),\n\t\tsrc: z.string().nullable().default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import type { z } from 'zod'\n\n/**\n * Similar to z.array().nonempty(), but doesn’t alter type definitions\n *\n * We previously had issues with `.nonempty()` causing arrays generated from\n * `Array.prototype.map` to be detected as possibly empty.\n *\n * @example\n *\n * z.array(z.number()).refine(...refinementNonEmpty)\n */\nexport const refinementNonEmpty: Parameters<z.ZodArray<z.ZodAny>['refine']> = [\n\t(array: unknown[]): boolean => array.length > 0,\n\t{ message: 'array may not be empty' },\n]\n","import { z } from 'zod'\n\nimport { KottiAvatar } from '../kotti-avatar/types'\nimport { refinementNonEmpty } from '../zod-utilities/refinements'\n\nexport namespace KottiAvatarGroup {\n\t/**\n\t * same type of name and src but they are required keys on the item object schema;\n\t * removeDefault: removes the default value &\n\t * unwrap: removes the Nullable wrapper.\n\t */\n\tconst itemSchema = z.object({\n\t\tname: KottiAvatar.propsSchema.shape.name.removeDefault().unwrap(),\n\t\tsrc: KottiAvatar.propsSchema.shape.src.removeDefault().unwrap(),\n\t})\n\n\texport const propsSchema = KottiAvatar.propsSchema\n\t\t.pick({\n\t\t\tisHoverable: true,\n\t\t\tsize: true,\n\t\t})\n\t\t.extend({\n\t\t\tcount: z.number().default(2),\n\t\t\tisStack: z.boolean().default(false),\n\t\t\titems: z.array(itemSchema).refine(...refinementNonEmpty),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nexport namespace KottiBanner {\n\texport const styleSchema = z\n\t\t.object({\n\t\t\tbackgroundColor: z.string(),\n\t\t\tdarkColor: z.string(),\n\t\t\ticon: yocoIconSchema.nullable(),\n\t\t\tlightColor: z.string(),\n\t\t})\n\t\t.strict()\n\n\texport type Style = z.infer<typeof styleSchema>\n\n\texport const propsSchema = z.object({\n\t\taction: z.string().nullable().default(null),\n\t\theader: z.string().nullable().default(null),\n\t\ticon: yocoIconSchema.nullable().default(null),\n\t\tisCloseable: z.boolean().default(false),\n\t\ttext: z.string().nullable().default(null),\n\t\ttype: z\n\t\t\t.union([styleSchema, z.enum(['error', 'info', 'success', 'warning'])])\n\t\t\t.default('info'),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { Yoco, yocoIconSchema } from '@3yourmind/yoco'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiBreadcrumb {\n\texport enum SeparatorType {\n\t\tICON = 'icon',\n\t\tTEXT = 'text',\n\t}\n\texport const separatorTypeSchema = createLooseZodEnumSchema(SeparatorType)\n\n\texport const breadcrumbSchema = z.object({\n\t\tdataTest: z.string().nullable().default(null),\n\t\tisCompleted: z.boolean().default(false),\n\t\tisDisabled: z.boolean().default(false),\n\t\tonClick: z.function(z.tuple([]), z.void()),\n\t\ttitle: z.string(),\n\t})\n\texport type Breadcrumb = z.infer<typeof breadcrumbSchema>\n\n\texport const separatorSchema = z.union([\n\t\tz.object({\n\t\t\tstyle: z.literal(SeparatorType.ICON),\n\t\t\tvalue: yocoIconSchema,\n\t\t}),\n\t\tz.object({\n\t\t\tstyle: z.literal(SeparatorType.TEXT),\n\t\t\tvalue: z.string(),\n\t\t}),\n\t])\n\texport type Separator = z.infer<typeof separatorSchema>\n\n\texport const propsSchema = z.object({\n\t\tactiveIndex: z.number().int().nullable().default(null),\n\t\tbreadcrumbs: z.array(breadcrumbSchema),\n\t\tseparator: separatorSchema.default(\n\t\t\t() =>\n\t\t\t\t({\n\t\t\t\t\tstyle: SeparatorType.ICON,\n\t\t\t\t\tvalue: Yoco.Icon.CHEVRON_RIGHT,\n\t\t\t\t}) as const,\n\t\t),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace Shared {\n\texport enum IconPosition {\n\t\tLEFT = 'left',\n\t\tRIGHT = 'right',\n\t}\n\texport const iconPositionSchema = createLooseZodEnumSchema(IconPosition)\n\n\texport enum Size {\n\t\tLARGE = 'large',\n\t\tMEDIUM = 'medium',\n\t\tSMALL = 'small',\n\t}\n\texport const sizeSchema = createLooseZodEnumSchema(Size)\n\n\texport const propsSchema = z.object({\n\t\ticon: yocoIconSchema.nullable().default(null),\n\t\ticonPosition: iconPositionSchema.default(IconPosition.LEFT),\n\t\tisLoading: z.boolean().default(false),\n\t\tisSubmit: z.boolean().default(false),\n\t\tsize: sizeSchema.default(Size.MEDIUM),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiButton {\n\texport import IconPosition = Shared.IconPosition\n\texport import iconPositionSchema = Shared.iconPositionSchema\n\n\texport import Size = Shared.Size\n\texport import sizeSchema = Shared.sizeSchema\n\n\texport enum ToggleStatus {\n\t\tOFF = 'off',\n\t\tON = 'on',\n\t}\n\texport const toggleStatusSchema = createLooseZodEnumSchema(ToggleStatus)\n\n\texport enum Type {\n\t\tDANGER = 'danger',\n\t\tDEFAULT = 'default',\n\t\tPRIMARY = 'primary',\n\t\tSECONDARY = 'secondary',\n\t\tTEXT = 'text',\n\t}\n\texport const typeSchema = createLooseZodEnumSchema(Type)\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\thelpText: z.string().nullable().default(null),\n\t\tisBlock: z.boolean().default(false),\n\t\tisMultiline: z.boolean().default(false),\n\t\tlabel: z.string().nullable().default(null),\n\t\ttoggleStatus: toggleStatusSchema.nullable().default(null),\n\t\ttype: typeSchema.default(Type.DEFAULT),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiSplitButton {\n\texport import IconPosition = Shared.IconPosition\n\texport import iconPositionSchema = Shared.iconPositionSchema\n\n\texport import Size = Shared.Size\n\texport import sizeSchema = Shared.sizeSchema\n\n\texport enum Type {\n\t\tDEFAULT = 'default',\n\t\tPRIMARY = 'primary',\n\t}\n\texport const typeSchema = createLooseZodEnumSchema(Type)\n\n\texport const actionSchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\ticon: yocoIconSchema.nullable().default(null),\n\t\tisDisabled: z.boolean().default(false),\n\t\tlabel: z.string(),\n\t\tonClick: z.function(z.tuple([]), z.void()),\n\t})\n\texport type Action = z.output<typeof actionSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tactions: z.array(actionSchema).default(() => []),\n\t\tdataTest: z.string().nullable().default(null),\n\t\tisDisabled: z.boolean().default(false),\n\t\tlabel: z.string(),\n\t\ttype: typeSchema.default(Type.DEFAULT),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiCard {\n\texport enum ImagePosition {\n\t\tBOTTOM = 'bottom',\n\t\tMIDDLE = 'middle',\n\t\tTOP = 'top',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tcomponent: z.string().default('div'),\n\t\timgPosition: createLooseZodEnumSchema(ImagePosition).default(\n\t\t\tImagePosition.TOP,\n\t\t),\n\t\timgUrl: z.string().nullable().default(null),\n\t\tisImgLoading: z.boolean().default(false),\n\t\tisTextLoading: z.boolean().default(false),\n\t\tprimaryActionDataTest: z.string().optional(),\n\t\tprimaryActionLabel: z.string().nullable().default(null),\n\t\tsecondaryActionDataTest: z.string().optional(),\n\t\tsecondaryActionLabel: z.string().nullable().default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import escape from 'lodash/escape.js'\n\nexport const defaultParser = (message: string): string => escape(message)\n\nexport const defaultPostEscapeParser = (message: string): string =>\n\tmessage.replaceAll('\\n', '</br>')\n\nexport const resizeTextarea = (textarea: HTMLTextAreaElement | null): void => {\n\ttextarea?.setAttribute('style', 'height: auto')\n\ttextarea?.setAttribute(\n\t\t'style',\n\t\t`height: ${textarea.scrollHeight.toString()}px`,\n\t)\n}\n","import { z } from 'zod'\n\nimport { defaultParser, defaultPostEscapeParser } from './utilities'\n\nconst idSchema = z.union([z.number(), z.string()])\n\nexport namespace KottiComment {\n\texport const userSchema = z.object({\n\t\tavatar: z.string().optional(),\n\t\tid: idSchema,\n\t\tname: z.string(),\n\t})\n\texport type User = z.output<typeof userSchema>\n\n\texport const commentSchema = z.object({\n\t\tcreatedAt: z.string().nullable().default(null),\n\t\tid: idSchema,\n\t\tisDeletable: z.boolean().default(false),\n\t\tisEditable: z.boolean().default(false),\n\t\tisInternal: z.boolean().default(false),\n\t\tisModified: z.boolean().default(false),\n\t\tmessage: z.string(),\n\t\tuser: userSchema,\n\t})\n\n\tconst parseFunctionSchema = z.function().args(z.string()).returns(z.string())\n\n\tconst sharedSchema = commentSchema.extend({\n\t\tallowInternal: z.boolean().default(false),\n\t\tdangerouslyOverrideParser: parseFunctionSchema.default(defaultParser),\n\t\tforceInternal: z.boolean().default(false),\n\t\tisReadOnly: z.boolean().default(false),\n\t\tpostEscapeParser: parseFunctionSchema.default(defaultPostEscapeParser),\n\t\ttabIndex: z.number().default(0),\n\t\tuserAvatar: userSchema.shape.avatar,\n\t})\n\n\texport namespace Reply {\n\t\texport const schema = commentSchema\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport const propsSchema = sharedSchema.extend({\n\t\tdataTest: z.string().optional(),\n\t\treplies: z.array(Reply.schema),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport namespace Entry {\n\t\texport const schema = sharedSchema.omit({ userAvatar: true }).extend({\n\t\t\tdataTest: z.string(),\n\t\t\tisReply: z.boolean().default(false),\n\t\t\tparentId: idSchema.optional(),\n\t\t})\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace Actions {\n\t\texport const schema = sharedSchema\n\t\t\t.pick({\n\t\t\t\tisDeletable: true,\n\t\t\t\tisEditable: true,\n\t\t\t\ttabIndex: true,\n\t\t\t})\n\t\t\t.merge(\n\t\t\t\tEntry.schema.pick({\n\t\t\t\t\tdataTest: true,\n\t\t\t\t\tisReply: true,\n\t\t\t\t}),\n\t\t\t)\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace Header {\n\t\texport const schema = commentSchema\n\t\t\t.pick({\n\t\t\t\tcreatedAt: true,\n\t\t\t\tisInternal: true,\n\t\t\t\tisModified: true,\n\t\t\t\tuser: true,\n\t\t\t})\n\t\t\t.merge(\n\t\t\t\tEntry.schema.pick({\n\t\t\t\t\tisReply: true,\n\t\t\t\t}),\n\t\t\t)\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace InlineEdit {\n\t\texport const schema = sharedSchema\n\t\t\t.pick({\n\t\t\t\tallowInternal: true,\n\t\t\t\tdangerouslyOverrideParser: true,\n\t\t\t\tid: true,\n\t\t\t\tisInternal: true,\n\t\t\t\tmessage: true,\n\t\t\t\tpostEscapeParser: true,\n\t\t\t\ttabIndex: true,\n\t\t\t})\n\t\t\t.merge(\n\t\t\t\tEntry.schema.pick({\n\t\t\t\t\tdataTest: true,\n\t\t\t\t\tisReply: true,\n\t\t\t\t\tparentId: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.extend({\n\t\t\t\tisEditing: z.boolean().default(false),\n\t\t\t})\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace TextArea {\n\t\texport const schema = InlineEdit.schema\n\t\t\t.pick({\n\t\t\t\tallowInternal: true,\n\t\t\t\tdataTest: true,\n\t\t\t\tisInternal: true,\n\t\t\t\tisReply: true,\n\t\t\t\ttabIndex: true,\n\t\t\t})\n\t\t\t.extend({\n\t\t\t\tautofocus: z.boolean().default(false),\n\t\t\t\tmodelValue: InlineEdit.schema.shape.message,\n\t\t\t\tplaceholder: z.string().optional(),\n\t\t\t})\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace Events {\n\t\texport type Add = {\n\t\t\tisInternal?: PropsInternal['isInternal']\n\t\t\tmessage: PropsInternal['message']\n\t\t\tparentId?: PropsInternal['id']\n\t\t\treplyToUserId?: PropsInternal['user']['id']\n\t\t}\n\n\t\texport type Delete = {\n\t\t\tid: PropsInternal['id']\n\t\t\tparentId?: PropsInternal['id']\n\t\t}\n\n\t\texport type Edit = {\n\t\t\tid: PropsInternal['id']\n\t\t\tisInternal?: PropsInternal['isInternal']\n\t\t\tmessage: PropsInternal['message']\n\t\t\tparentId?: PropsInternal['id']\n\t\t}\n\t}\n\n\texport type Translations = {\n\t\tcancelMessage: string\n\t\tclickToCancelLabel: string\n\t\tdeleteButton: string\n\t\teditButton: string\n\t\teditedLabel: string\n\t\tinternalLabel: string\n\t\tlockedHelpText: string\n\t\tpostButton: string\n\t\treplyButton: string\n\t\treplyToLabel: string\n\t\tunlockedHelpText: string\n\t}\n}\n\nexport namespace KottiCommentInput {\n\texport const propsSchema = KottiComment.propsSchema\n\t\t.pick({\n\t\t\tallowInternal: true,\n\t\t\tdataTest: true,\n\t\t\tforceInternal: true,\n\t\t\tisInternal: true,\n\t\t\ttabIndex: true,\n\t\t})\n\t\t.extend({\n\t\t\tautofocus: z.boolean().default(false),\n\t\t\tisReply: z.boolean().default(false),\n\t\t\tparentId: idSchema.optional(),\n\t\t\tplaceholder: z.string().optional(),\n\t\t\treplyToUserId: KottiComment.userSchema.shape.id.optional(),\n\t\t\tuserAvatar: KottiComment.userSchema.shape.avatar,\n\t\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nexport namespace KottiDrawer {\n\texport const propsSchema = z.object({\n\t\tdefaultWidth: z.string().nullable().default(null),\n\t\tdisallowCloseOutside: z.boolean().default(false),\n\t\texpandWidth: z.string().nullable().default(null),\n\t\tisWide: z.boolean().default(false),\n\t})\n\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Props = z.input<typeof propsSchema>\n}\n","/**\n * Explicitly opt-out of using formKey within a KtFormContext\n */\nexport const FORM_KEY_NONE = 'NONE'\n","import type { Ref } from 'vue'\nimport { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nimport type { ReplaceRecordType } from '../types/utilities'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nimport { FORM_KEY_NONE } from './constants'\n\nexport namespace KottiField {\n\texport enum Size {\n\t\tLARGE = 'large',\n\t\tMEDIUM = 'medium',\n\t\tSMALL = 'small',\n\t}\n\n\texport namespace Validation {\n\t\texport const emptySchema = z.object({\n\t\t\ttype: z.literal('empty'),\n\t\t})\n\t\texport type Empty = z.output<typeof emptySchema>\n\n\t\texport const errorSchema = z.object({\n\t\t\ttext: z.string().nullable(),\n\t\t\ttype: z.literal('error'),\n\t\t})\n\t\texport type Error = z.output<typeof errorSchema>\n\n\t\texport const successSchema = z.object({\n\t\t\ttext: z.string().nullable(),\n\t\t\ttype: z.literal('success'),\n\t\t})\n\t\texport type Success = z.output<typeof successSchema>\n\n\t\texport const warningSchema = z.object({\n\t\t\ttext: z.string().nullable(),\n\t\t\ttype: z.literal('warning'),\n\t\t})\n\t\texport type Warning = z.output<typeof warningSchema>\n\n\t\texport const resultSchema = z.union([\n\t\t\temptySchema,\n\t\t\terrorSchema,\n\t\t\tsuccessSchema,\n\t\t\twarningSchema,\n\t\t])\n\t\texport type Result = z.output<typeof resultSchema>\n\n\t\texport const functionSchema = z\n\t\t\t.function()\n\t\t\t.args(z.any())\n\t\t\t.returns(resultSchema)\n\t\texport type Function = z.output<typeof functionSchema>\n\t}\n\n\texport namespace Hook {\n\t\texport interface Parameters<DATA_TYPE> {\n\t\t\temit: (name: 'update:modelValue', ...args: unknown[]) => void\n\n\t\t\t/**\n\t\t\t * Useful for checking validation on required fields\n\t\t\t */\n\t\t\tisEmpty: (value: DATA_TYPE) => boolean\n\t\t\tprops: KottiField.PropsInternal\n\t\t\tsupports: KottiField.Supports\n\t\t}\n\n\t\texport type Returns<DATA_TYPE> = Pick<\n\t\t\tKottiField.PropsInternal,\n\t\t\t| 'helpDescription'\n\t\t\t| 'helpText'\n\t\t\t| 'hideClear'\n\t\t\t| 'hideValidation'\n\t\t\t| 'isBorderless'\n\t\t\t| 'isDisabled'\n\t\t\t| 'isLoading'\n\t\t\t| 'isOptional'\n\t\t\t| 'label'\n\t\t\t| 'leftIcon'\n\t\t\t| 'prefix'\n\t\t\t| 'rightIcon'\n\t\t\t| 'showVisibilityToggle'\n\t\t\t| 'size'\n\t\t\t| 'suffix'\n\t\t> & {\n\t\t\tcurrentValue: DATA_TYPE\n\t\t\t/**\n\t\t\t * Whether the clear button is supported and enabled or not\n\t\t\t * e.g. KtFieldSingleSelect, KtFieldMultiSelect\n\t\t\t */\n\t\t\thasClear: boolean\n\t\t\tinputProps: Readonly<{\n\t\t\t\t/**\n\t\t\t\t * Native HTML Props should have lowercase keys\n\t\t\t\t */\n\t\t\t\t'data-test': string\n\t\t\t\tdisabled: boolean\n\t\t\t\tid: string\n\t\t\t\ttabindex: number\n\t\t\t}>\n\t\t\tisEmpty: boolean\n\t\t\tsetValue(newValue: DATA_TYPE, options?: { forceUpdate: boolean }): void\n\t\t\tvalidation: Readonly<KottiField.Validation.Result>\n\t\t}\n\n\t\texport type ReturnsWithRefs<DATA_TYPE> = {\n\t\t\t[KEY in keyof Returns<DATA_TYPE>]: Ref<Returns<DATA_TYPE>[KEY]>\n\t\t}\n\t}\n\n\texport enum AutoComplete {\n\t\tOFF = 'off',\n\t\tON = 'on',\n\t}\n\n\t/**\n\t * Each attribute on KottiField.Supports maps to one or more\n\t * KtField prop, as follows:\n\t * {\n\t * \tclear: ['hideClear']\n\t * \tdecoration: ['leftIcon', 'rightIcon', 'prefix', 'suffix']\n\t * \ttabIndex: ['tabIndex']\n\t * \tplaceholder: ['placeholder']\n\t * }\n\t *\n\t * The schema is only concerned with props that would have the same type,\n\t * if extended (e.g. decoration props).\n\t * Therefore, doesn't include `placeholder` since it is extended\n\t * differently per field.\n\t */\n\texport const potentiallySupportedPropsSchema = z.object({\n\t\tautoComplete: z\n\t\t\t.union([\n\t\t\t\tz.literal(AutoComplete.ON),\n\t\t\t\tz.literal(AutoComplete.OFF),\n\t\t\t\tz.string(),\n\t\t\t])\n\t\t\t.default(AutoComplete.OFF),\n\t\thideClear: z.boolean().default(false),\n\t\tisBorderless: z.boolean().default(false),\n\t\tleftIcon: yocoIconSchema.nullable().default(null),\n\t\tprefix: z.string().nullable().default(null),\n\t\trightIcon: yocoIconSchema.nullable().default(null),\n\t\tshowVisibilityToggle: z.boolean().default(false),\n\t\tsuffix: z.string().nullable().default(null),\n\t\ttabIndex: z.number().default(0),\n\t})\n\n\t/**\n\t * Includes, but is not limited to, properties that are not consumed by the KtForm itself,\n\t * but rather just passed-down to all fields inside the form to make common\n\t * tasks like disabling the entire form or hiding validation easier.\n\t *\n\t * These values can be explicitly overriden in the field usage\n\t */\n\texport const inheritablePropsSchema = z.object({\n\t\t/**\n\t\t * Is the field disabled?\n\t\t * This will e.g. prevent changing the value\n\t\t */\n\t\tisDisabled: z.boolean().default(false),\n\n\t\t/**\n\t\t * Show a skeleton in place of the input area of the field\n\t\t */\n\t\tisLoading: z.boolean().default(false),\n\n\t\t/**\n\t\t * Should the user have the option to clear the field\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it\n\t\t */\n\t\thideClear: z.never(),\n\n\t\t/**\n\t\t * Prevents the validation (e.g. color, text) from being shown\n\t\t */\n\t\thideValidation: z.boolean().default(false),\n\t\tshowVisibilityToggle: z.boolean().default(false),\n\n\t\t/**\n\t\t * Defines the size of the field which influences child styles\n\t\t * to make fields e.g. appear more compact\n\t\t */\n\t\tsize: createLooseZodEnumSchema(Size).nullable().default(null),\n\t})\n\n\texport type InheritableProps = z.input<typeof inheritablePropsSchema>\n\t/**\n\t * Warning: All values of type `never` are replaced with `any`\n\t */\n\texport type InheritablePropsInternal = ReplaceRecordType<\n\t\tz.output<typeof inheritablePropsSchema>\n\t>\n\n\texport const propsSchema = inheritablePropsSchema.extend({\n\t\t/**\n\t\t * Is the field borderless when not interacted with?\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it.\n\t\t */\n\t\tisBorderless: z.never(),\n\n\t\t/**\n\t\t * Used when KtLabel and a KtField* instance are composed manually\n\t\t */\n\t\tinputId: z.string().nullable().default(null),\n\n\t\t/**\n\t\t * Is used as the 'data-test' property\n\t\t * on the input level\n\t\t */\n\t\tdataTest: z.string().nullable().default(null),\n\n\t\t/**\n\t\t * Specifies that the data KtFormContext[formKey]\n\t\t * If formKey is \"NONE\", it is treated as an explicit opt-out\n\t\t * of the context-based behavior\n\t\t */\n\t\tformKey: z\n\t\t\t.union([z.string(), z.literal(FORM_KEY_NONE)])\n\t\t\t.nullable()\n\t\t\t.default(null),\n\n\t\t/**\n\t\t * Adds a small questionmark popover to the label to explain\n\t\t * more complicated forms to the user on-demand\n\t\t */\n\t\thelpDescription: z.string().nullable().default(null),\n\t\t/**\n\t\t * Adds a description below the label\n\t\t */\n\t\thelpText: z.string().nullable().default(null),\n\n\t\t/**\n\t\t * Shows a Yoco icon on the left side of the field\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it.\n\t\t */\n\t\tleftIcon: z.never(),\n\n\t\t/**\n\t\t * Shown when no value was entered yet\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it\n\t\t *\n\t\t * The overridden type may differ\n\t\t * e.g. KtFieldDateRange needs two placeholders `[string | null, string | null]`\n\t\t */\n\t\tplaceholder: z.never(),\n\n\t\t/**\n\t\t * Shows a Yoco icon on the right side of the field\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it\n\t\t */\n\t\tisOptional: z.boolean().default(false),\n\n\t\tlabel: z.string().nullable().default(null),\n\n\t\trightIcon: z.never(),\n\n\t\t/**\n\t\t * Show some string before the field\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it\n\t\t */\n\t\tprefix: z.never(),\n\n\t\t/**\n\t\t * Show some an eye icon on the right side of the field to hide/show the field content\n\t\t *\n\t\t * This is false by default and is meant to be used for KtFieldPassword\n\t\t */\n\t\tshowVisibilityToggle: z.boolean().default(false),\n\n\t\t/**\n\t\t * Show some string after the field\n\t\t *\n\t\t * This is never by default and specified by component schemas that need it\n\t\t */\n\t\tsuffix: z.never(),\n\n\t\t/**\n\t\t * This is never by default and specified by component schemas that need it\n\t\t */\n\t\ttabIndex: z.never(),\n\n\t\t/**\n\t\t * Without a validator, everything will always default to being valid\n\t\t */\n\t\tvalidator: KottiField.Validation.functionSchema.default(() => ({\n\t\t\ttype: 'empty',\n\t\t})),\n\n\t\t/**\n\t\t * This is never, and specified by each component's schema\n\t\t * v-model value\n\t\t */\n\t\tmodelValue: z.never(),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\t/**\n\t * Warning: All keys of type `never` are replaced with `any`\n\t */\n\texport type PropsInternal = ReplaceRecordType<z.output<typeof propsSchema>>\n\n\t/**\n\t * Object that explicitly specifies which of the KtField.Props are\n\t * supported, since it may not always make sense to have some of\n\t * the props on certain fields.\n\t */\n\texport type Supports = {\n\t\t/**\n\t\t * All fields except KtFieldToggle (checkbox), KtFieldRadioGroup (radio), KtFieldFileUpload,\n\t\t * and KtFieldDate[Range|Time|TimeRange]\n\t\t */\n\t\tautoComplete: boolean\n\n\t\t/**\n\t\t * All fields except KtFieldToggle/KtFieldToggleGroup (checkbox), KtFieldRadioGroup (radio),\n\t\t * and KtFieldFileUpload\n\t\t */\n\t\tborderless: boolean\n\n\t\t/**\n\t\t * In some fields, having a clear button would be nonsensical (e.g. KtFieldToggle)\n\t\t */\n\t\tclear: boolean\n\n\t\t/**\n\t\t * Affects all decoration properties like icons and affixes.\n\t\t * These aren’t supported on e.g. the KtFieldToggleGroup\n\t\t */\n\t\tdecoration: boolean\n\n\t\t/**\n\t\t * Some components don’t have a well-defined place to put placeholders\n\t\t */\n\t\tplaceholder: boolean\n\n\t\t/**\n\t\t * Some third-party components do not support passing a custom tabIndex\n\t\t */\n\t\ttabIndex: boolean\n\t}\n\n\texport type Translations = {\n\t\trequiredMessage: string\n\t}\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace KottiFieldCurrency {\n\tconst VALUE_PROP_REGEX = /^-?(0?|([1-9]\\d*))?(\\.\\d+)?$/\n\texport const modelValueSchema = z.string().regex(VALUE_PROP_REGEX).nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\tautoComplete: true,\n\t\t\t\tisBorderless: true,\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tcurrency: z.string(),\n\t\t\tmaximum: z.number().nullable().default(null),\n\t\t\tminimum: z.number().nullable().default(null),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import type { KottiField } from '../kotti-field/types'\n\n/**\n * ISO8601\n */\nexport const DATE_FORMAT_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/\n/**\n * ISO8601 time without `T`\n */\nexport const DATE_TIME_FORMAT_REGEX = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}(:\\d{2})?$/\n\nexport const KOTTI_FIELD_DATE_SUPPORTS: KottiField.Supports = {\n\tautoComplete: false,\n\tborderless: true,\n\tclear: true,\n\tdecoration: false,\n\tplaceholder: true,\n\ttabIndex: false,\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nimport { DATE_FORMAT_REGEX, DATE_TIME_FORMAT_REGEX } from './constants'\n\nexport namespace Shared {\n\texport const dateShortcutSchema = z.object({\n\t\tkeepOpen: z.boolean().optional(),\n\t\tlabel: z.string(),\n\t})\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\thideClear: true,\n\t\t\t\tisBorderless: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tmaximumDate: z\n\t\t\t\t.union([\n\t\t\t\t\tz.string().regex(DATE_FORMAT_REGEX),\n\t\t\t\t\tz.string().regex(DATE_TIME_FORMAT_REGEX),\n\t\t\t\t])\n\t\t\t\t.nullable()\n\t\t\t\t.default(null),\n\t\t\tminimumDate: z\n\t\t\t\t.union([\n\t\t\t\t\tz.string().regex(DATE_FORMAT_REGEX),\n\t\t\t\t\tz.string().regex(DATE_TIME_FORMAT_REGEX),\n\t\t\t\t])\n\t\t\t\t.nullable()\n\t\t\t\t.default(null),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = {\n\t\tcancelButton: string\n\t\tconfirmButton: string\n\t\thours: string\n\t\tminutes: string\n\t\tseconds: string\n\t}\n}\n\nexport namespace KottiFieldDate {\n\texport const modelValueSchema = z.string().regex(DATE_FORMAT_REGEX).nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: modelValueSchema.default(null),\n\t\tplaceholder: z.string().nullable().default(null),\n\t\tshortcuts: z\n\t\t\t.array(\n\t\t\t\tShared.dateShortcutSchema.extend({\n\t\t\t\t\tvalue: z.string().regex(DATE_FORMAT_REGEX),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.default(() => []),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiFieldDateRange {\n\texport const modelValueSchema = z.tuple([\n\t\tz.string().regex(DATE_FORMAT_REGEX).nullable(),\n\t\tz.string().regex(DATE_FORMAT_REGEX).nullable(),\n\t])\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: modelValueSchema.default((): [null, null] => [null, null]),\n\t\tplaceholder: z\n\t\t\t.tuple([z.string().nullable(), z.string().nullable()])\n\t\t\t.default((): [null, null] => [null, null]),\n\t\tshortcuts: z\n\t\t\t.array(\n\t\t\t\tShared.dateShortcutSchema.extend({\n\t\t\t\t\tvalue: z.tuple([\n\t\t\t\t\t\tz.string().regex(DATE_FORMAT_REGEX),\n\t\t\t\t\t\tz.string().regex(DATE_FORMAT_REGEX),\n\t\t\t\t\t]),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.default(() => []),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiFieldDateTime {\n\texport const modelValueSchema = z\n\t\t.string()\n\t\t.regex(DATE_TIME_FORMAT_REGEX)\n\t\t.nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: modelValueSchema.default(null),\n\t\tplaceholder: z.string().nullable().default(null),\n\t\tshortcuts: z\n\t\t\t.array(\n\t\t\t\tShared.dateShortcutSchema.extend({\n\t\t\t\t\tvalue: z.string().regex(DATE_TIME_FORMAT_REGEX),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.default(() => []),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiFieldDateTimeRange {\n\texport const modelValueSchema = z.tuple([\n\t\tz.string().regex(DATE_TIME_FORMAT_REGEX).nullable(),\n\t\tz.string().regex(DATE_TIME_FORMAT_REGEX).nullable(),\n\t])\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: modelValueSchema.default((): [null, null] => [null, null]),\n\t\tplaceholder: z\n\t\t\t.tuple([z.string().nullable(), z.string().nullable()])\n\t\t\t.default((): [null, null] => [null, null]),\n\t\tshortcuts: z\n\t\t\t.array(\n\t\t\t\tShared.dateShortcutSchema.extend({\n\t\t\t\t\tvalue: z.tuple([\n\t\t\t\t\t\tz.string().regex(DATE_TIME_FORMAT_REGEX),\n\t\t\t\t\t\tz.string().regex(DATE_TIME_FORMAT_REGEX),\n\t\t\t\t\t]),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.default(() => []),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { Yoco, yocoIconSchema } from '@3yourmind/yoco'\n\nimport { KottiField } from '../kotti-field/types'\nimport type { EnumToPrimitiveUnion } from '../zod-utilities/enums'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace Shared {\n\texport enum Validation {\n\t\tINVALID_EXTENSION = 'INVALID_EXTENSION',\n\t\tMAX_SIZE_EXCEEDED = 'MAX_SIZE_EXCEEDED',\n\t\tSUCCESS = 'SUCCESS',\n\t}\n\texport const validationSchema = z.nativeEnum(Validation)\n\n\texport const idSchema = z.union([z.number(), z.string()])\n\n\texport const fileInfoSchema = z.object({\n\t\tdownloadUrl: z.string().optional(),\n\t\tisInternal: z.boolean().optional(),\n\t\tname: z.string(),\n\t\tsize: z.number().int().min(0),\n\t\tvalidation: createLooseZodEnumSchema(Validation),\n\t\tviewUrl: z.string().optional(),\n\t})\n\texport type FileInfo = z.output<typeof fileInfoSchema>\n\n\t// New selected files\n\texport const selectedFileSchema = z.object({\n\t\tfile: z.custom<File>(),\n\t\tid: z.string(),\n\t})\n\n\t// Pre-uploaded files\n\texport const preUploadedFileSchema = z.object({\n\t\tdownloadUrl: z.string().optional(),\n\t\tid: idSchema,\n\t\tisInternal: z.boolean().optional(),\n\t\tname: z.string(),\n\t\tsize: z.number().int().min(0),\n\t\tviewUrl: z.string().optional(),\n\t})\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tallowMultiple: z.boolean().default(false),\n\t\t\tallowPhotos: z.boolean().default(false),\n\t\t\tcollapseExtensionsAfter: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.min(0)\n\t\t\t\t.default(Number.MAX_SAFE_INTEGER),\n\t\t\textensions: z.array(z.string().min(1)).default(() => []),\n\t\t\texternalUrl: z.string().nullable().default(null),\n\t\t\thideDropArea: z.boolean().default(false),\n\t\t\ticon: yocoIconSchema.default(Yoco.Icon.CLOUD_UPLOAD),\n\t\t\tmaxFileSize: z.number().int().min(0).default(Number.MAX_SAFE_INTEGER),\n\t\t})\n\n\texport namespace Events {\n\t\texport type AddFiles = Array<File>\n\n\t\texport type RemoveFile = z.infer<typeof idSchema>\n\t}\n\n\texport namespace ActionButton {\n\t\texport const schema = propsSchema\n\t\t\t.pick({\n\t\t\t\tisDisabled: true,\n\t\t\t})\n\t\t\t.extend({\n\t\t\t\ticon: yocoIconSchema,\n\t\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace DropArea {\n\t\texport const schema = propsSchema\n\t\t\t.pick({\n\t\t\t\tallowMultiple: true,\n\t\t\t\tcollapseExtensionsAfter: true,\n\t\t\t\tdataTest: true,\n\t\t\t\textensions: true,\n\t\t\t\texternalUrl: true,\n\t\t\t\thideDropArea: true,\n\t\t\t\ticon: true,\n\t\t\t\tisDisabled: true,\n\t\t\t\tisLoading: true,\n\t\t\t\tmaxFileSize: true,\n\t\t\t\ttabIndex: true,\n\t\t\t})\n\t\t\t.extend({\n\t\t\t\tinputId: z.string(),\n\t\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace FileItem {\n\t\texport const schema = propsSchema.pick({\n\t\t\tdataTest: true,\n\t\t\textensions: true,\n\t\t\tisDisabled: true,\n\t\t\tmaxFileSize: true,\n\t\t})\n\t}\n\n\texport namespace TakePhoto {\n\t\texport const schema = propsSchema.pick({\n\t\t\tdataTest: true,\n\t\t\tisDisabled: true,\n\t\t\ttabIndex: true,\n\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\n\t\texport const captureSchema = schema.pick({\n\t\t\tdataTest: true,\n\t\t})\n\t\texport type CaptureProps = z.output<typeof captureSchema>\n\n\t\texport const reviewSchema = captureSchema.extend({\n\t\t\tphotoUrl: z.string().nullable().default(null),\n\t\t})\n\t\texport type ReviewProps = z.output<typeof reviewSchema>\n\n\t\texport const errorSchema = captureSchema.extend({\n\t\t\terror: z.string().nullable().default(null),\n\t\t})\n\t\texport type ErrorProps = z.output<typeof errorSchema>\n\n\t\texport namespace Events {\n\t\t\texport type Capture = {\n\t\t\t\tfile: File\n\t\t\t\tphotoUrl: string\n\t\t\t}\n\n\t\t\texport type Error = string\n\t\t}\n\t}\n\n\texport type Translations = {\n\t\tbutton: {\n\t\t\tacceptPhoto: string\n\t\t\tcancel: string\n\t\t\tnextCamera: string\n\t\t\trejectPhoto: string\n\t\t\tretry: string\n\t\t\ttakePhoto: string\n\t\t}\n\t\terror: {\n\t\t\tmultipleNotAllowed: string\n\t\t\tnotAllowed: string\n\t\t\tnotFound: string\n\t\t\tnotSupported: string\n\t\t}\n\t\tlabel: {\n\t\t\tcapture: string\n\t\t\terror: string\n\t\t\tinternal: string\n\t\t\treview: string\n\t\t\tunknown: string\n\t\t}\n\t\tstatusMsg: {\n\t\t\tCANCELED: string\n\t\t\tERROR: string\n\t\t\tHIDDEN: string\n\t\t\tINVALID: string\n\t\t\tNOT_STARTED: string\n\t\t\tREADY_TO_UPLOAD: string\n\t\t\tUPLOADED: string\n\t\t\tUPLOADED_WITH_ERROR: string\n\t\t\tUPLOADING: string\n\t\t}\n\t\ttext: {\n\t\t\tclickToUpload: string\n\t\t\tdragAndDrop: string\n\t\t\tlearnMore: string\n\t\t\tmax: string\n\t\t}\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: string\n\t\t\tMAX_SIZE_EXCEEDED: string\n\t\t}\n\t}\n}\n\nexport namespace KottiFieldFileUpload {\n\texport enum Status {\n\t\tINVALID = 'INVALID',\n\t\tNOT_STARTED = 'NOT_STARTED',\n\t\tREADY_TO_UPLOAD = 'READY_TO_UPLOAD',\n\t\tUPLOADED = 'UPLOADED',\n\t\tUPLOADED_WITH_ERROR = 'UPLOADED_WITH_ERROR',\n\t}\n\texport const statusSchema = createLooseZodEnumSchema(Status)\n\n\texport const selectedFileSchema = Shared.selectedFileSchema.extend({\n\t\tstatus: statusSchema,\n\t})\n\texport type SelectedFile = z.input<typeof selectedFileSchema>\n\n\texport const preUploadedFileSchema = Shared.preUploadedFileSchema.extend({\n\t\tstatus: statusSchema.optional(),\n\t})\n\texport type PreUploadedFile = z.input<typeof preUploadedFileSchema>\n\n\texport const modelValueSchema = selectedFileSchema.or(preUploadedFileSchema)\n\texport const valuesSchema = modelValueSchema.array()\n\texport type ModelValue = z.input<typeof valuesSchema>\n\texport type ValueInternal = z.output<typeof valuesSchema>\n\n\texport const fileInfoSchema = Shared.fileInfoSchema.extend({\n\t\tid: Shared.idSchema,\n\t\tstatus: statusSchema,\n\t})\n\texport type FileInfo = z.output<typeof fileInfoSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: valuesSchema.default(() => []),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport namespace Events {\n\t\texport type SetStatus = {\n\t\t\tid: z.infer<typeof Shared.idSchema>\n\t\t\tstatus: EnumToPrimitiveUnion<typeof Status> | Status\n\t\t}\n\t}\n\n\texport namespace FileItem {\n\t\texport const schema = z.object({\n\t\t\tdataTest: Shared.propsSchema.shape.dataTest,\n\t\t\tfileInfo: fileInfoSchema,\n\t\t\tisDisabled: Shared.propsSchema.shape.isDisabled,\n\t\t})\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace ProgressBar {\n\t\texport const schema = z.object({\n\t\t\tisError: z.boolean().default(false),\n\t\t\tprogress: z.number().min(0).max(1).default(0),\n\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiFieldInlineEdit {\n\texport const modelValueSchema = z.string().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport enum ConfirmationValidation {\n\t\tERROR = 'error',\n\t\tNEVER = 'never',\n\t\tWARNING = 'warning',\n\t}\n\n\texport enum TextStyle {\n\t\tHEADER_ONE = 'h1',\n\t\tHEADER_THREE = 'h3',\n\t\tHEADER_TWO = 'h2',\n\t}\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\tautoComplete: true,\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tisMultiline: z.boolean().default(false),\n\t\t\tisReadonly: z.boolean().default(false),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t\tpreventConfirmationOn: createLooseZodEnumSchema(\n\t\t\t\tConfirmationValidation,\n\t\t\t).default(ConfirmationValidation.NEVER),\n\t\t\ttextStyle: createLooseZodEnumSchema(TextStyle).nullable().default(null),\n\t\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport namespace Events {\n\t\texport type Confirm = KottiFieldInlineEdit.ModelValue\n\t}\n\n\texport type Translations = {\n\t\tplaceholder: string\n\t}\n}\n\nexport type FieldInlineEditElement = HTMLInputElement | HTMLTextAreaElement\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiFieldNumber {\n\texport const modelValueSchema = z.number().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport enum Align {\n\t\tLEFT = 'left',\n\t\tRIGHT = 'right',\n\t}\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\tautoComplete: true,\n\t\t\t\tisBorderless: true,\n\t\t\t\tleftIcon: true,\n\t\t\t\tprefix: true,\n\t\t\t\trightIcon: true,\n\t\t\t\tsuffix: true,\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\talign: createLooseZodEnumSchema(Align).default(Align.LEFT),\n\t\t\t// eslint-disable-next-line no-magic-numbers\n\t\t\tdecimalPlaces: z.number().default(3),\n\t\t\thideChangeButtons: z.boolean().default(false),\n\t\t\thideMaximum: z.boolean().default(false),\n\t\t\tmaximum: z.number().nullable().default(null),\n\t\t\tminimum: z.number().nullable().default(null),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t\tstep: z.number().min(0).default(1),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiFieldPassword {\n\texport const modelValueSchema = z.string().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport enum AutoComplete {\n\t\tCURRENT = 'current-password',\n\t\tNEW = 'new-password',\n\t\tONE_TIME_CODE = 'one-time-code',\n\t}\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.omit({ autoComplete: true }),\n\t\t)\n\t\t.extend({\n\t\t\tautoComplete: createLooseZodEnumSchema(AutoComplete),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t\tshowVisibilityToggle: z.boolean().default(false),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\nimport { refinementNonEmpty } from '../zod-utilities/refinements'\n\nexport namespace KottiFieldRadioGroup {\n\texport const modelValueSchema = z\n\t\t.union([z.string(), z.number(), z.boolean()])\n\t\t.nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const entrySchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\tisDisabled: z.boolean().optional(),\n\t\tlabel: z.string(),\n\t\ttooltip: z.string().optional(),\n\t\tvalue: modelValueSchema,\n\t})\n\texport type Entry = z.output<typeof entrySchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(KottiField.potentiallySupportedPropsSchema.pick({ tabIndex: true }))\n\t\t.extend({\n\t\t\tisInline: z.boolean().default(false),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\toptions: z\n\t\t\t\t.array(entrySchema)\n\t\t\t\t.refine(...refinementNonEmpty)\n\t\t\t\t.refine(\n\t\t\t\t\t(options) =>\n\t\t\t\t\t\tnew Set(options.map(({ value }) => value)).size === options.length,\n\t\t\t\t\t{ message: 'options need to be unique by `value`' },\n\t\t\t\t),\n\t\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace Shared {\n\texport const valueSchema = z\n\t\t.union([z.boolean(), z.number(), z.string()])\n\t\t.nullable()\n\texport type Value = z.output<typeof valueSchema>\n\n\texport const groupSchema = z.object({\n\t\tid: z.union([z.string(), z.number()]),\n\t\tlabel: z.string(),\n\t})\n\n\texport const optionSchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\tgroupId: groupSchema.shape.id.optional(),\n\t\tisDisabled: z.boolean().optional(),\n\t\tlabel: z.string(),\n\t\tvalue: valueSchema,\n\t})\n\texport type Option = z.output<typeof optionSchema>\n\n\texport const actionSchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\tisDisabled: z.boolean().optional(),\n\t\tlabel: z.string(),\n\t\tonClick: z.function(z.tuple([]), z.void()),\n\t})\n\texport type Action = z.output<typeof actionSchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(KottiField.potentiallySupportedPropsSchema)\n\t\t.extend({\n\t\t\tactions: z.array(actionSchema).default(() => []),\n\t\t\tdropdownStyles: z.record(z.unknown()).nullable().default(null),\n\t\t\tgroups: z.array(groupSchema).default(() => []),\n\t\t\tisUnsorted: z.boolean().default(false),\n\t\t\toptions: z.array(optionSchema),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t})\n\n\texport const isMultipleSchema = z.object({\n\t\tclearOnSelect: z.boolean().default(false),\n\t\tcollapseTagsAfter: z.number().int().min(0).default(Number.MAX_SAFE_INTEGER),\n\t\tmaximumSelectable: z.number().int().min(0).default(Number.MAX_SAFE_INTEGER),\n\t\tmodelValue: z.array(Shared.valueSchema).default(() => []),\n\t})\n\n\texport const isRemoteSchema = z.object({\n\t\tisLoadingOptions: z.boolean().default(false),\n\t\tquery: z.string().nullable().default(null),\n\t})\n\n\texport const isSingleSchema = z.object({\n\t\tmodelValue: Shared.valueSchema.default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = {\n\t\tloadingText: string\n\t\tnoDataText: string\n\t\tnoMatchText: string\n\t\tplaceholder: string\n\t\tungroupedText: string\n\t}\n}\n\nexport namespace KottiFieldMultiSelect {\n\texport const modelValueSchema =\n\t\tShared.isMultipleSchema.shape.modelValue._def.innerType\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.merge(Shared.isMultipleSchema)\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = Shared.Translations\n}\n\nexport namespace KottiFieldMultiSelectRemote {\n\texport const modelValueSchema =\n\t\tShared.isMultipleSchema.shape.modelValue._def.innerType\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema\n\t\t.merge(Shared.isMultipleSchema)\n\t\t.merge(Shared.isRemoteSchema)\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = Shared.Translations\n\n\texport namespace Events {\n\t\texport type UpdateQuery = KottiFieldMultiSelectRemote.Props['query']\n\t}\n}\n\nexport namespace KottiFieldSingleSelect {\n\texport const modelValueSchema = Shared.valueSchema\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.merge(Shared.isSingleSchema)\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = Shared.Translations\n}\n\nexport namespace KottiFieldSingleSelectRemote {\n\texport const modelValueSchema = Shared.valueSchema\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema\n\t\t.merge(Shared.isSingleSchema)\n\t\t.merge(Shared.isRemoteSchema)\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = Shared.Translations\n\n\texport namespace Events {\n\t\texport type UpdateQuery = KottiFieldSingleSelectRemote.Props['query']\n\t}\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace KottiFieldTextArea {\n\texport const modelValueSchema = z.string().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\tautoComplete: true,\n\t\t\t\tisBorderless: true,\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tautoSize: z.boolean().default(false),\n\t\t\tmaxHeight: z.number().nullable().default(null),\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t\t// eslint-disable-next-line no-magic-numbers\n\t\t\trows: z.number().default(5),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace KottiFieldText {\n\texport const modelValueSchema = z.string().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.merge(KottiField.potentiallySupportedPropsSchema)\n\t\t.extend({\n\t\t\tmodelValue: modelValueSchema.default(null),\n\t\t\tplaceholder: z.string().nullable().default(null),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\nimport { refinementNonEmpty } from '../zod-utilities/refinements'\n\nexport namespace KottiFieldToggle {\n\texport namespace Shared {\n\t\texport enum Type {\n\t\t\tCHECKBOX = 'checkbox',\n\t\t\tSWITCH = 'switch',\n\t\t}\n\t\texport const propsSchema = KottiField.propsSchema\n\t\t\t.merge(\n\t\t\t\tKottiField.potentiallySupportedPropsSchema.pick({ tabIndex: true }),\n\t\t\t)\n\t\t\t.extend({\n\t\t\t\ttype: createLooseZodEnumSchema(Type).default(Type.CHECKBOX),\n\t\t\t})\n\t}\n\n\texport const modelValueSchema = z.boolean().nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const propsSchema = Shared.propsSchema.extend({\n\t\tmodelValue: modelValueSchema.default(null),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiFieldToggleGroup {\n\texport const modelValueSchema = z.record(z.boolean().nullable()).nullable()\n\texport type ModelValue = z.output<typeof modelValueSchema>\n\n\texport const entrySchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\tisDisabled: z.boolean().optional(),\n\t\tkey: z.string(),\n\t\tlabel: z.string(),\n\t\ttooltip: z.string().optional(),\n\t})\n\texport type Entry = z.output<typeof entrySchema>\n\n\texport const propsSchema = KottiFieldToggle.Shared.propsSchema.extend({\n\t\tisInline: z.boolean().default(false),\n\t\tmodelValue: modelValueSchema.default(null),\n\t\toptions: z\n\t\t\t.array(entrySchema)\n\t\t\t.refine(...refinementNonEmpty)\n\t\t\t.refine(\n\t\t\t\t(options) =>\n\t\t\t\t\tnew Set(options.map(({ key }) => key)).size === options.length,\n\t\t\t\t{ message: 'options need to be unique by `key`' },\n\t\t\t),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { Yoco, yocoIconSchema } from '@3yourmind/yoco'\n\nimport { KottiField } from '../kotti-field/types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiFileUpload {\n\texport enum Validation {\n\t\tINVALID_EXTENSION = 'INVALID_EXTENSION',\n\t\tMAX_SIZE_EXCEEDED = 'MAX_SIZE_EXCEEDED',\n\t\tSUCCESS = 'SUCCESS',\n\t}\n\texport const validationSchema = z.nativeEnum(Validation)\n\n\texport enum Status {\n\t\tCANCELED = 'CANCELED',\n\t\tERROR = 'ERROR',\n\t\tINVALID = 'INVALID',\n\t\tNOT_STARTED = 'NOT_STARTED',\n\t\tUPLOADED = 'UPLOADED',\n\t\tUPLOADED_WITH_ERROR = 'UPLOADED_WITH_ERROR',\n\t\tUPLOADING = 'UPLOADING',\n\t}\n\texport const statusSchema = createLooseZodEnumSchema(Status)\n\t\t.transform((status) => status as Status)\n\t\t.or(\n\t\t\tz.object({\n\t\t\t\tlabel: z.string(),\n\t\t\t\tshowProgress: z.boolean().optional(),\n\t\t\t\ttype: z.enum(['error', 'loading']),\n\t\t\t}),\n\t\t)\n\n\texport const idSchema = z.union([z.number(), z.string()])\n\n\texport const fileInfoSchema = z.object({\n\t\tdownloadUrl: z.string().optional(),\n\t\tid: idSchema,\n\t\tisInternal: z.boolean().optional(),\n\t\tname: z.string(),\n\t\tprogress: z\n\t\t\t.number()\n\t\t\t.min(0)\n\t\t\t.transform((val) => Math.max(1, val))\n\t\t\t.optional(),\n\t\tsize: z.number().int().min(0).optional(),\n\t\tstatus: statusSchema.default(Status.UPLOADED),\n\t\tvalidation: validationSchema.optional(),\n\t\tviewUrl: z.string().optional(),\n\t})\n\texport type FileInfo = z.output<typeof fileInfoSchema>\n\n\t// New selected files\n\texport const selectedFileSchema = z.object({\n\t\tfile: z.custom<File>(),\n\t\tid: z.string(),\n\t})\n\n\texport const interceptedFileSchema = z.object({\n\t\tfile: z.custom<File>(),\n\t\tid: idSchema,\n\t\tstatus: statusSchema,\n\t\tvalidation: validationSchema,\n\t})\n\n\texport type InterceptedFile = z.input<typeof interceptedFileSchema>\n\n\t// Pre-uploaded files\n\texport const preUploadedFileSchema = z.object({\n\t\tdownloadUrl: z.string().optional(),\n\t\tid: idSchema,\n\t\tisInternal: z.boolean().optional(),\n\t\tname: z.string(),\n\t\tsize: z.number().int().min(0),\n\t\tviewUrl: z.string().optional(),\n\t})\n\n\texport const uploadPropsSchema = z.object({\n\t\tallowMultiple: z.boolean().default(false),\n\t\tallowPhotos: z.boolean().default(false),\n\t\tcollapseExtensionsAfter: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(0)\n\t\t\t.default(Number.MAX_SAFE_INTEGER),\n\t\textensions: z\n\t\t\t.string()\n\t\t\t.min(1)\n\t\t\t.array()\n\t\t\t.default(() => []),\n\t\texternalUrl: z.string().nullable().default(null),\n\t\thideDropArea: z.boolean().default(false),\n\t\ticon: yocoIconSchema.default(Yoco.Icon.CLOUD_UPLOAD),\n\t\tmaxFileSize: z.number().int().min(0).default(Number.MAX_SAFE_INTEGER),\n\t\tstate: z.array(fileInfoSchema),\n\t})\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.pick({\n\t\t\tdataTest: true,\n\t\t\thelpDescription: true,\n\t\t\thelpText: true,\n\t\t\tisDisabled: true,\n\t\t\tisLoading: true,\n\t\t\tlabel: true,\n\t\t})\n\t\t.merge(\n\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\ttabIndex: true,\n\t\t\t}),\n\t\t)\n\t\t.merge(uploadPropsSchema)\n\n\texport namespace Events {\n\t\texport type AddFiles = Array<{\n\t\t\tfile: File\n\t\t\tfileInfo: FileInfo\n\t\t}>\n\n\t\texport type CancelUpload = z.infer<typeof idSchema>\n\n\t\texport type RemoveFile = z.infer<typeof idSchema>\n\n\t\texport type RestartUpload = z.infer<typeof idSchema>\n\t}\n\n\texport namespace ActionButton {\n\t\texport const schema = propsSchema\n\t\t\t.pick({\n\t\t\t\tisDisabled: true,\n\t\t\t})\n\t\t\t.extend({\n\t\t\t\ticon: yocoIconSchema,\n\t\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace DropArea {\n\t\texport const schema = propsSchema\n\t\t\t.pick({\n\t\t\t\tallowMultiple: true,\n\t\t\t\tcollapseExtensionsAfter: true,\n\t\t\t\tdataTest: true,\n\t\t\t\textensions: true,\n\t\t\t\texternalUrl: true,\n\t\t\t\thideDropArea: true,\n\t\t\t\ticon: true,\n\t\t\t\tisDisabled: true,\n\t\t\t\tisLoading: true,\n\t\t\t\tmaxFileSize: true,\n\t\t\t\ttabIndex: true,\n\t\t\t})\n\t\t\t.extend({\n\t\t\t\tinputId: z.string(),\n\t\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\t}\n\n\texport namespace FileItem {\n\t\texport const schema = propsSchema.pick({\n\t\t\tdataTest: true,\n\t\t\textensions: true,\n\t\t\tisDisabled: true,\n\t\t\tmaxFileSize: true,\n\t\t})\n\t}\n\n\texport namespace TakePhoto {\n\t\texport const schema = propsSchema.pick({\n\t\t\tdataTest: true,\n\t\t\tisDisabled: true,\n\t\t\ttabIndex: true,\n\t\t})\n\n\t\texport type Props = z.input<typeof schema>\n\t\texport type PropsInternal = z.output<typeof schema>\n\n\t\texport const captureSchema = schema.pick({\n\t\t\tdataTest: true,\n\t\t})\n\t\texport type CaptureProps = z.output<typeof captureSchema>\n\n\t\texport const reviewSchema = captureSchema.extend({\n\t\t\tphotoUrl: z.string().nullable().default(null),\n\t\t})\n\t\texport type ReviewProps = z.output<typeof reviewSchema>\n\n\t\texport const errorSchema = captureSchema.extend({\n\t\t\terror: z.string().nullable().default(null),\n\t\t})\n\t\texport type ErrorProps = z.output<typeof errorSchema>\n\n\t\texport namespace Events {\n\t\t\texport type Capture = {\n\t\t\t\tfile: File\n\t\t\t\tphotoUrl: string\n\t\t\t}\n\n\t\t\texport type Error = string\n\t\t}\n\t}\n\n\texport type Translations = {\n\t\tbutton: {\n\t\t\tacceptPhoto: string\n\t\t\tcancel: string\n\t\t\tnextCamera: string\n\t\t\trejectPhoto: string\n\t\t\tretry: string\n\t\t\ttakePhoto: string\n\t\t}\n\t\terror: {\n\t\t\tmultipleNotAllowed: string\n\t\t\tnotAllowed: string\n\t\t\tnotFound: string\n\t\t\tnotSupported: string\n\t\t}\n\t\tlabel: {\n\t\t\tcapture: string\n\t\t\terror: string\n\t\t\tinternal: string\n\t\t\treview: string\n\t\t\tunknown: string\n\t\t}\n\t\tstatusMsg: {\n\t\t\tCANCELED: string\n\t\t\tERROR: string\n\t\t\tHIDDEN: string\n\t\t\tINVALID: string\n\t\t\tNOT_STARTED: string\n\t\t\tREADY_TO_UPLOAD: string\n\t\t\tUPLOADED: string\n\t\t\tUPLOADED_WITH_ERROR: string\n\t\t\tUPLOADING: string\n\t\t}\n\t\ttext: {\n\t\t\tclickToUpload: string\n\t\t\tdragAndDrop: string\n\t\t\tlearnMore: string\n\t\t\tmax: string\n\t\t}\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: string\n\t\t\tMAX_SIZE_EXCEEDED: string\n\t\t}\n\t}\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import type { KottiFieldCurrency } from '../kotti-field-currency/types'\nimport type { KottiFieldDateRange } from '../kotti-field-date/types'\nimport type { KottiFieldNumber } from '../kotti-field-number/types'\nimport type {\n\tKottiFieldMultiSelect,\n\tKottiFieldSingleSelect,\n} from '../kotti-field-select/types'\nimport type { KottiFieldText } from '../kotti-field-text/types'\nimport type { KottiFieldToggle } from '../kotti-field-toggle/types'\nimport type { SpecifyRequiredProps } from '../types/utilities'\n\nexport namespace KottiFilters {\n\texport enum ButtonLinkType {\n\t\tDANGER = 'danger',\n\t\tPRIMARY = 'primary',\n\t}\n\n\texport enum FilterType {\n\t\tBOOLEAN = 'BOOLEAN',\n\t\tCURRENCY = 'CURRENCY',\n\t\tDATE_RANGE = 'DATE_RANGE',\n\t\tFLOAT = 'FLOAT',\n\t\tINTEGER = 'INTEGER',\n\t\tMULTI_ENUM = 'MULTI_ENUM',\n\t\tSEARCH = 'SEARCH',\n\t\tSINGLE_ENUM = 'SINGLE_ENUM',\n\t\tSTRING = 'STRING',\n\t}\n\n\texport namespace Operation {\n\t\texport enum Boolean {\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t}\n\n\t\texport enum Currency {\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tGREATER_THAN = 'GREATER_THAN',\n\t\t\tGREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t\tLESS_THAN = 'LESS_THAN',\n\t\t\tLESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n\t\t}\n\n\t\texport enum DateRange {\n\t\t\tIN_RANGE = 'IN_RANGE',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t}\n\n\t\texport enum Float {\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tGREATER_THAN = 'GREATER_THAN',\n\t\t\tGREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t\tLESS_THAN = 'LESS_THAN',\n\t\t\tLESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n\t\t}\n\n\t\texport enum Integer {\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tGREATER_THAN = 'GREATER_THAN',\n\t\t\tGREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t\tLESS_THAN = 'LESS_THAN',\n\t\t\tLESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n\t\t}\n\n\t\texport enum MultiEnum {\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t\tONE_OF = 'ONE_OF', // OR\n\t\t}\n\n\t\texport enum Search {\n\t\t\tCONTAINS = 'CONTAINS',\n\t\t}\n\n\t\texport enum SingleEnum {\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t}\n\n\t\texport enum String {\n\t\t\tCONTAINS = 'CONTAINS',\n\t\t\tEQUAL = 'EQUAL',\n\t\t\tIS_EMPTY = 'IS_EMPTY',\n\t\t}\n\n\t\texport type Any =\n\t\t\t| Operation.Boolean\n\t\t\t| Operation.Currency\n\t\t\t| Operation.DateRange\n\t\t\t| Operation.Float\n\t\t\t| Operation.Integer\n\t\t\t| Operation.MultiEnum\n\t\t\t| Operation.Search\n\t\t\t| Operation.SingleEnum\n\t\t\t| Operation.String\n\t}\n\n\texport namespace Column {\n\t\texport type Common = {\n\t\t\tkey: string\n\t\t\tlabel: string\n\t\t}\n\n\t\texport type Boolean<\n\t\t\tOPERATION extends Operation.Boolean = Operation.Boolean,\n\t\t> = Common & {\n\t\t\toperations: OPERATION[]\n\t\t\ttype: FilterType.BOOLEAN\n\t\t}\n\n\t\texport type Currency<\n\t\t\tOPERATION extends Operation.Currency = Operation.Currency,\n\t\t> = Common & {\n\t\t\tcurrency: KottiFieldCurrency.Props['currency']\n\t\t\toperations: OPERATION[]\n\t\t\ttype: FilterType.CURRENCY\n\t\t}\n\n\t\texport type DateRange<\n\t\t\tOPERATION extends Operation.DateRange = Operation.DateRange,\n\t\t> = Common &\n\t\t\tPick<\n\t\t\t\tKottiFieldDateRange.Props,\n\t\t\t\t'maximumDate' | 'minimumDate' | 'shortcuts'\n\t\t\t> & {\n\t\t\t\toperations: OPERATION[]\n\t\t\t\ttype: FilterType.DATE_RANGE\n\t\t\t}\n\n\t\texport type Float<OPERATION extends Operation.Float = Operation.Float> =\n\t\t\tCommon &\n\t\t\t\tPick<\n\t\t\t\t\tKottiFieldNumber.Props,\n\t\t\t\t\t'decimalPlaces' | 'maximum' | 'minimum' | 'prefix' | 'step' | 'suffix'\n\t\t\t\t> & {\n\t\t\t\t\toperations: OPERATION[]\n\t\t\t\t\ttype: FilterType.FLOAT\n\t\t\t\t}\n\n\t\texport type Integer<\n\t\t\tOPERATION extends Operation.Integer = Operation.Integer,\n\t\t> = Common &\n\t\t\tPick<\n\t\t\t\tKottiFieldNumber.Props,\n\t\t\t\t'maximum' | 'minimum' | 'prefix' | 'suffix'\n\t\t\t> & {\n\t\t\t\toperations: OPERATION[]\n\t\t\t\ttype: FilterType.INTEGER\n\t\t\t}\n\n\t\texport type MultiEnum<\n\t\t\tOPERATION extends Operation.MultiEnum = Operation.MultiEnum,\n\t\t> = Common &\n\t\t\tPick<\n\t\t\t\tKottiFieldMultiSelect.Props,\n\t\t\t\t'clearOnSelect' | 'collapseTagsAfter' | 'isUnsorted'\n\t\t\t> & {\n\t\t\t\toperations: OPERATION[]\n\t\t\t\toptions: KottiFieldMultiSelect.Props['options']\n\t\t\t\ttype: FilterType.MULTI_ENUM\n\t\t\t}\n\n\t\texport type Search = Common & {\n\t\t\tplaceholder?: string | null\n\t\t\ttype: FilterType.SEARCH\n\t\t}\n\n\t\texport type SingleEnum<\n\t\t\tOPERATION extends Operation.SingleEnum = Operation.SingleEnum,\n\t\t> = Common &\n\t\t\tPick<KottiFieldSingleSelect.Props, 'isUnsorted'> & {\n\t\t\t\toperations: OPERATION[]\n\t\t\t\toptions: KottiFieldSingleSelect.Props['options']\n\t\t\t\ttype: FilterType.SINGLE_ENUM\n\t\t\t}\n\n\t\texport type String<OPERATION extends Operation.String = Operation.String> =\n\t\t\tCommon & {\n\t\t\t\toperations: OPERATION[]\n\t\t\t\ttype: FilterType.STRING\n\t\t\t}\n\n\t\texport type Any =\n\t\t\t| Column.Boolean\n\t\t\t| Column.Currency\n\t\t\t| Column.DateRange\n\t\t\t| Column.Float\n\t\t\t| Column.Integer\n\t\t\t| Column.MultiEnum\n\t\t\t| Column.Search\n\t\t\t| Column.SingleEnum\n\t\t\t| Column.String\n\t}\n\n\texport type FilterValue =\n\t\t| KottiFieldCurrency.ModelValue\n\t\t| KottiFieldDateRange.ModelValue\n\t\t| KottiFieldMultiSelect.ModelValue\n\t\t| KottiFieldNumber.ModelValue\n\t\t| KottiFieldSingleSelect.ModelValue\n\t\t| KottiFieldText.ModelValue\n\t\t| KottiFieldToggle.ModelValue\n\n\texport type InternalFilter = {\n\t\tkey: Column.Any['key']\n\t\toperation: Operation.Any\n\t\tvalue: FilterValue\n\t}\n\n\texport type InternalFilterSearch = {\n\t\tkey: Column.Search['key']\n\t\toperation: Operation.Search\n\t\tvalue: KottiFieldText.ModelValue\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\texport type Filter = SpecifyRequiredProps<\n\t\tInternalFilter,\n\t\t'key' | 'operation' | 'value'\n\t>\n\n\texport type Value = Filter[]\n\n\texport type PropsInternal = {\n\t\tcolumns: Column.Any[]\n\t\tdataTest: string | null\n\t\tisLoading: boolean\n\t\tvalue: Value\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\texport type Props = SpecifyRequiredProps<PropsInternal, 'columns' | 'value'>\n\n\texport namespace Events {\n\t\texport type UpdateColumns = PropsInternal['columns']\n\n\t\texport type UpdateValue = PropsInternal['value']\n\t}\n\n\texport type Translations = {\n\t\taddFilterLabel: string\n\t\tandLabel: string\n\t\tboolean: Record<Operation.Boolean, string>\n\t\tclearAllLabel: string\n\t\tcurrency: Record<Operation.Currency, string>\n\t\tdateRange: Record<Operation.DateRange, string>\n\t\temptyListLabel: string\n\t\tfilterLabel: string\n\t\tfiltersLabel: string\n\t\tfloat: Record<Operation.Float, string>\n\t\tinteger: Record<Operation.Integer, string>\n\t\tmultiEnum: Record<Operation.MultiEnum, string>\n\t\tsearchLabel: string\n\t\tsingleEnum: Record<Operation.SingleEnum, string>\n\t\tstring: Record<Operation.String, string>\n\t\tunsetLabel: string\n\t\twhereLabel: string\n\t}\n}\n","import { z } from 'zod'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiHeading {\n\texport enum Type {\n\t\tACTION = 'action',\n\t\tTOGGLE = 'toggle',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tactionText: z.string().nullable().default(null),\n\t\ticon: createLooseZodEnumSchema(Yoco.Icon).nullable().default(null),\n\t\ttext: z.string(),\n\t\ttoggleCloseText: z.string().default('Close'),\n\t\ttoggleStatus: z.boolean().default(false),\n\t\ttoggleText: z.string().default('View'),\n\t\ttype: createLooseZodEnumSchema(Type).nullable().default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiLine {\n\texport enum Position {\n\t\tCENTER = 'center',\n\t\tLEFT = 'left',\n\t\tRIGHT = 'right',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tisInteractive: z.boolean().default(false),\n\t\tposition: createLooseZodEnumSchema(Position).default(Position.CENTER),\n\t\ttext: z.string().nullable().default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nexport namespace KottiModal {\n\texport enum Size {\n\t\tEXTRA_LARGE = 'xl',\n\t\tLARGE = 'lg',\n\t\tMEDIUM = 'md',\n\t\tSMALL = 'sm',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tisOpen: z.boolean().default(false),\n\t\tpreventCloseOutside: z.boolean().default(false),\n\t\tshowCloseButton: z.boolean().default(false),\n\t\tsize: createLooseZodEnumSchema(Size).default(Size.MEDIUM),\n\t\ttitle: z.string().nullable().default(null),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nimport { refinementNonEmpty } from '../zod-utilities/refinements'\n\nexport namespace KottiNavbar {\n\texport type Context = {\n\t\tisNarrow: boolean\n\t\ttheme: KottiNavbar.Theme\n\t}\n\n\texport const notificationSchema = z.object({\n\t\tcount: z.number().int(),\n\t\tlink: z.string(),\n\t\ttitle: z.string(),\n\t})\n\texport type Notification = z.infer<typeof notificationSchema>\n\n\texport const quickLinkSchema = z.object({\n\t\tlink: z.string(),\n\t\ttitle: z.string(),\n\t})\n\texport type QuickLink = z.infer<typeof quickLinkSchema>\n\n\texport const sectionLinkSchema = z.object({\n\t\tcomponent: z.string().default('a'),\n\t\ticon: yocoIconSchema,\n\t\tisActive: z.boolean(),\n\t\tprops: z.record(z.unknown()).optional(),\n\t\ttitle: z.string(),\n\t})\n\texport type SectionLink = z.infer<typeof sectionLinkSchema>\n\n\texport const sectionSchema = z.object({\n\t\tlinks: z.array(sectionLinkSchema).refine(...refinementNonEmpty),\n\t\ttitle: z.string().nullable(),\n\t})\n\texport type Section = z.infer<typeof sectionSchema>\n\n\texport enum Theme {\n\t\tDARK = 'dark',\n\t\tDEFAULT = 'default',\n\t\tLIGHT = 'light',\n\t\tREVERSE = 'reverse',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tfooterSection: sectionSchema.nullable().default(null),\n\t\tisNarrow: z.boolean().default(false),\n\t\tlogoUrl: z.string(),\n\t\tnotification: notificationSchema.nullable().default(null),\n\t\tquickLinks: z.array(quickLinkSchema).default(() => []),\n\t\tsections: z.array(sectionSchema).refine(...refinementNonEmpty),\n\t\ttheme: z.nativeEnum(Theme).default(Theme.DEFAULT),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = {\n\t\tmenuCollapse: string\n\t\tmenuExpand: string\n\t\tquickLinksTitle: string\n\t}\n}\n","import { z } from 'zod'\n\nexport namespace KottiPagination {\n\texport enum PagingStyle {\n\t\tEXPAND = 'expand',\n\t\tFLEX = 'flex',\n\t\tFRACTION = 'fraction',\n\t}\n\n\texport const propsSchema = z.object({\n\t\tadjacentAmount: z.number().default(1),\n\t\tfixedWidth: z.boolean().default(false),\n\t\tpage: z.number(),\n\t\tpageSize: z.number().default(10),\n\t\tpagingStyle: z.nativeEnum(PagingStyle).default(PagingStyle.EXPAND),\n\t\ttotal: z.number().nullable().default(null),\n\t})\n\n\texport type PropsInternal = z.output<typeof propsSchema>\n\texport type Props = z.input<typeof propsSchema>\n}\n","import type { Instance as TippyInstance } from 'tippy.js'\nimport { z } from 'zod'\n\nimport { yocoIconSchema } from '@3yourmind/yoco'\n\nimport type { Kotti } from '../types'\nimport { createLooseZodEnumSchema } from '../zod-utilities/enums'\n\nconst baseOptionSchema = z.object({\n\tdataTest: z.string().optional(),\n\ticon: yocoIconSchema.optional(),\n\tisActive: z.boolean().default(false),\n\tisClickable: z.boolean().default(false),\n\tisDisabled: z.boolean().default(false),\n\tisOptional: z.boolean().default(false),\n\tisSelected: z.boolean().default(false),\n\tlabel: z.string(),\n\tonClick: z.function(z.tuple([]), z.void()).optional(),\n\ttooltip: z.string().optional(),\n})\n\nexport namespace KottiPopover {\n\t/**\n\t * @see `@popperjs/core`\n\t */\n\texport enum Placement {\n\t\tAUTO = 'auto',\n\t\tAUTO_END = 'auto-end',\n\t\tAUTO_START = 'auto-start',\n\t\tBOTTOM = 'bottom',\n\t\tBOTTOM_END = 'bottom-end',\n\t\tBOTTOM_START = 'bottom-start',\n\t\tLEFT = 'left',\n\t\tLEFT_END = 'left-end',\n\t\tLEFT_START = 'left-start',\n\t\tRIGHT = 'right',\n\t\tRIGHT_END = 'right-end',\n\t\tRIGHT_START = 'right-start',\n\t\tTOP = 'top',\n\t\tTOP_END = 'top-end',\n\t\tTOP_START = 'top-start',\n\t}\n\n\t/* eslint-disable perfectionist/sort-enums */\n\texport enum Size {\n\t\tAUTO = 'auto',\n\t\tSAME_AS_TRIGGER = 'sameAsTrigger',\n\t\tSMALL = 'sm',\n\t\tMEDIUM = 'md',\n\t\tLARGE = 'lg',\n\t\tEXTRA_LARGE = 'xl',\n\t}\n\t/* eslint-enable perfectionist/sort-enums */\n\n\texport enum Trigger {\n\t\t/**\n\t\t * Trigger By:\n\t\t * - mouse click\n\t\t * - tab + enter\n\t\t *\n\t\t * Untrigger By:\n\t\t * - second mouse-click\n\t\t * - second enter\n\t\t */\n\t\tCLICK = 'click',\n\t\t/**\n\t\t * Trigger By:\n\t\t * - hover\n\t\t * - tab\n\t\t *\n\t\t * Untrigger By:\n\t\t * - hover away\n\t\t * - clickaway\n\t\t * - tab away\n\t\t */\n\t\tHOVER = 'hover',\n\t\tMANUAL = 'manual',\n\t}\n\n\texport type Ref = {\n\t\tclose: TippyInstance['hide']\n\t\topen: TippyInstance['show']\n\t}\n\n\t/**\n\t * some attributes are internally inferred and therefore not picked\n\t * to be exposed on the external API.\n\t * @example `isClickable`\n\t */\n\texport const optionSchema = baseOptionSchema.pick({\n\t\tdataTest: true,\n\t\ticon: true,\n\t\tisActive: true,\n\t\tisDisabled: true,\n\t\tisOptional: true,\n\t\tisSelected: true,\n\t\tlabel: true,\n\t\tonClick: true,\n\t\ttooltip: true,\n\t})\n\n\texport const propsSchema = z.object({\n\t\tareOptionsSelectable: z.boolean().default(false),\n\t\tisDisabled: z.boolean().default(false),\n\t\toptions: z.array(optionSchema).default(() => []),\n\t\tplacement: createLooseZodEnumSchema(Placement).default(Placement.AUTO),\n\t\tsize: createLooseZodEnumSchema(Size).default(Size.AUTO),\n\t\ttrigger: createLooseZodEnumSchema(Trigger).default(Trigger.CLICK),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport namespace Events {\n\t\texport type UpdateIsSelected = {\n\t\t\tindex: number\n\t\t\toption: KottiPopover.PropsInternal['options'][0]\n\t\t\tvalue: Kotti.FieldToggle.ModelValue\n\t\t}\n\t}\n}\n\nexport namespace IconTextItem {\n\texport const propsSchema = baseOptionSchema.pick({\n\t\tdataTest: true,\n\t\ticon: true,\n\t\tisActive: true,\n\t\tisClickable: true,\n\t\tisDisabled: true,\n\t\tlabel: true,\n\t\ttooltip: true,\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import type { Ref } from 'vue'\n\nimport type { SpecifyRequiredProps } from '../types/utilities'\n\nexport namespace KottiRow {\n\texport type Context = {\n\t\tgap: Readonly<Ref<number>>\n\t\tgutter: Readonly<Ref<number>>\n\t}\n\n\texport enum Align {\n\t\tBOTTOM = 'bottom',\n\t\tCENTER = 'center',\n\t\tTOP = 'top',\n\t}\n\n\texport enum Justify {\n\t\tCENTER = 'center',\n\t\tEND = 'end',\n\t\tSTART = 'start',\n\t}\n\n\texport type PropsInternal = {\n\t\talign: Align\n\t\tgap: number\n\t\tgutter: number\n\t\tjustify: Justify\n\t\ttag: string\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\texport type Props = SpecifyRequiredProps<PropsInternal, never>\n}\n","import type { Ref } from 'vue'\nimport { z } from 'zod'\n\nimport { KottiFieldDateRange } from '../../kotti-field-date/types'\nimport { KottiFieldNumber } from '../../kotti-field-number/types'\nimport {\n\tKottiFieldMultiSelect,\n\tKottiFieldSingleSelect,\n} from '../../kotti-field-select/types'\nimport { KottiFieldToggle } from '../../kotti-field-toggle/types'\nimport { KottiPopover } from '../../kotti-popover/types'\nimport type { KottiTable } from '../table/types'\n\nconst DEFAULT_PAGE_SIZE = 10\n// eslint-disable-next-line no-magic-numbers\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100]\nconst MIN_PAGE_SIZE = 5\n\nexport type FilterInfo = Pick<\n\tKottiStandardTable.FilterInternal,\n\t'operations' | 'type'\n>\n\nexport namespace KottiStandardTable {\n\texport enum FilterType {\n\t\tBOOLEAN = 'BOOLEAN',\n\t\tDATE_RANGE = 'DATE_RANGE',\n\t\tMULTI_SELECT = 'MULTI_SELECT',\n\t\tNUMBER_RANGE = 'NUMBER_RANGE',\n\t\tSINGLE_SELECT = 'SINGLE_SELECT',\n\t}\n\texport namespace FilterOperation {\n\t\texport enum Boolean {\n\t\t\tEQUAL = 'EQUAL',\n\t\t}\n\n\t\texport enum DateRange {\n\t\t\tIN_RANGE = 'IN_RANGE',\n\t\t}\n\n\t\texport enum MultiEnum {\n\t\t\tONE_OF = 'ONE_OF', // OR\n\t\t}\n\n\t\texport enum NumberRange {\n\t\t\tIN_RANGE = 'IN_RANGE',\n\t\t}\n\n\t\texport enum SingleEnum {\n\t\t\tEQUAL = 'EQUAL',\n\t\t}\n\n\t\texport const schema = z.union([\n\t\t\tz.nativeEnum(Boolean),\n\t\t\tz.nativeEnum(DateRange),\n\t\t\tz.nativeEnum(MultiEnum),\n\t\t\tz.nativeEnum(NumberRange),\n\t\t\tz.nativeEnum(SingleEnum),\n\t\t])\n\t}\n\n\tconst sharedFilterSchema = z.object({\n\t\tdataTest: z.string().optional(),\n\t\tdisplayInline: z.boolean().default(false),\n\t\tid: z.string(),\n\t\tlabel: z.string(),\n\t})\n\n\tconst booleanFilterSchema = sharedFilterSchema.extend({\n\t\tdefaultValue: KottiFieldToggle.modelValueSchema.optional(),\n\t\toperations: z\n\t\t\t.nativeEnum(FilterOperation.Boolean)\n\t\t\t.array()\n\t\t\t.nonempty()\n\t\t\t.default([FilterOperation.Boolean.EQUAL]),\n\t\tslotLabels: z.tuple([z.string(), z.string()]).optional(),\n\t\ttype: z.literal(FilterType.BOOLEAN),\n\t})\n\n\tconst dateRangeFilterSchema = sharedFilterSchema.extend({\n\t\tdefaultValue: KottiFieldDateRange.modelValueSchema.optional(),\n\t\toperations: z\n\t\t\t.nativeEnum(FilterOperation.DateRange)\n\t\t\t.array()\n\t\t\t.nonempty()\n\t\t\t.default([FilterOperation.DateRange.IN_RANGE]),\n\t\ttype: z.literal(FilterType.DATE_RANGE),\n\t})\n\n\tconst multiSelectFilterSchema = sharedFilterSchema\n\t\t.merge(\n\t\t\tKottiFieldMultiSelect.propsSchema.pick({\n\t\t\t\tisUnsorted: true,\n\t\t\t\toptions: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tdefaultValue: KottiFieldMultiSelect.modelValueSchema.optional(),\n\t\t\toperations: z\n\t\t\t\t.nativeEnum(FilterOperation.MultiEnum)\n\t\t\t\t.array()\n\t\t\t\t.nonempty()\n\t\t\t\t.default([FilterOperation.MultiEnum.ONE_OF]),\n\t\t\ttype: z.literal(FilterType.MULTI_SELECT),\n\t\t})\n\n\tconst numberRangeFilterSchema = sharedFilterSchema\n\t\t.merge(\n\t\t\tKottiFieldNumber.propsSchema.pick({\n\t\t\t\tdecimalPlaces: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tdefaultValue: z\n\t\t\t\t.tuple([\n\t\t\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\toperations: z\n\t\t\t\t.nativeEnum(FilterOperation.NumberRange)\n\t\t\t\t.array()\n\t\t\t\t.nonempty()\n\t\t\t\t.default([FilterOperation.NumberRange.IN_RANGE]),\n\t\t\ttype: z.literal(FilterType.NUMBER_RANGE),\n\t\t\tunit: KottiFieldNumber.propsSchema.shape.prefix,\n\t\t})\n\n\tconst singleSelectFilterSchema = sharedFilterSchema\n\t\t.merge(\n\t\t\tKottiFieldSingleSelect.propsSchema.pick({\n\t\t\t\tisUnsorted: true,\n\t\t\t\toptions: true,\n\t\t\t}),\n\t\t)\n\t\t.extend({\n\t\t\tdefaultValue: KottiFieldSingleSelect.modelValueSchema.optional(),\n\t\t\toperations: z\n\t\t\t\t.nativeEnum(FilterOperation.SingleEnum)\n\t\t\t\t.array()\n\t\t\t\t.nonempty()\n\t\t\t\t.default([FilterOperation.SingleEnum.EQUAL]),\n\t\t\ttype: z.literal(FilterType.SINGLE_SELECT),\n\t\t})\n\n\texport const filterSchema = z.discriminatedUnion('type', [\n\t\tbooleanFilterSchema,\n\t\tdateRangeFilterSchema,\n\t\tmultiSelectFilterSchema,\n\t\tnumberRangeFilterSchema,\n\t\tsingleSelectFilterSchema,\n\t])\n\texport type Filter = z.input<typeof filterSchema>\n\texport type FilterInternal = z.output<typeof filterSchema>\n\n\texport const filterValueSchema = z.union([\n\t\tKottiFieldToggle.modelValueSchema,\n\t\tKottiFieldDateRange.modelValueSchema,\n\t\tKottiFieldMultiSelect.modelValueSchema,\n\t\tz.tuple([\n\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t]),\n\t\tKottiFieldSingleSelect.modelValueSchema,\n\t])\n\texport type FilterValue = z.output<typeof filterValueSchema>\n\n\texport const appliedBooleanSchema = z.object({\n\t\tid: z.string(),\n\t\toperation: z.nativeEnum(FilterOperation.Boolean),\n\t\tvalue: KottiFieldToggle.modelValueSchema,\n\t})\n\texport const appliedDateRangeSchema = z.object({\n\t\tid: z.string(),\n\t\toperation: z.nativeEnum(FilterOperation.DateRange),\n\t\tvalue: KottiFieldDateRange.modelValueSchema,\n\t})\n\texport const appliedMultiEnumSchema = z.object({\n\t\tid: z.string(),\n\t\toperation: z.nativeEnum(FilterOperation.MultiEnum),\n\t\tvalue: KottiFieldMultiSelect.modelValueSchema,\n\t})\n\texport const appliedNumberRangeSchema = z.object({\n\t\tid: z.string(),\n\t\toperation: z.nativeEnum(FilterOperation.NumberRange),\n\t\tvalue: z.tuple([\n\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t\tKottiFieldNumber.modelValueSchema,\n\t\t]),\n\t})\n\texport const appliedSingleEnumSchema = z.object({\n\t\tid: z.string(),\n\t\toperation: z.nativeEnum(FilterOperation.SingleEnum),\n\t\tvalue: KottiFieldSingleSelect.modelValueSchema,\n\t})\n\n\texport const appliedFilterSchema = z.union([\n\t\tappliedBooleanSchema,\n\t\tappliedDateRangeSchema,\n\t\tappliedMultiEnumSchema,\n\t\tappliedNumberRangeSchema,\n\t\tappliedSingleEnumSchema,\n\t])\n\texport type AppliedFilter = z.output<typeof appliedFilterSchema>\n\n\texport const optionsSchema = z.object({\n\t\thideControls: z\n\t\t\t.object({\n\t\t\t\tcolumns: z.boolean().default(false),\n\t\t\t\tfilters: z.boolean().default(false),\n\t\t\t\tsearch: z.boolean().default(false),\n\t\t\t})\n\t\t\t.optional(),\n\t\tpopoversSize: z\n\t\t\t.object({\n\t\t\t\tcolumns: KottiPopover.propsSchema.shape.size,\n\t\t\t\tfilters: KottiPopover.propsSchema.shape.size,\n\t\t\t})\n\t\t\t.optional(),\n\t\tsearchPlaceholder: z.string().optional(),\n\t})\n\texport type Options = z.input<typeof optionsSchema>\n\n\tconst sharedPaginationSchema = z.object({\n\t\tpageIndex: z.number().int().finite().min(0),\n\t\tpageSize: z.number().int().finite().gt(0),\n\t\tpageSizeOptions: z\n\t\t\t.array(z.number().int().finite().min(MIN_PAGE_SIZE))\n\t\t\t.refine(\n\t\t\t\t(val) =>\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tval.slice(1).every((entry, entryIndex) => entry > val[entryIndex]!),\n\t\t\t\t{\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t'Entries in pageSizeOptions must be a strictly increasing sequence',\n\t\t\t\t},\n\t\t\t),\n\t\trowCount: z.number().int().finite().min(0),\n\t})\n\n\texport const paginationSchema = z\n\t\t.discriminatedUnion('type', [\n\t\t\tz.object({\n\t\t\t\tpageSize:\n\t\t\t\t\tsharedPaginationSchema.shape.pageSize.default(DEFAULT_PAGE_SIZE),\n\t\t\t\tpageSizeOptions: sharedPaginationSchema.shape.pageSizeOptions.default(\n\t\t\t\t\t() => DEFAULT_PAGE_SIZE_OPTIONS,\n\t\t\t\t),\n\t\t\t\ttype: z.literal('local'),\n\t\t\t}),\n\t\t\tz.object({\n\t\t\t\tpageSize:\n\t\t\t\t\tsharedPaginationSchema.shape.pageSize.default(DEFAULT_PAGE_SIZE),\n\t\t\t\tpageSizeOptions: sharedPaginationSchema.shape.pageSizeOptions.default(\n\t\t\t\t\t() => DEFAULT_PAGE_SIZE_OPTIONS,\n\t\t\t\t),\n\t\t\t\trowCount: sharedPaginationSchema.shape.rowCount.nullable(),\n\t\t\t\ttype: z.literal('remote'),\n\t\t\t}),\n\t\t])\n\t\t.default({\n\t\t\tpageSize: DEFAULT_PAGE_SIZE,\n\t\t\tpageSizeOptions: DEFAULT_PAGE_SIZE_OPTIONS,\n\t\t\ttype: 'local',\n\t\t})\n\texport type Pagination = z.input<typeof paginationSchema>\n\n\texport const propsSchema = z.object({\n\t\temptyText: z.string().nullable().default(null),\n\t\ttableId: z.string().min(1, { message: 'Field cannot be empty' }),\n\t\ttitle: z.string().optional(),\n\t})\n\texport type Props = z.input<typeof propsSchema>\n\n\texport namespace Events {\n\t\texport type UpdateFetchData = {\n\t\t\tfilters: AppliedFilter[]\n\t\t\tordering: { id: string; value: 'ascending' | 'descending' }[]\n\t\t\tpagination: {\n\t\t\t\tpageIndex: number\n\t\t\t\tpageSize: number\n\t\t\t}\n\t\t\tsearch: string | null\n\t\t}\n\t}\n\n\texport namespace Hook {\n\t\texport type Returns<COLUMN_ID extends string> =\n\t\t\tKottiTable.Hook.Returns<COLUMN_ID> & {\n\t\t\t\tappliedFilters: Ref<AppliedFilter[]>\n\t\t\t\tpagination: Ref<{\n\t\t\t\t\tpageIndex: number\n\t\t\t\t\tpageSize: number\n\t\t\t\t}>\n\t\t\t\tsearchValue: Ref<string | null>\n\t\t\t}\n\t}\n\n\texport type Translations = {\n\t\tclearAll: string\n\t\tendDate: string\n\t\tfilters: string\n\t\titemsPerPage: string\n\t\tlastMonth: string\n\t\tlastWeek: string\n\t\tlastYear: string\n\t\tmax: string\n\t\tmin: string\n\t\tmoreThan: string\n\t\tresultsCounter: string\n\t\tsearch: string\n\t\tselectionCount: string\n\t\tshowAll: string\n\t\tstartDate: string\n\t\ttoday: string\n\t\tupTo: string\n\t}\n}\n","import type { RowSelectionState } from '@tanstack/table-core'\nimport type { Ref, VNode } from 'vue'\nimport { z } from 'zod'\n\nimport type { yocoIconSchema } from '@3yourmind/yoco'\n\nimport type { KottiI18n } from '../../kotti-i18n/types'\n\n/**\n * @see {@link ./hooks.ts paramsSchema}\n */\nexport type GetRowBehavior<\n\tROW extends KottiTable.AnyRow,\n\tROW_BEHAVIOR_CLICK_COMPONENT extends string = string,\n> = (params: { row: ROW; rowIndex: number }) => {\n\tactions?: {\n\t\tdataTest?: string\n\t\ticon: z.input<typeof yocoIconSchema>\n\t\tisDisabled?: boolean\n\t\tonClick: () => Promise<void> | void\n\t\ttooltip?: string\n\t}[]\n\tclasses?: string[]\n\tclick?:\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * For example for opening drawers. Should not be used for navigation. Also consider using normal link with\n\t\t\t\t * a query parameter instead.\n\t\t\t\t */\n\t\t\t\tcomponent: null\n\t\t\t\tonClick: () => Promise<void> | void\n\t\t  }\n\t\t| 'expand'\n\t\t| ({\n\t\t\t\t/**\n\t\t\t\t * This should be used in most use cases and would usually be a `router-link`\n\t\t\t\t */\n\t\t\t\tcomponent: ROW_BEHAVIOR_CLICK_COMPONENT\n\t\t  } & (ROW_BEHAVIOR_CLICK_COMPONENT extends 'a'\n\t\t\t\t? {\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t[k: string]: unknown\n\t\t\t\t\t\t\thref: string\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t: { props?: Record<string, unknown> }))\n\tdisable?: {\n\t\tactions: boolean\n\t\tclick: boolean\n\t\texpand: boolean\n\t\tselect: boolean\n\t}\n\tid: string\n\tisLoading?: boolean\n}\n\nexport namespace KottiTable {\n\texport type Display<DATA_TYPE> = {\n\t\talign: 'center' | 'left' | 'right'\n\t\tdisableCellClick: boolean\n\t\tisNumeric: boolean\n\t\trender: (\n\t\t\tvalue: DATA_TYPE,\n\t\t\tcontext: { i18n: KottiI18n.ContextInternal },\n\t\t) => VNode | string | null\n\t\tsortBehavior: 'asc-desc' | 'desc-asc'\n\t}\n\n\t/**\n\t * This is the column passed to `useKottiTable`’s `columns`\n\t */\n\texport type Column<\n\t\tROW extends AnyRow,\n\t\tCOLUMN_ID extends string = string,\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tDATA = any,\n\t> = {\n\t\tdisplay: Display<DATA>\n\t\tgetData: (row: ROW) => DATA\n\t\tid: COLUMN_ID\n\t\tisSortable?: boolean\n\t\tlabel: string\n\t\tmaxWidth?: string\n\t\tminWidth?: string\n\t\ttooltip?: string\n\t\twidth?: string\n\t}\n\n\texport type Ordering<COLUMN_ID extends string = string> = {\n\t\tid: COLUMN_ID\n\t\tvalue: 'ascending' | 'descending'\n\t}\n\n\texport type AnyRow = Record<string, unknown>\n\n\texport const propsSchema = z\n\t\t.object({\n\t\t\temptyText: z.string().nullable().default(null),\n\t\t\tisLoading: z.boolean().default(false),\n\t\t\tisNotScrollable: z.boolean().default(false),\n\t\t\ttableId: z.string(),\n\t\t})\n\t\t.strict()\n\n\texport namespace Hook {\n\t\texport type Returns<COLUMN_ID extends string> = {\n\t\t\tcolumnOrder: Ref<COLUMN_ID[]>\n\t\t\texpandedRows: Ref<Record<string, boolean>>\n\t\t\thiddenColumns: Ref<Set<COLUMN_ID>>\n\t\t\tordering: Ref<KottiTable.Ordering<COLUMN_ID>[]>\n\t\t\tselectedRows: Ref<RowSelectionState>\n\t\t}\n\t}\n\n\texport type Translations = {\n\t\tno: string\n\t\tnoItems: string\n\t\tyes: string\n\t}\n}\n","import { z } from 'zod'\n\nimport { KottiPopover } from '../kotti-popover/types'\n\nexport namespace KottiColumnSelector {\n\tconst optionSchema = z.object({\n\t\tkey: z.string(),\n\t\tlabel: z.string(),\n\t})\n\n\texport type Option = z.input<typeof optionSchema>\n\n\tconst categorySchema = z.object({\n\t\tlabel: z.string().nullable().default(null),\n\t\toptions: z.array(optionSchema),\n\t})\n\n\texport type Category = z.input<typeof categorySchema>\n\n\texport const propsSchema = z.object({\n\t\tcanChangeColumnOrder: z.boolean().default(false),\n\t\tcanSearchColumn: z.boolean().default(false),\n\t\tcategories: z.array(categorySchema).default(() => []),\n\t\tdataTest: z.string().optional(),\n\t\tisDisabled: z.boolean().default(false),\n\t\tisLoading: z.boolean().default(false),\n\t\tlabel: z.string().nullable().default(null),\n\t\tselection: z.array(z.string()),\n\t\tsize: KottiPopover.propsSchema.shape.size,\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = {\n\t\tavailableColumns: string\n\t\tcolumns: string\n\t\tsearchColumn: string\n\t\tvisibleColumns: string\n\t}\n}\n","import { z } from 'zod'\n\nexport namespace KottiTag {\n\texport const propsSchema = z.object({\n\t\tcolorStyle: z\n\t\t\t.enum([\n\t\t\t\t'blue-filled',\n\t\t\t\t'blue-light',\n\t\t\t\t'gray-filled',\n\t\t\t\t'gray-light',\n\t\t\t\t'green-filled',\n\t\t\t\t'green-light',\n\t\t\t\t'mint-filled',\n\t\t\t\t'mint-light',\n\t\t\t\t'orange-filled',\n\t\t\t\t'orange-light',\n\t\t\t\t'purple-filled',\n\t\t\t\t'purple-light',\n\t\t\t\t'red-filled',\n\t\t\t\t'red-light',\n\t\t\t\t'slate-filled',\n\t\t\t\t'slate-light',\n\t\t\t\t'violet-filled',\n\t\t\t\t'violet-light',\n\t\t\t\t'yellow-filled',\n\t\t\t\t'yellow-light',\n\t\t\t])\n\t\t\t.default('gray-light'),\n\t\tisDisabled: z.boolean().default(false),\n\t\tlabel: z.string().optional(),\n\t\ttext: z.string().optional(),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiBanner } from '../kotti-banner/types'\n\nexport namespace KottiToaster {\n\texport const propsSchema = z.object({\n\t\ttoaster: z.object({\n\t\t\t_internal_pls_dont_touch: z.object({}).passthrough(),\n\t\t\tabort: z.function(),\n\t\t\tshow: z.function(),\n\t\t\twithOptions: z.function(),\n\t\t}),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n\nexport namespace KottiToast {\n\texport const propsSchema = z.object({\n\t\theader: z.string().nullable().default(null),\n\t\tprogress: z.number().int().finite().positive().nullable().default(null),\n\t\ttext: z.string().nullable().default(null),\n\t\ttype: z\n\t\t\t.union([\n\t\t\t\tKottiBanner.styleSchema,\n\t\t\t\tz.enum(['error', 'info', 'success', 'warning']),\n\t\t\t])\n\t\t\t.default('info'),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { refinementNonEmpty } from '../zod-utilities/refinements'\n\nexport namespace KottiUserMenu {\n\texport const sectionLinkSchema = z.object({\n\t\tcomponent: z.string().default('a'),\n\t\tprops: z.record(z.unknown()).optional(),\n\t\ttitle: z.string(),\n\t})\n\texport type SectionLink = z.infer<typeof sectionLinkSchema>\n\n\texport const sectionSchema = z.object({\n\t\tlinks: z.array(sectionLinkSchema).refine(...refinementNonEmpty),\n\t\ttitle: z.string().nullable(),\n\t})\n\n\texport type Section = z.infer<typeof sectionSchema>\n\n\texport const propsSchema = z.object({\n\t\tsections: z.array(sectionSchema).refine(...refinementNonEmpty),\n\t\tuserAvatar: z.string().nullable().default(null),\n\t\tuserName: z.string().nullable().default(null),\n\t\tuserStatus: z.string(),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace KottiValueLabel {\n\texport const validationSchema = z.union([\n\t\tKottiField.Validation.errorSchema,\n\t\tKottiField.Validation.successSchema,\n\t\tKottiField.Validation.warningSchema,\n\t])\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.pick({\n\t\t\tdataTest: true,\n\t\t\thelpDescription: true,\n\t\t\thelpText: true,\n\t\t\tisLoading: true,\n\t\t\tlabel: true,\n\t\t})\n\t\t.extend({\n\t\t\tisUnset: z.boolean().default(false),\n\t\t\tvalidation: validationSchema.nullable().default(null),\n\t\t\tvalue: z.union([z.number(), z.string()]).nullable().default(null),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n\n\texport type Translations = {\n\t\tnotSet: string\n\t}\n}\n","/**\n * @see {@link https://en.wikipedia.org/wiki/Decimal_separator#/media/File:DecimalSeparator.svg}\n */\nexport enum DecimalSeparator {\n\tARABIC_COMMA = '٫',\n\tCOMMA = ',',\n\tDOT = '.',\n}\n","/**\n * _WARNING_ avoid using `export type` as it does not support enums\n * (which most kotti types files use)\n *\n * vite build errors if a file doesn't have enums so you'd use it\n * but does not warn about the opposite scenario\n */\nimport type { z } from 'zod'\n\nexport { KottiAccordion as Accordion } from '../kotti-accordion/types'\nexport { KottiActionbar as Actionbar } from '../kotti-actionbar/types'\nexport { KottiAvatarGroup as AvatarGroup } from '../kotti-avatar-group/types'\nexport { KottiAvatar as Avatar } from '../kotti-avatar/types'\nexport { KottiBanner as Banner } from '../kotti-banner/types'\nexport { KottiBreadcrumb as Breadcrumb } from '../kotti-breadcrumb/types'\nexport type { KottiButtonGroup as ButtonGroup } from '../kotti-button-group/types'\nexport { KottiButton as Button } from '../kotti-button/types'\nexport { KottiSplitButton as SplitButton } from '../kotti-button/types'\nexport { KottiCard as Card } from '../kotti-card/types'\nexport type { KottiCol as Col } from '../kotti-col/types'\nexport {\n\tKottiComment as Comment,\n\tKottiCommentInput as CommentInput,\n} from '../kotti-comment/types'\nexport { KottiDrawer as Drawer } from '../kotti-drawer/types'\nexport { KottiFieldCurrency as FieldCurrency } from '../kotti-field-currency/types'\nexport {\n\tKottiFieldDate as FieldDate,\n\tKottiFieldDateRange as FieldDateRange,\n\tKottiFieldDateTime as FieldDateTime,\n\tKottiFieldDateTimeRange as FieldDateTimeRange,\n} from '../kotti-field-date/types'\nexport { KottiFieldFileUpload as FieldFileUpload } from '../kotti-field-file-upload/types'\nexport { KottiFieldInlineEdit as FieldInlineEdit } from '../kotti-field-inline-edit/types'\nexport { KottiFieldNumber as FieldNumber } from '../kotti-field-number/types'\nexport { KottiFieldPassword as FieldPassword } from '../kotti-field-password/types'\nexport { KottiFieldRadioGroup as FieldRadioGroup } from '../kotti-field-radio-group/types'\nexport {\n\tKottiFieldMultiSelect as FieldMultiSelect,\n\tKottiFieldMultiSelectRemote as FieldMultiSelectRemote,\n\tKottiFieldSingleSelect as FieldSingleSelect,\n\tKottiFieldSingleSelectRemote as FieldSingleSelectRemote,\n} from '../kotti-field-select/types'\nexport { KottiFieldTextArea as FieldTextArea } from '../kotti-field-text-area/types'\nexport { KottiFieldText as FieldText } from '../kotti-field-text/types'\nexport {\n\tKottiFieldToggle as FieldToggle,\n\tKottiFieldToggleGroup as FieldToggleGroup,\n} from '../kotti-field-toggle/types'\nexport { KottiField as Field } from '../kotti-field/types'\nexport { KottiFileUpload as FileUpload } from '../kotti-file-upload/types'\nexport { KottiFilters as Filters } from '../kotti-filters/types'\nexport type { KottiFormControllerList as FormControllerList } from '../kotti-form-controller-list/types'\nexport type { KottiFormControllerObject as FormControllerObject } from '../kotti-form-controller-object/types'\nexport type { KottiFormSubmit as FormSubmit } from '../kotti-form-submit/types'\nexport type { KottiForm as Form } from '../kotti-form/types'\nexport { KottiHeading as Heading } from '../kotti-heading/types'\nexport type { KottiI18n as I18n } from '../kotti-i18n/types'\nexport { KottiLine as Line } from '../kotti-line/types'\nexport { KottiModal as Modal } from '../kotti-modal/types'\nexport { KottiNavbar as Navbar } from '../kotti-navbar/types'\nexport { KottiPagination as Pagination } from '../kotti-pagination/types'\nexport { KottiPopover as Popover } from '../kotti-popover/types'\nexport { KottiRow as Row } from '../kotti-row/types'\nexport { KottiStandardTable as StandardTable } from '../kotti-table/standard-table/types'\nexport { KottiTable as Table } from '../kotti-table/table/types'\nexport { KottiColumnSelector as ColumnSelector } from '../kotti-table/types'\nexport { KottiTag as Tag } from '../kotti-tag/types'\nexport {\n\tKottiToast as Toast,\n\tKottiToaster as Toaster,\n} from '../kotti-toaster/types'\nexport { KottiUserMenu as UserMenu } from '../kotti-user-menu/types'\nexport { KottiValueLabel as ValueLabel } from '../kotti-value-label/types'\nexport * from './decimal-separator'\nexport * from './typed-emit'\n\nexport enum MetaDesignType {\n\tFIGMA = 'FIGMA',\n}\n\nexport type Meta<T extends z.ZodTypeAny | null = z.ZodTypeAny | null> = {\n\taddedVersion: string | null\n\tcomponentFolder?: string\n\tdeprecated: {\n\t\talternatives: string[]\n\t\treason: string\n\t\tversion: string\n\t} | null\n\tdesigns:\n\t\t| Array<{\n\t\t\t\ttitle: string\n\t\t\t\ttype: MetaDesignType\n\t\t\t\turl: string\n\t\t  }>\n\t\t| {\n\t\t\t\ttype: MetaDesignType\n\t\t\t\turl: string\n\t\t  }\n\t\t| null\n\tslots: Record<\n\t\tstring,\n\t\t{\n\t\t\tdescription: string | null\n\t\t\tscope: Record<\n\t\t\t\tstring,\n\t\t\t\t{\n\t\t\t\t\tdescription: string | null\n\t\t\t\t\ttype: 'array' | 'float' | 'function' | 'integer' | 'object' | 'string'\n\t\t\t\t}\n\t\t\t> | null\n\t\t}\n\t>\n\ttypeScript: {\n\t\tnamespace: string\n\t\tschema: T | null\n\t} | null\n}\n","import type { App, Component, FunctionPlugin } from 'vue'\nimport { type z } from 'zod'\n\nimport type { Kotti } from '../types'\nimport { DecimalSeparator } from '../types/decimal-separator'\n\n/**\n * Takes a Vue Component and assigns a meta object which\n * describes various properties of the component\n */\nexport const attachMeta = <\n\tC extends Component,\n\tT extends Record<string, unknown>,\n\tZOD extends z.ZodTypeAny | null,\n>(\n\tcomponent: C,\n\tmeta: Kotti.Meta<ZOD>,\n\tother?: T,\n): C & { meta: Kotti.Meta<ZOD> & T } =>\n\tObject.assign(component, { meta: Object.assign({}, meta, other) })\n\n/**\n * Checks if the given HTML element, or any of its children, is in focus\n * @param element The HTML element\n */\nexport const isInFocus = (element: HTMLElement | null): boolean =>\n\tdocument.activeElement instanceof HTMLElement &&\n\t(document.activeElement === element ||\n\t\t(element?.contains(document.activeElement) ?? false))\n\n/**\n * Triggers blur() on the given HTML element if it, or any of its children, is in focus\n * @param element The HTML element\n */\nexport const blurElement = (element: HTMLElement | null): void => {\n\tif (document.activeElement instanceof HTMLElement && isInFocus(element))\n\t\tdocument.activeElement.blur()\n}\n/**\n * Checks if the given HTML element or Vue component is/contains the specified event target\n * @param component The HTML element or Vue component\n * @param eventTarget The target of the event being checked\n *\n * This function doesn't work if the event target is (inside) an SVG Element\n * {@link https://web.archive.org/web/20231208174614/https://gomakethings.com/detecting-click-events-on-svgs-with-vanilla-js-event-delegation/}\n */\nexport const isOrContainsEventTarget = (\n\tcomponent: HTMLElement | { $el: HTMLElement } | null,\n\teventTarget: EventTarget | null,\n): boolean => {\n\tif (component === null) return false\n\tconst element = '$el' in component ? component.$el : component\n\n\treturn (\n\t\telement === eventTarget ||\n\t\t(eventTarget instanceof HTMLElement && element.contains(eventTarget))\n\t)\n}\n\n/**\n * Takes a Vue Component and assigns an install function to it\n * this makes sure that it can be used with Vue.use(component)\n */\nexport const makeInstallable = <C extends Component>(\n\tcomponent: C,\n): C & { install: FunctionPlugin<Record<string, never>> } => {\n\tconst { name } = component\n\tif (name === undefined) {\n\t\tthrow new Error('makeInstallable was passed a component without a name')\n\t}\n\n\treturn Object.assign(component, {\n\t\tinstall: (app: App) => app.component(name, component),\n\t})\n}\n\nexport const isNumberInRange = ({\n\tmaximum,\n\tminimum,\n\tvalue,\n}: {\n\tmaximum: number | null\n\tminimum: number | null\n\tvalue: number | null\n}): boolean => {\n\tif (value === null) return true\n\n\tconst fitsMinimum = minimum === null || value >= minimum\n\tconst fitsMaximum = maximum === null || value <= maximum\n\n\treturn fitsMinimum && fitsMaximum\n}\n\n/**\n * RegExp character set for use within other regular expressions\n */\nexport const DECIMAL_SEPARATORS_CHARACTER_SET = [\n\t'[',\n\t...Object.values(DecimalSeparator),\n\t']',\n].join('')\n","import type { Props } from 'tippy.js'\n\ntype PopperModifier = Exclude<\n\tProps['popperOptions']['modifiers'],\n\tundefined\n>[number]\n\n/**\n * @see {@link https://github.com/atomiks/tippyjs/issues/731#issuecomment-596460597}\n */\nexport const sameWidthOrStyled = (\n\tstyles?: Record<string, unknown>,\n): PopperModifier => ({\n\tenabled: true,\n\tfn: ({ instance, state }) => {\n\t\tconst referenceStyles = {\n\t\t\t// make sure to always have width (with the reference element's width as default)\n\t\t\twidth: `${state.rects.reference.width}px`,\n\t\t\t...(styles ?? {}),\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (state.styles.popper!.width !== referenceStyles.width) {\n\t\t\tfor (const [key, value] of Object.entries(referenceStyles)) {\n\t\t\t\t;(state.styles.popper as Record<string, unknown>)[key] = value\n\t\t\t}\n\n\t\t\t// force update the popper instance, so it can reposition the dropdown properly\n\t\t\tvoid instance.update()\n\t\t}\n\t},\n\tname: 'sameWidthOrStyled',\n\tphase: 'beforeWrite',\n\trequires: ['computeStyles'],\n})\n","/* eslint-disable @typescript-eslint/no-unnecessary-condition -- disable as only intentionally-set DEBUG flags are being marked */\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport uniq from 'lodash/uniq.js'\nimport type { Prop, PropType } from 'vue'\nimport { z } from 'zod'\n\ntype SinglePropType<T> = Exclude<PropType<T>, Array<unknown>>\n\nconst DEBUG_MAKE_PROPS = false as const // enable to print debug log\nconst DEBUG_WALK_SCHEMA_TYPES = false as const // enable to print debug log\n\nconst NEVER = Symbol('NEVER')\n\nconst setUnion = <T>(...sets: Set<T>[]): Set<T> => {\n\tconst result = new Set<T>()\n\tfor (const set of sets) {\n\t\tfor (const item of set) {\n\t\t\tresult.add(item)\n\t\t}\n\t}\n\treturn result\n}\n\nconst propValidator = <SCHEMA extends z.ZodTypeAny>({\n\tisNever,\n\tpropName,\n\tpropSchema,\n}: {\n\tisNever: boolean\n\tpropName: string\n\tpropSchema: SCHEMA\n}): ((value: unknown) => value is SCHEMA) => {\n\tconst validator = (value: unknown): value is SCHEMA => {\n\t\tif (isNever && value === NEVER) return true\n\n\t\ttry {\n\t\t\tconst result = propSchema.safeParse(value)\n\n\t\t\tif (result.success) return true\n\n\t\t\t/* eslint-disable no-console */\n\t\t\tconsole.group(`propValidator found issues with prop “${propName}”`)\n\n\t\t\tconsole.error(result.error)\n\n\t\t\tconst clonedValue = cloneDeep(value)\n\t\t\tif (Array.isArray(value)) console.table(clonedValue)\n\t\t\telse console.log(clonedValue)\n\n\t\t\tconsole.trace()\n\n\t\t\tconsole.groupEnd()\n\t\t\t/* eslint-enable no-console */\n\n\t\t\treturn false\n\t\t} catch (error) {\n\t\t\t/* eslint-disable no-console */\n\t\t\tconsole.group(`propValidator crashed while parsing prop “${propName}”`)\n\n\t\t\tconsole.error(error)\n\n\t\t\tconst clonedValue = cloneDeep(value)\n\t\t\tif (Array.isArray(value)) console.table(clonedValue)\n\t\t\telse console.log(clonedValue)\n\n\t\t\tconsole.trace()\n\n\t\t\tconsole.info('used zod schema (window.lastZodSchema)', propSchema)\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t;(window as any).lastZodSchema = propSchema\n\n\t\t\tconsole.groupEnd()\n\t\t\t/* eslint-enable no-console */\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// assign name for better debugging and to improve props rendering in the documentation\n\tObject.defineProperty(validator, 'name', {\n\t\tvalue: `propValidator('${propName}')`,\n\t\twritable: false,\n\t})\n\n\treturn validator\n}\n\n/**\n * Collects all unique types used in the top level of a Zod schema\n */\nconst walkSchemaTypes = (\n\tschema: z.ZodTypeAny,\n): Set<z.ZodFirstPartyTypeKind> => {\n\t/* eslint-disable no-console */\n\tconst typeName = schema._def.typeName as z.ZodFirstPartyTypeKind\n\n\tif (DEBUG_WALK_SCHEMA_TYPES)\n\t\tconsole.log(`walkSchemaTypes: found “ZodFirstPartyTypeKind.${typeName}”`)\n\n\tswitch (typeName) {\n\t\tcase z.ZodFirstPartyTypeKind.ZodArray:\n\t\tcase z.ZodFirstPartyTypeKind.ZodBoolean:\n\t\tcase z.ZodFirstPartyTypeKind.ZodDate:\n\t\tcase z.ZodFirstPartyTypeKind.ZodEnum:\n\t\tcase z.ZodFirstPartyTypeKind.ZodFunction:\n\t\tcase z.ZodFirstPartyTypeKind.ZodLiteral:\n\t\tcase z.ZodFirstPartyTypeKind.ZodNativeEnum:\n\t\tcase z.ZodFirstPartyTypeKind.ZodNever: // special case for abstract props\n\t\tcase z.ZodFirstPartyTypeKind.ZodNumber:\n\t\tcase z.ZodFirstPartyTypeKind.ZodObject:\n\t\tcase z.ZodFirstPartyTypeKind.ZodRecord:\n\t\tcase z.ZodFirstPartyTypeKind.ZodString:\n\t\tcase z.ZodFirstPartyTypeKind.ZodTuple: {\n\t\t\tif (DEBUG_WALK_SCHEMA_TYPES)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`walkSchemaTypes: adding “ZodFirstPartyTypeKind.${typeName}”`,\n\t\t\t\t)\n\n\t\t\treturn new Set([typeName])\n\t\t}\n\t\tcase z.ZodFirstPartyTypeKind.ZodDefault:\n\t\tcase z.ZodFirstPartyTypeKind.ZodNullable:\n\t\tcase z.ZodFirstPartyTypeKind.ZodOptional: {\n\t\t\tconst { innerType } = schema._def as\n\t\t\t\t| z.ZodDefaultDef\n\t\t\t\t| z.ZodNullableDef\n\t\t\t\t| z.ZodOptionalDef\n\n\t\t\tif (DEBUG_WALK_SCHEMA_TYPES)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`walkSchemaTypes: walking innerType of “ZodFirstPartyTypeKind.${typeName}”`,\n\t\t\t\t)\n\n\t\t\treturn setUnion(\n\t\t\t\tnew Set<z.ZodFirstPartyTypeKind>([typeName]),\n\t\t\t\twalkSchemaTypes(innerType),\n\t\t\t)\n\t\t}\n\t\t// e.g. z.refine()\n\t\tcase z.ZodFirstPartyTypeKind.ZodEffects: {\n\t\t\tconst def = schema._def as z.ZodEffectsDef\n\n\t\t\tif (DEBUG_WALK_SCHEMA_TYPES)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`walkSchemaTypes: walking schema of “ZodFirstPartyTypeKind.ZodEffects”`,\n\t\t\t\t)\n\n\t\t\treturn walkSchemaTypes(def.schema)\n\t\t}\n\t\tcase z.ZodFirstPartyTypeKind.ZodUnion: {\n\t\t\tconst { options } = schema._def as z.ZodUnionDef\n\n\t\t\tif (DEBUG_WALK_SCHEMA_TYPES)\n\t\t\t\tconsole.group('walkSchemaTypes: walking union')\n\n\t\t\t// walk every option in the union and merge results\n\t\t\tconst result = setUnion(...options.map((x) => walkSchemaTypes(x)))\n\n\t\t\tif (DEBUG_WALK_SCHEMA_TYPES) console.groupEnd()\n\n\t\t\treturn result\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new Error(\n\t\t\t\t`walkSchemaTypes: encountered unknown “ZodFirstPartyTypeKind.${typeName}”`,\n\t\t\t)\n\t\t}\n\t}\n\t/* eslint-enable no-console */\n}\n\n/**\n * These types do not influence the generation of Vue’s `propName.type` Arrays and are therefore discarded\n */\nconst ignoredZodTypes = new Set([\n\tz.ZodFirstPartyTypeKind.ZodDefault,\n\tz.ZodFirstPartyTypeKind.ZodNullable,\n\tz.ZodFirstPartyTypeKind.ZodOptional,\n])\n\n/**\n * This maps the internal zod name of a type to the the constructor that Vue expects in `propName.type`\n */\nconst zodToVueType = new Map<z.ZodFirstPartyTypeKind, SinglePropType<unknown>>([\n\t[z.ZodFirstPartyTypeKind.ZodArray, Array],\n\t[z.ZodFirstPartyTypeKind.ZodBoolean, Boolean],\n\t[z.ZodFirstPartyTypeKind.ZodDate, Date],\n\t[z.ZodFirstPartyTypeKind.ZodEnum, String], // educated guess, can be fixed if the need for non-string enums arises\n\t[z.ZodFirstPartyTypeKind.ZodFunction, Function],\n\t[z.ZodFirstPartyTypeKind.ZodLiteral, String], // educated guess, can be fixed if the need for non-string literals arises\n\t[z.ZodFirstPartyTypeKind.ZodNativeEnum, String], // educated guess, can be fixed if the need for non-string enums arises\n\t[z.ZodFirstPartyTypeKind.ZodNumber, Number],\n\t[z.ZodFirstPartyTypeKind.ZodObject, Object],\n\t[z.ZodFirstPartyTypeKind.ZodRecord, Object],\n\t[z.ZodFirstPartyTypeKind.ZodString, String],\n\t[z.ZodFirstPartyTypeKind.ZodTuple, Array],\n])\n\n/**\n * @summary Easily define & validate vue props, improve error messages drastically\n *\n * @description\n * This augments/replaces Vue’s props entirely, including the need to add prop.validator\n * by using zod and therefore actually prints errors to the console that can help developers\n * rather than the non-distinct vue-warn message about a validator failing for a component.\n *\n * ## Known limitations:\n *\n * 1. Deeply defined defaults are only applied when manually `schema.safeParse`-ing the data (only top-level defaults are possible to transform to Vue)\n * 2. `z.safeParse()` fails for type: `z.function()` if we specify the default, without explicitly chaining\n *    `optional()` on the function type. (See {@link https://github.com/colinhacks/zod/issues/647})\n *    However, it is inconsequential for Vue prop validation, as Vue doesn’t execute the `validator` if the prop is not passed/undefined.\n *\n * @example\n * // KtUserMenu.vue\n * export default defineComponent({\n *   name: 'KtUserMenu',\n *   props: makeProps(KottiUserMenu.propsSchema)\n *   setup(props)\n * })\n *\n * // types.ts\n * export namespace KottiUserMenu {\n *   export const propsSchema = z.object({\n *     // ...\n *   })\n *   type Props = z.input<typeof propsSchema>\n *   type PropsInternal = z.output<typeof propsSchema>\n * }\n */\nexport const makeProps = <PROPS_SCHEMA extends z.ZodObject<z.ZodRawShape>>(\n\tpropsSchema: PROPS_SCHEMA,\n): {\n\t[PROP_NAME in keyof PROPS_SCHEMA['shape']]: Omit<\n\t\tProp<z.output<PROPS_SCHEMA>[PROP_NAME]>,\n\t\t'default' | 'required' | 'type'\n\t> & {\n\t\trequired: undefined extends z.input<PROPS_SCHEMA>[PROP_NAME] ? false : true\n\t\ttype: PropType<z.output<PROPS_SCHEMA>[PROP_NAME]>\n\t} & (undefined extends z.input<PROPS_SCHEMA>[PROP_NAME]\n\t\t\t? { default: () => z.output<PROPS_SCHEMA>[PROP_NAME] }\n\t\t\t: Record<string, never>)\n} =>\n\tObject.fromEntries(\n\t\tObject.entries(propsSchema.shape).map(([propName, propSchema]) => {\n\t\t\t/* eslint-disable no-console */\n\t\t\tif (DEBUG_MAKE_PROPS) console.log(`makeProps: generating “${propName}”`)\n\n\t\t\tconst zodTypeSet = walkSchemaTypes(propSchema)\n\n\t\t\tconst isNever = zodTypeSet.has(z.ZodFirstPartyTypeKind.ZodNever)\n\n\t\t\tif (isNever && zodTypeSet.size > 1)\n\t\t\t\tthrow new Error('makeProps: Unexpected Mixed Usage of Never')\n\n\t\t\tconst propDefinition: Prop<unknown> = {\n\t\t\t\tvalidator: propValidator({\n\t\t\t\t\tisNever,\n\t\t\t\t\tpropName,\n\t\t\t\t\tpropSchema,\n\t\t\t\t}),\n\t\t\t}\n\n\t\t\tif (isNever) {\n\t\t\t\t// HACK: for the KtFields because we are constrained by VueTypes\n\t\t\t\tpropDefinition.default = NEVER\n\t\t\t\tpropDefinition.type = Symbol\n\t\t\t} else {\n\t\t\t\tconst vuePropTypes = uniq(\n\t\t\t\t\tArray.from(zodTypeSet)\n\t\t\t\t\t\t.filter((x) => !ignoredZodTypes.has(x))\n\t\t\t\t\t\t.map((zodTypeName) => {\n\t\t\t\t\t\t\tif (DEBUG_MAKE_PROPS)\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`makeProps: found “ZodFirstPartyTypeKind.${zodTypeName}”`,\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tif (!zodToVueType.has(zodTypeName))\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`makeProps: unknown “ZodFirstPartyTypeKind.${zodTypeName}”`,\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\treturn zodToVueType.get(zodTypeName) as SinglePropType<unknown>\n\t\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\tif (vuePropTypes.length === 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`makeProps: Could not determine vue prop.type for prop ${propName}`,\n\t\t\t\t\t)\n\n\t\t\t\tpropDefinition.type =\n\t\t\t\t\tvuePropTypes.length === 1 ? vuePropTypes[0] : vuePropTypes\n\n\t\t\t\t/**\n\t\t\t\t * WORKAROUND: Usually, one should probably call shape.isOptional()\n\t\t\t\t *\n\t\t\t\t * However, this currently doesn’t seem to work with z.function().default()\n\t\t\t\t * and this also internally just calls safeParse on the object — evaluating\n\t\t\t\t * the default function, which wastes performance AND could cause\n\t\t\t\t * unintended side-effects\n\t\t\t\t */\n\t\t\t\tconst isOptional =\n\t\t\t\t\tzodTypeSet.has(z.ZodFirstPartyTypeKind.ZodDefault) ||\n\t\t\t\t\tzodTypeSet.has(z.ZodFirstPartyTypeKind.ZodOptional)\n\n\t\t\t\tif (isOptional) propDefinition.default = propSchema._def.defaultValue\n\t\t\t\telse propDefinition.required = true\n\t\t\t}\n\n\t\t\treturn [propName, propDefinition]\n\t\t\t/* eslint-enable no-console */\n\t\t}),\n\t) as {\n\t\t[KEY in keyof PROPS_SCHEMA['shape']]: Omit<\n\t\t\tProp<z.output<PROPS_SCHEMA>[KEY]>,\n\t\t\t'default' | 'required' | 'type'\n\t\t> & {\n\t\t\trequired: undefined extends z.input<PROPS_SCHEMA>[KEY] ? false : true\n\t\t\ttype: PropType<z.output<PROPS_SCHEMA>[KEY]>\n\t\t} & (undefined extends z.input<PROPS_SCHEMA>[KEY]\n\t\t\t\t? { default: () => z.output<PROPS_SCHEMA>[KEY] }\n\t\t\t\t: Record<string, never>)\n\t}\n/* eslint-enable @typescript-eslint/no-unnecessary-condition */\n","import type { Ref } from 'vue'\nimport { watch } from 'vue'\n\nconst getDefaultOptions = (): KeyframeAnimationOptions => ({\n\tduration: 250,\n\teasing: 'ease',\n\tfill: 'forwards',\n})\n\nexport const useSlideAnimation = (\n\telement: Ref<HTMLElement | null>,\n\tisContentOpen: Readonly<Ref<boolean>>,\n\toptions: KeyframeAnimationOptions,\n): void => {\n\tconst finalOptions = { ...getDefaultOptions(), ...options }\n\tconst getRawHeight = (element: HTMLElement) => element.clientHeight\n\n\tconst executeAnimation = async (willOpen: boolean): Promise<void> => {\n\t\tconst animatedObject = element.value ?? null\n\t\tif (animatedObject === null) return\n\t\tconst rawHeight = getRawHeight(animatedObject).toString()\n\n\t\tconst frames: Keyframe[] = ['0px', `${rawHeight}px`].map((height) => ({\n\t\t\theight,\n\t\t\toverflow: 'hidden',\n\t\t}))\n\t\tconst animation = animatedObject.animate(frames, finalOptions)\n\n\t\tanimation.pause()\n\n\t\tif (willOpen) animation.play()\n\t\telse animation.reverse()\n\n\t\tawait animation.finished\n\n\t\t// Clear animation keyframeEffects to allow animatedObject to resize\n\t\tanimation.cancel()\n\t}\n\n\twatch(\n\t\t() => isContentOpen.value,\n\t\t(shouldBeShown, wasShown) => {\n\t\t\tif (shouldBeShown === wasShown) return\n\n\t\t\tvoid executeAnimation(shouldBeShown)\n\t\t},\n\t\t{ flush: 'post', immediate: true },\n\t)\n}\n","<template>\n\t<div class=\"kt-accordion\">\n\t\t<div class=\"kt-accordion__header\" :data-test=\"dataTest\" @click=\"toggle\">\n\t\t\t<div class=\"kt-accordion__title\">\n\t\t\t\t<slot name=\"title\">\n\t\t\t\t\t<i v-if=\"icon\" class=\"yoco kt-accordion__icon\" v-text=\"icon\" />\n\t\t\t\t\t<div class=\"kt-accordion__text\" v-text=\"title\" />\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<div class=\"kt-accordion__toggle\" @click.stop=\"toggle\">\n\t\t\t\t<i class=\"yoco\" v-text=\"toggleIcon\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div :class=\"contentClasses\">\n\t\t\t<div ref=\"contentInnerRef\" class=\"kt-accordion__inner\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport { useSlideAnimation } from './hooks'\nimport { KottiAccordion } from './types'\n\n//** How much time should be spent on open/close animation in milliseconds */\nconst ANIMATION_DURATION = 300\n\nexport default defineComponent({\n\tname: 'KtAccordion',\n\tprops: makeProps(KottiAccordion.propsSchema),\n\temits: ['update:isClosed'],\n\tsetup(props, { emit }) {\n\t\tconst contentInnerRef = ref<HTMLElement | null>(null)\n\n\t\tuseSlideAnimation(\n\t\t\tcontentInnerRef,\n\t\t\tcomputed(() => !props.isClosed),\n\t\t\t{ duration: ANIMATION_DURATION },\n\t\t)\n\t\treturn {\n\t\t\tcontentClasses: computed(() => ({\n\t\t\t\t'kt-accordion__content': true,\n\t\t\t\t'kt-accordion__content--is-closed': props.isClosed,\n\t\t\t\t'kt-accordion__content--is-open': !props.isClosed,\n\t\t\t})),\n\t\t\tcontentInnerRef,\n\t\t\ttoggle: () => {\n\t\t\t\temit('update:isClosed', !props.isClosed)\n\t\t\t},\n\t\t\ttoggleIcon: computed(() =>\n\t\t\t\tprops.isClosed ? Yoco.Icon.PLUS : Yoco.Icon.MINUS,\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n:root {\n\t--accordion-color: var(--interactive-03);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-accordion {\n\tmargin-bottom: var(--unit-4);\n\tborder-radius: 2px;\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: var(--unit-2) var(--unit-8);\n\t\tcursor: pointer;\n\t\tborder: 1px solid var(--ui-02);\n\n\t\t.yoco {\n\t\t\tfont-size: 1.2rem;\n\t\t}\n\t}\n\n\t&__title {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\talign-items: center;\n\t\talign-self: center;\n\t\tfont-size: 16px;\n\t\tfont-weight: 600;\n\t}\n\n\t&__icon {\n\t\tdisplay: inline-block;\n\t\tmargin-right: var(--unit-4);\n\t\tcolor: var(--accordion-color);\n\t}\n\n\t&__text {\n\t\tdisplay: inline-block;\n\t}\n\n\t&__content {\n\t\tmargin-top: -1px; // prevent border overlap when closed\n\t\toverflow: hidden;\n\t\tborder: 1px solid var(--ui-02);\n\t\tborder-top: none;\n\n\t\t&--is-open {\n\t\t\theight: auto;\n\t\t}\n\n\t\t&--is-closed {\n\t\t\theight: 0;\n\t\t}\n\t}\n\n\t&__inner {\n\t\tpadding: var(--unit-2) var(--unit-8);\n\t}\n\n\t&__toggle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\talign-self: center;\n\t\tmargin-left: var(--unit-4);\n\t\tcolor: var(--accordion-color);\n\t\tuser-select: none;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtAccordionVue from './KtAccordion.vue'\nimport { KottiAccordion } from './types'\n\nexport const KtAccordion = attachMeta(makeInstallable(KtAccordionVue), {\n\taddedVersion: null,\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=173%3A2598',\n\t},\n\tslots: {\n\t\tdefault: { description: null, scope: null },\n\t\ttitle: { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Accordion',\n\t\tschema: KottiAccordion.propsSchema,\n\t},\n})\n","<template>\n\t<div class=\"kt-actionbar\">\n\t\t<div class=\"kt-actionbar-wrapper\">\n\t\t\t<div class=\"kt-actionbar-header\">\n\t\t\t\t<h1 v-if=\"headerTitle\" v-text=\"headerTitle\" />\n\t\t\t\t<slot name=\"actionbar-header\" />\n\t\t\t</div>\n\t\t\t<div class=\"kt-actionbar-body\">\n\t\t\t\t<ul v-if=\"menu.length > 0\" class=\"kt-actionbar-nav\">\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"item.component\"\n\t\t\t\t\t\tv-for=\"(item, index) in parsedMenu\"\n\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\tv-bind=\"item.props\"\n\t\t\t\t\t\t@click=\"$emit('menuItemClick', item)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<li :class=\"navItemClass(item)\">\n\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\tclass=\"yoco kt-actionbar-nav__icon\"\n\t\t\t\t\t\t\t\t:class=\"`kt-actionbar-nav__icon--is-${menuStyle.iconPosition}`\"\n\t\t\t\t\t\t\t\tv-text=\"item.icon\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"kt-actionbar-nav__label\" v-text=\"item.label\" />\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</component>\n\t\t\t\t</ul>\n\t\t\t\t<slot name=\"actionbar-body\" />\n\t\t\t</div>\n\t\t\t<div class=\"kt-actionbar-footer\">\n\t\t\t\t<slot name=\"actionbar-footer\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiActionbar } from './types'\n\nexport default defineComponent({\n\tname: 'KtActionbar',\n\tprops: makeProps(KottiActionbar.propsSchema),\n\temits: ['menuItemClick'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tnavItemClass: (item: KottiActionbar.MenuItem) => ({\n\t\t\t\t'kt-actionbar-nav__item': true,\n\t\t\t\t'kt-actionbar-nav__item--is-active': item.active,\n\t\t\t\t'kt-actionbar-nav__item--is-disabled': item.disabled,\n\t\t\t}),\n\t\t\tparsedMenu: computed(() =>\n\t\t\t\tKottiActionbar.propsSchema.shape.menu.parse(props.menu),\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-style/_variables';\n\n:root {\n\t--action-bar-color-active: var(--interactive-03);\n\t--action-bar-width: 16rem;\n}\n\n.kt-actionbar {\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\tflex: 0 0 var(--action-bar-width);\n\tflex-direction: column;\n\twidth: var(--action-bar-width);\n\tmin-height: 100vh;\n\tbackground: var(--ui-01);\n\tborder-right: 1px solid var(--ui-02);\n\n\t.kt-actionbar-wrapper {\n\t\tposition: fixed;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: var(--action-bar-width);\n\t\theight: 100%;\n\t\tpadding: var(--unit-6);\n\t\toverflow-y: auto;\n\t}\n\n\t.kt-actionbar-header {\n\t\tflex: 0 0 auto;\n\t}\n\n\t.kt-actionbar-body {\n\t\tflex: 1 1 100%;\n\t}\n\n\t.kt-actionbar-footer {\n\t\tflex: 1 1 auto;\n\t\tpadding-top: 1.2rem;\n\t}\n}\n\n.kt-actionbar-nav {\n\tmargin: 0 calc(-1 * var(--unit-2));\n\n\t&__item {\n\t\tpadding: var(--unit-2);\n\t\tmargin: var(--unit-2) 0;\n\t\tfont-size: 0.75rem;\n\t\tcolor: var(--text-01);\n\t\tcursor: pointer;\n\t\tlist-style: none;\n\t\tborder-radius: 0.2rem;\n\n\t\t&:not(&--is-disabled):hover {\n\t\t\tbackground: var(--ui-02);\n\t\t}\n\n\t\t&--is-active {\n\t\t\tfont-weight: 600;\n\t\t\tcolor: var(--action-bar-color-active);\n\t\t}\n\n\t\t&--is-disabled {\n\t\t\tcolor: var(--text-05);\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t&__icon {\n\t\tpadding-right: 0.4rem;\n\n\t\t&--is-right {\n\t\t\tfloat: right;\n\t\t\tpadding-right: 0;\n\t\t\tpadding-left: 0.4rem;\n\t\t}\n\t}\n}\n\n.kt-actionbar-menu {\n\tul {\n\t\tposition: relative;\n\t\tmargin: 0;\n\t}\n\n\tli {\n\t\tpadding: var(--unit-2) 0;\n\t\tfont-size: 0.75rem;\n\t\tcolor: var(--text-01);\n\t\tlist-style: none;\n\t}\n\n\ta {\n\t\ttext-decoration: none;\n\t}\n\n\ti {\n\t\tcolor: var(--link-02);\n\t}\n\n\t&.has-icon-right i {\n\t\tfloat: right;\n\t}\n\n\t.router-link-active {\n\t\tli {\n\t\t\tfont-weight: 600;\n\t\t\tcolor: var(--action-bar-color-active);\n\t\t}\n\n\t\ti {\n\t\t\tcolor: var(--action-bar-color-active);\n\t\t}\n\t}\n}\n\n@media (width < $size-md) {\n\t.kt-actionbar {\n\t\tz-index: 100;\n\t\tflex: 1 1 auto;\n\t\twidth: 100%;\n\t\tmin-height: auto;\n\t\tborder-right: 0;\n\t\tborder-bottom: 1px solid var(--ui-02);\n\n\t\t.kt-actionbar-wrapper {\n\t\t\tposition: static;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtActionbarVue from './KtActionbar.vue'\nimport { KottiActionbar } from './types'\n\nexport const KtActionbar = attachMeta(makeInstallable(KtActionbarVue), {\n\taddedVersion: '0.0.9',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=133%3A2651',\n\t},\n\tslots: {\n\t\t'actionbar-body': { description: null, scope: null },\n\t\t'actionbar-footer': { description: null, scope: null },\n\t\t'actionbar-header': { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Actionbar',\n\t\tschema: KottiActionbar.propsSchema,\n\t},\n})\n","export const DEFAULT_DEBOUNCE = 500\n\nexport const ISO8601 = 'YYYY-MM-DD'\nexport const ISO8601_SECONDS = 'YYYY-MM-DD HH:mm:ss'\n\nexport const ONE_HUNDRED_PERCENT = 100\n\nexport const TIPPY_DISTANCE_OFFSET = 4\n","<template>\n\t<div :class=\"avatarClasses\" @click=\"onAvatarContainerClick\">\n\t\t<img\n\t\t\tv-if=\"avatarAvailable\"\n\t\t\tref=\"triggerRef\"\n\t\t\tclass=\"kt-avatar__image\"\n\t\t\t:src=\"src ?? undefined\"\n\t\t\t@error=\"onImageFailedToLoad\"\n\t\t/>\n\t\t<div v-else ref=\"triggerRef\" class=\"kt-avatar__fallback\">\n\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.USER_SOLID\" />\n\t\t</div>\n\t\t<div ref=\"contentRef\">\n\t\t\t<slot name=\"content\">\n\t\t\t\t<span v-text=\"name\" />\n\t\t\t</slot>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref, useTemplateRef } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../constants'\nimport { makeProps } from '../make-props'\n\nimport { KottiAvatar } from './types'\n\nexport default defineComponent({\n\tname: 'KtAvatar',\n\tprops: makeProps(KottiAvatar.propsSchema),\n\temits: ['click'],\n\tsetup(props, { emit, slots }) {\n\t\tconst avatarFallback = ref(true)\n\n\t\tconst contentRef = useTemplateRef<HTMLElement>('contentRef')\n\t\tconst triggerRef = useTemplateRef<HTMLElement>('triggerRef')\n\n\t\tconst hideTippy = computed(\n\t\t\t() => !props.isHoverable || (!slots.content && props.name === null),\n\t\t)\n\n\t\tuseTippy(\n\t\t\ttriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: contentRef.value ?? undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t\t...(hideTippy.value\n\t\t\t\t\t? { trigger: 'manual' }\n\t\t\t\t\t: { trigger: 'mouseenter focusin' }),\n\t\t\t})),\n\t\t)\n\n\t\tonMounted(() => {\n\t\t\tif (contentRef.value === null)\n\t\t\t\tthrow new Error('KtAvatar: Unbound `contentRef` for tippy: null')\n\t\t})\n\n\t\treturn {\n\t\t\tavatarAvailable: computed(() => props.src && avatarFallback.value),\n\t\t\tavatarClasses: computed(() => ({\n\t\t\t\t'kt-avatar': true,\n\t\t\t\t'kt-avatar--is-hoverable': props.isHoverable,\n\t\t\t\t'kt-avatar--is-size-large': props.size === KottiAvatar.Size.LARGE,\n\t\t\t\t'kt-avatar--is-size-medium': props.size === KottiAvatar.Size.MEDIUM,\n\t\t\t\t'kt-avatar--is-size-small': props.size === KottiAvatar.Size.SMALL,\n\t\t\t})),\n\t\t\tavatarFallback,\n\t\t\tonAvatarContainerClick(event: MouseEvent) {\n\t\t\t\temit('click', event)\n\t\t\t},\n\t\t\tonImageFailedToLoad: () => {\n\t\t\t\tavatarFallback.value = false\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n:root {\n\t--avatar-color: var(--interactive-01);\n}\n\n.kt-avatar {\n\tposition: relative;\n\tdisplay: inline-flex;\n\taspect-ratio: 1/1;\n\tcolor: var(--ui-background);\n\tbackground: var(--ui-02);\n\tborder: 0.1rem solid var(--ui-background);\n\tborder-radius: 100%;\n\n\t&__fallback,\n\t&__image {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\twidth: 100%;\n\t\taspect-ratio: 1/1;\n\t}\n\n\t&__fallback {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t&__image {\n\t\tobject-fit: cover;\n\t\tborder-radius: 100%;\n\t}\n\n\t&--is-hoverable:hover {\n\t\tcursor: pointer;\n\t\tborder: 0.1rem solid var(--avatar-color);\n\t}\n\n\t&--is-size-small {\n\t\twidth: 1.6rem;\n\t\theight: 1.6rem;\n\t\tmax-height: 1.6rem;\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&--is-size-medium {\n\t\twidth: 2.4rem;\n\t\theight: 2.4rem;\n\t\tmax-height: 2.4rem;\n\t\tfont-size: 1.8rem;\n\t}\n\n\t&--is-size-large {\n\t\twidth: 3.2rem;\n\t\theight: 3.2rem;\n\t\tmax-height: 3.2rem;\n\t\tfont-size: 2.4rem;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtAvatarVue from './KtAvatar.vue'\nimport { KottiAvatar } from './types'\n\nexport const KtAvatar = attachMeta(makeInstallable(KtAvatarVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A66',\n\t},\n\tslots: {\n\t\tcontent: {\n\t\t\tdescription: 'Replaces Name Popover',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Avatar',\n\t\tschema: KottiAvatar.propsSchema,\n\t},\n})\n","<template>\n\t<div :class=\"avatarGroupClasses\">\n\t\t<div v-if=\"avatarRemainders > 0\" class=\"kt-avatar-group__number\">\n\t\t\t<div v-text=\"`+${avatarRemainders}`\" />\n\t\t</div>\n\t\t<KtAvatar\n\t\t\tv-for=\"(item, index) in visibleItems\"\n\t\t\t:key=\"index\"\n\t\t\t:isHoverable=\"isHoverable\"\n\t\t\t:name=\"item.name\"\n\t\t\t:size=\"size\"\n\t\t\t:src=\"item.src\"\n\t\t>\n\t\t\t<template #content>\n\t\t\t\t<slot :item=\"item\" name=\"content\" />\n\t\t\t</template>\n\t\t</KtAvatar>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { KtAvatar } from '../kotti-avatar/'\nimport { KottiAvatar } from '../kotti-avatar/types'\nimport { makeProps } from '../make-props'\n\nimport { KottiAvatarGroup } from './types'\n\nexport default defineComponent({\n\tname: 'KtAvatarGroup',\n\tcomponents: {\n\t\tKtAvatar,\n\t},\n\tprops: makeProps(KottiAvatarGroup.propsSchema),\n\tsetup(props) {\n\t\treturn {\n\t\t\tavatarGroupClasses: computed(() => ({\n\t\t\t\t'kt-avatar-group': true,\n\t\t\t\t'kt-avatar-group--is-size-large': props.size === KottiAvatar.Size.LARGE,\n\t\t\t\t'kt-avatar-group--is-size-medium':\n\t\t\t\t\tprops.size === KottiAvatar.Size.MEDIUM,\n\t\t\t\t'kt-avatar-group--is-size-small': props.size === KottiAvatar.Size.SMALL,\n\t\t\t\t'kt-avatar-group--is-stack': props.isStack,\n\t\t\t})),\n\t\t\tavatarRemainders: computed(() => props.items.length - props.count),\n\t\t\tvisibleItems: computed(() => {\n\t\t\t\tconst reversedItems = [...props.items].reverse()\n\n\t\t\t\treturn reversedItems.filter((_item, index) => index < props.count)\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-avatar-group {\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\talign-items: center;\n\tjustify-content: flex-end;\n\n\t.kt-avatar-group__number {\n\t\tposition: relative;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin-left: 0.2rem;\n\t\tcolor: var(--text-03);\n\t\tbackground: var(--ui-02);\n\t\tborder: 0.1rem solid var(--ui-background);\n\t\tborder-radius: 100%;\n\t}\n\n\t&--is-size-small {\n\t\t.kt-avatar-group__number {\n\t\t\twidth: 1.6rem;\n\t\t\theight: 1.6rem;\n\t\t\tfont-size: 0.4rem;\n\t\t}\n\n\t\t&.kt-avatar-group--is-stack > * {\n\t\t\tmargin-left: -0.4rem;\n\t\t}\n\t}\n\n\t&--is-size-medium {\n\t\t.kt-avatar-group__number {\n\t\t\twidth: 2.4rem;\n\t\t\theight: 2.4rem;\n\t\t\tfont-size: 0.6rem;\n\t\t}\n\n\t\t&.kt-avatar-group--is-stack > * {\n\t\t\tmargin-left: -0.6rem;\n\t\t}\n\t}\n\n\t&--is-size-large {\n\t\t.kt-avatar-group__number {\n\t\t\twidth: 3.2rem;\n\t\t\theight: 3.2rem;\n\t\t\tfont-size: 0.8rem;\n\t\t}\n\n\t\t&.kt-avatar-group--is-stack > * {\n\t\t\tmargin-left: -0.8rem;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtAvatarGroupVue from './KtAvatarGroup.vue'\n\nexport const KtAvatarGroup = attachMeta(makeInstallable(KtAvatarGroupVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A66',\n\t},\n\tslots: {\n\t\tcontent: {\n\t\t\tdescription: 'Replaces Name Popover',\n\t\t\tscope: {\n\t\t\t\titem: {\n\t\t\t\t\tdescription: 'individual item of props.items',\n\t\t\t\t\ttype: 'object',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.AvatarGroup',\n\t\tschema: null,\n\t},\n})\n","<template>\n\t<button\n\t\tref=\"helpTextTriggerRef\"\n\t\t:class=\"mainClasses\"\n\t\t:type=\"isSubmit ? 'submit' : 'button'\"\n\t\t@click=\"handleClick\"\n\t>\n\t\t<i v-if=\"isLoading\" class=\"kt-circle-loading\" />\n\t\t<i v-if=\"hasIconLeft\" class=\"yoco\" v-text=\"icon\" />\n\t\t<span v-if=\"hasSlot\">\n\t\t\t<slot />\n\t\t</span>\n\t\t<span v-else-if=\"label !== null\" v-text=\"label\" />\n\t\t<i v-if=\"hasIconRight\" class=\"yoco\" v-text=\"icon\" />\n\t\t<div v-if=\"showHelpText\" ref=\"helpTextContentRef\" v-text=\"helpText\" />\n\t</button>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../constants'\nimport { makeProps } from '../make-props'\n\nimport { KottiButton } from './types'\n\nexport default defineComponent({\n\tname: 'KtButton',\n\tprops: makeProps(KottiButton.propsSchema),\n\temits: ['click', 'update:toggleStatus'],\n\tsetup(props, { emit, slots }) {\n\t\tconst helpTextContentRef = ref<Element | null>(null)\n\t\tconst helpTextTriggerRef = ref<Element | null>(null)\n\n\t\tconst hasSlot = computed(() => Boolean(slots.default))\n\n\t\tconst isIconButton = computed(\n\t\t\t() => props.icon !== null && props.label === null,\n\t\t)\n\n\t\tconst showHelpText = computed(\n\t\t\t() => isIconButton.value && props.helpText !== null,\n\t\t)\n\n\t\tconst isToggle = computed(() => props.toggleStatus !== null)\n\n\t\tuseTippy(\n\t\t\thelpTextTriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: props.helpText\n\t\t\t\t\t? (helpTextContentRef.value ?? undefined)\n\t\t\t\t\t: undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t\t...(showHelpText.value\n\t\t\t\t\t? { trigger: 'mouseenter focusin' }\n\t\t\t\t\t: { trigger: 'manual' }),\n\t\t\t})),\n\t\t)\n\n\t\tonMounted(() => {\n\t\t\tif (props.label !== null && props.helpText !== null) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'KtButton: Guideline Uncompliance: attempted to use helpText with a button that already has a label.',\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tisToggle.value &&\n\t\t\t\tprops.type !== KottiButton.Type.DEFAULT &&\n\t\t\t\tprops.type !== KottiButton.Type.TEXT\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'KtButton: Guideline Uncompliance: attempted to use toggleStatus with a button of type different than \"DEFAULT\" or \"TEXT\"',\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\thandleClick: (event: Event) => {\n\t\t\t\tif (isToggle.value)\n\t\t\t\t\temit(\n\t\t\t\t\t\t'update:toggleStatus',\n\t\t\t\t\t\tprops.toggleStatus === KottiButton.ToggleStatus.OFF\n\t\t\t\t\t\t\t? KottiButton.ToggleStatus.ON\n\t\t\t\t\t\t\t: KottiButton.ToggleStatus.OFF,\n\t\t\t\t\t)\n\t\t\t\temit('click', event)\n\t\t\t},\n\t\t\thasIconLeft: computed(\n\t\t\t\t() =>\n\t\t\t\t\tprops.icon !== null &&\n\t\t\t\t\tprops.iconPosition === KottiButton.IconPosition.LEFT,\n\t\t\t),\n\t\t\thasIconRight: computed(\n\t\t\t\t() =>\n\t\t\t\t\tprops.icon !== null &&\n\t\t\t\t\tprops.iconPosition === KottiButton.IconPosition.RIGHT,\n\t\t\t),\n\t\t\thasSlot,\n\t\t\thelpTextContentRef,\n\t\t\thelpTextTriggerRef,\n\t\t\tmainClasses: computed(() => ({\n\t\t\t\t'kt-button': true,\n\t\t\t\t'kt-button--has-content': props.label !== null || hasSlot.value,\n\t\t\t\t'kt-button--has-icon': props.icon !== null,\n\t\t\t\t'kt-button--is-block': props.isBlock,\n\t\t\t\t'kt-button--is-multiline': props.isMultiline,\n\t\t\t\t...(props.toggleStatus\n\t\t\t\t\t? { [`kt-button--is-toggle-${props.toggleStatus}`]: isToggle.value }\n\t\t\t\t\t: {}),\n\t\t\t\t[`kt-button--size-${props.size}`]: true,\n\t\t\t\t[`kt-button--type-${props.type}`]: true,\n\t\t\t})),\n\t\t\tshowHelpText,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n:root {\n\t--default-button-height: var(--unit-8);\n\t--default-button-line-height: var(--unit-6);\n\t--small-button-height: var(--unit-7);\n\t--large-button-height: var(--unit-9);\n\t--button-main-color: var(--interactive-01);\n\t--button-main-color-dark: var(--interactive-01-hover);\n\t--button-main-color-light: var(--interactive-02-hover);\n\t--button-secondary-color: var(--interactive-01-hover);\n}\n\n:root[data-theme='dark'] {\n\t--button-secondary-color: var(--interactive-01);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-weight: 600;\n\n\t// Since this is an inline element (display: inline-flex), we need to\n\t// care about vertical-alignment. The default setting would cause\n\t// different alignments between buttons with or without icon.\n\tvertical-align: middle;\n\tcursor: pointer;\n\tuser-select: none;\n\tborder: 1px solid transparent;\n\tborder-radius: var(--border-radius);\n\ttransition: 30ms opacity ease-in-out;\n\n\t&:active {\n\t\topacity: 0.85;\n\t}\n\n\t&:disabled {\n\t\tpointer-events: none;\n\t\topacity: 0.46;\n\t}\n\n\t&:focus-visible {\n\t\toutline: none;\n\t}\n\n\t> *:not(:first-child) {\n\t\tmargin-left: 0.2rem;\n\t}\n\n\t&--has-content {\n\t\tpadding: 0 var(--unit-4);\n\t}\n\n\t&--has-icon {\n\t\t.yoco {\n\t\t\tfont-size: 1rem;\n\t\t}\n\n\t\t&:not(.kt-button--has-content) {\n\t\t\t&.kt-button--size-small {\n\t\t\t\twidth: var(--small-button-height);\n\t\t\t}\n\n\t\t\t&.kt-button--size-medium {\n\t\t\t\twidth: var(--default-button-height);\n\t\t\t}\n\n\t\t\t&.kt-button--size-large {\n\t\t\t\twidth: var(--large-button-height);\n\t\t\t}\n\t\t}\n\t}\n\n\t// increase selector specificity by using .kt-button twice\n\t&--is-block.kt-button {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\n\t// increase selector specificity by using .kt-button twice\n\t&--is-multiline.kt-button {\n\t\theight: auto;\n\t\tpadding-top: var(--unit-1);\n\t\tpadding-bottom: var(--unit-1);\n\t\tline-height: var(--default-button-line-height);\n\n\t\t&.kt-button--has-icon {\n\t\t\talign-items: baseline;\n\t\t\ttext-align: left;\n\n\t\t\t.yoco {\n\t\t\t\tposition: relative;\n\t\t\t\tleft: calc(-1 * var(--unit-1));\n\t\t\t}\n\t\t}\n\t}\n\n\t&--size {\n\t\t&-small {\n\t\t\theight: var(--small-button-height);\n\t\t}\n\n\t\t&-medium {\n\t\t\theight: var(--default-button-height);\n\t\t}\n\n\t\t&-large {\n\t\t\theight: var(--large-button-height);\n\t\t}\n\t}\n\n\t&--type {\n\t\t&-danger {\n\t\t\tcolor: var(--danger);\n\t\t\tbackground-color: var(--ui-01);\n\t\t\tborder-color: var(--ui-02);\n\n\t\t\t&:hover,\n\t\t\t&:focus-visible {\n\t\t\t\tcolor: var(--text-04);\n\t\t\t\tbackground-color: var(--danger);\n\t\t\t\tborder-color: transparent;\n\n\t\t\t\t.kt-circle-loading {\n\t\t\t\t\tborder-bottom-color: var(--text-04);\n\t\t\t\t\tborder-left-color: var(--text-04);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-circle-loading {\n\t\t\t\tborder-bottom-color: var(--danger);\n\t\t\t\tborder-left-color: var(--danger);\n\t\t\t}\n\t\t}\n\n\t\t&-default {\n\t\t\tcolor: var(--button-secondary-color);\n\t\t\tbackground-color: var(--interactive-02);\n\t\t\tborder-color: var(--ui-02);\n\n\t\t\t&:hover,\n\t\t\t&:focus-visible {\n\t\t\t\tbackground-color: var(--button-main-color-light);\n\t\t\t\tborder-color: var(--button-main-color-light);\n\t\t\t}\n\n\t\t\t.kt-circle-loading {\n\t\t\t\tborder-bottom-color: var(--button-main-color-dark);\n\t\t\t\tborder-left-color: var(--button-main-color-dark);\n\t\t\t}\n\n\t\t\t&.kt-button--is-toggle-on {\n\t\t\t\tcolor: var(--text-04);\n\t\t\t\tbackground-color: var(--button-main-color);\n\t\t\t\tborder-color: var(--button-main-color-dark);\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tbackground-color: var(--button-main-color-dark);\n\t\t\t\t\tborder-color: var(--button-main-color-dark);\n\t\t\t\t}\n\n\t\t\t\t.kt-circle-loading {\n\t\t\t\t\tborder-bottom-color: var(--text-04);\n\t\t\t\t\tborder-left-color: var(--text-04);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-primary {\n\t\t\tcolor: var(--text-04);\n\t\t\tbackground-color: var(--button-main-color);\n\t\t\tborder-color: var(--button-main-color-dark);\n\n\t\t\t&:hover,\n\t\t\t&:focus-visible {\n\t\t\t\tbackground-color: var(--button-main-color-dark);\n\t\t\t\tborder-color: var(--button-main-color-dark);\n\t\t\t}\n\n\t\t\t.kt-circle-loading {\n\t\t\t\tborder-bottom-color: var(--text-04);\n\t\t\t\tborder-left-color: var(--text-04);\n\t\t\t}\n\t\t}\n\n\t\t&-secondary {\n\t\t\tcolor: var(--button-secondary-color);\n\t\t\tbackground-color: var(--interactive-02);\n\t\t\tborder-color: var(--button-main-color-dark);\n\n\t\t\t&:hover,\n\t\t\t&:focus-visible {\n\t\t\t\tbackground-color: var(--button-main-color-light);\n\t\t\t\tborder-color: var(--button-main-color-dark);\n\t\t\t}\n\n\t\t\t.kt-circle-loading {\n\t\t\t\tborder-bottom-color: var(--button-main-color-dark);\n\t\t\t\tborder-left-color: var(--button-main-color-dark);\n\t\t\t}\n\t\t}\n\n\t\t&-text {\n\t\t\tcolor: var(--button-secondary-color);\n\t\t\tbackground-color: transparent;\n\t\t\tborder-color: transparent;\n\n\t\t\t&:hover,\n\t\t\t&:focus-visible {\n\t\t\t\tbackground-color: var(--button-main-color-light);\n\t\t\t\tborder-color: var(--button-main-color-light);\n\t\t\t}\n\n\t\t\t.kt-circle-loading {\n\t\t\t\tborder-bottom-color: var(--button-main-color-dark);\n\t\t\t\tborder-left-color: var(--button-main-color-dark);\n\t\t\t}\n\n\t\t\t&.kt-button--is-toggle-on {\n\t\t\t\tcolor: var(--button-main-color-dark);\n\t\t\t\tbackground-color: var(--interactive-04);\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tbackground-color: var(--button-main-color-light);\n\t\t\t\t\tborder-color: var(--button-main-color-light);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"classes\" @click=\"$emit('click', $event)\">\n\t\t<slot />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nexport default defineComponent({\n\tname: 'MenuOptionItem',\n\tprops: {\n\t\tisActive: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisClickable: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisSelected: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\temits: ['click'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tclasses: computed(() => ({\n\t\t\t\t'menu-options-item': true,\n\t\t\t\t'menu-options-item--is-active': props.isActive || props.isSelected,\n\t\t\t\t'menu-options-item--is-clickable': props.isClickable,\n\t\t\t\t'menu-options-item--is-disabled': props.isDisabled,\n\t\t\t\t'menu-options-item--is-selected': props.isSelected,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.menu-options-item {\n\tpadding: var(--unit-2);\n\n\t&--is-active {\n\t\tbackground-color: var(--interactive-02-hover);\n\t}\n\n\t&--is-clickable:not(.menu-options-item--is-disabled) {\n\t\tcursor: pointer;\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--ui-01);\n\n\t\t\t&.menu-options-item--is-active {\n\t\t\t\tcolor: var(--interactive-01-hover);\n\t\t\t}\n\t\t}\n\t}\n\n\t&--is-disabled {\n\t\tcolor: var(--ui-04);\n\t\tcursor: not-allowed;\n\t\tbackground-color: var(--ui-01);\n\t}\n\n\t&--is-selected {\n\t\tfont-weight: 700;\n\t\tcolor: var(--interactive-01);\n\t}\n\n\t&:not(.menu-options-item--is-disabled) {\n\t\t&:hover {\n\t\t\tbackground-color: var(--interactive-02-hover);\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<button\n\t\tref=\"itemRef\"\n\t\tv-bind=\"itemProps\"\n\t\tclass=\"kt-split-button-actions-item\"\n\t\t:disabled=\"isDisabled\"\n\t\t@click.stop=\"onItemClick\"\n\t\t@keydown.down.prevent\n\t\t@keydown.up.prevent\n\t>\n\t\t<MenuOptionItem\n\t\t\tv-bind=\"{ isDisabled }\"\n\t\t\tclass=\"kt-split-button-actions-item__content\"\n\t\t\tisClickable\n\t\t>\n\t\t\t<i v-if=\"icon\" class=\"yoco\" v-text=\"icon\" />\n\t\t\t<span v-text=\"label\" />\n\t\t</MenuOptionItem>\n\t</button>\n</template>\n\n<script lang=\"ts\">\nimport {\n\tcomputed,\n\tdefineComponent,\n\tonBeforeUnmount,\n\tonMounted,\n\tref,\n\twatch,\n} from 'vue'\nimport { z } from 'zod'\n\nimport { makeProps } from '../../make-props'\nimport MenuOptionItem from '../../shared-components/menu-option/MenuOptionItem.vue'\nimport { isInFocus } from '../../utilities'\nimport { KottiSplitButton } from '../types'\n\nconst propsSchema = KottiSplitButton.actionSchema.extend({\n\thasFocus: z.boolean().default(false),\n\tindex: z.number(),\n\trootDataTest: z.string().nullable().default(null),\n})\n\nexport default defineComponent({\n\tname: 'SplitButtonActionsItem',\n\tcomponents: {\n\t\tMenuOptionItem,\n\t},\n\tprops: makeProps(propsSchema),\n\temits: ['click', 'updateIndexInFocus'],\n\tsetup(props, { emit }) {\n\t\tconst itemRef = ref<HTMLButtonElement | null>(null)\n\n\t\tconst focusListener = () => {\n\t\t\tif (isInFocus(itemRef.value) && !props.hasFocus)\n\t\t\t\temit('updateIndexInFocus', props.index)\n\t\t}\n\n\t\tonMounted(() =>\n\t\t\titemRef.value?.addEventListener('focus', focusListener, {\n\t\t\t\tcapture: true,\n\t\t\t}),\n\t\t)\n\n\t\tonBeforeUnmount(() =>\n\t\t\titemRef.value?.removeEventListener('focus', focusListener),\n\t\t)\n\n\t\twatch(\n\t\t\t() => props.hasFocus,\n\t\t\t(hasFocus, hadFocus) => {\n\t\t\t\tif (hasFocus && !hadFocus) itemRef.value?.focus({ preventScroll: true })\n\t\t\t},\n\t\t)\n\n\t\treturn {\n\t\t\titemProps: computed(() => ({\n\t\t\t\t'data-test': [\n\t\t\t\t\tprops.rootDataTest,\n\t\t\t\t\t`action-${String(props.index)}`,\n\t\t\t\t\tprops.dataTest,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('.'),\n\t\t\t\tdisabled: props.isDisabled,\n\t\t\t})),\n\t\t\titemRef,\n\t\t\tonItemClick: () => {\n\t\t\t\tif (props.isDisabled) return\n\t\t\t\temit('click')\n\t\t\t\tprops.onClick()\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n// Remove default styles from <button /> elements\n@mixin remove-button-styles {\n\tpadding: 0;\n\tmargin: 0;\n\tfont: inherit;\n\ttext-align: inherit;\n\tappearance: none;\n\tbackground-color: transparent;\n\tborder: none;\n\tborder-radius: 0;\n}\n\n.kt-split-button-actions-item {\n\t@include remove-button-styles;\n\n\tdisplay: flex;\n\twidth: 100%;\n\tcolor: var(--text-01);\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-2);\n\t\talign-items: center;\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t\tbackground-color: var(--interactive-02-hover);\n\t}\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n}\n</style>\n","import type { Instance } from 'tippy.js'\nimport type { Ref } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../../constants'\n\nexport const useActionsTippy = ({\n\tisDisabled,\n\tisLoading,\n}: {\n\tisDisabled: Ref<boolean>\n\tisLoading: Ref<boolean>\n}): {\n\tisTippyOpen: Ref<boolean>\n\tsetIsTippyOpen: (isTippyOpen: boolean) => void\n\ttippyContentRef: Ref<HTMLDivElement | null>\n\ttippyTriggerRef: Ref<HTMLDivElement | null>\n} => {\n\tconst isTippyOpen = ref(false)\n\tconst tippyContentRef = ref<HTMLDivElement | null>(null)\n\tconst tippyInstanceRef = ref<Instance | null>(null)\n\tconst tippyTriggerRef = ref<HTMLDivElement | null>(null)\n\n\tconst setIsTippyOpen = (isOpen: boolean) => {\n\t\tif (!tippyInstanceRef.value) return\n\n\t\tif (isOpen) tippyInstanceRef.value.show()\n\t\telse tippyInstanceRef.value.hide()\n\t}\n\n\tuseTippy(\n\t\ttippyTriggerRef,\n\t\tcomputed(() => ({\n\t\t\tappendTo: () => document.body,\n\t\t\tarrow: false,\n\t\t\tcontent: tippyContentRef.value ?? undefined,\n\t\t\thideOnClick: false,\n\t\t\tinteractive: true,\n\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\tonClickOutside: () => {\n\t\t\t\tsetIsTippyOpen(false)\n\t\t\t},\n\t\t\tonCreate(instance: Instance) {\n\t\t\t\ttippyInstanceRef.value = instance\n\t\t\t},\n\t\t\tonHide: () => {\n\t\t\t\tisTippyOpen.value = false\n\t\t\t},\n\t\t\tonShow: () => {\n\t\t\t\tif (isDisabled.value || isLoading.value) return false\n\t\t\t\tisTippyOpen.value = true\n\t\t\t},\n\t\t\tplacement: 'bottom-end',\n\t\t\ttheme: 'kt-light-border',\n\t\t\ttrigger: 'manual',\n\t\t})),\n\t)\n\n\twatch(\n\t\t[isDisabled, isLoading],\n\t\t() => {\n\t\t\tif (isDisabled.value || isLoading.value) setIsTippyOpen(false)\n\t\t},\n\t\t{ immediate: true },\n\t)\n\n\treturn {\n\t\tisTippyOpen,\n\t\tsetIsTippyOpen,\n\t\ttippyContentRef,\n\t\ttippyTriggerRef,\n\t}\n}\n","<template>\n\t<div class=\"kt-split-button\">\n\t\t<KtButton\n\t\t\tclass=\"kt-split-button__primary-action\"\n\t\t\tv-bind=\"primaryActionButtonProps\"\n\t\t\t@click=\"onClickPrimaryAction\"\n\t\t/>\n\t\t<div ref=\"tippyTriggerRef\">\n\t\t\t<KtButton\n\t\t\t\t:class=\"secondaryActionsButtonClasses\"\n\t\t\t\tv-bind=\"secondaryActionsButtonProps\"\n\t\t\t\t@click.stop=\"onClickSecondaryActions\"\n\t\t\t/>\n\t\t</div>\n\t\t<div ref=\"tippyContentRef\">\n\t\t\t<ActionsItem\n\t\t\t\tv-for=\"(action, index) in actions\"\n\t\t\t\t:key=\"index\"\n\t\t\t\tv-bind=\"{\n\t\t\t\t\t...omit(action, ['onClick']),\n\t\t\t\t\thasFocus: isActionInFocus(index),\n\t\t\t\t\tindex,\n\t\t\t\t\trootDataTest: dataTest,\n\t\t\t\t}\"\n\t\t\t\t@click=\"\n\t\t\t\t\t() => {\n\t\t\t\t\t\taction.onClick()\n\t\t\t\t\t\tsetIsTippyOpen(false)\n\t\t\t\t\t}\n\t\t\t\t\"\n\t\t\t\t@updateIndexInFocus=\"onUpdateIndexInFocus\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport omit from 'lodash/omit.js'\nimport {\n\tcomputed,\n\tdefineComponent,\n\tonBeforeUnmount,\n\tonMounted,\n\tref,\n\twatch,\n} from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport ActionsItem from './components/ActionsItem.vue'\nimport { useActionsTippy } from './hooks/use-actions-tippy'\nimport KtButton from './KtButton.vue'\nimport { KottiSplitButton } from './types'\n\n/**\n * Do not change. UNSET_INDEX is expected to be -1.\n */\nconst UNSET_INDEX = -1\n\nexport default defineComponent({\n\tname: 'KtSplitButton',\n\tcomponents: {\n\t\tActionsItem,\n\t\tKtButton,\n\t},\n\tprops: makeProps(KottiSplitButton.propsSchema),\n\temits: ['click'],\n\tsetup(props, { emit }) {\n\t\tconst { isTippyOpen, setIsTippyOpen, tippyContentRef, tippyTriggerRef } =\n\t\t\tuseActionsTippy({\n\t\t\t\tisDisabled: computed(() => props.isDisabled),\n\t\t\t\tisLoading: computed(() => props.isLoading),\n\t\t\t})\n\n\t\tconst currentActionIndexInFocus = ref<number>(UNSET_INDEX)\n\n\t\tconst hasAvailableActions = computed(() =>\n\t\t\tprops.actions.some((action) => !action.isDisabled),\n\t\t)\n\n\t\tconst getNextAvailableActionIndex = (\n\t\t\tcurrentIndex: number,\n\t\t\tdirection: 'down' | 'up',\n\t\t) => {\n\t\t\tif (\n\t\t\t\t(currentIndex === 0 && direction === 'up') ||\n\t\t\t\t(currentIndex === props.actions.length - 1 && direction === 'down')\n\t\t\t)\n\t\t\t\treturn currentIndex\n\n\t\t\tconst step = direction === 'down' ? 1 : -1\n\n\t\t\tfor (\n\t\t\t\tlet nextIndex = currentIndex + step;\n\t\t\t\tnextIndex < props.actions.length && nextIndex >= 0;\n\t\t\t\tnextIndex += step\n\t\t\t) {\n\t\t\t\tconst action = props.actions[nextIndex]\n\n\t\t\t\tif (!action)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`KtSplitButton: action item not found for index: ${String(nextIndex)}`,\n\t\t\t\t\t)\n\n\t\t\t\tif (!action.isDisabled) return nextIndex\n\t\t\t}\n\n\t\t\treturn currentIndex\n\t\t}\n\n\t\tconst keydownListener = (event: KeyboardEvent) => {\n\t\t\tif (!hasAvailableActions.value) return\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown': {\n\t\t\t\t\tcurrentActionIndexInFocus.value = getNextAvailableActionIndex(\n\t\t\t\t\t\tcurrentActionIndexInFocus.value,\n\t\t\t\t\t\t'down',\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'ArrowUp': {\n\t\t\t\t\tcurrentActionIndexInFocus.value = getNextAvailableActionIndex(\n\t\t\t\t\t\tcurrentActionIndexInFocus.value,\n\t\t\t\t\t\t'up',\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tonMounted(() => {\n\t\t\ttippyContentRef.value?.addEventListener('keydown', keydownListener, {\n\t\t\t\tcapture: true,\n\t\t\t})\n\t\t})\n\n\t\tonBeforeUnmount(() => {\n\t\t\ttippyContentRef.value?.removeEventListener('keydown', keydownListener)\n\t\t})\n\n\t\twatch(\n\t\t\t() => isTippyOpen.value,\n\t\t\t(isOpen) => {\n\t\t\t\t// eslint-disable-next-line sonarjs/no-selector-parameter\n\t\t\t\tif (!isOpen) currentActionIndexInFocus.value = UNSET_INDEX\n\t\t\t\telse if (hasAvailableActions.value)\n\t\t\t\t\t// Focus the 1st available action item\n\t\t\t\t\tcurrentActionIndexInFocus.value = getNextAvailableActionIndex(\n\t\t\t\t\t\tUNSET_INDEX,\n\t\t\t\t\t\t'down',\n\t\t\t\t\t)\n\t\t\t},\n\t\t)\n\n\t\treturn {\n\t\t\tcurrentActionIndexInFocus,\n\t\t\tisActionInFocus: (actionIndex: number) =>\n\t\t\t\tactionIndex === currentActionIndexInFocus.value,\n\t\t\tomit,\n\t\t\tonClickPrimaryAction: () => {\n\t\t\t\tif (props.isDisabled || props.isLoading) return\n\t\t\t\temit('click')\n\t\t\t},\n\t\t\tonClickSecondaryActions: () => {\n\t\t\t\tsetIsTippyOpen(!isTippyOpen.value)\n\t\t\t},\n\t\t\tonUpdateIndexInFocus: (index: number) => {\n\t\t\t\tif (isTippyOpen.value) currentActionIndexInFocus.value = index\n\t\t\t},\n\t\t\tprimaryActionButtonProps: computed(() => ({\n\t\t\t\t...omit(props, ['actions', 'dataTest', 'isDisabled']),\n\t\t\t\t'data-test': [props.dataTest, 'primary-action']\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('.'),\n\t\t\t\tdisabled: props.isDisabled,\n\t\t\t})),\n\t\t\tsecondaryActionsButtonClasses: computed(() => ({\n\t\t\t\t'kt-split-button__secondary-actions': true,\n\t\t\t\t'kt-split-button__secondary-actions--is-active': isTippyOpen.value,\n\t\t\t})),\n\t\t\tsecondaryActionsButtonProps: computed(() => ({\n\t\t\t\t'data-test': [props.dataTest, 'secondary-actions']\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('.'),\n\t\t\t\tdisabled: props.isDisabled,\n\t\t\t\ticon: Yoco.Icon.CHEVRON_DOWN,\n\t\t\t\tsize: props.size,\n\t\t\t\ttype: props.type,\n\t\t\t})),\n\t\t\tsetIsTippyOpen,\n\t\t\ttippyContentRef,\n\t\t\ttippyTriggerRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-split-button {\n\tdisplay: -webkit-inline-box;\n\n\t&__primary-action {\n\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t}\n\n\t&__secondary-actions {\n\t\twidth: var(--unit-6);\n\t\tborder-left: 0;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\n\t\t&--is-active {\n\t\t\t&.kt-button--type-default:not(:hover) {\n\t\t\t\tbackground-color: var(--primary-20);\n\t\t\t\tborder-color: var(--primary-20);\n\t\t\t}\n\n\t\t\t&.kt-button--type-primary:not(:hover) {\n\t\t\t\tbackground-color: var(--primary-80);\n\t\t\t\tborder-color: var(--primary-80);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtButtonVue from './KtButton.vue'\nimport KtSplitButtonVue from './KtSplitButton.vue'\nimport { KottiButton, KottiSplitButton } from './types'\n\nconst componentFolder = 'kotti-button'\n\nexport const KtButton = attachMeta(makeInstallable(KtButtonVue), {\n\taddedVersion: '0.0.1',\n\tcomponentFolder,\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A123',\n\t},\n\tslots: {\n\t\tdefault: {\n\t\t\tdescription: 'Used to replace label with custom HTML',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Button',\n\t\tschema: KottiButton.propsSchema,\n\t},\n})\n\nexport const KtSplitButton = attachMeta(makeInstallable(KtSplitButtonVue), {\n\taddedVersion: '5.7.0',\n\tcomponentFolder,\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?type=design&node-id=5586-8691&mode=design&t=x2i9HCwj1BucUZrh-0',\n\t},\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.SplitButton',\n\t\tschema: KottiSplitButton.propsSchema,\n\t},\n})\n","<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../kotti-button'\nimport { makeProps } from '../make-props'\n\nimport { KottiBanner } from './types'\n\nexport default defineComponent({\n\tname: 'KtBanner',\n\tcomponents: {\n\t\tKtButton,\n\t},\n\tprops: makeProps(KottiBanner.propsSchema),\n\temits: ['action', 'close'],\n\tsetup(props, { emit, slots }) {\n\t\treturn {\n\t\t\thasActionSlot: computed((): boolean => Boolean(slots.action)),\n\t\t\thasFooter: computed((): boolean => Boolean(slots.footer)),\n\t\t\thasHeader: computed(\n\t\t\t\t(): boolean => props.header !== null || Boolean(slots.header),\n\t\t\t),\n\t\t\tonAction: (event: MouseEvent) => {\n\t\t\t\temit('action', event)\n\t\t\t},\n\t\t\tonClose: (event: MouseEvent) => {\n\t\t\t\temit('close', event)\n\t\t\t},\n\t\t\tstyles: computed<KottiBanner.Style>(() => {\n\t\t\t\tconst styles: KottiBanner.Style = (() => {\n\t\t\t\t\tswitch (props.type) {\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--banner-error-bg)',\n\t\t\t\t\t\t\t\tdarkColor: 'var(--banner-error-dark)',\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.CIRCLE_CROSS,\n\t\t\t\t\t\t\t\tlightColor: 'var(--banner-error-light)',\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase 'info':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--banner-info-bg)',\n\t\t\t\t\t\t\t\tdarkColor: 'var(--banner-info-dark)',\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.CIRCLE_I,\n\t\t\t\t\t\t\t\tlightColor: 'var(--banner-info-light)',\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase 'success':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--banner-success-bg)',\n\t\t\t\t\t\t\t\tdarkColor: 'var(--banner-success-dark)',\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.CIRCLE_CHECK,\n\t\t\t\t\t\t\t\tlightColor: 'var(--banner-success-light)',\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase 'warning':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--banner-warning-bg)',\n\t\t\t\t\t\t\t\tdarkColor: 'var(--banner-warning-dark)',\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.CIRCLE_ATTENTION,\n\t\t\t\t\t\t\t\tlightColor: 'var(--banner-warning-light)',\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn props.type\n\t\t\t\t\t}\n\t\t\t\t})()\n\n\t\t\t\treturn props.icon\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...styles,\n\t\t\t\t\t\t\ticon: props.icon,\n\t\t\t\t\t\t}\n\t\t\t\t\t: styles\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<template>\n\t<div class=\"kt-banner\" :style=\"{ borderColor: styles.lightColor }\">\n\t\t<div\n\t\t\tv-if=\"styles.icon !== null\"\n\t\t\tclass=\"kt-banner__icon\"\n\t\t\t:style=\"{\n\t\t\t\tcolor: styles.darkColor,\n\t\t\t\tbackgroundColor: styles.backgroundColor,\n\t\t\t}\"\n\t\t>\n\t\t\t<i class=\"yoco\" v-text=\"styles.icon\" />\n\t\t</div>\n\t\t<div class=\"kt-banner__text\" :class=\"{ 'ml-1': styles.icon === null }\">\n\t\t\t<div v-if=\"hasHeader\" class=\"kt-banner__header\">\n\t\t\t\t<slot name=\"header\">\n\t\t\t\t\t{{ header }}\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<slot name=\"text\">\n\t\t\t\t\t{{ text }}\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<div v-if=\"hasFooter\">\n\t\t\t\t<slot name=\"footer\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"hasActionSlot\" class=\"kt-banner__action\">\n\t\t\t<slot name=\"action\" />\n\t\t</div>\n\t\t<div v-else-if=\"action\" class=\"kt-banner__action\">\n\t\t\t<KtButton :label=\"action\" size=\"small\" type=\"text\" @click=\"onAction\" />\n\t\t</div>\n\t\t<div v-if=\"isCloseable\" class=\"kt-banner__close\" @click=\"onClose\">\n\t\t\t<i class=\"yoco\">close</i>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--banner-error-bg: var(--support-error-bg);\n\t--banner-error-light: var(--support-error-light);\n\t--banner-error-dark: var(--support-error-dark);\n\t--banner-info-bg: var(--support-info-bg);\n\t--banner-info-light: var(--support-info-light);\n\t--banner-info-dark: var(--support-info-dark);\n\t--banner-warning-bg: var(--support-warning-bg);\n\t--banner-warning-light: var(--support-warning-light);\n\t--banner-warning-dark: var(--support-warning-dark);\n\t--banner-success-bg: var(--support-success-bg);\n\t--banner-success-light: var(--support-success-light);\n\t--banner-success-dark: var(--support-success-dark);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-banner {\n\tdisplay: flex;\n\tgap: var(--unit-2);\n\tpadding: var(--unit-1);\n\tuser-select: none;\n\tbackground-color: var(--ui-background);\n\tborder: 1px solid transparent;\n\tborder-radius: var(--unit-2);\n\n\t&__icon,\n\t&__close,\n\t&__action {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\n\t&__icon,\n\t&__close {\n\t\twidth: var(--unit-7);\n\t\theight: var(--unit-7);\n\n\t\t.yoco {\n\t\t\tfont-size: var(--unit-5);\n\t\t}\n\t}\n\n\t&__close,\n\t&__action {\n\t\t.yoco {\n\t\t\tcolor: var(--icon-02);\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t&:hover .yoco {\n\t\t\tcolor: var(--icon-01);\n\t\t}\n\t}\n\n\t&__action {\n\t\talign-self: flex-start;\n\t}\n\n\t&__close {\n\t\tcursor: pointer;\n\t}\n\n\t&__icon {\n\t\tborder-radius: var(--border-radius);\n\t}\n\n\t&__header {\n\t\tfont-weight: 700;\n\t\tuser-select: text;\n\t}\n\n\t&__text {\n\t\tdisplay: flex;\n\t\tflex: 1 0;\n\t\tflex-direction: column;\n\t\tgap: var(--unit-1);\n\t\tmargin-top: 4px;\n\t\tline-height: var(--unit-5);\n\t\tuser-select: text;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtBannerVue from './KtBanner.vue'\nimport { KottiBanner } from './types'\n\nexport const KtBanner = attachMeta(makeInstallable(KtBannerVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/design/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=7096-5539',\n\t},\n\tslots: {\n\t\taction: {\n\t\t\tdescription:\n\t\t\t\t'Use this only if you need to implement a custom action button',\n\t\t\tscope: null,\n\t\t},\n\t\tfooter: {\n\t\t\tdescription:\n\t\t\t\t'Used to put e.g. buttons or other interactive elements at the bottom of the banner',\n\t\t\tscope: null,\n\t\t},\n\t\theader: {\n\t\t\tdescription: 'Used to replace the optional header text',\n\t\t\tscope: null,\n\t\t},\n\t\ttext: {\n\t\t\tdescription: 'Used to replace the main text',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Banner',\n\t\tschema: KottiBanner.propsSchema,\n\t},\n})\n","<template>\n\t<div class=\"kt-breadcrumb\">\n\t\t<ol>\n\t\t\t<li\n\t\t\t\tv-for=\"(breadcrumb, index) in breadcrumbs\"\n\t\t\t\t:key=\"index\"\n\t\t\t\t:class=\"breadCrumbClasses(breadcrumb, index)\"\n\t\t\t\t:data-test=\"breadcrumb.dataTest ? breadcrumb.dataTest : undefined\"\n\t\t\t>\n\t\t\t\t<span v-if=\"showSeparator(index)\" class=\"kt-breadcrumb__separator\">\n\t\t\t\t\t<i\n\t\t\t\t\t\tv-if=\"separator.style === SeparatorType.ICON\"\n\t\t\t\t\t\tclass=\"yoco\"\n\t\t\t\t\t\tv-text=\"separator.value\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-else-if=\"separator.style === SeparatorType.TEXT\"\n\t\t\t\t\t\tv-text=\"separator.value\"\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"kt-breadcrumb__text\"\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\t@click=\"handleClick(breadcrumb)\"\n\t\t\t\t\tv-text=\"breadcrumb.title\"\n\t\t\t\t/>\n\t\t\t</li>\n\t\t</ol>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiBreadcrumb } from './types'\n\nexport default defineComponent({\n\tname: 'KtBreadcrumb',\n\tprops: makeProps(KottiBreadcrumb.propsSchema),\n\tsetup(props) {\n\t\treturn {\n\t\t\tbreadCrumbClasses: (item: KottiBreadcrumb.Breadcrumb, index: number) => {\n\t\t\t\treturn {\n\t\t\t\t\t'kt-breadcrumb__list-item': true,\n\t\t\t\t\t'kt-breadcrumb__list-item--is-active':\n\t\t\t\t\t\t!item.isDisabled && index === props.activeIndex,\n\t\t\t\t\t'kt-breadcrumb__list-item--is-completed':\n\t\t\t\t\t\t!item.isDisabled && item.isCompleted,\n\t\t\t\t\t'kt-breadcrumb__list-item--is-disabled': item.isDisabled,\n\t\t\t\t}\n\t\t\t},\n\t\t\thandleClick: (item: KottiBreadcrumb.Breadcrumb) => {\n\t\t\t\tif (item.isDisabled) return\n\t\t\t\titem.onClick()\n\t\t\t},\n\t\t\tSeparatorType: KottiBreadcrumb.SeparatorType,\n\t\t\tshowSeparator: (index: number) =>\n\t\t\t\tindex > 0 && index < props.breadcrumbs.length,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-breadcrumb {\n\t--breadcrumb-color-completed: var(--interactive-03);\n\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\n\tol {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n\n\t&__list-item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 0.1rem 0;\n\t\tcolor: var(--text-01);\n\n\t\t&--is-active,\n\t\t&--is-completed {\n\t\t\tcolor: var(--breadcrumb-color-completed);\n\t\t}\n\n\t\t&--is-active {\n\t\t\tfont-weight: 700;\n\t\t}\n\n\t\t&--is-disabled {\n\t\t\tcolor: var(--text-05);\n\t\t\tcursor: not-allowed;\n\n\t\t\t.kt-breadcrumb__text:hover {\n\t\t\t\tcolor: var(--text-05);\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__text:hover {\n\t\tcolor: var(--interactive-01-hover);\n\t\tcursor: pointer;\n\t}\n\n\t&__separator {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 0 0.2rem;\n\n\t\t.yoco {\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtBreadcrumbVue from './KtBreadcrumb.vue'\nimport { KottiBreadcrumb } from './types'\n\nexport const KtBreadcrumb = attachMeta(makeInstallable(KtBreadcrumbVue), {\n\taddedVersion: '0.0.5',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A126',\n\t},\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Breadcrumb',\n\t\tschema: KottiBreadcrumb.propsSchema,\n\t},\n})\n","<template>\n\t<div class=\"kt-button-group\">\n\t\t<slot />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tname: 'KtButtonGroup',\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-style/_variables';\n\n.kt-button-group {\n\tfont-size: 0; /* Fix for inline element space https://css-tricks.com/fighting-the-space-between-inline-block-elements/ */\n\n\t.kt-button {\n\t\tfont-size: var(--font-size-medium);\n\t\tborder-radius: 0;\n\n\t\t&:first-of-type {\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\n\t\t&:last-of-type {\n\t\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t\t}\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtButtonGroupVue from './KtButtonGroup.vue'\n\nexport const KtButtonGroup = attachMeta(makeInstallable(KtButtonGroupVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\tdefault: { description: 'Should contain KtButtons', scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.ButtonGroup',\n\t\tschema: null,\n\t},\n})\n","import { z } from 'zod'\n\nexport namespace KottiLoading {\n\tconst typeSchema = z.enum([\n\t\t'circle',\n\t\t'rectangle',\n\t\t'rectangle-lg',\n\t\t'rectangle-md',\n\t\t'rectangle-sm',\n\t\t'square',\n\t])\n\n\texport const propsSchema = z.object({\n\t\ttype: typeSchema.default('rectangle'),\n\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","<template>\n\t<div :class=\"loadingClasses\" />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiLoading } from './types'\nconst DELAY_RANGE = 20\n\nexport default defineComponent({\n\tname: 'KtLoading',\n\tprops: makeProps(KottiLoading.propsSchema),\n\tsetup(props) {\n\t\treturn {\n\t\t\tloadingClasses: computed(() => {\n\t\t\t\tconst delayType = (Math.random() * DELAY_RANGE).toFixed(0)\n\t\t\t\tswitch (props.type) {\n\t\t\t\t\tcase 'circle':\n\t\t\t\t\tcase 'rectangle':\n\t\t\t\t\tcase 'square':\n\t\t\t\t\t\treturn `skeleton ${props.type} delay-${delayType}`\n\t\t\t\t\tcase 'rectangle-lg':\n\t\t\t\t\t\treturn `skeleton rectangle lg delay-${delayType}`\n\t\t\t\t\tcase 'rectangle-md':\n\t\t\t\t\t\treturn `skeleton rectangle md delay-${delayType}`\n\t\t\t\t\tcase 'rectangle-sm':\n\t\t\t\t\t\treturn `skeleton rectangle sm delay-${delayType}`\n\t\t\t\t}\n\t\t\t\treturn ''\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtLoadingVue from './KtLoading.vue'\nimport { KottiLoading } from './types'\n\nexport const KtLoading = attachMeta(makeInstallable(KtLoadingVue), {\n\taddedVersion: '9.4.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Loading',\n\t\tschema: KottiLoading.propsSchema,\n\t},\n})\n","<template>\n\t<component\n\t\t:is=\"component\"\n\t\t:class=\"cardClass\"\n\t\ttabindex=\"0\"\n\t\t@click=\"handleClick\"\n\t>\n\t\t<div v-if=\"imgUrl\" :class=\"imageRowClass\">\n\t\t\t<KtLoading v-if=\"isImgLoading\" type=\"square\" />\n\t\t\t<img v-else class=\"kt-card__image\" :src=\"imgUrl\" />\n\t\t</div>\n\t\t<div v-if=\"$slots['card-header']\" class=\"kt-card__header\">\n\t\t\t<KtLoading v-if=\"isTextLoading\" type=\"rectangle-md\" />\n\t\t\t<slot v-else name=\"card-header\" />\n\t\t</div>\n\t\t<div v-if=\"$slots['card-body']\" class=\"kt-card__body\">\n\t\t\t<KtLoading v-if=\"isTextLoading\" class=\"rectangle-sm\" />\n\t\t\t<slot v-else name=\"card-body\" />\n\t\t</div>\n\t\t<div v-if=\"hasActions\" class=\"kt-card__footer\">\n\t\t\t<div v-if=\"hasActions && !isTextLoading\">\n\t\t\t\t<KtButton\n\t\t\t\t\t:data-test=\"secondaryActionDataTest\"\n\t\t\t\t\t:label=\"secondaryActionLabel\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t@click.prevent=\"$emit('clickOnSecondaryButton')\"\n\t\t\t\t/>\n\t\t\t\t<KtButton\n\t\t\t\t\t:data-test=\"primaryActionDataTest\"\n\t\t\t\t\t:label=\"primaryActionLabel\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t@click.prevent=\"$emit('clickOnPrimaryButton')\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</component>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { KtButton } from '../kotti-button'\nimport { KtLoading } from '../kotti-loading'\nimport { makeProps } from '../make-props'\n\nimport { KottiCard } from './types'\n\nexport default defineComponent({\n\tname: 'KtCard',\n\tcomponents: { KtButton, KtLoading },\n\tprops: makeProps(KottiCard.propsSchema),\n\temits: ['click', 'clickOnPrimaryButton', 'clickOnSecondaryButton'],\n\tsetup(props, { emit }) {\n\t\tconst hasActions = computed(\n\t\t\t() =>\n\t\t\t\tprops.primaryActionLabel != null && props.secondaryActionLabel != null,\n\t\t)\n\n\t\treturn {\n\t\t\tcardClass: computed(() => ({\n\t\t\t\t[`kt-card--has-${props.imgPosition}-image`]: props.imgUrl,\n\t\t\t\t'kt-card': true,\n\t\t\t\t'kt-card--is-clickable': !hasActions.value,\n\t\t\t})),\n\t\t\thandleClick: (event: MouseEvent) => {\n\t\t\t\tif (hasActions.value) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t} else emit('click')\n\t\t\t},\n\t\t\thasActions,\n\t\t\timageRowClass: computed(() => ({\n\t\t\t\t[`kt-card__image-row--is-${props.imgPosition}`]: props.imgUrl,\n\t\t\t\t'kt-card__image-row': true,\n\t\t\t})),\n\t\t\tKottiCard,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: var(--unit-4);\n\tword-break: normal;\n\tbackground: var(--ui-background);\n\tborder-radius: var(--border-radius);\n\n\t&--has-top-image {\n\t\tpadding-top: 0;\n\t}\n\n\t&--has-bottom-image {\n\t\tpadding-bottom: 0;\n\t}\n\n\t&--is-clickable {\n\t\tborder: 1px solid var(--ui-01);\n\n\t\t&:hover {\n\t\t\tcursor: pointer;\n\t\t\tborder: 1px solid var(--interactive-01-hover);\n\t\t}\n\n\t\t&:active {\n\t\t\tborder-color: var(--primary-90);\n\t\t}\n\t}\n\n\t.skeleton {\n\t\tmargin: 0;\n\t}\n\n\t&__header {\n\t\torder: 2;\n\n\t\t.skeleton {\n\t\t\tmargin: 0 0 var(--unit-2) 0;\n\t\t}\n\t}\n\n\t&__body {\n\t\torder: 4;\n\t}\n\n\t&__footer {\n\t\torder: 5;\n\t\ttext-align: right;\n\t}\n\n\t&__image-row {\n\t\tmargin: var(--unit-4) calc(-1 * var(--unit-4));\n\n\t\t&--is-top {\n\t\t\torder: 1;\n\t\t\tmargin-top: 0;\n\n\t\t\t.kt-card__image {\n\t\t\t\tborder-top-left-radius: var(--border-radius);\n\t\t\t\tborder-top-right-radius: var(--border-radius);\n\t\t\t}\n\t\t}\n\n\t\t&--is-middle {\n\t\t\torder: 3;\n\t\t}\n\n\t\t&--is-bottom {\n\t\t\torder: 6;\n\t\t\tmargin-bottom: 0;\n\n\t\t\t.kt-card__image {\n\t\t\t\tborder-bottom-right-radius: var(--border-radius);\n\t\t\t\tborder-bottom-left-radius: var(--border-radius);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__image {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtCardVue from './KtCard.vue'\nimport { KottiCard } from './types'\n\nexport const KtCard = attachMeta(makeInstallable(KtCardVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?type=design&node-id=5144-11435&mode=design&t=lct468cSPHUMxSuu-0',\n\t},\n\tslots: {\n\t\t'card-body': { description: null, scope: null },\n\t\t'card-footer': { description: null, scope: null },\n\t\t'card-header': { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Card',\n\t\tschema: KottiCard.propsSchema,\n\t},\n})\n","export const KT_ROW_CONTEXT = Symbol('KT_ROW_CONTEXT')\n","import { computed, defineComponent, h, inject } from 'vue'\nimport type { PropType } from 'vue'\n\nimport { KT_ROW_CONTEXT } from '../kotti-row/constants'\nimport type { KottiRow } from '../kotti-row/types'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport type { KottiCol } from './types'\n\nexport const KtCol = attachMeta(\n\tmakeInstallable(\n\t\tdefineComponent({\n\t\t\tname: 'KtCol',\n\t\t\tprops: {\n\t\t\t\tlg: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['lg']>,\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['md']>,\n\t\t\t\t},\n\t\t\t\toffset: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['offset']>,\n\t\t\t\t},\n\t\t\t\tpull: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['pull']>,\n\t\t\t\t},\n\t\t\t\tpush: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['push']>,\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['sm']>,\n\t\t\t\t},\n\t\t\t\tspan: {\n\t\t\t\t\tdefault: 24,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['span']>,\n\t\t\t\t},\n\t\t\t\ttag: {\n\t\t\t\t\tdefault: 'div',\n\t\t\t\t\ttype: String as PropType<KottiCol.PropsInternal['tag']>,\n\t\t\t\t},\n\t\t\t\txl: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['xl']>,\n\t\t\t\t},\n\t\t\t\txs: {\n\t\t\t\t\tdefault: null,\n\t\t\t\t\ttype: Number as PropType<KottiCol.PropsInternal['xs']>,\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetup(props, { slots }) {\n\t\t\t\tconst context = inject<KottiRow.Context | null>(KT_ROW_CONTEXT, null)\n\n\t\t\t\tconst style = computed(() => {\n\t\t\t\t\tif (context === null) return undefined\n\n\t\t\t\t\tconst { gap, gutter } = context\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpaddingBottom: `${(gap.value / 2).toString()}px`,\n\t\t\t\t\t\tpaddingLeft: `${(gutter.value / 2).toString()}px`,\n\t\t\t\t\t\tpaddingRight: `${(gutter.value / 2).toString()}px`,\n\t\t\t\t\t\tpaddingTop: `${(gap.value / 2).toString()}px`,\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tconst classes = computed(() => [\n\t\t\t\t\t'kt-col',\n\t\t\t\t\t`kt-col-${props.span.toString()}`,\n\t\t\t\t\t...Object.entries(props)\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t([key, value]) =>\n\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\t/* eslint-disable perfectionist/sort-array-includes */\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t'offset',\n\t\t\t\t\t\t\t\t\t'pull',\n\t\t\t\t\t\t\t\t\t'push',\n\t\t\t\t\t\t\t\t\t'xs',\n\t\t\t\t\t\t\t\t\t'sm',\n\t\t\t\t\t\t\t\t\t'md',\n\t\t\t\t\t\t\t\t\t'lg',\n\t\t\t\t\t\t\t\t\t'xl',\n\t\t\t\t\t\t\t\t].includes(key),\n\t\t\t\t\t\t\t/* eslint-enable perfectionist/sort-array-includes */\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(([key, value]) => `kt-col-${key}-${value?.toString() ?? ''}`),\n\t\t\t\t])\n\n\t\t\t\treturn () =>\n\t\t\t\t\th(\n\t\t\t\t\t\tprops.tag,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclass: classes.value,\n\t\t\t\t\t\t\tstyle: style.value,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tslots.default?.(),\n\t\t\t\t\t)\n\t\t\t},\n\t\t}),\n\t),\n\t{\n\t\taddedVersion: '0.0.1',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {\n\t\t\tdefault: { description: null, scope: null },\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.Col',\n\t\t\tschema: null,\n\t\t},\n\t},\n)\n","export const KT_I18N_CONTEXT = Symbol('KT_I18N_CONTEXT')\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'ist'\n\n\texport const isEmpty = 'ist leer'\n\n\texport const number = {\n\t\tEQUAL: 'ist gleich',\n\t\tGREATER_THAN: 'ist größer als',\n\t\tGREATER_THAN_OR_EQUAL: 'ist größer als oder gleich',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'ist weniger als',\n\t\tLESS_THAN_OR_EQUAL: 'ist weniger als oder gleich',\n\t}\n\n\texport const restrictedAccess = 'Eingeschränkter Zugriff'\n}\n\nexport const deDE: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Available Columns',\n\t\tcolumns: 'Columns',\n\t\tsearchColumn: 'Search Column',\n\t\tvisibleColumns: 'Visible Columns',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Esc drücken oder',\n\t\tclickToCancelLabel: 'klicken, um abzubrechen',\n\t\tdeleteButton: 'Löschen',\n\t\teditButton: 'Bearbeiten',\n\t\teditedLabel: 'Bearbeitet',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: 'Posten',\n\t\treplyButton: 'Antworten',\n\t\treplyToLabel: 'Antwort an',\n\t\tunlockedHelpText: 'Für alle Nutzer sichtbar',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: 'Foto verwenden',\n\t\t\tcancel: 'Abbrechen',\n\t\t\tnextCamera: 'Nächste Kamera',\n\t\t\trejectPhoto: 'Foto erneut aufnehmen',\n\t\t\tretry: 'Erneut versuchen',\n\t\t\ttakePhoto: 'Foto aufnehmen',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed: 'Hochladen mehrerer Dateien nicht erlaubt',\n\t\t\tnotAllowed: 'Zugriff auf die Kamera verweigert',\n\t\t\tnotFound: 'Es konnte keine Kamera gefunden werden',\n\t\t\tnotSupported: 'Es konnte keine kompatible Kamera gefunden werden',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: 'Foto aufnehmen',\n\t\t\terror: 'Fehler',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'Überprüfen',\n\t\t\tunknown: 'Unbekannt',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'Abgebrochen',\n\t\t\tERROR: 'Upload fehlgeschlagen, bitte versuchen Sie es erneut',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: 'Ungültig',\n\t\t\tNOT_STARTED: 'Nicht angefangen',\n\t\t\tREADY_TO_UPLOAD: 'Bereit zum Hochladen',\n\t\t\tUPLOADED: 'Hochgeladen',\n\t\t\tUPLOADED_WITH_ERROR: 'Mit Fehler hochgeladen',\n\t\t\tUPLOADING: 'Wird hochgeladen …',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'Zum Hochladen klicken',\n\t\t\tdragAndDrop: 'or drag and drop your files here',\n\t\t\tlearnMore: 'Mehr erfahren',\n\t\t\tmax: 'max.',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'Nicht unterstütztes Dateiformat',\n\t\t\tMAX_SIZE_EXCEEDED: 'Maximal zulässige Dateigröße überschritten',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'Zum Bearbeiten klicken',\n\t},\n\tKtFields: {\n\t\trequiredMessage: 'Dieses Feld ist erforderlich',\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'Wird geladen',\n\t\tnoDataText: 'Keine Ergebnisse',\n\t\tnoMatchText: 'Keine passenden Daten',\n\t\tplaceholder: 'Auswählen',\n\t\tungroupedText: 'Andere',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'Filter hinzufügen',\n\t\tandLabel: 'Und',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'Alles löschen',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: 'ist im Bereich',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'Keine Filter angewendet',\n\t\tfilterLabel: 'Filter',\n\t\tfiltersLabel: 'Filter',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: 'ist einer von',\n\t\t},\n\t\tsearchLabel: 'Suche',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: 'enthält',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: 'Einstellung aufheben',\n\t\twhereLabel: 'Wo',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'Fehler',\n\t\ttitle: 'Formularübertragung nicht erlaubt',\n\t\twarningsSectionTitle: 'Warnungen',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'Menü einklappen',\n\t\tmenuExpand: 'Menü ausklappen',\n\t\tquickLinksTitle: 'Kurzlinks',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Alles löschen',\n\t\tendDate: 'Ende',\n\t\tfilters: 'Filter',\n\t\titemsPerPage: 'Elemente pro Seite',\n\t\tlastMonth: 'Letzter Monat',\n\t\tlastWeek: 'Letzte Woche',\n\t\tlastYear: 'Letztes Jahr',\n\t\tmax: 'Max.',\n\t\tmin: 'Min.',\n\t\tmoreThan: 'Mehr als',\n\t\tresultsCounter:\n\t\t\t'Keine Elemente | {range} von {total} Element | {range} von {total} Elementen',\n\t\tsearch: 'Suche',\n\t\tselectionCount: '| {count} Element ausgewählt | {count} items ausgewählt',\n\t\tshowAll: 'Alles anzeigen',\n\t\tstartDate: 'Start',\n\t\ttoday: 'Heute',\n\t\tupTo: 'Bis zu',\n\t},\n\tKtTable: {\n\t\tno: 'Nein',\n\t\tnoItems: 'Keine Elemente',\n\t\tyes: 'Ja',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: 'Nicht festgelegt',\n\t},\n}\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'is'\n\n\texport const isEmpty = 'is empty'\n\n\texport const number = {\n\t\tEQUAL: 'is equal to',\n\t\tGREATER_THAN: 'is greater than',\n\t\tGREATER_THAN_OR_EQUAL: 'is greater than or equal to',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'is less than',\n\t\tLESS_THAN_OR_EQUAL: 'is less than or equal to',\n\t}\n\n\texport const restrictedAccess = 'Restricted access'\n}\n\nexport const enUS: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Available Columns',\n\t\tcolumns: 'Columns',\n\t\tsearchColumn: 'Search Column',\n\t\tvisibleColumns: 'Visible Columns',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Press Esc key or',\n\t\tclickToCancelLabel: 'click to cancel',\n\t\tdeleteButton: 'Delete',\n\t\teditButton: 'Edit',\n\t\teditedLabel: 'Edited',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: 'Post',\n\t\treplyButton: 'Reply',\n\t\treplyToLabel: 'Reply to',\n\t\tunlockedHelpText: 'Visible to all users',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: 'Use Photo',\n\t\t\tcancel: 'Cancel',\n\t\t\tnextCamera: 'Next Camera',\n\t\t\trejectPhoto: 'Retake Photo',\n\t\t\tretry: 'Retry',\n\t\t\ttakePhoto: 'Take Photo',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed: 'Multiple files upload not allowed',\n\t\t\tnotAllowed: 'Permission denied to use the camera',\n\t\t\tnotFound: 'No available camera found',\n\t\t\tnotSupported: 'No compatible camera found',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: 'Take Photo',\n\t\t\terror: 'Error',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'Review',\n\t\t\tunknown: 'Unknown',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'Canceled',\n\t\t\tERROR: 'Upload failed, please try again',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: 'Invalid',\n\t\t\tNOT_STARTED: 'Not started',\n\t\t\tREADY_TO_UPLOAD: 'Ready to upload',\n\t\t\tUPLOADED: 'Uploaded',\n\t\t\tUPLOADED_WITH_ERROR: 'Uploaded with error',\n\t\t\tUPLOADING: 'Uploading...',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'Click to upload',\n\t\t\tdragAndDrop: 'or drag and drop your files here',\n\t\t\tlearnMore: 'Learn more',\n\t\t\tmax: 'max.',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'File format not supported',\n\t\t\tMAX_SIZE_EXCEEDED: 'Maximum file size allowed exceeded',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'Click to Edit',\n\t},\n\tKtFields: {\n\t\trequiredMessage: 'This field is required',\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'Loading',\n\t\tnoDataText: 'No results',\n\t\tnoMatchText: 'No matching data',\n\t\tplaceholder: 'Select',\n\t\tungroupedText: 'Other',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'Add Filter',\n\t\tandLabel: 'And',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'Clear All',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: 'is in range',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'No Filters Applied',\n\t\tfilterLabel: 'Filter',\n\t\tfiltersLabel: 'Filters',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: 'is one of',\n\t\t},\n\t\tsearchLabel: 'Search',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: 'contains',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: 'Unset',\n\t\twhereLabel: 'Where',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'Errors',\n\t\ttitle: 'Form Submission Not Allowed',\n\t\twarningsSectionTitle: 'Warnings',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'Collapse menu',\n\t\tmenuExpand: 'Expand menu',\n\t\tquickLinksTitle: 'Quick Links',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Clear All',\n\t\tendDate: 'End',\n\t\tfilters: 'Filters',\n\t\titemsPerPage: 'Items per page',\n\t\tlastMonth: 'Last Month',\n\t\tlastWeek: 'Last Week',\n\t\tlastYear: 'Last Year',\n\t\tmax: 'Max.',\n\t\tmin: 'Min.',\n\t\tmoreThan: 'More Than',\n\t\tresultsCounter:\n\t\t\t'No items | {range} of {total} item | {range} of {total} items',\n\t\tsearch: 'Search',\n\t\tselectionCount: '| {count} item selected | {count} items selected',\n\t\tshowAll: 'Show All',\n\t\tstartDate: 'Start',\n\t\ttoday: 'Today',\n\t\tupTo: 'Up To',\n\t},\n\tKtTable: {\n\t\tno: 'No',\n\t\tnoItems: 'No items',\n\t\tyes: 'Yes',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: 'Not Set',\n\t},\n}\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'es'\n\n\texport const isEmpty = 'está vacío'\n\n\texport const number = {\n\t\tEQUAL: 'es igual a',\n\t\tGREATER_THAN: 'es mayor que',\n\t\tGREATER_THAN_OR_EQUAL: 'es mayor o igual a',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'es menor que',\n\t\tLESS_THAN_OR_EQUAL: 'es menor o igual a',\n\t}\n\n\texport const restrictedAccess = 'Acceso restringido'\n}\n\nexport const esES: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Columnas Disponibles',\n\t\tcolumns: 'Columnas',\n\t\tsearchColumn: 'Buscar Columna',\n\t\tvisibleColumns: 'Columnas Visibles',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Pulse la tecla Esc o',\n\t\tclickToCancelLabel: 'haga clic para cancelar',\n\t\tdeleteButton: 'Borrar',\n\t\teditButton: 'Editar',\n\t\teditedLabel: 'Editado',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: 'Publicar',\n\t\treplyButton: 'Responder',\n\t\treplyToLabel: 'Responder a',\n\t\tunlockedHelpText: 'Visible para todos los usuarios',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: 'Usar Foto',\n\t\t\tcancel: 'Cancelar',\n\t\t\tnextCamera: 'Siguiente Cámara',\n\t\t\trejectPhoto: 'Volver a tomar Foto',\n\t\t\tretry: 'Reintentar',\n\t\t\ttakePhoto: 'Tomar Foto',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed: 'No se permite cargar múltiples archivos',\n\t\t\tnotAllowed: 'Permiso denegado para usar la cámara',\n\t\t\tnotFound: 'No se ha encontrado ninguna cámara disponible',\n\t\t\tnotSupported: 'No se ha encontrado ninguna cámara compatible',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: 'Tomar Foto',\n\t\t\terror: 'Error',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'Revisar',\n\t\t\tunknown: 'Desconocido',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'Cancelado',\n\t\t\tERROR: 'Carga fallida, por favor inténtelo de nuevo',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: 'Inválido',\n\t\t\tNOT_STARTED: 'No iniciado',\n\t\t\tREADY_TO_UPLOAD: 'Listo para cargar',\n\t\t\tUPLOADED: 'Cargado',\n\t\t\tUPLOADED_WITH_ERROR: 'Cargado con error',\n\t\t\tUPLOADING: 'Cargando...',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'Haga clic para cargar',\n\t\t\tdragAndDrop: 'o arrastre y suelte sus archivos aquí',\n\t\t\tlearnMore: 'Más información',\n\t\t\tmax: 'máx.',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'Formato de archivo no compatible',\n\t\t\tMAX_SIZE_EXCEEDED: 'Se ha excedido el tamaño máximo de archivo permitido',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'Haga clic para editar',\n\t},\n\tKtFields: {\n\t\trequiredMessage: 'Este campo es obligatorio',\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'Cargando',\n\t\tnoDataText: 'Sin resultados',\n\t\tnoMatchText: 'No hay datos que coincidan',\n\t\tplaceholder: 'Seleccionar',\n\t\tungroupedText: 'Otros',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'Añadir Filtro',\n\t\tandLabel: 'Y',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'Borrar Todo',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: 'está en el rango',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'No se han aplicado filtros',\n\t\tfilterLabel: 'Filtro',\n\t\tfiltersLabel: 'Filtros',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: 'es uno de',\n\t\t},\n\t\tsearchLabel: 'Buscar',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: 'contiene',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: 'No establecido',\n\t\twhereLabel: 'Dónde',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'Errores',\n\t\ttitle: 'Envío de formulario no permitido',\n\t\twarningsSectionTitle: 'Advertencias',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'Contraer el menú',\n\t\tmenuExpand: 'Expandir el menú',\n\t\tquickLinksTitle: 'Enlaces rápidos',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Despejar todo',\n\t\tendDate: 'Finalización',\n\t\tfilters: 'Filtros',\n\t\titemsPerPage: 'Artículos por página',\n\t\tlastMonth: 'Mes pasado',\n\t\tlastWeek: 'Semana pasada',\n\t\tlastYear: 'Año pasado',\n\t\tmax: 'Máx.',\n\t\tmin: 'Mín.',\n\t\tmoreThan: 'Más de',\n\t\tresultsCounter:\n\t\t\t'No hay artículos | {range} de {total} artículo | {range} de {total} artículos',\n\t\tsearch: 'Buscar',\n\t\tselectionCount: '| {count} item selected | {count} items selected',\n\t\tshowAll: 'Mostrar todo',\n\t\tstartDate: 'Inicio',\n\t\ttoday: 'Hoy',\n\t\tupTo: 'Hasta',\n\t},\n\tKtTable: {\n\t\tno: 'No',\n\t\tnoItems: 'No hay artículos',\n\t\tyes: 'Yes',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: 'No Establecido',\n\t},\n}\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'est'\n\n\texport const isEmpty = 'est vide'\n\n\texport const number = {\n\t\tEQUAL: 'est égal à',\n\t\tGREATER_THAN: 'est supérieur à',\n\t\tGREATER_THAN_OR_EQUAL: 'est supérieur ou égal à',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'est inférieur à',\n\t\tLESS_THAN_OR_EQUAL: 'est inférieur ou égal à',\n\t}\n\n\texport const restrictedAccess = 'Accès limité'\n}\n\nexport const frFR: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Available Columns',\n\t\tcolumns: 'Columns',\n\t\tsearchColumn: 'Search Column',\n\t\tvisibleColumns: 'Visible Columns',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Appuyez sur la touche Échap ou',\n\t\tclickToCancelLabel: 'cliquez pour annuler',\n\t\tdeleteButton: 'Supprimer',\n\t\teditButton: 'Modifier',\n\t\teditedLabel: 'Modifié',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: 'Publier',\n\t\treplyButton: 'Répondre',\n\t\treplyToLabel: 'Répondre à',\n\t\tunlockedHelpText: 'Visible par tous les utilisateurs',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: 'Utiliser la photo',\n\t\t\tcancel: 'Annuler',\n\t\t\tnextCamera: 'Appareil photo suivant',\n\t\t\trejectPhoto: 'Reprendre la photo',\n\t\t\tretry: 'Réessayer',\n\t\t\ttakePhoto: 'Prendre une photo',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed:\n\t\t\t\t\"Le téléchargement de plusieurs fichiers n'est pas autorisé\",\n\t\t\tnotAllowed: \"L'autorisation d'accès à l'appareil photo a été refusée\",\n\t\t\tnotFound: 'Aucun appareil photo disponible trouvé',\n\t\t\tnotSupported: 'Aucun appareil photo compatible trouvé',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: 'Prendre une photo',\n\t\t\terror: 'Erreur',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'Examiner',\n\t\t\tunknown: 'Inconnu',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'Annulé',\n\t\t\tERROR: 'Échec du téléchargement, veuillez réessayer',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: 'Non valide',\n\t\t\tNOT_STARTED: 'Pas commencé',\n\t\t\tREADY_TO_UPLOAD: 'Prêt au téléchargement',\n\t\t\tUPLOADED: 'Téléchargement terminé',\n\t\t\tUPLOADED_WITH_ERROR: 'Téléchargement terminé avec une erreur',\n\t\t\tUPLOADING: 'Téléchargement en cours…',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'Cliquer pour télécharger',\n\t\t\tdragAndDrop: 'or drag and drop your files here',\n\t\t\tlearnMore: 'En savoir plus',\n\t\t\tmax: 'max.',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'Format de fichier non pris en charge',\n\t\t\tMAX_SIZE_EXCEEDED:\n\t\t\t\t'La taille maximale autorisée pour un fichier est dépassée',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'Cliquez pour modifier',\n\t},\n\tKtFields: {\n\t\trequiredMessage: 'Ce champ est obligatoire',\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'Chargement en cours',\n\t\tnoDataText: 'Aucun résultat',\n\t\tnoMatchText: 'Aucune donnée trouvée',\n\t\tplaceholder: 'Sélectionner',\n\t\tungroupedText: 'Other',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'Ajouter un filtre',\n\t\tandLabel: 'Et',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'Tout effacer',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: 'est dans la période',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'Aucun filtre appliqué',\n\t\tfilterLabel: 'Filtre',\n\t\tfiltersLabel: 'Filtres',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: \"est l'un de\",\n\t\t},\n\t\tsearchLabel: 'Rechercher',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: 'contient',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: 'Ne plus définir',\n\t\twhereLabel: 'Où',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'Erreurs',\n\t\ttitle: \"L'envoi du formulaire n'est pas autorisé\",\n\t\twarningsSectionTitle: 'Avertissements',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'Réduire le menu',\n\t\tmenuExpand: 'Développer le menu',\n\t\tquickLinksTitle: 'Liens rapides',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Tout effacer',\n\t\tendDate: 'Fin',\n\t\tfilters: 'Filtres',\n\t\titemsPerPage: 'Éléments par page',\n\t\tlastMonth: 'Le mois dernier',\n\t\tlastWeek: 'La semaine dernière',\n\t\tlastYear: \"L'année dernière\",\n\t\tmax: 'Max.',\n\t\tmin: 'Min.',\n\t\tmoreThan: 'Plus de',\n\t\tresultsCounter:\n\t\t\t'Aucun élément | {range} de {total} élément | {range} de {total} éléments',\n\t\tsearch: 'Rechercher',\n\t\tselectionCount: '| {count} item selected | {count} items selected',\n\t\tshowAll: 'Afficher tout',\n\t\tstartDate: 'Début',\n\t\ttoday: \"Aujourd'hui\",\n\t\tupTo: \"Jusqu'à\",\n\t},\n\tKtTable: {\n\t\tno: 'Non',\n\t\tnoItems: 'Aucun élément',\n\t\tyes: 'Oui',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: 'Non défini',\n\t},\n}\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'です'\n\n\texport const isEmpty = '空です'\n\n\texport const number = {\n\t\tEQUAL: 'に等しい',\n\t\tGREATER_THAN: 'より大きい',\n\t\tGREATER_THAN_OR_EQUAL: '以上',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'よりも少ない',\n\t\tLESS_THAN_OR_EQUAL: '以下である',\n\t}\n\n\texport const restrictedAccess = '制限付きアクセス'\n}\n\nexport const jaJP: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Available Columns',\n\t\tcolumns: 'Columns',\n\t\tsearchColumn: 'Search Column',\n\t\tvisibleColumns: 'Visible Columns',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Escキーを押すか',\n\t\tclickToCancelLabel: 'クリックしてキャンセルします',\n\t\tdeleteButton: '消す',\n\t\teditButton: 'エディット',\n\t\teditedLabel: '編集済み',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: '送信',\n\t\treplyButton: '返信',\n\t\treplyToLabel: '返信',\n\t\tunlockedHelpText: 'すべてのユーザーに表示されます',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: '写真を使用',\n\t\t\tcancel: 'キャンセル',\n\t\t\tnextCamera: '次のカメラ',\n\t\t\trejectPhoto: '写真を撮り直す',\n\t\t\tretry: 'リトライ',\n\t\t\ttakePhoto: '写真を撮る',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed: '複数のファイルのアップロードは許可されていません',\n\t\t\tnotAllowed: 'カメラの使用が拒否されました',\n\t\t\tnotFound: '利用可能なカメラが見つかりません',\n\t\t\tnotSupported: '互換性のあるカメラが見つかりません',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: '写真を撮る',\n\t\t\terror: 'エラー',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'レビュー',\n\t\t\tunknown: '知らない',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'キャンセル',\n\t\t\tERROR: 'アップロードに失敗しました。もう一度お試しください',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: '無効',\n\t\t\tNOT_STARTED: '始まっていない',\n\t\t\tREADY_TO_UPLOAD: 'アップロード準備完了',\n\t\t\tUPLOADED: 'アップロード済み',\n\t\t\tUPLOADED_WITH_ERROR: 'エラーでアップロードされました',\n\t\t\tUPLOADING: 'アップロード中...',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'クリックしてアップロード',\n\t\t\tdragAndDrop: 'or drag and drop your files here',\n\t\t\tlearnMore: 'もっと詳しく知る',\n\t\t\tmax: '最大',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'サポートされていないファイル形式',\n\t\t\tMAX_SIZE_EXCEEDED: '許容される最大ファイル サイズを超えました',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'クリックで編集',\n\t},\n\tKtFields: {\n\t\trequiredMessage: 'このフィールドは必須です。',\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'ロード中',\n\t\tnoDataText: '結果がありません',\n\t\tnoMatchText: 'データなし',\n\t\tplaceholder: '選択してください',\n\t\tungroupedText: 'Other',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'フィルタを追加',\n\t\tandLabel: 'そして',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'すべてクリア',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: '範囲内です',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'フィルタが適用されていません',\n\t\tfilterLabel: 'フィルタ',\n\t\tfiltersLabel: 'フィルタ',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: 'の一つであります',\n\t\t},\n\t\tsearchLabel: '探す',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: '含まれています',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: '設定解除',\n\t\twhereLabel: 'どこ',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'エラー',\n\t\ttitle: 'フォーム送信ができない',\n\t\twarningsSectionTitle: '注意事項',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'メニューを閉じる',\n\t\tmenuExpand: '拡張メニュー',\n\t\tquickLinksTitle: 'クイックリンク',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Clear All',\n\t\tendDate: 'End',\n\t\tfilters: 'Filters',\n\t\titemsPerPage: 'Items per page',\n\t\tlastMonth: 'Last Month',\n\t\tlastWeek: 'Last Week',\n\t\tlastYear: 'Last Year',\n\t\tmax: 'Max.',\n\t\tmin: 'Min.',\n\t\tmoreThan: 'More Than',\n\t\tresultsCounter:\n\t\t\t'No items | {range} of {total} item | {range} of {total} items',\n\t\tsearch: 'Search',\n\t\tselectionCount: '| {count} item selected | {count} items selected',\n\t\tshowAll: 'Show All',\n\t\tstartDate: 'Start',\n\t\ttoday: 'Today',\n\t\tupTo: 'Up To',\n\t},\n\tKtTable: {\n\t\tno: 'No',\n\t\tnoItems: 'No items',\n\t\tyes: 'Yes',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: '未設定',\n\t},\n}\n","import type { KottiI18n } from '../types'\n\nnamespace Common {\n\texport const is = 'є'\n\n\texport const isEmpty = 'порожнє'\n\n\texport const number = {\n\t\tEQUAL: 'дорівнює',\n\t\tGREATER_THAN: 'більше ніж',\n\t\tGREATER_THAN_OR_EQUAL: 'більше або дорівнює',\n\t\tIS_EMPTY: Common.isEmpty,\n\t\tLESS_THAN: 'менше ніж',\n\t\tLESS_THAN_OR_EQUAL: 'менше або дорівнює',\n\t}\n\n\texport const restrictedAccess = 'Доступ обмежено'\n}\n\nexport const ukUA: KottiI18n.Messages = {\n\tKtColumnSelector: {\n\t\tavailableColumns: 'Available Columns',\n\t\tcolumns: 'Columns',\n\t\tsearchColumn: 'Search Column',\n\t\tvisibleColumns: 'Visible Columns',\n\t},\n\tKtComment: {\n\t\tcancelMessage: 'Натисніть Esc або',\n\t\tclickToCancelLabel: 'натисніть, щоб скасувати',\n\t\tdeleteButton: 'Видалити',\n\t\teditButton: 'Редагувати',\n\t\teditedLabel: 'Відредаговано',\n\t\tinternalLabel: Common.restrictedAccess,\n\t\tlockedHelpText: Common.restrictedAccess,\n\t\tpostButton: 'Опублікувати',\n\t\treplyButton: 'Відповісти',\n\t\treplyToLabel: 'Відповісти',\n\t\tunlockedHelpText: 'Видимий для всіх користувачів',\n\t},\n\tKtFieldDateShared: {\n\t\tcancelButton: 'Cancel',\n\t\tconfirmButton: 'OK',\n\t\thours: 'hours',\n\t\tminutes: 'minutes',\n\t\tseconds: 'seconds',\n\t},\n\tKtFieldFileUpload: {\n\t\tbutton: {\n\t\t\tacceptPhoto: 'Використати фото',\n\t\t\tcancel: 'Скасувати',\n\t\t\tnextCamera: 'Наступна камера',\n\t\t\trejectPhoto: 'Повторити фото',\n\t\t\tretry: 'Повторити',\n\t\t\ttakePhoto: 'Зробити фото',\n\t\t},\n\t\terror: {\n\t\t\tmultipleNotAllowed: 'Мультизавантаження не дозволено',\n\t\t\tnotAllowed: 'Доступ до камери заборонений',\n\t\t\tnotFound: 'Камеру не знайдено',\n\t\t\tnotSupported: 'Сумісна камера не знайдена',\n\t\t},\n\t\tlabel: {\n\t\t\tcapture: 'Зробити фото',\n\t\t\terror: 'Помилка',\n\t\t\tinternal: Common.restrictedAccess,\n\t\t\treview: 'Перегляд',\n\t\t\tunknown: 'Невідомо',\n\t\t},\n\t\tstatusMsg: {\n\t\t\tCANCELED: 'Скасовано',\n\t\t\tERROR: 'Не вдалося завантажити, спробуйте ще раз',\n\t\t\tHIDDEN: '',\n\t\t\tINVALID: 'Недійсний',\n\t\t\tNOT_STARTED: 'Не розпочато',\n\t\t\tREADY_TO_UPLOAD: 'Готово до завантаження',\n\t\t\tUPLOADED: 'Завантажено',\n\t\t\tUPLOADED_WITH_ERROR: 'Завантажено з помилкою',\n\t\t\tUPLOADING: 'Завантаження...',\n\t\t},\n\t\ttext: {\n\t\t\tclickToUpload: 'Натисніть для завантаження',\n\t\t\tdragAndDrop: 'або перетягніть файли сюди',\n\t\t\tlearnMore: 'Дізнатися більше',\n\t\t\tmax: 'макс.',\n\t\t},\n\t\tvalidationMsg: {\n\t\t\tINVALID_EXTENSION: 'Формат файлу не підтримується',\n\t\t\tMAX_SIZE_EXCEEDED: 'Перевищено макс. дозволений розмір файлу',\n\t\t},\n\t},\n\tKtFieldInlineEdit: {\n\t\tplaceholder: 'Натисніть для редагування',\n\t},\n\tKtFields: {\n\t\trequiredMessage: \"Це поле є обов'язковим\",\n\t},\n\tKtFieldSelects: {\n\t\tloadingText: 'Завантаження',\n\t\tnoDataText: 'Немає результатів',\n\t\tnoMatchText: 'Даних не знайдено',\n\t\tplaceholder: 'Вибрати',\n\t\tungroupedText: 'Other',\n\t},\n\tKtFilters: {\n\t\taddFilterLabel: 'Додати фільтр',\n\t\tandLabel: 'І',\n\t\tboolean: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tclearAllLabel: 'Очистити все',\n\t\tcurrency: Common.number,\n\t\tdateRange: {\n\t\t\tIN_RANGE: 'у діапазоні',\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\temptyListLabel: 'Фільтри не застосовано',\n\t\tfilterLabel: 'Фільтр',\n\t\tfiltersLabel: 'Фільтри',\n\t\tfloat: Common.number,\n\t\tinteger: Common.number,\n\t\tmultiEnum: {\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t\tONE_OF: 'є одним з',\n\t\t},\n\t\tsearchLabel: 'Пошук',\n\t\tsingleEnum: {\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tstring: {\n\t\t\tCONTAINS: 'містить',\n\t\t\tEQUAL: Common.is,\n\t\t\tIS_EMPTY: Common.isEmpty,\n\t\t},\n\t\tunsetLabel: 'Скинути',\n\t\twhereLabel: 'Де',\n\t},\n\tKtFormSubmit: {\n\t\terrorsSectionTitle: 'Помилки',\n\t\ttitle: 'Надсилання форми заборонено',\n\t\twarningsSectionTitle: 'Попередження',\n\t},\n\tKtNavbar: {\n\t\tmenuCollapse: 'Згорнути меню',\n\t\tmenuExpand: 'Розгорнути меню',\n\t\tquickLinksTitle: 'Швидкі посилання',\n\t},\n\tKtStandardTable: {\n\t\tclearAll: 'Очистити все',\n\t\tendDate: 'Кінець',\n\t\tfilters: 'Фільтри',\n\t\titemsPerPage: 'Елементів на сторінці',\n\t\tlastMonth: 'Минулий місяць',\n\t\tlastWeek: 'Минулий тиждень',\n\t\tlastYear: 'Минулий рік',\n\t\tmax: 'Макс.',\n\t\tmin: 'Мін.',\n\t\tmoreThan: 'Більше ніж',\n\t\tresultsCounter:\n\t\t\t'Немає елементів | {range} з {total} елемента | {range} з {total} елементів',\n\t\tsearch: 'Пошук',\n\t\tselectionCount: '| {count} Element ausgewählt | {count} items ausgewählt',\n\t\tshowAll: 'Показати все',\n\t\tstartDate: 'Початок',\n\t\ttoday: 'Сьогодні',\n\t\tupTo: 'До',\n\t},\n\tKtTable: {\n\t\tno: 'Ні',\n\t\tnoItems: 'Немає елементів',\n\t\tyes: 'Так',\n\t},\n\tKtValueLabel: {\n\t\tnotSet: 'Не встановлено',\n\t},\n}\n","import deepmerge from 'deepmerge'\n\nimport type { DeepPartial } from './types'\n\n/**\n * deepmerge types do not support the DeepPartial type\n * although deepmerge supports the behavior\n * This helper function works-around that issue\n */\nexport const fixDeepMerge = <T extends Record<string, unknown>>(\n\tx: DeepPartial<T>,\n\ty: DeepPartial<T>,\n\t// @ts-expect-error deepmerge's parameters are typed with Partial<T>,\n\t// which is not compatible with DeepPartial<T>\n): T => deepmerge<T>(x, y)\n","import type { Ref, UnwrapRef } from 'vue'\nimport { computed, inject, provide, reactive } from 'vue'\n\nimport { DecimalSeparator } from '../types/decimal-separator'\n\nimport { KT_I18N_CONTEXT } from './constants'\nimport { deDE } from './locales/de-DE'\nimport { enUS } from './locales/en-US'\nimport { esES } from './locales/es-ES'\nimport { frFR } from './locales/fr-FR'\nimport { jaJP } from './locales/ja-JP'\nimport { ukUA } from './locales/uk-UA'\nimport type { KottiI18n } from './types'\nimport { fixDeepMerge } from './utilities'\n\nexport const useI18nContext = (): KottiI18n.ContextInternal => {\n\tconst context = inject<KottiI18n.Context | null>(KT_I18N_CONTEXT, null)\n\n\tif (context === null)\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t'useI18nContext: Missing Translation Context, falling back to English',\n\t\t)\n\n\treturn reactive({\n\t\tcurrencyMap: computed<UnwrapRef<KottiI18n.Context['currencyMap']>>(\n\t\t\t() => context?.currencyMap.value ?? {},\n\t\t),\n\t\tlocale: computed<UnwrapRef<KottiI18n.Context['locale']>>(\n\t\t\t() => context?.locale.value ?? 'en-US',\n\t\t),\n\t\tmessages: computed<UnwrapRef<KottiI18n.Context['messages']>>(\n\t\t\t() => context?.messages.value ?? enUS,\n\t\t),\n\t\tnumberFormat: computed<UnwrapRef<KottiI18n.Context['numberFormat']>>(\n\t\t\t() =>\n\t\t\t\tcontext?.numberFormat.value ?? {\n\t\t\t\t\tdecimalSeparator: DecimalSeparator.DOT,\n\t\t\t\t},\n\t\t),\n\t})\n}\n\nexport const useTranslationNamespace = <NS extends keyof KottiI18n.Messages>(\n\tnamespace: NS,\n): Ref<Readonly<KottiI18n.Messages[NS]>> => {\n\tconst context = useI18nContext()\n\n\treturn computed(() => context.messages[namespace])\n}\n\n/**\n * Provides the translation context to child components\n */\nexport const useI18nProvide = ({\n\tcurrencyMap,\n\tlocale,\n\tmessages,\n\tnumberFormat,\n}: {\n\tcurrencyMap: Ref<KottiI18n.Props['currencyMap']>\n\tlocale: Ref<KottiI18n.Props['locale']>\n\tmessages: Ref<KottiI18n.Props['messages']>\n\tnumberFormat: Ref<KottiI18n.Props['numberFormat']>\n}): void => {\n\tconst defaultMessages = computed(\n\t\t(): KottiI18n.Messages =>\n\t\t\t({\n\t\t\t\t'de-DE': deDE,\n\t\t\t\t'en-US': enUS,\n\t\t\t\t'es-ES': esES,\n\t\t\t\t'fr-FR': frFR,\n\t\t\t\t'ja-JP': jaJP,\n\t\t\t\t'uk-UA': ukUA,\n\t\t\t})[locale.value],\n\t)\n\n\tprovide<KottiI18n.Context>(KT_I18N_CONTEXT, {\n\t\tcurrencyMap,\n\t\tlocale,\n\t\tmessages: computed(() =>\n\t\t\tfixDeepMerge<KottiI18n.Messages>(defaultMessages.value, messages.value),\n\t\t),\n\t\tnumberFormat: computed(() =>\n\t\t\tfixDeepMerge<KottiI18n.NumberFormat>(\n\t\t\t\t{\n\t\t\t\t\tdecimalSeparator: DecimalSeparator.DOT,\n\t\t\t\t},\n\t\t\t\tnumberFormat.value,\n\t\t\t),\n\t\t),\n\t})\n}\n","<template>\n\t<div class=\"kt-comment__actions\">\n\t\t<KtButton\n\t\t\tv-if=\"!isReply\"\n\t\t\tclass=\"kt-comment__actions__reply-button\"\n\t\t\t:data-test=\"`${dataTest}.reply-button`\"\n\t\t\t:label=\"translations.replyButton\"\n\t\t\t:tabIndex=\"tabIndex\"\n\t\t\ttype=\"text\"\n\t\t\t@click.stop=\"onReply\"\n\t\t/>\n\t\t<KtButton\n\t\t\tv-if=\"isEditable\"\n\t\t\tclass=\"kt-comment__actions__edit-button\"\n\t\t\t:data-test=\"`${dataTest}.edit-button`\"\n\t\t\t:label=\"translations.editButton\"\n\t\t\t:tabIndex=\"tabIndex\"\n\t\t\ttype=\"text\"\n\t\t\t@click.stop=\"onEdit\"\n\t\t/>\n\t\t<KtButton\n\t\t\tv-if=\"isDeletable\"\n\t\t\tclass=\"kt-comment__actions__delete-button\"\n\t\t\t:data-test=\"`${dataTest}.delete-button`\"\n\t\t\t:label=\"translations.deleteButton\"\n\t\t\t:tabIndex=\"tabIndex\"\n\t\t\ttype=\"text\"\n\t\t\t@click.stop=\"onDelete\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport KtButton from '../../kotti-button/KtButton.vue'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { KottiComment } from '../types'\n\nexport default defineComponent({\n\tname: 'CommentActions',\n\tcomponents: {\n\t\tKtButton,\n\t},\n\tprops: makeProps(KottiComment.Actions.schema),\n\temits: ['delete', 'reply', 'update:isEditing'],\n\tsetup(_, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtComment')\n\n\t\treturn {\n\t\t\tonDelete: () => {\n\t\t\t\temit('delete')\n\t\t\t},\n\t\t\tonEdit: () => {\n\t\t\t\temit('update:isEditing', true)\n\t\t\t},\n\t\t\tonReply: () => {\n\t\t\t\temit('reply')\n\t\t\t},\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment__actions {\n\tdisplay: flex;\n}\n</style>\n","<template>\n\t<div class=\"kt-comment-header\">\n\t\t<div class=\"kt-comment-header__left-wrapper\">\n\t\t\t<span class=\"kt-comment-header__user-name\" v-text=\"user.name\" />\n\t\t\t<span v-if=\"isInternal && !isReply\" class=\"kt-comment-header__internal\">\n\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.PERMISSION_LOCKED\" />\n\t\t\t\t{{ translations.internalLabel }}\n\t\t\t</span>\n\t\t</div>\n\t\t<div class=\"kt-comment-header__right-wrapper\">\n\t\t\t<span\n\t\t\t\tv-if=\"isModified\"\n\t\t\t\tclass=\"kt-comment-header__modified\"\n\t\t\t\tv-text=\"translations.editedLabel\"\n\t\t\t/>\n\t\t\t<span class=\"kt-comment-header__created-at\" v-text=\"createdAt\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { KottiComment } from '../types'\n\nexport default defineComponent({\n\tname: 'CommentHeader',\n\tprops: makeProps(KottiComment.Header.schema),\n\tsetup() {\n\t\tconst translations = useTranslationNamespace('KtComment')\n\n\t\treturn {\n\t\t\ttranslations,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment-header {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tjustify-content: space-between;\n\tfont-size: 14px;\n\tfont-weight: 500;\n\tline-height: 20px;\n\n\t&__left-wrapper {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tcolumn-gap: var(--unit-3);\n\t\talign-items: center;\n\t}\n\n\t&__right-wrapper {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap-reverse;\n\t\tcolumn-gap: var(--unit-4);\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n\n\t&__created-at,\n\t&__modified {\n\t\tcolor: var(--text-03);\n\t}\n\n\t&__internal {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-1);\n\t\tcolor: var(--text-02);\n\n\t\t.yoco {\n\t\t\tfont-size: 0.9rem;\n\t\t}\n\t}\n\n\t&__user-name {\n\t\tcolor: var(--text-01);\n\t}\n}\n</style>\n","import type { Ref } from 'vue'\nimport { watch } from 'vue'\n\nimport type { KottiComment } from './types'\nimport { resizeTextarea } from './utilities'\n\nexport const useResizeTextarea = (\n\ttextareaRef: Ref<HTMLTextAreaElement | null>,\n\tmodelValue: Ref<KottiComment.TextArea.PropsInternal['modelValue']>,\n): void => {\n\twatch(\n\t\t[textareaRef, modelValue],\n\t\t() => {\n\t\t\tresizeTextarea(textareaRef.value)\n\t\t},\n\t\t{\n\t\t\tflush: 'post',\n\t\t\timmediate: true,\n\t\t},\n\t)\n}\n","<template>\n\t<div class=\"kt-comment-text-area\">\n\t\t<div\n\t\t\tref=\"containerRef\"\n\t\t\tclass=\"kt-comment-text-area__container\"\n\t\t\t:data-test=\"`${dataTest}.input-container`\"\n\t\t\t@focusin=\"hasFocus = true\"\n\t\t\t@focusout=\"hasFocus = false\"\n\t\t\t@keydown.esc.stop.prevent=\"onCancel\"\n\t\t>\n\t\t\t<textarea\n\t\t\t\tref=\"textareaRef\"\n\t\t\t\tclass=\"form-input\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\trows=\"1\"\n\t\t\t\t:tabindex=\"tabIndex\"\n\t\t\t\t:value=\"modelValue\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t/>\n\t\t\t<div class=\"kt-comment-text-area__actions\">\n\t\t\t\t<template v-if=\"allowInternal && !isReply\">\n\t\t\t\t\t<KtButton\n\t\t\t\t\t\t:data-test=\"`${dataTest}.toggle-internal-button`\"\n\t\t\t\t\t\t:tabIndex=\"hasFocus ? tabIndex : -1\"\n\t\t\t\t\t\tv-bind=\"toggleInternalButtonProps\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t@click=\"onToggleInternal\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div class=\"kt-comment-text-area__actions-divider\" />\n\t\t\t\t</template>\n\t\t\t\t<KtButton\n\t\t\t\t\t:data-test=\"`${dataTest}.confirm-button`\"\n\t\t\t\t\t:disabled=\"isEmpty\"\n\t\t\t\t\t:icon=\"Yoco.Icon.SEND\"\n\t\t\t\t\t:tabIndex=\"hasFocus ? tabIndex : -1\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t@click.stop.prevent=\"onConfirm\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showCancelMessage\" class=\"kt-comment-text-area__footer\">\n\t\t\t<span v-text=\"translations.cancelMessage\" />\n\t\t\t<!-- eslint-disable-next-line vue/no-useless-mustaches -->\n\t\t\t{{ ' ' }}\n\t\t\t<a\n\t\t\t\t:tabIndex=\"cancelMessageTabindex\"\n\t\t\t\t@click.stop.prevent=\"onCancel\"\n\t\t\t\t@keydown.enter.stop.prevent=\"onCancel\"\n\t\t\t\t@keydown.esc.stop.prevent=\"onCancel\"\n\t\t\t\t@keydown.space.stop.prevent=\"onCancel\"\n\t\t\t\tv-text=\"translations.clickToCancelLabel\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport isNil from 'lodash/isNil.js'\nimport { computed, defineComponent, onMounted, onUnmounted, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport KtButton from '../../kotti-button/KtButton.vue'\nimport { KottiButton } from '../../kotti-button/types'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { blurElement, isOrContainsEventTarget } from '../../utilities'\nimport { useResizeTextarea } from '../hooks'\nimport { KottiComment } from '../types'\n\nexport default defineComponent({\n\tname: 'CommentTextArea',\n\tcomponents: {\n\t\tKtButton,\n\t},\n\tprops: makeProps(KottiComment.TextArea.schema),\n\temits: ['cancel', 'confirm', 'update:modelValue', 'toggleInternal'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtComment')\n\n\t\tconst containerRef = ref<HTMLDivElement | null>(null)\n\t\tconst hasFocus = ref(false)\n\t\tconst showCancelMessage = ref(false)\n\t\tconst textareaRef = ref<HTMLTextAreaElement | null>(null)\n\n\t\tuseResizeTextarea(\n\t\t\ttextareaRef,\n\t\t\tcomputed(() => props.modelValue),\n\t\t)\n\n\t\tconst blurTextarea = () => {\n\t\t\tblurElement(containerRef.value)\n\t\t}\n\t\tconst focusTextarea = () => {\n\t\t\ttextareaRef.value?.focus()\n\t\t\tshowCancelMessage.value = true\n\t\t}\n\n\t\tconst onCancel = () => {\n\t\t\temit('cancel')\n\t\t\tblurTextarea()\n\t\t\tshowCancelMessage.value = false\n\t\t}\n\n\t\tconst onClick = (event: KeyboardEvent | MouseEvent) => {\n\t\t\tif (event.target === null) return\n\n\t\t\tconst isClickInside = isOrContainsEventTarget(\n\t\t\t\tcontainerRef.value,\n\t\t\t\tevent.target,\n\t\t\t)\n\n\t\t\tif (isClickInside) focusTextarea()\n\t\t}\n\n\t\tonMounted(() => {\n\t\t\tif (props.autofocus) focusTextarea()\n\t\t\twindow.addEventListener('click', onClick)\n\t\t})\n\n\t\tonUnmounted(() => {\n\t\t\twindow.removeEventListener('click', onClick)\n\t\t})\n\n\t\treturn {\n\t\t\tcancelMessageTabindex: computed(() =>\n\t\t\t\tisNil(props.tabIndex) ? 0 : props.tabIndex,\n\t\t\t),\n\t\t\tcontainerRef,\n\t\t\thasFocus,\n\t\t\tisEmpty: computed(() => props.modelValue.trim() === ''),\n\t\t\tonCancel,\n\t\t\tonConfirm: () => {\n\t\t\t\temit('confirm')\n\t\t\t\tblurTextarea()\n\t\t\t},\n\t\t\tonInput: (event: Event) => {\n\t\t\t\temit('update:modelValue', (event.target as HTMLTextAreaElement).value)\n\t\t\t},\n\t\t\tonToggleInternal: () => {\n\t\t\t\temit('toggleInternal')\n\t\t\t},\n\t\t\tshowCancelMessage,\n\t\t\ttextareaRef,\n\t\t\ttoggleInternalButtonProps: computed(\n\t\t\t\t(): Pick<\n\t\t\t\t\tKottiButton.PropsInternal,\n\t\t\t\t\t'helpText' | 'icon' | 'toggleStatus'\n\t\t\t\t> =>\n\t\t\t\t\tprops.isInternal\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\thelpText: translations.value.lockedHelpText,\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.PERMISSION_LOCKED,\n\t\t\t\t\t\t\t\ttoggleStatus: KottiButton.ToggleStatus.ON,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\thelpText: translations.value.unlockedHelpText,\n\t\t\t\t\t\t\t\ticon: Yoco.Icon.PERMISSION_UNLOCKED,\n\t\t\t\t\t\t\t\ttoggleStatus: KottiButton.ToggleStatus.OFF,\n\t\t\t\t\t\t\t},\n\t\t\t),\n\t\t\ttranslations,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment-text-area {\n\twidth: 100%;\n\n\t&__actions {\n\t\tdisplay: flex;\n\t\tcolumn-gap: var(--unit-1);\n\t\tmargin-bottom: var(--unit-1);\n\t}\n\n\t&__actions-divider {\n\t\twidth: var(--unit-q);\n\t\tbackground: var(--ui-02);\n\t}\n\n\t&__container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: var(--unit-4);\n\t\talign-items: flex-end;\n\t\tpadding: var(--unit-3) var(--unit-4) 0 var(--unit-4);\n\t\tbackground: var(--ui-background);\n\t\tborder: 1px solid var(--ui-02);\n\t\tborder-radius: var(--field-border-radius);\n\n\t\t&:focus-within {\n\t\t\tborder-color: var(--interactive-05);\n\t\t\tbox-shadow: 0 0 0 1px var(--interactive-05);\n\t\t}\n\n\t\ttextarea {\n\t\t\tpadding: 0;\n\t\t\tresize: none;\n\t\t\tborder: none;\n\t\t}\n\t}\n\n\t&__footer {\n\t\tfont-size: 12px;\n\t\tline-height: 20px;\n\n\t\tspan {\n\t\t\tcolor: var(--text-03);\n\t\t}\n\n\t\ta {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-comment-inline-edit\">\n\t\t<CommentTextArea\n\t\t\tv-if=\"isEditing\"\n\t\t\tv-model=\"localMessage\"\n\t\t\tv-bind=\"{\n\t\t\t\tallowInternal,\n\t\t\t\tdataTest,\n\t\t\t\tisInternal,\n\t\t\t\tisReply,\n\t\t\t\ttabIndex,\n\t\t\t}\"\n\t\t\tautofocus\n\t\t\t@cancel=\"onCancel\"\n\t\t\t@confirm=\"onConfirm\"\n\t\t\t@toggleInternal=\"onToggleInternal\"\n\t\t/>\n\t\t<div\n\t\t\tv-else\n\t\t\tclass=\"kt-comment-inline-edit__message\"\n\t\t\t:data-test=\"`${dataTest}.message`\"\n\t\t>\n\t\t\t<!-- eslint-disable vue/no-v-html -->\n\t\t\t<span v-html=\"postEscapeParser(dangerouslyOverrideParser(message))\" />\n\t\t\t<!-- eslint-enable vue/no-v-html -->\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { makeProps } from '../../make-props'\nimport { KottiComment } from '../types'\n\nimport CommentTextArea from './CommentTextArea.vue'\n\nexport default defineComponent({\n\tname: 'CommentInlineEdit',\n\tcomponents: {\n\t\tCommentTextArea,\n\t},\n\tprops: makeProps(KottiComment.InlineEdit.schema),\n\temits: ['edit', 'update:isEditing'],\n\tsetup(props, { emit }) {\n\t\tconst localMessage =\n\t\t\tref<KottiComment.InlineEdit.PropsInternal['message']>('')\n\n\t\twatch(\n\t\t\t() => props.isEditing,\n\t\t\t(isEditing, wasEditing) => {\n\t\t\t\tif (isEditing === wasEditing) return\n\n\t\t\t\tlocalMessage.value = isEditing ? props.message : ''\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tlocalMessage,\n\t\t\tonCancel: () => {\n\t\t\t\temit('update:isEditing', false)\n\t\t\t\tlocalMessage.value = ''\n\t\t\t},\n\t\t\tonConfirm: () => {\n\t\t\t\temit('update:isEditing', false)\n\n\t\t\t\tif (localMessage.value === '') return\n\n\t\t\t\tconst payload: KottiComment.Events.Edit = {\n\t\t\t\t\tid: props.id,\n\t\t\t\t\tisInternal: props.isInternal,\n\t\t\t\t\tmessage: localMessage.value,\n\t\t\t\t\tparentId: props.parentId,\n\t\t\t\t}\n\n\t\t\t\temit('edit', payload)\n\t\t\t},\n\t\t\tonToggleInternal: () => {\n\t\t\t\tconst payload: KottiComment.Events.Edit = {\n\t\t\t\t\tid: props.id,\n\t\t\t\t\tisInternal: !props.isInternal,\n\t\t\t\t\tmessage: props.message,\n\t\t\t\t\tparentId: props.parentId,\n\t\t\t\t}\n\n\t\t\t\temit('edit', payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-field/mixins';\n\n.kt-comment-inline-edit {\n\t&__message {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tword-break: normal;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-comment-entry\">\n\t\t<KtAvatar size=\"sm\" :src=\"user.avatar\" />\n\t\t<div class=\"kt-comment-entry__wrapper\">\n\t\t\t<CommentHeader\n\t\t\t\tv-bind=\"{ createdAt, isInternal, isModified, isReply, user }\"\n\t\t\t/>\n\t\t\t<CommentInlineEdit\n\t\t\t\tv-bind=\"{\n\t\t\t\t\tallowInternal,\n\t\t\t\t\tdangerouslyOverrideParser,\n\t\t\t\t\tdataTest,\n\t\t\t\t\tid,\n\t\t\t\t\tisEditing,\n\t\t\t\t\tisInternal,\n\t\t\t\t\tisReply,\n\t\t\t\t\tmessage,\n\t\t\t\t\tparentId,\n\t\t\t\t\tpostEscapeParser,\n\t\t\t\t\ttabIndex,\n\t\t\t\t}\"\n\t\t\t\t@edit=\"onEdit\"\n\t\t\t\t@update:isEditing=\"isEditing = $event\"\n\t\t\t/>\n\t\t\t<CommentActions\n\t\t\t\tv-if=\"!isReadOnly && !isEditing\"\n\t\t\t\tv-bind=\"{ dataTest, isDeletable, isEditable, isReply, tabIndex }\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@reply=\"onReply\"\n\t\t\t\t@update:isEditing=\"isEditing = $event\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport pick from 'lodash/pick.js'\nimport { defineComponent, ref } from 'vue'\n\nimport KtAvatar from '../../kotti-avatar/KtAvatar.vue'\nimport { makeProps } from '../../make-props'\nimport { KottiComment } from '../types'\n\nimport CommentActions from './CommentActions.vue'\nimport CommentHeader from './CommentHeader.vue'\nimport CommentInlineEdit from './CommentInlineEdit.vue'\n\nexport default defineComponent({\n\tname: 'CommentEntry',\n\tcomponents: {\n\t\tCommentActions,\n\t\tCommentHeader,\n\t\tCommentInlineEdit,\n\t\tKtAvatar,\n\t},\n\tprops: makeProps(KottiComment.Entry.schema),\n\temits: ['delete', 'edit', 'reply'],\n\tsetup(props, { emit }) {\n\t\tconst isEditing = ref(false)\n\n\t\treturn {\n\t\t\tisEditing,\n\t\t\tonDelete: () => {\n\t\t\t\tconst payload: KottiComment.Events.Delete = pick(props, [\n\t\t\t\t\t'id',\n\t\t\t\t\t'parentId',\n\t\t\t\t])\n\t\t\t\temit('delete', payload)\n\t\t\t},\n\t\t\tonEdit: (payload: KottiComment.Events.Edit) => {\n\t\t\t\temit('edit', payload)\n\t\t\t},\n\t\t\tonReply: () => {\n\t\t\t\temit('reply', props.user)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment-entry {\n\tdisplay: flex;\n\tcolumn-gap: var(--unit-2);\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: var(--unit-1);\n\t\twidth: 100%;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-comment-input\">\n\t\t<KtAvatar size=\"sm\" :src=\"userAvatar\" />\n\t\t<CommentTextArea\n\t\t\tv-model=\"localMessage\"\n\t\t\tv-bind=\"{ allowInternal, autofocus, isReply, placeholder, tabIndex }\"\n\t\t\t:dataTest=\"localDataTest\"\n\t\t\t:isInternal=\"localIsInternal\"\n\t\t\t@cancel=\"onCancel\"\n\t\t\t@confirm=\"onConfirm\"\n\t\t\t@toggleInternal=\"onToggleInternal\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport KtAvatar from '../kotti-avatar/KtAvatar.vue'\nimport { makeProps } from '../make-props'\n\nimport CommentTextArea from './components/CommentTextArea.vue'\nimport type { KottiComment } from './types'\nimport { KottiCommentInput } from './types'\n\nexport default defineComponent({\n\tname: 'KtCommentInput',\n\tcomponents: {\n\t\tCommentTextArea,\n\t\tKtAvatar,\n\t},\n\tprops: makeProps(KottiCommentInput.propsSchema),\n\temits: ['add', 'cancel'],\n\tsetup(props, { emit }) {\n\t\t// eslint-disable-next-line vue/no-setup-props-reactivity-loss\n\t\tconst localIsInternal = ref<KottiComment.PropsInternal['isInternal']>(\n\t\t\tprops.isInternal,\n\t\t)\n\t\tconst localMessage = ref<KottiComment.PropsInternal['message']>('')\n\n\t\twatch(\n\t\t\t() => props.isInternal,\n\t\t\t(isInternal) => (localIsInternal.value = isInternal),\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\treturn {\n\t\t\tlocalDataTest: computed(() => {\n\t\t\t\tconst commentType = `new-${props.isReply ? 'reply' : 'comment'}`\n\t\t\t\treturn props.dataTest ? `${props.dataTest}.${commentType}` : commentType\n\t\t\t}),\n\t\t\tlocalIsInternal,\n\t\t\tlocalMessage,\n\t\t\tonCancel: () => {\n\t\t\t\tlocalIsInternal.value = props.isInternal\n\t\t\t\tlocalMessage.value = ''\n\t\t\t\temit('cancel')\n\t\t\t},\n\t\t\tonConfirm: () => {\n\t\t\t\tif (localMessage.value === '') return\n\n\t\t\t\tconst payload: KottiComment.Events.Add = {\n\t\t\t\t\tisInternal: localIsInternal.value,\n\t\t\t\t\tmessage: localMessage.value,\n\t\t\t\t\tparentId: props.parentId,\n\t\t\t\t\treplyToUserId: props.replyToUserId,\n\t\t\t\t}\n\n\t\t\t\temit('add', payload)\n\n\t\t\t\tlocalIsInternal.value = props.isInternal\n\t\t\t\tlocalMessage.value = ''\n\t\t\t},\n\t\t\tonToggleInternal: () => {\n\t\t\t\tif (localIsInternal.value && props.allowInternal && props.forceInternal)\n\t\t\t\t\treturn\n\t\t\t\tlocalIsInternal.value = !localIsInternal.value\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment-input {\n\tdisplay: flex;\n\tcolumn-gap: var(--unit-2);\n}\n</style>\n","<template>\n\t<div :class=\"classes\">\n\t\t<CommentEntry\n\t\t\tv-bind=\"commentProps\"\n\t\t\t@delete=\"onDelete\"\n\t\t\t@edit=\"onEdit\"\n\t\t\t@reply=\"onReply\"\n\t\t/>\n\t\t<div v-if=\"showCommentThread\" class=\"kt-comment__thread\">\n\t\t\t<CommentEntry\n\t\t\t\tv-for=\"reply in replies\"\n\t\t\t\t:key=\"reply.id\"\n\t\t\t\tv-bind=\"{\n\t\t\t\t\t...reply,\n\t\t\t\t\tdangerouslyOverrideParser,\n\t\t\t\t\tisReadOnly,\n\t\t\t\t\tpostEscapeParser,\n\t\t\t\t\ttabIndex,\n\t\t\t\t}\"\n\t\t\t\t:dataTest=\"`${rootDataTest}.reply.${reply.id}`\"\n\t\t\t\tisReply\n\t\t\t\t:parentId=\"id\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@edit=\"onEdit\"\n\t\t\t/>\n\t\t\t<KtCommentInput\n\t\t\t\tv-if=\"userToReply\"\n\t\t\t\tv-bind=\"{\n\t\t\t\t\tforceInternal,\n\t\t\t\t\tisInternal,\n\t\t\t\t\tplaceholder,\n\t\t\t\t\ttabIndex,\n\t\t\t\t\tuserAvatar,\n\t\t\t\t}\"\n\t\t\t\tautofocus\n\t\t\t\t:dataTest=\"rootDataTest\"\n\t\t\t\tisReply\n\t\t\t\t:parentId=\"id\"\n\t\t\t\t:replyToUserId=\"userToReply.id\"\n\t\t\t\t@add=\"onAdd\"\n\t\t\t\t@cancel=\"onCancel\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport omit from 'lodash/omit.js'\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { makeProps } from '../make-props'\n\nimport CommentEntry from './components/CommentEntry.vue'\nimport KtCommentInput from './KtCommentInput.vue'\nimport { KottiComment } from './types'\n\nexport default defineComponent({\n\tname: 'KtComment',\n\tcomponents: {\n\t\tCommentEntry,\n\t\tKtCommentInput,\n\t},\n\tprops: makeProps(KottiComment.propsSchema),\n\temits: ['add', 'delete', 'edit'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtComment')\n\n\t\tconst userToReply = ref<KottiComment.User | null>(null)\n\n\t\tconst rootDataTest = computed(() =>\n\t\t\tprops.dataTest\n\t\t\t\t? `${props.dataTest}.comment.${String(props.id)}`\n\t\t\t\t: `comment.${String(props.id)}`,\n\t\t)\n\n\t\treturn {\n\t\t\tclasses: computed(() => ({\n\t\t\t\t'kt-comment': true,\n\t\t\t\t'kt-comment--is-internal': props.isInternal,\n\t\t\t})),\n\t\t\tcommentProps: computed<KottiComment.Entry.PropsInternal>(() => ({\n\t\t\t\t...omit(props, 'replies'),\n\t\t\t\tdataTest: rootDataTest.value,\n\t\t\t\tisReply: false,\n\t\t\t})),\n\t\t\tonAdd: (payload: KottiComment.Events.Add) => {\n\t\t\t\tuserToReply.value = null\n\t\t\t\temit('add', payload)\n\t\t\t},\n\t\t\tonCancel: () => (userToReply.value = null),\n\t\t\tonDelete: (payload: KottiComment.Events.Delete) => {\n\t\t\t\temit('delete', payload)\n\t\t\t},\n\t\t\tonEdit: (payload: KottiComment.Events.Edit) => {\n\t\t\t\temit('edit', payload)\n\t\t\t},\n\t\t\tonReply: (user: KottiComment.User) => (userToReply.value = user),\n\t\t\tplaceholder: computed(() =>\n\t\t\t\tuserToReply.value\n\t\t\t\t\t? [translations.value.replyToLabel, userToReply.value.name].join(' ')\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t\trootDataTest,\n\t\t\tshowCommentThread: computed(\n\t\t\t\t() => props.replies.length > 0 || userToReply.value !== null,\n\t\t\t),\n\t\t\tuserToReply,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-comment {\n\tpadding: var(--unit-4);\n\n\t&--is-internal {\n\t\tbackground-color: var(--ui-01);\n\t}\n\n\t&__thread {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: var(--unit-4);\n\t\tpadding: var(--unit-4) 0 0 var(--unit-10);\n\t}\n}\n</style>\n","import type { z } from 'zod'\n\nimport type { Kotti } from '../types'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtCommentVue from './KtComment.vue'\nimport KtCommentInputVue from './KtCommentInput.vue'\nimport { KottiComment, KottiCommentInput } from './types'\n\nconst getCommentMeta = <T extends z.ZodTypeAny>(): Omit<\n\tKotti.Meta<T>,\n\t'typeScript'\n> => ({\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=133%3A2594',\n\t},\n\tslots: {},\n})\n\nexport const KtComment = attachMeta(makeInstallable(KtCommentVue), {\n\t...getCommentMeta(),\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Comment',\n\t\tschema: KottiComment.propsSchema,\n\t},\n})\n\nexport const KtCommentInput = attachMeta(makeInstallable(KtCommentInputVue), {\n\t...getCommentMeta(),\n\ttypeScript: {\n\t\tnamespace: 'Kotti.CommentInput',\n\t\tschema: KottiCommentInput.propsSchema,\n\t},\n})\n","<template>\n\t<transition mode=\"out-in\" name=\"kt-drawer\">\n\t\t<!-- eslint-disable-next-line vue/require-toggle-inside-transition -->\n\t\t<div class=\"kt-drawer__mask\" @click.self=\"onOutsideDrawerClick\">\n\t\t\t<div :class=\"drawerClass\" :style=\"drawerWidth\">\n\t\t\t\t<div class=\"kt-drawer__header\">\n\t\t\t\t\t<slot name=\"drawer-header\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"kt-drawer__body\">\n\t\t\t\t\t<slot name=\"drawer-body\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"kt-drawer__footer\">\n\t\t\t\t\t<slot name=\"drawer-footer\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"kt-drawer__handle\" @click=\"onDrawerHandleClick\">\n\t\t\t\t\t<i v-if=\"isExpanded\" class=\"yoco\" v-text=\"Yoco.Icon.CHEVRON_RIGHT\" />\n\t\t\t\t\t<i v-else class=\"yoco\" v-text=\"Yoco.Icon.CHEVRON_LEFT\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</transition>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiDrawer } from './types'\n\nexport default defineComponent({\n\tname: 'KtDrawer',\n\tprops: makeProps(KottiDrawer.propsSchema),\n\temits: ['close'],\n\tsetup(props, { emit }) {\n\t\tconst isExpanded = ref(false)\n\n\t\treturn {\n\t\t\tdrawerClass: computed(() => ({\n\t\t\t\t'kt-drawer__container': true,\n\t\t\t\t'kt-drawer__container--is-expanded': isExpanded.value,\n\t\t\t\t'kt-drawer__container--is-wide': props.isWide,\n\t\t\t})),\n\t\t\tdrawerWidth: computed(() => {\n\t\t\t\treturn props.defaultWidth === null || props.expandWidth === null\n\t\t\t\t\t? {}\n\t\t\t\t\t: { width: isExpanded.value ? props.expandWidth : props.defaultWidth }\n\t\t\t}),\n\t\t\tisExpanded,\n\t\t\tonDrawerHandleClick: () => {\n\t\t\t\tisExpanded.value = !isExpanded.value\n\t\t\t},\n\t\t\tonOutsideDrawerClick: () => {\n\t\t\t\tif (!props.disallowCloseOutside) {\n\t\t\t\t\temit('close')\n\t\t\t\t}\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n:root {\n\t--kt-drawer-default-width: 18.8rem;\n\t--kt-drawer-wide-width: 26.8rem;\n\t--kt-drawer-mask-background: rgb(0 0 0 / 50%);\n\t--kt-drawer-shadow: var(--shadow-lg);\n}\n\n:root[data-theme='dark'] {\n\t--kt-drawer-mask-background: rgb(0 0 0 / 70%);\n\t--kt-drawer-shadow: 0 0 32px rgb(180 180 255 / 10%);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n.kt-drawer {\n\t&__mask {\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tz-index: $zindex-4;\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-color: var(--kt-drawer-mask-background);\n\t\ttransition: opacity 0.5s ease;\n\t}\n\n\t&__container {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: var(--kt-drawer-default-width);\n\t\theight: 100%;\n\t\tpadding: var(--unit-6);\n\t\tpadding-left: var(--unit-8);\n\t\toverflow-y: auto;\n\t\tbackground-color: var(--ui-background);\n\t\tborder: 1px solid var(--ui-02);\n\t\tbox-shadow: var(--kt-drawer-shadow);\n\t\ttransition: all 0.3s ease;\n\n\t\t&--is-expanded {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t&--is-wide {\n\t\t\twidth: var(--kt-drawer-wide-width);\n\n\t\t\t&.kt-drawer__container--is-expanded {\n\t\t\t\twidth: 75%;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__handle {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: var(--unit-1);\n\t\tdisplay: block;\n\t\twidth: 1.5rem;\n\t\theight: 1.5rem;\n\t\tmargin-top: -0.725rem;\n\t\tline-height: 1.5rem;\n\t\tcolor: var(--icon-02);\n\t\tcursor: pointer;\n\n\t\t&:hover {\n\t\t\tcolor: var(--interactive-03);\n\t\t}\n\t}\n\n\t&__header {\n\t\tflex: 0 0 auto;\n\t}\n\n\t&__body {\n\t\tflex: 1 1 auto;\n\t\tpadding: 0 0.8rem;\n\t\tmargin: 0 -0.8rem 0.8rem -0.8rem; /* stylelint-disable-line */\n\t\toverflow-y: auto;\n\t}\n\n\t&__footer {\n\t\tflex: 0 0 auto;\n\t\talign-self: flex-end;\n\t\twidth: 100%;\n\t}\n\n\t/* Vue Transition classes */\n\n\t&-enter {\n\t\topacity: 0;\n\t\ttransition: opacity 0.5s;\n\t}\n\n\t&-leave-active {\n\t\topacity: 0;\n\t}\n\n\t&-enter .kt-drawer__container,\n\t&-leave-active .kt-drawer__container {\n\t\ttransform: translate(20em, 0);\n\t}\n}\n\n@media (width < $size-sm) {\n\t.kt-drawer {\n\t\t&__container,\n\t\t&__container--is-wide {\n\t\t\ttop: auto;\n\t\t\tbottom: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 80%;\n\t\t\tpadding: var(--unit-4);\n\t\t\tpadding-top: var(--unit-8);\n\n\t\t\t&.kt-drawer__container--is-expanded {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t}\n\n\t\t&__handle {\n\t\t\ttop: 0;\n\t\t\tleft: 50%;\n\t\t\tmargin-top: 0.2rem;\n\t\t\tmargin-left: -0.75rem;\n\t\t\ttransform: rotate(90deg);\n\t\t}\n\n\t\t&-enter .kt-drawer__container,\n\t\t&-leave-active .kt-drawer__container {\n\t\t\ttransform: translate(0, 20rem);\n\t\t}\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtDrawerVue from './KtDrawer.vue'\nimport { KottiDrawer } from './types'\n\nexport const KtDrawer = attachMeta(makeInstallable(KtDrawerVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\t'drawer-body': { description: null, scope: null },\n\t\t'drawer-footer': { description: null, scope: null },\n\t\t'drawer-header': { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Drawer',\n\t\tschema: KottiDrawer.propsSchema,\n\t},\n})\n","<script lang=\"ts\">\nimport type { PropType, Slot } from 'vue'\nimport { computed, defineComponent, h, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../../constants'\n\nexport default defineComponent({\n\tname: 'FieldHelpText',\n\tprops: {\n\t\thelpText: { default: null, type: String as PropType<string | null> },\n\t\thelpTextSlot: {\n\t\t\tdefault: undefined,\n\t\t\ttype: Function as PropType<Slot<undefined>>,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tconst helpTextContentRef = ref<Element | null>(null)\n\t\tconst helpTextTriggerRef = ref<Element | null>(null)\n\n\t\tuseTippy(\n\t\t\thelpTextTriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: helpTextContentRef.value ?? undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t})),\n\t\t)\n\n\t\treturn () =>\n\t\t\th(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\th(\n\t\t\t\t\t\t'i',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclass: 'yoco',\n\t\t\t\t\t\t\tref: helpTextTriggerRef,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[Yoco.Icon.CIRCLE_QUESTION],\n\t\t\t\t\t),\n\t\t\t\t\th(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tref: helpTextContentRef,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprops.helpTextSlot?.() ?? [props.helpText],\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t)\n\t},\n})\n</script>\n","import { z } from 'zod'\n\nimport { KottiField } from '../kotti-field/types'\n\nexport namespace KottiLabel {\n\texport const valueSchema = z.string().nullable()\n\texport type Value = z.output<typeof valueSchema>\n\n\texport const propsSchema = KottiField.propsSchema\n\t\t.pick({\n\t\t\thelpDescription: true,\n\t\t\thelpText: true,\n\t\t\tlabel: true,\n\t\t})\n\t\t.extend({\n\t\t\tinputId: z.string().nullable().default(null),\n\t\t\tisRequired: z.boolean().default(false),\n\t\t\tvalidationState: z\n\t\t\t\t.enum(['empty', 'error', 'success', 'warning'])\n\t\t\t\t.default('empty'),\n\t\t})\n\n\texport type Props = z.input<typeof propsSchema>\n\texport type PropsInternal = z.output<typeof propsSchema>\n}\n","<template>\n\t<div class=\"kt-label\">\n\t\t<div\n\t\t\tv-if=\"label || hasHelpText || $slots.helpText\"\n\t\t\tclass=\"kt-label__header\"\n\t\t>\n\t\t\t<component\n\t\t\t\t:is=\"inputId ? 'label' : 'legend'\"\n\t\t\t\tclass=\"kt-label__label\"\n\t\t\t\t:for=\"inputId ?? undefined\"\n\t\t\t\t@click=\"$emit('click', $event)\"\n\t\t\t>\n\t\t\t\t<span class=\"kt-label-header__label-text\" v-text=\"label\" />\n\t\t\t\t<span\n\t\t\t\t\tv-show=\"labelSuffix\"\n\t\t\t\t\t:class=\"labelSuffixClasses\"\n\t\t\t\t\tv-text=\"labelSuffix\"\n\t\t\t\t/>\n\t\t\t</component>\n\t\t\t<div v-if=\"$slots.helpText || hasHelpText\" class=\"kt-label__help-text\">\n\t\t\t\t<FieldHelpText\n\t\t\t\t\t:helpText=\"helpText\"\n\t\t\t\t\t:helpTextSlot=\"$slots.helpText ?? helpTextSlot\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"helpDescription\"\n\t\t\tclass=\"kt-label__help-description\"\n\t\t\tv-text=\"helpDescription\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport type { PropType, Slot } from 'vue'\n\nimport FieldHelpText from '../kotti-field/components/FieldHelpText.vue'\nimport { makeProps } from '../make-props'\n\nimport { KottiLabel } from './types'\n\nexport default defineComponent({\n\tname: 'KtLabel',\n\tcomponents: {\n\t\tFieldHelpText,\n\t},\n\tprops: {\n\t\t...makeProps(KottiLabel.propsSchema),\n\t\t/**\n\t\t * This is not exposed in the KottiLabel namespace because it should only be used for Kotti internals.\n\t\t */\n\t\thelpTextSlot: {\n\t\t\tdefault: undefined,\n\t\t\ttype: Function as PropType<Slot<undefined>>,\n\t\t},\n\t},\n\temits: ['click'],\n\tsetup(props) {\n\t\treturn {\n\t\t\thasHelpText: computed(\n\t\t\t\t() => Boolean(props.helpTextSlot) || props.helpText !== null,\n\t\t\t),\n\t\t\tlabelSuffix: computed(() => (props.isRequired ? '*' : null)),\n\t\t\tlabelSuffixClasses: computed(() => {\n\t\t\t\treturn {\n\t\t\t\t\t[`kt-label__header-label-suffix--${props.validationState}`]: true,\n\t\t\t\t\t'kt-label__header-label-suffix': true,\n\t\t\t\t}\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-label {\n\t&__header {\n\t\tdisplay: flex;\n\t\tgap: 0.2rem;\n\t\tfont-size: 0.9em;\n\t}\n\n\t&__help-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-size: 1.4em;\n\t\tcolor: var(--icon-02);\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: var(--text-02);\n\t}\n\n\t&__header-label-suffix {\n\t\tmargin-left: 0.2rem;\n\t}\n\n\t&__header-label-suffix--error {\n\t\tcolor: var(--support-error);\n\t}\n\n\t&__header-label-suffix--success {\n\t\tcolor: var(--support-success);\n\t}\n\n\t&__header-label-suffix--warning {\n\t\tcolor: var(--support-warning);\n\t}\n\n\t&__label-text {\n\t\tfont-weight: 500;\n\t}\n\n\t&__help-description {\n\t\tcolor: var(--text-03);\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtLabelVue from './KtLabel.vue'\nimport { KottiLabel } from './types'\n\nexport const KtLabel = attachMeta(makeInstallable(KtLabelVue), {\n\taddedVersion: '8.19.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\thelpText: { description: 'custom helpText support (HTML)', scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Label',\n\t\tschema: KottiLabel.propsSchema,\n\t},\n})\n","export const KT_FORM_CONTEXT = Symbol('KT_FORM_CONTEXT')\nexport const KT_FORM_SUBMIT_CONTEXT = Symbol('KT_FORM_SUBMIT_CONTEXT')\n","import type { KottiField } from './types'\n\nconst createErrorMessage = (\n\tprops: KottiField.PropsInternal,\n\tmessages: string[],\n) => `useField(${String(props.formKey ?? props.label)}): ${messages.join('\\n')}`\n\nclass DisabledSetValueCalledError extends Error {\n\tconstructor(props: KottiField.PropsInternal) {\n\t\tsuper(\n\t\t\tcreateErrorMessage(props, [\n\t\t\t\t'Attempted to setValue on a disabled field.',\n\t\t\t\t'Disabled fields should never call setValue as it causes unexpected behavior.',\n\t\t\t]),\n\t\t)\n\t\tthis.name = 'DisabledSetValueCalledError'\n\t}\n}\n\nclass FormKeyNotFoundError extends Error {\n\tconstructor(props: KottiField.PropsInternal) {\n\t\tsuper(\n\t\t\tcreateErrorMessage(props, [\n\t\t\t\t'Encountered a KtField without a value for the specified formKey inside a KtForm.',\n\t\t\t\t'This means that the field will not be able to determine the initial value.',\n\t\t\t]),\n\t\t)\n\t\tthis.name = 'FormKeyNotFoundError'\n\t}\n}\n\nclass ImplicitFormKeyNoneError extends Error {\n\tconstructor(props: KottiField.PropsInternal) {\n\t\tsuper(\n\t\t\tcreateErrorMessage(props, [\n\t\t\t\t'Encountered a KtField without a formKey inside a KtForm.',\n\t\t\t\t'This means that the field will not connect itself to the KtForm’s Context Values',\n\t\t\t\t'If this is not a mistake, please add formKey=\"NONE\" to your field and bind v-model explicitly.',\n\t\t\t]),\n\t\t)\n\t\tthis.name = 'ImplicitFormKeyNoneError'\n\t}\n}\n\nclass InvalidPropOutsideOfContextError extends Error {\n\tconstructor(\n\t\tprops: KottiField.PropsInternal,\n\t\tpropName: keyof KottiField.PropsInternal,\n\t) {\n\t\tsuper(\n\t\t\tcreateErrorMessage(props, [\n\t\t\t\t`Encountered a KtField with a “${propName}” outside a KtForm.`,\n\t\t\t\t'This is most likely a mistake and should be removed.',\n\t\t\t]),\n\t\t)\n\t\tthis.name = 'InvalidPropOutsideOfContextError'\n\t}\n}\n\nexport const ktFieldErrors = {\n\tDisabledSetValueCalledError,\n\tFormKeyNotFoundError,\n\tImplicitFormKeyNoneError,\n\tInvalidPropOutsideOfContextError,\n}\n","import cloneDeep from 'lodash/cloneDeep.js'\nimport type { Ref } from 'vue'\nimport {\n\tcomputed,\n\tinject,\n\tonBeforeMount,\n\tonMounted,\n\tonUnmounted,\n\treactive,\n\tref,\n\twatch,\n} from 'vue'\n\nimport { KT_FORM_CONTEXT } from '../kotti-form/constants'\nimport type { KottiForm } from '../kotti-form/types'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { isOrContainsEventTarget } from '../utilities'\n\nimport { FORM_KEY_NONE } from './constants'\nimport { ktFieldErrors } from './errors'\nimport { KottiField } from './types'\n\nlet ktFieldId = 1\n\nconst useDecoration = <DATA_TYPE>({\n\tprops,\n\tsupports,\n}: Pick<KottiField.Hook.Parameters<DATA_TYPE>, 'props' | 'supports'>) => {\n\treturn {\n\t\tleftIcon: computed(() => (supports.decoration ? props.leftIcon : null)),\n\t\tprefix: computed(() => (supports.decoration ? props.prefix : null)),\n\t\trightIcon: computed(() => (supports.decoration ? props.rightIcon : null)),\n\t\tshowVisibilityToggle: computed(() =>\n\t\t\tsupports.decoration ? props.showVisibilityToggle : false,\n\t\t),\n\t\tsuffix: computed(() => (supports.decoration ? props.suffix : null)),\n\t}\n}\n\nconst useInputProps = <DATA_TYPE>({\n\tcontext,\n\tisDisabled,\n\tprops,\n}: Pick<KottiField.Hook.Parameters<DATA_TYPE>, 'props'> & {\n\tcontext: KottiForm.Context | null\n\tisDisabled: Ref<boolean>\n}) => {\n\t// Generate unique id for input outside computed to avoid undesired reactivity\n\tconst id = String(++ktFieldId)\n\n\tconst formPath = computed(() => {\n\t\tif (context === null) return []\n\n\t\tif (props.formKey === null)\n\t\t\tthrow new ktFieldErrors.ImplicitFormKeyNoneError(props)\n\n\t\treturn props.formKey === FORM_KEY_NONE\n\t\t\t? [...context.formPath.value]\n\t\t\t: [...context.formPath.value, props.formKey]\n\t})\n\n\treturn {\n\t\tinputProps: computed(() => ({\n\t\t\t'data-test': props.dataTest ?? formPath.value.join('.'),\n\t\t\tdisabled: isDisabled.value,\n\t\t\tid: props.inputId ?? id,\n\t\t\ttabindex: props.tabIndex,\n\t\t})),\n\t}\n}\n\nconst useTexts = (props: KottiField.PropsInternal) => {\n\treturn {\n\t\thelpDescription: computed(() => props.helpDescription),\n\t\thelpText: computed(() => props.helpText),\n\t\tlabel: computed(() => props.label),\n\t}\n}\n\nconst useValue = <DATA_TYPE>({\n\tcontext,\n\temit,\n\tisDisabled,\n\tisEmpty,\n\tisLoading,\n\tprops,\n}: Pick<KottiField.Hook.Parameters<DATA_TYPE>, 'emit' | 'isEmpty' | 'props'> & {\n\tcontext: KottiForm.Context | null\n\tisDisabled: Ref<boolean>\n\tisLoading: Ref<boolean>\n}) => {\n\twatch(\n\t\t() => props.formKey,\n\t\t(newFormKey) => {\n\t\t\tif (context !== null && newFormKey === null)\n\t\t\t\tthrow new ktFieldErrors.ImplicitFormKeyNoneError(props)\n\n\t\t\tif (context === null && newFormKey !== null)\n\t\t\t\tthrow new ktFieldErrors.InvalidPropOutsideOfContextError(\n\t\t\t\t\tprops,\n\t\t\t\t\t'formKey',\n\t\t\t\t)\n\t\t},\n\t\t{ flush: 'sync', immediate: true },\n\t)\n\n\t// fetch value\n\n\tconst currentValue = computed((): DATA_TYPE => {\n\t\tif (context === null) return cloneDeep(props.modelValue)\n\n\t\tswitch (props.formKey) {\n\t\t\tcase FORM_KEY_NONE:\n\t\t\t\treturn cloneDeep(props.modelValue)\n\n\t\t\tcase null:\n\t\t\t\tthrow new ktFieldErrors.ImplicitFormKeyNoneError(props)\n\n\t\t\tdefault: {\n\t\t\t\tif (!(props.formKey in context.values.value))\n\t\t\t\t\tthrow new ktFieldErrors.FormKeyNotFoundError(props)\n\n\t\t\t\treturn context.values.value[props.formKey] as DATA_TYPE\n\t\t\t}\n\t\t}\n\t})\n\n\treturn {\n\t\tcurrentValue,\n\t\tisEmpty: computed(() => isEmpty(currentValue.value)),\n\t\t/**\n\t\t * setValue\n\t\t * @param newValue the value to set\n\t\t * @param options defines forceUpdate to set value even when the field is disabled\n\t\t */\n\t\tsetValue: ref((newValue: unknown, options?: { forceUpdate: boolean }) => {\n\t\t\tif ((isDisabled.value || isLoading.value) && !options?.forceUpdate)\n\t\t\t\tthrow new ktFieldErrors.DisabledSetValueCalledError(props)\n\n\t\t\tif (\n\t\t\t\tcontext === null ||\n\t\t\t\tprops.formKey === null ||\n\t\t\t\tprops.formKey === FORM_KEY_NONE\n\t\t\t) {\n\t\t\t\temit('update:modelValue', newValue)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tcontext.setValue(props.formKey, newValue)\n\t\t}),\n\t}\n}\n\nconst useValidation = <DATA_TYPE>({\n\tcontext,\n\tcurrentValue,\n\thideValidation,\n\tisEmpty,\n\tprops,\n}: Pick<KottiField.Hook.Parameters<DATA_TYPE>, 'props'> &\n\tPick<\n\t\tKottiField.Hook.ReturnsWithRefs<DATA_TYPE>,\n\t\t'currentValue' | 'isEmpty'\n\t> & {\n\t\tcontext: KottiForm.Context | null\n\t\thideValidation: Ref<KottiField.InheritablePropsInternal['hideValidation']>\n\t}) => {\n\tconst translations = useTranslationNamespace('KtFields')\n\n\tconst isMissingRequiredField = computed(\n\t\t(): boolean => !props.isOptional && isEmpty.value,\n\t)\n\n\treturn {\n\t\thideValidation,\n\t\t// FIXME: Write unit test to figure out if props.isDisabled affects this function or if a computed() is necessary\n\t\tvalidation: computed((): KottiField.Validation.Result => {\n\t\t\tconst customValidation = (() => {\n\t\t\t\tif (!context && props.formKey)\n\t\t\t\t\tthrow new ktFieldErrors.InvalidPropOutsideOfContextError(\n\t\t\t\t\t\tprops,\n\t\t\t\t\t\t'formKey',\n\t\t\t\t\t)\n\n\t\t\t\tif (\n\t\t\t\t\tcontext &&\n\t\t\t\t\tprops.formKey !== null &&\n\t\t\t\t\tprops.formKey !== FORM_KEY_NONE &&\n\t\t\t\t\tprops.formKey in context.validators.value\n\t\t\t\t)\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\treturn context.validators.value[props.formKey]!(currentValue.value)\n\n\t\t\t\treturn props.validator(currentValue.value)\n\t\t\t})()\n\n\t\t\treturn isMissingRequiredField.value\n\t\t\t\t? customValidation.type === 'error'\n\t\t\t\t\t? customValidation\n\t\t\t\t\t: { text: translations.value.requiredMessage, type: 'error' }\n\t\t\t\t: customValidation\n\t\t}),\n\t}\n}\n\n/**\n * Implements KottiField.InheritablePropsInternal\n * Prioritizes the field props, the context, and the passed default, respectively\n */\nconst useInheritableProperties = <DATA_TYPE>({\n\tcontext,\n\tprops,\n}: Pick<KottiField.Hook.Parameters<DATA_TYPE>, 'props'> & {\n\tcontext: KottiForm.Context | null\n}) => {\n\t/**\n\t * Get a single property from either the KtFieldComponents or the KtFormContext\n\t * Gives priority to the KtFieldComponents and implements default fallbacks\n\t */\n\tconst useShared = <KEY extends keyof KottiField.InheritablePropsInternal>(\n\t\tkey: KEY,\n\t\tdefaultValue: KottiField.InheritablePropsInternal[KEY],\n\t) =>\n\t\tcomputed((): KottiField.InheritablePropsInternal[KEY] => {\n\t\t\tif (props[key]) return props[key]\n\n\t\t\tif (context?.fieldInheritableProps.value[key])\n\t\t\t\treturn context.fieldInheritableProps.value[key]\n\n\t\t\treturn defaultValue\n\t\t})\n\n\tconst isLoading = useShared('isLoading', false)\n\n\treturn {\n\t\thideClear: useShared('hideClear', false),\n\t\thideValidation: computed(\n\t\t\t() => isLoading.value || useShared('hideValidation', false).value,\n\t\t),\n\t\tisDisabled: useShared('isDisabled', false),\n\t\tisLoading,\n\t\tsize: useShared('size', KottiField.Size.MEDIUM),\n\t}\n}\n\n/**\n * hook into lifecycle events\n */\nconst useNotifyContext = <DATA_TYPE>({\n\tcontext,\n\tfield,\n}: {\n\tcontext: KottiForm.Context | null\n\tfield: KottiField.Hook.Returns<DATA_TYPE>\n}) => {\n\tonMounted(() => {\n\t\tif (context) context.onAddField(field)\n\t})\n\n\tonUnmounted(() => {\n\t\tif (context) context.onRemoveField(field)\n\t})\n}\n\nexport const useField = <DATA_TYPE>({\n\temit,\n\tisEmpty,\n\tprops,\n\tsupports,\n}: KottiField.Hook.Parameters<DATA_TYPE>): KottiField.Hook.Returns<DATA_TYPE> => {\n\tconst context = inject<KottiForm.Context | null>(KT_FORM_CONTEXT, null)\n\n\tconst sharedProperties = useInheritableProperties({ context, props })\n\tconst values = useValue({\n\t\tcontext,\n\t\temit,\n\t\tisDisabled: sharedProperties.isDisabled,\n\t\tisEmpty,\n\t\tisLoading: sharedProperties.isLoading,\n\t\tprops,\n\t})\n\n\t// export\n\n\tconst field = reactive<KottiField.Hook.ReturnsWithRefs<DATA_TYPE>>({\n\t\t...sharedProperties,\n\t\t...useDecoration({ props, supports }),\n\t\t...useInputProps({\n\t\t\tcontext,\n\t\t\tisDisabled: sharedProperties.isDisabled,\n\t\t\tprops,\n\t\t}),\n\t\t...useTexts(props),\n\t\t...useValidation({\n\t\t\tcontext,\n\t\t\tcurrentValue: values.currentValue,\n\t\t\thideValidation: sharedProperties.hideValidation,\n\t\t\tisEmpty: values.isEmpty,\n\t\t\tprops,\n\t\t}),\n\t\t...values,\n\t\thasClear: computed(\n\t\t\t() => supports.clear && !sharedProperties.hideClear.value,\n\t\t),\n\t\thideClear: computed(\n\t\t\t() =>\n\t\t\t\tvalues.isEmpty.value ||\n\t\t\t\tsharedProperties.isDisabled.value ||\n\t\t\t\t(supports.clear ? sharedProperties.hideClear.value : true),\n\t\t),\n\t\tisBorderless: computed(() => supports.borderless && props.isBorderless),\n\t\tisOptional: computed(() => props.isOptional),\n\t}) as KottiField.Hook.Returns<DATA_TYPE>\n\n\tuseNotifyContext({ context, field })\n\n\treturn field\n}\n\nexport const useInput = (\n\tfieldId: string,\n): {\n\tclickInput: () => void\n\tfocusInput: () => void\n} => {\n\treturn {\n\t\tclickInput: () => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-query-selector\n\t\t\tconst inputEl = document.getElementById(fieldId)\n\t\t\tif (!inputEl) throw new Error('wtf')\n\t\t\tinputEl.click()\n\t\t},\n\t\tfocusInput: () => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-query-selector\n\t\t\tconst inputEl = document.getElementById(fieldId)\n\t\t\tif (!inputEl) throw new Error('wtf 2')\n\t\t\tinputEl.focus()\n\t\t},\n\t}\n}\n\n/**\n * Vue doesn't support controlled input fields without explicitly re-rendering.\n * Therefore, in case nothing changed, we may need to re-render\n *\n * @description Vue doesn't alter native html input behavior; that is, the emitted value is immediately bound to :value\n * We need to force the component to re-render with the value that we actually last wanted to bind to `:value`\n * The emitted value doesn't immediately have to be the actually bound value; making the input `controlled`\n */\nexport const useForceUpdate = (): {\n\tforceUpdate: () => void\n\tforceUpdateKey: Ref<number>\n} => {\n\tconst forceUpdateKey = ref(0)\n\n\treturn {\n\t\tforceUpdate: () => {\n\t\t\t// HACK: This basically just updates some arbitrary ref so that vue thinks the input element needs to be re-rendered\n\t\t\tforceUpdateKey.value++\n\t\t},\n\t\tforceUpdateKey,\n\t}\n}\n\nexport const useKtFieldRef = (): Ref<{\n\tinputContainerRef: HTMLDivElement\n\tinputContainerWrapperRef: HTMLDivElement\n} | null> => {\n\t/**\n\t * both inputContainerRef and inputContainerWrapperRef\n\t * are template refs on KtField.vue\n\t */\n\tconst ktFieldRef = ref<{\n\t\tinputContainerRef: Ref<HTMLDivElement>\n\t\tinputContainerWrapperRef: Ref<HTMLDivElement>\n\t} | null>(null)\n\n\treturn ktFieldRef\n}\n\nexport const useEmitBlur = <T>({\n\temit,\n\tfield,\n\tfieldTarget,\n\tfindEventTarget,\n\tvalueOverride,\n}: {\n\temit: (event: 'blur', value: T | null) => void\n\tfield: KottiField.Hook.Returns<T>\n\tfieldTarget: Ref<Array<HTMLElement | null> | HTMLElement | null>\n\tfindEventTarget?: (target: EventTarget | null) => EventTarget | null\n\tvalueOverride?: T | null\n}): void => {\n\t/**\n\t * last element to capture the click or focus event\n\t */\n\tconst lastEventTarget = ref<EventTarget | null>(null)\n\n\tconst isFieldTargeted = (target: Event['target'] | null): boolean =>\n\t\tArray.isArray(fieldTarget.value)\n\t\t\t? fieldTarget.value.some((ft) => isOrContainsEventTarget(ft, target))\n\t\t\t: isOrContainsEventTarget(fieldTarget.value, target)\n\n\tconst onClickOrFocusChange = (event: Event) => {\n\t\tif (event.target === null || field.isDisabled) return\n\n\t\tconst eventTarget = findEventTarget?.(event.target) ?? event.target\n\n\t\tconst wasFieldTargetedBefore = isFieldTargeted(lastEventTarget.value)\n\t\tconst isFieldTargetedNow = isFieldTargeted(eventTarget)\n\n\t\tif (!isFieldTargetedNow && wasFieldTargetedBefore) {\n\t\t\tif (valueOverride !== undefined) {\n\t\t\t\temit('blur', field.currentValue === null ? null : valueOverride)\n\t\t\t} else {\n\t\t\t\temit('blur', field.currentValue)\n\t\t\t}\n\t\t}\n\n\t\tlastEventTarget.value = eventTarget\n\t}\n\n\tonBeforeMount(() => {\n\t\twindow.addEventListener('click', onClickOrFocusChange, true)\n\t\twindow.addEventListener('focus', onClickOrFocusChange, true)\n\t})\n\n\tonUnmounted(() => {\n\t\twindow.removeEventListener('click', onClickOrFocusChange)\n\t\twindow.removeEventListener('focus', onClickOrFocusChange)\n\t})\n}\n","<template>\n\t<div class=\"kt-field\">\n\t\t<component\n\t\t\t:is=\"useFieldset ? 'fieldset' : 'div'\"\n\t\t\t:class=\"wrapperClasses\"\n\t\t\t@click=\"$emit('click', $event)\"\n\t\t\t@mousedown=\"$emit('mousedown', $event)\"\n\t\t>\n\t\t\t<KtLabel\n\t\t\t\tv-show=\"showLabel\"\n\t\t\t\t:helpDescription=\"field.helpDescription\"\n\t\t\t\t:helpText=\"field.helpText\"\n\t\t\t\t:helpTextSlot=\"helpTextSlot\"\n\t\t\t\t:inputId=\"useFieldset ? undefined : inputId\"\n\t\t\t\t:isRequired=\"!field.isOptional\"\n\t\t\t\t:label=\"field.label\"\n\t\t\t\t:validationState=\"validationState\"\n\t\t\t\t@click=\"onClickLabel\"\n\t\t\t/>\n\n\t\t\t<KtLoading\n\t\t\t\tv-if=\"field.isLoading\"\n\t\t\t\tclass=\"kt-field__input-container-wrapper-loading\"\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tv-show=\"!field.isLoading\"\n\t\t\t\tref=\"inputContainerWrapperRef\"\n\t\t\t\tclass=\"kt-field__input-container-wrapper\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"$slots['container-left']\"\n\t\t\t\t\tclass=\"kt-field__input-container__prefix\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"container-left\" />\n\t\t\t\t</div>\n\t\t\t\t<slot name=\"container\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tref=\"inputContainerRef\"\n\t\t\t\t\t\tclass=\"kt-field__input-container\"\n\t\t\t\t\t\t@click=\"focusInput\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"field.prefix\"\n\t\t\t\t\t\t\t:class=\"affixClasses(['left'])\"\n\t\t\t\t\t\t\tv-text=\"field.prefix\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"field.leftIcon\"\n\t\t\t\t\t\t\t:class=\"iconClasses('input-container', ['left'])\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i class=\"yoco\" v-text=\"field.leftIcon\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"kt-field__input-container__slot\">\n\t\t\t\t\t\t\t<slot name=\"default\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t:classes=\"iconClasses('input-container', ['interactive'])\"\n\t\t\t\t\t\t\t:handleClear=\"handleClear\"\n\t\t\t\t\t\t\t:hasClear=\"field.hasClear\"\n\t\t\t\t\t\t\tname=\"actionIcon\"\n\t\t\t\t\t\t\t:showClear=\"!field.hideClear\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-if=\"!field.hideClear\"\n\t\t\t\t\t\t\t\t:class=\"iconClasses('input-container', ['interactive'])\"\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t@click.stop=\"handleClear\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.CLOSE\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"field.showVisibilityToggle\"\n\t\t\t\t\t\t\t:class=\"iconClasses('input-container', ['right', 'interactive'])\"\n\t\t\t\t\t\t\t@click.stop=\"handleVisibilityChange\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\tv-if=\"valueVisibility\"\n\t\t\t\t\t\t\t\tclass=\"yoco\"\n\t\t\t\t\t\t\t\tv-text=\"Yoco.Icon.EYE_SLASHED\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<i v-else class=\"yoco\" v-text=\"Yoco.Icon.EYE\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"field.rightIcon\"\n\t\t\t\t\t\t\t:class=\"iconClasses('input-container', ['right'])\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i class=\"yoco\" v-text=\"field.rightIcon\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"field.suffix\"\n\t\t\t\t\t\t\t:class=\"affixClasses(['right'])\"\n\t\t\t\t\t\t\tv-text=\"field.suffix\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"$slots['container-right']\"\n\t\t\t\t\tclass=\"kt-field__input-container__suffix\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"container-right\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"!field.isLoading && showValidation && validationText !== null\"\n\t\t\t\tclass=\"kt-field__validation-text\"\n\t\t\t>\n\t\t\t\t<i class=\"yoco\" v-text=\"validationTextIcon\" />\n\t\t\t\t{{ validationText }}\n\t\t\t</div>\n\t\t</component>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport debounce from 'lodash/debounce.js'\nimport type { PropType, Slot } from 'vue'\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtLabel } from '../kotti-label'\nimport { KtLoading } from '../kotti-loading'\n\nimport FieldHelpText from './components/FieldHelpText.vue'\nimport { useInput } from './hooks'\nimport type { KottiField } from './types'\n\nconst LABEL_CLICK_DEBOUNCE = 200\n\nconst SINGLE_MOUSE_CLICK = 1\n\nexport default defineComponent({\n\tname: 'KtField',\n\tcomponents: { FieldHelpText, KtLabel, KtLoading },\n\tprops: {\n\t\tdebounceLabelClick: { default: false, type: Boolean },\n\t\tfield: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<KottiField.Hook.Returns<unknown>>,\n\t\t},\n\t\t/**\n\t\t * What’s the appropriate value for an empty field of this data type?\n\t\t * Used when clearing the field. Most likely either null or []\n\t\t */\n\t\tgetEmptyValue: { default: null, type: Function as PropType<() => unknown> },\n\t\thelpTextSlot: {\n\t\t\tdefault: undefined,\n\t\t\ttype: Function as PropType<Slot<undefined>>,\n\t\t},\n\t\tisRange: { default: false, type: Boolean },\n\t\tuseFieldset: { default: false, type: Boolean },\n\t},\n\temits: ['click', 'mousedown', 'visibilityChange'],\n\tsetup(props, { emit }) {\n\t\tconst inputId = computed(() =>\n\t\t\tprops.isRange\n\t\t\t\t? `${props.field.inputProps.id}-start`\n\t\t\t\t: props.field.inputProps.id,\n\t\t)\n\t\tconst valueVisibility = ref(false)\n\t\tconst validationType = computed(() => props.field.validation.type)\n\t\tconst showValidation = computed(\n\t\t\t() => !props.field.hideValidation && validationType.value !== 'empty',\n\t\t)\n\n\t\tconst { clickInput, focusInput } = useInput(inputId.value)\n\n\t\tconst debouncedLabelClick = debounce((event: MouseEvent) => {\n\t\t\tif (event.detail === SINGLE_MOUSE_CLICK) {\n\t\t\t\tfocusInput()\n\t\t\t\tclickInput()\n\t\t\t}\n\t\t}, LABEL_CLICK_DEBOUNCE)\n\n\t\treturn {\n\t\t\taffixClasses: computed(() => (modifications: string[]) => [\n\t\t\t\t'kt-field__input-container__affix',\n\t\t\t\t...modifications.map(\n\t\t\t\t\t(modification) => `kt-field__input-container__affix--${modification}`,\n\t\t\t\t),\n\t\t\t]),\n\t\t\tfocusInput,\n\t\t\thandleClear: () => {\n\t\t\t\t/**\n\t\t\t\t * useSupports hook returns null if hideClear is not supported on ktField component\n\t\t\t\t */\n\t\t\t\tif (props.field.hideClear === null)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'KtField: hideClear is unsupported and yet handleClear was called',\n\t\t\t\t\t)\n\n\t\t\t\tprops.field.setValue(props.getEmptyValue())\n\t\t\t\tfocusInput()\n\t\t\t},\n\t\t\thandleVisibilityChange: () => {\n\t\t\t\tif (props.field.showVisibilityToggle) emit('visibilityChange')\n\t\t\t\tvalueVisibility.value = !valueVisibility.value\n\t\t\t},\n\t\t\ticonClasses: computed(\n\t\t\t\t() => (element: string, modifications: string[]) => [\n\t\t\t\t\t`kt-field__${element}__icon`,\n\t\t\t\t\t...modifications.map(\n\t\t\t\t\t\t(modification) => `kt-field__${element}__icon--${modification}`,\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t),\n\t\t\tinputId,\n\t\t\t/**\n\t\t\t * HACK: This template ref is used by child components, refactor with caution if needed\n\t\t\t */\n\t\t\tinputContainerRef: ref<HTMLDivElement | null>(null),\n\t\t\t/**\n\t\t\t * HACK: This template ref is used by child components, refactor with caution if needed\n\t\t\t */\n\t\t\tinputContainerWrapperRef: ref<HTMLDivElement | null>(null),\n\t\t\tonClickLabel: (event: MouseEvent) => {\n\t\t\t\tconst isDoubleClick = event.detail > SINGLE_MOUSE_CLICK\n\n\t\t\t\tif (props.debounceLabelClick) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tdebouncedLabelClick(event)\n\t\t\t\t} else if (isDoubleClick) {\n\t\t\t\t\t// allow label to be selected\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t},\n\t\t\tshowLabel: computed(() => {\n\t\t\t\tconst {\n\t\t\t\t\tfield: { helpDescription, helpText, label },\n\t\t\t\t\thelpTextSlot,\n\t\t\t\t} = props\n\t\t\t\treturn (\n\t\t\t\t\tlabel !== null ||\n\t\t\t\t\thelpDescription !== null ||\n\t\t\t\t\thelpText !== null ||\n\t\t\t\t\thelpTextSlot\n\t\t\t\t)\n\t\t\t}),\n\t\t\tshowValidation,\n\t\t\tvalidationState: computed(() =>\n\t\t\t\tshowValidation.value && !props.field.isOptional && props.field.isEmpty\n\t\t\t\t\t? 'error'\n\t\t\t\t\t: 'empty',\n\t\t\t),\n\t\t\tvalidationText: computed(() =>\n\t\t\t\tprops.field.validation.type === 'empty'\n\t\t\t\t\t? null\n\t\t\t\t\t: props.field.validation.text,\n\t\t\t),\n\t\t\tvalidationTextIcon: computed(\n\t\t\t\t() =>\n\t\t\t\t\t({\n\t\t\t\t\t\tempty: null,\n\t\t\t\t\t\terror: Yoco.Icon.CIRCLE_CROSS,\n\t\t\t\t\t\tsuccess: Yoco.Icon.CIRCLE_CHECK,\n\t\t\t\t\t\twarning: Yoco.Icon.CIRCLE_ATTENTION,\n\t\t\t\t\t})[validationType.value],\n\t\t\t),\n\t\t\tvalueVisibility,\n\t\t\twrapperClasses: computed(() => {\n\t\t\t\tconst classes = ['kt-field__wrapper']\n\n\t\t\t\tif (props.field.isDisabled) classes.push('kt-field__wrapper--disabled')\n\t\t\t\tif (props.field.isBorderless)\n\t\t\t\t\tclasses.push('kt-field__wrapper--is-borderless')\n\t\t\t\t// eslint-disable-next-line unicorn/explicit-length-check -- size is an enum, and thus a false positive\n\t\t\t\tif (props.field.size)\n\t\t\t\t\tclasses.push(`kt-field__wrapper--is-${props.field.size}`)\n\n\t\t\t\tclasses.push(\n\t\t\t\t\t`kt-field__wrapper--is-validation-${\n\t\t\t\t\t\tshowValidation.value ? validationType.value : 'empty'\n\t\t\t\t\t}`,\n\t\t\t\t)\n\n\t\t\t\treturn classes\n\t\t\t}),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<!-- FIXME: https://github.com/3YOURMIND/kotti/issues/829 should this be implemented,\nwe would be able to extend on demand instead of unscoping all field classes -->\n<style lang=\"scss\">\n@import './mixins';\n@import './templates';\n\n:root {\n\t--field-border-radius: 4px;\n}\n\n/* stylelint-disable selector-class-pattern */\n.kt-field {\n\t&:not(:last-child) {\n\t\tmargin-bottom: 0.8rem;\n\t}\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\n\t\t> :not(:last-child) {\n\t\t\tmargin-bottom: 0.4rem;\n\t\t}\n\n\t\t@extend %no-outline;\n\t\t@include sizes;\n\t\t@include input-colors;\n\n\t\t@include validations using ($type) {\n\t\t\t&:not(.kt-field__wrapper--disabled) {\n\t\t\t\t@if $type != empty {\n\t\t\t\t\t&.kt-field__wrapper--is-borderless {\n\t\t\t\t\t\t.kt-field__input-container {\n\t\t\t\t\t\t\tbackground-color: rgb(\n\t\t\t\t\t\t\t\tfrom var(--support-#{$type}-bg) r g b / 25%\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t&:not(.kt-field__wrapper--is-borderless) {\n\t\t\t\t\t\t.kt-field__input-container {\n\t\t\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t.kt-field__validation-text {\n\t\t\t\t\t\tcolor: var(--support-#{$type});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.kt-field__input-container:focus-within {\n\t\t\t\t\t--support-empty-light: var(--interactive-05);\n\n\t\t\t\t\tbackground-color: unset;\n\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t\tbox-shadow: 0 0 0 1px var(--support-#{$type}-light);\n\t\t\t\t}\n\n\t\t\t\t.kt-field__input-container:not(:focus-within):hover {\n\t\t\t\t\t--support-empty-bg: var(--interactive-02-hover);\n\t\t\t\t\t--support-empty-light: var(--interactive-04);\n\n\t\t\t\t\tbackground-color: var(--support-#{$type}-bg);\n\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&--disabled {\n\t\t\t* {\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.kt-field__input-container {\n\t\t\t\tborder: 1px solid var(--ui-01);\n\n\t\t\t\t&__affix {\n\t\t\t\t\tcolor: var(--text-05);\n\t\t\t\t}\n\n\t\t\t\t&__icon {\n\t\t\t\t\tcolor: var(--text-05);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&--is-borderless {\n\t\t\t.kt-field__input-container {\n\t\t\t\tbackground-color: rgb(from var(--ui-02) r g b / 25%);\n\t\t\t\tborder-color: transparent;\n\t\t\t}\n\t\t}\n\t}\n\n\tfieldset {\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tborder: 0;\n\t}\n\n\t&__input-container-wrapper {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-2);\n\t\talign-items: stretch;\n\t}\n\n\t&__input-container {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\talign-items: center;\n\t\tpadding: 0 0.8rem;\n\t\tbackground-color: var(--ui-background);\n\t\tborder: 1px solid var(--ui-02);\n\t\tborder-radius: var(--field-border-radius);\n\n\t\t// The actual input\n\t\t&__slot {\n\t\t\tflex: 1;\n\t\t}\n\n\t\t// Prefix and Suffix\n\t\t&__affix {\n\t\t\tcolor: var(--text-02);\n\t\t\tcursor: default;\n\n\t\t\t&--left {\n\t\t\t\tpadding-right: 0.8rem;\n\t\t\t\tmargin-right: 0.8rem;\n\t\t\t\tborder-right: 1px solid var(--ui-02);\n\t\t\t}\n\n\t\t\t&--right {\n\t\t\t\tpadding-left: 0.8rem;\n\t\t\t\tmargin-left: 0.8rem;\n\t\t\t\tborder-left: 1px solid var(--ui-02);\n\t\t\t}\n\t\t}\n\n\t\t// placeholders for slots\n\t\t&__prefix,\n\t\t&__suffix {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t&__icon {\n\t\t\tcolor: var(--icon-02);\n\n\t\t\t.yoco {\n\t\t\t\tdisplay: flex;\n\t\t\t\tfont-size: 1.1em;\n\t\t\t}\n\n\t\t\t&--left,\n\t\t\t&--right {\n\t\t\t\tcursor: default;\n\t\t\t}\n\n\t\t\t&--left {\n\t\t\t\ttransform: translateX(-0.2rem);\n\t\t\t}\n\n\t\t\t&--right {\n\t\t\t\ttransform: translateX(0.2rem);\n\t\t\t}\n\n\t\t\t&--interactive {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__validation-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: var(--text-03);\n\n\t\t> i {\n\t\t\tmargin-right: 0.1rem;\n\t\t}\n\t}\n}\n\n/* stylelint-enable selector-class-pattern */\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFieldVue from './KtField.vue'\nimport { KottiField } from './types'\n\nexport const KtField = attachMeta(makeInstallable(KtFieldVue), {\n\taddedVersion: '2.0.0',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=415%3A1',\n\t},\n\tslots: {\n\t\tcontainer: {\n\t\t\tdescription: 'useful for complex fields',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Field',\n\t\tschema: KottiField.propsSchema,\n\t},\n})\n\nexport * from './constants'\n","export const FIELD_META_BASE_SLOTS = {\n\thelpText: { description: 'custom helpText support (HTML)', scope: null },\n}\n","import type { KottiField } from '../kotti-field/types'\nimport { DECIMAL_SEPARATORS_CHARACTER_SET } from '../utilities'\n\nexport const KOTTI_FIELD_CURRENCY_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n\nexport const VALID_REGEX = new RegExp(\n\t`^[-]?[0-9]*${DECIMAL_SEPARATORS_CHARACTER_SET}?[0-9]*$`,\n)\n","import Big from 'big.js'\n\nimport type { DecimalSeparator } from '../types/decimal-separator'\nimport { DECIMAL_SEPARATORS_CHARACTER_SET } from '../utilities'\n\nexport const toNumber = <T extends string | null>(\n\tvalue: T,\n): T extends null ? null : number =>\n\t(value === null\n\t\t? null\n\t\t: Number.parseFloat(\n\t\t\t\t// `.` is the only accepted decimal place by parseFloat\n\t\t\t\tvalue.replace(new RegExp(DECIMAL_SEPARATORS_CHARACTER_SET), '.'),\n\t\t\t)) as T extends null ? null : number\n\nexport const truncate = (value: number, decimalPlaces: number): Big =>\n\tBig(value).round(decimalPlaces, Big.roundDown)\n\nexport const replaceDecimalSeparator = <T extends string | null>(\n\tstring: T,\n\tdecimalSeparator: DecimalSeparator,\n): T extends null ? null : string =>\n\t(string?.replace(\n\t\tnew RegExp(DECIMAL_SEPARATORS_CHARACTER_SET),\n\t\tdecimalSeparator,\n\t) ?? null) as T extends null ? null : string\n\nexport const toFixedPrecisionString = (\n\tstring: string | null,\n\tdecimalPlaces: number,\n): string | null => {\n\tconst number = toNumber(string)\n\tif (number === null) return null\n\n\tif (Number.isNaN(number)) return null\n\n\treturn truncate(number, decimalPlaces).toFixed(decimalPlaces)\n}\n","import { VALID_REGEX } from './constants'\nimport { toFixedPrecisionString } from './utilities'\n\n/**\n * Note: function assumes that the decimal separator for\n * `value` & `oldValue` is `.`\n *\n * The function assumes a value that passes VALID_REGEX\n * It may work for some strings, and return a valid number\n * (e.g. value: 'a', decimalPlaces: 2, returned value: '0.00')\n * as a side-effect of using `toFixedPrecisionString`,\n * but this is undefined behavior.\n */\nexport const formatCurrencyUserInput = ({\n\tdecimalPlaces,\n\tvalue,\n}: {\n\tdecimalPlaces: number\n\tvalue: string\n}): string => {\n\tif (!VALID_REGEX.test(value))\n\t\tthrow new Error(\n\t\t\t`KtFieldCurrency: formatCurrencyUserInput recieved invalid value \"${value}\".`,\n\t\t)\n\n\tconst isNegativeValue = value.startsWith('-')\n\tconst strippedSign = value.replace(/-/, '')\n\t// enforces at least as many digits as (decimal places + 1) (aka `0.00`)\n\tconst paddedString = `${'0'.repeat(decimalPlaces + 1)}${strippedSign}`\n\n\tconst withoutDecimalPoint = paddedString.replace('.', '')\n\n\tconst relocatedDecimalPoint = [\n\t\t...(isNegativeValue ? ['-'] : []),\n\t\twithoutDecimalPoint.slice(0, -decimalPlaces),\n\t\t'.',\n\t\twithoutDecimalPoint.slice(-decimalPlaces),\n\t].join('')\n\n\t// to remove leading zeroes (from padding or from user)\n\treturn toFixedPrecisionString(relocatedDecimalPoint, decimalPlaces) ?? ''\n}\n","<template>\n\t<KtField\n\t\tref=\"ktFieldRef\"\n\t\t:field=\"modifiedField\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t>\n\t\t<input\n\t\t\tref=\"inputRef\"\n\t\t\tv-bind=\"inputProps\"\n\t\t\t@input=\"onInput\"\n\t\t\t@keyup=\"onKeyup\"\n\t\t/>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport type { InputHTMLAttributes, UnwrapRef } from 'vue'\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtField } from '../kotti-field'\nimport {\n\tuseEmitBlur,\n\tuseField,\n\tuseForceUpdate,\n\tuseKtFieldRef,\n} from '../kotti-field/hooks'\nimport { useI18nContext } from '../kotti-i18n/hooks'\nimport type { KottiI18n } from '../kotti-i18n/types'\nimport { makeProps } from '../make-props'\nimport { DecimalSeparator } from '../types/decimal-separator'\nimport { isNumberInRange } from '../utilities'\n\nimport { KOTTI_FIELD_CURRENCY_SUPPORTS, VALID_REGEX } from './constants'\nimport { formatCurrencyUserInput } from './input-formatter'\nimport { KottiFieldCurrency } from './types'\nimport {\n\treplaceDecimalSeparator,\n\ttoFixedPrecisionString,\n\ttoNumber,\n\ttruncate,\n} from './utilities'\n\n/**\n * flag to decide to set field to null,\n * when user deletes twice in a row,\n * after already getting to 0.00\n */\nconst shouldClear = (newValue: string, oldValue: string | null) => {\n\tconst isOldValueZeroOrNull = !toNumber(oldValue)\n\tconst isNewValueZero = !toNumber(newValue)\n\tconst isDeleting =\n\t\tnewValue.length < (oldValue?.length ?? Number.MIN_SAFE_INTEGER)\n\n\treturn isOldValueZeroOrNull && isNewValueZero && isDeleting\n}\n\nexport default defineComponent({\n\tname: 'KtFieldCurrency',\n\tcomponents: { KtField },\n\tprops: makeProps(KottiFieldCurrency.propsSchema),\n\temits: ['blur', 'keyup', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldCurrency.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_CURRENCY_SUPPORTS,\n\t\t})\n\n\t\tconst i18nContext = useI18nContext()\n\t\tconst ktFieldRef = useKtFieldRef()\n\n\t\tuseEmitBlur({\n\t\t\temit,\n\t\t\tfield,\n\t\t\tfieldTarget: computed(() => ktFieldRef.value?.inputContainerRef ?? null),\n\t\t})\n\n\t\tconst currencyFormat = computed<KottiI18n.CurrencyMap[string]>(() => {\n\t\t\tconst result = i18nContext.currencyMap[props.currency]\n\n\t\t\tif (!result)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`KtFieldCurrency: couldn't find key: ${props.currency} in KtI18nContext.Props['currencyMap']`,\n\t\t\t\t)\n\t\t\treturn result\n\t\t})\n\n\t\t/**\n\t\t * reference to input element, in order to track cursor position\n\t\t * prior to feeding the value back to the input, which resets the position to the end.\n\t\t */\n\t\tconst inputRef = ref<HTMLInputElement | null>(null)\n\t\tconst userCursorPositionFromRight = ref<number | null>(null)\n\n\t\tconst setCursorPosition = (position: number | null) => {\n\t\t\tvoid nextTick(() => {\n\t\t\t\tif (position === null || inputRef.value === null) return\n\n\t\t\t\tconst newPosition = inputRef.value.value.length - position\n\t\t\t\tinputRef.value.setSelectionRange(newPosition, newPosition)\n\t\t\t})\n\t\t}\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\t\tconst internalStringValue = ref('')\n\n\t\twatch(\n\t\t\t(): [KottiFieldCurrency.ModelValue, KottiI18n.CurrencyMap[string]] => [\n\t\t\t\tfield.currentValue,\n\t\t\t\tcurrencyFormat.value,\n\t\t\t],\n\t\t\t([newValue, newFormat]) => {\n\t\t\t\tconst newNumber = toNumber(newValue)\n\t\t\t\tif (newNumber === null) return\n\n\t\t\t\tconst newDecimalPlaces = newFormat.decimalPlaces\n\n\t\t\t\tconst isEqualPrecision = truncate(newNumber, newDecimalPlaces).eq(\n\t\t\t\t\tnewNumber,\n\t\t\t\t)\n\n\t\t\t\tif (!isEqualPrecision)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t`KtFieldCurrency: field.currentValue “${String(newValue)}” has more precision than is allowed (${String(newDecimalPlaces)}).`,\n\t\t\t\t\t\t\t'This is an issue because there would be a difference between displayed and actual value',\n\t\t\t\t\t\t].join(' '),\n\t\t\t\t\t)\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\twatch(\n\t\t\t(): [\n\t\t\t\tKottiFieldCurrency.ModelValue,\n\t\t\t\tUnwrapRef<KottiI18n.Context['numberFormat']>['decimalSeparator'],\n\t\t\t\ttypeof currencyFormat,\n\t\t\t] => [\n\t\t\t\tfield.currentValue,\n\t\t\t\ti18nContext.numberFormat.decimalSeparator,\n\t\t\t\tcurrencyFormat,\n\t\t\t],\n\t\t\t([newValue, newDecimalSeparator, newCurrencyFormat]) => {\n\t\t\t\tif (\n\t\t\t\t\t!isNumberInRange({\n\t\t\t\t\t\tmaximum: props.maximum,\n\t\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\t\tvalue: toNumber(newValue),\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t`KtFieldCurrency: encountered an out-of-range number \"${String(newValue)}\"`,\n\t\t\t\t\t)\n\n\t\t\t\tconst isLogicallyDifferent =\n\t\t\t\t\ttoNumber(newValue) !== toNumber(internalStringValue.value)\n\n\t\t\t\tif (isLogicallyDifferent) {\n\t\t\t\t\tinternalStringValue.value =\n\t\t\t\t\t\treplaceDecimalSeparator(\n\t\t\t\t\t\t\ttoFixedPrecisionString(\n\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\tnewCurrencyFormat.value.decimalPlaces,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tnewDecimalSeparator,\n\t\t\t\t\t\t) ?? ''\n\n\t\t\t\t\tsetCursorPosition(userCursorPositionFromRight.value)\n\t\t\t\t\tuserCursorPositionFromRight.value = null\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tinputProps: computed(\n\t\t\t\t(): InputHTMLAttributes & {\n\t\t\t\t\tclass: Record<string, boolean>\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} => ({\n\t\t\t\t\t...field.inputProps,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: {\n\t\t\t\t\t\t'kt-field-currency__input': true,\n\t\t\t\t\t},\n\t\t\t\t\tdisabled: field.isDisabled,\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\t\tsize: 1,\n\t\t\t\t\ttype: 'text', // NOT A MISTAKE\n\t\t\t\t\tvalue: internalStringValue.value,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tinputRef,\n\t\t\tktFieldRef,\n\t\t\tmodifiedField: computed(() => ({\n\t\t\t\t...field,\n\t\t\t\tprefix: currencyFormat.value.symbol,\n\t\t\t})),\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst value = (event.target as HTMLInputElement).value\n\n\t\t\t\tconst startPosition = inputRef.value?.selectionStart ?? 0\n\t\t\t\tuserCursorPositionFromRight.value = value.length - startPosition\n\n\t\t\t\tconst { maximum, minimum } = props\n\n\t\t\t\tconst isValid = VALID_REGEX.test(value)\n\n\t\t\t\tconst nextString = isValid\n\t\t\t\t\t? formatCurrencyUserInput({\n\t\t\t\t\t\t\tdecimalPlaces: currencyFormat.value.decimalPlaces,\n\t\t\t\t\t\t\tvalue: replaceDecimalSeparator(value, DecimalSeparator.DOT),\n\t\t\t\t\t\t})\n\t\t\t\t\t: ''\n\n\t\t\t\tconst isTypedNumberValid =\n\t\t\t\t\tisValid &&\n\t\t\t\t\tisNumberInRange({\n\t\t\t\t\t\tmaximum,\n\t\t\t\t\t\tminimum,\n\t\t\t\t\t\tvalue: nextString === '' ? null : Number.parseFloat(nextString),\n\t\t\t\t\t})\n\n\t\t\t\tconst emitNull = shouldClear(value, internalStringValue.value)\n\t\t\t\tif (isTypedNumberValid) field.setValue(emitNull ? null : nextString)\n\n\t\t\t\tforceUpdate()\n\n\t\t\t\tsetCursorPosition(userCursorPositionFromRight.value)\n\t\t\t},\n\t\t\tonKeyup: (event: KeyboardEvent) => {\n\t\t\t\temit('keyup', event)\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n.kt-field-currency__input {\n\tdisplay: flex;\n\twidth: 100%;\n\tpadding: 0;\n\tmargin: 0;\n\tfont-variant-numeric: tabular-nums;\n\tline-height: 1.6;\n\ttext-align: right;\n\tborder: 0;\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_CURRENCY_SUPPORTS } from './constants'\nimport * as KottiFieldCurrencyConstants from './constants'\nimport KtFieldCurrencyVue from './KtFieldCurrency.vue'\nimport { KottiFieldCurrency } from './types'\n\nexport const KtFieldCurrency = attachMeta(\n\tmakeInstallable(KtFieldCurrencyVue),\n\t{\n\t\taddedVersion: '3.0.0-beta.17',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldCurrency',\n\t\t\tschema: KottiFieldCurrency.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_CURRENCY_SUPPORTS },\n)\n\nexport { KottiFieldCurrencyConstants }\n","import type { InjectionKey } from 'vue'\n\nexport const KT_IS_IN_POPOVER: InjectionKey<boolean> =\n\tSymbol('KT_IS_IN_POPOVER')\n","import { computed, ref } from 'vue'\n\nconst colorScheme = ref<'dark' | 'light'>('light')\n\nexport const isDarkMode = computed(() => colorScheme.value === 'dark')\nexport const setColorScheme = (value: 'dark' | 'light'): void => {\n\tcolorScheme.value = value\n}\n","import dayjs from 'dayjs'\nimport { ref, type Ref } from 'vue'\n\nimport { useForceUpdate } from '../kotti-field/hooks'\n\nimport { DATE_FORMAT_REGEX, DATE_TIME_FORMAT_REGEX } from './constants'\n\nexport const useSaveOnBlur = (options: {\n\tmode: 'date' | 'date-time'\n\tsave: (value: string | null) => void\n}): {\n\tforceUpdateKey: Ref<number>\n\tinputString: Ref<string | null>\n\tonBlur: () => void\n\tonInput: (event: InputEvent) => void\n} => {\n\tconst inputString = ref<string | null>(null)\n\n\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\tconst formatString = {\n\t\tdate: 'YYYY-MM-DD',\n\t\t'date-time': 'YYYY-MM-DD HH:mm',\n\t}[options.mode]\n\n\treturn {\n\t\tforceUpdateKey,\n\t\tinputString,\n\t\tonBlur: () => {\n\t\t\t// try is used to execute the finally block after returning from the try block\n\t\t\ttry {\n\t\t\t\tif (inputString.value === null) return\n\n\t\t\t\tif (inputString.value === '') {\n\t\t\t\t\toptions.save(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst date = dayjs(inputString.value)\n\n\t\t\t\tif (DATE_FORMAT_REGEX.test(inputString.value) && date.isValid()) {\n\t\t\t\t\toptions.save(date.format(formatString))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\toptions.mode === 'date-time' &&\n\t\t\t\t\tDATE_TIME_FORMAT_REGEX.test(inputString.value) &&\n\t\t\t\t\tdate.isValid()\n\t\t\t\t) {\n\t\t\t\t\toptions.save(date.format(formatString))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tinputString.value = null\n\t\t\t\tforceUpdate()\n\t\t\t}\n\t\t},\n\t\tonInput: (event: InputEvent) => {\n\t\t\tinputString.value = (event.target as HTMLInputElement).value\n\t\t},\n\t}\n}\n","<template>\n\t<div ref=\"componentRef\" class=\"time-picker\" role=\"group\" :tabindex=\"-1\">\n\t\t<div ref=\"rowRef\" class=\"time-picker__rows\">\n\t\t\t<div\n\t\t\t\tv-for=\"type in ['hours', 'minutes']\"\n\t\t\t\t:key=\"type\"\n\t\t\t\tclass=\"time-picker__column\"\n\t\t\t>\n\t\t\t\t<div class=\"time-picker__header-cell\">{{ translations[type] }}</div>\n\t\t\t\t<div class=\"time-picker__header-separator\" />\n\t\t\t\t<ul :aria-label=\"`Select ${type}`\" :data-type=\"type\" role=\"listbox\">\n\t\t\t\t\t<li\n\t\t\t\t\t\tv-for=\"entry in displayedNumbersForType(type)\"\n\t\t\t\t\t\t:key=\"entry.displayedNumber\"\n\t\t\t\t\t\t:aria-disabled=\"entry.isDisabled\"\n\t\t\t\t\t\t:aria-label=\"entry.ariaLabel\"\n\t\t\t\t\t\t:aria-selected=\"entry.isSelected\"\n\t\t\t\t\t\t:data-key=\"entry.dataKey\"\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t@click=\"entry.onClick\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span :class=\"['time-picker__cell', entry.classes]\">\n\t\t\t\t\t\t\t{{ entry.displayedNumber }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { TimeConversion } from '@metatypes/units'\nimport range from 'lodash/range.js'\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport type { PropType } from 'vue'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\n\ntype TimeUnit = 'hours' | 'minutes' | 'seconds'\ntype TimeRecord = Record<TimeUnit, number>\ntype DateUnit = TimeUnit | 'days' | 'months' | 'years'\ntype DateRecord = Record<DateUnit, number>\n\nfunction getPosition(\n\tnode: Element,\n\tcontainer: Element,\n): { left: number; top: number } {\n\tconst nodeRect = node.getBoundingClientRect()\n\tconst containerRect = container.getBoundingClientRect()\n\n\treturn {\n\t\tleft: nodeRect.left - containerRect.left,\n\t\ttop: nodeRect.top - containerRect.top,\n\t}\n}\n\nfunction scrollTop(element: Element, value?: number): number | undefined {\n\tif (value === undefined) {\n\t\treturn element.scrollTop\n\t} else {\n\t\telement.scrollTop = value\n\t}\n}\n\nfunction easeInOutQuad(t: number) {\n\t// eslint-disable-next-line no-magic-numbers\n\treturn t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n}\n\nfunction scrollTopAnimation(\n\telement: Element,\n\tto: number,\n\tanimated = true,\n): void {\n\tconst start = element.scrollTop\n\tconst change = to - start\n\t// eslint-disable-next-line no-magic-numbers\n\tconst duration = animated ? 300 : 0\n\tconst startTime = performance.now()\n\n\tfunction animateScroll(currentTime: number) {\n\t\tconst timeElapsed = currentTime - startTime\n\t\tconst progress = Math.min(timeElapsed / duration, 1)\n\t\tconst easing = easeInOutQuad(progress)\n\n\t\telement.scrollTop = start + change * easing\n\n\t\tif (progress < 1) {\n\t\t\twindow.requestAnimationFrame(animateScroll)\n\t\t}\n\t}\n\n\twindow.requestAnimationFrame(animateScroll)\n}\n\nfunction scrollTo(time: TimeRecord, row: HTMLDivElement | null) {\n\tif (!row) return\n\n\tObject.entries(time).forEach(([type, value]: [string, number]) => {\n\t\t// eslint-disable-next-line no-magic-numbers\n\t\tconst scrollToValue = Math.max(0, value - 3)\n\n\t\tconst container = row.querySelector(`[data-type=\"${type}\"]`)\n\t\tconst node = container?.querySelector(\n\t\t\t`[data-key=\"${type}-${scrollToValue}\"]`,\n\t\t)\n\n\t\tif (node && container) {\n\t\t\tconst position = getPosition(node, container)\n\n\t\t\tscrollTopAnimation(container, position.top, scrollTop(container) !== 0)\n\t\t}\n\t})\n}\n\ntype DisabledFunction = (dateRecord: DateRecord) => boolean\ntype HideFunction = (dateRecord: DateRecord) => boolean\n\nexport default defineComponent({\n\tname: 'TimeDropdown',\n\tprops: {\n\t\tformat: { default: 'yyyy-MM-DD HH:mm:ss', type: String },\n\n\t\t// years\n\t\tyears: { required: true, type: Number },\n\n\t\t// months\n\t\tmonths: { required: true, type: Number },\n\n\t\t// days\n\t\tdays: { required: true, type: Number },\n\n\t\t// hours\n\t\tdisabledHours: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<DisabledFunction>,\n\t\t},\n\t\thideHours: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<HideFunction>,\n\t\t},\n\t\thours: { required: true, type: Number },\n\n\t\t// minutes\n\t\tdisabledMinutes: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<DisabledFunction>,\n\t\t},\n\t\thideMinutes: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<HideFunction>,\n\t\t},\n\t\tminutes: { required: true, type: Number },\n\n\t\t// seconds\n\t\tdisabledSeconds: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<DisabledFunction>,\n\t\t},\n\t\thideSeconds: {\n\t\t\tdefault: () => false,\n\t\t\ttype: Function as PropType<HideFunction>,\n\t\t},\n\t\tseconds: { required: true, type: Number },\n\t},\n\temits: ['update:hours', 'update:minutes', 'update:seconds'],\n\tsetup(props, { emit }) {\n\t\tconst rowRef = ref<HTMLDivElement | null>(null)\n\t\tconst componentRef = ref<HTMLDivElement | null>(null)\n\n\t\tconst translations = useTranslationNamespace('KtFieldDateShared')\n\n\t\tconst time = computed<TimeRecord>(() => ({\n\t\t\thours: props.hours,\n\t\t\tminutes: props.minutes,\n\t\t\tseconds: props.seconds,\n\t\t}))\n\n\t\t/* eslint-disable perfectionist/sort-objects */\n\t\tconst getAdjustedDate = (type: TimeUnit, unit: number) => ({\n\t\t\tyears: props.years,\n\t\t\tmonths: props.months,\n\t\t\tdays: props.days,\n\t\t\thours: props.hours,\n\t\t\tminutes: props.minutes,\n\t\t\tseconds: props.seconds,\n\t\t\t[type]: unit,\n\t\t})\n\t\t/* eslint-enable perfectionist/sort-objects */\n\n\t\tonMounted(() => {\n\t\t\tif (rowRef.value) {\n\t\t\t\tscrollTo(time.value, rowRef.value)\n\t\t\t}\n\t\t})\n\n\t\t// watch(\n\t\t// \t[() => time.value, () => props.format],\n\t\t// \t([newTime, _]) => {\n\t\t// \t\tif (rowRef.value) {\n\t\t// \t\t\tscrollTo(newTime, rowRef.value)\n\t\t// \t\t}\n\t\t// \t},\n\t\t// \t{ immediate: true },\n\t\t// )\n\n\t\tconst handleClick = (type: TimeUnit, unit: number) => {\n\t\t\tswitch (type) {\n\t\t\t\tcase 'hours':\n\t\t\t\t\temit('update:hours', unit)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'minutes':\n\t\t\t\t\temit('update:minutes', unit)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'seconds':\n\t\t\t\t\temit('update:seconds', unit)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\t\t\tthrow new Error(`invalid type ${type}`)\n\t\t\t}\n\t\t}\n\n\t\tconst getEntries = (\n\t\t\t// eslint-disable-next-line no-magic-numbers\n\t\t\tmaxNumber: 24 | 60,\n\t\t\ttype: TimeUnit,\n\t\t\thideFunction: HideFunction,\n\t\t\tdisabledFunction: DisabledFunction,\n\t\t) =>\n\t\t\trange(maxNumber)\n\t\t\t\t.map((unit) => getAdjustedDate(type, unit))\n\t\t\t\t.filter((dateRecord) => !hideFunction(dateRecord))\n\t\t\t\t.map((dateRecord) => {\n\t\t\t\t\tconst number = dateRecord[type]\n\t\t\t\t\tconst isDisabled = disabledFunction(dateRecord)\n\n\t\t\t\t\tconst isSelected = props[type] === number\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tariaLabel: `${number} ${type}`,\n\t\t\t\t\t\tclasses: {\n\t\t\t\t\t\t\t'time-picker__cell--is-disabled': isDisabled,\n\t\t\t\t\t\t\t'time-picker__cell--is-selected': isSelected,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdataKey: `${type}-${number}`,\n\t\t\t\t\t\tdisplayedNumber: number,\n\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tif (isDisabled) return\n\n\t\t\t\t\t\t\thandleClick(type, number)\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\tconst displayedNumbersForType = (timeUnit: TimeUnit) => {\n\t\t\tswitch (timeUnit) {\n\t\t\t\tcase 'hours':\n\t\t\t\t\treturn getEntries(\n\t\t\t\t\t\tTimeConversion.HOURS_PER_DAY,\n\t\t\t\t\t\t'hours',\n\t\t\t\t\t\tprops.hideHours,\n\t\t\t\t\t\tprops.disabledHours,\n\t\t\t\t\t)\n\t\t\t\tcase 'minutes':\n\t\t\t\t\treturn getEntries(\n\t\t\t\t\t\tTimeConversion.MINUTES_PER_HOUR,\n\t\t\t\t\t\t'minutes',\n\t\t\t\t\t\tprops.hideMinutes,\n\t\t\t\t\t\tprops.disabledMinutes,\n\t\t\t\t\t)\n\t\t\t\tcase 'seconds':\n\t\t\t\t\treturn getEntries(\n\t\t\t\t\t\tTimeConversion.SECONDS_PER_MINUTE,\n\t\t\t\t\t\t'seconds',\n\t\t\t\t\t\tprops.hideSeconds,\n\t\t\t\t\t\tprops.disabledSeconds,\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcomponentRef,\n\t\t\tdisplayedNumbersForType,\n\t\t\trowRef,\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.time-picker {\n\theight: 100%;\n\tpadding: 6px 8px;\n\toverflow: hidden;\n\tfont-size: 14px;\n\n\t&__rows {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t\theight: 100%;\n\t}\n\n\t&__column {\n\t\tdisplay: flex;\n\t\tflex-basis: 100%;\n\t\tflex-direction: column;\n\t\talign-items: stretch;\n\n\t\t> ul {\n\t\t\tflex: 1;\n\t\t\toverflow-y: auto;\n\t\t}\n\n\t\t> ul,\n\t\t> ul > li {\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tlist-style: none;\n\t\t}\n\t}\n\n\t&__header-cell {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tpadding: 5px;\n\t\tfont-size: 0.6rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--text-03);\n\t\ttext-transform: uppercase;\n\t}\n\n\t&__header-separator {\n\t\twidth: 100%;\n\t\theight: 1px;\n\t\tbackground: var(--dp-border-color);\n\t}\n\n\t&__cell {\n\t\tdisplay: block;\n\t\tpadding: 5px;\n\t\tcolor: inherit;\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\n\t\t&--is-selected {\n\t\t\tcolor: var(--interactive-03);\n\t\t\tbackground-color: var(--ui-05);\n\t\t}\n\n\t\t&--is-disabled {\n\t\t\tcolor: var(--text-05);\n\t\t\topacity: 0.46;\n\t\t}\n\n\t\t&:not(.time-picker__cell--is-disabled) {\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--ui-01);\n\n\t\t\t\t&.kt-select-options-item--is-selected {\n\t\t\t\t\tcolor: var(--interactive-01-hover);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field }\"\n\t\t:class=\"fieldClasses\"\n\t\tdebounceLabelClick\n\t\t:getEmptyValue=\"isRange ? () => [null, null] : () => null\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t:isRange=\"isRange\"\n\t>\n\t\t<VueDatePicker\n\t\t\tref=\"datePickerRef\"\n\t\t\t:actionRow=\"{\n\t\t\t\tshowPreview: false,\n\t\t\t}\"\n\t\t\t:dark=\"isDarkMode\"\n\t\t\t:disabled=\"isDisabled\"\n\t\t\t:enableTimePicker=\"hasTime && !isConfirmDisabled\"\n\t\t\t:maxDate=\"maximumDate ?? undefined\"\n\t\t\t:minDate=\"minimumDate ?? undefined\"\n\t\t\t:modelType=\"hasTime ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'\"\n\t\t\t:modelValue=\"vueDatePickerModelValue\"\n\t\t\t:multiCalendars=\"isRange\"\n\t\t\t:preventMinMaxNavigation=\"minimumDate !== null && maximumDate !== null\"\n\t\t\t:range=\"isRange\"\n\t\t\t:teleport=\"!isInPopover\"\n\t\t\t:ui=\"vueDatePickerClasses\"\n\t\t\t@internalModelChange=\"onInternalModelChange\"\n\t\t\t@rangeEnd=\"onRangeEnd\"\n\t\t\t@rangeStart=\"onRangeStart\"\n\t\t\t@update:modelValue=\"onUpdateModelValue\"\n\t\t>\n\t\t\t<template #trigger>\n\t\t\t\t<div class=\"kt-field-date__input-wrapper\">\n\t\t\t\t\t<i class=\"yoco\" v-text=\"hasTime ? 'calendar_clock' : 'calendar'\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-bind=\"inputProps\"\n\t\t\t\t\t\t:id=\"isRange ? `${inputProps.id}-start` : inputProps.id\"\n\t\t\t\t\t\t:forceUpdateKey=\"saveOnBlurLeft.forceUpdateKey\"\n\t\t\t\t\t\t:placeholder=\"placeholderLeft\"\n\t\t\t\t\t\t:value=\"valueLeft\"\n\t\t\t\t\t\t@blur=\"saveOnBlurLeft.onBlur\"\n\t\t\t\t\t\t@input=\"saveOnBlurLeft.onInput\"\n\t\t\t\t\t/>\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-if=\"isRange\"\n\t\t\t\t\t\tv-bind=\"inputProps\"\n\t\t\t\t\t\t:id=\"`${inputProps.id}-end`\"\n\t\t\t\t\t\t:forceUpdateKey=\"saveOnBlurRight.forceUpdateKey\"\n\t\t\t\t\t\t:placeholder=\"placeholderRight\"\n\t\t\t\t\t\t:value=\"valueRight\"\n\t\t\t\t\t\t@blur=\"saveOnBlurRight.onBlur\"\n\t\t\t\t\t\t@input=\"saveOnBlurRight.onInput\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template\n\t\t\t\t#time-picker-overlay=\"{\n\t\t\t\t\thours,\n\t\t\t\t\tminutes,\n\t\t\t\t\tseconds,\n\t\t\t\t\tsetHours,\n\t\t\t\t\tsetMinutes,\n\t\t\t\t\tsetSeconds,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<div class=\"kt-field-date-popover__times\">\n\t\t\t\t\t<FieldTime\n\t\t\t\t\t\tclass=\"kt-field-date-popover__time\"\n\t\t\t\t\t\tv-bind=\"timePickerPropsLeft\"\n\t\t\t\t\t\t:hours=\"Array.isArray(hours) ? hours[0] : hours\"\n\t\t\t\t\t\t:minutes=\"Array.isArray(minutes) ? minutes[0] : minutes\"\n\t\t\t\t\t\t:seconds=\"Array.isArray(seconds) ? seconds[0] : seconds\"\n\t\t\t\t\t\t@update:hours=\"\n\t\t\t\t\t\t\t(val: number | null) =>\n\t\t\t\t\t\t\t\tArray.isArray(hours) ? setHours([val, hours[1]]) : setHours(val)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t@update:minutes=\"\n\t\t\t\t\t\t\t(val: number | null) =>\n\t\t\t\t\t\t\t\tArray.isArray(minutes)\n\t\t\t\t\t\t\t\t\t? setMinutes([val, minutes[1]])\n\t\t\t\t\t\t\t\t\t: setMinutes(val)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t@update:seconds=\"\n\t\t\t\t\t\t\t(val: number | null) =>\n\t\t\t\t\t\t\t\tArray.isArray(seconds)\n\t\t\t\t\t\t\t\t\t? setSeconds([val, seconds[1]])\n\t\t\t\t\t\t\t\t\t: setSeconds(val)\n\t\t\t\t\t\t\"\n\t\t\t\t\t/>\n\t\t\t\t\t<FieldTime\n\t\t\t\t\t\tv-if=\"timePickerPropsRight\"\n\t\t\t\t\t\tclass=\"kt-field-date-popover__time\"\n\t\t\t\t\t\tv-bind=\"timePickerPropsRight\"\n\t\t\t\t\t\t:hours=\"hours[1]\"\n\t\t\t\t\t\t:minutes=\"minutes[1]\"\n\t\t\t\t\t\t:seconds=\"seconds[1]\"\n\t\t\t\t\t\t@update:hours=\"(val: number) => setHours([hours[0], val])\"\n\t\t\t\t\t\t@update:minutes=\"(val: number) => setMinutes([minutes[0], val])\"\n\t\t\t\t\t\t@update:seconds=\"(val: number) => setSeconds([seconds[0], val])\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #action-extra>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"shortcuts.length > 0\"\n\t\t\t\t\tclass=\"kt-field-date-popover__shortcuts\"\n\t\t\t\t>\n\t\t\t\t\t<KtButton\n\t\t\t\t\t\tv-for=\"(shortcut, index) in shortcuts\"\n\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\tclass=\"kt-field-date-popover__shortcut\"\n\t\t\t\t\t\t:label=\"shortcut.label\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t@click=\"onSelectShortcut(shortcut.value)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #action-buttons>\n\t\t\t\t<div class=\"kt-field-date-popover__buttons\">\n\t\t\t\t\t<KtButton\n\t\t\t\t\t\t:label=\"translations.cancelButton\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t@click=\"onCloseMenu\"\n\t\t\t\t\t/>\n\t\t\t\t\t<KtButton\n\t\t\t\t\t\t:disabled=\"isConfirmDisabled\"\n\t\t\t\t\t\t:label=\"translations.confirmButton\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t@click=\"onSelectDate\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #clock-icon>\n\t\t\t\t<div class=\"kt-field-date-popover__day-switch\">\n\t\t\t\t\t<div v-text=\"timePreviewLeft\" />\n\t\t\t\t\t<i class=\"yoco\" v-text=\"'clock'\" />\n\t\t\t\t\t<div v-if=\"isRange\" v-text=\"timePreviewRight\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #calendar-icon>\n\t\t\t\t<i\n\t\t\t\t\tclass=\"kt-field-date-popover__date-switch yoco\"\n\t\t\t\t\tv-text=\"'calendar'\"\n\t\t\t\t/>\n\t\t\t</template>\n\n\t\t\t<template #arrow-left>\n\t\t\t\t<i class=\"yoco\" v-text=\"'chevron_left'\" />\n\t\t\t</template>\n\n\t\t\t<template #arrow-right>\n\t\t\t\t<i class=\"yoco\" v-text=\"'chevron_right'\" />\n\t\t\t</template>\n\t\t</VueDatePicker>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport VueDatePicker from '@vuepic/vue-datepicker'\nimport type { DatePickerInstance } from '@vuepic/vue-datepicker'\nimport dayjs from 'dayjs'\nimport type { InputHTMLAttributes, PropType } from 'vue'\nimport { computed, defineComponent, inject, ref } from 'vue'\n\nimport { KtButton } from '../../kotti-button'\nimport { KtField } from '../../kotti-field'\nimport { useField } from '../../kotti-field/hooks'\nimport { useI18nContext, useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { KT_IS_IN_POPOVER } from '../../kotti-popover/constants'\nimport { makeProps } from '../../make-props'\nimport { isDarkMode } from '../../utilities/color-scheme'\nimport { KOTTI_FIELD_DATE_SUPPORTS } from '../constants'\nimport { useSaveOnBlur } from '../hooks'\nimport type {\n\tKottiFieldDate,\n\tKottiFieldDateRange,\n\tKottiFieldDateTime,\n\tKottiFieldDateTimeRange,\n} from '../types'\nimport { Shared } from '../types'\n\nimport FieldTime from './FieldTime.vue'\n\ntype AnyDateValue =\n\t| KottiFieldDate.ModelValue\n\t| KottiFieldDateRange.ModelValue\n\t| KottiFieldDateTime.ModelValue\n\t| KottiFieldDateTimeRange.ModelValue\n\ntype SingleDateValue = KottiFieldDate.ModelValue | KottiFieldDateTime.ModelValue\n\ntype RangeDateValue =\n\t| KottiFieldDateRange.ModelValue\n\t| KottiFieldDateTimeRange.ModelValue\n\ntype InternalRangeValue = [Date | null, Date | null]\ntype InternalDateValue = Date | null\ntype InternalValue = InternalDateValue | InternalRangeValue\n\nexport default defineComponent({\n\tname: 'GenericDateField',\n\tcomponents: {\n\t\tFieldTime,\n\t\tKtButton,\n\t\tKtField,\n\t\tVueDatePicker,\n\t},\n\tprops: {\n\t\t...makeProps(Shared.propsSchema),\n\t\thasTime: { default: false, type: Boolean },\n\t\tisRange: { default: false, type: Boolean },\n\t\tmodelValue: {\n\t\t\trequired: true,\n\t\t\ttype: [String, Array, null] as PropType<AnyDateValue>,\n\t\t},\n\t\tplaceholder: {\n\t\t\trequired: true,\n\t\t\ttype: [String, Array, null] as PropType<\n\t\t\t\t[string | null, string | null] | string | null\n\t\t\t>,\n\t\t},\n\t\tshortcuts: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<\n\t\t\t\tArray<{ label: string; value: [string, string] | string }>\n\t\t\t>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst isInPopover = inject(KT_IS_IN_POPOVER, false)\n\n\t\tconst field = useField<AnyDateValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? (value as RangeDateValue).every((v) => v === null)\n\t\t\t\t\t: (value as SingleDateValue) === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_DATE_SUPPORTS,\n\t\t})\n\n\t\tconst setCleanedValue = (value: AnyDateValue) => {\n\t\t\tconst cleanValue = (v: string | null) =>\n\t\t\t\tv === null ? null : v.replace(/\\d\\d$/, '00')\n\n\t\t\tconst sortRange = ([left, right]: RangeDateValue): RangeDateValue => {\n\t\t\t\tif (left === null || right === null) return [left, right]\n\n\t\t\t\tconst leftDate = dayjs(left)\n\t\t\t\tconst rightDate = dayjs(right)\n\t\t\t\tif (leftDate.isBefore(rightDate)) return [left, right]\n\t\t\t\treturn [right, left]\n\t\t\t}\n\n\t\t\tif (props.isRange) {\n\t\t\t\tconst [lhs, rhs] = value as RangeDateValue\n\t\t\t\tfield.setValue(\n\t\t\t\t\tsortRange(\n\t\t\t\t\t\tprops.hasTime ? [cleanValue(lhs), cleanValue(rhs)] : [lhs, rhs],\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst date = value as SingleDateValue\n\t\t\tfield.setValue(props.hasTime ? cleanValue(date) : date)\n\t\t}\n\n\t\tconst blurMode = computed(() => (props.isRange ? 'date-time' : 'date'))\n\t\tconst formatString = computed(() =>\n\t\t\tprops.hasTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD',\n\t\t)\n\n\t\tconst saveOnBlurLeft = useSaveOnBlur({\n\t\t\tmode: blurMode.value,\n\t\t\tsave: setCleanedValue,\n\t\t})\n\t\tconst saveOnBlurRight = useSaveOnBlur({\n\t\t\tmode: blurMode.value,\n\t\t\tsave: setCleanedValue,\n\t\t})\n\n\t\tconst i18NContext = useI18nContext()\n\t\tconst translations = useTranslationNamespace('KtFieldDateShared')\n\n\t\tconst datePickerRef = ref<DatePickerInstance | null>(null)\n\n\t\t// eslint-disable-next-line vue/no-setup-props-reactivity-loss\n\t\tconst internalValue = ref<InternalValue>(\n\t\t\tprops.isRange ? [null, null] : null,\n\t\t)\n\n\t\tconst getTimePreview = (datetime: InternalDateValue) =>\n\t\t\tdatetime === null ? '' : dayjs(datetime).format(formatString.value)\n\n\t\treturn {\n\t\t\tdatePickerRef,\n\t\t\tfield,\n\t\t\tfieldClasses: computed(() => {\n\t\t\t\tconst classes = ['kt-field-date']\n\n\t\t\t\tif (props.isRange) classes.push('kt-field-date--is-range')\n\t\t\t\tif (props.hasTime) classes.push('kt-field-date--has-time')\n\n\t\t\t\treturn classes\n\t\t\t}),\n\t\t\tinputProps: computed(\n\t\t\t\t(): InputHTMLAttributes & {\n\t\t\t\t\tclass: string[]\n\t\t\t\t} => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...field.inputProps,\n\t\t\t\t\t\tautocomplete: 'off',\n\t\t\t\t\t\tclass: ['kt-field-date__input'],\n\t\t\t\t\t\tsize: 1,\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\tisConfirmDisabled: computed(() =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? (internalValue.value as InternalRangeValue).every((v) => v === null)\n\t\t\t\t\t: (internalValue.value as InternalDateValue) === null,\n\t\t\t),\n\t\t\tisDarkMode,\n\t\t\tisInPopover,\n\t\t\tlocale: computed(() => i18NContext.locale),\n\t\t\tonCloseMenu: () => {\n\t\t\t\tdatePickerRef.value?.closeMenu?.()\n\t\t\t},\n\t\t\tonInternalModelChange: (value: InternalValue) => {\n\t\t\t\t// HACK: VueDatePicker can in some cases emit a single null for ranges.\n\t\t\t\t// In order to not mess with our logic we cast this to an array\n\t\t\t\tinternalValue.value =\n\t\t\t\t\tprops.isRange && value === null ? [null, null] : value\n\t\t\t},\n\t\t\tonRangeEnd: (value: Date) => {\n\t\t\t\tconst rangeStart = (internalValue.value as InternalRangeValue)[0]\n\t\t\t\tif (rangeStart === null) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Range end was triggered without a matching range start',\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tinternalValue.value =\n\t\t\t\t\tvalue <= rangeStart ? [value, rangeStart] : [rangeStart, value]\n\t\t\t},\n\t\t\tonRangeStart: (value: Date) => {\n\t\t\t\tinternalValue.value = [value, null]\n\t\t\t},\n\t\t\tonSelectDate: (value: AnyDateValue) => {\n\t\t\t\tdatePickerRef.value?.selectDate?.(value)\n\t\t\t},\n\t\t\tonSelectShortcut: (value: AnyDateValue) => {\n\t\t\t\tsetCleanedValue(value)\n\t\t\t\tdatePickerRef.value?.closeMenu?.()\n\t\t\t},\n\t\t\tonUpdateModelValue: (value: AnyDateValue) => {\n\t\t\t\tif (!field.isDisabled && !field.isLoading) setCleanedValue(value)\n\t\t\t},\n\t\t\tplaceholderLeft: computed(() =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? ((props.placeholder as [string | null, string | null])[0] ??\n\t\t\t\t\t\tundefined)\n\t\t\t\t\t: (props.placeholder ?? undefined),\n\t\t\t),\n\t\t\tplaceholderRight: computed(() =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? ((props.placeholder as [string | null, string | null])[1] ??\n\t\t\t\t\t\tundefined)\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t\tsaveOnBlurLeft,\n\t\t\tsaveOnBlurRight,\n\t\t\ttimePickerPropsLeft: computed(() => {\n\t\t\t\tconst dateRangeStart = props.isRange\n\t\t\t\t\t? dayjs((field.currentValue as RangeDateValue)[0])\n\t\t\t\t\t: dayjs(field.currentValue as SingleDateValue)\n\n\t\t\t\treturn {\n\t\t\t\t\tdays: dateRangeStart.get('days'),\n\t\t\t\t\tmonths: dateRangeStart.get('months'),\n\t\t\t\t\tyears: dateRangeStart.get('years'),\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttimePickerPropsRight: computed(() => {\n\t\t\t\tif (!props.isRange) return null\n\t\t\t\tconst dateRangeEnd = dayjs((field.currentValue as RangeDateValue)[1])\n\n\t\t\t\treturn {\n\t\t\t\t\tdays: dateRangeEnd.get('days'),\n\t\t\t\t\tmonths: dateRangeEnd.get('months'),\n\t\t\t\t\tyears: dateRangeEnd.get('years'),\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttimePreviewLeft: computed(() =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? getTimePreview((internalValue.value as InternalRangeValue)[0])\n\t\t\t\t\t: getTimePreview(internalValue.value as InternalDateValue),\n\t\t\t),\n\t\t\ttimePreviewRight: computed(() =>\n\t\t\t\tprops.isRange\n\t\t\t\t\t? getTimePreview((internalValue.value as InternalRangeValue)[1])\n\t\t\t\t\t: '',\n\t\t\t),\n\t\t\ttranslations,\n\t\t\tvalueLeft: computed(\n\t\t\t\t() =>\n\t\t\t\t\tsaveOnBlurLeft.inputString.value ??\n\t\t\t\t\t(props.isRange\n\t\t\t\t\t\t? (field.currentValue as RangeDateValue)[0]\n\t\t\t\t\t\t: (field.currentValue as SingleDateValue)) ??\n\t\t\t\t\t'',\n\t\t\t),\n\t\t\tvalueRight: computed(\n\t\t\t\t() =>\n\t\t\t\t\tsaveOnBlurLeft.inputString.value ??\n\t\t\t\t\t(props.isRange ? (field.currentValue as RangeDateValue)[1] : '') ??\n\t\t\t\t\t'',\n\t\t\t),\n\t\t\tvueDatePickerClasses: computed(() => ({\n\t\t\t\tcalendar: 'kt-field-date-popover__calendar',\n\t\t\t\tmenu: (() => {\n\t\t\t\t\tconst classes = ['kt-field-date-popover']\n\n\t\t\t\t\tif (props.isRange) classes.push('kt-field-date-popover--is-range')\n\t\t\t\t\tif (props.hasTime) classes.push('kt-field-date-popover--has-time')\n\n\t\t\t\t\treturn classes.join(' ')\n\t\t\t\t})(),\n\t\t\t})),\n\t\t\tvueDatePickerModelValue: computed(() => {\n\t\t\t\tif (props.isRange) {\n\t\t\t\t\tconst [lhs, rhs] = field.currentValue as RangeDateValue\n\t\t\t\t\treturn [lhs ?? '', rhs ?? '']\n\t\t\t\t}\n\t\t\t\treturn (field.currentValue as SingleDateValue) ?? ''\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '@vuepic/vue-datepicker/dist/main.css';\n@import '../../kotti-field/mixins';\n@import '../../kotti-style/_variables';\n\n.kt-field-date {\n\t&__input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tline-height: 1.6;\n\t\tborder: 0;\n\t}\n\n\t&__input-wrapper {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\n\t\t.yoco {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tmin-width: 1.1em;\n\t\t\tfont-size: 1.1em;\n\t\t\tcolor: var(--icon-02);\n\t\t}\n\t}\n}\n\n.kt-field-date-popover {\n\t// HACK: the default is set to 0.8rem, which assumes a base font-size of 16px.\n\t// Since we have 20px, we have to adjust the relative size somewhat\n\t--dp-preview-font-size: 0.64rem;\n\t--dp-primary-color: var(--interactive-01);\n\t--dp-hover-color: var(--interactive-02-hover);\n\t--dp-hover-text-color: var(--interactive-01);\n\n\tpadding: var(--unit-3);\n\tfont-size: 0.7rem;\n\n\t/* stylelint-disable selector-class-pattern */\n\t.dp__instance_calendar .dp__flex_display {\n\t\t// gap between calendars\n\t\tgap: var(--unit-4);\n\t}\n\n\t.dp__menu_inner {\n\t\tpadding: 0;\n\t}\n\n\t/* stylelint-enable selector-class-pattern */\n\n\t/**\n\t * wrapper for the open timepicker button\n\t */\n\t.dp--tp-wrap {\n\t\tmax-width: none;\n\t}\n\n\t.yoco {\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t\twidth: 100%;\n\t}\n\n\t/* stylelint-disable selector-class-pattern */\n\t&__calendar .dp__calendar_header_item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-size: 0.6rem;\n\t\tcolor: var(--text-03);\n\t\ttext-transform: uppercase;\n\t}\n\t/* stylelint-enable selector-class-pattern */\n\n\t&__day-switch {\n\t\tdisplay: flex;\n\t\tflex-direction: row-reverse;\n\t\tgap: 20px;\n\t\talign-items: center;\n\t\tjustify-content: space-evenly;\n\t}\n\n\t&__date-switch,\n\t&__day-switch {\n\t\tfont-weight: 500;\n\t\tcolor: var(--interactive-01);\n\n\t\t&:hover {\n\t\t\tcolor: var(--interactive-01-hover);\n\t\t}\n\t}\n\n\t&__shortcut {\n\t\tpadding: 0 var(--unit-1) !important;\n\n\t\t&:hover {\n\t\t\tcolor: var(--link-03);\n\t\t}\n\n\t\t&:active {\n\t\t\tcolor: var(--link-01);\n\t\t}\n\t}\n\n\t&__shortcuts {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: var(--unit-1);\n\t\tmargin: var(--unit-3) 0;\n\t}\n\n\t&__time {\n\t\twidth: 100%;\n\t\tpadding: 0 !important;\n\t}\n\n\t&--has-time &__times {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\tjustify-content: stretch;\n\t\theight: calc(100% - 35px);\n\t}\n\n\t&--is-range.kt-field-date-popover--has-time &__day-switch {\n\t\tflex-direction: row;\n\t\twidth: 100%;\n\n\t\t> div {\n\t\t\tflex-basis: 33%;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<GenericDateField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericDateField from './components/GenericDateField.vue'\nimport { KottiFieldDate } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldDate',\n\tcomponents: {\n\t\tGenericDateField,\n\t},\n\tprops: makeProps(KottiFieldDate.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (payload: unknown) => {\n\t\t\t\temit('update:modelValue', payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericDateField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\tisRange\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericDateField from './components/GenericDateField.vue'\nimport { KottiFieldDateRange } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldDateRange',\n\tcomponents: {\n\t\tGenericDateField,\n\t},\n\tprops: makeProps(KottiFieldDateRange.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (payload: unknown) => {\n\t\t\t\temit('update:modelValue', payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericDateField\n\t\tv-bind=\"$props\"\n\t\thasTime\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericDateField from './components/GenericDateField.vue'\nimport { KottiFieldDateTime } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldDateTime',\n\tcomponents: {\n\t\tGenericDateField,\n\t},\n\tprops: makeProps(KottiFieldDateTime.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (payload: unknown) => {\n\t\t\t\temit('update:modelValue', payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericDateField\n\t\tv-bind=\"$props\"\n\t\thasTime\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\tisRange\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericDateField from './components/GenericDateField.vue'\nimport { KottiFieldDateTimeRange } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldDateTimeRange',\n\tcomponents: {\n\t\tGenericDateField,\n\t},\n\tprops: makeProps(KottiFieldDateTimeRange.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (payload: unknown) => {\n\t\t\t\temit('update:modelValue', payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_DATE_SUPPORTS } from './constants'\nimport KtFieldDateVue from './KtFieldDate.vue'\nimport KtFieldDateRangeVue from './KtFieldDateRange.vue'\nimport KtFieldDateTimeVue from './KtFieldDateTime.vue'\nimport KtFieldDateTimeRangeVue from './KtFieldDateTimeRange.vue'\nimport {\n\tKottiFieldDate,\n\tKottiFieldDateRange,\n\tKottiFieldDateTime,\n\tKottiFieldDateTimeRange,\n} from './types'\n\nconst componentFolder = 'kotti-field-date'\nconst DESIGN_URL =\n\t'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=773%3A6059'\n\nexport const KtFieldDate = attachMeta(\n\tmakeInstallable(KtFieldDateVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: DESIGN_URL,\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldDate',\n\t\t\tschema: KottiFieldDate.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_DATE_SUPPORTS },\n)\n\nexport const KtFieldDateRange = attachMeta(\n\tmakeInstallable(KtFieldDateRangeVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: DESIGN_URL,\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldDateRange',\n\t\t\tschema: KottiFieldDateRange.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_DATE_SUPPORTS },\n)\n\nexport const KtFieldDateTime = attachMeta(\n\tmakeInstallable(KtFieldDateTimeVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: DESIGN_URL,\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldDateTime',\n\t\t\tschema: KottiFieldDateTime.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_DATE_SUPPORTS },\n)\n\nexport const KtFieldDateTimeRange = attachMeta(\n\tmakeInstallable(KtFieldDateTimeRangeVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: DESIGN_URL,\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldDateTimeRange',\n\t\t\tschema: KottiFieldDateTimeRange.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_DATE_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport enum ErrorCodes {\n\tNOT_ALLOWED_ERROR = 'NotAllowedError',\n\tNOT_FOUND_ERROR = 'NotFoundError',\n\tNOT_SUPPORTED_ERROR = 'NotSupportedError',\n}\n\nexport const KOTTI_FIELD_FILE_UPLOAD_SUPPORTS: KottiField.Supports = {\n\tautoComplete: false,\n\tborderless: false,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: false,\n\ttabIndex: true,\n}\n","import { filesize } from 'filesize'\n\n/**\n * Formats an array of strings to a comma-separated string in uppercase\n * @param extensions Array of allowed file extensions\n * @param collapseExtensionsAfter Maximum number of extensions to display\n * @returns Formatted string, e.g.: \"JPG, JPEG, JP2, PNG\"\n */\nexport const formatExtensions = (\n\textensions: Array<string>,\n\tcollapseExtensionsAfter: number,\n): string =>\n\t[\n\t\t...extensions\n\t\t\t.slice(0, collapseExtensionsAfter)\n\t\t\t.map((extension: string) => extension.replaceAll('.', '').trim()),\n\t\t...(extensions.length > collapseExtensionsAfter ? ['…'] : []),\n\t]\n\t\t.join(', ')\n\t\t.toUpperCase()\n\n/**\n * Formats file size to a human readable file size string from a number\n * @param fileSize File size in bytes\n * @param round Decimal place, default is 1\n * @returns Formatted file size string\n */\nexport const formatFileSize = (fileSize: number, round = 1): string =>\n\tfilesize(fileSize, { round })\n","/**\n * Builds a valid string for the HTML file input's accept attribute\n * @param extensions Array of allowed file extensions\n * @returns Accept string, e.g.: \".jpg,.jpeg,.jp2,.png\"\n */\nexport const buildAcceptString = (\n\textensions: Array<string>,\n): HTMLInputElement['accept'] | undefined =>\n\textensions.length > 0\n\t\t? extensions\n\t\t\t\t.map((extension) => `.${extension.replaceAll('.', '').trim()}`)\n\t\t\t\t.join(',')\n\t\t\t\t.toLowerCase()\n\t\t: undefined\n","import { KottiFieldFileUpload, Shared } from './types'\n\nexport const isSelectingMultipleFilesWhenNotAllowed = (\n\tallowMultiple: boolean,\n\tselectionSize: number,\n): boolean => !allowMultiple && selectionSize > 1\n\nconst isValidFileSize = (fileSize: number, maxFileSize: number): boolean =>\n\tfileSize <= maxFileSize\n\nconst isValidFileExtension = (\n\tfileName: string,\n\tvalidFileExtensions: Array<string>,\n): boolean => {\n\tif (validFileExtensions.length === 0) return true\n\n\tconst fileExtension = fileName.split('.').pop() ?? null\n\n\tif (fileExtension === null) return false\n\n\treturn validFileExtensions.some(\n\t\t(extension) =>\n\t\t\textension.localeCompare(fileExtension.trim(), undefined, {\n\t\t\t\tsensitivity: 'accent',\n\t\t\t}) === 0,\n\t)\n}\n\n/**\n * Validates a File Item\n * @param param0.extensions Allowed file extensions\n * @param param0.fileName The name of the file (muss include file extension)\n * @param param0.fileSize The size of the file in bytes\n * @param param0.maxFileSize The maximum file size allowed in bytes\n * @returns Validation.SUCCESS if the file is valid, else either\n * Validation.INVALID_EXTENSION or Validation.MAX_SIZE_EXCEEDED.\n * Validation.INVALID_EXTENSION has higher priority.\n */\nexport const validateFile = ({\n\textensions,\n\tfileName,\n\tfileSize,\n\tmaxFileSize,\n}: {\n\textensions: KottiFieldFileUpload.PropsInternal['extensions']\n\tfileName: string\n\tfileSize: number\n\tmaxFileSize: KottiFieldFileUpload.PropsInternal['maxFileSize']\n}): Shared.Validation => {\n\tif (!isValidFileExtension(fileName, extensions))\n\t\treturn Shared.Validation.INVALID_EXTENSION\n\n\tif (!isValidFileSize(fileSize, maxFileSize))\n\t\treturn Shared.Validation.MAX_SIZE_EXCEEDED\n\n\treturn Shared.Validation.SUCCESS\n}\n\n/**\n * Checks whether Value is valid\n * @param value The value to evaluate\n * @returns true if at least one selected file is valid, else false\n */\nexport const isValidValue = (\n\tvalue: KottiFieldFileUpload.ValueInternal,\n): boolean =>\n\tvalue.some(\n\t\t(fileItem) =>\n\t\t\tfileItem.status === KottiFieldFileUpload.Status.READY_TO_UPLOAD ||\n\t\t\tfileItem.status === KottiFieldFileUpload.Status.UPLOADED,\n\t)\n","<template>\n\t<div\n\t\t:class=\"rootClasses\"\n\t\t:data-test=\"dataTest ? `${dataTest}.dropArea` : undefined\"\n\t\t:tabIndex=\"localTabIndex\"\n\t\t@blur=\"onBlur\"\n\t\t@click.stop=\"onTriggerInput\"\n\t\t@dragleave.stop.prevent=\"onDragLeave\"\n\t\t@dragover.stop.prevent=\"onDragOver\"\n\t\t@drop.stop.prevent=\"onDrop\"\n\t\t@keydown.enter.stop.prevent=\"onTriggerInput\"\n\t\t@keydown.space.stop.prevent=\"onTriggerInput\"\n\t>\n\t\t<div class=\"kt-field-file-upload-drop-area__description\">\n\t\t\t<i v-if=\"icon\" class=\"yoco\" v-text=\"icon\" />\n\t\t\t<a v-text=\"translations.text.clickToUpload\" />\n\t\t\t{{ translations.text.dragAndDrop }}\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"showInformation\"\n\t\t\tclass=\"kt-field-file-upload-drop-area__information\"\n\t\t>\n\t\t\t{{ informationText }}\n\t\t\t<a\n\t\t\t\tv-if=\"externalUrl\"\n\t\t\t\tclass=\"kt-field-file-upload-drop-area__external-link\"\n\t\t\t\t:href=\"externalUrl\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t@click.stop\n\t\t\t>\n\t\t\t\t{{ translations.text.learnMore }}\n\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.LINK\" />\n\t\t\t</a>\n\t\t</div>\n\t\t<input\n\t\t\tv-show=\"false\"\n\t\t\tref=\"uploadInputRef\"\n\t\t\tv-bind=\"inputProps\"\n\t\t\t@cancel=\"onCancelSelect\"\n\t\t\t@change=\"onSelect\"\n\t\t/>\n\t\t<div\n\t\t\tv-if=\"$slots.footer\"\n\t\t\tclass=\"kt-field-file-upload-drop-area__footer-slot\"\n\t\t\t@click.stop\n\t\t\t@keydown.enter.stop\n\t\t\t@keydown.space.stop\n\t\t>\n\t\t\t<slot name=\"footer\" />\n\t\t</div>\n\t\t<span\n\t\t\tv-if=\"!allowMultiple\"\n\t\t\tv-show=\"isError\"\n\t\t\tclass=\"kt-field-file-upload-drop-area__error\"\n\t\t\tv-text=\"translations.error.multipleNotAllowed\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { formatExtensions, formatFileSize } from '../formatters'\nimport { Shared } from '../types'\nimport { buildAcceptString } from '../utils'\nimport { isSelectingMultipleFilesWhenNotAllowed } from '../validators'\n\nexport default defineComponent({\n\tname: 'DropArea',\n\tprops: makeProps(Shared.DropArea.schema),\n\temits: ['addFiles', 'blur'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst isError = ref<boolean>(false)\n\t\tconst isFileExplorerOpen = ref<boolean>(false)\n\t\tconst uploadInputRef = ref<HTMLInputElement | null>(null)\n\n\t\tconst informationText = computed(() =>\n\t\t\t[\n\t\t\t\tformatExtensions(props.extensions, props.collapseExtensionsAfter),\n\t\t\t\tprops.maxFileSize !== Number.MAX_SAFE_INTEGER\n\t\t\t\t\t? `(${translations.value.text.max} ${formatFileSize(\n\t\t\t\t\t\t\tprops.maxFileSize,\n\t\t\t\t\t\t)})`\n\t\t\t\t\t: null,\n\t\t\t]\n\t\t\t\t.filter((str) => str)\n\t\t\t\t.join(' '),\n\t\t)\n\n\t\tconst emitFiles = (files: FileList | null) => {\n\t\t\tif (props.isDisabled || !files?.length) return\n\n\t\t\tif (\n\t\t\t\tisSelectingMultipleFilesWhenNotAllowed(\n\t\t\t\t\tprops.allowMultiple,\n\t\t\t\t\tfiles.length,\n\t\t\t\t)\n\t\t\t)\n\t\t\t\treturn\n\n\t\t\tconst payload: Shared.Events.AddFiles = Array.from(files)\n\t\t\temit('addFiles', payload)\n\t\t\tisFileExplorerOpen.value = false\n\t\t}\n\n\t\treturn {\n\t\t\tinformationText,\n\t\t\tinputProps: computed(() => ({\n\t\t\t\taccept: buildAcceptString(props.extensions),\n\t\t\t\t'data-test': props.dataTest ? `${props.dataTest}.input` : undefined,\n\t\t\t\tdisabled: props.isDisabled || props.isLoading,\n\t\t\t\tid: props.inputId,\n\t\t\t\tmultiple: props.allowMultiple,\n\t\t\t\ttype: 'file',\n\t\t\t})),\n\t\t\tisError,\n\t\t\tlocalTabIndex: computed(() =>\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tprops.isDisabled ? -1 : (props.tabIndex ?? 0),\n\t\t\t),\n\t\t\tonBlur: () => {\n\t\t\t\tif (isFileExplorerOpen.value) return\n\t\t\t\temit('blur')\n\t\t\t},\n\t\t\tonCancelSelect: () => {\n\t\t\t\tisFileExplorerOpen.value = false\n\t\t\t},\n\t\t\tonDragLeave: () => {\n\t\t\t\tisError.value = false\n\t\t\t},\n\t\t\tonDragOver: (event: DragEvent) => {\n\t\t\t\tconst items = Array.from(event.dataTransfer?.items ?? [])\n\t\t\t\tisError.value = isSelectingMultipleFilesWhenNotAllowed(\n\t\t\t\t\tprops.allowMultiple,\n\t\t\t\t\titems.length,\n\t\t\t\t)\n\t\t\t},\n\t\t\tonDrop: (event: DragEvent) => {\n\t\t\t\tisError.value = false\n\t\t\t\temitFiles(event.dataTransfer?.files ?? null)\n\t\t\t},\n\t\t\tonSelect: (event: Event) => {\n\t\t\t\tconst target = event.target as HTMLInputElement\n\t\t\t\temitFiles(target.files)\n\t\t\t},\n\t\t\tonTriggerInput: () => {\n\t\t\t\tif (uploadInputRef.value === null)\n\t\t\t\t\tthrow new Error('uploadInputRef is null')\n\n\t\t\t\tisFileExplorerOpen.value = true\n\t\t\t\tuploadInputRef.value.click()\n\t\t\t},\n\t\t\trootClasses: computed(() => ({\n\t\t\t\t'kt-field-file-upload-drop-area': true,\n\t\t\t\t'kt-field-file-upload-drop-area--is-disabled': props.isDisabled,\n\t\t\t\t'kt-field-file-upload-drop-area--is-error':\n\t\t\t\t\t!props.isDisabled && isError.value,\n\t\t\t})),\n\t\t\tshowInformation: computed(\n\t\t\t\t() => informationText.value || props.externalUrl,\n\t\t\t),\n\t\t\ttranslations,\n\t\t\tuploadInputRef,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-field/mixins';\n\n.kt-field__wrapper {\n\t@include validations using ($type) {\n\t\t&:not(.kt-field__wrapper--disabled) {\n\t\t\t@if $type != empty {\n\t\t\t\t.kt-field-file-upload-drop-area {\n\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-field-file-upload-drop-area:focus {\n\t\t\t\t--support-empty-light: var(--interactive-05);\n\n\t\t\t\tpadding: calc(var(--unit-9) - 1px) calc(var(--unit-6) - 1px);\n\t\t\t\tborder: 2px dashed var(--support-#{$type}-light);\n\t\t\t}\n\n\t\t\t.kt-field-file-upload-drop-area:not(:focus-within):hover {\n\t\t\t\t--support-empty-bg: var(--interactive-02-hover);\n\t\t\t\t--support-empty-light: var(--interactive-04);\n\n\t\t\t\tbackground-color: var(--support-#{$type}-bg);\n\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.kt-field-file-upload-drop-area {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\twidth: 100%;\n\tpadding: var(--unit-9) var(--unit-6);\n\tcursor: pointer;\n\tbackground-color: var(--ui-01);\n\tborder: 1px dashed var(--ui-02);\n\tborder-radius: var(--unit-1);\n\n\t&--is-disabled {\n\t\tpointer-events: none;\n\t\tbackground-color: var(--ui-background);\n\n\t\t.kt-field-file-upload-drop-area__description a {\n\t\t\tcolor: var(--text-05);\n\t\t}\n\t}\n\n\t&--is-error {\n\t\tbackground-color: var(--support-error-bg);\n\t\tborder-color: var(--support-error-light);\n\t}\n\n\t&__description {\n\t\tfont-size: 16px;\n\t\tline-height: 20px;\n\t\tcolor: var(--text-02);\n\t\ttext-align: center;\n\n\t\ti {\n\t\t\tmargin-right: var(--unit-1);\n\t\t\tfont-size: var(--unit-6);\n\t\t\tvertical-align: bottom;\n\t\t\tcolor: var(--icon-02);\n\t\t}\n\n\t\ta {\n\t\t\tcolor: var(--interactive-01);\n\t\t}\n\t}\n\n\t&__error {\n\t\tposition: absolute;\n\t\tright: var(--unit-2);\n\t\tbottom: var(--unit-1);\n\t\tleft: var(--unit-2);\n\t\tfont-size: 12px;\n\t\tline-height: 20px;\n\t\tcolor: var(--support-error);\n\t\ttext-align: center;\n\t}\n\n\t&__external-link {\n\t\tcolor: var(--interactive-01);\n\t\tcursor: pointer;\n\t}\n\n\t&__footer-slot {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--unit-2);\n\t\talign-items: center;\n\t\tmargin-top: var(--unit-4);\n\t}\n\n\t&__information {\n\t\tmargin-top: calc(var(--unit-1) + var(--unit-h));\n\t\tfont-size: 14px;\n\t\tline-height: 20px;\n\t\tcolor: var(--text-03);\n\t\ttext-align: center;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"classes\" @click=\"$emit('click')\">\n\t\t<i class=\"yoco\" v-text=\"icon\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { makeProps } from '../../make-props'\nimport { Shared } from '../types'\n\nexport default defineComponent({\n\tname: 'ActionButton',\n\tprops: makeProps(Shared.ActionButton.schema),\n\temits: ['click'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tclasses: computed(() => ({\n\t\t\t\t'action-button': true,\n\t\t\t\t'action-button--is-disabled': props.isDisabled,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.action-button {\n\tdisplay: flex;\n\talign-items: center;\n\theight: var(--unit-8);\n\tpadding: 0 var(--unit-2);\n\tfont-size: 1rem;\n\tcolor: var(--interactive-01);\n\tcursor: pointer;\n\tborder-radius: var(--border-radius);\n\n\t&:not(&--is-disabled):hover {\n\t\tcolor: var(--interactive-01-hover);\n\t\tbackground-color: var(--interactive-02-hover);\n\t\tborder-color: var(--interactive-02-hover);\n\t}\n\n\t&--is-disabled {\n\t\tpointer-events: none;\n\t\topacity: 0.46;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"wrapperClasses\">\n\t\t<div class=\"kt-field-file-upload-item__wrapper\">\n\t\t\t<div>\n\t\t\t\t<div class=\"kt-field-file-upload-item__name\">\n\t\t\t\t\t<span v-text=\"name\" />\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"isInternal\"\n\t\t\t\t\t\tclass=\"kt-field-file-upload-item__is-internal-tag\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.PERMISSION_LOCKED\" />\n\t\t\t\t\t\t<span v-text=\"translations.label.internal\" />\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"kt-field-file-upload-item__description\">\n\t\t\t\t\t<slot name=\"description\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"kt-field-file-upload-item__actions\">\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<slot name=\"footer\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\n\nexport default defineComponent({\n\tname: 'ItemLayout',\n\tprops: {\n\t\tisInternal: { default: false, type: Boolean },\n\t\tname: { required: true, type: String },\n\t},\n\tsetup(props) {\n\t\treturn {\n\t\t\ttranslations: useTranslationNamespace('KtFieldFileUpload'),\n\t\t\twrapperClasses: computed(() => ({\n\t\t\t\t'kt-field-file-upload-item': true,\n\t\t\t\t'kt-field-file-upload-item--is-internal': props.isInternal,\n\t\t\t})),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-field-file-upload-item {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: var(--unit-2);\n\tborder-bottom: 1px solid var(--ui-02);\n\n\t&__actions {\n\t\tdisplay: flex;\n\t\tflex: 0 0 auto;\n\t\talign-items: center;\n\t}\n\n\t&__description {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-size: 14px;\n\t\tline-height: 20px;\n\t\tcolor: var(--text-03);\n\n\t\t.yoco {\n\t\t\tflex: 0 0 auto;\n\t\t\tmargin-right: var(--unit-1);\n\t\t\tfont-size: calc(var(--unit-4) + var(--unit-h));\n\t\t\tcolor: var(--support-error);\n\t\t}\n\t}\n\n\t&--is-internal {\n\t\tbackground-color: var(--ui-01);\n\t}\n\n\t&__is-internal-tag {\n\t\tdisplay: inline-flex;\n\t\talign-items: baseline;\n\t\tpadding: 0;\n\t\tmargin-left: 0;\n\t\tfont-size: calc(var(--unit-3) + var(--unit-h));\n\t\tcolor: var(--text-02);\n\n\t\t.yoco {\n\t\t\talign-self: center;\n\t\t\tmargin-right: var(--unit-1);\n\t\t\tfont-size: var(--unit-4);\n\t\t}\n\t}\n\n\t&__name {\n\t\tmargin-bottom: var(--unit-1);\n\t\tfont-size: 16px;\n\t\tline-height: 20px;\n\t\tcolor: var(--text-01);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-2);\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tword-break: normal;\n\t}\n}\n</style>\n","<template>\n\t<ItemLayout :isInternal=\"fileInfo.isInternal\" :name=\"fileInfo.name\">\n\t\t<template #description>\n\t\t\t<i v-if=\"isError\" class=\"yoco\" v-text=\"Yoco.Icon.CIRCLE_ATTENTION\" />\n\t\t\t{{ description }}\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionButton\n\t\t\t\tv-if=\"showViewOrDownloadAction\"\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest\n\t\t\t\t\t\t? `${dataTest}.${fileInfo.id}.viewOrDownloadButton`\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"viewOrDownloadActionIcon\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickViewOrDownload\"\n\t\t\t/>\n\t\t\t<ActionButton\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest ? `${dataTest}.${fileInfo.id}.deleteButton` : undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"deleteActionIcon\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickDelete\"\n\t\t\t/>\n\t\t</template>\n\t</ItemLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { formatFileSize } from '../formatters'\nimport { KottiFieldFileUpload, Shared } from '../types'\n\nimport ActionButton from './ActionButton.vue'\nimport ItemLayout from './ItemLayout.vue'\n\nexport default defineComponent({\n\tname: 'FileItem',\n\tcomponents: {\n\t\tActionButton,\n\t\tItemLayout,\n\t},\n\tprops: makeProps(KottiFieldFileUpload.FileItem.schema),\n\temits: ['remove'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst status = computed(() => props.fileInfo.status)\n\t\tconst statusText = computed(() =>\n\t\t\tprops.fileInfo.validation === Shared.Validation.SUCCESS\n\t\t\t\t? translations.value.statusMsg[status.value]\n\t\t\t\t: translations.value.validationMsg[props.fileInfo.validation],\n\t\t)\n\n\t\treturn {\n\t\t\tdeleteActionIcon: computed<Yoco.Icon>(() =>\n\t\t\t\t[\n\t\t\t\t\tKottiFieldFileUpload.Status.READY_TO_UPLOAD,\n\t\t\t\t\tKottiFieldFileUpload.Status.UPLOADED,\n\t\t\t\t].includes(status.value as KottiFieldFileUpload.Status)\n\t\t\t\t\t? Yoco.Icon.TRASH\n\t\t\t\t\t: Yoco.Icon.CLOSE,\n\t\t\t),\n\t\t\tdescription: computed(() =>\n\t\t\t\t[formatFileSize(props.fileInfo.size), statusText.value].join(' - '),\n\t\t\t),\n\t\t\tisError: computed(\n\t\t\t\t() => status.value === KottiFieldFileUpload.Status.INVALID,\n\t\t\t),\n\t\t\tonClickDelete: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\tconst payload: Shared.Events.RemoveFile = props.fileInfo.id\n\t\t\t\temit('remove', payload)\n\t\t\t},\n\t\t\tonClickViewOrDownload: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\twindow.open(\n\t\t\t\t\tprops.fileInfo.viewUrl ?? props.fileInfo.downloadUrl,\n\t\t\t\t\t'_blank',\n\t\t\t\t)\n\t\t\t},\n\t\t\tshowViewOrDownloadAction: computed(\n\t\t\t\t() =>\n\t\t\t\t\tstatus.value === KottiFieldFileUpload.Status.UPLOADED &&\n\t\t\t\t\t(Boolean(props.fileInfo.viewUrl) ||\n\t\t\t\t\t\tBoolean(props.fileInfo.downloadUrl)),\n\t\t\t),\n\t\t\tviewOrDownloadActionIcon: computed<Yoco.Icon>(() =>\n\t\t\t\tprops.fileInfo.viewUrl ? Yoco.Icon.EYE : Yoco.Icon.DOWNLOAD,\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<ItemLayout\n\t\tclass=\"pre-uploaded-item\"\n\t\t:isInternal=\"fileInfo.isInternal\"\n\t\t:name=\"fileInfo.name\"\n\t>\n\t\t<template #description>\n\t\t\t<i v-if=\"isInvalid\" class=\"yoco\" v-text=\"Yoco.Icon.CIRCLE_ATTENTION\" />\n\t\t\t{{ description }}\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionButton\n\t\t\t\tv-if=\"showViewOrDownloadAction\"\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest\n\t\t\t\t\t\t? `${dataTest}.${fileInfo.id}.viewOrDownloadButton`\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"viewOrDownloadActionIcon\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickViewOrDownload\"\n\t\t\t/>\n\t\t\t<ActionButton\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest ? `${dataTest}.${fileInfo.id}.deleteButton` : undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"Yoco.Icon.TRASH\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickDelete\"\n\t\t\t/>\n\t\t</template>\n\t</ItemLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { formatFileSize } from '../formatters'\nimport { KottiFieldFileUpload, Shared } from '../types'\n\nimport ActionButton from './ActionButton.vue'\nimport ItemLayout from './ItemLayout.vue'\n\nexport default defineComponent({\n\tname: 'PreUploadedFileItem',\n\tcomponents: {\n\t\tActionButton,\n\t\tItemLayout,\n\t},\n\tprops: makeProps(KottiFieldFileUpload.FileItem.schema),\n\temits: ['remove'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst errorMessage = computed(() =>\n\t\t\tprops.fileInfo.validation !== Shared.Validation.SUCCESS\n\t\t\t\t? translations.value.validationMsg[props.fileInfo.validation]\n\t\t\t\t: null,\n\t\t)\n\n\t\treturn {\n\t\t\tdescription: computed(() =>\n\t\t\t\t[formatFileSize(props.fileInfo.size), errorMessage.value]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(' - '),\n\t\t\t),\n\t\t\tisInvalid: computed(\n\t\t\t\t() => props.fileInfo.validation !== Shared.Validation.SUCCESS,\n\t\t\t),\n\t\t\tonClickDelete: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\tconst payload: Shared.Events.RemoveFile = props.fileInfo.id\n\t\t\t\temit('remove', payload)\n\t\t\t},\n\t\t\tonClickViewOrDownload: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\twindow.open(\n\t\t\t\t\tprops.fileInfo.viewUrl ?? props.fileInfo.downloadUrl,\n\t\t\t\t\t'_blank',\n\t\t\t\t)\n\t\t\t},\n\t\t\tshowViewOrDownloadAction: computed(\n\t\t\t\t() =>\n\t\t\t\t\tBoolean(props.fileInfo.viewUrl) ||\n\t\t\t\t\tBoolean(props.fileInfo.downloadUrl),\n\t\t\t),\n\t\t\tviewOrDownloadActionIcon: computed<Yoco.Icon>(() =>\n\t\t\t\tprops.fileInfo.viewUrl ? Yoco.Icon.EYE : Yoco.Icon.DOWNLOAD,\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.pre-uploaded-item {\n\tbackground-color: var(--ui-01);\n}\n</style>\n","<template>\n\t<div :class=\"wrapperClasses\">\n\t\t<div\n\t\t\tclass=\"scrollable-container__shadow-overlay scrollable-container__shadow-overlay--is-top\"\n\t\t/>\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'scrollable-container__content': true,\n\t\t\t\t'hide-scrollbar': hideScrollbar,\n\t\t\t}\"\n\t\t>\n\t\t\t<div ref=\"topSentinelRef\" class=\"scrollable-container__sentinel\" />\n\t\t\t<slot />\n\t\t\t<div ref=\"bottomSentinelRef\" class=\"scrollable-container__sentinel\" />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"scrollable-container__shadow-overlay scrollable-container__shadow-overlay--is-bottom\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'\n\nexport default defineComponent({\n\tname: 'ScrollableContainer',\n\tprops: {\n\t\thideScrollbar: { default: false, type: Boolean },\n\t},\n\tsetup() {\n\t\tconst bottomSentinelRef = ref<HTMLDivElement | null>(null)\n\t\tconst containerRef = ref<HTMLDivElement | null>(null)\n\t\tconst isBottomShadowVisible = ref(true)\n\t\tconst isTopShadowVisible = ref(true)\n\t\tconst topSentinelRef = ref<HTMLDivElement | null>(null)\n\n\t\tlet observer: IntersectionObserver | null = null\n\n\t\tonMounted(() => {\n\t\t\tconst options = {\n\t\t\t\troot: null,\n\t\t\t\tthreshold: 0,\n\t\t\t}\n\n\t\t\tobserver = new window.IntersectionObserver((entries) => {\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tif (entry.target === topSentinelRef.value) {\n\t\t\t\t\t\tisTopShadowVisible.value = entry.isIntersecting\n\t\t\t\t\t}\n\n\t\t\t\t\tif (entry.target === bottomSentinelRef.value) {\n\t\t\t\t\t\tisBottomShadowVisible.value = entry.isIntersecting\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}, options)\n\n\t\t\tif (topSentinelRef.value) observer.observe(topSentinelRef.value)\n\t\t\tif (bottomSentinelRef.value) observer.observe(bottomSentinelRef.value)\n\t\t})\n\n\t\tonBeforeUnmount(() => {\n\t\t\tif (observer) observer.disconnect()\n\t\t})\n\n\t\treturn {\n\t\t\tbottomSentinelRef,\n\t\t\tcontainerRef,\n\t\t\ttopSentinelRef,\n\t\t\twrapperClasses: computed(() => ({\n\t\t\t\t'scrollable-container__wrapper': true,\n\t\t\t\t'scrollable-container__wrapper--has-bottom-shadow':\n\t\t\t\t\t!isBottomShadowVisible.value,\n\t\t\t\t'scrollable-container__wrapper--has-top-shadow':\n\t\t\t\t\t!isTopShadowVisible.value,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-field/mixins';\n\n$shadow-overlay-height: 5px;\n\n.hide-scrollbar {\n\toverflow-y: auto;\n\tscrollbar-width: none; /* Firefox */\n\t-ms-overflow-style: none; /* Internet Explorer and Edge */\n\n\t&::-webkit-scrollbar {\n\t\tdisplay: none; /* Webkit browsers (Chrome, Safari, newer Edge) */\n\t}\n}\n\n.scrollable-container {\n\t&__content {\n\t\t&:not(.hide-scrollbar) {\n\t\t\t@include prettify-scrollbar;\n\t\t}\n\n\t\tposition: relative;\n\t\tpadding: 0 var(--unit-4);\n\t\toverflow-y: auto;\n\t}\n\n\t&__sentinel {\n\t\theight: 1px;\n\t\topacity: 0;\n\t}\n\n\t&__shadow-overlay {\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tleft: 0;\n\t\tz-index: 5;\n\t\theight: $shadow-overlay-height;\n\t\tpointer-events: none;\n\t\tbackground-color: var(--ui-background);\n\t\topacity: 0;\n\t\ttransition: opacity 0.3s ease;\n\n\t\t&--is-top {\n\t\t\ttop: calc(-1 * $shadow-overlay-height);\n\t\t\tbox-shadow: 0 2px 10px 2px rgb(0 0 0 / 40%);\n\t\t}\n\n\t\t&--is-bottom {\n\t\t\tbottom: calc(-1 * $shadow-overlay-height);\n\t\t\tbox-shadow: 0 -2px 10px 2px rgb(0 0 0 / 40%);\n\t\t}\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\n\t\t&--has-top-shadow {\n\t\t\t.scrollable-container__shadow-overlay--is-top {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&--has-bottom-shadow {\n\t\t\t.scrollable-container__shadow-overlay--is-bottom {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div>\n\t\t<div ref=\"targetRef\" />\n\t\t<div ref=\"contentRef\" class=\"kt-modal__mask\" @click.self=\"closeModal\">\n\t\t\t<slot name=\"container\">\n\t\t\t\t<div :class=\"modalClass\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"hasSlot('header') || title || showCloseButton\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'kt-modal__header': true,\n\t\t\t\t\t\t\t'kt-modal__header--has-content': hasSlot('header') || title,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div v-if=\"hasSlot('header')\">\n\t\t\t\t\t\t\t<slot name=\"header\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tv-else-if=\"title\"\n\t\t\t\t\t\t\tclass=\"kt-modal__header-title\"\n\t\t\t\t\t\t\tv-text=\"title\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<KtButton\n\t\t\t\t\t\t\tv-if=\"showCloseButton\"\n\t\t\t\t\t\t\tclass=\"kt-modal__header-close-btn\"\n\t\t\t\t\t\t\tdata-test=\"kt-modal-header-close-btn\"\n\t\t\t\t\t\t\t:icon=\"Yoco.Icon.CLOSE\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t@click=\"$emit('close')\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ScrollableContainer\n\t\t\t\t\t\tv-if=\"hasSlot('body')\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'kt-modal__body--has-padding-bottom': !hasSlot('footer'),\n\t\t\t\t\t\t\t'kt-modal__body--has-padding-top':\n\t\t\t\t\t\t\t\t!hasSlot('header') && !title && !showCloseButton,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<slot name=\"body\" />\n\t\t\t\t\t</ScrollableContainer>\n\t\t\t\t\t<div v-if=\"hasSlot('footer')\" class=\"kt-modal__footer\">\n\t\t\t\t\t\t<slot name=\"footer\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</slot>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { Instance, Props as TippyProps } from 'tippy.js'\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../kotti-button'\nimport { makeProps } from '../make-props'\nimport ScrollableContainer from '../shared-components/ScrollableContainer.vue'\n\nimport { KottiModal } from './types'\n\nexport default defineComponent({\n\tname: 'KtModal',\n\tcomponents: {\n\t\tKtButton,\n\t\tScrollableContainer,\n\t},\n\tprops: makeProps(KottiModal.propsSchema),\n\temits: ['close'],\n\tsetup(props, { emit, slots }) {\n\t\tconst contentRef = ref<HTMLElement | null>(null)\n\t\tconst targetRef = ref<HTMLElement | null>(null)\n\t\tconst tippyInstanceRef = ref<Instance | null>(null)\n\n\t\tuseTippy(\n\t\t\ttargetRef,\n\t\t\tcomputed<Partial<TippyProps>>(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\thideOnClick: false,\n\t\t\t\tinteractive: true,\n\t\t\t\t/**\n\t\t\t\t * The `onCreate` function of `tippyjs` gets executed after the `KtModal`\n\t\t\t\t * component renders.\n\t\t\t\t *\n\t\t\t\t * `props.isOpen` therefore has an initial value, assigned in the watcher\n\t\t\t\t * that would not have an effect, unless we manually update it in `onCreate`\n\t\t\t\t *\n\t\t\t\t * It can alternatively be passed as a prop to tippy (`showOnCreate`)\n\t\t\t\t * @see {@link https://atomiks.github.io/tippyjs/v6/all-props/#showoncreate}\n\t\t\t\t */\n\t\t\t\toffset: [0, 0],\n\t\t\t\tonCreate(instance) {\n\t\t\t\t\ttippyInstanceRef.value = instance\n\n\t\t\t\t\tif (props.isOpen) tippyInstanceRef.value.show()\n\t\t\t\t},\n\t\t\t\tpopperOptions: {\n\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'computeStyles',\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tadaptive: false,\n\t\t\t\t\t\t\t\tgpuAcceleration: false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\trender() {\n\t\t\t\t\tconst popper = document.createElement('div')\n\n\t\t\t\t\tif (contentRef.value === null)\n\t\t\t\t\t\tthrow new Error('KtModal: Unbound contentRef')\n\n\t\t\t\t\tpopper.append(contentRef.value)\n\n\t\t\t\t\treturn { popper }\n\t\t\t\t},\n\t\t\t\ttrigger: 'manual',\n\t\t\t})),\n\t\t)\n\n\t\twatch(\n\t\t\t() => props.isOpen,\n\t\t\t(shouldOpen, wasOpen) => {\n\t\t\t\t// component just mounted but tippy hasn't\n\t\t\t\tif (wasOpen === undefined && tippyInstanceRef.value === null) return\n\n\t\t\t\tif (tippyInstanceRef.value === null)\n\t\t\t\t\tthrow new Error('KtModal: Unbound tippyInstanceRef')\n\n\t\t\t\tif (shouldOpen) tippyInstanceRef.value.show()\n\t\t\t\telse tippyInstanceRef.value.unmount()\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tcloseModal: () => {\n\t\t\t\tif (!props.preventCloseOutside) emit('close')\n\t\t\t},\n\t\t\tcontentRef,\n\t\t\t/**\n\t\t\t * 'slots' is non-reactive, so computed values won't react to\n\t\t\t * changes in 'slots'. Therefore, a function is needed to check\n\t\t\t * if a slot exists.\n\t\t\t */\n\t\t\thasSlot: (name: string): boolean => name in slots,\n\t\t\tmodalClass: computed(() => [\n\t\t\t\t'kt-modal__container',\n\t\t\t\t`kt-modal--is-size-${props.size}`,\n\t\t\t]),\n\t\t\ttargetRef,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style>\n:root {\n\t--kt-drawer-mask-background: rgb(0 0 0 / 50%);\n\t--kt-drawer-shadow: var(--shadow-lg);\n}\n\n:root[data-theme='dark'] {\n\t--kt-drawer-mask-background: rgb(0 0 0 / 70%);\n\t--kt-drawer-shadow: 0 0 32px rgb(180 180 255 / 10%);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n.kt-modal {\n\t&__mask {\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tz-index: $zindex-4;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-color: var(--kt-drawer-mask-background);\n\t\ttransition: opacity var(--transition-long) ease;\n\t}\n\n\t&__container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 90%;\n\t\tmax-height: 90%;\n\t\tbackground-color: var(--ui-background);\n\t\tborder: 1px solid var(--ui-02);\n\t\tborder-radius: var(--border-radius);\n\t\tbox-shadow: var(--kt-drawer-shadow);\n\t\ttransition: all 0.3s ease;\n\t}\n\n\t&--is-size {\n\t\t&-sm {\n\t\t\tmax-width: 24rem;\n\t\t}\n\n\t\t&-md {\n\t\t\tmax-width: 36rem;\n\t\t}\n\n\t\t&-lg {\n\t\t\tmax-width: 48rem;\n\t\t}\n\n\t\t&-xl {\n\t\t\tmax-width: 64rem;\n\t\t}\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tflex: 1 1 auto;\n\t\tjustify-content: flex-end;\n\t\tpadding: var(--unit-3) var(--unit-4);\n\n\t\t&--has-content {\n\t\t\tjustify-content: space-between;\n\t\t}\n\t}\n\n\t&__header-close-btn {\n\t\tcolor: var(--icon-01);\n\n\t\t&:hover,\n\t\t&:focus-visible {\n\t\t\tbackground-color: var(--ui-01);\n\t\t\tborder-color: var(--ui-01);\n\t\t}\n\t}\n\n\t&__header-title {\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tline-height: 1;\n\t\tborder: 0;\n\t}\n\n\t&__body--has-padding-bottom {\n\t\tpadding-bottom: var(--unit-3);\n\t}\n\n\t&__body--has-padding-top {\n\t\tpadding-top: var(--unit-3);\n\t}\n\n\t&__footer {\n\t\tflex: 0 0 auto;\n\t\tpadding: var(--unit-3) var(--unit-4);\n\t\ttext-align: right;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtModalVue from './KtModal.vue'\nimport { KottiModal } from './types'\n\nexport const KtModal = attachMeta(makeInstallable(KtModalVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=99%3A46',\n\t},\n\tslots: {\n\t\tbody: { description: null, scope: null },\n\t\tcontainer: {\n\t\t\tdescription: 'Allows overriding the entire inside of the modal',\n\t\t\tscope: null,\n\t\t},\n\t\tfooter: { description: null, scope: null },\n\t\theader: { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Modal',\n\t\tschema: KottiModal.propsSchema,\n\t},\n})\n","import dayjs from 'dayjs'\n\nimport { ISO8601_SECONDS } from '../../../../constants'\n\n/**\n * Creates a File from a Blob.\n * File name is set to current time in ISO8601 format with \".png\" file extension.\n * @param blob Blob object\n * @returns File object\n */\nconst blobToFile = (blob: Blob): File =>\n\tnew File([blob], `${dayjs().format(ISO8601_SECONDS)}.png`, {\n\t\tlastModified: Date.now(),\n\t\ttype: blob.type,\n\t})\n\n/**\n * Generates a PNG file and image url string from the current data in the canvas element\n * @param canvasEl HTML Canvas Element\n * @param context Canvas Rendering Context 2D\n * @param videoEl HTML Video Element\n * @returns File object and url string\n */\nexport const generateImageFileAndUrl = async (\n\tcanvasEl: HTMLCanvasElement,\n\tcontext: CanvasRenderingContext2D,\n\tvideoEl: HTMLVideoElement,\n): Promise<{\n\tfile: File\n\tphotoUrl: string\n}> => {\n\tconst { videoHeight, videoWidth } = videoEl\n\tcanvasEl.height = videoHeight\n\tcanvasEl.width = videoWidth\n\tcontext.drawImage(videoEl, 0, 0, videoWidth, videoHeight)\n\n\tconst blob = await new Promise<Blob | null>((resolve) => {\n\t\tcanvasEl.toBlob(resolve)\n\t})\n\n\tif (!blob) throw new Error('KtFieldFileUpload: error generating image blob')\n\n\tconst file = blobToFile(blob)\n\tconst photoUrl = canvasEl.toDataURL('image/png')\n\n\treturn {\n\t\tfile,\n\t\tphotoUrl,\n\t}\n}\n","/**\n * Checks whether WebRTC is supported\n * @returns true if supported, else false\n */\nexport const isWebRTCSupported = (): boolean =>\n\tBoolean(window.navigator.mediaDevices) &&\n\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\tBoolean(window.navigator.mediaDevices.enumerateDevices) &&\n\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\tBoolean(window.navigator.mediaDevices.getUserMedia)\n\n/**\n * Requests a list of the available cameras\n * @returns MediaDeviceInfo array describing the cameras\n */\nexport const getConnectedCameras = async (): Promise<MediaDeviceInfo[]> => {\n\tconst devices = await window.navigator.mediaDevices.enumerateDevices()\n\treturn devices.filter((device) => device.kind === 'videoinput')\n}\n\n/**\n * Requests a camera by its deviceId. It will prompt the user for permission to use the camera.\n * @param cameraId The camera ID\n * @returns MediaStream with the camera's video track\n */\nexport const requestCamera = async (cameraId: string): Promise<MediaStream> => {\n\tconst constraints: MediaStreamConstraints = {\n\t\taudio: false,\n\t\tvideo: {\n\t\t\tdeviceId: cameraId,\n\t\t\theight: { ideal: 8192 },\n\t\t\twidth: { ideal: 8192 },\n\t\t},\n\t}\n\treturn await window.navigator.mediaDevices.getUserMedia(constraints)\n}\n\n/**\n * Stops the camera's associated stream media video tracks\n * @param stream MediaStream with the camera's video track\n */\nexport const stopCameraStream = (stream: MediaStream | null): void => {\n\tstream?.getTracks().forEach((track) => {\n\t\ttrack.stop()\n\t})\n}\n","<template>\n\t<KtModal :isOpen=\"shouldOpenModal\" size=\"lg\">\n\t\t<template #header>\n\t\t\t<h2 v-text=\"translations.label.capture\" />\n\t\t</template>\n\t\t<template #body>\n\t\t\t<video v-show=\"isReady\" ref=\"videoRef\" autoplay muted playsinline />\n\t\t\t<div v-if=\"isLoading\" class=\"loading lg\" />\n\t\t</template>\n\t\t<template #footer>\n\t\t\t<KtButton\n\t\t\t\tv-if=\"hasMultipleCameras\"\n\t\t\t\tclass=\"mr-4\"\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.nextCamera` : undefined\"\n\t\t\t\t:disabled=\"!isReady\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:label=\"translations.button.nextCamera\"\n\t\t\t\t@click=\"onClickNextCamera\"\n\t\t\t/>\n\t\t\t<KtButton\n\t\t\t\tclass=\"mr-4\"\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.capture` : undefined\"\n\t\t\t\t:disabled=\"!isReady\"\n\t\t\t\t:icon=\"Yoco.Icon.CAMERA\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:label=\"translations.button.takePhoto\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop=\"onClickCapture\"\n\t\t\t/>\n\t\t\t<KtButton\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.cancel` : undefined\"\n\t\t\t\t:label=\"translations.button.cancel\"\n\t\t\t\t@click.stop=\"$emit('close')\"\n\t\t\t/>\n\t\t</template>\n\t</KtModal>\n</template>\n\n<script lang=\"ts\">\nimport isError from 'lodash/isError.js'\nimport {\n\tcomputed,\n\tdefineComponent,\n\tonBeforeMount,\n\tonBeforeUnmount,\n\tref,\n} from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../../../kotti-button'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { KtModal } from '../../../kotti-modal'\nimport { makeProps } from '../../../make-props'\nimport { ErrorCodes } from '../../constants'\nimport { Shared } from '../../types'\n\nimport {\n\tgenerateImageFileAndUrl,\n\tgetConnectedCameras,\n\tisWebRTCSupported,\n\trequestCamera,\n\tstopCameraStream,\n} from './utils'\n\nenum State {\n\tCAPTURING = 'capturing',\n\tLOADING = 'loading',\n\tREADY = 'ready',\n\tSTOPPED = 'stopped',\n}\n\nexport default defineComponent({\n\tname: 'CapturePhoto',\n\tcomponents: {\n\t\tKtButton,\n\t\tKtModal,\n\t},\n\tprops: makeProps(Shared.TakePhoto.captureSchema),\n\temits: ['capture', 'close', 'error'],\n\tsetup(_, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst cameraIndex = ref<number>(0)\n\t\tconst cameraList = ref<MediaDeviceInfo[]>([])\n\t\tconst shouldOpenModal = ref<boolean>(false)\n\t\tconst state = ref<State>(State.STOPPED)\n\t\tconst stream = ref<MediaStream | null>(null)\n\t\tconst videoRef = ref<HTMLVideoElement | null>(null)\n\n\t\tconst findCameras = async () => {\n\t\t\tstate.value = State.LOADING\n\t\t\ttry {\n\t\t\t\tcameraList.value = await getConnectedCameras()\n\t\t\t} catch (error: unknown) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error)\n\t\t\t\temit('error', isError(error) ? error.name : String(error))\n\t\t\t}\n\t\t}\n\t\tconst startCamera = async () => {\n\t\t\tstate.value = State.LOADING\n\t\t\ttry {\n\t\t\t\tif (!videoRef.value) {\n\t\t\t\t\tthrow new Error('KtFieldFileUpload: unbound HTML video element')\n\t\t\t\t}\n\t\t\t\tstream.value = await requestCamera(\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tcameraList.value[cameraIndex.value]!.deviceId,\n\t\t\t\t)\n\t\t\t\tvideoRef.value.srcObject = stream.value\n\t\t\t\tstate.value = State.READY\n\t\t\t} catch (error: unknown) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error)\n\t\t\t\temit('error', isError(error) ? error.name : String(error))\n\t\t\t}\n\t\t}\n\t\tconst stopCamera = () => {\n\t\t\tstate.value = State.STOPPED\n\t\t\tstopCameraStream(stream.value)\n\t\t\tstream.value = null\n\t\t}\n\n\t\tonBeforeMount(async () => {\n\t\t\tif (isWebRTCSupported()) {\n\t\t\t\tawait findCameras()\n\t\t\t\tawait startCamera()\n\t\t\t\tshouldOpenModal.value = true\n\t\t\t} else emit('error', ErrorCodes.NOT_SUPPORTED_ERROR)\n\t\t})\n\n\t\tonBeforeUnmount(() => {\n\t\t\tstopCamera()\n\t\t})\n\n\t\treturn {\n\t\t\thasMultipleCameras: computed(() => cameraList.value.length > 1),\n\t\t\tisLoading: computed(() => state.value === State.LOADING),\n\t\t\tisReady: computed(() => state.value === State.READY),\n\t\t\tonClickCapture: async () => {\n\t\t\t\tstate.value = State.CAPTURING\n\t\t\t\ttry {\n\t\t\t\t\tconst canvas = document.createElement('canvas')\n\t\t\t\t\tconst context = canvas.getContext('2d')\n\n\t\t\t\t\tif (!context)\n\t\t\t\t\t\tthrow new Error('KtFieldFileUpload: 2d canvas context unavailable')\n\n\t\t\t\t\tif (!videoRef.value)\n\t\t\t\t\t\tthrow new Error('KtFieldFileUpload: unbound HTML video element')\n\n\t\t\t\t\tconst payload: Shared.TakePhoto.Events.Capture =\n\t\t\t\t\t\tawait generateImageFileAndUrl(canvas, context, videoRef.value)\n\n\t\t\t\t\temit('capture', payload)\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\temit('error', isError(error) ? error.name : String(error))\n\t\t\t\t}\n\t\t\t},\n\t\t\tonClickNextCamera: async () => {\n\t\t\t\tcameraIndex.value = (cameraIndex.value + 1) % cameraList.value.length\n\t\t\t\tstopCamera()\n\t\t\t\tawait startCamera()\n\t\t\t},\n\t\t\tshouldOpenModal,\n\t\t\ttranslations,\n\t\t\tvideoRef,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\nvideo {\n\twidth: 100%;\n}\n\n.loading {\n\tmargin-bottom: var(--unit-3);\n}\n</style>\n","<template>\n\t<KtModal isOpen size=\"lg\">\n\t\t<template #header>\n\t\t\t<h2 v-text=\"translations.label.error\" />\n\t\t</template>\n\t\t<template #body>\n\t\t\t<div v-if=\"error\" v-text=\"errorText\" />\n\t\t</template>\n\t\t<template #footer>\n\t\t\t<KtButton\n\t\t\t\tclass=\"mr-4\"\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.retakePhoto` : undefined\"\n\t\t\t\t:label=\"translations.button.retry\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop=\"$emit('retry')\"\n\t\t\t/>\n\t\t\t<KtButton\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.closeError` : undefined\"\n\t\t\t\t:label=\"translations.button.cancel\"\n\t\t\t\t@click.stop=\"$emit('close')\"\n\t\t\t/>\n\t\t</template>\n\t</KtModal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { KtButton } from '../../../kotti-button'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { KtModal } from '../../../kotti-modal'\nimport { makeProps } from '../../../make-props'\nimport { ErrorCodes } from '../../constants'\nimport { Shared } from '../../types'\n\nexport default defineComponent({\n\tname: 'ErrorViewer',\n\tcomponents: {\n\t\tKtButton,\n\t\tKtModal,\n\t},\n\tprops: makeProps(Shared.TakePhoto.errorSchema),\n\temits: ['close', 'retry'],\n\tsetup(props) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst errors = computed<Record<string, string>>(() => ({\n\t\t\tdefault: `${translations.value.label.unknown}: ${String(props.error)}`,\n\t\t\t[ErrorCodes.NOT_ALLOWED_ERROR]: translations.value.error.notAllowed,\n\t\t\t[ErrorCodes.NOT_FOUND_ERROR]: translations.value.error.notFound,\n\t\t\t[ErrorCodes.NOT_SUPPORTED_ERROR]: translations.value.error.notSupported,\n\t\t}))\n\n\t\treturn {\n\t\t\terrorText: computed(() =>\n\t\t\t\tprops.error && props.error in errors.value\n\t\t\t\t\t? errors.value[props.error]\n\t\t\t\t\t: errors.value.default,\n\t\t\t),\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<KtModal isOpen size=\"lg\">\n\t\t<template #header>\n\t\t\t<h2 v-text=\"translations.label.review\" />\n\t\t</template>\n\t\t<template #body>\n\t\t\t<img v-if=\"photoUrl\" :src=\"photoUrl\" />\n\t\t</template>\n\t\t<template #footer>\n\t\t\t<KtButton\n\t\t\t\tclass=\"mr-4\"\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.rejectPhoto` : undefined\"\n\t\t\t\t:icon=\"Yoco.Icon.CAMERA\"\n\t\t\t\t:label=\"translations.button.rejectPhoto\"\n\t\t\t\t@click.stop=\"$emit('reject')\"\n\t\t\t/>\n\t\t\t<KtButton\n\t\t\t\tclass=\"mr-4\"\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.acceptPhoto` : undefined\"\n\t\t\t\t:icon=\"Yoco.Icon.PICTURE\"\n\t\t\t\t:label=\"translations.button.acceptPhoto\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop=\"$emit('accept')\"\n\t\t\t/>\n\t\t\t<KtButton\n\t\t\t\t:data-test=\"dataTest ? `${dataTest}.closeReview` : undefined\"\n\t\t\t\t:label=\"translations.button.cancel\"\n\t\t\t\t@click.stop=\"$emit('close')\"\n\t\t\t/>\n\t\t</template>\n\t</KtModal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../../../kotti-button'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { KtModal } from '../../../kotti-modal'\nimport { makeProps } from '../../../make-props'\nimport { Shared } from '../../types'\n\nexport default defineComponent({\n\tname: 'ReviewPhoto',\n\tcomponents: {\n\t\tKtButton,\n\t\tKtModal,\n\t},\n\tprops: makeProps(Shared.TakePhoto.reviewSchema),\n\temits: ['accept', 'close', 'reject'],\n\tsetup() {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\treturn {\n\t\t\ttranslations,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\nimg {\n\twidth: 100%;\n}\n</style>\n","<template>\n\t<div>\n\t\t<KtButton\n\t\t\t:data-test=\"localDataTest\"\n\t\t\t:disabled=\"isDisabled\"\n\t\t\t:label=\"translations.button.takePhoto\"\n\t\t\t:tabindex=\"tabIndex\"\n\t\t\t@click.stop=\"state = 'capture'\"\n\t\t/>\n\t\t<CapturePhoto\n\t\t\tv-if=\"state === 'capture'\"\n\t\t\t:dataTest=\"localDataTest\"\n\t\t\t@capture=\"onCapturePhoto\"\n\t\t\t@close=\"onClose\"\n\t\t\t@error=\"onError\"\n\t\t/>\n\t\t<ReviewPhoto\n\t\t\tv-else-if=\"state === 'review'\"\n\t\t\t:dataTest=\"localDataTest\"\n\t\t\t:photoUrl=\"photoUrl\"\n\t\t\t@accept=\"onAcceptPhoto\"\n\t\t\t@close=\"onClose\"\n\t\t\t@reject=\"onRejectPhoto\"\n\t\t/>\n\t\t<Error\n\t\t\tv-else-if=\"state === 'error'\"\n\t\t\t:dataTest=\"localDataTest\"\n\t\t\t:error=\"error\"\n\t\t\t@close=\"onClose\"\n\t\t\t@retry=\"onErrorRetry\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { KtButton } from '../../../kotti-button'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { makeProps } from '../../../make-props'\nimport { Shared } from '../../types'\n\nimport CapturePhoto from './Capture.vue'\nimport Error from './Error.vue'\nimport ReviewPhoto from './Review.vue'\n\ntype State = 'capture' | 'closed' | 'error' | 'review'\n\nexport default defineComponent({\n\tname: 'TakePhoto',\n\tcomponents: {\n\t\tCapturePhoto,\n\t\tError,\n\t\tKtButton,\n\t\tReviewPhoto,\n\t},\n\tprops: makeProps(Shared.TakePhoto.schema),\n\temits: ['addFiles'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst error = ref<string | null>(null)\n\t\tconst file = ref<File | null>(null)\n\t\tconst photoUrl = ref<string | null>(null)\n\t\tconst state = ref<State>('closed')\n\n\t\tconst reset = () => {\n\t\t\terror.value = null\n\t\t\tfile.value = null\n\t\t\tphotoUrl.value = null\n\t\t}\n\n\t\treturn {\n\t\t\terror,\n\t\t\tlocalDataTest: computed(() =>\n\t\t\t\tprops.dataTest ? `${props.dataTest}.takePhoto` : null,\n\t\t\t),\n\t\t\tonAcceptPhoto: () => {\n\t\t\t\tif (!file.value) return\n\t\t\t\tconst payload: Shared.Events.AddFiles = [file.value]\n\t\t\t\temit('addFiles', payload)\n\t\t\t\treset()\n\t\t\t\tstate.value = 'closed'\n\t\t\t},\n\t\t\tonCapturePhoto: (payload: Shared.TakePhoto.Events.Capture) => {\n\t\t\t\treset()\n\t\t\t\tfile.value = payload.file\n\t\t\t\tphotoUrl.value = payload.photoUrl\n\t\t\t\tstate.value = 'review'\n\t\t\t},\n\t\t\tonClose: () => {\n\t\t\t\treset()\n\t\t\t\tstate.value = 'closed'\n\t\t\t},\n\t\t\tonError: (err: Shared.TakePhoto.Events.Error) => {\n\t\t\t\treset()\n\t\t\t\terror.value = err\n\t\t\t\tstate.value = 'error'\n\t\t\t},\n\t\t\tonErrorRetry: () => {\n\t\t\t\treset()\n\t\t\t\tstate.value = 'capture'\n\t\t\t},\n\t\t\tonRejectPhoto: () => {\n\t\t\t\treset()\n\t\t\t\tstate.value = 'capture'\n\t\t\t},\n\t\t\tphotoUrl,\n\t\t\tstate,\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n","import { nanoid } from 'nanoid'\n\nimport { KottiFieldFileUpload, Shared } from '../types'\nimport { validateFile } from '../validators'\n\n/**\n * Builds a File Item element for the field.value array.\n * Called when selecting a file via the input picker or drag & drop.\n * @param file The raw file\n * @returns The File Item\n */\nexport const buildFileItem = (\n\tfile: File,\n): KottiFieldFileUpload.ValueInternal[0] => ({\n\tfile,\n\tid: nanoid(),\n\tstatus: KottiFieldFileUpload.Status.NOT_STARTED,\n})\n\n/**\n * Builds a File Info object\n * @param param0.extensions The allowed file extensions\n * @param param0.fileItem The file item element from the field.value array\n * @param param0.isPreUploaded Whether the file is pre-uploaded or not\n * @param param0.maxFileSize The maximum file size allowed\n * @returns The File Info object\n */\nexport const buildFileInfo = ({\n\textensions,\n\tfileItem,\n\tisPreUploaded = false,\n\tmaxFileSize,\n}: {\n\textensions: KottiFieldFileUpload.PropsInternal['extensions']\n\tfileItem: KottiFieldFileUpload.ValueInternal[0]\n\tisPreUploaded?: boolean\n\tmaxFileSize: KottiFieldFileUpload.PropsInternal['maxFileSize']\n}): KottiFieldFileUpload.FileInfo => {\n\tconst fileName = 'file' in fileItem ? fileItem.file.name : fileItem.name\n\tconst fileSize = 'file' in fileItem ? fileItem.file.size : fileItem.size\n\tconst validation = validateFile({\n\t\textensions,\n\t\tfileName,\n\t\tfileSize,\n\t\tmaxFileSize,\n\t})\n\n\tconst status: KottiFieldFileUpload.Status = (() => {\n\t\tif (isPreUploaded)\n\t\t\treturn validation === Shared.Validation.SUCCESS\n\t\t\t\t? KottiFieldFileUpload.Status.UPLOADED\n\t\t\t\t: KottiFieldFileUpload.Status.UPLOADED_WITH_ERROR\n\n\t\treturn validation === Shared.Validation.SUCCESS\n\t\t\t? KottiFieldFileUpload.Status.READY_TO_UPLOAD\n\t\t\t: KottiFieldFileUpload.Status.INVALID\n\t})()\n\n\treturn {\n\t\tdownloadUrl: 'downloadUrl' in fileItem ? fileItem.downloadUrl : undefined,\n\t\tid: fileItem.id,\n\t\tisInternal: 'isInternal' in fileItem ? fileItem.isInternal : undefined,\n\t\tname: fileName,\n\t\tsize: fileSize,\n\t\tstatus,\n\t\tvalidation,\n\t\tviewUrl: 'viewUrl' in fileItem ? fileItem.viewUrl : undefined,\n\t}\n}\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field }\"\n\t\tdebounceLabelClick\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t>\n\t\t<template #container>\n\t\t\t<div class=\"kt-field-file-upload\">\n\t\t\t\t<DropArea\n\t\t\t\t\tv-if=\"showDropArea\"\n\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\tallowMultiple,\n\t\t\t\t\t\tcollapseExtensionsAfter,\n\t\t\t\t\t\texternalUrl,\n\t\t\t\t\t\ticon,\n\t\t\t\t\t\tinputId,\n\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t}\"\n\t\t\t\t\t@addFiles=\"onAddFiles\"\n\t\t\t\t\t@blur=\"onBlur\"\n\t\t\t\t>\n\t\t\t\t\t<template #footer>\n\t\t\t\t\t\t<TakePhoto\n\t\t\t\t\t\t\tv-if=\"allowPhotos\"\n\t\t\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@addFiles=\"onAddFiles\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\tv-if=\"$slots.dropAreaExtraContent\"\n\t\t\t\t\t\t\tname=\"dropAreaExtraContent\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t</DropArea>\n\t\t\t\t<div v-if=\"filesList.length > 0\" :style=\"filesListStyle\">\n\t\t\t\t\t<FileItem\n\t\t\t\t\t\tv-for=\"fileInfo in filesList\"\n\t\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:key=\"fileInfo.id\"\n\t\t\t\t\t\t@remove=\"onRemoveFile\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"preUploadedFilesList.length > 0\"\n\t\t\t\t\t:style=\"preUploadedFilesListStyle\"\n\t\t\t\t>\n\t\t\t\t\t<PreUploadedFileItem\n\t\t\t\t\t\tv-for=\"fileInfo in preUploadedFilesList\"\n\t\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:key=\"fileInfo.id\"\n\t\t\t\t\t\t@remove=\"onRemoveFile\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onBeforeMount } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport { useField } from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\n\nimport DropArea from './components/DropArea.vue'\nimport FileItem from './components/FileItem.vue'\nimport PreUploadedFileItem from './components/PreUploadedFileItem.vue'\nimport TakePhoto from './components/TakePhoto/TakePhoto.vue'\nimport { KOTTI_FIELD_FILE_UPLOAD_SUPPORTS } from './constants'\nimport type { Shared } from './types'\nimport { KottiFieldFileUpload } from './types'\nimport { buildFileInfo, buildFileItem } from './utils/files'\nimport { isValidValue } from './validators'\n\nexport default defineComponent({\n\tname: 'KtFieldFileUpload',\n\tcomponents: {\n\t\tDropArea,\n\t\tFileItem,\n\t\tKtField,\n\t\tPreUploadedFileItem,\n\t\tTakePhoto,\n\t},\n\tprops: makeProps(KottiFieldFileUpload.propsSchema),\n\temits: ['blur', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldFileUpload.ValueInternal>({\n\t\t\temit,\n\t\t\t/**\n\t\t\t * We consider this field empty if:\n\t\t\t * a. No files are selected, or\n\t\t\t * b. Value is invalid\n\t\t\t */\n\t\t\tisEmpty: (value) => value.length === 0 || !isValidValue(value),\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_FILE_UPLOAD_SUPPORTS,\n\t\t})\n\n\t\tconst preUploadedFilesIds = new Set<KottiFieldFileUpload.FileInfo['id']>()\n\n\t\tconst setStatus = (payload: KottiFieldFileUpload.Events.SetStatus) => {\n\t\t\tfield.setValue(\n\t\t\t\tfield.currentValue.map((fileItem) =>\n\t\t\t\t\tfileItem.id === payload.id\n\t\t\t\t\t\t? { ...fileItem, status: payload.status }\n\t\t\t\t\t\t: fileItem,\n\t\t\t\t),\n\t\t\t\t{ forceUpdate: true },\n\t\t\t)\n\t\t}\n\n\t\tconst filesList = computed<KottiFieldFileUpload.FileInfo[]>(() =>\n\t\t\tfield.currentValue\n\t\t\t\t.filter((fileItem) => !preUploadedFilesIds.has(fileItem.id))\n\t\t\t\t.map((fileItem) => {\n\t\t\t\t\tconst fileInfo = buildFileInfo({\n\t\t\t\t\t\textensions: props.extensions,\n\t\t\t\t\t\tfileItem,\n\t\t\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t\t\t})\n\n\t\t\t\t\tif (fileItem.status !== fileInfo.status)\n\t\t\t\t\t\tsetStatus({ id: fileItem.id, status: fileInfo.status })\n\n\t\t\t\t\treturn fileInfo\n\t\t\t\t}),\n\t\t)\n\t\tconst showDropArea = computed(\n\t\t\t() =>\n\t\t\t\t(props.allowMultiple || field.currentValue.length === 0) &&\n\t\t\t\t!props.hideDropArea,\n\t\t)\n\n\t\tonBeforeMount(() => {\n\t\t\tfield.currentValue.forEach((fileItem) => {\n\t\t\t\tif (\n\t\t\t\t\t[\n\t\t\t\t\t\tKottiFieldFileUpload.Status.UPLOADED,\n\t\t\t\t\t\tKottiFieldFileUpload.Status.UPLOADED_WITH_ERROR,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t].includes(fileItem.status as KottiFieldFileUpload.Status | undefined)\n\t\t\t\t)\n\t\t\t\t\tpreUploadedFilesIds.add(fileItem.id)\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tfield,\n\t\t\tfilesList,\n\t\t\tfilesListStyle: computed(() =>\n\t\t\t\tshowDropArea.value ? { 'padding-top': 'var(--unit-4)' } : undefined,\n\t\t\t),\n\t\t\tinputId: computed(() => field.inputProps.id),\n\t\t\tonAddFiles: (value: Shared.Events.AddFiles) => {\n\t\t\t\tif (props.allowMultiple)\n\t\t\t\t\tfield.setValue([\n\t\t\t\t\t\t...field.currentValue,\n\t\t\t\t\t\t...value.map((file) => buildFileItem(file)),\n\t\t\t\t\t])\n\t\t\t\telse field.setValue([buildFileItem(value[0] as File)])\n\t\t\t},\n\t\t\tonBlur: () => {\n\t\t\t\temit('blur', field.currentValue)\n\t\t\t},\n\t\t\tonRemoveFile: (id: Shared.Events.RemoveFile) => {\n\t\t\t\tfield.setValue(\n\t\t\t\t\tfield.currentValue.filter((fileItem) => fileItem.id !== id),\n\t\t\t\t)\n\t\t\t},\n\t\t\tpreUploadedFilesList: computed<KottiFieldFileUpload.FileInfo[]>(() =>\n\t\t\t\tfield.currentValue\n\t\t\t\t\t.filter((fileItem) => preUploadedFilesIds.has(fileItem.id))\n\t\t\t\t\t.map((fileItem) => {\n\t\t\t\t\t\tconst fileInfo = buildFileInfo({\n\t\t\t\t\t\t\textensions: props.extensions,\n\t\t\t\t\t\t\tfileItem,\n\t\t\t\t\t\t\tisPreUploaded: true,\n\t\t\t\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (fileItem.status !== fileInfo.status)\n\t\t\t\t\t\t\tsetStatus({ id: fileItem.id, status: fileInfo.status })\n\n\t\t\t\t\t\treturn fileInfo\n\t\t\t\t\t}),\n\t\t\t),\n\t\t\tpreUploadedFilesListStyle: computed(() =>\n\t\t\t\tshowDropArea.value\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t'padding-top': `var(${\n\t\t\t\t\t\t\t\tfilesList.value.length > 0 ? '--unit-8' : '--unit-4'\n\t\t\t\t\t\t\t})`,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t\tsharedProps: computed(() => ({\n\t\t\t\tdataTest: field.inputProps['data-test'],\n\t\t\t\textensions: props.extensions,\n\t\t\t\tisDisabled: field.isDisabled,\n\t\t\t\tisLoading: field.isLoading,\n\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t})),\n\t\t\tshowDropArea,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import './styles';\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_FILE_UPLOAD_SUPPORTS } from './constants'\nimport KtFieldFileUploadVue from './KtFieldFileUpload.vue'\nimport { KottiFieldFileUpload } from './types'\n\nconst componentFolder = 'kotti-field-file-upload'\nconst url =\n\t'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=3547%3A8456&t=hhn880dUtUMnmX06-0'\n\nexport const KtFieldFileUpload: ReturnType<typeof attachMeta> = attachMeta(\n\tmakeInstallable(KtFieldFileUploadVue),\n\t{\n\t\taddedVersion: '3.0.0-beta.43',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl,\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldFileUpload',\n\t\t\tschema: KottiFieldFileUpload.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_FILE_UPLOAD_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_INLINE_EDIT_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: false,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n","<template>\n\t<KtButton\n\t\tv-bind=\"buttonProps\"\n\t\tclass=\"kt-field-inline-edit__confirm-button\"\n\t\t@click.stop.prevent=\"handleConfirm\"\n\t\t@keyup.enter.stop.prevent=\"handleConfirm\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../../kotti-button'\n\nexport default defineComponent({\n\tname: 'ConfirmButton',\n\tcomponents: {\n\t\tKtButton,\n\t},\n\tprops: {\n\t\tdataTest: { default: null, type: String },\n\t\ttabIndex: { default: 0, type: Number },\n\t},\n\temits: ['confirm'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tbuttonProps: computed(() => ({\n\t\t\t\t['data-test']: props.dataTest ? `${props.dataTest}.confirm` : undefined,\n\t\t\t\ticon: Yoco.Icon.CHECK,\n\t\t\t\ttabindex: props.tabIndex,\n\t\t\t})),\n\t\t\thandleConfirm: () => {\n\t\t\t\temit('confirm')\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-field-inline-edit__confirm-button {\n\tdisplay: flex;\n\tflex: 1;\n}\n</style>\n","<template>\n\t<div :class=\"rootClasses\" :tabindex=\"-1\" v-text=\"Yoco.Icon.EDIT\" />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nexport default defineComponent({\n\tname: 'EditIcon',\n\tprops: {\n\t\tisDisabled: { default: false, type: Boolean },\n\t},\n\tsetup(props) {\n\t\treturn {\n\t\t\trootClasses: computed(() => ({\n\t\t\t\t'kt-field-inline-edit__edit-icon': true,\n\t\t\t\t'kt-field-inline-edit__edit-icon--disabled': props.isDisabled,\n\t\t\t\tyoco: true,\n\t\t\t})),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-field-inline-edit__edit-icon {\n\tdisplay: flex;\n\tfont-size: var(--unit-4);\n\n\t&--disabled {\n\t\tcolor: var(--text-05);\n\t}\n}\n</style>\n","import { nextTick } from 'vue'\n\nimport type { FieldInlineEditElement } from './types'\n\nexport const resizeField = async ({\n\tinputRef,\n}: {\n\tinputRef: FieldInlineEditElement | null\n}): Promise<void> => {\n\tinputRef?.setAttribute('style', 'height: auto')\n\n\t// ensure that DOM has updated properly before scrollHeight is retrieved\n\tawait nextTick()\n\n\tconst scrollHeight = inputRef?.scrollHeight ?? null\n\n\tif (scrollHeight === null)\n\t\tthrow new Error(`KtFieldInlinEdit: resizeTextArea: 'scrollHeight' is null.`)\n\n\tinputRef?.setAttribute('style', `height: ${scrollHeight.toString()}px`)\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, onMounted, watch } from 'vue'\n\nimport type { KottiField } from '../kotti-field/types'\nimport type { Nullable } from '../types/utilities'\n\nimport type { FieldInlineEditElement } from './types'\nimport { KottiFieldInlineEdit } from './types'\nimport { resizeField } from './utils'\n\nexport const useAdjustHeight = ({\n\tfield,\n\tinputRef: _inputRef,\n\tprops,\n}: {\n\tfield: KottiField.Hook.Returns<KottiFieldInlineEdit.ModelValue>\n\tinputRef: Ref<Nullable<FieldInlineEditElement>>\n\tprops: KottiFieldInlineEdit.PropsInternal\n}): void => {\n\tconst inputRef = _inputRef\n\tconst currentValue = computed(() => field.currentValue)\n\n\tonMounted(() => {\n\t\tif (inputRef.value) void resizeField({ inputRef: inputRef.value })\n\t})\n\n\twatch(\n\t\t() => [\n\t\t\tcurrentValue.value,\n\t\t\tinputRef.value,\n\t\t\tprops.isLoading,\n\t\t\tprops.placeholder,\n\t\t\tprops.textStyle,\n\t\t],\n\t\t() => {\n\t\t\tif (inputRef.value) void resizeField({ inputRef: inputRef.value })\n\t\t},\n\t\t{ immediate: true },\n\t)\n}\n\nexport const usePreventConfirm = ({\n\tfield,\n\tprops,\n}: {\n\tfield: KottiField.Hook.Returns<KottiFieldInlineEdit.ModelValue>\n\tprops: KottiFieldInlineEdit.PropsInternal\n}): {\n\tpreventConfirm: ComputedRef<boolean>\n} => {\n\tconst fieldValidation = computed(() => field.validation.type)\n\n\tconst preventConfirm = computed<boolean>(() => {\n\t\tswitch (props.preventConfirmationOn) {\n\t\t\tcase KottiFieldInlineEdit.ConfirmationValidation.ERROR:\n\t\t\t\treturn fieldValidation.value === 'error'\n\t\t\tcase KottiFieldInlineEdit.ConfirmationValidation.NEVER:\n\t\t\t\treturn false\n\t\t\tcase KottiFieldInlineEdit.ConfirmationValidation.WARNING:\n\t\t\t\treturn ['error', 'warning'].includes(fieldValidation.value)\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`KtFieldInlineEdit: Unexpected type for 'preventConfirmationOn': ${props.preventConfirmationOn}`,\n\t\t\t\t)\n\t\t}\n\t})\n\n\treturn {\n\t\tpreventConfirm,\n\t}\n}\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field: modifiedField }\"\n\t\tref=\"ktFieldRef\"\n\t\t:class=\"rootClasses\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t>\n\t\t<EditIcon v-if=\"!isReadonly && !isEditing\" :isDisabled=\"isDisabled\" />\n\t\t<textarea\n\t\t\tv-if=\"isMultiline\"\n\t\t\tref=\"inputRef\"\n\t\t\tv-bind=\"textareaProps\"\n\t\t\t@input=\"onEdit\"\n\t\t\t@keydown.enter=\"onEnter\"\n\t\t\t@keyup.esc=\"onCancel\"\n\t\t/>\n\t\t<input\n\t\t\tv-else\n\t\t\tref=\"inputRef\"\n\t\t\tv-bind=\"inputProps\"\n\t\t\t@input=\"onEdit\"\n\t\t\t@keydown.enter=\"onEnter\"\n\t\t\t@keyup.esc=\"onCancel\"\n\t\t/>\n\t\t<template #container-right>\n\t\t\t<ConfirmButton\n\t\t\t\tv-if=\"isEditing\"\n\t\t\t\t:dataTest=\"sharedProps['data-test']\"\n\t\t\t\t:tabIndex=\"sharedProps['tabindex']\"\n\t\t\t\t@confirm=\"onConfirm\"\n\t\t\t/>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport type { InputHTMLAttributes, TextareaHTMLAttributes } from 'vue'\nimport {\n\tcomputed,\n\tdefineComponent,\n\tonBeforeMount,\n\tonUnmounted,\n\treactive,\n\tref,\n\ttoRefs,\n\twatch,\n} from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtField } from '../kotti-field'\nimport { useField, useForceUpdate, useKtFieldRef } from '../kotti-field/hooks'\nimport type { KottiField } from '../kotti-field/types'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { makeProps } from '../make-props'\nimport type { Nullable } from '../types/utilities'\nimport { blurElement, isInFocus, isOrContainsEventTarget } from '../utilities'\n\nimport ConfirmButton from './components/ConfirmButton.vue'\nimport EditIcon from './components/EditIcon.vue'\nimport { KOTTI_FIELD_INLINE_EDIT_SUPPORTS } from './constants'\nimport { useAdjustHeight, usePreventConfirm } from './hooks'\nimport type { FieldInlineEditElement } from './types'\nimport { KottiFieldInlineEdit } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldInlineEdit',\n\tcomponents: {\n\t\tConfirmButton,\n\t\tEditIcon,\n\t\tKtField,\n\t},\n\tprops: makeProps(KottiFieldInlineEdit.propsSchema),\n\temits: ['confirm', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\t\tconst translations = useTranslationNamespace('KtFieldInlineEdit')\n\n\t\tconst ktFieldRef = useKtFieldRef()\n\t\tconst inputContainerWrapperRef = ref<HTMLDivElement | null>(null)\n\t\tconst inputRef = ref<Nullable<FieldInlineEditElement>>(null)\n\n\t\tconst isEditing = ref(false)\n\t\tconst updateIsEditing = (shouldEdit: typeof isEditing.value) => {\n\t\t\tif (shouldEdit && props.isReadonly) {\n\t\t\t\tblurElement(inputContainerWrapperRef.value)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (shouldEdit && !isInFocus(inputRef.value)) inputRef.value?.focus()\n\n\t\t\tif (shouldEdit === isEditing.value) return\n\n\t\t\tisEditing.value = shouldEdit\n\t\t}\n\n\t\tconst field = useField<KottiFieldInlineEdit.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null || value.trim() === '',\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_INLINE_EDIT_SUPPORTS,\n\t\t})\n\n\t\tconst modifiedField = reactive({\n\t\t\t...toRefs(field),\n\t\t\thideValidation: computed(() => {\n\t\t\t\tif (props.isReadonly) return true\n\t\t\t\tif (isEditing.value) return false\n\t\t\t\treturn field.hideValidation\n\t\t\t}),\n\t\t})\n\n\t\tuseAdjustHeight({\n\t\t\tfield: modifiedField,\n\t\t\tinputRef,\n\t\t\tprops,\n\t\t})\n\n\t\tconst fieldPlaceholder = computed(() =>\n\t\t\tprops.isReadonly\n\t\t\t\t? null\n\t\t\t\t: (props.placeholder ?? translations.value.placeholder),\n\t\t)\n\n\t\tconst setFieldValue = (newValue: KottiFieldInlineEdit.ModelValue) => {\n\t\t\tmodifiedField.setValue(newValue === '' ? null : newValue)\n\t\t\tforceUpdate()\n\t\t}\n\n\t\tconst preEditingValue = ref<KottiFieldInlineEdit.ModelValue>(\n\t\t\tmodifiedField.currentValue,\n\t\t)\n\n\t\tconst { preventConfirm } = usePreventConfirm({\n\t\t\tfield: modifiedField,\n\t\t\tprops,\n\t\t})\n\n\t\twatch(\n\t\t\t() => modifiedField.currentValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (!isEditing.value) preEditingValue.value = newValue\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\tconst onConfirm = () => {\n\t\t\tif (preventConfirm.value) {\n\t\t\t\tif (!isInFocus(inputRef.value)) inputRef.value?.focus()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tpreEditingValue.value = modifiedField.currentValue\n\n\t\t\tupdateIsEditing(false)\n\t\t\tblurElement(inputContainerWrapperRef.value)\n\n\t\t\temit('confirm', modifiedField.currentValue)\n\t\t}\n\n\t\tconst onCancel = () => {\n\t\t\tsetFieldValue(preEditingValue.value)\n\n\t\t\tupdateIsEditing(false)\n\n\t\t\tblurElement(inputContainerWrapperRef.value)\n\t\t}\n\n\t\t/**\n\t\t * The last DOM element to capture focus/click events.\n\t\t *\n\t\t * In case of clicking on a focusable element, the focus event is captured first then the click event.\n\t\t * In case of clicking on a non-focusable element, the focus event doesn't trigger.\n\t\t */\n\t\tconst lastEventTarget = ref<EventTarget | null>(null)\n\n\t\tconst onMouseDown = (event: KeyboardEvent | MouseEvent) => {\n\t\t\tif (\n\t\t\t\tevent.target === null ||\n\t\t\t\tprops.isDisabled ||\n\t\t\t\tprops.isLoading ||\n\t\t\t\tprops.isReadonly\n\t\t\t)\n\t\t\t\treturn\n\n\t\t\tconst isClickOutside = !isOrContainsEventTarget(\n\t\t\t\tinputContainerWrapperRef.value,\n\t\t\t\tevent.target,\n\t\t\t)\n\n\t\t\tlastEventTarget.value = event.target\n\n\t\t\tif (isClickOutside) onCancel()\n\t\t\telse updateIsEditing(true)\n\t\t}\n\n\t\tconst onFocusChange = (event: Event) => {\n\t\t\tif (event.target === null || props.isDisabled) return\n\n\t\t\tconst wasFieldTriggered = isOrContainsEventTarget(\n\t\t\t\tinputContainerWrapperRef.value,\n\t\t\t\tlastEventTarget.value,\n\t\t\t)\n\t\t\tconst isFieldTriggered = isOrContainsEventTarget(\n\t\t\t\tinputContainerWrapperRef.value,\n\t\t\t\tevent.target,\n\t\t\t)\n\n\t\t\tlastEventTarget.value = event.target\n\n\t\t\tif (wasFieldTriggered === isFieldTriggered) return\n\n\t\t\tif (!isFieldTriggered) onCancel()\n\t\t\telse updateIsEditing(true)\n\t\t}\n\n\t\twatch(ktFieldRef, () => {\n\t\t\tif (ktFieldRef.value?.inputContainerWrapperRef)\n\t\t\t\tinputContainerWrapperRef.value =\n\t\t\t\t\tktFieldRef.value.inputContainerWrapperRef\n\t\t})\n\n\t\twatch(\n\t\t\t() => props.textStyle,\n\t\t\t() => {\n\t\t\t\tif (props.textStyle !== null && props.isMultiline) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`textStyle prop is not supported with isMultiline prop`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\tonBeforeMount(() => {\n\t\t\twindow.addEventListener('mousedown', onMouseDown)\n\t\t\twindow.addEventListener('focus', onFocusChange, { capture: true })\n\t\t})\n\n\t\tonUnmounted(() => {\n\t\t\twindow.removeEventListener('mousedown', onMouseDown)\n\t\t\twindow.removeEventListener('focus', onFocusChange)\n\t\t})\n\n\t\tconst sharedProps = computed(\n\t\t\t(): KottiField.Hook.Returns<\n\t\t\t\tNonNullable<KottiFieldInlineEdit.ModelValue>\n\t\t\t>['inputProps'] & {\n\t\t\t\tforceUpdateKey: number\n\t\t\t\tplaceholder: string\n\t\t\t\treadonly: boolean\n\t\t\t\tvalue: NonNullable<KottiFieldInlineEdit.ModelValue>\n\t\t\t} => ({\n\t\t\t\t...modifiedField.inputProps,\n\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\tplaceholder: isEditing.value ? '' : (fieldPlaceholder.value ?? ''),\n\t\t\t\treadonly: props.isReadonly,\n\t\t\t\tvalue: modifiedField.currentValue ?? '',\n\t\t\t}),\n\t\t)\n\n\t\treturn {\n\t\t\tinputContainerWrapperRef,\n\t\t\tinputProps: computed(\n\t\t\t\t(): {\n\t\t\t\t\tclass: Record<string, boolean>\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} & (InputHTMLAttributes | TextareaHTMLAttributes) => ({\n\t\t\t\t\t...sharedProps.value,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: {\n\t\t\t\t\t\t'kt-field-inline-edit__input': true,\n\t\t\t\t\t\t...(props.textStyle !== null && { [props.textStyle]: true }),\n\t\t\t\t\t},\n\t\t\t\t\ttype: 'text',\n\t\t\t\t}),\n\t\t\t),\n\t\t\tinputRef,\n\t\t\tisEditing,\n\t\t\tktFieldRef,\n\t\t\tmodifiedField,\n\t\t\tonCancel,\n\t\t\tonConfirm,\n\t\t\tonEdit: (event: Event) => {\n\t\t\t\tif (props.isReadonly || !isEditing.value) return\n\n\t\t\t\tconst newValue = (event.target as FieldInlineEditElement).value\n\n\t\t\t\tsetFieldValue(newValue)\n\t\t\t},\n\t\t\tonEnter: (event: KeyboardEvent) => {\n\t\t\t\tif (!props.isMultiline || !event.shiftKey) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tonConfirm()\n\t\t\t\t}\n\t\t\t},\n\t\t\trootClasses: computed(() => ({\n\t\t\t\t'kt-field-inline-edit': true,\n\t\t\t\t'kt-field-inline-edit--is-editable': !props.isReadonly,\n\t\t\t\t'kt-field-inline-edit--is-editing':\n\t\t\t\t\tisEditing.value && !props.isDisabled,\n\t\t\t\t'kt-field-inline-edit--is-readonly': props.isReadonly,\n\t\t\t})),\n\t\t\tsharedProps,\n\t\t\ttextareaProps: computed(\n\t\t\t\t(): TextareaHTMLAttributes & {\n\t\t\t\t\tclass: Record<string, boolean>\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} => ({\n\t\t\t\t\t...sharedProps.value,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: {\n\t\t\t\t\t\t'kt-field-inline-edit__input': true,\n\t\t\t\t\t\t'kt-field-inline-edit__input--is-multiline': true,\n\t\t\t\t\t},\n\t\t\t\t\trows: 1,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n.kt-field-inline-edit {\n\t// slot that wraps <input /> & <EditIcon/>\n\n\t/* stylelint-disable-next-line selector-class-pattern */\n\t:deep(.kt-field__input-container__slot) {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-2);\n\t\talign-items: center;\n\t}\n\n\t.h1,\n\t.h2,\n\t.h3 {\n\t\tmargin: 0;\n\t}\n\n\t:deep(.kt-field__input-container) {\n\t\tbackground-color: transparent;\n\t}\n\n\t&--is-readonly {\n\t\t:deep(.kt-field__input-container) {\n\t\t\tbox-shadow: none !important;\n\t\t}\n\t}\n\n\t&__input {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tline-height: 1.6;\n\t\tborder: 0;\n\n\t\t&:not(.kt-field-inline-edit__input--is-multiline) {\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\n\t\t&--is-multiline {\n\t\t\tpadding-top: 0.6em;\n\t\t\tpadding-bottom: 0.6em;\n\t\t\toverflow: hidden;\n\t\t\tresize: none;\n\t\t}\n\t}\n\n\t&.kt-field-inline-edit--is-editable:hover:not(\n\t\t\t.kt-field-inline-edit--is-editing\n\t\t) {\n\t\t:deep(.kt-field__wrapper:not(.kt-field__wrapper--disabled)) {\n\t\t\t.kt-field__input-container:hover {\n\t\t\t\tcursor: pointer;\n\t\t\t\tbackground-color: var(--ui-05);\n\n\t\t\t\tinput,\n\t\t\t\ttextarea {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&:not(.kt-field-inline-edit--is-editing) {\n\t\t.kt-field-inline-edit__input--is-multiline {\n\t\t\tword-break: normal;\n\t\t}\n\n\t\t:deep(.kt-field__input-container) {\n\t\t\tborder: 0;\n\t\t}\n\t}\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_INLINE_EDIT_SUPPORTS } from './constants'\nimport KtFieldInlineEditVue from './KtFieldInlineEdit.vue'\nimport { KottiFieldInlineEdit } from './types'\n\nexport const KtFieldInlineEdit = attachMeta(\n\tmakeInstallable(KtFieldInlineEditVue),\n\t{\n\t\taddedVersion: '3.0.0-beta-29',\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/qfT3ItoKI6OAXYWF6oOjwR/Inline-Edit?node-id=0%3A1',\n\t\t},\n\t\tslots: {\n\t\t\t...FIELD_META_BASE_SLOTS,\n\t\t\thelpText: {\n\t\t\t\tdescription:\n\t\t\t\t\t'custom helpText support (HTML). Only available in `Regular` Mode',\n\t\t\t\tscope: null,\n\t\t\t},\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldInlineEdit',\n\t\t\tschema: KottiFieldInlineEdit.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_INLINE_EDIT_SUPPORTS },\n)\n\nexport { KOTTI_FIELD_INLINE_EDIT_SUPPORTS } from './constants'\n","import type { KottiField } from '../kotti-field/types'\nimport { DecimalSeparator } from '../types/decimal-separator'\nimport { DECIMAL_SEPARATORS_CHARACTER_SET } from '../utilities'\n\nexport const KOTTI_FIELD_NUMBER_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: false,\n\tdecoration: true,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n\nexport const STRINGS_THAT_ARE_TREATED_AS_NULL = [\n\t...Object.values(DecimalSeparator),\n\t'-',\n\t'',\n]\n\nexport const LEADING_ZEROES_REGEX = new RegExp(\n\t`^0+([1-9]|0${DECIMAL_SEPARATORS_CHARACTER_SET}?)`,\n)\n\nexport const TRAILING_ZEROES_REGEX = new RegExp(\n\t`${DECIMAL_SEPARATORS_CHARACTER_SET}0*$|(${DECIMAL_SEPARATORS_CHARACTER_SET}[0-9]*[1-9])0+$`,\n)\n\nexport const VALID_REGEX = (decimalPlaces: number): RegExp =>\n\tnew RegExp(\n\t\t`^[-]?(0?|([1-9][0-9]*))?(${DECIMAL_SEPARATORS_CHARACTER_SET}[0-9]{0,${decimalPlaces.toString()}})?$`,\n\t)\n","import Big from 'big.js'\n\nimport type { DecimalSeparator } from '../types/decimal-separator'\nimport { DECIMAL_SEPARATORS_CHARACTER_SET } from '../utilities'\n\nimport {\n\tSTRINGS_THAT_ARE_TREATED_AS_NULL,\n\tTRAILING_ZEROES_REGEX,\n} from './constants'\n\nexport const isStepMultiple = ({\n\tminimum,\n\tstep,\n\tvalue,\n}: {\n\tminimum: number | null\n\tstep: number\n\tvalue: number | null\n}): boolean => {\n\tif (minimum === null || value === null) return true\n\n\t// (value - minimum) / step\n\tconst stepFactor = Big(value).minus(minimum).div(step)\n\n\t// is integer?\n\treturn stepFactor.eq(stepFactor.round())\n}\n\nexport const toNumber = (string: string): number | null =>\n\tSTRINGS_THAT_ARE_TREATED_AS_NULL.includes(string)\n\t\t? null\n\t\t: Number.parseFloat(\n\t\t\t\t// `.` is the only accepted decimal place by parseFloat\n\t\t\t\tstring.replace(new RegExp(DECIMAL_SEPARATORS_CHARACTER_SET), '.'),\n\t\t\t)\n\nexport const toString = (\n\tnumber: number | null,\n\tdecimalPlaces: number,\n\tdecimalSeparator: DecimalSeparator,\n): string =>\n\tnumber === null\n\t\t? ''\n\t\t: number\n\t\t\t\t.toFixed(decimalPlaces)\n\t\t\t\t.replace('.', decimalSeparator)\n\t\t\t\t.replace(TRAILING_ZEROES_REGEX, '$1')\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field }\"\n\t\tref=\"ktFieldRef\"\n\t\t:class=\"{\n\t\t\t'kt-field__number-field--has-buttons': !hideChangeButtons,\n\t\t}\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t>\n\t\t<div class=\"kt-field-number\" :tabIndex=\"-1\">\n\t\t\t<KtButton\n\t\t\t\tv-if=\"!hideChangeButtons\"\n\t\t\t\tclass=\"kt-field-number__button\"\n\t\t\t\t:data-test=\"`${inputProps['data-test']}-decrement`\"\n\t\t\t\t:disabled=\"!isDecrementEnabled\"\n\t\t\t\t:icon=\"Yoco.Icon.MINUS\"\n\t\t\t\t:tabIndex=\"-1\"\n\t\t\t\t@click.stop=\"decrementValue\"\n\t\t\t/>\n\t\t\t<div class=\"kt-field-number__middle\" @click=\"onClickMiddle\">\n\t\t\t\t<input\n\t\t\t\t\tref=\"inputRef\"\n\t\t\t\t\tv-bind=\"inputProps\"\n\t\t\t\t\t@blur=\"onBlur\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@keydown=\"onKeydown\"\n\t\t\t\t\t@keyup=\"onKeyup\"\n\t\t\t\t/>\n\t\t\t\t<div v-if=\"showMaximum\" v-text=\"'/'\" />\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"showMaximum\"\n\t\t\t\t\tclass=\"kt-field-number__maximum\"\n\t\t\t\t\tv-text=\"maximum\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<KtButton\n\t\t\t\tv-if=\"!hideChangeButtons\"\n\t\t\t\tclass=\"kt-field-number__button\"\n\t\t\t\t:data-test=\"`${inputProps['data-test']}-increment`\"\n\t\t\t\t:disabled=\"!isIncrementEnabled\"\n\t\t\t\t:icon=\"Yoco.Icon.PLUS\"\n\t\t\t\t:tabIndex=\"-1\"\n\t\t\t\t@click.stop=\"incrementValue\"\n\t\t\t/>\n\t\t</div>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport Big from 'big.js'\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue'\nimport type { InputHTMLAttributes, UnwrapRef } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtButton } from '../kotti-button'\nimport { KtField } from '../kotti-field'\nimport {\n\tuseEmitBlur,\n\tuseField,\n\tuseForceUpdate,\n\tuseInput,\n\tuseKtFieldRef,\n} from '../kotti-field/hooks'\nimport type { KottiField } from '../kotti-field/types'\nimport { useI18nContext } from '../kotti-i18n/hooks'\nimport type { KottiI18n } from '../kotti-i18n/types'\nimport { makeProps } from '../make-props'\nimport { DECIMAL_SEPARATORS_CHARACTER_SET, isNumberInRange } from '../utilities'\n\nimport {\n\tKOTTI_FIELD_NUMBER_SUPPORTS,\n\tLEADING_ZEROES_REGEX,\n\tVALID_REGEX,\n} from './constants'\nimport { KottiFieldNumber } from './types'\nimport { isStepMultiple, toNumber, toString } from './utilities'\n\nexport default defineComponent({\n\tname: 'KtFieldNumber',\n\tcomponents: {\n\t\tKtButton,\n\t\tKtField,\n\t},\n\tprops: makeProps(KottiFieldNumber.propsSchema),\n\temits: ['blur', 'keyup', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldNumber.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_NUMBER_SUPPORTS,\n\t\t})\n\n\t\tconst { focusInput } = useInput(field.inputProps.id)\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\t\tconst i18nContext = useI18nContext()\n\t\tconst ktFieldRef = useKtFieldRef()\n\n\t\tuseEmitBlur({\n\t\t\temit,\n\t\t\tfield,\n\t\t\tfieldTarget: computed(() => ktFieldRef.value?.inputContainerRef ?? null),\n\t\t})\n\n\t\tconst isDecrementEnabled = computed(\n\t\t\t() =>\n\t\t\t\t!field.isDisabled &&\n\t\t\t\tisNumberInRange({\n\t\t\t\t\tmaximum: props.maximum,\n\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tfield.currentValue === null\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: Big(field.currentValue).minus(props.step).toNumber(),\n\t\t\t\t}),\n\t\t)\n\n\t\tconst isIncrementEnabled = computed(\n\t\t\t() =>\n\t\t\t\t!field.isDisabled &&\n\t\t\t\tisNumberInRange({\n\t\t\t\t\tmaximum: props.maximum,\n\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tfield.currentValue === null\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: Big(field.currentValue).add(props.step).toNumber(),\n\t\t\t\t}),\n\t\t)\n\n\t\tconst internalStringValue = ref('')\n\t\tconst lastValidTypedStringValue = ref('')\n\t\tconst forceUpdateDisplayedValue = (newNumber: number | null) => {\n\t\t\tinternalStringValue.value = toString(\n\t\t\t\tnewNumber,\n\t\t\t\tprops.decimalPlaces,\n\t\t\t\ti18nContext.numberFormat.decimalSeparator,\n\t\t\t)\n\t\t\tlastValidTypedStringValue.value = ''\n\t\t}\n\n\t\tconst showMaximum = computed(\n\t\t\t() => props.maximum !== null && !props.hideMaximum,\n\t\t)\n\n\t\twatch(\n\t\t\t(): [\n\t\t\t\tKottiFieldNumber.ModelValue,\n\t\t\t\tUnwrapRef<KottiI18n.Context['numberFormat']>['decimalSeparator'],\n\t\t\t] => [field.currentValue, i18nContext.numberFormat.decimalSeparator],\n\t\t\t([newNumber]) => {\n\t\t\t\tif (\n\t\t\t\t\t!isNumberInRange({\n\t\t\t\t\t\tmaximum: props.maximum,\n\t\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\t\tvalue: newNumber,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t`KtFieldNumber: encountered an out-of-range number \"${String(newNumber)}\"`,\n\t\t\t\t\t)\n\n\t\t\t\tif (\n\t\t\t\t\t!isStepMultiple({\n\t\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\t\tstep: props.step,\n\t\t\t\t\t\tvalue: newNumber,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`KtFieldNumber: encountered a value \"${String(newNumber)}\" that doesn't fit ((minimum + k * step): where k is an integer)`,\n\t\t\t\t\t)\n\n\t\t\t\tif (toNumber(lastValidTypedStringValue.value) === newNumber) {\n\t\t\t\t\tinternalStringValue.value = lastValidTypedStringValue.value\n\t\t\t\t} else {\n\t\t\t\t\tforceUpdateDisplayedValue(newNumber)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\t/**\n\t\t * reference to input element, in order to track cursor position\n\t\t * prior to feeding the value back to the input, which resets the position to the end.\n\t\t */\n\t\tconst inputRef = ref<HTMLInputElement | null>(null)\n\t\tconst lastUserSetCursorPosition = ref<number | null>(null)\n\n\t\tconst setCursorPosition = (position: number | null) => {\n\t\t\tif (position !== null)\n\t\t\t\tinputRef.value?.setSelectionRange(position, position)\n\t\t}\n\n\t\twatch(\n\t\t\tinternalStringValue,\n\t\t\t() => {\n\t\t\t\t// in case the parent component accepts the @input event’s change, we need to restore the cursor position\n\t\t\t\tsetCursorPosition(lastUserSetCursorPosition.value)\n\t\t\t\tlastUserSetCursorPosition.value = null\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\t/**\n\t\t * In the scenario when the user clicks the +/- buttons when the value is null\n\t\t * we check if zero is in the range of accepted values, and fallback to it\n\t\t */\n\t\tconst canFallbackToZero = computed<boolean>(\n\t\t\t() =>\n\t\t\t\tisStepMultiple({\n\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\tstep: props.step,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t}) &&\n\t\t\t\tisNumberInRange({\n\t\t\t\t\tmaximum: props.maximum,\n\t\t\t\t\tminimum: props.minimum,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t}),\n\t\t)\n\n\t\tconst decrementValue = () => {\n\t\t\tif (!isDecrementEnabled.value) return\n\n\t\t\tfield.setValue(\n\t\t\t\tfield.currentValue === null\n\t\t\t\t\t? canFallbackToZero.value\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: (props.minimum ?? props.maximum ?? 0)\n\t\t\t\t\t: Big(field.currentValue).minus(props.step).toNumber(),\n\t\t\t)\n\t\t\tfocusInput()\n\t\t}\n\n\t\tconst incrementValue = () => {\n\t\t\tif (!isIncrementEnabled.value) return\n\n\t\t\tfield.setValue(\n\t\t\t\tfield.currentValue === null\n\t\t\t\t\t? canFallbackToZero.value\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: (props.minimum ?? props.maximum ?? 0)\n\t\t\t\t\t: Big(field.currentValue).add(props.step).toNumber(),\n\t\t\t)\n\t\t\tfocusInput()\n\t\t}\n\n\t\treturn {\n\t\t\tdecrementValue,\n\t\t\tfield,\n\t\t\tincrementValue,\n\t\t\tinputProps: computed(\n\t\t\t\t(): InputHTMLAttributes &\n\t\t\t\t\tKottiField.Hook.Returns<KottiFieldNumber.ModelValue>['inputProps'] & {\n\t\t\t\t\t\tclass: Record<string, boolean>\n\t\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t\t} => ({\n\t\t\t\t\t...field.inputProps,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: {\n\t\t\t\t\t\t'kt-field-number__input': true,\n\t\t\t\t\t\t'kt-field-number__input--has-maximum': showMaximum.value,\n\t\t\t\t\t\t'kt-field-number__input--left-aligned':\n\t\t\t\t\t\t\t!showMaximum.value &&\n\t\t\t\t\t\t\tprops.hideChangeButtons &&\n\t\t\t\t\t\t\tprops.align === 'left',\n\t\t\t\t\t\t'kt-field-number__input--right-aligned':\n\t\t\t\t\t\t\t!showMaximum.value &&\n\t\t\t\t\t\t\tprops.hideChangeButtons &&\n\t\t\t\t\t\t\tprops.align === 'right',\n\t\t\t\t\t},\n\t\t\t\t\tdisabled: field.isDisabled,\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\t\tsize: 1,\n\t\t\t\t\ttype: 'text', // NOT A MISTAKE\n\t\t\t\t\tvalue: internalStringValue.value,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tinputRef,\n\t\t\tisDecrementEnabled,\n\t\t\tisIncrementEnabled,\n\t\t\tktFieldRef,\n\t\t\tonBlur: () => {\n\t\t\t\tforceUpdateDisplayedValue(field.currentValue)\n\t\t\t},\n\t\t\tonClickMiddle: () => inputRef.value?.focus(),\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst value = (event.target as HTMLInputElement).value\n\n\t\t\t\tlastUserSetCursorPosition.value = inputRef.value?.selectionStart ?? null\n\n\t\t\t\tconst { decimalPlaces, maximum, minimum, step } = props\n\n\t\t\t\tconst valueWithoutLeadingZeroes = value.replace(\n\t\t\t\t\tLEADING_ZEROES_REGEX,\n\t\t\t\t\t'$1',\n\t\t\t\t)\n\t\t\t\tconst nextNumber = toNumber(valueWithoutLeadingZeroes)\n\n\t\t\t\tconst isTypedNumberValid =\n\t\t\t\t\tVALID_REGEX(decimalPlaces).test(valueWithoutLeadingZeroes) &&\n\t\t\t\t\tisStepMultiple({\n\t\t\t\t\t\tminimum,\n\t\t\t\t\t\tstep,\n\t\t\t\t\t\tvalue: nextNumber,\n\t\t\t\t\t}) &&\n\t\t\t\t\tisNumberInRange({\n\t\t\t\t\t\tmaximum,\n\t\t\t\t\t\tminimum,\n\t\t\t\t\t\tvalue: nextNumber,\n\t\t\t\t\t})\n\n\t\t\t\tif (isTypedNumberValid) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Replace all decimal places with the one provided by KtI18nContext\n\t\t\t\t\t **/\n\t\t\t\t\tconst valueWithSupportedDecimalSeparator =\n\t\t\t\t\t\tvalueWithoutLeadingZeroes.replace(\n\t\t\t\t\t\t\tnew RegExp(DECIMAL_SEPARATORS_CHARACTER_SET),\n\t\t\t\t\t\t\ti18nContext.numberFormat.decimalSeparator,\n\t\t\t\t\t\t)\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Preserve exact user input in case it’s possible to apply later\n\t\t\t\t\t * E.g. when changing `1.01` to `1.0`, so that it doesn’t change to `1`\n\t\t\t\t\t */\n\t\t\t\t\tlastValidTypedStringValue.value = valueWithSupportedDecimalSeparator\n\n\t\t\t\t\tconst shouldEmit = nextNumber !== field.currentValue\n\n\t\t\t\t\tif (shouldEmit) field.setValue(nextNumber)\n\t\t\t\t\telse internalStringValue.value = valueWithSupportedDecimalSeparator\n\t\t\t\t}\n\n\t\t\t\tforceUpdate()\n\n\t\t\t\t/**\n\t\t\t\t * Calculates new cursor position, which might be 1 character different than the last cursor position\n\t\t\t\t * because we might reject the character the user just entered. Then, we’d need to -1 it to undo that change.\n\t\t\t\t *\n\t\t\t\t * FIXME: This may or may not move the cursor by 1 character if the parent component rejects the update.\n\t\t\t\t * We decided that that’s an okay trade-off for now. If this ever needs to be fixed, it’s likely possible to fix by\n\t\t\t\t * also looking at the shouldEmit to figure-out the new cursor position\n\t\t\t\t */\n\t\t\t\tconst newCursorPosition =\n\t\t\t\t\tlastUserSetCursorPosition.value === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: lastUserSetCursorPosition.value - (isTypedNumberValid ? 0 : 1)\n\n\t\t\t\tvoid nextTick(() => {\n\t\t\t\t\tsetCursorPosition(newCursorPosition)\n\t\t\t\t})\n\t\t\t},\n\t\t\tonKeydown: (event: KeyboardEvent) => {\n\t\t\t\tif (event.code === 'ArrowUp') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tincrementValue()\n\t\t\t\t} else if (event.code === 'ArrowDown') {\n\t\t\t\t\tdecrementValue()\n\t\t\t\t}\n\t\t\t},\n\t\t\tonKeyup: (event: KeyboardEvent) => {\n\t\t\t\temit('keyup', event)\n\t\t\t},\n\t\t\tshowMaximum,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@use 'sass:map';\n\n.kt-field__wrapper {\n\t$sizes: (\n\t\t'small': 1.3rem,\n\t\t'medium': 1.6rem,\n\t\t'large': 2rem,\n\t);\n\n\t@each $type in 'small', 'medium', 'large' {\n\t\t&--is-#{$type} {\n\t\t\t.kt-field-number__button {\n\t\t\t\twidth: map.get($sizes, $type);\n\t\t\t\theight: map.get($sizes, $type);\n\t\t\t}\n\n\t\t\t.kt-field-number__middle {\n\t\t\t\theight: map.get($sizes, $type);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* stylelint-disable selector-class-pattern */\n.kt-field__number-field--has-buttons .kt-field__input-container {\n\tpadding: 0 0.15rem;\n\n\t&__affix--left,\n\t&__affix--right {\n\t\tpadding: 0 var(--unit-2);\n\t}\n\n\t&__icon--left {\n\t\ttransform: translate(-0.1rem);\n\t}\n\n\t&__icon--right {\n\t\ttransform: translate(0.1rem);\n\t}\n}\n/* stylelint-enable selector-class-pattern */\n\n.kt-field-number {\n\tdisplay: flex;\n\talign-items: center;\n\tfont-variant-numeric: tabular-nums;\n\n\t&__middle {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\talign-items: center;\n\t}\n\n\t&__input,\n\t&__maximum {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\talign-items: center;\n\t\tmin-width: 0;\n\t\tpadding: 0;\n\t}\n\n\t&__input {\n\t\twidth: 100%;\n\t\ttext-align: center;\n\t\tborder: none;\n\n\t\t&--has-maximum {\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t&--left-aligned {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t&--right-aligned {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_NUMBER_SUPPORTS } from './constants'\nimport KtFieldNumberVue from './KtFieldNumber.vue'\nimport { KottiFieldNumber } from './types'\n\nexport const KtFieldNumber = attachMeta(\n\tmakeInstallable(KtFieldNumberVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=850%3A468',\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldNumber',\n\t\t\tschema: KottiFieldNumber.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_NUMBER_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_PASSWORD_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: true,\n\tdecoration: true,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field }\"\n\t\tref=\"ktFieldRef\"\n\t\t:getEmptyValue=\"() => null\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t@visibilityChange=\"handleVisibilityChange\"\n\t>\n\t\t<input v-bind=\"inputProps\" @input=\"onInput\" @keyup=\"onKeyup\" />\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\nimport type { InputHTMLAttributes } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport {\n\tuseEmitBlur,\n\tuseField,\n\tuseForceUpdate,\n\tuseKtFieldRef,\n} from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\n\nimport { KOTTI_FIELD_PASSWORD_SUPPORTS } from './constants'\nimport { KottiFieldPassword } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldPassword',\n\tcomponents: { KtField },\n\tprops: makeProps(KottiFieldPassword.propsSchema),\n\temits: ['blur', 'keyup', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldPassword.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_PASSWORD_SUPPORTS,\n\t\t})\n\t\tconst fieldType = ref('password')\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\t\tconst ktFieldRef = useKtFieldRef()\n\n\t\tuseEmitBlur({\n\t\t\temit,\n\t\t\tfield,\n\t\t\tfieldTarget: computed(() => ktFieldRef.value?.inputContainerRef ?? null),\n\t\t\tvalueOverride: '•••',\n\t\t})\n\n\t\treturn {\n\t\t\tfield,\n\t\t\thandleVisibilityChange: () => {\n\t\t\t\tconst isValueHidden = fieldType.value === 'password'\n\t\t\t\tfieldType.value = isValueHidden ? 'text' : 'password'\n\t\t\t},\n\t\t\tinputProps: computed(\n\t\t\t\t(): InputHTMLAttributes & {\n\t\t\t\t\tclass: string[]\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} => ({\n\t\t\t\t\t...field.inputProps,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: ['kt-field-password__wrapper'],\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\t\tsize: 1,\n\t\t\t\t\ttype: fieldType.value,\n\t\t\t\t\tvalue: field.currentValue ?? '',\n\t\t\t\t}),\n\t\t\t),\n\t\t\tktFieldRef,\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst newValue = (event.target as HTMLInputElement).value\n\t\t\t\tfield.setValue(newValue === '' ? null : newValue)\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\tonKeyup: (event: KeyboardEvent) => {\n\t\t\t\temit('keyup', event)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n.kt-field-password__wrapper {\n\tdisplay: flex;\n\twidth: 100%;\n\tpadding: 0;\n\tmargin: 0;\n\tline-height: 1.6;\n\tborder: 0;\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_PASSWORD_SUPPORTS } from './constants'\nimport KtFieldPasswordVue from './KtFieldPassword.vue'\nimport { KottiFieldPassword } from './types'\n\nexport const KtFieldPassword = attachMeta(\n\tmakeInstallable(KtFieldPasswordVue),\n\t{\n\t\taddedVersion: '2.3.0',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldPassword',\n\t\t\tschema: KottiFieldPassword.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_PASSWORD_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_RADIO_GROUP_SUPPORTS: KottiField.Supports = {\n\tautoComplete: false,\n\tborderless: false,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: false,\n\ttabIndex: true,\n}\n","<template>\n\t<div\n\t\tclass=\"kt-field-radio\"\n\t\t:class=\"{\n\t\t\t'kt-field-radio--checked': isChecked,\n\t\t\t'kt-field-radio--is-disabled': isDisabled,\n\t\t}\"\n\t>\n\t\t<div class=\"kt-field-radio__inside\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tname: 'ToggleRadio',\n\tprops: {\n\t\tisChecked: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n})\n</script>\n\n<style>\n:root {\n\t--radio-size: 0.8rem;\n\t--radio-inside-side: 0.2rem;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-field-radio {\n\tdisplay: grid;\n\tflex-shrink: 0;\n\tplace-items: center;\n\twidth: var(--radio-size);\n\theight: var(--radio-size);\n\tbackground-color: var(--ui-background);\n\tborder: 1px solid var(--ui-02);\n\tborder-radius: 50%;\n\ttransition: all ease-in-out var(--transition-short);\n\n\t&:hover {\n\t\tborder-color: var(--interactive-01-hover);\n\t}\n\n\t&:active {\n\t\tborder-color: var(--interactive-01-active);\n\t}\n\n\t&__inside {\n\t\tdisplay: block;\n\t\twidth: var(--radio-inside-side);\n\t\theight: var(--radio-inside-side);\n\t\tbackground-color: var(--ui-background);\n\t\tborder-radius: 50%;\n\t}\n\n\t&--checked {\n\t\tbackground-color: var(--interactive-01);\n\t\tborder-color: var(--interactive-01);\n\t\tbox-shadow: var(--shadow-base);\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--interactive-01-hover);\n\t\t\tborder-color: var(--interactive-01-hover);\n\t\t}\n\n\t\t&:active {\n\t\t\tbackground-color: var(--interactive-01-active);\n\t\t\tborder-color: var(--interactive-01-active);\n\t\t}\n\t}\n\n\t&--is-disabled {\n\t\tpointer-events: none;\n\t\tborder-color: var(--ui-02);\n\n\t\t&.kt-field-radio--checked {\n\t\t\tbackground-color: var(--ui-02);\n\t\t\tbox-shadow: var(--shadow-base);\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<KtField v-bind=\"{ field }\" :helpTextSlot=\"$slots.helpText\" useFieldset>\n\t\t<template #container>\n\t\t\t<div :class=\"rootClasses\" :forceUpdateKey=\"forceUpdateKey\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"(option, index) in options\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\tclass=\"kt-field-radio-group__container\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"kt-field-radio-group__header\">\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tclass=\"kt-field-radio-group__label\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t'kt-field-radio-group__label--disabled':\n\t\t\t\t\t\t\t\t\tfield.isDisabled || Boolean(option.isDisabled),\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t:data-test=\"optionDataTest(option)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tv-bind=\"inputProps(option, index)\"\n\t\t\t\t\t\t\t\t@change=\"onChange(option.value)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ToggleRadio\n\t\t\t\t\t\t\t\tclass=\"kt-field-radio-group__radio\"\n\t\t\t\t\t\t\t\t:isChecked=\"field.currentValue === option.value\"\n\t\t\t\t\t\t\t\t:isDisabled=\"field.isDisabled || Boolean(option.isDisabled)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<slot name=\"header\" :option=\"option\">\n\t\t\t\t\t\t\t\t<div v-text=\"option.label\" />\n\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<FieldHelpText\n\t\t\t\t\t\t\tv-if=\"option.tooltip\"\n\t\t\t\t\t\t\tclass=\"kt-field-radio-group__tooltip\"\n\t\t\t\t\t\t\t:helpText=\"option.tooltip\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<slot name=\"headerSide\" :option=\"option\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"kt-field-radio-group__content\">\n\t\t\t\t\t\t<slot name=\"content\" :option=\"option\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport omit from 'lodash/omit.js'\nimport { computed, defineComponent, type InputHTMLAttributes } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport FieldHelpText from '../kotti-field/components/FieldHelpText.vue'\nimport { useField, useForceUpdate } from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\nimport ToggleRadio from '../shared-components/ToggleRadio.vue'\n\nimport { KOTTI_FIELD_RADIO_GROUP_SUPPORTS } from './constants'\nimport { KottiFieldRadioGroup } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldRadioGroup',\n\tcomponents: {\n\t\tFieldHelpText,\n\t\tKtField,\n\t\tToggleRadio,\n\t},\n\tprops: makeProps(KottiFieldRadioGroup.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldRadioGroup.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_RADIO_GROUP_SUPPORTS,\n\t\t})\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\t\treturn {\n\t\t\tfield,\n\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\tinputProps: computed(\n\t\t\t\t() =>\n\t\t\t\t\t(\n\t\t\t\t\t\toption: KottiFieldRadioGroup.PropsInternal['options'][0],\n\t\t\t\t\t\tindex: number,\n\t\t\t\t\t): InputHTMLAttributes & { class: string } => ({\n\t\t\t\t\t\t...omit(field.inputProps, ['data-test', 'id']),\n\t\t\t\t\t\tchecked: field.currentValue === option.value,\n\t\t\t\t\t\tclass: 'kt-field-radio-group__input',\n\t\t\t\t\t\tdisabled: field.isDisabled || Boolean(option.isDisabled),\n\t\t\t\t\t\tid: `${field.inputProps.id}-${String(index)}`,\n\t\t\t\t\t\tname: field.inputProps.id,\n\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\tvalue: option.value,\n\t\t\t\t\t}),\n\t\t\t),\n\t\t\tonChange: (value: KottiFieldRadioGroup.Entry['value']) => {\n\t\t\t\tfield.setValue(value)\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\toptionDataTest: (option: KottiFieldRadioGroup.Entry) => {\n\t\t\t\tif (option.dataTest) return option.dataTest\n\n\t\t\t\tif (Object.keys(field.inputProps).includes('data-test')) {\n\t\t\t\t\treturn [field.inputProps['data-test'], option.value].join('.')\n\t\t\t\t}\n\t\t\t},\n\t\t\trootClasses: computed(() => ({\n\t\t\t\t'kt-field-radio-group': true,\n\t\t\t\t'kt-field-radio-group--inline': props.isInline,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-field/mixins';\n\n.kt-field-radio-group {\n\tdisplay: flex;\n\tflex: 1;\n\n\t&--inline {\n\t\tflex-direction: row;\n\n\t\t.kt-field-radio-group__container:not(:first-child) {\n\t\t\tmargin-left: 1rem;\n\t\t}\n\t}\n\n\t&:not(&--inline) {\n\t\tflex-direction: column;\n\n\t\t.kt-field-radio-group__container:not(:first-child) {\n\t\t\tmargin-top: 0.4rem;\n\t\t}\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\n\t\t> *:not(:last-child) {\n\t\t\tmargin-right: 0.3rem;\n\t\t}\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tcursor: pointer;\n\n\t\t> *:not(:last-child) {\n\t\t\tmargin-right: 0.3rem;\n\t\t}\n\n\t\t&--disabled {\n\t\t\tcolor: var(--text-05);\n\t\t\tcursor: not-allowed;\n\n\t\t\t.kt-field-radio-group__radio {\n\t\t\t\tborder-color: var(--ui-02);\n\n\t\t\t\t&--checked {\n\t\t\t\t\tbackground-color: var(--ui-02);\n\t\t\t\t\tbox-shadow: var(--shadow-base);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__tooltip {\n\t\t// align tooltip icon with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-6px) Put it up half the height of the tooltip height (12px)\n\t\ttransform: translateY(calc(0.75em - 6px));\n\t}\n\n\t&__input {\n\t\tdisplay: none;\n\t}\n\n\t&__radio {\n\t\t// align radio with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-var(--radio-size) * 0.5) Put it up half the height of the radio height\n\t\ttransform: translateY(calc(0.75em - var(--radio-size) * 0.5));\n\t}\n\n\t&__radio-inside {\n\t\tdisplay: block;\n\t\twidth: var(--radio-inside-side);\n\t\theight: var(--radio-inside-side);\n\t\tbackground-color: var(--ui-background);\n\t\tborder-radius: 50%;\n\t}\n\n\t&__content {\n\t\tfont-size: var(--font-size-small);\n\t}\n}\n\n.kt-field__wrapper {\n\t@include validations using ($type) {\n\t\t@if $type != empty {\n\t\t\t&:not(.kt-field__wrapper--disabled) {\n\t\t\t\t.kt-field-radio-group {\n\t\t\t\t\t&__radio {\n\t\t\t\t\t\tborder-color: var(--support-#{$type});\n\n\t\t\t\t\t\t&--checked {\n\t\t\t\t\t\t\tbackground-color: var(--support-#{$type});\n\t\t\t\t\t\t\tbox-shadow: var(--shadow-base);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_RADIO_GROUP_SUPPORTS } from './constants'\nimport KtFieldRadioGroupVue from './KtFieldRadioGroup.vue'\nimport { KottiFieldRadioGroup } from './types'\n\nexport const KtFieldRadioGroup = attachMeta(\n\tmakeInstallable(KtFieldRadioGroupVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=436%3A242',\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldRadioGroup',\n\t\t\tschema: KottiFieldRadioGroup.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_RADIO_GROUP_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_SELECT_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: true,\n\tdecoration: true,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n\nexport const UNGROUPED_KEY = Symbol('ungrouped')\n","<template>\n\t<div :class=\"classes\">\n\t\t<div v-if=\"label\" class=\"kt-tag__label\">{{ label }}:&nbsp;</div>\n\t\t<slot>\n\t\t\t<div class=\"kt-tag__text\" v-text=\"text\" />\n\t\t</slot>\n\t\t<div\n\t\t\tv-if=\"!isDisabled\"\n\t\t\tclass=\"kt-tag__icon\"\n\t\t\t@click.prevent.stop=\"$emit('close')\"\n\t\t>\n\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.CLOSE\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiTag } from './types'\n\nexport default defineComponent({\n\tname: 'KtTag',\n\tprops: makeProps(KottiTag.propsSchema),\n\temits: ['close'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tclasses: computed(() => ({\n\t\t\t\t[`kt-tag--is-${props.colorStyle}`]: true,\n\t\t\t\t'kt-tag': true,\n\t\t\t})),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n$colors:\n\t'blue', 'gray', 'green', 'mint', 'orange', 'primary', 'purple', 'red',\n\t'slate', 'violet', 'yellow';\n\n:root {\n\t--kt-tag-vertical-gap: var(--unit-h);\n\t--kt-tag-horizontal-gap: var(--unit-1);\n\t--kt-tag-border: var(--unit-q);\n\t--kt-tag-padding: var(--unit-1);\n\n\t.kt-tag {\n\t\tcolor: var(--text-02);\n\t\tbackground-color: var(--interactive-02);\n\n\t\t@each $color in $colors {\n\t\t\t&--is-#{$color}-light {\n\t\t\t\tcolor: var(--#{$color}-70);\n\t\t\t\tbackground-color: var(--#{$color}-10);\n\t\t\t\tborder: var(--kt-tag-border) solid var(--#{$color}-30);\n\n\t\t\t\t.kt-tag__icon:not(:hover) {\n\t\t\t\t\tbackground-color: var(--#{$color}-20);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&--is-#{$color}-filled {\n\t\t\t\tcolor: var(--#{$color}-05);\n\t\t\t\tbackground-color: var(--#{$color}-60);\n\t\t\t\tborder: var(--kt-tag-border) solid var(--#{$color}-40);\n\n\t\t\t\t.kt-tag__icon:not(:hover) {\n\t\t\t\t\tbackground-color: var(--#{$color}-70);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n:root[data-theme='dark'] {\n\t.kt-tag {\n\t\t@each $color in $colors {\n\t\t\t&--is-#{$color}-light {\n\t\t\t\tcolor: var(--#{$color}-30);\n\t\t\t\tbackground-color: var(--#{$color}-90);\n\t\t\t\tborder: var(--kt-tag-border) solid var(--#{$color}-70);\n\n\t\t\t\t.kt-tag__icon:not(:hover) {\n\t\t\t\t\tbackground-color: var(--#{$color}-80);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&--is-#{$color}-filled {\n\t\t\t\tcolor: var(--#{$color}-100);\n\t\t\t\tbackground-color: var(--#{$color}-40);\n\t\t\t\tborder: var(--kt-tag-border) solid var(--#{$color}-60);\n\n\t\t\t\t.kt-tag__icon:not(:hover) {\n\t\t\t\t\tbackground-color: var(--#{$color}-50);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-tag {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tpadding: var(--kt-tag-padding);\n\tmargin: var(--kt-tag-vertical-gap) var(--kt-tag-horizontal-gap);\n\tfont-size: 0.875em;\n\twhite-space: nowrap;\n\tborder-radius: var(--field-border-radius);\n\n\t&__icon {\n\t\t$size: 1.25em;\n\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: $size;\n\t\theight: $size;\n\t\tmargin-left: var(--unit-1);\n\t\tcursor: pointer;\n\t\tborder-radius: 1px;\n\t}\n\n\t&__label {\n\t\tfont-weight: bold;\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtTagVue from './KtTag.vue'\nimport { KottiTag } from './types'\n\nexport const KtTag = attachMeta(makeInstallable(KtTagVue), {\n\taddedVersion: '3.0.0-beta.36',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\tdefault: {\n\t\t\tdescription: null,\n\t\t\tscope: {},\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Tag',\n\t\tschema: KottiTag.propsSchema,\n\t},\n})\n","import castArray from 'lodash/castArray.js'\nimport type { Props as TippyProps } from 'tippy.js'\nimport type { Ref } from 'vue'\nimport { computed, inject, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../../constants'\nimport type { KottiField } from '../../kotti-field/types'\nimport { KT_IS_IN_POPOVER } from '../../kotti-popover/constants'\nimport { sameWidthOrStyled } from '../../utilities/tippy'\n\nconst TIPPY_CONTENT_WRAPPER_CLASSES = new Set(['tippy-box', 'tippy-content'])\n\nexport const isTippyContentWrapper = (element: HTMLElement): boolean =>\n\t[...element.classList].some((className) =>\n\t\tTIPPY_CONTENT_WRAPPER_CLASSES.has(className),\n\t)\n\nexport const useSelectTippy = <T>(\n\tfield: KottiField.Hook.Returns<T>,\n\ttriggerTargets?: Ref<TippyProps['triggerTarget']>,\n\tdropdownStyles?: Ref<Record<string, unknown>>,\n): {\n\tisDropdownMounted: Ref<boolean>\n\tisDropdownOpen: Ref<boolean>\n\tsetIsDropdownOpen: (isDropdownOpen: boolean) => void\n\ttippyContentRef: Ref<HTMLElement | null>\n\ttippyRef: Ref<HTMLElement | null>\n} => {\n\tconst tippyRef = ref<HTMLElement | null>(null)\n\tconst tippyContentRef = ref<HTMLElement | null>(null)\n\n\t// track in a ref because the `tippy.state.isShown` doesn’t immediately update\n\tconst isDropdownOpen = ref(false)\n\tconst isDropdownMounted = ref(true)\n\tconst isInPopover = inject(KT_IS_IN_POPOVER, false)\n\n\tconst { tippy } = useTippy(\n\t\ttippyRef,\n\t\tcomputed(() => ({\n\t\t\t/**\n\t\t\t * if inside a popover, we want to stay inside the same CSS stacking context\n\t\t\t * @see {@link https://atomiks.github.io/tippyjs/v6/all-props/#appendto}\n\t\t\t */\n\t\t\tappendTo: isInPopover ? 'parent' : () => document.body,\n\t\t\tarrow: false,\n\t\t\tcontent: tippyContentRef.value ?? undefined,\n\t\t\t// hides the tippy if we click-away from the tippy\n\t\t\thideOnClick: false,\n\t\t\tinteractive: true,\n\t\t\tmaxWidth: 'none',\n\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\tonClickOutside: () => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tsetIsDropdownOpen(false)\n\t\t\t},\n\t\t\tonHidden: () => {\n\t\t\t\tisDropdownMounted.value = false\n\t\t\t},\n\t\t\tonHide: () => {\n\t\t\t\tisDropdownOpen.value = false\n\t\t\t},\n\t\t\tonShow: () => {\n\t\t\t\tif (field.isDisabled || field.isLoading) return false\n\n\t\t\t\t// More correct here, don't move to `onShown()`\n\t\t\t\tisDropdownMounted.value = true\n\n\t\t\t\tisDropdownOpen.value = true\n\t\t\t},\n\t\t\tplacement: 'bottom-start',\n\t\t\tpopperOptions: {\n\t\t\t\tmodifiers: [sameWidthOrStyled(dropdownStyles?.value)],\n\t\t\t},\n\t\t\ttheme: 'kt-light-border',\n\t\t\ttrigger: 'click focusin',\n\t\t\ttriggerTarget: triggerTargets?.value ?? undefined,\n\t\t})),\n\t)\n\n\tconst setIsDropdownOpen = (showTippy: boolean) => {\n\t\tif (!tippy.value) return\n\n\t\tconst tippys = castArray(tippy.value)\n\n\t\tfor (const tippy of tippys) {\n\t\t\tif (showTippy) tippy.show()\n\t\t\telse tippy.hide()\n\t\t}\n\t}\n\n\treturn {\n\t\tisDropdownMounted,\n\t\tisDropdownOpen,\n\t\tsetIsDropdownOpen,\n\t\ttippyContentRef,\n\t\ttippyRef,\n\t}\n}\n","<template>\n\t<div :class=\"containerClasses\">\n\t\t<i\n\t\t\tv-if=\"showClear\"\n\t\t\tclass=\"yoco\"\n\t\t\trole=\"button\"\n\t\t\t@click.stop=\"handleClear\"\n\t\t\tv-text=\"Yoco.Icon.CLOSE\"\n\t\t/>\n\t\t<div v-else-if=\"hasClear\" class=\"action-icon__clear-placeholder\" />\n\t\t<i\n\t\t\tclass=\"yoco\"\n\t\t\trole=\"button\"\n\t\t\t@click.stop.prevent=\"handleSetIsDropdownOpen\"\n\t\t\t@mousedown.stop.prevent\n\t\t\tv-text=\"isDropdownOpen ? Yoco.Icon.CHEVRON_UP : Yoco.Icon.CHEVRON_DOWN\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nexport default defineComponent({\n\tname: 'ActionIcon',\n\tprops: {\n\t\tclasses: { required: true, type: Array as PropType<Array<string>> },\n\t\thandleClear: { required: true, type: Function as PropType<() => void> },\n\t\thasClear: { required: true, type: Boolean },\n\t\tisDropdownOpen: { required: true, type: Boolean },\n\t\tshowClear: { required: true, type: Boolean },\n\t},\n\temits: ['update:isDropdownOpen'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tcontainerClasses: computed(() => [\n\t\t\t\t...props.classes,\n\t\t\t\t...(props.hasClear ? ['action-icon__container--has-clear-icon'] : []),\n\t\t\t\t'action-icon__container',\n\t\t\t]),\n\t\t\thandleSetIsDropdownOpen: () => {\n\t\t\t\temit('update:isDropdownOpen', !props.isDropdownOpen)\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-width: 1.1em;\n\n.action-icon {\n\t&__container {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t&--has-clear-icon {\n\t\t\tjustify-content: flex-end;\n\t\t\tmin-width: 1.6rem;\n\t\t}\n\t}\n\n\t&__clear-placeholder {\n\t\twidth: $icon-width;\n\t\tcursor: text;\n\t}\n}\n</style>\n","<template>\n\t<MenuOptionItem\n\t\tref=\"optionRef\"\n\t\tv-bind=\"{ isDisabled, isSelected }\"\n\t\t:data-test=\"dataTest\"\n\t\tisClickable\n\t\tisDraggable\n\t\t@click.stop=\"(e) => $emit('click', e)\"\n\t>\n\t\t<slot>\n\t\t\t{{ label }}\n\t\t</slot>\n\t</MenuOptionItem>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\nimport { z } from 'zod'\n\nimport { makeProps } from '../../make-props'\nimport MenuOptionItem from '../../shared-components/menu-option/MenuOptionItem.vue'\n\nconst propsSchema = z.object({\n\tdataTest: z.string().nullable().default(null),\n\tisDisabled: z.boolean().default(false),\n\tisHovered: z.boolean().default(false),\n\tisSelected: z.boolean().default(false),\n\tlabel: z.string(),\n})\n\nexport default defineComponent({\n\tname: 'FieldSelectOptionsItem',\n\tcomponents: {\n\t\tMenuOptionItem,\n\t},\n\tprops: makeProps(propsSchema),\n\temits: ['click', 'scrollTo'],\n\tsetup(props, { emit }) {\n\t\tconst optionRef = ref<HTMLDivElement | null>(null)\n\n\t\twatch(\n\t\t\t() => props.isHovered,\n\t\t\t(isHovered, wasHovered) => {\n\t\t\t\tif (optionRef.value === null)\n\t\t\t\t\tthrow new Error('Unexpected Unbound option ref: null')\n\n\t\t\t\tif (isHovered && !wasHovered) {\n\t\t\t\t\tconst distanceFromParentTop = optionRef.value.offsetTop\n\n\t\t\t\t\temit('scrollTo', distanceFromParentTop)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\treturn {\n\t\t\toptionRef,\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<div class=\"kt-field-select-options\">\n\t\t<div v-if=\"isLoading\" class=\"kt-field-select-options__loading\">\n\t\t\t<div class=\"loading\" />\n\t\t</div>\n\t\t<div ref=\"optionsRef\" class=\"kt-field-select-options__scrollable-content\">\n\t\t\t<FieldSelectOptionsItem\n\t\t\t\tv-if=\"modifiedOptions.length === 0\"\n\t\t\t\tdataTest=\"NO_DATA\"\n\t\t\t\tisDisabled\n\t\t\t\t:label=\"translations.noDataText\"\n\t\t\t\t@scrollTo=\"scrollTo\"\n\t\t\t/>\n\t\t\t<template\n\t\t\t\tv-for=\"({ group, options }, groupIndex) in groupedOptions\"\n\t\t\t\t:key=\"groupIndex\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"group\"\n\t\t\t\t\tclass=\"kt-field-select-options__group-header\"\n\t\t\t\t\tv-text=\"group\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"kt-field-select-options__options\">\n\t\t\t\t\t<FieldSelectOptionsItem\n\t\t\t\t\t\tv-for=\"(option, index) in options\"\n\t\t\t\t\t\t:key=\"`option-${index}`\"\n\t\t\t\t\t\tclass=\"kt-field-select-options__option\"\n\t\t\t\t\t\t:dataTest=\"option.dataTest\"\n\t\t\t\t\t\t:isDisabled=\"option.isDisabled\"\n\t\t\t\t\t\t:isHovered=\"isHovered('option', index)\"\n\t\t\t\t\t\t:isSelected=\"option.isSelected\"\n\t\t\t\t\t\t:label=\"option.label\"\n\t\t\t\t\t\t@click=\"() => selectOption(option)\"\n\t\t\t\t\t\t@scrollTo=\"scrollTo\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\tv-bind=\"{ index, option, select: () => selectOption(option) }\"\n\t\t\t\t\t\t\tname=\"option\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FieldSelectOptionsItem>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"modifiedActions.length > 0\"\n\t\t\tclass=\"kt-field-select-options__separator\"\n\t\t/>\n\t\t<FieldSelectOptionsItem\n\t\t\tv-for=\"(action, index) in modifiedActions\"\n\t\t\t:key=\"`action-${index}`\"\n\t\t\tclass=\"kt-field-select-options__action\"\n\t\t\t:dataTest=\"action.dataTest\"\n\t\t\t:isDisabled=\"action.isDisabled\"\n\t\t\t:isHovered=\"isHovered('action', index)\"\n\t\t\t:label=\"action.label\"\n\t\t\t@click=\"() => onAction(action)\"\n\t\t\t@scrollTo=\"scrollTo\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport camelCase from 'lodash/camelCase.js'\nimport {\n\tcomputed,\n\tdefineComponent,\n\tonBeforeMount,\n\tonUnmounted,\n\tref,\n\twatch,\n} from 'vue'\nimport { z } from 'zod'\n\nimport { useI18nContext } from '../../kotti-i18n/hooks'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { makeProps } from '../../make-props'\nimport { UNGROUPED_KEY } from '../constants'\nimport { Shared } from '../types'\n\nimport FieldSelectOptionsItem from './OptionsItem.vue'\n\nconst propsSchema = z.object({\n\tactions: z.array(Shared.actionSchema),\n\tdataTestPrefix: z.string(),\n\tgroups: z.array(Shared.groupSchema),\n\tisDisabled: z.boolean().default(false),\n\tisDropdownOpen: z.boolean().default(false),\n\tisLoading: z.boolean().default(false),\n\tisMultiple: z.boolean().default(false),\n\tisUnsorted: z.boolean().default(false),\n\tmaximumSelectable: z.number().int().min(0),\n\tmodelValue: z.array(Shared.valueSchema),\n\toptions: z.array(Shared.optionSchema),\n})\n\ntype ModifiedAction = z.output<\n\t(typeof propsSchema)['shape']['actions']\n>[number] & {\n\tdataTest: string\n}\n\ntype ModifiedOption = z.output<\n\t(typeof propsSchema)['shape']['options']\n>[number] & {\n\tisSelected: boolean\n}\n\nconst mod = (number: number, divisor: number) =>\n\t((number % divisor) + divisor) % divisor\n\nconst normalizeId = (id: number | string | symbol) => {\n\tif (typeof id === 'symbol') {\n\t\treturn id\n\t}\n\n\treturn String(id)\n}\n\nexport default defineComponent({\n\tname: 'FieldSelectOptions',\n\tcomponents: {\n\t\tFieldSelectOptionsItem,\n\t},\n\tprops: makeProps(propsSchema),\n\temits: ['close', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst i18nContext = useI18nContext()\n\t\tconst translations = useTranslationNamespace('KtFieldSelects')\n\n\t\tconst optionsRef = ref<HTMLDivElement | null>(null)\n\n\t\tconst modifiedActions = computed(\n\t\t\t(): Array<ModifiedAction> =>\n\t\t\t\tprops.actions.map((action) => ({\n\t\t\t\t\t...action,\n\t\t\t\t\tdataTest:\n\t\t\t\t\t\taction.dataTest ??\n\t\t\t\t\t\t`${props.dataTestPrefix}.${camelCase(action.label)}`,\n\t\t\t\t})),\n\t\t)\n\n\t\tconst groupLabels = computed(\n\t\t\t() =>\n\t\t\t\tnew Map(props.groups.map(({ id, label }) => [normalizeId(id), label])),\n\t\t)\n\n\t\tconst getGroupLabel = (\n\t\t\tgroupId: Shared.Option['groupId'] | symbol,\n\t\t): string => {\n\t\t\tif (!groupId) return translations.value.ungroupedText\n\n\t\t\treturn (\n\t\t\t\tgroupLabels.value.get(normalizeId(groupId)) ??\n\t\t\t\ttranslations.value.ungroupedText\n\t\t\t)\n\t\t}\n\n\t\tconst groupedOptions = computed<\n\t\t\t{ group: string | null; options: ModifiedOption[] }[]\n\t\t>(() => {\n\t\t\tconst isLimitReached =\n\t\t\t\tprops.isMultiple && props.modelValue.length >= props.maximumSelectable\n\n\t\t\tconst mapper = (option: Shared.Option): ModifiedOption => {\n\t\t\t\tconst isSelected = props.modelValue.includes(option.value)\n\n\t\t\t\treturn {\n\t\t\t\t\t...option,\n\t\t\t\t\tdataTest:\n\t\t\t\t\t\toption.dataTest ??\n\t\t\t\t\t\t`${props.dataTestPrefix}.${String(option.value)}`,\n\t\t\t\t\tisDisabled:\n\t\t\t\t\t\tprops.isDisabled ||\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- '??' is not the right choice to handle booleans\n\t\t\t\t\t\toption.isDisabled ||\n\t\t\t\t\t\t(isLimitReached && !isSelected),\n\t\t\t\t\tisSelected,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst collator = new Intl.Collator(i18nContext.locale, {\n\t\t\t\tnumeric: true,\n\t\t\t\tsensitivity: 'base',\n\t\t\t})\n\t\t\tconst groups = []\n\n\t\t\tif (props.groups.length > 0) {\n\t\t\t\tconst optionsByGroup = new Map<string | symbol, ModifiedOption[]>()\n\n\t\t\t\tfor (const option of props.options) {\n\t\t\t\t\tconst groupId = option.groupId\n\t\t\t\t\t\t? normalizeId(option.groupId)\n\t\t\t\t\t\t: UNGROUPED_KEY\n\t\t\t\t\tconst groupOptions = optionsByGroup.get(groupId) ?? []\n\n\t\t\t\t\toptionsByGroup.set(groupId, [...groupOptions, mapper(option)])\n\t\t\t\t}\n\n\t\t\t\tgroups.push(\n\t\t\t\t\t...[...props.groups.map(({ id }) => id), UNGROUPED_KEY]\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(id) => (optionsByGroup.get(normalizeId(id)) ?? []).length > 0,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((id) => ({\n\t\t\t\t\t\t\tgroup: getGroupLabel(id),\n\t\t\t\t\t\t\toptions: props.isUnsorted\n\t\t\t\t\t\t\t\t? (optionsByGroup.get(normalizeId(id)) ?? [])\n\t\t\t\t\t\t\t\t: (optionsByGroup.get(normalizeId(id)) ?? []).sort((a, b) =>\n\t\t\t\t\t\t\t\t\t\tcollator.compare(a.label, b.label),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tgroups.push({\n\t\t\t\t\tgroup: null,\n\t\t\t\t\toptions: props.isUnsorted\n\t\t\t\t\t\t? props.options.map(mapper)\n\t\t\t\t\t\t: props.options\n\t\t\t\t\t\t\t\t.map(mapper)\n\t\t\t\t\t\t\t\t.sort((a, b) => collator.compare(a.label, b.label)),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn groups\n\t\t})\n\n\t\tconst modifiedOptions = computed(() =>\n\t\t\tgroupedOptions.value.flatMap(({ options }) => options),\n\t\t)\n\n\t\tconst hoveredIndex = ref(0)\n\t\tconst resetHoveredIndex = () => (hoveredIndex.value = 0)\n\n\t\twatch(\n\t\t\t() => props.isDropdownOpen,\n\t\t\t(isOpen) => {\n\t\t\t\tif (!isOpen) resetHoveredIndex()\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\tconst itemCount = computed(\n\t\t\t() => modifiedOptions.value.length + modifiedActions.value.length,\n\t\t)\n\n\t\twatch(\n\t\t\titemCount,\n\t\t\t(newValue, oldValue) => {\n\t\t\t\tif (newValue !== oldValue) resetHoveredIndex()\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\tconst selectOption = (option: ModifiedOption) => {\n\t\t\tif (option.isDisabled) return\n\n\t\t\tif (props.isMultiple)\n\t\t\t\temit(\n\t\t\t\t\t'update:modelValue',\n\t\t\t\t\tprops.modelValue.includes(option.value)\n\t\t\t\t\t\t? props.modelValue.filter((v) => v !== option.value)\n\t\t\t\t\t\t: [...props.modelValue, option.value],\n\t\t\t\t)\n\t\t\telse emit('update:modelValue', [option.value])\n\t\t}\n\n\t\tconst onAction = (action: z.output<typeof Shared.actionSchema>) => {\n\t\t\tif (action.isDisabled) return\n\n\t\t\temit('close')\n\n\t\t\taction.onClick()\n\t\t}\n\n\t\tconst listener = (event: KeyboardEvent) => {\n\t\t\tif (!props.isDropdownOpen) return\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown': {\n\t\t\t\t\thoveredIndex.value = mod(hoveredIndex.value + 1, itemCount.value)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tcase 'ArrowUp': {\n\t\t\t\t\thoveredIndex.value = mod(hoveredIndex.value - 1, itemCount.value)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tcase 'Enter': {\n\t\t\t\t\tconst index = hoveredIndex.value\n\t\t\t\t\tconst optionsLength = modifiedOptions.value.length\n\n\t\t\t\t\tif (index < 0) return\n\n\t\t\t\t\tif (index < optionsLength) {\n\t\t\t\t\t\tselectOption(modifiedOptions.value[index] as ModifiedOption)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tonAction(\n\t\t\t\t\t\tmodifiedActions.value[index - optionsLength] as ModifiedAction,\n\t\t\t\t\t)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tonBeforeMount(() => {\n\t\t\twindow.addEventListener('keydown', listener)\n\t\t})\n\n\t\tonUnmounted(() => {\n\t\t\twindow.removeEventListener('keydown', listener)\n\t\t})\n\n\t\treturn {\n\t\t\tgroupedOptions,\n\t\t\tisHovered: (type: 'action' | 'option', index: number) => {\n\t\t\t\tconst optionsCount = props.options.length\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'action':\n\t\t\t\t\t\treturn index === hoveredIndex.value - optionsCount\n\n\t\t\t\t\tcase 'option':\n\t\t\t\t\t\treturn index === hoveredIndex.value\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Options.vue: unrecognized type “${String(type)}”`)\n\t\t\t\t}\n\t\t\t},\n\t\t\tmodifiedActions,\n\t\t\tmodifiedOptions,\n\t\t\tonAction,\n\t\t\toptionsRef,\n\t\t\tscrollTo: (optionDistanceToOptionsTop: number) => {\n\t\t\t\tif (optionsRef.value === null)\n\t\t\t\t\tthrow new Error('Unexpected Unbound optionsRef: null')\n\n\t\t\t\toptionsRef.value.scrollTo({ top: optionDistanceToOptionsTop })\n\t\t\t},\n\t\t\tselectOption,\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-field/mixins';\n\n.kt-field-select-options {\n\tposition: relative;\n\n\t// KtPopover padding reset\n\tmargin: calc(-1 * var(--unit-2));\n\n\t> :last-child {\n\t\tmargin-bottom: var(--unit-2);\n\t}\n\n\t&__action {\n\t\tpadding: 6px;\n\t\tmargin: 0 var(--unit-2);\n\t\tfont-weight: 600;\n\t\tcolor: var(--interactive-01);\n\t\tborder-radius: var(--unit-1);\n\t}\n\n\t&__group-header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: 22px;\n\t\tpadding: var(--unit-1) var(--unit-2);\n\t\tmargin: var(--unit-2) 0;\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tline-height: 18px;\n\t\tcolor: var(--text-02);\n\t\tbackground-color: var(--ui-01);\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: var(--unit-2);\n\t\tright: var(--unit-6);\n\t}\n\n\t&__option {\n\t\tmargin: 0 var(--unit-2);\n\t\tborder-radius: var(--unit-1);\n\t}\n\n\t&__scrollable-content {\n\t\t@include prettify-scrollbar;\n\n\t\tmax-height: 40vh;\n\t\toverflow: auto;\n\n\t\t> :first-child {\n\t\t\t&.kt-field-select-options__group-header {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\n\t\t\t&:not(.kt-field-select-options__group-header) {\n\t\t\t\tmargin-top: var(--unit-2);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__separator {\n\t\theight: var(--unit-q);\n\t\tmargin: var(--unit-1) 0;\n\t\tbackground-color: var(--ui-02);\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-field-select\">\n\t\t<div\n\t\t\tref=\"tippyRef\"\n\t\t\t@mouseenter=\"isFieldHovered = true\"\n\t\t\t@mouseleave=\"isFieldHovered = false\"\n\t\t>\n\t\t\t<KtField\n\t\t\t\tv-bind=\"{ field }\"\n\t\t\t\tref=\"ktFieldRef\"\n\t\t\t\t:getEmptyValue=\"() => (isMultiple ? [] : null)\"\n\t\t\t\t:helpTextSlot=\"helpTextSlot\"\n\t\t\t>\n\t\t\t\t<div :class=\"inputWrapperClasses\">\n\t\t\t\t\t<slot\n\t\t\t\t\t\t:currentValue=\"\n\t\t\t\t\t\t\tisMultiple ? visibleSelectedTags : field.currentValue\n\t\t\t\t\t\t\"\n\t\t\t\t\t\tname=\"selection\"\n\t\t\t\t\t\t:removeValue=\"removeTag\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<KtTag\n\t\t\t\t\t\t\tv-for=\"(option, index) in visibleSelectedTags\"\n\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\t:isDisabled=\"field.isDisabled || Boolean(option.isDisabled)\"\n\t\t\t\t\t\t\t:text=\"option.label\"\n\t\t\t\t\t\t\t@close=\"removeTag(option.value)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<KtTag\n\t\t\t\t\t\t\tv-if=\"collapsedTagCount > 0\"\n\t\t\t\t\t\t\tisDisabled\n\t\t\t\t\t\t\t:text=\"`+${collapsedTagCount}`\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</slot>\n\t\t\t\t\t<input\n\t\t\t\t\t\tref=\"inputRef\"\n\t\t\t\t\t\tv-bind=\"inputProps\"\n\t\t\t\t\t\t@blur=\"isFieldFocused = false\"\n\t\t\t\t\t\t@focus=\"isFieldFocused = true\"\n\t\t\t\t\t\t@input=\"updateQuery\"\n\t\t\t\t\t\t@keydown.delete=\"onPressDelete\"\n\t\t\t\t\t\t@keydown.down.prevent\n\t\t\t\t\t\t@keydown.enter.prevent\n\t\t\t\t\t\t@keydown.up.prevent\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<template #actionIcon=\"{ classes, handleClear, hasClear, showClear }\">\n\t\t\t\t\t<ActionIcon\n\t\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t\tclasses,\n\t\t\t\t\t\t\thandleClear,\n\t\t\t\t\t\t\thasClear,\n\t\t\t\t\t\t\tisDropdownOpen,\n\t\t\t\t\t\t\tshowClear: showClearIcon(showClear),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t@update:isDropdownOpen=\"setIsDropdownOpen\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</KtField>\n\t\t</div>\n\t\t<div ref=\"tippyContentRef\">\n\t\t\t<FieldSelectOptions\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t:dataTestPrefix=\"inputProps['data-test']\"\n\t\t\t\t:groups=\"groups\"\n\t\t\t\t:isDisabled=\"field.isDisabled\"\n\t\t\t\t:isDropdownOpen=\"isDropdownOpen\"\n\t\t\t\t:isLoading=\"isLoadingOptions\"\n\t\t\t\t:isMultiple=\"isMultiple\"\n\t\t\t\t:isUnsorted=\"isUnsorted\"\n\t\t\t\t:maximumSelectable=\"maximumSelectable\"\n\t\t\t\t:modelValue=\"optionsValue\"\n\t\t\t\t:options=\"filteredOptions\"\n\t\t\t\t@close=\"setIsDropdownOpen(false)\"\n\t\t\t\t@update:modelValue=\"onOptionsInput\"\n\t\t\t>\n\t\t\t\t<template #option=\"values\">\n\t\t\t\t\t<slot v-bind=\"values\" name=\"option\" />\n\t\t\t\t</template>\n\t\t\t</FieldSelectOptions>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType, Slot } from 'vue'\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { z } from 'zod'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtField } from '../../kotti-field'\nimport { useField } from '../../kotti-field/hooks'\nimport {\n\tuseEmitBlur,\n\tuseForceUpdate,\n\tuseKtFieldRef,\n} from '../../kotti-field/hooks'\nimport { KtTag } from '../../kotti-tag'\nimport { makeProps } from '../../make-props'\nimport { KOTTI_FIELD_SELECT_SUPPORTS } from '../constants'\nimport {\n\tisTippyContentWrapper,\n\tuseSelectTippy,\n} from '../hooks/use-select-tippy'\nimport type {\n\tKottiFieldMultiSelect,\n\tKottiFieldMultiSelectRemote,\n\tKottiFieldSingleSelect,\n\tKottiFieldSingleSelectRemote,\n} from '../types'\nimport { Shared } from '../types'\n\nimport ActionIcon from './ActionIcon.vue'\nimport FieldSelectOptions from './Options.vue'\n\nconst UPDATE_QUERY = 'update:query'\n\nconst propsSchema = Shared.propsSchema\n\t.merge(Shared.isMultipleSchema)\n\t.merge(Shared.isRemoteSchema)\n\t.merge(Shared.isSingleSchema)\n\t.omit({ modelValue: true })\n\t.extend({\n\t\thelpTextSlot: z.function().returns(z.array(z.any())).optional(),\n\t\tisMultiple: z.boolean().default(false),\n\t\tisRemote: z.boolean().default(false),\n\t\tmodelValue: z.union([\n\t\t\tShared.isMultipleSchema.shape.modelValue,\n\t\t\tShared.isSingleSchema.shape.modelValue,\n\t\t]),\n\t})\n\ntype MultiValue =\n\t| KottiFieldMultiSelect.ModelValue\n\t| KottiFieldMultiSelectRemote.ModelValue\n\ntype SingleValue =\n\t| KottiFieldSingleSelect.ModelValue\n\t| KottiFieldSingleSelectRemote.ModelValue\n\nexport default defineComponent({\n\tname: 'GenericSelectField',\n\tcomponents: {\n\t\tActionIcon,\n\t\tFieldSelectOptions,\n\t\tKtField,\n\t\tKtTag,\n\t},\n\tprops: {\n\t\t...makeProps(propsSchema),\n\t\thelpTextSlot: {\n\t\t\tdefault: undefined,\n\t\t\ttype: Function as PropType<Slot<undefined>>,\n\t\t},\n\t},\n\temits: ['blur', 'emit', 'open', 'update:modelValue', UPDATE_QUERY],\n\tsetup(props, { emit: rawEmit }) {\n\t\tconst emit = (event: string, payload: unknown) => {\n\t\t\trawEmit('emit', { event, payload })\n\t\t}\n\n\t\tconst field = useField<MultiValue | SingleValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) =>\n\t\t\t\tprops.isMultiple\n\t\t\t\t\t? (value as MultiValue).length === 0\n\t\t\t\t\t: (value as SingleValue) === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_SELECT_SUPPORTS,\n\t\t})\n\n\t\tconst inputRef = ref<HTMLInputElement | null>(null)\n\t\tconst isFieldFocused = ref(false)\n\t\tconst isFieldHovered = ref(false)\n\t\tconst localQuery = ref<string | null>(null)\n\n\t\tconst { forceUpdateKey, forceUpdate } = useForceUpdate()\n\t\tconst ktFieldRef = useKtFieldRef()\n\n\t\tconst triggerTargets = computed(() =>\n\t\t\tktFieldRef.value ? [ktFieldRef.value.inputContainerRef] : [],\n\t\t)\n\t\tconst dropdownStyles = computed(() => props.dropdownStyles ?? {})\n\n\t\tconst { isDropdownOpen, isDropdownMounted, ...selectTippy } =\n\t\t\tuseSelectTippy(field, triggerTargets, dropdownStyles)\n\n\t\tconst deleteQuery = () => {\n\t\t\tif (props.isRemote) {\n\t\t\t\tif (props.query !== null) emit(UPDATE_QUERY, null)\n\t\t\t} else localQuery.value = null\n\t\t}\n\n\t\t/**\n\t\t * Tippy wraps the content inside additional div elements.\n\t\t * So, we need to look for the actual content element.\n\t\t */\n\t\tconst findEventTarget = (\n\t\t\ttarget: EventTarget | null,\n\t\t): EventTarget | null => {\n\t\t\tif (target === null || !(target instanceof HTMLElement)) return target\n\n\t\t\tif (target === selectTippy.tippyContentRef.value) return target\n\n\t\t\treturn isTippyContentWrapper(target)\n\t\t\t\t? findEventTarget((target.childNodes[0] ?? null) as EventTarget | null)\n\t\t\t\t: target\n\t\t}\n\t\tuseEmitBlur({\n\t\t\temit,\n\t\t\tfield,\n\t\t\tfieldTarget: computed(() => [\n\t\t\t\tktFieldRef.value?.inputContainerRef ?? null,\n\t\t\t\tselectTippy.tippyContentRef.value,\n\t\t\t]),\n\t\t\tfindEventTarget,\n\t\t})\n\n\t\twatch(\n\t\t\tisDropdownMounted,\n\t\t\t(isMounted) => {\n\t\t\t\tif (isMounted) return\n\t\t\t\tdeleteQuery()\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\twatch(\n\t\t\tisDropdownOpen,\n\t\t\t(isOpen) => {\n\t\t\t\tif (!isOpen) return\n\t\t\t\tinputRef.value?.focus()\n\t\t\t\temit('open', undefined)\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\tconst queryValue = computed(() =>\n\t\t\tprops.isRemote ? props.query : localQuery.value,\n\t\t)\n\n\t\t/**\n\t\t * keeps reference of already seen option labels so that\n\t\t * the tags can be rendered properly when filtering remotely\n\t\t */\n\t\tconst seenValueLabelMap = ref<Map<Shared.Value, Shared.Option['label']>>(\n\t\t\tnew Map(),\n\t\t)\n\n\t\twatch(\n\t\t\t() => props.options,\n\t\t\t() => {\n\t\t\t\tseenValueLabelMap.value = new Map([\n\t\t\t\t\t...seenValueLabelMap.value,\n\t\t\t\t\t...props.options.map(\n\t\t\t\t\t\t(option): [Shared.Value, Shared.Option['label']] => [\n\t\t\t\t\t\t\toption.value,\n\t\t\t\t\t\t\toption.label,\n\t\t\t\t\t\t],\n\t\t\t\t\t),\n\t\t\t\t])\n\t\t\t},\n\t\t\t{ flush: 'post', immediate: true },\n\t\t)\n\n\t\t/**\n\t\t * Make sure the input field does not take up the last row on its own\n\t\t * when tags are shown and the dropwown is closed.\n\t\t */\n\t\tconst isInputVisible = computed(\n\t\t\t() => !props.isMultiple || field.isEmpty || isDropdownOpen.value,\n\t\t)\n\n\t\treturn {\n\t\t\tcollapsedTagCount: computed(() =>\n\t\t\t\tprops.isMultiple\n\t\t\t\t\t? (field.currentValue as MultiValue).length - props.collapseTagsAfter\n\t\t\t\t\t: 0,\n\t\t\t),\n\t\t\tfield,\n\t\t\tfilteredOptions: computed(() =>\n\t\t\t\tprops.isRemote\n\t\t\t\t\t? props.options\n\t\t\t\t\t: props.options.filter(\n\t\t\t\t\t\t\t(o) =>\n\t\t\t\t\t\t\t\tlocalQuery.value === null ||\n\t\t\t\t\t\t\t\to.label.toLowerCase().includes(localQuery.value.toLowerCase()),\n\t\t\t\t\t\t),\n\t\t\t),\n\t\t\tinputProps: computed(() => ({\n\t\t\t\t...field.inputProps,\n\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\tclass: ['kt-field-select__input-field'],\n\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\tsize: 1,\n\t\t\t\ttype: 'text',\n\t\t\t\tvalue: (() => {\n\t\t\t\t\tif (isDropdownOpen.value) return queryValue.value ?? undefined\n\n\t\t\t\t\t// can't bind multiple values to input (therefore, we just bind `undefined`)\n\t\t\t\t\tif (field.currentValue === null || props.isMultiple) return undefined\n\n\t\t\t\t\treturn props.options.find(\n\t\t\t\t\t\t(option) => option.value === field.currentValue,\n\t\t\t\t\t)?.label\n\t\t\t\t})(),\n\t\t\t})),\n\t\t\tinputRef,\n\t\t\tinputWrapperClasses: computed(() => ({\n\t\t\t\t'kt-field-select__input-wrapper': true,\n\t\t\t\t'kt-field-select__input-wrapper--has-tags': props.isMultiple,\n\t\t\t\t'kt-field-select__input-wrapper--hide-input-field':\n\t\t\t\t\t!isInputVisible.value,\n\t\t\t})),\n\t\t\tisDropdownOpen,\n\t\t\tisFieldFocused,\n\t\t\tisFieldHovered,\n\t\t\tktFieldRef,\n\t\t\tonOptionsInput: (value: MultiValue) => {\n\t\t\t\tif (props.isMultiple) {\n\t\t\t\t\tfield.setValue(value)\n\t\t\t\t\tif (props.clearOnSelect) {\n\t\t\t\t\t\tdeleteQuery()\n\t\t\t\t\t\tinputRef.value?.focus()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst newValue = value[0] ?? null\n\t\t\t\t\t// performance optimization\n\t\t\t\t\tif (field.currentValue !== newValue) field.setValue(newValue)\n\t\t\t\t}\n\t\t\t\t// single select: close the tippy instance whenever a selection is made.\n\t\t\t\t// This (watcher on isDropdownMounted) also intentionally resets the query\n\t\t\t\t// so that the api-call (for example) can already trigger and load the non-filtered options\n\t\t\t\tif (!props.isMultiple) selectTippy.setIsDropdownOpen(false)\n\t\t\t},\n\t\t\tonPressDelete: () => {\n\t\t\t\tif (queryValue.value || !props.isMultiple) return // only delete value if query is already empty\n\n\t\t\t\tconst value = field.currentValue as MultiValue\n\t\t\t\tif (value.length > 0) field.setValue(value.slice(0, -1))\n\t\t\t},\n\t\t\toptionsValue: computed(() => {\n\t\t\t\tif (props.isMultiple) return field.currentValue as MultiValue\n\t\t\t\telse\n\t\t\t\t\treturn field.currentValue === null\n\t\t\t\t\t\t? []\n\t\t\t\t\t\t: [field.currentValue as SingleValue]\n\t\t\t}),\n\t\t\tremoveTag: (value: Shared.Option['value']) => {\n\t\t\t\tif (!props.isMultiple)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'GenericSelectField: Unexpected multi function on single select',\n\t\t\t\t\t)\n\n\t\t\t\tfield.setValue(\n\t\t\t\t\t(field.currentValue as MultiValue).filter((v) => v !== value),\n\t\t\t\t)\n\t\t\t\tinputRef.value?.focus()\n\t\t\t},\n\t\t\tsetIsDropdownOpen: selectTippy.setIsDropdownOpen,\n\t\t\tshowClearIcon: computed(\n\t\t\t\t() => (showClear: boolean) =>\n\t\t\t\t\tshowClear && (isFieldHovered.value || isFieldFocused.value),\n\t\t\t),\n\t\t\ttippyContentRef: selectTippy.tippyContentRef,\n\t\t\ttippyRef: selectTippy.tippyRef,\n\t\t\tupdateQuery: (event: Event) => {\n\t\t\t\tif (!isDropdownOpen.value) {\n\t\t\t\t\tselectTippy.setIsDropdownOpen(true)\n\t\t\t\t} else {\n\t\t\t\t\tconst value = (event.target as HTMLInputElement).value\n\t\t\t\t\tconst newValue = value === '' ? null : value\n\n\t\t\t\t\tif (props.isRemote && props.query !== newValue)\n\t\t\t\t\t\temit(UPDATE_QUERY, newValue)\n\t\t\t\t\telse localQuery.value = newValue\n\t\t\t\t}\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\tvisibleSelectedTags: computed(() =>\n\t\t\t\tprops.isMultiple\n\t\t\t\t\t? (field.currentValue as MultiValue)\n\t\t\t\t\t\t\t.filter((_, index) => index < props.collapseTagsAfter)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t(value): Shared.Option =>\n\t\t\t\t\t\t\t\t\tprops.options.find((option) => option.value === value) ?? {\n\t\t\t\t\t\t\t\t\t\tlabel: seenValueLabelMap.value.get(value) ?? String(value),\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [],\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-field-select {\n\t&:not(:last-child) {\n\t\tmargin-bottom: 0.8rem;\n\t}\n\n\t&__query {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tline-height: 1.6;\n\t\tborder: 0;\n\t}\n\n\t$vertical-tag-gap: 2px;\n\t$horizontal-tag-gap: 4px;\n\n\t&__input-wrapper {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcursor: text;\n\n\t\t&--has-tags {\n\t\t\tflex-wrap: wrap;\n\n\t\t\t// HACK: use negative margins to align multi-line grids of tags\n\t\t\tmargin: #{-$vertical-tag-gap + 4px} #{-$horizontal-tag-gap};\n\t\t}\n\n\t\t&--hide-input-field {\n\t\t\tposition: relative;\n\n\t\t\t.kt-field-select__input-field {\n\t\t\t\tposition: absolute;\n\t\t\t\tinset: 0;\n\t\t\t\tz-index: -1;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__input-field {\n\t\tdisplay: flex;\n\t\tflex: 1 1 auto;\n\t\tmin-width: 25%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\tline-height: 1.6;\n\t\tborder: 0;\n\t}\n}\n</style>\n","<template>\n\t<GenericSelectField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\tisMultiple\n\t\t@emit=\"onEmit\"\n\t>\n\t\t<template #option=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"option\" />\n\t\t</template>\n\t\t<template #selection=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"selection\" />\n\t\t</template>\n\t</GenericSelectField>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericSelectField from './components/GenericSelectField.vue'\nimport { KottiFieldMultiSelect } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldMultiSelect',\n\tcomponents: {\n\t\tGenericSelectField,\n\t},\n\tprops: makeProps(KottiFieldMultiSelect.propsSchema),\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonEmit: ({ event, payload }: { event: string; payload: unknown }) => {\n\t\t\t\temit(event, payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericSelectField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\tisMultiple\n\t\tisRemote\n\t\t@emit=\"onEmit\"\n\t>\n\t\t<template #option=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"option\" />\n\t\t</template>\n\t\t<template #selection=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"selection\" />\n\t\t</template>\n\t</GenericSelectField>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericSelectField from './components/GenericSelectField.vue'\nimport { KottiFieldMultiSelectRemote } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldMultiSelectRemote',\n\tcomponents: {\n\t\tGenericSelectField,\n\t},\n\tprops: makeProps(KottiFieldMultiSelectRemote.propsSchema),\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonEmit: ({ event, payload }: { event: string; payload: unknown }) => {\n\t\t\t\temit(event, payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericSelectField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t@emit=\"onEmit\"\n\t>\n\t\t<template #option=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"option\" />\n\t\t</template>\n\t\t<template #selection=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"selection\" />\n\t\t</template>\n\t</GenericSelectField>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericSelectField from './components/GenericSelectField.vue'\nimport { KottiFieldSingleSelect } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldSingleSelect',\n\tcomponents: {\n\t\tGenericSelectField,\n\t},\n\tprops: makeProps(KottiFieldSingleSelect.propsSchema),\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonEmit: ({ event, payload }: { event: string; payload: unknown }) => {\n\t\t\t\temit(event, payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<GenericSelectField\n\t\tv-bind=\"$props\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t\tisRemote\n\t\t@emit=\"onEmit\"\n\t>\n\t\t<template #option=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"option\" />\n\t\t</template>\n\t\t<template #selection=\"values\">\n\t\t\t<slot v-bind=\"values\" name=\"selection\" />\n\t\t</template>\n\t</GenericSelectField>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport GenericSelectField from './components/GenericSelectField.vue'\nimport { KottiFieldSingleSelectRemote } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldSingleSelectRemote',\n\tcomponents: {\n\t\tGenericSelectField,\n\t},\n\tprops: makeProps(KottiFieldSingleSelectRemote.propsSchema),\n\tsetup(_, { emit }) {\n\t\treturn {\n\t\t\tonEmit: ({ event, payload }: { event: string; payload: unknown }) => {\n\t\t\t\temit(event, payload)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","import type { z } from 'zod'\n\nimport { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport type { Meta } from '../types/kotti'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_SELECT_SUPPORTS } from './constants'\nimport KtFieldMultiSelectVue from './KtFieldMultiSelect.vue'\nimport KtFieldMultiSelectRemoteVue from './KtFieldMultiSelectRemote.vue'\nimport KtFieldSingleSelectVue from './KtFieldSingleSelect.vue'\nimport KtFieldSingleSelectRemoteVue from './KtFieldSingleSelectRemote.vue'\nimport {\n\tKottiFieldMultiSelect,\n\tKottiFieldMultiSelectRemote,\n\tKottiFieldSingleSelect,\n\tKottiFieldSingleSelectRemote,\n} from './types'\n\nconst componentFolder = 'kotti-field-select'\nconst url =\n\t'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=428%3A3482'\n\nconst getSlots = <T extends z.ZodTypeAny>(): Meta<T>['slots'] => ({\n\t...FIELD_META_BASE_SLOTS,\n\toption: {\n\t\tdescription: null,\n\t\tscope: {\n\t\t\tindex: {\n\t\t\t\tdescription: 'option index (after filtering)',\n\t\t\t\ttype: 'integer',\n\t\t\t},\n\t\t\toption: {\n\t\t\t\tdescription: 'the entire option entry',\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tdescription: 'select the current option',\n\t\t\t\ttype: 'function',\n\t\t\t},\n\t\t},\n\t},\n\tselection: {\n\t\tdescription: 'displays current selection',\n\t\tscope: {\n\t\t\tcurrentValue: {\n\t\t\t\tdescription:\n\t\t\t\t\t'the `value` of the current selection. is either a number/string/symbol for single select, or an array for multi select',\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t},\n\t},\n})\n\nexport const KtFieldSingleSelect = attachMeta(\n\tmakeInstallable(KtFieldSingleSelectVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl,\n\t\t},\n\t\tslots: getSlots(),\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldSingleSelect',\n\t\t\tschema: KottiFieldSingleSelect.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_SELECT_SUPPORTS },\n)\n\nexport const KtFieldSingleSelectRemote = attachMeta(\n\tmakeInstallable(KtFieldSingleSelectRemoteVue),\n\t{\n\t\taddedVersion: '3.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl,\n\t\t},\n\t\tslots: getSlots(),\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldSingleSelectRemote',\n\t\t\tschema: KottiFieldSingleSelectRemote.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_SELECT_SUPPORTS },\n)\n\nexport const KtFieldMultiSelect = attachMeta(\n\tmakeInstallable(KtFieldMultiSelectVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl,\n\t\t},\n\t\tslots: getSlots(),\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldMultiSelect',\n\t\t\tschema: KottiFieldMultiSelect.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_SELECT_SUPPORTS },\n)\n\nexport const KtFieldMultiSelectRemote = attachMeta(\n\tmakeInstallable(KtFieldMultiSelectRemoteVue),\n\t{\n\t\taddedVersion: '3.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl,\n\t\t},\n\t\tslots: getSlots(),\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldMultiSelectRemote',\n\t\t\tschema: KottiFieldMultiSelectRemote.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_SELECT_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_TEXT_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: true,\n\tdecoration: true,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field }\"\n\t\tref=\"ktFieldRef\"\n\t\t:getEmptyValue=\"() => null\"\n\t\t:helpTextSlot=\"$slots.helpText\"\n\t>\n\t\t<input v-bind=\"inputProps\" @input=\"onInput\" @keyup=\"onKeyup\" />\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, type InputHTMLAttributes } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport {\n\tuseEmitBlur,\n\tuseField,\n\tuseForceUpdate,\n\tuseKtFieldRef,\n} from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\n\nimport { KOTTI_FIELD_TEXT_SUPPORTS } from './constants'\nimport { KottiFieldText } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldText',\n\tcomponents: {\n\t\tKtField,\n\t},\n\tprops: makeProps(KottiFieldText.propsSchema),\n\temits: ['blur', 'keyup', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldText.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_TEXT_SUPPORTS,\n\t\t})\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\t\tconst ktFieldRef = useKtFieldRef()\n\n\t\tuseEmitBlur({\n\t\t\temit,\n\t\t\tfield,\n\t\t\tfieldTarget: computed(() => ktFieldRef.value?.inputContainerRef ?? null),\n\t\t})\n\n\t\treturn {\n\t\t\tfield,\n\t\t\tinputProps: computed(\n\t\t\t\t(): InputHTMLAttributes & {\n\t\t\t\t\tclass: string[]\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} => ({\n\t\t\t\t\t...field.inputProps,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: ['kt-field-text__wrapper'],\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\t\tsize: 1,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tvalue: field.currentValue ?? '',\n\t\t\t\t}),\n\t\t\t),\n\t\t\tktFieldRef,\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst newValue = (event.target as HTMLInputElement).value\n\t\t\t\tfield.setValue(newValue === '' ? null : newValue)\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\tonKeyup: (event: KeyboardEvent) => {\n\t\t\t\temit('keyup', event)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n.kt-field-text__wrapper {\n\tdisplay: flex;\n\twidth: 100%;\n\tpadding: 0;\n\tmargin: 0;\n\tline-height: 1.6;\n\tborder: 0;\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_TEXT_SUPPORTS } from './constants'\nimport KtFieldTextVue from './KtFieldText.vue'\nimport { KottiFieldText } from './types'\n\nexport const KtFieldText = attachMeta(\n\tmakeInstallable(KtFieldTextVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=415%3A4',\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldText',\n\t\t\tschema: KottiFieldText.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_TEXT_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_TEXT_AREA_SUPPORTS: KottiField.Supports = {\n\tautoComplete: true,\n\tborderless: true,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: true,\n\ttabIndex: true,\n}\n","<template>\n\t<KtField v-bind=\"{ field }\" :helpTextSlot=\"$slots.helpText\">\n\t\t<template #container>\n\t\t\t<textarea\n\t\t\t\tref=\"textareaRef\"\n\t\t\t\tv-bind=\"inputProps\"\n\t\t\t\t@blur=\"onBlur\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t\t@keyup=\"onKeyup\"\n\t\t\t/>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport {\n\tcomputed,\n\tdefineComponent,\n\tref,\n\ttype TextareaHTMLAttributes,\n} from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport { useField, useForceUpdate } from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\n\nimport { KOTTI_FIELD_TEXT_AREA_SUPPORTS } from './constants'\nimport { KottiFieldTextArea } from './types'\n\nconst HEIGHT_OFFSET = 3\n\nconst resizeTextarea = ({\n\tautoSize,\n\tmaxHeight,\n\ttextarea,\n}: {\n\tautoSize: boolean\n\tmaxHeight: number | null\n\ttextarea: HTMLTextAreaElement | null\n}) => {\n\tif (\n\t\ttextarea &&\n\t\tautoSize &&\n\t\t(!maxHeight || textarea.scrollHeight <= maxHeight)\n\t) {\n\t\ttextarea.setAttribute('style', 'height: auto')\n\t\ttextarea.setAttribute(\n\t\t\t'style',\n\t\t\t`height: ${String(textarea.scrollHeight + HEIGHT_OFFSET)}px`,\n\t\t)\n\t}\n}\n\nexport default defineComponent({\n\tname: 'KtFieldTextArea',\n\tcomponents: {\n\t\tKtField,\n\t},\n\tprops: makeProps(KottiFieldTextArea.propsSchema),\n\temits: ['blur', 'keyup', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldTextArea.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value === null,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_TEXT_AREA_SUPPORTS,\n\t\t})\n\t\tconst textareaRef = ref<HTMLTextAreaElement | null>(null)\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\t\treturn {\n\t\t\tfield,\n\t\t\tinputProps: computed(\n\t\t\t\t(): TextareaHTMLAttributes & {\n\t\t\t\t\tforceUpdateKey: number\n\t\t\t\t} => ({\n\t\t\t\t\t...field.inputProps,\n\t\t\t\t\tautocomplete: props.autoComplete,\n\t\t\t\t\tclass: 'kt-field-text-area__wrapper',\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tplaceholder: props.placeholder ?? undefined,\n\t\t\t\t\trows: props.rows,\n\t\t\t\t\tvalue: field.currentValue ?? '',\n\t\t\t\t}),\n\t\t\t),\n\t\t\tonBlur: () => {\n\t\t\t\temit('blur', field.currentValue)\n\t\t\t},\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst target = event.target as HTMLTextAreaElement\n\t\t\t\tfield.setValue(target.value === '' ? null : target.value)\n\n\t\t\t\tresizeTextarea({\n\t\t\t\t\tautoSize: props.autoSize,\n\t\t\t\t\tmaxHeight: props.maxHeight,\n\t\t\t\t\ttextarea: target,\n\t\t\t\t})\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\tonKeyup: (event: KeyboardEvent) => {\n\t\t\t\temit('keyup', event)\n\t\t\t},\n\t\t\ttextareaRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-field/mixins';\n\n.kt-field-text-area {\n\t$vertical-padding: 0.6em;\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\tmin-height: calc(#{$vertical-padding} * 2 + 1rem);\n\t\tpadding: $vertical-padding 0.8em;\n\t\tmargin: 0;\n\t\tresize: vertical;\n\t\tborder: 1px solid var(--ui-02);\n\t\tborder-radius: var(--field-border-radius);\n\n\t\t@include prettify-scrollbar;\n\t}\n}\n\n.kt-field__wrapper {\n\t@include validations using ($type) {\n\t\t&:not(.kt-field__wrapper--disabled) {\n\t\t\t@if $type != empty {\n\t\t\t\t&.kt-field__wrapper--is-borderless {\n\t\t\t\t\t.kt-field-text-area__wrapper {\n\t\t\t\t\t\tbackground-color: rgb(from var(--support-#{$type}-bg) r g b / 25%);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&:not(.kt-field__wrapper--is-borderless) {\n\t\t\t\t\t.kt-field-text-area__wrapper {\n\t\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&:focus-within {\n\t\t\t\t--support-empty-light: var(--interactive-05);\n\n\t\t\t\t.kt-field-text-area__wrapper {\n\t\t\t\t\tbackground-color: unset;\n\t\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t\t\tbox-shadow: 0 0 0 1px var(--support-#{$type}-light);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-field-text-area__wrapper:not(:focus-within):hover {\n\t\t\t\t--support-empty-bg: var(--interactive-02-hover);\n\t\t\t\t--support-empty-light: var(--interactive-04);\n\n\t\t\t\tbackground-color: var(--support-#{$type}-bg);\n\t\t\t\tborder-color: var(--support-#{$type}-light);\n\t\t\t}\n\t\t}\n\t}\n\n\t&--disabled {\n\t\t.kt-field-text-area__wrapper {\n\t\t\tborder-color: var(--ui-01);\n\t\t}\n\t}\n\n\t&--is-borderless {\n\t\t.kt-field-text-area__wrapper {\n\t\t\tbackground-color: rgb(from var(--ui-02) r g b / 25%);\n\t\t\tborder-color: transparent;\n\t\t}\n\t}\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_TEXT_AREA_SUPPORTS } from './constants'\nimport KtFieldTextAreaVue from './KtFieldTextArea.vue'\nimport { KottiFieldTextArea } from './types'\n\nexport const KtFieldTextArea = attachMeta(\n\tmakeInstallable(KtFieldTextAreaVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: {\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=436%3A2104',\n\t\t},\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldTextArea',\n\t\t\tschema: KottiFieldTextArea.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_TEXT_AREA_SUPPORTS },\n)\n\nexport * from './constants'\n","import type { KottiField } from '../kotti-field/types'\n\nexport const KOTTI_FIELD_TOGGLE_SUPPORTS: KottiField.Supports = {\n\tautoComplete: false,\n\tborderless: false,\n\tclear: false,\n\tdecoration: false,\n\tplaceholder: false,\n\ttabIndex: true,\n}\n","<template>\n\t<div class=\"kt-field-toggle-box\">\n\t\t<svg\n\t\t\tfill=\"none\"\n\t\t\theight=\"16\"\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\twidth=\"16\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t>\n\t\t\t<rect\n\t\t\t\tclass=\"kt-field-toggle-box__empty\"\n\t\t\t\theight=\"15\"\n\t\t\t\trx=\"0.5\"\n\t\t\t\twidth=\"15\"\n\t\t\t\tx=\"0.5\"\n\t\t\t\ty=\"0.5\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tclass=\"kt-field-toggle-box__indeterminate\"\n\t\t\t\td=\"M15 0H1C0.45 0 0 0.45 0 1V15C0 15.55 0.45 16 1 16H15C15.55 16 16 15.55 16 15V1C16 0.45 15.55 0 15 0ZM12 9H4C3.45 9 3 8.55 3 8C3 7.45 3.45 7 4 7H12C12.55 7 13 7.45 13 8C13 8.55 12.55 9 12 9Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tclass=\"kt-field-toggle-box__check\"\n\t\t\t\td=\"M15 0H1C0.45 0 0 0.45 0 1V15C0 15.55 0.45 16 1 16H15C15.55 16 16 15.55 16 15V1C16 0.45 15.55 0 15 0ZM12.71 5.71L6.5 11.92L3.29 8.71C2.9 8.32 2.9 7.69 3.29 7.3C3.68 6.91 4.31 6.91 4.7 7.3L6.49 9.09L11.28 4.3C11.67 3.91 12.3 3.91 12.69 4.3C13.08 4.69 13.08 5.32 12.69 5.71H12.71Z\"\n\t\t\t/>\n\t\t</svg>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tname: 'ToggleBox',\n})\n</script>\n\n<style lang=\"scss\">\n@import '../../kotti-field/mixins';\n\n@mixin toggle-colors($fill-color) {\n\t.kt-field-toggle-box__empty {\n\t\tstroke: $fill-color;\n\t}\n\n\t.kt-field-toggle-box__check,\n\t.kt-field-toggle-box__indeterminate {\n\t\tfill: $fill-color;\n\t}\n}\n\n.kt-field-toggle-box {\n\tdisplay: flex;\n\tflex-shrink: 0;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 0.8rem;\n\theight: 0.8rem;\n\tbackground: var(--ui-background);\n\tborder: 1px solid transparent;\n\ttransition: border-color ease-in-out var(--transition-short);\n\n\t&__check,\n\t&__indetermiate {\n\t\ttransition: all ease-in-out var(--transition-short);\n\t}\n\n\t&__inner {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-color: transparent;\n\t\ttransition: all ease-in-out var(--transition-short);\n\t}\n\n\t&:focus {\n\t\tbackground-color: red;\n\t}\n}\n\n.kt-field-toggle-inner {\n\t&--is-off {\n\t\t.kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--text-05));\n\n\t\t\t&:hover {\n\t\t\t\t@include toggle-colors(var(--interactive-01-hover));\n\t\t\t}\n\n\t\t\t&:active {\n\t\t\t\t@include toggle-colors(var(--interactive-01-active));\n\t\t\t}\n\n\t\t\t&__check {\n\t\t\t\topacity: 0;\n\t\t\t\ttransform: scale(0);\n\t\t\t}\n\n\t\t\t&__indeterminate {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--is-on {\n\t\t.kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--interactive-03));\n\n\t\t\t&:hover {\n\t\t\t\t@include toggle-colors(var(--interactive-01-hover));\n\t\t\t}\n\n\t\t\t&:active {\n\t\t\t\t@include toggle-colors(var(--interactive-01-active));\n\t\t\t}\n\n\t\t\t&__check {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1);\n\t\t\t}\n\n\t\t\t&__indeterminate {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--is-indeterminate {\n\t\t.kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--interactive-03));\n\n\t\t\t&:hover {\n\t\t\t\t@include toggle-colors(var(--interactive-01-hover));\n\t\t\t}\n\n\t\t\t&:active {\n\t\t\t\t@include toggle-colors(var(--interactive-01-active));\n\t\t\t}\n\n\t\t\t&__check {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t&__indeterminate {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: scale(1);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.kt-field__wrapper {\n\t@include validations using ($type) {\n\t\t@if $type != empty {\n\t\t\t.kt-field-toggle-inner {\n\t\t\t\t&--is-indeterminate:not(.kt-field-toggle-inner--is-disabled) {\n\t\t\t\t\t.kt-field-toggle-box {\n\t\t\t\t\t\t@include toggle-colors(var(--support-#{$type}-light));\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\t@include toggle-colors(var(--support-#{$type}-dark));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&--is-off:not(.kt-field-toggle-inner--is-disabled),\n\t\t\t\t&--is-on:not(.kt-field-toggle-inner--is-disabled) {\n\t\t\t\t\t.kt-field-toggle-box {\n\t\t\t\t\t\t/* stylelint-disable */\n\t\t\t\t\t\t@include toggle-colors(var(--support-#{$type}));\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\t@include toggle-colors(var(--support-#{$type}-dark));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* stylelint-enable */\n\t\t\t}\n\t\t}\n\t}\n}\n\n.kt-field-toggle-inner--is-disabled {\n\t&.kt-field-toggle-inner {\n\t\t&--is-indeterminate .kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--text-05));\n\t\t}\n\n\t\t&--is-off .kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--text-05));\n\n\t\t\tbackground-color: var(--ui-01);\n\t\t}\n\n\t\t&--is-on .kt-field-toggle-box {\n\t\t\t@include toggle-colors(var(--text-05));\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-field-toggle-switch\">\n\t\t<div class=\"kt-field-toggle-switch__inner\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tname: 'ToggleSwitch',\n})\n</script>\n\n<style lang=\"scss\">\n@import '../../kotti-field/mixins';\n\n$outer-size: 20px;\n$inner-size: 16px;\n$inner-gap: ($outer-size - $inner-size) * 0.5;\n$track-width: $inner-size * 2.25;\n\n@mixin switch-colors($outer-color, $inner-color) {\n\t.kt-field-toggle-switch {\n\t\tbackground-color: $outer-color;\n\n\t\t&__inner {\n\t\t\tbackground-color: $inner-color;\n\t\t}\n\t}\n}\n\n.kt-field-toggle-switch {\n\twidth: #{$track-width + 2 * $inner-gap};\n\theight: $outer-size;\n\tpadding: $inner-gap;\n\tbackground-color: var(--ui-02);\n\tborder-radius: #{$outer-size * 0.5};\n\n\t&__inner {\n\t\twidth: $inner-size;\n\t\theight: $inner-size;\n\t\tborder-radius: $inner-size * 0.5;\n\t\ttransition: all 0.2s ease-in-out;\n\t}\n}\n\n.kt-field-toggle-inner {\n\t&--is-indeterminate {\n\t\t@include switch-colors(var(--interactive-01), var(--interactive-04));\n\n\t\t.kt-field-toggle-switch__inner {\n\t\t\twidth: $track-width;\n\t\t}\n\n\t\t&:hover {\n\t\t\t@include switch-colors(\n\t\t\t\tvar(--interactive-01-hover),\n\t\t\t\tvar(--interactive-01-hover)\n\t\t\t);\n\t\t}\n\n\t\t&:active {\n\t\t\t@include switch-colors(\n\t\t\t\tvar(--interactive-01-active),\n\t\t\t\tvar(--interactive-01-active)\n\t\t\t);\n\t\t}\n\t}\n\n\t&--is-off {\n\t\t@include switch-colors(var(--ui-02), var(--white));\n\n\t\t.kt-field-toggle-switch__inner {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t&:hover {\n\t\t\t@include switch-colors(var(--ui-03), var(--white));\n\t\t}\n\n\t\t&:active {\n\t\t\t@include switch-colors(var(--ui-04), var(--white));\n\t\t}\n\t}\n\n\t&--is-on {\n\t\t@include switch-colors(var(--interactive-03), var(--white));\n\n\t\t.kt-field-toggle-switch__inner {\n\t\t\tmargin-left: #{$track-width - $inner-size};\n\t\t}\n\n\t\t&:hover {\n\t\t\t@include switch-colors(var(--interactive-01-hover), var(--white));\n\t\t}\n\n\t\t&:active {\n\t\t\t@include switch-colors(var(--interactive-01-active), var(--white));\n\t\t}\n\t}\n}\n\n.kt-field-toggle-inner--is-disabled {\n\t&.kt-field-toggle-inner {\n\t\t&--is-indeterminate {\n\t\t\t@include switch-colors(var(--text-05), var(--ui-02));\n\t\t}\n\n\t\t&--is-off {\n\t\t\t@include switch-colors(var(--text-05), var(--ui-01));\n\t\t}\n\n\t\t&--is-on {\n\t\t\t@include switch-colors(var(--text-05), var(--ui-01));\n\t\t}\n\t}\n}\n\n.kt-field__wrapper {\n\t@include validations using ($type) {\n\t\t@if $type != empty {\n\t\t\t:not(.kt-field-toggle-inner--is-disabled) .kt-field-toggle-switch {\n\t\t\t\t@include switch-colors(\n\t\t\t\t\tvar(--support-#{$type}),\n\t\t\t\t\tvar(--support-#{$type}-dark)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<component\n\t\t:is=\"component\"\n\t\tclass=\"kt-field-toggle-inner\"\n\t\t:class=\"toggleClasses\"\n\t>\n\t\t<input\n\t\t\tv-bind=\"inputProps\"\n\t\t\t:checked=\"modelValue === true\"\n\t\t\t:tabindex=\"isDisabled ? -1 : undefined\"\n\t\t\ttype=\"checkbox\"\n\t\t\t@change=\"onInput\"\n\t\t/>\n\t\t<component :is=\"svgComponent.is\" :class=\"svgComponent.class\" />\n\t\t<slot name=\"default\" />\n\t</component>\n</template>\n\n<script lang=\"ts\">\nimport type { InputHTMLAttributes, PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { KottiFieldToggle } from '../../kotti-field-toggle/types'\nimport type { KottiField } from '../../kotti-field/types'\n\nimport ToggleBox from './ToggleBox.vue'\nimport ToggleSwitch from './ToggleSwitch.vue'\n\nexport default defineComponent({\n\tname: 'ToggleInner',\n\tcomponents: { ToggleBox, ToggleSwitch },\n\tprops: {\n\t\tcomponent: { required: true, type: String },\n\t\tinputProps: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiField.Hook.Returns<KottiFieldToggle.ModelValue>['inputProps']\n\t\t\t>,\n\t\t},\n\t\tisDisabled: { required: true, type: Boolean },\n\t\tmodelValue: { default: null, type: Boolean as PropType<boolean | null> },\n\t\ttype: { default: 'checkbox', type: String },\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tonInput: (event: Event) => {\n\t\t\t\tconst newValue = (event.target as InputHTMLAttributes).checked\n\n\t\t\t\tif (!props.isDisabled) emit('update:modelValue', newValue)\n\t\t\t},\n\t\t\tsvgComponent: computed(() => {\n\t\t\t\tconst isBox = props.type === KottiFieldToggle.Shared.Type.CHECKBOX\n\t\t\t\treturn {\n\t\t\t\t\tclass: {\n\t\t\t\t\t\t'kt-field-toggle-inner__svg': true,\n\t\t\t\t\t\t'kt-field-toggle-inner__svg--is-box': isBox,\n\t\t\t\t\t\t'kt-field-toggle-inner__svg--is-switch': !isBox,\n\t\t\t\t\t},\n\t\t\t\t\tis: isBox ? ToggleBox.name : ToggleSwitch.name,\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttoggleClasses: computed(() => ({\n\t\t\t\t'kt-field-toggle-inner--is-disabled': props.isDisabled,\n\t\t\t\t'kt-field-toggle-inner--is-indeterminate': props.modelValue === null,\n\t\t\t\t'kt-field-toggle-inner--is-off': props.modelValue === false,\n\t\t\t\t'kt-field-toggle-inner--is-on': props.modelValue === true,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n:root {\n\t--toggle-border-radius: 1px;\n}\n\n.kt-field-toggle-inner {\n\tdisplay: flex;\n\tgap: var(--unit-2);\n\talign-items: flex-start;\n\tcursor: pointer;\n\n\tinput {\n\t\tdisplay: none;\n\n\t\t&:focus + .kt-field-toggle-inner__svg--is-box {\n\t\t\toutline: 1px solid var(--primary-50);\n\t\t\toutline-offset: 3px;\n\t\t}\n\n\t\t&:focus:not(:focus-visible) + .kt-field-toggle-inner__svg--is-box {\n\t\t\toutline: none;\n\t\t}\n\n\t\t&:focus + .kt-field-toggle-inner__svg--is-switch {\n\t\t\toutline: 1px solid var(--primary-50);\n\t\t\toutline-offset: 1px;\n\t\t}\n\n\t\t&:focus:not(:focus-visible) + .kt-field-toggle-inner__svg--is-switch {\n\t\t\toutline: none;\n\t\t}\n\t}\n\n\t&--is-disabled {\n\t\tcolor: var(--text-05);\n\t\tcursor: not-allowed;\n\t}\n}\n</style>\n","<template>\n\t<KtField\n\t\tv-bind=\"{ field: fieldProps }\"\n\t\t:helpTextSlot=\"showHelpTextAsInnerSuffix ? undefined : $slots.helpText\"\n\t\tuseFieldset\n\t>\n\t\t<template #container>\n\t\t\t<div class=\"kt-field-toggle\">\n\t\t\t\t<ToggleInner\n\t\t\t\t\tcomponent=\"label\"\n\t\t\t\t\t:inputProps=\"inputProps\"\n\t\t\t\t\t:isDisabled=\"fieldProps.isDisabled\"\n\t\t\t\t\t:modelValue=\"fieldProps.currentValue\"\n\t\t\t\t\t:type=\"type\"\n\t\t\t\t\t@update:modelValue=\"onInput\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"kt-field-toggle__content\">\n\t\t\t\t\t\t<slot name=\"default\" :value=\"fieldProps.currentValue\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"showHelpTextAsInnerSuffix && labelSuffix\"\n\t\t\t\t\t\t\tclass=\"kt-field__header kt-field__header--is-suffix\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"kt-field__header__label\">\n\t\t\t\t\t\t\t\t<span :class=\"labelSuffixClasses\" v-text=\"labelSuffix\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ToggleInner>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"showHelpTextAsInnerSuffix && hasHelpText\"\n\t\t\t\t\tclass=\"kt-field__header kt-field__header--is-suffix\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"kt-field__header__help-text\"\n\t\t\t\t\t\t:class=\"iconClasses('header__help-text', ['interactive'])\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FieldHelpText\n\t\t\t\t\t\t\t:helpText=\"helpText\"\n\t\t\t\t\t\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport FieldHelpText from '../kotti-field/components/FieldHelpText.vue'\nimport { useField, useForceUpdate } from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\nimport ToggleInner from '../shared-components/toggle-inner/ToggleInner.vue'\n\nimport { KOTTI_FIELD_TOGGLE_SUPPORTS } from './constants'\nimport { KottiFieldToggle } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldToggle',\n\tcomponents: {\n\t\tFieldHelpText,\n\t\tKtField,\n\t\tToggleInner,\n\t},\n\tprops: makeProps(KottiFieldToggle.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(props, { emit, slots }) {\n\t\tconst field = useField<KottiFieldToggle.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) => value !== true,\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_TOGGLE_SUPPORTS,\n\t\t})\n\t\tconst helpText = computed(() => field.helpText)\n\t\tconst showHelpTextAsInnerSuffix = computed(\n\t\t\t() => Boolean(slots.default) && props.label === null,\n\t\t)\n\n\t\tconst validationType = computed(() => field.validation.type)\n\t\tconst showValidation = computed(\n\t\t\t() => !(field.hideValidation || validationType.value === 'empty'),\n\t\t)\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\t\treturn {\n\t\t\tfieldProps: computed(() => ({\n\t\t\t\t...field,\n\t\t\t\thelpText: showHelpTextAsInnerSuffix.value ? null : helpText.value,\n\t\t\t})),\n\t\t\thasHelpText: computed(\n\t\t\t\t() => Boolean(slots.helpText) || helpText.value !== null,\n\t\t\t),\n\t\t\ticonClasses: computed(\n\t\t\t\t() => (element: string, modifications: string[]) => [\n\t\t\t\t\t`kt-field__${element}__icon`,\n\t\t\t\t\t...modifications.map(\n\t\t\t\t\t\t(modification) => `kt-field__${element}__icon--${modification}`,\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t),\n\t\t\tinputProps: computed(() => ({\n\t\t\t\t...field.inputProps,\n\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t})),\n\t\t\tlabelSuffix: computed(() => (!field.isOptional ? '*' : null)),\n\t\t\tlabelSuffixClasses: computed(() => {\n\t\t\t\treturn {\n\t\t\t\t\t'kt-field__header__label__suffix': true,\n\t\t\t\t\t'kt-field__header__label__suffix--error':\n\t\t\t\t\t\tshowValidation.value && !field.isOptional && field.isEmpty,\n\t\t\t\t}\n\t\t\t}),\n\t\t\tonInput: (newValue: boolean | undefined) => {\n\t\t\t\tif (!field.isDisabled && !field.isLoading)\n\t\t\t\t\tfield.setValue(newValue ?? null)\n\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\tshowHelpTextAsInnerSuffix,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n.kt-field-toggle {\n\tdisplay: flex;\n\talign-items: center;\n\n\t&__content {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.kt-field-toggle-inner__svg {\n\t\tflex-shrink: 0;\n\t}\n\n\t.kt-field-toggle-inner__svg--is-box {\n\t\t// align checkbox with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-8px) Put it up half the height of the checkbox height (16px)\n\t\ttransform: translateY(calc(0.75em - 8px));\n\t}\n\n\t.kt-field-toggle-inner__svg--is-switch {\n\t\t// align switch with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-10px) Put it up half the height of the switch height (20px)\n\t\ttransform: translateY(calc(0.75em - 10px));\n\t}\n}\n</style>\n","<template>\n\t<KtField v-bind=\"{ field }\" :helpTextSlot=\"$slots.helpText\" useFieldset>\n\t\t<template #container>\n\t\t\t<div :class=\"wrapperClasses\">\n\t\t\t\t<div v-for=\"(option, index) of optionsWithChecked\" :key=\"option.key\">\n\t\t\t\t\t<div class=\"kt-field-toggle-group__header\">\n\t\t\t\t\t\t<ToggleInner\n\t\t\t\t\t\t\tcomponent=\"label\"\n\t\t\t\t\t\t\t:data-test=\"getOptionDataTest(option)\"\n\t\t\t\t\t\t\t:inputProps=\"inputProps(index)\"\n\t\t\t\t\t\t\t:isDisabled=\"field.isDisabled || Boolean(option.isDisabled)\"\n\t\t\t\t\t\t\t:modelValue=\"option.value\"\n\t\t\t\t\t\t\t:type=\"type\"\n\t\t\t\t\t\t\t@update:modelValue=\"onUpdateModelValue(option.key, $event)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<slot name=\"header\" :option=\"option\">\n\t\t\t\t\t\t\t\t<div v-text=\"option.label\" />\n\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t</ToggleInner>\n\t\t\t\t\t\t<FieldHelpText\n\t\t\t\t\t\t\tv-if=\"option.tooltip\"\n\t\t\t\t\t\t\tclass=\"kt-field-toggle-group__header-tooltip\"\n\t\t\t\t\t\t\t:helpText=\"option.tooltip\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<slot name=\"headerSide\" :option=\"option\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"kt-field-toggle-group__content\">\n\t\t\t\t\t\t<slot name=\"content\" :option=\"option\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtField>\n</template>\n\n<script lang=\"ts\">\nimport omit from 'lodash/omit.js'\nimport { computed, defineComponent } from 'vue'\n\nimport { KtField } from '../kotti-field'\nimport FieldHelpText from '../kotti-field/components/FieldHelpText.vue'\nimport { useField, useForceUpdate } from '../kotti-field/hooks'\nimport { makeProps } from '../make-props'\nimport ToggleInner from '../shared-components/toggle-inner/ToggleInner.vue'\n\nimport { KOTTI_FIELD_TOGGLE_SUPPORTS } from './constants'\nimport { KottiFieldToggleGroup } from './types'\n\nexport default defineComponent({\n\tname: 'KtFieldToggleGroup',\n\tcomponents: {\n\t\tFieldHelpText,\n\t\tKtField,\n\t\tToggleInner,\n\t},\n\tprops: makeProps(KottiFieldToggleGroup.propsSchema),\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst field = useField<KottiFieldToggleGroup.ModelValue>({\n\t\t\temit,\n\t\t\tisEmpty: (value) =>\n\t\t\t\tvalue !== null &&\n\t\t\t\ttypeof value === 'object' &&\n\t\t\t\tObject.values(value).every((value) => value !== true),\n\t\t\tprops,\n\t\t\tsupports: KOTTI_FIELD_TOGGLE_SUPPORTS,\n\t\t})\n\n\t\tconst { forceUpdate, forceUpdateKey } = useForceUpdate()\n\n\t\treturn {\n\t\t\tfield,\n\t\t\tgetOptionDataTest: (option: KottiFieldToggleGroup.Entry) => {\n\t\t\t\tif (option.dataTest) return option.dataTest\n\n\t\t\t\tif (Object.keys(field.inputProps).includes('data-test')) {\n\t\t\t\t\treturn [field.inputProps['data-test'], option.key].join('.')\n\t\t\t\t}\n\t\t\t},\n\t\t\tinputProps: computed(() => (index: number) => {\n\t\t\t\treturn {\n\t\t\t\t\t...omit(field.inputProps, 'id'),\n\t\t\t\t\tforceUpdateKey: forceUpdateKey.value,\n\t\t\t\t\tid: `${field.inputProps.id}-${String(index)}`,\n\t\t\t\t}\n\t\t\t}),\n\t\t\tonUpdateModelValue: (\n\t\t\t\tkey: KottiFieldToggleGroup.Entry['key'],\n\t\t\t\tnewValue: boolean | undefined,\n\t\t\t) => {\n\t\t\t\tfield.setValue({\n\t\t\t\t\t...field.currentValue,\n\t\t\t\t\t[key]: newValue ?? null,\n\t\t\t\t})\n\t\t\t\tforceUpdate()\n\t\t\t},\n\t\t\toptionsWithChecked: computed(() =>\n\t\t\t\tprops.options.map((option) => ({\n\t\t\t\t\t...option,\n\t\t\t\t\tvalue: field.currentValue ? field.currentValue[option.key] : null,\n\t\t\t\t})),\n\t\t\t),\n\t\t\twrapperClasses: computed(() => ({\n\t\t\t\t'kt-field-toggle-group': true,\n\t\t\t\t'kt-field-toggle-group--inline': props.isInline,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n.kt-field-toggle-group {\n\tdisplay: flex;\n\tflex: 1;\n\n\t&--inline {\n\t\tflex-direction: row;\n\n\t\t> *:not(:first-child) {\n\t\t\tmargin-left: 1rem;\n\t\t}\n\t}\n\n\t&:not(&--inline) {\n\t\tflex-direction: column;\n\n\t\t> *:not(:first-child) {\n\t\t\tmargin-top: 0.4rem;\n\t\t}\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\n\t\t> *:not(:last-child) {\n\t\t\tmargin-right: 0.3rem;\n\t\t}\n\t}\n\n\t&__header-tooltip {\n\t\t// align tooltip icon with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-6px) Put it up half the height of the roolrip height (12px)\n\t\ttransform: translateY(calc(0.75em - 6px));\n\t}\n\n\t&__content {\n\t\tfont-size: var(--font-size-small);\n\t}\n\n\t.kt-field-toggle-inner__svg {\n\t\tflex-shrink: 0;\n\t}\n\n\t.kt-field-toggle-inner__svg--is-box {\n\t\t// align checkbox with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-8px) Put it up half the height of the checkbox height (16px)\n\t\ttransform: translateY(calc(0.75em - 8px));\n\t}\n\n\t.kt-field-toggle-inner__svg--is-switch {\n\t\t// align switch with the center of the first line of the label\n\t\t// (assumption: font-size comes from common parent element)\n\t\t//  > starting point is upper end of the container (flex-start)\n\t\t//  > (+0.75em) Put upper edge of element into center (since line-height = 1.5 * font-size)\n\t\t//  > (-10px) Put it up half the height of the switch height (20px)\n\t\ttransform: translateY(calc(0.75em - 10px));\n\t}\n}\n</style>\n","import type { z } from 'zod'\n\nimport { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport type { Kotti } from '../types'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KOTTI_FIELD_TOGGLE_SUPPORTS } from './constants'\nimport KtFieldToggleVue from './KtFieldToggle.vue'\nimport KtFieldToggleGroupVue from './KtFieldToggleGroup.vue'\nimport { KottiFieldToggle, KottiFieldToggleGroup } from './types'\n\nconst componentFolder = 'kotti-field-toggle'\n\nconst designs: Kotti.Meta<z.ZodTypeAny>['designs'] = [\n\t{\n\t\ttitle: 'type=switch',\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=436%3A1847',\n\t},\n\t{\n\t\ttitle: 'type=checkbox',\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=435%3A3497',\n\t},\n]\n\nexport const KtFieldToggle = attachMeta(\n\tmakeInstallable(KtFieldToggleVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns,\n\t\tslots: {\n\t\t\t...FIELD_META_BASE_SLOTS,\n\t\t\tdefault: {\n\t\t\t\tdescription: 'Shown next to toggle sausage',\n\t\t\t\tscope: null,\n\t\t\t},\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldToggle',\n\t\t\tschema: KottiFieldToggle.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_TOGGLE_SUPPORTS },\n)\n\nexport const KtFieldToggleGroup = attachMeta(\n\tmakeInstallable(KtFieldToggleGroupVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tcomponentFolder,\n\t\tdeprecated: null,\n\t\tdesigns,\n\t\tslots: FIELD_META_BASE_SLOTS,\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FieldToggleGroup',\n\t\t\tschema: KottiFieldToggleGroup.propsSchema,\n\t\t},\n\t},\n\t{ supports: KOTTI_FIELD_TOGGLE_SUPPORTS },\n)\n\nexport * from './constants'\n","<template>\n\t<div class=\"progress-bar\">\n\t\t<div class=\"progress-bar__background\">\n\t\t\t<div :class=\"fillClasses\" :style=\"{ width: progressCssWidth }\" />\n\t\t</div>\n\t\t<div class=\"progress-bar__label-wrapper\">\n\t\t\t<!-- HACK: this invisible span calculates the width for \"99%\" -->\n\t\t\t<span\n\t\t\t\tclass=\"progress-bar__label\"\n\t\t\t\tstyle=\"user-select: none; opacity: 0\"\n\t\t\t\tv-text=\"'99%'\"\n\t\t\t/>\n\t\t\t<span class=\"progress-bar__label\" v-text=\"progressPercent\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { ONE_HUNDRED_PERCENT } from '../../constants'\nimport { makeProps } from '../../make-props'\nimport { KottiFieldFileUpload } from '../types'\n\nexport default defineComponent({\n\tname: 'ProgressBar',\n\tprops: makeProps(KottiFieldFileUpload.ProgressBar.schema),\n\tsetup(props) {\n\t\treturn {\n\t\t\tfillClasses: computed(() => ({\n\t\t\t\t'progress-bar__fill': true,\n\t\t\t\t'progress-bar__fill--is-error': props.isError,\n\t\t\t})),\n\t\t\tprogressCssWidth: computed(\n\t\t\t\t() => `${String(props.progress * ONE_HUNDRED_PERCENT)}%`,\n\t\t\t),\n\t\t\tprogressPercent: computed(\n\t\t\t\t() => `${String(Math.floor(props.progress * ONE_HUNDRED_PERCENT))}%`,\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.progress-bar {\n\tdisplay: flex;\n\tgap: var(--unit-2);\n\talign-items: center;\n\theight: var(--unit-5);\n\n\t&__background {\n\t\twidth: 100%;\n\t\theight: var(--unit-2);\n\t\tbackground-color: var(--ui-02);\n\t\tborder-radius: var(--unit-1);\n\t}\n\n\t&__fill {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t\tbackground-color: var(--interactive-03);\n\t\tborder-radius: var(--unit-1);\n\t\ttransition: width 50ms ease-in-out;\n\n\t\t&--is-error {\n\t\t\tbackground-color: var(--support-error);\n\t\t}\n\t}\n\n\t&__label-wrapper {\n\t\tdisplay: grid;\n\t}\n\n\t&__label {\n\t\tgrid-row: 1;\n\t\tgrid-column: 1;\n\t\tfont-size: 16px;\n\t\tfont-variant-numeric: tabular-nums;\n\t\tline-height: 20px;\n\t\tcolor: var(--text-01);\n\t\ttext-align: end;\n\t}\n}\n</style>\n","<template>\n\t<ItemLayout :isInternal=\"fileInfo.isInternal\" :name=\"fileInfo.name\">\n\t\t<template #description>\n\t\t\t<i v-if=\"isError\" class=\"yoco\" v-text=\"Yoco.Icon.CIRCLE_ATTENTION\" />\n\t\t\t<div v-else-if=\"isLoading\" class=\"description-spinner loading inline\" />\n\t\t\t{{ description }}\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionButton\n\t\t\t\tv-if=\"showViewOrDownloadAction\"\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest\n\t\t\t\t\t\t? `${dataTest}.${fileInfo.id}.viewOrDownloadButton`\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"viewOrDownloadActionIcon\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickViewOrDownload\"\n\t\t\t/>\n\t\t\t<ActionButton\n\t\t\t\tv-if=\"showRetryAction\"\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest ? `${dataTest}.${fileInfo.id}.retryButton` : undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"Yoco.Icon.RELOAD\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickRetry\"\n\t\t\t/>\n\t\t\t<ActionButton\n\t\t\t\t:data-test=\"\n\t\t\t\t\tdataTest\n\t\t\t\t\t\t? `${dataTest}.${fileInfo.id}.cancelOrDeleteButton`\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t\t:icon=\"cancelOrDeleteActionIcon\"\n\t\t\t\t:isDisabled=\"isDisabled\"\n\t\t\t\t@click=\"onClickCancelOrDelete\"\n\t\t\t/>\n\t\t</template>\n\t\t<template #footer>\n\t\t\t<ProgressBar\n\t\t\t\tv-if=\"showProgressBar\"\n\t\t\t\t:key=\"progressBarForceRenderKey\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:progress=\"progress\"\n\t\t\t/>\n\t\t</template>\n\t</ItemLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, type PropType, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport ActionButton from '../../kotti-field-file-upload/components/ActionButton.vue'\nimport ItemLayout from '../../kotti-field-file-upload/components/ItemLayout.vue'\nimport ProgressBar from '../../kotti-field-file-upload/components/ProgressBar.vue'\nimport { formatFileSize } from '../../kotti-field-file-upload/formatters'\nimport { validateFile } from '../../kotti-field-file-upload/validators'\nimport { KottiFileUpload } from '../../kotti-file-upload/types'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\n\nexport default defineComponent({\n\tname: 'UploadedFileItem',\n\tcomponents: {\n\t\tActionButton,\n\t\tItemLayout,\n\t\tProgressBar,\n\t},\n\tprops: {\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\textensions: {\n\t\t\tdefault: () => [],\n\t\t\ttype: Array as PropType<Array<string>>,\n\t\t},\n\t\tfileInfo: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<KottiFileUpload.FileInfo>,\n\t\t},\n\t\tisDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tmaxFileSize: {\n\t\t\tdefault: Number.MAX_SAFE_INTEGER,\n\t\t\ttype: Number,\n\t\t},\n\t},\n\temits: ['cancelUpload', 'deleteFile', 'restartUpload'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFieldFileUpload')\n\n\t\tconst progressBarForceRenderKey = ref<number>(0)\n\n\t\tconst status = computed<KottiFileUpload.Status>(() => {\n\t\t\tconst { status } = props.fileInfo\n\t\t\tif (typeof status === 'object') {\n\t\t\t\tif (status.type === 'error') return KottiFileUpload.Status.ERROR\n\n\t\t\t\treturn KottiFileUpload.Status.UPLOADED\n\t\t\t}\n\n\t\t\treturn status\n\t\t})\n\n\t\tconst validation = computed<KottiFileUpload.Validation>(() => {\n\t\t\tif (props.fileInfo.validation) return props.fileInfo.validation\n\n\t\t\tif (\n\t\t\t\tprops.fileInfo.status === KottiFileUpload.Status.NOT_STARTED &&\n\t\t\t\tprops.fileInfo.size !== undefined\n\t\t\t)\n\t\t\t\treturn validateFile({\n\t\t\t\t\textensions: props.extensions,\n\t\t\t\t\tfileName: props.fileInfo.name,\n\t\t\t\t\tfileSize: props.fileInfo.size,\n\t\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t\t})\n\n\t\t\treturn KottiFileUpload.Validation.SUCCESS\n\t\t})\n\t\tconst statusText = computed(() => {\n\t\t\tconst { status } = props.fileInfo\n\t\t\tif (typeof status === 'object') return status.label\n\n\t\t\treturn validation.value === KottiFileUpload.Validation.SUCCESS\n\t\t\t\t? translations.value.statusMsg[status as KottiFileUpload.Status]\n\t\t\t\t: translations.value.validationMsg[validation.value]\n\t\t})\n\n\t\tconst isDeletable = computed(\n\t\t\t() =>\n\t\t\t\tvalidation.value !== KottiFileUpload.Validation.SUCCESS ||\n\t\t\t\t[\n\t\t\t\t\tKottiFileUpload.Status.CANCELED,\n\t\t\t\t\tKottiFileUpload.Status.ERROR,\n\t\t\t\t\tKottiFileUpload.Status.INVALID,\n\t\t\t\t\tKottiFileUpload.Status.UPLOADED,\n\t\t\t\t\tKottiFileUpload.Status.UPLOADED_WITH_ERROR,\n\t\t\t\t].includes(status.value),\n\t\t)\n\n\t\treturn {\n\t\t\tcancelOrDeleteActionIcon: computed<Yoco.Icon>(() =>\n\t\t\t\tisDeletable.value ? Yoco.Icon.TRASH : Yoco.Icon.CLOSE,\n\t\t\t),\n\t\t\tdescription: computed(() => {\n\t\t\t\tconst { size } = props.fileInfo\n\t\t\t\tif (size === undefined) return statusText.value\n\n\t\t\t\treturn [formatFileSize(size), statusText.value].join(' - ')\n\t\t\t}),\n\t\t\tisError: computed(() => {\n\t\t\t\tconst { status } = props.fileInfo\n\t\t\t\tif (typeof status === 'string')\n\t\t\t\t\treturn [\n\t\t\t\t\t\tKottiFileUpload.Status.ERROR,\n\t\t\t\t\t\tKottiFileUpload.Status.INVALID,\n\t\t\t\t\t\tKottiFileUpload.Status.UPLOADED_WITH_ERROR,\n\t\t\t\t\t].includes(status)\n\n\t\t\t\treturn status.type === 'error'\n\t\t\t}),\n\t\t\tisLoading: computed(() => {\n\t\t\t\tconst { status } = props.fileInfo\n\t\t\t\treturn typeof status === 'object' && status.type === 'loading'\n\t\t\t}),\n\t\t\tonClickCancelOrDelete: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\tconst eventName = isDeletable.value ? 'deleteFile' : 'cancelUpload'\n\n\t\t\t\temit(eventName, props.fileInfo.id)\n\t\t\t},\n\t\t\tonClickRetry: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\t// Force re-render Progress Bar to get rid of previous progress value\n\t\t\t\tprogressBarForceRenderKey.value++\n\t\t\t\temit('restartUpload', props.fileInfo.id)\n\t\t\t},\n\t\t\tonClickViewOrDownload: () => {\n\t\t\t\tif (props.isDisabled) return\n\n\t\t\t\twindow.open(\n\t\t\t\t\tprops.fileInfo.viewUrl ?? props.fileInfo.downloadUrl,\n\t\t\t\t\t'_blank',\n\t\t\t\t)\n\t\t\t},\n\t\t\tprogress: computed(() => props.fileInfo.progress ?? 0),\n\t\t\tprogressBarForceRenderKey,\n\t\t\tshowProgressBar: computed(() => {\n\t\t\t\tconst { status: s } = props.fileInfo\n\t\t\t\tif (typeof s === 'object' && s.showProgress !== undefined)\n\t\t\t\t\treturn s.showProgress\n\n\t\t\t\treturn (\n\t\t\t\t\tprops.fileInfo.validation === KottiFileUpload.Validation.SUCCESS &&\n\t\t\t\t\t(status.value === KottiFileUpload.Status.ERROR ||\n\t\t\t\t\t\tstatus.value === KottiFileUpload.Status.UPLOADING)\n\t\t\t\t)\n\t\t\t}),\n\t\t\tshowRetryAction: computed(\n\t\t\t\t() =>\n\t\t\t\t\tprops.fileInfo.validation === KottiFileUpload.Validation.SUCCESS &&\n\t\t\t\t\t(status.value === KottiFileUpload.Status.CANCELED ||\n\t\t\t\t\t\tstatus.value === KottiFileUpload.Status.ERROR),\n\t\t\t),\n\t\t\tshowViewOrDownloadAction: computed(\n\t\t\t\t() =>\n\t\t\t\t\tstatus.value === KottiFileUpload.Status.UPLOADED &&\n\t\t\t\t\t(Boolean(props.fileInfo.viewUrl) ||\n\t\t\t\t\t\tBoolean(props.fileInfo.downloadUrl)),\n\t\t\t),\n\t\t\tviewOrDownloadActionIcon: computed<Yoco.Icon>(() =>\n\t\t\t\tprops.fileInfo.viewUrl ? Yoco.Icon.EYE : Yoco.Icon.DOWNLOAD,\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.description-spinner {\n\tmargin: 0 var(--unit-2) 0 0;\n\ttransform: scale(0.8);\n}\n</style>\n","import { nanoid } from 'nanoid'\n\nimport { validateFile } from '../kotti-field-file-upload/validators'\n\nimport { KottiFileUpload } from './types'\n\nexport const buildFileInfo = ({\n\textensions,\n\tfile,\n\tmaxFileSize,\n}: {\n\textensions: KottiFileUpload.PropsInternal['extensions']\n\tfile: File\n\tmaxFileSize: KottiFileUpload.PropsInternal['maxFileSize']\n}): Pick<KottiFileUpload.FileInfo, 'id' | 'name' | 'size' | 'status'> & {\n\tvalidation: KottiFileUpload.Validation\n} => {\n\tconst validation = validateFile({\n\t\textensions,\n\t\tfileName: file.name,\n\t\tfileSize: file.size,\n\t\tmaxFileSize,\n\t})\n\n\treturn {\n\t\tid: nanoid(),\n\t\tname: file.name,\n\t\tsize: file.size,\n\t\tstatus:\n\t\t\tvalidation === KottiFileUpload.Validation.SUCCESS\n\t\t\t\t? KottiFileUpload.Status.NOT_STARTED\n\t\t\t\t: KottiFileUpload.Status.ERROR,\n\t\tvalidation,\n\t}\n}\n","<template>\n\t<div class=\"kt-file-upload\">\n\t\t<div v-if=\"hasLabel || hasHelpText\" class=\"kt-file-upload__header\">\n\t\t\t<label\n\t\t\t\tv-if=\"hasLabel\"\n\t\t\t\tclass=\"kt-file-upload__label\"\n\t\t\t\t:for=\"inputId\"\n\t\t\t\tv-text=\"label\"\n\t\t\t/>\n\t\t\t<span v-if=\"hasHelpText\" class=\"kt-field__help-text\">\n\t\t\t\t<FieldHelpText :helpText=\"helpText\" :helpTextSlot=\"$slots.helpText\" />\n\t\t\t</span>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"helpDescription\"\n\t\t\tclass=\"kt-file-upload__help-description\"\n\t\t\tv-text=\"helpDescription\"\n\t\t/>\n\t\t<div class=\"kt-file-upload__content\">\n\t\t\t<DropArea\n\t\t\t\tv-if=\"showDropArea\"\n\t\t\t\tv-bind=\"{\n\t\t\t\t\t...sharedProps,\n\t\t\t\t\tallowMultiple,\n\t\t\t\t\tcollapseExtensionsAfter,\n\t\t\t\t\texternalUrl,\n\t\t\t\t\ticon,\n\t\t\t\t\tinputId,\n\t\t\t\t\ttabIndex,\n\t\t\t\t}\"\n\t\t\t\t@addFiles=\"onAddFiles\"\n\t\t\t>\n\t\t\t\t<template #footer>\n\t\t\t\t\t<TakePhoto\n\t\t\t\t\t\tv-if=\"allowPhotos\"\n\t\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t@addFiles=\"onAddFiles\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</DropArea>\n\t\t\t<div v-if=\"uploadedFilesList.length > 0\">\n\t\t\t\t<UploadedFileItem\n\t\t\t\t\tv-for=\"fileInfo in uploadedFilesList\"\n\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t}\"\n\t\t\t\t\t:key=\"fileInfo.id\"\n\t\t\t\t\t@cancelUpload=\"(fileId) => $emit('cancelUpload', fileId)\"\n\t\t\t\t\t@deleteFile=\"onDeleteFile\"\n\t\t\t\t\t@restartUpload=\"(fileId) => $emit('restartUpload', fileId)\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div v-if=\"preUploadedFilesList.length > 0\">\n\t\t\t\t<PreUploadedFileItem\n\t\t\t\t\tv-for=\"fileInfo in preUploadedFilesList\"\n\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\t...sharedProps,\n\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t}\"\n\t\t\t\t\t:key=\"fileInfo.id\"\n\t\t\t\t\t@remove=\"onDeleteFile\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from 'vue'\n\nimport DropArea from '../kotti-field-file-upload/components/DropArea.vue'\nimport PreUploadedFileItem from '../kotti-field-file-upload/components/PreUploadedFileItem.vue'\nimport TakePhoto from '../kotti-field-file-upload/components/TakePhoto/TakePhoto.vue'\nimport type { Shared } from '../kotti-field-file-upload/types'\nimport FieldHelpText from '../kotti-field/components/FieldHelpText.vue'\nimport { makeProps } from '../make-props'\n\nimport UploadedFileItem from './components/UploadedFileItem.vue'\nimport { KottiFileUpload } from './types'\nimport { buildFileInfo } from './utilities'\n\nlet ktFileUploadId = 1\n\nexport default defineComponent({\n\tname: 'KtFileUpload',\n\tcomponents: {\n\t\tDropArea,\n\t\tFieldHelpText,\n\t\tPreUploadedFileItem,\n\t\tTakePhoto,\n\t\tUploadedFileItem,\n\t},\n\tprops: makeProps(KottiFileUpload.propsSchema),\n\temits: ['addFiles', 'cancelUpload', 'deleteFile', 'restartUpload'],\n\tsetup(props, { emit, slots }) {\n\t\tconst interceptedFiles = ref<Array<KottiFileUpload.InterceptedFile>>([])\n\t\tconst preUploadedFileIds = ref<Set<number | string>>(new Set())\n\n\t\tconst uploadedFilesList = computed(() => [\n\t\t\t...interceptedFiles.value.map((file) => ({\n\t\t\t\tid: file.id,\n\t\t\t\tname: file.file.name,\n\t\t\t\tsize: file.file.size,\n\t\t\t\tstatus: file.status,\n\t\t\t\tvalidation: file.validation,\n\t\t\t})),\n\t\t\t...props.state.filter((file) => !preUploadedFileIds.value.has(file.id)),\n\t\t])\n\n\t\tonMounted(() => {\n\t\t\tfor (const file of props.state) {\n\t\t\t\tif (\n\t\t\t\t\t!preUploadedFileIds.value.has(file.id) &&\n\t\t\t\t\t(file.status === KottiFileUpload.Status.UPLOADED ||\n\t\t\t\t\t\tfile.status === KottiFileUpload.Status.UPLOADED_WITH_ERROR)\n\t\t\t\t) {\n\t\t\t\t\tpreUploadedFileIds.value.add(file.id)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\thasHelpText: computed(() => props.helpText !== null || slots.helpText),\n\t\t\thasLabel: computed(() => props.label !== null),\n\t\t\tinputId: computed(() => `kt-file-upload-${ktFileUploadId++}`),\n\t\t\tonAddFiles: (value: Shared.Events.AddFiles) => {\n\t\t\t\tconst payload: KottiFileUpload.Events.AddFiles = []\n\t\t\t\tfor (const file of value) {\n\t\t\t\t\tconst fileInfo = buildFileInfo({\n\t\t\t\t\t\textensions: props.extensions,\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t\t\t})\n\t\t\t\t\tif (fileInfo.validation === KottiFileUpload.Validation.SUCCESS)\n\t\t\t\t\t\tpayload.push({ file, fileInfo })\n\t\t\t\t\telse\n\t\t\t\t\t\tinterceptedFiles.value = [\n\t\t\t\t\t\t\t...interceptedFiles.value,\n\t\t\t\t\t\t\t{ ...fileInfo, file },\n\t\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\temit('addFiles', payload)\n\t\t\t},\n\t\t\tonDeleteFile: (fileId: number | string) => {\n\t\t\t\tconst interceptedFileIndex = interceptedFiles.value.findIndex(\n\t\t\t\t\t(file) => file.id === fileId,\n\t\t\t\t)\n\t\t\t\tif (interceptedFileIndex >= 0) {\n\t\t\t\t\tinterceptedFiles.value = [\n\t\t\t\t\t\t...interceptedFiles.value.slice(0, interceptedFileIndex),\n\t\t\t\t\t\t...interceptedFiles.value.slice(\n\t\t\t\t\t\t\tinterceptedFileIndex + 1,\n\t\t\t\t\t\t\tinterceptedFiles.value.length,\n\t\t\t\t\t\t),\n\t\t\t\t\t]\n\t\t\t\t} else {\n\t\t\t\t\temit('deleteFile', fileId)\n\t\t\t\t}\n\t\t\t},\n\t\t\tpreUploadedFilesList: computed(() =>\n\t\t\t\tprops.state\n\t\t\t\t\t.filter((file) => preUploadedFileIds.value.has(file.id))\n\t\t\t\t\t.map((file) => ({ ...file, validation: 'SUCCESS' })),\n\t\t\t),\n\t\t\tsharedProps: computed(() => ({\n\t\t\t\tdataTest: props.dataTest,\n\t\t\t\textensions: props.extensions,\n\t\t\t\tisDisabled: props.isDisabled,\n\t\t\t\tisLoading: props.isLoading,\n\t\t\t\tmaxFileSize: props.maxFileSize,\n\t\t\t})),\n\t\t\tshowDropArea: computed(\n\t\t\t\t() =>\n\t\t\t\t\t!props.hideDropArea &&\n\t\t\t\t\t(props.allowMultiple || props.state.length === 0),\n\t\t\t),\n\t\t\tuploadedFilesList,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-file-upload {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--unit-2);\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tfont-size: 0.9em;\n\n\t\t> :not(:first-child) {\n\t\t\tmargin-left: 0.2rem;\n\t\t}\n\t}\n\n\t&__help-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcursor: pointer;\n\n\t\t.yoco {\n\t\t\tfont-size: 1.4em;\n\t\t}\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tfont-weight: 500;\n\t\tcolor: var(--text-02);\n\t}\n\n\t&__help-description {\n\t\tcolor: var(--text-03);\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--unit-4);\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFileUploadVue from './KtFileUpload.vue'\nimport { KottiFileUpload } from './types'\n\nexport const KtFileUpload: ReturnType<typeof attachMeta> = attachMeta(\n\tmakeInstallable(KtFileUploadVue),\n\t{\n\t\taddedVersion: '0.0.1',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {\n\t\t\thelpText: { description: 'custom helpText support (HTML)', scope: null },\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FileUpload',\n\t\t\tschema: KottiFileUpload.propsSchema,\n\t\t},\n\t},\n)\n","<template>\n\t<div :class=\"mainClasses\" :data-test=\"dataTest\" @click=\"handleClick\">\n\t\t<i v-if=\"isLoading\" class=\"kt-circle-loading\" />\n\t\t<i v-else-if=\"icon !== null\" class=\"yoco\" v-text=\"icon\" />\n\t\t<span v-if=\"label !== null\" v-text=\"label\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport type { Yoco } from '@3yourmind/yoco'\nimport { isYocoIcon } from '@3yourmind/yoco'\n\nimport { KottiFilters } from '../types'\n\nexport default defineComponent({\n\tname: 'ButtonLink',\n\tprops: {\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\ticon: {\n\t\t\tdefault: null,\n\t\t\ttype: String as PropType<Yoco.Icon>,\n\t\t\tvalidator: isYocoIcon,\n\t\t},\n\t\tisDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tlabel: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\ttype: {\n\t\t\tdefault: KottiFilters.ButtonLinkType.PRIMARY,\n\t\t\ttype: String as PropType<KottiFilters.ButtonLinkType>,\n\t\t\tvalidator: (value: unknown): value is KottiFilters.ButtonLinkType => {\n\t\t\t\treturn Object.values(KottiFilters.ButtonLinkType).includes(\n\t\t\t\t\tvalue as KottiFilters.ButtonLinkType,\n\t\t\t\t)\n\t\t\t},\n\t\t},\n\t},\n\temits: ['click'],\n\tsetup(props, { emit }) {\n\t\tconst mainClasses = computed(() => ({\n\t\t\t[`kt-button-link--type-${props.type}`]: !props.isDisabled,\n\t\t\t'kt-button-link': true,\n\t\t\t'kt-button-link--is-disabled': props.isDisabled,\n\t\t}))\n\n\t\tconst handleClick = (event: Event) => {\n\t\t\tif (props.isDisabled || props.isLoading) return\n\t\t\temit('click', event)\n\t\t}\n\n\t\treturn {\n\t\t\thandleClick,\n\t\t\tmainClasses,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-style/_variables';\n\n.kt-button-link {\n\tdisplay: flex;\n\tfont-weight: 500;\n\tcursor: pointer;\n\n\t&--is-disabled {\n\t\tcolor: var(--text-05);\n\t\tpointer-events: none;\n\t\tcursor: default;\n\t}\n\n\t&--type {\n\t\t&-danger {\n\t\t\tcolor: var(--text-02);\n\n\t\t\t&:hover {\n\t\t\t\tcolor: var(--hover-danger);\n\t\t\t}\n\t\t}\n\n\t\t&-primary {\n\t\t\tcolor: var(--interactive-01);\n\n\t\t\t&:hover {\n\t\t\t\tcolor: var(--interactive-01-hover);\n\t\t\t}\n\t\t}\n\t}\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-filter__actions\">\n\t\t<ButtonLink\n\t\t\t:dataTest=\"dataTest ? `${dataTest}.addFilter` : undefined\"\n\t\t\t:isDisabled=\"isAddDisabled\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:label=\"translations.addFilterLabel\"\n\t\t\t@click=\"handleAdd\"\n\t\t/>\n\t\t<ButtonLink\n\t\t\t:dataTest=\"dataTest ? `${dataTest}.clearAll` : undefined\"\n\t\t\t:isDisabled=\"isClearAllDisabled\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:label=\"translations.clearAllLabel\"\n\t\t\t:type=\"KottiFilters.ButtonLinkType.DANGER\"\n\t\t\t@click=\"handleClearAll\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { KottiFilters } from '../types'\n\nimport ButtonLink from './ButtonLink.vue'\n\nexport default defineComponent({\n\tname: 'FilterActions',\n\tcomponents: {\n\t\tButtonLink,\n\t},\n\tprops: {\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\tisAddDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisClearAllDisabled: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\temits: ['clearAll', 'startAddingFilter'],\n\tsetup(_, { emit }) {\n\t\tconst handleAdd = () => {\n\t\t\temit('startAddingFilter')\n\t\t}\n\t\tconst handleClearAll = () => {\n\t\t\temit('clearAll')\n\t\t}\n\t\treturn {\n\t\t\thandleAdd,\n\t\t\thandleClearAll,\n\t\t\tKottiFilters,\n\t\t\ttranslations: useTranslationNamespace('KtFilters'),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-filter__actions {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmargin-top: var(--unit-1);\n}\n</style>\n","import type { KottiFieldSingleSelect } from '../kotti-field-select/types'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\n\nimport { KottiFilters } from './types'\n\nexport const getFilterEmptyValue = (\n\ttype: KottiFilters.Column.Any['type'],\n): [] | [null, null] | null => {\n\tswitch (type) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\tcase KottiFilters.FilterType.SEARCH:\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn null\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn [null, null]\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn []\n\t\tdefault:\n\t\t\tthrow new Error('Invalid Filter Type')\n\t}\n}\n\nconst getFilterInitialOperation = (\n\toperations: KottiFilters.Operation.Any[],\n\tdefaultOperation: KottiFilters.Operation.Any,\n): KottiFilters.Operation.Any => {\n\tif (!Array.isArray(operations) || operations.length === 0)\n\t\tthrow new Error('Invalid Filter Operations')\n\n\treturn operations.includes(defaultOperation)\n\t\t? defaultOperation\n\t\t: (operations[0] as KottiFilters.Operation.Any)\n}\n\nexport const getFilterInitialState = (\n\tcolumnKey: KottiFilters.Column.Any['key'],\n\tcolumns: KottiFilters.Column.Any[],\n): KottiFilters.InternalFilter => {\n\tconst column = columns.find((columnItem) => columnItem.key === columnKey)\n\tif (!column) {\n\t\tthrow new Error('Invalid Filter Type: column for initial state not found')\n\t}\n\n\tswitch (column.type) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.Boolean.EQUAL,\n\t\t\t\t),\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.Currency.EQUAL,\n\t\t\t\t),\n\t\t\t\tvalue: null,\n\t\t\t}\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.DateRange.IN_RANGE,\n\t\t\t\t),\n\t\t\t\tvalue: [null, null],\n\t\t\t}\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.Float.EQUAL,\n\t\t\t\t),\n\t\t\t\tvalue: null,\n\t\t\t}\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.Integer.EQUAL,\n\t\t\t\t),\n\t\t\t\tvalue: null,\n\t\t\t}\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.MultiEnum.ONE_OF,\n\t\t\t\t),\n\t\t\t\tvalue: [],\n\t\t\t}\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.SingleEnum.EQUAL,\n\t\t\t\t),\n\t\t\t\tvalue: null,\n\t\t\t}\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn {\n\t\t\t\tkey: columnKey,\n\t\t\t\toperation: getFilterInitialOperation(\n\t\t\t\t\tcolumn.operations,\n\t\t\t\t\tKottiFilters.Operation.String.CONTAINS,\n\t\t\t\t),\n\t\t\t\tvalue: null,\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error('Invalid Filter Type: initial state not found')\n\t}\n}\n\nexport const getOperationOptions = (\n\tcolumn: KottiFilters.Column.Any,\n): KottiFieldSingleSelect.Props['options'] => {\n\tconst translations = useTranslationNamespace('KtFilters')\n\n\tswitch (column.type) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.boolean[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.currency[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.dateRange[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.float[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.integer[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.multiEnum[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.singleEnum[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn column.operations.map((operation) => ({\n\t\t\t\tlabel: translations.value.string[operation],\n\t\t\t\tvalue: operation,\n\t\t\t}))\n\t\tdefault:\n\t\t\tthrow new Error('Invalid Column Type: filter operations not found')\n\t}\n}\n\nexport const getSearchFilterInitialState = (\n\tsearchColumn: KottiFilters.Column.Search,\n): KottiFilters.InternalFilter => ({\n\tkey: searchColumn.key,\n\toperation: KottiFilters.Operation.Search.CONTAINS,\n\tvalue: null,\n})\n\nexport const getValueComponent = (\n\tfilterType: KottiFilters.FilterType,\n): string => {\n\tswitch (filterType) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\t\treturn 'KtFieldToggle'\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\t\treturn 'KtFieldCurrency'\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn 'KtFieldDateRange'\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\t\treturn 'KtFieldNumber'\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn 'KtFieldMultiSelect'\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\t\treturn 'KtFieldSingleSelect'\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn 'KtFieldText'\n\t\tdefault:\n\t\t\tthrow new Error('Invalid Filter Type: value component not found')\n\t}\n}\n\nexport const isEmptyOperation = (\n\tfilterOperation: KottiFilters.InternalFilter['operation'],\n\tfilterType: KottiFilters.FilterType,\n): boolean => {\n\tswitch (filterType) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\t\treturn filterOperation === KottiFilters.Operation.Boolean.IS_EMPTY\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\t\treturn filterOperation === KottiFilters.Operation.Currency.IS_EMPTY\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn filterOperation === KottiFilters.Operation.DateRange.IS_EMPTY\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\t\treturn filterOperation === KottiFilters.Operation.Float.IS_EMPTY\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\t\treturn filterOperation === KottiFilters.Operation.Integer.IS_EMPTY\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn filterOperation === KottiFilters.Operation.MultiEnum.IS_EMPTY\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\t\treturn filterOperation === KottiFilters.Operation.SingleEnum.IS_EMPTY\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn filterOperation === KottiFilters.Operation.String.IS_EMPTY\n\t\tdefault:\n\t\t\treturn false\n\t}\n}\n","import type { KottiField } from '../kotti-field/types'\n\nimport type { KottiForm } from './types'\n\nconst createOnSubmitErrorMessage = (messages: string[]) =>\n\t`KottiForm(onSubmit): ${messages.join('\\n')}`\n\nclass UnexpectedValidationStateError extends Error {\n\tconstructor(_props: KottiForm.Props) {\n\t\tsuper(\n\t\t\tcreateOnSubmitErrorMessage(['Encountered Unexpected Validation State']),\n\t\t)\n\t\tthis.name = 'UnexpectedValidationStateError'\n\t}\n}\n\nclass ValidationError extends Error {\n\tconstructor(\n\t\tprops: KottiForm.Props,\n\t\ttype: Extract<KottiForm.Props['preventSubmissionOn'], 'error' | 'warning'>,\n\t\tvalidations: KottiField.Validation.Result[],\n\t) {\n\t\tsuper(\n\t\t\tcreateOnSubmitErrorMessage([\n\t\t\t\t`Encountered validation with type “${type}” onSubmit:`,\n\t\t\t\tJSON.stringify(validations, null, '\\t'),\n\t\t\t\t`Preventing submission according to preventSubmissionOn=\"${props.preventSubmissionOn}\".`,\n\t\t\t]),\n\t\t)\n\t\tthis.name = 'ValidationError'\n\t}\n}\n\nexport const ktFormErrors = {\n\tUnexpectedValidationStateError,\n\tValidationError,\n}\n","import type { KottiField } from '../kotti-field/types'\n\nimport type { KottiForm } from './types'\n\nexport const getValidationSummary = (\n\tvalidations: ReadonlyArray<KottiField.Validation.Result>,\n): KottiForm.ValidationSummary =>\n\tvalidations.reduce<KottiForm.ValidationSummary>(\n\t\t(accumulator, validation) => {\n\t\t\tswitch (validation.type) {\n\t\t\t\tcase 'empty':\n\t\t\t\t\treturn accumulator\n\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...accumulator,\n\t\t\t\t\t\terrors: [...accumulator.errors, validation],\n\t\t\t\t\t}\n\n\t\t\t\tcase 'success':\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...accumulator,\n\t\t\t\t\t\tsuccesses: [...accumulator.successes, validation],\n\t\t\t\t\t}\n\n\t\t\t\tcase 'warning':\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...accumulator,\n\t\t\t\t\t\twarnings: [...accumulator.warnings, validation],\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\terrors: [],\n\t\t\tsuccesses: [],\n\t\t\twarnings: [],\n\t\t},\n\t)\n","<template>\n\t<form @submit.prevent=\"onSubmit\">\n\t\t<slot name=\"default\" />\n\t\t<!-- onSubmit only triggers if there is a submit button in the form -->\n\t\t<input v-show=\"false\" type=\"submit\" />\n\t</form>\n</template>\n\n<script lang=\"ts\">\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, provide, reactive } from 'vue'\n\nimport { KottiField } from '../kotti-field/types'\nimport { makeProps } from '../make-props'\n\nimport { KT_FORM_CONTEXT, KT_FORM_SUBMIT_CONTEXT } from './constants'\nimport { ktFormErrors } from './errors'\nimport type { KottiForm } from './types'\nimport { getValidationSummary } from './utilities'\n\nlet id = 0\n\nexport default defineComponent({\n\tname: 'KtForm',\n\tprops: {\n\t\t...makeProps(\n\t\t\t// FIXME: should be done on propsSchema level once KtForms use zod\n\t\t\tKottiField.inheritablePropsSchema.merge(\n\t\t\t\tKottiField.potentiallySupportedPropsSchema.pick({\n\t\t\t\t\thideClear: true,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tformId: {\n\t\t\tdefault: () => `autoGeneratedFormId${++id}`,\n\t\t\ttype: String,\n\t\t},\n\t\tmodelValue: { required: true, type: Object },\n\t\tpreventSubmissionOn: {\n\t\t\tdefault: 'error',\n\t\t\ttype: String as PropType<KottiForm.Props['preventSubmissionOn']>,\n\t\t\tvalidator: (\n\t\t\t\tvalue: unknown,\n\t\t\t): value is KottiForm.Props['preventSubmissionOn'] => {\n\t\t\t\treturn (\n\t\t\t\t\ttypeof value === 'string' &&\n\t\t\t\t\t['error', 'NEVER', 'warning'].includes(value)\n\t\t\t\t)\n\t\t\t},\n\t\t},\n\t\tvalidators: { default: () => ({}), type: Object },\n\t},\n\temits: ['update:modelValue', 'submit'],\n\tsetup(props, { emit }) {\n\t\tconst currentFieldsWrapper = reactive<{\n\t\t\tcurrentFields: KottiField.Hook.Returns<unknown>[]\n\t\t}>({ currentFields: [] })\n\n\t\tconst values = computed(() => cloneDeep(props.modelValue))\n\t\tconst isLoading = computed(() => props.isLoading)\n\n\t\tprovide<KottiForm.Context>(KT_FORM_CONTEXT, {\n\t\t\tfieldInheritableProps: computed(() => ({\n\t\t\t\thideClear: props.hideClear,\n\t\t\t\thideValidation: props.hideValidation,\n\t\t\t\tisDisabled: props.isDisabled,\n\t\t\t\tisLoading: props.isLoading,\n\t\t\t\tshowVisibilityToggle: props.showVisibilityToggle,\n\t\t\t\tsize: props.size,\n\t\t\t})),\n\t\t\tformPath: computed(() => [props.formId]),\n\t\t\tonAddField(toAdd) {\n\t\t\t\tcurrentFieldsWrapper.currentFields = [\n\t\t\t\t\t...currentFieldsWrapper.currentFields,\n\t\t\t\t\ttoAdd as (typeof currentFieldsWrapper.currentFields)[number],\n\t\t\t\t]\n\t\t\t},\n\t\t\tonRemoveField(toRemove) {\n\t\t\t\tcurrentFieldsWrapper.currentFields =\n\t\t\t\t\tcurrentFieldsWrapper.currentFields.filter(\n\t\t\t\t\t\t(field) => field !== toRemove,\n\t\t\t\t\t)\n\t\t\t},\n\t\t\tsetValue(key, newValue) {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\t...props.modelValue,\n\t\t\t\t\t[key]: newValue,\n\t\t\t\t})\n\t\t\t},\n\t\t\tvalidators: computed(() => props.validators),\n\t\t\tvalues,\n\t\t})\n\n\t\tconst validations = computed(() =>\n\t\t\tcurrentFieldsWrapper.currentFields.map((field) => field.validation),\n\t\t)\n\n\t\tconst valueIsValid = ({ type }: KottiField.Validation.Result) => {\n\t\t\tif (props.preventSubmissionOn === 'warning')\n\t\t\t\treturn type !== 'warning' && type !== 'error'\n\n\t\t\tif (props.preventSubmissionOn === 'error') return type !== 'error'\n\n\t\t\treturn true\n\t\t}\n\n\t\tconst validationSummary = computed(() =>\n\t\t\tgetValidationSummary(validations.value),\n\t\t)\n\n\t\tconst isValid = computed(() => validations.value.every(valueIsValid))\n\n\t\tprovide<KottiForm.SubmitContext>(KT_FORM_SUBMIT_CONTEXT, {\n\t\t\tisLoading,\n\t\t\tisValid,\n\t\t\tvalidationSummary,\n\t\t})\n\n\t\treturn {\n\t\t\tonSubmit() {\n\t\t\t\tswitch (props.preventSubmissionOn) {\n\t\t\t\t\tcase 'warning':\n\t\t\t\t\t\tif (validationSummary.value.warnings.length > 0)\n\t\t\t\t\t\t\tthrow new ktFormErrors.ValidationError(\n\t\t\t\t\t\t\t\tprops,\n\t\t\t\t\t\t\t\t'warning',\n\t\t\t\t\t\t\t\tvalidationSummary.value.warnings,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t// fall through\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\tif (validationSummary.value.errors.length > 0)\n\t\t\t\t\t\t\tthrow new ktFormErrors.ValidationError(\n\t\t\t\t\t\t\t\tprops,\n\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\tvalidationSummary.value.errors,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t// fall through\n\t\t\t\t\tcase 'NEVER':\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tif (!isValid.value)\n\t\t\t\t\tthrow new ktFormErrors.UnexpectedValidationStateError(props)\n\n\t\t\t\tconst onSubmitData: KottiForm.Events.Submit = {\n\t\t\t\t\tvalidationSummary: validationSummary.value,\n\t\t\t\t\tvalues: values.value,\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Deep-clone to prevent users from accidentally modifying the internal state\n\t\t\t\t */\n\t\t\t\temit('submit', cloneDeep(onSubmitData))\n\t\t\t},\n\t\t\tvalidations,\n\t\t}\n\t},\n})\n</script>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFormVue from './KtForm.vue'\n\nexport const KtForm = attachMeta(makeInstallable(KtFormVue), {\n\taddedVersion: '2.0.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\tdefault: {\n\t\t\tdescription: null,\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Form',\n\t\tschema: null,\n\t},\n})\n\nexport * from './constants'\n","<template>\n\t<KtForm\n\t\tclass=\"kt-filter-row\"\n\t\t:formId=\"dataTest ?? undefined\"\n\t\thideValidation\n\t\t:isLoading=\"isLoading\"\n\t\t:modelValue=\"filter\"\n\t\tsize=\"small\"\n\t\tstyle=\"display: contents\"\n\t\t@update:modelValue=\"handleSetFilter\"\n\t>\n\t\t<div class=\"kt-filter-row__wrapper\">\n\t\t\t<span class=\"kt-filter-row__label\" v-text=\"label\" />\n\t\t\t<KtFieldSingleSelect formKey=\"key\" hideClear :options=\"columnOptions\" />\n\t\t\t<template v-if=\"filter.operation\">\n\t\t\t\t<KtFieldSingleSelect\n\t\t\t\t\tformKey=\"operation\"\n\t\t\t\t\thideClear\n\t\t\t\t\t:isDisabled=\"isOperationSelectDisabled\"\n\t\t\t\t\t:options=\"operationOptions\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"kt-filter-row__value-field\">\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"valueComponent\"\n\t\t\t\t\t\tv-if=\"isValueFieldVisible\"\n\t\t\t\t\t\tv-bind=\"valueComponentProps\"\n\t\t\t\t\t\tformKey=\"value\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t\t<ButtonLink\n\t\t\tclass=\"kt-filter-row__remove\"\n\t\t\t:dataTest=\"dataTest ? `${dataTest}.remove` : undefined\"\n\t\t\ticon=\"close\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\ttype=\"danger\"\n\t\t\t@click=\"handleRemove\"\n\t\t/>\n\t</KtForm>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { KtFieldCurrency } from '../../kotti-field-currency'\nimport { KtFieldDateRange } from '../../kotti-field-date'\nimport { KtFieldNumber } from '../../kotti-field-number'\nimport { KtFieldMultiSelect } from '../../kotti-field-select'\nimport { KtFieldSingleSelect } from '../../kotti-field-select'\nimport type { KottiFieldSingleSelect } from '../../kotti-field-select/types'\nimport { KtFieldText } from '../../kotti-field-text'\nimport { KtFieldToggle } from '../../kotti-field-toggle'\nimport { KtForm } from '../../kotti-form'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport { KottiFilters } from '../types'\nimport {\n\tgetFilterEmptyValue,\n\tgetOperationOptions,\n\tgetValueComponent,\n\tisEmptyOperation,\n} from '../utils'\n\nimport ButtonLink from './ButtonLink.vue'\n\nexport default defineComponent({\n\tname: 'FilterRow',\n\tcomponents: {\n\t\tButtonLink,\n\t\tKtFieldCurrency,\n\t\tKtFieldDateRange,\n\t\tKtFieldMultiSelect,\n\t\tKtFieldNumber,\n\t\tKtFieldSingleSelect,\n\t\tKtFieldText,\n\t\tKtFieldToggle,\n\t\tKtForm,\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t} as any,\n\tprops: {\n\t\tcolumn: {\n\t\t\tdefault: null,\n\t\t\ttype: Object as PropType<KottiFilters.Column.Any | null>,\n\t\t},\n\t\tcolumnOptions: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<KottiFieldSingleSelect.Props['options']>,\n\t\t},\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String as PropType<string | null>,\n\t\t},\n\t\tfilter: {\n\t\t\tdefault: () => ({\n\t\t\t\tkey: null,\n\t\t\t}),\n\t\t\ttype: Object as PropType<KottiFilters.Filter>,\n\t\t},\n\t\tisFirstItem: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\temits: ['update:modelValue', 'remove'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFilters')\n\n\t\tconst operationOptions = computed(() =>\n\t\t\tprops.column ? getOperationOptions(props.column) : [],\n\t\t)\n\n\t\tconst handleRemove = () => {\n\t\t\temit('remove')\n\t\t}\n\t\tconst handleSetFilter = (newFilter: KottiFilters.InternalFilter) => {\n\t\t\tif (!props.column) {\n\t\t\t\temit('update:modelValue', newFilter)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (isEmptyOperation(newFilter.operation, props.column.type)) {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\t...newFilter,\n\t\t\t\t\tvalue: getFilterEmptyValue(props.column.type),\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\temit('update:modelValue', newFilter)\n\t\t}\n\n\t\treturn {\n\t\t\thandleRemove,\n\t\t\thandleSetFilter,\n\t\t\tisOperationSelectDisabled: computed(\n\t\t\t\t() => operationOptions.value.length <= 1,\n\t\t\t),\n\t\t\tisValueFieldVisible: computed(\n\t\t\t\t() =>\n\t\t\t\t\tprops.column &&\n\t\t\t\t\t!isEmptyOperation(props.filter.operation, props.column.type),\n\t\t\t),\n\t\t\tlabel: computed(() =>\n\t\t\t\tprops.isFirstItem\n\t\t\t\t\t? translations.value.whereLabel\n\t\t\t\t\t: translations.value.andLabel,\n\t\t\t),\n\t\t\toperationOptions,\n\t\t\tvalueComponent: computed(() => {\n\t\t\t\tif (!props.column?.type) return null\n\t\t\t\treturn getValueComponent(props.column.type)\n\t\t\t}),\n\t\t\t// eslint-disable-next-line sonarjs/cognitive-complexity\n\t\t\tvalueComponentProps: computed(() => ({\n\t\t\t\tclearOnSelect:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.MULTI_ENUM\n\t\t\t\t\t\t? props.column.clearOnSelect\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcollapseTagsAfter:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.MULTI_ENUM\n\t\t\t\t\t\t? props.column.collapseTagsAfter\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcurrency:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.CURRENCY\n\t\t\t\t\t\t? props.column.currency\n\t\t\t\t\t\t: undefined,\n\t\t\t\tdecimalPlaces:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT\n\t\t\t\t\t\t? props.column.decimalPlaces\n\t\t\t\t\t\t: props.column?.type === KottiFilters.FilterType.INTEGER\n\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\tisUnsorted:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.MULTI_ENUM ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.SINGLE_ENUM\n\t\t\t\t\t\t? props.column.isUnsorted\n\t\t\t\t\t\t: undefined,\n\t\t\t\tmaximum:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.INTEGER\n\t\t\t\t\t\t? props.column.maximum\n\t\t\t\t\t\t: undefined,\n\t\t\t\tmaximumDate:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.DATE_RANGE\n\t\t\t\t\t\t? props.column.maximumDate\n\t\t\t\t\t\t: undefined,\n\t\t\t\tminimum:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.INTEGER\n\t\t\t\t\t\t? props.column.minimum\n\t\t\t\t\t\t: undefined,\n\t\t\t\tminimumDate:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.DATE_RANGE\n\t\t\t\t\t\t? props.column.minimumDate\n\t\t\t\t\t\t: undefined,\n\t\t\t\toptions:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.MULTI_ENUM ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.SINGLE_ENUM\n\t\t\t\t\t\t? props.column.options\n\t\t\t\t\t\t: undefined,\n\t\t\t\tprefix:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.INTEGER\n\t\t\t\t\t\t? props.column.prefix\n\t\t\t\t\t\t: undefined,\n\t\t\t\tshortcuts:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.DATE_RANGE\n\t\t\t\t\t\t? props.column.shortcuts\n\t\t\t\t\t\t: undefined,\n\t\t\t\tstep:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT\n\t\t\t\t\t\t? props.column.step\n\t\t\t\t\t\t: undefined,\n\t\t\t\tsuffix:\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.FLOAT ||\n\t\t\t\t\tprops.column?.type === KottiFilters.FilterType.INTEGER\n\t\t\t\t\t\t? props.column.suffix\n\t\t\t\t\t\t: undefined,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-style/_variables';\n\n.kt-filter-row {\n\t&__wrapper {\n\t\tdisplay: contents;\n\n\t\t@media (width < $size-md) {\n\t\t\tdisplay: unset;\n\n\t\t\t> * {\n\t\t\t\tpadding-bottom: var(--unit-1);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: var(--text-02);\n\t}\n\n\t&__value-field {\n\t\tmargin: auto 0;\n\t}\n\n\t&__remove {\n\t\tgrid-column: 5;\n\t\talign-self: center;\n\n\t\t@media (width < $size-md) {\n\t\t\tgrid-column: 2;\n\t\t}\n\t}\n\n\t:deep(.kt-field-select) {\n\t\tmargin-bottom: 0;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-filter__list\">\n\t\t<i\n\t\t\tv-show=\"filters.length === 0 && !isAddingFilter\"\n\t\t\tv-text=\"translations.emptyListLabel\"\n\t\t/>\n\t\t<FilterRow\n\t\t\tv-for=\"(filter, index) in filters\"\n\t\t\t:key=\"filter.key\"\n\t\t\t:column=\"getColumn(filter.key)\"\n\t\t\t:columnOptions=\"getColumnOptions(filter.key)\"\n\t\t\t:dataTest=\"dataTest ? `${dataTest}.filter.${filter.key}` : null\"\n\t\t\t:filter=\"filter\"\n\t\t\t:isFirstItem=\"index === 0\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t@remove=\"handleRemoveFilter(filter.key)\"\n\t\t\t@update:modelValue=\"handleSetFilter(filter.key, $event)\"\n\t\t/>\n\t\t<FilterRow\n\t\t\tv-if=\"isAddingFilter\"\n\t\t\t:columnOptions=\"getColumnOptions()\"\n\t\t\t:dataTest=\"dataTest ? `${dataTest}.addingFilter` : null\"\n\t\t\t:isFirstItem=\"filters.length === 0\"\n\t\t\t@remove=\"handleCancelAddFilter\"\n\t\t\t@update:modelValue=\"handleAddFilter\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport type { KottiFieldSingleSelect } from '../../kotti-field-select/types'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport type { KottiFilters } from '../types'\nimport { getFilterInitialState } from '../utils'\n\nimport FilterRow from './FilterRow.vue'\n\nexport default defineComponent({\n\tname: 'FilterList',\n\tcomponents: {\n\t\tFilterRow,\n\t},\n\tprops: {\n\t\tcolumns: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<KottiFilters.Column.Any[]>,\n\t\t},\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\tfilters: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<KottiFilters.InternalFilter[]>,\n\t\t},\n\t\tisAddingFilter: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\temits: ['endAddingFilter', 'update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst currentFiltersKeys = computed<KottiFilters.InternalFilter['key'][]>(\n\t\t\t() => props.filters.map((filter) => filter.key),\n\t\t)\n\n\t\tconst getColumn = (\n\t\t\tcolumnKey: KottiFilters.Column.Any['key'],\n\t\t): KottiFilters.Column.Any => {\n\t\t\tconst column =\n\t\t\t\tprops.columns.find((column) => column.key === columnKey) ?? null\n\t\t\tif (column === null)\n\t\t\t\tthrow new Error('Invalid Filter Key: column not found')\n\t\t\treturn column\n\t\t}\n\t\tconst getColumnOptions = (\n\t\t\tselectedColumnKey?: KottiFilters.Column.Any['key'],\n\t\t): KottiFieldSingleSelect.Props['options'] =>\n\t\t\tprops.columns\n\t\t\t\t.filter(\n\t\t\t\t\t(column) =>\n\t\t\t\t\t\tcolumn.key === selectedColumnKey ||\n\t\t\t\t\t\t!currentFiltersKeys.value.includes(column.key),\n\t\t\t\t)\n\t\t\t\t.map((column) => ({\n\t\t\t\t\tlabel: column.label,\n\t\t\t\t\tvalue: column.key,\n\t\t\t\t}))\n\n\t\tconst handleAddFilter = (filter: KottiFilters.InternalFilter): void => {\n\t\t\tconst newFilter = getFilterInitialState(filter.key, props.columns)\n\t\t\temit('update:modelValue', [...props.filters, newFilter])\n\t\t\temit('endAddingFilter')\n\t\t}\n\t\tconst handleCancelAddFilter = (): void => {\n\t\t\temit('endAddingFilter')\n\t\t}\n\t\tconst handleRemoveFilter = (\n\t\t\tfilterKey: KottiFilters.InternalFilter['key'],\n\t\t): void => {\n\t\t\tconst updatedFilters = props.filters.filter(\n\t\t\t\t(filter) => filter.key !== filterKey,\n\t\t\t)\n\t\t\temit('update:modelValue', updatedFilters)\n\t\t}\n\t\tconst handleSetFilter = (\n\t\t\toldFilterKey: KottiFilters.InternalFilter['key'],\n\t\t\tnewFilter: KottiFilters.InternalFilter,\n\t\t): void => {\n\t\t\tconst updatedFilter = currentFiltersKeys.value.includes(newFilter.key)\n\t\t\t\t? newFilter\n\t\t\t\t: getFilterInitialState(newFilter.key, props.columns)\n\n\t\t\tconst updatedFilters = props.filters.map((oldFilter) =>\n\t\t\t\toldFilter.key === oldFilterKey ? updatedFilter : oldFilter,\n\t\t\t)\n\t\t\temit('update:modelValue', updatedFilters)\n\t\t}\n\n\t\treturn {\n\t\t\tgetColumn,\n\t\t\tgetColumnOptions,\n\t\t\thandleAddFilter,\n\t\t\thandleCancelAddFilter,\n\t\t\thandleRemoveFilter,\n\t\t\thandleSetFilter,\n\t\t\ttranslations: useTranslationNamespace('KtFilters'),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-style/_variables';\n\n.kt-filter__list {\n\tdisplay: grid;\n\tgrid-template-rows: auto;\n\tgrid-template-columns: max-content repeat(3, 1fr) max-content;\n\tgap: var(--unit-1);\n\twidth: 50vw;\n\n\t@media (width < $size-md) {\n\t\tgrid-template-columns: auto max-content;\n\t}\n\n\t@media (width < $size-xl) {\n\t\twidth: 60vw;\n\t}\n\n\t@media (width < $size-lg) {\n\t\twidth: 75vw;\n\t}\n\n\t@media (width < $size-md) {\n\t\twidth: 90vw;\n\t}\n\n\t@media (width < $size-sm) {\n\t\twidth: 95vw;\n\t}\n}\n</style>\n","<template>\n\t<KtFieldText\n\t\tclass=\"kt-filter__search\"\n\t\t:dataTest=\"dataTest ? `${dataTest}.searchInput` : undefined\"\n\t\thideValidation\n\t\t:isLoading=\"isLoading\"\n\t\t:leftIcon=\"Yoco.Icon.SEARCH\"\n\t\t:modelValue=\"searchValue\"\n\t\t:placeholder=\"placeholder\"\n\t\tsize=\"small\"\n\t\t@update:modelValue=\"handleSetSearchValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KtFieldText } from '../../kotti-field-text'\nimport type { KottiFieldText } from '../../kotti-field-text/types'\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport type { KottiFilters } from '../types'\nimport { getSearchFilterInitialState } from '../utils'\n\nexport default defineComponent({\n\tname: 'FilterSearch',\n\tcomponents: {\n\t\tKtFieldText,\n\t},\n\tprops: {\n\t\tcolumn: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<KottiFilters.Column.Search>,\n\t\t},\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\tfilter: {\n\t\t\tdefault: null,\n\t\t\ttype: Object as PropType<KottiFilters.InternalFilterSearch | null>,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFilters')\n\n\t\tconst handleSetSearchValue = (value: string) => {\n\t\t\temit('update:modelValue', {\n\t\t\t\t...(props.filter ?? getSearchFilterInitialState(props.column)),\n\t\t\t\tvalue,\n\t\t\t})\n\t\t}\n\n\t\treturn {\n\t\t\thandleSetSearchValue,\n\t\t\tplaceholder: computed<string>(\n\t\t\t\t() => props.column.placeholder ?? translations.value.searchLabel,\n\t\t\t),\n\t\t\tsearchValue: computed<KottiFieldText.ModelValue>(\n\t\t\t\t() => props.filter?.value ?? null,\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-filter__search {\n\tflex: 1;\n\tmargin: 0 var(--unit-2) 0 0;\n}\n</style>\n","import { KottiFilters } from './types'\n\nconst isNonEmptyString = (value: unknown): value is string =>\n\ttypeof value === 'string' && value.length > 0\n\nconst isValueInEnum = <KEY extends string>(\n\tvalue: string,\n\tenumObject: Record<KEY, string>,\n): boolean => Object.values(enumObject).includes(value)\n\nconst areValidOperations = (\n\toperations: KottiFilters.Operation.Any[],\n\tfilterType: KottiFilters.FilterType,\n): boolean => {\n\tswitch (filterType) {\n\t\tcase KottiFilters.FilterType.BOOLEAN:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.Boolean>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.Boolean,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.CURRENCY:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.Currency>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.Currency,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.DATE_RANGE:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.DateRange>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.DateRange,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.FLOAT:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.Float>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.Float,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.INTEGER:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.Integer>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.Integer,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.MULTI_ENUM:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.MultiEnum>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.MultiEnum,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.SINGLE_ENUM:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.SingleEnum>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.SingleEnum,\n\t\t\t\t),\n\t\t\t)\n\t\tcase KottiFilters.FilterType.STRING:\n\t\t\treturn operations.every((operation) =>\n\t\t\t\tisValueInEnum<KottiFilters.Operation.String>(\n\t\t\t\t\toperation,\n\t\t\t\t\tKottiFilters.Operation.String,\n\t\t\t\t),\n\t\t\t)\n\t\tdefault:\n\t\t\treturn false\n\t}\n}\n\nexport const isValidColumn = (\n\tcolumn: KottiFilters.Column.Any,\n): column is KottiFilters.Column.Any => {\n\tconst isValidKey = isNonEmptyString(column.key)\n\tconst isValidLabel = isNonEmptyString(column.label)\n\tif (column.type === KottiFilters.FilterType.SEARCH)\n\t\treturn isValidKey && isValidLabel\n\treturn (\n\t\tisValidKey &&\n\t\tisValidLabel &&\n\t\tArray.isArray(column.operations) &&\n\t\tcolumn.operations.length > 0 &&\n\t\tareValidOperations(column.operations, column.type)\n\t)\n}\n","<template>\n\t<div class=\"kt-filter\">\n\t\t<FilterSearch\n\t\t\tv-if=\"searchColumn !== null\"\n\t\t\t:column=\"searchColumn\"\n\t\t\t:dataTest=\"dataTest\"\n\t\t\t:filter=\"searchValue\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t@update:modelValue=\"setSearchFilter\"\n\t\t/>\n\t\t<div ref=\"listTriggerRef\">\n\t\t\t<ButtonLink\n\t\t\t\t:dataTest=\"dataTest ? `${dataTest}.showFilters` : undefined\"\n\t\t\t\t:icon=\"Yoco.Icon.FILTER\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:label=\"filterLabel\"\n\t\t\t\t@click=\"toggleListVisibility\"\n\t\t\t/>\n\t\t</div>\n\t\t<div ref=\"listContentRef\">\n\t\t\t<FilterList\n\t\t\t\t:columns=\"filterListColumns\"\n\t\t\t\t:dataTest=\"dataTest\"\n\t\t\t\t:filters=\"filterListValues\"\n\t\t\t\t:isAddingFilter=\"isAddingFilter\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t@endAddingFilter=\"isAddingFilter = false\"\n\t\t\t\t@update:modelValue=\"setFilters\"\n\t\t\t/>\n\t\t\t<FilterActions\n\t\t\t\t:dataTest=\"dataTest\"\n\t\t\t\t:isAddDisabled=\"isAddDisabled\"\n\t\t\t\t:isClearAllDisabled=\"isClearAllDisabled\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t@clearAll=\"clearAll\"\n\t\t\t\t@startAddingFilter=\"isAddingFilter = true\"\n\t\t\t/>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"isListVisible\"\n\t\t\tclass=\"kt-filter__background\"\n\t\t\t@click=\"toggleListVisibility\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport castArray from 'lodash/castArray.js'\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../constants'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\n\nimport ButtonLink from './components/ButtonLink.vue'\nimport FilterActions from './components/FilterActions.vue'\nimport FilterList from './components/FilterList.vue'\nimport FilterSearch from './components/FilterSearch.vue'\nimport { KottiFilters } from './types'\nimport { isValidColumn } from './validators'\n\nexport default defineComponent({\n\tname: 'KtFilters',\n\tcomponents: {\n\t\tButtonLink,\n\t\tFilterActions,\n\t\tFilterList,\n\t\tFilterSearch,\n\t},\n\tprops: {\n\t\tcolumns: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<KottiFilters.PropsInternal['columns']>,\n\t\t\tvalidator: (\n\t\t\t\tvalue: unknown,\n\t\t\t): value is KottiFilters.PropsInternal['columns'] => {\n\t\t\t\treturn (\n\t\t\t\t\tArray.isArray(value) && value.every((column) => isValidColumn(column))\n\t\t\t\t)\n\t\t\t},\n\t\t},\n\t\tdataTest: {\n\t\t\tdefault: null,\n\t\t\ttype: String,\n\t\t},\n\t\tisLoading: {\n\t\t\tdefault: false,\n\t\t\ttype: Boolean,\n\t\t},\n\t\tmodelValue: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<KottiFilters.PropsInternal['value']>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtFilters')\n\n\t\tconst listContentRef = ref<Element | null>(null)\n\t\tconst listTriggerRef = ref<Element | null>(null)\n\t\tconst isAddingFilter = ref<boolean>(false)\n\t\tconst isListVisible = ref<boolean>(false)\n\n\t\tconst filterListColumns = computed<KottiFilters.Column.Any[]>(() =>\n\t\t\tprops.columns.filter(\n\t\t\t\t(column) => column.type !== KottiFilters.FilterType.SEARCH,\n\t\t\t),\n\t\t)\n\n\t\tconst searchColumn = computed(\n\t\t\t() =>\n\t\t\t\tprops.columns.find(\n\t\t\t\t\t(column) => column.type === KottiFilters.FilterType.SEARCH,\n\t\t\t\t) ?? null,\n\t\t)\n\n\t\tconst searchValue = computed<KottiFilters.InternalFilterSearch | null>(\n\t\t\t() =>\n\t\t\t\t(props.modelValue.find(\n\t\t\t\t\t(filter) => filter.key === searchColumn.value?.key,\n\t\t\t\t) ?? null) as KottiFilters.InternalFilterSearch | null,\n\t\t)\n\n\t\tconst filterListValues = computed<KottiFilters.Value>(() =>\n\t\t\tprops.modelValue.filter(\n\t\t\t\t(filter) => filter.key !== searchColumn.value?.key,\n\t\t\t),\n\t\t)\n\t\tconst isAddDisabled = computed(\n\t\t\t() =>\n\t\t\t\tisAddingFilter.value ||\n\t\t\t\tfilterListValues.value.length >= filterListColumns.value.length,\n\t\t)\n\t\tconst isClearAllDisabled = computed(\n\t\t\t() => isAddingFilter.value || filterListValues.value.length === 0,\n\t\t)\n\t\tconst filterLabel = computed<string>(() => {\n\t\t\tconst filtersCount = filterListValues.value.length\n\t\t\tconst label =\n\t\t\t\tfiltersCount > 1\n\t\t\t\t\t? translations.value.filtersLabel\n\t\t\t\t\t: translations.value.filterLabel\n\t\t\tif (filtersCount === 0) return label\n\t\t\treturn `${String(filtersCount)} ${label}`\n\t\t})\n\n\t\tconst clearAll = () => {\n\t\t\tif (searchValue.value === null) {\n\t\t\t\temit('update:modelValue', [])\n\t\t\t\treturn\n\t\t\t}\n\t\t\temit('update:modelValue', [searchValue.value])\n\t\t}\n\t\tconst setFilters = (filters: KottiFilters.Value) => {\n\t\t\tif (searchValue.value === null) {\n\t\t\t\temit('update:modelValue', filters)\n\t\t\t\treturn\n\t\t\t}\n\t\t\temit('update:modelValue', [...filters, searchValue.value])\n\t\t}\n\t\tconst setSearchFilter = (searchFilter: KottiFilters.InternalFilter) => {\n\t\t\tif (searchColumn.value !== null) {\n\t\t\t\tif (searchFilter.value === null) {\n\t\t\t\t\temit('update:modelValue', filterListValues.value)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\temit('update:modelValue', [...filterListValues.value, searchFilter])\n\t\t\t}\n\t\t}\n\n\t\tconst { tippy } = useTippy(\n\t\t\tlistTriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: listContentRef.value ?? undefined,\n\t\t\t\thideOnClick: false,\n\t\t\t\tinteractive: true,\n\t\t\t\tmaxWidth: 'none',\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\tplacement: 'bottom',\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t\ttrigger: 'manual',\n\t\t\t\tzIndex: 1000,\n\t\t\t})),\n\t\t)\n\n\t\tconst toggleListVisibility = () => {\n\t\t\tif (tippy.value === null) return\n\n\t\t\tconst tippys = castArray(tippy.value)\n\n\t\t\tisListVisible.value = !isListVisible.value\n\n\t\t\tif (!isListVisible.value) {\n\t\t\t\tisAddingFilter.value = false\n\t\t\t}\n\n\t\t\tfor (const tippy of tippys) {\n\t\t\t\tif (isListVisible.value) tippy.show()\n\t\t\t\telse tippy.hide()\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tclearAll,\n\t\t\tfilterLabel,\n\t\t\tfilterListColumns,\n\t\t\tfilterListValues,\n\t\t\tisAddDisabled,\n\t\t\tisAddingFilter,\n\t\t\tisClearAllDisabled,\n\t\t\tisListVisible,\n\t\t\tlistContentRef,\n\t\t\tlistTriggerRef,\n\t\t\tsearchColumn,\n\t\t\tsearchValue,\n\t\t\tsetFilters,\n\t\t\tsetSearchFilter,\n\t\t\ttoggleListVisibility,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n.kt-filter {\n\tdisplay: flex;\n\talign-items: center;\n\n\t&__background {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tz-index: 999;\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFiltersVue from './KtFilters.vue'\n\nexport const KtFilters = attachMeta(makeInstallable(KtFiltersVue), {\n\taddedVersion: '3.0.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Filters',\n\t\tschema: null,\n\t},\n})\n","<template>\n\t<div><slot /></div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, provide } from 'vue'\n\nimport { KT_FORM_CONTEXT } from '../../kotti-form/constants'\nimport type { KottiForm } from '../../kotti-form/types'\nimport type { KottiFormControllerListItem } from '../types'\n\nexport default defineComponent({\n\tname: 'FormControllerListItem',\n\tprops: {\n\t\tcontext: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<KottiFormControllerListItem.Props['context']>,\n\t\t},\n\t\tformKey: { required: true, type: String },\n\t\tindex: { required: true, type: Number },\n\t\tvalues: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<KottiFormControllerListItem.Props['values']>,\n\t\t},\n\t},\n\temits: ['setValue'],\n\tsetup(props, { emit }) {\n\t\t/* eslint-disable vue/no-setup-props-reactivity-loss */\n\t\t/**\n\t\t * FIXME: This is not reactive and will likely cause issues. Fixing this\n\t\t * would require adjusting types in KottiForm.Context to support computed\n\t\t * which is out of scope\n\t\t */\n\t\tprovide<KottiForm.Context>(KT_FORM_CONTEXT, {\n\t\t\tfieldInheritableProps: props.context.fieldInheritableProps,\n\t\t\tformPath: computed(() => [\n\t\t\t\t...props.context.formPath.value,\n\t\t\t\tprops.formKey,\n\t\t\t\tprops.index,\n\t\t\t]),\n\t\t\tonAddField: props.context.onAddField,\n\t\t\tonRemoveField: props.context.onRemoveField,\n\t\t\tsetValue: (formKey, newValue) => {\n\t\t\t\temit('setValue', { formKey, newValue })\n\t\t\t},\n\t\t\tvalidators: props.context.validators,\n\t\t\tvalues: computed(() => props.values),\n\t\t})\n\t\t/* eslint-enable vue/no-setup-props-reactivity-loss */\n\t},\n})\n</script>\n","<template>\n\t<div>\n\t\t<slot\n\t\t\tv-bind=\"slotFunctions\"\n\t\t\tname=\"header\"\n\t\t\t:values=\"cloneDeep(valuesList)\"\n\t\t/>\n\t\t<FormControllerListItem\n\t\t\tv-for=\"(values, index) in valuesList\"\n\t\t\t:key=\"index\"\n\t\t\t:context=\"context\"\n\t\t\t:formKey=\"formKey\"\n\t\t\t:index=\"index\"\n\t\t\t:values=\"values\"\n\t\t\t@setValue=\"setValue({ ...$event, index })\"\n\t\t>\n\t\t\t<slot\n\t\t\t\t:addAfter=\"addAfter(index)\"\n\t\t\t\t:addBefore=\"addBefore(index)\"\n\t\t\t\t:deleteSelf=\"() => deleteSelf(index)\"\n\t\t\t\t:index=\"index\"\n\t\t\t\tname=\"default\"\n\t\t\t\t:setValues=\"setValuesIndex(index)\"\n\t\t\t\t:values=\"cloneDeep(values)\"\n\t\t\t/>\n\t\t</FormControllerListItem>\n\t\t<slot\n\t\t\tv-bind=\"slotFunctions\"\n\t\t\tname=\"footer\"\n\t\t\t:values=\"cloneDeep(valuesList)\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport { computed, defineComponent, inject } from 'vue'\n\nimport { KT_FORM_CONTEXT } from '../kotti-form/constants'\nimport type { KottiForm } from '../kotti-form/types'\n\nimport FormControllerListItem from './components/FormControllerListItem.vue'\nimport type { KottiFormControllerListItem } from './types'\n\ntype Entry = KottiFormControllerListItem.Props['values']\n\nexport default defineComponent({\n\tname: 'KtFormControllerList',\n\tcomponents: { FormControllerListItem },\n\tprops: {\n\t\tformKey: { required: true, type: String },\n\t},\n\tsetup(props) {\n\t\tconst context = inject<KottiForm.Context | null>(KT_FORM_CONTEXT, null)\n\t\tif (context === null)\n\t\t\tthrow new Error('KtFormControllerList: Could Not Find KtFormContext')\n\n\t\tconst valuesList = computed<Entry[]>(() => {\n\t\t\tconst result = context.values.value[props.formKey]\n\n\t\t\tif (!Array.isArray(result))\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`KtFormControllerList: Unexpected Data Type ${typeof result}. Expected Array`,\n\t\t\t\t)\n\n\t\t\treturn result\n\t\t})\n\n\t\treturn {\n\t\t\t/**\n\t\t\t * Adds a new valuesList entry after the given index\n\t\t\t */\n\t\t\taddAfter: (index: number) => (newRow: Entry) => {\n\t\t\t\tcontext.setValue(props.formKey, [\n\t\t\t\t\t...valuesList.value.slice(0, index + 1),\n\t\t\t\t\tnewRow,\n\t\t\t\t\t...valuesList.value.slice(index + 1, valuesList.value.length),\n\t\t\t\t])\n\t\t\t},\n\t\t\t/**\n\t\t\t * Adds a new valuesList entry before the given index\n\t\t\t */\n\t\t\taddBefore: (index: number) => (newRow: Entry) => {\n\t\t\t\tcontext.setValue(props.formKey, [\n\t\t\t\t\t...valuesList.value.slice(0, index),\n\t\t\t\t\tnewRow,\n\t\t\t\t\t...valuesList.value.slice(index, valuesList.value.length),\n\t\t\t\t])\n\t\t\t},\n\t\t\t/**\n\t\t\t * Makes sure that consumers cannot accidentally modify the internal state\n\t\t\t */\n\t\t\tcloneDeep,\n\t\t\tcontext,\n\t\t\t/**\n\t\t\t * Deletes the given index from the valuesList\n\t\t\t */\n\t\t\tdeleteSelf: (index: number) => {\n\t\t\t\tcontext.setValue(\n\t\t\t\t\tprops.formKey,\n\t\t\t\t\tvaluesList.value.filter((_, i) => (i === index ? false : true)),\n\t\t\t\t)\n\t\t\t},\n\t\t\t/**\n\t\t\t * Updates a single formKey in a valuesList entry\n\t\t\t */\n\t\t\tsetValue: ({\n\t\t\t\tformKey,\n\t\t\t\tindex,\n\t\t\t\tnewValue,\n\t\t\t}: {\n\t\t\t\tformKey: string\n\t\t\t\tindex: number\n\t\t\t\tnewValue: unknown\n\t\t\t}) => {\n\t\t\t\tcontext.setValue(\n\t\t\t\t\tprops.formKey,\n\t\t\t\t\tvaluesList.value.map((oldValue, i) =>\n\t\t\t\t\t\ti === index ? { ...oldValue, [formKey]: newValue } : oldValue,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t},\n\t\t\t/**\n\t\t\t * Replaces an entire valuesListEntry with new data\n\t\t\t */\n\t\t\tsetValuesIndex: (index: number) => (newValue: Entry) => {\n\t\t\t\tcontext.setValue(\n\t\t\t\t\tprops.formKey,\n\t\t\t\t\tvaluesList.value.map((oldValue, i) =>\n\t\t\t\t\t\ti === index ? newValue : oldValue,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t},\n\t\t\t/**\n\t\t\t * Functions that are exposed to the footer and header slots\n\t\t\t * these should manipulate the entire array, instead of individual items\n\t\t\t */\n\t\t\tslotFunctions: {\n\t\t\t\t/**\n\t\t\t\t * Adds a new valuesList entry to the end of the entire list\n\t\t\t\t */\n\t\t\t\taddAfter: (newRow: Entry) => {\n\t\t\t\t\tcontext.setValue(props.formKey, [...valuesList.value, newRow])\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Adds a new valuesList entry to the beginning of the entire list\n\t\t\t\t */\n\t\t\t\taddBefore: (newRow: Entry) => {\n\t\t\t\t\tcontext.setValue(props.formKey, [newRow, ...valuesList.value])\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Replaces the entire valuesList with a new one\n\t\t\t\t */\n\t\t\t\tsetValues: (newValuesList: Entry[]) => {\n\t\t\t\t\tcontext.setValue(props.formKey, newValuesList)\n\t\t\t\t},\n\t\t\t},\n\t\t\tvaluesList,\n\t\t}\n\t},\n})\n</script>\n","import type { z } from 'zod'\n\nimport type { Kotti } from '../types'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFormControllerListVue from './KtFormControllerList.vue'\n\nconst getSharedHeaderFooterScope = <\n\tT extends z.ZodTypeAny,\n>(): Kotti.Meta<T>['slots'][string]['scope'] => ({\n\taddAfter: {\n\t\tdescription: 'append an item to the list',\n\t\ttype: 'function',\n\t},\n\taddBefore: {\n\t\tdescription: 'prepend an item to the list',\n\t\ttype: 'function',\n\t},\n\tsetValues: {\n\t\tdescription: 'replace the list',\n\t\ttype: 'function',\n\t},\n\tvalues: {\n\t\tdescription: 'all items in the list',\n\t\ttype: 'object',\n\t},\n})\n\nexport const KtFormControllerList = attachMeta(\n\tmakeInstallable(KtFormControllerListVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {\n\t\t\tdefault: {\n\t\t\t\tdescription: null,\n\t\t\t\tscope: {\n\t\t\t\t\taddAfter: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\taddBefore: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\tdeleteSelf: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\tindex: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'integer',\n\t\t\t\t\t},\n\t\t\t\t\tsetValues: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\tvalues: {\n\t\t\t\t\t\tdescription: null,\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tfooter: {\n\t\t\t\tdescription: 'inserted below the list, exposes list utilities',\n\t\t\t\tscope: getSharedHeaderFooterScope(),\n\t\t\t},\n\t\t\theader: {\n\t\t\t\tdescription: 'inserted above the list, exposes list utilities',\n\t\t\t\tscope: getSharedHeaderFooterScope(),\n\t\t\t},\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FormControllerList',\n\t\t\tschema: null,\n\t\t},\n\t},\n)\n","<template>\n\t<div>\n\t\t<slot :setValue=\"setValue\" :setValues=\"setValues\" :values=\"values\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, provide } from 'vue'\n\nimport { KT_FORM_CONTEXT } from '../kotti-form/constants'\nimport type { KottiForm } from '../kotti-form/types'\n\nexport default defineComponent({\n\tname: 'KtFormControllerObject',\n\tprops: {\n\t\tformKey: { required: true, type: String },\n\t},\n\tsetup(props) {\n\t\tconst context = inject<KottiForm.Context | null>(KT_FORM_CONTEXT, null)\n\t\tif (context === null)\n\t\t\tthrow new Error('KtFormControllerObject: Could Not Find KtFormContext')\n\n\t\tconst values = computed((): KottiForm.ContextType => {\n\t\t\tconst result = context.values.value[props.formKey]\n\n\t\t\tconst errorText = (type: string) =>\n\t\t\t\t`KtFormControllerObject: Unexpected Data Type ${type}. Expected Object`\n\n\t\t\tif (result === null) throw new Error(errorText('null'))\n\t\t\tif (Array.isArray(result)) throw new Error(errorText('array'))\n\t\t\tif (typeof result !== 'object') throw new Error(errorText(typeof result))\n\n\t\t\treturn result as KottiForm.ContextType\n\t\t})\n\n\t\t/**\n\t\t * Updates a single key in a KtFormControllerObject values\n\t\t */\n\t\tconst setValue = (\n\t\t\tkey: keyof KottiForm.ContextType,\n\t\t\tnewValue: KottiForm.ContextType[keyof KottiForm.ContextType],\n\t\t) => {\n\t\t\tcontext.setValue(props.formKey, {\n\t\t\t\t...values.value,\n\t\t\t\t[key]: newValue,\n\t\t\t})\n\t\t}\n\n\t\tprovide<KottiForm.Context>(KT_FORM_CONTEXT, {\n\t\t\tfieldInheritableProps: context.fieldInheritableProps,\n\t\t\tformPath: computed(() => [...context.formPath.value, props.formKey]),\n\t\t\tonAddField: context.onAddField,\n\t\t\tonRemoveField: context.onRemoveField,\n\t\t\tsetValue,\n\t\t\tvalidators: context.validators,\n\t\t\tvalues,\n\t\t})\n\n\t\treturn {\n\t\t\tsetValue,\n\t\t\t/**\n\t\t\t * Updates KtFormControllerObject values\n\t\t\t */\n\t\t\tsetValues: (newFormValues: KottiForm.ContextType) => {\n\t\t\t\tcontext.setValue(props.formKey, newFormValues)\n\t\t\t},\n\t\t\tvalues,\n\t\t}\n\t},\n})\n</script>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFormControllerObjectVue from './KtFormControllerObject.vue'\n\nexport const KtFormControllerObject = attachMeta(\n\tmakeInstallable(KtFormControllerObjectVue),\n\t{\n\t\taddedVersion: '2.0.0',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {\n\t\t\tdefault: {\n\t\t\t\tdescription: null,\n\t\t\t\tscope: {\n\t\t\t\t\tsetValue: {\n\t\t\t\t\t\tdescription: 'sets a key on the controller object',\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\tsetValues: {\n\t\t\t\t\t\tdescription: 'sets value of the controller object',\n\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t},\n\t\t\t\t\tvalues: {\n\t\t\t\t\t\tdescription: 'current value of the controller object',\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.FormControllerObject',\n\t\t\tschema: null,\n\t\t},\n\t},\n)\n","class InvalidSubmitOutsideContextError extends Error {\n\tpublic constructor() {\n\t\tconst messages = [\n\t\t\t'Encountered a “<KtFormSubmit />” outside of a “<KtForm/>”',\n\t\t]\n\t\tsuper(`KtFormSubmit: ${messages.join('\\n')}`)\n\t\tthis.name = 'InvalidSubmitOutsideContextError'\n\t}\n}\n\nexport const ktFormSubmitErrors = {\n\tInvalidSubmitOutsideContextError,\n}\n","<template>\n\t<div>\n\t\t<!-- TODO: implement popover -->\n\t\t<div v-if=\"showPopup\" class=\"kt-form-submit-popup\">\n\t\t\t<h4 class=\"kt-form-submit-popup__title\" v-text=\"translations.title\" />\n\n\t\t\t<div\n\t\t\t\tv-if=\"errors.length > 0\"\n\t\t\t\tclass=\"kt-form-submit-popup__section kt-form-submit-popup__section--error\"\n\t\t\t>\n\t\t\t\t<h5 v-text=\"translations.errorsSectionTitle\" />\n\t\t\t\t<ul>\n\t\t\t\t\t<li v-for=\"(error, index) in errors\" :key=\"index\">\n\t\t\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.CIRCLE_CROSS\" />\n\t\t\t\t\t\t<span v-text=\"error.text\" />\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"warnings.length > 0\"\n\t\t\t\tclass=\"kt-form-submit-popup__section kt-form-submit-popup__section--warning\"\n\t\t\t>\n\t\t\t\t<h5 v-text=\"translations.warningsSectionTitle\" />\n\t\t\t\t<ul>\n\t\t\t\t\t<li v-for=\"(warning, index) in warnings\" :key=\"index\">\n\t\t\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.CIRCLE_ATTENTION\" />\n\t\t\t\t\t\t<span v-text=\"warning.text\" />\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<button\n\t\t\tclass=\"kt-button primary kt-form-submit-button\"\n\t\t\t:disabled=\"isDisabled\"\n\t\t\ttype=\"submit\"\n\t\t>\n\t\t\t<i v-if=\"isLoading\" class=\"kt-circle-loading\" />\n\t\t\t{{ label }}\n\t\t</button>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { KT_FORM_SUBMIT_CONTEXT } from '../kotti-form/constants'\nimport type { KottiForm } from '../kotti-form/types'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\n\nimport { ktFormSubmitErrors } from './errors'\n\nexport default defineComponent({\n\tname: 'KtFormSubmit',\n\tprops: {\n\t\tlabel: { default: 'Submit', type: String },\n\t},\n\tsetup() {\n\t\tconst context = inject<KottiForm.SubmitContext | null>(\n\t\t\tKT_FORM_SUBMIT_CONTEXT,\n\t\t\tnull,\n\t\t)\n\n\t\tif (context === null)\n\t\t\tthrow new ktFormSubmitErrors.InvalidSubmitOutsideContextError()\n\n\t\tconst { isLoading, isValid, validationSummary } = context\n\t\tconst errors = computed(() => validationSummary.value.errors)\n\t\tconst warnings = computed(() => validationSummary.value.warnings)\n\n\t\treturn {\n\t\t\terrors,\n\t\t\tisDisabled: computed(() => !isValid.value || isLoading.value),\n\t\t\tisLoading,\n\t\t\tshowPopup: computed(\n\t\t\t\t() => errors.value.length > 0 || warnings.value.length > 0,\n\t\t\t),\n\t\t\ttranslations: useTranslationNamespace('KtFormSubmit'),\n\t\t\twarnings,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n/* FIXME: why isn’t this scoped? */\n\n.kt-form-submit-button {\n\tdisplay: flex;\n}\n\n.kt-form-submit-popup {\n\tdisplay: flex;\n\tflex: 1;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tpadding: 1em;\n\tbackground-color: var(--ui-01);\n\n\t> *:not(:last-child) {\n\t\tmargin-bottom: 1em;\n\t}\n\n\t&__section {\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tmargin: 0;\n\t\t\tlist-style: none;\n\n\t\t\tli {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin: 0.2rem 0;\n\t\t\t\tline-height: 1;\n\n\t\t\t\ti.yoco {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tmargin: 0 0.5em 0 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t@each $type in 'warning', 'error' {\n\t\t\t&--#{$type} ul {\n\t\t\t\tcolor: var(--support-#{$type});\n\t\t\t}\n\t\t}\n\t}\n\n\t&__title,\n\th5 {\n\t\tfont-weight: bold;\n\t\tcolor: var(--text-01);\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtFormSubmitVue from './KtFormSubmit.vue'\n\nexport const KtFormSubmit = attachMeta(makeInstallable(KtFormSubmitVue), {\n\taddedVersion: '2.0.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.FormSubmit',\n\t\tschema: null,\n\t},\n})\n","<template>\n\t<div>\n\t\t<h3>\n\t\t\t<span class=\"kt-heading__title\" v-text=\"text\" />\n\t\t\t<span\n\t\t\t\tv-if=\"type === KottiHeading.Type.ACTION\"\n\t\t\t\tclass=\"kt-heading__button\"\n\t\t\t\t@click=\"handleClick\"\n\t\t\t>\n\t\t\t\t{{ actionText }} <i class=\"yoco\" v-text=\"icon\" />\n\t\t\t</span>\n\t\t\t<span\n\t\t\t\tv-if=\"type === KottiHeading.Type.TOGGLE\"\n\t\t\t\tclass=\"kt-heading__button\"\n\t\t\t\t@click=\"handleClick\"\n\t\t\t>\n\t\t\t\t{{ toggleTextRep }}\n\t\t\t\t<i\n\t\t\t\t\tclass=\"yoco\"\n\t\t\t\t\tv-text=\"toggleStatus ? Yoco.Icon.MINUS : Yoco.Icon.PLUS\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t</h3>\n\t\t<div v-if=\"toggleStatus && type === KottiHeading.Type.TOGGLE\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiHeading } from './types'\n\nexport default defineComponent({\n\tname: 'KtHeading',\n\tprops: makeProps(KottiHeading.propsSchema),\n\temits: ['click', 'toggle'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\thandleClick: (event: Event) => {\n\t\t\t\tif (props.type === KottiHeading.Type.ACTION) {\n\t\t\t\t\temit('click', event)\n\t\t\t\t}\n\t\t\t\tif (props.type === KottiHeading.Type.TOGGLE) {\n\t\t\t\t\temit('toggle', event)\n\t\t\t\t}\n\t\t\t},\n\t\t\tKottiHeading,\n\t\t\ttoggleTextRep: computed(() =>\n\t\t\t\tprops.toggleStatus ? props.toggleCloseText : props.toggleText,\n\t\t\t),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-heading__button {\n\tfloat: right;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\tcolor: var(--interactive-01);\n\n\t&:hover {\n\t\tcolor: var(--interactive-01);\n\t\tcursor: pointer;\n\t}\n}\n\n.kt-heading__title {\n\tflex: 1;\n}\n\nh3 {\n\tdisplay: flex;\n\talign-items: center;\n\n\ti.yoco {\n\t\tfont-size: 1rem;\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtHeadingVue from './KtHeading.vue'\n\nexport const KtHeading = attachMeta(makeInstallable(KtHeadingVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A765',\n\t},\n\tslots: {\n\t\tdefault: { description: 'Used for type toggle', scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Heading',\n\t\tschema: null,\n\t},\n})\n","<template>\n\t<slot />\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { useI18nProvide } from './hooks'\nimport type { KottiI18n } from './types'\n\nexport default defineComponent({\n\tname: 'KtI18nContext',\n\tprops: {\n\t\tcurrencyMap: {\n\t\t\tdefault: (): KottiI18n.Props['currencyMap'] => ({}),\n\t\t\ttype: Object as PropType<KottiI18n.Props['currencyMap']>,\n\t\t},\n\t\tlocale: {\n\t\t\trequired: true,\n\t\t\ttype: String as PropType<KottiI18n.Props['locale']>,\n\t\t},\n\t\tmessages: {\n\t\t\t/**\n\t\t\t * default to a Partial object, because the provision hook handles\n\t\t\t * the default values.\n\t\t\t */\n\t\t\tdefault: (): KottiI18n.Props['messages'] => ({}),\n\t\t\ttype: Object as PropType<KottiI18n.Props['messages']>,\n\t\t},\n\t\tnumberFormat: {\n\t\t\t/**\n\t\t\t * default to a Partial object, because the provision hook handles\n\t\t\t * the default values.\n\t\t\t */\n\t\t\tdefault: (): KottiI18n.Props['numberFormat'] => ({}),\n\t\t\ttype: Object as PropType<KottiI18n.Props['numberFormat']>,\n\t\t},\n\t},\n\tsetup(props) {\n\t\tuseI18nProvide({\n\t\t\tcurrencyMap: computed(() => props.currencyMap),\n\t\t\tlocale: computed(() => props.locale),\n\t\t\tmessages: computed(() => props.messages),\n\t\t\tnumberFormat: computed(() => props.numberFormat),\n\t\t})\n\n\t\treturn {}\n\t},\n})\n</script>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtI18nContextVue from './KtI18nContext.vue'\n\nexport const KtI18nContext = attachMeta(makeInstallable(KtI18nContextVue), {\n\taddedVersion: '2.0.0',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.I18n',\n\t\tschema: null,\n\t},\n})\n\nexport * from './constants'\n","<template>\n\t<div class=\"kt-line\">\n\t\t<div v-if=\"position !== Position.LEFT\" class=\"kt-line__line\" />\n\t\t<div v-if=\"text\" :class=\"textClasses\" @click=\"handleClick\" v-text=\"text\" />\n\t\t<div v-if=\"position !== Position.RIGHT\" class=\"kt-line__line\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport { KottiLine } from './types'\n\nexport default defineComponent({\n\tname: 'KtLine',\n\tprops: makeProps(KottiLine.propsSchema),\n\temits: ['click'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\thandleClick: () => {\n\t\t\t\tif (props.isInteractive) emit('click')\n\t\t\t},\n\t\t\tPosition: KottiLine.Position,\n\t\t\ttextClasses: computed(() => ({\n\t\t\t\t'kt-line__text': true,\n\t\t\t\t'kt-line__text--is-interactive': props.isInteractive,\n\t\t\t})),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-line {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 0.8rem;\n\tmargin: 0.2rem 0;\n\n\t&__line {\n\t\tflex: 1 1 auto;\n\t\twidth: 100%;\n\t\theight: 1px;\n\t\tbackground: var(--ui-02);\n\t}\n\n\t&__text {\n\t\tflex: 1 0 auto;\n\t\tpadding: 0 0.4rem;\n\t\tfont-size: 0.6rem;\n\t\tcolor: var(--text-03);\n\t\ttext-align: center;\n\n\t\t&--is-interactive {\n\t\t\tfont-size: 0.8rem;\n\t\t\tcolor: var(--interactive-01);\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtLineVue from './KtLine.vue'\nimport { KottiLine } from './types'\n\nexport const KtLine = attachMeta(makeInstallable(KtLineVue), {\n\taddedVersion: '1.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A771',\n\t},\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Line',\n\t\tschema: KottiLine.propsSchema,\n\t},\n})\n","<template>\n\t<div class=\"kt-navbar-quick-link-tooltip\" @click=\"(e) => $emit('click', e)\">\n\t\t<i ref=\"triggerRef\" class=\"yoco\" v-text=\"icon\" />\n\t\t<div ref=\"contentRef\" v-text=\"label\" />\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport type { Yoco } from '@3yourmind/yoco'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../../constants'\nimport type { EnumToPrimitiveUnion } from '../../zod-utilities/enums'\n\nexport default defineComponent({\n\tname: 'NavbarTooltip',\n\tprops: {\n\t\ticon: {\n\t\t\trequired: true,\n\t\t\ttype: String as PropType<\n\t\t\t\tEnumToPrimitiveUnion<typeof Yoco.Icon> | Yoco.Icon\n\t\t\t>,\n\t\t},\n\t\tlabel: { required: true, type: String },\n\t},\n\temits: ['click'],\n\tsetup() {\n\t\tconst contentRef = ref<Element | null>(null)\n\t\tconst triggerRef = ref<Element | null>(null)\n\n\t\tuseTippy(\n\t\t\ttriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: contentRef.value ?? undefined,\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\tplacement: 'right',\n\t\t\t\ttheme: 'kt-tooltip-navbar',\n\t\t\t})),\n\t\t)\n\n\t\treturn {\n\t\t\tcontentRef,\n\t\t\ttriggerRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-navbar-quick-link-tooltip {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n}\n</style>\n\n<style lang=\"scss\">\n/* forked from tippy’s light-border theme */\n\n$border: var(--gray-90);\n$fill: var(--gray-90);\n$text: var(--gray-10);\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] {\n\tcolor: $text;\n\tbackground-color: $fill;\n\tborder: 1px solid $border;\n\tbox-shadow: var(--shadow-lg);\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-backdrop {\n\tbackground-color: $fill;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-arrow::after,\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-svg-arrow::after {\n\tposition: absolute;\n\tz-index: -1;\n\tcontent: '';\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-arrow::after {\n\tborder-color: transparent;\n\tborder-style: solid;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='top']\n\t> .tippy-arrow::before {\n\tborder-top-color: $border;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='top']\n\t> .tippy-arrow::after {\n\ttop: 17px;\n\tleft: 1px;\n\tborder-width: 7px 7px 0;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='top']\n\t> .tippy-svg-arrow\n\t> svg {\n\ttop: 16px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='top']\n\t> .tippy-svg-arrow::after {\n\ttop: 17px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='bottom']\n\t> .tippy-arrow::before {\n\tbottom: 16px;\n\tborder-bottom-color: $border;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='bottom']\n\t> .tippy-arrow::after {\n\tbottom: 17px;\n\tleft: 1px;\n\tborder-width: 0 7px 7px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='bottom']\n\t> .tippy-svg-arrow\n\t> svg {\n\tbottom: 16px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='bottom']\n\t> .tippy-svg-arrow::after {\n\tbottom: 17px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='left']\n\t> .tippy-arrow::before {\n\tborder-left-color: $border;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='left']\n\t> .tippy-arrow::after {\n\ttop: 1px;\n\tleft: 17px;\n\tborder-width: 7px 0 7px 7px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='left']\n\t> .tippy-svg-arrow\n\t> svg {\n\tleft: 11px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='left']\n\t> .tippy-svg-arrow::after {\n\tleft: 12px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='right']\n\t> .tippy-arrow::before {\n\tright: 16px;\n\tborder-right-color: $border;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='right']\n\t> .tippy-arrow::after {\n\ttop: 1px;\n\tright: 17px;\n\tborder-width: 7px 7px 7px 0;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='right']\n\t> .tippy-svg-arrow\n\t> svg {\n\tright: 11px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'][data-placement^='right']\n\t> .tippy-svg-arrow::after {\n\tright: 12px;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-svg-arrow {\n\tfill: $fill;\n}\n\n.tippy-box[data-theme~='kt-tooltip-navbar'] > .tippy-svg-arrow::after {\n\twidth: 16px;\n\theight: 6px;\n\tbackground-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=');\n\tbackground-size: 16px 6px;\n}\n</style>\n","<template>\n\t<div class=\"kt-navbar-logo-container\">\n\t\t<div\n\t\t\tv-if=\"isNarrow\"\n\t\t\tclass=\"kt-navbar-logo kt-navbar-logo--is-desktop kt-navbar-logo--is-narrow\"\n\t\t>\n\t\t\t<NavbarTooltip\n\t\t\t\t:icon=\"Yoco.Icon.HIDE_MENU\"\n\t\t\t\t:label=\"translations.menuExpand\"\n\t\t\t\tstyle=\"transform: rotate(180deg)\"\n\t\t\t\t@click.stop=\"() => $emit('setIsNarrow', false)\"\n\t\t\t/>\n\t\t</div>\n\t\t<div\n\t\t\tv-else\n\t\t\tclass=\"kt-navbar-logo kt-navbar-logo--is-desktop\"\n\t\t\t@click=\"$emit('logoClick')\"\n\t\t>\n\t\t\t<img alt=\"logo\" class=\"kt-navbar-logo__image\" :src=\"logoUrl\" />\n\t\t\t<NavbarTooltip\n\t\t\t\t:icon=\"Yoco.Icon.HIDE_MENU\"\n\t\t\t\t:label=\"translations.menuCollapse\"\n\t\t\t\t@click.stop=\"() => $emit('setIsNarrow', true)\"\n\t\t\t/>\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"kt-navbar-logo kt-navbar-logo--is-mobile\"\n\t\t\t@click=\"$emit('logoClick')\"\n\t\t>\n\t\t\t<img alt=\"logo\" class=\"kt-navbar-logo__image\" :src=\"logoUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\n\nimport NavbarTooltip from './NavbarTooltip.vue'\n\nexport default defineComponent({\n\tname: 'NavbarLogo',\n\tcomponents: {\n\t\tNavbarTooltip,\n\t},\n\tprops: {\n\t\tisNarrow: { default: false, type: Boolean },\n\t\tlogoUrl: { required: true, type: String },\n\t},\n\temits: ['logoClick', 'setIsNarrow'],\n\tsetup() {\n\t\tconst translations = useTranslationNamespace('KtNavbar')\n\n\t\treturn {\n\t\t\ttranslations,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../kotti-style/_variables';\n\n$margin: 0.4rem 0.6rem;\n\n.kt-navbar-logo-container {\n\tdisplay: flex;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.kt-navbar-logo {\n\t:deep(.yoco) {\n\t\tpadding: $margin;\n\t\tfont-size: 1.2rem;\n\t\tcolor: var(--kt-navbar-color-light);\n\n\t\t&:hover {\n\t\t\tcolor: var(--kt-navbar-color-active);\n\t\t}\n\t}\n\n\t&--is-desktop {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\n\t\t.kt-navbar-logo__image {\n\t\t\tmargin: $margin;\n\t\t\tmargin-right: 0; // already handled by the padding of the toggle button\n\t\t}\n\t}\n\n\t&--is-mobile {\n\t\tdisplay: none;\n\t\tflex: 1;\n\t\talign-items: center;\n\t\talign-self: center;\n\t\tjustify-content: center;\n\t\theight: 100%;\n\t}\n\n\t&--is-narrow {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n\n\t&__image {\n\t\t// Calculates from:\n\t\t//  12rem (menu width)\n\t\t//  - 1 rem (image margin left)\n\t\t//  - 0 rem (image margin right)\n\t\t//  - 3.2rem (yoco icon container width)\n\t\tmax-width: 7.8rem;\n\t}\n}\n\n@media (width < $size-md) {\n\t.kt-navbar-logo {\n\t\t&--is-desktop {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&--is-mobile {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t&__image {\n\t\t\tmax-height: 2rem;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tv-for=\"(item, index) in parsedSections\"\n\t\t:key=\"index\"\n\t\tclass=\"kt-navbar-menu\"\n\t>\n\t\t<div\n\t\t\tv-if=\"item.title\"\n\t\t\tclass=\"kt-navbar-menu__section\"\n\t\t\tv-text=\"isNarrow ? '' : item.title\"\n\t\t/>\n\t\t<component\n\t\t\t:is=\"link.component\"\n\t\t\tv-for=\"(link, linkIndex) in item.links\"\n\t\t\t:key=\"linkIndex\"\n\t\t\tv-bind=\"link.props\"\n\t\t\tclass=\"kt-navbar-menu__item\"\n\t\t\t:class=\"{ active: link.isActive, narrow: isNarrow }\"\n\t\t\t@click=\"$emit('menuLinkClick', link)\"\n\t\t>\n\t\t\t<NavbarTooltip v-if=\"isNarrow\" :icon=\"link.icon\" :label=\"link.title\" />\n\t\t\t<div v-else class=\"yoco\" v-text=\"link.icon\" />\n\t\t\t<span\n\t\t\t\tv-if=\"!isNarrow\"\n\t\t\t\t:data-test=\"`kt-navbar-section-item-${link.title.toLowerCase()}`\"\n\t\t\t\tv-text=\"link.title\"\n\t\t\t/>\n\t\t</component>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { makeProps } from '../../make-props'\nimport { KottiNavbar } from '../types'\n\nimport NavbarTooltip from './NavbarTooltip.vue'\n\nconst propsSchema = KottiNavbar.propsSchema.pick({\n\tisNarrow: true,\n\tsections: true,\n})\n\nexport default defineComponent({\n\tname: 'KtNavbarMenu',\n\tcomponents: {\n\t\tNavbarTooltip,\n\t},\n\tprops: makeProps(propsSchema),\n\temits: ['menuLinkClick'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tparsedSections: computed(() => propsSchema.parse(props).sections),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-navbar-menu {\n\tpadding: 0.1rem;\n\ttext-align: left;\n\n\t&__section {\n\t\tdisplay: block;\n\t\tpadding: 0.2rem;\n\t\tmargin-top: 0.4rem;\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\ttext-transform: uppercase;\n\t\topacity: 0.6;\n\t}\n\n\t&__item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0.3rem 0.5rem;\n\t\tfont-size: 13px;\n\t\tcolor: inherit;\n\t\tborder-radius: var(--border-radius);\n\n\t\t&:hover {\n\t\t\tcolor: var(--kt-navbar-color-active);\n\t\t\tcursor: pointer;\n\t\t\tbackground-color: var(--kt-navbar-background-active);\n\t\t}\n\n\t\t&.narrow {\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t&.active {\n\t\t\tfont-weight: 600;\n\t\t\tcolor: var(--kt-navbar-color-active);\n\t\t}\n\t}\n\n\t&__item span {\n\t\tmargin-left: var(--unit-2);\n\t\tcolor: var(--kt-navbar-color-light);\n\t}\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n}\n</style>\n","<template>\n\t<a :href=\"link\">\n\t\t<div class=\"kt-navbar-notification\">\n\t\t\t<div>\n\t\t\t\t<i\n\t\t\t\t\tv-if=\"!count || !isNarrow\"\n\t\t\t\t\tclass=\"kt-navbar-notification__icon yoco\"\n\t\t\t\t\tv-text=\"'bell'\"\n\t\t\t\t/>\n\t\t\t\t<span\n\t\t\t\t\tv-show=\"!isNarrow\"\n\t\t\t\t\tclass=\"kt-navbar-notification__label\"\n\t\t\t\t\tv-text=\"title\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-show=\"count\"\n\t\t\t\tclass=\"kt-navbar-notification__number\"\n\t\t\t\tv-text=\"count\"\n\t\t\t/>\n\t\t</div>\n\t\t<div class=\"kt-navbar-notification--mobile\">\n\t\t\t<i v-if=\"!count\" class=\"yoco\">bell</i> <span v-else v-text=\"count\" />\n\t\t</div>\n\t</a>\n</template>\n\n<script>\nexport default {\n\tname: 'KtNavbarNotification',\n\tprops: {\n\t\tcount: { default: 0, type: Number },\n\t\tisNarrow: { default: false, type: Boolean },\n\t\tlink: { default: null, type: String },\n\t\ttitle: { default: 'Notification', type: String },\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-navbar-notification {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0.8rem 1rem;\n\tmargin-bottom: 0.4rem;\n\tfont-size: 0.75rem;\n\tline-height: 1.2rem;\n\tborder-bottom: 1px solid var(--kt-navbar-border);\n\n\tspan {\n\t\tmargin-left: 0.8rem;\n\t}\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n\n\t&__number {\n\t\twidth: 1.2rem;\n\t\theight: 1.2rem;\n\t\tfont-size: 0.6rem;\n\t\tline-height: 1.2rem;\n\t\ttext-align: center;\n\t\tbackground: rgb(255 255 255 / 26%);\n\t\tborder-radius: 0.6rem;\n\t}\n\n\t&--mobile {\n\t\tdisplay: none;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-navbar-quick-links\">\n\t\t<div v-if=\"!isNarrow\" class=\"kt-navbar-quick-links__title\" v-text=\"title\" />\n\t\t<a\n\t\t\tv-for=\"(item, index) in links\"\n\t\t\t:key=\"index\"\n\t\t\tclass=\"kt-navbar-quick-link\"\n\t\t\t:href=\"item.link\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\ttarget=\"_blank\"\n\t\t>\n\t\t\t<div v-if=\"!isNarrow\" class=\"yoco\" v-text=\"Yoco.Icon.LINK\" />\n\t\t\t<span v-if=\"!isNarrow\" v-text=\"item.title\" />\n\t\t\t<NavbarTooltip\n\t\t\t\tv-else\n\t\t\t\tclass=\"kt-navbar-quick-link__tooltip\"\n\t\t\t\t:icon=\"Yoco.Icon.LINK\"\n\t\t\t\t:label=\"item.title\"\n\t\t\t/>\n\t\t</a>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../../kotti-i18n/hooks'\nimport type { KottiNavbar } from '../types'\n\nimport NavbarTooltip from './NavbarTooltip.vue'\n\nexport default defineComponent({\n\tname: 'KtNavbarQuickLink',\n\tcomponents: {\n\t\tNavbarTooltip,\n\t},\n\tprops: {\n\t\tisNarrow: { default: false, type: Boolean },\n\t\tlinks: {\n\t\t\trequired: true,\n\t\t\ttype: Array as PropType<Array<KottiNavbar.QuickLink>>,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst translations = useTranslationNamespace('KtNavbar')\n\n\t\treturn {\n\t\t\ttitle: computed(() => translations.value.quickLinksTitle),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-navbar-quick-links {\n\tpadding: 0.1rem;\n\tmargin-top: 0.4rem;\n\n\t&__title {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\ttext-transform: uppercase;\n\t\topacity: 0.6;\n\t}\n}\n\n.kt-navbar-quick-link {\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0.1rem 0.5rem;\n\tcolor: var(--kt-navbar-color-light);\n\n\tspan {\n\t\tmargin-left: var(--unit-2);\n\t\tfont-size: 13px;\n\t\tfont-weight: 400;\n\t}\n\n\t&:hover {\n\t\tcolor: var(--kt-navbar-color-active);\n\t}\n\n\t:deep(.yoco) {\n\t\tmargin: 2px;\n\t\tfont-size: 0.8rem;\n\t}\n\n\t&__tooltip {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t}\n}\n</style>\n","import type { InjectionKey, Ref } from 'vue'\n\nimport { KottiNavbar } from './types'\n\nexport const KT_NAVBAR_CONTEXT: InjectionKey<Ref<KottiNavbar.Context>> =\n\tSymbol('KT_NAVBAR_CONTEXT')\n\nexport const NAVBAR_THEME: Record<\n\tKottiNavbar.Theme,\n\t{\n\t\tbackground: string\n\t\tbackgroundActive: string\n\t\tborder: string\n\t\tcolor: string\n\t\tcolorActive: string\n\t\tcolorLight: string\n\t\tuserMenuBackground: string\n\t\tuserMenuBackgroundActive: string\n\t\tuserMenuColor: string\n\t}\n> = {\n\t[KottiNavbar.Theme.DARK]: {\n\t\tbackground: 'var(--gray-90)',\n\t\tbackgroundActive: 'var(--gray-80)',\n\t\tborder: 'var(--gray-70)',\n\t\tcolor: 'var(--gray-10)',\n\t\tcolorActive: 'var(--gray-10)',\n\t\tcolorLight: 'var(--primary-10)',\n\t\tuserMenuBackground: 'var(--gray-70)',\n\t\tuserMenuBackgroundActive: 'var(--gray-80)',\n\t\tuserMenuColor: 'var(--gray-10)',\n\t},\n\t[KottiNavbar.Theme.DEFAULT]: {\n\t\tbackground: 'var(--primary-70)',\n\t\tbackgroundActive: 'var(--primary-60)',\n\t\tborder: 'var(--primary-60)',\n\t\tcolor: 'var(--primary-10)',\n\t\tcolorActive: 'var(--white)',\n\t\tcolorLight: 'var(--primary-20)',\n\t\tuserMenuBackground: 'var(--primary-60)',\n\t\tuserMenuBackgroundActive: 'var(--primary-70)',\n\t\tuserMenuColor: 'var(--primary-10)',\n\t},\n\t[KottiNavbar.Theme.LIGHT]: {\n\t\tbackground: 'var(--white)',\n\t\tbackgroundActive: 'var(--gray-10)',\n\t\tborder: 'var(--gray-20)',\n\t\tcolor: 'var(--primary-90)',\n\t\tcolorActive: 'var(--primary-50)',\n\t\tcolorLight: 'var(--primary-80)',\n\t\tuserMenuBackground: 'var(--gray-10)',\n\t\tuserMenuBackgroundActive: 'var(--gray-20)',\n\t\tuserMenuColor: 'var(--primary-90)',\n\t},\n\t[KottiNavbar.Theme.REVERSE]: {\n\t\tbackground: 'var(--primary-10)',\n\t\tbackgroundActive: 'var(--primary-20)',\n\t\tborder: 'var(--primary-20)',\n\t\tcolor: 'var(--primary-80)',\n\t\tcolorActive: 'var(--primary-60)',\n\t\tcolorLight: 'var(--primary-100)',\n\t\tuserMenuBackground: 'var(--primary-20)',\n\t\tuserMenuBackgroundActive: 'var(--primary-30)',\n\t\tuserMenuColor: 'var(--primary-80)',\n\t},\n}\n","<template>\n\t<nav ref=\"navbarRef\" class=\"kt-navbar\" :class=\"classes\">\n\t\t<div class=\"kt-navbar-wrapper\">\n\t\t\t<div ref=\"tippyTriggerRef\" class=\"kt-navbar-toggle\">\n\t\t\t\t<i class=\"yoco\" v-text=\"Yoco.Icon.BURGER\" />\n\t\t\t</div>\n\t\t\t<div class=\"kt-navbar__header\">\n\t\t\t\t<NavbarLogo\n\t\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t\t:logoUrl=\"logoUrl\"\n\t\t\t\t\t@logoClick=\"$emit('logoClick')\"\n\t\t\t\t\t@setIsNarrow=\"setIsNarrow\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div v-if=\"$slots['navbar-header']\" class=\"kt-navbar__subheader\">\n\t\t\t\t<slot name=\"navbar-header\" />\n\t\t\t</div>\n\t\t\t<NavbarNotification\n\t\t\t\tv-if=\"notification\"\n\t\t\t\t:count=\"notification.count\"\n\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t:link=\"notification.link\"\n\t\t\t\t:title=\"notification.title\"\n\t\t\t/>\n\t\t\t<div class=\"kt-navbar__body\">\n\t\t\t\t<NavbarMenu\n\t\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t\t:sections=\"sections\"\n\t\t\t\t\t@menuLinkClick=\"$emit('linkClick', $event)\"\n\t\t\t\t/>\n\t\t\t\t<NavbarQuickLink\n\t\t\t\t\tv-if=\"quickLinks.length > 0\"\n\t\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t\t:links=\"quickLinks\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tref=\"mobileMenuRef\"\n\t\t\t\tclass=\"kt-navbar__dropdown\"\n\t\t\t\t@click=\"hideMobileMenu\"\n\t\t\t>\n\t\t\t\t<NavbarMenu\n\t\t\t\t\t:sections=\"sections\"\n\t\t\t\t\t@menuLinkClick=\"$emit('linkClick', $event)\"\n\t\t\t\t/>\n\n\t\t\t\t<NavbarQuickLink\n\t\t\t\t\tv-if=\"quickLinks.length > 0\"\n\t\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t\t:links=\"quickLinks\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<NavbarMenu\n\t\t\t\tv-if=\"footerSection\"\n\t\t\t\t:isNarrow=\"isNarrow\"\n\t\t\t\t:sections=\"[footerSection]\"\n\t\t\t\t@menuLinkClick=\"$emit('linkClick', $event)\"\n\t\t\t/>\n\t\t\t<div class=\"kt-navbar__footer\">\n\t\t\t\t<slot name=\"navbar-footer\" />\n\t\t\t</div>\n\t\t</div>\n\t</nav>\n</template>\n\n<script lang=\"ts\">\nimport castArray from 'lodash/castArray.js'\nimport { computed, defineComponent, provide, ref, watch } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport NavbarLogo from './components/NavbarLogo.vue'\nimport NavbarMenu from './components/NavbarMenu.vue'\nimport NavbarNotification from './components/NavbarNotification.vue'\nimport NavbarQuickLink from './components/NavbarQuickLink.vue'\nimport { NAVBAR_THEME } from './constants'\nimport { KT_NAVBAR_CONTEXT } from './constants'\nimport { KottiNavbar } from './types'\n\nexport default defineComponent({\n\tname: 'KtNavbar',\n\tcomponents: {\n\t\tNavbarLogo,\n\t\tNavbarMenu,\n\t\tNavbarNotification,\n\t\tNavbarQuickLink,\n\t},\n\tprops: makeProps(KottiNavbar.propsSchema),\n\temits: ['linkClick', 'logoClick', 'setIsNarrow'],\n\tsetup(props, { emit }) {\n\t\tconst mobileMenuRef = ref<HTMLElement | null>(null)\n\t\tconst navbarRef = ref<HTMLElement | null>(null)\n\t\tconst tippyTriggerRef = ref<HTMLElement | null>(null)\n\n\t\tprovide(\n\t\t\tKT_NAVBAR_CONTEXT,\n\t\t\tcomputed(() => ({ isNarrow: props.isNarrow, theme: props.theme })),\n\t\t)\n\n\t\twatch(\n\t\t\t() => props.theme,\n\t\t\t(newTheme) => {\n\t\t\t\tif (typeof document === 'undefined') return // SSR\n\t\t\t\tconst rootElement = document.querySelector(':root') as HTMLElement\n\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-background',\n\t\t\t\t\tNAVBAR_THEME[newTheme].background,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-background-active',\n\t\t\t\t\tNAVBAR_THEME[newTheme].backgroundActive,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-border',\n\t\t\t\t\tNAVBAR_THEME[newTheme].border,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-color',\n\t\t\t\t\tNAVBAR_THEME[newTheme].color,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-color-active',\n\t\t\t\t\tNAVBAR_THEME[newTheme].colorActive,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--kt-navbar-color-light',\n\t\t\t\t\tNAVBAR_THEME[newTheme].colorLight,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--user-menu-background-active',\n\t\t\t\t\tNAVBAR_THEME[newTheme].userMenuBackgroundActive,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--user-menu-background',\n\t\t\t\t\tNAVBAR_THEME[newTheme].userMenuBackground,\n\t\t\t\t)\n\t\t\t\trootElement.style.setProperty(\n\t\t\t\t\t'--user-menu-color',\n\t\t\t\t\tNAVBAR_THEME[newTheme].userMenuColor,\n\t\t\t\t)\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\tconst { tippy } = useTippy(\n\t\t\tnavbarRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: mobileMenuRef.value ?? undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\tmaxWidth: 'none',\n\t\t\t\toffset: [0, 0],\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\ttheme: `kt-navbar-${props.theme}`,\n\t\t\t\ttrigger: 'click',\n\t\t\t\ttriggerTarget: tippyTriggerRef.value,\n\t\t\t})),\n\t\t)\n\n\t\treturn {\n\t\t\tclasses: computed(() => ({\n\t\t\t\t[`kt-navbar--theme-${props.theme}`]: true,\n\t\t\t\t'kt-navbar--narrow': props.isNarrow,\n\t\t\t})),\n\t\t\thideMobileMenu: () => {\n\t\t\t\tif (tippy.value === null) return\n\t\t\t\tconst tippys = castArray(tippy.value)\n\n\t\t\t\tfor (const tippy of tippys) {\n\t\t\t\t\ttippy.hide()\n\t\t\t\t}\n\t\t\t},\n\t\t\tmobileMenuRef,\n\t\t\tnavbarRef,\n\t\t\tsetIsNarrow: (isNarrow: boolean) => {\n\t\t\t\temit('setIsNarrow', isNarrow)\n\t\t\t},\n\t\t\ttippyTriggerRef,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-style/_variables';\n\n.tippy-box[data-theme^='kt-navbar'] {\n\twidth: 100vw;\n\tcolor: var(--kt-navbar-color);\n\tbackground-color: var(--kt-navbar-background);\n\tborder-radius: 0 0 0.2rem 0.2rem;\n\tbox-shadow: var(--shadow-md);\n\n\t// HACK: tippy box has a 5px offset that I can not get rid of using its props\n\ttransform: translateX(-5px);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n$navbar-width: 12rem;\n$mobile-navbar-height: 2.4rem;\n$narrow-navbar-width: 3.4rem;\n\n.kt-navbar {\n\tflex: 0 0 $navbar-width;\n\twidth: $navbar-width;\n\tmin-height: 100vh;\n\tcolor: var(--kt-navbar-color);\n\tbackground: var(--kt-navbar-background);\n\tborder-right: 1px solid var(--kt-navbar-border);\n\n\ta:active,\n\ta:focus {\n\t\tcolor: var(--kt-navbar-color-active);\n\t}\n\n\t&-wrapper {\n\t\tposition: fixed;\n\t\tdisplay: flex;\n\t\tflex-flow: column nowrap;\n\t\tgap: var(--unit-2);\n\t\twidth: $navbar-width;\n\t\theight: 100%;\n\t\tpadding: var(--unit-2);\n\t}\n\n\t&-toggle {\n\t\tdisplay: none;\n\t\tflex: 0 0 2.4rem;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 2.4rem;\n\t\theight: $mobile-navbar-height;\n\t\tcolor: var(--kt-navbar-color-light);\n\t\tcursor: pointer;\n\n\t\t&:hover {\n\t\t\tcolor: var(--kt-navbar-color-active);\n\t\t}\n\n\t\t.yoco {\n\t\t\tfont-size: 1.2rem;\n\t\t}\n\t}\n\n\t&__header {\n\t\tflex: 0 0 auto;\n\t\tcursor: pointer;\n\t}\n\n\t&__body {\n\t\tflex: 1 1 100%;\n\t\toverflow-y: auto;\n\t\tscrollbar-width: none;\n\n\t\t&::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t&__footer {\n\t\tflex: 0 0 auto;\n\t}\n\n\t&__dropdown {\n\t\tdisplay: none;\n\t}\n\n\t&--narrow {\n\t\t// Needed to make the expanded user menu fully visible\n\t\tz-index: 5;\n\t\tflex: 0 0 $narrow-navbar-width;\n\n\t\t.kt-navbar-wrapper {\n\t\t\tflex: 0 0 $narrow-navbar-width;\n\t\t\twidth: $narrow-navbar-width;\n\t\t}\n\n\t\t.kt-navbar__header {\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.kt-navbar__body {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t.kt-navbar__footer {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t:deep(.kt-navbar-menu) {\n\t\t\tpadding: 0.4rem 0.5rem;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t:deep(.kt-navbar-notification) {\n\t\t\tjustify-content: center;\n\t\t\tpadding: 0.8rem 0;\n\t\t}\n\n\t\t:deep(.kt-navbar-notification__number) {\n\t\t\tposition: absolute;\n\t\t\tright: 0.4rem;\n\t\t}\n\n\t\t:deep(.kt-navbar-quick-links) {\n\t\t\tpadding: 0.8rem 0;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t:deep(.kt-navbar-quick-link) {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n@media (width < $size-md) {\n\t.kt-navbar {\n\t\tflex: 0 0 $mobile-navbar-height;\n\t\twidth: auto;\n\t\theight: 2.4rem;\n\t\tmin-height: auto;\n\t\tborder: 0;\n\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t\tflex: 0 0 $mobile-navbar-height;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: space-between;\n\t\t\twidth: 100%;\n\t\t\theight: $mobile-navbar-height;\n\t\t\tpadding: 0;\n\t\t\tborder-bottom: 1px solid var(--kt-navbar-border);\n\t\t}\n\n\t\t&-toggle {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t&__header {\n\t\t\tdisplay: flex;\n\t\t\tflex: 1;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: auto;\n\t\t\tpadding: 0.2rem 0;\n\t\t}\n\n\t\t&__footer {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t&__body {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&__dropdown {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t:deep(.kt-navbar-notification) {\n\t\tdisplay: none;\n\t}\n\n\t:deep(.kt-navbar-notification--mobile) {\n\t\tdisplay: block;\n\t\twidth: 1.2rem;\n\t\theight: 1.2rem;\n\t\tmargin: 0.6rem 0;\n\t\ttext-align: center;\n\t\tborder: 0;\n\t\tborder-radius: 1.2rem;\n\n\t\t.yoco {\n\t\t\tfont-size: 1rem;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtNavbarVue from './KtNavbar.vue'\nimport { KottiNavbar } from './types'\n\nexport const KtNavbar = attachMeta(makeInstallable(KtNavbarVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=133%3A2569',\n\t},\n\tslots: {\n\t\t'navbar-footer': { description: null, scope: null },\n\t\t'navbar-logo': { description: null, scope: null },\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Navbar',\n\t\tschema: KottiNavbar.propsSchema,\n\t},\n})\n","import { z } from 'zod'\n\nexport const validateTotalIsNumber = (value: unknown): value is number => {\n\tconst isNumber = z.number().safeParse(value).success\n\tif (!isNumber) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t`Invalid combination of props for KtPagination:\n\t\t\tThe prop \"total\" may only be null or not provided if the \"flex\" paging style is used`,\n\t\t)\n\t}\n\n\treturn isNumber\n}\n","<template>\n\t<div class=\"inline-container\">\n\t\t<li\n\t\t\tv-for=\"page in pageAmount\"\n\t\t\t:key=\"page\"\n\t\t\t:class=\"paginatorClasses(page)\"\n\t\t\t@click=\"$emit('update:page', page)\"\n\t\t\tv-text=\"page\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { validateTotalIsNumber } from '../utils'\n\nexport default defineComponent({\n\tname: 'PaginationExpanded',\n\tprops: {\n\t\tcurrentPage: { required: true, type: Number },\n\t\tpageSize: { required: true, type: Number },\n\t\ttotal: {\n\t\t\trequired: true,\n\t\t\ttype: Number,\n\t\t\tvalidator: validateTotalIsNumber,\n\t\t},\n\t},\n\temits: ['update:page'],\n\tsetup(props) {\n\t\treturn {\n\t\t\tpageAmount: computed(() => Math.ceil(props.total / props.pageSize)),\n\t\t\tpaginatorClasses: (page: number) => ({\n\t\t\t\t'kt-pagination__page-item': true,\n\t\t\t\t'kt-pagination__page-item--is-active': props.currentPage === page,\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.inline-container {\n\tdisplay: inline;\n}\n</style>\n","<template>\n\t<div class=\"inline-container\" :style=\"containerStyle\">\n\t\t<li\n\t\t\tv-if=\"showFirstPage\"\n\t\t\t:class=\"paginatorClasses(1)\"\n\t\t\t@click=\"$emit('update:page', 1)\"\n\t\t\tv-text=\"1\"\n\t\t/>\n\t\t<li\n\t\t\tv-if=\"showLeftDots\"\n\t\t\tclass=\"c-auto-important kt-pagination__page-item\"\n\t\t\tv-text=\"'…'\"\n\t\t/>\n\t\t<li\n\t\t\tv-for=\"page in neighborValues\"\n\t\t\t:key=\"page\"\n\t\t\t:class=\"paginatorClasses(page)\"\n\t\t\t@click=\"$emit('update:page', page)\"\n\t\t\tv-text=\"page\"\n\t\t/>\n\t\t<li\n\t\t\tv-if=\"showRightDots\"\n\t\t\tclass=\"c-auto-important kt-pagination__page-item\"\n\t\t\tv-text=\"'…'\"\n\t\t/>\n\t\t<li\n\t\t\tv-if=\"showLastPage\"\n\t\t\t:class=\"paginatorClasses(maximumPage)\"\n\t\t\t@click=\"$emit('update:page', maximumPage)\"\n\t\t\tv-text=\"maximumPage\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport range from 'lodash/range.js'\nimport { computed, defineComponent, type PropType } from 'vue'\n\nconst ADJACENT_MULTIPLIER = 20\nconst BASE_NUMBER_WIDTH = 24.5\nconst BASE_OFFSET = 3\nconst MAX_NUMBER_OF_ELEMENTS = 5\nconst PIXEL_MULTIPLIER = 2.8\n\nexport default defineComponent({\n\tname: 'PaginationFlexible',\n\tprops: {\n\t\tadjacentAmount: { required: true, type: Number },\n\t\tcurrentPage: { required: true, type: Number },\n\t\tfixedWidth: { required: true, type: Boolean },\n\t\tmaximumPage: { default: null, type: Number as PropType<number | null> },\n\t},\n\temits: ['update:page'],\n\tsetup(props) {\n\t\tconst pixelMargin = computed(() => {\n\t\t\tconst widestDigit =\n\t\t\t\tprops.maximumPage ?? props.currentPage + props.adjacentAmount\n\t\t\tconst digitWidth = widestDigit.toString().length - 1\n\t\t\tconst numberWidth = BASE_NUMBER_WIDTH + digitWidth * PIXEL_MULTIPLIER\n\t\t\tconst baseElementsWidth =\n\t\t\t\t(2 * props.adjacentAmount + MAX_NUMBER_OF_ELEMENTS) * numberWidth\n\t\t\tconst adjacentPagesOffset = props.adjacentAmount * ADJACENT_MULTIPLIER\n\t\t\treturn baseElementsWidth + BASE_OFFSET * 2 + adjacentPagesOffset\n\t\t})\n\n\t\t/**\n\t\t * Adjusts the page range to eliminate single-page gaps between the first/last page and the ellipsis.\n\t\t * This function effectively \"closes the gap\" when the range of pages around the current page\n\t\t * is just one page away from either the first page (page 1) or the last page.\n\t\t *\n\t\t * For example, this pagination state: 1 … 3 4 5 6 7 … 9\n\t\t * becomes:                            1 2 3 4 5 6 7 8 9\n\t\t *\n\t\t * @param start The starting page number of the range.\n\t\t * @param end The ending page number of the range.\n\t\t * @param maximumPage The total number of pages available.\n\t\t * @returns A new, \"cleaned\" array of page numbers.\n\t\t */\n\t\tconst getCleanRange = (start: number, end: number) => {\n\t\t\tconst { maximumPage } = props\n\t\t\tconst cleanStart = start - 2 <= 1 ? 1 : start\n\t\t\tconst cleanEnd =\n\t\t\t\tmaximumPage !== null && maximumPage - 2 <= end ? maximumPage : end\n\t\t\treturn range(cleanStart, cleanEnd + 1)\n\t\t}\n\n\t\tconst neighborValues = computed(() => {\n\t\t\tconst start = Math.max(1, props.currentPage - props.adjacentAmount)\n\t\t\tconst end = Math.min(\n\t\t\t\tprops.maximumPage ?? Number.MAX_SAFE_INTEGER,\n\t\t\t\tprops.currentPage + props.adjacentAmount,\n\t\t\t)\n\t\t\treturn getCleanRange(start, end)\n\t\t})\n\n\t\tconst showFirstPage = computed(() => !neighborValues.value.includes(1))\n\t\tconst showLastPage = computed(\n\t\t\t() =>\n\t\t\t\tprops.maximumPage !== null &&\n\t\t\t\t!neighborValues.value.includes(props.maximumPage),\n\t\t)\n\n\t\treturn {\n\t\t\tcontainerStyle: computed(\n\t\t\t\t() => props.fixedWidth && { width: `${pixelMargin.value}px` },\n\t\t\t),\n\t\t\tneighborValues,\n\t\t\tpaginatorClasses: (page: number) => ({\n\t\t\t\t'kt-pagination__page-item': true,\n\t\t\t\t'kt-pagination__page-item--is-active': props.currentPage === page,\n\t\t\t}),\n\t\t\tshowFirstPage,\n\t\t\tshowLastPage,\n\t\t\tshowLeftDots: computed(\n\t\t\t\t() => showFirstPage.value && !neighborValues.value.includes(2),\n\t\t\t),\n\t\t\tshowRightDots: computed(\n\t\t\t\t() =>\n\t\t\t\t\tprops.maximumPage === null ||\n\t\t\t\t\t(showLastPage.value &&\n\t\t\t\t\t\t!neighborValues.value.includes(props.maximumPage - 1)),\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.inline-container {\n\tdisplay: inline-flex;\n\tjustify-content: center;\n}\n</style>\n","<template>\n\t<li class=\"kt-pagination__fractionated\" v-text=\"fractionRep\" />\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { validateTotalIsNumber } from '../utils'\n\nexport default defineComponent<{\n\tcurrentPage: number\n\tmaximumPage: number\n}>({\n\tname: 'PaginationFractionated',\n\tprops: {\n\t\tcurrentPage: { required: true, type: Number },\n\t\tmaximumPage: {\n\t\t\trequired: true,\n\t\t\ttype: Number,\n\t\t\tvalidator: validateTotalIsNumber,\n\t\t},\n\t},\n\tsetup(props) {\n\t\treturn {\n\t\t\tfractionRep: computed(\n\t\t\t\t() => `${props.currentPage} / ${props.maximumPage}`,\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-pagination__fractionated {\n\tdisplay: inline-block;\n}\n</style>\n","<template>\n\t<div>\n\t\t<ul class=\"kt-pagination\">\n\t\t\t<li :class=\"paginatorClasses(1)\" @click=\"previousPage\">\n\t\t\t\t<i\n\t\t\t\t\tclass=\"yoco kt-pagination__page-button\"\n\t\t\t\t\tv-text=\"Yoco.Icon.CHEVRON_LEFT\"\n\t\t\t\t/>\n\t\t\t</li>\n\t\t\t<component\n\t\t\t\t:is=\"paginationComponent\"\n\t\t\t\tv-bind=\"paginationProps\"\n\t\t\t\t@update:page=\"setCurrentPage($event)\"\n\t\t\t/>\n\t\t\t<li :class=\"paginatorClasses(pageAmount)\" @click=\"nextPage\">\n\t\t\t\t<i\n\t\t\t\t\tclass=\"yoco kt-pagination__page-button\"\n\t\t\t\t\tv-text=\"Yoco.Icon.CHEVRON_RIGHT\"\n\t\t\t\t/>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { makeProps } from '../make-props'\n\nimport PaginationExpanded from './components/PaginationExpanded.vue'\nimport PaginationFlexible from './components/PaginationFlexible.vue'\nimport PaginationFractionated from './components/PaginationFractionated.vue'\nimport { KottiPagination } from './types'\n\nexport default defineComponent({\n\tname: 'KtPagination',\n\tcomponents: {\n\t\tPaginationExpanded,\n\t\tPaginationFlexible,\n\t\tPaginationFractionated,\n\t},\n\tprops: makeProps(KottiPagination.propsSchema),\n\temits: ['update:page'],\n\tsetup(props, { emit }) {\n\t\tconst pageAmount = computed(() =>\n\t\t\tprops.total === null ? null : Math.ceil(props.total / props.pageSize),\n\t\t)\n\n\t\treturn {\n\t\t\tnextPage: () => {\n\t\t\t\tif (pageAmount.value !== null && props.page >= pageAmount.value) return\n\t\t\t\temit('update:page', props.page + 1)\n\t\t\t},\n\t\t\tpageAmount,\n\t\t\tpaginationComponent: computed(() => {\n\t\t\t\tswitch (props.pagingStyle) {\n\t\t\t\t\tcase KottiPagination.PagingStyle.FLEX:\n\t\t\t\t\t\treturn pageAmount.value !== null &&\n\t\t\t\t\t\t\t(2 * (props.adjacentAmount + 1) >= pageAmount.value ||\n\t\t\t\t\t\t\t\tpageAmount.value < 2)\n\t\t\t\t\t\t\t? PaginationExpanded.name\n\t\t\t\t\t\t\t: PaginationFlexible.name\n\t\t\t\t\tcase KottiPagination.PagingStyle.FRACTION:\n\t\t\t\t\t\treturn PaginationFractionated.name\n\t\t\t\t\tcase KottiPagination.PagingStyle.EXPAND:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn PaginationExpanded.name\n\t\t\t\t}\n\t\t\t}),\n\t\t\tpaginationProps: computed(() => ({\n\t\t\t\tadjacentAmount: props.adjacentAmount,\n\t\t\t\tcurrentPage: props.page,\n\t\t\t\tfixedWidth: props.fixedWidth,\n\t\t\t\tmaximumPage: pageAmount.value,\n\t\t\t\tpageSize: props.pageSize,\n\t\t\t\ttotal: props.total,\n\t\t\t})),\n\t\t\tpaginatorClasses: (page: number) => ({\n\t\t\t\t'kt-pagination__page-item': true,\n\t\t\t\t'kt-pagination__page-item--is-disabled': props.page === page,\n\t\t\t}),\n\t\t\tpreviousPage: () => {\n\t\t\t\tif (props.page === 1) return\n\t\t\t\temit('update:page', props.page - 1)\n\t\t\t},\n\t\t\tsetCurrentPage: (page: number) => {\n\t\t\t\tif (page === props.page) return\n\t\t\t\temit('update:page', page)\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-style/_variables';\n\n:root {\n\t--kt-pagination-color-active: var(--interactive-03);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.kt-pagination {\n\tmargin: 0;\n\tuser-select: none;\n\tlist-style: none;\n\n\t&__page-button {\n\t\tdisplay: inline-block;\n\t\tpadding: var(--unit-1);\n\t\tbackground: var(--ui-01);\n\t\tborder-radius: var(--border-radius);\n\n\t\t&:hover {\n\t\t\tcursor: pointer;\n\t\t\tbackground: var(--ui-02);\n\t\t}\n\t}\n\n\t:deep(.kt-pagination__page-item--is-active) {\n\t\tcolor: var(--kt-pagination-color-active);\n\t}\n\n\t:deep(.kt-pagination__page-item--is-disabled) {\n\t\tcursor: not-allowed;\n\n\t\t.kt-pagination__page-button {\n\t\t\topacity: 0.46;\n\t\t}\n\t}\n\n\t:deep(.kt-pagination__page-item) {\n\t\tdisplay: inline-block;\n\t\tpadding: var(--unit-2);\n\t\tline-height: 24px;\n\t\ttext-align: center;\n\n\t\t&:hover {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t.disabled {\n\t\tcursor: not-allowed;\n\n\t\t.page-button {\n\t\t\topacity: 0.46;\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtPaginationVue from './KtPagination.vue'\nimport { KottiPagination } from './types'\n\nexport const KtPagination = attachMeta(makeInstallable(KtPaginationVue), {\n\taddedVersion: '0.0.6',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=101%3A1106',\n\t},\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'KottiPagination',\n\t\tschema: KottiPagination.propsSchema,\n\t},\n})\n","<template>\n\t<slot />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, provide } from 'vue'\n\nimport { KT_IS_IN_POPOVER } from '../constants'\n\nexport default defineComponent({\n\tname: 'ContextEscapeWrapper',\n\tsetup() {\n\t\t/**\n\t\t * For nested popovers/tooltips, we don't want to stay\n\t\t * inside the same CSS stacking context.\n\t\t */\n\t\tprovide(KT_IS_IN_POPOVER, false)\n\n\t\treturn {}\n\t},\n})\n</script>\n","<template>\n\t<div ref=\"triggerRef\">\n\t\t<MenuOptionItem\n\t\t\tv-bind=\"{ isActive, isClickable, isDisabled }\"\n\t\t\tclass=\"kt-popover-options-item\"\n\t\t\t:data-test=\"dataTest\"\n\t\t\t:tabindex=\"isDisabled || !isClickable ? -1 : 0\"\n\t\t\t@click.stop=\"onClick\"\n\t\t>\n\t\t\t<slot name=\"option\">\n\t\t\t\t<i v-if=\"icon\" class=\"yoco\" v-text=\"icon\" />\n\t\t\t\t<div v-if=\"label\" v-text=\"label\" />\n\t\t\t</slot>\n\t\t</MenuOptionItem>\n\t\t<div v-if=\"tooltip\" ref=\"contentRef\">\n\t\t\t<span v-text=\"tooltip\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../../constants'\nimport { makeProps } from '../../make-props'\nimport MenuOptionItem from '../../shared-components/menu-option/MenuOptionItem.vue'\nimport { IconTextItem } from '../types'\n\nexport default defineComponent({\n\tname: 'IconTextItem',\n\tcomponents: {\n\t\tMenuOptionItem,\n\t},\n\tprops: makeProps(IconTextItem.propsSchema),\n\temits: ['click'],\n\tsetup(props, { emit }) {\n\t\tconst triggerRef = ref<HTMLElement | null>(null)\n\t\tconst contentRef = ref<HTMLElement | null>(null)\n\n\t\tuseTippy(\n\t\t\ttriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: contentRef.value ?? undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\tplacement: 'auto',\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t\t...(props.tooltip\n\t\t\t\t\t? { trigger: 'mouseenter focusin' }\n\t\t\t\t\t: { trigger: 'manual' }),\n\t\t\t})),\n\t\t)\n\n\t\treturn {\n\t\t\tcontentRef,\n\t\t\tonClick: (event: MouseEvent) => {\n\t\t\t\temit('click', event)\n\t\t\t},\n\t\t\ttriggerRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-popover-options-item {\n\tdisplay: flex;\n\talign-items: center;\n\tuser-select: none;\n\n\t.yoco {\n\t\tfont-size: 1rem;\n\t}\n\n\t> *:not(:first-child) {\n\t\tmargin-left: var(--unit-1);\n\t}\n}\n</style>\n","<template>\n\t<div class=\"kt-popover\">\n\t\t<div ref=\"triggerRef\" tabindex=\"0\">\n\t\t\t<slot :showPopover=\"showPopover\" />\n\t\t\t<ContextEscapeWrapper v-if=\"$slots.contextEscapeSlot\">\n\t\t\t\t<slot name=\"contextEscapeSlot\" :showPopover=\"showPopover\" />\n\t\t\t</ContextEscapeWrapper>\n\t\t</div>\n\t\t<div ref=\"contentRef\" :class=\"contentClass\">\n\t\t\t<slot :close=\"close\" name=\"content\">\n\t\t\t\t<IconTextItem\n\t\t\t\t\tv-for=\"(option, index) in options\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t:dataTest=\"option.dataTest\"\n\t\t\t\t\t:icon=\"option.icon\"\n\t\t\t\t\t:isActive=\"option.isActive || option.isSelected\"\n\t\t\t\t\t:isClickable=\"option.onClick !== undefined\"\n\t\t\t\t\t:isDisabled=\"option.isDisabled\"\n\t\t\t\t\t:label=\"option.label\"\n\t\t\t\t\t:tooltip=\"option.tooltip\"\n\t\t\t\t\t@click=\"handleItemClick(option)\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"areOptionsSelectable\" #option>\n\t\t\t\t\t\t<KtFieldToggle\n\t\t\t\t\t\t\t:dataTest=\"option.dataTest\"\n\t\t\t\t\t\t\t:formKey=\"formKey\"\n\t\t\t\t\t\t\t:isDisabled=\"option.isDisabled\"\n\t\t\t\t\t\t\t:isOptional=\"option.isOptional\"\n\t\t\t\t\t\t\t:modelValue=\"option.isSelected\"\n\t\t\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t\t\t(value) => handleItemSelection({ index, option, value })\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span v-text=\"option.label\" />\n\t\t\t\t\t\t</KtFieldToggle>\n\t\t\t\t\t</template>\n\t\t\t\t</IconTextItem>\n\t\t\t</slot>\n\t\t\t<ContextEscapeWrapper v-if=\"$slots.contextEscapeContent\">\n\t\t\t\t<slot :close=\"close\" name=\"contextEscapeContent\" />\n\t\t\t</ContextEscapeWrapper>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport castArray from 'lodash/castArray.js'\nimport type { Props as TippyProps } from 'tippy.js'\nimport {\n\tcomputed,\n\tdefineComponent,\n\tinject,\n\tonMounted,\n\tprovide,\n\tref,\n\twatch,\n} from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { TIPPY_DISTANCE_OFFSET } from '../constants'\nimport { KtFieldToggle } from '../kotti-field-toggle'\nimport { KT_FORM_CONTEXT } from '../kotti-form'\nimport type { KottiForm } from '../kotti-form/types'\nimport { makeProps } from '../make-props'\nimport { sameWidthOrStyled } from '../utilities/tippy'\n\nimport ContextEscapeWrapper from './components/ContextEscapeWrapper.vue'\nimport IconTextItem from './components/IconTextItem.vue'\nimport { KT_IS_IN_POPOVER } from './constants'\nimport { KottiPopover } from './types'\n\nconst TRIGGER_MAP: Record<KottiPopover.Trigger, TippyProps['trigger']> = {\n\t[KottiPopover.Trigger.CLICK]: 'click focusin',\n\t[KottiPopover.Trigger.HOVER]: 'mouseenter focusin',\n\t[KottiPopover.Trigger.MANUAL]: 'manual',\n}\n\nexport default defineComponent({\n\tname: 'KtPopover',\n\tcomponents: {\n\t\tContextEscapeWrapper,\n\t\tIconTextItem,\n\t\tKtFieldToggle,\n\t},\n\tprops: makeProps(KottiPopover.propsSchema),\n\temits: ['hide', 'update:isSelected'],\n\tsetup(props, { emit }) {\n\t\tconst triggerRef = ref<HTMLElement | null>(null)\n\t\tconst contentRef = ref<HTMLElement | null>(null)\n\n\t\tconst showPopover = ref(false)\n\n\t\tconst formContext = inject<KottiForm.Context | null>(KT_FORM_CONTEXT, null)\n\n\t\tonMounted(() => {\n\t\t\tif (contentRef.value === null)\n\t\t\t\tthrow new Error('KtPopover: Unbound `contentRef` for tippy: null')\n\t\t})\n\n\t\twatch(\n\t\t\ttriggerRef,\n\t\t\t(newRef) => {\n\t\t\t\tif (newRef) {\n\t\t\t\t\tnewRef.addEventListener('focus', () => {\n\t\t\t\t\t\tconst childrenArray = Array.from(newRef.children)\n\n\t\t\t\t\t\tif (childrenArray.length > 0) {\n\t\t\t\t\t\t\tconst focusableChildIndex = childrenArray.findIndex((child) => {\n\t\t\t\t\t\t\t\tif (child instanceof HTMLElement) child.focus()\n\n\t\t\t\t\t\t\t\treturn document.activeElement === child\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tif (focusableChildIndex !== -1) {\n\t\t\t\t\t\t\t\tnewRef.setAttribute('tabIndex', '-1')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ flush: 'post' },\n\t\t)\n\n\t\t/**\n\t\t * expose to children that they are inside a popover\n\t\t */\n\t\tprovide(KT_IS_IN_POPOVER, true)\n\n\t\tconst { tippy } = useTippy(\n\t\t\ttriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () => document.body,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: contentRef.value ?? undefined,\n\t\t\t\t/**\n\t\t\t\t * @see {@link https://atomiks.github.io/tippyjs/v6/all-props/#hideonclick}\n\t\t\t\t */\n\t\t\t\thideOnClick: false,\n\t\t\t\tinteractive: true,\n\t\t\t\tmaxWidth: 'none',\n\t\t\t\toffset: [0, TIPPY_DISTANCE_OFFSET],\n\t\t\t\tonClickOutside: () => {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\t\tif (props.trigger !== KottiPopover.Trigger.MANUAL) close()\n\t\t\t\t},\n\t\t\t\tonHide: () => {\n\t\t\t\t\tshowPopover.value = false\n\t\t\t\t\temit('hide')\n\t\t\t\t},\n\t\t\t\tonShow: () => {\n\t\t\t\t\tif (!props.isDisabled) showPopover.value = true\n\t\t\t\t\telse return false\n\t\t\t\t},\n\t\t\t\tonUntrigger: () => {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\t\tclose()\n\t\t\t\t},\n\t\t\t\tplacement: props.placement,\n\t\t\t\tpopperOptions: {\n\t\t\t\t\tmodifiers:\n\t\t\t\t\t\tprops.size === 'sameAsTrigger' ? [sameWidthOrStyled()] : [],\n\t\t\t\t},\n\t\t\t\ttheme: 'kt-light-border',\n\t\t\t\ttrigger: TRIGGER_MAP[props.trigger],\n\t\t\t})),\n\t\t)\n\n\t\tconst setIsShown = (showTippy: boolean) => {\n\t\t\tif (tippy.value === null) return\n\n\t\t\tconst tippys = castArray(tippy.value)\n\n\t\t\tfor (const tippy of tippys) {\n\t\t\t\tif (showTippy) tippy.show()\n\t\t\t\telse tippy.hide()\n\t\t\t}\n\t\t}\n\n\t\tconst close = () => {\n\t\t\tsetIsShown(false)\n\t\t}\n\t\tconst open = () => {\n\t\t\tsetIsShown(true)\n\t\t}\n\n\t\treturn {\n\t\t\tclose,\n\t\t\tcontentClass: computed(() => {\n\t\t\t\tconst classes = ['kt-popover__content']\n\n\t\t\t\tif (props.size !== 'sameAsTrigger')\n\t\t\t\t\tclasses.push(`kt-popover__content--size-${props.size}`)\n\n\t\t\t\tif (props.options.length > 0)\n\t\t\t\t\tclasses.push(`kt-popover__content--has-options`)\n\n\t\t\t\treturn classes\n\t\t\t}),\n\t\t\tcontentRef,\n\t\t\tformKey: computed(() => (formContext === null ? null : 'NONE')),\n\t\t\thandleItemClick: (option: KottiPopover.PropsInternal['options'][0]) => {\n\t\t\t\tif (!option.isDisabled && option.onClick) {\n\t\t\t\t\toption.onClick()\n\t\t\t\t\tclose()\n\t\t\t\t}\n\t\t\t},\n\t\t\thandleItemSelection: ({\n\t\t\t\tindex,\n\t\t\t\toption,\n\t\t\t\tvalue,\n\t\t\t}: KottiPopover.Events.UpdateIsSelected) => {\n\t\t\t\temit('update:isSelected', {\n\t\t\t\t\tindex,\n\t\t\t\t\toption,\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t},\n\t\t\topen,\n\t\t\tshowPopover,\n\t\t\ttriggerRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n@import '../kotti-field/templates';\n\n.kt-popover {\n\tdisplay: inline-block;\n\n\t> div {\n\t\t@extend %no-outline;\n\t}\n\n\t&__content {\n\t\t&--size {\n\t\t\t&-auto {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-sm {\n\t\t\t\twidth: 12rem;\n\t\t\t}\n\n\t\t\t&-md {\n\t\t\t\twidth: 16rem;\n\t\t\t}\n\n\t\t\t&-lg {\n\t\t\t\twidth: 20rem;\n\t\t\t}\n\n\t\t\t&-xl {\n\t\t\t\twidth: 24rem;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtPopoverVue from './KtPopover.vue'\nimport { KottiPopover } from './types'\n\nexport const KtPopover = attachMeta(makeInstallable(KtPopoverVue), {\n\taddedVersion: '0.0.8',\n\tdeprecated: null,\n\tdesigns: [\n\t\t{\n\t\t\ttitle: 'Simple',\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=118%3A35',\n\t\t},\n\t\t{\n\t\t\ttitle: 'With Items',\n\t\t\ttype: MetaDesignType.FIGMA,\n\t\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=95%3A552',\n\t\t},\n\t],\n\tslots: {\n\t\tcontent: {\n\t\t\tdescription: 'Slot for the content of the popper.',\n\t\t\tscope: {\n\t\t\t\tclose: {\n\t\t\t\t\tdescription: 'closes the popover',\n\t\t\t\t\ttype: 'function',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tdescription: 'Slot for the trigger element',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Popover',\n\t\tschema: KottiPopover.propsSchema,\n\t},\n})\n","import type { PropType } from 'vue'\nimport { computed, defineComponent, h, provide } from 'vue'\n\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport { KT_ROW_CONTEXT } from './constants'\nimport { KottiRow } from './types'\n\nexport const KtRow = attachMeta(\n\tmakeInstallable(\n\t\tdefineComponent({\n\t\t\tname: 'KtRow',\n\t\t\tprops: {\n\t\t\t\talign: {\n\t\t\t\t\tdefault: KottiRow.Align.TOP,\n\t\t\t\t\ttype: String as PropType<KottiRow.Align>,\n\t\t\t\t},\n\t\t\t\tgap: { default: 0, type: Number },\n\t\t\t\tgutter: { default: 16, type: Number },\n\t\t\t\tjustify: {\n\t\t\t\t\tdefault: KottiRow.Justify.START,\n\t\t\t\t\ttype: String as PropType<KottiRow.Justify>,\n\t\t\t\t},\n\t\t\t\ttag: { default: 'div', type: String },\n\t\t\t},\n\t\t\tsetup(props, { slots }) {\n\t\t\t\tconst style = computed(() =>\n\t\t\t\t\tprops.gutter\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tmarginLeft: `-${String(props.gutter / 2)}px`,\n\t\t\t\t\t\t\t\tmarginRight: `-${String(props.gutter / 2)}px`,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {},\n\t\t\t\t)\n\n\t\t\t\tprovide<KottiRow.Context>(KT_ROW_CONTEXT, {\n\t\t\t\t\tgap: computed(() => props.gap),\n\t\t\t\t\tgutter: computed(() => props.gutter),\n\t\t\t\t})\n\n\t\t\t\treturn () =>\n\t\t\t\t\th(\n\t\t\t\t\t\tprops.tag,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclass: [\n\t\t\t\t\t\t\t\t'kt-row',\n\t\t\t\t\t\t\t\tprops.justify !== KottiRow.Justify.START\n\t\t\t\t\t\t\t\t\t? `kt-row--justify-${props.justify}`\n\t\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\t\tprops.align !== KottiRow.Align.TOP\n\t\t\t\t\t\t\t\t\t? `kt-row--align-${props.align}`\n\t\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tstyle: style.value,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tslots.default?.(),\n\t\t\t\t\t)\n\t\t\t},\n\t\t}),\n\t),\n\t{\n\t\taddedVersion: '0.0.1',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {\n\t\t\tdefault: { description: 'Should contain KtCols', scope: null },\n\t\t},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.Row',\n\t\t\tschema: null,\n\t\t},\n\t},\n)\n","<template>\n\t<KtFieldText\n\t\tclass=\"search-input\"\n\t\t:dataTest=\"dataTest\"\n\t\t:isLoading=\"isLoading\"\n\t\tisOptional\n\t\t:leftIcon=\"Yoco.Icon.SEARCH\"\n\t\t:modelValue=\"internalValue\"\n\t\t:placeholder=\"placeholder\"\n\t\t:size=\"size\"\n\t\t@update:modelValue=\"onInput\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport debounce from 'lodash/debounce.js'\nimport type { PropType } from 'vue'\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { DEFAULT_DEBOUNCE } from '../../constants'\nimport KtFieldText from '../../kotti-field-text/KtFieldText.vue'\nimport type { KottiFieldText } from '../../kotti-field-text/types'\nimport { KottiField } from '../../kotti-field/types'\n\nexport default defineComponent({\n\tname: 'SearchInput',\n\tcomponents: {\n\t\tKtFieldText,\n\t},\n\tprops: {\n\t\tdataTest: { required: false, type: String },\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: { default: null, type: String },\n\t\tplaceholder: { required: false, type: String },\n\t\tsize: {\n\t\t\tdefault: KottiField.Size.MEDIUM,\n\t\t\ttype: String as PropType<KottiField.Size>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst internalValue = ref<KottiFieldText.ModelValue>(null)\n\n\t\tconst emitValue = debounce(() => {\n\t\t\temit('update:modelValue', internalValue.value)\n\t\t}, DEFAULT_DEBOUNCE)\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tinternalValue.value = newValue\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tinternalValue,\n\t\t\tonInput: (value: KottiFieldText.ModelValue) => {\n\t\t\t\tinternalValue.value = value\n\t\t\t\temitValue()\n\t\t\t},\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.search-input {\n\tmargin-bottom: 0;\n}\n</style>\n","<template>\n\t<KtPopover\n\t\tv-if=\"categories && categories.length > 0\"\n\t\t:isDisabled=\"isDisabled || isLoading\"\n\t\t:size=\"size\"\n\t\ttrigger=\"click\"\n\t\t@hide=\"handlePopoverHide\"\n\t>\n\t\t<KtButton\n\t\t\t:data-test=\"dataTest ? `${dataTest}-button` : 'kt-column-selector-button'\"\n\t\t\t:disabled=\"isDisabled || isLoading\"\n\t\t\t:icon=\"Yoco.Icon.CHEVRON_DOWN\"\n\t\t\ticonPosition=\"right\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:label=\"label ?? translations.columns\"\n\t\t/>\n\t\t<template #content>\n\t\t\t<div class=\"kt-column-selector\">\n\t\t\t\t<div class=\"kt-column-selector__header\">\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tv-if=\"canSearchColumn\"\n\t\t\t\t\t\tv-model=\"searchQuery\"\n\t\t\t\t\t\t:dataTest=\"\n\t\t\t\t\t\t\tdataTest\n\t\t\t\t\t\t\t\t? `${dataTest}-search-input`\n\t\t\t\t\t\t\t\t: 'kt-column-selector-search-input'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t\t\t:placeholder=\"translations.searchColumn\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<ScrollableContainer class=\"kt-column-selector__content\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"selectedOptions.length > 0\"\n\t\t\t\t\t\tclass=\"kt-column-selector__category-header\"\n\t\t\t\t\t\tv-text=\"translations.visibleColumns\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div\n\t\t\t\t\t\t@dragend=\"handleDragEnd\"\n\t\t\t\t\t\t@dragleave=\"handleDragLeave\"\n\t\t\t\t\t\t@drop=\"handleDrop\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<MenuOptionItem\n\t\t\t\t\t\t\tv-for=\"option in selectedOptions\"\n\t\t\t\t\t\t\t:key=\"option.key\"\n\t\t\t\t\t\t\tclass=\"kt-column-selector__category-item\"\n\t\t\t\t\t\t\t:draggable=\"canChangeColumnOrder\"\n\t\t\t\t\t\t\t@dragenter.prevent\n\t\t\t\t\t\t\t@dragleave.prevent\n\t\t\t\t\t\t\t@dragover.prevent=\"(e) => handleDragOver(e, option.key)\"\n\t\t\t\t\t\t\t@dragstart=\"(e) => handleDragStart(e, option.key)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<KtFieldToggle\n\t\t\t\t\t\t\t\tclass=\"kt-column-selector__category-item-toggle\"\n\t\t\t\t\t\t\t\tisOptional\n\t\t\t\t\t\t\t\t:modelValue=\"true\"\n\t\t\t\t\t\t\t\t@update:modelValue=\"removeOption(option.key)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span v-text=\"option.label\" />\n\t\t\t\t\t\t\t</KtFieldToggle>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"canChangeColumnOrder\"\n\t\t\t\t\t\t\t\tclass=\"kt-column-selector__category-item-drag-handle\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<i class=\"yoco narrow\">dots_vertical</i>\n\t\t\t\t\t\t\t\t<i class=\"yoco\">dots_vertical</i>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</MenuOptionItem>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<template v-for=\"(category, index) in cleanedCategories\" :key=\"index\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"kt-column-selector__category-header\"\n\t\t\t\t\t\t\tv-text=\"category.label\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<MenuOptionItem\n\t\t\t\t\t\t\tv-for=\"option in category.options\"\n\t\t\t\t\t\t\t:key=\"option.key\"\n\t\t\t\t\t\t\tclass=\"kt-column-selector__category-item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<KtFieldToggle\n\t\t\t\t\t\t\t\tisOptional\n\t\t\t\t\t\t\t\t:modelValue=\"false\"\n\t\t\t\t\t\t\t\t@update:modelValue=\"addOption(option.key)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span v-text=\"option.label\" />\n\t\t\t\t\t\t\t</KtFieldToggle>\n\t\t\t\t\t\t</MenuOptionItem>\n\t\t\t\t\t</template>\n\t\t\t\t</ScrollableContainer>\n\n\t\t\t\t<div v-if=\"$slots.footer\" class=\"kt-column-selector__footer\">\n\t\t\t\t\t<slot name=\"footer\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtPopover>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport KtButton from '../kotti-button/KtButton.vue'\nimport KtFieldToggle from '../kotti-field-toggle/KtFieldToggle.vue'\nimport { useI18nContext, useTranslationNamespace } from '../kotti-i18n/hooks'\nimport KtPopover from '../kotti-popover/KtPopover.vue'\nimport { makeProps } from '../make-props'\nimport MenuOptionItem from '../shared-components/menu-option/MenuOptionItem.vue'\nimport ScrollableContainer from '../shared-components/ScrollableContainer.vue'\n\nimport SearchInput from './components/SearchInput.vue'\nimport { KottiColumnSelector } from './types'\n\nconst TRANSFER_TYPE = 'application/move-column'\nconst isColumnMoveDataTransfer = (event: DragEvent): boolean => {\n\treturn event.dataTransfer?.types.includes(TRANSFER_TYPE) ?? false\n}\n\nexport default defineComponent({\n\tname: 'KtColumnSelector',\n\tcomponents: {\n\t\tKtButton,\n\t\tKtFieldToggle,\n\t\tKtPopover,\n\t\tMenuOptionItem,\n\t\tScrollableContainer,\n\t\tSearchInput,\n\t},\n\tprops: makeProps(KottiColumnSelector.propsSchema),\n\temits: {\n\t\tshowAll: () => true,\n\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t'update:selection': (_selection: string[]) => true,\n\t},\n\tsetup(props, { emit }) {\n\t\tconst i18nContext = useI18nContext()\n\t\tconst translations = useTranslationNamespace('KtColumnSelector')\n\n\t\tconst searchQuery = ref<string | null>(null)\n\t\tconst selectedOptions = ref<KottiColumnSelector.Option[]>([])\n\n\t\tconst draggedColumnId = ref<string | null>(null)\n\t\tconst targetColumnId = ref<string | null>(null)\n\n\t\tconst optionKeyMap = computed(\n\t\t\t() =>\n\t\t\t\tnew Map(\n\t\t\t\t\tprops.categories\n\t\t\t\t\t\t.flatMap((category) => category.options)\n\t\t\t\t\t\t.map((option) => [option.key, option.label]),\n\t\t\t\t),\n\t\t)\n\n\t\twatch(\n\t\t\t() => props.selection,\n\t\t\t(selection) => {\n\t\t\t\tselectedOptions.value = []\n\t\t\t\tconst errors: string[] = []\n\n\t\t\t\tfor (const optionKey of selection) {\n\t\t\t\t\tconst label = optionKeyMap.value.get(optionKey)\n\n\t\t\t\t\tif (label === undefined) {\n\t\t\t\t\t\terrors.push(optionKey)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectedOptions.value.push({ key: optionKey, label })\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t// Sync and report if props.selection included keys that are not found\n\t\t\t\t\t// any option within props.categories\n\t\t\t\t\temit(\n\t\t\t\t\t\t'update:selection',\n\t\t\t\t\t\tselectedOptions.value.map(({ key }) => key),\n\t\t\t\t\t)\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`KtColumnSelector: Removed unknown selections: ${errors.join(', ')}`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\taddOption: (optionKey: string) => {\n\t\t\t\temit('update:selection', [...props.selection, optionKey])\n\t\t\t},\n\t\t\tcleanedCategories: computed(() => {\n\t\t\t\tconst collator = new Intl.Collator(i18nContext.locale, {\n\t\t\t\t\tnumeric: true,\n\t\t\t\t\tsensitivity: 'base',\n\t\t\t\t})\n\n\t\t\t\treturn props.categories\n\t\t\t\t\t.map((category) => ({\n\t\t\t\t\t\t...category,\n\t\t\t\t\t\tlabel: category.label ?? translations.value.availableColumns,\n\t\t\t\t\t\toptions: category.options\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t({ key, label }) =>\n\t\t\t\t\t\t\t\t\t!props.selection.includes(key) &&\n\t\t\t\t\t\t\t\t\t(!searchQuery.value ||\n\t\t\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t\t.includes(searchQuery.value.toLowerCase())),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.sort((a, b) => collator.compare(a.label, b.label)),\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((category) => category.options.length > 0)\n\t\t\t}),\n\t\t\thandleDragEnd: () => {\n\t\t\t\tdraggedColumnId.value = null\n\t\t\t\ttargetColumnId.value = null\n\t\t\t},\n\t\t\thandleDragLeave: () => {\n\t\t\t\ttargetColumnId.value = null\n\t\t\t},\n\t\t\thandleDragOver: (event: DragEvent, columnKey: string) => {\n\t\t\t\tif (!isColumnMoveDataTransfer(event)) return\n\t\t\t\ttargetColumnId.value = columnKey\n\t\t\t},\n\t\t\thandleDragStart: (event: DragEvent, columnKey: string) => {\n\t\t\t\tevent.dataTransfer?.setData(TRANSFER_TYPE, '')\n\t\t\t\tdraggedColumnId.value = columnKey\n\t\t\t},\n\t\t\thandleDrop: () => {\n\t\t\t\tif (draggedColumnId.value === null || targetColumnId.value === null)\n\t\t\t\t\treturn\n\t\t\t\tconst fromIndex = props.selection.indexOf(draggedColumnId.value)\n\t\t\t\tconst toIndex = props.selection.indexOf(targetColumnId.value)\n\n\t\t\t\tconst newOrder = [...props.selection]\n\t\t\t\tconst extract = newOrder.splice(fromIndex, 1)\n\t\t\t\tnewOrder.splice(toIndex, 0, ...extract)\n\t\t\t\temit('update:selection', newOrder)\n\t\t\t},\n\t\t\thandlePopoverHide: () => {\n\t\t\t\tsearchQuery.value = null\n\t\t\t},\n\t\t\tremoveOption: (optionKey: string) => {\n\t\t\t\temit(\n\t\t\t\t\t'update:selection',\n\t\t\t\t\tprops.selection.filter((key) => key !== optionKey),\n\t\t\t\t)\n\t\t\t},\n\t\t\tsearchQuery,\n\t\t\tselectedOptions: computed(() =>\n\t\t\t\tselectedOptions.value.filter(({ label }) =>\n\t\t\t\t\tsearchQuery.value\n\t\t\t\t\t\t? label.toLowerCase().includes(searchQuery.value.toLowerCase())\n\t\t\t\t\t\t: true,\n\t\t\t\t),\n\t\t\t),\n\t\t\ttranslations,\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-column-selector {\n\t// KtPopover padding reset\n\tmargin: calc(-1 * var(--unit-2));\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmax-height: 40vh;\n\n\t\t:deep(.scrollable-container__content) {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&__footer {\n\t\tpadding: var(--unit-2);\n\t\ttext-align: end;\n\t}\n\n\t&__header {\n\t\tpadding: var(--unit-2);\n\t}\n\n\t&__category-header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: 22px;\n\t\tpadding: var(--unit-1) var(--unit-2);\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\tline-height: 18px;\n\t\tcolor: var(--text-02);\n\t\tbackground-color: var(--ui-01);\n\t}\n\n\t&__category-item {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-3);\n\t\tjustify-content: space-between;\n\t\tpadding: var(--unit-2) var(--unit-3);\n\n\t\t:deep(.kt-field__header--is-suffix) {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t:deep(.kt-field-toggle),\n\t\t:deep(.kt-field-toggle-inner) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t&__category-item-drag-handle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcursor: grab;\n\n\t\t.yoco {\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t.yoco.narrow {\n\t\t\t// bring the dots closer to each other\n\t\t\tletter-spacing: -8px;\n\t\t}\n\t}\n\n\t&__category-item-toggle {\n\t\tmargin: 0;\n\t}\n}\n</style>\n","import type { Table, VisibilityState } from '@tanstack/table-core'\nimport { inject, provide, type Ref } from 'vue'\n\nimport type { GetRowBehavior, KottiTable } from './types'\n\nexport type TableContext<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n> = Ref<{\n\tinternal: {\n\t\tcolumnOrder: COLUMN_ID[]\n\t\tgetColumnIndex: (columnId: COLUMN_ID) => number\n\t\tgetOrdering: () => KottiTable.Ordering[]\n\t\tgetRowBehavior: GetRowBehavior<ROW>\n\t\thasDragAndDrop: boolean\n\t\tisExpandable: boolean\n\t\tselectionCount: number\n\t\tswapDraggedAndDropTarget: (\n\t\t\tdraggedColumnId: COLUMN_ID,\n\t\t\ttargetIndex: number,\n\t\t) => void\n\t\ttable: Table<ROW>\n\t\ttriggerExpand: (rowId: string) => void\n\t\tunselectAllRows: () => void\n\t\tvisibleColumns: VisibilityState\n\t}\n}>\n\nconst getTableContextKey = (id: string): string => `kt-table-${id}`\n\nexport const useProvideTableContext = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>(\n\tid: string,\n\ttableContext: TableContext<ROW, COLUMN_ID>,\n): void => {\n\tprovide<TableContext<ROW, COLUMN_ID>>(getTableContextKey(id), tableContext)\n}\n\nexport const useTableContext = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>(\n\tid: string,\n): TableContext<ROW, COLUMN_ID> => {\n\tconst context = inject<TableContext<ROW, COLUMN_ID>>(getTableContextKey(id))\n\n\tif (!context) throw new Error(`KtTable: could not find context for “${id}”`)\n\n\treturn context\n}\n","import type { Ref, WritableComputedRef } from 'vue'\nimport { computed } from 'vue'\n\nexport type ReactStyleUpdater<INTERNAL_VALUE> = (\n\tupdater: INTERNAL_VALUE | ((prevState: INTERNAL_VALUE) => INTERNAL_VALUE),\n) => void\n\ntype Other<INTERNAL_VALUE> = {\n\trecalculate: () => void\n\ttanstackGetter: () => INTERNAL_VALUE\n\ttanstackSetter: ReactStyleUpdater<INTERNAL_VALUE>\n}\n\ntype Options<INTERNAL_VALUE, EXTERNAL_VALUE> = {\n\tget(value: INTERNAL_VALUE): EXTERNAL_VALUE\n\tset(oldValue: EXTERNAL_VALUE): INTERNAL_VALUE\n\tsync?(oldValue: INTERNAL_VALUE): INTERNAL_VALUE\n\tvalue: Ref<INTERNAL_VALUE>\n}\n\nexport const useComputedRef = <INTERNAL_VALUE, EXTERNAL_VALUE = INTERNAL_VALUE>(\n\toptions: Options<INTERNAL_VALUE, EXTERNAL_VALUE>,\n): Other<INTERNAL_VALUE> & WritableComputedRef<EXTERNAL_VALUE> => {\n\tconst internalValue = options.value\n\n\tconst result = computed({\n\t\tget(): EXTERNAL_VALUE {\n\t\t\treturn options.get(internalValue.value)\n\t\t},\n\t\tset(external: EXTERNAL_VALUE): void {\n\t\t\tinternalValue.value = options.set(external)\n\t\t},\n\t}) as Partial<Other<INTERNAL_VALUE>> & WritableComputedRef<EXTERNAL_VALUE>\n\n\tresult.recalculate = () => {\n\t\tif (!options.sync) return\n\t\tinternalValue.value = options.sync(internalValue.value)\n\t}\n\tresult.tanstackGetter = () => internalValue.value\n\tresult.tanstackSetter = (updater) => {\n\t\tif (typeof updater === 'function') {\n\t\t\tinternalValue.value = (\n\t\t\t\tupdater as (prevState: INTERNAL_VALUE) => INTERNAL_VALUE\n\t\t\t)(internalValue.value)\n\t\t\treturn\n\t\t}\n\n\t\tinternalValue.value = updater\n\t}\n\n\treturn result as Other<INTERNAL_VALUE> & WritableComputedRef<EXTERNAL_VALUE>\n}\n","import { Dashes } from '@metatypes/typography'\nimport type {\n\tCellContext,\n\tExpandedState,\n\tHeaderContext,\n\tRowSelectionState,\n\tVisibilityState,\n} from '@tanstack/table-core'\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetExpandedRowModel,\n} from '@tanstack/table-core'\nimport { useVueTable } from '@tanstack/vue-table'\nimport classNames from 'classnames'\nimport { computed, h, ref, type Ref, watch } from 'vue'\nimport { z } from 'zod'\n\nimport { Yoco, yocoIconSchema } from '@3yourmind/yoco'\n\nimport { KtButton } from '../../kotti-button/'\nimport { useI18nContext } from '../../kotti-i18n/hooks'\nimport { KtPopover } from '../../kotti-popover/'\nimport ToggleInner from '../../shared-components/toggle-inner/ToggleInner.vue'\nimport ToggleRadio from '../../shared-components/ToggleRadio.vue'\n\nimport { type TableContext, useProvideTableContext } from './context'\nimport type { GetRowBehavior, KottiTable } from './types'\nimport { type ReactStyleUpdater, useComputedRef } from './use-computed-ref'\n\nexport const EXPANSION_COLUMN_ID = 'internal-expand-column'\nexport const MULTI_SELECTION_COLUMN_ID = 'internal-single-select-column'\nexport const SINGLE_SELECTION_COLUMN_ID = 'internal-multi-select-column'\nconst ARRAY_START = 3\n\ntype SortingState<COLUMN_ID extends string = string> = {\n\tdesc: boolean\n\tid: COLUMN_ID\n}[]\n\ntype InternalColumnId<COLUMN_ID extends string = string> =\n\t| COLUMN_ID\n\t| typeof EXPANSION_COLUMN_ID\n\t| typeof MULTI_SELECTION_COLUMN_ID\n\t| typeof SINGLE_SELECTION_COLUMN_ID\n\nexport type KottiTableParameter<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n> = {\n\tcolumns: KottiTable.Column<ROW, COLUMN_ID>[]\n\tdata: ROW[]\n\texpandMode?: 'multi' | 'single'\n\tgetRowBehavior: GetRowBehavior<ROW>\n\thasDragAndDrop?: boolean\n\tid: string\n\tisSelectable?: 'multi' | 'single' | boolean\n}\n\nexport const paramsSchema = z\n\t.object({\n\t\tcolumns: z.array(\n\t\t\tz\n\t\t\t\t.object({\n\t\t\t\t\tdisplay: z\n\t\t\t\t\t\t.object({\n\t\t\t\t\t\t\talign: z.enum(['center', 'left', 'right']),\n\t\t\t\t\t\t\tdisableCellClick: z.boolean(),\n\t\t\t\t\t\t\tisNumeric: z.boolean(),\n\t\t\t\t\t\t\trender: z.function(),\n\t\t\t\t\t\t\tsortBehavior: z.enum(['asc-desc', 'desc-asc']),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.strict(),\n\t\t\t\t\tgetData: z.function(),\n\t\t\t\t\tid: z.string(),\n\t\t\t\t\tisSortable: z.boolean().default(false),\n\t\t\t\t\tlabel: z.string(),\n\t\t\t\t\tmaxWidth: z.string().optional(),\n\t\t\t\t\tminWidth: z.string().optional(),\n\t\t\t\t\ttooltip: z.string().optional(),\n\t\t\t\t\twidth: z.string().optional(),\n\t\t\t\t})\n\t\t\t\t.strict(),\n\t\t),\n\t\tdata: z.array(z.any()),\n\t\texpandMode: z.enum(['multi', 'single']).nullable().default(null),\n\t\t/**\n\t\t * Keep in sync with type expression\n\t\t * @see GetRowBehavior\n\t\t */\n\t\tgetRowBehavior: z\n\t\t\t.function()\n\t\t\t.args(z.object({ row: z.record(z.unknown()), rowIndex: z.number() }))\n\t\t\t.returns(\n\t\t\t\tz.object({\n\t\t\t\t\tactions: z\n\t\t\t\t\t\t.array(\n\t\t\t\t\t\t\tz\n\t\t\t\t\t\t\t\t.object({\n\t\t\t\t\t\t\t\t\tdataTest: z.string().optional(),\n\t\t\t\t\t\t\t\t\ticon: yocoIconSchema,\n\t\t\t\t\t\t\t\t\tisDisabled: z.boolean().optional(),\n\t\t\t\t\t\t\t\t\tonClick: z\n\t\t\t\t\t\t\t\t\t\t.function()\n\t\t\t\t\t\t\t\t\t\t.args()\n\t\t\t\t\t\t\t\t\t\t.returns(z.union([z.void(), z.promise(z.void())])),\n\t\t\t\t\t\t\t\t\ttooltip: z.string().optional(),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.strict(),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.optional(),\n\t\t\t\t\tclasses: z.array(z.string()).optional(),\n\t\t\t\t\tclick: z\n\t\t\t\t\t\t.union([\n\t\t\t\t\t\t\tz.object({\n\t\t\t\t\t\t\t\tcomponent: z.null(),\n\t\t\t\t\t\t\t\tonClick: z\n\t\t\t\t\t\t\t\t\t.function()\n\t\t\t\t\t\t\t\t\t.args()\n\t\t\t\t\t\t\t\t\t.returns(z.union([z.void(), z.promise(z.void())])),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tz.object({\n\t\t\t\t\t\t\t\tcomponent: z.literal('a'),\n\t\t\t\t\t\t\t\ton: z.record(z.unknown()).optional(),\n\t\t\t\t\t\t\t\tprops: z.object({ href: z.string() }).passthrough(),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tz.object({\n\t\t\t\t\t\t\t\tcomponent: z.string().regex(/^[^a]($|.+)/),\n\t\t\t\t\t\t\t\ton: z.record(z.unknown()).optional(),\n\t\t\t\t\t\t\t\tprops: z.record(z.unknown()).optional(),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tz.literal('expand'),\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.optional(),\n\t\t\t\t\tdisable: z\n\t\t\t\t\t\t.object({\n\t\t\t\t\t\t\tactions: z.boolean(),\n\t\t\t\t\t\t\tclick: z.boolean(),\n\t\t\t\t\t\t\texpand: z.boolean(),\n\t\t\t\t\t\t\tselect: z.boolean(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.optional(),\n\t\t\t\t\tid: z.string(),\n\t\t\t\t\tisLoading: z.boolean().optional(),\n\t\t\t\t}),\n\t\t\t),\n\t\thasDragAndDrop: z.boolean().default(false),\n\t\tid: z.string(),\n\t\tisSelectable: z\n\t\t\t.union([z.boolean(), z.enum(['multi', 'single'])])\n\t\t\t.nullable()\n\t\t\t.default(null)\n\t\t\t.transform((val) => {\n\t\t\t\tif (typeof val === 'string') return val\n\t\t\t\treturn val ? 'multi' : null\n\t\t\t}),\n\t})\n\t.strict()\n\ntype InternalKottiTableParameters<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n> = {\n\tcolumns: KottiTable.Column<ROW, COLUMN_ID>[]\n\tdata: ROW[]\n\tgetRowBehavior: GetRowBehavior<ROW>\n} & {\n\texpandMode: 'multi' | 'single' | null\n\thasDragAndDrop: boolean\n\tid: string\n\tisSelectable: 'multi' | 'single' | null\n}\n\ntype KottiTableHook<ROW extends KottiTable.AnyRow, COLUMN_ID extends string> = {\n\tapi: KottiTable.Hook.Returns<COLUMN_ID>\n\ttableContext: TableContext<ROW, COLUMN_ID>\n}\n\nexport const useKottiTable = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>(\n\t_params: Ref<Readonly<KottiTableParameter<ROW, COLUMN_ID>>>,\n): KottiTableHook<ROW, COLUMN_ID> => {\n\tconst params = computed(\n\t\t() =>\n\t\t\tparamsSchema.parse(_params.value) as InternalKottiTableParameters<\n\t\t\t\tROW,\n\t\t\t\tCOLUMN_ID\n\t\t\t>,\n\t)\n\tconst columnHelper = createColumnHelper<ROW>()\n\tconst i18nContext = useI18nContext()\n\n\tconst columnIdSet = computed<Set<COLUMN_ID>>(() => {\n\t\tconst result = new Set(params.value.columns.map((c) => c.id))\n\n\t\tif (result.size !== params.value.columns.length) {\n\t\t\tthrow new Error('Column ids should be unique')\n\t\t}\n\n\t\treturn result\n\t})\n\tconst rowIdSet = computed<Set<string>>(() => {\n\t\tconst { data, getRowBehavior } = params.value\n\t\treturn new Set(\n\t\t\tdata.map((row, rowIndex) => getRowBehavior({ row, rowIndex }).id),\n\t\t)\n\t})\n\n\tconst columnOrder = useComputedRef<InternalColumnId[], COLUMN_ID[]>({\n\t\tget: (value) => value.slice(ARRAY_START) as COLUMN_ID[],\n\t\tset: (value) => {\n\t\t\tconst newValue: InternalColumnId[] = [\n\t\t\t\tEXPANSION_COLUMN_ID,\n\t\t\t\tMULTI_SELECTION_COLUMN_ID,\n\t\t\t\tSINGLE_SELECTION_COLUMN_ID,\n\t\t\t]\n\t\t\t// Drop unknown columns from outside value\n\t\t\tfor (const columnId of value) {\n\t\t\t\tif (columnIdSet.value.has(columnId) && !newValue.includes(columnId)) {\n\t\t\t\t\tnewValue.push(columnId)\n\t\t\t\t} else {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`useKottiTable: dropped unknown column \"${columnId}\"`)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Append missing column ids\n\t\t\tfor (const column of params.value.columns) {\n\t\t\t\tif (!newValue.includes(column.id)) {\n\t\t\t\t\tnewValue.push(column.id)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newValue\n\t\t},\n\t\tsync: (oldValue) => [\n\t\t\tEXPANSION_COLUMN_ID,\n\t\t\tMULTI_SELECTION_COLUMN_ID,\n\t\t\tSINGLE_SELECTION_COLUMN_ID,\n\t\t\t...oldValue.filter((columnId) =>\n\t\t\t\tcolumnIdSet.value.has(columnId as COLUMN_ID),\n\t\t\t),\n\t\t],\n\t\tvalue: ref([\n\t\t\tEXPANSION_COLUMN_ID,\n\t\t\tMULTI_SELECTION_COLUMN_ID,\n\t\t\tSINGLE_SELECTION_COLUMN_ID,\n\t\t\t...params.value.columns.map(({ id }) => id),\n\t\t]),\n\t})\n\n\tconst selectedRows = useComputedRef<RowSelectionState>({\n\t\tget: (value) => value,\n\t\tset: (value) => {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries(value).filter(([_, isSelected]) => isSelected),\n\t\t\t)\n\t\t},\n\t\tvalue: ref({}),\n\t})\n\n\tconst expandedRows = useComputedRef<ExpandedState, Record<string, boolean>>({\n\t\tget: (value) => {\n\t\t\tif (value === true)\n\t\t\t\treturn Object.fromEntries(\n\t\t\t\t\t[...rowIdSet.value].map((rowId) => [rowId, true]),\n\t\t\t\t)\n\n\t\t\treturn value\n\t\t},\n\t\tset: (value) => {\n\t\t\tswitch (params.value.expandMode) {\n\t\t\t\tcase 'multi':\n\t\t\t\t\treturn Object.fromEntries(\n\t\t\t\t\t\tObject.entries(value).filter(\n\t\t\t\t\t\t\t([rowId, isExpanded]) => rowIdSet.value.has(rowId) && isExpanded,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\tcase null:\n\t\t\t\t\treturn {}\n\t\t\t\tcase 'single': {\n\t\t\t\t\tfor (const [rowId, isExpanded] of Object.entries(value)) {\n\t\t\t\t\t\tif (rowIdSet.value.has(rowId) && isExpanded) {\n\t\t\t\t\t\t\treturn { [rowId]: true }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tvalue: ref({}),\n\t})\n\n\tconst ordering = useComputedRef<\n\t\tSortingState<COLUMN_ID>,\n\t\tKottiTable.Ordering<COLUMN_ID>[]\n\t>({\n\t\tget(value) {\n\t\t\treturn value.map((sorting) => ({\n\t\t\t\tid: sorting.id,\n\t\t\t\tvalue: sorting.desc ? ('descending' as const) : ('ascending' as const),\n\t\t\t}))\n\t\t},\n\t\tset(value) {\n\t\t\treturn (\n\t\t\t\tvalue\n\t\t\t\t\t// Remove entries that do not have a valid column\n\t\t\t\t\t.filter((sorting) => columnIdSet.value.has(sorting.id))\n\t\t\t\t\t.map((sorting) => ({\n\t\t\t\t\t\tdesc: sorting.value === 'descending',\n\t\t\t\t\t\tid: sorting.id,\n\t\t\t\t\t}))\n\t\t\t)\n\t\t},\n\t\tsync: (oldValue) => {\n\t\t\treturn oldValue.filter(({ id }) => columnIdSet.value.has(id))\n\t\t},\n\t\tvalue: ref([]),\n\t})\n\n\tconst hiddenColumns = useComputedRef<VisibilityState, Set<COLUMN_ID>>({\n\t\tget: (value) => {\n\t\t\tconst result = new Set<COLUMN_ID>()\n\n\t\t\tfor (const id of columnIdSet.value) {\n\t\t\t\tif (\n\t\t\t\t\tid === EXPANSION_COLUMN_ID ||\n\t\t\t\t\tid === SINGLE_SELECTION_COLUMN_ID ||\n\t\t\t\t\tid === MULTI_SELECTION_COLUMN_ID\n\t\t\t\t)\n\t\t\t\t\tcontinue\n\t\t\t\tif (value[id] === false) result.add(id)\n\t\t\t}\n\n\t\t\treturn result\n\t\t},\n\t\tset: (newSet) => {\n\t\t\tconst newVisibilityState: VisibilityState = {\n\t\t\t\t[EXPANSION_COLUMN_ID]: params.value.expandMode !== null,\n\t\t\t\t[MULTI_SELECTION_COLUMN_ID]: params.value.isSelectable === 'multi',\n\t\t\t\t[SINGLE_SELECTION_COLUMN_ID]: params.value.isSelectable === 'single',\n\t\t\t}\n\n\t\t\tfor (const id of columnIdSet.value) {\n\t\t\t\tnewVisibilityState[id] = !newSet.has(id)\n\t\t\t}\n\n\t\t\treturn newVisibilityState\n\t\t},\n\t\tsync: (oldValue) => {\n\t\t\treturn {\n\t\t\t\t...oldValue,\n\t\t\t\t[EXPANSION_COLUMN_ID]: params.value.expandMode !== null,\n\t\t\t\t[MULTI_SELECTION_COLUMN_ID]: params.value.isSelectable === 'multi',\n\t\t\t\t[SINGLE_SELECTION_COLUMN_ID]: params.value.isSelectable === 'single',\n\t\t\t}\n\t\t},\n\t\tvalue: ref({\n\t\t\t...Object.fromEntries(\n\t\t\t\tparams.value.columns.map((column) => [column.id, true]),\n\t\t\t),\n\t\t\t[EXPANSION_COLUMN_ID]: params.value.expandMode !== null,\n\t\t\t[MULTI_SELECTION_COLUMN_ID]: params.value.isSelectable === 'multi',\n\t\t\t[SINGLE_SELECTION_COLUMN_ID]: params.value.isSelectable === 'single',\n\t\t}),\n\t})\n\n\tconst triggerExpand = (rowId: string) => {\n\t\tswitch (params.value.expandMode) {\n\t\t\tcase 'multi': {\n\t\t\t\texpandedRows.value = {\n\t\t\t\t\t...expandedRows.value,\n\t\t\t\t\t[rowId]: !(rowId in expandedRows.value),\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase null: {\n\t\t\t\texpandedRows.value = {}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'single': {\n\t\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\t\tif (rowId in expandedRows.value) {\n\t\t\t\t\texpandedRows.value = {}\n\t\t\t\t} else {\n\t\t\t\t\texpandedRows.value = { [rowId]: true }\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Used for selecting multiple rows via shift click\n\t */\n\tconst rowSelectionAnchorIndex = ref<{\n\t\trowId: string\n\t\trowIndex: number\n\t} | null>(null)\n\n\tconst getMovedColumnOrder = (\n\t\tfromColumnId: COLUMN_ID,\n\t\ttoIndex: number,\n\t): COLUMN_ID[] => {\n\t\tconst fromIndex = columnOrder.value.indexOf(fromColumnId)\n\t\tif (fromIndex === -1)\n\t\t\tthrow new Error(`Could not find column id ${fromColumnId}`)\n\n\t\tconst newOrder = [...columnOrder.value]\n\t\tnewOrder.splice(fromIndex, 1)\n\t\tnewOrder.splice(\n\t\t\ttoIndex > fromIndex ? toIndex - 1 : toIndex,\n\t\t\t0,\n\t\t\tfromColumnId,\n\t\t)\n\t\treturn newOrder\n\t}\n\n\tconst table = useVueTable<ROW>({\n\t\tcolumns: [\n\t\t\t// Expand Column\n\t\t\tcolumnHelper.display({\n\t\t\t\tcell: ({ row }: CellContext<ROW, unknown>) => {\n\t\t\t\t\tconst rowBehavior = params.value.getRowBehavior({\n\t\t\t\t\t\trow: row.original,\n\t\t\t\t\t\trowIndex: row.index,\n\t\t\t\t\t})\n\t\t\t\t\tconst isDisabled = rowBehavior.disable?.expand ?? false\n\n\t\t\t\t\treturn h(KtButton, {\n\t\t\t\t\t\tariaExpanded: String(row.getIsExpanded()),\n\t\t\t\t\t\tclass: 'kt-table-expand',\n\t\t\t\t\t\t'data-test': `${params.value.id}.column-${EXPANSION_COLUMN_ID}.row-${row.id}.button`,\n\t\t\t\t\t\tdisabled: isDisabled,\n\t\t\t\t\t\ticon: row.getIsExpanded()\n\t\t\t\t\t\t\t? Yoco.Icon.CHEVRON_DOWN\n\t\t\t\t\t\t\t: Yoco.Icon.CHEVRON_RIGHT,\n\t\t\t\t\t\tonClick: (event: MouseEvent) => {\n\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\tif (isDisabled) return\n\t\t\t\t\t\t\ttriggerExpand(row.id)\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tid: EXPANSION_COLUMN_ID,\n\t\t\t\tmeta: {\n\t\t\t\t\tcellClasses: 'kt-table-cell kt-table-cell--is-body',\n\t\t\t\t\tdisableCellClick: false,\n\t\t\t\t\theaderClasses: 'kt-table-cell kt-table-cell--is-header',\n\t\t\t\t\tindex: 0,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Multi select rows column\n\t\t\tcolumnHelper.display({\n\t\t\t\tcell: ({ row }: CellContext<ROW, unknown>) =>\n\t\t\t\t\th(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tariaDisabled: !row.getCanSelect(),\n\t\t\t\t\t\t\tonClick: (event: MouseEvent) => {\n\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\t\t\trowSelectionAnchorIndex.value !== null &&\n\t\t\t\t\t\t\t\t\trowIdSet.value.has(rowSelectionAnchorIndex.value.rowId)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tconst { rowIndex } = rowSelectionAnchorIndex.value\n\t\t\t\t\t\t\t\t\tconst rangeStart = Math.min(rowIndex, row.index)\n\t\t\t\t\t\t\t\t\tconst rangeEnd = Math.max(rowIndex, row.index)\n\t\t\t\t\t\t\t\t\tconst { rows } = table.getRowModel()\n\t\t\t\t\t\t\t\t\tfor (let i = rangeStart; i <= rangeEnd; i++) {\n\t\t\t\t\t\t\t\t\t\tconst rowInRange = rows[i]\n\t\t\t\t\t\t\t\t\t\t// all rows in the range will get the toggle state that the targetted row gets.\n\t\t\t\t\t\t\t\t\t\trowInRange?.toggleSelected(!row.getIsSelected())\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trow.toggleSelected(!row.getIsSelected())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trowSelectionAnchorIndex.value = {\n\t\t\t\t\t\t\t\t\trowId: row.id,\n\t\t\t\t\t\t\t\t\trowIndex: row.index,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t// this prevents table content selection that would happen with shift clicking\n\t\t\t\t\t\t\tclass: 'kt-table-selection',\n\t\t\t\t\t\t\tonMousedown: (event: MouseEvent) => {\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\th(ToggleInner, {\n\t\t\t\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\t\t\t\tinputProps: {\n\t\t\t\t\t\t\t\t\t'data-test': `${params.value.id}.column-${MULTI_SELECTION_COLUMN_ID}.row-${row.id}.checkbox`,\n\t\t\t\t\t\t\t\t\tdisabled: !row.getCanSelect(),\n\t\t\t\t\t\t\t\t\tid: `${params.value.id}-${row.id}-select`,\n\t\t\t\t\t\t\t\t\ttabindex: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tisDisabled: !row.getCanSelect(),\n\t\t\t\t\t\t\t\tmodelValue: row.getIsSelected(),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t],\n\t\t\t\t\t),\n\t\t\t\theader: ({ table }: HeaderContext<ROW, unknown>) =>\n\t\t\t\t\ttable.getRowCount() > 0\n\t\t\t\t\t\t? h(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\ttable.toggleAllRowsSelected(!table.getIsAllRowsSelected())\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\th(ToggleInner, {\n\t\t\t\t\t\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\t\t\t\t\t\tinputProps: {\n\t\t\t\t\t\t\t\t\t\t\t'data-test': `${params.value.id}.column-${MULTI_SELECTION_COLUMN_ID}.header.checkbox`,\n\t\t\t\t\t\t\t\t\t\t\tdisabled: false,\n\t\t\t\t\t\t\t\t\t\t\tid: `${params.value.id}-column-select-header`,\n\t\t\t\t\t\t\t\t\t\t\ttabindex: 1,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tisDisabled: false,\n\t\t\t\t\t\t\t\t\t\tmodelValue:\n\t\t\t\t\t\t\t\t\t\t\ttable.getIsAllRowsSelected() ||\n\t\t\t\t\t\t\t\t\t\t\ttable\n\t\t\t\t\t\t\t\t\t\t\t\t.getRowModel()\n\t\t\t\t\t\t\t\t\t\t\t\t.rows.some((row) => row.getIsSelected())\n\t\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t\t: false,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\tid: MULTI_SELECTION_COLUMN_ID,\n\t\t\t\tmeta: {\n\t\t\t\t\tcellClasses: 'kt-table-cell kt-table-cell--is-body',\n\t\t\t\t\tdisableCellClick: false,\n\t\t\t\t\theaderClasses: 'kt-table-cell kt-table-cell--is-header',\n\t\t\t\t\tindex: 1,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Single select rows column\n\t\t\tcolumnHelper.display({\n\t\t\t\tcell: ({ row }: CellContext<ROW, unknown>) =>\n\t\t\t\t\th(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tariaDisabled: !row.getCanSelect(),\n\t\t\t\t\t\t\tclass: 'kt-table-selection',\n\t\t\t\t\t\t\tonClick: (event: MouseEvent) => {\n\t\t\t\t\t\t\t\tif (!row.getCanSelect()) return\n\n\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\n\t\t\t\t\t\t\t\tconst isSelected = !row.getIsSelected()\n\t\t\t\t\t\t\t\ttable.toggleAllRowsSelected(false)\n\t\t\t\t\t\t\t\trow.toggleSelected(isSelected)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\th(ToggleRadio, {\n\t\t\t\t\t\t\t\tisChecked: row.getIsSelected(),\n\t\t\t\t\t\t\t\tisDisabled: !row.getCanSelect(),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t],\n\t\t\t\t\t),\n\t\t\t\theader: () => null,\n\t\t\t\tid: SINGLE_SELECTION_COLUMN_ID,\n\t\t\t\tmeta: {\n\t\t\t\t\tcellClasses: 'kt-table-cell kt-table-cell--is-body',\n\t\t\t\t\tdisableCellClick: false,\n\t\t\t\t\theaderClasses: 'kt-table-cell kt-table-cell--is-header',\n\t\t\t\t\tindex: 2,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t...params.value.columns.map((column) => {\n\t\t\t\tconst getCellClasses = (cellType: 'body' | 'header') =>\n\t\t\t\t\tclassNames({\n\t\t\t\t\t\t[`kt-table-cell--is-${cellType}`]: true,\n\t\t\t\t\t\t[`kt-table-cell--is-${column.display.align}-aligned`]: true,\n\t\t\t\t\t\t'kt-table-cell': true,\n\t\t\t\t\t\t'kt-table-cell--displays-number': column.display.isNumeric,\n\t\t\t\t\t\t// 'kt-table-cell--has-drop-indicator':\n\t\t\t\t\t\t// \tindex === dropTargetColumnIndex.value,\n\t\t\t\t\t\t// 'kt-table-cell--has-drop-indicator-right':\n\t\t\t\t\t\t// \tindex + 1 === dropTargetColumnIndex.value &&\n\t\t\t\t\t\t// \tcolumnOrder.value.length - 1 === index,\n\t\t\t\t\t\t// 'kt-table-cell--is-dragged': column.id === draggedColumnId.value,\n\t\t\t\t\t\t// 'kt-table-cell--was-successfully-dropped':\n\t\t\t\t\t\t// \tcolumn.id === successfullyDroppedColumnId.value,\n\t\t\t\t\t})\n\n\t\t\t\treturn columnHelper.accessor(column.getData, {\n\t\t\t\t\tcell: (info) => {\n\t\t\t\t\t\tconst value = info.getValue()\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tcolumn.display.render(value, {\n\t\t\t\t\t\t\t\ti18n: i18nContext,\n\t\t\t\t\t\t\t}) ?? Dashes.EmDash\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t\tenableSorting: column.isSortable,\n\t\t\t\t\theader: () =>\n\t\t\t\t\t\tcolumn.tooltip\n\t\t\t\t\t\t\t? h('div', [\n\t\t\t\t\t\t\t\t\th('span', column.label),\n\t\t\t\t\t\t\t\t\th(\n\t\t\t\t\t\t\t\t\t\tKtPopover,\n\t\t\t\t\t\t\t\t\t\t{ placement: 'top', trigger: 'hover' },\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcontent: () => h('span', column.tooltip),\n\t\t\t\t\t\t\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\t\t\t\t\t\t\th('i', { class: 'yoco' }, Yoco.Icon.CIRCLE_QUESTION),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t: h('div', column.label),\n\t\t\t\t\tid: column.id,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tcellClasses: getCellClasses('body'),\n\t\t\t\t\t\tdisableCellClick: column.display.disableCellClick,\n\t\t\t\t\t\theaderClasses: getCellClasses('header'),\n\t\t\t\t\t\tindex: columnOrder.value.indexOf(column.id),\n\t\t\t\t\t\tsortBehavior: column.display.sortBehavior,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t'max-width': column.maxWidth,\n\t\t\t\t\t\t\t'min-width': column.minWidth,\n\t\t\t\t\t\t\twidth: column.width,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}),\n\t\t],\n\t\tget data() {\n\t\t\treturn params.value.data\n\t\t},\n\t\tenableRowSelection: (row) => {\n\t\t\tif (!params.value.isSelectable) return false\n\n\t\t\tconst behavior = params.value.getRowBehavior({\n\t\t\t\trow: row.original,\n\t\t\t\trowIndex: row.index,\n\t\t\t})\n\t\t\treturn !behavior.disable?.select\n\t\t},\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetExpandedRowModel:\n\t\t\tparams.value.expandMode !== null ? getExpandedRowModel() : undefined,\n\t\tgetRowId: (row, rowIndex) =>\n\t\t\tparams.value.getRowBehavior({ row, rowIndex }).id,\n\t\tonColumnVisibilityChange: hiddenColumns.tanstackSetter,\n\t\tonRowSelectionChange: selectedRows.tanstackSetter,\n\t\tonSortingChange: ordering.tanstackSetter as ReactStyleUpdater<unknown>,\n\t\tstate: {\n\t\t\tget columnOrder() {\n\t\t\t\treturn columnOrder.tanstackGetter()\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn hiddenColumns.tanstackGetter()\n\t\t\t},\n\t\t\tget expanded() {\n\t\t\t\treturn expandedRows.tanstackGetter()\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn selectedRows.tanstackGetter()\n\t\t\t},\n\t\t\tget sorting() {\n\t\t\t\treturn ordering.tanstackGetter()\n\t\t\t},\n\t\t},\n\t})\n\n\twatch(params, (newParams, oldParams) => {\n\t\tconst oldColumnSet = new Set(oldParams.columns.map((column) => column.id))\n\t\tconst newColumnSet = new Set(newParams.columns.map((column) => column.id))\n\t\tconst isDifferent =\n\t\t\toldColumnSet.size !== newColumnSet.size ||\n\t\t\t[...oldColumnSet.keys()].some((entry) => !newColumnSet.has(entry))\n\t\tif (isDifferent) {\n\t\t\tcolumnOrder.recalculate()\n\t\t\thiddenColumns.recalculate()\n\t\t\tordering.recalculate()\n\t\t} else {\n\t\t\thiddenColumns.recalculate()\n\t\t}\n\t})\n\n\tconst tableContext: TableContext<ROW, COLUMN_ID> = computed(() => ({\n\t\tinternal: {\n\t\t\tcolumnOrder: columnOrder.value,\n\t\t\tgetColumnIndex: (columnId) => {\n\t\t\t\treturn columnOrder.value.indexOf(columnId)\n\t\t\t},\n\t\t\tgetOrdering: () => {\n\t\t\t\treturn ordering.value\n\t\t\t},\n\t\t\tgetRowBehavior: params.value.getRowBehavior,\n\t\t\thasDragAndDrop: params.value.hasDragAndDrop,\n\t\t\tisExpandable: params.value.expandMode !== null,\n\t\t\tselectionCount: Object.values(selectedRows.value).length,\n\t\t\tswapDraggedAndDropTarget: (draggedColumnId, targetIndex) => {\n\t\t\t\tcolumnOrder.value = getMovedColumnOrder(draggedColumnId, targetIndex)\n\t\t\t},\n\t\t\ttable,\n\t\t\ttriggerExpand,\n\t\t\tunselectAllRows: () => {\n\t\t\t\tselectedRows.value = {}\n\t\t\t},\n\t\t\tvisibleColumns: hiddenColumns.tanstackGetter(),\n\t\t},\n\t}))\n\tuseProvideTableContext<ROW, COLUMN_ID>(params.value.id, tableContext)\n\n\treturn {\n\t\tapi: {\n\t\t\tcolumnOrder,\n\t\t\texpandedRows,\n\t\t\thiddenColumns,\n\t\t\tordering,\n\t\t\tselectedRows,\n\t\t},\n\t\ttableContext,\n\t}\n}\n","import type { Column } from '@tanstack/table-core'\n\nimport type { GetRowBehavior, KottiTable } from './types'\n\ntype RowBehavior = ReturnType<GetRowBehavior<KottiTable.AnyRow>>\n\ntype RowCellWrapper = {\n\tclass: string[]\n\tcomponent: string\n\ton?: Record<string, unknown>\n\tprops?: Record<string, unknown>\n}\n\nconst getCellWrapper = (onClick?: () => void) => {\n\treturn {\n\t\tclass: ['kt-table-cell-content'],\n\t\tcomponent: 'div',\n\t\ton: onClick\n\t\t\t? {\n\t\t\t\t\tclick: onClick,\n\t\t\t\t}\n\t\t\t: undefined,\n\t}\n}\n\nexport const getCellWrapComponent = ({\n\tbehavior,\n\tcolumn,\n\ttriggerExpand,\n}: {\n\tbehavior: RowBehavior\n\tcolumn: Column<KottiTable.AnyRow>\n\ttriggerExpand: (rowId: string) => void\n}): RowCellWrapper => {\n\tif (column.columnDef.meta.disableCellClick) {\n\t\treturn {\n\t\t\tclass: [\n\t\t\t\t'kt-table-cell-content',\n\t\t\t\t'kt-table-cell-content--is-click-disabled',\n\t\t\t],\n\t\t\tcomponent: 'div',\n\t\t}\n\t}\n\n\tconst { click, disable, id: rowId } = behavior\n\n\tif (disable?.click || !click) return getCellWrapper()\n\n\tif (click === 'expand')\n\t\treturn getCellWrapper(() => {\n\t\t\ttriggerExpand(rowId)\n\t\t})\n\n\tif (click.component === null)\n\t\treturn getCellWrapper(() => {\n\t\t\tvoid click.onClick()\n\t\t})\n\n\treturn {\n\t\t...click,\n\t\tclass: ['kt-table-cell-content'],\n\t\ton: {},\n\t}\n}\n","<template>\n\t<div :class=\"tableClasses\">\n\t\t<table\n\t\t\t@dragend=\"handleTableDragEnd\"\n\t\t\t@dragleave=\"handleDragLeave\"\n\t\t\t@drop=\"handleDrop\"\n\t\t>\n\t\t\t<thead>\n\t\t\t\t<tr v-for=\"headerRow in headerRows\" :key=\"headerRow.key\">\n\t\t\t\t\t<th\n\t\t\t\t\t\tv-for=\"header in headerRow.headers\"\n\t\t\t\t\t\t:key=\"header.key\"\n\t\t\t\t\t\t:class=\"header.classes\"\n\t\t\t\t\t\t:colSpan=\"header.colSpan\"\n\t\t\t\t\t\t:data-test=\"header.dataTest\"\n\t\t\t\t\t\t:draggable=\"header.isDraggable\"\n\t\t\t\t\t\t:style=\"header.style\"\n\t\t\t\t\t\t@animationend=\"handleAnimationEnd\"\n\t\t\t\t\t\t@click=\"(e) => handleHeaderClick(e, header)\"\n\t\t\t\t\t\t@dragenter.prevent\n\t\t\t\t\t\t@dragleave.prevent\n\t\t\t\t\t\t@dragover.prevent=\"(e) => handleCellDragOver(e, header.id)\"\n\t\t\t\t\t\t@dragstart=\"(e) => handleHeaderDragStart(e, header.id)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"kt-table-header\">\n\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\tclass=\"kt-table-header-content\"\n\t\t\t\t\t\t\t\t:props=\"{ ...header.getContext() }\"\n\t\t\t\t\t\t\t\t:render=\"header.column.columnDef.header\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\tv-if=\"header.isSortable\"\n\t\t\t\t\t\t\t\tclass=\"kt-table-header-sort-icon yoco\"\n\t\t\t\t\t\t\t\tv-text=\"header.sortIndicatorIcon\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th v-if=\"hasActions\" class=\"kt-table__actions-column\" />\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr\n\t\t\t\t\tv-if=\"bodyRows.length === 0 && isLoading\"\n\t\t\t\t\tclass=\"kt-table-row kt-table-row--is-loading\"\n\t\t\t\t>\n\t\t\t\t\t<td :colSpan=\"tableColSpan\">\n\t\t\t\t\t\t<slot name=\"loading\">\n\t\t\t\t\t\t\t<KtLoading\n\t\t\t\t\t\t\t\tv-for=\"key in 3\"\n\t\t\t\t\t\t\t\t:key=\"key\"\n\t\t\t\t\t\t\t\tstyle=\"width: 100%; height: 2rem; margin-top: 0.2rem\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr\n\t\t\t\t\tv-else-if=\"bodyRows.length === 0\"\n\t\t\t\t\tclass=\"kt-table-row kt-table-row--is-empty\"\n\t\t\t\t>\n\t\t\t\t\t<td :colSpan=\"tableColSpan\">\n\t\t\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t\t\t<div v-text=\"defaultedEmptyText\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<template v-for=\"(row, rowIndex) in bodyRows\" v-else :key=\"row.key\">\n\t\t\t\t\t<tr :class=\"row.classes\">\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-for=\"cell in row.cells\"\n\t\t\t\t\t\t\t:key=\"cell.key\"\n\t\t\t\t\t\t\t:class=\"cell.classes\"\n\t\t\t\t\t\t\t:data-test=\"cell.dataTest\"\n\t\t\t\t\t\t\t:style=\"cell.style\"\n\t\t\t\t\t\t\t@dragenter.prevent\n\t\t\t\t\t\t\t@dragleave.prevent\n\t\t\t\t\t\t\t@dragover.prevent=\"(e) => handleCellDragOver(e, cell.columnId)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t\t:is=\"cell.wrapComponent.component\"\n\t\t\t\t\t\t\t\tv-bind=\"cell.wrapComponent.props\"\n\t\t\t\t\t\t\t\t:class=\"cell.wrapComponent.class\"\n\t\t\t\t\t\t\t\tv-on=\"cell.wrapComponent.on || {}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t:props=\"{ ...cell.getContext() }\"\n\t\t\t\t\t\t\t\t\t:render=\"cell.column.columnDef.cell\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</component>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td v-if=\"row.actions !== null\" class=\"kt-table__actions-column\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"kt-table__actions\"\n\t\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t\t'kt-table__actions--is-disabled': row.isActionDisabled,\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template v-for=\"(action, index) in row.actions\">\n\t\t\t\t\t\t\t\t\t<KtPopover\n\t\t\t\t\t\t\t\t\t\tv-if=\"action.tooltip\"\n\t\t\t\t\t\t\t\t\t\t:key=\"`tooltip-action-${index}`\"\n\t\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t\t\ttrigger=\"hover\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t\t\t\t\tyoco: true,\n\t\t\t\t\t\t\t\t\t\t\t\t'kt-table__action-icon': true,\n\t\t\t\t\t\t\t\t\t\t\t\t'kt-table__action-icon--is-disabled':\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.isActionDisabled || action.isDisabled,\n\t\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t\t\t:data-test=\"action.dataTest\"\n\t\t\t\t\t\t\t\t\t\t\t@click=\"\n\t\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (action.isDisabled) return\n\n\t\t\t\t\t\t\t\t\t\t\t\t\taction.onClick()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\tv-text=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\t\t\t<span v-text=\"action.tooltip\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</KtPopover>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t\t:key=\"`plain-action-${index}`\"\n\t\t\t\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t\t\t\tyoco: true,\n\t\t\t\t\t\t\t\t\t\t\t'kt-table__action-icon': true,\n\t\t\t\t\t\t\t\t\t\t\t'kt-table__action-icon--is-disabled':\n\t\t\t\t\t\t\t\t\t\t\t\trow.isActionDisabled || action.isDisabled,\n\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t\t:data-test=\"action.dataTest\"\n\t\t\t\t\t\t\t\t\t\t@click=\"\n\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (action.isDisabled) return\n\n\t\t\t\t\t\t\t\t\t\t\t\taction.onClick()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\tv-text=\"action.icon\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td v-else-if=\"$slots['actions']\" class=\"kt-table__actions-column\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"kt-table__actions\"\n\t\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\t\t'kt-table__actions--is-disabled': row.isActionDisabled,\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<slot name=\"actions\" :row=\"row.original\" :rowIndex=\"rowIndex\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-if=\"$slots['expanded-row'] && row.isExpanded\"\n\t\t\t\t\t\t:key=\"row.expandedKey\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<td :colSpan=\"tableColSpan\">\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\tname=\"expanded-row\"\n\t\t\t\t\t\t\t\t:row=\"row.original\"\n\t\t\t\t\t\t\t\t:rowIndex=\"rowIndex\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</template>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { Header } from '@tanstack/table-core'\nimport { FlexRender } from '@tanstack/vue-table'\nimport classNames from 'classnames'\nimport { computed, defineComponent, ref } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { KtLoading } from '../kotti-loading'\nimport { KtPopover } from '../kotti-popover'\nimport { makeProps } from '../make-props'\n\nimport { useTableContext } from './table/context'\nimport {\n\tEXPANSION_COLUMN_ID,\n\tMULTI_SELECTION_COLUMN_ID,\n\tSINGLE_SELECTION_COLUMN_ID,\n} from './table/hooks'\nimport { getCellWrapComponent } from './table/row'\nimport { KottiTable } from './table/types'\n\nconst TRANSFER_TYPE = 'application/move-column'\n\nconst SORT_BEHAVIOR_MAP = {\n\t'asc-desc': [false, 'asc', 'desc'],\n\t'desc-asc': [false, 'desc', 'asc'],\n} as const\nconst SORT_ORDER_COUNT = 3\n\nexport default defineComponent({\n\tname: 'KtTable',\n\tcomponents: {\n\t\tFlexRender,\n\t\tKtLoading,\n\t\tKtPopover,\n\t},\n\tprops: makeProps(KottiTable.propsSchema),\n\tsetup(props, { slots }) {\n\t\t// eslint-disable-next-line vue/no-setup-props-reactivity-loss\n\t\tconst tableContext = useTableContext(props.tableId)\n\t\tconst translations = useTranslationNamespace('KtTable')\n\n\t\tconst draggedColumnId = ref<string | null>(null)\n\t\t/**\n\t\t * Primarily used for displaying the drop indicator line\n\t\t */\n\t\tconst dropTargetColumnIndex = ref<number | null>(null)\n\t\tconst successfullyDroppedColumnId = ref<string | null>(null)\n\n\t\tconst isColumnMoveDataTransfer = (event: DragEvent): boolean => {\n\t\t\treturn event.dataTransfer?.types.includes(TRANSFER_TYPE) ?? false\n\t\t}\n\n\t\tconst table = computed(() => tableContext.value.internal.table)\n\n\t\treturn {\n\t\t\tbodyRows: computed(() =>\n\t\t\t\ttable.value.getRowModel().rows.map((row) => {\n\t\t\t\t\tconst behavior = tableContext.value.internal.getRowBehavior({\n\t\t\t\t\t\trow: row.original,\n\t\t\t\t\t\trowIndex: row.index,\n\t\t\t\t\t})\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tactions: behavior.actions ?? null,\n\t\t\t\t\t\tcells: row.getVisibleCells().map((cell) => ({\n\t\t\t\t\t\t\tclasses: classNames(cell.column.columnDef.meta.cellClasses, {\n\t\t\t\t\t\t\t\t'kt-table-cell--was-successfully-dropped':\n\t\t\t\t\t\t\t\t\tcell.column.id === successfullyDroppedColumnId.value,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcolumn: cell.column,\n\t\t\t\t\t\t\tcolumnId: cell.column.id,\n\t\t\t\t\t\t\tdataTest: `${props.tableId}.column-${cell.column.id}.row-${row.id}`,\n\t\t\t\t\t\t\tgetContext: cell.getContext,\n\t\t\t\t\t\t\tid: cell.id,\n\t\t\t\t\t\t\tkey: cell.id,\n\t\t\t\t\t\t\tstyle: cell.column.columnDef.meta.style,\n\t\t\t\t\t\t\twrapComponent: getCellWrapComponent({\n\t\t\t\t\t\t\t\tbehavior,\n\t\t\t\t\t\t\t\tcolumn: cell.column,\n\t\t\t\t\t\t\t\ttriggerExpand: tableContext.value.internal.triggerExpand,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tclasses: classNames(behavior.classes, {\n\t\t\t\t\t\t\t'kt-table-row': true,\n\t\t\t\t\t\t\t'kt-table-row--is-click-disabled': behavior.disable?.click,\n\t\t\t\t\t\t\t'kt-table-row--is-interactive':\n\t\t\t\t\t\t\t\t!behavior.disable?.click && behavior.click,\n\t\t\t\t\t\t\t'kt-table-row--is-loading skeleton rectangle': behavior.isLoading,\n\t\t\t\t\t\t\t'kt-table-row--is-selected': row.getIsSelected(),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\texpandedColSpan: row.getAllCells().length,\n\t\t\t\t\t\texpandedKey: `${row.id}-expanded-row`,\n\t\t\t\t\t\tisActionDisabled: behavior.disable?.actions === true,\n\t\t\t\t\t\tisExpanded: row.getIsExpanded(),\n\t\t\t\t\t\tkey: row.id,\n\t\t\t\t\t\toriginal: row.original,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tdefaultedEmptyText: computed(\n\t\t\t\t() => props.emptyText ?? translations.value.noItems,\n\t\t\t),\n\t\t\thandleAnimationEnd: () => {\n\t\t\t\tsuccessfullyDroppedColumnId.value = null\n\t\t\t},\n\t\t\thandleCellDragOver: (event: DragEvent, columnId: string) => {\n\t\t\t\tif (!isColumnMoveDataTransfer(event)) return\n\t\t\t\tconst columnIndex = tableContext.value.internal.getColumnIndex(columnId)\n\t\t\t\tconst target = event.target as HTMLElement\n\n\t\t\t\tconst { width: elementWidth, x: elementX } =\n\t\t\t\t\ttarget.getBoundingClientRect()\n\n\t\t\t\tconst cursorX = event.clientX\n\n\t\t\t\tconst isLeftHalf = cursorX - elementX < elementWidth / 2\n\t\t\t\tconst targetIndex = columnIndex + (isLeftHalf ? 0 : 1)\n\n\t\t\t\tdropTargetColumnIndex.value = targetIndex\n\t\t\t},\n\t\t\thandleDragLeave: (_event: DragEvent) => {\n\t\t\t\tdropTargetColumnIndex.value = null\n\t\t\t},\n\t\t\thandleDrop: (event: DragEvent) => {\n\t\t\t\tif (\n\t\t\t\t\t!isColumnMoveDataTransfer(event) ||\n\t\t\t\t\tdraggedColumnId.value === null ||\n\t\t\t\t\tdropTargetColumnIndex.value === null\n\t\t\t\t)\n\t\t\t\t\treturn\n\n\t\t\t\ttableContext.value.internal.swapDraggedAndDropTarget(\n\t\t\t\t\tdraggedColumnId.value,\n\t\t\t\t\tdropTargetColumnIndex.value,\n\t\t\t\t)\n\t\t\t\tsuccessfullyDroppedColumnId.value = draggedColumnId.value\n\t\t\t\tdraggedColumnId.value = null\n\t\t\t\tdropTargetColumnIndex.value = null\n\t\t\t},\n\t\t\thandleHeaderClick: (_: MouseEvent, header: Header<unknown, unknown>) => {\n\t\t\t\tif (!header.column.getCanSort()) return\n\n\t\t\t\tconst id = header.column.columnDef.id as string\n\n\t\t\t\tconst sortBehavior =\n\t\t\t\t\tSORT_BEHAVIOR_MAP[\n\t\t\t\t\t\theader.column.columnDef.meta.sortBehavior as 'asc-desc' | 'desc-asc'\n\t\t\t\t\t]\n\n\t\t\t\tconst currentSortIndex = sortBehavior.indexOf(\n\t\t\t\t\theader.column.getIsSorted(),\n\t\t\t\t)\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst nextSort = sortBehavior.at(\n\t\t\t\t\t(currentSortIndex + 1) % SORT_ORDER_COUNT,\n\t\t\t\t)!\n\n\t\t\t\tswitch (nextSort) {\n\t\t\t\t\tcase 'asc':\n\t\t\t\t\t\ttable.value.setSorting([{ desc: false, id }])\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'desc':\n\t\t\t\t\t\ttable.value.setSorting([{ desc: true, id }])\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase false:\n\t\t\t\t\t\ttable.value.setSorting([])\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t},\n\t\t\thandleHeaderDragStart: (event: DragEvent, columnId: string) => {\n\t\t\t\tevent.dataTransfer?.setData(TRANSFER_TYPE, '')\n\t\t\t\tdraggedColumnId.value = columnId\n\t\t\t},\n\t\t\thandleTableDragEnd: () => {\n\t\t\t\tdropTargetColumnIndex.value = null\n\t\t\t\tdraggedColumnId.value = null\n\t\t\t},\n\t\t\thasActions: computed(\n\t\t\t\t() =>\n\t\t\t\t\tBoolean(slots.actions) ||\n\t\t\t\t\ttable.value.getRowModel().rows.some((row) => {\n\t\t\t\t\t\tconst behavior = tableContext.value.internal.getRowBehavior({\n\t\t\t\t\t\t\trow: row.original,\n\t\t\t\t\t\t\trowIndex: row.index,\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn Boolean(behavior.actions)\n\t\t\t\t\t}),\n\t\t\t),\n\t\t\theaderRows: computed(() =>\n\t\t\t\ttable.value.getHeaderGroups().map((headerRow) => ({\n\t\t\t\t\theaders: headerRow.headers.map((header, headerIndex) => {\n\t\t\t\t\t\tconst { columnOrder, hasDragAndDrop } = tableContext.value.internal\n\t\t\t\t\t\tconst index = columnOrder.indexOf(header.column.id)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tclasses: classNames(header.column.columnDef.meta.headerClasses, {\n\t\t\t\t\t\t\t\t'kt-table-cell--has-drop-indicator':\n\t\t\t\t\t\t\t\t\tindex === dropTargetColumnIndex.value,\n\t\t\t\t\t\t\t\t'kt-table-cell--has-drop-indicator-right':\n\t\t\t\t\t\t\t\t\tindex + 1 === dropTargetColumnIndex.value &&\n\t\t\t\t\t\t\t\t\tcolumnOrder.length - 1 === index,\n\t\t\t\t\t\t\t\t'kt-table-cell--is-dragged':\n\t\t\t\t\t\t\t\t\theader.column.id === draggedColumnId.value,\n\t\t\t\t\t\t\t\t'kt-table-cell--is-sortable': header.column.getCanSort(),\n\t\t\t\t\t\t\t\t'kt-table-cell--is-sorted': header.column.getIsSorted(),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcolSpan: header.colSpan,\n\t\t\t\t\t\t\tcolumn: header.column,\n\t\t\t\t\t\t\tdataTest: `${props.tableId}.column-${header.column.id}.header`,\n\t\t\t\t\t\t\tgetContext: header.getContext,\n\t\t\t\t\t\t\tid: header.id,\n\t\t\t\t\t\t\tisDraggable:\n\t\t\t\t\t\t\t\thasDragAndDrop &&\n\t\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\t\tEXPANSION_COLUMN_ID,\n\t\t\t\t\t\t\t\t\tMULTI_SELECTION_COLUMN_ID,\n\t\t\t\t\t\t\t\t\tSINGLE_SELECTION_COLUMN_ID,\n\t\t\t\t\t\t\t\t].includes(header.id),\n\t\t\t\t\t\t\tisSortable: header.column.getCanSort(),\n\t\t\t\t\t\t\tkey: `${header.id}-${headerIndex}`,\n\t\t\t\t\t\t\tsortIndicatorIcon: {\n\t\t\t\t\t\t\t\tasc: Yoco.Icon.ARROW_UP,\n\t\t\t\t\t\t\t\tdesc: Yoco.Icon.ARROW_DOWN,\n\t\t\t\t\t\t\t\tfalse: Yoco.Icon.ARROW_UP_DOWN,\n\t\t\t\t\t\t\t}[header.column.getIsSorted() || 'false'],\n\t\t\t\t\t\t\tstyle: header.column.columnDef.meta.style,\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tkey: headerRow.id,\n\t\t\t\t})),\n\t\t\t),\n\t\t\ttable,\n\t\t\ttableClasses: computed(() => ({\n\t\t\t\t'kt-table': true,\n\t\t\t\t'kt-table--is-drag-and-drop-active': draggedColumnId.value !== null,\n\t\t\t\t'kt-table--is-loading skeleton rectangle':\n\t\t\t\t\tprops.isLoading && table.value.getRowModel().rows.length > 0,\n\t\t\t\t'kt-table--is-scrollable': !props.isNotScrollable,\n\t\t\t})),\n\t\t\ttableColSpan: computed(() => table.value.getAllFlatColumns().length),\n\t\t\ttableContext: computed(() => tableContext.value),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@keyframes flash-green {\n\tfrom {\n\t\tbackground-color: var(--green-20);\n\t\topacity: 0.8;\n\t}\n\n\tto {\n\t\tbackground-color: none;\n\t\topacity: 1;\n\t}\n}\n\n.kt-table {\n\tborder: 1px solid var(--ui-02);\n\tborder-radius: var(--unit-2);\n\n\t&--is-scrollable {\n\t\toverflow-x: scroll;\n\t\twhite-space: nowrap;\n\t}\n\n\t&--is-loading {\n\t\t&.rectangle {\n\t\t\theight: unset;\n\t\t}\n\n\t\ttable,\n\t\ttr,\n\t\ttd {\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\n\t\ttbody {\n\t\t\ttr {\n\t\t\t\tborder-bottom-color: var(--ui-background) !important;\n\t\t\t}\n\t\t}\n\t}\n\n\ttable {\n\t\twidth: 100%;\n\t\tborder-collapse: collapse;\n\t\tbackground-color: var(--ui-background);\n\n\t\ta.kt-table-cell-content {\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: inherit;\n\t\t}\n\n\t\tthead {\n\t\t\tz-index: 3;\n\t\t\tbackground-color: var(--ui-01);\n\n\t\t\t.kt-table-cell--is-header {\n\t\t\t\theight: 28px;\n\t\t\t\tfont-size: var(--unit-3);\n\t\t\t\tcolor: var(--text-02);\n\t\t\t\ttext-transform: uppercase;\n\n\t\t\t\t&.kt-table-cell--is-sorted {\n\t\t\t\t\tcolor: var(--interactive-01);\n\t\t\t\t}\n\n\t\t\t\t&:not(.kt-table-cell--is-sorted) {\n\t\t\t\t\t.kt-table-header-sort-icon.yoco {\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\t.kt-table-header-sort-icon.yoco {\n\t\t\t\t\t\t\tcolor: var(--icon-02);\n\t\t\t\t\t\t\topacity: 1;\n\n\t\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\t\tcolor: var(--icon-01);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&[draggable='true'] {\n\t\t\t\t\tcursor: grab;\n\t\t\t\t}\n\n\t\t\t\t.kt-table-header {\n\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\tgap: 2px;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 0.2rem 0.4rem;\n\t\t\t\t\toverflow: hidden;\n\n\t\t\t\t\t> .yoco {\n\t\t\t\t\t\tmin-width: 0.8rem;\n\t\t\t\t\t\tfont-size: 0.8rem;\n\t\t\t\t\t\tcolor: var(--interactive-03);\n\t\t\t\t\t\tuser-select: none;\n\t\t\t\t\t}\n\n\t\t\t\t\t.kt-table-selection-header {\n\t\t\t\t\t\tpadding: 2px var(--unit-2);\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t\tborder-radius: var(--border-radius);\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--ui-02);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t.kt-table-header-content {\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\tgap: var(--unit-1);\n\t\t\t\t\t\talign-items: center;\n\n\t\t\t\t\t\t.yoco {\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\tmin-width: 0.8rem;\n\t\t\t\t\t\t\tfont-size: 0.8rem;\n\t\t\t\t\t\t\tuser-select: none;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.kt-table-cell--is-left-aligned .kt-table-header {\n\t\t\t\t\tjustify-content: flex-start;\n\t\t\t\t}\n\n\t\t\t\t&.kt-table-cell--is-center-aligned .kt-table-header {\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t}\n\n\t\t\t\t&.kt-table-cell--is-right-aligned .kt-table-header {\n\t\t\t\t\tflex-flow: row-reverse;\n\t\t\t\t\tjustify-content: flex-start;\n\t\t\t\t}\n\n\t\t\t\t&.kt-table-cell--is-center-aligned.kt-table-cell--is-sortable\n\t\t\t\t\t.kt-table-header-content {\n\t\t\t\t\tmargin-left: 0.9rem;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-table-cell {\n\t\t\t\t&--has-drop-indicator {\n\t\t\t\t\t&::before,\n\t\t\t\t\t&-right::after {\n\t\t\t\t\t\tbackground-color: var(--text-05);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&--is-dragged {\n\t\t\t\t\tbackground-color: var(--ui-02);\n\n\t\t\t\t\t// setting opacity only for the content, not for the drop\n\t\t\t\t\t// indicator and background color\n\t\t\t\t\t> * {\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttbody {\n\t\t\ttr {\n\t\t\t\tposition: relative;\n\t\t\t\tborder-bottom: 1px solid var(--ui-02);\n\n\t\t\t\t&:last-child {\n\t\t\t\t\tborder-bottom: none;\n\t\t\t\t}\n\n\t\t\t\t&:hover .kt-table__actions-column {\n\t\t\t\t\tposition: sticky;\n\n\t\t\t\t\t.kt-table__actions {\n\t\t\t\t\t\tbackground-color: var(--ui-background);\n\t\t\t\t\t\tborder-color: var(--ui-02);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-table-cell--is-body {\n\t\t\t\t&.kt-table-cell--has-drop-indicator {\n\t\t\t\t\t&::before,\n\t\t\t\t\t&-right::after {\n\t\t\t\t\t\tbackground-color: var(--text-05);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.kt-table-cell--is-dragged {\n\t\t\t\t\tbackground-color: var(--ui-01);\n\n\t\t\t\t\t// setting opacity only for the content, not for the drop\n\t\t\t\t\t// indicator and background color\n\t\t\t\t\t> * {\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-table-selection {\n\t\t\t\tpadding: var(--unit-2);\n\t\t\t\tborder-radius: var(--border-radius);\n\n\t\t\t\t&[aria-disabled='false'] {\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tbackground-color: var(--ui-05);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.kt-table-expand[aria-expanded='true'] {\n\t\t\t\tbackground-color: var(--ui-05);\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground-color: var(--interactive-04);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.kt-table-cell {\n\t\t\theight: inherit;\n\t\t\tpadding: 0;\n\n\t\t\t/* Firefox only */\n\t\t\t/* stylelint-disable-next-line at-rule-no-deprecated, at-rule-prelude-no-invalid, at-rule-no-vendor-prefix */\n\t\t\t@-moz-document url-prefix() {\n\t\t\t\theight: 100%;\n\t\t\t}\n\n\t\t\t> .kt-table-cell-content {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 4px;\n\t\t\t\talign-items: center;\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: 0.4rem;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\n\t\t\t&--is-left-aligned > .kt-table-cell-content {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\n\t\t\t&--is-right-aligned > .kt-table-cell-content {\n\t\t\t\tjustify-content: flex-end;\n\t\t\t}\n\n\t\t\t&--is-center-aligned > .kt-table-cell-content {\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__actions-column {\n\t\tright: 0;\n\t\tz-index: 2;\n\t\ttext-align: right;\n\n\t\t.kt-table__actions {\n\t\t\tright: 0.8rem;\n\t\t\tz-index: 400;\n\t\t\tdisplay: inline-flex;\n\t\t\tgap: var(--unit-1);\n\t\t\talign-items: center;\n\t\t\tmin-height: var(--unit-8);\n\t\t\tpadding: 0 var(--unit-h);\n\t\t\tmargin-right: var(--unit-1);\n\t\t\tfont-size: 0.8rem;\n\t\t\tline-height: 0.8rem;\n\t\t\tborder: 1px solid transparent;\n\t\t\tborder-radius: var(--border-radius);\n\n\t\t\t&--is-disabled {\n\t\t\t\tcolor: var(--text-05);\n\t\t\t\tcursor: not-allowed;\n\t\t\t\tbackground-color: rgb(from var(--ui-01) r g b / 60%);\n\t\t\t\tborder-color: rgb(from var(--ui-02) r g b / 60%);\n\t\t\t}\n\n\t\t\t> * {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: row;\n\t\t\t}\n\n\t\t\t.kt-table__action-icon,\n\t\t\t.yoco {\n\t\t\t\tpadding: var(--unit-1);\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tcursor: pointer;\n\t\t\t\tuser-select: none;\n\n\t\t\t\t&--is-disabled {\n\t\t\t\t\tcolor: var(--text-05);\n\t\t\t\t\tcursor: not-allowed;\n\t\t\t\t}\n\n\t\t\t\t&:not(&--is-disabled) {\n\t\t\t\t\tcolor: var(--icon-02);\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tcolor: var(--icon-01);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\ntr.kt-table-row {\n\theight: 44px; // setting height on a tr element is setting its min-height. See https://www.w3.org/TR/CSS22/tables.html#height-layout --- value is taken from design\n\n\t&--is-click-disabled > :not(.kt-table__actions-column) {\n\t\tcolor: var(--text-05);\n\t\tcursor: not-allowed;\n\t\tbackground-color: rgb(from var(--ui-01) r g b / 60%);\n\t}\n\n\t&--is-empty {\n\t\tcolor: var(--text-05);\n\n\t\ttd {\n\t\t\ttext-align: center;\n\t\t}\n\t}\n\n\t&--is-interactive {\n\t\tcursor: pointer;\n\n\t\t&:hover {\n\t\t\tbackground-color: rgb(from var(--ui-05) r g b / 50%);\n\t\t}\n\n\t\t.kt-table-cell-content--is-click-disabled:hover {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&--is-loading.rectangle {\n\t\tdisplay: table-row;\n\t\theight: unset;\n\t}\n\n\t&--is-selected {\n\t\tbackground-color: rgb(from var(--ui-05) r g b / 50%);\n\t}\n}\n\n.kt-table-cell {\n\t&--was-successfully-dropped {\n\t\tanimation: 0.2s ease-in 1 flash-green;\n\t}\n\n\t&--displays-number {\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t&--has-drop-indicator {\n\t\t$drag-indicatordrag-border-width: 2px;\n\n\t\t&,\n\t\t&-right {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t&::before,\n\t\t&-right::after {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\twidth: $drag-indicatordrag-border-width;\n\t\t\theight: 100%;\n\t\t\tpointer-events: none;\n\t\t\tcontent: '';\n\t\t}\n\n\t\t&:first-child::before {\n\t\t\tleft: 0 !important;\n\t\t}\n\n\t\t&-right:last-child::after {\n\t\t\tright: 0 !important;\n\t\t}\n\n\t\t&::before {\n\t\t\tleft: calc($drag-indicatordrag-border-width / -2);\n\t\t}\n\n\t\t&-right::after {\n\t\t\tright: calc($drag-indicatordrag-border-width / -2);\n\t\t}\n\t}\n}\n</style>\n","import { Dashes } from '@metatypes/typography'\n\nimport type { KottiFieldDateRange } from '../../../kotti-field-date/types'\nimport type { KottiFieldNumber } from '../../../kotti-field-number/types'\nimport type {\n\tKottiFieldMultiSelect,\n\tKottiFieldSingleSelect,\n} from '../../../kotti-field-select/types'\nimport type { KottiFieldToggle } from '../../../kotti-field-toggle/types'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { KottiStandardTable } from '../types'\n\n/**\n * Returns the empty nullish value\n * @param filter the filter\n * @returns the empty value\n */\nexport const getEmptyValue = (\n\tfilter: KottiStandardTable.FilterInternal,\n): KottiStandardTable.FilterValue => {\n\tswitch (filter.type) {\n\t\tcase KottiStandardTable.FilterType.DATE_RANGE:\n\t\tcase KottiStandardTable.FilterType.NUMBER_RANGE:\n\t\t\treturn [null, null]\n\t\tcase KottiStandardTable.FilterType.MULTI_SELECT:\n\t\t\treturn []\n\t\tdefault:\n\t\t\treturn null\n\t}\n}\n\n/**\n * Returns the option label\n * @param options the options array\n * @param value the option value\n * @returns the option label\n */\nconst getOptionLabel = (\n\toptions: KottiFieldSingleSelect.Props['options'],\n\tvalue: KottiFieldSingleSelect.ModelValue,\n): string => options.find((option) => option.value === value)?.label ?? ''\n\n/**\n * Formats the filter value as a human readably string\n * @param value the value\n * @param filter the filter\n * @returns the value as a formated string\n */\nexport const formatFilterValue = (\n\tvalue: KottiStandardTable.FilterValue,\n\tfilter: KottiStandardTable.FilterInternal,\n\t// eslint-disable-next-line sonarjs/cognitive-complexity\n): string => {\n\tswitch (filter.type) {\n\t\tcase KottiStandardTable.FilterType.BOOLEAN: {\n\t\t\t// FIXME: useTranslationNamespace should not be called outside of hooks => this should be a hook or\n\t\t\t// the translation object should be passed from the outside\n\t\t\tconst translations = useTranslationNamespace('KtTable')\n\t\t\tconst _value = value as KottiFieldToggle.ModelValue\n\t\t\treturn _value ? translations.value.yes : ''\n\t\t}\n\t\tcase KottiStandardTable.FilterType.DATE_RANGE: {\n\t\t\tconst _value = value as KottiFieldDateRange.ModelValue\n\t\t\treturn _value[0] === null ? '' : _value.join(Dashes.EnDash)\n\t\t}\n\t\tcase KottiStandardTable.FilterType.MULTI_SELECT: {\n\t\t\tconst _value = value as KottiFieldMultiSelect.ModelValue\n\t\t\treturn _value.map((v) => getOptionLabel(filter.options, v)).join(', ')\n\t\t}\n\t\tcase KottiStandardTable.FilterType.NUMBER_RANGE: {\n\t\t\tconst _value = value as [\n\t\t\t\tKottiFieldNumber.ModelValue,\n\t\t\t\tKottiFieldNumber.ModelValue,\n\t\t\t]\n\t\t\tconst [min, max] = _value\n\n\t\t\tif (min === null && max === null) return ''\n\n\t\t\tconst unit = filter.unit ? ` ${filter.unit}` : ''\n\n\t\t\tif (min !== null && max !== null)\n\t\t\t\treturn min === max\n\t\t\t\t\t? `${min}${unit}`\n\t\t\t\t\t: `${min}${Dashes.EnDash}${max}${unit}`\n\n\t\t\t// FIXME: useTranslationNamespace should not be called outside of hooks => this should be a hook or\n\t\t\t// the translation object should be passed from the outside\n\t\t\tconst translations = useTranslationNamespace('KtStandardTable')\n\n\t\t\treturn max !== null\n\t\t\t\t? `${translations.value.upTo} ${max}${unit}`\n\t\t\t\t: min !== null\n\t\t\t\t\t? `${translations.value.moreThan} ${min}${unit}`\n\t\t\t\t\t: ''\n\t\t}\n\t\tcase KottiStandardTable.FilterType.SINGLE_SELECT: {\n\t\t\tconst _value = value as KottiFieldSingleSelect.ModelValue\n\t\t\treturn getOptionLabel(filter.options, _value)\n\t\t}\n\t}\n}\n\n/**\n * Checks if the value is nullish\n * @param value the field value\n * @returns true if the value is nullish, false otherwise\n */\nexport const isEmptyValue = (value: KottiStandardTable.FilterValue): boolean =>\n\tArray.isArray(value)\n\t\t? value.length === 0 || (value[0] === null && value[1] === null)\n\t\t: value === null\n\n/**\n * Re-orders the Number Range filter value to be [min, max].\n * Value is re-ordered only if both, min and max, are not null values.\n * @param range the Number Range filter value\n * @returns the re-ordered range value\n */\nexport const getReorderedRange = (\n\trange: [KottiFieldNumber.ModelValue, KottiFieldNumber.ModelValue],\n): [KottiFieldNumber.ModelValue, KottiFieldNumber.ModelValue] => {\n\tconst [min, max] = range\n\n\tif (min !== null && max !== null && min > max) return [max, min]\n\n\treturn range\n}\n","<template>\n\t<KtFieldToggle\n\t\t:data-test=\"filter.dataTest\"\n\t\t:isLoading=\"isLoading\"\n\t\tisOptional\n\t\t:label=\"filter.label\"\n\t\t:modelValue=\"modelValue\"\n\t\tsize=\"small\"\n\t\ttype=\"switch\"\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t>\n\t\t<span v-if=\"slotLabel\" v-text=\"slotLabel\" />\n\t</KtFieldToggle>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, type PropType } from 'vue'\n\nimport KtFieldToggle from '../../../../kotti-field-toggle/KtFieldToggle.vue'\nimport type { KottiStandardTable } from '../../types'\n\nexport default defineComponent({\n\tname: 'BooleanFilter',\n\tcomponents: {\n\t\tKtFieldToggle,\n\t},\n\tprops: {\n\t\tfilter: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiStandardTable.FilterInternal & {\n\t\t\t\t\ttype: KottiStandardTable.FilterType.BOOLEAN\n\t\t\t\t}\n\t\t\t>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: { default: null, type: Boolean as PropType<boolean | null> },\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (value: KottiStandardTable.FilterValue) => {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\tid: props.filter.id,\n\t\t\t\t\toperation: props.filter.operations[0], // Current filters support only one operation\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t},\n\t\t\tslotLabel: computed(() => {\n\t\t\t\tif (!props.filter.slotLabels || props.modelValue === null) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst index = props.modelValue ? 1 : 0\n\t\t\t\treturn props.filter.slotLabels[index]\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n","import dayjs from 'dayjs'\nimport type { ManipulateType } from 'dayjs'\n\nimport { ISO8601 } from '../../../constants'\n\n/**\n * Returns formatted today's date. Default template is ISO8601.\n * @param templateFormat dayjs compatible datetime format string\n * @returns formatted date\n */\nexport const getToday = (templateFormat: string = ISO8601): string =>\n\tdayjs().format(templateFormat)\n\n/**\n * Returns formatted today's date with the specified amount of time subtracted. Default template is ISO8601.\n * @param unit dayjs time unit\n * @param templateFormat dayjs compatible datetime format string\n * @returns formatted date\n */\nexport const getLast = (\n\tunit: ManipulateType,\n\ttemplateFormat: string = ISO8601,\n): string => dayjs().subtract(1, unit).format(templateFormat)\n","<template>\n\t<KtFieldDateRange\n\t\t:isLoading=\"isLoading\"\n\t\tisOptional\n\t\t:label=\"filter.label\"\n\t\t:modelValue=\"modelValue\"\n\t\t:placeholder=\"[translations.startDate, translations.endDate]\"\n\t\t:shortcuts=\"shortcuts\"\n\t\tsize=\"small\"\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, type PropType } from 'vue'\n\nimport KtFieldDateRange from '../../../../kotti-field-date/KtFieldDateRange.vue'\nimport { useTranslationNamespace } from '../../../../kotti-i18n/hooks'\nimport type { KottiStandardTable } from '../../types'\nimport { getLast, getToday } from '../../utilities/date'\n\nexport default defineComponent({\n\tname: 'DateRangeFilter',\n\tcomponents: {\n\t\tKtFieldDateRange,\n\t},\n\tprops: {\n\t\tfilter: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiStandardTable.FilterInternal & {\n\t\t\t\t\ttype: KottiStandardTable.FilterType.DATE_RANGE\n\t\t\t\t}\n\t\t\t>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: {\n\t\t\tdefault: () => [null, null],\n\t\t\ttype: Array as unknown as PropType<[string | null, string | null]>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtStandardTable')\n\n\t\treturn {\n\t\t\tonUpdateModelValue: (value: KottiStandardTable.FilterValue) => {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\tid: props.filter.id,\n\t\t\t\t\toperation: props.filter.operations[0], // Current filters support only one operation\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t},\n\t\t\tshortcuts: computed(() => [\n\t\t\t\t{\n\t\t\t\t\tlabel: translations.value.today,\n\t\t\t\t\tvalue: [getToday(), getToday()],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: translations.value.lastWeek,\n\t\t\t\t\tvalue: [getLast('week'), getToday()],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: translations.value.lastMonth,\n\t\t\t\t\tvalue: [getLast('month'), getToday()],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: translations.value.lastYear,\n\t\t\t\t\tvalue: [getLast('year'), getToday()],\n\t\t\t\t},\n\t\t\t]),\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<KtFieldMultiSelect\n\t\t:data-test=\"filter.dataTest\"\n\t\t:isLoading=\"isLoading\"\n\t\t:isUnsorted=\"filter.isUnsorted\"\n\t\tisOptional\n\t\t:label=\"filter.label\"\n\t\t:modelValue=\"modelValue\"\n\t\t:options=\"filter.options\"\n\t\tsize=\"small\"\n\t\t@update:modelValue=\"onUpdateModelValue\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, type PropType } from 'vue'\n\nimport KtFieldMultiSelect from '../../../../kotti-field-select/KtFieldMultiSelect.vue'\nimport type { KottiStandardTable } from '../../types'\n\nexport default defineComponent({\n\tname: 'MultiSelectFilter',\n\tcomponents: {\n\t\tKtFieldMultiSelect,\n\t},\n\tprops: {\n\t\tfilter: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiStandardTable.FilterInternal & {\n\t\t\t\t\ttype: KottiStandardTable.FilterType.MULTI_SELECT\n\t\t\t\t}\n\t\t\t>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: {\n\t\t\tdefault: () => [null, null],\n\t\t\ttype: Array as PropType<(number | string)[]>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tonUpdateModelValue: (value: KottiStandardTable.FilterValue) => {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\tid: props.filter.id,\n\t\t\t\t\toperation: props.filter.operations[0], // Current filters support only one operation\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<fieldset class=\"number-range-filter\">\n\t\t<div v-if=\"filter.label\" class=\"number-range-filter__header\">\n\t\t\t<legend class=\"number-range-filter__label\">\n\t\t\t\t<span v-text=\"filter.label\" />\n\t\t\t</legend>\n\t\t</div>\n\t\t<div class=\"number-range-filter__field\">\n\t\t\t<KtFieldNumber\n\t\t\t\tv-bind=\"minFieldProps\"\n\t\t\t\t@blur=\"onMinInputBlur\"\n\t\t\t\t@update:modelValue=\"onMinValueInput\"\n\t\t\t/>\n\t\t\t<KtFieldNumber\n\t\t\t\tv-bind=\"maxFieldProps\"\n\t\t\t\t@blur=\"onMaxInputBlur\"\n\t\t\t\t@update:modelValue=\"onMaxValueInput\"\n\t\t\t/>\n\t\t</div>\n\t</fieldset>\n</template>\n\n<script lang=\"ts\">\nimport isEqual from 'lodash/isEqual.js'\nimport { computed, defineComponent, type PropType, ref, watch } from 'vue'\n\nimport KtFieldNumber from '../../../../kotti-field-number/KtFieldNumber.vue'\nimport type { KottiFieldNumber } from '../../../../kotti-field-number/types'\nimport { useTranslationNamespace } from '../../../../kotti-i18n/hooks'\nimport type { KottiStandardTable } from '../../types'\nimport { getReorderedRange } from '../../utilities/filters'\n\nexport default defineComponent({\n\tname: 'NumberRangeFilter',\n\tcomponents: {\n\t\tKtFieldNumber,\n\t},\n\tprops: {\n\t\tfilter: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiStandardTable.FilterInternal & {\n\t\t\t\t\ttype: KottiStandardTable.FilterType.NUMBER_RANGE\n\t\t\t\t}\n\t\t\t>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: {\n\t\t\tdefault: () => [null, null],\n\t\t\ttype: Array as unknown as PropType<[number | null, number | null]>,\n\t\t},\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\tconst translations = useTranslationNamespace('KtStandardTable')\n\n\t\tconst range = ref<\n\t\t\t[KottiFieldNumber.ModelValue, KottiFieldNumber.ModelValue]\n\t\t>([null, null])\n\n\t\tconst reOrderAndEmitRangeValue = () => {\n\t\t\trange.value = getReorderedRange(range.value)\n\n\t\t\temit('update:modelValue', {\n\t\t\t\tid: props.filter.id,\n\t\t\t\toperation: props.filter.operations[0], // Current filters support only one operation\n\t\t\t\tvalue: range.value,\n\t\t\t})\n\t\t}\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newRange) => {\n\t\t\t\tif (!isEqual(newRange, range.value))\n\t\t\t\t\trange.value = [newRange[0], newRange[1]]\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tmaxFieldProps: computed(() => ({\n\t\t\t\tdataTest: [props.filter.dataTest, 'max-value-input']\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('.'),\n\t\t\t\tdecimalPlaces: props.filter.decimalPlaces,\n\t\t\t\thideChangeButtons: true,\n\t\t\t\tisLoading: props.isLoading,\n\t\t\t\tisOptional: true,\n\t\t\t\tmodelValue: range.value[1],\n\t\t\t\tplaceholder: translations.value.max,\n\t\t\t\tprefix: props.filter.unit,\n\t\t\t\tsize: 'small',\n\t\t\t})),\n\t\t\tminFieldProps: computed(() => ({\n\t\t\t\tdataTest: [props.filter.dataTest, 'min-value-input']\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('.'),\n\t\t\t\tdecimalPlaces: props.filter.decimalPlaces,\n\t\t\t\thideChangeButtons: true,\n\t\t\t\tisLoading: props.isLoading,\n\t\t\t\tisOptional: true,\n\t\t\t\tmodelValue: range.value[0],\n\t\t\t\tplaceholder: translations.value.min,\n\t\t\t\tprefix: props.filter.unit,\n\t\t\t\tsize: 'small',\n\t\t\t})),\n\t\t\tonMaxInputBlur: (newMax: KottiFieldNumber.ModelValue) => {\n\t\t\t\tif (props.modelValue[1] !== newMax) reOrderAndEmitRangeValue()\n\t\t\t},\n\t\t\tonMaxValueInput: (newMax: KottiFieldNumber.ModelValue) => {\n\t\t\t\trange.value = [range.value[0], newMax]\n\t\t\t},\n\t\t\tonMinInputBlur: (newMin: KottiFieldNumber.ModelValue) => {\n\t\t\t\tif (props.modelValue[0] !== newMin) reOrderAndEmitRangeValue()\n\t\t\t},\n\t\t\tonMinValueInput: (newMin: KottiFieldNumber.ModelValue) => {\n\t\t\t\trange.value = [newMin, range.value[1]]\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.number-range-filter {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--unit-2);\n\n\t/* overwrite fieldset properties */\n\tpadding: 0;\n\tmargin: 0;\n\tborder: none;\n\n\t&__field {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\n\t\t:deep(.kt-field) {\n\t\t\tflex: 1 1 auto;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tfont-size: 0.6rem;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t// This emulates the font-size of small kt-field labels\n\t\tfont-size: 0.9em;\n\t\tcolor: var(--text-02);\n\n\t\tspan {\n\t\t\tfont-weight: 500;\n\t\t}\n\t}\n}\n</style>\n","<template>\n\t<KtFieldSingleSelect\n\t\t:data-test=\"filter.dataTest\"\n\t\t:isLoading=\"isLoading\"\n\t\t:isUnsorted=\"filter.isUnsorted\"\n\t\tisOptional\n\t\t:label=\"filter.label\"\n\t\t:modelValue=\"modelValue\"\n\t\t:options=\"filter.options\"\n\t\tsize=\"small\"\n\t\t@update:modelValue=\"onInput\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, type PropType } from 'vue'\n\nimport KtFieldSingleSelect from '../../../../kotti-field-select/KtFieldSingleSelect.vue'\nimport type { KottiStandardTable } from '../../types'\n\nexport default defineComponent({\n\tname: 'SingleSelectFilter',\n\tcomponents: {\n\t\tKtFieldSingleSelect,\n\t},\n\tprops: {\n\t\tfilter: {\n\t\t\trequired: true,\n\t\t\ttype: Object as PropType<\n\t\t\t\tKottiStandardTable.FilterInternal & {\n\t\t\t\t\ttype: KottiStandardTable.FilterType.SINGLE_SELECT\n\t\t\t\t}\n\t\t\t>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tmodelValue: { default: null, type: [String, Number] },\n\t},\n\temits: ['update:modelValue'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tonInput: (value: KottiStandardTable.FilterValue) => {\n\t\t\t\temit('update:modelValue', {\n\t\t\t\t\tid: props.filter.id,\n\t\t\t\t\toperation: props.filter.operations[0], // Current filters support only one operation\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n","<template>\n\t<ScrollableContainer>\n\t\t<div class=\"filter-list\">\n\t\t\t<component\n\t\t\t\t:is=\"getComponent(filter)\"\n\t\t\t\tv-for=\"(filter, index) in filters\"\n\t\t\t\t:key=\"index\"\n\t\t\t\t:filter=\"filter\"\n\t\t\t\t:isLoading=\"isLoading\"\n\t\t\t\t:modelValue=\"getValue(filter)\"\n\t\t\t\t@update:modelValue=\"onUpdateModelValue\"\n\t\t\t/>\n\t\t</div>\n\t</ScrollableContainer>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, type PropType } from 'vue'\n\nimport ScrollableContainer from '../../../shared-components/ScrollableContainer.vue'\nimport { KottiStandardTable } from '../types'\nimport { getEmptyValue, isEmptyValue } from '../utilities/filters'\n\nimport BooleanFilter from './filters/Boolean.vue'\nimport DateRangeFilter from './filters/DateRange.vue'\nimport MultiSelectFilter from './filters/MultiSelect.vue'\nimport NumberRangeFilter from './filters/NumberRange.vue'\nimport SingleSelectFilter from './filters/SingleSelect.vue'\n\nexport default defineComponent({\n\tname: 'FilterList',\n\tcomponents: {\n\t\tBooleanFilter,\n\t\tDateRangeFilter,\n\t\tMultiSelectFilter,\n\t\tNumberRangeFilter,\n\t\tScrollableContainer,\n\t\tSingleSelectFilter,\n\t},\n\tprops: {\n\t\tappliedFilters: {\n\t\t\tdefault: () => [],\n\t\t\ttype: Array as PropType<KottiStandardTable.AppliedFilter[]>,\n\t\t},\n\t\tfilters: {\n\t\t\tdefault: () => [],\n\t\t\ttype: Array as PropType<KottiStandardTable.FilterInternal[]>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t},\n\temits: ['update:appliedFilters'],\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tgetComponent: (filter: KottiStandardTable.FilterInternal) => {\n\t\t\t\tswitch (filter.type) {\n\t\t\t\t\tcase KottiStandardTable.FilterType.BOOLEAN:\n\t\t\t\t\t\treturn 'BooleanFilter'\n\t\t\t\t\tcase KottiStandardTable.FilterType.DATE_RANGE:\n\t\t\t\t\t\treturn 'DateRangeFilter'\n\t\t\t\t\tcase KottiStandardTable.FilterType.MULTI_SELECT:\n\t\t\t\t\t\treturn 'MultiSelectFilter'\n\t\t\t\t\tcase KottiStandardTable.FilterType.NUMBER_RANGE:\n\t\t\t\t\t\treturn 'NumberRangeFilter'\n\t\t\t\t\tcase KottiStandardTable.FilterType.SINGLE_SELECT:\n\t\t\t\t\t\treturn 'SingleSelectFilter'\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetValue: (filter: KottiStandardTable.FilterInternal) =>\n\t\t\t\tprops.appliedFilters.find((v) => v.id === filter.id)?.value ??\n\t\t\t\tgetEmptyValue(filter),\n\t\t\tonUpdateModelValue: (value: KottiStandardTable.AppliedFilter) => {\n\t\t\t\tconst isNewValue = !props.appliedFilters.some((v) => v.id === value.id)\n\t\t\t\tconst updatedValueList = (\n\t\t\t\t\tisNewValue\n\t\t\t\t\t\t? [...props.appliedFilters, value]\n\t\t\t\t\t\t: props.appliedFilters.map((v) => (v.id === value.id ? value : v))\n\t\t\t\t).filter(({ value }) => !isEmptyValue(value))\n\n\t\t\t\temit('update:appliedFilters', updatedValueList)\n\t\t\t},\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.filter-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--unit-4);\n\tpadding: var(--unit-2) calc(var(--unit-3) + var(--unit-h));\n\n\t/* stylelint-disable-next-line selector-class-pattern */\n\t:deep(.kt-field__wrapper) .kt-field__header__label__suffix {\n\t\tdisplay: none;\n\t}\n\n\t:deep(.kt-field),\n\t:deep(.kt-field-select) {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n:deep(.scrollable-container__content) {\n\tmax-height: 40vh;\n\tpadding: 0;\n}\n</style>\n","<template>\n\t<KtPopover\n\t\tv-if=\"filters && filters.length > 0\"\n\t\t:size=\"size\"\n\t\t:trigger=\"isLoading ? 'manual' : 'click'\"\n\t>\n\t\t<KtButton\n\t\t\tdata-test=\"table-filter-edit-button\"\n\t\t\t:disabled=\"isLoading\"\n\t\t\t:icon=\"Yoco.Icon.CHEVRON_DOWN\"\n\t\t\ticonPosition=\"right\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:label=\"translations.filters\"\n\t\t/>\n\t\t<template #contextEscapeContent>\n\t\t\t<div class=\"table-filters\">\n\t\t\t\t<FilterList\n\t\t\t\t\t:appliedFilters=\"appliedFilters\"\n\t\t\t\t\tv-bind=\"{\n\t\t\t\t\t\tfilters,\n\t\t\t\t\t\tisLoading,\n\t\t\t\t\t}\"\n\t\t\t\t\t@update:appliedFilters=\"$emit('update:appliedFilters', $event)\"\n\t\t\t\t/>\n\t\t\t\t<div class=\"table-filters__footer\">\n\t\t\t\t\t<KtButton\n\t\t\t\t\t\tdata-test=\"table-filter-clear-all-button\"\n\t\t\t\t\t\t:disabled=\"isLoading\"\n\t\t\t\t\t\t:label=\"translations.clearAll\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t@click=\"$emit('update:appliedFilters', [])\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</KtPopover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, type PropType } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport KtButton from '../../../kotti-button/KtButton.vue'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport KtPopover from '../../../kotti-popover/KtPopover.vue'\nimport type { KottiStandardTable } from '../types'\n\nimport FilterList from './FilterList.vue'\n\nexport default defineComponent({\n\tname: 'TableFilters',\n\tcomponents: {\n\t\tFilterList,\n\t\tKtButton,\n\t\tKtPopover,\n\t},\n\tprops: {\n\t\tappliedFilters: {\n\t\t\tdefault: () => [],\n\t\t\ttype: Array as PropType<KottiStandardTable.AppliedFilter[]>,\n\t\t},\n\t\tfilters: {\n\t\t\tdefault: () => [],\n\t\t\ttype: Array as PropType<KottiStandardTable.FilterInternal[]>,\n\t\t},\n\t\tisLoading: { default: false, type: Boolean },\n\t\tsize: { default: 'md', type: String },\n\t},\n\temits: ['update:appliedFilters'],\n\tsetup() {\n\t\treturn {\n\t\t\ttranslations: useTranslationNamespace('KtStandardTable'),\n\t\t\tYoco,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.table-filters {\n\t// KtPopover padding reset\n\tmargin: calc(-1 * var(--unit-2));\n\n\t&__footer {\n\t\tpadding: var(--unit-2);\n\t\ttext-align: end;\n\t}\n}\n</style>\n","// eslint-disable-next-line sonarjs/slow-regex\nconst separatorRegex = new RegExp(/\\s*\\|\\s*/g)\n\n/**\n * Applies text pluralization\n * @param translation the translated text with pluralization cases separated by `|`\n * @param count the amount of elements\n * @param values a token-value dictionary to replace tokens in the translated text\n * @returns the pluralized text\n */\nexport const pluralize = (\n\ttranslation: string,\n\tcount: number,\n\tvalues: Record<string, number | string>,\n): string => {\n\tconst cases = translation.split(separatorRegex)\n\n\tif (cases.length < 2) {\n\t\tthrow new Error('Invalid translation string')\n\t}\n\n\tlet result = (\n\t\tcount === 0\n\t\t\t? cases[0]\n\t\t\t: count === 1\n\t\t\t\t? (cases[1] ?? cases[0])\n\t\t\t\t: (cases[2] ?? cases[1] ?? cases[0])\n\t) as string\n\n\tObject.entries(values).forEach(([key, value]) => {\n\t\tresult = result.replaceAll(`{${key}}`, String(value))\n\t})\n\n\treturn result\n}\n","<template>\n\t<div class=\"table-global-selection\">\n\t\t<span v-text=\"selectionLabel\" />\n\t\t<KtButton\n\t\t\tclass=\"table-global-selection__clear-all\"\n\t\t\t:label=\"translations.clearAll\"\n\t\t\tsize=\"small\"\n\t\t\ttype=\"text\"\n\t\t\t@click=\"$emit('emptySelection')\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\n\nimport KtButton from '../../../kotti-button/KtButton.vue'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport { pluralize } from '../utilities/translation'\n\nexport default defineComponent({\n\tname: 'GlobalSelection',\n\tcomponents: {\n\t\tKtButton,\n\t},\n\tprops: {\n\t\tselectionCount: {\n\t\t\trequired: true,\n\t\t\ttype: Number,\n\t\t},\n\t},\n\temits: ['emptySelection'],\n\tsetup: (props) => {\n\t\tconst translations = useTranslationNamespace('KtStandardTable')\n\n\t\treturn {\n\t\t\tselectionLabel: computed(() => {\n\t\t\t\treturn pluralize(\n\t\t\t\t\ttranslations.value.selectionCount,\n\t\t\t\t\tprops.selectionCount,\n\t\t\t\t\t{\n\t\t\t\t\t\tcount: props.selectionCount,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}),\n\t\t\ttranslations,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.table-global-selection {\n\tdisplay: flex;\n\talign-items: center;\n\n\t&__clear-all {\n\t\tpadding: 0 6px;\n\t\tmargin-left: 6px;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"table-page-size\">\n\t\t<span v-text=\"translations.itemsPerPage\" />\n\t\t<KtFieldSingleSelect\n\t\t\tclass=\"table-page-size__selector\"\n\t\t\tdataTest=\"table-page-size-selector\"\n\t\t\thideClear\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:modelValue=\"pageSize\"\n\t\t\t:options=\"options\"\n\t\t\tsize=\"small\"\n\t\t\t@update:modelValue=\"$emit('update:pageSize', $event)\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, type PropType } from 'vue'\n\nimport KtFieldSingleSelect from '../../../kotti-field-select/KtFieldSingleSelect.vue'\nimport type { KottiFieldSingleSelect } from '../../../kotti-field-select/types'\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\n\nexport default defineComponent({\n\tname: 'TablePageSize',\n\tcomponents: {\n\t\tKtFieldSingleSelect,\n\t},\n\tprops: {\n\t\tisLoading: { default: false, type: Boolean },\n\t\tpageSize: { required: true, type: Number },\n\t\tpageSizeOptions: { required: true, type: Array as PropType<number[]> },\n\t},\n\temits: ['update:pageSize'],\n\tsetup(props) {\n\t\treturn {\n\t\t\toptions: computed<KottiFieldSingleSelect.Props['options']>(() =>\n\t\t\t\tprops.pageSizeOptions.map((value) => ({\n\t\t\t\t\tdataTest: `table-page-size-options-${value}`,\n\t\t\t\t\tlabel: String(value),\n\t\t\t\t\tvalue,\n\t\t\t\t})),\n\t\t\t),\n\t\t\ttranslations: useTranslationNamespace('KtStandardTable'),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.table-page-size {\n\tdisplay: flex;\n\tcolumn-gap: var(--unit-4);\n\talign-items: center;\n\n\t&__selector {\n\t\tmin-width: 96px;\n\t}\n}\n</style>\n","<template>\n\t<div class=\"table-pagination\">\n\t\t<KtLoading v-if=\"isLoading\" class=\"table-pagination__loading\" />\n\t\t<template v-else>\n\t\t\t<span v-text=\"resultLabel\" />\n\t\t\t<KtPagination\n\t\t\t\tv-if=\"!rowCount || rowCount > 0\"\n\t\t\t\t:adjacentAmount=\"2\"\n\t\t\t\t:page=\"pageIndex + 1\"\n\t\t\t\t:pageSize=\"pageSize\"\n\t\t\t\tpagingStyle=\"flex\"\n\t\t\t\t:total=\"rowCount\"\n\t\t\t\t@update:page=\"(value: number) => $emit('update:pageIndex', value - 1)\"\n\t\t\t/>\n\t\t</template>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { Dashes } from '@metatypes/typography'\nimport { computed, defineComponent } from 'vue'\nimport type { PropType } from 'vue'\n\nimport { useTranslationNamespace } from '../../../kotti-i18n/hooks'\nimport KtLoading from '../../../kotti-loading/KtLoading.vue'\nimport KtPagination from '../../../kotti-pagination/KtPagination.vue'\nimport { pluralize } from '../utilities/translation'\n\nexport default defineComponent({\n\tname: 'TablePagination',\n\tcomponents: {\n\t\tKtLoading,\n\t\tKtPagination,\n\t},\n\tprops: {\n\t\tisLoading: { default: false, type: Boolean },\n\t\tpageIndex: { required: true, type: Number },\n\t\tpageSize: { required: true, type: Number },\n\t\trowCount: {\n\t\t\tdefault: null,\n\t\t\ttype: Number as PropType<number | null>,\n\t\t},\n\t},\n\temits: ['update:pageIndex'],\n\tsetup(props) {\n\t\tconst translations = useTranslationNamespace('KtStandardTable')\n\n\t\treturn {\n\t\t\tresultLabel: computed(() => {\n\t\t\t\tconst start = props.pageIndex * props.pageSize\n\t\t\t\tif (props.rowCount === null) {\n\t\t\t\t\treturn `${start + 1}${Dashes.EnDash}${start + props.pageSize}`\n\t\t\t\t}\n\t\t\t\tconst end = Math.min(start + props.pageSize, props.rowCount)\n\n\t\t\t\treturn pluralize(translations.value.resultsCounter, props.rowCount, {\n\t\t\t\t\trange: `${start + 1}${Dashes.EnDash}${end}`,\n\t\t\t\t\ttotal: props.rowCount,\n\t\t\t\t})\n\t\t\t}),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.table-pagination {\n\tdisplay: flex;\n\tcolumn-gap: var(--unit-8);\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmargin-left: auto;\n\n\t&__loading {\n\t\twidth: 100%;\n\t\theight: 32px;\n\t}\n\n\t:deep(.kt-pagination__page-item) {\n\t\tmargin-top: 0;\n\t}\n}\n</style>\n","import { inject, provide, type Ref } from 'vue'\n\nimport type { KottiFieldText } from '../../kotti-field-text/types'\nimport type { KottiTable } from '../table/types'\n\nimport type { KottiStandardTable } from './types'\n\nexport type StandardTableContext<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string = string,\n> = Ref<{\n\tinternal: {\n\t\tappliedFilters: KottiStandardTable.AppliedFilter[]\n\t\tcolumnOrder: COLUMN_ID[]\n\t\tcolumns: KottiTable.Column<ROW, COLUMN_ID>[]\n\t\tfilters: KottiStandardTable.FilterInternal[]\n\t\tgetFilter: (\n\t\t\tid: KottiStandardTable.FilterInternal['id'],\n\t\t) => KottiStandardTable.FilterInternal | null\n\t\thasDragAndDrop: boolean\n\t\tisLoading: boolean\n\t\toptions?: KottiStandardTable.Options\n\t\tpageSizeOptions: number[]\n\t\tpagination: { pageIndex: number; pageSize: number }\n\t\trowCount: number | null\n\t\tsearchValue: KottiFieldText.ModelValue\n\t\tselectMode: 'global' | 'single-page' | null\n\t\tsetAppliedFilters: (value: KottiStandardTable.AppliedFilter[]) => void\n\t\tsetColumnSelection: (value: COLUMN_ID[]) => void\n\t\tsetPageIndex: (value: number) => void\n\t\tsetPageSize: (value: number) => void\n\t\tsetSearchValue: (value: KottiFieldText.ModelValue) => void\n\t}\n}>\n\nconst getStandardTableContextKey = (id: string): string =>\n\t`kt-standard-table-${id}`\n\nexport const useProvideStandardTableContext = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>(\n\tid: string,\n\tstandardTableContext: StandardTableContext<ROW, COLUMN_ID>,\n): void => {\n\tprovide<StandardTableContext<ROW, COLUMN_ID>>(\n\t\tgetStandardTableContextKey(id),\n\t\tstandardTableContext,\n\t)\n}\n\nexport const useStandardTableContext = <ROW extends KottiTable.AnyRow>(\n\tid: string,\n): StandardTableContext<ROW> => {\n\tconst context = inject<StandardTableContext<ROW>>(\n\t\tgetStandardTableContextKey(id),\n\t)\n\n\tif (!context) {\n\t\tthrow new Error(`KtStandardTable: could not find context for “${id}”`)\n\t}\n\n\treturn context\n}\n","<template>\n\t<div class=\"kt-standard-table\">\n\t\t<div\n\t\t\tv-if=\"title || $slots['header-actions']\"\n\t\t\tclass=\"kt-standard-table__header\"\n\t\t>\n\t\t\t<h1 v-if=\"title\" v-text=\"title\" />\n\t\t\t<div v-if=\"$slots['header-actions']\" class=\"kt-standard-table__slot\">\n\t\t\t\t<slot name=\"header-actions\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"\n\t\t\t\t!hideTableActions ||\n\t\t\t\t$slots['control-actions'] ||\n\t\t\t\tinlineFilters.length > 0\n\t\t\t\"\n\t\t\tclass=\"kt-standard-table__controls\"\n\t\t>\n\t\t\t<div v-if=\"!hideTableActions\" class=\"kt-standard-table__table-actions\">\n\t\t\t\t<TableSearch\n\t\t\t\t\tv-if=\"!options?.hideControls?.search\"\n\t\t\t\t\tclass=\"kt-standard-table__search-input\"\n\t\t\t\t\tdataTest=\"table-search-input\"\n\t\t\t\t\t:isLoading=\"isLoadingAndEmpty\"\n\t\t\t\t\t:modelValue=\"searchValue\"\n\t\t\t\t\t:placeholder=\"options?.searchPlaceholder ?? translations.search\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t@update:modelValue=\"onUpdateSearchValue\"\n\t\t\t\t/>\n\t\t\t\t<TableFilters\n\t\t\t\t\tv-if=\"!options?.hideControls?.filters\"\n\t\t\t\t\t:appliedFilters=\"appliedFilters\"\n\t\t\t\t\t:filters=\"popoverFilters\"\n\t\t\t\t\t:isLoading=\"isLoadingAndEmpty\"\n\t\t\t\t\t:size=\"options?.popoversSize?.filters\"\n\t\t\t\t\t@update:appliedFilters=\"onUpdateAppliedFilters\"\n\t\t\t\t/>\n\t\t\t\t<KtColumnSelector\n\t\t\t\t\tv-if=\"!options?.hideControls?.columns\"\n\t\t\t\t\t:canChangeColumnOrder=\"canChangeColumnOrder\"\n\t\t\t\t\tcanSearchColumn\n\t\t\t\t\t:categories=\"columnOptions\"\n\t\t\t\t\tdataTest=\"table-column-edit\"\n\t\t\t\t\t:isLoading=\"isLoadingAndEmpty\"\n\t\t\t\t\t:selection=\"columnSelection\"\n\t\t\t\t\t:size=\"options?.popoversSize?.columns\"\n\t\t\t\t\t@update:selection=\"onUpdateColumnSelection\"\n\t\t\t\t>\n\t\t\t\t\t<template #footer>\n\t\t\t\t\t\t<KtButton\n\t\t\t\t\t\t\tdata-test=\"table-column-show-all-button\"\n\t\t\t\t\t\t\t:disabled=\"isShowAllColumnsDisabled\"\n\t\t\t\t\t\t\t:label=\"translations.showAll\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t@click=\"onShowAllColumns\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t</KtColumnSelector>\n\t\t\t</div>\n\t\t\t<div class=\"kt-standard-table__right-aligned-container\">\n\t\t\t\t<div v-if=\"$slots['control-actions']\" class=\"kt-standard-table__slot\">\n\t\t\t\t\t<slot name=\"control-actions\" />\n\t\t\t\t</div>\n\t\t\t\t<FilterList\n\t\t\t\t\tv-if=\"inlineFilters.length > 0\"\n\t\t\t\t\t:appliedFilters=\"appliedFilters\"\n\t\t\t\t\tclass=\"kt-standard-table__inline-filters\"\n\t\t\t\t\t:filters=\"inlineFilters\"\n\t\t\t\t\t:isLoading=\"isLoadingAndEmpty\"\n\t\t\t\t\t@update:appliedFilters=\"onUpdateAppliedFilters\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"filterTags.length > 0 || $slots['applied-filter-actions']\"\n\t\t\tclass=\"kt-standard-table__info\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-if=\"filterTags.length > 0 && !isLoadingAndEmpty\"\n\t\t\t\tclass=\"kt-standard-table__applied-filters\"\n\t\t\t>\n\t\t\t\t<KtTag\n\t\t\t\t\tv-for=\"({ label, value }, index) in filterTags\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\tclass=\"kt-standard-table__applied-filter-tag\"\n\t\t\t\t\tisDisabled\n\t\t\t\t\t:label=\"label\"\n\t\t\t\t\t:text=\"value\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"$slots['applied-filter-actions']\"\n\t\t\t\tclass=\"kt-standard-table__slot\"\n\t\t\t>\n\t\t\t\t<slot name=\"applied-filter-actions\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<TableGlobalSelection\n\t\t\tv-show=\"showGlobalSelection\"\n\t\t\t:selectionCount=\"selectionCount\"\n\t\t\t@emptySelection=\"unselectAllRows\"\n\t\t/>\n\t\t<slot\n\t\t\tv-if=\"$slots['table']\"\n\t\t\t:emptyText=\"emptyText\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\tname=\"table\"\n\t\t\t:rows=\"tableRows\"\n\t\t\t:tableId=\"tableId\"\n\t\t\t:tableProps=\"{ emptyText, isLoading, tableId }\"\n\t\t/>\n\t\t<KtTable\n\t\t\tv-else\n\t\t\t:emptyText=\"emptyText\"\n\t\t\t:isLoading=\"isLoading\"\n\t\t\t:tableId=\"tableId\"\n\t\t/>\n\t\t<div class=\"kt-standard-table__footer\">\n\t\t\t<TablePageSize\n\t\t\t\tv-bind=\"{\n\t\t\t\t\tisLoading,\n\t\t\t\t\tpageSize,\n\t\t\t\t\tpageSizeOptions,\n\t\t\t\t}\"\n\t\t\t\t@update:pageSize=\"onUpdatePageSize\"\n\t\t\t/>\n\t\t\t<TablePagination\n\t\t\t\tv-bind=\"{\n\t\t\t\t\tisLoading,\n\t\t\t\t\tpageIndex,\n\t\t\t\t\tpageSize,\n\t\t\t\t\trowCount,\n\t\t\t\t}\"\n\t\t\t\t@update:pageIndex=\"onUpdatePageIndex\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, watch } from 'vue'\n\nimport { KtButton } from '../kotti-button'\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { KtTag } from '../kotti-tag'\nimport { makeProps } from '../make-props'\n\nimport TableSearch from './components/SearchInput.vue'\nimport KtColumnSelector from './KtColumnSelector.vue'\nimport KtTable from './KtTable.vue'\nimport FilterList from './standard-table/components/FilterList.vue'\nimport TableFilters from './standard-table/components/Filters.vue'\nimport TableGlobalSelection from './standard-table/components/GlobalSelection.vue'\nimport TablePageSize from './standard-table/components/PageSize.vue'\nimport TablePagination from './standard-table/components/Pagination.vue'\nimport { useStandardTableContext } from './standard-table/context'\nimport { KottiStandardTable } from './standard-table/types'\nimport { formatFilterValue } from './standard-table/utilities/filters'\nimport { useTableContext } from './table/context'\nimport type { KottiColumnSelector } from './types'\n\nexport default defineComponent({\n\tname: 'KtStandardTable',\n\tcomponents: {\n\t\tFilterList,\n\t\tKtButton,\n\t\tKtColumnSelector,\n\t\tKtTable,\n\t\tKtTag,\n\t\tTableFilters,\n\t\tTableGlobalSelection,\n\t\tTablePageSize,\n\t\tTablePagination,\n\t\tTableSearch,\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t} as any,\n\tprops: makeProps(KottiStandardTable.propsSchema),\n\temits: ['update:fetchData'],\n\tsetup(props, { emit }) {\n\t\t// eslint-disable-next-line vue/no-setup-props-reactivity-loss\n\t\tconst standardTableContext = useStandardTableContext(props.tableId)\n\t\t// eslint-disable-next-line vue/no-setup-props-reactivity-loss\n\t\tconst tableContext = useTableContext(props.tableId)\n\n\t\tconst appliedFilters = computed(\n\t\t\t() => standardTableContext.value.internal.appliedFilters,\n\t\t)\n\t\tconst isLoading = computed(\n\t\t\t() => standardTableContext.value.internal.isLoading,\n\t\t)\n\t\tconst searchValue = computed(\n\t\t\t() => standardTableContext.value.internal.searchValue,\n\t\t)\n\n\t\tconst filters = computed(() => standardTableContext.value.internal.filters)\n\t\tconst tablePagination = computed(\n\t\t\t() => standardTableContext.value.internal.pagination,\n\t\t)\n\t\tconst options = computed(() => standardTableContext.value.internal.options)\n\n\t\twatch(\n\t\t\t[\n\t\t\t\tappliedFilters,\n\t\t\t\t() => tableContext.value.internal.getOrdering(),\n\t\t\t\ttablePagination,\n\t\t\t\tsearchValue,\n\t\t\t],\n\t\t\t([filters, ordering, pagination, search]) => {\n\t\t\t\temit('update:fetchData', {\n\t\t\t\t\tfilters,\n\t\t\t\t\tordering,\n\t\t\t\t\tpagination,\n\t\t\t\t\tsearch,\n\t\t\t\t})\n\t\t\t},\n\t\t\t{ immediate: true },\n\t\t)\n\n\t\treturn {\n\t\t\tappliedFilters,\n\t\t\tcanChangeColumnOrder: computed(\n\t\t\t\t() => standardTableContext.value.internal.hasDragAndDrop,\n\t\t\t),\n\t\t\tcolumnOptions: computed<KottiColumnSelector.Category[]>(() => [\n\t\t\t\t{\n\t\t\t\t\tlabel: null,\n\t\t\t\t\toptions: standardTableContext.value.internal.columns.map(\n\t\t\t\t\t\t({ id, label }) => ({\n\t\t\t\t\t\t\tkey: id,\n\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t]),\n\t\t\tcolumnSelection: computed(\n\t\t\t\t() => standardTableContext.value.internal.columnOrder,\n\t\t\t),\n\t\t\tcolumnsInOrder: computed(() => tableContext.value),\n\t\t\tfilterTags: computed(() =>\n\t\t\t\tappliedFilters.value\n\t\t\t\t\t.map(({ id, value }) => {\n\t\t\t\t\t\tconst filter = standardTableContext.value.internal.getFilter(id)\n\n\t\t\t\t\t\tif (!filter) {\n\t\t\t\t\t\t\tthrow new Error(`filter not found for id \"${id}\"`)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst formattedValue = formatFilterValue(value, filter)\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tlabel: filter.label,\n\t\t\t\t\t\t\tvalue: formattedValue,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter(({ value }) => value.length > 0),\n\t\t\t),\n\t\t\thideTableActions: computed(\n\t\t\t\t() =>\n\t\t\t\t\toptions.value?.hideControls?.columns &&\n\t\t\t\t\toptions.value.hideControls.filters &&\n\t\t\t\t\toptions.value.hideControls.search,\n\t\t\t),\n\t\t\tinlineFilters: computed(() =>\n\t\t\t\tfilters.value.filter((filter) => filter.displayInline),\n\t\t\t),\n\t\t\tisLoading,\n\t\t\tisLoadingAndEmpty: computed(\n\t\t\t\t() =>\n\t\t\t\t\tisLoading.value &&\n\t\t\t\t\ttableContext.value.internal.table.getRowModel().rows.length === 0,\n\t\t\t),\n\t\t\tisShowAllColumnsDisabled: computed(\n\t\t\t\t(): boolean =>\n\t\t\t\t\tisLoading.value ||\n\t\t\t\t\tObject.values(tableContext.value.internal.visibleColumns).every(\n\t\t\t\t\t\t(optionValue) => optionValue,\n\t\t\t\t\t),\n\t\t\t),\n\t\t\tonShowAllColumns: () => {\n\t\t\t\ttableContext.value.internal.table.toggleAllColumnsVisible()\n\t\t\t},\n\t\t\tonUpdateAppliedFilters: (value: KottiStandardTable.AppliedFilter[]) => {\n\t\t\t\tstandardTableContext.value.internal.setAppliedFilters(value)\n\t\t\t\tstandardTableContext.value.internal.setPageIndex(0)\n\t\t\t},\n\t\t\tonUpdateColumnSelection: (value: string[]) => {\n\t\t\t\tstandardTableContext.value.internal.setColumnSelection(value)\n\t\t\t},\n\t\t\tonUpdatePageIndex: standardTableContext.value.internal.setPageIndex,\n\t\t\tonUpdatePageSize: standardTableContext.value.internal.setPageSize,\n\t\t\tonUpdateSearchValue: (value: string | null) => {\n\t\t\t\tstandardTableContext.value.internal.setSearchValue(value)\n\t\t\t\tstandardTableContext.value.internal.setPageIndex(0)\n\t\t\t},\n\t\t\toptions,\n\t\t\tpageIndex: computed(() => tablePagination.value.pageIndex),\n\t\t\tpageSize: computed(() => tablePagination.value.pageSize),\n\t\t\tpageSizeOptions: computed(\n\t\t\t\t() => standardTableContext.value.internal.pageSizeOptions,\n\t\t\t),\n\t\t\tpopoverFilters: computed(() =>\n\t\t\t\tfilters.value.filter((filter) => !filter.displayInline),\n\t\t\t),\n\t\t\trowCount: computed(() => standardTableContext.value.internal.rowCount),\n\t\t\tsearchValue,\n\t\t\tselectionCount: computed(\n\t\t\t\t() => tableContext.value.internal.selectionCount,\n\t\t\t),\n\t\t\tshowGlobalSelection: computed(\n\t\t\t\t() =>\n\t\t\t\t\tstandardTableContext.value.internal.selectMode === 'global' &&\n\t\t\t\t\ttableContext.value.internal.selectionCount > 0,\n\t\t\t),\n\t\t\ttableRows: computed(() =>\n\t\t\t\ttableContext.value.internal.table\n\t\t\t\t\t.getRowModel()\n\t\t\t\t\t.rows.map((row) => row.original),\n\t\t\t),\n\t\t\ttranslations: useTranslationNamespace('KtStandardTable'),\n\t\t\tunselectAllRows: tableContext.value.internal.unselectAllRows,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.kt-standard-table {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--unit-4);\n\n\t&__applied-filters {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 4px;\n\t\talign-items: center;\n\t\tjustify-content: left;\n\t}\n\n\t&__applied-filter-tag {\n\t\tmargin: 0;\n\t}\n\n\t&__controls {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\t}\n\n\t&__footer {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\n\t\t> div {\n\t\t\tflex: 1 1 auto;\n\t\t}\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\n\t\th1 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t&__info {\n\t\tdisplay: flex;\n\t\tgap: var(--unit-4);\n\t}\n\n\t&__inline-filters {\n\t\tmin-width: 9rem;\n\n\t\t:deep(.kt-field__wrapper) {\n\t\t\t.kt-field__header {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__right-aligned-container {\n\t\tdisplay: flex;\n\t\tgap: 0.8rem;\n\t\tgap: var(--unit-4);\n\t\talign-items: center;\n\t\tmargin-left: auto;\n\t}\n\n\t&__search-input {\n\t\tflex: 1 1 auto;\n\t\tmin-width: 8rem;\n\t\tmax-width: 10rem;\n\t}\n\n\t&__slot {\n\t\tmargin-left: auto;\n\t}\n\n\t&__table-actions {\n\t\tdisplay: flex;\n\t\tflex: 1 1 auto;\n\t\tgap: var(--unit-4);\n\t}\n}\n</style>\n","/**\n * Simple low-effort hashsum\n */\nexport const simpleHash = (strings: string[]): string => {\n\tconst maximumLength = strings.reduce(\n\t\t(acc, next) => Math.max(acc, next.length),\n\t\t0,\n\t)\n\n\tconst result = new window.Uint8Array(maximumLength)\n\n\t// eslint-disable-next-line sonarjs/no-alphabetical-sort\n\tfor (const string of [...strings].sort()) {\n\t\tfor (let charIndex = 0; charIndex < string.length; charIndex++) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst char = result[charIndex]!\n\t\t\t// string.length is added to make collisions less likely (e.g. foo + fooBar = baz + bazBar without this)\n\t\t\tresult[charIndex] = char ^ (string.charCodeAt(charIndex) + string.length)\n\t\t}\n\t}\n\n\tconst simpleHashedValue = window.btoa(String.fromCharCode(...result))\n\n\treturn `${String(strings.length)}${simpleHashedValue}`\n}\n","import { z } from 'zod'\n\nimport { simpleHash } from './simple-hash'\nimport type { FilterInfo } from './types'\nimport { KottiStandardTable } from './types'\n\nexport const serializableStateSchema = z\n\t.object({\n\t\tappliedFilters: z.array(KottiStandardTable.appliedFilterSchema),\n\t\tcolumnOrder: z.array(z.string()),\n\t\thiddenColumns: z.array(z.string()),\n\t\tordering: z.array(\n\t\t\tz\n\t\t\t\t.object({\n\t\t\t\t\tid: z.string(),\n\t\t\t\t\tvalue: z.enum(['ascending', 'descending']),\n\t\t\t\t})\n\t\t\t\t.strict(),\n\t\t),\n\t\tpagination: z\n\t\t\t.object({\n\t\t\t\tpageIndex: z.number(),\n\t\t\t\tpageSize: z.number(),\n\t\t\t})\n\t\t\t.strict(),\n\t\tsearchValue: z.string().nullable(),\n\t})\n\t.strict()\n\ntype SerializableState = z.output<typeof serializableStateSchema>\n\nexport interface KottiStandardTableStorage {\n\tload(context: StorageOperationContext): Promise<SerializableState | null>\n\tsave(\n\t\tstate: SerializableState,\n\t\tcontext: StorageOperationContext,\n\t): Promise<void>\n}\n\nexport class DummyStorageAdapter implements KottiStandardTableStorage {\n\t// eslint-disable-next-line @typescript-eslint/require-await\n\tasync load(): Promise<SerializableState | null> {\n\t\treturn null\n\t}\n\n\tasync save(): Promise<void> {}\n}\n\nconst localStorageSchema = z\n\t.object({ state: z.unknown(), version: z.string() })\n\t.strict()\n\nexport type StorageOperationContext = {\n\t/**\n\t * Used for column hashing in {@link LocalStorageAdapter}\n\t */\n\tcolumnIds: string[]\n\t/**\n\t * Used to get qualifying information about filters for parsing and validating them\n\t */\n\tfilterInfo: Map<string, FilterInfo>\n}\n\nexport class LocalStorageAdapter implements KottiStandardTableStorage {\n\t#manualVersion: string | null\n\t#storageKey: string\n\n\tconstructor(key: string, manualVersion: string | null = null) {\n\t\tthis.#storageKey = key\n\t\tthis.#manualVersion = manualVersion\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/require-await\n\tasync load(\n\t\tcontext: StorageOperationContext,\n\t): Promise<SerializableState | null> {\n\t\tif (typeof window === 'undefined' || !('localStorage' in window))\n\t\t\treturn null\n\n\t\tconst json = window.localStorage.getItem(this.#storageKey)\n\n\t\tif (!json) return null\n\n\t\ttry {\n\t\t\tconst data = localStorageSchema.parse(JSON.parse(json))\n\n\t\t\tif (!this.#validateVersionHash(context.columnIds, data.version))\n\t\t\t\treturn null\n\n\t\t\t// further validation is handled by the caller\n\t\t\treturn data.state as SerializableState\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console -- this is likely something that should be visible as it is unexpected for this to fail, but not serious enough for a throw\n\t\t\tconsole.warn(\n\t\t\t\t'LocalStorageAdapter: recovered after failing to load',\n\t\t\t\terror,\n\t\t\t)\n\t\t\treturn null\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/require-await\n\tasync save(\n\t\tstate: SerializableState,\n\t\tcontext: StorageOperationContext,\n\t): Promise<void> {\n\t\tif (typeof window === 'undefined' || !('localStorage' in window)) return\n\n\t\tconst version = this.#getVersionHash(context.columnIds)\n\n\t\tconst json = JSON.stringify({\n\t\t\tstate,\n\t\t\tversion,\n\t\t})\n\n\t\twindow.localStorage.setItem(this.#storageKey, json)\n\t}\n\n\t#getVersionHash(columnIds: string[]): string {\n\t\tconst version = this.#manualVersion ?? simpleHash(columnIds)\n\t\treturn `${this.#storageKey}@${version}`\n\t}\n\n\t#validateVersionHash(columnIds: string[], version: string): boolean {\n\t\tif (!version.startsWith(`${this.#storageKey}@`)) return false\n\n\t\tconst correctHash = this.#manualVersion ?? simpleHash(columnIds)\n\t\tconst givenHash = version.replace(`${this.#storageKey}@`, '')\n\n\t\treturn correctHash === givenHash\n\t}\n}\n","import isEqual from 'lodash/isEqual.js'\nimport isNil from 'lodash/isNil.js'\nimport type { Ref } from 'vue'\nimport { computed, onBeforeMount, ref, watch } from 'vue'\nimport { z } from 'zod'\n\nimport type { KottiFieldText } from '../../kotti-field-text/types'\nimport type { KottiTableParameter } from '../table/hooks'\nimport {\n\tparamsSchema as KottiTableHookParamsSchema,\n\tuseKottiTable,\n} from '../table/hooks'\nimport type { KottiTable } from '../table/types'\nimport { useComputedRef } from '../table/use-computed-ref'\n\nimport type { StandardTableContext } from './context'\nimport { useProvideStandardTableContext } from './context'\nimport type { StorageOperationContext } from './storage'\nimport {\n\tDummyStorageAdapter,\n\ttype KottiStandardTableStorage,\n\tserializableStateSchema,\n} from './storage'\nimport { type FilterInfo, KottiStandardTable } from './types'\n\nconst OPERATION_MAP = {\n\t[KottiStandardTable.FilterType.BOOLEAN]:\n\t\tKottiStandardTable.FilterOperation.Boolean.EQUAL,\n\t[KottiStandardTable.FilterType.DATE_RANGE]:\n\t\tKottiStandardTable.FilterOperation.DateRange.IN_RANGE,\n\t[KottiStandardTable.FilterType.MULTI_SELECT]:\n\t\tKottiStandardTable.FilterOperation.MultiEnum.ONE_OF,\n\t[KottiStandardTable.FilterType.NUMBER_RANGE]:\n\t\tKottiStandardTable.FilterOperation.NumberRange.IN_RANGE,\n\t[KottiStandardTable.FilterType.SINGLE_SELECT]:\n\t\tKottiStandardTable.FilterOperation.SingleEnum.EQUAL,\n}\n\ntype KottiStandardTableParameters<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n> = Ref<{\n\tfilters?: KottiStandardTable.Filter[]\n\tid: string\n\tisLoading?: boolean\n\toptions?: KottiStandardTable.Options\n\tpaginationOptions: KottiStandardTable.Pagination\n\tselectMode?: 'global' | 'single-page' | null\n\tstorageAdapter: KottiStandardTableStorage | null\n\ttable: Omit<KottiTableParameter<ROW, COLUMN_ID>, 'id' | 'isSelectable'>\n}>\n\nconst paramsSchema = z.object({\n\tfilters: KottiStandardTable.filterSchema.array().default(() => []),\n\tid: z.string(),\n\tisLoading: z.boolean().default(false),\n\toptions: KottiStandardTable.optionsSchema.optional(),\n\tpaginationOptions: KottiStandardTable.paginationSchema,\n\tselectMode: z.enum(['global', 'single-page']).nullable().default(null),\n\t/**\n\t * Need to use z.any because there is currently no way in zod to ensure a class extends an interface.\n\t */\n\tstorageAdapter: z.any(),\n\ttable: KottiTableHookParamsSchema.omit({\n\t\tid: true,\n\t\tisSelectable: true,\n\t}),\n})\n\ntype KottiStandardTableHook<\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n> = {\n\tapi: KottiStandardTable.Hook.Returns<COLUMN_ID>\n\tcontext: StandardTableContext<ROW, COLUMN_ID>\n}\n\nexport const useKottiStandardTable = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>(\n\t_params: Readonly<KottiStandardTableParameters<ROW, COLUMN_ID>>,\n): KottiStandardTableHook<ROW, COLUMN_ID> => {\n\tconst params = computed(() => paramsSchema.parse(_params.value))\n\n\tconst filterInfo = computed<Map<string, FilterInfo>>(\n\t\t() =>\n\t\t\tnew Map(\n\t\t\t\tparams.value.filters.map((filter) => {\n\t\t\t\t\tconst { id, operations, type } = filter\n\n\t\t\t\t\treturn [id, { operations, type }]\n\t\t\t\t}),\n\t\t\t),\n\t)\n\n\tconst rowCount = computed(() =>\n\t\tparams.value.paginationOptions.type === 'local'\n\t\t\t? params.value.table.data.length\n\t\t\t: params.value.paginationOptions.rowCount,\n\t)\n\n\t// refs exposed on return/api\n\tconst searchValue = ref<string | null>(null)\n\n\t// FIXME: This useComputedRef right now assumes that the filters provdided via params\n\t// does not change. If a user would change it, it will lead to unintended behavior\n\tconst appliedFilters = useComputedRef<KottiStandardTable.AppliedFilter[]>({\n\t\tget: (value) => value,\n\t\tset(value) {\n\t\t\treturn value.filter((filter) => {\n\t\t\t\tconst meta = filterInfo.value.get(filter.id)\n\t\t\t\tif (!meta) return false\n\n\t\t\t\tswitch (meta.type) {\n\t\t\t\t\tcase KottiStandardTable.FilterType.BOOLEAN: {\n\t\t\t\t\t\treturn KottiStandardTable.appliedBooleanSchema.safeParse(filter)\n\t\t\t\t\t\t\t.success\n\t\t\t\t\t}\n\t\t\t\t\tcase KottiStandardTable.FilterType.DATE_RANGE: {\n\t\t\t\t\t\treturn KottiStandardTable.appliedDateRangeSchema.safeParse(filter)\n\t\t\t\t\t\t\t.success\n\t\t\t\t\t}\n\t\t\t\t\tcase KottiStandardTable.FilterType.MULTI_SELECT:\n\t\t\t\t\t\treturn KottiStandardTable.appliedMultiEnumSchema.safeParse(filter)\n\t\t\t\t\t\t\t.success\n\n\t\t\t\t\tcase KottiStandardTable.FilterType.NUMBER_RANGE:\n\t\t\t\t\t\treturn KottiStandardTable.appliedNumberRangeSchema.safeParse(filter)\n\t\t\t\t\t\t\t.success\n\n\t\t\t\t\tcase KottiStandardTable.FilterType.SINGLE_SELECT:\n\t\t\t\t\t\treturn KottiStandardTable.appliedSingleEnumSchema.safeParse(filter)\n\t\t\t\t\t\t\t.success\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalue: ref(\n\t\t\t(() => {\n\t\t\t\tconst filtersWithDefaultValue: KottiStandardTable.AppliedFilter[] = []\n\n\t\t\t\tfor (const filter of params.value.filters) {\n\t\t\t\t\tif (isNil(filter.defaultValue)) continue\n\n\t\t\t\t\tconst appliedFilter = {\n\t\t\t\t\t\tid: filter.id,\n\t\t\t\t\t\toperation: OPERATION_MAP[filter.type],\n\t\t\t\t\t\tvalue: filter.defaultValue,\n\t\t\t\t\t} as KottiStandardTable.AppliedFilter\n\n\t\t\t\t\tfiltersWithDefaultValue.push(appliedFilter)\n\t\t\t\t}\n\n\t\t\t\treturn filtersWithDefaultValue\n\t\t\t})(),\n\t\t),\n\t})\n\n\t// FIXME: This useComputedRef right now assumes that the pageSize provdided via params\n\t// does not change. If a user would change it, it will lead to unintended behavior\n\tconst pagination = useComputedRef<{ pageIndex: number; pageSize: number }>({\n\t\tget: (value) => value,\n\t\tset: ({ pageIndex, pageSize: _pageSize }) => {\n\t\t\tconst pageSize = (() => {\n\t\t\t\tconst { pageSizeOptions } = params.value.paginationOptions\n\t\t\t\tif (pageSizeOptions.includes(_pageSize)) return _pageSize\n\n\t\t\t\tfor (let i = pageSizeOptions.length - 1; i >= 0; i -= 1) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tif (pageSizeOptions[i]! < _pageSize) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\treturn pageSizeOptions[i]!\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\treturn pageSizeOptions[0]!\n\t\t\t})()\n\t\t\tconst pageFirstRowIndex = pageIndex * pageSize\n\t\t\treturn {\n\t\t\t\tpageIndex:\n\t\t\t\t\tpageIndex < 0 ||\n\t\t\t\t\t(rowCount.value !== null && pageFirstRowIndex > rowCount.value)\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: pageIndex,\n\t\t\t\tpageSize,\n\t\t\t}\n\t\t},\n\t\tvalue: ref({\n\t\t\tpageIndex: 0,\n\t\t\tpageSize: params.value.paginationOptions.pageSize,\n\t\t}),\n\t})\n\n\tconst data = computed(() => {\n\t\tif (params.value.paginationOptions.type === 'remote')\n\t\t\treturn params.value.table.data\n\n\t\tconst sliceStart = pagination.value.pageIndex * pagination.value.pageSize\n\t\tconst sliceEnd = sliceStart + pagination.value.pageSize\n\t\treturn params.value.table.data.slice(sliceStart, sliceEnd)\n\t})\n\n\tconst storageAdapter = computed(\n\t\t() => params.value.storageAdapter ?? new DummyStorageAdapter(),\n\t)\n\n\tconst tableHook = useKottiTable<ROW, COLUMN_ID>(\n\t\tcomputed(() => ({\n\t\t\t...(params.value.table as Omit<\n\t\t\t\tKottiTableParameter<ROW, COLUMN_ID>,\n\t\t\t\t'id'\n\t\t\t>),\n\t\t\tdata: data.value,\n\t\t\tid: params.value.id,\n\t\t\tisSelectable: params.value.selectMode !== null,\n\t\t})),\n\t)\n\n\tconst storageOperationContext = computed(\n\t\t(): StorageOperationContext => ({\n\t\t\tcolumnIds: params.value.table.columns.map((x) => x.id),\n\t\t\tfilterInfo: filterInfo.value,\n\t\t}),\n\t)\n\n\tonBeforeMount(async () => {\n\t\tconst rawState = await storageAdapter.value.load(\n\t\t\tstorageOperationContext.value,\n\t\t)\n\n\t\tif (!rawState) {\n\t\t\treturn\n\t\t}\n\n\t\tconst state = serializableStateSchema.parse(rawState)\n\n\t\ttableHook.api.columnOrder.value = state.columnOrder as COLUMN_ID[]\n\t\ttableHook.api.hiddenColumns.value = new Set(\n\t\t\tstate.hiddenColumns as COLUMN_ID[],\n\t\t)\n\t\ttableHook.api.ordering.value =\n\t\t\tstate.ordering as KottiTable.Ordering<COLUMN_ID>[]\n\t\tappliedFilters.value = state.appliedFilters\n\t\tpagination.value = state.pagination\n\t\tsearchValue.value = state.searchValue\n\t})\n\n\tconst orderedVisibleColumns = computed(() =>\n\t\ttableHook.api.columnOrder.value.filter(\n\t\t\t(columnId) => !tableHook.api.hiddenColumns.value.has(columnId),\n\t\t),\n\t)\n\n\tconst standardTableContext: StandardTableContext<ROW, COLUMN_ID> = computed(\n\t\t() => ({\n\t\t\tinternal: {\n\t\t\t\tappliedFilters: appliedFilters.value,\n\t\t\t\tcolumnOrder: orderedVisibleColumns.value,\n\t\t\t\tcolumns: _params.value.table.columns,\n\t\t\t\tfilters: params.value.filters,\n\t\t\t\tgetFilter: (id) =>\n\t\t\t\t\tparams.value.filters.find((filter) => filter.id === id) ?? null,\n\t\t\t\thasDragAndDrop: params.value.table.hasDragAndDrop,\n\t\t\t\tisLoading: params.value.isLoading,\n\t\t\t\toptions: params.value.options,\n\t\t\t\tpageSizeOptions: params.value.paginationOptions.pageSizeOptions,\n\t\t\t\tpagination: pagination.value,\n\t\t\t\trowCount: rowCount.value,\n\t\t\t\tsearchValue: searchValue.value,\n\t\t\t\tselectMode: params.value.selectMode,\n\t\t\t\tsetAppliedFilters: (filters: KottiStandardTable.AppliedFilter[]) => {\n\t\t\t\t\tappliedFilters.value = filters\n\t\t\t\t},\n\t\t\t\tsetColumnSelection: (newSelection: string[]) => {\n\t\t\t\t\tconst newSelectionIds = new Set(newSelection as COLUMN_ID[])\n\t\t\t\t\tconst currentVisibleIds = new Set(orderedVisibleColumns.value)\n\n\t\t\t\t\t// check if the input a reorder of visible columns\n\t\t\t\t\tconst isPureReorder =\n\t\t\t\t\t\tnewSelectionIds.size === currentVisibleIds.size &&\n\t\t\t\t\t\t[...newSelectionIds].every((id) => currentVisibleIds.has(id))\n\n\t\t\t\t\t/**\n\t\t\t\t\t * CASE 1: Pure Reordering\n\t\t\t\t\t * We need to update the master 'columnOrder' while preserving the\n\t\t\t\t\t * positions of currently hidden columns.\n\t\t\t\t\t */\n\t\t\t\t\tif (isPureReorder) {\n\t\t\t\t\t\tconst reorderQueue = [...newSelection] as COLUMN_ID[]\n\n\t\t\t\t\t\ttableHook.api.columnOrder.value =\n\t\t\t\t\t\t\ttableHook.api.columnOrder.value.map((id) => {\n\t\t\t\t\t\t\t\tif (!newSelectionIds.has(id)) {\n\t\t\t\t\t\t\t\t\treturn id // Hidden column: stay put\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst nextSortedId = reorderQueue.shift()\n\t\t\t\t\t\t\t\tif (!nextSortedId) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Column sync error: unexpected empty queue for ${id}`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn nextSortedId\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * CASE 2: Visibility Change (Hide/Show)\n\t\t\t\t\t * Note: We don't change the master order here to avoid \"jumping\"\n\t\t\t\t\t * columns when someone simply toggles a checkbox.\n\t\t\t\t\t */\n\t\t\t\t\tconst newHiddenSet = new Set<COLUMN_ID>()\n\t\t\t\t\tfor (const column of params.value.table.columns) {\n\t\t\t\t\t\tif (!newSelectionIds.has(column.id as COLUMN_ID)) {\n\t\t\t\t\t\t\tnewHiddenSet.add(column.id as COLUMN_ID)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttableHook.api.hiddenColumns.value = newHiddenSet\n\t\t\t\t},\n\t\t\t\tsetPageIndex: (pageIndex: number) => {\n\t\t\t\t\tpagination.value = {\n\t\t\t\t\t\t...pagination.value,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetPageSize: (pageSize: number) => {\n\t\t\t\t\tpagination.value = {\n\t\t\t\t\t\tpageIndex: 0,\n\t\t\t\t\t\tpageSize,\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetSearchValue: (search: KottiFieldText.ModelValue) => {\n\t\t\t\t\tsearchValue.value = search\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t)\n\tuseProvideStandardTableContext(params.value.id, standardTableContext)\n\n\twatch(\n\t\tcomputed(() => ({\n\t\t\tappliedFilters: appliedFilters.value,\n\t\t\tcolumnOrder: tableHook.api.columnOrder.value,\n\t\t\thiddenColumns: tableHook.api.hiddenColumns.value,\n\t\t\tordering: tableHook.api.ordering.value,\n\t\t\tpagination: pagination.value,\n\t\t\tsearchValue: searchValue.value,\n\t\t})),\n\t\tasync (newState, oldState) => {\n\t\t\tif (isEqual(newState, oldState)) return\n\n\t\t\tawait storageAdapter.value.save(\n\t\t\t\t{\n\t\t\t\t\t...newState,\n\t\t\t\t\thiddenColumns: Array.from(newState.hiddenColumns),\n\t\t\t\t},\n\t\t\t\tstorageOperationContext.value,\n\t\t\t)\n\t\t},\n\t)\n\n\twatch(\n\t\t() => pagination.value,\n\t\t() => {\n\t\t\tif (params.value.selectMode === 'single-page') {\n\t\t\t\ttableHook.api.selectedRows.value = {}\n\t\t\t}\n\t\t},\n\t)\n\n\treturn {\n\t\tapi: {\n\t\t\t...tableHook.api,\n\t\t\tappliedFilters,\n\t\t\tpagination,\n\t\t\tsearchValue,\n\t\t},\n\t\tcontext: standardTableContext,\n\t}\n}\n","import dayjs from 'dayjs'\nimport { h } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { ISO8601, ISO8601_SECONDS } from '../../constants'\n\nimport type { KottiTable } from './types'\n\n// FIXME: some other often repeated patterns that can potentially be standardized here:\n//  - truncate text, needs clarification on default behavior\n//  - (nice-to-have) attachments, needs design\n//  - (nice-to-have) image, array of urls as data\n//  - (nice-to-have) tuples with separator (e.g. \"1234 x 23\")\n//\nconst numberFormatter = Intl.NumberFormat('us-US', { style: 'decimal' })\n\ntype DisplayOptionBoolean = {\n\tmode: 'icon' | 'text'\n\ttype: 'boolean'\n}\n\ntype DisplayOptionDate = {\n\tformatString?: string\n\ttype: 'date'\n}\ntype DisplayOptionDateTime = {\n\tformatString?: string\n\ttype: 'date-time'\n}\ntype DisplayOptionInteger = { type: 'integer' }\ntype DisplayOptionNumerical = {\n\tmaximumDecimalPlaces?: number\n\tminimumDecimalPlaces?: number\n\ttype: 'numerical'\n}\ntype DisplayOptionText = { type: 'text' }\ntype DisplayOption =\n\t| DisplayOptionBoolean\n\t| DisplayOptionDate\n\t| DisplayOptionDateTime\n\t| DisplayOptionInteger\n\t| DisplayOptionNumerical\n\t| DisplayOptionText\n\ntype ResolvedDisplayType<OPTION extends DisplayOption = DisplayOption> =\n\tKottiTable.Display<\n\t\t{\n\t\t\tboolean: boolean | null\n\t\t\tdate: Date | null\n\t\t\t'date-time': Date | null\n\t\t\tinteger: number | null\n\t\t\tnumerical: number | null\n\t\t\ttext: string | null\n\t\t}[OPTION['type']]\n\t>\n\nexport const getDisplay = <OPTION extends DisplayOption = DisplayOption>(\n\tparam: OPTION,\n): KottiTable.Display<\n\t{\n\t\tboolean: boolean | null\n\t\tdate: Date | null\n\t\t'date-time': Date | null\n\t\tinteger: number | null\n\t\tnumerical: number | null\n\t\ttext: string | null\n\t}[OPTION['type']]\n> => {\n\tswitch (param.type) {\n\t\tcase 'boolean': {\n\t\t\treturn {\n\t\t\t\talign: param.mode === 'text' ? 'left' : 'center',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: false,\n\t\t\t\trender: (value: boolean | null, { i18n }) => {\n\t\t\t\t\tif (value === null) return null\n\n\t\t\t\t\tif (param.mode === 'text') {\n\t\t\t\t\t\treturn value ? i18n.messages.KtTable.yes : i18n.messages.KtTable.no\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [color, icon] = value\n\t\t\t\t\t\t? ['var(--support-success)', Yoco.Icon.CHECK]\n\t\t\t\t\t\t: ['var(--support-error)', Yoco.Icon.CIRCLE_CROSS]\n\n\t\t\t\t\treturn h(\n\t\t\t\t\t\t'i',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclass: 'yoco',\n\t\t\t\t\t\t\tstyle: { color: color, fontSize: '1rem' },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => icon,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tsortBehavior: 'desc-asc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t\tcase 'date': {\n\t\t\treturn {\n\t\t\t\talign: 'left',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: true,\n\t\t\t\trender: (value: Date | null) => {\n\t\t\t\t\tconst formatString = param.formatString ?? ISO8601\n\t\t\t\t\treturn value === null ? null : dayjs(value).format(formatString)\n\t\t\t\t},\n\t\t\t\tsortBehavior: 'desc-asc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t\tcase 'date-time': {\n\t\t\treturn {\n\t\t\t\talign: 'left',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: true,\n\t\t\t\trender: (value: Date | null) => {\n\t\t\t\t\tconst formatString = param.formatString ?? ISO8601_SECONDS\n\t\t\t\t\treturn value === null ? null : dayjs(value).format(formatString)\n\t\t\t\t},\n\t\t\t\tsortBehavior: 'desc-asc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t\tcase 'integer': {\n\t\t\treturn {\n\t\t\t\talign: 'right',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: true,\n\t\t\t\trender: (value: number | null) =>\n\t\t\t\t\tvalue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: numberFormatter\n\t\t\t\t\t\t\t\t.format(Math.round(value))\n\t\t\t\t\t\t\t\t.replaceAll(',', '\\u2009'),\n\t\t\t\tsortBehavior: 'desc-asc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t\tcase 'numerical': {\n\t\t\treturn {\n\t\t\t\talign: 'right',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: true,\n\t\t\t\trender: (value: number | null, { i18n }) =>\n\t\t\t\t\tvalue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: Intl.NumberFormat('us-US', {\n\t\t\t\t\t\t\t\tmaximumFractionDigits: param.maximumDecimalPlaces ?? 2,\n\t\t\t\t\t\t\t\tminimumFractionDigits: param.minimumDecimalPlaces ?? 2,\n\t\t\t\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.format(value)\n\t\t\t\t\t\t\t\t.replaceAll(',', ' ') //'\\u2009')\n\t\t\t\t\t\t\t\t.replace('.', i18n.numberFormat.decimalSeparator),\n\t\t\t\tsortBehavior: 'desc-asc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t\tcase 'text': {\n\t\t\treturn {\n\t\t\t\talign: 'left',\n\t\t\t\tdisableCellClick: false,\n\t\t\t\tisNumeric: false,\n\t\t\t\trender: (value: string | null) => value,\n\t\t\t\tsortBehavior: 'asc-desc',\n\t\t\t} as ResolvedDisplayType<OPTION>\n\t\t}\n\t}\n}\n\nexport const getCustomDisplay = <\n\tDATA = 'please provide a generic parameter for your expected data type if you use type custom',\n>(\n\tparam: KottiTable.Display<DATA>,\n): KottiTable.Display<DATA> => {\n\treturn param\n}\n\nexport const createColumnContext = <ROW extends KottiTable.AnyRow>(): {\n\tcreateColumn: <COLUMN_ID extends string, DATA_TYPE>(options: {\n\t\tdisplay: KottiTable.Display<DATA_TYPE>\n\t\tgetData: (row: ROW) => DATA_TYPE\n\t\tid: COLUMN_ID\n\t\tisSortable?: boolean\n\t\tlabel: string\n\t\tmaxWidth?: string\n\t\tminWidth?: string\n\t\ttooltip?: string\n\t\twidth?: string\n\t}) => KottiTable.Column<ROW, COLUMN_ID, DATA_TYPE>\n} => {\n\treturn {\n\t\tcreateColumn: (options) => options,\n\t}\n}\n","import clone from 'lodash/clone.js'\nimport type { Ref } from 'vue'\nimport { watch } from 'vue'\n\nimport type { KottiTable } from './types'\n\n/** @public */\nexport type SortMode = 'ascending' | 'descending'\n/** @public */\nexport type SortInstruction = -1 | 0 | 1\n\nconst SORT_MAP: Record<\n\tSortMode,\n\tRecord<\n\t\t'A_IS_B' | 'A_IS_NULL' | 'A_IS_SMALLER' | 'B_IS_NULL' | 'B_IS_SMALLER',\n\t\tSortInstruction\n\t>\n> = {\n\tascending: {\n\t\tA_IS_B: 0, // A and B are equal, no change in order\n\t\tA_IS_NULL: 1, // A is null, so it should move after B\n\t\tA_IS_SMALLER: -1, // A is smaller than B, so it should move before B\n\t\tB_IS_NULL: -1, // B is null, so A should move before B\n\t\tB_IS_SMALLER: 1, // B is smaller than A, so it should move after A\n\t},\n\tdescending: {\n\t\tA_IS_B: 0, // A and B are equal, no change in order\n\t\tA_IS_NULL: 1, // A is null, so it should move after B (same as ascending)\n\t\tA_IS_SMALLER: 1, // A is smaller than B, so it should move after B\n\t\tB_IS_NULL: -1, // B is null, so A should move before B (same as ascending)\n\t\tB_IS_SMALLER: -1, // B is smaller than A, so it should move before A\n\t},\n}\n\nexport function getNumericalSorter<T extends Record<string, unknown>>(\n\tmapper: (data: T) => number | null,\n\tmode: SortMode,\n): (a: T, b: T) => SortInstruction {\n\tconst map = SORT_MAP[mode]\n\n\treturn function mappedNumericalSorter(a: T, b: T) {\n\t\tconst valueA = mapper(a)\n\t\tconst valueB = mapper(b)\n\n\t\t// values are equal\n\t\tif (valueA === valueB) return map.A_IS_B\n\n\t\t// always punish null\n\t\tif (valueA === null) return map.A_IS_NULL\n\t\tif (valueB === null) return map.B_IS_NULL\n\n\t\treturn valueA < valueB ? map.A_IS_SMALLER : map.B_IS_SMALLER\n\t}\n}\n\nexport function getDateSorter<T extends Record<string, unknown>>(\n\tmapper: (data: T) => Date | null,\n\tmode: SortMode,\n): (a: T, b: T) => SortInstruction {\n\tconst map = SORT_MAP[mode]\n\n\treturn function mappedDateSorter(a: T, b: T) {\n\t\tconst valueA = mapper(a)\n\t\tconst valueB = mapper(b)\n\n\t\t// values are equal (nulls)\n\t\tif (valueA === null && valueB === null) return map.A_IS_B\n\n\t\t// always punish null\n\t\tif (valueA === null) return map.A_IS_NULL\n\t\tif (valueB === null) return map.B_IS_NULL\n\n\t\t// values are equal (dates)\n\t\tif (valueA <= valueB && valueB <= valueA) return map.A_IS_B\n\n\t\treturn valueA < valueB ? map.A_IS_SMALLER : map.B_IS_SMALLER\n\t}\n}\n\nexport function getTextSorter<T extends Record<string, unknown>>(\n\tmapper: (data: T) => string | null,\n\tmode: SortMode,\n): (a: T, b: T) => SortInstruction {\n\tconst map = SORT_MAP[mode]\n\n\treturn function mappedTextSorter(a: T, b: T) {\n\t\tconst valueA = mapper(a)\n\t\tconst valueB = mapper(b)\n\n\t\t// values are equal\n\t\tif (valueA === valueB) return map.A_IS_B\n\n\t\t// always punish null\n\t\tif (valueA === null) return map.A_IS_NULL\n\t\tif (valueB === null) return map.B_IS_NULL\n\n\t\treturn valueA.localeCompare(valueB) < 0\n\t\t\t? map.A_IS_SMALLER\n\t\t\t: map.B_IS_SMALLER\n\t}\n}\n\nexport const useLocalSort = <\n\tROW extends KottiTable.AnyRow,\n\tCOLUMN_ID extends string,\n>({\n\tlocallySortedData,\n\tordering,\n\trawData,\n\tsortingFunctions,\n}: {\n\tlocallySortedData: Ref<ROW[]>\n\tordering: Ref<KottiTable.Ordering<COLUMN_ID>[]>\n\trawData: Ref<ROW[]>\n\tsortingFunctions: Record<\n\t\tCOLUMN_ID,\n\t\t(mode: 'ascending' | 'descending') => (a: ROW, b: ROW) => SortInstruction\n\t>\n}): void => {\n\twatch(\n\t\t[rawData, ordering],\n\t\t() => {\n\t\t\tconst sort = ordering.value[0] ?? null\n\n\t\t\tif (sort === null) {\n\t\t\t\tlocallySortedData.value = rawData.value\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlocallySortedData.value = clone(rawData.value).sort(\n\t\t\t\tsortingFunctions[sort.id](sort.value),\n\t\t\t)\n\t\t},\n\t\t{ immediate: true },\n\t)\n}\n","import type { Kotti } from '../types'\nimport { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtColumnSelectorVue from './KtColumnSelector.vue'\nimport KtStandardTableVue from './KtStandardTable.vue'\nimport KtTableVue from './KtTable.vue'\nimport { KottiStandardTable } from './standard-table/types'\nimport { KottiTable } from './table/types'\nimport { KottiColumnSelector } from './types'\n\nexport { useKottiStandardTable } from './standard-table/hooks'\nexport {\n\ttype KottiStandardTableStorage,\n\tLocalStorageAdapter,\n\ttype StorageOperationContext,\n} from './standard-table/storage'\nexport {\n\tcreateColumnContext,\n\tgetCustomDisplay,\n\tgetDisplay,\n} from './table/column-helper'\nexport { useKottiTable } from './table/hooks'\nexport {\n\tgetDateSorter,\n\tgetNumericalSorter,\n\tgetTextSorter,\n\tuseLocalSort,\n} from './table/local'\n\nconst TABLE_META: Kotti.Meta<typeof KottiTable.propsSchema> = {\n\taddedVersion: '8.2.0',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/file/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=128%3A0',\n\t},\n\tslots: {\n\t\tactions: {\n\t\t\tdescription: 'E.g. edit/delete row actions',\n\t\t\tscope: {\n\t\t\t\trow: { description: 'Original row data', type: 'object' },\n\t\t\t\trowIndex: { description: 'Position of row', type: 'integer' },\n\t\t\t},\n\t\t},\n\t\tempty: {\n\t\t\tdescription:\n\t\t\t\t'Alternative to emptyText prop. Shown when the Table is empty',\n\t\t\tscope: null,\n\t\t},\n\t\t'expanded-row': {\n\t\t\tdescription: 'Per row, allows showing more info on-demand',\n\t\t\tscope: {\n\t\t\t\trow: { description: 'Original row data', type: 'object' },\n\t\t\t\trowIndex: { description: 'Position of row', type: 'integer' },\n\t\t\t},\n\t\t},\n\t\tloading: {\n\t\t\tdescription: 'Shown when loading',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.Table',\n\t\tschema: KottiTable.propsSchema,\n\t},\n}\n\nconst STANDARD_META: Kotti.Meta<typeof KottiStandardTable.propsSchema> = {\n\taddedVersion: '7.4.0',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/design/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=6305-10646&node-type=canvas&t=8lzEM5nlkrh8aUMF-0',\n\t},\n\tslots: {\n\t\t'applied-filter-actions': {\n\t\t\tdescription: 'slot next to the applied filters section',\n\t\t\tscope: null,\n\t\t},\n\t\t'control-actions': {\n\t\t\tdescription: 'slot next to the table controls section',\n\t\t\tscope: null,\n\t\t},\n\t\t'header-actions': {\n\t\t\tdescription: 'slot next to the table title',\n\t\t\tscope: null,\n\t\t},\n\t\ttable: {\n\t\t\tdescription: 'slot to show custom content instead of the KtTable',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.StandardTable',\n\t\tschema: KottiStandardTable.propsSchema,\n\t},\n}\n\nexport const KtTable = attachMeta(makeInstallable(KtTableVue), TABLE_META)\n\nexport const KtStandardTable = attachMeta(\n\tmakeInstallable(KtStandardTableVue),\n\tSTANDARD_META,\n)\n\nexport const KtColumnSelector = attachMeta(\n\tmakeInstallable(KtColumnSelectorVue),\n\t{\n\t\taddedVersion: '9.3.0',\n\t\tdeprecated: null,\n\t\tdesigns: null,\n\t\tslots: {},\n\t\ttypeScript: {\n\t\t\tnamespace: 'Kotti.ColumnSelector',\n\t\t\tschema: KottiColumnSelector.propsSchema,\n\t\t},\n\t},\n)\n","import type { ComputedRef } from 'vue'\n\nexport type ToastContext = ComputedRef<{\n\tdelete: () => void\n\theader: string | null\n\tprogress: number | null\n\ttext: string\n}>\n\nexport const TOAST_CONTEXT = Symbol('TOAST_CONTEXT')\n","<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue'\n\nimport { KtBanner } from '../kotti-banner'\nimport { makeProps } from '../make-props'\n\nimport { TOAST_CONTEXT, type ToastContext } from './context'\nimport { KottiToast } from './types'\n\nexport default defineComponent({\n\tname: 'KtToast',\n\tcomponents: {\n\t\tKtBanner,\n\t},\n\tprops: makeProps(KottiToast.propsSchema),\n\tsetup(props, { slots }) {\n\t\tconst context = inject<ToastContext>(TOAST_CONTEXT) ?? null\n\n\t\tif (context === null) throw new Error('Could not find KtToastContext')\n\n\t\treturn {\n\t\t\thasHeaderSlot: computed((): boolean => Boolean(slots.header)),\n\t\t\theaderWithFallback: computed(() => props.header ?? context.value.header),\n\t\t\tonDelete: () => {\n\t\t\t\tcontext.value.delete()\n\t\t\t},\n\t\t\tprogressWithFallback: computed(\n\t\t\t\t() => props.progress ?? context.value.progress,\n\t\t\t),\n\t\t\ttextWithFallback: computed(() => props.text ?? context.value.text),\n\t\t}\n\t},\n})\n</script>\n\n<template>\n\t<div class=\"kt-toast\">\n\t\t<KtBanner isCloseable :type=\"type\" @close=\"onDelete\">\n\t\t\t<template v-if=\"hasHeaderSlot\" #header>\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</template>\n\t\t\t<template v-else-if=\"headerWithFallback\" #header>\n\t\t\t\t{{ headerWithFallback }}\n\t\t\t</template>\n\t\t\t<template #text>\n\t\t\t\t<slot name=\"text\">\n\t\t\t\t\t{{ textWithFallback }}\n\t\t\t\t</slot>\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</template>\n\t\t</KtBanner>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n.kt-toast {\n\tdisplay: contents;\n}\n\n.kt-toast > * {\n\tbox-shadow: var(--shadow-md);\n}\n</style>\n","<script lang=\"ts\">\nimport {\n\tcomputed,\n\tdefineComponent,\n\ttype PropType,\n\tprovide,\n\ttype UnwrapRef,\n} from 'vue'\n\nimport { TOAST_CONTEXT, type ToastContext } from './context'\n\nexport default defineComponent({\n\tname: 'KtToastProvider',\n\tprops: {\n\t\tdata: { required: true, type: Object as PropType<UnwrapRef<ToastContext>> },\n\t},\n\tsetup(props) {\n\t\tprovide(\n\t\t\tTOAST_CONTEXT,\n\t\t\tcomputed(() => props.data),\n\t\t)\n\n\t\treturn {}\n\t},\n})\n</script>\n\n<template>\n\t<div>\n\t\t<slot />\n\t</div>\n</template>\n","<script lang=\"ts\">\nimport { computed, defineComponent, onBeforeMount, onUnmounted, ref } from 'vue'\n\nimport { makeProps } from '../make-props'\n\nimport type { RenderedMessage, ToasterReturn } from './create-toaster'\nimport KtToast from './KtToast.vue'\nimport KtToastProvider from './KtToastProvider.vue'\nimport { KottiToaster } from './types'\n\nexport default defineComponent({\n\tname: 'KtToaster',\n\tcomponents: {\n\t\tKtToast,\n\t\tKtToastProvider,\n\t},\n\tprops: makeProps(KottiToaster.propsSchema),\n\tsetup(props) {\n\t\tconst currentToasts = ref<Array<RenderedMessage>>([])\n\n\t\tconst api = (\n\t\t\tprops.toaster as unknown as ToasterReturn<{\n\t\t\t\t[key: string]: Record<string, unknown>\n\t\t\t\tdefault: Record<string, never>\n\t\t\t}>\n\t\t)._internal_pls_dont_touch\n\n\t\tonBeforeMount(() => {\n\t\t\tapi.subscribe((activeToasts) => {\n\t\t\t\tcurrentToasts.value = activeToasts\n\t\t\t})\n\t\t})\n\n\t\tonUnmounted(() => {\n\t\t\tapi.unsubscribe()\n\t\t\tcurrentToasts.value = []\n\t\t})\n\n\t\treturn {\n\t\t\trenderedToasts: computed(() =>\n\t\t\t\tcurrentToasts.value.map((toast) => ({\n\t\t\t\t\t...toast,\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\tcustom: toast.custom,\n\t\t\t\t\t\tdelete: () => {\n\t\t\t\t\t\t\tapi.requestDelete(toast.metadata.id)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tduration: toast.duration,\n\t\t\t\t\t\theader: toast.header,\n\t\t\t\t\t\tprogress: toast.progress,\n\t\t\t\t\t\ttext: toast.text,\n\t\t\t\t\t\ttype: toast.type,\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t),\n\t\t}\n\t},\n})\n</script>\n\n<template>\n\t<div class=\"kt-toaster\">\n\t\t<div class=\"kt-toaster__notifications\">\n\t\t\t<transition-group name=\"toast-yum\" tag=\"div\">\n\t\t\t\t<KtToastProvider\n\t\t\t\t\tv-for=\"toast in renderedToasts\"\n\t\t\t\t\t:key=\"toast.metadata.id\"\n\t\t\t\t\tclass=\"toast-yum-item\"\n\t\t\t\t\t:data=\"toast.context\"\n\t\t\t\t>\n\t\t\t\t\t<slot v-bind=\"toast.context\" :name=\"toast.type\">\n\t\t\t\t\t\t<KtToast />\n\t\t\t\t\t</slot>\n\t\t\t\t</KtToastProvider>\n\t\t\t</transition-group>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n.kt-toaster__notifications {\n\tposition: fixed;\n\ttop: var(--unit-4);\n\tright: var(--unit-4);\n\tz-index: 100000;\n\twidth: 400px;\n\n\t> div {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--unit-2);\n\t}\n}\n\n// animation\n\n$z-normal: 0;\n$z-leaving: -1;\n\n.toast-yum-item {\n\twidth: 400px;\n\tisolation: isolate;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n\t.toast-yum-item {\n\t\ttransition: all var(--transition-medium) ease-in-out;\n\t}\n\n\t.toast-yum-move {\n\t\ttransition: transform var(--transition-short) ease-in-out;\n\t}\n\n\t.toast-yum-enter,\n\t.toast-yum-leave-to {\n\t\topacity: 0;\n\t\ttransform: translateX(200px);\n\t}\n\n\t.toast-yum-leave-active {\n\t\tposition: absolute;\n\t\tz-index: $z-leaving;\n\t\ttransition: all var(--transition-medium) ease-in-out;\n\t}\n\n\t.toast-yum-leave-from {\n\t\tz-index: $z-normal;\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n}\n</style>\n","/**\n * Creates a deferred promise, useful in scenarios where a promise needs to be created and\n * resolved or rejected from an external context. This exposes `resolve` and `reject` functions,\n * allowing external control over the promise's resolution state.\n *\n * @throws {Error} Throws an error if the promise's `resolve` or `reject` functions could not be initialized (which shouldn't occur under typical JavaScript execution).\n */\nexport const createDeferred = <PROMISE_RESOLUTION_TYPE>(): {\n\tpromise: Promise<PROMISE_RESOLUTION_TYPE>\n\treject: (arg: unknown) => void\n\tresolve: (res: PROMISE_RESOLUTION_TYPE) => void\n} => {\n\tlet resolve: ((res: PROMISE_RESOLUTION_TYPE) => void) | null = null\n\tlet reject: ((arg: unknown) => void) | null = null\n\n\tconst promise = new Promise<PROMISE_RESOLUTION_TYPE>((res, rej) => {\n\t\tresolve = res\n\t\treject = rej\n\t})\n\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\tif (resolve === null || reject === null)\n\t\tthrow new Error('could not create deferred promise')\n\n\treturn {\n\t\tpromise,\n\t\treject,\n\t\tresolve,\n\t}\n}\n","import { nanoid } from 'nanoid'\nimport { z } from 'zod'\n\nimport { createDeferred } from './create-deferred'\n\nconst customSchema = z.record(z.unknown())\n\nconst durationSchema = z.number().int().finite().positive().nullable()\n\nconst metadataSchema = z\n\t.object({\n\t\tabortController: z.instanceof(globalThis.AbortController),\n\t\tid: z.string(),\n\t})\n\t.strict()\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst queuedToastSchema = z\n\t.object({\n\t\tcustom: customSchema,\n\t\tdeferred: z\n\t\t\t.object({\n\t\t\t\tpromise: z.promise(z.literal('deleted')),\n\t\t\t\treject: z.function().args(z.unknown()).returns(z.void()),\n\t\t\t\tresolve: z.function().args(z.literal('deleted')).returns(z.void()),\n\t\t\t})\n\t\t\t.strict(),\n\t\tduration: durationSchema,\n\t\theader: z.string().nullable(),\n\t\tmetadata: metadataSchema,\n\t\ttext: z.string(),\n\t\ttype: z.string(),\n\t})\n\t.strict()\n\ntype QueuedToast = z.output<typeof queuedToastSchema>\n\nconst renderedMessageSchema = z\n\t.object({\n\t\tcustom: customSchema,\n\t\tduration: z.number().positive().finite().nullable(),\n\t\theader: z.string().nullable(),\n\t\tmetadata: metadataSchema,\n\t\tprogress: z.number().min(0).max(1).nullable(),\n\t\ttext: z.string(),\n\t\ttype: z.string(),\n\t})\n\t.strict()\n\nexport type RenderedMessage = z.output<typeof renderedMessageSchema>\n\nconst messageSchema = z\n\t.object({\n\t\tcustom: customSchema.default(() => ({})),\n\t\tduration: durationSchema.default(null),\n\t\theader: z.string().nullable().default(null),\n\t\tmetadata: z\n\t\t\t.object({\n\t\t\t\tabortController: z\n\t\t\t\t\t.instanceof(globalThis.AbortController)\n\t\t\t\t\t.default(() => new globalThis.AbortController()),\n\t\t\t\tid: z.string().default(nanoid),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default(() => ({})),\n\t\ttext: z.string(),\n\t\ttype: z.string().default('default'),\n\t})\n\t.strict()\n\nconst subscribeHandlerSchema = z\n\t.function()\n\t.args(z.array(renderedMessageSchema))\n\t.returns(z.union([z.promise(z.void()), z.void()]))\n\ntype SubscribeHandler = z.output<typeof subscribeHandlerSchema>\n\n// utilties\n\ntype IsEmptyObject<T> = T extends Record<string, never> ? true : false\n\n// messages\n\ntype MessageTypes = {\n\t[key: string]: Record<string, unknown>\n\tdefault: Record<string, never>\n}\n\ntype Messages<MESSAGE_TYPES extends MessageTypes> = {\n\t[TYPE in keyof MESSAGE_TYPES]: Omit<\n\t\tz.input<typeof messageSchema>,\n\t\t'custom' | 'type'\n\t> &\n\t\t(IsEmptyObject<MESSAGE_TYPES[TYPE]> extends true\n\t\t\t? { custom?: MESSAGE_TYPES[TYPE] }\n\t\t\t: { custom: MESSAGE_TYPES[TYPE] }) &\n\t\t(TYPE extends 'default' ? { type?: 'default' } : { type: TYPE })\n}\n\ntype MessagesNoDefault<MESSAGE_TYPES extends MessageTypes> = {\n\t[KEY in keyof MESSAGE_TYPES]: {\n\t\tduration?: number | null\n\t\theader?: string | null\n\t\ttext: string\n\t\ttype: KEY\n\t} & (IsEmptyObject<MESSAGE_TYPES[KEY]> extends true\n\t\t? { custom?: MESSAGE_TYPES[KEY] }\n\t\t: { custom: MESSAGE_TYPES[KEY] })\n}\n\n// show etc.\n\ntype ShowResult<\n\tMESSAGE_TYPES extends MessageTypes,\n\tTYPE extends keyof MESSAGE_TYPES,\n> = {\n\tabort: () => void\n\tcustom: MESSAGE_TYPES[TYPE]\n\tdone: Promise<'deleted'>\n\theader: string | null\n\tmetadata: z.output<typeof metadataSchema>\n\ttext: string\n}\n\ntype Show<MESSAGE_TYPES extends MessageTypes> = <\n\tMESSAGE extends Messages<MESSAGE_TYPES>[keyof MESSAGE_TYPES & string],\n>(\n\tmessage: Exclude<\n\t\tkeyof MESSAGE,\n\t\tkeyof Messages<MESSAGE_TYPES>[keyof MESSAGE_TYPES & string]\n\t> extends never\n\t\t? MESSAGE\n\t\t: never,\n) => ShowResult<\n\tMESSAGE_TYPES,\n\tMESSAGE extends { type: infer TYPE } ? TYPE : 'default'\n>\n\ntype WithInferredOptions<\n\tMESSAGE_TYPES extends MessageTypes,\n\tOPTIONS extends {\n\t\tduration?: number | null\n\t\ttype?: keyof MESSAGE_TYPES\n\t},\n> = OPTIONS extends {\n\tduration?: number | null\n\ttype: infer TYPE extends keyof MESSAGE_TYPES\n}\n\t?\n\t\t\t| MessagesNoDefault<MESSAGE_TYPES>[TYPE]\n\t\t\t| Omit<Messages<MESSAGE_TYPES>[TYPE], 'type'>\n\t: Messages<MESSAGE_TYPES>[keyof MESSAGE_TYPES]\n\ntype WithOptions<MESSAGE_TYPES extends MessageTypes> = <\n\tBASE_OPTIONS extends {\n\t\tduration?: number | null\n\t\ttype?: keyof MESSAGE_TYPES\n\t},\n>(\n\tbaseOptions: Exclude<keyof BASE_OPTIONS, 'duration' | 'type'> extends never\n\t\t? BASE_OPTIONS\n\t\t: `Argument \"${Exclude<keyof BASE_OPTIONS & string, 'duration' | 'type'>}\" is not supported`,\n) => <OPTIONS extends WithInferredOptions<MESSAGE_TYPES, BASE_OPTIONS>>(\n\toptions: Exclude<\n\t\tkeyof OPTIONS,\n\t\tkeyof WithInferredOptions<MESSAGE_TYPES, BASE_OPTIONS>\n\t> extends never\n\t\t? OPTIONS\n\t\t: `Argument \"${Exclude<keyof OPTIONS & string, 'duration' | 'type'>}\" is not supported`,\n) => ShowResult<\n\tMESSAGE_TYPES,\n\tBASE_OPTIONS & OPTIONS extends {\n\t\ttype: infer TYPE extends keyof MESSAGE_TYPES\n\t}\n\t\t? TYPE\n\t\t: 'default'\n>\n\nexport type ToasterReturn<MESSAGE_TYPES extends MessageTypes> = {\n\tabort: (toastId: string) => void\n\tshow: Show<MESSAGE_TYPES>\n\twithOptions: WithOptions<MESSAGE_TYPES>\n\n\t// internal\n\t_internal_pls_dont_touch: {\n\t\trequestDelete: (toastId: string) => void\n\t\tsubscribe: (handler: z.output<typeof subscribeHandlerSchema>) => void\n\t\tunsubscribe: () => void\n\t}\n}\n\nconst createToasterOptions = z\n\t.object({\n\t\tanimationFrame: z\n\t\t\t.object({\n\t\t\t\tgetIsRunning: z.function().args().returns(z.boolean()),\n\t\t\t\tstart: z\n\t\t\t\t\t.function()\n\t\t\t\t\t.args(z.function().args().returns(z.void()))\n\t\t\t\t\t.returns(z.void()),\n\t\t\t\tstop: z.function().args().returns(z.void()),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default(() => {\n\t\t\t\tlet animationFrameId: number | null = null\n\t\t\t\treturn {\n\t\t\t\t\tgetIsRunning: () => animationFrameId !== null,\n\t\t\t\t\tstart: (update) => {\n\t\t\t\t\t\tconst animate = () => {\n\t\t\t\t\t\t\tanimationFrameId = globalThis.requestAnimationFrame(animate)\n\t\t\t\t\t\t\tupdate()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimationFrameId = globalThis.requestAnimationFrame(animate)\n\t\t\t\t\t},\n\t\t\t\t\tstop: () => {\n\t\t\t\t\t\tif (animationFrameId) {\n\t\t\t\t\t\t\tglobalThis.cancelAnimationFrame(animationFrameId)\n\t\t\t\t\t\t\tanimationFrameId = null\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}),\n\t\t// eslint-disable-next-line no-magic-numbers\n\t\tnumberOfToasts: z.number().int().positive().finite().default(3),\n\t})\n\t.strict()\n\t.default(() => ({}))\n\ntype CreateToasterOptions = z.input<typeof createToasterOptions>\n\ntype ActiveToast = {\n\tbeginTime: number\n\tendTime: number | null\n\tmessage: QueuedToast\n\tprogress: number | null\n}\n\nconst INTERNAL_ABORT = 'INTERNAL_ABORT'\n\nconst calculateProgress = (start: number, now: number, end: number): number => {\n\tconst unclamped = (now - start) / (end - start)\n\treturn Math.max(Math.min(unclamped, 1), 0)\n}\n\n// --------------------------------------------------------------- //\n// --------------------------------------------------------------- //\n// -- Begin of implementation ------------------------------------ //\n// --------------------------------------------------------------- //\n// --------------------------------------------------------------- //\n\nexport const createToaster = <\n\tMESSAGE_TYPES extends MessageTypes = { default: Record<string, never> },\n>(\n\t_options: CreateToasterOptions = {},\n): ToasterReturn<MESSAGE_TYPES> => {\n\tconst options = createToasterOptions.parse(_options)\n\n\tconst fifoToasterQueue: Array<QueuedToast> = []\n\tconst activeToasts: Array<ActiveToast> = []\n\n\tlet subscriber: SubscribeHandler | null = null\n\tconst notifySubscriber = () => {\n\t\tif (subscriber === null) return\n\n\t\tvoid subscriber(\n\t\t\tactiveToasts.map((toast) => ({\n\t\t\t\tcustom: toast.message.custom,\n\t\t\t\tduration: toast.message.duration,\n\t\t\t\theader: toast.message.header,\n\t\t\t\tmetadata: toast.message.metadata,\n\t\t\t\tprogress: toast.progress,\n\t\t\t\ttext: toast.message.text,\n\t\t\t\ttype: toast.message.type,\n\t\t\t})),\n\t\t)\n\t}\n\n\tconst deleteToastFromActiveToasts = (toastId: string) => {\n\t\tconst index = activeToasts.findIndex(\n\t\t\t(toast) => toast.message.metadata.id === toastId,\n\t\t)\n\t\tif (index === -1)\n\t\t\tthrow new Error(\n\t\t\t\t`could not find toast in activeToasts with id “${toastId}”`,\n\t\t\t)\n\n\t\tconst removedToast = activeToasts.splice(index, 1)[0]\n\n\t\tif (!removedToast)\n\t\t\tthrow new Error(\n\t\t\t\t`could not find toast in activeToasts with id “${toastId}”`,\n\t\t\t)\n\n\t\tnotifySubscriber()\n\t\treturn removedToast.message\n\t}\n\n\tconst deleteToastFromFifoQueue = (toastId: string) => {\n\t\tconst index = fifoToasterQueue.findIndex(\n\t\t\t(toast) => toast.metadata.id === toastId,\n\t\t)\n\t\tif (index === -1)\n\t\t\tthrow new Error(\n\t\t\t\t`could not find toast in fifoToasterQueue with id “${toastId}”`,\n\t\t\t)\n\n\t\tconst removedToast = fifoToasterQueue.splice(index, 1)[0]\n\n\t\tif (!removedToast)\n\t\t\tthrow new Error(\n\t\t\t\t`could not find toast in fifoToasterQueue with id “${toastId}”`,\n\t\t\t)\n\n\t\treturn removedToast\n\t}\n\n\tconst deleteAndAbortToast = (mode: 'abort' | 'delete', toastId: string) => {\n\t\tconst removedToast = activeToasts.some(\n\t\t\t(toast) => toast.message.metadata.id === toastId,\n\t\t)\n\t\t\t? deleteToastFromActiveToasts(toastId)\n\t\t\t: deleteToastFromFifoQueue(toastId)\n\n\t\tswitch (mode) {\n\t\t\tcase 'abort': {\n\t\t\t\tconst { abortController } = removedToast.metadata\n\n\t\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\t\tabortController.abort(INTERNAL_ABORT)\n\t\t\t\t}\n\n\t\t\t\tremovedToast.deferred.reject(\n\t\t\t\t\tabortController.signal.aborted\n\t\t\t\t\t\t? abortController.signal.reason\n\t\t\t\t\t\t: 'aborted',\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'delete': {\n\t\t\t\tremovedToast.deferred.resolve('deleted')\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates the list of active toasts, managing their display duration and progress.\n\t *\n\t * - If a toast has an `endTime`, it calculates its progress based on the current time.\n\t * - If a toast's progress reaches 100%, it is deleted and resolved.\n\t * - If there is room for more toasts, it moves items from the `fifoToasterQueue` to `activeToasts`.\n\t * - Manages the animation frame, starting or stopping it based on whether there are active toasts.\n\t * - Notifies the subscriber if the state of `activeToasts` changes.\n\t */\n\t// eslint-disable-next-line sonarjs/cognitive-complexity\n\tconst updateActiveToasts = (_dirty = false) => {\n\t\tif (subscriber === null) return\n\t\tlet dirty = _dirty\n\n\t\tlet index = 0\n\t\twhile (index < activeToasts.length) {\n\t\t\tconst toast = activeToasts[index] as ActiveToast\n\n\t\t\tif (toast.endTime === null) {\n\t\t\t\tindex++\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttoast.progress = calculateProgress(\n\t\t\t\ttoast.beginTime,\n\t\t\t\tDate.now(),\n\t\t\t\ttoast.endTime,\n\t\t\t)\n\t\t\tdirty = true\n\n\t\t\tif (toast.progress >= 1) {\n\t\t\t\tdeleteAndAbortToast('delete', toast.message.metadata.id)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tindex++\n\t\t}\n\n\t\twhile (activeToasts.length < options.numberOfToasts) {\n\t\t\tconst message = fifoToasterQueue.shift() ?? null\n\t\t\tif (message === null) break\n\n\t\t\tactiveToasts.push({\n\t\t\t\tbeginTime: Date.now(),\n\t\t\t\tendTime: message.duration ? Date.now() + message.duration : null,\n\t\t\t\tmessage,\n\t\t\t\tprogress: message.duration ? 0 : null,\n\t\t\t})\n\t\t\tdirty = true\n\t\t}\n\n\t\tconst isRunning = options.animationFrame.getIsRunning()\n\t\tconst isNowEmpty = activeToasts.length === 0\n\n\t\tif (!isRunning && !isNowEmpty) {\n\t\t\toptions.animationFrame.start(() => {\n\t\t\t\tupdateActiveToasts()\n\t\t\t})\n\t\t} else if (isRunning && isNowEmpty) {\n\t\t\toptions.animationFrame.stop()\n\t\t}\n\n\t\tif (dirty) notifySubscriber()\n\t}\n\n\tconst show: Show<MESSAGE_TYPES> = <\n\t\tMESSAGE,\n\t\tTYPE extends keyof MESSAGE_TYPES = MESSAGE extends {\n\t\t\ttype: infer TYPE extends keyof MESSAGE_TYPES\n\t\t}\n\t\t\t? TYPE\n\t\t\t: 'default',\n\t>(\n\t\tmessage: MESSAGE,\n\t) => {\n\t\tconst options = messageSchema.parse(message)\n\n\t\tconst doneDeferred = createDeferred<'deleted'>()\n\t\tconst { signal } = options.metadata.abortController\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tif (signal.reason !== INTERNAL_ABORT)\n\t\t\t\tdeleteAndAbortToast('abort', options.metadata.id)\n\t\t})\n\n\t\tfifoToasterQueue.push({\n\t\t\tcustom: options.custom,\n\t\t\tdeferred: doneDeferred,\n\t\t\tduration: options.duration,\n\t\t\theader: options.header,\n\t\t\tmetadata: options.metadata,\n\t\t\ttext: options.text,\n\t\t\ttype: options.type,\n\t\t})\n\n\t\tupdateActiveToasts()\n\n\t\treturn {\n\t\t\tabort: () => {\n\t\t\t\tdeleteAndAbortToast('abort', options.metadata.id)\n\t\t\t},\n\t\t\tcustom: options.custom as MESSAGE_TYPES[TYPE],\n\t\t\tdone: doneDeferred.promise,\n\t\t\theader: options.header,\n\t\t\tmetadata: options.metadata,\n\t\t\ttext: options.text,\n\t\t\ttype: options.type as TYPE,\n\t\t}\n\t}\n\n\treturn {\n\t\tabort: (toastId: string) => {\n\t\t\tdeleteAndAbortToast('abort', toastId)\n\t\t},\n\t\tshow,\n\t\twithOptions: (baseOptions) => (options) =>\n\t\t\tshow({\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t...(baseOptions as any),\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t...(options as any),\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t}) as any,\n\t\t/**\n\t\t * The methods in here expose the toasts from `activeToasts` to a single subscriber.\n\t\t * Toasts from `fifoToasterQueue` are kept private.\n\t\t *\n\t\t * The subscriber:\n\t\t * - gets updated whenever `activeToasts` gets mutated\n\t\t * - can delete a specific toast by id\n\t\t */\n\t\t_internal_pls_dont_touch: {\n\t\t\trequestDelete: (deleteId) => {\n\t\t\t\tdeleteAndAbortToast('delete', deleteId)\n\t\t\t\tupdateActiveToasts(true)\n\t\t\t},\n\t\t\tsubscribe: (handler) => {\n\t\t\t\tif (subscriber)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'create-toaster: toaster already has a subscriber, aborting',\n\t\t\t\t\t)\n\n\t\t\t\tsubscriber = handler\n\n\t\t\t\tupdateActiveToasts(true)\n\t\t\t},\n\t\t\tunsubscribe: () => {\n\t\t\t\tif (!subscriber)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'create-toaster: toaster currently has no subscriber, aborting',\n\t\t\t\t\t)\n\n\t\t\t\toptions.animationFrame.stop()\n\n\t\t\t\tsubscriber = null\n\t\t\t},\n\t\t},\n\t}\n}\n","import { MetaDesignType } from '../types/kotti'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtToastVue from './KtToast.vue'\nimport KtToasterVue from './KtToaster.vue'\nimport { KottiToast, KottiToaster } from './types'\n\nexport { createToaster } from './create-toaster'\n\nexport const KtToaster = attachMeta(makeInstallable(KtToasterVue), {\n\taddedVersion: '8.0.0',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/design/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=6671-10835',\n\t},\n\tslots: {\n\t\tdefault: {\n\t\t\tdescription:\n\t\t\t\t'Slots for all message types exist, with default being the fallback',\n\t\t\tscope: {\n\t\t\t\tcustom: { description: 'Custom data object', type: 'object' },\n\t\t\t\tdelete: { description: 'Deletes the toast', type: 'function' },\n\t\t\t\tduration: {\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Total toasting duration in ms, null for persistent toasts',\n\t\t\t\t\ttype: 'integer',\n\t\t\t\t},\n\t\t\t\theader: { description: 'Optional header text', type: 'string' },\n\t\t\t\tprogress: { description: 'Lifecycle progress (0–1)', type: 'float' },\n\t\t\t\ttext: { description: 'Main text content', type: 'string' },\n\t\t\t\ttype: { description: 'Toast type', type: 'string' },\n\t\t\t},\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'KottiToaster',\n\t\tschema: KottiToaster.propsSchema,\n\t},\n})\n\nexport const KtToast = attachMeta(makeInstallable(KtToastVue), {\n\taddedVersion: '8.0.0',\n\tdeprecated: null,\n\tdesigns: {\n\t\ttype: MetaDesignType.FIGMA,\n\t\turl: 'https://www.figma.com/design/0yFVivSWXgFf2ddEF92zkf/Kotti-Design-System?node-id=6671-10835',\n\t},\n\tslots: {\n\t\tactions: {\n\t\t\tdescription:\n\t\t\t\t'Used to put e.g. buttons or other interactive elements at the bottom of the toast',\n\t\t\tscope: null,\n\t\t},\n\t\theader: {\n\t\t\tdescription: 'Used to replace the optional header text',\n\t\t\tscope: null,\n\t\t},\n\t\ttext: {\n\t\t\tdescription: 'Used to replace the main text',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'KottiToast',\n\t\tschema: KottiToast.propsSchema,\n\t},\n})\n","<template>\n\t<div class=\"kt-user-menu-container\">\n\t\t<div ref=\"userMenuRef\" class=\"kt-user-menu\">\n\t\t\t<div class=\"kt-user-menu__items\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"(section, index) in parsedSections\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\tclass=\"kt-user-menu-item-wrapper\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"section.title\"\n\t\t\t\t\t\tclass=\"kt-user-menu-item-wrapper__title\"\n\t\t\t\t\t\tv-text=\"section.title\"\n\t\t\t\t\t/>\n\t\t\t\t\t<!-- eslint-disable vue/no-v-text-v-html-on-component -->\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"link.component\"\n\t\t\t\t\t\tv-for=\"(link, linkIndex) in section.links\"\n\t\t\t\t\t\t:key=\"linkIndex\"\n\t\t\t\t\t\tv-bind=\"link.props\"\n\t\t\t\t\t\tclass=\"kt-user-menu-item-wrapper__item\"\n\t\t\t\t\t\t:data-test=\"`navbar:footer:element:${link.title\n\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t.split(' ')\n\t\t\t\t\t\t\t.join('-')}`\"\n\t\t\t\t\t\t@click=\"$emit('click', link)\"\n\t\t\t\t\t\tv-text=\"link.title\"\n\t\t\t\t\t/>\n\t\t\t\t\t<!-- eslint-enable vue/no-v-text-v-html-on-component -->\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div ref=\"triggerRef\" :class=\"userInfoClass\">\n\t\t\t<KtAvatar class=\"kt-user-menu-info__avatar\" size=\"sm\" :src=\"userAvatar\" />\n\t\t\t<div\n\t\t\t\tv-if=\"!context.isNarrow || isMenuOpen\"\n\t\t\t\tclass=\"kt-user-menu-info__text\"\n\t\t\t>\n\t\t\t\t<div class=\"kt-user-menu-info__name\" v-text=\"userName\" />\n\t\t\t\t<div class=\"kt-user-menu-info__status\" v-text=\"userStatus\" />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"!context.isNarrow || isMenuOpen\"\n\t\t\t\tclass=\"kt-user-menu-info__chevron\"\n\t\t\t>\n\t\t\t\t<i v-if=\"isMenuOpen\" class=\"yoco\">chevron_down</i>\n\t\t\t\t<i v-else class=\"yoco\">chevron_up</i>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, ref } from 'vue'\n\nimport { useTippy } from '@3yourmind/vue-use-tippy'\n\nimport { KtAvatar } from '../kotti-avatar'\nimport { KT_NAVBAR_CONTEXT } from '../kotti-navbar/constants'\nimport { KottiNavbar } from '../kotti-navbar/types'\nimport { makeProps } from '../make-props'\n\nimport { KottiUserMenu } from './types'\n\nexport default defineComponent({\n\tname: 'KtUserMenu',\n\tcomponents: {\n\t\tKtAvatar,\n\t},\n\tprops: makeProps(KottiUserMenu.propsSchema),\n\temits: ['click'],\n\tsetup(props) {\n\t\tconst triggerRef = ref<HTMLDivElement | null>(null)\n\t\tconst userMenuRef = ref<HTMLDivElement | null>(null)\n\n\t\tconst isMenuOpen = ref(false)\n\t\tconst context = inject(\n\t\t\tKT_NAVBAR_CONTEXT,\n\t\t\tcomputed(() => ({ isNarrow: false, theme: KottiNavbar.Theme.DEFAULT })),\n\t\t)\n\n\t\tuseTippy(\n\t\t\ttriggerRef,\n\t\t\tcomputed(() => ({\n\t\t\t\tappendTo: () =>\n\t\t\t\t\ttriggerRef.value as NonNullable<typeof triggerRef.value>,\n\t\t\t\tarrow: false,\n\t\t\t\tcontent: userMenuRef.value ?? undefined,\n\t\t\t\tinteractive: true,\n\t\t\t\tmaxWidth: 'none',\n\t\t\t\toffset: [0, 0],\n\t\t\t\tonHide: () => {\n\t\t\t\t\tisMenuOpen.value = false\n\t\t\t\t},\n\t\t\t\tonShow: () => {\n\t\t\t\t\tisMenuOpen.value = true\n\t\t\t\t},\n\t\t\t\ttheme: `kt-usermenu-${context.value.theme}`,\n\t\t\t\ttrigger: 'click focusin',\n\t\t\t\tzIndex: 1000,\n\t\t\t})),\n\t\t)\n\n\t\treturn {\n\t\t\tcontext,\n\t\t\tisMenuOpen,\n\t\t\tparsedSections: computed(() =>\n\t\t\t\tKottiUserMenu.propsSchema.shape.sections.parse(props.sections),\n\t\t\t),\n\t\t\ttriggerRef,\n\t\t\tuserInfoClass: computed(() => ({\n\t\t\t\t'kt-user-menu-info': true,\n\t\t\t\t'kt-user-menu-info--is-narrow': context.value.isNarrow,\n\t\t\t\t'kt-user-menu-info--is-narrow-wide':\n\t\t\t\t\tcontext.value.isNarrow && isMenuOpen.value,\n\t\t\t})),\n\t\t\tuserMenuRef,\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\">\n@import '../kotti-style/_variables';\n\n.tippy-box[data-theme^='kt-usermenu'] {\n\twidth: 11.2rem;\n\tcolor: var(--user-menu-color);\n\tbackground-color: var(--user-menu-background);\n\tborder-radius: 0.2rem 0.2rem 0 0;\n\n\t.tippy-content {\n\t\tpadding: 0.8rem 0.8rem 0.2rem;\n\t}\n}\n\n@media (width < $size-md) {\n\t.tippy-box[data-theme^='kt-usermenu'] {\n\t\twidth: 100vw;\n\t\tborder-radius: 0 0 0.2rem 0.2rem;\n\n\t\t// HACK: tippy box has a 5px offset that I can not get rid of using its props\n\t\ttransform: translateX(-5px);\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-style/_variables';\n\n.kt-user-menu-item-wrapper {\n\tmargin-bottom: 0.4rem;\n\topacity: 1;\n\n\t&__title {\n\t\tpadding: 0.2rem 0.4rem;\n\t\tfont-size: 0.5rem;\n\t\tfont-weight: 600;\n\t\ttext-transform: uppercase;\n\t}\n\n\t&__item {\n\t\tdisplay: block;\n\t\tpadding: 0.2rem 0.4rem;\n\t\tmargin: 0.1rem 0;\n\t\tfont-size: 0.68rem;\n\t\tline-height: 1.2rem;\n\t\tcolor: inherit;\n\t\tborder-radius: 0.2rem;\n\n\t\t&:hover {\n\t\t\tcolor: inherit;\n\t\t\tcursor: pointer;\n\t\t\tbackground: var(--user-menu-background-active);\n\t\t}\n\t}\n}\n\n.kt-user-menu-info {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: space-between;\n\tpadding: 0.4rem;\n\tmargin: -0.4rem;\n\tline-height: 1;\n\tcursor: pointer;\n\tborder-radius: 0 0 0.2rem 0.2rem;\n\n\t&--is-narrow {\n\t\twidth: 2.4rem;\n\t}\n\n\t&--is-narrow-wide {\n\t\tposition: absolute;\n\t\tbottom: 0.8rem;\n\t\tleft: 0.8rem;\n\t\twidth: 11.2rem;\n\t}\n\n\t&[aria-expanded='true'],\n\t&:hover {\n\t\tbackground-color: var(--user-menu-background);\n\t}\n\n\t&__avatar {\n\t\tcolor: var(--user-menu-color);\n\t\tbackground-color: var(--user-menu-background);\n\t\tborder-color: var(--user-menu-background);\n\t}\n\n\t&__avatar,\n\t&__chevron {\n\t\tflex-grow: 0;\n\t\tflex-shrink: 0;\n\t}\n\n\t&__chevron {\n\t\talign-self: center;\n\t}\n\n\t&__text {\n\t\twidth: 100%;\n\t\tmargin-left: 0.4rem;\n\t\tline-height: 0.8rem;\n\t\tcolor: var(--user-menu-color);\n\t}\n\n\t&__name {\n\t\tfont-size: 0.7rem;\n\t\tfont-weight: 600;\n\t}\n\n\t&__status {\n\t\tfont-size: 0.6rem;\n\t\tfont-weight: 600;\n\t\topacity: 0.65;\n\t}\n}\n\n@media (width < $size-md) {\n\t.kt-user-menu-container {\n\t\tdisplay: block;\n\t}\n\n\t.kt-user-menu-info {\n\t\tflex-basis: 48px;\n\t\tpadding: 0.3rem;\n\n\t\t&--is-narrow-wide {\n\t\t\twidth: auto;\n\t\t}\n\n\t\t&__text,\n\t\t&__chevron {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n","import { attachMeta, makeInstallable } from '../utilities'\n\nimport KtUserMenuVue from './KtUserMenu.vue'\nimport { KottiUserMenu } from './types'\n\nexport const KtUserMenu = attachMeta(makeInstallable(KtUserMenuVue), {\n\taddedVersion: '0.0.1',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.UserMenu',\n\t\tschema: KottiUserMenu.propsSchema,\n\t},\n})\n","<template>\n\t<div :class=\"rootClasses\" :data-test=\"dataTest\">\n\t\t<KtLabel\n\t\t\tv-show=\"showHeader\"\n\t\t\t:helpDescription=\"helpDescription\"\n\t\t\t:helpText=\"helpText\"\n\t\t\t:helpTextSlot=\"$slots.helpText\"\n\t\t\t:label=\"label\"\n\t\t/>\n\t\t<KtLoading v-if=\"isLoading\" class=\"kt-value-label__loading\" />\n\t\t<div v-else class=\"kt-value-label__value\">\n\t\t\t<i v-if=\"isUnset\" v-text=\"notSetLabel\" />\n\t\t\t<slot v-else-if=\"$slots.default\" />\n\t\t\t<span v-else v-text=\"valueToRender\" />\n\t\t</div>\n\t\t<div\n\t\t\tv-if=\"!isLoading && validationText !== null\"\n\t\t\tclass=\"kt-value-label__validation-text\"\n\t\t>\n\t\t\t<i class=\"yoco\" v-text=\"validationTextIcon\" />\n\t\t\t{{ validationText }}\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { Dashes } from '@metatypes/typography'\nimport { computed, defineComponent } from 'vue'\n\nimport { Yoco } from '@3yourmind/yoco'\n\nimport { useTranslationNamespace } from '../kotti-i18n/hooks'\nimport { KtLabel } from '../kotti-label'\nimport { KtLoading } from '../kotti-loading'\nimport { makeProps } from '../make-props'\n\nimport { KottiValueLabel } from './types'\n\nexport default defineComponent({\n\tname: 'KtValueLabel',\n\tcomponents: { KtLabel, KtLoading },\n\tprops: makeProps(KottiValueLabel.propsSchema),\n\tsetup(props) {\n\t\tconst translations = useTranslationNamespace('KtValueLabel')\n\n\t\tconst hasHelpText = computed(() => props.helpText !== null)\n\t\tconst hasLabel = computed(() => props.label !== null)\n\t\tconst validationType = computed(() => props.validation?.type ?? null)\n\n\t\treturn {\n\t\t\tnotSetLabel: computed(() => translations.value.notSet),\n\t\t\trootClasses: computed(() => {\n\t\t\t\tconst classes = ['kt-value-label']\n\t\t\t\tif (validationType.value !== null)\n\t\t\t\t\tclasses.push(`kt-value-label--is-validation-${validationType.value}`)\n\n\t\t\t\treturn classes\n\t\t\t}),\n\t\t\tshowHeader: computed(\n\t\t\t\t() =>\n\t\t\t\t\thasLabel.value || hasHelpText.value || props.helpDescription !== null,\n\t\t\t),\n\t\t\tvalidationText: computed(() =>\n\t\t\t\tprops.validation !== null ? props.validation.text : null,\n\t\t\t),\n\t\t\tvalidationTextIcon: computed(() =>\n\t\t\t\tvalidationType.value === null\n\t\t\t\t\t? null\n\t\t\t\t\t: {\n\t\t\t\t\t\t\terror: Yoco.Icon.CIRCLE_CROSS,\n\t\t\t\t\t\t\tsuccess: Yoco.Icon.CIRCLE_CHECK,\n\t\t\t\t\t\t\twarning: Yoco.Icon.CIRCLE_ATTENTION,\n\t\t\t\t\t\t}[validationType.value],\n\t\t\t),\n\t\t\tvalueToRender: computed(() => props.value ?? Dashes.EmDash),\n\t\t}\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../kotti-field/mixins';\n\n.kt-value-label {\n\thyphens: auto;\n\n\t@include validations using ($type) {\n\t\t/* stylelint-disable */\n\t\t.kt-value-label__validation-text {\n\t\t\tcolor: var(--support-#{$type});\n\t\t}\n\t\t/* stylelint-enable */\n\t}\n\n\t> *:not(:last-child) {\n\t\tmargin-bottom: var(--unit-1);\n\t}\n\n\t&__loading {\n\t\theight: 1.1rem;\n\t}\n\n\t&__validation-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolor: var(--text-03);\n\n\t\t> i {\n\t\t\tmargin-right: var(--unit-h);\n\t\t}\n\t}\n\n\t&__value {\n\t\tfont-size: var(--font-size-medium);\n\t\tfont-weight: 400;\n\t\tline-height: 1.6;\n\t\tcolor: var(--text-01);\n\n\t\ti,\n\t\tspan {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n\n@supports not (hyphens: auto) {\n\t.kt-value-label {\n\t\tword-break: break-all;\n\t}\n}\n</style>\n","import { FIELD_META_BASE_SLOTS } from '../kotti-field/meta'\nimport { attachMeta, makeInstallable } from '../utilities'\n\nimport KtValueLabelVue from './KtValueLabel.vue'\nimport { KottiValueLabel } from './types'\n\nexport const KtValueLabel = attachMeta(makeInstallable(KtValueLabelVue), {\n\taddedVersion: '5.3.1',\n\tcomponentFolder: 'kotti-value-label',\n\tdeprecated: null,\n\tdesigns: null,\n\tslots: {\n\t\t...FIELD_META_BASE_SLOTS,\n\t\tdefault: {\n\t\t\tdescription: 'used to render custom content instead of value',\n\t\t\tscope: null,\n\t\t},\n\t},\n\ttypeScript: {\n\t\tnamespace: 'Kotti.ValueLabel',\n\t\tschema: KottiValueLabel.propsSchema,\n\t},\n})\n","import type { App } from 'vue'\n\n// styles\nimport './kotti-style/index.scss'\n\n// components\nimport { KtAccordion } from './kotti-accordion'\nexport * from './kotti-accordion'\nimport { KtActionbar } from './kotti-actionbar'\nexport * from './kotti-actionbar'\nimport { KtAvatar } from './kotti-avatar'\nexport * from './kotti-avatar'\nimport { KtAvatarGroup } from './kotti-avatar-group'\nexport * from './kotti-avatar-group'\nimport { KtBanner } from './kotti-banner'\nexport * from './kotti-banner'\nimport { KtBreadcrumb } from './kotti-breadcrumb'\nexport * from './kotti-breadcrumb'\nimport { KtButton, KtSplitButton } from './kotti-button'\nexport * from './kotti-button'\nimport { KtButtonGroup } from './kotti-button-group'\nexport * from './kotti-button-group'\nimport { KtCard } from './kotti-card'\nexport * from './kotti-card'\nimport { KtCol } from './kotti-col'\nexport * from './kotti-col'\nimport { KtComment, KtCommentInput } from './kotti-comment'\nexport * from './kotti-comment'\nimport { KtDrawer } from './kotti-drawer'\nexport * from './kotti-drawer'\nimport { KtField } from './kotti-field'\nexport * from './kotti-field'\nimport { KtFieldCurrency } from './kotti-field-currency'\nexport * from './kotti-field-currency'\nimport {\n\tKtFieldDate,\n\tKtFieldDateRange,\n\tKtFieldDateTime,\n\tKtFieldDateTimeRange,\n} from './kotti-field-date'\nexport * from './kotti-field-date'\nimport { KtFieldFileUpload } from './kotti-field-file-upload'\nexport * from './kotti-field-file-upload'\nimport { KtFieldInlineEdit } from './kotti-field-inline-edit'\nexport * from './kotti-field-inline-edit'\nimport { KtFieldNumber } from './kotti-field-number'\nexport * from './kotti-field-number'\nimport { KtFieldPassword } from './kotti-field-password'\nexport * from './kotti-field-password'\nimport { KtFieldRadioGroup } from './kotti-field-radio-group'\nexport * from './kotti-field-radio-group'\nimport {\n\tKtFieldMultiSelect,\n\tKtFieldMultiSelectRemote,\n\tKtFieldSingleSelect,\n\tKtFieldSingleSelectRemote,\n} from './kotti-field-select'\nexport * from './kotti-field-select'\nimport { KtFieldText } from './kotti-field-text'\nexport * from './kotti-field-text'\nimport { KtFieldTextArea } from './kotti-field-text-area'\nexport * from './kotti-field-text-area'\nimport { KtFieldToggle, KtFieldToggleGroup } from './kotti-field-toggle'\nexport * from './kotti-field-toggle'\nimport { KtFileUpload } from './kotti-file-upload'\nexport * from './kotti-file-upload'\nimport { KtFilters } from './kotti-filters'\nexport * from './kotti-filters'\nimport { KtForm } from './kotti-form'\nexport * from './kotti-form'\nimport { KtFormControllerList } from './kotti-form-controller-list'\nexport * from './kotti-form-controller-list'\nimport { KtFormControllerObject } from './kotti-form-controller-object'\nexport * from './kotti-form-controller-object'\nimport { KtFormSubmit } from './kotti-form-submit'\nexport * from './kotti-form-submit'\nimport { KtHeading } from './kotti-heading'\nexport * from './kotti-heading'\nimport { KtI18nContext } from './kotti-i18n'\nexport * from './kotti-i18n'\nimport { KtLabel } from './kotti-label'\nexport * from './kotti-label'\nimport { KtLine } from './kotti-line'\nexport * from './kotti-line'\nimport { KtLoading } from './kotti-loading'\nexport * from './kotti-loading'\nimport { KtModal } from './kotti-modal'\nexport * from './kotti-modal'\nimport { KtNavbar } from './kotti-navbar'\nexport * from './kotti-navbar'\nimport { KtPagination } from './kotti-pagination'\nexport * from './kotti-pagination'\nimport { KtPopover } from './kotti-popover'\nexport * from './kotti-popover'\nimport { KtRow } from './kotti-row'\nexport * from './kotti-row'\nimport { KtColumnSelector, KtStandardTable, KtTable } from './kotti-table'\nexport * from './kotti-table'\nimport { KtTag } from './kotti-tag'\nexport * from './kotti-tag'\nimport { KtToast, KtToaster } from './kotti-toaster'\nexport * from './kotti-toaster'\nimport { KtUserMenu } from './kotti-user-menu'\nexport * from './kotti-user-menu'\nimport { KtValueLabel } from './kotti-value-label'\nexport * from './kotti-value-label'\n\nexport * from './types'\nexport * from './utilities/color-scheme'\n\nexport default {\n\tinstall<T>(app: App<T>): void {\n\t\tconst components = {\n\t\t\tKtAccordion,\n\t\t\tKtActionbar,\n\t\t\tKtAvatar,\n\t\t\tKtAvatarGroup,\n\t\t\tKtBanner,\n\t\t\tKtBreadcrumb,\n\t\t\tKtButton,\n\t\t\tKtButtonGroup,\n\t\t\tKtCard,\n\t\t\tKtCol,\n\t\t\tKtColumnSelector,\n\t\t\tKtComment,\n\t\t\tKtCommentInput,\n\t\t\tKtDrawer,\n\t\t\tKtField,\n\t\t\tKtFieldCurrency,\n\t\t\tKtFieldDate,\n\t\t\tKtFieldDateRange,\n\t\t\tKtFieldDateTime,\n\t\t\tKtFieldDateTimeRange,\n\t\t\tKtFieldFileUpload,\n\t\t\tKtFieldInlineEdit,\n\t\t\tKtFieldMultiSelect,\n\t\t\tKtFieldMultiSelectRemote,\n\t\t\tKtFieldNumber,\n\t\t\tKtFieldPassword,\n\t\t\tKtFieldRadioGroup,\n\t\t\tKtFieldSingleSelect,\n\t\t\tKtFieldSingleSelectRemote,\n\t\t\tKtFieldText,\n\t\t\tKtFieldTextArea,\n\t\t\tKtFieldToggle,\n\t\t\tKtFieldToggleGroup,\n\t\t\tKtFileUpload,\n\t\t\tKtFilters,\n\t\t\tKtForm,\n\t\t\tKtFormControllerList,\n\t\t\tKtFormControllerObject,\n\t\t\tKtFormSubmit,\n\t\t\tKtHeading,\n\t\t\tKtI18nContext,\n\t\t\tKtLabel,\n\t\t\tKtLine,\n\t\t\tKtLoading,\n\t\t\tKtModal,\n\t\t\tKtNavbar,\n\t\t\tKtPagination,\n\t\t\tKtPopover,\n\t\t\tKtRow,\n\t\t\tKtSplitButton,\n\t\t\tKtStandardTable,\n\t\t\tKtTable,\n\t\t\tKtTag,\n\t\t\tKtToast,\n\t\t\tKtToaster,\n\t\t\tKtUserMenu,\n\t\t\tKtValueLabel,\n\t\t}\n\t\tfor (const [name, component] of Object.entries(components)) {\n\t\t\tapp.component(name, component)\n\t\t}\n\t},\n}\n"],"names":["KottiAccordion","z","yocoIconSchema","KottiActionbar","createLooseZodEnumSchema","someEnum","enumValues","KottiAvatar","Size","refinementNonEmpty","array","KottiAvatarGroup","itemSchema","KottiBanner","KottiBreadcrumb","SeparatorType","Yoco","Shared","IconPosition","KottiButton","ToggleStatus","Type","KottiSplitButton","KottiCard","ImagePosition","defaultParser","message","escape","defaultPostEscapeParser","resizeTextarea","textarea","idSchema","KottiComment","parseFunctionSchema","sharedSchema","Reply","Entry","Actions","Header","InlineEdit","TextArea","KottiCommentInput","KottiDrawer","FORM_KEY_NONE","KottiField","Validation","AutoComplete","KottiFieldCurrency","VALUE_PROP_REGEX","DATE_FORMAT_REGEX","DATE_TIME_FORMAT_REGEX","KOTTI_FIELD_DATE_SUPPORTS","KottiFieldDate","KottiFieldDateRange","KottiFieldDateTime","KottiFieldDateTimeRange","ActionButton","DropArea","FileItem","TakePhoto","KottiFieldFileUpload","Status","ProgressBar","KottiFieldInlineEdit","ConfirmationValidation","TextStyle","KottiFieldNumber","Align","KottiFieldPassword","KottiFieldRadioGroup","options","value","KottiFieldMultiSelect","KottiFieldMultiSelectRemote","KottiFieldSingleSelect","KottiFieldSingleSelectRemote","KottiFieldTextArea","KottiFieldText","KottiFieldToggle","KottiFieldToggleGroup","key","KottiFileUpload","status","val","KottiFilters","ButtonLinkType","FilterType","Operation","Boolean","Currency","DateRange","Float","Integer","MultiEnum","Search","SingleEnum","String","KottiHeading","KottiLine","Position","KottiModal","KottiNavbar","Theme","KottiPagination","PagingStyle","baseOptionSchema","KottiPopover","Placement","Trigger","IconTextItem","KottiRow","Justify","DEFAULT_PAGE_SIZE","DEFAULT_PAGE_SIZE_OPTIONS","MIN_PAGE_SIZE","KottiStandardTable","FilterOperation","NumberRange","sharedFilterSchema","booleanFilterSchema","dateRangeFilterSchema","multiSelectFilterSchema","numberRangeFilterSchema","singleSelectFilterSchema","sharedPaginationSchema","entry","entryIndex","KottiTable","KottiColumnSelector","optionSchema","categorySchema","KottiTag","KottiToaster","KottiToast","KottiUserMenu","KottiValueLabel","DecimalSeparator","MetaDesignType","attachMeta","component","meta","other","isInFocus","element","blurElement","isOrContainsEventTarget","eventTarget","makeInstallable","name","app","isNumberInRange","maximum","minimum","fitsMinimum","fitsMaximum","DECIMAL_SEPARATORS_CHARACTER_SET","sameWidthOrStyled","styles","instance","state","referenceStyles","NEVER","setUnion","sets","result","set","item","propValidator","isNever","propName","propSchema","validator","clonedValue","cloneDeep","error","walkSchemaTypes","schema","typeName","innerType","def","x","ignoredZodTypes","zodToVueType","makeProps","propsSchema","zodTypeSet","propDefinition","vuePropTypes","uniq","zodTypeName","getDefaultOptions","useSlideAnimation","isContentOpen","finalOptions","getRawHeight","executeAnimation","willOpen","animatedObject","frames","height","animation","watch","shouldBeShown","wasShown","ANIMATION_DURATION","_sfc_main$1O","defineComponent","props","emit","contentInnerRef","ref","computed","_hoisted_1","_hoisted_3","_openBlock","_createElementBlock","_createElementVNode","_ctx","_cache","args","_renderSlot","_toDisplayString","_hoisted_4","_createCommentVNode","_hoisted_5","_hoisted_6","_normalizeClass","_hoisted_7","KtAccordion","KtAccordionVue","_sfc_main$1N","_hoisted_2","_hoisted_9","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps","$event","_hoisted_8","KtActionbar","KtActionbarVue","DEFAULT_DEBOUNCE","ISO8601","ISO8601_SECONDS","ONE_HUNDRED_PERCENT","TIPPY_DISTANCE_OFFSET","_sfc_main$1M","slots","avatarFallback","contentRef","useTemplateRef","triggerRef","hideTippy","useTippy","onMounted","event","KtAvatar","KtAvatarVue","_sfc_main$1L","_item","_component_KtAvatar","_withCtx","KtAvatarGroup","KtAvatarGroupVue","_sfc_main$1K","helpTextContentRef","helpTextTriggerRef","hasSlot","isIconButton","showHelpText","isToggle","_sfc_main$1J","_sfc_main$1I","MenuOptionItem","itemRef","focusListener","onBeforeUnmount","hasFocus","hadFocus","_withKeys","_withModifiers","_createVNode","_component_MenuOptionItem","useActionsTippy","isDisabled","isLoading","isTippyOpen","tippyContentRef","tippyInstanceRef","tippyTriggerRef","setIsTippyOpen","isOpen","UNSET_INDEX","_sfc_main$1H","ActionsItem","KtButton","currentActionIndexInFocus","hasAvailableActions","action","getNextAvailableActionIndex","currentIndex","direction","step","nextIndex","keydownListener","actionIndex","omit","_component_KtButton","_component_ActionsItem","componentFolder","KtButtonVue","KtSplitButton","KtSplitButtonVue","_sfc_main$1G","_normalizeStyle","_createTextVNode","KtBanner","KtBannerVue","_sfc_main$1F","breadcrumb","KtBreadcrumb","KtBreadcrumbVue","_sfc_main$1E","KtButtonGroup","KtButtonGroupVue","KottiLoading","typeSchema","DELAY_RANGE","_sfc_main$1D","delayType","KtLoading","KtLoadingVue","_sfc_main$1C","hasActions","_component_KtLoading","KtCard","KtCardVue","KT_ROW_CONTEXT","KtCol","context","inject","style","gap","gutter","classes","h","KT_I18N_CONTEXT","Common","deDE","enUS","esES","frFR","jaJP","ukUA","fixDeepMerge","y","deepmerge","useI18nContext","reactive","useTranslationNamespace","namespace","useI18nProvide","currencyMap","locale","messages","numberFormat","defaultMessages","provide","_sfc_main$1B","_","translations","_sfc_main$1A","useResizeTextarea","textareaRef","modelValue","_sfc_main$1z","containerRef","showCancelMessage","blurTextarea","focusTextarea","onCancel","onClick","onUnmounted","isNil","_sfc_main$1y","CommentTextArea","localMessage","isEditing","wasEditing","payload","_component_CommentTextArea","_sfc_main$1x","CommentActions","CommentHeader","CommentInlineEdit","pick","_component_CommentHeader","_normalizeProps","_guardReactiveProps","_component_CommentInlineEdit","_component_CommentActions","_sfc_main$1w","localIsInternal","isInternal","commentType","_sfc_main$1v","CommentEntry","KtCommentInput","userToReply","rootDataTest","user","_component_CommentEntry","reply","_component_KtCommentInput","getCommentMeta","KtComment","KtCommentVue","KtCommentInputVue","_sfc_main$1u","isExpanded","_Transition","KtDrawer","KtDrawerVue","_sfc_main$1t","KottiLabel","_sfc_main$1s","FieldHelpText","_component_FieldHelpText","KtLabel","KtLabelVue","KT_FORM_CONTEXT","KT_FORM_SUBMIT_CONTEXT","createErrorMessage","DisabledSetValueCalledError","FormKeyNotFoundError","ImplicitFormKeyNoneError","InvalidPropOutsideOfContextError","ktFieldErrors","ktFieldId","useDecoration","supports","useInputProps","id","formPath","useTexts","useValue","isEmpty","newFormKey","currentValue","newValue","useValidation","hideValidation","isMissingRequiredField","customValidation","useInheritableProperties","useShared","defaultValue","useNotifyContext","field","useField","sharedProperties","values","useInput","fieldId","inputEl","useForceUpdate","forceUpdateKey","useKtFieldRef","useEmitBlur","fieldTarget","findEventTarget","valueOverride","lastEventTarget","isFieldTargeted","target","ft","onClickOrFocusChange","wasFieldTargetedBefore","onBeforeMount","LABEL_CLICK_DEBOUNCE","SINGLE_MOUSE_CLICK","_sfc_main$1r","inputId","valueVisibility","validationType","showValidation","clickInput","focusInput","debouncedLabelClick","debounce","modifications","modification","isDoubleClick","helpDescription","helpText","label","helpTextSlot","_withDirectives","_component_KtLabel","_hoisted_10","_hoisted_11","_hoisted_12","_vShow","_hoisted_13","_hoisted_14","KtField","KtFieldVue","FIELD_META_BASE_SLOTS","KOTTI_FIELD_CURRENCY_SUPPORTS","VALID_REGEX","toNumber","truncate","decimalPlaces","Big","replaceDecimalSeparator","string","decimalSeparator","toFixedPrecisionString","number","formatCurrencyUserInput","isNegativeValue","strippedSign","withoutDecimalPoint","relocatedDecimalPoint","shouldClear","oldValue","isOldValueZeroOrNull","isNewValueZero","isDeleting","_sfc_main$1q","i18nContext","ktFieldRef","currencyFormat","inputRef","userCursorPositionFromRight","setCursorPosition","position","nextTick","newPosition","forceUpdate","internalStringValue","newFormat","newNumber","newDecimalPlaces","newDecimalSeparator","newCurrencyFormat","startPosition","isValid","nextString","isTypedNumberValid","emitNull","_component_KtField","KtFieldCurrency","KtFieldCurrencyVue","KT_IS_IN_POPOVER","colorScheme","isDarkMode","setColorScheme","useSaveOnBlur","inputString","formatString","date","dayjs","getPosition","node","container","nodeRect","containerRect","scrollTop","easeInOutQuad","t","scrollTopAnimation","to","animated","start","change","duration","startTime","animateScroll","currentTime","timeElapsed","progress","easing","scrollTo","time","row","type","scrollToValue","_sfc_main$1p","rowRef","componentRef","getAdjustedDate","unit","handleClick","getEntries","maxNumber","hideFunction","disabledFunction","range","dateRecord","isSelected","timeUnit","TimeConversion","_sfc_main$1o","FieldTime","VueDatePicker","isInPopover","v","setCleanedValue","cleanValue","sortRange","left","right","leftDate","rightDate","lhs","rhs","blurMode","saveOnBlurLeft","saveOnBlurRight","i18NContext","datePickerRef","internalValue","getTimePreview","datetime","rangeStart","dateRangeStart","dateRangeEnd","_component_VueDatePicker","hours","minutes","seconds","setHours","setMinutes","setSeconds","_component_FieldTime","shortcut","_sfc_main$1n","GenericDateField","_component_GenericDateField","_sfc_main$1m","_sfc_main$1l","_sfc_main$1k","DESIGN_URL","KtFieldDate","KtFieldDateVue","KtFieldDateRange","KtFieldDateRangeVue","KtFieldDateTime","KtFieldDateTimeVue","KtFieldDateTimeRange","KtFieldDateTimeRangeVue","ErrorCodes","KOTTI_FIELD_FILE_UPLOAD_SUPPORTS","formatExtensions","extensions","collapseExtensionsAfter","extension","formatFileSize","fileSize","round","filesize","buildAcceptString","isSelectingMultipleFilesWhenNotAllowed","allowMultiple","selectionSize","isValidFileSize","maxFileSize","isValidFileExtension","fileName","validFileExtensions","fileExtension","validateFile","isValidValue","fileItem","_sfc_main$1j","isError","isFileExplorerOpen","uploadInputRef","informationText","str","emitFiles","files","items","_sfc_main$1i","_sfc_main$1h","_sfc_main$1g","ItemLayout","statusText","_component_ItemLayout","_component_ActionButton","_sfc_main$1f","errorMessage","_sfc_main$1e","bottomSentinelRef","isBottomShadowVisible","isTopShadowVisible","topSentinelRef","observer","entries","_sfc_main$1d","ScrollableContainer","targetRef","popper","shouldOpen","wasOpen","_component_ScrollableContainer","KtModal","KtModalVue","blobToFile","blob","generateImageFileAndUrl","canvasEl","videoEl","videoHeight","videoWidth","resolve","file","photoUrl","isWebRTCSupported","getConnectedCameras","device","requestCamera","cameraId","constraints","stopCameraStream","stream","track","_sfc_main$1c","cameraIndex","cameraList","shouldOpenModal","videoRef","findCameras","startCamera","stopCamera","canvas","_component_KtModal","_sfc_main$1b","errors","_sfc_main$1a","_sfc_main$19","CapturePhoto","Error","ReviewPhoto","reset","err","_component_CapturePhoto","_component_ReviewPhoto","_component_Error","buildFileItem","nanoid","buildFileInfo","isPreUploaded","validation","_sfc_main$18","PreUploadedFileItem","preUploadedFilesIds","setStatus","filesList","fileInfo","showDropArea","_component_DropArea","_component_TakePhoto","_component_FileItem","_component_PreUploadedFileItem","url","KtFieldFileUpload","KtFieldFileUploadVue","KOTTI_FIELD_INLINE_EDIT_SUPPORTS","_sfc_main$17","_sfc_main$16","resizeField","scrollHeight","useAdjustHeight","_inputRef","usePreventConfirm","fieldValidation","_sfc_main$15","ConfirmButton","EditIcon","inputContainerWrapperRef","updateIsEditing","shouldEdit","modifiedField","toRefs","fieldPlaceholder","setFieldValue","preEditingValue","preventConfirm","onConfirm","onMouseDown","isClickOutside","onFocusChange","wasFieldTriggered","isFieldTriggered","sharedProps","_component_ConfirmButton","_component_EditIcon","KtFieldInlineEdit","KtFieldInlineEditVue","KOTTI_FIELD_NUMBER_SUPPORTS","STRINGS_THAT_ARE_TREATED_AS_NULL","LEADING_ZEROES_REGEX","TRAILING_ZEROES_REGEX","isStepMultiple","stepFactor","toString","_sfc_main$14","isDecrementEnabled","isIncrementEnabled","lastValidTypedStringValue","forceUpdateDisplayedValue","showMaximum","lastUserSetCursorPosition","canFallbackToZero","decrementValue","incrementValue","valueWithoutLeadingZeroes","nextNumber","valueWithSupportedDecimalSeparator","newCursorPosition","KtFieldNumber","KtFieldNumberVue","KOTTI_FIELD_PASSWORD_SUPPORTS","_sfc_main$13","fieldType","isValueHidden","KtFieldPassword","KtFieldPasswordVue","KOTTI_FIELD_RADIO_GROUP_SUPPORTS","_sfc_main$12","_sfc_main$11","ToggleRadio","option","_component_ToggleRadio","KtFieldRadioGroup","KtFieldRadioGroupVue","KOTTI_FIELD_SELECT_SUPPORTS","UNGROUPED_KEY","_sfc_main$10","KtTag","KtTagVue","TIPPY_CONTENT_WRAPPER_CLASSES","isTippyContentWrapper","className","useSelectTippy","triggerTargets","dropdownStyles","tippyRef","isDropdownOpen","isDropdownMounted","tippy","setIsDropdownOpen","showTippy","tippys","castArray","_sfc_main$$","_sfc_main$_","optionRef","isHovered","wasHovered","distanceFromParentTop","e","mod","divisor","normalizeId","_sfc_main$Z","FieldSelectOptionsItem","optionsRef","modifiedActions","camelCase","groupLabels","getGroupLabel","groupId","groupedOptions","isLimitReached","mapper","collator","groups","optionsByGroup","groupOptions","a","b","modifiedOptions","hoveredIndex","resetHoveredIndex","itemCount","selectOption","onAction","listener","optionsLength","optionsCount","optionDistanceToOptionsTop","_component_FieldSelectOptionsItem","group","groupIndex","UPDATE_QUERY","_sfc_main$Y","ActionIcon","FieldSelectOptions","rawEmit","isFieldFocused","isFieldHovered","localQuery","selectTippy","deleteQuery","isMounted","queryValue","seenValueLabelMap","isInputVisible","o","showClear","handleClear","hasClear","_component_ActionIcon","_component_KtTag","_component_FieldSelectOptions","_sfc_main$X","GenericSelectField","_component_GenericSelectField","_sfc_main$W","_sfc_main$V","_sfc_main$U","getSlots","KtFieldSingleSelect","KtFieldSingleSelectVue","KtFieldSingleSelectRemote","KtFieldSingleSelectRemoteVue","KtFieldMultiSelect","KtFieldMultiSelectVue","KtFieldMultiSelectRemote","KtFieldMultiSelectRemoteVue","KOTTI_FIELD_TEXT_SUPPORTS","_sfc_main$T","KtFieldText","KtFieldTextVue","KOTTI_FIELD_TEXT_AREA_SUPPORTS","HEIGHT_OFFSET","autoSize","maxHeight","_sfc_main$S","KtFieldTextArea","KtFieldTextAreaVue","KOTTI_FIELD_TOGGLE_SUPPORTS","_sfc_main$R","_sfc_main$Q","_sfc_main$P","ToggleBox","ToggleSwitch","isBox","_sfc_main$O","ToggleInner","showHelpTextAsInnerSuffix","_component_ToggleInner","_sfc_main$N","designs","KtFieldToggle","KtFieldToggleVue","KtFieldToggleGroup","KtFieldToggleGroupVue","_sfc_main$M","_sfc_main$L","progressBarForceRenderKey","isDeletable","size","eventName","s","_component_ProgressBar","ktFileUploadId","_sfc_main$K","UploadedFileItem","interceptedFiles","preUploadedFileIds","uploadedFilesList","fileId","interceptedFileIndex","_component_UploadedFileItem","KtFileUpload","KtFileUploadVue","_sfc_main$J","isYocoIcon","mainClasses","_sfc_main$I","ButtonLink","_component_ButtonLink","getFilterEmptyValue","getFilterInitialOperation","operations","defaultOperation","getFilterInitialState","columnKey","columns","column","columnItem","getOperationOptions","operation","getSearchFilterInitialState","searchColumn","getValueComponent","filterType","isEmptyOperation","filterOperation","createOnSubmitErrorMessage","UnexpectedValidationStateError","_props","ValidationError","validations","ktFormErrors","getValidationSummary","accumulator","_sfc_main$H","currentFieldsWrapper","toAdd","toRemove","valueIsValid","validationSummary","onSubmitData","KtForm","KtFormVue","_sfc_main$G","operationOptions","newFilter","_component_KtForm","_component_KtFieldSingleSelect","_sfc_main$F","FilterRow","currentFiltersKeys","filter","selectedColumnKey","filterKey","updatedFilters","oldFilterKey","updatedFilter","oldFilter","_component_FilterRow","_sfc_main$E","_component_KtFieldText","isNonEmptyString","isValueInEnum","enumObject","areValidOperations","isValidColumn","isValidKey","isValidLabel","_sfc_main$D","FilterActions","FilterList","FilterSearch","listContentRef","listTriggerRef","isAddingFilter","isListVisible","filterListColumns","searchValue","filterListValues","isAddDisabled","isClearAllDisabled","filterLabel","filtersCount","clearAll","setFilters","filters","setSearchFilter","searchFilter","_component_FilterSearch","_component_FilterList","_component_FilterActions","KtFilters","KtFiltersVue","_sfc_main$C","formKey","_sfc_main$B","FormControllerListItem","valuesList","newRow","i","newValuesList","_component_FormControllerListItem","getSharedHeaderFooterScope","KtFormControllerList","KtFormControllerListVue","_sfc_main$A","errorText","setValue","newFormValues","KtFormControllerObject","KtFormControllerObjectVue","InvalidSubmitOutsideContextError","ktFormSubmitErrors","_sfc_main$z","warnings","warning","KtFormSubmit","KtFormSubmitVue","_sfc_main$y","KtHeading","KtHeadingVue","_sfc_main$x","KtI18nContext","KtI18nContextVue","_sfc_main$w","KtLine","KtLineVue","_sfc_main$v","_sfc_main$u","NavbarTooltip","_component_NavbarTooltip","_sfc_main$t","link","linkIndex","_sfc_main","$props","_sfc_main$r","KT_NAVBAR_CONTEXT","NAVBAR_THEME","_sfc_main$q","NavbarLogo","NavbarMenu","NavbarNotification","NavbarQuickLink","mobileMenuRef","navbarRef","newTheme","rootElement","isNarrow","_component_NavbarLogo","_component_NavbarNotification","_component_NavbarMenu","_component_NavbarQuickLink","KtNavbar","KtNavbarVue","validateTotalIsNumber","isNumber","_sfc_main$p","page","ADJACENT_MULTIPLIER","BASE_NUMBER_WIDTH","BASE_OFFSET","MAX_NUMBER_OF_ELEMENTS","PIXEL_MULTIPLIER","_sfc_main$o","pixelMargin","digitWidth","numberWidth","baseElementsWidth","adjacentPagesOffset","getCleanRange","end","maximumPage","cleanStart","cleanEnd","neighborValues","showFirstPage","showLastPage","_sfc_main$n","_sfc_main$m","PaginationExpanded","PaginationFlexible","PaginationFractionated","pageAmount","KtPagination","KtPaginationVue","_sfc_main$l","_sfc_main$k","TRIGGER_MAP","_sfc_main$j","ContextEscapeWrapper","showPopover","formContext","newRef","childrenArray","child","close","setIsShown","open","_component_ContextEscapeWrapper","_component_IconTextItem","_createSlots","_component_KtFieldToggle","KtPopover","KtPopoverVue","KtRow","_sfc_main$i","emitValue","TRANSFER_TYPE","isColumnMoveDataTransfer","_sfc_main$h","SearchInput","_selection","searchQuery","selectedOptions","draggedColumnId","targetColumnId","optionKeyMap","category","selection","optionKey","fromIndex","toIndex","newOrder","extract","_component_KtPopover","_component_SearchInput","getTableContextKey","useProvideTableContext","tableContext","useTableContext","useComputedRef","external","updater","EXPANSION_COLUMN_ID","MULTI_SELECTION_COLUMN_ID","SINGLE_SELECTION_COLUMN_ID","ARRAY_START","paramsSchema","useKottiTable","_params","params","columnHelper","createColumnHelper","columnIdSet","c","rowIdSet","data","getRowBehavior","rowIndex","columnOrder","columnId","selectedRows","expandedRows","rowId","ordering","sorting","hiddenColumns","newSet","newVisibilityState","triggerExpand","rowSelectionAnchorIndex","getMovedColumnOrder","fromColumnId","table","useVueTable","rangeEnd","rows","getCellClasses","cellType","classNames","info","Dashes","getCoreRowModel","getExpandedRowModel","newParams","oldParams","oldColumnSet","newColumnSet","targetIndex","getCellWrapper","getCellWrapComponent","behavior","click","disable","SORT_BEHAVIOR_MAP","SORT_ORDER_COUNT","_sfc_main$g","FlexRender","dropTargetColumnIndex","successfullyDroppedColumnId","cell","columnIndex","elementWidth","elementX","isLeftHalf","_event","header","sortBehavior","currentSortIndex","headerRow","headerIndex","hasDragAndDrop","_component_FlexRender","_toHandlers","_hoisted_15","getEmptyValue","getOptionLabel","formatFilterValue","_value","min","max","isEmptyValue","getReorderedRange","_sfc_main$f","getToday","templateFormat","getLast","_sfc_main$e","_component_KtFieldDateRange","_sfc_main$d","_component_KtFieldMultiSelect","_sfc_main$c","reOrderAndEmitRangeValue","newRange","isEqual","newMax","newMin","_component_KtFieldNumber","_sfc_main$b","_sfc_main$a","BooleanFilter","DateRangeFilter","MultiSelectFilter","NumberRangeFilter","SingleSelectFilter","updatedValueList","_sfc_main$9","separatorRegex","pluralize","translation","count","cases","_sfc_main$8","_sfc_main$7","_sfc_main$6","_component_KtPagination","getStandardTableContextKey","useProvideStandardTableContext","standardTableContext","useStandardTableContext","_sfc_main$5","KtColumnSelector","KtTable","TableFilters","TableGlobalSelection","TablePageSize","TablePagination","TableSearch","appliedFilters","tablePagination","pagination","search","formattedValue","optionValue","_component_TableSearch","_component_TableFilters","_component_KtColumnSelector","_component_TableGlobalSelection","_component_KtTable","_component_TablePageSize","_component_TablePagination","simpleHash","strings","maximumLength","acc","next","charIndex","char","simpleHashedValue","serializableStateSchema","DummyStorageAdapter","localStorageSchema","LocalStorageAdapter","#manualVersion","#storageKey","manualVersion","json","#validateVersionHash","version","#getVersionHash","columnIds","correctHash","givenHash","OPERATION_MAP","KottiTableHookParamsSchema","useKottiStandardTable","filterInfo","rowCount","filtersWithDefaultValue","appliedFilter","pageIndex","_pageSize","pageSize","pageSizeOptions","pageFirstRowIndex","sliceStart","sliceEnd","storageAdapter","tableHook","storageOperationContext","rawState","orderedVisibleColumns","newSelection","newSelectionIds","currentVisibleIds","reorderQueue","nextSortedId","newHiddenSet","newState","oldState","numberFormatter","getDisplay","param","i18n","color","icon","getCustomDisplay","createColumnContext","SORT_MAP","getNumericalSorter","mode","map","valueA","valueB","getDateSorter","getTextSorter","useLocalSort","locallySortedData","rawData","sortingFunctions","sort","clone","TABLE_META","STANDARD_META","KtTableVue","KtStandardTable","KtStandardTableVue","KtColumnSelectorVue","TOAST_CONTEXT","_sfc_main$4","_component_KtBanner","_sfc_main$3","_sfc_main$2","KtToast","KtToastProvider","currentToasts","api","activeToasts","toast","_TransitionGroup","_component_KtToastProvider","_component_KtToast","createDeferred","reject","promise","res","rej","customSchema","durationSchema","metadataSchema","renderedMessageSchema","messageSchema","createToasterOptions","animationFrameId","update","animate","INTERNAL_ABORT","calculateProgress","now","unclamped","createToaster","_options","fifoToasterQueue","subscriber","notifySubscriber","deleteToastFromActiveToasts","toastId","removedToast","deleteToastFromFifoQueue","deleteAndAbortToast","abortController","updateActiveToasts","_dirty","dirty","isRunning","isNowEmpty","show","doneDeferred","signal","baseOptions","deleteId","handler","KtToaster","KtToasterVue","KtToastVue","_sfc_main$1","userMenuRef","isMenuOpen","section","KtUserMenu","KtUserMenuVue","hasHelpText","hasLabel","KtValueLabel","KtValueLabelVue","components"],"mappings":"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"}