@mieweb/ui 0.10.0-dev.6 → 0.10.0-dev.7

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 (101) hide show
  1. package/agent/mieweb-ui.instructions.md +13 -1
  2. package/dist/brands/index.cjs +13 -13
  3. package/dist/brands/index.js +1 -1
  4. package/dist/chunk-3YBS4WUQ.js +52 -0
  5. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  6. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  7. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  8. package/dist/chunk-4NCDU5IG.cjs +56 -0
  9. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  10. package/dist/chunk-76TBQDED.js +166 -0
  11. package/dist/chunk-76TBQDED.js.map +1 -0
  12. package/dist/chunk-DZ5HFLRC.js +258 -0
  13. package/dist/chunk-DZ5HFLRC.js.map +1 -0
  14. package/dist/chunk-G4D6CLBT.js +333 -0
  15. package/dist/chunk-G4D6CLBT.js.map +1 -0
  16. package/dist/chunk-IT775BYG.js +179 -0
  17. package/dist/chunk-IT775BYG.js.map +1 -0
  18. package/dist/{chunk-ELPW32ZI.cjs → chunk-KQUI4BGS.cjs} +3 -3
  19. package/dist/{chunk-ELPW32ZI.cjs.map → chunk-KQUI4BGS.cjs.map} +1 -1
  20. package/dist/{chunk-WNM7IZJ7.js → chunk-MNILXWVY.js} +2 -2
  21. package/dist/{chunk-WNM7IZJ7.js.map → chunk-MNILXWVY.js.map} +1 -1
  22. package/dist/chunk-OCSCBB52.cjs +188 -0
  23. package/dist/chunk-OCSCBB52.cjs.map +1 -0
  24. package/dist/{chunk-2YCERQWC.js → chunk-TVTIGV7Q.js} +3 -3
  25. package/dist/{chunk-2YCERQWC.js.map → chunk-TVTIGV7Q.js.map} +1 -1
  26. package/dist/chunk-URAQIF67.cjs +356 -0
  27. package/dist/chunk-URAQIF67.cjs.map +1 -0
  28. package/dist/chunk-VINZZQBD.cjs +323 -0
  29. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  30. package/dist/{chunk-U42F3HLE.cjs → chunk-XCENM6ED.cjs} +12 -2
  31. package/dist/chunk-XCENM6ED.cjs.map +1 -0
  32. package/dist/chunk-XDIMTPZU.cjs +202 -0
  33. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  34. package/dist/{chunk-JI244Y7C.js → chunk-XEPDIFEA.js} +12 -2
  35. package/dist/chunk-XEPDIFEA.js.map +1 -0
  36. package/dist/chunk-XVW5DPPP.js +429 -0
  37. package/dist/chunk-XVW5DPPP.js.map +1 -0
  38. package/dist/chunk-XZNN3S3S.cjs +281 -0
  39. package/dist/chunk-XZNN3S3S.cjs.map +1 -0
  40. package/dist/chunk-Y4QNLW7W.js +300 -0
  41. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  42. package/dist/{chunk-2QKBTPUC.cjs → chunk-ZPSJ2UV6.cjs} +2 -2
  43. package/dist/{chunk-2QKBTPUC.cjs.map → chunk-ZPSJ2UV6.cjs.map} +1 -1
  44. package/dist/components/BoardView/index.cjs +24 -0
  45. package/dist/components/BoardView/index.cjs.map +1 -0
  46. package/dist/components/BoardView/index.d.cts +42 -0
  47. package/dist/components/BoardView/index.d.ts +42 -0
  48. package/dist/components/BoardView/index.js +7 -0
  49. package/dist/components/BoardView/index.js.map +1 -0
  50. package/dist/components/CalendarView/index.cjs +22 -0
  51. package/dist/components/CalendarView/index.cjs.map +1 -0
  52. package/dist/components/CalendarView/index.d.cts +40 -0
  53. package/dist/components/CalendarView/index.d.ts +40 -0
  54. package/dist/components/CalendarView/index.js +9 -0
  55. package/dist/components/CalendarView/index.js.map +1 -0
  56. package/dist/components/GanttView/index.cjs +20 -0
  57. package/dist/components/GanttView/index.cjs.map +1 -0
  58. package/dist/components/GanttView/index.d.cts +37 -0
  59. package/dist/components/GanttView/index.d.ts +37 -0
  60. package/dist/components/GanttView/index.js +7 -0
  61. package/dist/components/GanttView/index.js.map +1 -0
  62. package/dist/components/ListView/index.cjs +22 -0
  63. package/dist/components/ListView/index.cjs.map +1 -0
  64. package/dist/components/ListView/index.d.cts +37 -0
  65. package/dist/components/ListView/index.d.ts +37 -0
  66. package/dist/components/ListView/index.js +9 -0
  67. package/dist/components/ListView/index.js.map +1 -0
  68. package/dist/components/Markdown/index.cjs +15 -15
  69. package/dist/components/Markdown/index.js +3 -3
  70. package/dist/components/QuickAction/index.d.cts +1 -1
  71. package/dist/components/QuickAction/index.d.ts +1 -1
  72. package/dist/components/ViewSet/index.cjs +23 -0
  73. package/dist/components/ViewSet/index.cjs.map +1 -0
  74. package/dist/components/ViewSet/index.d.cts +89 -0
  75. package/dist/components/ViewSet/index.d.ts +89 -0
  76. package/dist/components/ViewSet/index.js +14 -0
  77. package/dist/components/ViewSet/index.js.map +1 -0
  78. package/dist/components/ViewSwitcher/index.cjs +20 -0
  79. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  80. package/dist/components/ViewSwitcher/index.d.cts +40 -0
  81. package/dist/components/ViewSwitcher/index.d.ts +40 -0
  82. package/dist/components/ViewSwitcher/index.js +7 -0
  83. package/dist/components/ViewSwitcher/index.js.map +1 -0
  84. package/dist/esheet.cjs +5 -5
  85. package/dist/esheet.js +2 -2
  86. package/dist/hooks/index.cjs +5 -5
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/index.cjs +439 -372
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.d.cts +8 -0
  91. package/dist/index.d.ts +8 -0
  92. package/dist/index.js +57 -50
  93. package/dist/index.js.map +1 -1
  94. package/dist/styles.css +1 -1
  95. package/dist/tailwind-preset.cjs +4 -4
  96. package/dist/tailwind-preset.js +1 -1
  97. package/dist/types-CbWXIKbe.d.cts +119 -0
  98. package/dist/types-CbWXIKbe.d.ts +119 -0
  99. package/package.json +1 -1
  100. package/dist/chunk-JI244Y7C.js.map +0 -1
  101. package/dist/chunk-U42F3HLE.cjs.map +0 -1
