@sanity/document-internationalization 0.1.5 → 0.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/CHANGELOG.md +6 -0
- package/lib/actions/DeleteWithi18nAction.d.ts +2 -16
- package/lib/actions/DuplicateWithi18nAction.d.ts +2 -8
- package/lib/actions/PublishWithi18nAction.d.ts +2 -9
- package/lib/actions/index.d.ts +2 -1
- package/lib/actions/index.js +66 -44
- package/lib/actions/index.js.map +1 -1
- package/lib/badges/index.js.map +1 -1
- package/lib/constants/index.js.map +1 -1
- package/lib/language-select/hooks/index.d.ts +0 -1
- package/lib/language-select/hooks/useListeningQuery.d.ts +12 -0
- package/lib/language-select/index.js +308 -319
- package/lib/language-select/index.js.map +1 -1
- package/lib/structure/index.js +12 -6
- package/lib/structure/index.js.map +1 -1
- package/lib/utils/index.js.map +1 -1
- package/lib/validators/index.js.map +1 -1
- package/package.json +10 -8
- package/lib/language-select/hooks/useManyEditStates.d.ts +0 -1
- package/lib/language-select/hooks/useManyObservables.d.ts +0 -2
|
@@ -4,6 +4,7 @@ var React = require('react');
|
|
|
4
4
|
var DocumentPaneContext = require('@sanity/desk-tool/lib/panes/document/DocumentPaneContext');
|
|
5
5
|
var languageFilterImplementations = require('all:part:@sanity/desk-tool/language-select-component');
|
|
6
6
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
7
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
7
8
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
8
9
|
var ui = require('@sanity/ui');
|
|
9
10
|
var icons = require('@sanity/icons');
|
|
@@ -21,7 +22,7 @@ require('@sanity/types');
|
|
|
21
22
|
var reactHooks = require('@sanity/react-hooks');
|
|
22
23
|
var shouldReloadFn = require('part:@sanity/document-internationalization/languages/should-reload?');
|
|
23
24
|
var documentStore = require('part:@sanity/base/datastore/document');
|
|
24
|
-
var
|
|
25
|
+
var operators = require('rxjs/operators');
|
|
25
26
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
26
27
|
var color = require('@sanity/color');
|
|
27
28
|
var deskTool = require('@sanity/desk-tool');
|
|
@@ -50,6 +51,7 @@ function _interopNamespace(e) {
|
|
|
50
51
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
51
52
|
var languageFilterImplementations__default = /*#__PURE__*/_interopDefaultLegacy(languageFilterImplementations);
|
|
52
53
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
54
|
+
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
53
55
|
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
54
56
|
var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefaultLegacy(_taggedTemplateLiteral);
|
|
55
57
|
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
|
|
@@ -62,7 +64,6 @@ var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regenerat
|
|
|
62
64
|
var languagesLoaderFn__default = /*#__PURE__*/_interopDefaultLegacy(languagesLoaderFn);
|
|
63
65
|
var shouldReloadFn__default = /*#__PURE__*/_interopDefaultLegacy(shouldReloadFn);
|
|
64
66
|
var documentStore__default = /*#__PURE__*/_interopDefaultLegacy(documentStore);
|
|
65
|
-
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
66
67
|
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
67
68
|
|
|
68
69
|
var objectSafeGet = get;
|
|
@@ -127,256 +128,85 @@ function get(obj, propsArg, defaultValue) {
|
|
|
127
128
|
return obj;
|
|
128
129
|
}
|
|
129
130
|
|
|
130
|
-
// Inspiration: https://github.com/facebook/react/issues/3386
|
|
131
|
-
|
|
132
|
-
function replace (string, regexpOrSubstr, newValueOrFn, globalOffset) {
|
|
133
|
-
if (typeof string !== 'string') throw new Error('First param must be a string')
|
|
134
|
-
if (typeof regexpOrSubstr !== 'string' && !(regexpOrSubstr instanceof RegExp)) throw new Error('Second param must be a string pattern or a regular expression')
|
|
135
|
-
|
|
136
|
-
var fn = (typeof regexpOrSubstr === 'string') ? replaceUsingString : replaceUsingRegexp;
|
|
137
|
-
|
|
138
|
-
return fn(string, regexpOrSubstr, newValueOrFn, globalOffset)
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function replaceUsingString (string, patternString, newValueOrFn, globalOffset) {
|
|
142
|
-
var index = string.indexOf(patternString);
|
|
143
|
-
|
|
144
|
-
if (index >= 0) {
|
|
145
|
-
var arr = [];
|
|
146
|
-
var endIndex = index + patternString.length;
|
|
147
|
-
|
|
148
|
-
if (index > 0) {
|
|
149
|
-
arr.push(string.substring(0, index));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
arr.push(
|
|
153
|
-
(typeof newValueOrFn === 'function') ?
|
|
154
|
-
newValueOrFn(
|
|
155
|
-
string.substring(index, endIndex),
|
|
156
|
-
index + globalOffset,
|
|
157
|
-
string
|
|
158
|
-
) :
|
|
159
|
-
newValueOrFn
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
if (endIndex < string.length) {
|
|
163
|
-
arr.push(string.substring(endIndex));
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return arr
|
|
167
|
-
} else {
|
|
168
|
-
return [string]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function replaceUsingRegexp (string, regexp, newValueOrFn, globalOffset) {
|
|
173
|
-
var output = [];
|
|
174
|
-
|
|
175
|
-
var replacerIsFn = (typeof newValueOrFn === 'function');
|
|
176
|
-
|
|
177
|
-
var storedLastIndex = regexp.lastIndex;
|
|
178
|
-
regexp.lastIndex = 0;
|
|
179
|
-
|
|
180
|
-
var result;
|
|
181
|
-
var lastIndex = 0;
|
|
182
|
-
while (result = regexp.exec(string)) {
|
|
183
|
-
var index = result.index;
|
|
184
|
-
|
|
185
|
-
if (result[0] === '') {
|
|
186
|
-
// When the regexp is an empty string
|
|
187
|
-
// we still want to advance our cursor to the next item.
|
|
188
|
-
// This is the behavior of String.replace.
|
|
189
|
-
regexp.lastIndex++;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (index !== lastIndex) {
|
|
193
|
-
output.push(string.substring(lastIndex, index));
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
var match = result[0];
|
|
197
|
-
lastIndex = index + match.length;
|
|
198
|
-
|
|
199
|
-
var out = replacerIsFn ?
|
|
200
|
-
newValueOrFn.apply(this, result.concat(index + globalOffset, result.input)) :
|
|
201
|
-
newValueOrFn;
|
|
202
|
-
output.push(out);
|
|
203
|
-
|
|
204
|
-
if (!regexp.global) {
|
|
205
|
-
break
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if (lastIndex < string.length) {
|
|
210
|
-
output.push(string.substring(lastIndex));
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
regexp.lastIndex = storedLastIndex;
|
|
214
|
-
return output
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
var stringReplaceToArray = function stringReplaceToArray (stringOrArray, regexpOrSubstr, newSubStrOrFn) {
|
|
218
|
-
if (typeof stringOrArray === 'string') {
|
|
219
|
-
return replace(stringOrArray, regexpOrSubstr, newSubStrOrFn, 0)
|
|
220
|
-
} else if (!Array.isArray(stringOrArray) || !stringOrArray[0]) {
|
|
221
|
-
throw new TypeError('First argument must be an array or non-empty string')
|
|
222
|
-
} else {
|
|
223
|
-
var len = stringOrArray.length;
|
|
224
|
-
var output = [];
|
|
225
|
-
var globalOffset = 0;
|
|
226
|
-
for (var i = 0; i < len; ++i) {
|
|
227
|
-
var arrayItem = stringOrArray[i];
|
|
228
|
-
if (typeof arrayItem === 'string') {
|
|
229
|
-
output.push.apply(output, replace(arrayItem, regexpOrSubstr, newSubStrOrFn, globalOffset));
|
|
230
|
-
globalOffset += arrayItem.length;
|
|
231
|
-
} else {
|
|
232
|
-
output.push(arrayItem);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return output
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
// This is based off of https://github.com/twitter/twemoji/blob/gh-pages/2/twemoji.js
|
|
240
|
-
//
|
|
241
|
-
// Ideally we'd use twemoji instead of replicating its logic.
|
|
242
|
-
// The reason we can't is that we need to run our own replace.
|
|
243
|
-
//
|
|
244
|
-
// We could use it for most things (by essentially running twemoji.parse for each
|
|
245
|
-
// regex match, and reading the code from the callback), but the one thing we'd always need
|
|
246
|
-
// to copy and paste into this file is the regex since we need it to run the replace.
|
|
247
|
-
//
|
|
248
|
-
// Another option is to fork twemoji and expose a method in it that could help us, then
|
|
249
|
-
// ask them to pull it in.
|
|
250
|
-
//
|
|
251
|
-
|
|
252
|
-
// RegExp based on emoji's official Unicode standards
|
|
253
|
-
// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
|
|
254
|
-
var re = /(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;
|
|
255
|
-
|
|
256
|
-
function toCodePoint(unicodeSurrogates, sep) {
|
|
257
|
-
var
|
|
258
|
-
r = [],
|
|
259
|
-
c = 0,
|
|
260
|
-
p = 0,
|
|
261
|
-
i = 0;
|
|
262
|
-
|
|
263
|
-
while (i < unicodeSurrogates.length) {
|
|
264
|
-
c = unicodeSurrogates.charCodeAt(i++);
|
|
265
|
-
if (p) {
|
|
266
|
-
r.push((0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00)).toString(16));
|
|
267
|
-
p = 0;
|
|
268
|
-
} else if (0xD800 <= c && c <= 0xDBFF) {
|
|
269
|
-
p = c;
|
|
270
|
-
} else {
|
|
271
|
-
r.push(c.toString(16));
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return r.join(sep || '-')
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// avoid runtime RegExp creation for not so smart,
|
|
278
|
-
// not JIT based, and old browsers / engines
|
|
279
|
-
var UFE0Fg = /\uFE0F/g;
|
|
280
|
-
|
|
281
|
-
// avoid using a string literal like '\u200D' here because minifiers expand it inline
|
|
282
|
-
var U200D = String.fromCharCode(0x200D);
|
|
283
|
-
|
|
284
131
|
/**
|
|
285
|
-
*
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
var
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
var icon = grabTheRightIcon(match);
|
|
302
|
-
return render(icon, match, offset)
|
|
303
|
-
})
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
var createElement = React__default["default"].createElement;
|
|
307
|
-
|
|
308
|
-
var pageProtocol = (typeof location === 'undefined') ? '' : ((location.protocol === 'https:') ? 'https:' : 'http:');
|
|
309
|
-
|
|
310
|
-
var emojiStyle = {
|
|
311
|
-
height: '1em',
|
|
312
|
-
width: '1em',
|
|
313
|
-
margin: '0 .05em 0 .1em',
|
|
314
|
-
verticalAlign: '-0.1em'
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
// Accept protocol with or without a colon
|
|
318
|
-
function normalizeProtocol(protocol) {
|
|
319
|
-
if (protocol && protocol.length > 0 && protocol.charAt(protocol.length - 1) !== ':') {
|
|
320
|
-
return protocol + ':'
|
|
321
|
-
}
|
|
322
|
-
return protocol
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
var makeTwemojiRenderer$1 = function makeTwemojiRenderer(options) {
|
|
326
|
-
options = merge({
|
|
327
|
-
protocol: pageProtocol,
|
|
328
|
-
baseUrl: '//twemoji.maxcdn.com/2/',
|
|
329
|
-
size: '72x72',
|
|
330
|
-
ext: '.png',
|
|
331
|
-
props: null
|
|
332
|
-
}, options);
|
|
333
|
-
|
|
334
|
-
return function renderTwemoji (icon, match, offset) {
|
|
335
|
-
var src = '';
|
|
336
|
-
if (options.baseUrl.indexOf('http') !== 0) {
|
|
337
|
-
src += normalizeProtocol(options.protocol);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
src += options.baseUrl + options.size + '/' + icon + options.ext;
|
|
341
|
-
|
|
342
|
-
return createElement(
|
|
343
|
-
'img',
|
|
344
|
-
merge({
|
|
345
|
-
key: offset,
|
|
346
|
-
alt: match,
|
|
347
|
-
draggable: false,
|
|
348
|
-
src: src,
|
|
349
|
-
style: emojiStyle
|
|
350
|
-
}, options.props)
|
|
351
|
-
)
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
|
|
355
|
-
function merge() {
|
|
356
|
-
var out = {}, len = arguments.length;
|
|
357
|
-
for(var i = 0; i < len; ++i) {
|
|
358
|
-
var source = arguments[i];
|
|
359
|
-
if (source) {
|
|
360
|
-
for (var key in source) {
|
|
361
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
362
|
-
out[key] = source[key];
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
return out
|
|
132
|
+
* @var {Object} cache
|
|
133
|
+
*/
|
|
134
|
+
var cache = new Map();
|
|
135
|
+
/**
|
|
136
|
+
* Check if emoji is supported with cache
|
|
137
|
+
*
|
|
138
|
+
* @params {string} unicode
|
|
139
|
+
* @returns {boolean}
|
|
140
|
+
*/
|
|
141
|
+
function isEmojiSupported(unicode) {
|
|
142
|
+
if (cache.has(unicode)) {
|
|
143
|
+
return cache.get(unicode);
|
|
144
|
+
}
|
|
145
|
+
var supported = isSupported(unicode);
|
|
146
|
+
cache.set(unicode, supported);
|
|
147
|
+
return supported;
|
|
368
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if the two pixels parts are perfectly the sames
|
|
151
|
+
*
|
|
152
|
+
* @params {string} unicode
|
|
153
|
+
* @returns {boolean}
|
|
154
|
+
*/
|
|
155
|
+
var isSupported = (function () {
|
|
156
|
+
var ctx = null;
|
|
157
|
+
try {
|
|
158
|
+
ctx = document.createElement('canvas').getContext('2d');
|
|
159
|
+
}
|
|
160
|
+
catch (_a) { }
|
|
161
|
+
// Not in browser env
|
|
162
|
+
if (!ctx) {
|
|
163
|
+
return function () { return false; };
|
|
164
|
+
}
|
|
165
|
+
var CANVAS_HEIGHT = 25;
|
|
166
|
+
var CANVAS_WIDTH = 20;
|
|
167
|
+
var textSize = Math.floor(CANVAS_HEIGHT / 2);
|
|
168
|
+
// Initialize convas context
|
|
169
|
+
ctx.font = textSize + 'px Arial, Sans-Serif';
|
|
170
|
+
ctx.textBaseline = 'top';
|
|
171
|
+
ctx.canvas.width = CANVAS_WIDTH * 2;
|
|
172
|
+
ctx.canvas.height = CANVAS_HEIGHT;
|
|
173
|
+
return function (unicode) {
|
|
174
|
+
ctx.clearRect(0, 0, CANVAS_WIDTH * 2, CANVAS_HEIGHT);
|
|
175
|
+
// Draw in red on the left
|
|
176
|
+
ctx.fillStyle = '#FF0000';
|
|
177
|
+
ctx.fillText(unicode, 0, 22);
|
|
178
|
+
// Draw in blue on right
|
|
179
|
+
ctx.fillStyle = '#0000FF';
|
|
180
|
+
ctx.fillText(unicode, CANVAS_WIDTH, 22);
|
|
181
|
+
var a = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data;
|
|
182
|
+
var count = a.length;
|
|
183
|
+
var i = 0;
|
|
184
|
+
// Search the first visible pixel
|
|
185
|
+
for (; i < count && !a[i + 3]; i += 4)
|
|
186
|
+
;
|
|
187
|
+
// No visible pixel
|
|
188
|
+
if (i >= count) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
// Emoji has immutable color, so we check the color of the emoji in two different colors
|
|
192
|
+
// the result show be the same.
|
|
193
|
+
var x = CANVAS_WIDTH + ((i / 4) % CANVAS_WIDTH);
|
|
194
|
+
var y = Math.floor(i / 4 / CANVAS_WIDTH);
|
|
195
|
+
var b = ctx.getImageData(x, y, 1, 1).data;
|
|
196
|
+
if (a[i] !== b[0] || a[i + 2] !== b[2]) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
// Some emojis are a contraction of different ones, so if it's not
|
|
200
|
+
// supported, it will show multiple characters
|
|
201
|
+
if (ctx.measureText(unicode).width >= CANVAS_WIDTH) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
// Supported
|
|
205
|
+
return true;
|
|
206
|
+
};
|
|
207
|
+
})();
|
|
369
208
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
var makeTwemojiRenderer = makeTwemojiRenderer$1;
|
|
373
|
-
|
|
374
|
-
var reactEasyEmoji = function reactEasyEmoji (element, optionsOrFn) {
|
|
375
|
-
var render = (typeof optionsOrFn === 'function') ? optionsOrFn : makeTwemojiRenderer(optionsOrFn);
|
|
376
|
-
return replaceEmoji(element, render)
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
var emoji = reactEasyEmoji;
|
|
209
|
+
function t(t="Twemoji Country Flags",e="https://cdn.jsdelivr.net/npm/country-flag-emoji-polyfill@0.1/dist/TwemojiCountryFlags.woff2"){if(isEmojiSupported("😊")&&!isEmojiSupported("🇨🇭")){const n=document.createElement("style");return n.textContent=`@font-face {\n font-family: "${t}";\n unicode-range: U+1F1E6-1F1FF, U+1F3F4, U+E0062-E0063, U+E0065, U+E0067,\n U+E006C, U+E006E, U+E0073-E0074, U+E0077, U+E007F;\n src: url('${e}') format('woff2');\n }`,document.head.appendChild(n),!0}return !1}
|
|
380
210
|
|
|
381
211
|
/*
|
|
382
212
|
These magic numbers are charCode math, where we take advantage of the offset
|
|
@@ -1175,8 +1005,10 @@ var getFlagCode = function getFlagCode() {
|
|
|
1175
1005
|
}
|
|
1176
1006
|
};
|
|
1177
1007
|
|
|
1178
|
-
var _templateObject$2;
|
|
1008
|
+
var _templateObject$2, _templateObject2$1;
|
|
1009
|
+
t();
|
|
1179
1010
|
var FlagImageContainer = styled__default["default"].span(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral__default["default"](["\n display: block;\n padding: 1px;\n font-size: 19px;\n margin: 0px -0.05em 0px -0.1em;\n\n & img {\n display: block;\n }\n"])));
|
|
1011
|
+
var EmojiSpan = styled__default["default"].span(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral__default["default"](["\n font-family: 'Twemoji Country Flags';\n"])));
|
|
1180
1012
|
var SingleFlag = function SingleFlag(_ref) {
|
|
1181
1013
|
var code = _ref.code,
|
|
1182
1014
|
langCulture = _ref.langCulture,
|
|
@@ -1200,7 +1032,7 @@ var SingleFlag = function SingleFlag(_ref) {
|
|
|
1200
1032
|
className: className
|
|
1201
1033
|
}, CustomFlagComponent && code ? /*#__PURE__*/React__default["default"].createElement(CustomFlagComponent, {
|
|
1202
1034
|
code: code
|
|
1203
|
-
}) :
|
|
1035
|
+
}) : /*#__PURE__*/React__default["default"].createElement(EmojiSpan, null, flagEmoji) || '🏳️🌈');
|
|
1204
1036
|
};
|
|
1205
1037
|
|
|
1206
1038
|
var getSchema = function getSchema(name) {
|
|
@@ -1464,64 +1296,190 @@ function useLanguages(document) {
|
|
|
1464
1296
|
return [pending, languages];
|
|
1465
1297
|
}
|
|
1466
1298
|
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1299
|
+
/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */
|
|
1300
|
+
var hasElementType = typeof Element !== 'undefined';
|
|
1301
|
+
var hasMap = typeof Map === 'function';
|
|
1302
|
+
var hasSet = typeof Set === 'function';
|
|
1303
|
+
var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;
|
|
1304
|
+
|
|
1305
|
+
// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js
|
|
1306
|
+
|
|
1307
|
+
function equal(a, b) {
|
|
1308
|
+
// START: fast-deep-equal es6/index.js 3.1.1
|
|
1309
|
+
if (a === b) return true;
|
|
1310
|
+
|
|
1311
|
+
if (a && b && typeof a == 'object' && typeof b == 'object') {
|
|
1312
|
+
if (a.constructor !== b.constructor) return false;
|
|
1471
1313
|
|
|
1472
|
-
|
|
1473
|
-
|
|
1314
|
+
var length, i, keys;
|
|
1315
|
+
if (Array.isArray(a)) {
|
|
1316
|
+
length = a.length;
|
|
1317
|
+
if (length != b.length) return false;
|
|
1318
|
+
for (i = length; i-- !== 0;)
|
|
1319
|
+
if (!equal(a[i], b[i])) return false;
|
|
1474
1320
|
return true;
|
|
1475
|
-
}
|
|
1476
|
-
var syncValues = observables.map(function () {
|
|
1477
|
-
return null;
|
|
1478
|
-
});
|
|
1479
|
-
subscriptions.current = observables.map(function (observable, index) {
|
|
1480
|
-
return observable.subscribe(function (nextVal) {
|
|
1481
|
-
syncValues[index] = nextVal;
|
|
1321
|
+
}
|
|
1482
1322
|
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1323
|
+
// START: Modifications:
|
|
1324
|
+
// 1. Extra `has<Type> &&` helpers in initial condition allow es6 code
|
|
1325
|
+
// to co-exist with es5.
|
|
1326
|
+
// 2. Replace `for of` with es5 compliant iteration using `for`.
|
|
1327
|
+
// Basically, take:
|
|
1328
|
+
//
|
|
1329
|
+
// ```js
|
|
1330
|
+
// for (i of a.entries())
|
|
1331
|
+
// if (!b.has(i[0])) return false;
|
|
1332
|
+
// ```
|
|
1333
|
+
//
|
|
1334
|
+
// ... and convert to:
|
|
1335
|
+
//
|
|
1336
|
+
// ```js
|
|
1337
|
+
// it = a.entries();
|
|
1338
|
+
// while (!(i = it.next()).done)
|
|
1339
|
+
// if (!b.has(i.value[0])) return false;
|
|
1340
|
+
// ```
|
|
1341
|
+
//
|
|
1342
|
+
// **Note**: `i` access switches to `i.value`.
|
|
1343
|
+
var it;
|
|
1344
|
+
if (hasMap && (a instanceof Map) && (b instanceof Map)) {
|
|
1345
|
+
if (a.size !== b.size) return false;
|
|
1346
|
+
it = a.entries();
|
|
1347
|
+
while (!(i = it.next()).done)
|
|
1348
|
+
if (!b.has(i.value[0])) return false;
|
|
1349
|
+
it = a.entries();
|
|
1350
|
+
while (!(i = it.next()).done)
|
|
1351
|
+
if (!equal(i.value[1], b.get(i.value[0]))) return false;
|
|
1352
|
+
return true;
|
|
1353
|
+
}
|
|
1486
1354
|
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1355
|
+
if (hasSet && (a instanceof Set) && (b instanceof Set)) {
|
|
1356
|
+
if (a.size !== b.size) return false;
|
|
1357
|
+
it = a.entries();
|
|
1358
|
+
while (!(i = it.next()).done)
|
|
1359
|
+
if (!b.has(i.value[0])) return false;
|
|
1360
|
+
return true;
|
|
1361
|
+
}
|
|
1362
|
+
// END: Modifications
|
|
1363
|
+
|
|
1364
|
+
if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
|
|
1365
|
+
length = a.length;
|
|
1366
|
+
if (length != b.length) return false;
|
|
1367
|
+
for (i = length; i-- !== 0;)
|
|
1368
|
+
if (a[i] !== b[i]) return false;
|
|
1369
|
+
return true;
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
|
|
1373
|
+
if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
|
|
1374
|
+
if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
|
|
1375
|
+
|
|
1376
|
+
keys = Object.keys(a);
|
|
1377
|
+
length = keys.length;
|
|
1378
|
+
if (length !== Object.keys(b).length) return false;
|
|
1379
|
+
|
|
1380
|
+
for (i = length; i-- !== 0;)
|
|
1381
|
+
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
|
|
1382
|
+
// END: fast-deep-equal
|
|
1383
|
+
|
|
1384
|
+
// START: react-fast-compare
|
|
1385
|
+
// custom handling for DOM elements
|
|
1386
|
+
if (hasElementType && a instanceof Element) return false;
|
|
1387
|
+
|
|
1388
|
+
// custom handling for React/Preact
|
|
1389
|
+
for (i = length; i-- !== 0;) {
|
|
1390
|
+
if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {
|
|
1391
|
+
// React-specific: avoid traversing React elements' _owner
|
|
1392
|
+
// Preact-specific: avoid traversing Preact elements' __v and __o
|
|
1393
|
+
// __v = $_original / $_vnode
|
|
1394
|
+
// __o = $_owner
|
|
1395
|
+
// These properties contain circular references and are not needed when
|
|
1396
|
+
// comparing the actual elements (and not their owners)
|
|
1397
|
+
// .$$typeof and ._store on just reasonable markers of elements
|
|
1398
|
+
|
|
1399
|
+
continue;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
// all other properties should be traversed as usual
|
|
1403
|
+
if (!equal(a[keys[i]], b[keys[i]])) return false;
|
|
1404
|
+
}
|
|
1405
|
+
// END: react-fast-compare
|
|
1406
|
+
|
|
1407
|
+
// START: fast-deep-equal
|
|
1408
|
+
return true;
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
return a !== a && b !== b;
|
|
1412
|
+
}
|
|
1413
|
+
// end fast-deep-equal
|
|
1414
|
+
|
|
1415
|
+
var reactFastCompare = function isEqual(a, b) {
|
|
1416
|
+
try {
|
|
1417
|
+
return equal(a, b);
|
|
1418
|
+
} catch (error) {
|
|
1419
|
+
if (((error.message || '').match(/stack|recursion/i))) {
|
|
1420
|
+
// warn on circular references, don't crash
|
|
1421
|
+
// browsers give this different errors name and messages:
|
|
1422
|
+
// chrome/safari: "RangeError", "Maximum call stack size exceeded"
|
|
1423
|
+
// firefox: "InternalError", too much recursion"
|
|
1424
|
+
// edge: "Error", "Out of stack space"
|
|
1425
|
+
console.warn('react-fast-compare cannot handle circular refs');
|
|
1426
|
+
return false;
|
|
1427
|
+
}
|
|
1428
|
+
// some other error. we should definitely know about these
|
|
1429
|
+
throw error;
|
|
1430
|
+
}
|
|
1431
|
+
};
|
|
1432
|
+
|
|
1433
|
+
var DEFAULT_PARAMS = {};
|
|
1434
|
+
var DEFAULT_OPTIONS = {
|
|
1435
|
+
apiVersion: "v2022-05-09"
|
|
1436
|
+
};
|
|
1437
|
+
function useListeningQuery(query) {
|
|
1438
|
+
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_PARAMS;
|
|
1439
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_OPTIONS;
|
|
1440
|
+
|
|
1441
|
+
var _useState = React.useState(true),
|
|
1492
1442
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1443
|
+
loading = _useState2[0],
|
|
1444
|
+
setLoading = _useState2[1];
|
|
1445
|
+
|
|
1446
|
+
var _useState3 = React.useState(false),
|
|
1447
|
+
_useState4 = _slicedToArray__default["default"](_useState3, 2),
|
|
1448
|
+
error = _useState4[0],
|
|
1449
|
+
setError = _useState4[1];
|
|
1450
|
+
|
|
1451
|
+
var _useState5 = React.useState(null),
|
|
1452
|
+
_useState6 = _slicedToArray__default["default"](_useState5, 2),
|
|
1453
|
+
data = _useState6[0],
|
|
1454
|
+
setData = _useState6[1];
|
|
1455
|
+
|
|
1456
|
+
var subscription = React.useRef(null);
|
|
1457
|
+
React.useEffect(function () {
|
|
1458
|
+
if (query) {
|
|
1459
|
+
subscription.current = documentStore__default["default"].listenQuery(query, params, options).pipe(operators.distinctUntilChanged(reactFastCompare), operators.catchError(function (err) {
|
|
1460
|
+
console.error(err);
|
|
1461
|
+
setError(err);
|
|
1462
|
+
setLoading(false);
|
|
1463
|
+
setData(null);
|
|
1464
|
+
return err;
|
|
1465
|
+
})).subscribe(function (documents) {
|
|
1466
|
+
setData(function (current) {
|
|
1467
|
+
return reactFastCompare(current, documents) ? current : documents;
|
|
1503
1468
|
});
|
|
1469
|
+
setLoading(false);
|
|
1470
|
+
setError(false);
|
|
1504
1471
|
});
|
|
1505
1472
|
}
|
|
1506
1473
|
|
|
1507
|
-
isInitial.current = false;
|
|
1508
1474
|
return function () {
|
|
1509
|
-
|
|
1510
|
-
sub.unsubscribe();
|
|
1511
|
-
});
|
|
1512
|
-
subscriptions.current = [];
|
|
1475
|
+
return subscription.current ? subscription.current.unsubscribe() : undefined;
|
|
1513
1476
|
};
|
|
1514
|
-
}, [
|
|
1515
|
-
return
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
return documentIds.map(function (id) {
|
|
1521
|
-
return documentStore__default["default"].pair.editState(id, documentType);
|
|
1522
|
-
});
|
|
1523
|
-
}, [documentIds, documentType]);
|
|
1524
|
-
return useManyObservables(observables);
|
|
1477
|
+
}, [query, params, options]);
|
|
1478
|
+
return {
|
|
1479
|
+
loading: loading,
|
|
1480
|
+
error: error,
|
|
1481
|
+
data: data
|
|
1482
|
+
};
|
|
1525
1483
|
}
|
|
1526
1484
|
|
|
1527
1485
|
var baseToTop = function baseToTop(a, b) {
|
|
@@ -1871,43 +1829,74 @@ var LanguageSelect = function LanguageSelect(_ref) {
|
|
|
1871
1829
|
}, [languages, currentLanguageCode]);
|
|
1872
1830
|
var currentLanguageFlagCode = React__default["default"].useMemo(function () {
|
|
1873
1831
|
return currentLanguageCode === null || currentLanguageCode === void 0 ? void 0 : currentLanguageCode.split(/[-_]/).pop();
|
|
1874
|
-
}, [currentLanguageCode]);
|
|
1875
|
-
|
|
1832
|
+
}, [currentLanguageCode]); // Find and listen to changes on all potential language versions of documents
|
|
1833
|
+
|
|
1834
|
+
var query = "*[_type == $type && _id in $ids]{\n _id, \n \"".concat(config.fieldNames.lang, "\": ").concat(config.fieldNames.lang, "\n }");
|
|
1835
|
+
var queryParams = React__default["default"].useMemo(function () {
|
|
1876
1836
|
var baseId = getBaseIdFromId(document._id);
|
|
1877
|
-
|
|
1837
|
+
var publishedIds = languages.map(function (lang) {
|
|
1878
1838
|
return lang === baseLanguage ? baseId : buildDocId(baseId, lang.id);
|
|
1879
1839
|
});
|
|
1880
|
-
|
|
1881
|
-
|
|
1840
|
+
var draftIds = publishedIds.map(function (id) {
|
|
1841
|
+
return "drafts.".concat(id);
|
|
1842
|
+
});
|
|
1843
|
+
return {
|
|
1844
|
+
ids: [].concat(_toConsumableArray__default["default"](publishedIds), _toConsumableArray__default["default"](draftIds)),
|
|
1845
|
+
type: document._type
|
|
1846
|
+
};
|
|
1847
|
+
}, [baseLanguage, languages, document._id, document._type]);
|
|
1848
|
+
|
|
1849
|
+
var _useListeningQuery = useListeningQuery(query, queryParams),
|
|
1850
|
+
loading = _useListeningQuery.loading,
|
|
1851
|
+
data = _useListeningQuery.data; // Create a list of objects with current status
|
|
1852
|
+
|
|
1853
|
+
|
|
1882
1854
|
var languagesObjects = React__default["default"].useMemo(function () {
|
|
1883
|
-
var
|
|
1884
|
-
|
|
1885
|
-
|
|
1855
|
+
var draftLanguageObjects = [];
|
|
1856
|
+
var publishedLanguageObjects = [];
|
|
1857
|
+
var missingLanguageObjects = [];
|
|
1886
1858
|
|
|
1887
|
-
|
|
1859
|
+
if (!(data !== null && data !== void 0 && data.length)) {
|
|
1860
|
+
return {
|
|
1861
|
+
draftLanguageObjects: draftLanguageObjects,
|
|
1862
|
+
publishedLanguageObjects: publishedLanguageObjects,
|
|
1863
|
+
missingLanguageObjects: missingLanguageObjects
|
|
1864
|
+
};
|
|
1865
|
+
} // Prefer drafts if they exist
|
|
1866
|
+
|
|
1867
|
+
|
|
1868
|
+
var filteredDocuments = data.reduce(function (acc, cur) {
|
|
1869
|
+
if (!cur._id.startsWith("drafts.")) {
|
|
1870
|
+
var alsoHasDraft = data.some(function (doc) {
|
|
1871
|
+
return doc._id === "drafts.".concat(cur._id);
|
|
1872
|
+
});
|
|
1873
|
+
return alsoHasDraft ? acc : [].concat(_toConsumableArray__default["default"](acc), [cur]);
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
return [].concat(_toConsumableArray__default["default"](acc), [cur]);
|
|
1877
|
+
}, []);
|
|
1878
|
+
var editStatePerLanguage = new Map();
|
|
1879
|
+
filteredDocuments.forEach(function (doc) {
|
|
1888
1880
|
var lang = objectSafeGet(doc !== null && doc !== void 0 ? doc : {}, config.fieldNames.lang);
|
|
1889
1881
|
var isBase = doc && doc._id.replace(/^drafts\./, '') === getBaseIdFromId(doc._id);
|
|
1890
1882
|
|
|
1891
1883
|
if (lang) {
|
|
1892
|
-
editStatePerLanguage.set(lang,
|
|
1884
|
+
editStatePerLanguage.set(lang, doc);
|
|
1893
1885
|
} else if (isBase && baseLanguage !== null && baseLanguage !== void 0 && baseLanguage.id) {
|
|
1894
|
-
editStatePerLanguage.set(baseLanguage.id,
|
|
1886
|
+
editStatePerLanguage.set(baseLanguage.id, doc);
|
|
1895
1887
|
}
|
|
1896
1888
|
});
|
|
1897
|
-
var draftLanguageObjects = [];
|
|
1898
|
-
var publishedLanguageObjects = [];
|
|
1899
|
-
var missingLanguageObjects = [];
|
|
1900
1889
|
languages.forEach(function (lang, index) {
|
|
1901
1890
|
var extendedObject = _objectSpread(_objectSpread({}, lang), {}, {
|
|
1902
1891
|
isBase: baseLanguage ? lang.id === baseLanguage.id : index === 0,
|
|
1903
1892
|
isCurrentLanguage: lang.id === currentLanguageCode
|
|
1904
1893
|
});
|
|
1905
1894
|
|
|
1906
|
-
var
|
|
1895
|
+
var doc = editStatePerLanguage.get(lang.id);
|
|
1907
1896
|
|
|
1908
|
-
if (
|
|
1897
|
+
if (doc !== null && doc !== void 0 && doc._id && !doc._id.startsWith("drafts.")) {
|
|
1909
1898
|
publishedLanguageObjects.push(extendedObject);
|
|
1910
|
-
} else if (
|
|
1899
|
+
} else if (doc !== null && doc !== void 0 && doc._id && doc._id.startsWith("drafts.")) {
|
|
1911
1900
|
draftLanguageObjects.push(extendedObject);
|
|
1912
1901
|
} else {
|
|
1913
1902
|
missingLanguageObjects.push(extendedObject);
|
|
@@ -1918,14 +1907,14 @@ var LanguageSelect = function LanguageSelect(_ref) {
|
|
|
1918
1907
|
publishedLanguageObjects: publishedLanguageObjects,
|
|
1919
1908
|
missingLanguageObjects: missingLanguageObjects
|
|
1920
1909
|
};
|
|
1921
|
-
}, [config, languages, baseLanguage,
|
|
1910
|
+
}, [config, languages, baseLanguage, data, currentLanguageCode]);
|
|
1922
1911
|
|
|
1923
|
-
if (!currentLanguageObject || !currentLanguageCode || pending || languages.length === 0) {
|
|
1912
|
+
if (!currentLanguageObject || !currentLanguageCode || pending || loading || languages.length === 0) {
|
|
1924
1913
|
return /*#__PURE__*/React__default["default"].createElement(ui.Button, {
|
|
1925
1914
|
disabled: true,
|
|
1926
1915
|
mode: "bleed",
|
|
1927
1916
|
padding: 3,
|
|
1928
|
-
loading: pending,
|
|
1917
|
+
loading: pending || loading,
|
|
1929
1918
|
iconRight: icons.ChevronDownIcon,
|
|
1930
1919
|
text: UiMessages.languageSelect.placeholder
|
|
1931
1920
|
});
|
|
@@ -1973,7 +1962,7 @@ var LanguageSelectContainer = function LanguageSelectContainer(_ref) {
|
|
|
1973
1962
|
return null;
|
|
1974
1963
|
}, []);
|
|
1975
1964
|
|
|
1976
|
-
if (schemaType !== null && schemaType !== void 0 && schemaType.i18n && (_documentContext$disp = documentContext.displayed) !== null && _documentContext$disp !== void 0 && _documentContext$disp._id) {
|
|
1965
|
+
if (schemaType !== null && schemaType !== void 0 && schemaType.i18n && documentContext !== null && documentContext !== void 0 && (_documentContext$disp = documentContext.displayed) !== null && _documentContext$disp !== void 0 && _documentContext$disp._id) {
|
|
1977
1966
|
return /*#__PURE__*/React__default["default"].createElement(LanguageSelect, {
|
|
1978
1967
|
schemaType: schemaType,
|
|
1979
1968
|
document: documentContext.displayed
|