@ngneers/controls 0.0.1-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngneers-controls-accordion.mjs +234 -0
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api-ng.mjs +959 -0
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api-resize.mjs +712 -0
- package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api.mjs +347 -0
- package/fesm2022/ngneers-controls-api.mjs.map +1 -0
- package/fesm2022/ngneers-controls-avatar.mjs +77 -0
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-base.mjs +620 -0
- package/fesm2022/ngneers-controls-base.mjs.map +1 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs +100 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button-group.mjs +110 -0
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button.mjs +83 -0
- package/fesm2022/ngneers-controls-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs +74 -0
- package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar.mjs +801 -0
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-checkbox.mjs +63 -0
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
- package/fesm2022/ngneers-controls-chip.mjs +55 -0
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-default-icons.mjs +82 -0
- package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
- package/fesm2022/ngneers-controls-defer.mjs +72 -0
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-dialog.mjs +407 -0
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -0
- package/fesm2022/ngneers-controls-directives.mjs +498 -0
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
- package/fesm2022/ngneers-controls-drawer.mjs +271 -0
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs +127 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-errors.mjs +329 -0
- package/fesm2022/ngneers-controls-errors.mjs.map +1 -0
- package/fesm2022/ngneers-controls-filter.mjs +708 -0
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-hint.mjs +153 -0
- package/fesm2022/ngneers-controls-hint.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-translations-de.mjs +170 -0
- package/fesm2022/ngneers-controls-i18n-translations-de.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-translations-en.mjs +170 -0
- package/fesm2022/ngneers-controls-i18n-translations-en.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n.mjs +57 -0
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon.mjs +195 -0
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -0
- package/fesm2022/ngneers-controls-inplace.mjs +150 -0
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input-field.mjs +165 -0
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input.mjs +72 -0
- package/fesm2022/ngneers-controls-input.mjs.map +1 -0
- package/fesm2022/ngneers-controls-item-view.mjs +473 -0
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
- package/fesm2022/ngneers-controls-list-box.mjs +281 -0
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -0
- package/fesm2022/ngneers-controls-mask-input.mjs +888 -0
- package/fesm2022/ngneers-controls-mask-input.mjs.map +1 -0
- package/fesm2022/ngneers-controls-menu.mjs +371 -0
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
- package/fesm2022/ngneers-controls-message.mjs +30 -0
- package/fesm2022/ngneers-controls-message.mjs.map +1 -0
- package/fesm2022/ngneers-controls-number-input.mjs +366 -0
- package/fesm2022/ngneers-controls-number-input.mjs.map +1 -0
- package/fesm2022/ngneers-controls-paginator.mjs +129 -0
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
- package/fesm2022/ngneers-controls-popover.mjs +215 -0
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -0
- package/fesm2022/ngneers-controls-progress.mjs +98 -0
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
- package/fesm2022/ngneers-controls-radio.mjs +152 -0
- package/fesm2022/ngneers-controls-radio.mjs.map +1 -0
- package/fesm2022/ngneers-controls-roving-focus.mjs +323 -0
- package/fesm2022/ngneers-controls-roving-focus.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroll-shadow.mjs +65 -0
- package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroller.mjs +308 -0
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -0
- package/fesm2022/ngneers-controls-select-button.mjs +58 -0
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-select.mjs +417 -0
- package/fesm2022/ngneers-controls-select.mjs.map +1 -0
- package/fesm2022/ngneers-controls-slider.mjs +167 -0
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
- package/fesm2022/ngneers-controls-snackbar.mjs +414 -0
- package/fesm2022/ngneers-controls-snackbar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-spin-buttons.mjs +126 -0
- package/fesm2022/ngneers-controls-spin-buttons.mjs.map +1 -0
- package/fesm2022/ngneers-controls-spinner.mjs +184 -0
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
- package/fesm2022/ngneers-controls-splitter.mjs +604 -0
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-state.mjs +185 -0
- package/fesm2022/ngneers-controls-state.mjs.map +1 -0
- package/fesm2022/ngneers-controls-switch.mjs +39 -0
- package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
- package/fesm2022/ngneers-controls-table.mjs +2634 -0
- package/fesm2022/ngneers-controls-table.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tabs.mjs +336 -0
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tag.mjs +30 -0
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toast.mjs +350 -0
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs +70 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tooltip.mjs +506 -0
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tree.mjs +599 -0
- package/fesm2022/ngneers-controls-tree.mjs.map +1 -0
- package/fesm2022/ngneers-controls-upload.mjs +377 -0
- package/fesm2022/ngneers-controls-upload.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs +411 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils.mjs +261 -0
- package/fesm2022/ngneers-controls-utils.mjs.map +1 -0
- package/fesm2022/ngneers-controls.mjs +6 -0
- package/fesm2022/ngneers-controls.mjs.map +1 -0
- package/package.json +302 -0
- package/types/ngneers-controls-accordion.d.ts +139 -0
- package/types/ngneers-controls-api-ng.d.ts +364 -0
- package/types/ngneers-controls-api-resize.d.ts +318 -0
- package/types/ngneers-controls-api.d.ts +145 -0
- package/types/ngneers-controls-avatar.d.ts +54 -0
- package/types/ngneers-controls-base.d.ts +277 -0
- package/types/ngneers-controls-breadcrumb.d.ts +272 -0
- package/types/ngneers-controls-button-group.d.ts +46 -0
- package/types/ngneers-controls-button.d.ts +48 -0
- package/types/ngneers-controls-calendar.d.ts +466 -0
- package/types/ngneers-controls-checkbox.d.ts +40 -0
- package/types/ngneers-controls-chip.d.ts +202 -0
- package/types/ngneers-controls-default-icons.d.ts +5 -0
- package/types/ngneers-controls-defer.d.ts +48 -0
- package/types/ngneers-controls-dialog.d.ts +399 -0
- package/types/ngneers-controls-directives.d.ts +171 -0
- package/types/ngneers-controls-drawer.d.ts +308 -0
- package/types/ngneers-controls-edit-inplace.d.ts +263 -0
- package/types/ngneers-controls-errors.d.ts +155 -0
- package/types/ngneers-controls-filter.d.ts +609 -0
- package/types/ngneers-controls-hint.d.ts +88 -0
- package/types/ngneers-controls-i18n-translations-de.d.ts +164 -0
- package/types/ngneers-controls-i18n-translations-en.d.ts +164 -0
- package/types/ngneers-controls-i18n.d.ts +186 -0
- package/types/ngneers-controls-icon.d.ts +68 -0
- package/types/ngneers-controls-inplace.d.ts +98 -0
- package/types/ngneers-controls-input-field.d.ts +248 -0
- package/types/ngneers-controls-input.d.ts +30 -0
- package/types/ngneers-controls-item-view.d.ts +215 -0
- package/types/ngneers-controls-list-box.d.ts +334 -0
- package/types/ngneers-controls-mask-input.d.ts +434 -0
- package/types/ngneers-controls-menu.d.ts +192 -0
- package/types/ngneers-controls-message.d.ts +21 -0
- package/types/ngneers-controls-number-input.d.ts +146 -0
- package/types/ngneers-controls-paginator.d.ts +255 -0
- package/types/ngneers-controls-popover.d.ts +116 -0
- package/types/ngneers-controls-progress.d.ts +49 -0
- package/types/ngneers-controls-radio.d.ts +91 -0
- package/types/ngneers-controls-roving-focus.d.ts +107 -0
- package/types/ngneers-controls-scroll-shadow.d.ts +25 -0
- package/types/ngneers-controls-scroller.d.ts +151 -0
- package/types/ngneers-controls-select-button.d.ts +51 -0
- package/types/ngneers-controls-select.d.ts +409 -0
- package/types/ngneers-controls-slider.d.ts +57 -0
- package/types/ngneers-controls-snackbar.d.ts +330 -0
- package/types/ngneers-controls-spin-buttons.d.ts +69 -0
- package/types/ngneers-controls-spinner.d.ts +117 -0
- package/types/ngneers-controls-splitter.d.ts +465 -0
- package/types/ngneers-controls-state.d.ts +102 -0
- package/types/ngneers-controls-switch.d.ts +18 -0
- package/types/ngneers-controls-table.d.ts +3127 -0
- package/types/ngneers-controls-tabs.d.ts +118 -0
- package/types/ngneers-controls-tag.d.ts +21 -0
- package/types/ngneers-controls-toast.d.ts +298 -0
- package/types/ngneers-controls-toggle-button.d.ts +48 -0
- package/types/ngneers-controls-tooltip.d.ts +189 -0
- package/types/ngneers-controls-tree.d.ts +409 -0
- package/types/ngneers-controls-upload.d.ts +347 -0
- package/types/ngneers-controls-utils-ng.d.ts +129 -0
- package/types/ngneers-controls-utils.d.ts +130 -0
- package/types/ngneers-controls.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-filter.mjs","sources":["../../src/filter/filter.ts","../../src/filter/filter.html","../../src/filter/ngneers-controls-filter.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { executeFilter, getActiveFilterConditions, type NgnItem } from '@ngneers/controls/api';\nimport { NgnPt, provideSelf, ValueControlBase } from '@ngneers/controls/base';\nimport { NgnButton } from '@ngneers/controls/button';\nimport { NgnCalendar } from '@ngneers/controls/calendar';\nimport { I18n } from '@ngneers/controls/i18n';\nimport { NgnIcon } from '@ngneers/controls/icon';\nimport { NgnInput } from '@ngneers/controls/input';\nimport { NgnInputField } from '@ngneers/controls/input-field';\nimport { NgnPopover, type PopoverOptions } from '@ngneers/controls/popover';\nimport { NgnSelect } from '@ngneers/controls/select';\nimport { deepMerge, NgnError } from '@ngneers/controls/utils';\nimport { filterControlTemplate } from '@ngneers/controls-themes/templates/filter';\n\nimport type {\n NgnFilterCondition,\n NgnFilterConditionConfig,\n NgnFilterConfig,\n NgnFilterDataType,\n NgnFilterMode,\n NgnFilterOperatorId,\n} from './types';\nimport type { Anchor } from '@ngneers/controls/api/ng';\n\ntype ConditionInternal = {\n operator: NgnFilterOperatorId;\n rawValue: string | null;\n};\n\ntype OperatorDef = {\n id: NgnFilterOperatorId;\n labelKey: string;\n requiresValue: boolean;\n};\n\nfunction defaultOperatorsForType(dataType: NgnFilterDataType) {\n switch (dataType) {\n case 'string':\n return [\n { id: 'isEqual', labelKey: 'filter_operators_isEqual', requiresValue: true },\n { id: 'isNotEqual', labelKey: 'filter_operators_isNotEqual', requiresValue: true },\n { id: 'contains', labelKey: 'filter_operators_contains', requiresValue: true },\n { id: 'startsWith', labelKey: 'filter_operators_startsWith', requiresValue: true },\n { id: 'endsWith', labelKey: 'filter_operators_endsWith', requiresValue: true },\n { id: 'isEmpty', labelKey: 'filter_operators_isEmpty', requiresValue: false },\n { id: 'isNotEmpty', labelKey: 'filter_operators_isNotEmpty', requiresValue: false },\n ] as const satisfies OperatorDef[];\n case 'number':\n return [\n { id: 'isEqual', labelKey: 'filter_operators_isEqual', requiresValue: true },\n { id: 'isNotEqual', labelKey: 'filter_operators_isNotEqual', requiresValue: true },\n { id: 'greaterThan', labelKey: 'filter_operators_greaterThan', requiresValue: true },\n {\n id: 'greaterThanOrEqual',\n labelKey: 'filter_operators_greaterThanOrEqual',\n requiresValue: true,\n },\n { id: 'lessThan', labelKey: 'filter_operators_lessThan', requiresValue: true },\n {\n id: 'lessThanOrEqual',\n labelKey: 'filter_operators_lessThanOrEqual',\n requiresValue: true,\n },\n ] as const satisfies OperatorDef[];\n case 'date':\n case 'dateTime':\n return [\n { id: 'isEqual', labelKey: 'filter_operators_isEqual', requiresValue: true },\n { id: 'isNotEqual', labelKey: 'filter_operators_isNotEqual', requiresValue: true },\n { id: 'greaterThan', labelKey: 'filter_operators_after', requiresValue: true },\n { id: 'greaterThanOrEqual', labelKey: 'filter_operators_onOrAfter', requiresValue: true },\n { id: 'lessThan', labelKey: 'filter_operators_before', requiresValue: true },\n { id: 'lessThanOrEqual', labelKey: 'filter_operators_onOrBefore', requiresValue: true },\n ] as const satisfies OperatorDef[];\n case 'boolean':\n return [\n { id: 'isTrue', labelKey: 'filter_operators_isTrue', requiresValue: false },\n { id: 'isFalse', labelKey: 'filter_operators_isFalse', requiresValue: false },\n ] as const satisfies OperatorDef[];\n case 'custom':\n return [\n { id: 'custom', labelKey: 'filter_operators_custom', requiresValue: true },\n ] as const satisfies OperatorDef[];\n case 'list':\n return [\n { id: 'in', labelKey: 'filter_operators_in', requiresValue: true },\n ] as const satisfies OperatorDef[];\n }\n}\n\n/**\n * @category control\n */\n@Component({\n selector: 'ngn-filter',\n templateUrl: './filter.html',\n imports: [\n NgnPt,\n NgTemplateOutlet,\n NgnCalendar,\n NgnInputField,\n NgnInput,\n NgnSelect,\n NgnPopover,\n NgnIcon,\n NgnButton,\n ],\n providers: [provideSelf(NgnFilter)],\n host: {\n style: 'display: block;',\n },\n})\nexport class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilterConfig | null> {\n protected readonly theme = this.injectThemeTemplate(filterControlTemplate, 'root');\n private readonly _i18n = inject(I18n);\n protected readonly i18n = this._i18n.translations;\n protected readonly unsafeI18n = this._i18n.unsafe.bind(this._i18n);\n private readonly _destroyRef = inject(DestroyRef);\n\n /**\n * Data to filter.\n * @default []\n */\n public readonly data = input<readonly T[]>([]);\n /**\n * Datatype of the values in {@link data}. Determines the available operators and editor UI.\n * @default 'string'\n */\n public readonly dataType = input<NgnFilterDataType>('string');\n /**\n * Allows multiple conditions and a match mode (any/all).\n * @default false\n */\n public readonly allowMultiple = input(false, { transform: booleanAttribute });\n\n /**\n * Options for `dataType=\"list\"`.\n * When provided, they are used as-is. When `null` or `undefined`, options are derived from {@link data}.\n * @default undefined\n */\n public readonly listOptions = input<readonly string[] | null | undefined>();\n\n /**\n * Controls how the filter is rendered.\n * - `inline`: renders the filter rows directly\n * - `input`: renders an input-like trigger that opens a popover (default)\n * - `headless`: renders only the popover and can be opened programmatically via {@link show}\n * @default 'input'\n */\n public readonly mode = input<NgnFilterMode>('input');\n\n /**\n * Popover anchor used only in `headless` mode.\n * In `input` mode the anchor is the internal input-field.\n * @default null\n */\n public readonly anchor = input<Anchor | null>(null);\n\n /**\n * When true, the component will filter {@link data} locally and emit the filtered result\n * via {@link filterResultChange}. When false, only the filter configuration is emitted\n * (useful for server-side filtering).\n * @default true\n */\n public readonly filterLocally = input(true, { transform: booleanAttribute });\n\n /**\n * When true, filters apply automatically as the user types/selects.\n * When false, the user must click \"Apply\" to commit the filter.\n * @default true\n */\n public readonly autoApply = input(true, { transform: booleanAttribute });\n\n /**\n * Debounce time in milliseconds for auto-apply mode.\n * Only relevant when {@link autoApply} is `true`.\n * @default 300\n */\n public readonly autoApplyDebounce = input(300, { transform: numberAttribute });\n\n /**\n * Options for the popover (when {@link mode} is not `inline`).\n * @default {}\n */\n public readonly popoverOptions = input<PopoverOptions>({});\n protected readonly appliedPopoverOptions = computed(() =>\n deepMerge(\n <PopoverOptions>{\n sizeConstraints: {\n width: '360px',\n minHeight: '120px',\n maxHeight: '500px',\n },\n placement: 'bottom-start',\n },\n this.popoverOptions()\n )\n );\n\n /** Emits whenever the filter configuration changes. */\n public readonly filterChange = output<NgnFilterConfig | null>();\n /** Emits the filtered data whenever local filtering is enabled. */\n public readonly filterResultChange = output<readonly T[]>();\n\n private readonly _popover = viewChild(NgnPopover);\n\n /**\n * Internal working config that the template binds to.\n * In auto-apply mode, this syncs to value() via debounce.\n * In manual mode, only apply() commits this to value().\n */\n protected readonly workingConfig = signal<NgnFilterConfig | null>(null);\n\n /** Snapshot of value() taken when popover opens in manual mode, for cancel to restore. */\n private _snapshotConfig: NgnFilterConfig | null = null;\n\n /** Debounce timer handle for auto-apply. */\n private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Whether there is an active filter applied. */\n protected readonly hasActiveFilter = computed(() => {\n const cfg = this.value();\n if (!cfg) return false;\n if (cfg.dataType === 'list') {\n const raw = cfg.conditions[0]?.rawValue;\n if (!raw) return false;\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) && parsed.length > 0;\n } catch {\n return false;\n }\n }\n return this.activeConditionConfigs().length > 0;\n });\n\n private createCondition(operator: NgnFilterOperatorId): ConditionInternal {\n return { operator, rawValue: null };\n }\n\n private defaultConfig(): NgnFilterConfig {\n if (this.dataType() === 'list') {\n return {\n dataType: 'list',\n matchMode: 'all',\n conditions: <readonly NgnFilterConditionConfig[]>[{ operator: 'in', rawValue: null }],\n };\n }\n\n const firstOp = this.operatorDefs()[0]?.id ?? 'isEqual';\n return {\n dataType: this.dataType(),\n matchMode: 'all',\n conditions: <readonly NgnFilterConditionConfig[]>[\n {\n operator: firstOp,\n rawValue: null,\n },\n ],\n };\n }\n\n /**\n * Config used for UI rendering.\n * Always reads from workingConfig (the live editing state).\n * Falls back to a default config when null.\n */\n protected readonly templateConfig = computed<NgnFilterConfig>(\n () => (this.workingConfig() ?? this.defaultConfig()) as NgnFilterConfig\n );\n\n protected readonly templateListSelection = computed<readonly string[]>(() => {\n const cfg = this.templateConfig();\n if (cfg.dataType !== 'list') {\n return [];\n }\n const raw = cfg.conditions[0]?.rawValue;\n if (!raw) {\n return [];\n }\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed.map(v => String(v)) : [];\n } catch {\n return [];\n }\n });\n\n protected readonly operatorDefs = computed(() => {\n const dt = this.dataType();\n const defs = defaultOperatorsForType(dt);\n if (dt === 'custom' && defs.length === 1 && defs[0]?.id === 'custom') {\n return defs;\n }\n return defs;\n });\n\n protected readonly operatorOptions = computed(() => {\n const options = this.operatorDefs().map(\n op =>\n <NgnItem>{\n label: this.i18n[op.labelKey],\n value: op.id,\n testId: `filter-operator-${op.id}`,\n }\n );\n return options;\n });\n\n protected readonly autoListOptions = computed<readonly NgnItem[]>(() => {\n const seen = new Set<string>();\n const items: Array<NgnItem> = [];\n\n for (const raw of this.data()) {\n const s = String(raw);\n if (seen.has(s)) {\n continue;\n }\n seen.add(s);\n items.push({ label: s, value: s, testId: `filter-list-${s}` });\n }\n\n return items.sort((a, b) => {\n if (typeof a.label === 'string' && typeof b.label === 'string') {\n return a.label.localeCompare(b.label);\n }\n if (typeof a.label === 'function' && typeof b.label === 'function') {\n return a.label().localeCompare(b.label());\n }\n return 0;\n });\n });\n\n protected readonly resolvedListOptions = computed<readonly NgnItem[]>(() => {\n const listOptions = this.listOptions();\n return listOptions\n ? listOptions.map(\n (opt): NgnItem => ({\n label: opt,\n value: opt,\n testId: `filter-list-${opt}`,\n })\n )\n : this.autoListOptions();\n });\n\n protected readonly matchModeOptions: readonly NgnItem[] = [\n { label: this.i18n['filter_match_all'], value: 'all', testId: 'filter-match-all' },\n { label: this.i18n['filter_match_any'], value: 'any', testId: 'filter-match-any' },\n ];\n\n protected readonly inputType = computed(() => {\n switch (this.dataType()) {\n case 'number':\n return 'number';\n case 'date':\n return 'date';\n case 'dateTime':\n return 'datetime-local';\n default:\n return 'text';\n }\n });\n\n protected readonly isDateType = computed(\n () => this.dataType() === 'date' || this.dataType() === 'dateTime'\n );\n\n protected readonly isShowTime = computed(() => this.dataType() === 'dateTime');\n\n /** Parse a rawValue string to a Date for the calendar component. */\n protected parseRawDate(rawValue: string | null): Date | null {\n if (!rawValue) return null;\n const d = new Date(rawValue);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n /** Convert a Date from the calendar to a rawValue string. */\n protected dateToRaw(date: Date | null): string | null {\n if (!date || Number.isNaN(date.getTime())) return null;\n if (this.dataType() === 'dateTime') {\n // Format as YYYY-MM-DDTHH:mm for datetime-local compatibility\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;\n }\n // Format as YYYY-MM-DD for date\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n }\n\n protected readonly summaryText = computed(() => {\n const currentValue = this.value();\n if (!currentValue) {\n return this.i18n['filter_noFilter']();\n }\n\n if (currentValue.dataType === 'list') {\n const selected = this.templateListSelection();\n if (selected.length === 0) {\n return this.i18n['filter_noFilter']();\n }\n if (selected.length === 1) {\n return selected[0] ?? this.i18n['filter_noFilter']();\n }\n return `${selected.length} ${this.i18n['filter_selected']()}`;\n }\n\n const active = this.activeConditionConfigs();\n if (active.length === 0) {\n return this.i18n['filter_noFilter']();\n }\n if (active.length === 1) {\n const c = active[0];\n\n const def = this.operatorDefs().find(d => d.id === c?.operator);\n const operatorLabel = def ? this.i18n._unsafe[def.labelKey]?.() : c?.operator;\n return c?.rawValue == null || c?.rawValue === ''\n ? operatorLabel\n : `${operatorLabel} \"${c.rawValue}\"`;\n }\n\n const matchLabel =\n currentValue.matchMode === 'all'\n ? this.i18n['filter_match_all']()\n : this.i18n['filter_match_any']();\n return `${active.length} ${this.i18n['filter_conditions']()} (${matchLabel})`;\n });\n\n protected readonly activeConditionConfigs = computed<readonly NgnFilterConditionConfig[]>(() => {\n const cfg = this.value();\n if (!cfg || cfg.dataType === 'list') {\n return [];\n }\n const defs = this.operatorDefs();\n const defById = new Map(defs.map(d => [d.id, d] as const));\n\n return cfg.conditions.filter(c => {\n const def = defById.get(c.operator);\n const requiresValue = def?.requiresValue ?? true;\n return !requiresValue || (c.rawValue != null && c.rawValue !== '');\n });\n });\n\n protected readonly activeConditions = computed<readonly NgnFilterCondition[]>(() => {\n const cfg = this.value();\n return cfg ? getActiveFilterConditions(cfg) : [];\n });\n\n protected readonly filteredData = computed<readonly T[]>(() => {\n if (!this.filterLocally()) {\n return this.data();\n }\n const cfg = this.value();\n if (!cfg) {\n return this.data();\n }\n return executeFilter(this.data(), cfg);\n });\n\n /** The current match mode label for the condition divider */\n protected readonly matchModeLabel = computed(() => {\n const cfg = this.templateConfig();\n return cfg.matchMode === 'all'\n ? this.i18n['filter_match_and']()\n : this.i18n['filter_match_or']();\n });\n\n constructor() {\n super();\n\n // Initialize workingConfig from initial value.\n this.workingConfig.set(this.value());\n\n effect(() => {\n this.filterChange.emit(this.value() ?? null);\n });\n\n effect(() => {\n if (!this.filterLocally()) {\n return;\n }\n this.filterResultChange.emit(this.filteredData());\n });\n\n effect(() => {\n if (!this.allowMultiple()) {\n const cfg = this.value();\n if (!cfg || cfg.dataType === 'list') {\n return;\n }\n if (cfg.conditions.length <= 1 && cfg.matchMode === 'all') {\n return;\n }\n this.value.set({\n ...cfg,\n matchMode: 'all',\n conditions: cfg.conditions.slice(0, 1),\n });\n }\n });\n\n effect(() => {\n const defs = this.operatorDefs();\n const first = defs[0];\n if (!first) {\n throw new NgnError('filter', 'No operators available.');\n }\n const defIds = new Set(defs.map(d => d.id));\n\n const normalizeConditions = (\n conditions: readonly ConditionInternal[]\n ): readonly ConditionInternal[] => {\n let changed = false;\n const next = conditions.map(c => {\n if (defIds.has(c.operator)) {\n return c;\n }\n changed = true;\n return { ...c, operator: first.id, rawValue: null };\n });\n return changed ? next : conditions;\n };\n\n const cfg = this.value();\n if (!cfg || cfg.dataType === 'list') {\n return;\n }\n\n const current = cfg.conditions;\n const next = normalizeConditions(current);\n if (next !== current) {\n this.value.set({ ...cfg, conditions: next });\n }\n });\n\n this._destroyRef.onDestroy(() => {\n if (this._debounceTimer != null) {\n clearTimeout(this._debounceTimer);\n }\n });\n }\n\n /**\n * Commits the working config to the actual value, with optional debounce.\n * Called after every working config change.\n */\n private commitWorkingConfig(): void {\n if (this.autoApply()) {\n if (this._debounceTimer != null) {\n clearTimeout(this._debounceTimer);\n }\n const debounceMs = this.autoApplyDebounce();\n if (debounceMs > 0) {\n this._debounceTimer = setTimeout(() => {\n this._debounceTimer = null;\n this.value.set(this.workingConfig());\n }, debounceMs);\n } else {\n this.value.set(this.workingConfig());\n }\n }\n // In manual mode, do nothing — wait for apply()\n }\n\n /** Updates the working config and optionally auto-applies. */\n private updateWorkingConfig(config: NgnFilterConfig | null): void {\n this.workingConfig.set(config);\n this.commitWorkingConfig();\n }\n\n protected toggleMatchMode(): void {\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list' || !this.allowMultiple()) {\n return;\n }\n const newMode = cfg.matchMode === 'all' ? 'any' : 'all';\n this.updateWorkingConfig({\n ...cfg,\n matchMode: newMode,\n });\n }\n\n protected setMatchMode(value: unknown): void {\n if (value === 'all' || value === 'any') {\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list') {\n return;\n }\n this.updateWorkingConfig({\n ...cfg,\n matchMode: this.allowMultiple() ? value : 'all',\n });\n }\n }\n\n protected operatorRequiresValue(operator: NgnFilterOperatorId): boolean {\n const def = this.operatorDefs().find(d => d.id === operator);\n return def?.requiresValue ?? true;\n }\n\n protected setOperator(index: number, operator: NgnFilterOperatorId | null): void {\n if (!operator) {\n return;\n }\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list') {\n return;\n }\n const next = cfg.conditions.slice();\n const existing = next[index];\n if (!existing) {\n return;\n }\n next[index] = {\n ...existing,\n operator,\n rawValue: this.operatorRequiresValue(operator) ? existing.rawValue : null,\n };\n this.updateWorkingConfig({\n ...cfg,\n matchMode: this.allowMultiple() ? cfg.matchMode : 'all',\n conditions: next,\n });\n }\n\n protected setRawValue(index: number, rawValue: string | null): void {\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list') {\n return;\n }\n const next = cfg.conditions.slice();\n const existing = next[index];\n if (!existing) {\n return;\n }\n next[index] = { ...existing, rawValue };\n this.updateWorkingConfig({\n ...cfg,\n matchMode: this.allowMultiple() ? cfg.matchMode : 'all',\n conditions: next,\n });\n }\n\n protected setDateValue(index: number, date: Date | null): void {\n this.setRawValue(index, this.dateToRaw(date));\n }\n\n protected addCondition(): void {\n if (!this.allowMultiple()) {\n return;\n }\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list') {\n return;\n }\n const firstOp = this.operatorDefs()[0]?.id ?? 'isEqual';\n this.updateWorkingConfig({\n ...cfg,\n matchMode: cfg.matchMode,\n conditions: [...cfg.conditions, this.createCondition(firstOp)],\n });\n }\n\n protected removeCondition(index: number): void {\n if (!this.allowMultiple()) {\n return;\n }\n const cfg = this.templateConfig();\n if (cfg.dataType === 'list') {\n return;\n }\n const current = cfg.conditions;\n if (current.length <= 1) {\n return;\n }\n const next = current.slice();\n next.splice(index, 1);\n this.updateWorkingConfig({\n ...cfg,\n matchMode: cfg.matchMode,\n conditions: next,\n });\n }\n\n protected setListSelection(value: unknown): void {\n const arr = Array.isArray(value)\n ? value.map(v => String(v))\n : value == null\n ? []\n : [String(value)];\n\n this.updateWorkingConfig({\n dataType: 'list',\n matchMode: 'all',\n conditions: <readonly NgnFilterConditionConfig[]>[\n {\n operator: 'in',\n rawValue: arr.length > 0 ? JSON.stringify(arr) : null,\n },\n ],\n });\n }\n\n /** Applies the working config (manual mode). */\n protected apply(): void {\n const cfg = this.workingConfig();\n this.value.set(cfg);\n // Update snapshot so next cancel restores to this applied state\n this._snapshotConfig = cfg ? JSON.parse(JSON.stringify(cfg)) : null;\n if (this.mode() !== 'inline') {\n this.hide();\n }\n }\n\n /** Cancels changes and restores the snapshot (manual mode). */\n protected cancelChanges(): void {\n // Clear any pending debounce\n if (this._debounceTimer != null) {\n clearTimeout(this._debounceTimer);\n this._debounceTimer = null;\n }\n this.workingConfig.set(\n this._snapshotConfig ? JSON.parse(JSON.stringify(this._snapshotConfig)) : null\n );\n if (this.mode() !== 'inline') {\n this.hide();\n }\n }\n\n protected clear(): void {\n this.updateWorkingConfig(null);\n if (!this.autoApply()) {\n // In manual mode, also commit clear immediately\n this.value.set(null);\n this._snapshotConfig = null;\n }\n if (this.mode() !== 'inline') {\n this.hide();\n }\n }\n\n /** Shows the filter popup. Only works when {@link mode} is not `inline`. */\n public show(): void {\n if (this.mode() === 'inline') {\n throw new NgnError('filter', 'Cannot open an inline filter.');\n }\n if (this.mode() === 'headless' && !this.anchor()) {\n throw new NgnError('filter', 'Headless mode requires an [anchor] input.');\n }\n const popover = this._popover();\n if (!popover) {\n throw new NgnError('filter', 'Popover is not available.');\n }\n\n // Snapshot current value for cancel\n const val = this.value();\n this._snapshotConfig = val ? JSON.parse(JSON.stringify(val)) : null;\n // Reset working config to current value\n this.workingConfig.set(val);\n\n popover.show();\n }\n\n /** Hides the filter popup. Only works when {@link mode} is not `inline`. */\n public hide(): void {\n if (this.mode() === 'inline') {\n throw new NgnError('filter', 'Cannot close an inline filter.');\n }\n this._popover()?.hide();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n if (this.mode() !== 'inline') {\n this._popover()?.toggle();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n}\n","<ng-template #rowsTemplate>\n <div [ptInt]=\"this\" [ptClass]=\"'rows'\">\n @if (dataType() === 'list') {\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" data-testid=\"filter-row-list\">\n <ngn-input-field\n [ptInt]=\"this\"\n [ptDep]=\"'value'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n >\n <ngn-select\n [ptInt]=\"this\"\n [ptDep]=\"'list-select'\"\n [multiple]=\"true\"\n [options]=\"resolvedListOptions()\"\n [value]=\"$any(templateListSelection())\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"setListSelection($event)\"\n />\n </ngn-input-field>\n </div>\n } @else {\n @for (c of templateConfig().conditions; track $index; let i = $index; let last = $last) {\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" [attr.data-testid]=\"'filter-row-' + i\">\n <ngn-input-field\n [ptInt]=\"this\"\n [ptDep]=\"operatorRequiresValue(c.operator) ? 'operator' : 'value'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n >\n <ngn-select\n [ptInt]=\"this\"\n [ptDep]=\"'operator-select'\"\n [options]=\"operatorOptions()\"\n [label]=\"i18n['filter_operator']()\"\n [value]=\"c.operator\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"setOperator(i, $event)\"\n />\n </ngn-input-field>\n @if (operatorRequiresValue(c.operator)) {\n @if (isDateType()) {\n <ngn-input-field\n [ptInt]=\"this\"\n [ptDep]=\"'value'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n >\n <ngn-calendar\n [ptInt]=\"this\"\n [ptDep]=\"'calendar'\"\n [showTime]=\"isShowTime()\"\n [value]=\"parseRawDate(c.rawValue)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"setDateValue(i, $event)\"\n />\n </ngn-input-field>\n } @else {\n <ngn-input-field\n [ptInt]=\"this\"\n [ptDep]=\"'value'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n >\n <input\n ngnInput\n [ptInt]=\"this\"\n [ptDep]=\"'input'\"\n [attr.aria-label]=\"i18n['filter_value']()\"\n [type]=\"inputType()\"\n [value]=\"c.rawValue || ''\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (valueChange)=\"setRawValue(i, $event)\"\n />\n </ngn-input-field>\n }\n }\n\n @if (allowMultiple() && templateConfig().conditions.length > 1) {\n <button\n type=\"button\"\n ngnButton\n kind=\"icon\"\n [ptInt]=\"this\"\n [ptDep]=\"'remove-btn'\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"i18n['filter_removeCondition']() + ' ' + (i + 1)\"\n data-testid=\"filter-remove-condition\"\n >\n <ngn-icon defaultIcon=\"filter-remove\" />\n </button>\n }\n </div>\n\n @if (allowMultiple() && !last && templateConfig().conditions.length > 1) {\n <div\n [ptInt]=\"this\"\n [ptClass]=\"'condition-divider'\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"!disabled() && !readonly() && toggleMatchMode()\"\n (keydown.enter)=\"!disabled() && !readonly() && toggleMatchMode()\"\n (keydown.space)=\"\n !disabled() && !readonly() && toggleMatchMode(); $event.preventDefault()\n \"\n [attr.aria-disabled]=\"disabled() || readonly()\"\n data-testid=\"filter-match-mode\"\n >\n {{ matchModeLabel() }}\n </div>\n }\n }\n }\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n @if (!disabled() && !readonly()) {\n <div [ptInt]=\"this\" [ptClass]=\"'footer'\">\n @if (dataType() !== 'list' && allowMultiple()) {\n <button\n type=\"button\"\n ngnButton\n kind=\"secondary\"\n [ptInt]=\"this\"\n [ptDep]=\"'add-button'\"\n (click)=\"addCondition()\"\n data-testid=\"filter-add-rule\"\n >\n <span aria-hidden=\"true\">+</span>\n {{ i18n['filter_addCondition']() }}\n </button>\n }\n <div [ptInt]=\"this\" [ptClass]=\"'footer-actions'\">\n @if (!autoApply()) {\n <button\n type=\"button\"\n ngnButton\n kind=\"secondary\"\n [ptInt]=\"this\"\n [ptDep]=\"'cancel-button'\"\n (click)=\"cancelChanges()\"\n data-testid=\"filter-cancel\"\n >\n {{ i18n['filter_cancel']() }}\n </button>\n <button\n type=\"button\"\n ngnButton\n kind=\"primary\"\n [ptInt]=\"this\"\n [ptDep]=\"'apply-button'\"\n (click)=\"apply()\"\n data-testid=\"filter-apply\"\n >\n {{ i18n['filter_apply']() }}\n </button>\n } @else {\n <button\n type=\"button\"\n ngnButton\n kind=\"secondary\"\n [ptInt]=\"this\"\n [ptDep]=\"'clear-button'\"\n (click)=\"clear()\"\n data-testid=\"filter-clear\"\n >\n {{ i18n['filter_clear']() }}\n </button>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #popoverTemplate let-anchor=\"anchor\">\n <ngn-popover\n #popover\n [ptInt]=\"this\"\n [ptDep]=\"'popover'\"\n [options]=\"appliedPopoverOptions()\"\n [anchor]=\"anchor\"\n [hasShrinkableContent]=\"true\"\n (keydown)=\"onKeyDown($event)\"\n [id]=\"inputId() + '_popover'\"\n >\n <ng-template #lazy>\n <div [ptInt]=\"this\" [ptClass]=\"'popover-content'\">\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n </ng-template>\n </ngn-popover>\n</ng-template>\n\n@if (mode() === 'inline') {\n <div [ptInt]=\"this\" [ptClass]=\"'inline'\">\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n} @else if (mode() === 'input') {\n <ngn-input-field\n [ptInt]=\"this\"\n [ptDep]=\"'input-field'\"\n (click)=\"!disabled() && !readonly() && show()\"\n (keydown)=\"onKeyDown($event)\"\n #field\n [label]=\"label()\"\n [inputId]=\"inputId()\"\n [invalid]=\"invalid()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n >\n <div role=\"button\" [ptInt]=\"this\" [ptClass]=\"'summary'\">{{ summaryText() }}</div>\n <ngn-icon [ptInt]=\"this\" [ptClass]=\"'icon'\" defaultIcon=\"search\" />\n </ngn-input-field>\n\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate\"\n [ngTemplateOutletContext]=\"{ anchor: field.element.nativeElement }\"\n />\n} @else {\n @if (anchor()) {\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate\"\n [ngTemplateOutletContext]=\"{ anchor: anchor() }\"\n />\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, booleanAttribute, signal, computed, contentChild, effect, TemplateRef, Component } from '@angular/core';
|
|
4
|
+
import { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';
|
|
5
|
+
import { NgnIcon } from '@ngneers/controls/icon';
|
|
6
|
+
import { NgnTooltip } from '@ngneers/controls/tooltip';
|
|
7
|
+
import { generateElementId } from '@ngneers/controls/utils-ng';
|
|
8
|
+
import { hintControlTemplate } from '@ngneers/controls-themes/templates/hint';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A small sub-text control for controls — helper text that explains a value,
|
|
12
|
+
* or a validation / warning message. The semantic intent is carried by
|
|
13
|
+
* {@link kind} (`default | info | success | warning | error`).
|
|
14
|
+
*
|
|
15
|
+
* @category control
|
|
16
|
+
*/
|
|
17
|
+
class NgnHint extends NgnBase {
|
|
18
|
+
theme = this.injectThemeTemplate(hintControlTemplate, 'root');
|
|
19
|
+
/**
|
|
20
|
+
* A stable id placed on the host element so a related control can reference
|
|
21
|
+
* this hint via `aria-describedby`. Defaults to a generated id.
|
|
22
|
+
*/
|
|
23
|
+
controlId = input(generateElementId(), /* @ts-ignore */
|
|
24
|
+
...(ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []));
|
|
25
|
+
/**
|
|
26
|
+
* Set an icon to display before the text. When omitted, a default icon is
|
|
27
|
+
* derived from the current {@link kind} (e.g. `error` shows an alert icon).
|
|
28
|
+
* The neutral `default` kind shows no icon unless one is set explicitly.
|
|
29
|
+
* @default undefined
|
|
30
|
+
*/
|
|
31
|
+
icon = input(/* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
33
|
+
/**
|
|
34
|
+
* Whether to only render the icon and show the content as tooltip.
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
iconOnly = input(false, { ...(ngDevMode ? { debugName: "iconOnly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
38
|
+
/**
|
|
39
|
+
* The hint text. Can also be a `TemplateRef` for custom rendering, or set via
|
|
40
|
+
* an `<ng-template #content>` content child. Projected content (`<ng-content>`)
|
|
41
|
+
* is used as a fallback when neither is provided.
|
|
42
|
+
* @default null
|
|
43
|
+
*/
|
|
44
|
+
content = input(null, /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/**
|
|
47
|
+
* Validation state supplied by helpers such as ngnErrors.
|
|
48
|
+
* @default null
|
|
49
|
+
*/
|
|
50
|
+
validationState = input(null, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "validationState" }] : /* istanbul ignore next */ []));
|
|
52
|
+
_bridgedValidationState = signal(null, /* @ts-ignore */
|
|
53
|
+
...(ngDevMode ? [{ debugName: "_bridgedValidationState" }] : /* istanbul ignore next */ []));
|
|
54
|
+
_activeValidationState = computed(() => this._bridgedValidationState() ?? this.validationState(), /* @ts-ignore */
|
|
55
|
+
...(ngDevMode ? [{ debugName: "_activeValidationState" }] : /* istanbul ignore next */ []));
|
|
56
|
+
_userContentTemplate = contentChild('content', /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : /* istanbul ignore next */ []));
|
|
58
|
+
hasIconOnlyTooltipContent = computed(() => {
|
|
59
|
+
const validation = this._activeValidationState();
|
|
60
|
+
if (validation?.visible && validation.message) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return Boolean(this.content() || this._userContentTemplate());
|
|
64
|
+
}, /* @ts-ignore */
|
|
65
|
+
...(ngDevMode ? [{ debugName: "hasIconOnlyTooltipContent" }] : /* istanbul ignore next */ []));
|
|
66
|
+
/**
|
|
67
|
+
* Bridge validation state from a companion directive such as ngnErrors.
|
|
68
|
+
* @category methods
|
|
69
|
+
*/
|
|
70
|
+
setValidationState(state) {
|
|
71
|
+
this._bridgedValidationState.set(state);
|
|
72
|
+
}
|
|
73
|
+
constructor() {
|
|
74
|
+
super();
|
|
75
|
+
effect(() => {
|
|
76
|
+
const state = this._activeValidationState();
|
|
77
|
+
let kind;
|
|
78
|
+
if (state?.visible && !this.iconOnly()) {
|
|
79
|
+
kind = state.pending ? 'info' : 'error';
|
|
80
|
+
}
|
|
81
|
+
this.setKindOverride(kind);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The resolved template to render, if any. A content-child `<ng-template #content>`
|
|
86
|
+
* takes precedence over a `TemplateRef` passed via the {@link content} input.
|
|
87
|
+
*/
|
|
88
|
+
contentTemplate = computed(() => {
|
|
89
|
+
if (this._activeValidationState()?.visible) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
const projected = this._userContentTemplate();
|
|
93
|
+
if (projected) {
|
|
94
|
+
return projected;
|
|
95
|
+
}
|
|
96
|
+
const value = this.content();
|
|
97
|
+
return value instanceof TemplateRef ? value : null;
|
|
98
|
+
}, /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "contentTemplate" }] : /* istanbul ignore next */ []));
|
|
100
|
+
/**
|
|
101
|
+
* The resolved string content, if the {@link content} input is a plain string.
|
|
102
|
+
*/
|
|
103
|
+
contentString = computed(() => {
|
|
104
|
+
const validation = this._activeValidationState();
|
|
105
|
+
if (validation?.visible) {
|
|
106
|
+
return validation.message;
|
|
107
|
+
}
|
|
108
|
+
const value = this.content();
|
|
109
|
+
return typeof value === 'string' ? value : null;
|
|
110
|
+
}, /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "contentString" }] : /* istanbul ignore next */ []));
|
|
112
|
+
/**
|
|
113
|
+
* The icon registry key of the default icon for the current kind, or
|
|
114
|
+
* `undefined` for the neutral `default` kind.
|
|
115
|
+
*/
|
|
116
|
+
defaultIconKey = computed(() => {
|
|
117
|
+
const validation = this._activeValidationState();
|
|
118
|
+
if (validation?.visible) {
|
|
119
|
+
return validation.pending ? 'hint-info' : 'hint-error';
|
|
120
|
+
}
|
|
121
|
+
if (validation && this.iconOnly() && !this.hasIconOnlyTooltipContent()) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
switch (this.appliedKind()) {
|
|
125
|
+
case 'info':
|
|
126
|
+
return 'hint-info';
|
|
127
|
+
case 'success':
|
|
128
|
+
return 'hint-success';
|
|
129
|
+
case 'warning':
|
|
130
|
+
return 'hint-warning';
|
|
131
|
+
case 'error':
|
|
132
|
+
return 'hint-error';
|
|
133
|
+
default:
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}, /* @ts-ignore */
|
|
137
|
+
...(ngDevMode ? [{ debugName: "defaultIconKey" }] : /* istanbul ignore next */ []));
|
|
138
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NgnHint, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: NgnHint, isStandalone: true, selector: "ngn-hint", inputs: { controlId: { classPropertyName: "controlId", publicName: "controlId", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, validationState: { classPropertyName: "validationState", publicName: "validationState", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "controlId()" } }, providers: [provideSelf(NgnHint)], queries: [{ propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #renderedContent>\n @if (contentTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n } @else if (contentString(); as text) {\n {{ text }}\n } @else {\n <ng-content />\n }\n</ng-template>\n\n@if (icon() || defaultIconKey()) {\n <ngn-icon\n [ptInt]=\"this\"\n [ptClass]=\"'icon'\"\n [icon]=\"icon()\"\n [defaultIcon]=\"defaultIconKey()\"\n [ngnTooltip]=\"iconOnly() ? renderedContent : null\"\n [ngnTooltipAutoAriaMode]=\"'label'\"\n />\n}\n@if (!iconOnly()) {\n <ng-container [ngTemplateOutlet]=\"renderedContent\" />\n}\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass", "ptDep"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnTooltip, selector: "[ngnTooltip]", inputs: ["ngnTooltip", "ngnTooltipShowOnlyIfTruncated", "ngnTooltipSize", "ngnTooltipOptions", "ngnTooltipPlacement", "ngnTooltipOffset", "ngnTooltipShowDelay", "ngnTooltipHideDelay", "ngnTooltipShowArrow", "ngnTooltipShowOnHover", "ngnTooltipShowOnFocus", "ngnTooltipHideOnTooltipHover", "ngnTooltipHideOnClick", "ngnTooltipAutoAriaMode"], exportAs: ["ngnTooltip"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
140
|
+
}
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: NgnHint, decorators: [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{ selector: 'ngn-hint', imports: [NgnPt, NgnIcon, NgnTooltip, NgTemplateOutlet], providers: [provideSelf(NgnHint)], host: {
|
|
144
|
+
'[id]': 'controlId()',
|
|
145
|
+
}, template: "<ng-template #renderedContent>\n @if (contentTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n } @else if (contentString(); as text) {\n {{ text }}\n } @else {\n <ng-content />\n }\n</ng-template>\n\n@if (icon() || defaultIconKey()) {\n <ngn-icon\n [ptInt]=\"this\"\n [ptClass]=\"'icon'\"\n [icon]=\"icon()\"\n [defaultIcon]=\"defaultIconKey()\"\n [ngnTooltip]=\"iconOnly() ? renderedContent : null\"\n [ngnTooltipAutoAriaMode]=\"'label'\"\n />\n}\n@if (!iconOnly()) {\n <ng-container [ngTemplateOutlet]=\"renderedContent\" />\n}\n" }]
|
|
146
|
+
}], ctorParameters: () => [], propDecorators: { controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], validationState: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationState", required: false }] }], _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }] } });
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Generated bundle index. Do not edit.
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
export { NgnHint };
|
|
153
|
+
//# sourceMappingURL=ngneers-controls-hint.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-hint.mjs","sources":["../../src/hint/hint.ts","../../src/hint/hint.html","../../src/hint/ngneers-controls-hint.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n contentChild,\n effect,\n input,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\nimport { NgnIcon } from '@ngneers/controls/icon';\nimport { NgnTooltip } from '@ngneers/controls/tooltip';\nimport { generateElementId } from '@ngneers/controls/utils-ng';\nimport { hintControlTemplate } from '@ngneers/controls-themes/templates/hint';\n\nimport type { NgnIconKey } from '@ngneers/controls/icon';\nimport type { IconType } from '@ngneers/controls-custom-types';\n\n/**\n * Validation state rendered by a hint when connected to helpers such as ngnErrors.\n * @category types\n */\nexport interface NgnHintValidationState {\n /** Whether the validation message should be shown. */\n visible: boolean;\n /** Whether validation is currently pending. */\n pending: boolean;\n /** Resolved validation message, if one is available. */\n message: string | null;\n}\n\n/**\n * A small sub-text control for controls — helper text that explains a value,\n * or a validation / warning message. The semantic intent is carried by\n * {@link kind} (`default | info | success | warning | error`).\n *\n * @category control\n */\n@Component({\n selector: 'ngn-hint',\n templateUrl: './hint.html',\n imports: [NgnPt, NgnIcon, NgnTooltip, NgTemplateOutlet],\n providers: [provideSelf(NgnHint)],\n host: {\n '[id]': 'controlId()',\n },\n})\nexport class NgnHint extends NgnBase<'hint'> {\n protected readonly theme = this.injectThemeTemplate(hintControlTemplate, 'root');\n\n /**\n * A stable id placed on the host element so a related control can reference\n * this hint via `aria-describedby`. Defaults to a generated id.\n */\n public readonly controlId = input<string>(generateElementId());\n\n /**\n * Set an icon to display before the text. When omitted, a default icon is\n * derived from the current {@link kind} (e.g. `error` shows an alert icon).\n * The neutral `default` kind shows no icon unless one is set explicitly.\n * @default undefined\n */\n public readonly icon = input<IconType>();\n /**\n * Whether to only render the icon and show the content as tooltip.\n * @default false\n */\n public readonly iconOnly = input(false, { transform: booleanAttribute });\n\n /**\n * The hint text. Can also be a `TemplateRef` for custom rendering, or set via\n * an `<ng-template #content>` content child. Projected content (`<ng-content>`)\n * is used as a fallback when neither is provided.\n * @default null\n */\n public readonly content = input<TemplateRef<unknown> | string | null>(null);\n\n /**\n * Validation state supplied by helpers such as ngnErrors.\n * @default null\n */\n public readonly validationState = input<NgnHintValidationState | null>(null);\n\n private readonly _bridgedValidationState = signal<NgnHintValidationState | null>(null);\n\n private readonly _activeValidationState = computed(\n () => this._bridgedValidationState() ?? this.validationState()\n );\n\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\n\n protected readonly hasIconOnlyTooltipContent = computed(() => {\n const validation = this._activeValidationState();\n if (validation?.visible && validation.message) {\n return true;\n }\n return Boolean(this.content() || this._userContentTemplate());\n });\n\n /**\n * Bridge validation state from a companion directive such as ngnErrors.\n * @category methods\n */\n public setValidationState(state: NgnHintValidationState | null): void {\n this._bridgedValidationState.set(state);\n }\n\n constructor() {\n super();\n effect(() => {\n const state = this._activeValidationState();\n let kind: 'info' | 'error' | undefined;\n if (state?.visible && !this.iconOnly()) {\n kind = state.pending ? 'info' : 'error';\n }\n this.setKindOverride(kind);\n });\n }\n\n /**\n * The resolved template to render, if any. A content-child `<ng-template #content>`\n * takes precedence over a `TemplateRef` passed via the {@link content} input.\n */\n protected readonly contentTemplate = computed(() => {\n if (this._activeValidationState()?.visible) {\n return null;\n }\n const projected = this._userContentTemplate();\n if (projected) {\n return projected;\n }\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n /**\n * The resolved string content, if the {@link content} input is a plain string.\n */\n protected readonly contentString = computed(() => {\n const validation = this._activeValidationState();\n if (validation?.visible) {\n return validation.message;\n }\n const value = this.content();\n return typeof value === 'string' ? value : null;\n });\n\n /**\n * The icon registry key of the default icon for the current kind, or\n * `undefined` for the neutral `default` kind.\n */\n protected readonly defaultIconKey = computed<NgnIconKey | undefined>(() => {\n const validation = this._activeValidationState();\n if (validation?.visible) {\n return validation.pending ? 'hint-info' : 'hint-error';\n }\n if (validation && this.iconOnly() && !this.hasIconOnlyTooltipContent()) {\n return undefined;\n }\n switch (this.appliedKind()) {\n case 'info':\n return 'hint-info';\n case 'success':\n return 'hint-success';\n case 'warning':\n return 'hint-warning';\n case 'error':\n return 'hint-error';\n default:\n return undefined;\n }\n });\n}\n","<ng-template #renderedContent>\n @if (contentTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n } @else if (contentString(); as text) {\n {{ text }}\n } @else {\n <ng-content />\n }\n</ng-template>\n\n@if (icon() || defaultIconKey()) {\n <ngn-icon\n [ptInt]=\"this\"\n [ptClass]=\"'icon'\"\n [icon]=\"icon()\"\n [defaultIcon]=\"defaultIconKey()\"\n [ngnTooltip]=\"iconOnly() ? renderedContent : null\"\n [ngnTooltipAutoAriaMode]=\"'label'\"\n />\n}\n@if (!iconOnly()) {\n <ng-container [ngTemplateOutlet]=\"renderedContent\" />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
const de = {
|
|
2
|
+
calendar: {
|
|
3
|
+
today: 'Heute',
|
|
4
|
+
input: 'Datum',
|
|
5
|
+
selectYear: 'Jahr auswählen',
|
|
6
|
+
selectMonth: 'Monat auswählen',
|
|
7
|
+
previousMonth: 'Vorheriger Monat',
|
|
8
|
+
nextMonth: 'Nächster Monat',
|
|
9
|
+
weekdays: {
|
|
10
|
+
monday: 'Montag',
|
|
11
|
+
tuesday: 'Dienstag',
|
|
12
|
+
wednesday: 'Mittwoch',
|
|
13
|
+
thursday: 'Donnerstag',
|
|
14
|
+
friday: 'Freitag',
|
|
15
|
+
saturday: 'Samstag',
|
|
16
|
+
sunday: 'Sonntag',
|
|
17
|
+
},
|
|
18
|
+
weekdaysShort: {
|
|
19
|
+
monday: 'Mo',
|
|
20
|
+
tuesday: 'Di',
|
|
21
|
+
wednesday: 'Mi',
|
|
22
|
+
thursday: 'Do',
|
|
23
|
+
friday: 'Fr',
|
|
24
|
+
saturday: 'Sa',
|
|
25
|
+
sunday: 'So',
|
|
26
|
+
},
|
|
27
|
+
months: {
|
|
28
|
+
january: 'Januar',
|
|
29
|
+
february: 'Februar',
|
|
30
|
+
march: 'März',
|
|
31
|
+
april: 'April',
|
|
32
|
+
may: 'Mai',
|
|
33
|
+
june: 'Juni',
|
|
34
|
+
july: 'Juli',
|
|
35
|
+
august: 'August',
|
|
36
|
+
september: 'September',
|
|
37
|
+
october: 'Oktober',
|
|
38
|
+
november: 'November',
|
|
39
|
+
december: 'Dezember',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
editInplace: {
|
|
43
|
+
placeholder: 'Klicken zum Bearbeiten',
|
|
44
|
+
confirm: 'Bestätigen',
|
|
45
|
+
},
|
|
46
|
+
filter: {
|
|
47
|
+
noFilter: 'Kein Filter',
|
|
48
|
+
addCondition: 'Bedingung hinzufügen',
|
|
49
|
+
removeCondition: 'Bedingung entfernen',
|
|
50
|
+
operator: 'Operator',
|
|
51
|
+
value: 'Wert',
|
|
52
|
+
clear: 'Zurücksetzen',
|
|
53
|
+
apply: 'Anwenden',
|
|
54
|
+
cancel: 'Abbrechen',
|
|
55
|
+
matchModeLabel: 'Match-Modus',
|
|
56
|
+
match: {
|
|
57
|
+
all: 'Alle Bedingungen',
|
|
58
|
+
any: 'Beliebige Bedingung',
|
|
59
|
+
and: 'und',
|
|
60
|
+
or: 'oder',
|
|
61
|
+
},
|
|
62
|
+
selected: 'ausgewählt',
|
|
63
|
+
conditions: 'Bedingungen',
|
|
64
|
+
operators: {
|
|
65
|
+
isEqual: 'Ist gleich',
|
|
66
|
+
isNotEqual: 'Ist nicht gleich',
|
|
67
|
+
contains: 'Enthält',
|
|
68
|
+
startsWith: 'Beginnt mit',
|
|
69
|
+
endsWith: 'Endet mit',
|
|
70
|
+
in: 'Ist eines von',
|
|
71
|
+
isEmpty: 'Ist leer',
|
|
72
|
+
isNotEmpty: 'Ist nicht leer',
|
|
73
|
+
greaterThan: 'Größer als',
|
|
74
|
+
greaterThanOrEqual: 'Größer oder gleich',
|
|
75
|
+
lessThan: 'Kleiner als',
|
|
76
|
+
lessThanOrEqual: 'Kleiner oder gleich',
|
|
77
|
+
after: 'Nach',
|
|
78
|
+
onOrAfter: 'Am oder nach',
|
|
79
|
+
before: 'Vor',
|
|
80
|
+
onOrBefore: 'Am oder vor',
|
|
81
|
+
isTrue: 'Ja',
|
|
82
|
+
isFalse: 'Nein',
|
|
83
|
+
custom: 'Benutzerdefiniert',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
splitter: {
|
|
87
|
+
handleLabel: 'Ziehen zum Ändern der Größe',
|
|
88
|
+
},
|
|
89
|
+
inputField: {
|
|
90
|
+
clearInput: 'Eingabe löschen',
|
|
91
|
+
},
|
|
92
|
+
maskInput: {
|
|
93
|
+
roleDescription: 'formatierte Eingabe',
|
|
94
|
+
segmentRange: '{{ name }}, {{ min }} bis {{ max }}',
|
|
95
|
+
optionSeparator: ' oder ',
|
|
96
|
+
},
|
|
97
|
+
drawer: {
|
|
98
|
+
close: 'Schließen',
|
|
99
|
+
},
|
|
100
|
+
dialog: {
|
|
101
|
+
close: 'Schließen',
|
|
102
|
+
},
|
|
103
|
+
chip: {
|
|
104
|
+
close: 'Entfernen',
|
|
105
|
+
},
|
|
106
|
+
breadcrumb: {
|
|
107
|
+
overflow: 'Mehr anzeigen',
|
|
108
|
+
},
|
|
109
|
+
toast: {
|
|
110
|
+
close: 'Schließen',
|
|
111
|
+
region: 'Benachrichtigungen',
|
|
112
|
+
},
|
|
113
|
+
snackbar: {
|
|
114
|
+
close: 'Schließen',
|
|
115
|
+
region: 'Benachrichtigungen',
|
|
116
|
+
severity: {
|
|
117
|
+
error: 'Fehler:',
|
|
118
|
+
warning: 'Warnung:',
|
|
119
|
+
success: 'Erfolg:',
|
|
120
|
+
info: 'Info:',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
upload: {
|
|
124
|
+
upload: 'Hochladen',
|
|
125
|
+
// Per-item action labels are parameterized so locales control word order.
|
|
126
|
+
uploadNamed: '{{ name }} hochladen',
|
|
127
|
+
retryNamed: '{{ name }} erneut versuchen',
|
|
128
|
+
cancelNamed: '{{ name }} abbrechen',
|
|
129
|
+
removeNamed: '{{ name }} entfernen',
|
|
130
|
+
progressNamed: 'Upload-Fortschritt für {{ name }}',
|
|
131
|
+
},
|
|
132
|
+
select: {
|
|
133
|
+
filterOptions: 'Optionen filtern',
|
|
134
|
+
},
|
|
135
|
+
paginator: {
|
|
136
|
+
previousPage: 'Vorherige Seite',
|
|
137
|
+
nextPage: 'Nächste Seite',
|
|
138
|
+
},
|
|
139
|
+
listBox: {
|
|
140
|
+
noItemsFound: 'Keine Einträge gefunden',
|
|
141
|
+
},
|
|
142
|
+
tree: {
|
|
143
|
+
noItemsFound: 'Keine Einträge gefunden',
|
|
144
|
+
},
|
|
145
|
+
table: {
|
|
146
|
+
selectAllRows: 'Alle Zeilen auswählen',
|
|
147
|
+
selectRow: 'Zeile auswählen',
|
|
148
|
+
sortedBy: 'Sortiert nach {{ column }}, {{ direction }}',
|
|
149
|
+
sortAscending: 'aufsteigend',
|
|
150
|
+
sortDescending: 'absteigend',
|
|
151
|
+
sortCleared: 'Sortierung aufgehoben',
|
|
152
|
+
selectedCount: '{{ count }} von {{ total }} ausgewählt',
|
|
153
|
+
page: 'Seite {{ page }} von {{ pages }}',
|
|
154
|
+
resultCount: '{{ count }} Ergebnisse',
|
|
155
|
+
},
|
|
156
|
+
state: {
|
|
157
|
+
loading: 'Wird geladen',
|
|
158
|
+
success: 'Erfolg',
|
|
159
|
+
warning: 'Warnung',
|
|
160
|
+
error: 'Fehler',
|
|
161
|
+
cancelled: 'Abgebrochen',
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Generated bundle index. Do not edit.
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
export { de };
|
|
170
|
+
//# sourceMappingURL=ngneers-controls-i18n-translations-de.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-i18n-translations-de.mjs","sources":["../../src/i18n/translations/de/index.ts","../../src/i18n/translations/de/ngneers-controls-i18n-translations-de.ts"],"sourcesContent":["export const de = {\n calendar: {\n today: 'Heute',\n input: 'Datum',\n selectYear: 'Jahr auswählen',\n selectMonth: 'Monat auswählen',\n previousMonth: 'Vorheriger Monat',\n nextMonth: 'Nächster Monat',\n weekdays: {\n monday: 'Montag',\n tuesday: 'Dienstag',\n wednesday: 'Mittwoch',\n thursday: 'Donnerstag',\n friday: 'Freitag',\n saturday: 'Samstag',\n sunday: 'Sonntag',\n },\n weekdaysShort: {\n monday: 'Mo',\n tuesday: 'Di',\n wednesday: 'Mi',\n thursday: 'Do',\n friday: 'Fr',\n saturday: 'Sa',\n sunday: 'So',\n },\n months: {\n january: 'Januar',\n february: 'Februar',\n march: 'März',\n april: 'April',\n may: 'Mai',\n june: 'Juni',\n july: 'Juli',\n august: 'August',\n september: 'September',\n october: 'Oktober',\n november: 'November',\n december: 'Dezember',\n },\n },\n editInplace: {\n placeholder: 'Klicken zum Bearbeiten',\n confirm: 'Bestätigen',\n },\n filter: {\n noFilter: 'Kein Filter',\n addCondition: 'Bedingung hinzufügen',\n removeCondition: 'Bedingung entfernen',\n operator: 'Operator',\n value: 'Wert',\n clear: 'Zurücksetzen',\n apply: 'Anwenden',\n cancel: 'Abbrechen',\n matchModeLabel: 'Match-Modus',\n match: {\n all: 'Alle Bedingungen',\n any: 'Beliebige Bedingung',\n and: 'und',\n or: 'oder',\n },\n selected: 'ausgewählt',\n conditions: 'Bedingungen',\n operators: {\n isEqual: 'Ist gleich',\n isNotEqual: 'Ist nicht gleich',\n contains: 'Enthält',\n startsWith: 'Beginnt mit',\n endsWith: 'Endet mit',\n in: 'Ist eines von',\n isEmpty: 'Ist leer',\n isNotEmpty: 'Ist nicht leer',\n greaterThan: 'Größer als',\n greaterThanOrEqual: 'Größer oder gleich',\n lessThan: 'Kleiner als',\n lessThanOrEqual: 'Kleiner oder gleich',\n after: 'Nach',\n onOrAfter: 'Am oder nach',\n before: 'Vor',\n onOrBefore: 'Am oder vor',\n isTrue: 'Ja',\n isFalse: 'Nein',\n custom: 'Benutzerdefiniert',\n },\n },\n splitter: {\n handleLabel: 'Ziehen zum Ändern der Größe',\n },\n inputField: {\n clearInput: 'Eingabe löschen',\n },\n maskInput: {\n roleDescription: 'formatierte Eingabe',\n segmentRange: '{{ name }}, {{ min }} bis {{ max }}',\n optionSeparator: ' oder ',\n },\n drawer: {\n close: 'Schließen',\n },\n dialog: {\n close: 'Schließen',\n },\n chip: {\n close: 'Entfernen',\n },\n breadcrumb: {\n overflow: 'Mehr anzeigen',\n },\n toast: {\n close: 'Schließen',\n region: 'Benachrichtigungen',\n },\n snackbar: {\n close: 'Schließen',\n region: 'Benachrichtigungen',\n severity: {\n error: 'Fehler:',\n warning: 'Warnung:',\n success: 'Erfolg:',\n info: 'Info:',\n },\n },\n upload: {\n upload: 'Hochladen',\n // Per-item action labels are parameterized so locales control word order.\n uploadNamed: '{{ name }} hochladen',\n retryNamed: '{{ name }} erneut versuchen',\n cancelNamed: '{{ name }} abbrechen',\n removeNamed: '{{ name }} entfernen',\n progressNamed: 'Upload-Fortschritt für {{ name }}',\n },\n select: {\n filterOptions: 'Optionen filtern',\n },\n paginator: {\n previousPage: 'Vorherige Seite',\n nextPage: 'Nächste Seite',\n },\n listBox: {\n noItemsFound: 'Keine Einträge gefunden',\n },\n tree: {\n noItemsFound: 'Keine Einträge gefunden',\n },\n table: {\n selectAllRows: 'Alle Zeilen auswählen',\n selectRow: 'Zeile auswählen',\n sortedBy: 'Sortiert nach {{ column }}, {{ direction }}',\n sortAscending: 'aufsteigend',\n sortDescending: 'absteigend',\n sortCleared: 'Sortierung aufgehoben',\n selectedCount: '{{ count }} von {{ total }} ausgewählt',\n page: 'Seite {{ page }} von {{ pages }}',\n resultCount: '{{ count }} Ergebnisse',\n },\n state: {\n loading: 'Wird geladen',\n success: 'Erfolg',\n warning: 'Warnung',\n error: 'Fehler',\n cancelled: 'Abgebrochen',\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAO,MAAM,EAAE,GAAG;AAChB,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,aAAa,EAAE,kBAAkB;AACjC,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,IAAI;AACb,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,QAAQ,EAAE,UAAU;AACrB,SAAA;AACF,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,WAAW,EAAE,wBAAwB;AACrC,QAAA,OAAO,EAAE,YAAY;AACtB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,YAAY,EAAE,sBAAsB;AACpC,QAAA,eAAe,EAAE,qBAAqB;AACtC,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,cAAc,EAAE,aAAa;AAC7B,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,EAAE,kBAAkB;AACvB,YAAA,GAAG,EAAE,qBAAqB;AAC1B,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,EAAE,EAAE,MAAM;AACX,SAAA;AACD,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,kBAAkB,EAAE,oBAAoB;AACxC,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,eAAe,EAAE,qBAAqB;AACtC,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,MAAM,EAAE,mBAAmB;AAC5B,SAAA;AACF,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,WAAW,EAAE,6BAA6B;AAC3C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,iBAAiB;AAC9B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,qBAAqB;AACtC,QAAA,YAAY,EAAE,qCAAqC;AACnD,QAAA,eAAe,EAAE,QAAQ;AAC1B,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,QAAQ,EAAE,eAAe;AAC1B,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,MAAM,EAAE,oBAAoB;AAC7B,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACF,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE,WAAW;;AAEnB,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,UAAU,EAAE,6BAA6B;AACzC,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,aAAa,EAAE,mCAAmC;AACnD,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,aAAa,EAAE,kBAAkB;AAClC,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,YAAY,EAAE,iBAAiB;AAC/B,QAAA,QAAQ,EAAE,eAAe;AAC1B,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,YAAY,EAAE,yBAAyB;AACxC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,YAAY,EAAE,yBAAyB;AACxC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,aAAa,EAAE,uBAAuB;AACtC,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,QAAQ,EAAE,6CAA6C;AACvD,QAAA,aAAa,EAAE,aAAa;AAC5B,QAAA,cAAc,EAAE,YAAY;AAC5B,QAAA,WAAW,EAAE,uBAAuB;AACpC,QAAA,aAAa,EAAE,wCAAwC;AACvD,QAAA,IAAI,EAAE,kCAAkC;AACxC,QAAA,WAAW,EAAE,wBAAwB;AACtC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,SAAS,EAAE,aAAa;AACzB,KAAA;;;ACjKH;;AAEG;;;;"}
|