@inkra/react 0.8.0 → 0.10.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 (76) hide show
  1. package/README.md +137 -2
  2. package/THIRD_PARTY_NOTICES.md +9 -0
  3. package/Xiaolai-OFL.txt +94 -0
  4. package/dist/PencilIcon.d.ts +14 -1
  5. package/dist/PencilIcon.js +88 -52
  6. package/dist/PencilText.js +4 -1
  7. package/dist/assets/ui-hand-xiaolai-extended.woff2 +0 -0
  8. package/dist/assets/ui-hand-xiaolai.woff2 +0 -0
  9. package/dist/assets/xiaolai.css +17 -0
  10. package/dist/form/EditablePencilText.js +4 -2
  11. package/dist/guide/index.d.ts +77 -0
  12. package/dist/guide/index.js +379 -0
  13. package/dist/i18n/catalog.d.ts +1 -1
  14. package/dist/i18n/catalog.js +8 -0
  15. package/dist/image-viewer/index.d.ts +2 -0
  16. package/dist/image-viewer/index.js +28 -28
  17. package/dist/index.d.ts +4 -0
  18. package/dist/index.js +4 -0
  19. package/dist/infinite-scroll/gesture.d.ts +19 -0
  20. package/dist/infinite-scroll/gesture.js +218 -0
  21. package/dist/infinite-scroll/index.d.ts +55 -0
  22. package/dist/infinite-scroll/index.js +543 -0
  23. package/dist/infinite-scroll/model.d.ts +33 -0
  24. package/dist/infinite-scroll/model.js +168 -0
  25. package/dist/internal/iconFill.d.ts +16 -0
  26. package/dist/internal/iconFill.js +275 -0
  27. package/dist/internal/surfaceRenderer.d.ts +4 -4
  28. package/dist/internal/surfaceRenderer.js +2 -2
  29. package/dist/internal/textRenderer.d.ts +1 -1
  30. package/dist/internal/textRenderer.js +23 -11
  31. package/dist/inventory-grid/index.js +13 -3
  32. package/dist/inventory-grid/outline.d.ts +9 -0
  33. package/dist/inventory-grid/outline.js +54 -0
  34. package/dist/loading/index.d.ts +58 -0
  35. package/dist/loading/index.js +188 -0
  36. package/dist/loading/locales.d.ts +15 -0
  37. package/dist/loading/locales.js +34 -0
  38. package/dist/loading/model.d.ts +6 -0
  39. package/dist/loading/model.js +29 -0
  40. package/dist/masonry/index.d.ts +25 -0
  41. package/dist/masonry/index.js +227 -0
  42. package/dist/masonry/layout.d.ts +35 -0
  43. package/dist/masonry/layout.js +67 -0
  44. package/dist/number-ticker/RollingValue.d.ts +6 -0
  45. package/dist/number-ticker/RollingValue.js +10 -0
  46. package/dist/number-ticker/index.d.ts +4 -0
  47. package/dist/number-ticker/index.js +55 -7
  48. package/dist/number-ticker/rolling.d.ts +35 -0
  49. package/dist/number-ticker/rolling.js +87 -0
  50. package/dist/selection/CircularSwitchVisual.d.ts +8 -0
  51. package/dist/selection/CircularSwitchVisual.js +82 -0
  52. package/dist/selection/Switch.d.ts +7 -0
  53. package/dist/selection/Switch.js +15 -3
  54. package/dist/slider/circular.d.ts +35 -0
  55. package/dist/slider/circular.js +196 -0
  56. package/dist/slider/circularMath.d.ts +10 -0
  57. package/dist/slider/circularMath.js +34 -0
  58. package/dist/slider/index.d.ts +5 -0
  59. package/dist/slider/index.js +5 -3
  60. package/dist/styles/base.css +4 -2
  61. package/dist/styles/breadcrumb.css +1 -1
  62. package/dist/styles/guide.css +202 -0
  63. package/dist/styles/image-viewer.css +20 -0
  64. package/dist/styles/infinite-scroll.css +171 -0
  65. package/dist/styles/inventory-grid.css +20 -8
  66. package/dist/styles/loading.css +348 -0
  67. package/dist/styles/markdown.css +1 -1
  68. package/dist/styles/masonry.css +68 -0
  69. package/dist/styles/number-ticker.css +47 -1
  70. package/dist/styles/selection.css +50 -0
  71. package/dist/styles/slider.css +65 -0
  72. package/dist/styles/slot.css +1 -1
  73. package/dist/styles.css +1180 -192
  74. package/dist/toast/manager.d.ts +4 -4
  75. package/dist/tokens.css +13 -10
  76. package/package.json +28 -2
