@multiplatform.one/components 6.3.0 → 6.4.1

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 (123) hide show
  1. package/dist/cjs/Alert/index.cjs +10 -0
  2. package/dist/cjs/Alert/index.native.js +10 -0
  3. package/dist/cjs/Alert/index.native.js.map +1 -1
  4. package/dist/cjs/Carousel/index.cjs +35 -25
  5. package/dist/cjs/Carousel/index.native.js +31 -25
  6. package/dist/cjs/Carousel/index.native.js.map +1 -1
  7. package/dist/cjs/DotIndicator/index.cjs +30 -16
  8. package/dist/cjs/DotIndicator/index.native.js +32 -17
  9. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  10. package/dist/cjs/Tabs/index.cjs +10 -2
  11. package/dist/cjs/Tabs/index.native.js +22 -8
  12. package/dist/cjs/Tabs/index.native.js.map +1 -1
  13. package/dist/cjs/icons/index.cjs +2 -1
  14. package/dist/cjs/icons/index.native.js +1 -0
  15. package/dist/cjs/icons/index.native.js.map +1 -1
  16. package/dist/cjs/layouts/tags.cjs +27 -19
  17. package/dist/cjs/layouts/tags.native.js +37 -26
  18. package/dist/cjs/layouts/tags.native.js.map +1 -1
  19. package/dist/cjs/layouts/timeline.cjs +3 -0
  20. package/dist/cjs/layouts/timeline.native.js +11 -2
  21. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  22. package/dist/cjs/views/Gantt.cjs +9 -3
  23. package/dist/cjs/views/Gantt.native.js +14 -4
  24. package/dist/cjs/views/Gantt.native.js.map +1 -1
  25. package/dist/cjs/views/ReportBuilder.cjs +3 -2
  26. package/dist/cjs/views/ReportBuilder.native.js +3 -2
  27. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  28. package/dist/esm/Alert/index.mjs +11 -1
  29. package/dist/esm/Alert/index.mjs.map +1 -1
  30. package/dist/esm/Alert/index.native.js +11 -1
  31. package/dist/esm/Alert/index.native.js.map +1 -1
  32. package/dist/esm/Carousel/index.mjs +36 -26
  33. package/dist/esm/Carousel/index.mjs.map +1 -1
  34. package/dist/esm/Carousel/index.native.js +32 -26
  35. package/dist/esm/Carousel/index.native.js.map +1 -1
  36. package/dist/esm/DotIndicator/index.mjs +32 -18
  37. package/dist/esm/DotIndicator/index.mjs.map +1 -1
  38. package/dist/esm/DotIndicator/index.native.js +34 -19
  39. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  40. package/dist/esm/Tabs/index.mjs +12 -4
  41. package/dist/esm/Tabs/index.mjs.map +1 -1
  42. package/dist/esm/Tabs/index.native.js +24 -10
  43. package/dist/esm/Tabs/index.native.js.map +1 -1
  44. package/dist/esm/icons/index.mjs +1 -0
  45. package/dist/esm/icons/index.mjs.map +1 -1
  46. package/dist/esm/icons/index.native.js +1 -0
  47. package/dist/esm/icons/index.native.js.map +1 -1
  48. package/dist/esm/layouts/tags.mjs +29 -21
  49. package/dist/esm/layouts/tags.mjs.map +1 -1
  50. package/dist/esm/layouts/tags.native.js +39 -28
  51. package/dist/esm/layouts/tags.native.js.map +1 -1
  52. package/dist/esm/layouts/timeline.mjs +4 -1
  53. package/dist/esm/layouts/timeline.mjs.map +1 -1
  54. package/dist/esm/layouts/timeline.native.js +12 -3
  55. package/dist/esm/layouts/timeline.native.js.map +1 -1
  56. package/dist/esm/views/Gantt.mjs +9 -3
  57. package/dist/esm/views/Gantt.mjs.map +1 -1
  58. package/dist/esm/views/Gantt.native.js +14 -4
  59. package/dist/esm/views/Gantt.native.js.map +1 -1
  60. package/dist/esm/views/ReportBuilder.mjs +2 -1
  61. package/dist/esm/views/ReportBuilder.mjs.map +1 -1
  62. package/dist/esm/views/ReportBuilder.native.js +2 -1
  63. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  64. package/dist/jsx/Alert/index.mjs +11 -1
  65. package/dist/jsx/Alert/index.mjs.map +1 -1
  66. package/dist/jsx/Alert/index.native.js +10 -0
  67. package/dist/jsx/Alert/index.native.js.map +1 -1
  68. package/dist/jsx/Carousel/index.mjs +36 -26
  69. package/dist/jsx/Carousel/index.mjs.map +1 -1
  70. package/dist/jsx/Carousel/index.native.js +31 -25
  71. package/dist/jsx/Carousel/index.native.js.map +1 -1
  72. package/dist/jsx/DotIndicator/index.mjs +32 -18
  73. package/dist/jsx/DotIndicator/index.mjs.map +1 -1
  74. package/dist/jsx/DotIndicator/index.native.js +32 -17
  75. package/dist/jsx/DotIndicator/index.native.js.map +1 -1
  76. package/dist/jsx/Tabs/index.mjs +12 -4
  77. package/dist/jsx/Tabs/index.mjs.map +1 -1
  78. package/dist/jsx/Tabs/index.native.js +22 -8
  79. package/dist/jsx/Tabs/index.native.js.map +1 -1
  80. package/dist/jsx/icons/index.mjs +1 -0
  81. package/dist/jsx/icons/index.mjs.map +1 -1
  82. package/dist/jsx/icons/index.native.js +1 -0
  83. package/dist/jsx/icons/index.native.js.map +1 -1
  84. package/dist/jsx/layouts/tags.mjs +29 -21
  85. package/dist/jsx/layouts/tags.mjs.map +1 -1
  86. package/dist/jsx/layouts/tags.native.js +37 -26
  87. package/dist/jsx/layouts/tags.native.js.map +1 -1
  88. package/dist/jsx/layouts/timeline.mjs +4 -1
  89. package/dist/jsx/layouts/timeline.mjs.map +1 -1
  90. package/dist/jsx/layouts/timeline.native.js +11 -2
  91. package/dist/jsx/layouts/timeline.native.js.map +1 -1
  92. package/dist/jsx/views/Gantt.mjs +9 -3
  93. package/dist/jsx/views/Gantt.mjs.map +1 -1
  94. package/dist/jsx/views/Gantt.native.js +14 -4
  95. package/dist/jsx/views/Gantt.native.js.map +1 -1
  96. package/dist/jsx/views/ReportBuilder.mjs +2 -1
  97. package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
  98. package/dist/jsx/views/ReportBuilder.native.js +3 -2
  99. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  100. package/package.json +9 -9
  101. package/src/Alert/index.tsx +27 -1
  102. package/src/Carousel/index.tsx +35 -20
  103. package/src/DotIndicator/index.tsx +44 -18
  104. package/src/Tabs/index.tsx +19 -2
  105. package/src/icons/index.ts +4 -0
  106. package/src/layouts/tags-trigger.spec.tsx +23 -9
  107. package/src/layouts/tags.tsx +33 -20
  108. package/src/layouts/timeline.tsx +10 -0
  109. package/src/views/Calendar.tsx +6 -23
  110. package/src/views/Gantt.tsx +13 -5
  111. package/src/views/ReportBuilder.tsx +4 -1
  112. package/src/views/calendarMath.ts +9 -7
  113. package/src/views/ganttMath.ts +15 -12
  114. package/types/Alert/index.d.ts.map +1 -1
  115. package/types/Carousel/index.d.ts.map +1 -1
  116. package/types/DotIndicator/index.d.ts.map +1 -1
  117. package/types/Tabs/index.d.ts.map +1 -1
  118. package/types/icons/index.d.ts +1 -0
  119. package/types/icons/index.d.ts.map +1 -1
  120. package/types/layouts/tags.d.ts.map +1 -1
  121. package/types/layouts/timeline.d.ts.map +1 -1
  122. package/types/views/Gantt.d.ts.map +1 -1
  123. package/types/views/ReportBuilder.d.ts.map +1 -1
