@godxjp/ui 31.3.0 → 31.5.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 (49) hide show
  1. package/agent/START-HERE.md +6 -6
  2. package/agent/components/CodeBlock.json +7 -1
  3. package/agent/components/OrgChart.json +59 -0
  4. package/agent/components/Tabs.json +5 -0
  5. package/agent/components-index.json +5 -0
  6. package/agent/components.json +71 -1
  7. package/agent/index.json +7 -7
  8. package/agent/llms.txt +6 -6
  9. package/agent/tokens.json +141 -3
  10. package/dist/components/data-display/code-block.js +90 -4
  11. package/dist/components/data-display/index.d.ts +2 -0
  12. package/dist/components/data-display/index.js +2 -0
  13. package/dist/components/data-display/org-chart.d.ts +5 -0
  14. package/dist/components/data-display/org-chart.js +169 -0
  15. package/dist/components/data-entry/upload.js +12 -1
  16. package/dist/components/general/typography.d.ts +32 -0
  17. package/dist/components/general/typography.js +11 -2
  18. package/dist/components/navigation/tabs.d.ts +2 -2
  19. package/dist/components/navigation/tabs.js +57 -10
  20. package/dist/contracts/measurement.json +1 -1
  21. package/dist/i18n/messages/en.json +10 -0
  22. package/dist/i18n/messages/ja.json +10 -0
  23. package/dist/i18n/messages/vi.json +10 -0
  24. package/dist/props/components/data-display.prop.d.ts +51 -1
  25. package/dist/props/components/navigation.prop.d.ts +19 -1
  26. package/dist/props/registry.d.ts +40 -1
  27. package/dist/props/registry.js +50 -0
  28. package/dist/styles/alert-layout.css +12 -12
  29. package/dist/styles/control.css +18 -2
  30. package/dist/styles/data-display-layout.css +173 -0
  31. package/dist/styles/data-entry-layout.css +4 -0
  32. package/dist/styles/form-layout.css +47 -5
  33. package/dist/styles/layers.json +14 -1
  34. package/dist/styles/layout.css +2 -1
  35. package/dist/tokens/base.css +1 -0
  36. package/dist/tokens/components/org-chart.css +27 -0
  37. package/dist/tokens/components/segmented.css +4 -0
  38. package/dist/tokens/semantic/layout.css +2 -0
  39. package/docs/FRAME-COVERAGE-REPORT.md +3 -2
  40. package/docs/data-display/code-block.tsx +27 -0
  41. package/docs/data-display/org-chart.tsx +165 -0
  42. package/docs/data-entry/segmented.tsx +2 -0
  43. package/docs/navigation/tabs.tsx +45 -0
  44. package/docs/query/data-state.tsx +30 -8
  45. package/docs/showcase/table-view-tabs.tsx +15 -13
  46. package/docs/themes/flat.css +4 -0
  47. package/docs/themes/glassmorphism.css +2 -0
  48. package/docs/themes/neubrutalism.css +6 -0
  49. package/package.json +2 -2
@@ -0,0 +1,27 @@
1
+
2
+
3
+ :root {
4
+
5
+ --org-chart-node-inline-size: 13rem;
6
+ --org-chart-node-padding-block: var(--space-3);
7
+ --org-chart-node-padding-inline: var(--space-3);
8
+ --org-chart-node-gap: var(--space-3);
9
+ --org-chart-node-text-gap: var(--space-1);
10
+ --org-chart-node-radius: initial;
11
+ --org-chart-node-border-width: initial;
12
+ --org-chart-node-border-color: initial;
13
+ --org-chart-node-background: initial;
14
+ --org-chart-node-foreground: initial;
15
+ --org-chart-node-title-color: initial;
16
+ --org-chart-node-font-size: var(--font-size-sm, var(--font-size-base));
17
+
18
+ --org-chart-agent-border-style: dashed;
19
+
20
+ --org-chart-level-gap: var(--space-8);
21
+ --org-chart-sibling-gap: var(--space-4);
22
+
23
+ --org-chart-line-width: initial;
24
+ --org-chart-line-color: initial;
25
+
26
+ --org-chart-padding: var(--space-2);
27
+ }
@@ -46,4 +46,8 @@
46
46
  --segmented-count-gap: var(--space-1);