@@ -25,7 +25,53 @@
25
25
 
26
26
  .inkra-number-ticker__native-value {
27
27
  font: inherit;
28
- font-family: "Trip Map Hand", "HanziPen SC", "Hannotate SC", "Kaiti SC", "STKaiti", cursive;
28
+ font-family: var(--inkra-font-hand);
29
+ }
30
+
31
+ .inkra-number-ticker__reels {
32
+ display: inline-flex;
33
+ align-items: baseline;
34
+ unicode-bidi: isolate;
35
+ line-height: var(--inkra-line-ui, 1.45);
36
+ }
37
+
38
+ .inkra-number-ticker__column {
39
+ display: inline-grid;
40
+ flex: none;
41
+ overflow: hidden;
42
+ vertical-align: bottom;
43
+ }
44
+
45
+ .inkra-number-ticker__column-inner {
46
+ display: grid;
47
+ min-width: 0;
48
+ height: 1lh;
49
+ overflow: hidden;
50
+ }
51
+
52
+ .inkra-number-ticker__face {
53
+ grid-area: 1 / 1;
54
+ display: flex;
55
+ justify-content: center;
56
+ align-items: center;
57
+ height: 1lh;
58
+ white-space: pre;
59
+ }
60
+
61
+ .inkra-number-ticker__column[data-digit] .inkra-number-ticker__face {
62
+ width: 1ch;
63
+ }
64
+
65
+ .inkra-number-ticker__face > .inkra-pencil-text {
66
+ flex: none;
67
+ }
68
+
69
+ @media (prefers-reduced-motion: reduce), print {
70
+ .inkra-number-ticker__column { grid-template-columns: 1fr !important; }
71
+ .inkra-number-ticker__column[data-digit] { width: 1ch !important; }
72
+ .inkra-number-ticker__column[data-departing] { display: none; }
73
+ .inkra-number-ticker__face[data-face="from"] { display: none; }
74
+ .inkra-number-ticker__face[data-face="to"] { transform: none !important; opacity: 1 !important; }
29
75
  }
30
76
 
31
77
  .inkra-number-ticker__prefix,
@@ -262,3 +262,53 @@
262
262
  outline-offset: var(--inkra-focus-offset);
263
263
  }
264
264
  }
