@besaitech/ng-design-system 0.0.75 → 0.0.76

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.
@@ -6267,21 +6267,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6267
6267
 
6268
6268
  /**
6269
6269
  * The action bar at the foot of a form: Cancel, Save, and whatever commits the thing — projected as
6270
- * buttons, right-aligned, on a bordered strip that pins to the bottom of the scroll container so the
6271
- * save button stays in reach on a long editor.
6270
+ * buttons on a floating card that rides at the bottom of the scroll container, so the save button
6271
+ * stays in reach on a long editor.
6272
6272
  *
6273
6273
  * Project a destructive or secondary action with `sdsFormActionsStart` and it is pushed to the left,
6274
6274
  * away from the confirming buttons, which is the point: Delete should not sit a few pixels from Save.
6275
6275
  *
6276
- * Not {@link SdsBulkBar}, which is for a selection: that one hides itself at zero, says "N selected",
6277
- * carries a clear-selection button and is announced as a toolbar. A form footer is none of those, and
6278
- * dressing one up as the other costs a fake count and a screen reader that announces a save bar as
6279
- * bulk actions. This is a plain labelled `role="group"` — not a toolbar, because the buttons belong in
6280
- * the form's normal tab order and a toolbar role tells a screen-reader user to expect arrow keys.
6276
+ * Deliberately the same chrome as {@link SdsBulkBar} — rounded card, full border, solid surface,
6277
+ * `shadow-xl`, floating clear of the bottom edge rather than welded to it, same entrance. The two are
6278
+ * the app's only bars that hover over scrolling content, and a form footer that looked like a
6279
+ * different species from the bulk bar would read as a different kind of thing. What they are not is
6280
+ * the same semantics: that one is a `role="toolbar"` for a selection, announcing "N selected" and
6281
+ * hiding itself at zero. This is a plain labelled `role="group"`, because these buttons belong in the
6282
+ * form's normal tab order and a toolbar role tells a screen-reader user to expect arrow keys.
6281
6283
  *
6282
- * The bar spans its container and carries its own horizontal padding. To let it bleed past a padded
6283
- * container's edge, put the matching negative margin on the host — the host is a block element:
6284
- * `<sds-form-actions class="-mx-4 md:-mx-6">`.
6284
+ * It floats, so do not bleed it past its container with negative margins the way a flush strip wants:
6285
+ * the rounded corners and the shadow need the inset to read as a card.
6285
6286
  *
6286
6287
  * @example
6287
6288
  * <sds-form-actions>
@@ -6299,41 +6300,36 @@ class SdsFormActions {
6299
6300
  */
6300
6301
  ariaLabel = input('Form actions', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
6301
6302
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SdsFormActions, deps: [], target: i0.ɵɵFactoryTarget.Component });
6302
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.25", type: SdsFormActions, isStandalone: true, selector: "sds-form-actions", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.sticky": "position() === 'sticky'", "class.bottom-0": "position() === 'sticky'", "class.z-20": "position() === 'sticky'" }, classAttribute: "block" }, ngImport: i0, template: `
6303
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.25", type: SdsFormActions, isStandalone: true, selector: "sds-form-actions", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.sticky": "position() === 'sticky'", "class.bottom-3": "position() === 'sticky'", "class.z-30": "position() === 'sticky'" }, classAttribute: "block" }, ngImport: i0, template: `
6303
6304
  <div
6304
6305
  role="group"
6305
6306
  [attr.aria-label]="ariaLabel()"
6306
- class="flex flex-wrap items-center justify-end gap-2 border-t border-border bg-surface/95 px-4 py-3 backdrop-blur md:px-6"
6307
+ class="flex flex-wrap items-center justify-end gap-x-3 gap-y-2 rounded-card border border-border bg-surface px-3 py-2 shadow-xl animate-sds-form-actions"
6307
6308
  >
6308
6309
  <!-- Written without inner whitespace so :empty matches when nothing is projected here. -->
6309
6310
  <div class="mr-auto flex flex-wrap items-center gap-2 empty:hidden"><ng-content select="[sdsFormActionsStart]" /></div>
6310
6311
  <ng-content />
6311
6312
  </div>
6312
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
6313
+ `, isInline: true, styles: [".animate-sds-form-actions{animation:sds-form-actions-in .16s ease-out}@keyframes sds-form-actions-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.animate-sds-form-actions{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6313
6314
  }
6314
6315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SdsFormActions, decorators: [{
6315
6316
  type: Component,
6316
- args: [{
6317
- selector: 'sds-form-actions',
6318
- changeDetection: ChangeDetectionStrategy.OnPush,
6319
- host: {
6317
+ args: [{ selector: 'sds-form-actions', changeDetection: ChangeDetectionStrategy.OnPush, host: {
6320
6318
  class: 'block',
6321
6319
  '[class.sticky]': "position() === 'sticky'",
6322
- '[class.bottom-0]': "position() === 'sticky'",
6323
- '[class.z-20]': "position() === 'sticky'",
6324
- },
6325
- template: `
6320
+ '[class.bottom-3]': "position() === 'sticky'",
6321
+ '[class.z-30]': "position() === 'sticky'",
6322
+ }, template: `
6326
6323
  <div
6327
6324
  role="group"
6328
6325
  [attr.aria-label]="ariaLabel()"
6329
- class="flex flex-wrap items-center justify-end gap-2 border-t border-border bg-surface/95 px-4 py-3 backdrop-blur md:px-6"
6326
+ class="flex flex-wrap items-center justify-end gap-x-3 gap-y-2 rounded-card border border-border bg-surface px-3 py-2 shadow-xl animate-sds-form-actions"
6330
6327
  >
6331
6328
  <!-- Written without inner whitespace so :empty matches when nothing is projected here. -->
6332
6329
  <div class="mr-auto flex flex-wrap items-center gap-2 empty:hidden"><ng-content select="[sdsFormActionsStart]" /></div>
6333
6330
  <ng-content />
6334
6331
  </div>
6335
- `,
6336
- }]
6332
+ `, styles: [".animate-sds-form-actions{animation:sds-form-actions-in .16s ease-out}@keyframes sds-form-actions-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.animate-sds-form-actions{animation:none}}\n"] }]
6337
6333
  }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
6338
6334
 
6339
6335
  /**