@@ -0,0 +1,323 @@
1
+ 'use strict';
2
+
3
+ var chunk4NCDU5IG_cjs = require('./chunk-4NCDU5IG.cjs');
4
+ var chunkXXVUHLQN_cjs = require('./chunk-XXVUHLQN.cjs');
5
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
6
+ var React = require('react');
7
+ var luxon = require('luxon');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ var defaultGanttLabels = {
31
+ ...chunk4NCDU5IG_cjs.defaultViewLabels,
32
+ empty: "Nothing to place on the timeline",
33
+ chart: "Timeline",
34
+ undated: "{count} without dates"
35
+ };
36
+ var CADENCE_UNIT = {
37
+ day: "day",
38
+ week: "week",
39
+ month: "month",
40
+ quarter: "quarter"
41
+ };
42
+ var CADENCE_FORMAT = {
43
+ day: "d LLL",
44
+ week: "'W'W",
45
+ month: "LLL",
46
+ quarter: "'Q'q yyyy"
47
+ };
48
+ function GanttView({
49
+ items,
50
+ accessors,
51
+ loading = false,
52
+ error = null,
53
+ selectedId = null,
54
+ onOpen,
55
+ getHref,
56
+ renderItem,
57
+ emptyState,
58
+ labels,
59
+ cadence = "week",
60
+ rangeStart,
61
+ rangeEnd,
62
+ groupByLane = false,
63
+ timeZone,
64
+ locale,
65
+ now,
66
+ className,
67
+ classNames,
68
+ headingLevel: Heading = "h3"
69
+ }) {
70
+ const text = { ...defaultGanttLabels, ...labels };
71
+ const zone = timeZone ?? luxon.DateTime.local().zoneName;
72
+ const unit = CADENCE_UNIT[cadence];
73
+ const today = React__namespace.useMemo(
74
+ () => luxon.DateTime.fromJSDate(now ?? /* @__PURE__ */ new Date(), { zone }).startOf("day"),
75
+ [now, zone]
76
+ );
77
+ const dated = React__namespace.useMemo(() => {
78
+ const out = [];
79
+ for (const item of items) {
80
+ const start = chunk4NCDU5IG_cjs.toDateTime(accessors.getStart?.(item), zone)?.startOf(
81
+ "day"
82
+ );
83
+ if (!start) continue;
84
+ const rawEnd = chunk4NCDU5IG_cjs.toDateTime(accessors.getEnd?.(item), zone)?.startOf("day");
85
+ const end = rawEnd ?? start;
86
+ out.push({
87
+ id: accessors.getId(item),
88
+ item,
89
+ start,
90
+ end: end < start ? start : end
91
+ });
92
+ }
93
+ return out;
94
+ }, [items, accessors, zone]);
95
+ const undatedCount = items.length - dated.length;
96
+ const columns = React__namespace.useMemo(() => {
97
+ if (dated.length === 0 && !rangeStart) return [];
98
+ const explicitStart = rangeStart ? luxon.DateTime.fromJSDate(rangeStart, { zone }) : null;
99
+ const first = explicitStart ?? dated.reduce((min, d) => d.start < min ? d.start : min, dated[0].start);
100
+ const last = rangeEnd ? luxon.DateTime.fromJSDate(rangeEnd, { zone }) : dated.length > 0 ? dated.reduce((max, d) => d.end > max ? d.end : max, dated[0].end) : first;
101
+ const out = [];
102
+ let cursor = first.startOf(unit);
103
+ const stop = last.startOf(unit);
104
+ if (stop < cursor) return [cursor];
105
+ while (cursor <= stop && out.length < 200) {
106
+ out.push(cursor);
107
+ cursor = cursor.plus({ [`${unit}s`]: 1 });
108
+ }
109
+ return out;
110
+ }, [dated, rangeStart, rangeEnd, unit, zone]);
111
+ const columnOf = React__namespace.useCallback(
112
+ (moment) => {
113
+ const target = moment.startOf(unit);
114
+ const index = columns.findIndex((c) => c.hasSame(target, unit));
115
+ return index >= 0 ? index : null;
116
+ },
117
+ [columns, unit]
118
+ );
119
+ const lanes = React__namespace.useMemo(() => {
120
+ const toBar = (d) => {
121
+ const last = columns.length - 1;
122
+ const from = columnOf(d.start);
123
+ const to = columnOf(d.end);
124
+ const start = from ?? (d.start < columns[0] ? 0 : null);
125
+ const end = to ?? (d.end > columns[last] ? last : null);
126
+ if (start === null || end === null || end < start) return null;
127
+ return {
128
+ id: d.id,
129
+ item: d.item,
130
+ column: start + 1,
131
+ span: end - start + 1
132
+ };
133
+ };
134
+ const bars = (source) => source.map(toBar).filter((b) => b !== null);
135
+ if (!groupByLane || !accessors.getGroup)
136
+ return [{ id: "", label: "", bars: bars(dated) }];
137
+ const buckets = /* @__PURE__ */ new Map();
138
+ for (const d of dated) {
139
+ const key = accessors.getGroup(d.item) ?? "";
140
+ const bucket = buckets.get(key);
141
+ if (bucket) bucket.push(d);
142
+ else buckets.set(key, [d]);
143
+ }
144
+ return [...buckets].map(([key, bucket]) => ({
145
+ id: key,
146
+ label: key || text.ungrouped,
147
+ bars: bars(bucket)
148
+ }));
149
+ }, [dated, groupByLane, accessors, columnOf, columns, text.ungrouped]);
150
+ const todayColumn = (columnOf(today) ?? -1) + 1;
151
+ const showToday = columns.length > 0 && today >= columns[0] && today <= columns[columns.length - 1].endOf(unit);
152
+ const state = (content) => /* @__PURE__ */ jsxRuntime.jsx(
153
+ "div",
154
+ {
155
+ "data-slot": "gantt-view-state",
156
+ className: chunkS5RVSXDV_cjs.cn(
157
+ "border-border bg-card text-muted-foreground flex flex-col items-center justify-center gap-2 rounded-lg border px-4 py-10 text-center text-sm",
158
+ classNames?.state
159
+ ),
160
+ children: content
161
+ }
162
+ );
163
+ if (error) {
164
+ return state(
165
+ /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "text-destructive", children: text.error })
166
+ );
167
+ }
168
+ if (loading) {
169
+ return state(
170
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
171
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXXVUHLQN_cjs.Spinner, { size: "sm", label: text.loading }),
172
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: text.loading })
173
+ ] })
174
+ );
175
+ }
176
+ if (columns.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: emptyState ?? state(text.empty) });
177
+ const gridTemplate = {
178
+ gridTemplateColumns: `repeat(${columns.length}, minmax(3.5rem, 1fr))`
179
+ };
180
+ return /* @__PURE__ */ jsxRuntime.jsxs(
181
+ "div",
182
+ {
183
+ "data-slot": "gantt-view",
184
+ className: chunkS5RVSXDV_cjs.cn(
185
+ "border-border bg-card overflow-hidden rounded-lg border",
186
+ className
187
+ ),
188
+ children: [
189
+ /* @__PURE__ */ jsxRuntime.jsx(
190
+ "div",
191
+ {
192
+ className: "overflow-x-auto",
193
+ role: "group",
194
+ "aria-label": text.chart,
195
+ tabIndex: 0,
196
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-max", children: [
197
+ /* @__PURE__ */ jsxRuntime.jsx(
198
+ "div",
199
+ {
200
+ "data-slot": "gantt-view-header",
201
+ className: chunkS5RVSXDV_cjs.cn(
202
+ "border-border bg-muted/40 grid border-b",
203
+ classNames?.header
204
+ ),
205
+ style: gridTemplate,
206
+ children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
207
+ "div",
208
+ {
209
+ className: "border-border text-muted-foreground border-e px-2 py-1.5 text-center text-xs last:border-e-0",
210
+ children: column.setLocale(locale ?? column.locale ?? "en").toFormat(CADENCE_FORMAT[cadence])
211
+ },
212
+ column.toISO()
213
+ ))
214
+ }
215
+ ),
216
+ lanes.map((lane) => /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
217
+ lane.label && /* @__PURE__ */ jsxRuntime.jsx(Heading, { children: /* @__PURE__ */ jsxRuntime.jsx(
218
+ "span",
219
+ {
220
+ "data-slot": "gantt-view-group-label",
221
+ className: chunkS5RVSXDV_cjs.cn(
222
+ "border-border bg-muted text-muted-foreground block border-b px-3 py-1.5 text-xs font-semibold tracking-wide uppercase",
223
+ classNames?.groupLabel
224
+ ),
225
+ children: lane.label
226
+ }
227
+ ) }),
228
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { children: lane.bars.map((bar) => {
229
+ const accent = accessors.getAccent?.(bar.item) ?? "primary";
230
+ const selected = bar.id === selectedId;
231
+ const title = accessors.getTitle(bar.item);
232
+ const body = renderItem?.(bar.item, { view: "gantt" }) ?? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate px-2 text-xs font-medium", children: title });
233
+ const classes = chunkS5RVSXDV_cjs.cn(
234
+ "flex h-6 items-center rounded-full border text-foreground",
235
+ chunk4NCDU5IG_cjs.accentClasses[accent].tint,
236
+ chunk4NCDU5IG_cjs.accentClasses[accent].border,
237
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
238
+ classNames?.bar,
239
+ selected && chunkS5RVSXDV_cjs.cn("ring-2 ring-primary-500/50", classNames?.selectedBar)
240
+ );
241
+ const href = getHref?.(bar.id, bar.item);
242
+ return /* @__PURE__ */ jsxRuntime.jsxs(
243
+ "li",
244
+ {
245
+ "data-slot": "gantt-view-row",
246
+ className: chunkS5RVSXDV_cjs.cn(
247
+ "border-border relative grid items-center border-b py-1 last:border-b-0",
248
+ classNames?.row
249
+ ),
250
+ style: gridTemplate,
251
+ children: [
252
+ showToday && /* @__PURE__ */ jsxRuntime.jsx(
253
+ "span",
254
+ {
255
+ "aria-hidden": true,
256
+ className: "bg-primary-500/60 pointer-events-none absolute inset-y-0 w-px",
257
+ style: {
258
+ gridColumn: `${todayColumn} / span 1`,
259
+ insetInlineStart: 0
260
+ }
261
+ }
262
+ ),
263
+ /* @__PURE__ */ jsxRuntime.jsx(
264
+ "div",
265
+ {
266
+ className: "min-w-0",
267
+ style: {
268
+ gridColumn: `${bar.column} / span ${bar.span}`
269
+ },
270
+ children: href ? /* @__PURE__ */ jsxRuntime.jsx(
271
+ "a",
272
+ {
273
+ href,
274
+ "aria-current": selected ? "true" : void 0,
275
+ "data-slot": "gantt-view-bar",
276
+ className: classes,
277
+ onClick: (event) => {
278
+ if (!onOpen || event.defaultPrevented || event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
279
+ return;
280
+ event.preventDefault();
281
+ onOpen(bar.id, bar.item);
282
+ },
283
+ children: body
284
+ }
285
+ ) : onOpen ? /* @__PURE__ */ jsxRuntime.jsx(
286
+ "button",
287
+ {
288
+ type: "button",
289
+ "aria-current": selected ? "true" : void 0,
290
+ "data-slot": "gantt-view-bar",
291
+ className: chunkS5RVSXDV_cjs.cn(classes, "w-full text-start"),
292
+ onClick: () => onOpen(bar.id, bar.item),
293
+ children: body
294
+ }
295
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "gantt-view-bar", className: classes, children: body })
296
+ }
297
+ )
298
+ ]
299
+ },
300
+ bar.id
301
+ );
302
+ }) })
303
+ ] }, lane.id))
304
+ ] })
305
+ }
306
+ ),
307
+ undatedCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
308
+ "p",
309
+ {
310
+ "data-slot": "gantt-view-undated",
311
+ className: "border-border text-muted-foreground border-t px-3 py-1.5 text-xs",
312
+ children: text.undated.replace("{count}", String(undatedCount))
313
+ }
314
+ )
315
+ ]
316
+ }
317
+ );
318
+ }
319
+
320
+ exports.GanttView = GanttView;
321
+ exports.defaultGanttLabels = defaultGanttLabels;
322
+ //# sourceMappingURL=chunk-VINZZQBD.cjs.map
323
+ //# sourceMappingURL=chunk-VINZZQBD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/GanttView/GanttView.tsx"],"names":["defaultViewLabels","DateTime","React","toDateTime","jsx","cn","jsxs","Spinner","accentClasses"],"mappings":"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","file":"chunk-VINZZQBD.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime, type DateTimeUnit } from 'luxon';\nimport { cn } from '../../utils/cn';\nimport { Spinner } from '../Spinner';\nimport {\n accentClasses,\n defaultViewLabels,\n toDateTime,\n type ViewBaseProps,\n type ViewLabels,\n} from '../../views/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Column width in time. `month` and `quarter` are what a roadmap is — the\n * family has no separate RoadmapView, because it would be this component with\n * wider columns.\n */\nexport type GanttCadence = 'day' | 'week' | 'month' | 'quarter';\n\nexport type GanttViewSlot =\n | 'header'\n | 'groupLabel'\n | 'row'\n | 'bar'\n | 'selectedBar'\n | 'state';\n\nexport interface GanttLabels extends ViewLabels {\n /** Accessible name of the scrollable chart region. */\n chart: string;\n /** Footnote for records a time axis cannot place. `{count}` is substituted. */\n undated: string;\n}\n\nexport const defaultGanttLabels: GanttLabels = {\n ...defaultViewLabels,\n empty: 'Nothing to place on the timeline',\n chart: 'Timeline',\n undated: '{count} without dates',\n};\n\nexport interface GanttViewProps<T> extends ViewBaseProps<T> {\n /** Column width in time. Defaults to `week`. */\n cadence?: GanttCadence;\n /** First column. Defaults to the earliest start in `items`. */\n rangeStart?: Date;\n /** Last column. Defaults to the latest end in `items`. */\n rangeEnd?: Date;\n /** Group rows into swimlanes by `accessors.getGroup`. */\n groupByLane?: boolean;\n timeZone?: string;\n locale?: string;\n labels?: Partial<GanttLabels>;\n classNames?: Partial<Record<GanttViewSlot, string>>;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\nconst CADENCE_UNIT: Record<GanttCadence, DateTimeUnit> = {\n day: 'day',\n week: 'week',\n month: 'month',\n quarter: 'quarter',\n};\n\nconst CADENCE_FORMAT: Record<GanttCadence, string> = {\n day: 'd LLL',\n week: \"'W'W\",\n month: 'LLL',\n quarter: \"'Q'q yyyy\",\n};\n\ninterface Bar<T> {\n id: string;\n item: T;\n /** 1-based column index, for CSS grid. */\n column: number;\n span: number;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function GanttView<T>({\n items,\n accessors,\n loading = false,\n error = null,\n selectedId = null,\n onOpen,\n getHref,\n renderItem,\n emptyState,\n labels,\n cadence = 'week',\n rangeStart,\n rangeEnd,\n groupByLane = false,\n timeZone,\n locale,\n now,\n className,\n classNames,\n headingLevel: Heading = 'h3',\n}: GanttViewProps<T>) {\n const text = { ...defaultGanttLabels, ...labels };\n const zone = timeZone ?? DateTime.local().zoneName;\n const unit = CADENCE_UNIT[cadence];\n const today = React.useMemo(\n () => DateTime.fromJSDate(now ?? new Date(), { zone }).startOf('day'),\n [now, zone]\n );\n\n const dated = React.useMemo(() => {\n const out: { id: string; item: T; start: DateTime; end: DateTime }[] = [];\n for (const item of items) {\n const start = toDateTime(accessors.getStart?.(item), zone)?.startOf(\n 'day'\n );\n if (!start) continue;\n const rawEnd = toDateTime(accessors.getEnd?.(item), zone)?.startOf('day');\n const end = rawEnd ?? start;\n out.push({\n id: accessors.getId(item),\n item,\n start,\n end: end < start ? start : end,\n });\n }\n return out;\n }, [items, accessors, zone]);\n\n const undatedCount = items.length - dated.length;\n\n const columns = React.useMemo(() => {\n if (dated.length === 0 && !rangeStart) return [];\n const explicitStart = rangeStart\n ? DateTime.fromJSDate(rangeStart, { zone })\n : null;\n // `dated` can be empty here when only a range was given, so every reduce\n // needs a seed that does not come from it.\n const first =\n explicitStart ??\n dated.reduce((min, d) => (d.start < min ? d.start : min), dated[0].start);\n const last = rangeEnd\n ? DateTime.fromJSDate(rangeEnd, { zone })\n : dated.length > 0\n ? dated.reduce((max, d) => (d.end > max ? d.end : max), dated[0].end)\n : first;\n const out: DateTime[] = [];\n let cursor = first.startOf(unit);\n const stop = last.startOf(unit);\n // An explicit range given backwards is caller data, not a crash: draw the\n // column it starts in rather than falling through to the empty state.\n if (stop < cursor) return [cursor];\n // Guard rather than trust the range: a decade of days is 3,650 columns and\n // would hang the page rather than draw a chart.\n while (cursor <= stop && out.length < 200) {\n out.push(cursor);\n cursor = cursor.plus({ [`${unit}s`]: 1 });\n }\n return out;\n }, [dated, rangeStart, rangeEnd, unit, zone]);\n\n // Returns null for a moment outside the drawn columns. Clamping it to an edge\n // would draw a record that does not intersect the range as though it started\n // or ended exactly at the boundary, which reads as data rather than as the\n // rounding it is.\n const columnOf = React.useCallback(\n (moment: DateTime) => {\n const target = moment.startOf(unit);\n const index = columns.findIndex((c) => c.hasSame(target, unit));\n return index >= 0 ? index : null;\n },\n [columns, unit]\n );\n\n const lanes = React.useMemo(() => {\n const toBar = (d: (typeof dated)[number]): Bar<T> | null => {\n const last = columns.length - 1;\n const from = columnOf(d.start);\n const to = columnOf(d.end);\n // Only the part that intersects the range is drawn; a record entirely\n // outside it is omitted rather than pinned to an edge.\n const start = from ?? (d.start < columns[0] ? 0 : null);\n const end = to ?? (d.end > columns[last] ? last : null);\n if (start === null || end === null || end < start) return null;\n return {\n id: d.id,\n item: d.item,\n column: start + 1,\n span: end - start + 1,\n };\n };\n const bars = (source: typeof dated) =>\n source.map(toBar).filter((b): b is Bar<T> => b !== null);\n\n if (!groupByLane || !accessors.getGroup)\n return [{ id: '', label: '', bars: bars(dated) }];\n const buckets = new Map<string, (typeof dated)[number][]>();\n for (const d of dated) {\n const key = accessors.getGroup(d.item) ?? '';\n const bucket = buckets.get(key);\n if (bucket) bucket.push(d);\n else buckets.set(key, [d]);\n }\n return [...buckets].map(([key, bucket]) => ({\n id: key,\n label: key || text.ungrouped,\n bars: bars(bucket),\n }));\n }, [dated, groupByLane, accessors, columnOf, columns, text.ungrouped]);\n\n const todayColumn = (columnOf(today) ?? -1) + 1;\n const showToday =\n columns.length > 0 &&\n today >= columns[0] &&\n today <= columns[columns.length - 1].endOf(unit);\n\n const state = (content: React.ReactNode) => (\n <div\n data-slot=\"gantt-view-state\"\n className={cn(\n 'border-border bg-card text-muted-foreground flex flex-col items-center justify-center gap-2 rounded-lg border px-4 py-10 text-center text-sm',\n classNames?.state\n )}\n >\n {content}\n </div>\n );\n\n if (error) {\n return state(\n <p role=\"alert\" className=\"text-destructive\">\n {text.error}\n </p>\n );\n }\n if (loading) {\n return state(\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"sm\" label={text.loading} />\n <span aria-hidden>{text.loading}</span>\n </span>\n );\n }\n if (columns.length === 0) return <>{emptyState ?? state(text.empty)}</>;\n\n const gridTemplate = {\n gridTemplateColumns: `repeat(${columns.length}, minmax(3.5rem, 1fr))`,\n };\n\n return (\n <div\n data-slot=\"gantt-view\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n >\n {/* Scrollable content must be keyboard operable (WCAG 2.1.1), which axe\n enforces as scrollable-region-focusable. jsx-a11y disagrees for\n non-interactive elements; the success criterion wins. */}\n <div\n className=\"overflow-x-auto\"\n role=\"group\"\n aria-label={text.chart}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n >\n <div className=\"min-w-max\">\n <div\n data-slot=\"gantt-view-header\"\n className={cn(\n 'border-border bg-muted/40 grid border-b',\n classNames?.header\n )}\n style={gridTemplate}\n >\n {columns.map((column) => (\n <div\n key={column.toISO()}\n className=\"border-border text-muted-foreground border-e px-2 py-1.5 text-center text-xs last:border-e-0\"\n >\n {column\n .setLocale(locale ?? column.locale ?? 'en')\n .toFormat(CADENCE_FORMAT[cadence])}\n </div>\n ))}\n </div>\n\n {lanes.map((lane) => (\n <section key={lane.id}>\n {lane.label && (\n <Heading>\n <span\n data-slot=\"gantt-view-group-label\"\n className={cn(\n 'border-border bg-muted text-muted-foreground block border-b px-3 py-1.5 text-xs font-semibold tracking-wide uppercase',\n classNames?.groupLabel\n )}\n >\n {lane.label}\n </span>\n </Heading>\n )}\n <ul>\n {lane.bars.map((bar) => {\n const accent = accessors.getAccent?.(bar.item) ?? 'primary';\n const selected = bar.id === selectedId;\n const title = accessors.getTitle(bar.item);\n const body = renderItem?.(bar.item, { view: 'gantt' }) ?? (\n <span className=\"block truncate px-2 text-xs font-medium\">\n {title}\n </span>\n );\n const classes = cn(\n 'flex h-6 items-center rounded-full border text-foreground',\n accentClasses[accent].tint,\n accentClasses[accent].border,\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n classNames?.bar,\n selected &&\n cn('ring-2 ring-primary-500/50', classNames?.selectedBar)\n );\n const href = getHref?.(bar.id, bar.item);\n return (\n <li\n key={bar.id}\n data-slot=\"gantt-view-row\"\n className={cn(\n 'border-border relative grid items-center border-b py-1 last:border-b-0',\n classNames?.row\n )}\n style={gridTemplate}\n >\n {showToday && (\n <span\n aria-hidden\n className=\"bg-primary-500/60 pointer-events-none absolute inset-y-0 w-px\"\n style={{\n gridColumn: `${todayColumn} / span 1`,\n insetInlineStart: 0,\n }}\n />\n )}\n <div\n className=\"min-w-0\"\n style={{\n gridColumn: `${bar.column} / span ${bar.span}`,\n }}\n >\n {href ? (\n <a\n href={href}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"gantt-view-bar\"\n className={classes}\n onClick={(event) => {\n if (\n !onOpen ||\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(bar.id, bar.item);\n }}\n >\n {body}\n </a>\n ) : onOpen ? (\n <button\n type=\"button\"\n aria-current={selected ? 'true' : undefined}\n data-slot=\"gantt-view-bar\"\n className={cn(classes, 'w-full text-start')}\n onClick={() => onOpen(bar.id, bar.item)}\n >\n {body}\n </button>\n ) : (\n <span data-slot=\"gantt-view-bar\" className={classes}>\n {body}\n </span>\n )}\n </div>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n </div>\n\n {undatedCount > 0 && (\n <p\n data-slot=\"gantt-view-undated\"\n className=\"border-border text-muted-foreground border-t px-3 py-1.5 text-xs\"\n >\n {text.undated.replace('{count}', String(undatedCount))}\n </p>\n )}\n </div>\n );\n}\n"]}
@@ -887,6 +887,16 @@ var miewebUISafelist = [
887
887
  "border-dashed",
888
888
  "border-2",
889
889
  "bg-primary-500/10",
890
+ // Modules/Views — accentClasses resolves an Accent token name to a wash, a
891
+ // border and a solid marker, so none of them appear literally in a
892
+ // consumer's own source. The wash and marker classes are listed elsewhere in
893
+ // this file; these borders and the neutral marker are not.
894
+ "border-primary-500/40",
895
+ "border-success/40",
896
+ "border-warning/40",
897
+ "border-destructive/40",
898
+ "border-info/40",
899
+ "bg-muted-foreground",
890
900
  "gap-0.5",
891
901
  "p-0.5",
892
902
  // Floating labels (labelVariant="floating" on Input / Textarea / DateInput /
@@ -1435,5 +1445,5 @@ var tailwind_preset_default = miewebUIPreset;
1435
1445
  exports.miewebUIPreset = miewebUIPreset;
1436
1446
  exports.miewebUISafelist = miewebUISafelist;
1437
1447
  exports.tailwind_preset_default = tailwind_preset_default;
1438
- //# sourceMappingURL=chunk-U42F3HLE.cjs.map
1439
- //# sourceMappingURL=chunk-U42F3HLE.cjs.map
1448
+ //# sourceMappingURL=chunk-XCENM6ED.cjs.map
1449
+ //# sourceMappingURL=chunk-XCENM6ED.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"chunk-XCENM6ED.cjs","sourcesContent":["/**\n * @mieweb/ui Tailwind CSS Preset\n *\n * This preset provides the default theme configuration for @mieweb/ui components.\n * Consumers can extend or override these values in their own tailwind.config.js\n *\n * Usage:\n * ```js\n * // tailwind.config.js\n * module.exports = {\n * presets: [require('@mieweb/ui/tailwind-preset')],\n * theme: {\n * extend: {\n * colors: {\n * primary: {\n * 500: '#your-brand-color',\n * },\n * },\n * },\n * },\n * };\n * ```\n */\n\n/**\n * Safelist of classes used by @mieweb/ui components.\n *\n * **Tailwind CSS 3**: These must be safelisted because Tailwind may not detect\n * them when components are imported from node_modules.\n *\n * **Tailwind CSS 4**: The safelist is NOT needed if you add the `@source`\n * directive to your CSS. Add this line to your main CSS file:\n *\n * @source \"../node_modules/@mieweb/ui/dist\";\n *\n * This tells Tailwind 4 to scan @mieweb/ui's dist folder for class names,\n * replacing the need for a manual safelist.\n *\n * @deprecated For Tailwind CSS 4 users — use the `@source` directive instead.\n */\nexport const miewebUISafelist = [\n // CaseManagementHeader — logical spacing, details grid, responsive\n // built-in actions (icon-only below md):\n '-ms-2',\n 'gap-x-10',\n 'hidden',\n 'max-w-[60%]',\n 'md:hidden',\n 'md:inline-flex',\n // Assessment nested order toolbars suppress the concern-row toolbar for\n // fine pointers while an order toolbar is active.\n 'pointer-fine:group-has-[[data-order-id]:hover]:pointer-events-none',\n 'pointer-fine:group-has-[[data-order-id]:hover]:opacity-0',\n 'pointer-fine:group-has-[[data-order-id]:focus-within]:pointer-events-none',\n 'pointer-fine:group-has-[[data-order-id]:focus-within]:opacity-0',\n // ConditionEditor coding rows switch from a stacked mobile layout to a\n // shared column grid at the small breakpoint.\n 'grid-cols-[minmax(8rem,1.1fr)_minmax(7rem,0.9fr)_minmax(10rem,1.5fr)_5.5rem_2.5rem]',\n 'sm:grid-cols-[minmax(8rem,1.1fr)_minmax(7rem,0.9fr)_minmax(10rem,1.5fr)_5.5rem_2.5rem]',\n 'sm:!grid',\n 'border-border/70',\n '[&_[data-slot=radio-group-items]]:gap-2',\n 'sm:[&_[data-slot=radio-group-legend]]:sr-only',\n // PatientHeader showCountBadges={false} — hides CountBadge roots in the\n // actions slot (ui#367):\n '[&_[data-slot=count-badge-root]]:hidden',\n // OzwellChat's compact widget shell and portaled menus. These arbitrary\n // utilities must remain available to Tailwind 3 consumers that do not scan\n // package source files.\n 'max-w-[min(160px,44vw)]',\n 'max-w-[190px]',\n 'max-w-[min(248px,calc(100vw-24px))]',\n 'max-w-[min(260px,calc(100vw-24px))]',\n 'rounded-[10px]',\n 'min-h-[30px]',\n 'animate-ozwell-message-flare',\n 'grid-cols-[22px_minmax(0,1fr)]',\n 'h-[22px]',\n 'w-[22px]',\n 'text-[11px]',\n 'leading-[1.35]',\n 'py-[7px]',\n '[&_[data-slot=\"ai-chat\"]]:min-h-0',\n '[&_[data-slot=\"ai-chat-messages\"]]:min-h-0',\n '[&_[data-slot=\"ai-tool-call\"]]:p-2',\n '[&_[data-slot=\"ai-tool-icon\"]]:h-7',\n '[&_[data-slot=\"ai-tool-icon\"]]:w-7',\n '[&_[data-slot=\"ai-tool-content\"]]:text-sm',\n '[&_[data-slot=\"ai-tool-parameters\"]]:text-xs',\n '[&_[data-slot=\"ai-tool-result\"]]:text-xs',\n '[&_[data-slot=\"ai-message-thinking\"]_button]:px-2.5',\n '[&_[data-slot=\"ai-message-thinking\"]_button]:py-[7px]',\n '[&_[data-slot=\"ai-message\"].flex-row-reverse_[data-slot=\"ai-message-avatar\"]]:hidden',\n '[&_[data-slot=toast-message]]:text-xs',\n '[&_[data-slot=toast-message]]:leading-[1.35]',\n '[&_[data-slot=toast]]:max-w-none',\n '[&_[data-slot=toast]]:min-w-0',\n '[&_[data-slot=toast]]:rounded-lg',\n '[&_[data-slot=toast]]:p-2',\n '[&_[data-slot=toast]]:shadow-none',\n // Media stack (MediaEditor / TranscriptView / MediaPlayer) — opacity-modifier\n // and state variants introduced with the media components (ui#323 finding):\n 'bg-muted/20',\n 'bg-primary-50',\n 'bg-primary-500/20',\n 'bg-primary-500/40',\n 'bg-success/15',\n 'bg-warning/20',\n 'bg-warning/40',\n 'border-primary-600',\n 'border-warning/50',\n 'dark:bg-primary-950',\n 'hover:bg-destructive/20',\n 'hover:bg-muted',\n 'hover:bg-muted/70',\n 'hover:bg-primary-500/15',\n 'hover:bg-primary-500/30',\n 'hover:bg-success/25',\n 'hover:text-destructive',\n // MediaEditor media-surface height cap: the small-screen `dvh` cap, and the\n // md variants that hand desktop back its original percentage cap. Purging\n // these uncaps the player on a phone, which is the bug the cap exists for.\n 'max-h-[55dvh]',\n 'md:max-h-[50%]',\n 'md:max-h-none',\n 'outline-destructive',\n 'outline-primary-500',\n 'outline-warning',\n 'text-primary-500',\n // Semantic colors\n 'border-border',\n 'border-input',\n 'ring-ring',\n 'bg-background',\n 'bg-card',\n 'bg-muted',\n 'bg-primary',\n 'bg-primary-800',\n 'dark:bg-primary-500',\n 'checked:border-primary-500',\n 'dark:checked:border-primary-800',\n 'bg-success',\n 'bg-warning',\n 'bg-destructive',\n 'bg-info',\n // Ozwell brand accent (Hey Ozwell voice components)\n 'bg-ozwell',\n 'hover:bg-ozwell',\n 'active:bg-ozwell',\n 'text-ozwell',\n 'text-ozwell-foreground',\n 'border-ozwell',\n 'focus-visible:ring-ozwell',\n 'text-foreground',\n 'text-card-foreground',\n 'text-muted-foreground',\n 'text-primary',\n 'text-primary-foreground',\n 'text-success',\n 'text-success-foreground',\n 'text-warning',\n 'text-warning-foreground',\n 'text-destructive',\n 'text-destructive-foreground',\n 'text-info',\n 'text-info-foreground',\n 'focus:ring-ring',\n 'focus:ring-primary',\n 'focus:border-transparent',\n 'focus:ring-destructive',\n 'border-primary',\n 'border-destructive',\n 'border-success',\n 'focus:ring-success/20',\n 'focus:ring-destructive/20',\n 'opacity-0',\n // Drag & drop (useDragReorder / dragIndicatorClasses)\n 'opacity-40',\n 'cursor-grab',\n 'active:cursor-grabbing',\n 'shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'group-hover:opacity-100',\n 'focus:opacity-100',\n 'has-[[data-slot=superchat-nitro-table]]:w-full',\n 'has-[[data-slot=superchat-nitro-table]]:max-w-full',\n // RowActionToolbar (per-row action toolbars) reveal/overlay. These use the\n // built-in `pointer-fine` variant, named `group/order` scope, and the\n // `.wcdv-tr` (datavis grid row) arbitrary variant — none of which TW3\n // consumers scan from node_modules, so the toolbar would stay hidden\n // without safelisting them.\n 'pointer-fine:absolute',\n 'pointer-fine:top-1/2',\n 'pointer-fine:right-0',\n 'pointer-fine:-translate-y-1/2',\n 'pointer-fine:top-1.5',\n 'pointer-fine:right-1.5',\n 'pointer-fine:bg-card',\n 'pointer-fine:border-border',\n 'pointer-fine:rounded-md',\n 'pointer-fine:border',\n 'pointer-fine:p-0.5',\n 'pointer-fine:shadow-sm',\n 'pointer-fine:pointer-events-none',\n 'pointer-fine:opacity-0',\n 'rounded-md',\n 'border',\n 'p-0.5',\n 'shadow-sm',\n 'focus-within:pointer-events-auto',\n 'focus-within:opacity-100',\n 'group-hover:pointer-events-auto',\n 'group-focus-within:pointer-events-auto',\n 'group-focus-within:opacity-100',\n 'group-focus:pointer-events-auto',\n 'group-focus:opacity-100',\n 'group-hover/order:pointer-events-auto',\n 'group-hover/order:opacity-100',\n 'group-focus-within/order:pointer-events-auto',\n 'group-focus-within/order:opacity-100',\n 'group-focus/order:pointer-events-auto',\n 'group-focus/order:opacity-100',\n '[.wcdv-tr:hover_&]:pointer-events-auto',\n '[.wcdv-tr:hover_&]:opacity-100',\n '[.wcdv-tr:focus-within_&]:pointer-events-auto',\n '[.wcdv-tr:focus-within_&]:opacity-100',\n // Markdown SurveyBlock\n 'accent-primary-500',\n // Opacity-modifier variants for semantic colors used by components\n 'bg-background/60',\n 'bg-background/80',\n 'bg-background/90',\n 'bg-background/95',\n 'bg-card/80',\n 'bg-destructive/5',\n 'bg-destructive/10',\n 'bg-foreground/50',\n 'bg-info/10',\n 'bg-muted/10',\n 'bg-muted/30',\n 'bg-muted/50',\n 'bg-primary/5',\n 'bg-primary/10',\n 'bg-success/10',\n 'bg-warning/10',\n 'border-border/80',\n 'border-destructive/20',\n 'border-destructive/30',\n 'border-destructive/50',\n 'border-info/30',\n 'border-muted-foreground/25',\n 'border-muted-foreground/40',\n 'border-primary/30',\n 'border-primary/50',\n 'border-success/30',\n 'border-success/50',\n 'border-warning/30',\n 'hover:bg-destructive/10',\n 'hover:bg-muted/10',\n 'hover:bg-muted/20',\n 'hover:bg-muted/50',\n 'hover:bg-muted/80',\n 'hover:bg-primary/5',\n 'hover:bg-primary/10',\n 'hover:bg-primary/20',\n 'hover:bg-primary/90',\n 'hover:border-border/80',\n 'hover:border-muted-foreground/50',\n 'hover:text-destructive/80',\n 'hover:text-primary/80',\n 'text-muted-foreground/30',\n 'text-muted-foreground/40',\n 'text-muted-foreground/50',\n 'text-muted-foreground/60',\n 'text-muted-foreground/70',\n 'text-primary/80',\n 'text-primary-foreground/90',\n 'ring-primary',\n 'ring-2',\n 'ring-offset-2',\n // Grid classes for QuickAction and responsive layouts\n 'grid-cols-1',\n 'grid-cols-2',\n 'grid-cols-3',\n 'grid-cols-4',\n 'grid-cols-6',\n 'sm:grid-cols-1',\n 'sm:grid-cols-2',\n 'sm:grid-cols-3',\n 'sm:grid-cols-4',\n 'sm:grid-cols-6',\n 'md:grid-cols-2',\n 'md:grid-cols-3',\n 'md:grid-cols-4',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n // ── Expanded Color Scales ────────────────────────────────────────\n // Secondary scale\n 'bg-secondary',\n 'bg-secondary-50',\n 'bg-secondary-100',\n 'bg-secondary-500',\n 'bg-secondary-600',\n 'text-secondary',\n 'text-secondary-500',\n 'text-secondary-600',\n 'text-secondary-700',\n 'text-secondary-foreground',\n 'border-secondary',\n 'border-secondary-200',\n // Neutral scale\n 'bg-neutral-50',\n 'bg-neutral-100',\n 'bg-neutral-200',\n 'bg-neutral-300',\n 'bg-neutral-800',\n 'bg-neutral-900',\n 'text-neutral-500',\n 'text-neutral-600',\n 'text-neutral-700',\n 'text-neutral-400',\n 'border-neutral-200',\n 'border-neutral-300',\n 'dark:bg-neutral-700',\n 'dark:bg-neutral-800',\n 'dark:text-neutral-300',\n 'dark:text-neutral-400',\n 'dark:border-neutral-600',\n 'dark:border-neutral-700',\n // Indigo (StripeBadge)\n 'bg-indigo-500/10',\n 'dark:bg-indigo-400/20',\n 'text-indigo-700',\n 'dark:text-indigo-300',\n 'border-indigo-500/30',\n 'hover:text-indigo-700',\n 'dark:hover:text-indigo-300',\n // Destructive scale\n 'bg-destructive-50',\n 'bg-destructive-100',\n 'bg-destructive-500',\n 'bg-destructive-600',\n 'bg-destructive-700',\n 'hover:bg-destructive-800',\n 'text-destructive-500',\n 'text-destructive-600',\n 'text-destructive-700',\n 'text-destructive-800',\n 'text-destructive-900',\n 'border-destructive-200',\n 'border-destructive-300',\n 'dark:bg-destructive-900',\n 'dark:bg-destructive-950',\n 'dark:text-destructive-300',\n 'dark:text-destructive-400',\n // Success scale\n 'bg-success-50',\n 'bg-success-100',\n 'bg-success-500',\n 'bg-success-600',\n 'bg-success-700',\n 'hover:bg-success-800',\n 'text-success-500',\n 'text-success-600',\n 'text-success-700',\n 'text-success-800',\n 'text-success-900',\n 'border-success-200',\n 'border-success-300',\n 'dark:bg-success-900',\n 'dark:bg-success-950',\n 'dark:text-success-300',\n 'dark:text-success-400',\n // Warning scale\n 'bg-warning-50',\n 'bg-warning-100',\n 'bg-warning-500',\n 'bg-warning-600',\n 'bg-warning-700',\n 'text-warning-900',\n 'text-warning-500',\n 'text-warning-600',\n 'text-warning-700',\n 'text-warning-800',\n 'text-warning-900',\n 'border-warning-200',\n 'border-warning-300',\n 'dark:bg-warning-900',\n 'dark:bg-warning-950',\n 'dark:text-warning-200',\n 'dark:text-warning-300',\n 'dark:text-warning-400',\n // Info scale\n 'bg-info-50',\n 'bg-info-100',\n 'bg-info-500',\n 'bg-info-600',\n 'text-info-500',\n 'text-info-600',\n 'text-info-700',\n 'text-info-800',\n 'text-info-900',\n 'border-info-200',\n 'border-info-300',\n 'dark:bg-info-900',\n 'dark:bg-info-950',\n 'dark:text-info-300',\n 'dark:text-info-400',\n // Chart colors\n 'bg-chart-1',\n 'bg-chart-2',\n 'bg-chart-3',\n 'bg-chart-4',\n 'bg-chart-5',\n 'text-chart-1',\n 'text-chart-2',\n 'text-chart-3',\n 'text-chart-4',\n 'text-chart-5',\n 'border-chart-1',\n 'border-chart-2',\n 'border-chart-3',\n 'border-chart-4',\n 'border-chart-5',\n // Switch component\n 'bg-primary-500',\n // Primary scale (a11y contrast)\n 'text-primary-800',\n 'dark:text-primary-300',\n // Text decoration\n 'underline',\n 'h-5',\n 'w-9',\n 'h-6',\n 'w-11',\n 'h-7',\n 'w-14',\n 'h-4',\n 'w-4',\n 'w-5',\n 'w-6',\n 'translate-x-0.5',\n 'translate-x-4',\n 'translate-x-5',\n 'translate-x-7',\n // RTL primitives batch: Badge/Input/Label icon+required markers, Text\n // logical alignment, Switch thumb travel (LTR data-state pairs + rtl mirror)\n 'me-1',\n 'ms-0.5',\n 'ms-1',\n 'text-start',\n 'text-end',\n 'data-[state=checked]:translate-x-4',\n 'data-[state=checked]:translate-x-5',\n 'data-[state=checked]:translate-x-7',\n 'rtl:-translate-x-0.5',\n 'rtl:data-[state=checked]:-translate-x-4',\n 'rtl:data-[state=checked]:-translate-x-5',\n 'rtl:data-[state=checked]:-translate-x-7',\n // RTL layout+nav batch: AppHeader alignment, Card accent/badge positions,\n // Sheet sides, Sidebar off-canvas + paddings, Table cell alignment\n 'me-auto',\n 'ms-auto',\n '-end-1',\n 'start-0',\n 'end-0',\n 'ps-4',\n 'start-2',\n 'end-2',\n 'border-e',\n 'border-s',\n 'me-3',\n 'ms-2',\n 'ps-2',\n '-me-2',\n '-end-3',\n 'start-3',\n 'pe-4',\n 'ps-10',\n 'rtl:translate-x-full',\n 'translate-x-0',\n '-translate-x-full',\n '[&:has([role=checkbox])]:pe-0',\n // RTL messaging+AI batch: bubble tails, composer borders/paddings, corner\n // pins (AIChatModal/AttachmentPicker/MessageList), read-receipt avatar stack\n 'end-1',\n 'end-3',\n 'end-4',\n 'start-4',\n 'me-2',\n 'pe-10',\n 'border-s-4',\n 'rounded-ee-md',\n 'rounded-es-md',\n 'rtl:space-x-reverse',\n // RTL DocScanner+media batch: detection-overlay corner pins, MediaEditor\n // speed-marker accent/pill, ScriptPanel border, transcript alignment\n '-end-0.5',\n '-start-0.5',\n '-start-1',\n 'end-0.5',\n 'rounded-ee',\n 'rounded-ee-lg',\n 'rounded-es',\n 'rounded-es-lg',\n 'rounded-se',\n 'rounded-se-lg',\n 'rounded-ss',\n 'rounded-ss-lg',\n 'border-e-4',\n 'border-s-[3px]',\n 'border-s-warning',\n 'border-s-primary-500',\n 'ps-1.5',\n '-start-px',\n 'md:border-e',\n // RTL billing+invoices batch: invoice tables/headers, search icon inset,\n // button spinners\n '-ms-1',\n 'ps-9',\n 'sm:text-end',\n // RTL services+employer batch: wizard steps, accordion insets, provider\n // selectors, service cards/badges\n 'border-s-0',\n 'border-s-2',\n 'ms-1.5',\n 'ms-3',\n 'ms-4',\n 'ms-6',\n 'pe-3',\n 'pe-8',\n 'pe-16',\n 'ps-0',\n 'ps-3',\n 'ps-7',\n 'ps-8',\n 'rounded-s-md',\n 'rounded-e-md',\n 'bg-right',\n 'rtl:bg-left',\n // RTL scheduling+clinical batch: calendar insets, timeline dots, order forms\n '-start-5',\n 'border-e-0',\n 'md:border-s',\n 'ms-2.5',\n 'pe-2',\n 'ps-1',\n 'ps-6',\n 'rounded-s-none',\n 'start-1',\n 'first:border-s-0',\n 'rtl:origin-right',\n // RTL Phase 2: Toast slide-in animation + RTL mirror\n 'animate-slide-in-right',\n 'rtl:animate-slide-in-left',\n // Motion CSS fallbacks — applied by `<Animated>` only when no motion runtime\n // is active, so the scanner never sees them on a literal element.\n 'animate-fade-in',\n // Scale origin for anchored menus, picked at runtime from the post-flip side.\n 'origin-top',\n 'origin-bottom',\n 'origin-left',\n 'origin-right',\n // RTL Phase 2: directional icon mirroring (chevrons/arrows)\n 'rtl:-scale-x-100',\n // RTL shell/misc batch: command palette, site chrome, superchat, toolbars\n 'end-12',\n 'md:end-4',\n 'md:start-auto',\n 'md:text-start',\n 'me-1.5',\n 'pe-12',\n 'pointer-fine:end-0',\n 'pointer-fine:end-1.5',\n 'ps-11',\n 'ps-12',\n 'rounded-e-lg',\n 'rounded-s-lg',\n 'sm:text-start',\n 'start-5',\n // SchedulePicker / overflow handling\n 'overflow-x-auto',\n 'overflow-hidden',\n // Scrollable floating panels (DateInput calendar, Autocomplete, Select, Table, ScrollArea, …)\n 'overflow-auto',\n // Select component\n 'truncate',\n // AIReconciliationPanel\n 'ring-primary-200',\n 'dark:ring-primary-900',\n 'border-primary-300',\n 'dark:border-primary-700',\n 'bg-primary-50/60',\n 'dark:bg-primary-950/30',\n 'text-primary-700',\n 'dark:text-primary-400',\n 'border-border/60',\n 'bg-muted/40',\n 'bg-muted/60',\n 'divide-border',\n 'max-h-[60vh]',\n 'bg-success-100',\n 'dark:bg-success-900/30',\n 'bg-amber-100',\n 'bg-amber-200',\n 'text-amber-700',\n 'text-amber-800',\n 'text-amber-200',\n 'text-amber-300',\n 'dark:bg-amber-900/30',\n 'dark:bg-amber-900/40',\n 'dark:text-amber-200',\n 'dark:text-amber-300',\n 'ring-1',\n 'last:border-b-0',\n 'border-dashed',\n 'text-[11px]',\n // CodeLookup memory picklist (frequently-used pick count)\n 'text-primary-600',\n // CodeLookup coding-system toggle (segmented radiogroup pills)\n 'flex',\n 'flex-wrap',\n 'items-center',\n 'gap-1',\n 'rounded-full',\n 'px-2.5',\n 'py-0.5',\n 'text-xs',\n 'transition-colors',\n 'focus:ring-2',\n 'focus:outline-none',\n 'border-primary-800',\n 'dark:border-primary-400',\n 'dark:bg-primary-400',\n 'dark:text-primary-950',\n 'text-white',\n 'hover:text-foreground',\n // CollabStatus debug panel (fixed-width portal, definition grid, log grid)\n 'w-[26rem]',\n 'max-w-[calc(100vw-1rem)]',\n 'grid-cols-[auto_1fr]',\n 'grid-cols-[auto_auto_1fr]',\n // SuperChat (participant chips, unread badge, active/hover states)\n 'bg-primary-100',\n 'bg-primary-600',\n 'hover:bg-primary-700',\n 'dark:bg-primary-900/40',\n 'text-primary-900',\n 'dark:text-primary-100',\n 'dark:text-primary-200',\n 'hover:border-primary-300',\n 'focus:border-primary-500',\n 'focus:ring-primary-500',\n 'text-[10px]',\n // SuperChat message actions (footer bar + sticky overflow menu) — arbitrary\n // touch-pointer variants and stacking above rich content (z-50 internals),\n // plus the standard utilities of the sticky wrapper and its footer handoff\n // (`invisible` keeps the hidden trigger out of the tab order).\n '[@media(pointer:coarse)]:opacity-100',\n 'z-[60]',\n 'z-10',\n 'invisible',\n 'transition-opacity',\n 'bottom-2',\n 'self-end',\n // Dropdown submenu flyout — preferred width clamped to the viewport.\n 'min-w-[min(10rem,calc(100vw-1rem))]',\n // SuperChat mermaid diagram wrapper — arbitrary variants applied to the\n // injected <svg> so the diagram sizes naturally instead of collapsing.\n '[&_svg]:h-auto',\n '[&_svg]:max-w-none',\n // AI pills — CollapsiblePill / MCPToolCall arbitrary utilities\n 'rounded-[8px]',\n 'rounded-[10px]',\n 'px-[11px]',\n 'max-h-0',\n 'max-h-[500px]',\n 'transition-[max-height,opacity]',\n 'overflow-y-auto',\n 'focus-visible:ring-ring',\n 'focus-visible:ring-offset-1',\n // ThinkingBlock (violet reasoning pill)\n 'bg-violet-50',\n 'bg-violet-500',\n 'border-violet-200',\n 'text-violet-600',\n 'hover:bg-violet-100',\n 'focus-visible:ring-violet-500',\n 'animate-pulse',\n 'text-[13px]',\n 'dark:bg-violet-400',\n 'dark:bg-violet-950/30',\n 'dark:border-violet-700',\n 'dark:border-violet-800',\n 'dark:hover:bg-violet-950/50',\n 'dark:text-violet-400',\n // MCPToolCall status pills (green success / red error kept the same)\n 'bg-green-50',\n 'border-green-200',\n 'text-green-700',\n 'dark:bg-green-900/20',\n 'dark:border-green-800',\n 'dark:text-green-300',\n 'bg-red-50',\n 'border-red-200',\n 'text-red-700',\n 'dark:bg-red-900/20',\n 'dark:border-red-800',\n 'dark:text-red-300',\n 'bg-neutral-100',\n 'border-neutral-200',\n 'text-neutral-600',\n 'text-neutral-400',\n 'dark:bg-neutral-800',\n 'dark:border-neutral-700',\n 'dark:text-neutral-400',\n 'bg-primary-50',\n 'border-primary-200',\n 'text-primary-800',\n 'dark:bg-primary-900/20',\n 'dark:border-primary-800',\n 'dark:text-primary-300',\n 'opacity-60',\n // Kbd / KeyboardShortcutsOverlay — key chips and shortcut rows\n 'px-1.5',\n 'font-mono',\n 'mx-0.5',\n 'list-none',\n // FilterSummaryBar — filtered-grid summary bar and clear action\n 'py-1',\n 'h-2.5',\n 'w-2.5',\n 'dark:hover:text-primary-200',\n 'focus-visible:ring-offset-2',\n // Sparkline — bar sizing, gaps, and hover tints (bg-primary-500/40 and\n // focus-visible:ring-offset-1 are already safelisted above)\n 'min-w-[3px]',\n 'gap-[2px]',\n 'hover:bg-primary-500/70',\n 'hover:bg-primary-500/90',\n 'hover:bg-muted-foreground/20',\n 'items-end',\n 'w-16',\n 'pb-0.5',\n 'leading-tight',\n 'tracking-wider',\n 'rounded-sm',\n 'cursor-pointer',\n // ClampedText — collapsed clamp levels and fade gradient\n 'line-clamp-2',\n 'line-clamp-3',\n 'line-clamp-4',\n 'line-clamp-5',\n 'line-clamp-6',\n 'line-clamp-7',\n 'line-clamp-8',\n 'bg-gradient-to-t',\n 'from-card',\n 'from-background',\n 'to-transparent',\n 'break-words',\n 'whitespace-pre-wrap',\n 'hover:underline',\n // FreshnessBadge / FreshnessDot — tinted level chips and dots\n 'dark:bg-success/20',\n 'bg-warning/15',\n 'dark:bg-warning/20',\n 'dark:text-warning',\n 'dark:bg-destructive/20',\n 'bg-muted-foreground/50',\n 'h-2',\n 'w-2',\n 'inline-block',\n 'dark:text-success',\n 'dark:text-destructive',\n // Accordion — grid-rows height animation (arbitrary values TW3 won't scan)\n 'transition-[grid-template-rows]',\n 'grid-rows-[0fr]',\n 'grid-rows-[1fr]',\n 'disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'divide-y',\n 'first:rounded-t-lg',\n 'focus-visible:outline-none',\n 'focus-visible:ring-inset',\n 'gap-3',\n 'grid',\n 'hover:bg-muted/60',\n 'last:rounded-b-lg',\n 'pb-4',\n 'px-5',\n 'py-4',\n 'rotate-180',\n 'transition-transform',\n // GlossaryTooltip hover card — trigger reset, gradient header, chips, footer links\n '[font:inherit]',\n 'appearance-none',\n 'bg-transparent',\n 'bg-white/15',\n 'block',\n 'border-0',\n 'border-t',\n 'dark:hover:text-primary-400',\n 'font-bold',\n 'font-medium',\n 'font-normal',\n 'gap-1.5',\n 'h-3',\n 'hover:border-primary-400',\n 'hover:text-primary-700',\n 'hover:text-primary-800',\n 'inline',\n 'inline-flex',\n 'items-start',\n 'leading-relaxed',\n 'leading-snug',\n 'mb-1',\n 'mt-2',\n 'normal-case',\n 'outline-none',\n 'p-0',\n 'px-2',\n 'text-inherit',\n 'text-white/70',\n 'tracking-normal',\n 'w-3',\n 'z-50',\n\n // SourceTip hover card — trigger affordance, gradient header, ring, scroll cap\n 'cursor-help',\n 'hover:text-primary-500',\n 'dark:hover:text-primary-300',\n 'w-80',\n 'decoration-dashed',\n 'decoration-primary-400/70',\n 'bg-primary-400',\n 'underline-offset-4',\n 'bg-gradient-to-br',\n 'from-primary-700',\n 'to-primary-600',\n 'ring-black/5',\n 'dark:ring-white/10',\n 'ring-1',\n 'overflow-y-auto',\n 'focus-visible:ring-2',\n 'max-h-52',\n 'text-primary-100/90',\n 'text-[10px]',\n 'text-[11px]',\n 'text-[13px]',\n 'px-3.5',\n 'py-2.5',\n 'mt-2.5',\n 'pt-2.5',\n 'mt-0.5',\n 'mt-1.5',\n 'h-1.5',\n 'w-1.5',\n 'border-dashed',\n 'shadow-xl',\n // CopyButton — inline copy-to-clipboard button\n 'p-1',\n\n // ReadingProgressBar — fixed top rail and width-transition fill\n 'inset-x-0',\n 'h-1',\n 'transition-[width]',\n 'duration-150',\n\n // Sidebar — desktop collapse animates the inline size only\n 'transition-[width,min-width]',\n\n // SectionSpyNav — sticky rail, brand tone whites, sliding underline\n 'sticky',\n 'top-0',\n 'z-30',\n 'bg-primary-900',\n 'bg-card/95',\n 'backdrop-blur',\n 'gap-4',\n 'px-4',\n 'shrink-0',\n 'tracking-wide',\n 'uppercase',\n 'text-white/85',\n '[scrollbar-width:none]',\n '[&::-webkit-scrollbar]:hidden',\n 'rounded',\n 'py-2',\n 'whitespace-nowrap',\n // Button label — keep SVG icons passed as children inline (preflight\n // makes SVGs block-level, which would stack them above the label text)\n '[&_svg]:inline-block',\n '[&_svg]:align-middle',\n // Button `effect` variants (sheen/orbit) lift the button on hover; the\n // mie-fx-* classes themselves are plain CSS in styles/effects.css.\n 'hover:-translate-y-0.5',\n // VideoCard hover-preview progress bar rounds its leading-fill edge.\n 'rounded-e-full',\n 'hover:text-white',\n 'h-0.5',\n 'transition-[left,width]',\n 'duration-300',\n 'hover:bg-white/10',\n 'h-3.5',\n 'w-3.5',\n // CustomizableDashboard — responsive column grid, flattened columns,\n // drag handle, drop placeholder\n 'grid-cols-1',\n 'md:grid-cols-2',\n 'lg:grid-cols-3',\n 'max-lg:contents',\n 'max-md:hidden',\n 'min-h-16',\n 'min-h-32',\n 'cursor-grab',\n 'active:cursor-grabbing',\n 'touch-none',\n 'opacity-40',\n 'group-hover/portlet:opacity-100',\n 'focus-visible:opacity-100',\n '[@media(hover:none)]:opacity-100',\n 'group/portlet',\n '[&>:nth-child(2)]:ms-auto',\n 'flex-nowrap',\n 'bg-card/80',\n 'border-dashed',\n 'border-2',\n 'bg-primary-500/10',\n // Modules/Views — accentClasses resolves an Accent token name to a wash, a\n // border and a solid marker, so none of them appear literally in a\n // consumer's own source. The wash and marker classes are listed elsewhere in\n // this file; these borders and the neutral marker are not.\n 'border-primary-500/40',\n 'border-success/40',\n 'border-warning/40',\n 'border-destructive/40',\n 'border-info/40',\n 'bg-muted-foreground',\n 'gap-0.5',\n 'p-0.5',\n // Floating labels (labelVariant=\"floating\" on Input / Textarea / DateInput /\n // Select, ui#406). The peer-* float states, arbitrary font size, and the\n // taller field heights/paddings never appear in consumer markup, so TW3\n // would purge them. (The bare `peer` marker class generates no CSS and\n // needs no safelisting.)\n 'placeholder:text-transparent',\n 'relative',\n 'h-11',\n 'h-14',\n 'h-16',\n 'pt-4',\n 'pt-5',\n 'pt-6',\n 'pt-7',\n 'pb-1',\n 'pb-1.5',\n 'pb-2',\n 'min-h-[76px]',\n 'min-h-[96px]',\n 'min-h-[120px]',\n // Floating-group field boxes (labelVariant=\"floating\" on RadioGroup /\n // CheckboxGroup) share the floating input heights as min-heights. sr-only\n // visually hides the group legend (and the hideLabel input label) while\n // keeping it accessible. mb-1.5 spaces stacked legends (legends ignore\n // fieldset flex gap) and mt-1 spaces floating-group descriptions.\n 'min-h-11',\n 'min-h-14',\n 'min-h-16',\n 'sr-only',\n 'mb-1.5',\n 'mt-1',\n 'absolute',\n 'pointer-events-none',\n 'select-none',\n 'transition-all',\n 'duration-200',\n 'ease-out',\n 'top-0.5',\n 'top-1',\n 'top-1.5',\n 'top-2',\n 'top-3',\n 'top-4',\n 'top-5',\n 'top-1/2',\n '-translate-y-1/2',\n 'translate-y-0',\n 'text-sm',\n 'text-base',\n 'text-lg',\n 'text-[0.65rem]',\n 'peer-focus:top-0.5',\n 'peer-focus:top-1',\n 'peer-focus:top-1.5',\n 'peer-focus:top-2',\n 'peer-focus:text-[0.65rem]',\n 'peer-focus:text-xs',\n 'peer-focus:text-sm',\n 'peer-focus:translate-y-0',\n 'peer-[:not(:placeholder-shown)]:top-0.5',\n 'peer-[:not(:placeholder-shown)]:top-1',\n 'peer-[:not(:placeholder-shown)]:top-1.5',\n 'peer-[:not(:placeholder-shown)]:top-2',\n 'peer-[:not(:placeholder-shown)]:text-[0.65rem]',\n 'peer-[:not(:placeholder-shown)]:text-xs',\n 'peer-[:not(:placeholder-shown)]:text-sm',\n 'peer-[:not(:placeholder-shown)]:translate-y-0',\n 'peer-autofill:top-0.5',\n 'peer-autofill:top-1',\n 'peer-autofill:top-1.5',\n 'peer-autofill:top-2',\n 'peer-autofill:text-[0.65rem]',\n 'peer-autofill:text-xs',\n 'peer-autofill:text-sm',\n 'peer-autofill:translate-y-0',\n // DockablePanel — full-screen dialog that collapses to a bottom-right dock:\n // scrim, dock geometry, panel chrome, clipped full-width content\n 'fixed',\n 'inset-0',\n 'inset-6',\n 'inset-auto',\n 'bg-slate-900/45',\n 'end-0',\n 'end-6',\n 'bottom-0',\n 'top-full',\n 'w-full',\n 'h-full',\n 'w-[26rem]',\n 'max-w-[calc(100vw-3rem)]',\n 'max-w-[90rem]',\n 'w-[min(90rem,100vw-3rem)]',\n 'h-[calc(100vh-4rem)]',\n 'max-sm:inset-0',\n 'max-sm:inset-x-0',\n 'max-sm:w-full',\n 'max-sm:w-screen',\n 'max-sm:max-w-full',\n 'shadow-[0_1.25rem_2.5rem_rgb(15_23_42/0.22)]',\n 'rounded-lg',\n 'rounded-t-lg',\n 'border',\n 'border-b',\n 'border-b-0',\n 'flex',\n 'flex-1',\n 'flex-col',\n 'relative',\n 'absolute',\n 'items-center',\n 'justify-center',\n 'justify-between',\n 'gap-1',\n 'gap-2',\n 'px-3',\n 'py-2.5',\n 'm-0',\n 'min-h-0',\n 'min-w-0',\n 'text-sm',\n 'text-[0.9375rem]',\n 'font-semibold',\n 'capitalize',\n 'sr-only',\n // ChatComposer responsive grid: stacked cells below md, single-row pill\n // (md: overrides) above, plus the card surface\n 'grid-cols-[auto_minmax(0,1fr)_auto]',\n 'col-span-3',\n 'col-start-1',\n 'col-start-3',\n 'row-start-1',\n 'row-start-2',\n 'px-1',\n 'pt-1',\n 'pt-2',\n 'pb-1',\n 'rounded-2xl',\n 'dark:bg-[#1c1c1e]',\n 'dark:border-[#2e2e30]',\n 'md:col-span-1',\n 'md:col-start-2',\n 'md:row-start-1',\n 'md:self-end',\n 'md:p-1.5',\n 'md:py-1.5',\n 'md:px-0',\n 'md:pe-0.5',\n 'md:ps-0.5',\n 'md:gap-0.5',\n // EH frontdoor ports (ui#420) — arbitrary values, opacity modifiers, and\n // variants emitted by MegaMenu / VideoCard / YearTimeline / SliderCalculator /\n // OrbitRing / RadialExplorer / Globe that TW3 consumers can't generate.\n // Shared positioning & typography\n '-translate-x-1/2',\n '-translate-y-1/2',\n 'left-1/2',\n 'top-1/2',\n 'tabular-nums',\n 'aspect-square',\n 'aspect-video',\n 'backdrop-blur-md',\n // SiteHeader mobile drawer — static group labels reuse the link style\n 'hover:bg-transparent',\n // MegaMenu — panel layout, feature column gradient, link states\n '[&_svg]:h-4',\n '[&_svg]:h-5',\n '[&_svg]:h-7',\n '[&_svg]:w-4',\n '[&_svg]:w-5',\n '[&_svg]:w-7',\n '[background:linear-gradient(160deg,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-700))_70%,#000)_0%,var(--mieweb-primary-950)_100%)]',\n 'grid-cols-[1fr_280px]',\n 'w-[min(600px,calc(100vw-2rem))]',\n 'w-[min(880px,calc(100vw-2rem))]',\n 'transition-[opacity,transform]',\n 'motion-safe:animate-[mie-fade-in_0.2s_ease-out]',\n 'bg-white/10',\n 'border-white/40',\n 'text-foreground/70',\n 'text-foreground/80',\n 'text-white/80',\n 'text-white/90',\n 'hover:bg-primary-500/10',\n 'hover:bg-primary-900',\n 'hover:border-primary-500',\n 'hover:border-white',\n 'group-hover:bg-primary-800',\n 'group-hover:text-primary-800',\n 'group-hover:text-white',\n 'dark:group-hover:text-primary-200',\n 'focus-visible:bg-primary-500/10',\n // VideoCard — hover-preview conic progress ring and play button\n '[-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[background:conic-gradient(from_0deg,transparent_0deg,var(--mieweb-primary-500)_90deg,var(--mieweb-primary-300)_240deg,var(--mieweb-primary-200)_320deg,transparent_360deg)]',\n 'drop-shadow-[0_0_5px_color-mix(in_srgb,var(--mieweb-primary-400)_60%,transparent)]',\n 'bg-white/90',\n 'group-hover:opacity-100',\n 'group-hover:scale-110',\n 'group-focus-visible:opacity-100',\n 'motion-safe:animate-[mie-spin_1.4s_linear_infinite]',\n // YearTimeline — spine gradient, markers, responsive label rail\n 'grid-cols-12',\n 'md:grid',\n 'md:grid-cols-[var(--yt-label)_1fr]',\n 'md:block',\n 'md:inline',\n 'md:pb-4',\n 'md:py-3.5',\n 'md:h-[22px]',\n 'md:border-border/60',\n 'before:absolute',\n 'before:content-[\"\"]',\n 'before:inset-x-0',\n 'before:top-0',\n 'before:left-1/2',\n 'before:-translate-x-1/2',\n 'before:h-1',\n 'before:h-2.5',\n 'before:w-2.5',\n 'before:rounded-full',\n 'before:bg-primary-700',\n 'before:z-[4]',\n 'before:[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-400))_0%,var(--mieweb-primary-500)_50%,var(--mieweb-success)_80%,var(--mieweb-accent,var(--mieweb-primary-400))_100%)]',\n '[background:linear-gradient(180deg,var(--mieweb-primary-700),color-mix(in_srgb,var(--mieweb-primary-700)_15%,transparent))]',\n '[&_svg]:h-3.5',\n '[&_svg]:w-3.5',\n '[text-shadow:0_1px_1px_rgba(0,0,0,0.3)]',\n 'bg-muted/30',\n 'border-border/60',\n 'hover:bg-muted/40',\n 'text-[9px]',\n 'tracking-[0.08em]',\n 'tracking-[0.09em]',\n 'tracking-[0.11em]',\n 'tracking-[0.12em]',\n 'z-[1]',\n 'z-[3]',\n 'z-[5]',\n // SliderCalculator — dark panel gradients and glassy rows\n '[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-300))]',\n '[background:radial-gradient(120%_120%_at_100%_0%,var(--mieweb-primary-800),var(--mieweb-primary-950)_70%)]',\n 'lg:grid-cols-[1.1fr_1fr]',\n 'sm:p-8',\n 'sm:text-3xl',\n 'sm:text-6xl',\n 'bg-white/5',\n 'border-white/10',\n 'border-white/15',\n 'text-white/60',\n 'text-white/75',\n 'last:border-0',\n // OrbitRing — attract-loop rotation, pause-on-hover, glow ring\n 'group/orbit',\n 'group/sat',\n '[container-type:size]',\n 'motion-safe:animate-[mie-spin_var(--dur)_linear_infinite]',\n 'group-hover/orbit:[animation-play-state:paused]',\n 'group-focus-within/orbit:[animation-play-state:paused]',\n '[background:radial-gradient(circle_at_50%_38%,#fff_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_14%,#fff)_52%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_30%,#fff)_100%)]',\n '[background:radial-gradient(closest-side,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_30%,transparent)_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_12%,transparent)_42%,transparent_78%)]',\n 'shadow-[0_0_0_1px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_35%,transparent),0_10px_30px_rgba(0,0,0,0.18),0_0_46px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_42%,transparent)]',\n 'dark:border-primary-800',\n // RadialExplorer — dot navigation and reveal animation\n 'motion-safe:animate-[mie-fade-in_0.25s_ease-out]',\n 'text-[15px]',\n 'tracking-[0.14em]',\n // Globe — HTML overlay chrome (TW3 consumers using the /globe entry)\n 'bg-[var(--mieweb-accent,#ffe7b0)]',\n 'shadow-[0_0_8px_var(--mieweb-accent,#ffe7b0)]',\n 'bg-neutral-950/70',\n 'max-w-[min(90%,360px)]',\n 'motion-safe:animate-[mie-fade-in_0.28s_ease]',\n // RadialExplorer / VideoCard / SliderCalculator stragglers\n 'tracking-[0.18em]',\n 'tracking-tight',\n 'start-1/2',\n 'w-[calc(var(--re-r)*2+120px)]',\n 'bg-[linear-gradient(90deg,var(--mieweb-primary-500),var(--mieweb-primary-300))]',\n 'bg-black/55',\n 'bg-black/60',\n 'group-hover:text-primary-700',\n 'dark:group-hover:text-primary-300',\n // SiteHeader — menus/MegaMenuBar row and mobile drawer (touched in ui#420)\n 'bg-black/50',\n 'bg-white/20',\n 'bg-white/80',\n 'border-white/30',\n 'hover:bg-white/90',\n 'hover:bg-gray-100',\n 'hover:bg-red-50',\n 'hover:text-gray-700',\n 'hover:text-gray-900',\n 'max-h-[calc(100dvh-10rem)]',\n 'md:flex',\n 'sm:block',\n 'dark:border-b',\n 'dark:bg-gray-800',\n 'dark:bg-gray-900',\n 'dark:bg-gray-900/80',\n 'dark:bg-primary-900/30',\n 'dark:border-gray-600',\n 'dark:border-gray-700',\n 'dark:border-gray-800',\n 'dark:hover:bg-gray-700',\n 'dark:hover:bg-gray-800',\n 'dark:hover:bg-red-900/20',\n 'dark:hover:text-gray-200',\n 'dark:hover:text-white',\n 'dark:text-gray-300',\n 'dark:text-red-400',\n 'dark:text-white',\n // Badge usages added in ui#420 (VideoCard duration pill, RadialExplorer tag)\n 'dark:bg-black/60',\n 'bg-primary-100',\n 'text-primary-900',\n 'dark:bg-primary-900',\n 'dark:text-primary-100',\n];\n\nexport interface MiewebUIPreset {\n darkMode: ['class', '[data-theme=\"dark\"]'];\n safelist: string[];\n theme: {\n extend: Record<string, unknown>;\n };\n}\n\nexport const miewebUIPreset: MiewebUIPreset = {\n darkMode: ['class', '[data-theme=\"dark\"]'],\n safelist: miewebUISafelist,\n theme: {\n extend: {\n colors: {\n // Primary color scale - easily overridable by consumers\n primary: {\n DEFAULT: 'var(--mieweb-primary, var(--mieweb-primary-500, #27aae1))',\n 50: 'var(--mieweb-primary-50, #e6f7fc)',\n 100: 'var(--mieweb-primary-100, #b3e6f6)',\n 200: 'var(--mieweb-primary-200, #80d5f0)',\n 300: 'var(--mieweb-primary-300, #4dc4ea)',\n 400: 'var(--mieweb-primary-400, #27aae1)',\n 500: 'var(--mieweb-primary-500, #27aae1)',\n 600: 'var(--mieweb-primary-600, #1f98ca)',\n 700: 'var(--mieweb-primary-700, #1786b3)',\n 800: 'var(--mieweb-primary-800, #0f749c)',\n 900: 'var(--mieweb-primary-900, #086285)',\n 950: 'var(--mieweb-primary-950, #00506e)',\n foreground: 'var(--mieweb-primary-foreground, hsl(210 40% 98%))',\n },\n // Ozwell brand accent (the \"Hey Ozwell\" octopus blue) — distinct from the host app primary.\n ozwell: {\n DEFAULT: 'var(--mieweb-ozwell, #0BA0E0)',\n foreground: 'var(--mieweb-ozwell-foreground, hsl(0 0% 100%))',\n },\n // Secondary color scale\n secondary: {\n DEFAULT: 'var(--mieweb-secondary-500, #6366f1)',\n 50: 'var(--mieweb-secondary-50, #eef2ff)',\n 100: 'var(--mieweb-secondary-100, #e0e7ff)',\n 200: 'var(--mieweb-secondary-200, #c7d2fe)',\n 300: 'var(--mieweb-secondary-300, #a5b4fc)',\n 400: 'var(--mieweb-secondary-400, #818cf8)',\n 500: 'var(--mieweb-secondary-500, #6366f1)',\n 600: 'var(--mieweb-secondary-600, #4f46e5)',\n 700: 'var(--mieweb-secondary-700, #4338ca)',\n 800: 'var(--mieweb-secondary-800, #3730a3)',\n 900: 'var(--mieweb-secondary-900, #312e81)',\n 950: 'var(--mieweb-secondary-950, #1e1b4b)',\n foreground: 'var(--mieweb-secondary-foreground, #ffffff)',\n },\n // Neutral / gray scale\n neutral: {\n DEFAULT: 'var(--mieweb-neutral-500, #737373)',\n 50: 'var(--mieweb-neutral-50, #fafafa)',\n 100: 'var(--mieweb-neutral-100, #f5f5f5)',\n 200: 'var(--mieweb-neutral-200, #e5e5e5)',\n 300: 'var(--mieweb-neutral-300, #d4d4d4)',\n 400: 'var(--mieweb-neutral-400, #a3a3a3)',\n 500: 'var(--mieweb-neutral-500, #737373)',\n 600: 'var(--mieweb-neutral-600, #525252)',\n 700: 'var(--mieweb-neutral-700, #404040)',\n 800: 'var(--mieweb-neutral-800, #262626)',\n 900: 'var(--mieweb-neutral-900, #171717)',\n 950: 'var(--mieweb-neutral-950, #0a0a0a)',\n },\n // Semantic colors using CSS variables for theming\n border: 'var(--mieweb-border, hsl(214.3 31.8% 91.4%))',\n input: 'var(--mieweb-input, hsl(214.3 31.8% 91.4%))',\n ring: 'var(--mieweb-ring, hsl(221.2 83.2% 53.3%))',\n background: 'var(--mieweb-background, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-foreground, hsl(222.2 84% 4.9%))',\n // Component-specific semantic colors\n card: {\n DEFAULT: 'var(--mieweb-card, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-card-foreground, hsl(222.2 84% 4.9%))',\n },\n muted: {\n DEFAULT: 'var(--mieweb-muted, hsl(210 40% 96.1%))',\n foreground: 'var(--mieweb-muted-foreground, hsl(215.4 16.3% 46.9%))',\n },\n // Destructive / error scale\n destructive: {\n DEFAULT:\n 'var(--mieweb-destructive, var(--mieweb-destructive-500, #dc2626))',\n 50: 'var(--mieweb-destructive-50, #fef2f2)',\n 100: 'var(--mieweb-destructive-100, #fee2e2)',\n 200: 'var(--mieweb-destructive-200, #fecaca)',\n 300: 'var(--mieweb-destructive-300, #fca5a5)',\n 400: 'var(--mieweb-destructive-400, #f87171)',\n 500: 'var(--mieweb-destructive-500, #dc2626)',\n 600: 'var(--mieweb-destructive-600, #dc2626)',\n 700: 'var(--mieweb-destructive-700, #b91c1c)',\n 800: 'var(--mieweb-destructive-800, #991b1b)',\n 900: 'var(--mieweb-destructive-900, #7f1d1d)',\n 950: 'var(--mieweb-destructive-950, #450a0a)',\n foreground: 'var(--mieweb-destructive-foreground, hsl(210 40% 98%))',\n },\n // Success scale\n success: {\n DEFAULT: 'var(--mieweb-success-500, #22c55e)',\n 50: 'var(--mieweb-success-50, #f0fdf4)',\n 100: 'var(--mieweb-success-100, #dcfce7)',\n 200: 'var(--mieweb-success-200, #bbf7d0)',\n 300: 'var(--mieweb-success-300, #86efac)',\n 400: 'var(--mieweb-success-400, #4ade80)',\n 500: 'var(--mieweb-success-500, #22c55e)',\n 600: 'var(--mieweb-success-600, #16a34a)',\n 700: 'var(--mieweb-success-700, #15803d)',\n 800: 'var(--mieweb-success-800, #166534)',\n 900: 'var(--mieweb-success-900, #14532d)',\n 950: 'var(--mieweb-success-950, #052e16)',\n foreground: 'var(--mieweb-success-foreground, hsl(355.7 100% 97.3%))',\n },\n // Warning scale\n warning: {\n DEFAULT: 'var(--mieweb-warning-500, #f59e0b)',\n 50: 'var(--mieweb-warning-50, #fffbeb)',\n 100: 'var(--mieweb-warning-100, #fef3c7)',\n 200: 'var(--mieweb-warning-200, #fde68a)',\n 300: 'var(--mieweb-warning-300, #fcd34d)',\n 400: 'var(--mieweb-warning-400, #fbbf24)',\n 500: 'var(--mieweb-warning-500, #f59e0b)',\n 600: 'var(--mieweb-warning-600, #d97706)',\n 700: 'var(--mieweb-warning-700, #b45309)',\n 800: 'var(--mieweb-warning-800, #92400e)',\n 900: 'var(--mieweb-warning-900, #78350f)',\n 950: 'var(--mieweb-warning-950, #451a03)',\n foreground: 'var(--mieweb-warning-foreground, hsl(26 83.3% 14.1%))',\n },\n // Info scale\n info: {\n DEFAULT: 'var(--mieweb-info-500, #0ea5e9)',\n 50: 'var(--mieweb-info-50, #f0f9ff)',\n 100: 'var(--mieweb-info-100, #e0f2fe)',\n 200: 'var(--mieweb-info-200, #bae6fd)',\n 300: 'var(--mieweb-info-300, #7dd3fc)',\n 400: 'var(--mieweb-info-400, #38bdf8)',\n 500: 'var(--mieweb-info-500, #0ea5e9)',\n 600: 'var(--mieweb-info-600, #0284c7)',\n 700: 'var(--mieweb-info-700, #0369a1)',\n 800: 'var(--mieweb-info-800, #075985)',\n 900: 'var(--mieweb-info-900, #0c4a6e)',\n 950: 'var(--mieweb-info-950, #082f49)',\n foreground: 'var(--mieweb-info-foreground, #ffffff)',\n },\n // Chart / data visualization\n chart: {\n 1: 'var(--mieweb-chart-1, #27aae1)',\n 2: 'var(--mieweb-chart-2, #22c55e)',\n 3: 'var(--mieweb-chart-3, #f59e0b)',\n 4: 'var(--mieweb-chart-4, #ef4444)',\n 5: 'var(--mieweb-chart-5, #6366f1)',\n },\n },\n fontFamily: {\n sans: [\n 'var(--mieweb-font-sans, ui-sans-serif)',\n 'system-ui',\n 'sans-serif',\n ],\n },\n borderRadius: {\n '2xl': 'var(--mieweb-radius-2xl, 1rem)',\n lg: 'var(--mieweb-radius-lg, 0.75rem)',\n md: 'var(--mieweb-radius-md, 0.5rem)',\n sm: 'var(--mieweb-radius-sm, 0.25rem)',\n xl: 'var(--mieweb-radius-xl, 1rem)',\n },\n boxShadow: {\n card: 'var(--mieweb-shadow-card, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1))',\n },\n keyframes: {\n 'fade-in': {\n '0%': { opacity: '0' },\n '100%': { opacity: '1' },\n },\n 'fade-out': {\n '0%': { opacity: '1' },\n '100%': { opacity: '0' },\n },\n 'slide-in-from-top': {\n '0%': { transform: 'translateY(-0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-from-bottom': {\n '0%': { transform: 'translateY(0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-right': {\n '0%': { transform: 'translateX(100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'slide-in-left': {\n '0%': { transform: 'translateX(-100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'scale-in': {\n '0%': { transform: 'scale(0.95)', opacity: '0' },\n '100%': { transform: 'scale(1)', opacity: '1' },\n },\n 'ozwell-message-flare': {\n '0%': {\n boxShadow:\n '0 0 0 0 color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 34%, transparent)',\n },\n '70%': {\n boxShadow:\n '0 0 0 8px color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 0%, transparent)',\n },\n '100%': {\n boxShadow:\n '0 0 0 0 color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 0%, transparent)',\n },\n },\n },\n animation: {\n 'fade-in': 'fade-in 150ms ease-out',\n 'fade-out': 'fade-out 150ms ease-in',\n 'slide-in-from-top': 'slide-in-from-top 150ms ease-out',\n 'slide-in-from-bottom': 'slide-in-from-bottom 150ms ease-out',\n 'slide-in-right': 'slide-in-right 300ms ease-out',\n 'slide-in-left': 'slide-in-left 300ms ease-out',\n 'scale-in': 'scale-in 150ms ease-out',\n 'ozwell-message-flare': 'ozwell-message-flare 1.8s ease-out',\n },\n // ClampedText supports 7/8-line clamps beyond Tailwind 3's core 1–6 scale\n lineClamp: {\n 7: '7',\n 8: '8',\n },\n },\n },\n};\n\nexport default miewebUIPreset;\n"]}