265
+
266
+ /* Circular switches retain the native checkbox while sharing the dial's pencil geometry. */
267
+ .inkra-switch--circular {
268
+ grid-template-columns: minmax(0, 1fr);
269
+ justify-items: center;
270
+ align-content: start;
271
+ width: var(--inkra-circular-switch-diameter);
272
+ gap: 2px;
273
+ }
274
+ .inkra-switch--circular > .inkra-selection-control__input {
275
+ width: var(--inkra-circular-switch-diameter);
276
+ height: var(--inkra-circular-switch-diameter);
277
+ inset: 0 auto auto 0;
278
+ touch-action: manipulation;
279
+ }
280
+ .inkra-switch--circular > .inkra-selection-control__copy { width: 100%; text-align: center; }
281
+ .inkra-switch[data-readonly="true"] { cursor: default; }
282
+ .inkra-switch__circular { display: flex; align-items: center; justify-content: center; position: relative; width: var(--inkra-circular-switch-diameter); height: var(--inkra-circular-switch-diameter); pointer-events: none; user-select: none; }
283
+ .inkra-switch__circular-arc { position: absolute; inset: 16px; transform: rotate(225deg); }
284
+ .inkra-switch__circular-track, .inkra-switch__circular-range { position: absolute; inset: 0; }
285
+ .inkra-switch__circular-track { color: var(--inkra-ink-muted); opacity: .3; }
286
+ .inkra-switch__circular-range { color: var(--inkra-accent-strong); }
287
+ .inkra-switch__circular .inkra-progress__ring { color: inherit; }
288
+ .inkra-switch__circular .inkra-progress__ring,
289
+ .inkra-switch__circular .inkra-progress__ring-rotation,
290
+ .inkra-switch__circular .inkra-progress__ring-direction,
291
+ .inkra-switch__circular .inkra-progress__ring-ink,
292
+ .inkra-switch__circular .inkra-progress__ring-fallback { display: block; position: absolute; inset: 0; width: 100%; height: 100%; }
293
+ .inkra-switch__circular .inkra-progress__ring-ink { visibility: hidden; }
294
+ .inkra-switch__circular .inkra-progress__ring-ink[data-ready="true"] { visibility: visible; }
295
+ .inkra-switch__circular .inkra-progress__ring-ink[data-ready="true"] + .inkra-progress__ring-fallback { visibility: hidden; }
296
+ .inkra-switch__circular-center { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 5px; box-sizing: border-box; width: var(--inkra-circular-switch-center-width); max-height: var(--inkra-circular-switch-center-height); min-width: 0; overflow: hidden; pointer-events: none; text-align: center; }
297
+ .inkra-switch__circular-icon { display: flex; align-items: center; justify-content: center; flex: none; width: min(var(--inkra-circular-switch-icon-size), 100%); height: var(--inkra-circular-switch-icon-size); }
298
+ .inkra-switch__circular-icon > * { max-width: 100%; max-height: 100%; }
299
+ .inkra-switch__circular-content { width: 100%; min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
300
+ .inkra-switch__circular-content > * { max-width: 100%; }
301
+ .inkra-switch__circular-value { display: block; white-space: nowrap; max-width: 100%; text-align: center; font-size: var(--inkra-circular-switch-value-size); line-height: var(--inkra-circular-switch-value-line); }
302
+ .inkra-switch__circular-focus { --inkra-ink: var(--inkra-focus); --inkra-accent-strong: var(--inkra-focus); position: absolute !important; inset: 10px; opacity: 0; pointer-events: none; border-radius: 50%; }
303
+ .inkra-switch--circular:has(.inkra-selection-control__input:focus-visible) .inkra-switch__circular-focus { opacity: 1; }
304
+ @media (forced-colors: active) {
305
+ .inkra-switch--circular > .inkra-selection-control__input { position: absolute; opacity: 0; z-index: 2; }
306
+ .inkra-switch__circular-track { color: GrayText; opacity: 1; }
307
+ .inkra-switch__circular-range { color: Highlight; }
308
+ .inkra-switch--circular:has(.inkra-selection-control__input:focus-visible) .inkra-switch__circular { outline: var(--inkra-focus-width) solid Highlight; outline-offset: -10px; border-radius: 50%; }
309
+ .inkra-switch__circular-focus { display: none !important; }
310
+ }
311
+ @media (forced-colors: active), print {
312
+ .inkra-switch__circular .inkra-progress__ring-ink[data-ready="true"] { visibility: hidden; }
313
+ .inkra-switch__circular .inkra-progress__ring-ink[data-ready="true"] + .inkra-progress__ring-fallback { visibility: visible; }
314
+ }
@@ -98,6 +98,17 @@
98
98
  width: var(--inkra-slider-thumb-size);
99
99
  }
100
100
 
101
+ /* Radix insets its measured hit target by half a thumb at each endpoint.
102
+ Translate the whole target back so its visual center follows the track;
103
+ percentages use the actual thumb box and preserve its 44px hit area. */
104
+ .inkra-slider[data-thumb-alignment="edge"] .inkra-slider__thumb {
105
+ translate: var(--inkra-slider-thumb-offset) 0;
106
+ }
107
+
108
+ .inkra-slider[data-thumb-alignment="edge"][data-orientation="vertical"] .inkra-slider__thumb {
109
+ translate: 0 var(--inkra-slider-thumb-offset);
110
+ }
111
+
101
112
  .inkra-slider__thumb:focus-visible {
102
113
  outline: none;
103
114
  }
@@ -143,3 +154,57 @@
143
154
  display: none !important;
144
155
  }
145
156
  }
