@eduboxpro/studio 0.1.20 → 0.1.21

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.
@@ -4135,6 +4135,309 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
4135
4135
  args: ['keydown', ['$event']]
4136
4136
  }] } });
4137
4137
 
4138
+ const COUNTRY_OPTIONS = [
4139
+ { code: 'kz', name: 'Казахстан', dialCode: '+7', flag: '🇰🇿', minLength: 11, maxLength: 11, placeholder: '+7 XXX XXX XX XX' },
4140
+ { code: 'ru', name: 'Россия', dialCode: '+7', flag: '🇷🇺', minLength: 11, maxLength: 11, placeholder: '+7 XXX XXX XX XX' },
4141
+ { code: 'kg', name: 'Кыргызстан', dialCode: '+996', flag: '🇰🇬', minLength: 12, maxLength: 12, placeholder: '+996 XXX XXX XXX' },
4142
+ { code: 'uz', name: 'Узбекистан', dialCode: '+998', flag: '🇺🇿', minLength: 12, maxLength: 12, placeholder: '+998 XX XXX XX XX' },
4143
+ { code: 'tr', name: 'Турция', dialCode: '+90', flag: '🇹🇷', minLength: 12, maxLength: 12, placeholder: '+90 XXX XXX XX XX' },
4144
+ { code: 'az', name: 'Азербайджан', dialCode: '+994', flag: '🇦🇿', minLength: 12, maxLength: 12, placeholder: '+994 XX XXX XX XX' }
4145
+ ];
4146
+ class PhoneInputComponent {
4147
+ configService = inject(StudioConfigService);
4148
+ inputDefaults = computed(() => this.configService.config().components?.input, ...(ngDevMode ? [{ debugName: "inputDefaults" }] : []));
4149
+ inputEl = viewChild('inputElement', ...(ngDevMode ? [{ debugName: "inputEl" }] : []));
4150
+ // Styling
4151
+ variantInput = input(undefined, ...(ngDevMode ? [{ debugName: "variantInput", alias: 'variant' }] : [{ alias: 'variant' }]));
4152
+ sizeInput = input(undefined, ...(ngDevMode ? [{ debugName: "sizeInput", alias: 'size' }] : [{ alias: 'size' }]));
4153
+ radiusInput = input(undefined, ...(ngDevMode ? [{ debugName: "radiusInput", alias: 'radius' }] : [{ alias: 'radius' }]));
4154
+ variant = withConfigDefault(this.variantInput, computed(() => this.inputDefaults()?.variant), 'outline');
4155
+ size = withConfigDefault(this.sizeInput, computed(() => this.inputDefaults()?.size), 'md');
4156
+ radius = withConfigDefault(this.radiusInput, computed(() => this.inputDefaults()?.radius), 'md');
4157
+ // Phone specific
4158
+ country = model('kz', ...(ngDevMode ? [{ debugName: "country" }] : []));
4159
+ showCountrySelector = input(false, ...(ngDevMode ? [{ debugName: "showCountrySelector" }] : []));
4160
+ showFlag = input(true, ...(ngDevMode ? [{ debugName: "showFlag" }] : []));
4161
+ showCountryCode = input(true, ...(ngDevMode ? [{ debugName: "showCountryCode" }] : []));
4162
+ // States
4163
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
4164
+ readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
4165
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
4166
+ // Label & hints
4167
+ label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : []));
4168
+ hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : []));
4169
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
4170
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
4171
+ errorMessage = input(undefined, ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
4172
+ // Layout
4173
+ fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : []));
4174
+ autoFocus = input(false, ...(ngDevMode ? [{ debugName: "autoFocus" }] : []));
4175
+ name = input(undefined, ...(ngDevMode ? [{ debugName: "name" }] : []));
4176
+ id = input(undefined, ...(ngDevMode ? [{ debugName: "id" }] : []));
4177
+ ariaLabel = input(undefined, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
4178
+ // Events
4179
+ valueChange = output();
4180
+ countryChange = output();
4181
+ focused = output();
4182
+ blurred = output();
4183
+ // Internal state
4184
+ value = signal('', ...(ngDevMode ? [{ debugName: "value" }] : []));
4185
+ displayValue = signal('', ...(ngDevMode ? [{ debugName: "displayValue" }] : []));
4186
+ isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
4187
+ isTouched = signal(false, ...(ngDevMode ? [{ debugName: "isTouched" }] : []));
4188
+ isDropdownOpen = signal(false, ...(ngDevMode ? [{ debugName: "isDropdownOpen" }] : []));
4189
+ generatedId = `studio-phone-input-${Math.random().toString(36).substr(2, 9)}`;
4190
+ onChange = () => { };
4191
+ onTouched = () => { };
4192
+ // Country options
4193
+ countryOptions = COUNTRY_OPTIONS;
4194
+ // Computed
4195
+ currentCountry = computed(() => {
4196
+ return COUNTRY_OPTIONS.find(c => c.code === this.country()) || COUNTRY_OPTIONS[0];
4197
+ }, ...(ngDevMode ? [{ debugName: "currentCountry" }] : []));
4198
+ currentFlag = computed(() => this.currentCountry().flag, ...(ngDevMode ? [{ debugName: "currentFlag" }] : []));
4199
+ currentCode = computed(() => this.currentCountry().dialCode, ...(ngDevMode ? [{ debugName: "currentCode" }] : []));
4200
+ currentPlaceholder = computed(() => this.currentCountry().placeholder, ...(ngDevMode ? [{ debugName: "currentPlaceholder" }] : []));
4201
+ isComplete = computed(() => {
4202
+ const digits = this.value().replace(/\D/g, '');
4203
+ const config = this.currentCountry();
4204
+ return digits.length >= config.minLength;
4205
+ }, ...(ngDevMode ? [{ debugName: "isComplete" }] : []));
4206
+ hasValue = computed(() => {
4207
+ const val = this.value();
4208
+ return val !== '' && val !== null && val !== undefined;
4209
+ }, ...(ngDevMode ? [{ debugName: "hasValue" }] : []));
4210
+ hostClasses = computed(() => classNames('studio-phone-input', `studio-phone-input--${this.variant()}`, `studio-phone-input--${this.size()}`, `studio-phone-input--radius-${this.radius()}`, this.error() && 'studio-phone-input--error', this.disabled() && 'studio-phone-input--disabled', this.readonly() && 'studio-phone-input--readonly', this.loading() && 'studio-phone-input--loading', this.fullWidth() && 'studio-phone-input--full-width', this.isFocused() && 'studio-phone-input--focused', this.isTouched() && 'studio-phone-input--touched', this.hasValue() && 'studio-phone-input--has-value', this.showCountrySelector() && 'studio-phone-input--with-selector'), ...(ngDevMode ? [{ debugName: "hostClasses" }] : []));
4211
+ ariaDescribedByValue = computed(() => {
4212
+ const ids = [];
4213
+ if (this.hint())
4214
+ ids.push(this.hintId);
4215
+ if (this.error() && this.errorMessage())
4216
+ ids.push(this.errorId);
4217
+ return ids.length > 0 ? ids.join(' ') : null;
4218
+ }, ...(ngDevMode ? [{ debugName: "ariaDescribedByValue" }] : []));
4219
+ hintId = `${this.generatedId}-hint`;
4220
+ errorId = `${this.generatedId}-error`;
4221
+ constructor() {
4222
+ effect(() => {
4223
+ if (this.autoFocus() && this.inputEl()) {
4224
+ setTimeout(() => this.inputEl()?.nativeElement.focus(), 0);
4225
+ }
4226
+ });
4227
+ // Re-format when country changes
4228
+ effect(() => {
4229
+ const country = this.country();
4230
+ const currentValue = this.value();
4231
+ if (currentValue) {
4232
+ const formatted = this.formatPhoneNumber(currentValue);
4233
+ this.displayValue.set(formatted);
4234
+ }
4235
+ });
4236
+ }
4237
+ // ControlValueAccessor
4238
+ writeValue(value) {
4239
+ const formatted = this.formatPhoneNumber(value ?? '');
4240
+ this.value.set(value ?? '');
4241
+ this.displayValue.set(formatted);
4242
+ }
4243
+ registerOnChange(fn) {
4244
+ this.onChange = fn;
4245
+ }
4246
+ registerOnTouched(fn) {
4247
+ this.onTouched = fn;
4248
+ }
4249
+ setDisabledState(isDisabled) { }
4250
+ // Validator
4251
+ validate(control) {
4252
+ if (!control.value)
4253
+ return null;
4254
+ const digits = control.value.replace(/\D/g, '');
4255
+ const config = this.currentCountry();
4256
+ if (digits.length < config.minLength) {
4257
+ return { phoneIncomplete: { value: control.value, required: config.minLength, actual: digits.length } };
4258
+ }
4259
+ return null;
4260
+ }
4261
+ // Country selector
4262
+ toggleDropdown() {
4263
+ if (this.disabled() || this.readonly())
4264
+ return;
4265
+ this.isDropdownOpen.update(v => !v);
4266
+ }
4267
+ selectCountry(country) {
4268
+ this.country.set(country.code);
4269
+ this.isDropdownOpen.set(false);
4270
+ this.countryChange.emit(country.code);
4271
+ // Clear current value and set new country code
4272
+ const newCode = country.dialCode;
4273
+ this.value.set('');
4274
+ this.displayValue.set('');
4275
+ // Focus input after selecting
4276
+ setTimeout(() => {
4277
+ this.inputEl()?.nativeElement.focus();
4278
+ }, 0);
4279
+ }
4280
+ closeDropdown() {
4281
+ this.isDropdownOpen.set(false);
4282
+ }
4283
+ // Format phone number for display
4284
+ formatPhoneNumber(value) {
4285
+ let digits = value.replace(/\D/g, '');
4286
+ if (!digits)
4287
+ return '';
4288
+ const config = this.currentCountry();
4289
+ digits = digits.slice(0, config.maxLength);
4290
+ return this.formatByCountry(digits, this.country());
4291
+ }
4292
+ formatByCountry(digits, country) {
4293
+ switch (country) {
4294
+ case 'kz':
4295
+ case 'ru':
4296
+ // +7 XXX XXX XX XX
4297
+ return this.formatPattern(digits, [1, 3, 3, 2, 2], '+');
4298
+ case 'kg':
4299
+ // +996 XXX XXX XXX
4300
+ return this.formatPattern(digits, [3, 3, 3, 3], '+');
4301
+ case 'uz':
4302
+ // +998 XX XXX XX XX
4303
+ return this.formatPattern(digits, [3, 2, 3, 2, 2], '+');
4304
+ case 'tr':
4305
+ // +90 XXX XXX XX XX
4306
+ return this.formatPattern(digits, [2, 3, 3, 2, 2], '+');
4307
+ case 'az':
4308
+ // +994 XX XXX XX XX
4309
+ return this.formatPattern(digits, [3, 2, 3, 2, 2], '+');
4310
+ default:
4311
+ return '+' + digits;
4312
+ }
4313
+ }
4314
+ formatPattern(digits, groups, prefix) {
4315
+ let result = prefix;
4316
+ let index = 0;
4317
+ for (let i = 0; i < groups.length && index < digits.length; i++) {
4318
+ const groupSize = groups[i];
4319
+ const chunk = digits.slice(index, index + groupSize);
4320
+ if (i > 0 && chunk) {
4321
+ result += ' ';
4322
+ }
4323
+ result += chunk;
4324
+ index += groupSize;
4325
+ }
4326
+ return result;
4327
+ }
4328
+ // Event handlers
4329
+ handleInput(event) {
4330
+ const target = event.target;
4331
+ const cursorPos = target.selectionStart || 0;
4332
+ const oldValue = this.displayValue();
4333
+ let rawValue = target.value;
4334
+ const formatted = this.formatPhoneNumber(rawValue);
4335
+ const rawDigits = rawValue.replace(/\D/g, '');
4336
+ this.value.set(rawDigits ? '+' + rawDigits : '');
4337
+ this.displayValue.set(formatted);
4338
+ target.value = formatted;
4339
+ const lengthDiff = formatted.length - oldValue.length;
4340
+ let newCursorPos = cursorPos + lengthDiff;
4341
+ newCursorPos = Math.max(0, Math.min(newCursorPos, formatted.length));
4342
+ setTimeout(() => {
4343
+ target.setSelectionRange(newCursorPos, newCursorPos);
4344
+ }, 0);
4345
+ const outputValue = rawDigits ? '+' + rawDigits : '';
4346
+ this.onChange(outputValue);
4347
+ this.valueChange.emit(outputValue);
4348
+ }
4349
+ handleFocus(event) {
4350
+ this.isFocused.set(true);
4351
+ if (!this.displayValue() && this.showCountryCode()) {
4352
+ const code = this.currentCountry().dialCode;
4353
+ this.displayValue.set(code + ' ');
4354
+ const target = event.target;
4355
+ target.value = code + ' ';
4356
+ setTimeout(() => {
4357
+ target.setSelectionRange(target.value.length, target.value.length);
4358
+ }, 0);
4359
+ }
4360
+ this.focused.emit(event);
4361
+ }
4362
+ handleBlur(event) {
4363
+ this.isFocused.set(false);
4364
+ this.isTouched.set(true);
4365
+ const digits = this.value().replace(/\D/g, '');
4366
+ const codeDigits = this.currentCountry().dialCode.replace(/\D/g, '');
4367
+ if (digits === codeDigits || digits.length <= codeDigits.length) {
4368
+ this.value.set('');
4369
+ this.displayValue.set('');
4370
+ const target = event.target;
4371
+ target.value = '';
4372
+ this.onChange('');
4373
+ }
4374
+ this.onTouched();
4375
+ this.blurred.emit(event);
4376
+ }
4377
+ handleKeyDown(event) {
4378
+ const target = event.target;
4379
+ const cursorPos = target.selectionStart || 0;
4380
+ // Allow: backspace, delete, tab, escape, enter, arrows
4381
+ if ([8, 46, 9, 27, 13, 37, 38, 39, 40].includes(event.keyCode)) {
4382
+ return;
4383
+ }
4384
+ // Allow: Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X
4385
+ if ((event.ctrlKey || event.metaKey) && ['a', 'c', 'v', 'x'].includes(event.key.toLowerCase())) {
4386
+ return;
4387
+ }
4388
+ // Allow: + at the beginning
4389
+ if (event.key === '+' && cursorPos === 0) {
4390
+ return;
4391
+ }
4392
+ // Block non-numeric
4393
+ if (!/^\d$/.test(event.key)) {
4394
+ event.preventDefault();
4395
+ }
4396
+ // Block if max length reached
4397
+ const digits = target.value.replace(/\D/g, '');
4398
+ if (digits.length >= this.currentCountry().maxLength && target.selectionStart === target.selectionEnd) {
4399
+ event.preventDefault();
4400
+ }
4401
+ }
4402
+ handleContainerClick(event) {
4403
+ // Close dropdown when clicking outside selector
4404
+ const target = event.target;
4405
+ if (!target.closest('.studio-phone-input__selector')) {
4406
+ this.isDropdownOpen.set(false);
4407
+ }
4408
+ }
4409
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PhoneInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4410
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: PhoneInputComponent, isStandalone: true, selector: "studio-phone-input", inputs: { variantInput: { classPropertyName: "variantInput", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, sizeInput: { classPropertyName: "sizeInput", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, radiusInput: { classPropertyName: "radiusInput", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, country: { classPropertyName: "country", publicName: "country", isSignal: true, isRequired: false, transformFunction: null }, showCountrySelector: { classPropertyName: "showCountrySelector", publicName: "showCountrySelector", isSignal: true, isRequired: false, transformFunction: null }, showFlag: { classPropertyName: "showFlag", publicName: "showFlag", isSignal: true, isRequired: false, transformFunction: null }, showCountryCode: { classPropertyName: "showCountryCode", publicName: "showCountryCode", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { country: "countryChange", valueChange: "valueChange", countryChange: "countryChange", focused: "focused", blurred: "blurred" }, host: { properties: { "class": "hostClasses()" } }, providers: [
4411
+ {
4412
+ provide: NG_VALUE_ACCESSOR,
4413
+ useExisting: forwardRef(() => PhoneInputComponent),
4414
+ multi: true
4415
+ },
4416
+ {
4417
+ provide: NG_VALIDATORS,
4418
+ useExisting: forwardRef(() => PhoneInputComponent),
4419
+ multi: true
4420
+ }
4421
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (label()) {\n <label [for]=\"id() || generatedId\" class=\"studio-phone-input__label\">\n {{ label() }}\n @if (required()) {\n <span class=\"studio-phone-input__required\">*</span>\n }\n </label>\n}\n\n<div class=\"studio-phone-input__container\" (click)=\"handleContainerClick($event)\">\n @if (showCountrySelector()) {\n <div class=\"studio-phone-input__selector\">\n <button\n type=\"button\"\n class=\"studio-phone-input__selector-btn\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n aria-haspopup=\"listbox\">\n <span class=\"studio-phone-input__selector-flag\">{{ currentFlag() }}</span>\n <studio-icon name=\"chevron-down\" [size]=\"14\" class=\"studio-phone-input__selector-arrow\" />\n </button>\n\n @if (isDropdownOpen()) {\n <div class=\"studio-phone-input__dropdown\" role=\"listbox\">\n @for (option of countryOptions; track option.code) {\n <button\n type=\"button\"\n class=\"studio-phone-input__dropdown-item\"\n [class.studio-phone-input__dropdown-item--selected]=\"option.code === country()\"\n role=\"option\"\n [attr.aria-selected]=\"option.code === country()\"\n (click)=\"selectCountry(option)\">\n <span class=\"studio-phone-input__dropdown-flag\">{{ option.flag }}</span>\n <span class=\"studio-phone-input__dropdown-name\">{{ option.name }}</span>\n <span class=\"studio-phone-input__dropdown-code\">{{ option.dialCode }}</span>\n </button>\n }\n </div>\n }\n </div>\n } @else if (showFlag()) {\n <span class=\"studio-phone-input__flag\">\n {{ currentFlag() }}\n </span>\n }\n\n <input\n #inputElement\n type=\"tel\"\n inputmode=\"tel\"\n class=\"studio-phone-input__field\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"currentPlaceholder()\"\n [required]=\"required()\"\n [name]=\"name()\"\n [id]=\"id() || generatedId\"\n [attr.aria-label]=\"ariaLabel() || label() || 'Phone number'\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"ariaDescribedByValue()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n\n @if (loading()) {\n <span class=\"studio-phone-input__loading\">\n <studio-icon name=\"loader-2\" [size]=\"16\" class=\"studio-icon--spin\" />\n </span>\n }\n</div>\n\n@if (hint() && !error()) {\n <span class=\"studio-phone-input__hint\" [id]=\"hintId\">\n {{ hint() }}\n </span>\n}\n\n@if (error() && errorMessage()) {\n <span class=\"studio-phone-input__error\" [id]=\"errorId\" role=\"alert\">\n <studio-icon name=\"alert-circle\" [size]=\"14\" />\n {{ errorMessage() }}\n </span>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.375rem;font-family:var(--studio-font-family)}:host(.studio-phone-input--full-width){width:100%}.studio-phone-input__label{display:block;font-size:.875rem;font-weight:var(--studio-font-weight-medium);color:var(--studio-text-primary);margin-bottom:.25rem}.studio-phone-input__label .studio-phone-input__required{color:var(--studio-error);margin-left:.125rem}.studio-phone-input__container{position:relative;display:flex;align-items:center;transition:all var(--studio-transition-fast)}.studio-phone-input__flag{display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}.studio-phone-input__selector{position:relative;display:flex;align-items:center;flex-shrink:0}.studio-phone-input__selector-btn{display:flex;align-items:center;gap:.25rem;padding:0;background:transparent;border:none;cursor:pointer;color:var(--studio-text-primary);transition:all var(--studio-transition-fast)}.studio-phone-input__selector-btn:hover:not(:disabled){opacity:.8}.studio-phone-input__selector-btn:disabled{cursor:not-allowed;opacity:.6}.studio-phone-input__selector-flag{font-size:1.25rem;line-height:1}.studio-phone-input__selector-arrow{color:var(--studio-text-secondary);transition:transform var(--studio-transition-fast)}:host(.studio-phone-input--focused) .studio-phone-input__selector-arrow{color:var(--studio-primary)}.studio-phone-input__dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;min-width:200px;max-height:280px;overflow-y:auto;background:var(--studio-bg-primary);border:1px solid var(--studio-border-primary);border-radius:var(--studio-radius-md);box-shadow:var(--studio-shadow-lg);padding:.25rem}.studio-phone-input__dropdown-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;background:transparent;border:none;border-radius:var(--studio-radius-sm);cursor:pointer;text-align:left;color:var(--studio-text-primary);transition:all var(--studio-transition-fast)}.studio-phone-input__dropdown-item:hover{background:var(--studio-bg-secondary)}.studio-phone-input__dropdown-item--selected{background:var(--studio-primary-bg);color:var(--studio-primary)}.studio-phone-input__dropdown-flag{font-size:1.25rem;line-height:1;flex-shrink:0}.studio-phone-input__dropdown-name{flex:1;font-size:.875rem;white-space:nowrap}.studio-phone-input__dropdown-code{font-size:.75rem;color:var(--studio-text-secondary);flex-shrink:0}.studio-phone-input__field{flex:1;width:100%;font-family:inherit;font-size:1rem;color:var(--studio-text-primary);background:transparent;border:none;outline:none;transition:all var(--studio-transition-fast)}.studio-phone-input__field::placeholder{color:var(--studio-text-tertiary)}.studio-phone-input__field:disabled{cursor:not-allowed;opacity:.6}.studio-phone-input__field:read-only{cursor:default}.studio-phone-input__loading{display:flex;align-items:center;color:var(--studio-primary);flex-shrink:0}.studio-phone-input__loading .studio-icon--spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.studio-phone-input__hint{font-size:.75rem;color:var(--studio-text-secondary);line-height:1.4}.studio-phone-input__error{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:var(--studio-error);line-height:1.4}:host(.studio-phone-input--outline) .studio-phone-input__container{border:1px solid var(--studio-border-primary);background:var(--studio-bg-primary);border-radius:var(--studio-radius-md)}:host(.studio-phone-input--outline) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){border-color:var(--studio-primary)}:host(.studio-phone-input--outline.studio-phone-input--focused) .studio-phone-input__container{border-color:var(--studio-primary);box-shadow:0 0 0 3px var(--studio-primary-bg)}:host(.studio-phone-input--outline.studio-phone-input--error) .studio-phone-input__container{border-color:var(--studio-error)}:host(.studio-phone-input--outline.studio-phone-input--error) .studio-phone-input__container:hover{border-color:var(--studio-error)}:host(.studio-phone-input--outline.studio-phone-input--error.studio-phone-input--focused) .studio-phone-input__container{box-shadow:0 0 0 3px #ef44441a}:host(.studio-phone-input--outline.studio-phone-input--disabled) .studio-phone-input__container{background:var(--studio-bg-secondary);border-color:var(--studio-border-secondary)}:host(.studio-phone-input--filled) .studio-phone-input__container{background:var(--studio-bg-secondary);border:none;border-bottom:2px solid var(--studio-border-primary);border-radius:var(--studio-radius-md) var(--studio-radius-md) 0 0}:host(.studio-phone-input--filled) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){background:var(--studio-bg-tertiary)}:host(.studio-phone-input--filled.studio-phone-input--focused) .studio-phone-input__container{border-bottom-color:var(--studio-primary);background:var(--studio-bg-tertiary)}:host(.studio-phone-input--filled.studio-phone-input--error) .studio-phone-input__container{border-bottom-color:var(--studio-error)}:host(.studio-phone-input--filled.studio-phone-input--disabled) .studio-phone-input__container{background:var(--studio-bg-secondary);opacity:.6}:host(.studio-phone-input--underline) .studio-phone-input__container{background:transparent;border:none;border-bottom:1px solid var(--studio-border-primary);border-radius:0}:host(.studio-phone-input--underline) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){border-bottom-color:var(--studio-primary)}:host(.studio-phone-input--underline.studio-phone-input--focused) .studio-phone-input__container{border-bottom:2px solid var(--studio-primary)}:host(.studio-phone-input--underline.studio-phone-input--error) .studio-phone-input__container{border-bottom-color:var(--studio-error)}:host(.studio-phone-input--underline.studio-phone-input--disabled) .studio-phone-input__container{border-bottom-style:dashed;opacity:.6}:host(.studio-phone-input--sm) .studio-phone-input__field{height:2rem;font-size:.875rem;padding:0 .75rem}:host(.studio-phone-input--sm) .studio-phone-input__flag{padding-left:.75rem;font-size:1rem}:host(.studio-phone-input--sm) .studio-phone-input__selector{padding-left:.75rem}:host(.studio-phone-input--sm) .studio-phone-input__selector-flag{font-size:1rem}:host(.studio-phone-input--sm) .studio-phone-input__loading{padding-right:.5rem}:host(.studio-phone-input--md) .studio-phone-input__field{height:2.5rem;font-size:1rem;padding:0 1rem}:host(.studio-phone-input--md) .studio-phone-input__flag{padding-left:1rem;font-size:1.25rem}:host(.studio-phone-input--md) .studio-phone-input__selector{padding-left:1rem}:host(.studio-phone-input--md) .studio-phone-input__selector-flag{font-size:1.25rem}:host(.studio-phone-input--md) .studio-phone-input__loading{padding-right:.75rem}:host(.studio-phone-input--lg) .studio-phone-input__field{height:3rem;font-size:1.125rem;padding:0 1.25rem}:host(.studio-phone-input--lg) .studio-phone-input__flag{padding-left:1.25rem;font-size:1.5rem}:host(.studio-phone-input--lg) .studio-phone-input__selector{padding-left:1.25rem}:host(.studio-phone-input--lg) .studio-phone-input__selector-flag{font-size:1.5rem}:host(.studio-phone-input--lg) .studio-phone-input__loading{padding-right:1rem}:host(.studio-phone-input--radius-none) .studio-phone-input__container{border-radius:0}:host(.studio-phone-input--radius-sm) .studio-phone-input__container{border-radius:var(--studio-radius-sm)}:host(.studio-phone-input--radius-md) .studio-phone-input__container{border-radius:var(--studio-radius-md)}:host(.studio-phone-input--radius-lg) .studio-phone-input__container{border-radius:var(--studio-radius-lg)}:host(.studio-phone-input--radius-full) .studio-phone-input__container{border-radius:9999px}:host(.studio-phone-input--filled.studio-phone-input--radius-none) .studio-phone-input__container{border-radius:0}:host(.studio-phone-input--filled.studio-phone-input--radius-sm) .studio-phone-input__container{border-radius:var(--studio-radius-sm) var(--studio-radius-sm) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-md) .studio-phone-input__container{border-radius:var(--studio-radius-md) var(--studio-radius-md) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-lg) .studio-phone-input__container{border-radius:var(--studio-radius-lg) var(--studio-radius-lg) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-full) .studio-phone-input__container{border-radius:9999px 9999px 0 0}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "studio-icon", inputs: ["name", "size", "color", "strokeWidth", "absoluteStrokeWidth", "showFallback", "fallbackIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4422
+ }
4423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PhoneInputComponent, decorators: [{
4424
+ type: Component,
4425
+ args: [{ selector: 'studio-phone-input', imports: [IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
4426
+ {
4427
+ provide: NG_VALUE_ACCESSOR,
4428
+ useExisting: forwardRef(() => PhoneInputComponent),
4429
+ multi: true
4430
+ },
4431
+ {
4432
+ provide: NG_VALIDATORS,
4433
+ useExisting: forwardRef(() => PhoneInputComponent),
4434
+ multi: true
4435
+ }
4436
+ ], host: {
4437
+ '[class]': 'hostClasses()',
4438
+ }, template: "@if (label()) {\n <label [for]=\"id() || generatedId\" class=\"studio-phone-input__label\">\n {{ label() }}\n @if (required()) {\n <span class=\"studio-phone-input__required\">*</span>\n }\n </label>\n}\n\n<div class=\"studio-phone-input__container\" (click)=\"handleContainerClick($event)\">\n @if (showCountrySelector()) {\n <div class=\"studio-phone-input__selector\">\n <button\n type=\"button\"\n class=\"studio-phone-input__selector-btn\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n aria-haspopup=\"listbox\">\n <span class=\"studio-phone-input__selector-flag\">{{ currentFlag() }}</span>\n <studio-icon name=\"chevron-down\" [size]=\"14\" class=\"studio-phone-input__selector-arrow\" />\n </button>\n\n @if (isDropdownOpen()) {\n <div class=\"studio-phone-input__dropdown\" role=\"listbox\">\n @for (option of countryOptions; track option.code) {\n <button\n type=\"button\"\n class=\"studio-phone-input__dropdown-item\"\n [class.studio-phone-input__dropdown-item--selected]=\"option.code === country()\"\n role=\"option\"\n [attr.aria-selected]=\"option.code === country()\"\n (click)=\"selectCountry(option)\">\n <span class=\"studio-phone-input__dropdown-flag\">{{ option.flag }}</span>\n <span class=\"studio-phone-input__dropdown-name\">{{ option.name }}</span>\n <span class=\"studio-phone-input__dropdown-code\">{{ option.dialCode }}</span>\n </button>\n }\n </div>\n }\n </div>\n } @else if (showFlag()) {\n <span class=\"studio-phone-input__flag\">\n {{ currentFlag() }}\n </span>\n }\n\n <input\n #inputElement\n type=\"tel\"\n inputmode=\"tel\"\n class=\"studio-phone-input__field\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"currentPlaceholder()\"\n [required]=\"required()\"\n [name]=\"name()\"\n [id]=\"id() || generatedId\"\n [attr.aria-label]=\"ariaLabel() || label() || 'Phone number'\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"ariaDescribedByValue()\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n\n @if (loading()) {\n <span class=\"studio-phone-input__loading\">\n <studio-icon name=\"loader-2\" [size]=\"16\" class=\"studio-icon--spin\" />\n </span>\n }\n</div>\n\n@if (hint() && !error()) {\n <span class=\"studio-phone-input__hint\" [id]=\"hintId\">\n {{ hint() }}\n </span>\n}\n\n@if (error() && errorMessage()) {\n <span class=\"studio-phone-input__error\" [id]=\"errorId\" role=\"alert\">\n <studio-icon name=\"alert-circle\" [size]=\"14\" />\n {{ errorMessage() }}\n </span>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.375rem;font-family:var(--studio-font-family)}:host(.studio-phone-input--full-width){width:100%}.studio-phone-input__label{display:block;font-size:.875rem;font-weight:var(--studio-font-weight-medium);color:var(--studio-text-primary);margin-bottom:.25rem}.studio-phone-input__label .studio-phone-input__required{color:var(--studio-error);margin-left:.125rem}.studio-phone-input__container{position:relative;display:flex;align-items:center;transition:all var(--studio-transition-fast)}.studio-phone-input__flag{display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}.studio-phone-input__selector{position:relative;display:flex;align-items:center;flex-shrink:0}.studio-phone-input__selector-btn{display:flex;align-items:center;gap:.25rem;padding:0;background:transparent;border:none;cursor:pointer;color:var(--studio-text-primary);transition:all var(--studio-transition-fast)}.studio-phone-input__selector-btn:hover:not(:disabled){opacity:.8}.studio-phone-input__selector-btn:disabled{cursor:not-allowed;opacity:.6}.studio-phone-input__selector-flag{font-size:1.25rem;line-height:1}.studio-phone-input__selector-arrow{color:var(--studio-text-secondary);transition:transform var(--studio-transition-fast)}:host(.studio-phone-input--focused) .studio-phone-input__selector-arrow{color:var(--studio-primary)}.studio-phone-input__dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;min-width:200px;max-height:280px;overflow-y:auto;background:var(--studio-bg-primary);border:1px solid var(--studio-border-primary);border-radius:var(--studio-radius-md);box-shadow:var(--studio-shadow-lg);padding:.25rem}.studio-phone-input__dropdown-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;background:transparent;border:none;border-radius:var(--studio-radius-sm);cursor:pointer;text-align:left;color:var(--studio-text-primary);transition:all var(--studio-transition-fast)}.studio-phone-input__dropdown-item:hover{background:var(--studio-bg-secondary)}.studio-phone-input__dropdown-item--selected{background:var(--studio-primary-bg);color:var(--studio-primary)}.studio-phone-input__dropdown-flag{font-size:1.25rem;line-height:1;flex-shrink:0}.studio-phone-input__dropdown-name{flex:1;font-size:.875rem;white-space:nowrap}.studio-phone-input__dropdown-code{font-size:.75rem;color:var(--studio-text-secondary);flex-shrink:0}.studio-phone-input__field{flex:1;width:100%;font-family:inherit;font-size:1rem;color:var(--studio-text-primary);background:transparent;border:none;outline:none;transition:all var(--studio-transition-fast)}.studio-phone-input__field::placeholder{color:var(--studio-text-tertiary)}.studio-phone-input__field:disabled{cursor:not-allowed;opacity:.6}.studio-phone-input__field:read-only{cursor:default}.studio-phone-input__loading{display:flex;align-items:center;color:var(--studio-primary);flex-shrink:0}.studio-phone-input__loading .studio-icon--spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.studio-phone-input__hint{font-size:.75rem;color:var(--studio-text-secondary);line-height:1.4}.studio-phone-input__error{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:var(--studio-error);line-height:1.4}:host(.studio-phone-input--outline) .studio-phone-input__container{border:1px solid var(--studio-border-primary);background:var(--studio-bg-primary);border-radius:var(--studio-radius-md)}:host(.studio-phone-input--outline) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){border-color:var(--studio-primary)}:host(.studio-phone-input--outline.studio-phone-input--focused) .studio-phone-input__container{border-color:var(--studio-primary);box-shadow:0 0 0 3px var(--studio-primary-bg)}:host(.studio-phone-input--outline.studio-phone-input--error) .studio-phone-input__container{border-color:var(--studio-error)}:host(.studio-phone-input--outline.studio-phone-input--error) .studio-phone-input__container:hover{border-color:var(--studio-error)}:host(.studio-phone-input--outline.studio-phone-input--error.studio-phone-input--focused) .studio-phone-input__container{box-shadow:0 0 0 3px #ef44441a}:host(.studio-phone-input--outline.studio-phone-input--disabled) .studio-phone-input__container{background:var(--studio-bg-secondary);border-color:var(--studio-border-secondary)}:host(.studio-phone-input--filled) .studio-phone-input__container{background:var(--studio-bg-secondary);border:none;border-bottom:2px solid var(--studio-border-primary);border-radius:var(--studio-radius-md) var(--studio-radius-md) 0 0}:host(.studio-phone-input--filled) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){background:var(--studio-bg-tertiary)}:host(.studio-phone-input--filled.studio-phone-input--focused) .studio-phone-input__container{border-bottom-color:var(--studio-primary);background:var(--studio-bg-tertiary)}:host(.studio-phone-input--filled.studio-phone-input--error) .studio-phone-input__container{border-bottom-color:var(--studio-error)}:host(.studio-phone-input--filled.studio-phone-input--disabled) .studio-phone-input__container{background:var(--studio-bg-secondary);opacity:.6}:host(.studio-phone-input--underline) .studio-phone-input__container{background:transparent;border:none;border-bottom:1px solid var(--studio-border-primary);border-radius:0}:host(.studio-phone-input--underline) .studio-phone-input__container:hover:not(:has(.studio-phone-input__field:disabled)){border-bottom-color:var(--studio-primary)}:host(.studio-phone-input--underline.studio-phone-input--focused) .studio-phone-input__container{border-bottom:2px solid var(--studio-primary)}:host(.studio-phone-input--underline.studio-phone-input--error) .studio-phone-input__container{border-bottom-color:var(--studio-error)}:host(.studio-phone-input--underline.studio-phone-input--disabled) .studio-phone-input__container{border-bottom-style:dashed;opacity:.6}:host(.studio-phone-input--sm) .studio-phone-input__field{height:2rem;font-size:.875rem;padding:0 .75rem}:host(.studio-phone-input--sm) .studio-phone-input__flag{padding-left:.75rem;font-size:1rem}:host(.studio-phone-input--sm) .studio-phone-input__selector{padding-left:.75rem}:host(.studio-phone-input--sm) .studio-phone-input__selector-flag{font-size:1rem}:host(.studio-phone-input--sm) .studio-phone-input__loading{padding-right:.5rem}:host(.studio-phone-input--md) .studio-phone-input__field{height:2.5rem;font-size:1rem;padding:0 1rem}:host(.studio-phone-input--md) .studio-phone-input__flag{padding-left:1rem;font-size:1.25rem}:host(.studio-phone-input--md) .studio-phone-input__selector{padding-left:1rem}:host(.studio-phone-input--md) .studio-phone-input__selector-flag{font-size:1.25rem}:host(.studio-phone-input--md) .studio-phone-input__loading{padding-right:.75rem}:host(.studio-phone-input--lg) .studio-phone-input__field{height:3rem;font-size:1.125rem;padding:0 1.25rem}:host(.studio-phone-input--lg) .studio-phone-input__flag{padding-left:1.25rem;font-size:1.5rem}:host(.studio-phone-input--lg) .studio-phone-input__selector{padding-left:1.25rem}:host(.studio-phone-input--lg) .studio-phone-input__selector-flag{font-size:1.5rem}:host(.studio-phone-input--lg) .studio-phone-input__loading{padding-right:1rem}:host(.studio-phone-input--radius-none) .studio-phone-input__container{border-radius:0}:host(.studio-phone-input--radius-sm) .studio-phone-input__container{border-radius:var(--studio-radius-sm)}:host(.studio-phone-input--radius-md) .studio-phone-input__container{border-radius:var(--studio-radius-md)}:host(.studio-phone-input--radius-lg) .studio-phone-input__container{border-radius:var(--studio-radius-lg)}:host(.studio-phone-input--radius-full) .studio-phone-input__container{border-radius:9999px}:host(.studio-phone-input--filled.studio-phone-input--radius-none) .studio-phone-input__container{border-radius:0}:host(.studio-phone-input--filled.studio-phone-input--radius-sm) .studio-phone-input__container{border-radius:var(--studio-radius-sm) var(--studio-radius-sm) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-md) .studio-phone-input__container{border-radius:var(--studio-radius-md) var(--studio-radius-md) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-lg) .studio-phone-input__container{border-radius:var(--studio-radius-lg) var(--studio-radius-lg) 0 0}:host(.studio-phone-input--filled.studio-phone-input--radius-full) .studio-phone-input__container{border-radius:9999px 9999px 0 0}\n"] }]
4439
+ }], ctorParameters: () => [], propDecorators: { inputEl: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }], variantInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], sizeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], radiusInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], country: [{ type: i0.Input, args: [{ isSignal: true, alias: "country", required: false }] }, { type: i0.Output, args: ["countryChange"] }], showCountrySelector: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCountrySelector", required: false }] }], showFlag: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFlag", required: false }] }], showCountryCode: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCountryCode", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], autoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoFocus", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], countryChange: [{ type: i0.Output, args: ["countryChange"] }], focused: [{ type: i0.Output, args: ["focused"] }], blurred: [{ type: i0.Output, args: ["blurred"] }] } });
4440
+
4138
4441
  class ModalComponent {
4139
4442
  destroyRef = inject(DestroyRef);
4140
4443
  // Inputs
@@ -6905,5 +7208,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
6905
7208
  * Generated bundle index. Do not edit.
6906
7209
  */
6907
7210
 
6908
- export { BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, CardComponent, ChatComponent, ChatInputComponent, ChatMessageComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, IconComponent, InputComponent, InspectorComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, StudioConfigService, SwitchComponent, TableColumnDirective, TableComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, TooltipComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
7211
+ export { BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, COUNTRY_OPTIONS, CardComponent, ChatComponent, ChatInputComponent, ChatMessageComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, IconComponent, InputComponent, InspectorComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PhoneInputComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, StudioConfigService, SwitchComponent, TableColumnDirective, TableComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, TooltipComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
6909
7212
  //# sourceMappingURL=eduboxpro-studio.mjs.map