47
47
  --segmented-count-background: initial;
48
48
  --segmented-count-color: initial;
49
+ --segmented-count-selected-background: initial;
50
+ --segmented-count-selected-background-alpha: initial;
51
+ --segmented-count-selected-color: initial;
52
+ --segmented-count-forced-outline-width: initial;
49
53
  }
@@ -51,6 +51,8 @@
51
51
  --page-footer-pad-block-end: var(--space-stack-md);
52
52
  --page-header-divider: none;
53
53
 
54
+ --page-header-extra-max-measure: initial;
55
+
54
56
  --page-toolbar-background: transparent;
55
57
  --page-toolbar-pad-block: 0px;
56
58
  --page-toolbar-divider: initial;
@@ -3,8 +3,8 @@
3
3
  > Generated by `scripts/frame-coverage.mjs` (issue #163). Do not edit by hand — run `pnpm check:frame-coverage`.
4
4
  > Standard: [FRAME-COVERAGE-STANDARD.md](./FRAME-COVERAGE-STANDARD.md). A missing dimension is **UNTESTED**, never a pass.
5
5
 
6
- - Public components: **176**
7
- - With ≥1 frame: **152** · zero-frame: **24**
6
+ - Public components: **177**
7
+ - With ≥1 frame: **153** · zero-frame: **24**
8
8
  - Fully covered (every contract axis declared): **0**
9
9
 
10
10
  ## UNTESTED — no `/frame/**` route
@@ -211,6 +211,7 @@ Legend: ✓ covered · N/A reasoned skip · · UNTESTED (blank cell = UNTESTED).
211
211
  | Welcome | ✓ | · | N/A | N/A | · | · | · | · | · | · |
212
212
  | Actions | ✓ | · | N/A | N/A | · | · | · | · | · | · |
213
213
  | ThoughtChain | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
214
+ | OrgChart | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
214
215
  | Attachments | ✓ | N/A | · | N/A | · | · | · | · | · | · |
215
216
  | Marquee | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
216
217
  | Masonry | ✓ | N/A | N/A | N/A | · | · | · | · | · | · |
@@ -84,6 +84,33 @@ export default function Demo() {
84
84
  </Flex>
85
85
  </CardContent>
86
86
  </Card>
87
+ <Card>
88
+ <CardHeader>
89
+ <CardTitle level={2}>Copyable (gh#1032)</CardTitle>
90
+ <CardDescription>
91
+ antd Typography&apos;s copyable, same name and semantics. The button sits in the
92
+ inline-end corner, the block reserves that column so no line runs under it, and the
93
+ copy is announced politely. Pass copyable.text to copy something other than the
94
+ block&apos;s text content; the button stays in its corner while the block scrolls.
95
+ </CardDescription>
96
+ </CardHeader>
97
+ <CardContent>
98
+ <Flex direction="col" gap="md">
99
+ <CodeBlock copyable language="bash" aria-label="Install command">
100
+ pnpm add @godxjp/ui
101
+ </CodeBlock>
102
+ <CodeBlock
103
+ copyable={{ tooltips: ["Copy response", "Copied"] }}
104
+ maxHeight="sm"
105
+ language="json"
106
+ aria-label="Response body with a copy button"
107
+ >
108
+ {responseBody}
109
+ </CodeBlock>
110
+ </Flex>
111
+ </CardContent>
112
+ </Card>
113
+
87
114
  <Card>
88
115
  <CardHeader>
89
116
  <CardTitle level={2}>Syntax colour · the package owns the palette (gh#784)</CardTitle>
@@ -0,0 +1,165 @@
1
+ import {
2
+ Avatar,
3
+ AvatarFallback,
4
+ Badge,
5
+ Card,
6
+ CardContent,
7
+ OrgChart,
8
+ type OrgChartNodeProp,
9
+ } from "@godxjp/ui/data-display";
10
+ import { Text } from "@godxjp/ui/general";
11
+ import {
12
+ AppShell,
13
+ Flex,
14
+ PageContainer,
15
+ Sidebar,
16
+ type SidebarSectionProp,
17
+ Topbar,
18
+ } from "@godxjp/ui/layout";
19
+ import { Bot, Building2, Settings, Users } from "lucide-react";
20
+
21
+ /**
22
+ * OrgChart — who reports to whom, people and AI agents on one chart (gh#1034).
23
+ *
24
+ * Three levels: the CEO, three department heads, and their reports, two of which are AI agents.
25
+ * An agent's box is dashed and its accessible name ends in "AI agent", so the difference is never
26
+ * the stroke alone. The chart is an APG tree view: Tab lands on one box, the arrow keys walk it.
27
+ *
28
+ * Narrow the preview: under 40rem of CONTAINER width the same data turns into an indented Tree.
29
+ * The second card is deliberately narrow to show that form beside the wide one.
30
+ *
31
+ * Composed only from real @godxjp/ui components.
32
+ */
33
+ const sections: SidebarSectionProp[] = [
34
+ {
35
+ label: "Organization",
36
+ items: [
37
+ { id: "chart", label: "Org chart", icon: Building2 },
38
+ { id: "members", label: "Members", icon: Users },
39
+ { id: "agents", label: "Agents", icon: Bot },
40
+ ],
41
+ },
42
+ { label: "Admin", items: [{ id: "settings", label: "Settings", icon: Settings }] },
43
+ ];
44
+
45
+ const mark = (initials: string) => (
46
+ <Avatar size="sm">
47
+ <AvatarFallback>{initials}</AvatarFallback>
48
+ </Avatar>
49
+ );
50
+
51
+ const agentMark = (
52
+ <Avatar size="sm" appearance="tinted">
53
+ <AvatarFallback>
54
+ <Bot aria-hidden="true" />
55
+ </AvatarFallback>
56
+ </Avatar>
57
+ );
58
+
59
+ const org: OrgChartNodeProp[] = [
60
+ {
61
+ key: "ceo",
62
+ name: "Haruka Tanaka",
63
+ title: "Chief Executive Officer",
64
+ avatar: mark("HT"),
65
+ children: [
66
+ {
67
+ key: "cto",
68
+ name: "Kenji Watanabe",
69
+ title: "Chief Technology Officer",
70
+ avatar: mark("KW"),
71
+ children: [
72
+ {
73
+ key: "review-agent",
74
+ name: "Review Agent",
75
+ title: "Code review · pull requests",
76
+ variant: "agent",
77
+ avatar: agentMark,
78
+ extra: <Badge tone="success">Running</Badge>,
79
+ },
80
+ {
81
+ key: "platform",
82
+ name: "Mai Suzuki",
83
+ title: "Platform Lead",
84
+ avatar: mark("MS"),
85
+ },
86
+ ],
87
+ },
88
+ {
89
+ key: "coo",
90
+ name: "Daniel Park",
91
+ title: "Chief Operating Officer",
92
+ avatar: mark("DP"),
93
+ children: [
94
+ {
95
+ key: "support-agent",
96
+ name: "Support Agent",
97
+ title: "Tier-1 customer support",
98
+ variant: "agent",
99
+ avatar: agentMark,
100
+ extra: <Badge tone="warning">Paused</Badge>,
101
+ },
102
+ {
103
+ key: "ops",
104
+ name: "Linh Nguyen",
105
+ title: "Operations Manager",
106
+ avatar: mark("LN"),
107
+ },
108
+ ],
109
+ },
110
+ {
111
+ key: "cfo",
112
+ name: "Sofia Rossi",
113
+ title: "Chief Financial Officer",
114
+ avatar: mark("SR"),
115
+ children: [
116
+ {
117
+ key: "controller",
118
+ name: "Takumi Ito",
119
+ title: "Financial Controller",
120
+ avatar: mark("TI"),
121
+ },
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ ];
127
+
128
+ export default function OrgChartDoc() {
129
+ return (
130
+ <AppShell
131
+ sidebar={
132
+ <Sidebar
133
+ activeId="chart"
134
+ sections={sections}
135
+ onSelect={() => {}}
136
+ product={{ name: "CoreDesk", role: "Admin", color: "hsl(var(--primary))" }}
137
+ />
138
+ }
139
+ topbar={<Topbar />}
140
+ >
141
+ <PageContainer
142
+ title="Org chart"
143
+ subtitle="OrgChart · people and AI agents, top-down. Dashed boxes are agents."
144
+ >
145
+ <Card>
146
+ <CardContent>
147
+ <OrgChart data={org} label="Company org chart" />
148
+ </CardContent>
149
+ </Card>
150
+
151
+ {/* THE NARROW FORM: the same data under 40rem of container width. */}
152
+ <Flex direction="col" gap="sm">
153
+ <Text size="sm" weight="medium">
154
+ narrow container · the same data as a Tree
155
+ </Text>
156
+ <Card className="max-w-sm">
157
+ <CardContent>
158
+ <OrgChart data={org} label="Company org chart (list)" />
159
+ </CardContent>
160
+ </Card>
161
+ </Flex>
162
+ </PageContainer>
163
+ </AppShell>
164
+ );
165
+ }
@@ -90,6 +90,8 @@ export default function Demo() {
90
90
  <CardDescription>
91
91
  一覧の上の状態フィルター。4 つが 1 行に収まらない幅では、トラックが 2 行目に折り返し
92
92
  ます。ラベルも件数も切り詰めません。`check:segmented-wrap` がこのカードを測ります。
93
+ 件数は Tabs と同じ扱いで、選択中の項目だけ強調し、ほかは控えめな色です。0 件を隠す
94
+ ときは `showZero: false`。
93
95
  </CardDescription>
94
96
  </CardHeader>
95
97
  <CardContent>
@@ -146,6 +146,7 @@ export default function Demo() {
146
146
  },
147
147
  ]);
148
148
  const [editableTab, setEditableTab] = useState("je-0042");
149
+ const [inboxStatus, setInboxStatus] = useState("open");
149
150
 
150
151
  return (
151
152
  <PageContainer
@@ -646,6 +647,50 @@ export default function Demo() {
646
647
  </CardContent>
647
648
  </Card>
648
649
 
650
+ {/* STRIP-ONLY (gh#1021). The strip drives a region OUTSIDE the Tabs, so no tabpanel is
651
+ rendered and the view below is never remounted by a tab switch. */}
652
+ <Card>
653
+ <CardHeader>
654
+ <CardTitle level={2}>
655
+ controls · strip only (switches a region outside the tabs)
656
+ </CardTitle>
657
+ <CardDescription>
658
+ Pass the id of an outside region to controls: no tabpanel is rendered and the selected
659
+ tab's aria-controls points at that region. The region lives outside Tabs, so switching
660
+ tabs never remounts it. A compound TabsTrigger draws the same count as items.
661
+ </CardDescription>
662
+ </CardHeader>
663
+ <CardContent>
664
+ <Flex direction="col" gap="md">
665
+ <Tabs
666
+ aria-label="Status"
667
+ controls="tabs-inbox-view"
668
+ variant="line"
669
+ value={inboxStatus}
670
+ onValueChange={setInboxStatus}
671
+ items={[
672
+ { value: "open", label: "Open", count: 12, countLabel: "threads" },
673
+ { value: "doing", label: "In progress", count: 3, countLabel: "threads" },
674
+ { value: "done", label: "Done", count: 128, countLabel: "threads" },
675
+ ]}
676
+ />
677
+ <section id="tabs-inbox-view" aria-label="Threads">
678
+ <Text as="p">Showing: {inboxStatus}</Text>
679
+ </section>
680
+ <Tabs aria-label="Saved views" controls="tabs-inbox-view" defaultValue="mine">
681
+ <TabsList variant="line">
682
+ <TabsTrigger value="mine" count={4} countLabel="threads">
683
+ Mine
684
+ </TabsTrigger>
685
+ <TabsTrigger value="all" count={143} countLabel="threads">
686
+ All
687
+ </TabsTrigger>
688
+ </TabsList>
689
+ </Tabs>
690
+ </Flex>
691
+ </CardContent>
692
+ </Card>
693
+
649
694
  <Card>
650
695
  <CardHeader>
651
696
  <CardTitle level={2}>indicator · animated</CardTitle>
@@ -1,5 +1,5 @@
1
1
  import { useState } from "react";
2
- import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-query";
2
+ import { QueryClient, QueryClientProvider, useQuery, useQueryClient } from "@tanstack/react-query";
3
3
 
4
4
  import {
5
5
  Badge,
@@ -13,7 +13,7 @@ import {
13
13
  type ColumnDef,
14
14
  } from "@godxjp/ui/data-display";
15
15
  import { SkeletonTable } from "@godxjp/ui/feedback";
16
- import { Text } from "@godxjp/ui/general";
16
+ import { Button, Text } from "@godxjp/ui/general";
17
17
  import { Flex, PageContainer } from "@godxjp/ui/layout";
18
18
  import { AuthExpiryProvider, DataState } from "@godxjp/ui/query";
19
19
 
@@ -51,15 +51,34 @@ function SuccessBlock() {
51
51
  );
52
52
  }
53
53
 
54
+ /** Loads for 2s and comes back empty — the whole lifecycle: skeleton → EmptyState. */
55
+ const LOAD_MS = 2000;
56
+
54
57
  function LoadingBlock() {
58
+ const client = useQueryClient();
55
59
  const query = useQuery({
56
60
  queryKey: ["ds-loading"],
57
- queryFn: () => new Promise<Invoice[]>(() => {}),
61
+ queryFn: () => new Promise<Invoice[]>((resolve) => setTimeout(() => resolve([]), LOAD_MS)),
58
62
  });
59
63
  return (
60
- <DataState query={query} skeleton={<SkeletonTable />}>
61
- {(d) => <DataTable data={d} columns={columns} getRowId={(r) => r.id} />}
62
- </DataState>
64
+ <Flex direction="col" gap="sm">
65
+ <DataState
66
+ query={query}
67
+ skeleton={<SkeletonTable rows={4} columns={3} />}
68
+ isEmpty={(d) => d.length === 0}
69
+ empty={<EmptyState title="No invoices" description="No invoice matches the filter." />}
70
+ >
71
+ {(d) => <DataTable data={d} columns={columns} getRowId={(r) => r.id} />}
72
+ </DataState>
73
+ {/* resetQueries puts the query back to pending, so the skeleton plays again. */}
74
+ <Button
75
+ variant="outline"
76
+ size="sm"
77
+ onClick={() => void client.resetQueries({ queryKey: ["ds-loading"] })}
78
+ >
79
+ Load again
80
+ </Button>
81
+ </Flex>
63
82
  );
64
83
  }
65
84
 
@@ -174,8 +193,11 @@ export default function Demo() {
174
193
 
175
194
  <Card>
176
195
  <CardHeader>
177
- <CardTitle level={2}>Loading (skeleton)</CardTitle>
178
- <CardDescription>The skeleton prop renders during the pending phase.</CardDescription>
196
+ <CardTitle level={2}>Loading → empty</CardTitle>
197
+ <CardDescription>
198
+ The skeleton (animated) renders while pending; when the data arrives empty the
199
+ skeleton goes away and the `empty` slot renders.
200
+ </CardDescription>
179
201
  </CardHeader>
180
202
  <CardContent flush>
181
203
  <LoadingBlock />
@@ -367,19 +367,14 @@ const DOT_CLASS: Record<SavedView["dot"], string> = {
367
367
  neutral: "bg-muted-foreground",
368
368
  };
369
369
 
370
- // TabsTrigger renders a <button>, whose content model is phrasing content only — so the row and
371
- // the count chip take `as="span"`. Before Flex/Badge had that seam the only valid shape here was a
372
- // raw `<span className="flex …">`, i.e. utility layout.
373
- function ViewTrigger({ view, count }: { view: SavedView; count: number }) {
370
+ // TabsTrigger renders a <button>, whose content model is phrasing content only — so the row takes
371
+ // `as="span"`. The count is the trigger's own `count` slot (gh#1021), drawn exactly as the `items`
372
+ // API draws it, rather than a hand-placed Badge.
373
+ function ViewTrigger({ view }: { view: SavedView }) {
374
374
  return (
375
375
  <Flex as="span" align="center" gap="sm">
376
376
  <span aria-hidden="true" className={`size-2 rounded-full ${DOT_CLASS[view.dot]}`} />
377
377
  <span>{view.label}</span>
378
- <Badge as="span" tone="neutral" shape="pill">
379
- <Text as="span" size="2xs" weight="medium" tabular>
380
- {count}
381
- </Text>
382
- </Badge>
383
378
  </Flex>
384
379
  );
385
380
  }
@@ -432,23 +427,30 @@ export default function Demo() {
432
427
  }
433
428
  >
434
429
  <Flex direction="col" gap="md">
435
- {/* Saved-view ribbon — controlled Tabs; switching swaps the preset below. */}
436
- <Tabs value={view} onValueChange={(v) => setView(v as ViewId)}>
430
+ {/* Saved-view ribbon — controlled, strip-only Tabs (gh#1021): `controls` points the
431
+ selected tab at the grid below, which lives outside the Tabs and is never remounted. */}
432
+ <Tabs
433
+ aria-label="Saved views"
434
+ controls="attendance-grid"
435
+ value={view}
436
+ onValueChange={(v) => setView(v as ViewId)}
437
+ >
437
438
  <TabsList variant="line" className="h-auto w-full flex-wrap justify-start border-b">
438
439
  {VIEWS.map((v) => (
439
440
  <TabsTrigger
440
441
  key={v.id}
441
442
  value={v.id}
443
+ count={counts[v.id]}
442
444
  className="rounded-[var(--tabs-trigger-line-radius)] px-[var(--tabs-trigger-line-padding-x)] py-[var(--tabs-trigger-line-padding-y)]"
443
445
  >
444
- <ViewTrigger view={v} count={counts[v.id]} />
446
+ <ViewTrigger view={v} />
445
447
  </TabsTrigger>
446
448
  ))}
447
449
  </TabsList>
448
450
  </Tabs>
449
451
 
450
452
  {/* The grid — columns + data both come from the active saved view. */}
451
- <Card>
453
+ <Card id="attendance-grid" role="region" aria-label={active.label}>
452
454
  <CardContent flush>
453
455
  <DataTable
454
456
  data={rows}
@@ -235,7 +235,9 @@
235
235
  --conversations-item-active-background: hsl(220 20% 90%);
236
236
  --conversations-item-active-color: hsl(220 26% 12%);
237
237
  --tabs-count-active-background: hsl(220 20% 86%);
238
+ --segmented-count-selected-background: hsl(220 20% 86%);
238
239
  --tabs-count-active-color: hsl(220 26% 12%);
240
+ --segmented-count-selected-color: hsl(220 26% 12%);
239
241
  --toggle-soft-hover-background: hsl(220 16% 90%);
240
242
  --toggle-pressed-count-background: hsl(220 20% 84%);
241
243
  --toggle-pressed-count-color: hsl(220 26% 12%);
@@ -419,7 +421,9 @@
419
421
  --conversations-item-active-background: hsl(220 16% 22%);
420
422
  --conversations-item-active-color: hsl(220 20% 94%);
421
423
  --tabs-count-active-background: hsl(220 16% 26%);
424
+ --segmented-count-selected-background: hsl(220 16% 26%);
422
425
  --tabs-count-active-color: hsl(220 20% 94%);
426
+ --segmented-count-selected-color: hsl(220 20% 94%);
423
427
  --toggle-soft-hover-background: hsl(220 14% 22%);
424
428
  --toggle-pressed-count-background: hsl(220 16% 26%);
425
429
  --toggle-pressed-count-color: hsl(220 20% 94%);
@@ -613,7 +613,9 @@
613
613
  --conversations-item-active-background-alpha: 18%;
614
614
  --conversations-item-active-color: hsl(var(--glass-ink));
615
615
  --tabs-count-active-background-alpha: 24%;
616
+ --segmented-count-selected-background-alpha: 24%;
616
617
  --tabs-count-active-color: hsl(var(--glass-ink));
618
+ --segmented-count-selected-color: hsl(var(--glass-ink));
617
619
  --toggle-pressed-count-background-alpha: 26%;
618
620
  --toggle-pressed-count-color: hsl(var(--glass-ink));
619
621
  --toggle-pressed-border-color-alpha: 45%;
@@ -279,7 +279,9 @@
279
279
  --conversations-item-active-background: hsl(48 90% 78%);
280
280
  --conversations-item-active-color: hsl(0 0% 0%);
281
281
  --tabs-count-active-background: hsl(48 90% 74%);
282
+ --segmented-count-selected-background: hsl(48 90% 74%);
282
283
  --tabs-count-active-color: hsl(0 0% 0%);
284
+ --segmented-count-selected-color: hsl(0 0% 0%);
283
285
  --toggle-soft-hover-background: hsl(48 90% 84%);
284
286
  --toggle-pressed-count-background: hsl(48 90% 74%);
285
287
  --toggle-pressed-count-color: hsl(0 0% 0%);
@@ -331,6 +333,7 @@
331
333
  --mega-menu-link-hover-background: hsl(from hsl(var(--primary)) h 90% 82%);
332
334
  --conversations-item-active-background: hsl(from hsl(var(--primary)) h 90% 78%);
333
335
  --tabs-count-active-background: hsl(from hsl(var(--primary)) h 90% 74%);
336
+ --segmented-count-selected-background: hsl(from hsl(var(--primary)) h 90% 74%);
334
337
  --toggle-soft-hover-background: hsl(from hsl(var(--primary)) h 90% 84%);
335
338
  --toggle-pressed-count-background: hsl(from hsl(var(--primary)) h 90% 74%);
336
339
  }
@@ -423,7 +426,9 @@
423
426
  --conversations-item-active-background: hsl(48 90% 26%);
424
427
  --conversations-item-active-color: hsl(0 0% 100%);
425
428
  --tabs-count-active-background: hsl(48 90% 26%);
429
+ --segmented-count-selected-background: hsl(48 90% 26%);
426
430
  --tabs-count-active-color: hsl(0 0% 100%);
431
+ --segmented-count-selected-color: hsl(0 0% 100%);
427
432
  --toggle-soft-hover-background: hsl(48 90% 24%);
428
433
  --toggle-pressed-count-background: hsl(48 90% 26%);
429
434
  --toggle-pressed-count-color: hsl(0 0% 100%);
@@ -469,6 +474,7 @@
469
474
  --mega-menu-link-hover-background: hsl(from hsl(var(--primary)) h 90% 26%);
470
475
  --conversations-item-active-background: hsl(from hsl(var(--primary)) h 90% 26%);
471
476
  --tabs-count-active-background: hsl(from hsl(var(--primary)) h 90% 26%);
477
+ --segmented-count-selected-background: hsl(from hsl(var(--primary)) h 90% 26%);
472
478
  --toggle-soft-hover-background: hsl(from hsl(var(--primary)) h 90% 24%);
473
479
  --toggle-pressed-count-background: hsl(from hsl(var(--primary)) h 90% 26%);
474
480
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "31.3.0",
4
- "godxUiMcp": "31.3.0",
3
+ "version": "31.5.0",
4
+ "godxUiMcp": "31.5.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",