@praxisui/files-upload 9.0.0-beta.85 → 9.0.0-beta.86

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-21T15:34:49.320Z",
3
+ "generatedAt": "2026-07-22T03:01:56.888Z",
4
4
  "packageName": "@praxisui/files-upload",
5
- "packageVersion": "9.0.0-beta.85",
5
+ "packageVersion": "9.0.0-beta.86",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -7,7 +7,7 @@ import * as i1$1 from '@angular/forms';
7
7
  import { ReactiveFormsModule, FormsModule, FormControl } from '@angular/forms';
8
8
  import * as i10 from '@angular/material/button';
9
9
  import { MatButtonModule } from '@angular/material/button';
10
- import * as i9 from '@angular/material/icon';
10
+ import * as i8 from '@angular/material/icon';
11
11
  import { MatIconModule } from '@angular/material/icon';
12
12
  import * as i12 from '@angular/material/progress-bar';
13
13
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -16,7 +16,7 @@ import { MatMenuModule } from '@angular/material/menu';
16
16
  import * as i1 from '@angular/common/http';
17
17
  import { HttpHeaders, HttpEventType, HttpResponse, HttpErrorResponse } from '@angular/common/http';
18
18
  import * as i1$2 from '@praxisui/core';
19
- import { providePraxisI18n, PraxisI18nService, ComponentKeyService, ASYNC_CONFIG_STORAGE, PraxisIconDirective, ComponentMetadataRegistry } from '@praxisui/core';
19
+ import { providePraxisI18n, PraxisI18nService, PraxisIconButtonComponent, ComponentKeyService, ASYNC_CONFIG_STORAGE, PraxisIconDirective, ComponentMetadataRegistry } from '@praxisui/core';
20
20
  import * as i3 from '@angular/material/tabs';
21
21
  import { MatTabsModule } from '@angular/material/tabs';
22
22
  import * as i4 from '@angular/material/form-field';
@@ -27,7 +27,7 @@ import * as i6 from '@angular/material/checkbox';
27
27
  import { MatCheckboxModule } from '@angular/material/checkbox';
28
28
  import * as i7 from '@angular/material/select';
29
29
  import { MatSelectModule } from '@angular/material/select';
30
- import * as i10$1 from '@angular/material/tooltip';
30
+ import * as i9 from '@angular/material/tooltip';
31
31
  import { MatTooltipModule } from '@angular/material/tooltip';
32
32
  import * as i2 from '@angular/material/snack-bar';
33
33
  import { MatSnackBarModule } from '@angular/material/snack-bar';
