@inploi/plugin-feedback 6.1.1 → 6.3.0
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/cdn/index.js +12 -13
- package/dist/index.d.cts +182 -0
- package/dist/index.d.ts +182 -2
- package/dist/plugin-feedback.cjs +402 -535
- package/dist/plugin-feedback.js +402 -535
- package/package.json +17 -11
- package/dist/components/feedback-widget.d.ts +0 -13
- package/dist/components/feedback-widget.test.d.ts +0 -1
- package/dist/components/icon.d.ts +0 -19
- package/dist/feedback.constants.d.ts +0 -1
- package/dist/feedback.d.ts +0 -72
- package/dist/feedback.dev.d.ts +0 -1
- package/dist/i18n.d.ts +0 -97
- package/dist/index.cdn.d.ts +0 -9
- package/dist/mocks/browser.d.ts +0 -1
- package/dist/mocks/handlers.d.ts +0 -1
- package/dist/style/theme.d.ts +0 -7
- package/dist/style/tokens.d.ts +0 -102
- package/dist/style/tokens.test.d.ts +0 -1
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { AnalyticsService } from '@inploi/sdk' with { 'resolution-mode': 'import' };
|
|
2
|
+
import type { ApiClient } from '@inploi/sdk' with { 'resolution-mode': 'import' };
|
|
3
|
+
import type { InploiRpcClient } from '@inploi/sdk' with { 'resolution-mode': 'import' };
|
|
4
|
+
import type { InploiSdkEnvironment } from '@inploi/sdk' with { 'resolution-mode': 'import' };
|
|
5
|
+
import type { Logger } from '@inploi/sdk' with { 'resolution-mode': 'import' };
|
|
6
|
+
|
|
7
|
+
export declare const createFeedbackDomManager: (logger: Logger) => {
|
|
8
|
+
getRenderTargetElement: (key: string) => Element;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare const createTFunction: <T extends {
|
|
12
|
+
readonly a11y_label: "How was your experience?";
|
|
13
|
+
readonly positive_label: "Good";
|
|
14
|
+
readonly negative_label: "Bad";
|
|
15
|
+
readonly positive_heading: "Thanks!";
|
|
16
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
17
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
18
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
19
|
+
readonly submit: "Send feedback";
|
|
20
|
+
readonly submitting: "Sending feedback...";
|
|
21
|
+
readonly skip: "No, thanks";
|
|
22
|
+
readonly submitted_heading: "Thank you!";
|
|
23
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
24
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
25
|
+
} = {
|
|
26
|
+
readonly a11y_label: "How was your experience?";
|
|
27
|
+
readonly positive_label: "Good";
|
|
28
|
+
readonly negative_label: "Bad";
|
|
29
|
+
readonly positive_heading: "Thanks!";
|
|
30
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
31
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
32
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
33
|
+
readonly submit: "Send feedback";
|
|
34
|
+
readonly submitting: "Sending feedback...";
|
|
35
|
+
readonly skip: "No, thanks";
|
|
36
|
+
readonly submitted_heading: "Thank you!";
|
|
37
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
38
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
39
|
+
}>(options: {
|
|
40
|
+
overrides: Partial<TranslationDict< {
|
|
41
|
+
readonly a11y_label: "How was your experience?";
|
|
42
|
+
readonly positive_label: "Good";
|
|
43
|
+
readonly negative_label: "Bad";
|
|
44
|
+
readonly positive_heading: "Thanks!";
|
|
45
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
46
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
47
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
48
|
+
readonly submit: "Send feedback";
|
|
49
|
+
readonly submitting: "Sending feedback...";
|
|
50
|
+
readonly skip: "No, thanks";
|
|
51
|
+
readonly submitted_heading: "Thank you!";
|
|
52
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
53
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
54
|
+
}>>;
|
|
55
|
+
locale: string | undefined;
|
|
56
|
+
}) => TFn<T>;
|
|
57
|
+
|
|
58
|
+
/** Given a string with double curly braces, returns the content of all curly braces. */
|
|
59
|
+
declare type ExtractParams<T extends string> = T extends `${infer Head}{{${infer Param}}}${infer Tail}` ? Param | ExtractParams<Tail> : never;
|
|
60
|
+
|
|
61
|
+
export declare type Feedback = ReturnType<FeedbackPlugin>;
|
|
62
|
+
|
|
63
|
+
export declare type FeedbackDomManager = ReturnType<typeof createFeedbackDomManager>;
|
|
64
|
+
|
|
65
|
+
export declare type FeedbackPlugin = ReturnType<typeof feedbackPlugin>;
|
|
66
|
+
|
|
67
|
+
export declare const feedbackPlugin: () => ({ apiClient, logger, analytics }: {
|
|
68
|
+
apiClient: ApiClient;
|
|
69
|
+
rpcClient: InploiRpcClient;
|
|
70
|
+
logger: Logger;
|
|
71
|
+
analytics: AnalyticsService;
|
|
72
|
+
publishableKey?: string;
|
|
73
|
+
env?: InploiSdkEnvironment;
|
|
74
|
+
}) => {
|
|
75
|
+
/** Returns a string with the initial rendering state of the UI.
|
|
76
|
+
* Useful when server-side rendering to avoid CLS.
|
|
77
|
+
*/
|
|
78
|
+
prerender: (params: FeedbackPluginParams) => Promise<{
|
|
79
|
+
html: string;
|
|
80
|
+
}>;
|
|
81
|
+
/** Renders the Job Alerts Plugin inside the container element. */
|
|
82
|
+
render: (params: FeedbackPluginRenderParams) => Promise<void>;
|
|
83
|
+
/** Release one target's widget (and its portals), leaving any other target's. */
|
|
84
|
+
unmount: (target: HTMLElement) => void;
|
|
85
|
+
/** Release components, portals and document listeners when an owning widget unmounts. */
|
|
86
|
+
destroy: () => void;
|
|
87
|
+
'~brand': "@inploi/plugin-feedback";
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export declare type FeedbackPluginParams = {
|
|
91
|
+
/**
|
|
92
|
+
* A unique identifier for this feedback widget.
|
|
93
|
+
* It’s up to you to ensure there is a valid feedback widget element with the property data-key="[key]"
|
|
94
|
+
*/
|
|
95
|
+
key: string;
|
|
96
|
+
theme: {
|
|
97
|
+
mode: 'light' | 'dark';
|
|
98
|
+
corners: 'rounded' | 'soft' | 'sharp';
|
|
99
|
+
highlights: 'stroke' | 'fill';
|
|
100
|
+
accent: PaletteParams;
|
|
101
|
+
/**
|
|
102
|
+
* Paint the solid accent fill (the submit button) in this exact CSS colour, with `text` on it, instead of the
|
|
103
|
+
* palette shade generated from `accent`. Text and focus rings keep the palette's shades; `accent` still tints the
|
|
104
|
+
* neutrals. Both values must each be a single CSS colour (as `getComputedStyle` returns for a custom property).
|
|
105
|
+
*/
|
|
106
|
+
exactAccent?: {
|
|
107
|
+
color: string;
|
|
108
|
+
text: string;
|
|
109
|
+
};
|
|
110
|
+
positive: PaletteParams;
|
|
111
|
+
negative: PaletteParams;
|
|
112
|
+
};
|
|
113
|
+
terms: Partial<FeedbackTranslationTerms>;
|
|
114
|
+
locale?: string;
|
|
115
|
+
size: 'sm' | 'md' | 'lg';
|
|
116
|
+
/**
|
|
117
|
+
* The rating to show, for a host that draws the same key's ratings in more than one place: each follows the one
|
|
118
|
+
* rating (pass back what `onScore` reports). Absent, the widget keeps its own.
|
|
119
|
+
*/
|
|
120
|
+
score?: 0 | 1 | -1;
|
|
121
|
+
/**
|
|
122
|
+
* Logged with every rating and comment this widget sends, beside its `key` (which stays the reporting key): where the
|
|
123
|
+
* widget is drawn, and the build that drew it, for a host that draws one key in more than one place.
|
|
124
|
+
*/
|
|
125
|
+
source?: {
|
|
126
|
+
placement?: 'header' | 'end';
|
|
127
|
+
widget_version?: string;
|
|
128
|
+
};
|
|
129
|
+
onLeaveComment?: () => void;
|
|
130
|
+
/** A rating, once it has been logged. */
|
|
131
|
+
onRate?: (rate: 0 | 1 | -1) => void;
|
|
132
|
+
/** The rating as it's pressed (1 or -1), or cleared (0: pressed again, which logs nothing, or its log failed). */
|
|
133
|
+
onScore?: (score: 0 | 1 | -1) => void;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export declare interface FeedbackPluginRenderParams extends FeedbackPluginParams {
|
|
137
|
+
host?: HTMLElement;
|
|
138
|
+
/** Explicit render target for widgets that share the same analytics key. */
|
|
139
|
+
target?: HTMLElement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Visual theme for the Feedback widget. */
|
|
143
|
+
export declare type FeedbackTheme = FeedbackPluginParams['theme'];
|
|
144
|
+
|
|
145
|
+
export declare type FeedbackTranslationTerms = Parameters<typeof createTFunction>[0]['overrides'] | undefined;
|
|
146
|
+
|
|
147
|
+
declare type HintedString<KnownValues> = (string & {}) | KnownValues;
|
|
148
|
+
|
|
149
|
+
declare type PaletteParams = {
|
|
150
|
+
/** Number between 0 and 360. Number above or below range will loop. */
|
|
151
|
+
hue: number;
|
|
152
|
+
/** Float between 0 and 2. Acts as a multiplier to the original generated palette. */
|
|
153
|
+
chroma: number;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
declare type Terms = Record<string, string | TranslationWithPlurals>;
|
|
157
|
+
|
|
158
|
+
declare interface TFn<TTerms extends Terms> {
|
|
159
|
+
<K extends TranslationKeyWithParams<TTerms>>(key: K, options: TTerms[K] extends string ? {
|
|
160
|
+
[_Term in ExtractParams<TTerms[K]>]: number | string;
|
|
161
|
+
} : {
|
|
162
|
+
[_Term in ExtractParams<TTerms[K][keyof TTerms[K]] & string> | 'count']: number | string;
|
|
163
|
+
}): string;
|
|
164
|
+
<T extends Exclude<keyof (keyof TranslationDict<TTerms>), TranslationKeyWithParams<TTerms>>>(key: T): string;
|
|
165
|
+
<T extends keyof TranslationDict<TTerms>>(key: T, options?: {
|
|
166
|
+
[key: string]: string | number;
|
|
167
|
+
}): string;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
declare type TranslationDict<TTerms extends Terms> = {
|
|
171
|
+
[K in keyof TTerms]: TTerms[K] extends TranslationWithPlurals ? {
|
|
172
|
+
[J in keyof TTerms[K]]: HintedString<TTerms[K][J]>;
|
|
173
|
+
} : HintedString<TTerms[K]>;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
declare type TranslationKeyWithParams<TTerms extends Terms> = {
|
|
177
|
+
[K in keyof TTerms]: TTerms[K] extends TranslationWithPlurals ? K : ExtractParams<TTerms[K] & string> extends never ? never : K;
|
|
178
|
+
}[keyof TranslationDict<TTerms>];
|
|
179
|
+
|
|
180
|
+
declare type TranslationWithPlurals = Partial<Record<Intl.LDMLPluralRule, string>>;
|
|
181
|
+
|
|
182
|
+
export { }
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,182 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { AnalyticsService } from '@inploi/sdk';
|
|
2
|
+
import { ApiClient } from '@inploi/sdk';
|
|
3
|
+
import { InploiRpcClient } from '@inploi/sdk';
|
|
4
|
+
import { InploiSdkEnvironment } from '@inploi/sdk';
|
|
5
|
+
import { Logger } from '@inploi/sdk';
|
|
6
|
+
|
|
7
|
+
export declare const createFeedbackDomManager: (logger: Logger) => {
|
|
8
|
+
getRenderTargetElement: (key: string) => Element;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare const createTFunction: <T extends {
|
|
12
|
+
readonly a11y_label: "How was your experience?";
|
|
13
|
+
readonly positive_label: "Good";
|
|
14
|
+
readonly negative_label: "Bad";
|
|
15
|
+
readonly positive_heading: "Thanks!";
|
|
16
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
17
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
18
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
19
|
+
readonly submit: "Send feedback";
|
|
20
|
+
readonly submitting: "Sending feedback...";
|
|
21
|
+
readonly skip: "No, thanks";
|
|
22
|
+
readonly submitted_heading: "Thank you!";
|
|
23
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
24
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
25
|
+
} = {
|
|
26
|
+
readonly a11y_label: "How was your experience?";
|
|
27
|
+
readonly positive_label: "Good";
|
|
28
|
+
readonly negative_label: "Bad";
|
|
29
|
+
readonly positive_heading: "Thanks!";
|
|
30
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
31
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
32
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
33
|
+
readonly submit: "Send feedback";
|
|
34
|
+
readonly submitting: "Sending feedback...";
|
|
35
|
+
readonly skip: "No, thanks";
|
|
36
|
+
readonly submitted_heading: "Thank you!";
|
|
37
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
38
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
39
|
+
}>(options: {
|
|
40
|
+
overrides: Partial<TranslationDict< {
|
|
41
|
+
readonly a11y_label: "How was your experience?";
|
|
42
|
+
readonly positive_label: "Good";
|
|
43
|
+
readonly negative_label: "Bad";
|
|
44
|
+
readonly positive_heading: "Thanks!";
|
|
45
|
+
readonly negative_heading: "We’re sorry to hear that";
|
|
46
|
+
readonly positive_text: "Would you like to tell us more about your experience?";
|
|
47
|
+
readonly negative_text: "Would you like to tell us more about your experience?";
|
|
48
|
+
readonly submit: "Send feedback";
|
|
49
|
+
readonly submitting: "Sending feedback...";
|
|
50
|
+
readonly skip: "No, thanks";
|
|
51
|
+
readonly submitted_heading: "Thank you!";
|
|
52
|
+
readonly submitted_text: "Your feedback has been sent and will be used to improve our products.";
|
|
53
|
+
readonly comment_minimum: "Please type more characters in the comment box";
|
|
54
|
+
}>>;
|
|
55
|
+
locale: string | undefined;
|
|
56
|
+
}) => TFn<T>;
|
|
57
|
+
|
|
58
|
+
/** Given a string with double curly braces, returns the content of all curly braces. */
|
|
59
|
+
declare type ExtractParams<T extends string> = T extends `${infer Head}{{${infer Param}}}${infer Tail}` ? Param | ExtractParams<Tail> : never;
|
|
60
|
+
|
|
61
|
+
export declare type Feedback = ReturnType<FeedbackPlugin>;
|
|
62
|
+
|
|
63
|
+
export declare type FeedbackDomManager = ReturnType<typeof createFeedbackDomManager>;
|
|
64
|
+
|
|
65
|
+
export declare type FeedbackPlugin = ReturnType<typeof feedbackPlugin>;
|
|
66
|
+
|
|
67
|
+
export declare const feedbackPlugin: () => ({ apiClient, logger, analytics }: {
|
|
68
|
+
apiClient: ApiClient;
|
|
69
|
+
rpcClient: InploiRpcClient;
|
|
70
|
+
logger: Logger;
|
|
71
|
+
analytics: AnalyticsService;
|
|
72
|
+
publishableKey?: string;
|
|
73
|
+
env?: InploiSdkEnvironment;
|
|
74
|
+
}) => {
|
|
75
|
+
/** Returns a string with the initial rendering state of the UI.
|
|
76
|
+
* Useful when server-side rendering to avoid CLS.
|
|
77
|
+
*/
|
|
78
|
+
prerender: (params: FeedbackPluginParams) => Promise<{
|
|
79
|
+
html: string;
|
|
80
|
+
}>;
|
|
81
|
+
/** Renders the Job Alerts Plugin inside the container element. */
|
|
82
|
+
render: (params: FeedbackPluginRenderParams) => Promise<void>;
|
|
83
|
+
/** Release one target's widget (and its portals), leaving any other target's. */
|
|
84
|
+
unmount: (target: HTMLElement) => void;
|
|
85
|
+
/** Release components, portals and document listeners when an owning widget unmounts. */
|
|
86
|
+
destroy: () => void;
|
|
87
|
+
'~brand': "@inploi/plugin-feedback";
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export declare type FeedbackPluginParams = {
|
|
91
|
+
/**
|
|
92
|
+
* A unique identifier for this feedback widget.
|
|
93
|
+
* It’s up to you to ensure there is a valid feedback widget element with the property data-key="[key]"
|
|
94
|
+
*/
|
|
95
|
+
key: string;
|
|
96
|
+
theme: {
|
|
97
|
+
mode: 'light' | 'dark';
|
|
98
|
+
corners: 'rounded' | 'soft' | 'sharp';
|
|
99
|
+
highlights: 'stroke' | 'fill';
|
|
100
|
+
accent: PaletteParams;
|
|
101
|
+
/**
|
|
102
|
+
* Paint the solid accent fill (the submit button) in this exact CSS colour, with `text` on it, instead of the
|
|
103
|
+
* palette shade generated from `accent`. Text and focus rings keep the palette's shades; `accent` still tints the
|
|
104
|
+
* neutrals. Both values must each be a single CSS colour (as `getComputedStyle` returns for a custom property).
|
|
105
|
+
*/
|
|
106
|
+
exactAccent?: {
|
|
107
|
+
color: string;
|
|
108
|
+
text: string;
|
|
109
|
+
};
|
|
110
|
+
positive: PaletteParams;
|
|
111
|
+
negative: PaletteParams;
|
|
112
|
+
};
|
|
113
|
+
terms: Partial<FeedbackTranslationTerms>;
|
|
114
|
+
locale?: string;
|
|
115
|
+
size: 'sm' | 'md' | 'lg';
|
|
116
|
+
/**
|
|
117
|
+
* The rating to show, for a host that draws the same key's ratings in more than one place: each follows the one
|
|
118
|
+
* rating (pass back what `onScore` reports). Absent, the widget keeps its own.
|
|
119
|
+
*/
|
|
120
|
+
score?: 0 | 1 | -1;
|
|
121
|
+
/**
|
|
122
|
+
* Logged with every rating and comment this widget sends, beside its `key` (which stays the reporting key): where the
|
|
123
|
+
* widget is drawn, and the build that drew it, for a host that draws one key in more than one place.
|
|
124
|
+
*/
|
|
125
|
+
source?: {
|
|
126
|
+
placement?: 'header' | 'end';
|
|
127
|
+
widget_version?: string;
|
|
128
|
+
};
|
|
129
|
+
onLeaveComment?: () => void;
|
|
130
|
+
/** A rating, once it has been logged. */
|
|
131
|
+
onRate?: (rate: 0 | 1 | -1) => void;
|
|
132
|
+
/** The rating as it's pressed (1 or -1), or cleared (0: pressed again, which logs nothing, or its log failed). */
|
|
133
|
+
onScore?: (score: 0 | 1 | -1) => void;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export declare interface FeedbackPluginRenderParams extends FeedbackPluginParams {
|
|
137
|
+
host?: HTMLElement;
|
|
138
|
+
/** Explicit render target for widgets that share the same analytics key. */
|
|
139
|
+
target?: HTMLElement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Visual theme for the Feedback widget. */
|
|
143
|
+
export declare type FeedbackTheme = FeedbackPluginParams['theme'];
|
|
144
|
+
|
|
145
|
+
export declare type FeedbackTranslationTerms = Parameters<typeof createTFunction>[0]['overrides'] | undefined;
|
|
146
|
+
|
|
147
|
+
declare type HintedString<KnownValues> = (string & {}) | KnownValues;
|
|
148
|
+
|
|
149
|
+
declare type PaletteParams = {
|
|
150
|
+
/** Number between 0 and 360. Number above or below range will loop. */
|
|
151
|
+
hue: number;
|
|
152
|
+
/** Float between 0 and 2. Acts as a multiplier to the original generated palette. */
|
|
153
|
+
chroma: number;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
declare type Terms = Record<string, string | TranslationWithPlurals>;
|
|
157
|
+
|
|
158
|
+
declare interface TFn<TTerms extends Terms> {
|
|
159
|
+
<K extends TranslationKeyWithParams<TTerms>>(key: K, options: TTerms[K] extends string ? {
|
|
160
|
+
[_Term in ExtractParams<TTerms[K]>]: number | string;
|
|
161
|
+
} : {
|
|
162
|
+
[_Term in ExtractParams<TTerms[K][keyof TTerms[K]] & string> | 'count']: number | string;
|
|
163
|
+
}): string;
|
|
164
|
+
<T extends Exclude<keyof (keyof TranslationDict<TTerms>), TranslationKeyWithParams<TTerms>>>(key: T): string;
|
|
165
|
+
<T extends keyof TranslationDict<TTerms>>(key: T, options?: {
|
|
166
|
+
[key: string]: string | number;
|
|
167
|
+
}): string;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
declare type TranslationDict<TTerms extends Terms> = {
|
|
171
|
+
[K in keyof TTerms]: TTerms[K] extends TranslationWithPlurals ? {
|
|
172
|
+
[J in keyof TTerms[K]]: HintedString<TTerms[K][J]>;
|
|
173
|
+
} : HintedString<TTerms[K]>;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
declare type TranslationKeyWithParams<TTerms extends Terms> = {
|
|
177
|
+
[K in keyof TTerms]: TTerms[K] extends TranslationWithPlurals ? K : ExtractParams<TTerms[K] & string> extends never ? never : K;
|
|
178
|
+
}[keyof TranslationDict<TTerms>];
|
|
179
|
+
|
|
180
|
+
declare type TranslationWithPlurals = Partial<Record<Intl.LDMLPluralRule, string>>;
|
|
181
|
+
|
|
182
|
+
export { }
|