@@ -1,8 +1,8 @@
1
- import { useResolvedKnobs } from "@multiplatform.one/theme";
1
+ import { MIN_PRESS_TARGET, useResolvedKnobs } from "@multiplatform.one/theme";
2
2
  import type React from "react";
3
3
  import { useTranslation } from "react-i18next";
4
4
  import type { GetProps } from "tamagui";
5
- import { View, XStack, styled } from "tamagui";
5
+ import { View, XStack, getTokens, styled } from "tamagui";
6
6
  import { componentColors } from "../componentColors";
7
7
  import { withInterp } from "../shared/t";
8
8
 
@@ -52,20 +52,32 @@ const DotsContainer = styled(XStack, {
52
52
  gap: "$2",
53
53
  });
54
54
 
55
+ // DG-LAY-04 / D-02 press-floor: the painted dot stays tiny (6–10px) but the
56
+ // press target is a transparent wrapper floored at 44px tall via the house
57
+ // pressTarget* channel (grown box + negative outset). The horizontal target
58
+ // is pitch-limited: it extends only ~half the inter-dot gap each side so
59
+ // adjacent enlarged targets never overlap (overlapping targets are their own
60
+ // DG-LAY-04 defect — same trade WCAG 2.5.8 makes for dense dot strips).
61
+ const DotTarget = styled(View, {
62
+ name: "DotTarget",
63
+ alignItems: "center",
64
+ justifyContent: "center",
65
+ backgroundColor: "transparent",
66
+ focusVisibleStyle: {
67
+ outlineColor: "$outlineColor",
68
+ outlineWidth: 2,
69
+ outlineStyle: "solid",
70
+ outlineOffset: 1,
71
+ },
72
+ });
73
+
55
74
  const Dot = styled(View, {
56
75
  name: "Dot",
57
76
  borderRadius: 1000,
58
77
  backgroundColor: componentColors.indicator.inactive,
59
- cursor: "pointer",
60
78
  hoverStyle: {
61
79
  backgroundColor: componentColors.indicator.hover,
62
80
  },
63
- focusVisibleStyle: {
64
- outlineColor: "$outlineColor",
65
- outlineWidth: 2,
66
- outlineStyle: "solid",
67
- outlineOffset: 1,
68
- },
69
81
  variants: {
70
82
  active: {
71
83
  true: {
@@ -99,7 +111,6 @@ const Dot = styled(View, {
99
111
  },
100
112
  disabled: {
101
113
  true: {
102
- cursor: "not-allowed",
103
114
  opacity: 0.5,
104
115
  },
105
116
  },
@@ -123,6 +134,13 @@ export function DotIndicator({
123
134
  const geometry = dotGeometryMap[knobProps.sizeToken] ?? dotGeometryMap.$4;
124
135
  const itemSize = variant === "bars" ? geometry.bar : geometry.dot;
125
136
 
137
+ // Horizontal slop is capped at just under half the resolved gap so two
138
+ // enlarged targets keep ≥1px of dead space between them.
139
+ const gapPx =
140
+ typeof gap === "number" ? gap : ((getTokens().space as any)?.[gap]?.val ?? 7);
141
+ const slopX = Math.max(0, Math.floor((gapPx - 1) / 2));
142
+ const outsetY = Math.ceil((MIN_PRESS_TARGET - itemSize) / 2);
143
+
126
144
  // No onChange means the indicator is read-only (informational), which is
127
145
  // different from disabled (interactive but blocked)
128
146
  const interactive = !disabled && !!onChange;
@@ -131,15 +149,14 @@ export function DotIndicator({
131
149
  <DotsContainer gap={gap}>
132
150
  {Array.from({ length: total }).map((_, index) => {
133
151
  const isActive = index === activeIndex;
152
+ const dotWidth = isActive ? geometry.active : itemSize;
134
153
  return (
135
- <Dot
154
+ <DotTarget
136
155
  key={index}
137
- variant={variant}
138
- active={isActive}
139
- activeVariant={isActive ? variant : undefined}
140
- width={isActive ? geometry.active : itemSize}
141
- height={itemSize}
142
- disabled={disabled}
156
+ width={dotWidth + slopX * 2}
157
+ minHeight={MIN_PRESS_TARGET}
158
+ marginHorizontal={-slopX}
159
+ marginVertical={-outsetY}
143
160
  cursor={interactive ? "pointer" : disabled ? "not-allowed" : "default"}
144
161
  onPress={interactive ? () => onChange?.(index) : undefined}
145
162
  aria-label={withInterp(t("Go to item {{number}}"), { number: index + 1 })}
@@ -158,7 +175,16 @@ export function DotIndicator({
158
175
  : disabled
159
176
  ? { role: "button" as const }
160
177
  : undefined)}
161
- />
178
+ >
179
+ <Dot
180
+ variant={variant}
181
+ active={isActive}
182
+ activeVariant={isActive ? variant : undefined}
183
+ width={dotWidth}
184
+ height={itemSize}
185
+ disabled={disabled}
186
+ />
187
+ </DotTarget>
162
188
  );
163
189
  })}
164
190
  </DotsContainer>
@@ -17,6 +17,7 @@
17
17
  */
18
18
 
19
19
  import {
20
+ MIN_PRESS_TARGET,
20
21
  ensureKeyboardModalityTracking,
21
22
  keyboardFocusRingProps,
22
23
  useResolvedKnobs,
@@ -34,6 +35,7 @@ import {
34
35
  View,
35
36
  XStack,
36
37
  YStack,
38
+ getTokens,
37
39
  isWeb,
38
40
  styled,
39
41
  } from "tamagui";
@@ -302,6 +304,12 @@ export function Tabs({
302
304
  const isUnderline = variant === "underline";
303
305
  const indicatorTheme = (intent ?? "accent") as ThemeName;
304
306
  const sizeToken = knobProps.sizeToken;
307
+ // DG-LAY-04 / D-02 press-floor: small size knobs ($2/$3) shrink the visual
308
+ // strip below 44 — the trigger box is floored at 44 via the house
309
+ // pressTarget* channel (minHeight + negative vertical outset keeps the
310
+ // strip's layout height at the knob size; hit area extends past the strip).
311
+ const sizePx = (getTokens().size as any)?.[sizeToken]?.val ?? MIN_PRESS_TARGET;
312
+ const triggerOutset = Math.max(0, Math.ceil((MIN_PRESS_TARGET - sizePx) / 2));
305
313
  const fontSize = fontSizeMap[sizeToken] ?? "$3";
306
314
  const gapToken = knobProps.gap.gap;
307
315
  const radiusToken = knobProps.borderRadius.borderRadius;
@@ -332,9 +340,11 @@ export function Tabs({
332
340
  ) : (
333
341
  <ThumbIndicator
334
342
  x={activeLayout.x}
335
- y={activeLayout.y}
343
+ // The trigger's measured box includes the press-floor outset; the
344
+ // painted thumb keeps the knob-sized visual geometry.
345
+ y={activeLayout.y + triggerOutset}
336
346
  width={activeLayout.width}
337
- height={activeLayout.height}
347
+ height={Math.max(0, activeLayout.height - triggerOutset * 2)}
338
348
  borderRadius={radiusToken}
339
349
  {...(knobProps.elevation !== undefined ? { elevation: knobProps.elevation } : undefined)}
340
350
  {...(transition ? { transition } : undefined)}
@@ -362,6 +372,11 @@ export function Tabs({
362
372
  showsHorizontalScrollIndicator={false}
363
373
  scrollEventThrottle={16}
364
374
  style={maskStyle as never}
375
+ // The scroller clips vertically; pad the content by the press-floor
376
+ // outset (and pull the scroller back by the same amount) so the
377
+ // triggers' enlarged hit boxes are never clipped. Net layout: zero.
378
+ contentContainerStyle={{ paddingVertical: triggerOutset }}
379
+ marginVertical={-triggerOutset}
365
380
  onScroll={(e) => {
366
381
  scrollMetrics.current.offset = e.nativeEvent.contentOffset.x;
367
382
  updateFades();
@@ -431,6 +446,8 @@ export function Tabs({
431
446
  ...(isDisabled ? { "aria-disabled": true } : undefined),
432
447
  })}
433
448
  height={sizeToken}
449
+ minHeight={MIN_PRESS_TARGET}
450
+ marginVertical={-triggerOutset}
434
451
  onInteraction={handleInteraction}
435
452
  opacity={isDisabled ? 0.4 : 1}
436
453
  cursor={isDisabled ? "default" : "pointer"}
@@ -1,3 +1,7 @@
1
1
  export * from "./CheckRegular";
2
2
  export * from "./MinusRegular";
3
3
  export * from "./lucide";
4
+ // Token-resolving icon wrapper (LC-53 GLYPH-SLOT): icon-only controls slot
5
+ // `themed(Icon)` elements and color them with bare theme keys ("red9"),
6
+ // instead of baseline-shifting Text wrappers around raw icons.
7
+ export * from "./themed";
@@ -1,9 +1,11 @@
1
1
  // Regression test for the Tags "Add Tag" trigger scale (post Tags→Chip
2
2
  // consolidation): the trigger previously rendered as a Tamagui Button whose
3
3
  // size token sets a fixed field height ($4 → 44px) — 2x the content-driven
4
- // Chip pill (22px). The trigger now shares ChipFrame/ChipText, so its
4
+ // Chip pill (22px). The visual pill shares ChipFrame/ChipText, so its
5
5
  // padding/font atomic classes must match the pills exactly and it must not
6
- // carry a fixed height class.
6
+ // carry a fixed height class. Since the D-02 press-floor rollout the
7
+ // interactive trigger is a transparent wrapper floored at 44px (house
8
+ // pressTarget* channel); the chip-scale pill nests inside it.
7
9
  // jsdom's getComputedStyle cannot cascade Tamagui's class-based CSS, so this
8
10
  // asserts on the atomic classes (same approach as timeline-radius.spec.tsx).
9
11
  import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
@@ -37,23 +39,35 @@ function renderTags() {
37
39
  return renderWithProviders(<Tags tags={tags} onAdd={vi.fn()} onRemove={vi.fn()} />);
38
40
  }
39
41
 
42
+ /** The chip-scale visual pill nested inside the wrapper trigger. */
43
+ function triggerPillOf(trigger: HTMLElement): HTMLElement {
44
+ const pill = chipFrameOf(screen.getByText("Add Tag"));
45
+ if (!trigger.contains(pill)) throw new Error("trigger pill not inside trigger");
46
+ return pill;
47
+ }
48
+
40
49
  describe("Tags Add Tag trigger (chip-scale)", () => {
41
- it("trigger padding classes match the chip pill exactly", () => {
50
+ it("trigger pill padding classes match the chip pill exactly", () => {
42
51
  renderTags();
43
52
  const chip = chipFrameOf(screen.getByText("urgent"));
44
53
  const trigger = screen.getByLabelText("Add Tag");
54
+ const pill = triggerPillOf(trigger);
45
55
  const paddingPrefixes = ["_pt-", "_pb-", "_pl-", "_pr-"];
46
- expect(classesByPrefix(trigger, paddingPrefixes)).toEqual(
47
- classesByPrefix(chip, paddingPrefixes),
48
- );
56
+ expect(classesByPrefix(pill, paddingPrefixes)).toEqual(classesByPrefix(chip, paddingPrefixes));
49
57
  });
50
58
 
51
- it("trigger has no fixed height class (content-driven like the chip)", () => {
59
+ it("trigger pill has no fixed height class (content-driven like the chip)", () => {
52
60
  renderTags();
53
61
  const chip = chipFrameOf(screen.getByText("urgent"));
62
+ const pill = triggerPillOf(screen.getByLabelText("Add Tag"));
63
+ expect(classesByPrefix(pill, ["_h-"])).toEqual(classesByPrefix(chip, ["_h-"]));
64
+ expect(classesByPrefix(pill, ["_h-"])).toEqual([]);
65
+ });
66
+
67
+ it("trigger wrapper carries the D-02 44px press-floor (minHeight class)", () => {
68
+ renderTags();
54
69
  const trigger = screen.getByLabelText("Add Tag");
55
- expect(classesByPrefix(trigger, ["_h-"])).toEqual(classesByPrefix(chip, ["_h-"]));
56
- expect(classesByPrefix(trigger, ["_h-"])).toEqual([]);
70
+ expect(classesByPrefix(trigger, ["_mih-"]).length).toBeGreaterThan(0);
57
71
  });
58
72
 
59
73
  it("trigger label font size class matches the chip label", () => {
@@ -1,5 +1,5 @@
1
1
  import { PlusIcon, TagIcon } from "@phosphor-icons/react";
2
- import { useResolvedKnobs } from "@multiplatform.one/theme";
2
+ import { pressTargetStyle, useResolvedKnobs } from "@multiplatform.one/theme";
3
3
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { useTranslation } from "react-i18next";
5
5
  import {
@@ -10,6 +10,7 @@ import {
10
10
  Popover,
11
11
  ScrollView,
12
12
  Text,
13
+ View,
13
14
  XStack,
14
15
  YStack,
15
16
  type YStackProps,
@@ -388,22 +389,23 @@ export function Tags({
388
389
  allowFlip
389
390
  >
390
391
  <Popover.Trigger asChild>
391
- {/* Chip-scale trigger: shares ChipFrame/ChipText size variants so its
392
- height/padding/font track the Chip pills for every size token
393
- (a Button size token would set a fixed field-height, ~2x a chip). */}
394
- <ChipFrame
395
- size={chipSize}
396
- variant="outline"
392
+ {/* Chip-scale visual (shares ChipFrame/ChipText size variants so its
393
+ height/padding/font track the Chip pills) wrapped in a
394
+ transparent press target floored at 44 tall (DG-LAY-04 / D-02
395
+ house pressTarget* channel — the pill itself stays chip-sized).
396
+ Horizontal slop is capped below half the $2 row gap so the
397
+ target never overlaps the adjacent chip / its dismiss zone. */}
398
+ <View
397
399
  role="button"
398
400
  aria-label={addTagLabel}
399
401
  tabIndex={0}
400
402
  cursor="pointer"
401
- backgroundColor="transparent"
402
- {...knobProps.borderRadius}
403
- borderColor={componentColors.interactive.border}
404
- gap={compact ? 0 : "$1"}
405
- hoverStyle={{ backgroundColor: componentColors.interactive.hover }}
406
- pressStyle={{ backgroundColor: componentColors.interactive.active }}
403
+ alignItems="center"
404
+ justifyContent="center"
405
+ {...pressTargetStyle()}
406
+ minWidth={undefined}
407
+ paddingHorizontal={3}
408
+ marginHorizontal={-3}
407
409
  focusVisibleStyle={{
408
410
  outlineColor: "$outlineColor",
409
411
  outlineWidth: 2,
@@ -418,13 +420,24 @@ export function Tags({
418
420
  }) as unknown as () => void
419
421
  }
420
422
  >
421
- <PlusIcon size={chipIconSize(chipSize)} />
422
- {/* Compact is icon-only: a zero-width space still establishes the
423
- chip text line box so the trigger height matches the pills. */}
424
- <ChipText size={chipSize} color={componentColors.text.secondary}>
425
- {compact ? "\u200B" : addTagLabel}
426
- </ChipText>
427
- </ChipFrame>
423
+ <ChipFrame
424
+ size={chipSize}
425
+ variant="outline"
426
+ backgroundColor="transparent"
427
+ {...knobProps.borderRadius}
428
+ borderColor={componentColors.interactive.border}
429
+ gap={compact ? 0 : "$1"}
430
+ hoverStyle={{ backgroundColor: componentColors.interactive.hover }}
431
+ pressStyle={{ backgroundColor: componentColors.interactive.active }}
432
+ >
433
+ <PlusIcon size={chipIconSize(chipSize)} />
434
+ {/* Compact is icon-only: a zero-width space still establishes the
435
+ chip text line box so the trigger height matches the pills. */}
436
+ <ChipText size={chipSize} color={componentColors.text.secondary}>
437
+ {compact ? "\u200B" : addTagLabel}
438
+ </ChipText>
439
+ </ChipFrame>
440
+ </View>
428
441
  </Popover.Trigger>
429
442
 
430
443
  <Popover.Content
@@ -12,8 +12,11 @@ import {
12
12
  } from "@phosphor-icons/react";
13
13
  import { useDirection } from "../hooks/useDirection";
14
14
  import {
15
+ MIN_PRESS_TARGET,
15
16
  formatAbsoluteDateTime,
16
17
  formatRelativeTimestamp,
18
+ pressTargetHitSlop,
19
+ pressTargetStyle,
17
20
  useResolvedKnobs,
18
21
  } from "@multiplatform.one/theme";
19
22
  import React, { useCallback, useMemo, useState } from "react";
@@ -748,9 +751,16 @@ export function Timeline({
748
751
  )}
749
752
  {showReplyAction && (
750
753
  <XStack marginInlineStart={-8}>
754
+ {/* DG-LAY-04 / D-02 press-floor: the chromeless pill paints at
755
+ the $1/$2 token (20/28px) but the press box is floored at 44
756
+ via the house pressTarget* channel (grown transparent box +
757
+ negative outset + hitSlop) — layout height stays token-sized. */}
751
758
  <Button
752
759
  chromeless
753
760
  size={compact ? "$1" : "$2"}
761
+ {...pressTargetStyle()}
762
+ marginVertical={-Math.ceil((MIN_PRESS_TARGET - (compact ? 20 : 28)) / 2)}
763
+ hitSlop={pressTargetHitSlop(compact ? 20 : 28)}
754
764
  borderRadius={radiusToken}
755
765
  opacity={0.8}
756
766
  icon={<ReplyIcon size={compact ? 10 : 12} />}
@@ -18,6 +18,10 @@ import {
18
18
  type CalendarRange,
19
19
  } from "./calendarMath";
20
20
  import {
21
+ formatDayLong,
22
+ formatTimeOfDay,
23
+ getMonthNames,
24
+ getWeekdayNames,
21
25
  hairline,
22
26
  hairlineWidth,
23
27
  pressTargetHitSlop,
@@ -389,34 +393,13 @@ const DAY_DISC_PX = 22;
389
393
  /** Month-view chip visual floor (hit slop fills the 44px target, DG-LAY-04). */
390
394
  const MONTH_CHIP_MIN_PX = 24;
391
395
 
392
- function getWeekdayNames(): string[] {
393
- const formatter = new Intl.DateTimeFormat(undefined, { weekday: "short" });
394
- return Array.from({ length: 7 }, (_, i) => formatter.format(new Date(2004, 0, 4 + i)));
395
- }
396
-
397
- function getMonthNames(): string[] {
398
- const formatter = new Intl.DateTimeFormat(undefined, { month: "long" });
399
- return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)));
400
- }
401
-
402
396
  function getHours(): number[] {
403
397
  return Array.from({ length: 24 }, (_, i) => i);
404
398
  }
405
399
 
400
+ /** Hour ticks speak the house time-of-day register without minutes ("2 PM"). */
406
401
  function formatHour(hour: number): string {
407
- const date = new Date(2000, 0, 1, hour, 0, 0);
408
- return new Intl.DateTimeFormat(undefined, {
409
- hour: "numeric",
410
- hour12: true,
411
- }).format(date);
412
- }
413
-
414
- function formatDayLong(date: Date): string {
415
- return new Intl.DateTimeFormat(undefined, {
416
- weekday: "long",
417
- month: "long",
418
- day: "numeric",
419
- }).format(date);
402
+ return formatTimeOfDay(new Date(2000, 0, 1, hour, 0, 0), { minutes: false });
420
403
  }
421
404
 
422
405
  const weekdayNames = getWeekdayNames();
@@ -8,6 +8,7 @@ import { Intent, hairline, hairlineWidth, useResolvedKnobs } from "@multiplatfor
8
8
  import { Button } from "@multiplatform.one/forms";
9
9
  import React, { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
+ import { ScrollView as RNScrollView } from "react-native";
11
12
  import { ScrollView, Text, XStack, YStack, isWeb, type YStackProps } from "tamagui";
12
13
  import {
13
14
  barGeometry,
@@ -29,6 +30,11 @@ import {
29
30
  type GanttZoom,
30
31
  } from "./ganttMath";
31
32
 
33
+ // The chart canvas needs real scroll events to drive the pinned axis follower,
34
+ // but Tamagui's styled ScrollView does not deliver onScroll on native — use the
35
+ // raw RN ScrollView there (web keeps the Tamagui scroller unchanged).
36
+ const CanvasScroller = (isWeb ? ScrollView : RNScrollView) as typeof ScrollView;
37
+
32
38
  /**
33
39
  * A Gantt task rendered as one row with a duration bar.
34
40
  */
@@ -1098,17 +1104,19 @@ export function GanttView({
1098
1104
  ))}
1099
1105
  </YStack>
1100
1106
 
1101
- {/* Timeline chart */}
1102
- <ScrollView
1107
+ {/* Timeline chart. On native the scroller is the raw RN ScrollView:
1108
+ Tamagui's styled ScrollView does not deliver onScroll there, and
1109
+ the pinned axis follower depends on it. */}
1110
+ <CanvasScroller
1103
1111
  ref={hScrollRef}
1104
1112
  horizontal
1105
- flex={1}
1113
+ {...(isWeb ? { flex: 1 } : null)}
1106
1114
  scrollEnabled={!scrollLocked}
1107
1115
  showsHorizontalScrollIndicator
1108
1116
  onScroll={handleCanvasScroll}
1109
1117
  scrollEventThrottle={16}
1110
1118
  onLayout={handleCanvasLayout}
1111
- style={scrollerDirection as any}
1119
+ style={(isWeb ? scrollerDirection : [{ flex: 1 }, scrollerDirection]) as any}
1112
1120
  >
1113
1121
  <YStack width={chartWidth} position="relative" {...{ "data-gantt-chart": "true" }}>
1114
1122
  {/* Rows + grid + today line */}
@@ -1158,7 +1166,7 @@ export function GanttView({
1158
1166
  )}
1159
1167
  </YStack>
1160
1168
  </YStack>
1161
- </ScrollView>
1169
+ </CanvasScroller>
1162
1170
  </XStack>
1163
1171
  </ScrollView>
1164
1172
 
@@ -3,9 +3,12 @@ import { componentColors } from "../componentColors";
3
3
  import { AsyncBoundary, AsyncSkeleton, resolveAsyncStatus } from "../layouts/AsyncBoundary";
4
4
  import { EmptyState } from "../layouts/page";
5
5
  import { useResolvedKnobs } from "@multiplatform.one/theme";
6
+ // House Button (not raw tamagui): carries the DG-LAY-04 / D-02 ≥44px press
7
+ // floor — the raw tamagui Button rendered these toolbar actions at 28px.
8
+ import { Button } from "@multiplatform.one/forms";
6
9
  import React, { useState, useMemo, useCallback } from "react";
7
10
  import { useTranslation } from "react-i18next";
8
- import { Button, Card, ScrollView, Text, XStack, YStack, type YStackProps } from "tamagui";
11
+ import { Card, ScrollView, Text, XStack, YStack, type YStackProps } from "tamagui";
9
12
 
10
13
  // ============================================================================
11
14
  // Types
@@ -10,8 +10,14 @@
10
10
  * values — the component layer tweens between them with `knobProps.transition`
11
11
  * (LC-25 CONTROL-SMOOTH-JUMP) while raw pointer tracking stays 1:1
12
12
  * (A-GESTURE).
13
+ *
14
+ * Every visible/spoken date string here routes through the canonical
15
+ * registers in `@multiplatform.one/theme` (LC-12 render channel) — the
16
+ * calendar speaks the same date voice as tables, feeds and pickers.
13
17
  */
14
18
 
19
+ import { formatDayLong, formatTimeOfDay } from "@multiplatform.one/theme";
20
+
15
21
  export const MINUTES_PER_DAY = 1440;
16
22
 
17
23
  /** Wall-clock minutes since midnight for a date. */
@@ -201,9 +207,9 @@ export function moveFocusSlot(
201
207
 
202
208
  // ── Formatting / accessible names ─────────────────────────────
203
209
 
204
- /** "2:00 PM" (locale-aware, minutes only when meaningful). */
210
+ /** "2:00 PM" the house time-of-day register. */
205
211
  export function formatTimeShort(date: Date): string {
206
- return new Intl.DateTimeFormat(undefined, { hour: "numeric", minute: "2-digit" }).format(date);
212
+ return formatTimeOfDay(date);
207
213
  }
208
214
 
209
215
  /** "2:00 PM – 3:30 PM" visible label used by resize / create sketches. */
@@ -217,11 +223,7 @@ export function formatTimeRangeLabel(start: Date, end: Date): string {
217
223
  * Untimed events fall back to the day name alone.
218
224
  */
219
225
  export function eventAccessibleLabel(event: { title: string; start: Date; end?: Date }): string {
220
- const dayLabel = new Intl.DateTimeFormat(undefined, {
221
- weekday: "long",
222
- month: "long",
223
- day: "numeric",
224
- }).format(event.start);
226
+ const dayLabel = formatDayLong(event.start);
225
227
  if (!event.end || event.end.getTime() === event.start.getTime()) {
226
228
  return `${event.title}, ${dayLabel}`;
227
229
  }
@@ -241,9 +241,12 @@ export interface GanttTick {
241
241
  label?: string;
242
242
  }
243
243
 
244
- const dayLabelFormatter = new Intl.DateTimeFormat(undefined, { day: "numeric" });
245
- const monthDayFormatter = new Intl.DateTimeFormat(undefined, { month: "short", day: "numeric" });
246
- const monthYearFormatter = new Intl.DateTimeFormat(undefined, { month: "short", year: "numeric" });
244
+ // Timeline labels ride the canonical date registers (LC-12 render channel).
245
+ // Ticks take `year: "never"` the header states the year, and a widened
246
+ // "Mar 10, 2025" tick would collide with its neighbour.
247
+ const dayLabel = (date: Date) => formatDayOfMonth(date);
248
+ const monthDayLabel = (date: Date) => formatAbsoluteDate(date, { year: "never" });
249
+ const monthYearLabel = (date: Date) => formatMonthYear(date);
247
250
 
248
251
  /**
249
252
  * Axis ticks for a range at a zoom level.
@@ -271,7 +274,7 @@ export function generateTicks(
271
274
  x,
272
275
  date,
273
276
  major: true,
274
- label: monthEdge ? monthDayFormatter.format(date) : dayLabelFormatter.format(date),
277
+ label: monthEdge ? monthDayLabel(date) : dayLabel(date),
275
278
  });
276
279
  continue;
277
280
  }
@@ -281,7 +284,7 @@ export function generateTicks(
281
284
  x,
282
285
  date,
283
286
  major: weekStart,
284
- label: weekStart ? monthDayFormatter.format(date) : undefined,
287
+ label: weekStart ? monthDayLabel(date) : undefined,
285
288
  });
286
289
  continue;
287
290
  }
@@ -292,7 +295,7 @@ export function generateTicks(
292
295
  x,
293
296
  date,
294
297
  major: monthStart,
295
- label: monthStart ? monthYearFormatter.format(date) : undefined,
298
+ label: monthStart ? monthYearLabel(date) : undefined,
296
299
  });
297
300
  }
298
301
  return ticks;
@@ -300,8 +303,8 @@ export function generateTicks(
300
303
 
301
304
  /** Visible header label for the chart range: "Mar 2026 – Jun 2026". */
302
305
  export function formatRangeLabel(range: GanttRange): string {
303
- const start = monthYearFormatter.format(range.start);
304
- const end = monthYearFormatter.format(addDays(range.end, -1));
306
+ const start = monthYearLabel(range.start);
307
+ const end = monthYearLabel(addDays(range.end, -1));
305
308
  return start === end ? start : `${start} – ${end}`;
306
309
  }
307
310
 
@@ -312,8 +315,8 @@ export function formatRangeLabel(range: GanttRange): string {
312
315
  export function ganttTaskAccessibleLabel(task: { title: string; start: Date; end: Date }): string {
313
316
  const { startEdge, endEdge } = normalizeSpanEdges(task);
314
317
  const lastDay = addDays(endEdge, -1);
315
- const startLabel = monthDayFormatter.format(startEdge);
316
- const endLabel = monthDayFormatter.format(
318
+ const startLabel = monthDayLabel(startEdge);
319
+ const endLabel = monthDayLabel(
317
320
  lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge,
318
321
  );
319
322
  return startLabel === endLabel
@@ -325,8 +328,8 @@ export function ganttTaskAccessibleLabel(task: { title: string; start: Date; end
325
328
  export function formatSpanLabel(span: GanttSpan): string {
326
329
  const { startEdge, endEdge } = normalizeSpanEdges(span);
327
330
  const lastDay = addDays(endEdge, -1);
328
- const startLabel = monthDayFormatter.format(startEdge);
329
- const endLabel = monthDayFormatter.format(
331
+ const startLabel = monthDayLabel(startEdge);
332
+ const endLabel = monthDayLabel(
330
333
  lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge,
331
334
  );
332
335
  return startLabel === endLabel ? startLabel : `${startLabel} – ${endLabel}`;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Alert/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKxC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACxF,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsBD,QAAA,MAAM,UAAU;;;6CAQd,CAAC;AA6KH;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,2CAOtC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Alert/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKxC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACxF,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsBD,QAAA,MAAM,UAAU;;;6CAQd,CAAC;AAgMH;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,2CAOtC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Carousel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,SAAS,CAAC;AAOzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,QAAA,MAAM,iBAAiB,kPAKrB,CAAC;AAEH,QAAA,MAAM,aAAa,kPAGjB,CAAC;AAiDH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,UAAiB,EACjB,QAAe,EACf,QAAY,EACZ,IAAY,EACZ,GAAG,EAAE,OAAO,EACZ,aAAa,EACb,YAAgB,GACjB,EAAE,aAAa,2CAmLf;yBA5Le,QAAQ;;;AAkMxB,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Carousel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,SAAS,CAAC;AAOzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,QAAA,MAAM,iBAAiB,kPAKrB,CAAC;AAEH,QAAA,MAAM,aAAa,kPAGjB,CAAC;AAuDH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,UAAiB,EACjB,QAAe,EACf,QAAY,EACZ,IAAY,EACZ,GAAG,EAAE,OAAO,EACZ,aAAa,EACb,YAAgB,GACjB,EAAE,aAAa,2CA4Lf;yBArMe,QAAQ;;;AA2MxB,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DotIndicator/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qBAAqB;IACrB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsBD,QAAA,MAAM,aAAa;;;6CAKjB,CAAC;AAEH,QAAA,MAAM,GAAG;;;;;6CAoDP,CAAC;AAIH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAgB,EAChB,GAAG,EAAE,OAAO,EACZ,QAAgB,GACjB,EAAE,iBAAiB,2CAgDnB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DotIndicator/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qBAAqB;IACrB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsBD,QAAA,MAAM,aAAa;;;6CAKjB,CAAC;AAqBH,QAAA,MAAM,GAAG;;;;;6CA4CP,CAAC;AAIH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAgB,EAChB,GAAG,EAAE,OAAO,EACZ,QAAgB,GACjB,EAAE,iBAAiB,2CA+DnB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Tabs/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Tabs/index.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./CheckRegular";
2
2
  export * from "./MinusRegular";
3
3
  export * from "./lucide";
4
+ export * from "./themed";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AAIzB,cAAc,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/layouts/tags.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAQjB;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,sBAAsB;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAEhB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAExB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAElC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,OAAO,EACZ,cAAc,EAAE,KAAK,CAAC,SAAS,EAC/B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,KAC9B,KAAK,CAAC,SAAS,CAAC;IAErB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qEAAqE;IACrE,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QACtC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;KAC9C,CAAC;IACF,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,WAAgB,EAChB,KAAK,EACL,QAAgB,EAChB,OAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAgB,EAChB,YAAmB,EACnB,OAAe,EACf,OAAkB,EAClB,KAAK,EAAE,SAAS,EAChB,MAAW,EACX,WAAW,EAAE,eAAe,EAC5B,GAAG,UAAU,EACd,EAAE,SAAS,2CAiUX"}
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/layouts/tags.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,EAWL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAQjB;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,sBAAsB;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAEhB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAExB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAElC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,OAAO,EACZ,cAAc,EAAE,KAAK,CAAC,SAAS,EAC/B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,KAC9B,KAAK,CAAC,SAAS,CAAC;IAErB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qEAAqE;IACrE,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;QACtC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;KAC9C,CAAC;IACF,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,WAAgB,EAChB,KAAK,EACL,QAAgB,EAChB,OAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAgB,EAChB,YAAmB,EACnB,OAAe,EACf,OAAkB,EAClB,KAAK,EAAE,SAAS,EAChB,MAAW,EACX,WAAW,EAAE,eAAe,EAC5B,GAAG,UAAU,EACd,EAAE,SAAS,2CA6UX"}