@mmstack/form-adapters
Version:
Provides a collection of **headless, reusable state adapters** for common form field types. Built upon [@mmstack/form-core](https://www.npmjs.com/package/@mmstack/form-core) and integrating with [@mmstack/form-validation](https://www.npmjs.com/package/@mm
1 lines • 417 kB
Source Map (JSON)
{"version":3,"file":"mmstack-form-adapters.mjs","sources":["../tmp-esm2022/lib/util/tooltip.js","../tmp-esm2022/lib/boolean/base-boolean.js","../tmp-esm2022/lib/boolean/toggle.js","../tmp-esm2022/lib/date/base-date.js","../tmp-esm2022/lib/date/date-range.js","../tmp-esm2022/lib/date/time.js","../tmp-esm2022/lib/date/date-time.js","../tmp-esm2022/lib/number/base-number.js","../tmp-esm2022/lib/selectable/select.js","../tmp-esm2022/lib/selectable/button-group.js","../tmp-esm2022/lib/selectable/multi-select.js","../tmp-esm2022/lib/selectable/chips.js","../tmp-esm2022/lib/selectable/search.js","../tmp-esm2022/lib/signal-error-validator.js","../tmp-esm2022/lib/string/base-string.js","../tmp-esm2022/lib/string/autocomplete.js","../tmp-esm2022/lib/string/textarea.js","../tmp-esm2022/mmstack-form-adapters.js"],"sourcesContent":["import { computed } from '@angular/core';\nexport function tooltip(message, providedMaxLen) {\n const maxLen = computed(() => providedMaxLen?.() ?? 40, ...(ngDevMode ? [{ debugName: \"maxLen\" }] : []));\n const resolved = computed(() => {\n const max = maxLen();\n const m = message();\n if (m.length <= maxLen()) {\n return { value: m, tooltip: '' };\n }\n return {\n value: `${m.slice(0, max)}...`,\n tooltip: m,\n };\n }, ...(ngDevMode ? [{ debugName: \"resolved\" }] : []));\n return {\n shortened: computed(() => resolved().value),\n tooltip: computed(() => resolved().tooltip),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vYWRhcHRlcnMvc3JjL2xpYi91dGlsL3Rvb2x0aXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQU9qRCxNQUFNLFVBQVUsT0FBTyxDQUNyQixPQUF1QixFQUN2QixjQUE2QjtJQUU3QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGtEQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM3QixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSztZQUM5QixPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUM7SUFDSixDQUFDLG9EQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDM0MsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG50eXBlIFRvb2x0aXBlZFNpZ25hbHMgPSB7XHJcbiAgc2hvcnRlbmVkOiBTaWduYWw8c3RyaW5nPjtcclxuICB0b29sdGlwOiBTaWduYWw8c3RyaW5nPjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b29sdGlwKFxyXG4gIG1lc3NhZ2U6IFNpZ25hbDxzdHJpbmc+LFxyXG4gIHByb3ZpZGVkTWF4TGVuPzogKCkgPT4gbnVtYmVyLFxyXG4pOiBUb29sdGlwZWRTaWduYWxzIHtcclxuICBjb25zdCBtYXhMZW4gPSBjb21wdXRlZCgoKSA9PiBwcm92aWRlZE1heExlbj8uKCkgPz8gNDApO1xyXG4gIGNvbnN0IHJlc29sdmVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgbWF4ID0gbWF4TGVuKCk7XHJcbiAgICBjb25zdCBtID0gbWVzc2FnZSgpO1xyXG4gICAgaWYgKG0ubGVuZ3RoIDw9IG1heExlbigpKSB7XHJcbiAgICAgIHJldHVybiB7IHZhbHVlOiBtLCB0b29sdGlwOiAnJyB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHZhbHVlOiBgJHttLnNsaWNlKDAsIG1heCl9Li4uYCxcclxuICAgICAgdG9vbHRpcDogbSxcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBzaG9ydGVuZWQ6IGNvbXB1dGVkKCgpID0+IHJlc29sdmVkKCkudmFsdWUpLFxyXG4gICAgdG9vbHRpcDogY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZWQoKS50b29sdGlwKSxcclxuICB9O1xyXG59XHJcbiJdfQ==","import { computed } from '@angular/core';\nimport { formControl, } from '@mmstack/form-core';\nimport { injectValidators } from '@mmstack/form-validation';\nimport { tooltip } from '../util';\n/**\n * Creates the reactive state object (`BooleanState`) for a boolean form control\n * without relying on Angular's dependency injection for validation setup.\n *\n * Use this function directly if:\n * - You don't need validation or are providing a pre-built `validator` function manually.\n * - You are creating state outside of an Angular injection context.\n *\n * For easier integration with `@mmstack/form-validation`, prefer `injectCreateBooleanState`.\n *\n * @template TParent The type of the parent form group's value, if applicable.\n * @param value The initial boolean value, or a `DerivedSignal` linking it to a parent state.\n * @param opt Optional configuration (`BooleanStateOptions`), potentially including a `validator` function.\n * @returns A `BooleanState` instance managing the control's reactive state.\n * @see injectCreateBooleanState\n */\nexport function createBooleanState(value, opt) {\n const state = formControl(value, opt);\n const { shortened: error, tooltip: errorTooltip } = tooltip(state.error, opt?.maxErrorHintLength);\n const { shortened: hint, tooltip: hintTooltip } = tooltip(state.hint, opt?.maxErrorHintLength);\n return {\n ...state,\n hint,\n hintTooltip,\n error,\n errorTooltip,\n type: 'boolean',\n };\n}\n/**\n * Factory function (returned by `injectCreateBooleanState`) that creates `BooleanState`.\n * Integrates with `@mmstack/form-validation` via DI to apply validation rules.\n *\n * @template TParent The type of the parent form group's value, if applicable.\n * @param value The initial boolean value, or a `DerivedSignal` linking it to a parent state.\n * @param opt Configuration options specific to this injected factory, defined by\n * the `InjectedBooleanStateOptions` type, including the `validation` property.\n * @returns A `BooleanState` instance managing the control's reactive state.\n */\nexport function injectCreateBooleanState() {\n const validators = injectValidators();\n /**\n * Factory function (returned by `injectCreateBooleanState`) that creates `BooleanState`.\n * Integrates with `@mmstack/form-validation` via DI.\n *\n * @template TParent The type of the parent form group's value, if applicable.\n * @param value The initial boolean value, or a `DerivedSignal` linking it to a parent state.\n * @param opt Configuration options, excluding `validator` but adding a `validation` property.\n * @param opt.validation Optional configuration for boolean-specific validation rules.\n * @param opt.validation.requireTrue If `true`, applies the `validators.boolean.mustBeTrue()` validator.\n * @returns A `BooleanState` instance managing the control's reactive state.\n */\n return (value, opt) => {\n const validation = computed(() => ({\n requireTrue: false,\n ...opt?.validation?.(),\n }), ...(ngDevMode ? [{ debugName: \"validation\" }] : []));\n const validator = computed(() => {\n if (validation().requireTrue)\n return validators.boolean.mustBeTrue();\n return () => '';\n }, ...(ngDevMode ? [{ debugName: \"validator\" }] : []));\n return createBooleanState(value, { ...opt, validator });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ib29sZWFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9hZGFwdGVycy9zcmMvbGliL2Jvb2xlYW4vYmFzZS1ib29sZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUF3Q2xDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsS0FBZ0QsRUFDaEQsR0FBeUI7SUFFekIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV0QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUN6RCxLQUFLLENBQUMsS0FBSyxFQUNYLEdBQUcsRUFBRSxrQkFBa0IsQ0FDeEIsQ0FBQztJQUVGLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQ3ZELEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxFQUFFLGtCQUFrQixDQUN4QixDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLElBQUk7UUFDSixXQUFXO1FBQ1gsS0FBSztRQUNMLFlBQVk7UUFDWixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO0FBQ0osQ0FBQztBQThCRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILE9BQU8sQ0FDTCxLQUFnRCxFQUNoRCxHQUFpQyxFQUNWLEVBQUU7UUFDekIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUU7U0FDdkIsQ0FBQyxzREFBQyxDQUFDO1FBRUosTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM5QixJQUFJLFVBQVUsRUFBRSxDQUFDLFdBQVc7Z0JBQUUsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JFLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2xCLENBQUMscURBQUMsQ0FBQztRQUVILE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRGVyaXZlZFNpZ25hbCxcclxuICB0eXBlIEZvcm1Db250cm9sU2lnbmFsLFxyXG59IGZyb20gJ0BtbXN0YWNrL2Zvcm0tY29yZSc7XHJcbmltcG9ydCB7IGluamVjdFZhbGlkYXRvcnMgfSBmcm9tICdAbW1zdGFjay9mb3JtLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyB0b29sdGlwIH0gZnJvbSAnLi4vdXRpbCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgcmVhY3RpdmUgc3RhdGUgZm9yIGEgYm9vbGVhbiBmb3JtIGNvbnRyb2wgKGUuZy4sIGNoZWNrYm94KS5cclxuICogRXh0ZW5kcyB0aGUgYmFzZSBgRm9ybUNvbnRyb2xTaWduYWw8Ym9vbGVhbj5gIGFuZCBpbmNsdWRlcyBhIGB0eXBlYCBkaXNjcmltaW5hdG9yLlxyXG4gKiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggY2hlY2tib3gtbGlrZSBVSSBlbGVtZW50cy4gRm9yIHRvZ2dsZSBzd2l0Y2hlcywgc2VlIGBUb2dnbGVTdGF0ZWAuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUUGFyZW50IFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBncm91cCdzIHZhbHVlLCBpZiBhcHBsaWNhYmxlLlxyXG4gKiBAc2VlIFRvZ2dsZVN0YXRlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBCb29sZWFuU3RhdGU8VFBhcmVudCA9IHVuZGVmaW5lZD4gPSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBib29sZWFuLFxyXG4gIFRQYXJlbnRcclxuPiAmIHtcclxuICAvKiogc2lnbmFsIGZvciBlcnJvciB0b29sdGlwLCBkZWZhdWx0IGlzIHNob3J0ZW5lZCB3aGVuIGVycm9yIGlzIGxvbmdlciB0aGFuIDQwIGNoYXJzICovXHJcbiAgZXJyb3JUb29sdGlwOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogc2lnbmFsIGZvciBoaW50IHRvb2x0aXAsIGRlZmF1bHQgaXMgc2hvcnRlbmVkIHdoZW4gaGludCBpcyBsb25nZXIgdGhhbiA0MCBjaGFycyAqL1xyXG4gIGhpbnRUb29sdGlwOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogVHlwZSBkaXNjcmltaW5hdG9yIGZvciBib29sZWFuIGNvbnRyb2xzLiAqL1xyXG4gIHR5cGU6ICdib29sZWFuJztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgYEJvb2xlYW5TdGF0ZWAsIHVzZWQgd2l0aCBgY3JlYXRlQm9vbGVhblN0YXRlYC5cclxuICpcclxuICogSW5oZXJpdHMgb3B0aW9ucyBmcm9tIGBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8Ym9vbGVhbj5gIGJ1dCBvbWl0cyBgcmVxdWlyZWRgLFxyXG4gKiBhcyBib29sZWFuIFwicmVxdWlyZWRcIiB2YWxpZGF0aW9uIHR5cGljYWxseSBtZWFucyBcIm11c3QgYmUgdHJ1ZVwiLCB3aGljaCBpcyBoYW5kbGVkXHJcbiAqIHZpYSB0aGUgYHZhbGlkYXRpb25gIG9wdGlvbiBpbiBgaW5qZWN0Q3JlYXRlQm9vbGVhblN0YXRlYC5cclxuICpcclxuICogQHNlZSBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnNcclxuICogQHNlZSBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVcclxuICovXHJcbmV4cG9ydCB0eXBlIEJvb2xlYW5TdGF0ZU9wdGlvbnMgPSBPbWl0PFxyXG4gIENyZWF0ZUZvcm1Db250cm9sT3B0aW9uczxib29sZWFuLCAnY29udHJvbCc+LFxyXG4gICdyZXF1aXJlZCdcclxuPiAmIHtcclxuICAvKiBzaG9ydGVucyBlcnJvci9oaW50IG1lc3NhZ2UgJiBwcm92aWRlcyBlcnJvclRvb2x0aXAgd2l0aCBmdWxsIG1lc3NhZ2UsIGRlZmF1bHQgNDAgKi9cclxuICBtYXhFcnJvckhpbnRMZW5ndGg/OiAoKSA9PiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgcmVhY3RpdmUgc3RhdGUgb2JqZWN0IChgQm9vbGVhblN0YXRlYCkgZm9yIGEgYm9vbGVhbiBmb3JtIGNvbnRyb2xcclxuICogd2l0aG91dCByZWx5aW5nIG9uIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiBmb3IgdmFsaWRhdGlvbiBzZXR1cC5cclxuICpcclxuICogVXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaWY6XHJcbiAqIC0gWW91IGRvbid0IG5lZWQgdmFsaWRhdGlvbiBvciBhcmUgcHJvdmlkaW5nIGEgcHJlLWJ1aWx0IGB2YWxpZGF0b3JgIGZ1bmN0aW9uIG1hbnVhbGx5LlxyXG4gKiAtIFlvdSBhcmUgY3JlYXRpbmcgc3RhdGUgb3V0c2lkZSBvZiBhbiBBbmd1bGFyIGluamVjdGlvbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBGb3IgZWFzaWVyIGludGVncmF0aW9uIHdpdGggYEBtbXN0YWNrL2Zvcm0tdmFsaWRhdGlvbmAsIHByZWZlciBgaW5qZWN0Q3JlYXRlQm9vbGVhblN0YXRlYC5cclxuICpcclxuICogQHRlbXBsYXRlIFRQYXJlbnQgVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGdyb3VwJ3MgdmFsdWUsIGlmIGFwcGxpY2FibGUuXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5pdGlhbCBib29sZWFuIHZhbHVlLCBvciBhIGBEZXJpdmVkU2lnbmFsYCBsaW5raW5nIGl0IHRvIGEgcGFyZW50IHN0YXRlLlxyXG4gKiBAcGFyYW0gb3B0IE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGBCb29sZWFuU3RhdGVPcHRpb25zYCksIHBvdGVudGlhbGx5IGluY2x1ZGluZyBhIGB2YWxpZGF0b3JgIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBBIGBCb29sZWFuU3RhdGVgIGluc3RhbmNlIG1hbmFnaW5nIHRoZSBjb250cm9sJ3MgcmVhY3RpdmUgc3RhdGUuXHJcbiAqIEBzZWUgaW5qZWN0Q3JlYXRlQm9vbGVhblN0YXRlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQm9vbGVhblN0YXRlPFRQYXJlbnQgPSB1bmRlZmluZWQ+KFxyXG4gIHZhbHVlOiBib29sZWFuIHwgRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBib29sZWFuPixcclxuICBvcHQ/OiBCb29sZWFuU3RhdGVPcHRpb25zLFxyXG4pOiBCb29sZWFuU3RhdGU8VFBhcmVudD4ge1xyXG4gIGNvbnN0IHN0YXRlID0gZm9ybUNvbnRyb2wodmFsdWUsIG9wdCk7XHJcblxyXG4gIGNvbnN0IHsgc2hvcnRlbmVkOiBlcnJvciwgdG9vbHRpcDogZXJyb3JUb29sdGlwIH0gPSB0b29sdGlwKFxyXG4gICAgc3RhdGUuZXJyb3IsXHJcbiAgICBvcHQ/Lm1heEVycm9ySGludExlbmd0aCxcclxuICApO1xyXG5cclxuICBjb25zdCB7IHNob3J0ZW5lZDogaGludCwgdG9vbHRpcDogaGludFRvb2x0aXAgfSA9IHRvb2x0aXAoXHJcbiAgICBzdGF0ZS5oaW50LFxyXG4gICAgb3B0Py5tYXhFcnJvckhpbnRMZW5ndGgsXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgaGludCxcclxuICAgIGhpbnRUb29sdGlwLFxyXG4gICAgZXJyb3IsXHJcbiAgICBlcnJvclRvb2x0aXAsXHJcbiAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIHJldHVybmVkIGJ5XHJcbiAqIGBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVgLlxyXG4gKlxyXG4gKiBUaGlzIHR5cGUgaXMgZGVyaXZlZCBmcm9tIGBCb29sZWFuU3RhdGVPcHRpb25zYCBidXQgZXhwbGljaXRseSBleGNsdWRlcyB0aGVcclxuICogYHZhbGlkYXRvcmAgcHJvcGVydHkgKGFzIHZhbGlkYXRpb24gcnVsZXMgYXJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBgdmFsaWRhdGlvbmBcclxuICogcHJvcGVydHkgYmVsb3cpIGFuZCBhZGRzIHRoZSBgdmFsaWRhdGlvbmAgY29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byBib29sZWFuIGNvbnRyb2xzLlxyXG4gKlxyXG4gKiBAc2VlIGluamVjdENyZWF0ZUJvb2xlYW5TdGF0ZVxyXG4gKiBAc2VlIEJvb2xlYW5TdGF0ZU9wdGlvbnNcclxuICovXHJcbmV4cG9ydCB0eXBlIEluamVjdGVkQm9vbGVhblN0YXRlT3B0aW9ucyA9IE9taXQ8XHJcbiAgQm9vbGVhblN0YXRlT3B0aW9ucyxcclxuICAndmFsaWRhdG9yJ1xyXG4+ICYge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGJvb2xlYW4tc3BlY2lmaWMgdmFsaWRhdGlvbiBydWxlcy5cclxuICAgKiBUaGUgZmFjdG9yeSBmdW5jdGlvbiB1c2VzIHRoZSBpbmplY3RlZCBgdmFsaWRhdG9yc2Agc2VydmljZSBiYXNlZCBvbiB0aGlzIGNvbmZpZ3VyYXRpb24uXHJcbiAgICovXHJcbiAgdmFsaWRhdGlvbj86ICgpID0+IHtcclxuICAgIC8qKlxyXG4gICAgICogSWYgYHRydWVgLCBhcHBsaWVzIHRoZSBgdmFsaWRhdG9ycy5ib29sZWFuLm11c3RCZVRydWUoKWAgdmFsaWRhdG9yLFxyXG4gICAgICogcmVxdWlyaW5nIHRoZSBjb250cm9sJ3MgdmFsdWUgdG8gYmUgYHRydWVgIHRvIGJlIGNvbnNpZGVyZWQgdmFsaWQuXHJcbiAgICAgKi9cclxuICAgIHJlcXVpcmVUcnVlPzogYm9vbGVhbjtcclxuICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZhY3RvcnkgZnVuY3Rpb24gKHJldHVybmVkIGJ5IGBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVgKSB0aGF0IGNyZWF0ZXMgYEJvb2xlYW5TdGF0ZWAuXHJcbiAqIEludGVncmF0ZXMgd2l0aCBgQG1tc3RhY2svZm9ybS12YWxpZGF0aW9uYCB2aWEgREkgdG8gYXBwbHkgdmFsaWRhdGlvbiBydWxlcy5cclxuICpcclxuICogQHRlbXBsYXRlIFRQYXJlbnQgVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGdyb3VwJ3MgdmFsdWUsIGlmIGFwcGxpY2FibGUuXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5pdGlhbCBib29sZWFuIHZhbHVlLCBvciBhIGBEZXJpdmVkU2lnbmFsYCBsaW5raW5nIGl0IHRvIGEgcGFyZW50IHN0YXRlLlxyXG4gKiBAcGFyYW0gb3B0IENvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIGluamVjdGVkIGZhY3RvcnksIGRlZmluZWQgYnlcclxuICogdGhlIGBJbmplY3RlZEJvb2xlYW5TdGF0ZU9wdGlvbnNgIHR5cGUsIGluY2x1ZGluZyB0aGUgYHZhbGlkYXRpb25gIHByb3BlcnR5LlxyXG4gKiBAcmV0dXJucyBBIGBCb29sZWFuU3RhdGVgIGluc3RhbmNlIG1hbmFnaW5nIHRoZSBjb250cm9sJ3MgcmVhY3RpdmUgc3RhdGUuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q3JlYXRlQm9vbGVhblN0YXRlKCkge1xyXG4gIGNvbnN0IHZhbGlkYXRvcnMgPSBpbmplY3RWYWxpZGF0b3JzKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gKHJldHVybmVkIGJ5IGBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVgKSB0aGF0IGNyZWF0ZXMgYEJvb2xlYW5TdGF0ZWAuXHJcbiAgICogSW50ZWdyYXRlcyB3aXRoIGBAbW1zdGFjay9mb3JtLXZhbGlkYXRpb25gIHZpYSBESS5cclxuICAgKlxyXG4gICAqIEB0ZW1wbGF0ZSBUUGFyZW50IFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBncm91cCdzIHZhbHVlLCBpZiBhcHBsaWNhYmxlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5pdGlhbCBib29sZWFuIHZhbHVlLCBvciBhIGBEZXJpdmVkU2lnbmFsYCBsaW5raW5nIGl0IHRvIGEgcGFyZW50IHN0YXRlLlxyXG4gICAqIEBwYXJhbSBvcHQgQ29uZmlndXJhdGlvbiBvcHRpb25zLCBleGNsdWRpbmcgYHZhbGlkYXRvcmAgYnV0IGFkZGluZyBhIGB2YWxpZGF0aW9uYCBwcm9wZXJ0eS5cclxuICAgKiBAcGFyYW0gb3B0LnZhbGlkYXRpb24gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgYm9vbGVhbi1zcGVjaWZpYyB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAqIEBwYXJhbSBvcHQudmFsaWRhdGlvbi5yZXF1aXJlVHJ1ZSBJZiBgdHJ1ZWAsIGFwcGxpZXMgdGhlIGB2YWxpZGF0b3JzLmJvb2xlYW4ubXVzdEJlVHJ1ZSgpYCB2YWxpZGF0b3IuXHJcbiAgICogQHJldHVybnMgQSBgQm9vbGVhblN0YXRlYCBpbnN0YW5jZSBtYW5hZ2luZyB0aGUgY29udHJvbCdzIHJlYWN0aXZlIHN0YXRlLlxyXG4gICAqL1xyXG4gIHJldHVybiA8VFBhcmVudCA9IHVuZGVmaW5lZD4oXHJcbiAgICB2YWx1ZTogYm9vbGVhbiB8IERlcml2ZWRTaWduYWw8VFBhcmVudCwgYm9vbGVhbj4sXHJcbiAgICBvcHQ/OiBJbmplY3RlZEJvb2xlYW5TdGF0ZU9wdGlvbnMsXHJcbiAgKTogQm9vbGVhblN0YXRlPFRQYXJlbnQ+ID0+IHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBjb21wdXRlZCgoKSA9PiAoe1xyXG4gICAgICByZXF1aXJlVHJ1ZTogZmFsc2UsXHJcbiAgICAgIC4uLm9wdD8udmFsaWRhdGlvbj8uKCksXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdG9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICBpZiAodmFsaWRhdGlvbigpLnJlcXVpcmVUcnVlKSByZXR1cm4gdmFsaWRhdG9ycy5ib29sZWFuLm11c3RCZVRydWUoKTtcclxuICAgICAgcmV0dXJuICgpID0+ICcnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZUJvb2xlYW5TdGF0ZSh2YWx1ZSwgeyAuLi5vcHQsIHZhbGlkYXRvciB9KTtcclxuICB9O1xyXG59XHJcbiJdfQ==","import { createBooleanState, injectCreateBooleanState, } from './base-boolean';\n/**\n * Creates the reactive state object (`ToggleState`) for a toggle switch form control\n * without relying on Angular's dependency injection for validation setup.\n *\n * This function wraps `createBooleanState` and simply overrides the `type` property\n * to `'toggle'`. Use this function if creating state outside an injection context\n * or providing a manual `validator` function via the options.\n *\n * For easier validation integration (like `requireTrue`), prefer `injectCreateToggleState`.\n *\n * @template TParent The type of the parent form group's value, if applicable.\n * @param value The initial boolean value (`true`/`false`), or a `DerivedSignal` linking it to a parent state.\n * @param opt Optional configuration (`ToggleStateOptions`, alias for `BooleanStateOptions`).\n * @returns A `ToggleState` object managing the toggle's reactive state.\n * @see createBooleanState\n * @see injectCreateToggleState\n */\nexport function createToggleState(value, opt) {\n return {\n ...createBooleanState(value, opt),\n type: 'toggle',\n };\n}\n/**\n * Creates and returns a factory function for generating `ToggleState` instances.\n *\n * This factory utilizes Angular's dependency injection by wrapping the factory\n * returned from `injectCreateBooleanState`. It simplifies validation integration\n * (e.g., setting `requireTrue` via the `validation` option).\n *\n * This is the **recommended** way to create `ToggleState` when working within\n * an Angular injection context, especially if validation is needed.\n *\n * @returns A factory function: `(value: boolean | DerivedSignal<TParent, boolean>, opt?: InjectedToggleStateOptions) => ToggleState<TParent>`.\n * @see injectCreateBooleanState\n * @see InjectedToggleStateOptions\n * @example\n * // Within an Angular injection context (component, service, etc.):\n * const createToggle = injectCreateToggleState(); // Get the factory\n *\n * // Create state for an optional dark mode toggle\n * const darkModeState = createToggle(false, { label: () => 'Dark Mode' });\n *\n * // Create state for a toggle that must be enabled\n * const enableAnalyticsState = createToggle(false, {\n * label: () => 'Enable Analytics',\n * validation: () => ({ requireTrue: true }) // Use validation option\n * });\n */\nexport function injectCreateToggleState() {\n const factory = injectCreateBooleanState();\n /**\n * Factory function (returned by `injectCreateToggleState`) that creates `ToggleState`.\n * It wraps the factory from `injectCreateBooleanState` and sets the `type` to `'toggle'`.\n *\n * @template TParent The type of the parent form group's value, if applicable.\n * @param value The initial boolean value, or a `DerivedSignal` linking it to a parent state.\n * @param opt Configuration options (`InjectedToggleStateOptions`), including the `validation` property.\n * @returns A `ToggleState` instance managing the toggle's reactive state.\n */\n return (value, opt) => {\n return {\n ...factory(value, opt),\n type: 'toggle',\n };\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9hZGFwdGVycy9zcmMvbGliL2Jvb2xlYW4vdG9nZ2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEdBSXpCLE1BQU0sZ0JBQWdCLENBQUM7QUFxQ3hCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUFnRCxFQUNoRCxHQUF3QjtJQUV4QixPQUFPO1FBQ0wsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1FBQ2pDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztJQUUzQzs7Ozs7Ozs7T0FRRztJQUNILE9BQU8sQ0FDTCxLQUFnRCxFQUNoRCxHQUFnQyxFQUNWLEVBQUU7UUFDeEIsT0FBTztZQUNMLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7WUFDdEIsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUJvb2xlYW5TdGF0ZSxcclxuICBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGUsXHJcbiAgdHlwZSBCb29sZWFuU3RhdGUsXHJcbiAgdHlwZSBCb29sZWFuU3RhdGVPcHRpb25zLFxyXG4gIHR5cGUgSW5qZWN0ZWRCb29sZWFuU3RhdGVPcHRpb25zLFxyXG59IGZyb20gJy4vYmFzZS1ib29sZWFuJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSByZWFjdGl2ZSBzdGF0ZSBmb3IgYSB0b2dnbGUgc3dpdGNoIGZvcm0gY29udHJvbCAoZS5nLiwgYG1hdC1zbGlkZS10b2dnbGVgKS5cclxuICpcclxuICogVGhpcyB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGBCb29sZWFuU3RhdGVgIGJ1dCBvdmVycmlkZXMgdGhlIGB0eXBlYFxyXG4gKiBkaXNjcmltaW5hdG9yIHRvIGAndG9nZ2xlJ2AgZm9yIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGlmIG5lZWRlZC5cclxuICpcclxuICogQHRlbXBsYXRlIFRQYXJlbnQgVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGdyb3VwJ3MgdmFsdWUsIGlmIGFwcGxpY2FibGUuXHJcbiAqIEBzZWUgQm9vbGVhblN0YXRlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBUb2dnbGVTdGF0ZTxUUGFyZW50ID0gdW5kZWZpbmVkPiA9IE9taXQ8XHJcbiAgQm9vbGVhblN0YXRlPFRQYXJlbnQ+LFxyXG4gICd0eXBlJ1xyXG4+ICYge1xyXG4gIC8qKiBUeXBlIGRpc2NyaW1pbmF0b3IgZm9yIHRvZ2dsZSBzd2l0Y2ggY29udHJvbHMuICovXHJcbiAgdHlwZTogJ3RvZ2dsZSc7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgY3JlYXRlVG9nZ2xlU3RhdGVgLlxyXG4gKiBUaGlzIGlzIGEgZGlyZWN0IHR5cGUgYWxpYXMgZm9yIGBCb29sZWFuU3RhdGVPcHRpb25zYC5cclxuICpcclxuICogQHNlZSBCb29sZWFuU3RhdGVPcHRpb25zXHJcbiAqIEBzZWUgY3JlYXRlVG9nZ2xlU3RhdGVcclxuICovXHJcbmV4cG9ydCB0eXBlIFRvZ2dsZVN0YXRlT3B0aW9ucyA9IEJvb2xlYW5TdGF0ZU9wdGlvbnM7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZmFjdG9yeSBmdW5jdGlvbiByZXR1cm5lZCBieSBgaW5qZWN0Q3JlYXRlVG9nZ2xlU3RhdGVgLlxyXG4gKiBUaGlzIGlzIGEgZGlyZWN0IHR5cGUgYWxpYXMgZm9yIGBJbmplY3RlZEJvb2xlYW5TdGF0ZU9wdGlvbnNgLlxyXG4gKlxyXG4gKiBAc2VlIEluamVjdGVkQm9vbGVhblN0YXRlT3B0aW9uc1xyXG4gKiBAc2VlIGluamVjdENyZWF0ZVRvZ2dsZVN0YXRlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJbmplY3RlZFRvZ2dsZVN0YXRlT3B0aW9ucyA9IEluamVjdGVkQm9vbGVhblN0YXRlT3B0aW9ucztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIHRoZSByZWFjdGl2ZSBzdGF0ZSBvYmplY3QgKGBUb2dnbGVTdGF0ZWApIGZvciBhIHRvZ2dsZSBzd2l0Y2ggZm9ybSBjb250cm9sXHJcbiAqIHdpdGhvdXQgcmVseWluZyBvbiBBbmd1bGFyJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gZm9yIHZhbGlkYXRpb24gc2V0dXAuXHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gd3JhcHMgYGNyZWF0ZUJvb2xlYW5TdGF0ZWAgYW5kIHNpbXBseSBvdmVycmlkZXMgdGhlIGB0eXBlYCBwcm9wZXJ0eVxyXG4gKiB0byBgJ3RvZ2dsZSdgLiBVc2UgdGhpcyBmdW5jdGlvbiBpZiBjcmVhdGluZyBzdGF0ZSBvdXRzaWRlIGFuIGluamVjdGlvbiBjb250ZXh0XHJcbiAqIG9yIHByb3ZpZGluZyBhIG1hbnVhbCBgdmFsaWRhdG9yYCBmdW5jdGlvbiB2aWEgdGhlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEZvciBlYXNpZXIgdmFsaWRhdGlvbiBpbnRlZ3JhdGlvbiAobGlrZSBgcmVxdWlyZVRydWVgKSwgcHJlZmVyIGBpbmplY3RDcmVhdGVUb2dnbGVTdGF0ZWAuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUUGFyZW50IFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBncm91cCdzIHZhbHVlLCBpZiBhcHBsaWNhYmxlLlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGluaXRpYWwgYm9vbGVhbiB2YWx1ZSAoYHRydWVgL2BmYWxzZWApLCBvciBhIGBEZXJpdmVkU2lnbmFsYCBsaW5raW5nIGl0IHRvIGEgcGFyZW50IHN0YXRlLlxyXG4gKiBAcGFyYW0gb3B0IE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGBUb2dnbGVTdGF0ZU9wdGlvbnNgLCBhbGlhcyBmb3IgYEJvb2xlYW5TdGF0ZU9wdGlvbnNgKS5cclxuICogQHJldHVybnMgQSBgVG9nZ2xlU3RhdGVgIG9iamVjdCBtYW5hZ2luZyB0aGUgdG9nZ2xlJ3MgcmVhY3RpdmUgc3RhdGUuXHJcbiAqIEBzZWUgY3JlYXRlQm9vbGVhblN0YXRlXHJcbiAqIEBzZWUgaW5qZWN0Q3JlYXRlVG9nZ2xlU3RhdGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2dnbGVTdGF0ZTxUUGFyZW50ID0gdW5kZWZpbmVkPihcclxuICB2YWx1ZTogYm9vbGVhbiB8IERlcml2ZWRTaWduYWw8VFBhcmVudCwgYm9vbGVhbj4sXHJcbiAgb3B0PzogVG9nZ2xlU3RhdGVPcHRpb25zLFxyXG4pOiBUb2dnbGVTdGF0ZTxUUGFyZW50PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLmNyZWF0ZUJvb2xlYW5TdGF0ZSh2YWx1ZSwgb3B0KSxcclxuICAgIHR5cGU6ICd0b2dnbGUnLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBgVG9nZ2xlU3RhdGVgIGluc3RhbmNlcy5cclxuICpcclxuICogVGhpcyBmYWN0b3J5IHV0aWxpemVzIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiBieSB3cmFwcGluZyB0aGUgZmFjdG9yeVxyXG4gKiByZXR1cm5lZCBmcm9tIGBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVgLiBJdCBzaW1wbGlmaWVzIHZhbGlkYXRpb24gaW50ZWdyYXRpb25cclxuICogKGUuZy4sIHNldHRpbmcgYHJlcXVpcmVUcnVlYCB2aWEgdGhlIGB2YWxpZGF0aW9uYCBvcHRpb24pLlxyXG4gKlxyXG4gKiBUaGlzIGlzIHRoZSAqKnJlY29tbWVuZGVkKiogd2F5IHRvIGNyZWF0ZSBgVG9nZ2xlU3RhdGVgIHdoZW4gd29ya2luZyB3aXRoaW5cclxuICogYW4gQW5ndWxhciBpbmplY3Rpb24gY29udGV4dCwgZXNwZWNpYWxseSBpZiB2YWxpZGF0aW9uIGlzIG5lZWRlZC5cclxuICpcclxuICogQHJldHVybnMgQSBmYWN0b3J5IGZ1bmN0aW9uOiBgKHZhbHVlOiBib29sZWFuIHwgRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBib29sZWFuPiwgb3B0PzogSW5qZWN0ZWRUb2dnbGVTdGF0ZU9wdGlvbnMpID0+IFRvZ2dsZVN0YXRlPFRQYXJlbnQ+YC5cclxuICogQHNlZSBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVcclxuICogQHNlZSBJbmplY3RlZFRvZ2dsZVN0YXRlT3B0aW9uc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBXaXRoaW4gYW4gQW5ndWxhciBpbmplY3Rpb24gY29udGV4dCAoY29tcG9uZW50LCBzZXJ2aWNlLCBldGMuKTpcclxuICogY29uc3QgY3JlYXRlVG9nZ2xlID0gaW5qZWN0Q3JlYXRlVG9nZ2xlU3RhdGUoKTsgLy8gR2V0IHRoZSBmYWN0b3J5XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBzdGF0ZSBmb3IgYW4gb3B0aW9uYWwgZGFyayBtb2RlIHRvZ2dsZVxyXG4gKiBjb25zdCBkYXJrTW9kZVN0YXRlID0gY3JlYXRlVG9nZ2xlKGZhbHNlLCB7IGxhYmVsOiAoKSA9PiAnRGFyayBNb2RlJyB9KTtcclxuICpcclxuICogLy8gQ3JlYXRlIHN0YXRlIGZvciBhIHRvZ2dsZSB0aGF0IG11c3QgYmUgZW5hYmxlZFxyXG4gKiBjb25zdCBlbmFibGVBbmFseXRpY3NTdGF0ZSA9IGNyZWF0ZVRvZ2dsZShmYWxzZSwge1xyXG4gKiBsYWJlbDogKCkgPT4gJ0VuYWJsZSBBbmFseXRpY3MnLFxyXG4gKiB2YWxpZGF0aW9uOiAoKSA9PiAoeyByZXF1aXJlVHJ1ZTogdHJ1ZSB9KSAvLyBVc2UgdmFsaWRhdGlvbiBvcHRpb25cclxuICogfSk7XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q3JlYXRlVG9nZ2xlU3RhdGUoKSB7XHJcbiAgY29uc3QgZmFjdG9yeSA9IGluamVjdENyZWF0ZUJvb2xlYW5TdGF0ZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIChyZXR1cm5lZCBieSBgaW5qZWN0Q3JlYXRlVG9nZ2xlU3RhdGVgKSB0aGF0IGNyZWF0ZXMgYFRvZ2dsZVN0YXRlYC5cclxuICAgKiBJdCB3cmFwcyB0aGUgZmFjdG9yeSBmcm9tIGBpbmplY3RDcmVhdGVCb29sZWFuU3RhdGVgIGFuZCBzZXRzIHRoZSBgdHlwZWAgdG8gYCd0b2dnbGUnYC5cclxuICAgKlxyXG4gICAqIEB0ZW1wbGF0ZSBUUGFyZW50IFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBncm91cCdzIHZhbHVlLCBpZiBhcHBsaWNhYmxlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5pdGlhbCBib29sZWFuIHZhbHVlLCBvciBhIGBEZXJpdmVkU2lnbmFsYCBsaW5raW5nIGl0IHRvIGEgcGFyZW50IHN0YXRlLlxyXG4gICAqIEBwYXJhbSBvcHQgQ29uZmlndXJhdGlvbiBvcHRpb25zIChgSW5qZWN0ZWRUb2dnbGVTdGF0ZU9wdGlvbnNgKSwgaW5jbHVkaW5nIHRoZSBgdmFsaWRhdGlvbmAgcHJvcGVydHkuXHJcbiAgICogQHJldHVybnMgQSBgVG9nZ2xlU3RhdGVgIGluc3RhbmNlIG1hbmFnaW5nIHRoZSB0b2dnbGUncyByZWFjdGl2ZSBzdGF0ZS5cclxuICAgKi9cclxuICByZXR1cm4gPFRQYXJlbnQgPSB1bmRlZmluZWQ+KFxyXG4gICAgdmFsdWU6IGJvb2xlYW4gfCBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIGJvb2xlYW4+LFxyXG4gICAgb3B0PzogSW5qZWN0ZWRUb2dnbGVTdGF0ZU9wdGlvbnMsXHJcbiAgKTogVG9nZ2xlU3RhdGU8VFBhcmVudD4gPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZmFjdG9yeSh2YWx1ZSwgb3B0KSxcclxuICAgICAgdHlwZTogJ3RvZ2dsZScsXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIl19","import { computed, inject, LOCALE_ID } from '@angular/core';\nimport { formControl, } from '@mmstack/form-core';\nimport { injectValidators, } from '@mmstack/form-validation';\nimport { tooltip } from '../util';\n/**\n * Creates the reactive state object (`DateState`) for a date form control\n * without relying on Angular's dependency injection for validation or locale.\n * Includes computed signals for `min` and `max` date constraints based directly on the provided options.\n *\n * Use this function directly only if creating state outside an injection context\n * or providing a fully custom `validator`, `locale`, `min`, and `max` manually via `opt`.\n * Prefer `injectCreateDateState` for standard usage within Angular applications.\n *\n * Note: The `errorTooltip` signal returned by this function will initially be empty.\n * Enhanced tooltip generation based on multiple errors is handled by `injectCreateDateState`.\n *\n * @template TParent The type of the parent form group's value, if applicable. Defaults to `undefined`.\n * @template TDate The type used for date values. Defaults to `Date`.\n * @param value The initial date value (`TDate | null`), or a `DerivedSignal` linking it to a parent state.\n * @param opt Configuration options (`DateStateOptions`), requires `locale`, optionally `validator`, `placeholder`, `min`, `max`.\n * @returns A `DateState` instance managing the control's reactive state, including `min` and `max` signals.\n * @see injectCreateDateState\n */\nexport function createDateState(value, opt) {\n const state = formControl(value, opt);\n const { shortened: error, tooltip: errorTooltip } = tooltip(state.error, opt.maxErrorHintLength);\n const { shortened: hint, tooltip: hintTooltip } = tooltip(state.hint, opt.maxErrorHintLength);\n return {\n ...state,\n min: computed(() => {\n const min = opt.min?.();\n if (!min)\n return null;\n return typeof min === 'string' ? new Date(min) : min;\n }, {\n equal: (a, b) => a?.getTime() === b?.getTime(),\n }),\n max: computed(() => {\n const max = opt.max?.();\n if (!max)\n return null;\n return typeof max === 'string' ? new Date(max) : max;\n }),\n placeholder: computed(() => opt.placeholder?.() ?? ''),\n error,\n errorTooltip,\n hint,\n hintTooltip,\n type: 'date',\n };\n}\n/**\n * Creates and returns a factory function for generating `DateState` instances.\n *\n * This factory utilizes Angular's dependency injection (`injectValidators`, `LOCALE_ID`)\n * to automatically handle:\n * - Validation configuration via `DateValidatorOptions` (passed to the `validation` option).\n * - Localization for default validation error messages.\n * - Enhanced error message formatting (splitting merged errors into `error` and `errorTooltip` signals).\n * - Populating the `min` and `max` signals on `DateState` based on the constraints specified\n * within the `validation` options object.\n * - Configuration of date handling based on `provideValidatorConfig`.\n *\n * This is the **recommended** way to create `DateState` within an Angular application.\n *\n * @returns A factory function: `(value: TDate | null | DerivedSignal<TParent, TDate | null>, opt?: InjectedDateStateOptions<TDate>) => DateState<TParent, TDate>`.\n * @template TDate The type used for date values passed to the factory (e.g., `Date`, Luxon `DateTime`).\n * Must match the `TDate` used during `provideValidatorConfig` if custom date handling is required. Defaults to `Date`.\n *\n * @example\n * // Within an injection context:\n * const createDate = injectCreateDateState();\n * // If using Luxon: const createDate = injectCreateDateState<DateTime>();\n *\n * const eventDateState = createDate(null, {\n * label: () => 'Event Date',\n * placeholder: () => 'Select event date',\n * validation: () => ({ // Provide DateValidatorOptions here\n * required: true,\n * min: new Date(), // Sets min validation AND state.min() signal\n * max: '2099-12-31' // Sets max validation AND state.max() signal\n * })\n * });\n *\n * // Template can use min/max signals for datepicker limits:\n * // <mat-datepicker-toggle [for]=\"picker\" [disabled]=\"eventDateState.disabled()\"></mat-datepicker-toggle>\n * // <input matInput [matDatepicker]=\"picker\"\n * // [min]=\"eventDateState.min()\"\n * // [max]=\"eventDateState.max()\"\n * // [(ngModel)]=\"eventDateState.value\" ... >\n * // <mat-datepicker #picker></mat-datepicker>\n * // <mat-error><span [matTooltip]=\"eventDateState.errorTooltip()\">{{ eventDateState.error() }}</span></mat-error>\n */\nexport function injectCreateDateState() {\n const validators = injectValidators();\n const locale = inject(LOCALE_ID);\n /**\n * Factory function (returned by `injectCreateDateState`) that creates `DateState`.\n * Integrates with `@mmstack/form-validation` via DI for validation and localization.\n * Handles splitting of multiple validation errors into `error` and `errorTooltip`.\n * Derives `min`/`max` state signals from `validation` options.\n *\n * @template TDate The type for date values used by this control. Defaults to `Date`.\n * @template TParent The type of the parent form group's value, if applicable. Defaults to `undefined`.\n * @param value The initial date value (`TDate | null`), or a `DerivedSignal` linking it to a parent state.\n * @param opt Configuration options (`InjectedDateStateOptions`), including the `validation` property\n * which accepts `DateValidatorOptions` (used for both validation rules and setting state's `min`/`max` signals).\n * @returns A `DateState` instance managing the control's reactive state.\n */\n return (value, opt) => {\n const validationOptions = computed(() => ({\n messageOptions: {\n label: opt?.label?.(),\n },\n ...opt?.validation?.(),\n }), ...(ngDevMode ? [{ debugName: \"validationOptions\" }] : []));\n const mergedValidator = computed(() => validators.date.all(validationOptions()), ...(ngDevMode ? [{ debugName: \"mergedValidator\" }] : []));\n const validator = computed(() => {\n const merged = mergedValidator();\n return (value) => {\n return merged(value);\n };\n }, ...(ngDevMode ? [{ debugName: \"validator\" }] : []));\n const state = createDateState(value, {\n ...opt,\n locale,\n min: computed(() => validationOptions().min ?? null),\n max: computed(() => validationOptions().max ?? null),\n required: computed(() => validationOptions().required ?? false),\n validator,\n });\n const resolvedError = computed(() => {\n const merger = mergedValidator();\n return merger.resolve(state.errorTooltip() || state.error());\n }, ...(ngDevMode ? [{ debugName: \"resolvedError\" }] : []));\n return {\n ...state,\n error: computed(() => resolvedError().error),\n errorTooltip: computed(() => resolvedError().tooltip),\n };\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9hZGFwdGVycy9zcmMvbGliL2RhdGUvYmFzZS1kYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBR0wsV0FBVyxHQUVaLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFtSGxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUEwRCxFQUMxRCxHQUE0QjtJQUU1QixNQUFNLEtBQUssR0FBRyxXQUFXLENBQXdCLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUU3RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUN6RCxLQUFLLENBQUMsS0FBSyxFQUNYLEdBQUcsQ0FBQyxrQkFBa0IsQ0FDdkIsQ0FBQztJQUNGLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQ3ZELEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxDQUFDLGtCQUFrQixDQUN2QixDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLEdBQUcsRUFBRSxRQUFRLENBQ1gsR0FBRyxFQUFFO1lBQ0gsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdEIsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdkQsQ0FBQyxFQUNEO1lBQ0UsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUU7U0FDL0MsQ0FDRjtRQUNELEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3RCLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3ZELENBQUMsQ0FBQztRQUNGLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RELEtBQUs7UUFDTCxZQUFZO1FBQ1osSUFBSTtRQUNKLFdBQVc7UUFDWCxJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVqQzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxPQUFPLENBQ0wsS0FBMEQsRUFDMUQsR0FBcUMsRUFDckMsRUFBRTtRQUNGLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEMsY0FBYyxFQUFFO2dCQUNkLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7YUFDdEI7WUFDRCxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRTtTQUN2QixDQUFDLDZEQUFDLENBQUM7UUFFSixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3BDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUMsMkRBQ3pDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBRWpDLE9BQU8sQ0FBQyxLQUFtQixFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sTUFBTSxDQUFDLEtBQWEsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQztRQUNKLENBQUMscURBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDbkMsR0FBRyxHQUFHO1lBQ04sTUFBTTtZQUNOLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDO1lBQ3BELEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDO1lBQ3BELFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQy9ELFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBRWpDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyx5REFBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzVDLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1NBQ3RELENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgTE9DQUxFX0lELCB0eXBlIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRGVyaXZlZFNpZ25hbCxcclxuICBmb3JtQ29udHJvbCxcclxuICBGb3JtQ29udHJvbFNpZ25hbCxcclxufSBmcm9tICdAbW1zdGFjay9mb3JtLWNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgRGF0ZVZhbGlkYXRvck9wdGlvbnMsXHJcbiAgaW5qZWN0VmFsaWRhdG9ycyxcclxufSBmcm9tICdAbW1zdGFjay9mb3JtLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyB0b29sdGlwIH0gZnJvbSAnLi4vdXRpbCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgcmVhY3RpdmUgc3RhdGUgZm9yIGEgZGF0ZSBpbnB1dCBmb3JtIGNvbnRyb2wuXHJcbiAqXHJcbiAqIEV4dGVuZHMgdGhlIGJhc2UgYEZvcm1Db250cm9sU2lnbmFsPFREYXRlIHwgbnVsbD5gIGFuZCBhZGRzIGRhdGUtc3BlY2lmaWNcclxuICogcHJvcGVydGllcyBsaWtlIGBwbGFjZWhvbGRlcmAgYW5kIGVuaGFuY2VkIGBlcnJvcmAvYGVycm9yVG9vbHRpcGAgc2lnbmFscyBkZXJpdmVkXHJcbiAqIGZyb20gdGhlIHZhbGlkYXRpb24gcmVzdWx0J3MgYC5yZXNvbHZlKClgIG1ldGhvZCAod2hlbiB1c2luZyB0aGUgaW5qZWN0ZWQgZmFjdG9yeSkuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUUGFyZW50IFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBncm91cCdzIHZhbHVlLCBpZiBhcHBsaWNhYmxlLiBEZWZhdWx0cyB0byBgdW5kZWZpbmVkYC5cclxuICogQHRlbXBsYXRlIFREYXRlIFRoZSB0eXBlIHVzZWQgZm9yIGRhdGUgdmFsdWVzIHdpdGhpbiB0aGUgY29udHJvbCAoZS5nLiwgYERhdGVgLCBMdXhvbiBgRGF0ZVRpbWVgLCBNb21lbnQpLiBEZWZhdWx0cyB0byBgRGF0ZWAuXHJcbiAqIEBzZWUgRm9ybUNvbnRyb2xTaWduYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIERhdGVTdGF0ZTxUUGFyZW50ID0gdW5kZWZpbmVkLCBURGF0ZSA9IERhdGU+ID0gRm9ybUNvbnRyb2xTaWduYWw8XHJcbiAgVERhdGUgfCBudWxsLCAvLyBWYWx1ZSBjYW4gYmUgdGhlIHNwZWNpZmljIGRhdGUgdHlwZSBvciBudWxsXHJcbiAgVFBhcmVudFxyXG4+ICYge1xyXG4gIC8qKiBTaWduYWwgaG9sZGluZyB0aGUgaW5wdXQgcGxhY2Vob2xkZXIgdGV4dCAoZS5nLiwgXCJZWVlZLU1NLUREXCIpLiAqL1xyXG4gIHBsYWNlaG9sZGVyOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKipcclxuICAgKiBTaWduYWwgaG9sZGluZyB0aGUgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2Ugc3VpdGFibGUgZm9yIHRvb2x0aXBzIG9yIGRldGFpbGVkIGRpc3BsYXkuXHJcbiAgICogV2hlbiBtdWx0aXBsZSB2YWxpZGF0aW9uIGVycm9ycyBvY2N1ciwgdGhpcyBtYXkgY29udGFpbiBhbGwgbWVzc2FnZXMsIHdoaWxlIGBlcnJvcigpYCBtaWdodCBzaG93IGEgc3VtbWFyeS5cclxuICAgKiAoR2VuZXJhdGVkIGJ5IGBpbmplY3RDcmVhdGVEYXRlU3RhdGVgIHVzaW5nIHRoZSB2YWxpZGF0b3IncyBgLnJlc29sdmUoKWAgbWV0aG9kLCBvciBzaG9ydGVuZWQgYnkgcHJvdmlkZWQgbWF4RXJyb3JIaW50TGVuZ3RoKS5cclxuICAgKi9cclxuICBlcnJvclRvb2x0aXA6IFNpZ25hbDxzdHJpbmc+O1xyXG4gIC8qKiBzaWduYWwgZm9yIGhpbnQgdG9vbHRpcCwgZGVmYXVsdCBpcyBzaG9ydGVuZWQgd2hlbiBoaW50IGlzIGxvbmdlciB0aGFuIDQwIGNoYXJzICovXHJcbiAgaGludFRvb2x0aXA6IFNpZ25hbDxzdHJpbmc+O1xyXG4gIC8qKlxyXG4gICAqIFNpZ25hbCBob2xkaW5nIHRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAoaW5jbHVzaXZlKSwgZGVyaXZlZCBmcm9tIG9wdGlvbnMuXHJcbiAgICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWluaW11bSBkYXRlIGlzIHNldC4gVGhlIHZhbHVlIGlzIGFsd2F5cyBhIGBEYXRlYCBvYmplY3QgaW50ZXJuYWxseVxyXG4gICAqIGZvciByZWxpYWJsZSBjb21wYXJpc29uLCByZWdhcmRsZXNzIG9mIHRoZSBpbnB1dCBvcHRpb24gZm9ybWF0IChgc3RyaW5nYCBvciBgRGF0ZWApLlxyXG4gICAqIFVzZWZ1bCBmb3IgYmluZGluZyB0byBkYXRlIHBpY2tlciBjb21wb25lbnQgcHJvcGVydGllcyAoZS5nLiwgYFttaW5dYCkuXHJcbiAgICovXHJcbiAgbWluOiBTaWduYWw8RGF0ZSB8IG51bGw+O1xyXG4gIC8qKlxyXG4gICAqIFNpZ25hbCBob2xkaW5nIHRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAoaW5jbHVzaXZlKSwgZGVyaXZlZCBmcm9tIG9wdGlvbnMuXHJcbiAgICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF4aW11bSBkYXRlIGlzIHNldC4gVGhlIHZhbHVlIGlzIGFsd2F5cyBhIGBEYXRlYCBvYmplY3QgaW50ZXJuYWxseS5cclxuICAgKiBVc2VmdWwgZm9yIGJpbmRpbmcgdG8gZGF0ZSBwaWNrZXIgY29tcG9uZW50IHByb3BlcnRpZXMgKGUuZy4sIGBbbWF4XWApLlxyXG4gICAqL1xyXG4gIG1heDogU2lnbmFsPERhdGUgfCBudWxsPjtcclxuICAvKiogVHlwZSBkaXNjcmltaW5hdG9yIGZvciBkYXRlIGNvbnRyb2xzLiAqL1xyXG4gIHR5cGU6ICdkYXRlJztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBgY3JlYXRlRGF0ZVN0YXRlYCBmdW5jdGlvbiAodGhlIG5vbi1ESSB2ZXJzaW9uKS5cclxuICogRXh0ZW5kcyBiYXNlIGZvcm0gY29udHJvbCBvcHRpb25zIGZvciBhIGBURGF0ZSB8IG51bGxgIHZhbHVlLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVERhdGUgVGhlIHR5cGUgdXNlZCBmb3IgZGF0ZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBEYXRlYC5cclxuICogQHNlZSBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnNcclxuICogQHNlZSBjcmVhdGVEYXRlU3RhdGVcclxuICovXHJcbmV4cG9ydCB0eXBlIERhdGVTdGF0ZU9wdGlvbnM8VERhdGUgPSBEYXRlPiA9IENyZWF0ZUZvcm1Db250cm9sT3B0aW9uczxcclxuICBURGF0ZSB8IG51bGwsXHJcbiAgJ2NvbnRyb2wnXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGxvY2FsZSBzdHJpbmcgKGUuZy4sICdlbi1VUycsICdkZS1ERScpLiBXaGlsZSByZXF1aXJlZCBieSB0aGlzIHR5cGUsXHJcbiAgICogaXQncyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIGRvd24gaW50ZXJuYWxseSB3aGVuIHVzaW5nIHRoZVxyXG4gICAqIGRlcGVuZGVuY3ktaW5qZWN0ZWQgZmFjdG9yeSAoYGluamVjdENyZWF0ZURhdGVTdGF0ZWApIHdoaWNoIG9idGFpbnMgaXQgZnJvbSBgTE9DQUxFX0lEYC5cclxuICAgKiBJZiB1c2luZyBgY3JlYXRlRGF0ZVN0YXRlYCBkaXJlY3RseSwgeW91IG11c3QgcHJvdmlkZSBpdCBtYW51YWxseSwgYnV0IGl0cyBwcmltYXJ5XHJcbiAgICogdXNlIGlzIHdpdGhpbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGZvcm1hdHRpbmcgaGFuZGxlZCBieSB0aGUgaW5qZWN0ZWQgc3lzdGVtLlxyXG4gICAqL1xyXG4gIGxvY2FsZTogc3RyaW5nO1xyXG4gIC8qKiBPcHRpb25hbCBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBkYXRlIGlucHV0LiAqL1xyXG4gIHBsYWNlaG9sZGVyPzogKCkgPT4gc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUgKGluY2x1c2l2ZSkuXHJcbiAgICogQWNjZXB0cyBhIHN0cmluZyAocGFyc2VkIGFzIGBuZXcgRGF0ZShzdHJpbmcpYCksIGEgYERhdGVgIG9iamVjdCwgb3IgYG51bGxgLlxyXG4gICAqIFBvcHVsYXRlcyB0aGUgYG1pbmAgc2lnbmFsIG9uIHRoZSBgRGF0ZVN0YXRlYC5cclxuICAgKiBOb3RlOiBJZiB1c2luZyBgaW5qZWN0Q3JlYXRlRGF0ZVN0YXRlYCwgc2V0dGluZyBgbWluYCB2aWEgdGhlIGB2YWxpZGF0aW9uYFxyXG4gICAqIG9wdGlvbnMgaXMgZ2VuZXJhbGx5IHByZWZlcnJlZCBhcyBpdCBlbmFibGVzIHZhbGlkYXRpb24gbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgbWluPzogKCkgPT4gc3RyaW5nIHwgRGF0ZSB8IG51bGw7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAoaW5jbHVzaXZlKS5cclxuICAgKiBBY2NlcHRzIGEgc3RyaW5nIChwYXJzZWQgYXMgYG5ldyBEYXRlKHN0cmluZylgKSwgYSBgRGF0ZWAgb2JqZWN0LCBvciBgbnVsbGAuXHJcbiAgICogUG9wdWxhdGVzIHRoZSBgbWF4YCBzaWduYWwgb24gdGhlIGBEYXRlU3RhdGVgLlxyXG4gICAqIE5vdGU6IElmIHVzaW5nIGBpbmplY3RDcmVhdGVEYXRlU3RhdGVgLCBzZXR0aW5nIGBtYXhgIHZpYSB0aGUgYHZhbGlkYXRpb25gXHJcbiAgICogb3B0aW9ucyBpcyBnZW5lcmFsbHkgcHJlZmVycmVkIGFzIGl0IGVuYWJsZXMgdmFsaWRhdGlvbiBtZXNzYWdlcy5cclxuICAgKi9cclxuICBtYXg/OiAoKSA9PiBzdHJpbmcgfCBEYXRlIHwgbnVsbDtcclxuICAvKiBzaG9ydGVucyBlcnJvci9oaW50IG1lc3NhZ2UgJiBwcm92aWRlcyBlcnJvclRvb2x0aXAgd2l0aCBmdWxsIG1lc3NhZ2UsIGRlZmF1bHQgNDAgKi9cclxuICBtYXhFcnJvckhpbnRMZW5ndGg/OiAoKSA9PiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIHNwZWNpZmljYWxseSBmb3IgdGhlIGZhY3RvcnkgZnVuY3Rpb24gcmV0dXJuZWQgYnlcclxuICogYGluamVjdENyZWF0ZURhdGVTdGF0ZWAuXHJcbiAqXHJcbiAqIFRoaXMgdHlwZSBvbWl0cyBiYXNlIHByb3BlcnRpZXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBmYWN0b3J5IChsaWtlIGB2YWxpZGF0b3JgLCBgcmVxdWlyZWRgLCBgbG9jYWxlYClcclxuICogYW5kIHJlcXVpcmVzIHZhbGlkYXRpb24gcnVsZXMgdG8gYmUgcHJvdmlkZWQgdmlhIHRoZSBgdmFsaWRhdGlvbmAgcHJvcGVydHkgdXNpbmcgYERhdGVWYWxpZGF0b3JPcHRpb25zYFxyXG4gKiBmcm9tIGBAbW1zdGFjay9mb3JtLXZhbGlkYXRpb25gLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVERhdGUgVGhlIHR5cGUgdXNlZCBmb3IgZGF0ZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBEYXRlYC5cclxuICogQHNlZSBpbmplY3RDcmVhdGVEYXRlU3RhdGVcclxuICogQHNlZSBEYXRlU3RhdGVPcHRpb25zXHJcbiAqIEBzZWUgRGF0ZVZhbGlkYXRvck9wdGlvbnNcclxuICovXHJcbmV4cG9ydCB0eXBlIEluamVjdGVkRGF0ZVN0YXRlT3B0aW9uczxURGF0ZSA9IERhdGU+ID0gT21pdDxcclxuICAvLyBPcHRpb25zIHJlbGF0ZWQgdG8gdmFsaWRhdGlvbiBydWxlcyBvciBsb2NhbGUgYXJlIGhhbmRsZWQgaW50ZXJuYWxseVxyXG4gIERhdGVTdGF0ZU9wdGlvbnM8VERhdGU+LFxyXG4gICdyZXF1aXJlZCcgfCAndmFsaWRhdG9yJyB8ICdsb2NhbGUnIHwgJ21pbicgfCAnbWF4J1xyXG4+ICYge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZ1bmN0aW9uIHJldHVybmluZyBhIGBEYXRlVmFsaWRhdG9yT3B0aW9uc2Agb2JqZWN0IGRlZmluaW5nIHRoZSB2YWxpZGF0aW9uIHJ1bGVzLlxyXG4gICAqIFRoZSBgbWluYCwgYG1heGAgJiBgcmVxdWlyZWRgIHByb3BlcnRpZXMgc2V0IGhlcmUgd2lsbCBiZSB1c2VkIGZvciBib3RoIHZhbGlkYXRpb24gKmFuZCogdG8gcG9wdWxhdGVcclxuICAgKiB0aGUgYG1pbmAsIGBtYXhgICYgYHJlcXVpcmVkYCBzaWduYWxzIG9uIHRoZSByZXN1bHRpbmcgYERhdGVTdGF0ZWAuXHJcbiAgICogVGhlIGZhY3RvcnkgZnVuY3Rpb24gdXNlcyB0aGlzIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgaW5qZWN0ZWQgYHZhbGlkYXRvcnMuZGF0ZS5hbGwoKWAgbWV0aG9kLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgdmFsaWRhdGlvbjogKCkgPT4gKHsgcmVxdWlyZWQ6IHRydWUsIG1pbjogbmV3IERhdGUoKSwgbWF4OiAnMjA5OS0xMi0zMScgfSlcclxuICAgKi9cclxuICB2YWxpZGF0aW9uPzogKCkgPT4gRGF0ZVZhbGlkYXRvck9wdGlvbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgcmVhY3RpdmUgc3RhdGUgb2JqZWN0IChgRGF0ZVN0YXRlYCkgZm9yIGEgZGF0ZSBmb3JtIGNvbnRyb2xcclxuICogd2l0aG91dCByZWx5aW5nIG9uIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiBmb3IgdmFsaWRhdGlvbiBvciBsb2NhbGUuXHJcbiAqIEluY2x1ZGVzIGNvbXB1dGVkIHNpZ25hbHMgZm9yIGBtaW5gIGFuZCBgbWF4YCBkYXRlIGNvbnN0cmFpbnRzIGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxyXG4gKlxyXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBvbmx5IGlmIGNyZWF0aW5nIHN0YXRlIG91dHNpZGUgYW4gaW5qZWN0aW9uIGNvbnRleHRcclxuICogb3IgcHJvdmlkaW5nIGEgZnVsbHkgY3VzdG9tIGB2YWxpZGF0b3JgLCBgbG9jYWxlYCwgYG1pbmAsIGFuZCBgbWF4YCBtYW51YWxseSB2aWEgYG9wdGAuXHJcbiAqIFByZWZlciBgaW5qZWN0Q3JlYXRlRGF0ZVN0YXRlYCBmb3Igc3RhbmRhcmQgdXNhZ2Ugd2l0aGluIEFuZ3VsYXIgYXBwbGljYXRpb25zLlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgYGVycm9yVG9vbHRpcGAgc2lnbmFsIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsbHkgYmUgZW1wdHkuXHJcbiAqIEVuaGFuY2VkIHRvb2x0aXAgZ2VuZXJhdGlvbiBiYXNlZCBvbiBtdWx0aXBsZSBlcnJvcnMgaXMgaGFuZGxlZCBieSBgaW5qZWN0Q3JlYXRlRGF0ZVN0YXRlYC5cclxuICpcclxuICogQHRlbXBsYXRlIFRQYXJlbnQgVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGdyb3VwJ3MgdmFsdWUsIGlmIGFwcGxpY2FibGUuIERlZmF1bHRzIHRvIGB1bmRlZmluZWRgLlxyXG4gKiBAdGVtcGxhdGUgVERhdGUgVGhlIHR5cGUgdXNlZCBmb3IgZGF0ZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBEYXRlYC5cclxuICogQHBhcmFtIHZhbHVlIFRoZSBpbml0aWFsIGRhdGUgdmFsdWUgKGBURGF0ZSB8IG51bGxgKSwgb3IgYSBgRGVyaXZlZFNpZ25hbGAgbGlua2luZyBpdCB0byBhIHBhcmVudCBzdGF0ZS5cclxuICogQHBhcmFtIG9wdCBDb25maWd1cmF0aW9uIG9wdGlvbnMgKGBEYXRlU3RhdGVPcHRpb25zYCksIHJlcXVpcmVzIGBsb2NhbGVgLCBvcHRpb25hbGx5IGB2YWxpZGF0b3JgLCBgcGxhY2Vob2xkZXJgLCBgbWluYCwgYG1heGAuXHJcbiAqIEByZXR1cm5zIEEgYERhdGVTdGF0ZWAgaW5zdGFuY2UgbWFuYWdpbmcgdGhlIGNvbnRyb2wncyByZWFjdGl2ZSBzdGF0ZSwgaW5jbHVkaW5nIGBtaW5gIGFuZCBgbWF4YCBzaWduYWxzLlxyXG4gKiBAc2VlIGluamVjdENyZWF0ZURhdGVTdGF0ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURhdGVTdGF0ZTxUUGFyZW50ID0gdW5kZWZpbmVkLCBURGF0ZSA9IERhdGU+KFxyXG4gIHZhbHVlOiBURGF0ZSB8IG51bGwgfCBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFREYXRlIHwgbnVsbD4sXHJcbiAgb3B0OiBEYXRlU3RhdGVPcHRpb25zPFREYXRlPixcclxuKTogRGF0ZVN0YXRlPFRQYXJlbnQsIFREYXRlPiB7XHJcbiAgY29uc3Qgc3RhdGUgPSBmb3JtQ29udHJvbDxURGF0ZSB8IG51bGwsIFRQYXJlbnQ+KHZhbHVlLCBvcHQpO1xyXG5cclxuICBjb25zdCB7IHNob3J0ZW5lZDogZXJyb3IsIHRvb2x0aXA6IGVycm9yVG9vbHRpcCB9ID0gdG9vbHRpcChcclxuICAgIHN0YXRlLmVycm9yLFxyXG4gICAgb3B0Lm1heEVycm9ySGludExlbmd0aCxcclxuICApO1xyXG4gIGNvbnN0IHsgc2hvcnRlbmVkOiBoaW50LCB0b29sdGlwOiBoaW50VG9vbHRpcCB9ID0gdG9vbHRpcChcclxuICAgIHN0YXRlLmhpbnQsXHJcbiAgICBvcHQubWF4RXJyb3JIaW50TGVuZ3RoLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIG1pbjogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICBjb25zdCBtaW4gPSBvcHQub