@seed-design/react 1.0.7 → 1.1.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.
Files changed (155) hide show
  1. package/lib/components/ActionButton/ActionButton.cjs +7 -1
  2. package/lib/components/ActionButton/ActionButton.d.ts +7 -1
  3. package/lib/components/ActionButton/ActionButton.d.ts.map +1 -1
  4. package/lib/components/ActionButton/ActionButton.js +7 -1
  5. package/lib/components/BottomSheet/BottomSheet.cjs +14 -18
  6. package/lib/components/BottomSheet/BottomSheet.d.ts +12 -19
  7. package/lib/components/BottomSheet/BottomSheet.d.ts.map +1 -1
  8. package/lib/components/BottomSheet/BottomSheet.js +14 -18
  9. package/lib/components/BottomSheet/BottomSheet.namespace.cjs +2 -0
  10. package/lib/components/BottomSheet/BottomSheet.namespace.d.ts +1 -0
  11. package/lib/components/BottomSheet/BottomSheet.namespace.d.ts.map +1 -1
  12. package/lib/components/BottomSheet/BottomSheet.namespace.js +1 -0
  13. package/lib/components/BottomSheetHandle/BottomSheetHandle.cjs +20 -0
  14. package/lib/components/BottomSheetHandle/BottomSheetHandle.d.ts +6 -0
  15. package/lib/components/BottomSheetHandle/BottomSheetHandle.d.ts.map +1 -0
  16. package/lib/components/BottomSheetHandle/BottomSheetHandle.js +16 -0
  17. package/lib/components/BottomSheetHandle/index.cjs +9 -0
  18. package/lib/components/BottomSheetHandle/index.d.ts +2 -0
  19. package/lib/components/BottomSheetHandle/index.d.ts.map +1 -0
  20. package/lib/components/BottomSheetHandle/index.js +1 -0
  21. package/lib/components/Chip/Chip.cjs +4 -3
  22. package/lib/components/Chip/Chip.d.ts.map +1 -1
  23. package/lib/components/Chip/Chip.js +4 -3
  24. package/lib/components/Field/Field.cjs +108 -0
  25. package/lib/components/Field/Field.d.ts +41 -0
  26. package/lib/components/Field/Field.d.ts.map +1 -0
  27. package/lib/components/Field/Field.js +96 -0
  28. package/lib/components/Field/Field.namespace.cjs +17 -0
  29. package/lib/components/Field/Field.namespace.d.ts +2 -0
  30. package/lib/components/Field/Field.namespace.d.ts.map +1 -0
  31. package/lib/components/Field/Field.namespace.js +1 -0
  32. package/lib/components/Field/index.cjs +19 -0
  33. package/lib/components/Field/index.d.ts +3 -0
  34. package/lib/components/Field/index.d.ts.map +1 -0
  35. package/lib/components/Field/index.js +3 -0
  36. package/lib/components/FieldButton/FieldButton.cjs +201 -0
  37. package/lib/components/FieldButton/FieldButton.d.ts +61 -0
  38. package/lib/components/FieldButton/FieldButton.d.ts.map +1 -0
  39. package/lib/components/FieldButton/FieldButton.js +161 -0
  40. package/lib/components/FieldButton/FieldButton.namespace.cjs +26 -0
  41. package/lib/components/FieldButton/FieldButton.namespace.d.ts +2 -0
  42. package/lib/components/FieldButton/FieldButton.namespace.d.ts.map +1 -0
  43. package/lib/components/FieldButton/FieldButton.namespace.js +1 -0
  44. package/lib/components/FieldButton/index.cjs +28 -0
  45. package/lib/components/FieldButton/index.d.ts +3 -0
  46. package/lib/components/FieldButton/index.d.ts.map +1 -0
  47. package/lib/components/FieldButton/index.js +3 -0
  48. package/lib/components/HelpBubble/HelpBubble.d.ts +1 -1
  49. package/lib/components/List/List.cjs +5 -4
  50. package/lib/components/List/List.d.ts.map +1 -1
  51. package/lib/components/List/List.js +5 -4
  52. package/lib/components/PageBanner/PageBanner.cjs +8 -3
  53. package/lib/components/PageBanner/PageBanner.d.ts +5 -2
  54. package/lib/components/PageBanner/PageBanner.d.ts.map +1 -1
  55. package/lib/components/PageBanner/PageBanner.js +7 -3
  56. package/lib/components/PageBanner/PageBanner.namespace.cjs +2 -1
  57. package/lib/components/PageBanner/PageBanner.namespace.d.ts +1 -1
  58. package/lib/components/PageBanner/PageBanner.namespace.d.ts.map +1 -1
  59. package/lib/components/PageBanner/PageBanner.namespace.js +1 -1
  60. package/lib/components/PageBanner/index.cjs +2 -1
  61. package/lib/components/PageBanner/index.d.ts +1 -1
  62. package/lib/components/PageBanner/index.d.ts.map +1 -1
  63. package/lib/components/PageBanner/index.js +1 -1
  64. package/lib/components/Slider/Slider.cjs +110 -0
  65. package/lib/components/Slider/Slider.d.ts +51 -0
  66. package/lib/components/Slider/Slider.d.ts.map +1 -0
  67. package/lib/components/Slider/Slider.js +94 -0
  68. package/lib/components/Slider/Slider.namespace.cjs +21 -0
  69. package/lib/components/Slider/Slider.namespace.d.ts +2 -0
  70. package/lib/components/Slider/Slider.namespace.d.ts.map +1 -0
  71. package/lib/components/Slider/Slider.namespace.js +1 -0
  72. package/lib/components/Slider/index.cjs +23 -0
  73. package/lib/components/Slider/index.d.ts +3 -0
  74. package/lib/components/Slider/index.d.ts.map +1 -0
  75. package/lib/components/Slider/index.js +3 -0
  76. package/lib/components/TextField/TextField.cjs +54 -74
  77. package/lib/components/TextField/TextField.d.ts +2 -35
  78. package/lib/components/TextField/TextField.d.ts.map +1 -1
  79. package/lib/components/TextField/TextField.js +56 -65
  80. package/lib/components/TextField/TextField.namespace.cjs +0 -11
  81. package/lib/components/TextField/TextField.namespace.d.ts +1 -1
  82. package/lib/components/TextField/TextField.namespace.d.ts.map +1 -1
  83. package/lib/components/TextField/TextField.namespace.js +1 -1
  84. package/lib/components/TextField/TextField.test.d.ts +1 -0
  85. package/lib/components/TextField/TextField.test.d.ts.map +1 -0
  86. package/lib/components/TextField/index.cjs +2 -11
  87. package/lib/components/TextField/index.d.ts +2 -1
  88. package/lib/components/TextField/index.d.ts.map +1 -1
  89. package/lib/components/TextField/index.js +2 -1
  90. package/lib/components/TextField/memoize.cjs +18 -0
  91. package/lib/components/TextField/memoize.d.ts +2 -0
  92. package/lib/components/TextField/memoize.d.ts.map +1 -0
  93. package/lib/components/TextField/memoize.js +14 -0
  94. package/lib/components/TextField/useTextFieldWithGraphemes.cjs +52 -0
  95. package/lib/components/TextField/useTextFieldWithGraphemes.d.ts +23 -0
  96. package/lib/components/TextField/useTextFieldWithGraphemes.d.ts.map +1 -0
  97. package/lib/components/TextField/useTextFieldWithGraphemes.js +48 -0
  98. package/lib/components/TextField/useTextFieldWithGraphemes.test.d.ts +1 -0
  99. package/lib/components/TextField/useTextFieldWithGraphemes.test.d.ts.map +1 -0
  100. package/lib/components/index.cjs +53 -12
  101. package/lib/components/index.d.ts +3 -0
  102. package/lib/components/index.d.ts.map +1 -1
  103. package/lib/components/index.js +12 -2
  104. package/lib/index.cjs +53 -12
  105. package/lib/index.js +12 -2
  106. package/lib/node_modules/unicode-segmenter/_grapheme_data.cjs +23 -0
  107. package/lib/node_modules/unicode-segmenter/_grapheme_data.js +19 -0
  108. package/lib/node_modules/unicode-segmenter/_incb_data.cjs +29 -0
  109. package/lib/node_modules/unicode-segmenter/_incb_data.js +25 -0
  110. package/lib/node_modules/unicode-segmenter/core.cjs +83 -0
  111. package/lib/node_modules/unicode-segmenter/core.js +78 -0
  112. package/lib/node_modules/unicode-segmenter/grapheme.cjs +312 -0
  113. package/lib/node_modules/unicode-segmenter/grapheme.js +307 -0
  114. package/lib/primitive.cjs +7 -0
  115. package/lib/primitive.d.ts +1 -0
  116. package/lib/primitive.d.ts.map +1 -1
  117. package/lib/primitive.js +1 -0
  118. package/lib/utils/createWithStateProps.cjs +8 -4
  119. package/lib/utils/createWithStateProps.d.ts +6 -3
  120. package/lib/utils/createWithStateProps.d.ts.map +1 -1
  121. package/lib/utils/createWithStateProps.js +8 -4
  122. package/package.json +9 -6
  123. package/src/components/ActionButton/ActionButton.tsx +21 -2
  124. package/src/components/BottomSheet/BottomSheet.namespace.ts +5 -0
  125. package/src/components/BottomSheet/BottomSheet.tsx +24 -38
  126. package/src/components/BottomSheetHandle/BottomSheetHandle.tsx +22 -0
  127. package/src/components/BottomSheetHandle/index.ts +1 -0
  128. package/src/components/Chip/Chip.tsx +4 -3
  129. package/src/components/Field/Field.namespace.ts +19 -0
  130. package/src/components/Field/Field.tsx +136 -0
  131. package/src/components/Field/index.ts +21 -0
  132. package/src/components/FieldButton/FieldButton.namespace.ts +38 -0
  133. package/src/components/FieldButton/FieldButton.tsx +249 -0
  134. package/src/components/FieldButton/index.ts +40 -0
  135. package/src/components/HelpBubble/HelpBubble.tsx +1 -1
  136. package/src/components/List/List.tsx +5 -4
  137. package/src/components/PageBanner/PageBanner.namespace.ts +4 -2
  138. package/src/components/PageBanner/PageBanner.tsx +10 -3
  139. package/src/components/PageBanner/index.ts +4 -2
  140. package/src/components/Slider/Slider.namespace.ts +28 -0
  141. package/src/components/Slider/Slider.tsx +154 -0
  142. package/src/components/Slider/index.ts +30 -0
  143. package/src/components/TextField/TextField.namespace.ts +2 -24
  144. package/src/components/TextField/TextField.test.tsx +260 -0
  145. package/src/components/TextField/TextField.tsx +67 -143
  146. package/src/components/TextField/index.ts +7 -24
  147. package/src/components/TextField/memoize.ts +14 -0
  148. package/src/components/TextField/useTextFieldWithGraphemes.test.tsx +301 -0
  149. package/src/components/TextField/useTextFieldWithGraphemes.ts +65 -0
  150. package/src/components/index.ts +3 -0
  151. package/src/primitive.ts +1 -0
  152. package/src/utils/createWithStateProps.tsx +14 -9
  153. package/lib/components/List/ListHeader.namespace.d.ts +0 -2
  154. package/lib/components/List/ListHeader.namespace.d.ts.map +0 -1
  155. package/src/components/List/ListHeader.namespace.ts +0 -0
