@elasticias/ui 1.0.39 → 1.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elasticias/ui",
3
- "version": "1.0.39",
3
+ "version": "1.0.40",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -2612,6 +2612,13 @@ declare class EfFormGridComponent {
2612
2612
  * Custom actions can declare `permission` and `visible` like
2613
2613
  * `EfRowAction`. With `[context]` bound, the toolbar filters them
2614
2614
  * against `ScreenContext.isGranted()` automatically.
2615
+ *
2616
+ * Save and actions flagged `requiresWrite` follow `context.canWrite`,
2617
+ * which `AbstractDetailScreenV2` sets from its own `canWrite()` (Edit on
2618
+ * an existing record, Create on a new one or a duplicate). Binding
2619
+ * `[context]="context"` is all a screen does; it does not pass
2620
+ * `[showSaveAction]` for permissions. Without a context, or with one that
2621
+ * carries no `canWrite`, Save behaves as `[showSaveAction]` alone says.
2615
2622
  */
2616
2623
  declare class EfDetailToolbarComponent {
2617
2624
  /** Custom screen-specific actions, rendered before the standard
@@ -2648,6 +2655,10 @@ declare class EfDetailToolbarComponent {
2648
2655
  readonly canPrint: _angular_core.Signal<boolean>;
2649
2656
  readonly canDuplicate: _angular_core.Signal<boolean>;
2650
2657
  readonly canDelete: _angular_core.Signal<boolean>;
2658
+ /** The bound screen's write state; `true` when unknown (no context,
2659
+ * or a context no detail abstract has stamped), which keeps the
2660
+ * toolbar's behaviour for those callers what it always was. */
2661
+ readonly canWrite: _angular_core.Signal<boolean>;
2651
2662
  readonly canSave: _angular_core.Signal<boolean>;
2652
2663
  readonly hasStandardActions: _angular_core.Signal<boolean>;
2653
2664
  readonly hasCustomActions: _angular_core.Signal<boolean>;
@@ -3142,7 +3153,7 @@ declare abstract class AbstractEfFormControl {
3142
3153
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
3143
3154
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
3144
3155
  /** The `[disabled]` input. The **effective** disabled (input OR
3145
- * form-driven via CVA) is {@link isDisabled} — bind that in templates. */
3156
+ * form-driven via CVA, or an enclosing `[efReadOnly]` scope) is {@link isDisabled} — bind that in templates. */
3146
3157
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3147
3158
  /** Form-driven disabled set by CVA `setDisabledState`, merged with the
3148
3159
  * `[disabled]` input. Writable signal (the input itself is read-only). */
@@ -3150,6 +3161,8 @@ declare abstract class AbstractEfFormControl {
3150
3161
  /** Effective disabled state — the `[disabled]` input OR a reactive-form
3151
3162
  * `disable()`. Templates/logic should use this, not `disabled()`. */
3152
3163
  readonly isDisabled: _angular_core.Signal<boolean>;
3164
+ /** Optional enclosing `[efReadOnly]` scope — disables the control when set. */
3165
+ private readonly readOnlyScope;
3153
3166
  /** CVA hook for subclasses: `setDisabledState(d) { this.updateDisabledState(d); }`. */
3154
3167
  protected updateDisabledState(disabled: boolean): void;
3155
3168
  /**
@@ -3613,6 +3626,10 @@ declare class EfDatepickerComponent implements ControlValueAccessor {
3613
3626
  showButtonBar: boolean;
3614
3627
  minDate?: Date;
3615
3628
  maxDate?: Date;
3629
+ /** Optional enclosing `[efReadOnly]` scope. */
3630
+ private readonly readOnlyScope;
3631
+ /** Effective disabled: the input / CVA state OR a read-only scope. */
3632
+ get isDisabled(): boolean;
3616
3633
  /**
3617
3634
  * Take focus on load. Bound explicitly rather than left unset: PrimeNG's
3618
3635
  * AutoFocus directive tests `autofocus === false`, and the control declares
@@ -3953,6 +3970,10 @@ declare class EfQuantityStepperComponent implements ControlValueAccessor {
3953
3970
  * When present, it specifies that the component should be disabled
3954
3971
  */
3955
3972
  disabled: boolean;
3973
+ /** Optional enclosing `[efReadOnly]` scope. */
3974
+ private readonly readOnlyScope;
3975
+ /** Effective disabled: the input / CVA state OR a read-only scope. */
3976
+ get isDisabled(): boolean;
3956
3977
  /**
3957
3978
  * Callback to invoke when the value changes
3958
3979
  */
@@ -4407,9 +4428,11 @@ interface EfRowAction {
4407
4428
  visible?: boolean;
4408
4429
  /**
4409
4430
  * If set, the item is hidden unless the bound `ScreenContext`
4410
- * grants this permission. Items with no `permission` always show.
4431
+ * grants this permission, or every permission in the array (e.g.
4432
+ * Duplicate needs `[Duplicate, Create]`, since a duplicate is saved
4433
+ * through create). Items with no `permission` always show.
4411
4434
  */
4412
- permission?: Permissions;
4435
+ permission?: Permissions | ReadonlyArray<Permissions>;
4413
4436
  /** Click handler. The container handles closing the popup. */
4414
4437
  command?: () => void;
4415
4438
  }
@@ -5320,6 +5343,30 @@ declare class EfFilterPillComponent {
5320
5343
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfFilterPillComponent, "ef-filter-pill", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "hasClear": { "alias": "hasClear"; "required": false; "isSignal": true; }; "hasPopover": { "alias": "hasPopover"; "required": false; "isSignal": true; }; "popoverOpen": { "alias": "popoverOpen"; "required": false; "isSignal": true; }; "clearAriaKey": { "alias": "clearAriaKey"; "required": false; "isSignal": true; }; }, { "pillClick": "pillClick"; "clearClick": "clearClick"; }, never, ["[popover]"], true, never>;
5321
5344
  }
5322
5345
 
5346
+ /**
5347
+ * Scopes a read-only state to every descendant `ef-*` form control.
5348
+ *
5349
+ * Drop it on the container that wraps a form and bind whether the current
5350
+ * user lacks write access; descendant controls fold it into their effective
5351
+ * disabled state, so no per-field `[disabled]` binding is needed:
5352
+ *
5353
+ * ```html
5354
+ * <div class="detail-grid" [efReadOnly]="!canWrite()">
5355
+ * <ef-input-text name="companyName" ... />
5356
+ * <ef-select name="clientType" ... />
5357
+ * </div>
5358
+ * ```
5359
+ *
5360
+ * The input is a signal, so toggling it re-enables the controls under
5361
+ * zoneless change detection (controls read it through `isDisabled`).
5362
+ */
5363
+ declare class EfReadOnlyDirective {
5364
+ /** When true, every descendant ef-* control renders disabled. */
5365
+ readonly readOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
5366
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfReadOnlyDirective, never>;
5367
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<EfReadOnlyDirective, "[efReadOnly]", never, { "readOnly": { "alias": "efReadOnly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5368
+ }
5369
+
5323
5370
  /**
5324
5371
  * Scopes a map of server/validation errors to its descendant `ef-*` form
5325
5372
  * controls, which auto-link by their `name` — no per-field `[errors]`
@@ -6090,5 +6137,5 @@ declare class EfEmailMetricsCardComponent {
6090
6137
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfEmailMetricsCardComponent, "ef-email-metrics-card", never, { "metrics": { "alias": "metrics"; "required": false; "isSignal": true; }; "recentEvents": { "alias": "recentEvents"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; }, never, never, true, never>;
6091
6138
  }
6092
6139
 
6093
- export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChangePasswordComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfOverflowTooltipDirective, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfProfileMenuComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRadioComponent, EfRankListComponent, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfServerErrorsDirective, EfShortcutsDialogComponent, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
6140
+ export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChangePasswordComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfOverflowTooltipDirective, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfProfileMenuComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRadioComponent, EfRankListComponent, EfReadOnlyDirective, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfServerErrorsDirective, EfShortcutsDialogComponent, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
6094
6141
  export type { CatalogueProduct, CatalogueProductVariant, CategoryAssignment, CategoryGroup, CategoryItem, DatatableSearchEntity, DocumentConfig, EfAboutServer, EfBadgeColor, EfBadgeConfig, EfBadgeSize, EfBadgeVariant, EfButtonComptoirSeverity, EfButtonPrimeNGSeverity, EfButtonSeverity, EfChangeHistoryEntry, EfChangeHistoryFieldChange, EfChangePasswordSubmit, EfChartSeries, EfChartType, EfDataCardMobileLayout, EfDataCardRowAction, EfDatatableActions, EfDatatableColumn, EfDatatableColumnAlign, EfDatatableColumnType, EfDatatableConfig, EfDateFieldValue, EfDatePreset, EfDialogAction, EfDialogSeverity, EfDialogSize, EfFabPosition, EfKpiDeltaTone, EfKpiSparkline, EfPillItem, EfPresetItem, EfProfileMenuItem, EfRankRow, EfRowAction, EfSkeletonVariant, EfStatsRow, EfStatusColor, EfStatusReferenceItem, EfTabItem, EfTabsModule, EfTabsVariant, EfTimelineItem, EfTimelineState, EfToastRegionPosition, EfTotalsGrand, EfTotalsRow, HighlightSegment, OrderChangeInfo, OrderEntity, OrderLineItem, OrderProductsSummary, OrderSummaryItem, ProductCountGroup, ProductCountGroupLabel, ProductTypeaheadRow, ProductTypeaheadSelection, ProductWithCountGroup, SelectedFilter, ValidationResult };