@ni/nimble-components 20.14.5 → 20.14.7
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/dist/all-components-bundle.js +8 -8
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +6 -6
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/mapping/base/types.d.ts +2 -0
- package/dist/esm/mapping/user/index.d.ts +15 -0
- package/dist/esm/mapping/user/index.js +21 -0
- package/dist/esm/mapping/user/index.js.map +1 -0
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.d.ts +8 -2
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js +21 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
- package/dist/esm/rich-text/editor/testing/types.d.ts +1 -0
- package/dist/esm/rich-text-mention/base/index.d.ts +49 -0
- package/dist/esm/rich-text-mention/base/index.js +87 -0
- package/dist/esm/rich-text-mention/base/index.js.map +1 -0
- package/dist/esm/rich-text-mention/base/models/mapping-config.d.ts +8 -0
- package/dist/esm/rich-text-mention/base/models/mapping-config.js +10 -0
- package/dist/esm/rich-text-mention/base/models/mapping-config.js.map +1 -0
- package/dist/esm/rich-text-mention/base/models/mapping-user-config.d.ts +6 -0
- package/dist/esm/rich-text-mention/base/models/mapping-user-config.js +7 -0
- package/dist/esm/rich-text-mention/base/models/mapping-user-config.js.map +1 -0
- package/dist/esm/rich-text-mention/base/models/mention-internals.d.ts +30 -0
- package/dist/esm/rich-text-mention/base/models/mention-internals.js +22 -0
- package/dist/esm/rich-text-mention/base/models/mention-internals.js.map +1 -0
- package/dist/esm/rich-text-mention/base/models/mention-validator.d.ts +35 -0
- package/dist/esm/rich-text-mention/base/models/mention-validator.js +108 -0
- package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -0
- package/dist/esm/rich-text-mention/base/template.d.ts +2 -0
- package/dist/esm/rich-text-mention/base/template.js +6 -0
- package/dist/esm/rich-text-mention/base/template.js.map +1 -0
- package/dist/esm/rich-text-mention/users/index.d.ts +21 -0
- package/dist/esm/rich-text-mention/users/index.js +43 -0
- package/dist/esm/rich-text-mention/users/index.js.map +1 -0
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.d.ts +14 -0
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.js +23 -0
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.js.map +1 -0
- package/dist/esm/table/index.js +5 -5
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/interactive-selection-manager.d.ts +2 -2
- package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/selection-manager-base.d.ts +4 -4
- package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
- package/dist/esm/table/models/table-validator.d.ts +2 -2
- package/dist/esm/table/models/table-validator.js +2 -2
- package/dist/esm/table/models/table-validator.js.map +1 -1
- package/dist/esm/table/models/virtualizer.d.ts +2 -2
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/types.d.ts +9 -0
- package/dist/esm/table/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Mapping } from '../base';
|
|
2
|
+
import type { MappingUserKey } from '../base/types';
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'nimble-mapping-user': MappingUser;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Maps key (url) to a user
|
|
10
|
+
* Non-visible configuration element for mapping rich text user mention keys to a user
|
|
11
|
+
*/
|
|
12
|
+
export declare class MappingUser extends Mapping<MappingUserKey> {
|
|
13
|
+
displayName?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const mappingUserTag: string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { attr } from '@microsoft/fast-element';
|
|
3
|
+
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
4
|
+
import { Mapping } from '../base';
|
|
5
|
+
import { template } from '../base/template';
|
|
6
|
+
/**
|
|
7
|
+
* Maps key (url) to a user
|
|
8
|
+
* Non-visible configuration element for mapping rich text user mention keys to a user
|
|
9
|
+
*/
|
|
10
|
+
export class MappingUser extends Mapping {
|
|
11
|
+
}
|
|
12
|
+
__decorate([
|
|
13
|
+
attr({ attribute: 'display-name' })
|
|
14
|
+
], MappingUser.prototype, "displayName", void 0);
|
|
15
|
+
const mappingUser = MappingUser.compose({
|
|
16
|
+
baseName: 'mapping-user',
|
|
17
|
+
template
|
|
18
|
+
});
|
|
19
|
+
DesignSystem.getOrCreate().withPrefix('nimble').register(mappingUser());
|
|
20
|
+
export const mappingUserTag = DesignSystem.tagFor(MappingUser);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mapping/user/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAuB;CAGvD;AADG;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;gDACR;AAEhC,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,QAAQ,EAAE,cAAc;IACxB,QAAQ;CACX,CAAC,CAAC;AACH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RichTextEditor } from '..';
|
|
2
|
-
import
|
|
2
|
+
import { ToolbarButton } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Page object for the `nimble-rich-text-editor` component.
|
|
5
5
|
*/
|
|
@@ -13,7 +13,13 @@ export declare class RichTextEditorPageObject {
|
|
|
13
13
|
pressShiftEnterKeysInEditor(): Promise<void>;
|
|
14
14
|
pressTabKeyInEditor(): Promise<void>;
|
|
15
15
|
pressShiftTabKeysInEditor(): Promise<void>;
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* In testing environment, when clicking on the footer button, it may not persist in the same state if any editor transaction occurs in between.
|
|
18
|
+
* This behavior is likely due to dynamic modifications of formatting button states based on cursor positions during editor transactions.
|
|
19
|
+
* Setting the "force" parameter to true activates the formatting button state; when set to false, it deactivates the state.
|
|
20
|
+
* If unset, the state toggles by interacting with it once.
|
|
21
|
+
*/
|
|
22
|
+
toggleFooterButton(button: ToolbarButton, force?: boolean): Promise<void>;
|
|
17
23
|
getButtonCheckedState(button: ToolbarButton): boolean;
|
|
18
24
|
getButtonTabIndex(button: ToolbarButton): number;
|
|
19
25
|
spaceKeyActivatesButton(button: ToolbarButton): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { keySpace, keyEnter, keyTab } from '@microsoft/fast-web-utilities';
|
|
2
2
|
import { waitForUpdatesAsync } from '../../../testing/async-helpers';
|
|
3
|
+
import { ToolbarButton } from './types';
|
|
3
4
|
import { getTagsFromElement, getLeafContentsFromElement, getLastChildElement, getLastChildElementAttribute } from '../../models/testing/markdown-parser-utils';
|
|
4
5
|
/**
|
|
5
6
|
* Page object for the `nimble-rich-text-editor` component.
|
|
@@ -70,11 +71,30 @@ export class RichTextEditorPageObject {
|
|
|
70
71
|
editor.dispatchEvent(shiftTabEvent);
|
|
71
72
|
await waitForUpdatesAsync();
|
|
72
73
|
}
|
|
73
|
-
|
|
74
|
+
/**
|
|
75
|
+
* In testing environment, when clicking on the footer button, it may not persist in the same state if any editor transaction occurs in between.
|
|
76
|
+
* This behavior is likely due to dynamic modifications of formatting button states based on cursor positions during editor transactions.
|
|
77
|
+
* Setting the "force" parameter to true activates the formatting button state; when set to false, it deactivates the state.
|
|
78
|
+
* If unset, the state toggles by interacting with it once.
|
|
79
|
+
*/
|
|
80
|
+
async toggleFooterButton(button, force) {
|
|
74
81
|
const toggleButton = this.getFormattingButton(button);
|
|
75
82
|
const event = new Event('mousedown', { bubbles: true });
|
|
76
83
|
toggleButton.dispatchEvent(event);
|
|
77
84
|
toggleButton.click();
|
|
85
|
+
let format = Object.keys(ToolbarButton).find(key => ToolbarButton[key] === button);
|
|
86
|
+
// In the editor, the isActive() method expects the format name to be 'italic' instead of 'italics.'
|
|
87
|
+
// As it was consistently represent it as 'italics' elsewhere just updated it here
|
|
88
|
+
if (format === 'italics') {
|
|
89
|
+
format = 'italic';
|
|
90
|
+
}
|
|
91
|
+
if (force === true || force === false) {
|
|
92
|
+
if (this.richTextEditorElement.tiptapEditor.isActive(format)
|
|
93
|
+
!== force) {
|
|
94
|
+
toggleButton.dispatchEvent(event);
|
|
95
|
+
toggleButton.click();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
78
98
|
await waitForUpdatesAsync();
|
|
79
99
|
}
|
|
80
100
|
getButtonCheckedState(button) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rich-text-editor.pageobject.js","sourceRoot":"","sources":["../../../../../src/rich-text/editor/testing/rich-text-editor.pageobject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"rich-text-editor.pageobject.js","sourceRoot":"","sources":["../../../../../src/rich-text/editor/testing/rich-text-editor.pageobject.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,3 +6,4 @@ export declare const ToolbarButton: {
|
|
|
6
6
|
};
|
|
7
7
|
export declare type ToolbarButton = (typeof ToolbarButton)[keyof typeof ToolbarButton];
|
|
8
8
|
export declare type LabelProvider = 'toggleBold' | 'toggleItalics' | 'toggleBulletedList' | 'toggleNumberedList';
|
|
9
|
+
export declare type ToolbarButtonKey = keyof typeof ToolbarButton;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Notifier, Subscriber } from '@microsoft/fast-element';
|
|
2
|
+
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
3
|
+
import type { MappingConfig } from './models/mapping-config';
|
|
4
|
+
import type { RichTextMentionValidator, RichTextMentionValidity } from './models/mention-validator';
|
|
5
|
+
import { MentionInternals, MentionInternalsOptions } from './models/mention-internals';
|
|
6
|
+
import { Mapping } from '../../mapping/base';
|
|
7
|
+
export declare type MappingConfigs = ReadonlyMap<string, MappingConfig>;
|
|
8
|
+
export interface RichTextMentionConfig {
|
|
9
|
+
mappingConfigs: MappingConfigs;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The base class for Mention configuration
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class RichTextMention<TMentionConfig extends RichTextMentionConfig = RichTextMentionConfig, TValidator extends RichTextMentionValidator<[
|
|
15
|
+
]> = RichTextMentionValidator<[]>> extends FoundationElement implements Subscriber {
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
readonly mentionInternals: MentionInternals<TMentionConfig>;
|
|
20
|
+
/** @internal */
|
|
21
|
+
readonly validator: TValidator;
|
|
22
|
+
/**
|
|
23
|
+
* A regex used to extract user ID from user key (url) while parsing and serializing a markdown.
|
|
24
|
+
*/
|
|
25
|
+
pattern?: string;
|
|
26
|
+
/** @internal */
|
|
27
|
+
mappingNotifiers: Notifier[];
|
|
28
|
+
/** @internal */
|
|
29
|
+
mappings: Mapping<unknown>[];
|
|
30
|
+
checkValidity(): boolean;
|
|
31
|
+
get validity(): RichTextMentionValidity;
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
handleChange(source: unknown, args: unknown): void;
|
|
36
|
+
protected abstract createValidator(): TValidator;
|
|
37
|
+
protected abstract getMentionInternalsOptions(): MentionInternalsOptions;
|
|
38
|
+
protected abstract createMentionConfig(mappingConfigs: MappingConfigs): TMentionConfig;
|
|
39
|
+
protected abstract createMappingConfig(mapping: Mapping<unknown>): MappingConfig;
|
|
40
|
+
private getMappingConfigs;
|
|
41
|
+
/**
|
|
42
|
+
* Called when any Mapping related state has changed.
|
|
43
|
+
*/
|
|
44
|
+
private updateMentionConfig;
|
|
45
|
+
private mappingsChanged;
|
|
46
|
+
private patternChanged;
|
|
47
|
+
private removeMappingObservers;
|
|
48
|
+
private observeMappings;
|
|
49
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { attr, Observable, observable } from '@microsoft/fast-element';
|
|
3
|
+
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
4
|
+
import { MentionInternals } from './models/mention-internals';
|
|
5
|
+
import { Mapping } from '../../mapping/base';
|
|
6
|
+
/**
|
|
7
|
+
* The base class for Mention configuration
|
|
8
|
+
*/
|
|
9
|
+
export class RichTextMention extends FoundationElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
this.mentionInternals = new MentionInternals(this.getMentionInternalsOptions());
|
|
16
|
+
/** @internal */
|
|
17
|
+
this.validator = this.createValidator();
|
|
18
|
+
/** @internal */
|
|
19
|
+
this.mappingNotifiers = [];
|
|
20
|
+
/** @internal */
|
|
21
|
+
this.mappings = [];
|
|
22
|
+
}
|
|
23
|
+
checkValidity() {
|
|
24
|
+
return this.mentionInternals.validConfiguration;
|
|
25
|
+
}
|
|
26
|
+
get validity() {
|
|
27
|
+
return this.validator.getValidity();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
handleChange(source, args) {
|
|
33
|
+
if (source instanceof Mapping && typeof args === 'string') {
|
|
34
|
+
this.updateMentionConfig();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
getMappingConfigs() {
|
|
38
|
+
const mappingConfigs = new Map();
|
|
39
|
+
this.mappings.forEach(mapping => {
|
|
40
|
+
const href = mapping.key ?? undefined;
|
|
41
|
+
if (href === undefined || typeof href !== 'string') {
|
|
42
|
+
throw Error('mentionHref was invalid for type. Validation should have prevented this.');
|
|
43
|
+
}
|
|
44
|
+
const mappingConfig = this.createMappingConfig(mapping);
|
|
45
|
+
mappingConfigs.set(href, mappingConfig);
|
|
46
|
+
});
|
|
47
|
+
return mappingConfigs;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Called when any Mapping related state has changed.
|
|
51
|
+
*/
|
|
52
|
+
updateMentionConfig() {
|
|
53
|
+
this.validator.validate(this.mappings, this.pattern);
|
|
54
|
+
this.mentionInternals.mentionConfig = this.validator.isValid()
|
|
55
|
+
? this.createMentionConfig(this.getMappingConfigs())
|
|
56
|
+
: undefined;
|
|
57
|
+
}
|
|
58
|
+
mappingsChanged() {
|
|
59
|
+
this.updateMentionConfig();
|
|
60
|
+
this.observeMappings();
|
|
61
|
+
}
|
|
62
|
+
patternChanged() {
|
|
63
|
+
this.mentionInternals.pattern = this.pattern;
|
|
64
|
+
this.updateMentionConfig();
|
|
65
|
+
}
|
|
66
|
+
removeMappingObservers() {
|
|
67
|
+
this.mappingNotifiers.forEach(notifier => {
|
|
68
|
+
notifier.unsubscribe(this);
|
|
69
|
+
});
|
|
70
|
+
this.mappingNotifiers = [];
|
|
71
|
+
}
|
|
72
|
+
observeMappings() {
|
|
73
|
+
this.removeMappingObservers();
|
|
74
|
+
for (const mapping of this.mappings) {
|
|
75
|
+
const notifier = Observable.getNotifier(mapping);
|
|
76
|
+
notifier.subscribe(this);
|
|
77
|
+
this.mappingNotifiers.push(notifier);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
__decorate([
|
|
82
|
+
attr
|
|
83
|
+
], RichTextMention.prototype, "pattern", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
observable
|
|
86
|
+
], RichTextMention.prototype, "mappings", void 0);
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rich-text-mention/base/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common state shared across Mapping Config
|
|
3
|
+
*/
|
|
4
|
+
export declare abstract class MappingConfig {
|
|
5
|
+
readonly mentionHref: string | undefined;
|
|
6
|
+
readonly displayName: string | undefined;
|
|
7
|
+
constructor(mentionHref: string | undefined, displayName: string | undefined);
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping-config.js","sourceRoot":"","sources":["../../../../../src/rich-text-mention/base/models/mapping-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAgB,aAAa;IAC/B,YACoB,WAA+B,EAC/B,WAA+B;QAD/B,gBAAW,GAAX,WAAW,CAAoB;QAC/B,gBAAW,GAAX,WAAW,CAAoB;IAChD,CAAC;CACP"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping-user-config.js","sourceRoot":"","sources":["../../../../../src/rich-text-mention/base/models/mapping-user-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;CAAG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface MentionInternalsOptions {
|
|
2
|
+
readonly icon: string;
|
|
3
|
+
readonly character: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Internal mention state
|
|
7
|
+
*/
|
|
8
|
+
export declare class MentionInternals<TMentionConfig> {
|
|
9
|
+
/**
|
|
10
|
+
* Configuration which will hold mentioning info, character, icon and pattern
|
|
11
|
+
*/
|
|
12
|
+
mentionConfig?: TMentionConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Whether this mention has a valid configuration.
|
|
15
|
+
*/
|
|
16
|
+
validConfiguration: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Regex used to extract user ID from user key (url)
|
|
19
|
+
*/
|
|
20
|
+
pattern?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Icon to display on RichTextEditor Toolbar
|
|
23
|
+
*/
|
|
24
|
+
readonly icon: string;
|
|
25
|
+
/**
|
|
26
|
+
* Character to show respective mention list
|
|
27
|
+
*/
|
|
28
|
+
readonly character: string;
|
|
29
|
+
constructor(options: MentionInternalsOptions);
|
|
30
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { observable } from '@microsoft/fast-element';
|
|
3
|
+
/**
|
|
4
|
+
* Internal mention state
|
|
5
|
+
*/
|
|
6
|
+
export class MentionInternals {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
/**
|
|
9
|
+
* Whether this mention has a valid configuration.
|
|
10
|
+
*/
|
|
11
|
+
this.validConfiguration = true;
|
|
12
|
+
this.icon = options.icon;
|
|
13
|
+
this.character = options.character;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
__decorate([
|
|
17
|
+
observable
|
|
18
|
+
], MentionInternals.prototype, "mentionConfig", void 0);
|
|
19
|
+
__decorate([
|
|
20
|
+
observable
|
|
21
|
+
], MentionInternals.prototype, "validConfiguration", void 0);
|
|
22
|
+
//# sourceMappingURL=mention-internals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-internals.js","sourceRoot":"","sources":["../../../../../src/rich-text-mention/base/models/mention-internals.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAOrD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IA4BzB,YAAmB,OAAgC;QArBnD;;WAEG;QAEI,uBAAkB,GAAG,IAAI,CAAC;QAkB7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACvC,CAAC;CACJ;AA3BG;IADC,UAAU;uDAC2B;AAMtC;IADC,UAAU;4DACsB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Mapping } from '../../../mapping/base';
|
|
2
|
+
import { Validator, ValidityObject } from '../../../utilities/models/validator';
|
|
3
|
+
import type { MentionInternals } from './mention-internals';
|
|
4
|
+
export interface RichTextMentionValidity extends ValidityObject {
|
|
5
|
+
}
|
|
6
|
+
declare type FlagNames<T> = T extends readonly (infer U)[] ? U : never;
|
|
7
|
+
export declare const baseValidityFlagNames: readonly ["unsupportedMappingType", "duplicateMappingMentionHref", "missingMentionHrefValue", "mentionHrefNotValidUrl", "mentionHrefDoesNotMatchPattern", "missingPatternAttribute", "unsupportedPatternValue"];
|
|
8
|
+
/**
|
|
9
|
+
* Validator for RichTextMention
|
|
10
|
+
*/
|
|
11
|
+
export declare class RichTextMentionValidator<ValidityFlagNames extends readonly string[]> extends Validator<typeof baseValidityFlagNames | ValidityFlagNames> {
|
|
12
|
+
private readonly mentionInternals;
|
|
13
|
+
private readonly supportedMappingElements;
|
|
14
|
+
constructor(mentionInternals: MentionInternals<unknown>, configValidityKeys: ValidityFlagNames, supportedMappingElements: readonly (typeof Mapping<unknown>)[]);
|
|
15
|
+
validate(mappings: Mapping<unknown>[], pattern: string | undefined): void;
|
|
16
|
+
/**
|
|
17
|
+
* @returns an object containing flags for various ways the configuation can be invalid
|
|
18
|
+
*/
|
|
19
|
+
getValidity(): RichTextMentionValidity;
|
|
20
|
+
/**
|
|
21
|
+
* Sets a particular validity condition flag's value, e.g. "hasInvalidFooValue" = true
|
|
22
|
+
*/
|
|
23
|
+
protected setConditionValue(name: FlagNames<typeof baseValidityFlagNames | ValidityFlagNames>, isInvalid: boolean): void;
|
|
24
|
+
private updateMentionInternalsFlag;
|
|
25
|
+
private validateMissingPattern;
|
|
26
|
+
private validatePattern;
|
|
27
|
+
private validateMappingTypes;
|
|
28
|
+
private validateUniqueMentionHref;
|
|
29
|
+
private validateNoMissingMentionHref;
|
|
30
|
+
private validateHrefForUrl;
|
|
31
|
+
private validateHrefForPattern;
|
|
32
|
+
private isInvalidUrl;
|
|
33
|
+
private isInvalidRegex;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Validator } from '../../../utilities/models/validator';
|
|
2
|
+
export const baseValidityFlagNames = [
|
|
3
|
+
'unsupportedMappingType',
|
|
4
|
+
'duplicateMappingMentionHref',
|
|
5
|
+
'missingMentionHrefValue',
|
|
6
|
+
'mentionHrefNotValidUrl',
|
|
7
|
+
'mentionHrefDoesNotMatchPattern',
|
|
8
|
+
'missingPatternAttribute',
|
|
9
|
+
'unsupportedPatternValue'
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Validator for RichTextMention
|
|
13
|
+
*/
|
|
14
|
+
export class RichTextMentionValidator extends Validator {
|
|
15
|
+
constructor(mentionInternals, configValidityKeys, supportedMappingElements) {
|
|
16
|
+
super(configValidityKeys);
|
|
17
|
+
this.mentionInternals = mentionInternals;
|
|
18
|
+
this.supportedMappingElements = supportedMappingElements;
|
|
19
|
+
}
|
|
20
|
+
validate(mappings, pattern) {
|
|
21
|
+
this.untrackAll();
|
|
22
|
+
const mentionHrefs = mappings.map(mapping => mapping.key);
|
|
23
|
+
this.validateMappingTypes(mappings);
|
|
24
|
+
this.validateNoMissingMentionHref(mentionHrefs);
|
|
25
|
+
this.validateUniqueMentionHref(mentionHrefs);
|
|
26
|
+
this.validateMissingPattern(pattern);
|
|
27
|
+
this.validatePattern(pattern);
|
|
28
|
+
this.validateHrefForPattern(mentionHrefs, pattern);
|
|
29
|
+
this.validateHrefForUrl(mentionHrefs);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @returns an object containing flags for various ways the configuation can be invalid
|
|
33
|
+
*/
|
|
34
|
+
getValidity() {
|
|
35
|
+
return this.getValidationFlags();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sets a particular validity condition flag's value, e.g. "hasInvalidFooValue" = true
|
|
39
|
+
*/
|
|
40
|
+
setConditionValue(name, isInvalid) {
|
|
41
|
+
if (isInvalid) {
|
|
42
|
+
this.track(name);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.untrack(name);
|
|
46
|
+
}
|
|
47
|
+
this.updateMentionInternalsFlag();
|
|
48
|
+
}
|
|
49
|
+
updateMentionInternalsFlag() {
|
|
50
|
+
this.mentionInternals.validConfiguration = this.isValid();
|
|
51
|
+
}
|
|
52
|
+
validateMissingPattern(pattern) {
|
|
53
|
+
this.setConditionValue('missingPatternAttribute', pattern === undefined);
|
|
54
|
+
}
|
|
55
|
+
validatePattern(pattern) {
|
|
56
|
+
this.setConditionValue('unsupportedPatternValue', pattern === undefined || this.isInvalidRegex(pattern));
|
|
57
|
+
}
|
|
58
|
+
validateMappingTypes(mappings) {
|
|
59
|
+
const valid = mappings.every(mapping => this.supportedMappingElements.some(mappingClass => mapping instanceof mappingClass));
|
|
60
|
+
this.setConditionValue('unsupportedMappingType', !valid);
|
|
61
|
+
}
|
|
62
|
+
validateUniqueMentionHref(mentionHref) {
|
|
63
|
+
const invalid = new Set(mentionHref).size !== mentionHref.length;
|
|
64
|
+
this.setConditionValue('duplicateMappingMentionHref', invalid);
|
|
65
|
+
}
|
|
66
|
+
validateNoMissingMentionHref(mentionHrefs) {
|
|
67
|
+
const invalid = mentionHrefs.some(href => href === undefined);
|
|
68
|
+
this.setConditionValue('missingMentionHrefValue', invalid);
|
|
69
|
+
}
|
|
70
|
+
validateHrefForUrl(mentionHrefs) {
|
|
71
|
+
const invalid = mentionHrefs.some(href => {
|
|
72
|
+
return (href === undefined
|
|
73
|
+
|| typeof href !== 'string'
|
|
74
|
+
|| this.isInvalidUrl(href));
|
|
75
|
+
});
|
|
76
|
+
this.setConditionValue('mentionHrefNotValidUrl', invalid);
|
|
77
|
+
}
|
|
78
|
+
validateHrefForPattern(mentionHrefs, pattern) {
|
|
79
|
+
const invalid = pattern === undefined || this.isInvalidRegex(pattern)
|
|
80
|
+
? true
|
|
81
|
+
: mentionHrefs.some(href => {
|
|
82
|
+
return (href === undefined
|
|
83
|
+
|| typeof href !== 'string'
|
|
84
|
+
|| !RegExp(pattern).test(href));
|
|
85
|
+
});
|
|
86
|
+
this.setConditionValue('mentionHrefDoesNotMatchPattern', invalid);
|
|
87
|
+
}
|
|
88
|
+
isInvalidUrl(url) {
|
|
89
|
+
try {
|
|
90
|
+
// eslint-disable-next-line no-new
|
|
91
|
+
new URL(url);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
isInvalidRegex(pattern) {
|
|
99
|
+
try {
|
|
100
|
+
RegExp(pattern);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=mention-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-validator.js","sourceRoot":"","sources":["../../../../../src/rich-text-mention/base/models/mention-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/rich-text-mention/base/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGxD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAiB;MACvC,OAAO,CAAC,UAAU,CAAC;;SAEhB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { MentionInternalsOptions } from '../base/models/mention-internals';
|
|
2
|
+
import { MappingConfigs, RichTextMention, RichTextMentionConfig } from '../base';
|
|
3
|
+
import type { MappingConfig } from '../base/models/mapping-config';
|
|
4
|
+
import type { Mapping } from '../../mapping/base';
|
|
5
|
+
import type { MappingUserKey } from '../../mapping/base/types';
|
|
6
|
+
import { RichTextMentionUsersValidator } from './models/rich-text-mention-users-validator';
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'nimble-rich-text-mention-users': RichTextMentionUsers;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Rich Text user mention configuration element which will have MappingMentionUser elements as children
|
|
14
|
+
*/
|
|
15
|
+
export declare class RichTextMentionUsers extends RichTextMention<RichTextMentionConfig, RichTextMentionUsersValidator> {
|
|
16
|
+
protected createValidator(): RichTextMentionUsersValidator;
|
|
17
|
+
protected getMentionInternalsOptions(): MentionInternalsOptions;
|
|
18
|
+
protected createMentionConfig(mappingConfigs: MappingConfigs): RichTextMentionConfig;
|
|
19
|
+
protected createMappingConfig(mapping: Mapping<MappingUserKey>): MappingConfig;
|
|
20
|
+
}
|
|
21
|
+
export declare const richTextMentionUsersTag: string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
2
|
+
import { RichTextMention } from '../base';
|
|
3
|
+
import { MappingUserConfig } from '../base/models/mapping-user-config';
|
|
4
|
+
import { template } from '../base/template';
|
|
5
|
+
import { iconAtTag } from '../../icons/at';
|
|
6
|
+
import { MappingUser } from '../../mapping/user';
|
|
7
|
+
import { RichTextMentionUsersValidator } from './models/rich-text-mention-users-validator';
|
|
8
|
+
/**
|
|
9
|
+
* Rich Text user mention configuration element which will have MappingMentionUser elements as children
|
|
10
|
+
*/
|
|
11
|
+
export class RichTextMentionUsers extends RichTextMention {
|
|
12
|
+
createValidator() {
|
|
13
|
+
return new RichTextMentionUsersValidator(this.mentionInternals);
|
|
14
|
+
}
|
|
15
|
+
getMentionInternalsOptions() {
|
|
16
|
+
return {
|
|
17
|
+
icon: iconAtTag,
|
|
18
|
+
character: '@'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
createMentionConfig(mappingConfigs) {
|
|
22
|
+
return {
|
|
23
|
+
mappingConfigs
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
createMappingConfig(mapping) {
|
|
27
|
+
if (mapping instanceof MappingUser) {
|
|
28
|
+
return new MappingUserConfig(mapping.key, mapping.displayName);
|
|
29
|
+
}
|
|
30
|
+
// Getting here would indicate a programming error, b/c validation will prevent
|
|
31
|
+
// this function from running when there is an unsupported mapping.
|
|
32
|
+
throw new Error('Unsupported mapping');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const nimbleRichTextMentionUsers = RichTextMentionUsers.compose({
|
|
36
|
+
baseName: 'rich-text-mention-users',
|
|
37
|
+
template
|
|
38
|
+
});
|
|
39
|
+
DesignSystem.getOrCreate()
|
|
40
|
+
.withPrefix('nimble')
|
|
41
|
+
.register(nimbleRichTextMentionUsers());
|
|
42
|
+
export const richTextMentionUsersTag = DesignSystem.tagFor(RichTextMentionUsers);
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rich-text-mention/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAEH,eAAe,EAElB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAQ3F;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAGzC;IACsB,eAAe;QAC9B,OAAO,IAAI,6BAA6B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpE,CAAC;IAEkB,0BAA0B;QACzC,OAAO;YACH,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,GAAG;SACjB,CAAC;IACN,CAAC;IAEkB,mBAAmB,CAClC,cAA8B;QAE9B,OAAO;YACH,cAAc;SACjB,CAAC;IACN,CAAC;IAES,mBAAmB,CACzB,OAAgC;QAEhC,IAAI,OAAO,YAAY,WAAW,EAAE;YAChC,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;SAClE;QACD,+EAA+E;QAC/E,mEAAmE;QACnE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;CACJ;AACD,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAC5D,QAAQ,EAAE,yBAAyB;IACnC,QAAQ;CACX,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC"}
|