@@ -0,0 +1,78 @@
1
+ 'use client';
2
+ // @ts-check
3
+
4
+ /**
5
+ * @template {number} [T=number]
6
+ * @typedef {[from: number, to: number, category: T]} CategorizedUnicodeRange
7
+ */
8
+
9
+ /**
10
+ * @typedef {CategorizedUnicodeRange<0>} UnicodeRange
11
+ */
12
+
13
+ /**
14
+ * @typedef {string & { __tag: 'UnicodeDataEncoding' }} UnicodeDataEncoding
15
+ *
16
+ * Encoding for array of {@link UnicodeRange}, items separated by comma.
17
+ *
18
+ * Each {@link UnicodeDataRow} packed as a base36 integer:
19
+ *
20
+ * padding = to - from
21
+ * encoding = base36(from) + ',' + base36(padding)
22
+ *
23
+ * Notes:
24
+ * - base36 can hold surprisingly large numbers in a few characters.
25
+ * - The biggest codepoint is 0xE01F0 (918,000) at this point
26
+ * - The max value of a category is 23; https://www.unicode.org/reports/tr29/tr29-45.html#Table_Word_Break_Property_Values
27
+ * - The longest range is 42,720; CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
28
+ */
29
+
30
+ /**
31
+ * @template {number} [T=number]
32
+ * @param {UnicodeDataEncoding} data
33
+ * @param {string} [cats='']
34
+ * @returns {Array<CategorizedUnicodeRange<T>>}
35
+ */
36
+ function decodeUnicodeData(data, cats = '') {
37
+ let buf = /** @type {Array<CategorizedUnicodeRange<T>>} */([])
38
+ , nums = data.split(',').map(s => s ? parseInt(s, 36) : 0)
39
+ , n = 0;
40
+ for (let i = 0; i < nums.length; i++)
41
+ i % 2
42
+ ? buf.push([n, n + nums[i], /** @type {T} */ (cats ? parseInt(cats[i >> 1], 36) : 0)])
43
+ : n = nums[i];
44
+ return buf;
45
+ }
46
+
47
+ /**
48
+ * @template {object} Ext
49
+ * @typedef {{
50
+ * segment: string,
51
+ * index: number,
52
+ * input: string,
53
+ * } & Ext} SegmentOutput
54
+ */
55
+
56
+ /**
57
+ * @template {object} T
58
+ * @typedef {IterableIterator<SegmentOutput<T>>} Segmenter
59
+ */
60
+
61
+ /**
62
+ * @template {number} [T=number]
63
+ * @param {number} cp
64
+ * @param {CategorizedUnicodeRange<T>[]} ranges
65
+ * @return {number} index of matched unicode range, or -1 if no match
66
+ */
67
+ function findUnicodeRangeIndex(cp, ranges, lo = 0, hi = ranges.length - 1) {
68
+ while (lo <= hi) {
69
+ let mid = lo + hi >>> 1
70
+ , range = ranges[mid];
71
+ if (cp < range[0]) hi = mid - 1;
72
+ else if (cp > range[1]) lo = mid + 1;
73
+ else return mid;
74
+ }
75
+ return -1;
76
+ }
77
+
78
+ export { decodeUnicodeData, findUnicodeRangeIndex };
@@ -0,0 +1,312 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
+
6
+ const core = require('./core.cjs');
7
+ const _grapheme_data = require('./_grapheme_data.cjs');
8
+ const _incb_data = require('./_incb_data.cjs');
9
+
10
+ // Copyright 2012-2018 The Rust Project Developers. See the COPYRIGHT
11
+ // file at the top-level directory of this distribution and at
12
+ // http://rust-lang.org/COPYRIGHT.
13
+ //
14
+ // Licensed under the MIT license
15
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>.
16
+ //
17
+ // Modified original Rust library [source code]
18
+ // (https://github.com/unicode-rs/unicode-segmentation/blob/1f88570/src/grapheme.rs)
19
+ //
20
+ // to create JavaScript library [unicode-segmenter]
21
+ // (https://github.com/cometkim/unicode-segmenter)
22
+
23
+
24
+ const BMP_MAX = 0xFFFF;
25
+
26
+ /**
27
+ * Unicode segmentation by extended grapheme rules.
28
+ *
29
+ * This is fully compatible with the {@link Intl.Segmenter.segment} API
30
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/segment
31
+ *
32
+ * @param {string} input
33
+ * @return {GraphemeSegmenter} iterator for grapheme cluster segments
34
+ */
35
+ function* graphemeSegments(input) {
36
+ let cp = input.codePointAt(0);
37
+
38
+ // do nothing on empty string
39
+ if (cp == null) return;
40
+
41
+ /** Current cursor position. */
42
+ let cursor = cp <= BMP_MAX ? 1 : 2;
43
+
44
+ /** Total length of the input string. */
45
+ let len = input.length;
46
+
47
+ /** @type {import('./_grapheme_data.js').GraphemeCategoryRange} */
48
+ let cache = [0, 0, 2 /* GC_Control */];
49
+
50
+ /** Category of codepoint immediately preceding cursor */
51
+ let catBefore = cat(cp, cache);
52
+
53
+ /** @type {GraphemeCategoryNum | null} Category of codepoint immediately preceding cursor. */
54
+ let catAfter = null;
55
+
56
+ /** The number of RIS codepoints preceding `cursor`. */
57
+ let risCount = 0;
58
+
59
+ /** Emoji state */
60
+ let emoji = false;
61
+
62
+ /** InCB=Consonant */
63
+ let consonant = false;
64
+
65
+ /** InCB=Linker */
66
+ let linker = false;
67
+
68
+ /** InCB=Consonant InCB=Linker x InCB=Consonant */
69
+ let incb = false;
70
+
71
+ let index = 0;
72
+
73
+ /** Beginning category of a segment */
74
+ let _catBegin = catBefore;
75
+
76
+ /** Memoize the beginnig code point a the segment. */
77
+ let _hd = cp;
78
+
79
+ while (cursor < len) {
80
+ // Note: Lazily update `consonant` and `linker` state
81
+ // which is a extra overhead only for Hindi text.
82
+ if (cp >= 2325) {
83
+ if (!consonant && catBefore === 0) {
84
+ consonant = isIndicConjunctConsonant(cp);
85
+ } else if (catBefore === 3 /* Extend */) {
86
+ // Note: \p{InCB=Linker} is a subset of \p{Extend}
87
+ linker = isIndicConjunctLinker(cp);
88
+ }
89
+ }
90
+
91
+ cp = /** @type {number} */ (input.codePointAt(cursor));
92
+ catAfter = cat(cp, cache);
93
+
94
+ if (catBefore === 10 /* Regional_Indicator */) {
95
+ risCount++;
96
+ } else {
97
+ risCount = 0;
98
+ if (
99
+ catAfter === 14 /* ZWJ */
100
+ && (catBefore === 3 /* Extend */ || catBefore === 4 /* Extended_Pictographic */)
101
+ ) {
102
+ emoji = true;
103
+
104
+ } else if (catAfter === 0 /* Any */ && cp >= 2325) {
105
+ // Note: Put GB9c rule checking here to reduce.
106
+ incb = consonant && linker && (consonant = isIndicConjunctConsonant(cp));
107
+ // It cannot be both a linker and a consonant.
108
+ linker = linker && !consonant;
109
+ }
110
+ }
111
+
112
+ if (isBoundary(catBefore, catAfter, risCount, emoji, incb)) {
113
+ yield {
114
+ segment: input.slice(index, cursor),
115
+ index,
116
+ input,
117
+ _hd,
118
+ _catBegin,
119
+ _catEnd: catBefore,
120
+ };
121
+
122
+ // flush
123
+ emoji = false;
124
+ incb = false;
125
+ index = cursor;
126
+ _catBegin = catAfter;
127
+ _hd = cp;
128
+ }
129
+
130
+ cursor += cp <= BMP_MAX ? 1 : 2;
131
+ catBefore = catAfter;
132
+ }
133
+
134
+ if (index < len) {
135
+ yield {
136
+ segment: input.slice(index),
137
+ index,
138
+ input,
139
+ _hd,
140
+ _catBegin,
141
+ _catEnd: catBefore,
142
+ };
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Split given text into extended grapheme clusters.
148
+ *
149
+ * @param {string} text
150
+ * @return {IterableIterator<string>} iterator for grapheme clusters
151
+ *
152
+ * @see {@link graphemeSegments} if you need extra information.
153
+ *
154
+ * @example
155
+ * [...splitGraphemes('abc')] // => ['a', 'b', 'c']
156
+ */
157
+ function* splitGraphemes(text) {
158
+ for (let s of graphemeSegments(text)) yield s.segment;
159
+ }
160
+
161
+ /**
162
+ * Precompute a fast lookup table for BMP code points (0..0xFFFF)
163
+ * This table maps each code point to its Grapheme_Cluster_Break category.
164
+ * It is generated once at module load time using the grapheme_ranges data.
165
+ * The table is a Uint8Array of length 0x10000 (64KB), which is acceptable in memory.
166
+ * For code points >= 0x10000 we fall back to binary search.
167
+ */
168
+ let bmpLookup = new Uint8Array(BMP_MAX + 1);
169
+ let bmpCursor = (() => {
170
+ let cursor = 0;
171
+ let cp = 0;
172
+ while (cp <= BMP_MAX) {
173
+ let range = _grapheme_data.grapheme_ranges[cursor++];
174
+ for (cp = range[0]; cp <= range[1]; cp++) {
175
+ bmpLookup[cp] = range[2];
176
+ }
177
+ }
178
+ return cursor;
179
+ })();
180
+
181
+ /**
182
+ * `Grapheme_Cluster_Break` property value of a given codepoint
183
+ *
184
+ * @see https://www.unicode.org/reports/tr29/tr29-43.html#Default_Grapheme_Cluster_Table
185
+ *
186
+ * @param {number} cp
187
+ * @param {import('./_grapheme_data.js').GraphemeCategoryRange} cache
188
+ * @return {GraphemeCategoryNum}
189
+ */
190
+ function cat(cp, cache) {
191
+ // Fast lookup for BMP (0x0000..0xFFFF) using precomputed table
192
+ if (cp <= BMP_MAX) {
193
+ return /** @type {GraphemeCategoryNum} */ (bmpLookup[cp]);
194
+ }
195
+
196
+ // Use cached result
197
+ if (cp >= cache[0] && cp <= cache[1]) {
198
+ return cache[2];
199
+ }
200
+
201
+ // Binary search, starting from bmpCursor
202
+ let index = core.findUnicodeRangeIndex(cp, _grapheme_data.grapheme_ranges, bmpCursor);
203
+ if (index < 0) {
204
+ return 0;
205
+ }
206
+
207
+ const range = _grapheme_data.grapheme_ranges[index];
208
+ cache[0] = range[0];
209
+ cache[1] = range[1];
210
+ return (cache[2] = range[2]);
211
+ }
212
+ /**
213
+ * @param {number} cp
214
+ * @return {boolean}
215
+ */
216
+ function isIndicConjunctConsonant(cp) {
217
+ return core.findUnicodeRangeIndex(cp, _incb_data.consonant_ranges) >= 0;
218
+ }
219
+
220
+ /**
221
+ * @param {number} cp
222
+ * @return {boolean}
223
+ */
224
+ function isIndicConjunctLinker(cp) {
225
+ return (
226
+ cp === 2381 /* 0x094D */ ||
227
+ cp === 2509 /* 0x09CD */ ||
228
+ cp === 2765 /* 0x0ACD */ ||
229
+ cp === 2893 /* 0x0B4D */ ||
230
+ cp === 3149 /* 0x0C4D */ ||
231
+ cp === 3405 /* 0x0D4D */
232
+ );
233
+ }
234
+
235
+ /**
236
+ * @param {GraphemeCategoryNum} catBefore
237
+ * @param {GraphemeCategoryNum} catAfter
238
+ * @param {number} risCount Regional_Indicator state
239
+ * @param {boolean} emoji Extended_Pictographic state
240
+ * @param {boolean} incb Indic_Conjunct_Break state
241
+ * @return {boolean}
242
+ *
243
+ * @see https://www.unicode.org/reports/tr29/tr29-43.html#Grapheme_Cluster_Boundary_Rules
244
+ */
245
+ function isBoundary(catBefore, catAfter, risCount, emoji, incb) {
246
+ // GB3
247
+ if (catBefore === 1 && catAfter === 6) {
248
+ return false;
249
+ }
250
+
251
+ // GB4
252
+ if (catBefore === 1 || catBefore === 2 || catBefore === 6) {
253
+ return true;
254
+ }
255
+
256
+ // GB5
257
+ if (catAfter === 1 || catAfter === 2 || catAfter === 6) {
258
+ return true;
259
+ }
260
+
261
+ // Most common cases - GB9, GB9a extend rules
262
+ if (catAfter === 3 || catAfter === 14 || catAfter === 11) {
263
+ return false;
264
+ }
265
+
266
+ // GB6 - L x (L | V | LV | LVT)
267
+ if (catBefore === 5) {
268
+ return !(catAfter === 5 || catAfter === 7 || catAfter === 8 || catAfter === 13);
269
+ }
270
+
271
+ // GB7 - (LV | V) x (V | T)
272
+ if (
273
+ (catBefore === 7 || catBefore === 13) &&
274
+ (catAfter === 13 || catAfter === 12)
275
+ ) {
276
+ return false;
277
+ }
278
+
279
+ // GB8 - (LVT | T) x T
280
+ if (
281
+ (catBefore === 8 || catBefore === 12) &&
282
+ catAfter === 12
283
+ ) {
284
+ return false;
285
+ }
286
+
287
+ // GB9b
288
+ if (catBefore === 9) {
289
+ return false;
290
+ }
291
+
292
+ // GB9c
293
+ if (catAfter === 0 && incb) {
294
+ return false;
295
+ }
296
+
297
+ // GB11
298
+ if (catBefore === 14 && catAfter === 4) {
299
+ return !emoji;
300
+ }
301
+
302
+ // GB12, GB13
303
+ if (catBefore === 10 && catAfter === 10) {
304
+ return risCount % 2 === 0;
305
+ }
306
+
307
+ // GB999
308
+ return true;
309
+ }
310
+
311
+ exports.graphemeSegments = graphemeSegments;
312
+ exports.splitGraphemes = splitGraphemes;
@@ -0,0 +1,307 @@
1
+ 'use client';
2
+ import { findUnicodeRangeIndex } from './core.js';
3
+ import { grapheme_ranges } from './_grapheme_data.js';
4
+ import { consonant_ranges } from './_incb_data.js';
5
+
6
+ // Copyright 2012-2018 The Rust Project Developers. See the COPYRIGHT
7
+ // file at the top-level directory of this distribution and at
8
+ // http://rust-lang.org/COPYRIGHT.
9
+ //
10
+ // Licensed under the MIT license
11
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>.
12
+ //
13
+ // Modified original Rust library [source code]
14
+ // (https://github.com/unicode-rs/unicode-segmentation/blob/1f88570/src/grapheme.rs)
15
+ //
16
+ // to create JavaScript library [unicode-segmenter]
17
+ // (https://github.com/cometkim/unicode-segmenter)
18
+
19
+
20
+ const BMP_MAX = 0xFFFF;
21
+
22
+ /**
23
+ * Unicode segmentation by extended grapheme rules.
24
+ *
25
+ * This is fully compatible with the {@link Intl.Segmenter.segment} API
26
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/segment
27
+ *
28
+ * @param {string} input
29
+ * @return {GraphemeSegmenter} iterator for grapheme cluster segments
30
+ */
31
+ function* graphemeSegments(input) {
32
+ let cp = input.codePointAt(0);
33
+
34
+ // do nothing on empty string
35
+ if (cp == null) return;
36
+
37
+ /** Current cursor position. */
38
+ let cursor = cp <= BMP_MAX ? 1 : 2;
39
+
40
+ /** Total length of the input string. */
41
+ let len = input.length;
42
+
43
+ /** @type {import('./_grapheme_data.js').GraphemeCategoryRange} */
44
+ let cache = [0, 0, 2 /* GC_Control */];
45
+
46
+ /** Category of codepoint immediately preceding cursor */
47
+ let catBefore = cat(cp, cache);
48
+
49
+ /** @type {GraphemeCategoryNum | null} Category of codepoint immediately preceding cursor. */
50
+ let catAfter = null;
51
+
52
+ /** The number of RIS codepoints preceding `cursor`. */
53
+ let risCount = 0;
54
+
55
+ /** Emoji state */
56
+ let emoji = false;
57
+
58
+ /** InCB=Consonant */
59
+ let consonant = false;
60
+
61
+ /** InCB=Linker */
62
+ let linker = false;
63
+
64
+ /** InCB=Consonant InCB=Linker x InCB=Consonant */
65
+ let incb = false;
66
+
67
+ let index = 0;
68
+
69
+ /** Beginning category of a segment */
70
+ let _catBegin = catBefore;
71
+
72
+ /** Memoize the beginnig code point a the segment. */
73
+ let _hd = cp;
74
+
75
+ while (cursor < len) {
76
+ // Note: Lazily update `consonant` and `linker` state
77
+ // which is a extra overhead only for Hindi text.
78
+ if (cp >= 2325) {
79
+ if (!consonant && catBefore === 0) {
80
+ consonant = isIndicConjunctConsonant(cp);
81
+ } else if (catBefore === 3 /* Extend */) {
82
+ // Note: \p{InCB=Linker} is a subset of \p{Extend}
83
+ linker = isIndicConjunctLinker(cp);
84
+ }
85
+ }
86
+
87
+ cp = /** @type {number} */ (input.codePointAt(cursor));
88
+ catAfter = cat(cp, cache);
89
+
90
+ if (catBefore === 10 /* Regional_Indicator */) {
91
+ risCount++;
92
+ } else {
93
+ risCount = 0;
94
+ if (
95
+ catAfter === 14 /* ZWJ */
96
+ && (catBefore === 3 /* Extend */ || catBefore === 4 /* Extended_Pictographic */)
97
+ ) {
98
+ emoji = true;
99
+
100
+ } else if (catAfter === 0 /* Any */ && cp >= 2325) {
101
+ // Note: Put GB9c rule checking here to reduce.
102
+ incb = consonant && linker && (consonant = isIndicConjunctConsonant(cp));
103
+ // It cannot be both a linker and a consonant.
104
+ linker = linker && !consonant;
105
+ }
106
+ }
107
+
108
+ if (isBoundary(catBefore, catAfter, risCount, emoji, incb)) {
109
+ yield {
110
+ segment: input.slice(index, cursor),
111
+ index,
112
+ input,
113
+ _hd,
114
+ _catBegin,
115
+ _catEnd: catBefore,
116
+ };
117
+
118
+ // flush
119
+ emoji = false;
120
+ incb = false;
121
+ index = cursor;
122
+ _catBegin = catAfter;
123
+ _hd = cp;
124
+ }
125
+
126
+ cursor += cp <= BMP_MAX ? 1 : 2;
127
+ catBefore = catAfter;
128
+ }
129
+
130
+ if (index < len) {
131
+ yield {
132
+ segment: input.slice(index),
133
+ index,
134
+ input,
135
+ _hd,
136
+ _catBegin,
137
+ _catEnd: catBefore,
138
+ };
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Split given text into extended grapheme clusters.
144
+ *
145
+ * @param {string} text
146
+ * @return {IterableIterator<string>} iterator for grapheme clusters
147
+ *
148
+ * @see {@link graphemeSegments} if you need extra information.
149
+ *
150
+ * @example
151
+ * [...splitGraphemes('abc')] // => ['a', 'b', 'c']
152
+ */
153
+ function* splitGraphemes(text) {
154
+ for (let s of graphemeSegments(text)) yield s.segment;
155
+ }
156
+
157
+ /**
158
+ * Precompute a fast lookup table for BMP code points (0..0xFFFF)
159
+ * This table maps each code point to its Grapheme_Cluster_Break category.
160
+ * It is generated once at module load time using the grapheme_ranges data.
161
+ * The table is a Uint8Array of length 0x10000 (64KB), which is acceptable in memory.
162
+ * For code points >= 0x10000 we fall back to binary search.
163
+ */
164
+ let bmpLookup = new Uint8Array(BMP_MAX + 1);
165
+ let bmpCursor = (() => {
166
+ let cursor = 0;
167
+ let cp = 0;
168
+ while (cp <= BMP_MAX) {
169
+ let range = grapheme_ranges[cursor++];
170
+ for (cp = range[0]; cp <= range[1]; cp++) {
171
+ bmpLookup[cp] = range[2];
172
+ }
173
+ }
174
+ return cursor;
175
+ })();
176
+
177
+ /**
178
+ * `Grapheme_Cluster_Break` property value of a given codepoint
179
+ *
180
+ * @see https://www.unicode.org/reports/tr29/tr29-43.html#Default_Grapheme_Cluster_Table
181
+ *
182
+ * @param {number} cp
183
+ * @param {import('./_grapheme_data.js').GraphemeCategoryRange} cache
184
+ * @return {GraphemeCategoryNum}
185
+ */
186
+ function cat(cp, cache) {
187
+ // Fast lookup for BMP (0x0000..0xFFFF) using precomputed table
188
+ if (cp <= BMP_MAX) {
189
+ return /** @type {GraphemeCategoryNum} */ (bmpLookup[cp]);
190
+ }
191
+
192
+ // Use cached result
193
+ if (cp >= cache[0] && cp <= cache[1]) {
194
+ return cache[2];
195
+ }
196
+
197
+ // Binary search, starting from bmpCursor
198
+ let index = findUnicodeRangeIndex(cp, grapheme_ranges, bmpCursor);
199
+ if (index < 0) {
200
+ return 0;
201
+ }
202
+
203
+ const range = grapheme_ranges[index];
204
+ cache[0] = range[0];
205
+ cache[1] = range[1];
206
+ return (cache[2] = range[2]);
207
+ }
208
+ /**
209
+ * @param {number} cp
210
+ * @return {boolean}
211
+ */
212
+ function isIndicConjunctConsonant(cp) {
213
+ return findUnicodeRangeIndex(cp, consonant_ranges) >= 0;
214
+ }
215
+
216
+ /**
217
+ * @param {number} cp
218
+ * @return {boolean}
219
+ */
220
+ function isIndicConjunctLinker(cp) {
221
+ return (
222
+ cp === 2381 /* 0x094D */ ||
223
+ cp === 2509 /* 0x09CD */ ||
224
+ cp === 2765 /* 0x0ACD */ ||
225
+ cp === 2893 /* 0x0B4D */ ||
226
+ cp === 3149 /* 0x0C4D */ ||
227
+ cp === 3405 /* 0x0D4D */
228
+ );
229
+ }
230
+
231
+ /**
232
+ * @param {GraphemeCategoryNum} catBefore
233
+ * @param {GraphemeCategoryNum} catAfter
234
+ * @param {number} risCount Regional_Indicator state
235
+ * @param {boolean} emoji Extended_Pictographic state
236
+ * @param {boolean} incb Indic_Conjunct_Break state
237
+ * @return {boolean}
238
+ *
239
+ * @see https://www.unicode.org/reports/tr29/tr29-43.html#Grapheme_Cluster_Boundary_Rules
240
+ */
241
+ function isBoundary(catBefore, catAfter, risCount, emoji, incb) {
242
+ // GB3
243
+ if (catBefore === 1 && catAfter === 6) {
244
+ return false;
245
+ }
246
+
247
+ // GB4
248
+ if (catBefore === 1 || catBefore === 2 || catBefore === 6) {
249
+ return true;
250
+ }
251
+
252
+ // GB5
253
+ if (catAfter === 1 || catAfter === 2 || catAfter === 6) {
254
+ return true;
255
+ }
256
+
257
+ // Most common cases - GB9, GB9a extend rules
258
+ if (catAfter === 3 || catAfter === 14 || catAfter === 11) {
259
+ return false;
260
+ }
261
+
262
+ // GB6 - L x (L | V | LV | LVT)
263
+ if (catBefore === 5) {
264
+ return !(catAfter === 5 || catAfter === 7 || catAfter === 8 || catAfter === 13);
265
+ }
266
+
267
+ // GB7 - (LV | V) x (V | T)
268
+ if (
269
+ (catBefore === 7 || catBefore === 13) &&
270
+ (catAfter === 13 || catAfter === 12)
271
+ ) {
272
+ return false;
273
+ }
274
+
275
+ // GB8 - (LVT | T) x T
276
+ if (
277
+ (catBefore === 8 || catBefore === 12) &&
278
+ catAfter === 12
279
+ ) {
280
+ return false;
281
+ }
282
+
283
+ // GB9b
284
+ if (catBefore === 9) {
285
+ return false;
286
+ }
287
+
288
+ // GB9c
289
+ if (catAfter === 0 && incb) {
290
+ return false;
291
+ }
292
+
293
+ // GB11
294
+ if (catBefore === 14 && catAfter === 4) {
295
+ return !emoji;
296
+ }
297
+
298
+ // GB12, GB13
299
+ if (catBefore === 10 && catAfter === 10) {
300
+ return risCount % 2 === 0;
301
+ }
302
+
303
+ // GB999
304
+ return true;
305
+ }
306
+
307
+ export { graphemeSegments, splitGraphemes };
package/lib/primitive.cjs CHANGED
@@ -9,6 +9,7 @@ const reactPopover = require('@seed-design/react-popover');
9
9
  const reactProgress = require('@seed-design/react-progress');
10
10
  const reactPullToRefresh = require('@seed-design/react-pull-to-refresh');
11
11
  const reactRadioGroup = require('@seed-design/react-radio-group');
12
+ const reactSlider = require('@seed-design/react-slider');
12
13
  const reactSnackbar = require('@seed-design/react-snackbar');
13
14
  const reactSwitch = require('@seed-design/react-switch');
14
15
  const reactTabs = require('@seed-design/react-tabs');
@@ -58,6 +59,12 @@ Object.keys(reactRadioGroup).forEach(k => {
58
59
  get: () => reactRadioGroup[k]
59
60
  });
60
61
  });
62
+ Object.keys(reactSlider).forEach(k => {
63
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
64
+ enumerable: true,
65
+ get: () => reactSlider[k]
66
+ });
67
+ });
61
68
  Object.keys(reactSnackbar).forEach(k => {
62
69
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
63
70
  enumerable: true,