diff --git a/source/ios/tools/AdaptiveCards.podspec b/source/ios/tools/AdaptiveCards.podspec index 615ad52da6..f307e66c2e 100644 --- a/source/ios/tools/AdaptiveCards.podspec +++ b/source/ios/tools/AdaptiveCards.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |spec| spec.name = 'AdaptiveCards' - spec.version = '2.9.1' + spec.version = '2.9.2' spec.license = { :type => 'Adaptive Cards Binary EULA', :file => 'source/EULA-Non-Windows.txt' } @@ -11,7 +11,7 @@ Pod::Spec.new do |spec| spec.summary = 'Adaptive Cards are a new way for developers to exchange card content in a common and consistent way' - spec.source = { :git => 'https://github.com/microsoft/AdaptiveCards.git', :tag => 'ios-v2.9.1' } + spec.source = { :git => 'https://github.com/microsoft/AdaptiveCards.git', :tag => 'ios-v2.9.2' } spec.default_subspecs = 'AdaptiveCardsCore', 'AdaptiveCardsPrivate', 'ObjectModel', 'UIProviders' diff --git a/source/nodejs/adaptivecards-designer/src/adaptivecards-designer.css b/source/nodejs/adaptivecards-designer/src/adaptivecards-designer.css index cf7d9e0dd3..c37a1e0c13 100644 --- a/source/nodejs/adaptivecards-designer/src/adaptivecards-designer.css +++ b/source/nodejs/adaptivecards-designer/src/adaptivecards-designer.css @@ -1718,3 +1718,16 @@ a.default-ac-anchor:visited:active { visibility: hidden; } } + +.screen-reader-only { + border: 0; + clip: rect(0,0,0,0); + clip-path: inset(50%); + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + position: absolute; + white-space: nowrap; +} diff --git a/source/nodejs/adaptivecards-designer/src/card-designer.ts b/source/nodejs/adaptivecards-designer/src/card-designer.ts index fe08201c4d..9f656f8892 100644 --- a/source/nodejs/adaptivecards-designer/src/card-designer.ts +++ b/source/nodejs/adaptivecards-designer/src/card-designer.ts @@ -1525,7 +1525,11 @@ export class CardDesigner extends Designer.DesignContext { text: (trigger) => JSON.stringify(this.getBoundCard(), null, 4) }) .on("error", () => this._copyJSONButton.renderedElement.focus()) - .on("success", () => this._copyJSONButton.renderedElement.focus()); + .on("success", () => { + this._copyJSONButton.renderedElement.focus() + + this.toolbar.addAlert("Card payload copied"); + }); } // Tool palette panel diff --git a/source/nodejs/adaptivecards-designer/src/toolbar.ts b/source/nodejs/adaptivecards-designer/src/toolbar.ts index f46d30b64e..ca42b40462 100644 --- a/source/nodejs/adaptivecards-designer/src/toolbar.ts +++ b/source/nodejs/adaptivecards-designer/src/toolbar.ts @@ -334,6 +334,7 @@ export class ToolbarChoicePicker extends ToolbarElement { export class Toolbar { private _elements: Array = []; private _attachedTo: HTMLElement; + private _alertPanel: HTMLDivElement; private createSeparatorElement(): HTMLElement { let separatorElement = document.createElement("div"); @@ -395,6 +396,10 @@ export class Toolbar { this._attachedTo.appendChild(leftContainer); this._attachedTo.appendChild(rightContainer); + + this._alertPanel = document.createElement("div"); + this._alertPanel.className = "screen-reader-only"; + this._attachedTo.appendChild(this._alertPanel); } addElement(element: ToolbarElement) { @@ -438,4 +443,11 @@ export class Toolbar { // specified id this._elements.splice(0, 0, element); } + + addAlert(alertText: string) { + var alert = document.createElement('div'); + alert.innerHTML = alertText; + alert.setAttribute("aria-live", "polite"); + this._alertPanel.appendChild(alert); + } }