157
+
158
+ .inkra-circular-slider {
159
+ box-sizing: border-box;
160
+ color: var(--inkra-ink);
161
+ cursor: pointer;
162
+ display: inline-flex;
163
+ flex: none;
164
+ align-items: center;
165
+ justify-content: center;
166
+ width: var(--inkra-circular-slider-diameter);
167
+ height: var(--inkra-circular-slider-diameter);
168
+ position: relative;
169
+ touch-action: none;
170
+ user-select: none;
171
+ vertical-align: middle;
172
+ outline: none;
173
+ }
174
+ .inkra-circular-slider[data-disabled] { cursor: not-allowed; opacity: .55; }
175
+ .inkra-circular-slider[data-readonly] { cursor: default; }
176
+ .inkra-circular-slider__arc { position: absolute; inset: 16px; pointer-events: none; }
177
+ .inkra-circular-slider__track, .inkra-circular-slider__range { position: absolute; inset: 0; }
178
+ .inkra-circular-slider__track { color: var(--inkra-ink-muted); opacity: .3; }
179
+ .inkra-circular-slider__range { color: var(--inkra-accent-strong); }
180
+ /* ProgressRing shares the stable pencil texture; these scoped rules also support slider-only styles. */
181
+ .inkra-circular-slider .inkra-progress__ring { color: inherit; }
182
+ .inkra-circular-slider .inkra-progress__ring,
183
+ .inkra-circular-slider .inkra-progress__ring-rotation,
184
+ .inkra-circular-slider .inkra-progress__ring-direction,
185
+ .inkra-circular-slider .inkra-progress__ring-ink,
186
+ .inkra-circular-slider .inkra-progress__ring-fallback { display: block; position: absolute; inset: 0; width: 100%; height: 100%; }
187
+ .inkra-circular-slider .inkra-progress__ring-ink { visibility: hidden; }
188
+ .inkra-circular-slider .inkra-progress__ring-ink[data-ready="true"] { visibility: visible; }
189
+ .inkra-circular-slider .inkra-progress__ring-ink[data-ready="true"] + .inkra-progress__ring-fallback { visibility: hidden; }
190
+ .inkra-circular-slider__center { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 5px; box-sizing: border-box; width: var(--inkra-circular-slider-center-width); max-height: var(--inkra-circular-slider-center-height); min-width: 0; overflow: hidden; pointer-events: none; text-align: center; }
191
+ .inkra-circular-slider__center-icon { display: flex; align-items: center; justify-content: center; flex: none; width: min(var(--inkra-circular-slider-center-icon-size), 100%); height: var(--inkra-circular-slider-center-icon-size); }
192
+ .inkra-circular-slider__center-icon > * { max-width: 100%; max-height: 100%; }
193
+ .inkra-circular-slider__center-content { width: 100%; min-width: 0; max-width: 100%; max-height: var(--inkra-circular-slider-center-height); overflow-wrap: anywhere; }
194
+ .inkra-circular-slider__center-content > * { max-width: 100%; }
195
+ .inkra-circular-slider__value { display: block; white-space: nowrap; max-width: 100%; pointer-events: none; text-align: center; font-size: var(--inkra-circular-slider-center-font-size); line-height: var(--inkra-circular-slider-center-line-height); }
196
+ .inkra-circular-slider__thumb { position: absolute; transform: translate(-50%, -50%); width: var(--inkra-touch-target); height: var(--inkra-touch-target); display: flex; align-items: center; justify-content: center; pointer-events: none; }
197
+ .inkra-circular-slider__thumb-surface { display: block !important; width: var(--inkra-circular-slider-thumb-size); height: var(--inkra-circular-slider-thumb-size); border-radius: 50%; }
198
+ .inkra-circular-slider__focus-ring { --inkra-ink: var(--inkra-focus); position: absolute !important; inset: -4px; opacity: 0; pointer-events: none; }
199
+ .inkra-circular-slider:focus-visible .inkra-circular-slider__focus-ring { opacity: 1; }
200
+ @media (forced-colors: active) {
201
+ .inkra-circular-slider__track { color: GrayText; opacity: 1; }
202
+ .inkra-circular-slider__range { color: Highlight; }
203
+ .inkra-circular-slider__thumb-surface { border: 2px solid ButtonText; background: Canvas; }
204
+ .inkra-circular-slider:focus-visible .inkra-circular-slider__thumb-surface { outline: var(--inkra-focus-width) solid Highlight; outline-offset: var(--inkra-focus-offset); }
205
+ .inkra-circular-slider__focus-ring { display: none !important; }
206
+ }
207
+ @media (forced-colors: active), print {
208
+ .inkra-circular-slider .inkra-progress__ring-ink[data-ready="true"] { visibility: hidden; }
209
+ .inkra-circular-slider .inkra-progress__ring-ink[data-ready="true"] + .inkra-progress__ring-fallback { visibility: visible; }
210
+ }
@@ -64,7 +64,7 @@
64
64
 
65
65
  .inkra-slot__empty-mark {
66
66
  color: var(--inkra-ink-muted);
67
- font-family: "Trip Map Hand", "HanziPen SC", "Hannotate SC", "Kaiti SC", "STKaiti", cursive;
67
+ font-family: var(--inkra-font-hand);
68
68
  font-size: calc(var(--inkra-slot-size) * 0.4);
69
69
  line-height: 1;
70
70
  }