reneco-advanced-input-module 0.0.23 → 0.0.25

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.
Files changed (68) hide show
  1. package/dist/cjs/{index-BTSzTkSZ.js → index-BtdDZbi5.js} +11 -4
  2. package/dist/cjs/index-BtdDZbi5.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +3 -4
  4. package/dist/cjs/loader.cjs.js.map +1 -1
  5. package/dist/cjs/ocr-file-uploader.cjs.entry.js +1 -1
  6. package/dist/cjs/voice-input-module.cjs.entry.js +43 -7
  7. package/dist/cjs/voice-input-module.cjs.entry.js.map +1 -1
  8. package/dist/cjs/voice-input-module.cjs.js +3 -4
  9. package/dist/cjs/voice-input-module.cjs.js.map +1 -1
  10. package/dist/cjs/voice-input-module.entry.cjs.js.map +1 -1
  11. package/dist/collection/components/voice-input-module/voice-input-module.css +34 -0
  12. package/dist/collection/components/voice-input-module/voice-input-module.js +43 -6
  13. package/dist/collection/components/voice-input-module/voice-input-module.js.map +1 -1
  14. package/dist/components/voice-input-module.js +43 -6
  15. package/dist/components/voice-input-module.js.map +1 -1
  16. package/dist/esm/{index-jmc2yzBp.js → index-a7QWC-5I.js} +11 -5
  17. package/dist/esm/index-a7QWC-5I.js.map +1 -0
  18. package/dist/esm/loader.js +3 -4
  19. package/dist/esm/loader.js.map +1 -1
  20. package/dist/esm/ocr-file-uploader.entry.js +1 -1
  21. package/dist/esm/voice-input-module.entry.js +43 -7
  22. package/dist/esm/voice-input-module.entry.js.map +1 -1
  23. package/dist/esm/voice-input-module.js +3 -4
  24. package/dist/esm/voice-input-module.js.map +1 -1
  25. package/dist/types/components/voice-input-module/voice-input-module.d.ts +3 -0
  26. package/dist/voice-input-module/loader.esm.js.map +1 -1
  27. package/dist/voice-input-module/{p-920964b2.entry.js → p-334644ec.entry.js} +3 -3
  28. package/dist/voice-input-module/p-334644ec.entry.js.map +1 -0
  29. package/dist/voice-input-module/p-a7QWC-5I.js +3 -0
  30. package/dist/voice-input-module/p-a7QWC-5I.js.map +1 -0
  31. package/dist/voice-input-module/{p-a5eeaf1c.entry.js → p-ba3d83d1.entry.js} +2 -2
  32. package/dist/voice-input-module/voice-input-module.css +6 -0
  33. package/dist/voice-input-module/voice-input-module.entry.esm.js.map +1 -1
  34. package/dist/voice-input-module/voice-input-module.esm.js +1 -1
  35. package/dist/voice-input-module/voice-input-module.esm.js.map +1 -1
  36. package/package.json +1 -1
  37. package/www/build/loader.esm.js.map +1 -1
  38. package/www/build/{p-920964b2.entry.js → p-334644ec.entry.js} +3 -3
  39. package/www/build/p-334644ec.entry.js.map +1 -0
  40. package/www/build/p-6cd2a3a1.css +6 -0
  41. package/www/build/p-a7QWC-5I.js +3 -0
  42. package/www/build/p-a7QWC-5I.js.map +1 -0
  43. package/www/build/{p-a5eeaf1c.entry.js → p-ba3d83d1.entry.js} +2 -2
  44. package/www/build/p-dfdcd9a6.js +2 -0
  45. package/www/build/voice-input-module.css +6 -0
  46. package/www/build/voice-input-module.entry.esm.js.map +1 -1
  47. package/www/build/voice-input-module.esm.js +1 -1
  48. package/www/build/voice-input-module.esm.js.map +1 -1
  49. package/www/index.html +1 -1
  50. package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -8
  51. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +0 -1
  52. package/dist/cjs/index-BTSzTkSZ.js.map +0 -1
  53. package/dist/esm/app-globals-DQuL1Twl.js +0 -6
  54. package/dist/esm/app-globals-DQuL1Twl.js.map +0 -1
  55. package/dist/esm/index-jmc2yzBp.js.map +0 -1
  56. package/dist/voice-input-module/p-920964b2.entry.js.map +0 -1
  57. package/dist/voice-input-module/p-DQuL1Twl.js +0 -2
  58. package/dist/voice-input-module/p-DQuL1Twl.js.map +0 -1
  59. package/dist/voice-input-module/p-jmc2yzBp.js +0 -3
  60. package/dist/voice-input-module/p-jmc2yzBp.js.map +0 -1
  61. package/www/build/p-920964b2.entry.js.map +0 -1
  62. package/www/build/p-DQuL1Twl.js +0 -2
  63. package/www/build/p-DQuL1Twl.js.map +0 -1
  64. package/www/build/p-cbf8974a.js +0 -2
  65. package/www/build/p-jmc2yzBp.js +0 -3
  66. package/www/build/p-jmc2yzBp.js.map +0 -1
  67. /package/dist/voice-input-module/{p-a5eeaf1c.entry.js.map → p-ba3d83d1.entry.js.map} +0 -0
  68. /package/www/build/{p-a5eeaf1c.entry.js.map → p-ba3d83d1.entry.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h } from './index-jmc2yzBp.js';