@@ -1635,14 +1635,14 @@ class PraxisFilesUploadConfigEditor {
1635
1635
  >
1636
1636
  </mat-select>
1637
1637
  <button
1638
- mat-icon-button
1638
+ praxisIconButton="help_outline"
1639
+ size="dense"
1639
1640
  matSuffix
1640
1641
  class="help-icon-button"
1641
1642
  type="button"
1642
1643
  [matTooltip]="tx('editor.behavior.strategy.hint', 'How files will be sent to the server.')"
1643
1644
  matTooltipPosition="above"
1644
1645
  >
1645
- <mat-icon>help_outline</mat-icon>
1646
1646
  </button>
1647
1647
  </mat-form-field>
1648
1648
  </form>
@@ -1660,42 +1660,42 @@ class PraxisFilesUploadConfigEditor {
1660
1660
  <mat-label>{{ tx('editor.behavior.bulk.parallel', 'Parallel uploads') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
1661
1661
  <input matInput type="number" formControlName="parallelUploads" />
1662
1662
  <button
1663
- mat-icon-button
1663
+ praxisIconButton="help_outline"
1664
+ size="dense"
1664
1665
  matSuffix
1665
1666
  class="help-icon-button"
1666
1667
  type="button"
1667
1668
  [matTooltip]="tx('editor.behavior.bulk.parallelHint', 'How many files to send at the same time.')"
1668
1669
  matTooltipPosition="above"
1669
1670
  >
1670
- <mat-icon>help_outline</mat-icon>
1671
1671
  </button>
1672
1672
  </mat-form-field>
1673
1673
  <mat-form-field appearance="fill">
1674
1674
  <mat-label>{{ tx('editor.behavior.bulk.retryCount', 'Retry count') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
1675
1675
  <input matInput type="number" formControlName="retryCount" />
1676
1676
  <button
1677
- mat-icon-button
1677
+ praxisIconButton="help_outline"
1678
+ size="dense"
1678
1679
  matSuffix
1679
1680
  class="help-icon-button"
1680
1681
  type="button"
1681
1682
  [matTooltip]="tx('editor.behavior.bulk.retryCountHint', 'Automatic attempts in case of failure.')"
1682
1683
  matTooltipPosition="above"
1683
1684
  >
1684
- <mat-icon>help_outline</mat-icon>
1685
1685
  </button>
1686
1686
  </mat-form-field>
1687
1687
  <mat-form-field appearance="fill">
1688
1688
  <mat-label>{{ tx('editor.behavior.bulk.retryBackoff', 'Retry interval (ms)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
1689
1689
  <input matInput type="number" formControlName="retryBackoffMs" />
1690
1690
  <button
1691
- mat-icon-button
1691
+ praxisIconButton="help_outline"
1692
+ size="dense"
1692
1693
  matSuffix
1693
1694
  class="help-icon-button"
1694
1695
  type="button"
1695
1696
  [matTooltip]="tx('editor.behavior.bulk.retryBackoffHint', 'Wait time between attempts.')"
1696
1697
  matTooltipPosition="above"
1697
1698
  >
1698
- <mat-icon>help_outline</mat-icon>
1699
1699
  </button>
1700
1700
  </mat-form-field>
1701
1701
  </form>
@@ -1739,14 +1739,14 @@ class PraxisFilesUploadConfigEditor {
1739
1739
  [placeholder]="tx('editor.placeholders.accept', 'e.g.: pdf,jpg,png')"
1740
1740
  />
1741
1741
  <button
1742
- mat-icon-button
1742
+ praxisIconButton="help_outline"
1743
+ size="dense"
1743
1744
  matSuffix
1744
1745
  class="help-icon-button"
1745
1746
  type="button"
1746
1747
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
1747
1748
  matTooltipPosition="above"
1748
1749
  >
1749
- <mat-icon>help_outline</mat-icon>
1750
1750
  </button>
1751
1751
  </mat-form-field>
1752
1752
  <mat-checkbox formControlName="showMetadataForm"
@@ -1812,14 +1812,14 @@ class PraxisFilesUploadConfigEditor {
1812
1812
  <mat-label>{{ tx('editor.interface.list.detailsFields', 'Metadata fields (whitelist)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
1813
1813
  <input matInput formControlName="detailsFields" [placeholder]="tx('editor.placeholders.detailsFields', 'e.g.: id,fileName,contentType')" />
1814
1814
  <button
1815
- mat-icon-button
1815
+ praxisIconButton="help_outline"
1816
+ size="dense"
1816
1817
  matSuffix
1817
1818
  class="help-icon-button"
1818
1819
  type="button"
1819
1820
  [matTooltip]="tx('editor.interface.list.detailsFieldsHint', 'Comma-separated list; empty = all.')"
1820
1821
  matTooltipPosition="above"
1821
1822
  >
1822
- <mat-icon>help_outline</mat-icon>
1823
1823
  </button>
1824
1824
  </mat-form-field>
1825
1825
  <mat-form-field appearance="fill">
@@ -1855,14 +1855,14 @@ class PraxisFilesUploadConfigEditor {
1855
1855
  <mat-label>{{ tx('editor.validation.local.maxFileSize', 'Maximum file size (bytes)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
1856
1856
  <input matInput type="number" formControlName="maxFileSizeBytes" />
1857
1857
  <button
1858
- mat-icon-button
1858
+ praxisIconButton="help_outline"
1859
+ size="dense"
1859
1860
  matSuffix
1860
1861
  class="help-icon-button"
1861
1862
  type="button"
1862
1863
  [matTooltip]="tx('editor.validation.local.maxFileSizeHint', 'Client-side validation limit (optional).')"
1863
1864
  matTooltipPosition="above"
1864
1865
  >
1865
- <mat-icon>help_outline</mat-icon>
1866
1866
  </button>
1867
1867
  </mat-form-field>
1868
1868
  <mat-form-field appearance="fill">
@@ -1894,14 +1894,14 @@ class PraxisFilesUploadConfigEditor {
1894
1894
  <mat-option value="ERROR">{{ tx('editor.validation.backend.conflictPolicy.error', 'Fail (error)') }}</mat-option>
1895
1895
  </mat-select>
1896
1896
  <button
1897
- mat-icon-button
1897
+ praxisIconButton="help_outline"
1898
+ size="dense"
1898
1899
  matSuffix
1899
1900
  class="help-icon-button"
1900
1901
  type="button"
1901
1902
  [matTooltip]="tx('editor.validation.backend.conflictPolicyHint', 'What to do when the file name already exists.')"
1902
1903
  matTooltipPosition="above"
1903
1904
  >
1904
- <mat-icon>help_outline</mat-icon>
1905
1905
  </button>
1906
1906
  @if (optionsGroup.get('defaultConflictPolicy')?.value === 'OVERWRITE') {
1907
1907
  <div class="warn">
@@ -1917,14 +1917,14 @@ class PraxisFilesUploadConfigEditor {
1917
1917
  <mat-label>{{ tx('editor.validation.backend.maxUploadSizeMb', 'Maximum size per file (MB)') }} <span class="req-tag">mandatório</span></mat-label>
1918
1918
  <input matInput type="number" formControlName="maxUploadSizeMb" required />
1919
1919
  <button
1920
- mat-icon-button
1920
+ praxisIconButton="help_outline"
1921
+ size="dense"
1921
1922
  matSuffix
1922
1923
  class="help-icon-button"
1923
1924
  type="button"
1924
1925
  [matTooltip]="tx('editor.validation.backend.maxUploadSizeMbHint', 'Validated by the backend (1–500 MB).')"
1925
1926
  matTooltipPosition="above"
1926
1927
  >
1927
- <mat-icon>help_outline</mat-icon>
1928
1928
  </button>
1929
1929
  </mat-form-field>
1930
1930
  <mat-form-field appearance="fill">
@@ -1935,14 +1935,14 @@ class PraxisFilesUploadConfigEditor {
1935
1935
  [placeholder]="tx('editor.placeholders.allowedExtensions', 'e.g.: pdf,docx,xlsx')"
1936
1936
  />
1937
1937
  <button
1938
- mat-icon-button
1938
+ praxisIconButton="help_outline"
1939
+ size="dense"
1939
1940
  matSuffix
1940
1941
  class="help-icon-button"
1941
1942
  type="button"
1942
1943
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
1943
1944
  matTooltipPosition="above"
1944
1945
  >
1945
- <mat-icon>help_outline</mat-icon>
1946
1946
  </button>
1947
1947
  </mat-form-field>
1948
1948
  <mat-form-field appearance="fill">
@@ -1953,14 +1953,14 @@ class PraxisFilesUploadConfigEditor {
1953
1953
  [placeholder]="tx('editor.placeholders.acceptMimeTypes', 'e.g.: application/pdf,image/png')"
1954
1954
  />
1955
1955
  <button
1956
- mat-icon-button
1956
+ praxisIconButton="help_outline"
1957
+ size="dense"
1957
1958
  matSuffix
1958
1959
  class="help-icon-button"
1959
1960
  type="button"
1960
1961
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
1961
1962
  matTooltipPosition="above"
1962
1963
  >
1963
- <mat-icon>help_outline</mat-icon>
1964
1964
  </button>
1965
1965
  </mat-form-field>
1966
1966
  <mat-form-field appearance="fill">
@@ -2210,13 +2210,13 @@ class PraxisFilesUploadConfigEditor {
2210
2210
  <details>
2211
2211
  <summary>{{ tx('editor.server.viewJson', 'View JSON') }}</summary>
2212
2212
  <button
2213
- mat-icon-button
2213
+ praxisIconButton="content_copy"
2214
+ size="compact"
2214
2215
  [attr.aria-label]="tx('editor.server.copyJson', 'Copy JSON')"
2215
2216
  (click)="copyServerConfig()"
2216
2217
  type="button"
2217
2218
  [title]="tx('editor.server.copyJson', 'Copy JSON')"
2218
2219
  >
2219
- <mat-icon>content_copy</mat-icon>
2220
2220
  </button>
2221
2221
  <pre>{{ serverData() | json }}</pre>
2222
2222
  </details>
@@ -2256,7 +2256,7 @@ class PraxisFilesUploadConfigEditor {
2256
2256
  </mat-tab-group>
2257
2257
  </div>
2258
2258
  </div>
2259
- `, isInline: true, styles: [".editor-layout{display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);gap:16px;align-items:start}.summary-panel{position:sticky;top:0;display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--pfx-surface-border, #d8d8d8);border-radius:16px;background:linear-gradient(180deg,#fafbfc,#fff)}.summary-panel h3{margin:0;font-size:1rem;font-weight:600}.summary-panel .summary-intro{margin:0;color:#000000a6;line-height:1.4;font-size:.88rem}.summary-grid{display:grid;gap:10px}.summary-card{padding:12px;border-radius:12px;background:#fff;border:1px solid #e7e9ee}.summary-card .eyebrow{display:block;margin-bottom:4px;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#5f6b7a}.summary-card strong{display:block;margin-bottom:4px;font-size:.95rem}.summary-card p{margin:0;font-size:.85rem;line-height:1.45;color:#000000b8}.risk-panel{padding:12px;border-radius:12px;background:#fff8e8;border:1px solid #f0d29a}.risk-panel.safe{background:#f4fbf6;border-color:#b8ddc1}.risk-panel h4{display:flex;align-items:center;gap:6px;margin:0 0 8px;font-size:.92rem}.risk-list{display:grid;gap:8px}.risk-item{padding:10px;border-radius:10px;background:#ffffffb8}.risk-item strong{display:block;margin-bottom:2px;font-size:.84rem}.risk-item p,.risk-panel .safe-copy{margin:0;font-size:.82rem;line-height:1.4;color:#000000b8}.editor-main{min-width:0}.tab-panel{display:grid;gap:16px;padding-top:8px}.tab-intro{padding:16px 18px;border:1px solid #e5e8ef;border-radius:16px;background:linear-gradient(180deg,#fff,#f7f9fc)}.tab-intro h3{margin:0 0 6px;font-size:1rem;font-weight:600}.tab-intro p{margin:0;font-size:.9rem;line-height:1.5;color:#000000b8}.config-section{padding:18px;border:1px solid #e5e8ef;border-radius:16px;background:#fff}.config-section+.config-section{margin-top:0}.section-note{margin:0 0 16px;color:#000000b3;font-size:.88rem;line-height:1.45}.advanced-note{padding:14px 16px;border-radius:14px;border:1px solid #f0d29a;background:#fff8e8;color:#000000c7;font-size:.88rem;line-height:1.45}.json-textarea{width:100%;min-height:280px;padding:14px 16px;border-radius:14px;border:1px solid #d7dce5;background:#0f172a;color:#e5eefc;font:500 .84rem/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.server-tab{display:grid;gap:16px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.summary{display:grid;gap:8px;padding-left:18px}.summary li{line-height:1.45}details{margin-top:12px;padding:14px 16px;border:1px solid #e5e8ef;border-radius:14px;background:#fbfcfe}details pre{white-space:pre-wrap;word-break:break-word}@media(max-width:1100px){.editor-layout{grid-template-columns:1fr}.summary-panel{position:static}}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;margin-right:-4px}.help-icon-button mat-icon{font-size:18px;width:18px;height:18px}.mat-mdc-form-field-icon-suffix{align-self:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i15.JsonPipe, name: "json" }] });
2259
+ `, isInline: true, styles: [".editor-layout{display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);gap:16px;align-items:start}.summary-panel{position:sticky;top:0;display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--pfx-surface-border, #d8d8d8);border-radius:16px;background:linear-gradient(180deg,#fafbfc,#fff)}.summary-panel h3{margin:0;font-size:1rem;font-weight:600}.summary-panel .summary-intro{margin:0;color:#000000a6;line-height:1.4;font-size:.88rem}.summary-grid{display:grid;gap:10px}.summary-card{padding:12px;border-radius:12px;background:#fff;border:1px solid #e7e9ee}.summary-card .eyebrow{display:block;margin-bottom:4px;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#5f6b7a}.summary-card strong{display:block;margin-bottom:4px;font-size:.95rem}.summary-card p{margin:0;font-size:.85rem;line-height:1.45;color:#000000b8}.risk-panel{padding:12px;border-radius:12px;background:#fff8e8;border:1px solid #f0d29a}.risk-panel.safe{background:#f4fbf6;border-color:#b8ddc1}.risk-panel h4{display:flex;align-items:center;gap:6px;margin:0 0 8px;font-size:.92rem}.risk-list{display:grid;gap:8px}.risk-item{padding:10px;border-radius:10px;background:#ffffffb8}.risk-item strong{display:block;margin-bottom:2px;font-size:.84rem}.risk-item p,.risk-panel .safe-copy{margin:0;font-size:.82rem;line-height:1.4;color:#000000b8}.editor-main{min-width:0}.tab-panel{display:grid;gap:16px;padding-top:8px}.tab-intro{padding:16px 18px;border:1px solid #e5e8ef;border-radius:16px;background:linear-gradient(180deg,#fff,#f7f9fc)}.tab-intro h3{margin:0 0 6px;font-size:1rem;font-weight:600}.tab-intro p{margin:0;font-size:.9rem;line-height:1.5;color:#000000b8}.config-section{padding:18px;border:1px solid #e5e8ef;border-radius:16px;background:#fff}.config-section+.config-section{margin-top:0}.section-note{margin:0 0 16px;color:#000000b3;font-size:.88rem;line-height:1.45}.advanced-note{padding:14px 16px;border-radius:14px;border:1px solid #f0d29a;background:#fff8e8;color:#000000c7;font-size:.88rem;line-height:1.45}.json-textarea{width:100%;min-height:280px;padding:14px 16px;border-radius:14px;border:1px solid #d7dce5;background:#0f172a;color:#e5eefc;font:500 .84rem/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.server-tab{display:grid;gap:16px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.summary{display:grid;gap:8px;padding-left:18px}.summary li{line-height:1.45}details{margin-top:12px;padding:14px 16px;border:1px solid #e5e8ef;border-radius:14px;background:#fbfcfe}details pre{white-space:pre-wrap;word-break:break-word}@media(max-width:1100px){.editor-layout{grid-template-columns:1fr}.summary-panel{position:static}}.mat-mdc-form-field-icon-suffix{align-self:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "pipe", type: i15.JsonPipe, name: "json" }] });
2260
2260
  }
2261
2261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisFilesUploadConfigEditor, decorators: [{
2262
2262
  type: Component,
@@ -2273,6 +2273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2273
2273
  MatTooltipModule,
2274
2274
  MatSnackBarModule,
2275
2275
  FormsModule,
2276
+ PraxisIconButtonComponent,
2276
2277
  ], template: `
2277
2278
  <div class="editor-layout">
2278
2279
  <aside class="summary-panel" [attr.aria-label]="tx('editor.summary.ariaLabel', 'Executive summary for the current configuration')">
@@ -2353,14 +2354,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2353
2354
  >
2354
2355
  </mat-select>
2355
2356
  <button
2356
- mat-icon-button
2357
+ praxisIconButton="help_outline"
2358
+ size="dense"
2357
2359
  matSuffix
2358
2360
  class="help-icon-button"
2359
2361
  type="button"
2360
2362
  [matTooltip]="tx('editor.behavior.strategy.hint', 'How files will be sent to the server.')"
2361
2363
  matTooltipPosition="above"
2362
2364
  >
2363
- <mat-icon>help_outline</mat-icon>
2364
2365
  </button>
2365
2366
  </mat-form-field>
2366
2367
  </form>
@@ -2378,42 +2379,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2378
2379
  <mat-label>{{ tx('editor.behavior.bulk.parallel', 'Parallel uploads') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
2379
2380
  <input matInput type="number" formControlName="parallelUploads" />
2380
2381
  <button
2381
- mat-icon-button
2382
+ praxisIconButton="help_outline"
2383
+ size="dense"
2382
2384
  matSuffix
2383
2385
  class="help-icon-button"
2384
2386
  type="button"
2385
2387
  [matTooltip]="tx('editor.behavior.bulk.parallelHint', 'How many files to send at the same time.')"
2386
2388
  matTooltipPosition="above"
2387
2389
  >
2388
- <mat-icon>help_outline</mat-icon>
2389
2390
  </button>
2390
2391
  </mat-form-field>
2391
2392
  <mat-form-field appearance="fill">
2392
2393
  <mat-label>{{ tx('editor.behavior.bulk.retryCount', 'Retry count') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
2393
2394
  <input matInput type="number" formControlName="retryCount" />
2394
2395
  <button
2395
- mat-icon-button
2396
+ praxisIconButton="help_outline"
2397
+ size="dense"
2396
2398
  matSuffix
2397
2399
  class="help-icon-button"
2398
2400
  type="button"
2399
2401
  [matTooltip]="tx('editor.behavior.bulk.retryCountHint', 'Automatic attempts in case of failure.')"
2400
2402
  matTooltipPosition="above"
2401
2403
  >
2402
- <mat-icon>help_outline</mat-icon>
2403
2404
  </button>
2404
2405
  </mat-form-field>
2405
2406
  <mat-form-field appearance="fill">
2406
2407
  <mat-label>{{ tx('editor.behavior.bulk.retryBackoff', 'Retry interval (ms)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
2407
2408
  <input matInput type="number" formControlName="retryBackoffMs" />
2408
2409
  <button
2409
- mat-icon-button
2410
+ praxisIconButton="help_outline"
2411
+ size="dense"
2410
2412
  matSuffix
2411
2413
  class="help-icon-button"
2412
2414
  type="button"
2413
2415
  [matTooltip]="tx('editor.behavior.bulk.retryBackoffHint', 'Wait time between attempts.')"
2414
2416
  matTooltipPosition="above"
2415
2417
  >
2416
- <mat-icon>help_outline</mat-icon>
2417
2418
  </button>
2418
2419
  </mat-form-field>
2419
2420
  </form>
@@ -2457,14 +2458,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2457
2458
  [placeholder]="tx('editor.placeholders.accept', 'e.g.: pdf,jpg,png')"
2458
2459
  />
2459
2460
  <button
2460
- mat-icon-button
2461
+ praxisIconButton="help_outline"
2462
+ size="dense"
2461
2463
  matSuffix
2462
2464
  class="help-icon-button"
2463
2465
  type="button"
2464
2466
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
2465
2467
  matTooltipPosition="above"
2466
2468
  >
2467
- <mat-icon>help_outline</mat-icon>
2468
2469
  </button>
2469
2470
  </mat-form-field>
2470
2471
  <mat-checkbox formControlName="showMetadataForm"
@@ -2530,14 +2531,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2530
2531
  <mat-label>{{ tx('editor.interface.list.detailsFields', 'Metadata fields (whitelist)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
2531
2532
  <input matInput formControlName="detailsFields" [placeholder]="tx('editor.placeholders.detailsFields', 'e.g.: id,fileName,contentType')" />
2532
2533
  <button
2533
- mat-icon-button
2534
+ praxisIconButton="help_outline"
2535
+ size="dense"
2534
2536
  matSuffix
2535
2537
  class="help-icon-button"
2536
2538
  type="button"
2537
2539
  [matTooltip]="tx('editor.interface.list.detailsFieldsHint', 'Comma-separated list; empty = all.')"
2538
2540
  matTooltipPosition="above"
2539
2541
  >
2540
- <mat-icon>help_outline</mat-icon>
2541
2542
  </button>
2542
2543
  </mat-form-field>
2543
2544
  <mat-form-field appearance="fill">
@@ -2573,14 +2574,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2573
2574
  <mat-label>{{ tx('editor.validation.local.maxFileSize', 'Maximum file size (bytes)') }} <span class="opt-tag">{{ tx('editor.shared.optionalTag', 'optional') }}</span></mat-label>
2574
2575
  <input matInput type="number" formControlName="maxFileSizeBytes" />
2575
2576
  <button
2576
- mat-icon-button
2577
+ praxisIconButton="help_outline"
2578
+ size="dense"
2577
2579
  matSuffix
2578
2580
  class="help-icon-button"
2579
2581
  type="button"
2580
2582
  [matTooltip]="tx('editor.validation.local.maxFileSizeHint', 'Client-side validation limit (optional).')"
2581
2583
  matTooltipPosition="above"
2582
2584
  >
2583
- <mat-icon>help_outline</mat-icon>
2584
2585
  </button>
2585
2586
  </mat-form-field>
2586
2587
  <mat-form-field appearance="fill">
@@ -2612,14 +2613,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2612
2613
  <mat-option value="ERROR">{{ tx('editor.validation.backend.conflictPolicy.error', 'Fail (error)') }}</mat-option>
2613
2614
  </mat-select>
2614
2615
  <button
2615
- mat-icon-button
2616
+ praxisIconButton="help_outline"
2617
+ size="dense"
2616
2618
  matSuffix
2617
2619
  class="help-icon-button"
2618
2620
  type="button"
2619
2621
  [matTooltip]="tx('editor.validation.backend.conflictPolicyHint', 'What to do when the file name already exists.')"
2620
2622
  matTooltipPosition="above"
2621
2623
  >
2622
- <mat-icon>help_outline</mat-icon>
2623
2624
  </button>
2624
2625
  @if (optionsGroup.get('defaultConflictPolicy')?.value === 'OVERWRITE') {
2625
2626
  <div class="warn">
@@ -2635,14 +2636,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2635
2636
  <mat-label>{{ tx('editor.validation.backend.maxUploadSizeMb', 'Maximum size per file (MB)') }} <span class="req-tag">mandatório</span></mat-label>
2636
2637
  <input matInput type="number" formControlName="maxUploadSizeMb" required />
2637
2638
  <button
2638
- mat-icon-button
2639
+ praxisIconButton="help_outline"
2640
+ size="dense"
2639
2641
  matSuffix
2640
2642
  class="help-icon-button"
2641
2643
  type="button"
2642
2644
  [matTooltip]="tx('editor.validation.backend.maxUploadSizeMbHint', 'Validated by the backend (1–500 MB).')"
2643
2645
  matTooltipPosition="above"
2644
2646
  >
2645
- <mat-icon>help_outline</mat-icon>
2646
2647
  </button>
2647
2648
  </mat-form-field>
2648
2649
  <mat-form-field appearance="fill">
@@ -2653,14 +2654,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2653
2654
  [placeholder]="tx('editor.placeholders.allowedExtensions', 'e.g.: pdf,docx,xlsx')"
2654
2655
  />
2655
2656
  <button
2656
- mat-icon-button
2657
+ praxisIconButton="help_outline"
2658
+ size="dense"
2657
2659
  matSuffix
2658
2660
  class="help-icon-button"
2659
2661
  type="button"
2660
2662
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
2661
2663
  matTooltipPosition="above"
2662
2664
  >
2663
- <mat-icon>help_outline</mat-icon>
2664
2665
  </button>
2665
2666
  </mat-form-field>
2666
2667
  <mat-form-field appearance="fill">
@@ -2671,14 +2672,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2671
2672
  [placeholder]="tx('editor.placeholders.acceptMimeTypes', 'e.g.: application/pdf,image/png')"
2672
2673
  />
2673
2674
  <button
2674
- mat-icon-button
2675
+ praxisIconButton="help_outline"
2676
+ size="dense"
2675
2677
  matSuffix
2676
2678
  class="help-icon-button"
2677
2679
  type="button"
2678
2680
  [matTooltip]="tx('editor.shared.csvOptional', 'Comma-separated list (optional).')"
2679
2681
  matTooltipPosition="above"
2680
2682
  >
2681
- <mat-icon>help_outline</mat-icon>
2682
2683
  </button>
2683
2684
  </mat-form-field>
2684
2685
  <mat-form-field appearance="fill">
@@ -2928,13 +2929,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2928
2929
  <details>
2929
2930
  <summary>{{ tx('editor.server.viewJson', 'View JSON') }}</summary>
2930
2931
  <button
2931
- mat-icon-button
2932
+ praxisIconButton="content_copy"
2933
+ size="compact"
2932
2934
  [attr.aria-label]="tx('editor.server.copyJson', 'Copy JSON')"
2933
2935
  (click)="copyServerConfig()"
2934
2936
  type="button"
2935
2937
  [title]="tx('editor.server.copyJson', 'Copy JSON')"
2936
2938
  >
2937
- <mat-icon>content_copy</mat-icon>
2938
2939
  </button>
2939
2940
  <pre>{{ serverData() | json }}</pre>
2940
2941
  </details>
@@ -2974,7 +2975,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2974
2975
  </mat-tab-group>
2975
2976
  </div>
2976
2977
  </div>
2977
- `, styles: [".editor-layout{display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);gap:16px;align-items:start}.summary-panel{position:sticky;top:0;display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--pfx-surface-border, #d8d8d8);border-radius:16px;background:linear-gradient(180deg,#fafbfc,#fff)}.summary-panel h3{margin:0;font-size:1rem;font-weight:600}.summary-panel .summary-intro{margin:0;color:#000000a6;line-height:1.4;font-size:.88rem}.summary-grid{display:grid;gap:10px}.summary-card{padding:12px;border-radius:12px;background:#fff;border:1px solid #e7e9ee}.summary-card .eyebrow{display:block;margin-bottom:4px;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#5f6b7a}.summary-card strong{display:block;margin-bottom:4px;font-size:.95rem}.summary-card p{margin:0;font-size:.85rem;line-height:1.45;color:#000000b8}.risk-panel{padding:12px;border-radius:12px;background:#fff8e8;border:1px solid #f0d29a}.risk-panel.safe{background:#f4fbf6;border-color:#b8ddc1}.risk-panel h4{display:flex;align-items:center;gap:6px;margin:0 0 8px;font-size:.92rem}.risk-list{display:grid;gap:8px}.risk-item{padding:10px;border-radius:10px;background:#ffffffb8}.risk-item strong{display:block;margin-bottom:2px;font-size:.84rem}.risk-item p,.risk-panel .safe-copy{margin:0;font-size:.82rem;line-height:1.4;color:#000000b8}.editor-main{min-width:0}.tab-panel{display:grid;gap:16px;padding-top:8px}.tab-intro{padding:16px 18px;border:1px solid #e5e8ef;border-radius:16px;background:linear-gradient(180deg,#fff,#f7f9fc)}.tab-intro h3{margin:0 0 6px;font-size:1rem;font-weight:600}.tab-intro p{margin:0;font-size:.9rem;line-height:1.5;color:#000000b8}.config-section{padding:18px;border:1px solid #e5e8ef;border-radius:16px;background:#fff}.config-section+.config-section{margin-top:0}.section-note{margin:0 0 16px;color:#000000b3;font-size:.88rem;line-height:1.45}.advanced-note{padding:14px 16px;border-radius:14px;border:1px solid #f0d29a;background:#fff8e8;color:#000000c7;font-size:.88rem;line-height:1.45}.json-textarea{width:100%;min-height:280px;padding:14px 16px;border-radius:14px;border:1px solid #d7dce5;background:#0f172a;color:#e5eefc;font:500 .84rem/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.server-tab{display:grid;gap:16px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.summary{display:grid;gap:8px;padding-left:18px}.summary li{line-height:1.45}details{margin-top:12px;padding:14px 16px;border:1px solid #e5e8ef;border-radius:14px;background:#fbfcfe}details pre{white-space:pre-wrap;word-break:break-word}@media(max-width:1100px){.editor-layout{grid-template-columns:1fr}.summary-panel{position:static}}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;margin-right:-4px}.help-icon-button mat-icon{font-size:18px;width:18px;height:18px}.mat-mdc-form-field-icon-suffix{align-self:center}\n"] }]
2978
+ `, styles: [".editor-layout{display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);gap:16px;align-items:start}.summary-panel{position:sticky;top:0;display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--pfx-surface-border, #d8d8d8);border-radius:16px;background:linear-gradient(180deg,#fafbfc,#fff)}.summary-panel h3{margin:0;font-size:1rem;font-weight:600}.summary-panel .summary-intro{margin:0;color:#000000a6;line-height:1.4;font-size:.88rem}.summary-grid{display:grid;gap:10px}.summary-card{padding:12px;border-radius:12px;background:#fff;border:1px solid #e7e9ee}.summary-card .eyebrow{display:block;margin-bottom:4px;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#5f6b7a}.summary-card strong{display:block;margin-bottom:4px;font-size:.95rem}.summary-card p{margin:0;font-size:.85rem;line-height:1.45;color:#000000b8}.risk-panel{padding:12px;border-radius:12px;background:#fff8e8;border:1px solid #f0d29a}.risk-panel.safe{background:#f4fbf6;border-color:#b8ddc1}.risk-panel h4{display:flex;align-items:center;gap:6px;margin:0 0 8px;font-size:.92rem}.risk-list{display:grid;gap:8px}.risk-item{padding:10px;border-radius:10px;background:#ffffffb8}.risk-item strong{display:block;margin-bottom:2px;font-size:.84rem}.risk-item p,.risk-panel .safe-copy{margin:0;font-size:.82rem;line-height:1.4;color:#000000b8}.editor-main{min-width:0}.tab-panel{display:grid;gap:16px;padding-top:8px}.tab-intro{padding:16px 18px;border:1px solid #e5e8ef;border-radius:16px;background:linear-gradient(180deg,#fff,#f7f9fc)}.tab-intro h3{margin:0 0 6px;font-size:1rem;font-weight:600}.tab-intro p{margin:0;font-size:.9rem;line-height:1.5;color:#000000b8}.config-section{padding:18px;border:1px solid #e5e8ef;border-radius:16px;background:#fff}.config-section+.config-section{margin-top:0}.section-note{margin:0 0 16px;color:#000000b3;font-size:.88rem;line-height:1.45}.advanced-note{padding:14px 16px;border-radius:14px;border:1px solid #f0d29a;background:#fff8e8;color:#000000c7;font-size:.88rem;line-height:1.45}.json-textarea{width:100%;min-height:280px;padding:14px 16px;border-radius:14px;border:1px solid #d7dce5;background:#0f172a;color:#e5eefc;font:500 .84rem/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.server-tab{display:grid;gap:16px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.summary{display:grid;gap:8px;padding-left:18px}.summary li{line-height:1.45}details{margin-top:12px;padding:14px 16px;border:1px solid #e5e8ef;border-radius:14px;background:#fbfcfe}details pre{white-space:pre-wrap;word-break:break-word}@media(max-width:1100px){.editor-layout{grid-template-columns:1fr}.summary-panel{position:static}}.mat-mdc-form-field-icon-suffix{align-self:center}\n"] }]
2978
2979
  }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: undefined, decorators: [{
2979
2980
  type: Inject,
2980
2981
  args: [SETTINGS_PANEL_DATA]
@@ -4687,25 +4688,25 @@ class PraxisFilesUpload {
4687
4688
  </div>
4688
4689
  </div>
4689
4690
  <button
4690
- mat-icon-button
4691
+ praxisIconButton="close"
4692
+ size="compact"
4693
+ type="button"
4691
4694
  class="remove-btn"
4692
4695
  [matTooltip]="t('remove', 'Remover')"
4693
4696
  (click)="removePendingFile(f)"
4694
4697
  [attr.aria-label]="pendingFileRemoveAriaLabel(f)"
4695
- >
4696
- <mat-icon [praxisIcon]="'close'"></mat-icon>
4697
- </button>
4698
+ ></button>
4698
4699
  <button
4699
- mat-icon-button
4700
+ praxisIconButton="more_horiz"
4701
+ size="compact"
4702
+ type="button"
4700
4703
  class="more-btn"
4701
4704
  [matMenuTriggerFor]="fileMenu"
4702
4705
  [matMenuTriggerData]="{ file: f }"
4703
4706
  aria-haspopup="menu"
4704
4707
  [matTooltip]="t('moreActions', 'Mais ações')"
4705
4708
  [attr.aria-label]="pendingFileMoreActionsAriaLabel(f)"
4706
- >
4707
- <mat-icon [praxisIcon]="'more_horiz'"></mat-icon>
4708
- </button>
4709
+ ></button>
4709
4710
  <mat-menu
4710
4711
  #fileMenu="matMenu"
4711
4712
  xPosition="before"
@@ -4734,13 +4735,12 @@ class PraxisFilesUpload {
4734
4735
  @if (enableCustomization) {
4735
4736
  <button
4736
4737
  type="button"
4737
- mat-icon-button
4738
+ praxisIconButton="settings"
4739
+ size="compact"
4738
4740
  class="settings-btn"
4739
4741
  (click)="openSettings()"
4740
4742
  [attr.aria-label]="texts.settingsAriaLabel"
4741
- >
4742
- <mat-icon [praxisIcon]="'settings'"></mat-icon>
4743
- </button>
4743
+ ></button>
4744
4744
  }
4745
4745
  @if (rateLimit && config?.rateLimit?.showBannerOn429 !== false) {
4746
4746
  <div
@@ -4809,23 +4809,23 @@ class PraxisFilesUpload {
4809
4809
  <!-- Ações internas (ícones) -->
4810
4810
  <div class="field-actions" aria-hidden="false">
4811
4811
  <button
4812
- mat-icon-button
4812
+ praxisIconButton="attach_file"
4813
+ size="dense"
4814
+ type="button"
4813
4815
  [matTooltip]="t('selectFiles', 'Select file(s)')"
4814
4816
  [attr.aria-label]="selectFilesAriaLabel"
4815
4817
  (click)="$event.stopPropagation(); openFile(fileInput)"
4816
4818
  [disabled]="!baseUrl || isUploading"
4817
- >
4818
- <mat-icon [praxisIcon]="'attach_file'"></mat-icon>
4819
- </button>
4819
+ ></button>
4820
4820
  <button
4821
- mat-icon-button
4821
+ praxisIconButton="info"
4822
+ size="dense"
4823
+ type="button"
4822
4824
  [matTooltip]="policiesSummary"
4823
4825
  [attr.aria-label]="policySummaryAriaLabel"
4824
4826
  (click)="$event.stopPropagation()"
4825
4827
  [disabled]="false"
4826
- >
4827
- <mat-icon [praxisIcon]="'info'"></mat-icon>
4828
- </button>
4828
+ ></button>
4829
4829
  </div>
4830
4830
  <mat-icon class="dz-icon" aria-hidden="true" [praxisIcon]="'cloud_upload'"></mat-icon>
4831
4831
  <p class="dz-title">{{ texts.dropzoneLabel }}</p>
@@ -5019,48 +5019,48 @@ class PraxisFilesUpload {
5019
5019
  </div>
5020
5020
  <div class="item-actions">
5021
5021
  <button
5022
- mat-icon-button
5022
+ praxisIconButton="info"
5023
+ size="compact"
5024
+ type="button"
5023
5025
  [matTooltip]="t('details', 'Detalhes')"
5024
5026
  [attr.aria-label]="resultActionAriaLabel('details', 'Detalhes', r.fileName)"
5025
5027
  (click)="toggleDetailsFor(r)"
5026
- >
5027
- <mat-icon [praxisIcon]="'info'"></mat-icon>
5028
- </button>
5028
+ ></button>
5029
5029
  <button
5030
- mat-icon-button
5030
+ praxisIconButton="refresh"
5031
+ size="compact"
5032
+ type="button"
5031
5033
  [matTooltip]="t('retry', 'Reenviar')"
5032
5034
  [attr.aria-label]="resultActionAriaLabel('retry', 'Reenviar', r.fileName)"
5033
5035
  (click)="onRetry(r)"
5034
5036
  [disabled]="isUploading"
5035
- >
5036
- <mat-icon [praxisIcon]="'refresh'"></mat-icon>
5037
- </button>
5037
+ ></button>
5038
5038
  <button
5039
- mat-icon-button
5039
+ praxisIconButton="download"
5040
+ size="compact"
5041
+ type="button"
5040
5042
  [matTooltip]="t('download', 'Baixar')"
5041
5043
  [attr.aria-label]="resultActionAriaLabel('download', 'Baixar', r.fileName)"
5042
5044
  (click)="onDownload(r)"
5043
5045
  [disabled]="r.status !== BulkUploadResultStatus.SUCCESS"
5044
- >
5045
- <mat-icon [praxisIcon]="'download'"></mat-icon>
5046
- </button>
5046
+ ></button>
5047
5047
  <button
5048
- mat-icon-button
5048
+ praxisIconButton="link"
5049
+ size="compact"
5050
+ type="button"
5049
5051
  [matTooltip]="t('copyLink', 'Copiar link')"
5050
5052
  [attr.aria-label]="resultActionAriaLabel('copyLink', 'Copiar link', r.fileName)"
5051
5053
  (click)="onCopyLink(r)"
5052
5054
  [disabled]="r.status !== BulkUploadResultStatus.SUCCESS"
5053
- >
5054
- <mat-icon [praxisIcon]="'link'"></mat-icon>
5055
- </button>
5055
+ ></button>
5056
5056
  <button
5057
- mat-icon-button
5057
+ praxisIconButton="close"
5058
+ size="compact"
5059
+ type="button"
5058
5060
  [matTooltip]="t('remove', 'Remover')"
5059
5061
  [attr.aria-label]="resultActionAriaLabel('remove', 'Remover', r.fileName)"
5060
5062
  (click)="removeResult(r)"
5061
- >
5062
- <mat-icon [praxisIcon]="'close'"></mat-icon>
5063
- </button>
5063
+ ></button>
5064
5064
  </div>
5065
5065
  </li>
5066
5066
  }
@@ -5097,7 +5097,7 @@ class PraxisFilesUpload {
5097
5097
 
5098
5098
  <ng-content></ng-content>
5099
5099
  </div>
5100
- `, isInline: true, styles: ["@charset \"UTF-8\";.praxis-files-upload{position:relative}.praxis-files-upload .settings-btn{position:absolute;top:.5rem;right:.5rem}.praxis-files-upload .rate-limit-banner,.praxis-files-upload .quota-banner,.praxis-files-upload .error{margin:.5rem 0;padding:.5rem 1rem;border-radius:var(--md-sys-shape-corner-small, 4px)}.praxis-files-upload .rate-limit-banner{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .quota-banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.praxis-files-upload .dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);text-align:center;transition:background-color .2s;width:100%;min-height:160px;margin:.5rem 0;gap:.5rem;position:relative}.praxis-files-upload .dropzone:hover{outline:none;background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.dragover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.praxis-files-upload .dropzone p{margin:0 0 .5rem}.praxis-files-upload .dropzone .dz-icon{font-size:40px;color:var(--md-sys-color-primary);margin-bottom:.25rem}.praxis-files-upload .dropzone .dz-title{font-weight:600}.praxis-files-upload .dropzone .dz-hint{margin:0;opacity:.8;font-size:.9rem}.praxis-files-upload .dropzone .field-actions{position:absolute;top:.25rem;right:.25rem;display:flex;gap:.25rem;pointer-events:auto}.praxis-files-upload .dropzone .field-actions button[mat-icon-button]{width:32px;height:32px}.praxis-files-upload .dropzone .field-actions mat-icon{font-size:20px}.praxis-files-upload .progress{margin-top:1rem}.praxis-files-upload .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.praxis-files-upload .bulk-results{margin-top:1rem}.praxis-files-upload .bulk-results .bulk-summary{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem}.praxis-files-upload .bulk-results .bulk-summary .stat{display:flex;align-items:center;gap:.35rem;padding:.25rem .5rem;border-radius:6px;background:var(--md-sys-color-surface-container-low)}.praxis-files-upload .bulk-results .bulk-summary .stat.success{color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .bulk-summary .stat.failed{color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .bulk-summary .stat .label{opacity:.9}.praxis-files-upload .bulk-results .bulk-summary .stat .value{font-weight:600}.praxis-files-upload .bulk-results .results-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.praxis-files-upload .bulk-results .result-item{display:flex;gap:.75rem;padding:.5rem .75rem;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-lowest)}.praxis-files-upload .bulk-results .result-item.ok{border-color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .result-item.err{border-color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .result-item .status-icon{align-self:flex-start;color:currentColor}.praxis-files-upload .bulk-results .result-item .main{flex:1;min-width:0}.praxis-files-upload .bulk-results .result-item .title{display:flex;align-items:center;gap:.5rem}.praxis-files-upload .bulk-results .result-item .name{font-weight:600}.praxis-files-upload .bulk-results .result-item .badge{font-size:.75rem;padding:.1rem .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.praxis-files-upload .bulk-results .result-item .badge.err{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .bulk-results .result-item .meta,.praxis-files-upload .bulk-results .result-item .error{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .error .code{font-weight:600}.praxis-files-upload .bulk-results .result-item .extra{margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .item-actions{display:flex;align-items:center;gap:.25rem}.praxis-files-upload .bulk-results .list-footer{margin-top:.5rem;display:flex;justify-content:center}.praxis-files-upload .proximity-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);text-align:center;z-index:2;pointer-events:none}.praxis-files-upload .proximity-overlay .dz-icon{font-size:40px;color:var(--md-sys-color-primary)}.praxis-files-upload .proximity-overlay .dz-title{font-weight:600}.praxis-files-upload .proximity-overlay .dz-hint{opacity:.85}.praxis-files-upload .selected-overlay{background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;box-shadow:var(--md-sys-elevation-level2, 0 2px 6px rgba(0, 0, 0, .15));max-height:260px;overflow:auto;padding:.5rem}.praxis-files-upload .selected-overlay .sel-header{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface);display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem;margin-bottom:.25rem}.praxis-files-upload .selected-overlay .sel-header .title{font-weight:600}.praxis-files-upload .selected-overlay .sel-header .spacer{flex:1}.praxis-files-upload .selected-overlay .sel-list{list-style:none;margin:0;padding:0}.praxis-files-upload .selected-overlay .sel-list .sel-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--md-sys-color-outline-variant, #ccc);transition:background-color .12s ease}.praxis-files-upload .selected-overlay .sel-list .sel-item .file-icon{opacity:.9;color:var(--md-sys-color-primary, #1976d2)}.praxis-files-upload .selected-overlay .sel-list .sel-item .info{flex:1;min-width:0}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .meta{font-size:.8rem;opacity:.7}.praxis-files-upload .selected-overlay .sel-list .sel-item .remove-btn{color:var(--md-sys-color-error, #b00020)}.praxis-files-upload .selected-overlay .sel-list .sel-item .more-btn{margin-left:.25rem}.praxis-files-upload .selected-overlay .sel-list .sel-item:hover{background:var(--md-sys-color-surface-container-low)}:host ::ng-deep .praxis-files-upload-overlay-panel{pointer-events:none}:host ::ng-deep .praxis-files-selected-overlay-panel{pointer-events:auto;z-index:3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i12.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i15.JsonPipe, name: "json" }, { kind: "pipe", type: i15.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5100
+ `, isInline: true, styles: ["@charset \"UTF-8\";.praxis-files-upload{position:relative}.praxis-files-upload .settings-btn{position:absolute;top:.5rem;right:.5rem}.praxis-files-upload .rate-limit-banner,.praxis-files-upload .quota-banner,.praxis-files-upload .error{margin:.5rem 0;padding:.5rem 1rem;border-radius:var(--md-sys-shape-corner-small, 4px)}.praxis-files-upload .rate-limit-banner{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .quota-banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.praxis-files-upload .dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);text-align:center;transition:background-color .2s;width:100%;min-height:160px;margin:.5rem 0;gap:.5rem;position:relative}.praxis-files-upload .dropzone:hover{outline:none;background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.dragover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.praxis-files-upload .dropzone p{margin:0 0 .5rem}.praxis-files-upload .dropzone .dz-icon{font-size:40px;color:var(--md-sys-color-primary);margin-bottom:.25rem}.praxis-files-upload .dropzone .dz-title{font-weight:600}.praxis-files-upload .dropzone .dz-hint{margin:0;opacity:.8;font-size:.9rem}.praxis-files-upload .dropzone .field-actions{position:absolute;top:.25rem;right:.25rem;display:flex;gap:.25rem;pointer-events:auto}.praxis-files-upload .progress{margin-top:1rem}.praxis-files-upload .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.praxis-files-upload .bulk-results{margin-top:1rem}.praxis-files-upload .bulk-results .bulk-summary{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem}.praxis-files-upload .bulk-results .bulk-summary .stat{display:flex;align-items:center;gap:.35rem;padding:.25rem .5rem;border-radius:6px;background:var(--md-sys-color-surface-container-low)}.praxis-files-upload .bulk-results .bulk-summary .stat.success{color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .bulk-summary .stat.failed{color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .bulk-summary .stat .label{opacity:.9}.praxis-files-upload .bulk-results .bulk-summary .stat .value{font-weight:600}.praxis-files-upload .bulk-results .results-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.praxis-files-upload .bulk-results .result-item{display:flex;gap:.75rem;padding:.5rem .75rem;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-lowest)}.praxis-files-upload .bulk-results .result-item.ok{border-color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .result-item.err{border-color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .result-item .status-icon{align-self:flex-start;color:currentColor}.praxis-files-upload .bulk-results .result-item .main{flex:1;min-width:0}.praxis-files-upload .bulk-results .result-item .title{display:flex;align-items:center;gap:.5rem}.praxis-files-upload .bulk-results .result-item .name{font-weight:600}.praxis-files-upload .bulk-results .result-item .badge{font-size:.75rem;padding:.1rem .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.praxis-files-upload .bulk-results .result-item .badge.err{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .bulk-results .result-item .meta,.praxis-files-upload .bulk-results .result-item .error{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .error .code{font-weight:600}.praxis-files-upload .bulk-results .result-item .extra{margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .item-actions{display:flex;align-items:center;gap:.25rem}.praxis-files-upload .bulk-results .list-footer{margin-top:.5rem;display:flex;justify-content:center}.praxis-files-upload .proximity-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);text-align:center;z-index:2;pointer-events:none}.praxis-files-upload .proximity-overlay .dz-icon{font-size:40px;color:var(--md-sys-color-primary)}.praxis-files-upload .proximity-overlay .dz-title{font-weight:600}.praxis-files-upload .proximity-overlay .dz-hint{opacity:.85}.praxis-files-upload .selected-overlay{background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;box-shadow:var(--md-sys-elevation-level2, 0 2px 6px rgba(0, 0, 0, .15));max-height:260px;overflow:auto;padding:.5rem}.praxis-files-upload .selected-overlay .sel-header{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface);display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem;margin-bottom:.25rem}.praxis-files-upload .selected-overlay .sel-header .title{font-weight:600}.praxis-files-upload .selected-overlay .sel-header .spacer{flex:1}.praxis-files-upload .selected-overlay .sel-list{list-style:none;margin:0;padding:0}.praxis-files-upload .selected-overlay .sel-list .sel-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--md-sys-color-outline-variant, #ccc);transition:background-color .12s ease}.praxis-files-upload .selected-overlay .sel-list .sel-item .file-icon{opacity:.9;color:var(--md-sys-color-primary, #1976d2)}.praxis-files-upload .selected-overlay .sel-list .sel-item .info{flex:1;min-width:0}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .meta{font-size:.8rem;opacity:.7}.praxis-files-upload .selected-overlay .sel-list .sel-item .remove-btn{color:var(--md-sys-color-error, #b00020)}.praxis-files-upload .selected-overlay .sel-list .sel-item .more-btn{margin-left:.25rem}.praxis-files-upload .selected-overlay .sel-list .sel-item:hover{background:var(--md-sys-color-surface-container-low)}:host ::ng-deep .praxis-files-upload-overlay-panel{pointer-events:none}:host ::ng-deep .praxis-files-selected-overlay-panel{pointer-events:auto;z-index:3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i12.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i15.JsonPipe, name: "json" }, { kind: "pipe", type: i15.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5101
5101
  }
5102
5102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisFilesUpload, decorators: [{
5103
5103
  type: Component,
@@ -5107,6 +5107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5107
5107
  MatButtonModule,
5108
5108
  MatIconModule,
5109
5109
  PraxisIconDirective,
5110
+ PraxisIconButtonComponent,
5110
5111
  MatProgressBarModule,
5111
5112
  MatMenuModule,
5112
5113
  MatTooltipModule,
@@ -5182,25 +5183,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5182
5183
  </div>
5183
5184
  </div>
5184
5185
  <button
5185
- mat-icon-button
5186
+ praxisIconButton="close"
5187
+ size="compact"
5188
+ type="button"
5186
5189
  class="remove-btn"
5187
5190
  [matTooltip]="t('remove', 'Remover')"
5188
5191
  (click)="removePendingFile(f)"
5189
5192
  [attr.aria-label]="pendingFileRemoveAriaLabel(f)"
5190
- >
5191
- <mat-icon [praxisIcon]="'close'"></mat-icon>
5192
- </button>
5193
+ ></button>
5193
5194
  <button
5194
- mat-icon-button
5195
+ praxisIconButton="more_horiz"
5196
+ size="compact"
5197
+ type="button"
5195
5198
  class="more-btn"
5196
5199
  [matMenuTriggerFor]="fileMenu"
5197
5200
  [matMenuTriggerData]="{ file: f }"
5198
5201
  aria-haspopup="menu"
5199
5202
  [matTooltip]="t('moreActions', 'Mais ações')"
5200
5203
  [attr.aria-label]="pendingFileMoreActionsAriaLabel(f)"
5201
- >
5202
- <mat-icon [praxisIcon]="'more_horiz'"></mat-icon>
5203
- </button>
5204
+ ></button>
5204
5205
  <mat-menu
5205
5206
  #fileMenu="matMenu"
5206
5207
  xPosition="before"
@@ -5229,13 +5230,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5229
5230
  @if (enableCustomization) {
5230
5231
  <button
5231
5232
  type="button"
5232
- mat-icon-button
5233
+ praxisIconButton="settings"
5234
+ size="compact"
5233
5235
  class="settings-btn"
5234
5236
  (click)="openSettings()"
5235
5237
  [attr.aria-label]="texts.settingsAriaLabel"
5236
- >
5237
- <mat-icon [praxisIcon]="'settings'"></mat-icon>
5238
- </button>
5238
+ ></button>
5239
5239
  }
5240
5240
  @if (rateLimit && config?.rateLimit?.showBannerOn429 !== false) {
5241
5241
  <div
@@ -5304,23 +5304,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5304
5304
  <!-- Ações internas (ícones) -->
5305
5305
  <div class="field-actions" aria-hidden="false">
5306
5306
  <button
5307
- mat-icon-button
5307
+ praxisIconButton="attach_file"
5308
+ size="dense"
5309
+ type="button"
5308
5310
  [matTooltip]="t('selectFiles', 'Select file(s)')"
5309
5311
  [attr.aria-label]="selectFilesAriaLabel"
5310
5312
  (click)="$event.stopPropagation(); openFile(fileInput)"
5311
5313
  [disabled]="!baseUrl || isUploading"
5312
- >
5313
- <mat-icon [praxisIcon]="'attach_file'"></mat-icon>
5314
- </button>
5314
+ ></button>
5315
5315
  <button
5316
- mat-icon-button
5316
+ praxisIconButton="info"
5317
+ size="dense"
5318
+ type="button"
5317
5319
  [matTooltip]="policiesSummary"
5318
5320
  [attr.aria-label]="policySummaryAriaLabel"
5319
5321
  (click)="$event.stopPropagation()"
5320
5322
  [disabled]="false"
5321
- >
5322
- <mat-icon [praxisIcon]="'info'"></mat-icon>
5323
- </button>
5323
+ ></button>
5324
5324
  </div>
5325
5325
  <mat-icon class="dz-icon" aria-hidden="true" [praxisIcon]="'cloud_upload'"></mat-icon>
5326
5326
  <p class="dz-title">{{ texts.dropzoneLabel }}</p>
@@ -5514,48 +5514,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5514
5514
  </div>
5515
5515
  <div class="item-actions">
5516
5516
  <button
5517
- mat-icon-button
5517
+ praxisIconButton="info"
5518
+ size="compact"
5519
+ type="button"
5518
5520
  [matTooltip]="t('details', 'Detalhes')"
5519
5521
  [attr.aria-label]="resultActionAriaLabel('details', 'Detalhes', r.fileName)"
5520
5522
  (click)="toggleDetailsFor(r)"
5521
- >
5522
- <mat-icon [praxisIcon]="'info'"></mat-icon>
5523
- </button>
5523
+ ></button>
5524
5524
  <button
5525
- mat-icon-button
5525
+ praxisIconButton="refresh"
5526
+ size="compact"
5527
+ type="button"
5526
5528
  [matTooltip]="t('retry', 'Reenviar')"
5527
5529
  [attr.aria-label]="resultActionAriaLabel('retry', 'Reenviar', r.fileName)"
5528
5530
  (click)="onRetry(r)"
5529
5531
  [disabled]="isUploading"
5530
- >
5531
- <mat-icon [praxisIcon]="'refresh'"></mat-icon>
5532
- </button>
5532
+ ></button>
5533
5533
  <button
5534
- mat-icon-button
5534
+ praxisIconButton="download"
5535
+ size="compact"
5536
+ type="button"
5535
5537
  [matTooltip]="t('download', 'Baixar')"
5536
5538
  [attr.aria-label]="resultActionAriaLabel('download', 'Baixar', r.fileName)"
5537
5539
  (click)="onDownload(r)"
5538
5540
  [disabled]="r.status !== BulkUploadResultStatus.SUCCESS"
5539
- >
5540
- <mat-icon [praxisIcon]="'download'"></mat-icon>
5541
- </button>
5541
+ ></button>
5542
5542
  <button
5543
- mat-icon-button
5543
+ praxisIconButton="link"
5544
+ size="compact"
5545
+ type="button"
5544
5546
  [matTooltip]="t('copyLink', 'Copiar link')"
5545
5547
  [attr.aria-label]="resultActionAriaLabel('copyLink', 'Copiar link', r.fileName)"
5546
5548
  (click)="onCopyLink(r)"
5547
5549
  [disabled]="r.status !== BulkUploadResultStatus.SUCCESS"
5548
- >
5549
- <mat-icon [praxisIcon]="'link'"></mat-icon>
5550
- </button>
5550
+ ></button>
5551
5551
  <button
5552
- mat-icon-button
5552
+ praxisIconButton="close"
5553
+ size="compact"
5554
+ type="button"
5553
5555
  [matTooltip]="t('remove', 'Remover')"
5554
5556
  [attr.aria-label]="resultActionAriaLabel('remove', 'Remover', r.fileName)"
5555
5557
  (click)="removeResult(r)"
5556
- >
5557
- <mat-icon [praxisIcon]="'close'"></mat-icon>
5558
- </button>
5558
+ ></button>
5559
5559
  </div>
5560
5560
  </li>
5561
5561
  }
@@ -5592,7 +5592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5592
5592
 
5593
5593
  <ng-content></ng-content>
5594
5594
  </div>
5595
- `, styles: ["@charset \"UTF-8\";.praxis-files-upload{position:relative}.praxis-files-upload .settings-btn{position:absolute;top:.5rem;right:.5rem}.praxis-files-upload .rate-limit-banner,.praxis-files-upload .quota-banner,.praxis-files-upload .error{margin:.5rem 0;padding:.5rem 1rem;border-radius:var(--md-sys-shape-corner-small, 4px)}.praxis-files-upload .rate-limit-banner{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .quota-banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.praxis-files-upload .dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);text-align:center;transition:background-color .2s;width:100%;min-height:160px;margin:.5rem 0;gap:.5rem;position:relative}.praxis-files-upload .dropzone:hover{outline:none;background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.dragover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.praxis-files-upload .dropzone p{margin:0 0 .5rem}.praxis-files-upload .dropzone .dz-icon{font-size:40px;color:var(--md-sys-color-primary);margin-bottom:.25rem}.praxis-files-upload .dropzone .dz-title{font-weight:600}.praxis-files-upload .dropzone .dz-hint{margin:0;opacity:.8;font-size:.9rem}.praxis-files-upload .dropzone .field-actions{position:absolute;top:.25rem;right:.25rem;display:flex;gap:.25rem;pointer-events:auto}.praxis-files-upload .dropzone .field-actions button[mat-icon-button]{width:32px;height:32px}.praxis-files-upload .dropzone .field-actions mat-icon{font-size:20px}.praxis-files-upload .progress{margin-top:1rem}.praxis-files-upload .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.praxis-files-upload .bulk-results{margin-top:1rem}.praxis-files-upload .bulk-results .bulk-summary{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem}.praxis-files-upload .bulk-results .bulk-summary .stat{display:flex;align-items:center;gap:.35rem;padding:.25rem .5rem;border-radius:6px;background:var(--md-sys-color-surface-container-low)}.praxis-files-upload .bulk-results .bulk-summary .stat.success{color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .bulk-summary .stat.failed{color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .bulk-summary .stat .label{opacity:.9}.praxis-files-upload .bulk-results .bulk-summary .stat .value{font-weight:600}.praxis-files-upload .bulk-results .results-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.praxis-files-upload .bulk-results .result-item{display:flex;gap:.75rem;padding:.5rem .75rem;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-lowest)}.praxis-files-upload .bulk-results .result-item.ok{border-color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .result-item.err{border-color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .result-item .status-icon{align-self:flex-start;color:currentColor}.praxis-files-upload .bulk-results .result-item .main{flex:1;min-width:0}.praxis-files-upload .bulk-results .result-item .title{display:flex;align-items:center;gap:.5rem}.praxis-files-upload .bulk-results .result-item .name{font-weight:600}.praxis-files-upload .bulk-results .result-item .badge{font-size:.75rem;padding:.1rem .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.praxis-files-upload .bulk-results .result-item .badge.err{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .bulk-results .result-item .meta,.praxis-files-upload .bulk-results .result-item .error{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .error .code{font-weight:600}.praxis-files-upload .bulk-results .result-item .extra{margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .item-actions{display:flex;align-items:center;gap:.25rem}.praxis-files-upload .bulk-results .list-footer{margin-top:.5rem;display:flex;justify-content:center}.praxis-files-upload .proximity-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);text-align:center;z-index:2;pointer-events:none}.praxis-files-upload .proximity-overlay .dz-icon{font-size:40px;color:var(--md-sys-color-primary)}.praxis-files-upload .proximity-overlay .dz-title{font-weight:600}.praxis-files-upload .proximity-overlay .dz-hint{opacity:.85}.praxis-files-upload .selected-overlay{background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;box-shadow:var(--md-sys-elevation-level2, 0 2px 6px rgba(0, 0, 0, .15));max-height:260px;overflow:auto;padding:.5rem}.praxis-files-upload .selected-overlay .sel-header{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface);display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem;margin-bottom:.25rem}.praxis-files-upload .selected-overlay .sel-header .title{font-weight:600}.praxis-files-upload .selected-overlay .sel-header .spacer{flex:1}.praxis-files-upload .selected-overlay .sel-list{list-style:none;margin:0;padding:0}.praxis-files-upload .selected-overlay .sel-list .sel-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--md-sys-color-outline-variant, #ccc);transition:background-color .12s ease}.praxis-files-upload .selected-overlay .sel-list .sel-item .file-icon{opacity:.9;color:var(--md-sys-color-primary, #1976d2)}.praxis-files-upload .selected-overlay .sel-list .sel-item .info{flex:1;min-width:0}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .meta{font-size:.8rem;opacity:.7}.praxis-files-upload .selected-overlay .sel-list .sel-item .remove-btn{color:var(--md-sys-color-error, #b00020)}.praxis-files-upload .selected-overlay .sel-list .sel-item .more-btn{margin-left:.25rem}.praxis-files-upload .selected-overlay .sel-list .sel-item:hover{background:var(--md-sys-color-surface-container-low)}:host ::ng-deep .praxis-files-upload-overlay-panel{pointer-events:none}:host ::ng-deep .praxis-files-selected-overlay-panel{pointer-events:auto;z-index:3}\n"] }]
5595
+ `, styles: ["@charset \"UTF-8\";.praxis-files-upload{position:relative}.praxis-files-upload .settings-btn{position:absolute;top:.5rem;right:.5rem}.praxis-files-upload .rate-limit-banner,.praxis-files-upload .quota-banner,.praxis-files-upload .error{margin:.5rem 0;padding:.5rem 1rem;border-radius:var(--md-sys-shape-corner-small, 4px)}.praxis-files-upload .rate-limit-banner{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .quota-banner{background:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}.praxis-files-upload .dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);text-align:center;transition:background-color .2s;width:100%;min-height:160px;margin:.5rem 0;gap:.5rem;position:relative}.praxis-files-upload .dropzone:hover{outline:none;background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.dragover{background:var(--md-sys-color-surface-container-high);border-color:var(--md-sys-color-primary)}.praxis-files-upload .dropzone.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.praxis-files-upload .dropzone p{margin:0 0 .5rem}.praxis-files-upload .dropzone .dz-icon{font-size:40px;color:var(--md-sys-color-primary);margin-bottom:.25rem}.praxis-files-upload .dropzone .dz-title{font-weight:600}.praxis-files-upload .dropzone .dz-hint{margin:0;opacity:.8;font-size:.9rem}.praxis-files-upload .dropzone .field-actions{position:absolute;top:.25rem;right:.25rem;display:flex;gap:.25rem;pointer-events:auto}.praxis-files-upload .progress{margin-top:1rem}.praxis-files-upload .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.praxis-files-upload .bulk-results{margin-top:1rem}.praxis-files-upload .bulk-results .bulk-summary{display:flex;gap:1rem;align-items:center;margin-bottom:.5rem}.praxis-files-upload .bulk-results .bulk-summary .stat{display:flex;align-items:center;gap:.35rem;padding:.25rem .5rem;border-radius:6px;background:var(--md-sys-color-surface-container-low)}.praxis-files-upload .bulk-results .bulk-summary .stat.success{color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .bulk-summary .stat.failed{color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .bulk-summary .stat .label{opacity:.9}.praxis-files-upload .bulk-results .bulk-summary .stat .value{font-weight:600}.praxis-files-upload .bulk-results .results-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.praxis-files-upload .bulk-results .result-item{display:flex;gap:.75rem;padding:.5rem .75rem;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-lowest)}.praxis-files-upload .bulk-results .result-item.ok{border-color:var(--md-sys-color-primary)}.praxis-files-upload .bulk-results .result-item.err{border-color:var(--md-sys-color-error)}.praxis-files-upload .bulk-results .result-item .status-icon{align-self:flex-start;color:currentColor}.praxis-files-upload .bulk-results .result-item .main{flex:1;min-width:0}.praxis-files-upload .bulk-results .result-item .title{display:flex;align-items:center;gap:.5rem}.praxis-files-upload .bulk-results .result-item .name{font-weight:600}.praxis-files-upload .bulk-results .result-item .badge{font-size:.75rem;padding:.1rem .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.praxis-files-upload .bulk-results .result-item .badge.err{background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container)}.praxis-files-upload .bulk-results .result-item .meta,.praxis-files-upload .bulk-results .result-item .error{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .error .code{font-weight:600}.praxis-files-upload .bulk-results .result-item .extra{margin-top:.25rem}.praxis-files-upload .bulk-results .result-item .item-actions{display:flex;align-items:center;gap:.25rem}.praxis-files-upload .bulk-results .list-footer{margin-top:.5rem;display:flex;justify-content:center}.praxis-files-upload .proximity-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:2px dashed var(--md-sys-color-outline);border-radius:var(--md-sys-shape-corner-medium, 4px);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);text-align:center;z-index:2;pointer-events:none}.praxis-files-upload .proximity-overlay .dz-icon{font-size:40px;color:var(--md-sys-color-primary)}.praxis-files-upload .proximity-overlay .dz-title{font-weight:600}.praxis-files-upload .proximity-overlay .dz-hint{opacity:.85}.praxis-files-upload .selected-overlay{background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;box-shadow:var(--md-sys-elevation-level2, 0 2px 6px rgba(0, 0, 0, .15));max-height:260px;overflow:auto;padding:.5rem}.praxis-files-upload .selected-overlay .sel-header{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface);display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem;margin-bottom:.25rem}.praxis-files-upload .selected-overlay .sel-header .title{font-weight:600}.praxis-files-upload .selected-overlay .sel-header .spacer{flex:1}.praxis-files-upload .selected-overlay .sel-list{list-style:none;margin:0;padding:0}.praxis-files-upload .selected-overlay .sel-list .sel-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--md-sys-color-outline-variant, #ccc);transition:background-color .12s ease}.praxis-files-upload .selected-overlay .sel-list .sel-item .file-icon{opacity:.9;color:var(--md-sys-color-primary, #1976d2)}.praxis-files-upload .selected-overlay .sel-list .sel-item .info{flex:1;min-width:0}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.praxis-files-upload .selected-overlay .sel-list .sel-item .info .meta{font-size:.8rem;opacity:.7}.praxis-files-upload .selected-overlay .sel-list .sel-item .remove-btn{color:var(--md-sys-color-error, #b00020)}.praxis-files-upload .selected-overlay .sel-list .sel-item .more-btn{margin-left:.25rem}.praxis-files-upload .selected-overlay .sel-list .sel-item:hover{background:var(--md-sys-color-surface-container-low)}:host ::ng-deep .praxis-files-upload-overlay-panel{pointer-events:none}:host ::ng-deep .praxis-files-selected-overlay-panel{pointer-events:auto;z-index:3}\n"] }]
5596
5596
  }], ctorParameters: () => [{ type: i1$3.SettingsPanelService }, { type: DragProximityService }, { type: i3$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
5597
5597
  type: Inject,
5598
5598
  args: [ASYNC_CONFIG_STORAGE]
@@ -6081,13 +6081,12 @@ class PdxFilesUploadFieldComponent extends SimpleBaseInputComponent {
6081
6081
  <span class="spacer"></span>
6082
6082
  <button
6083
6083
  type="button"
6084
- mat-icon-button
6084
+ praxisIconButton="close"
6085
+ size="compact"
6085
6086
  class="remove-pending-btn"
6086
6087
  (click)="onRemovePendingFile(file, $event)"
6087
6088
  [attr.aria-label]="t('removePendingFile','Remove selected file') + ': ' + file.name"
6088
- >
6089
- <mat-icon>close</mat-icon>
6090
- </button>
6089
+ ></button>
6091
6090
  </div>
6092
6091
  }
6093
6092
  </div>
@@ -6169,7 +6168,7 @@ class PdxFilesUploadFieldComponent extends SimpleBaseInputComponent {
6169
6168
  (proximityChange)="onProximityChange($event)"
6170
6169
  (pendingStateChange)="handlePendingState($event)"
6171
6170
  />
6172
- `, isInline: true, styles: [":host{position:relative}.pdx-upload-field-shell{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border:1px solid var(--pfx-surface-border, #ccc);border-radius:8px;background:var(--pfx-surface, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);min-height:40px}.pdx-upload-field-shell:focus-within{outline:2px solid var(--md-sys-color-primary,#1976d2);outline-offset:2px}.pdx-upload-field-shell.error{border-color:var(--md-sys-color-error,#b00020)}.pdx-upload-field-shell.disabled{opacity:.6;cursor:not-allowed}.pdx-upload-field-shell .prefix{color:var(--md-sys-color-primary,#1976d2)}.pdx-upload-field-shell .content{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem}.pdx-upload-field-shell .shell-main-btn{display:flex;align-items:center;gap:.75rem;flex:1;min-width:0;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.pdx-upload-field-shell .shell-main-btn:disabled{cursor:not-allowed}.pdx-upload-field-shell .text-stack{display:flex;flex-direction:column;min-width:0;gap:.125rem}.pdx-upload-field-shell .placeholder{color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell .value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-upload-field-shell .meta{font-size:.78rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-upload-field-shell .chip{font-size:.75rem;padding:0 .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pdx-upload-field-shell .suffixes{display:flex;align-items:center;gap:.375rem}.pdx-upload-field-shell .action-btn{display:inline-flex;align-items:center;gap:.35rem;border:1px solid var(--pfx-surface-border, #ccc);background:transparent;padding:.35rem .6rem;border-radius:999px;cursor:pointer;color:var(--md-sys-color-on-surface);font:inherit}.pdx-upload-field-shell .action-btn.primary{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-upload-field-shell .action-btn mat-icon{font-size:18px;width:18px;height:18px}.pdx-upload-field-shell .icon-btn{border:0;background:transparent;padding:.25rem;border-radius:6px;cursor:pointer;color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell .icon-btn:hover{background:#ffffff0d}.pdx-upload-field-shell.disabled .icon-btn,.pdx-upload-field-shell.disabled .action-btn{cursor:not-allowed}.field-messages{font-size:.82rem;margin-top:.25rem}.field-messages .hint{opacity:.8}.field-messages .error{color:var(--md-sys-color-error,#b00020)}.pending-text-btn{display:flex;align-items:center;gap:.5rem;background:0;border:0;color:var(--md-sys-color-on-surface);font-family:inherit;font-size:inherit;padding:0;margin:0;cursor:pointer;min-width:0;text-align:left}.pending-text-btn span,.pending-text-btn mat-icon{color:inherit}.pending-files-overlay{display:flex;flex-direction:column;min-width:min(320px,calc(100vw - 32px));max-width:min(480px,calc(100vw - 32px));max-height:240px;overflow:auto;padding:.25rem 0;border:1px solid var(--pfx-surface-border, #ccc);border-radius:12px;background:var(--pfx-surface, var(--md-sys-color-surface));box-shadow:0 12px 30px #0000002e;outline:none}.pending-file-item{display:flex;align-items:center;width:100%;gap:.5rem;padding:8px 16px}.pending-file-item .file-info{flex:1;min-width:0;text-align:left}.pending-file-item .file-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pending-file-item .file-size{font-size:.8rem;opacity:.7}.pending-file-item .spacer{flex:1 1 auto}.pending-file-item .remove-pending-btn{color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell.proximity-active{border-style:dashed;border-color:var(--md-sys-color-primary);transform:scale(1.02);background:var(--md-sys-color-surface-container-low);transition:all .2s ease-in-out}\n"], dependencies: [{ kind: "component", type: PraxisFilesUpload, selector: "praxis-files-upload", inputs: ["config", "filesUploadId", "componentInstanceId", "baseUrl", "displayMode", "context", "enableCustomization"], outputs: ["uploadSuccess", "bulkComplete", "error", "rateLimited", "uploadStart", "uploadProgress", "retry", "download", "copyLink", "detailsOpened", "detailsClosed", "pendingStateChange", "proximityChange", "readinessChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
6171
+ `, isInline: true, styles: [":host{position:relative}.pdx-upload-field-shell{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border:1px solid var(--pfx-surface-border, #ccc);border-radius:8px;background:var(--pfx-surface, var(--md-sys-color-surface));color:var(--md-sys-color-on-surface);min-height:40px}.pdx-upload-field-shell:focus-within{outline:2px solid var(--md-sys-color-primary,#1976d2);outline-offset:2px}.pdx-upload-field-shell.error{border-color:var(--md-sys-color-error,#b00020)}.pdx-upload-field-shell.disabled{opacity:.6;cursor:not-allowed}.pdx-upload-field-shell .prefix{color:var(--md-sys-color-primary,#1976d2)}.pdx-upload-field-shell .content{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem}.pdx-upload-field-shell .shell-main-btn{display:flex;align-items:center;gap:.75rem;flex:1;min-width:0;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.pdx-upload-field-shell .shell-main-btn:disabled{cursor:not-allowed}.pdx-upload-field-shell .text-stack{display:flex;flex-direction:column;min-width:0;gap:.125rem}.pdx-upload-field-shell .placeholder{color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell .value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-upload-field-shell .meta{font-size:.78rem;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-upload-field-shell .chip{font-size:.75rem;padding:0 .4rem;border-radius:999px;background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.pdx-upload-field-shell .suffixes{display:flex;align-items:center;gap:.375rem}.pdx-upload-field-shell .action-btn{display:inline-flex;align-items:center;gap:.35rem;border:1px solid var(--pfx-surface-border, #ccc);background:transparent;padding:.35rem .6rem;border-radius:999px;cursor:pointer;color:var(--md-sys-color-on-surface);font:inherit}.pdx-upload-field-shell .action-btn.primary{background:var(--md-sys-color-primary);border-color:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-upload-field-shell .action-btn mat-icon{font-size:18px;width:18px;height:18px}.pdx-upload-field-shell .icon-btn{border:0;background:transparent;padding:.25rem;border-radius:6px;cursor:pointer;color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell .icon-btn:hover{background:#ffffff0d}.pdx-upload-field-shell.disabled .icon-btn,.pdx-upload-field-shell.disabled .action-btn{cursor:not-allowed}.field-messages{font-size:.82rem;margin-top:.25rem}.field-messages .hint{opacity:.8}.field-messages .error{color:var(--md-sys-color-error,#b00020)}.pending-text-btn{display:flex;align-items:center;gap:.5rem;background:0;border:0;color:var(--md-sys-color-on-surface);font-family:inherit;font-size:inherit;padding:0;margin:0;cursor:pointer;min-width:0;text-align:left}.pending-text-btn span,.pending-text-btn mat-icon{color:inherit}.pending-files-overlay{display:flex;flex-direction:column;min-width:min(320px,calc(100vw - 32px));max-width:min(480px,calc(100vw - 32px));max-height:240px;overflow:auto;padding:.25rem 0;border:1px solid var(--pfx-surface-border, #ccc);border-radius:12px;background:var(--pfx-surface, var(--md-sys-color-surface));box-shadow:0 12px 30px #0000002e;outline:none}.pending-file-item{display:flex;align-items:center;width:100%;gap:.5rem;padding:8px 16px}.pending-file-item .file-info{flex:1;min-width:0;text-align:left}.pending-file-item .file-name{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pending-file-item .file-size{font-size:.8rem;opacity:.7}.pending-file-item .spacer{flex:1 1 auto}.pending-file-item .remove-pending-btn{color:var(--md-sys-color-on-surface-variant)}.pdx-upload-field-shell.proximity-active{border-style:dashed;border-color:var(--md-sys-color-primary);transform:scale(1.02);background:var(--md-sys-color-surface-container-low);transition:all .2s ease-in-out}\n"], dependencies: [{ kind: "component", type: PraxisFilesUpload, selector: "praxis-files-upload", inputs: ["config", "filesUploadId", "componentInstanceId", "baseUrl", "displayMode", "context", "enableCustomization"], outputs: ["uploadSuccess", "bulkComplete", "error", "rateLimited", "uploadStart", "uploadProgress", "retry", "download", "copyLink", "detailsOpened", "detailsClosed", "pendingStateChange", "proximityChange", "readinessChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }] });
6173
6172
  }
6174
6173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PdxFilesUploadFieldComponent, decorators: [{
6175
6174
  type: Component,
@@ -6179,7 +6178,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
6179
6178
  MatMenuModule,
6180
6179
  MatTooltipModule,
6181
6180
  CdkConnectedOverlay,
6182
- CdkOverlayOrigin
6181
+ CdkOverlayOrigin,
6182
+ PraxisIconButtonComponent,
6183
6183
  ], template: `
6184
6184
  <!-- Casca compacta tipo input -->
6185
6185
  <div class="pdx-upload-field-shell"
@@ -6268,13 +6268,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
6268
6268
  <span class="spacer"></span>
6269
6269
  <button
6270
6270
  type="button"
6271
- mat-icon-button
6271
+ praxisIconButton="close"
6272
+ size="compact"
6272
6273
  class="remove-pending-btn"
6273
6274
  (click)="onRemovePendingFile(file, $event)"
6274
6275
  [attr.aria-label]="t('removePendingFile','Remove selected file') + ': ' + file.name"
6275
- >
6276
- <mat-icon>close</mat-icon>
6277
- </button>
6276
+ ></button>
6278
6277
  </div>
6279
6278
  }
6280
6279
  </div>
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@praxisui/files-upload",
3
- "version": "9.0.0-beta.85",
3
+ "version": "9.0.0-beta.86",
4
4
  "description": "File upload components and services for Praxis UI with presigned and direct strategies, quotas and rate-limit handling.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/cdk": "^21.0.0",
8
8
  "@angular/core": "^21.0.0",
9
9
  "@angular/material": "^21.0.0",
10
- "@praxisui/core": "^9.0.0-beta.85",
11
- "@praxisui/dynamic-fields": "^9.0.0-beta.85",
12
- "@praxisui/settings-panel": "^9.0.0-beta.85",
10
+ "@praxisui/core": "^9.0.0-beta.86",
11
+ "@praxisui/dynamic-fields": "^9.0.0-beta.86",
12
+ "@praxisui/settings-panel": "^9.0.0-beta.86",
13
13
  "@angular/forms": "^21.0.0",
14
14
  "@angular/router": "^21.0.0",
15
- "@praxisui/ai": "^9.0.0-beta.85",
15
+ "@praxisui/ai": "^9.0.0-beta.86",
16
16
  "rxjs": "~7.8.0"
17
17
  },
18
18
  "dependencies": {