1
+ import { r as registerInstance, h } from './index-a7QWC-5I.js';
2
2
 
3
3
  const ocrFileUploaderCss = ".upload-container{display:inline-block;cursor:pointer}.upload-button{display:flex;align-items:center;justify-content:center;transition:transform 0.2s ease;user-select:none;width:var(--button-size, 50px);height:var(--button-size, 50px)}.upload-button svg{width:100%;height:100%;stroke:var(--button-bg, #10b981);transition:stroke 0.2s ease, transform 0.2s ease}.upload-button:hover svg{transform:scale(1.05);stroke:var(--button-hover, #059669)}";
4
4
 
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h as h$1 } from './index-jmc2yzBp.js';
1
+ import { r as registerInstance, c as createEvent, h as h$1 } from './index-a7QWC-5I.js';
2
2
 
3
3
  const TRANSCRIPTION_MODELS = {
4
4
  openai: ['gpt-4o-transcribe', 'gpt-4o-mini-transcribe', 'whisper-1'],
@@ -4325,7 +4325,7 @@ const defineCustomElements = async (win, options) => {
4325
4325
 
4326
4326
  (function(){if("undefined"!==typeof window&&void 0!==window.Reflect&&void 0!==window.customElements){var a=HTMLElement;window.HTMLElement=function(){return Reflect.construct(a,[],this.constructor)};HTMLElement.prototype=a.prototype;HTMLElement.prototype.constructor=HTMLElement;Object.setPrototypeOf(HTMLElement,a);}})();
4327
4327
 
4328
- const voiceInputModuleCss = ":host{display:block;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif}.row-audio-area{display:flex;flex-direction:row;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}.voice-recorder-container{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:0.5rem;background:#ffffff;margin:0 auto}.voice-recorder-container-debug{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:0.5rem;background:#ffffff;margin:0 auto}.upload-record-container{display:inline-flex;cursor:pointer}.upload-record-button{display:flex;align-items:center;justify-content:center;transition:transform 0.2s ease, box-shadow 0.2s ease;user-select:none}.upload-record-button svg{width:100%;height:100%;transition:transform 0.2s ease}.upload-record-container:hover .upload-record-button svg{transform:scale(1.05)}.upload-record-button svg path{}.record-button{display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#ee4444;color:white;cursor:pointer;transition:all 0.2s ease;position:relative;overflow:hidden;flex-shrink:0}.record-button:hover:not(:disabled){background:#dd3333;transform:scale(1.05)}.record-button:disabled{opacity:0.6;cursor:not-allowed}.record-button.recording{background:#dd3333;animation:pulse 1.5s infinite}.record-button.processing{background:#3b82f6}@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(239, 68, 68, 0.7)}70%{box-shadow:0 0 0 10px rgba(239, 68, 68, 0)}100%{box-shadow:0 0 0 0 rgba(239, 68, 68, 0)}}.record-icon{width:24px;height:24px;fill:currentColor}.status-text{font-size:0.875rem;color:#6b7280;text-align:center;min-height:1.25rem}.status-text.error{color:#ee4444}.status-text.success{color:#10b981}.debug-panel{width:100%;margin-top:1rem;padding:1rem;background:#f9fafb;border:1px solid #e5e7eb;border-radius:0.375rem;font-family:'Monaco', 'Menlo', 'Ubuntu Mono', monospace;font-size:0.75rem}.debug-title{font-weight:600;margin-bottom:0.5rem;color:#374151}.debug-content{white-space:pre-wrap;word-break:break-word;color:#6b7280;max-height:200px;overflow-y:auto}.permissions-warning{padding:0.75rem;background:#fef3c7;border:1px solid #f59e0b;border-radius:0.375rem;color:#92400e;font-size:0.875rem;text-align:center}.form-preview{width:100%;margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:0.375rem}.form-preview-title{font-weight:600;margin-bottom:0.5rem;color:#1e293b}.form-field{margin-bottom:0.5rem;font-size:0.875rem}.field-name{font-weight:500;color:#475569}.field-value{color:#64748b;margin-left:0.5rem}.field-value.filled{color:#059669;font-weight:500}.voice-filled-form{display:grid;grid-template-columns:repeat(auto-fit, minmax(250px, 1fr));gap:0.5rem;margin-top:1rem}.form-group{display:flex;flex-direction:column;gap:0.15rem}.form-group.full-width{grid-column:1 / -1}.form-header{grid-column:1 / -1;font-weight:600;font-size:1rem;color:#1e293b;margin-top:0.75rem;margin-bottom:0.25rem;padding-bottom:0.25rem;border-bottom:2px solid #e2e8f0}.form-label{font-weight:500;color:#374151;font-size:0.8rem}.required{color:#ee4444;margin-left:0.125rem}.form-input{padding:0.4rem;border:1px solid #d1d5db;border-radius:0.375rem;font-size:0.8rem;transition:border-color 0.2s ease}.form-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59, 130, 246, 0.1)}.form-checkbox{width:auto;padding:0;margin:0}select.form-input{background-color:white;cursor:pointer}input[type=\"date\"].form-input{cursor:pointer}.readonly-select{background:#f9fafb;border:1px solid #d1d5db;border-radius:0.375rem;padding:0.5rem}.select-placeholder{font-size:0.875rem;color:#6b7280;margin-bottom:0.5rem}.select-options-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:0.25rem;max-height:150px;overflow-y:auto}.select-option{background:#e5e7eb;padding:0.25rem 0.5rem;border-radius:0.25rem;font-size:0.875rem;color:#374151}.multiselect-container{display:grid;grid-template-columns:repeat(2, 1fr);gap:0.25rem;padding:0.5rem;border:1px solid #d1d5db;border-radius:0.375rem;background:white}.multiselect-option{display:flex;align-items:center;gap:0.5rem;padding:0.5rem;border-radius:0.25rem;cursor:pointer;transition:background 0.2s ease}.multiselect-option:hover{background:#f3f4f6}.multiselect-option input[type=\"checkbox\"]{width:18px;height:18px;cursor:pointer}.multiselect-option input[type=\"checkbox\"]:checked+.multiselect-label{font-weight:600;color:#059669}.multiselect-label{font-size:0.875rem;color:#374151;user-select:none}ocr-file-uploader{display:block;width:100% !important;height:100% !important;max-width:100% !important;max-height:100% !important}ocr-file-uploader *{max-width:100% !important;max-height:100% !important}";
4328
+ const voiceInputModuleCss = ":host{display:block;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif}.row-audio-area{display:flex;flex-direction:row;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}.voice-recorder-container{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:0.5rem;background:#ffffff;margin:0 auto}.voice-recorder-container-debug{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:0.5rem;background:#ffffff;margin:0 auto}.upload-record-container{display:inline-flex;cursor:pointer}.upload-record-button{display:flex;align-items:center;justify-content:center;transition:transform 0.2s ease, box-shadow 0.2s ease;user-select:none}.upload-record-button svg{width:100%;height:100%;transition:transform 0.2s ease}.upload-record-container:hover .upload-record-button svg{transform:scale(1.05)}.upload-record-button svg path{}.record-button{display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#ee4444;color:white;cursor:pointer;transition:all 0.2s ease;position:relative;overflow:hidden;flex-shrink:0}.record-button:hover:not(:disabled){background:#dd3333;transform:scale(1.05)}.record-button:disabled{opacity:0.6;cursor:not-allowed}.record-button.recording{background:#dd3333;animation:pulse 1.5s infinite}.record-button.processing{background:#3b82f6}@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(239, 68, 68, 0.7)}70%{box-shadow:0 0 0 10px rgba(239, 68, 68, 0)}100%{box-shadow:0 0 0 0 rgba(239, 68, 68, 0)}}.record-icon{width:24px;height:24px;fill:currentColor}.status-text{font-size:0.875rem;color:#6b7280;text-align:center;min-height:1.25rem}.status-text.error{color:#ee4444}.status-text.success{color:#10b981}.debug-panel{width:100%;margin-top:1rem;padding:1rem;background:#f9fafb;border:1px solid #e5e7eb;border-radius:0.375rem;font-family:'Monaco', 'Menlo', 'Ubuntu Mono', monospace;font-size:0.75rem}.debug-title{font-weight:600;margin-bottom:0.5rem;color:#374151}.debug-content{white-space:pre-wrap;word-break:break-word;color:#6b7280;max-height:200px;overflow-y:auto}.permissions-warning{padding:0.75rem;background:#fef3c7;border:1px solid #f59e0b;border-radius:0.375rem;color:#92400e;font-size:0.875rem;text-align:center}.form-preview{width:100%;margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:0.375rem}.form-preview-title{font-weight:600;margin-bottom:0.5rem;color:#1e293b}.form-field{margin-bottom:0.5rem;font-size:0.875rem}.field-name{font-weight:500;color:#475569}.field-value{color:#64748b;margin-left:0.5rem}.field-value.filled{color:#059669;font-weight:500}.voice-filled-form{display:grid;grid-template-columns:repeat(auto-fit, minmax(250px, 1fr));gap:0.5rem;margin-top:1rem}.form-group{display:flex;flex-direction:column;gap:0.15rem}.form-group.full-width{grid-column:1 / -1}.form-header{grid-column:1 / -1;font-weight:600;font-size:1rem;color:#1e293b;margin-top:0.75rem;margin-bottom:0.25rem;padding-bottom:0.25rem;border-bottom:2px solid #e2e8f0}.form-label{font-weight:500;color:#374151;font-size:0.8rem}.required{color:#ee4444;margin-left:0.125rem}.form-input{padding:0.4rem;border:1px solid #d1d5db;border-radius:0.375rem;font-size:0.8rem;transition:border-color 0.2s ease}.form-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59, 130, 246, 0.1)}.form-checkbox{width:auto;padding:0;margin:0}select.form-input{background-color:white;cursor:pointer}input[type=\"date\"].form-input{cursor:pointer}.readonly-select{background:#f9fafb;border:1px solid #d1d5db;border-radius:0.375rem;padding:0.5rem}.select-placeholder{font-size:0.875rem;color:#6b7280;margin-bottom:0.5rem}.select-options-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:0.25rem;max-height:150px;overflow-y:auto}.select-option{background:#e5e7eb;padding:0.25rem 0.5rem;border-radius:0.25rem;font-size:0.875rem;color:#374151}.multiselect-container{display:grid;grid-template-columns:repeat(2, 1fr);gap:0.25rem;padding:0.5rem;border:1px solid #d1d5db;border-radius:0.375rem;background:white}.multiselect-option{display:flex;align-items:center;gap:0.5rem;padding:0.5rem;border-radius:0.25rem;cursor:pointer;transition:background 0.2s ease}.multiselect-option:hover{background:#f3f4f6}.multiselect-option input[type=\"checkbox\"]{width:18px;height:18px;cursor:pointer}.multiselect-option input[type=\"checkbox\"]:checked+.multiselect-label{font-weight:600;color:#059669}.multiselect-label{font-size:0.875rem;color:#374151;user-select:none}@keyframes skeleton-shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}.skeleton-circle{border-radius:50%;flex-shrink:0;background:linear-gradient(\r\n 90deg,\r\n #e2e8f0 25%,\r\n #f8fafc 50%,\r\n #e2e8f0 75%\r\n );background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite}.skeleton-status{height:14px;border-radius:7px;width:140px;background:linear-gradient(\r\n 90deg,\r\n #e2e8f0 25%,\r\n #f8fafc 50%,\r\n #e2e8f0 75%\r\n );background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;animation-delay:0.15s}ocr-file-uploader{display:block;width:100% !important;height:100% !important;max-width:100% !important;max-height:100% !important}ocr-file-uploader *{max-width:100% !important;max-height:100% !important}";
4329
4329
 
4330
4330
  // Initialize OCR
4331
4331
  defineCustomElements();
@@ -4367,6 +4367,7 @@ const VoiceFormRecorder = class {
4367
4367
  this.filledData = null;
4368
4368
  this.debugInfo = {};
4369
4369
  this.isReadonlyMode = true; // Start in readonly preview mode
4370
+ this.isInitializing = true;
4370
4371
  this.triggerAudioRecordUpload = () => {
4371
4372
  this.fileInputAudioRecord.click();
4372
4373
  };
@@ -4374,6 +4375,10 @@ const VoiceFormRecorder = class {
4374
4375
  const input = event.target;
4375
4376
  if (!input.files || input.files.length === 0)
4376
4377
  return;
4378
+ if (this.isProcessing || this.isRecording) {
4379
+ input.value = '';
4380
+ return;
4381
+ }
4377
4382
  const file = input.files[0];
4378
4383
  const isEn = this.language === 'en';
4379
4384
  // Validate file type
@@ -4394,7 +4399,18 @@ const VoiceFormRecorder = class {
4394
4399
  this.audioRecorder = new AudioRecorderService();
4395
4400
  }
4396
4401
  componentWillLoad() {
4402
+ // Parse theme only so the skeleton can be styled correctly on first render.
4403
+ // Full initialization runs in componentDidLoad() to give the skeleton time to paint.
4404
+ try {
4405
+ this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();
4406
+ }
4407
+ catch (_a) {
4408
+ this.parsedTheme = this.getDefaultTheme();
4409
+ }
4410
+ }
4411
+ componentDidLoad() {
4397
4412
  this.initializeServices();
4413
+ this.isInitializing = false;
4398
4414
  }
4399
4415
  initializeServices() {
4400
4416
  var _a;
@@ -4592,6 +4608,8 @@ const VoiceFormRecorder = class {
4592
4608
  }
4593
4609
  async processJsonForm(ocrData) {
4594
4610
  var _a, _b, _c;
4611
+ if (this.isProcessing || this.isRecording)
4612
+ return;
4595
4613
  this.isProcessing = true;
4596
4614
  this.hasTransientError = false;
4597
4615
  this.statusMessage = ((_a = this.parsedTheme.texts) === null || _a === void 0 ? void 0 : _a.processing) || (this.language == 'en' ? 'Processing document...' : 'Traitement du document ...');
@@ -4629,6 +4647,8 @@ const VoiceFormRecorder = class {
4629
4647
  }
4630
4648
  async processAudioContent(audioFile) {
4631
4649
  var _a, _b, _c;
4650
+ if (this.isProcessing || this.isRecording)
4651
+ return;
4632
4652
  this.isProcessing = true;
4633
4653
  this.hasTransientError = false;
4634
4654
  this.updateDebugInfo('Audio Captured', { size: audioFile.size, type: audioFile.type });
@@ -4945,7 +4965,7 @@ const VoiceFormRecorder = class {
4945
4965
  textColor: ocrStyle.textColor || '#ffffff'
4946
4966
  }
4947
4967
  };
4948
- const isDisabled = this.isProcessing || this.hasError;
4968
+ const isDisabled = this.isProcessing || this.hasError || this.isRecording;
4949
4969
  return (h$1("div", { style: { width: size, height: size, flexShrink: '0', opacity: isDisabled ? '0.6' : '1', pointerEvents: isDisabled ? 'none' : 'auto' } }, h$1("ocr-file-uploader", { batch: false, "json-schema": this.convertSchemaToOcrFormat(this.parsedSchema), callback: (data) => { this.processJsonForm(data); }, theme: JSON.stringify(ocrTheme), style: { width: '100%', height: '100%' } })));
4950
4970
  }
4951
4971
  convertSchemaToOcrFormat(schema) {
@@ -5000,7 +5020,7 @@ const VoiceFormRecorder = class {
5000
5020
  return;
5001
5021
  const audioStyle = ((_a = this.parsedTheme.buttons) === null || _a === void 0 ? void 0 : _a.audio) || {};
5002
5022
  const size = audioStyle.size || '50px';
5003
- const isDisabled = this.isProcessing || this.hasError;
5023
+ const isDisabled = this.isProcessing || this.hasError || this.isRecording;
5004
5024
  const buttonStyle = {
5005
5025
  stroke: audioStyle.backgroundColor || '#3b82f6',
5006
5026
  fill: audioStyle.backgroundColor || '#3b82f6',
@@ -5029,6 +5049,17 @@ const VoiceFormRecorder = class {
5029
5049
  };
5030
5050
  return (h$1("button", { class: buttonClass, style: buttonStyle, onClick: () => this.handleRecordClick(), disabled: isDisabled, "aria-label": this.isRecording ? 'Stop recording' : 'Start recording' }, this.isProcessing ? (h$1("svg", { class: "record-icon", viewBox: "0 0 24 24" }, h$1("circle", { cx: "12", cy: "12", r: "3" }, h$1("animate", { attributeName: "r", values: "3;6;3", dur: "1s", repeatCount: "indefinite" }), h$1("animate", { attributeName: "opacity", values: "1;0.3;1", dur: "1s", repeatCount: "indefinite" })))) : this.isRecording ? (h$1("svg", { class: "record-icon", viewBox: "0 0 24 24" }, h$1("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2" }))) : (h$1("svg", { class: "record-icon", viewBox: "0 0 24 24" }, h$1("circle", { cx: "12", cy: "12", r: "8" })))));
5031
5051
  }
5052
+ renderLoadingSkeleton() {
5053
+ var _a;
5054
+ const types = this.parsedInputTypes.length > 0 ? this.parsedInputTypes : ['voice'];
5055
+ const containerStyle = this.getContainerStyle();
5056
+ const buttons = (((_a = this.parsedTheme) === null || _a === void 0 ? void 0 : _a.buttons) || {});
5057
+ const getSize = (type) => { var _a, _b; return ((_a = buttons[type]) === null || _a === void 0 ? void 0 : _a.size) || ((_b = buttons.voice) === null || _b === void 0 ? void 0 : _b.size) || '50px'; };
5058
+ return (h$1("div", null, h$1("div", { class: "voice-recorder-container" + (this.debug || this.renderForm ? "-debug" : ""), style: containerStyle }, h$1("div", { class: "row-audio-area" }, types.map(type => {
5059
+ const size = getSize(type);
5060
+ return h$1("div", { class: "skeleton-circle", style: { width: size, height: size } });
5061
+ })), this.displayStatus && h$1("div", { class: "skeleton-status" }))));
5062
+ }
5032
5063
  renderStatusMessage() {
5033
5064
  const hasAnyError = this.hasError || this.hasTransientError;
5034
5065
  const statusClass = [
@@ -5190,7 +5221,8 @@ const VoiceFormRecorder = class {
5190
5221
  };
5191
5222
  }
5192
5223
  getContainerStyle() {
5193
- const c = this.parsedTheme.container || {};
5224
+ var _a;
5225
+ const c = ((_a = this.parsedTheme) === null || _a === void 0 ? void 0 : _a.container) || {};
5194
5226
  return {
5195
5227
  width: c.width || 'auto',
5196
5228
  height: c.height || 'auto',
@@ -5202,15 +5234,19 @@ const VoiceFormRecorder = class {
5202
5234
  };
5203
5235
  }
5204
5236
  getStatusStyle() {
5205
- const s = this.parsedTheme.statusText || {};
5237
+ var _a;
5238
+ const s = ((_a = this.parsedTheme) === null || _a === void 0 ? void 0 : _a.statusText) || {};
5206
5239
  return {
5207
5240
  color: s.color || '#1e293b',
5208
5241
  fontSize: s.fontSize || '14px'
5209
5242
  };
5210
5243
  }
5211
5244
  render() {
5245
+ if (this.isInitializing) {
5246
+ return this.renderLoadingSkeleton();
5247
+ }
5212
5248
  const containerStyle = this.getContainerStyle();
5213
- return (h$1("div", { key: 'd2eb6b74840a57809920b3dbba3fd7dfbeef8531' }, h$1("div", { key: 'e66e1d4fc23176f9024ca20413535440a8be3ce8', class: "voice-recorder-container" + (this.debug || this.renderForm ? "-debug" : ""), style: containerStyle }, h$1("div", { key: '57dd7b882771d1f0bd56a97bfd0a06ffee09428e', class: "row-audio-area" }, this.renderRecordButton(), this.renderUploadRecordButton(), this.renderUploadButton()), this.displayStatus ? this.renderStatusMessage() : "", this.renderForm ? this.renderFormPreview() : "", this.debug ? this.renderDebugPanel() : "")));
5249
+ return (h$1("div", null, h$1("div", { class: "voice-recorder-container" + (this.debug || this.renderForm ? "-debug" : ""), style: containerStyle }, h$1("div", { class: "row-audio-area" }, this.renderRecordButton(), this.renderUploadRecordButton(), this.renderUploadButton()), this.displayStatus ? this.renderStatusMessage() : "", this.renderForm ? this.renderFormPreview() : "", this.debug ? this.renderDebugPanel() : "")));
5214
5250
  }
5215
5251
  static get watchers() { return {
5216
5252
  "formJson": ["initializeServices"],