@mieweb/ui 0.7.3-dev.22 → 0.7.3-dev.24

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 (58) hide show
  1. package/dist/brands/index.cjs +12 -12
  2. package/dist/brands/index.js +3 -3
  3. package/dist/chunk-3TXOFAXP.cjs +139 -0
  4. package/dist/chunk-3TXOFAXP.cjs.map +1 -0
  5. package/dist/{chunk-TXRQQMG5.js → chunk-BCJFOSZX.js} +2 -2
  6. package/dist/{chunk-TXRQQMG5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  7. package/dist/{chunk-5D253OQS.js → chunk-GEG6G7OF.js} +4 -4
  8. package/dist/{chunk-5D253OQS.js.map → chunk-GEG6G7OF.js.map} +1 -1
  9. package/dist/chunk-HK3AMH3Q.cjs +151 -0
  10. package/dist/chunk-HK3AMH3Q.cjs.map +1 -0
  11. package/dist/{chunk-VCHTV65A.js → chunk-HN7AIGT6.js} +33 -2
  12. package/dist/chunk-HN7AIGT6.js.map +1 -0
  13. package/dist/chunk-HQ3XPCHG.js +114 -0
  14. package/dist/chunk-HQ3XPCHG.js.map +1 -0
  15. package/dist/{chunk-WIYQI35R.cjs → chunk-LJBWCUKP.cjs} +2 -2
  16. package/dist/{chunk-WIYQI35R.cjs.map → chunk-LJBWCUKP.cjs.map} +1 -1
  17. package/dist/{chunk-ABST3R3G.cjs → chunk-NA2JKM2W.cjs} +33 -2
  18. package/dist/chunk-NA2JKM2W.cjs.map +1 -0
  19. package/dist/{chunk-JWTCEWQ4.cjs → chunk-VA7QN4DX.cjs} +2 -2
  20. package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  21. package/dist/{chunk-X5OS45WZ.cjs → chunk-WALAUOQB.cjs} +4 -4
  22. package/dist/{chunk-X5OS45WZ.cjs.map → chunk-WALAUOQB.cjs.map} +1 -1
  23. package/dist/chunk-Y6YSJPVC.js +129 -0
  24. package/dist/chunk-Y6YSJPVC.js.map +1 -0
  25. package/dist/{chunk-DX64KLSN.js → chunk-Z4PECE5S.js} +2 -2
  26. package/dist/{chunk-DX64KLSN.js.map → chunk-Z4PECE5S.js.map} +1 -1
  27. package/dist/components/Accordion/index.cjs +13 -0
  28. package/dist/components/Accordion/index.cjs.map +1 -0
  29. package/dist/components/Accordion/index.d.cts +50 -0
  30. package/dist/components/Accordion/index.d.ts +50 -0
  31. package/dist/components/Accordion/index.js +4 -0
  32. package/dist/components/Accordion/index.js.map +1 -0
  33. package/dist/components/FreshnessBadge/index.cjs +25 -0
  34. package/dist/components/FreshnessBadge/index.cjs.map +1 -0
  35. package/dist/components/FreshnessBadge/index.d.cts +49 -0
  36. package/dist/components/FreshnessBadge/index.d.ts +49 -0
  37. package/dist/components/FreshnessBadge/index.js +4 -0
  38. package/dist/components/FreshnessBadge/index.js.map +1 -0
  39. package/dist/components/Markdown/index.cjs +10 -10
  40. package/dist/components/Markdown/index.js +2 -2
  41. package/dist/components/SuperChat/index.cjs +1 -1
  42. package/dist/components/SuperChat/index.js +1 -1
  43. package/dist/datavis.cjs +1 -1
  44. package/dist/datavis.js +1 -1
  45. package/dist/esheet.cjs +6 -6
  46. package/dist/esheet.js +3 -3
  47. package/dist/index.cjs +285 -263
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +2 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +32 -30
  52. package/dist/index.js.map +1 -1
  53. package/dist/styles.css +1 -1
  54. package/dist/tailwind-preset.cjs +4 -4
  55. package/dist/tailwind-preset.js +1 -1
  56. package/package.json +1 -1
  57. package/dist/chunk-ABST3R3G.cjs.map +0 -1
  58. package/dist/chunk-VCHTV65A.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkJWTCEWQ4_cjs = require('../chunk-JWTCEWQ4.cjs');
3
+ var chunkVA7QN4DX_cjs = require('../chunk-VA7QN4DX.cjs');
4
+ var chunkZ5J4NTPL_cjs = require('../chunk-Z5J4NTPL.cjs');
5
+ var chunkU7VQUOLS_cjs = require('../chunk-U7VQUOLS.cjs');
4
6
  var chunkX7S76WB7_cjs = require('../chunk-X7S76WB7.cjs');
5
7
  var chunkP52GA3GJ_cjs = require('../chunk-P52GA3GJ.cjs');
6
8
  var chunkLCQGAOAZ_cjs = require('../chunk-LCQGAOAZ.cjs');
7
- var chunkZ5J4NTPL_cjs = require('../chunk-Z5J4NTPL.cjs');
8
- var chunkU7VQUOLS_cjs = require('../chunk-U7VQUOLS.cjs');
9
9
  var chunkJ644FU54_cjs = require('../chunk-J644FU54.cjs');
10
10
  var chunkWNJRS7Y7_cjs = require('../chunk-WNJRS7Y7.cjs');
11
11
  var chunkUCGUA3QV_cjs = require('../chunk-UCGUA3QV.cjs');
@@ -15,7 +15,15 @@ var chunkRR2MJBGV_cjs = require('../chunk-RR2MJBGV.cjs');
15
15
 
16
16
  Object.defineProperty(exports, "brands", {
17
17
  enumerable: true,
18
- get: function () { return chunkJWTCEWQ4_cjs.brands; }
18
+ get: function () { return chunkVA7QN4DX_cjs.brands; }
19
+ });
20
+ Object.defineProperty(exports, "wagglelineBrand", {
21
+ enumerable: true,
22
+ get: function () { return chunkZ5J4NTPL_cjs.wagglelineBrand; }
23
+ });
24
+ Object.defineProperty(exports, "webchartBrand", {
25
+ enumerable: true,
26
+ get: function () { return chunkU7VQUOLS_cjs.webchartBrand; }
19
27
  });
20
28
  Object.defineProperty(exports, "defaultBrand", {
21
29
  enumerable: true,
@@ -29,14 +37,6 @@ Object.defineProperty(exports, "miewebBrand", {
29
37
  enumerable: true,
30
38
  get: function () { return chunkLCQGAOAZ_cjs.miewebBrand; }
31
39
  });
32
- Object.defineProperty(exports, "wagglelineBrand", {
33
- enumerable: true,
34
- get: function () { return chunkZ5J4NTPL_cjs.wagglelineBrand; }
35
- });
36
- Object.defineProperty(exports, "webchartBrand", {
37
- enumerable: true,
38
- get: function () { return chunkU7VQUOLS_cjs.webchartBrand; }
39
- });
40
40
  Object.defineProperty(exports, "createBrandPreset", {
41
41
  enumerable: true,
42
42
  get: function () { return chunkJ644FU54_cjs.createBrandPreset; }
@@ -1,9 +1,9 @@
1
- export { brands } from '../chunk-TXRQQMG5.js';
1
+ export { brands } from '../chunk-BCJFOSZX.js';
2
+ export { wagglelineBrand } from '../chunk-2NTYAALC.js';
3
+ export { webchartBrand } from '../chunk-CW66SO5O.js';
2
4
  export { defaultBrand } from '../chunk-PSTGFXQG.js';
3
5
  export { enterpriseHealthBrand } from '../chunk-MTZPVOP6.js';
4
6
  export { miewebBrand } from '../chunk-NERS5ZT6.js';
5
- export { wagglelineBrand } from '../chunk-2NTYAALC.js';
6
- export { webchartBrand } from '../chunk-CW66SO5O.js';
7
7
  export { createBrandPreset, generateBrandCSS, generateTailwindTheme } from '../chunk-WOYUQ4AT.js';
8
8
  export { bluehiveBrand } from '../chunk-3T7QGLNB.js';
9
9
  export { ccmeBrand } from '../chunk-SCQRJPSV.js';
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
+ var React = require('react');
5
+ var luxon = require('luxon');
6
+ var lucideReact = require('lucide-react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ var DEFAULT_THRESHOLDS = { fresh: 90, aging: 180 };
30
+ function toDateTime(date) {
31
+ return typeof date === "string" ? luxon.DateTime.fromISO(date) : luxon.DateTime.fromJSDate(date);
32
+ }
33
+ function daysSince(date) {
34
+ const dt = toDateTime(date);
35
+ if (!dt.isValid) return null;
36
+ const days = Math.floor(luxon.DateTime.now().diff(dt, "days").days);
37
+ return Math.max(0, days);
38
+ }
39
+ function levelForDays(days, thresholds) {
40
+ if (days === null) return "unknown";
41
+ if (days < thresholds.fresh) return "fresh";
42
+ if (days < thresholds.aging) return "aging";
43
+ return "stale";
44
+ }
45
+ function freshnessLevel(date, thresholds = DEFAULT_THRESHOLDS) {
46
+ return levelForDays(daysSince(date), thresholds);
47
+ }
48
+ function ageText(days) {
49
+ if (days === null) return "date unknown";
50
+ return days === 0 ? "today" : days === 1 ? "yesterday" : `${days}d ago`;
51
+ }
52
+ var META = {
53
+ fresh: {
54
+ Icon: lucideReact.CircleCheck,
55
+ chip: "bg-success/10 text-success-800 dark:bg-success/20 dark:text-success",
56
+ dot: "bg-success",
57
+ label: "Fresh"
58
+ },
59
+ aging: {
60
+ Icon: lucideReact.CircleMinus,
61
+ chip: "bg-warning/15 text-warning-800 dark:bg-warning/20 dark:text-warning",
62
+ dot: "bg-warning",
63
+ label: "Aging"
64
+ },
65
+ stale: {
66
+ Icon: lucideReact.CircleAlert,
67
+ chip: "bg-destructive/10 text-destructive-700 dark:bg-destructive/20 dark:text-destructive",
68
+ dot: "bg-destructive",
69
+ label: "Stale"
70
+ },
71
+ unknown: {
72
+ Icon: lucideReact.CircleHelp,
73
+ chip: "bg-muted text-muted-foreground",
74
+ dot: "bg-muted-foreground/50",
75
+ label: "Unknown"
76
+ }
77
+ };
78
+ var FreshnessBadge = React__namespace.forwardRef(function FreshnessBadge2({
79
+ date,
80
+ thresholds = DEFAULT_THRESHOLDS,
81
+ label = "Reviewed",
82
+ className,
83
+ ...props
84
+ }, ref) {
85
+ const days = daysSince(date);
86
+ const level = levelForDays(days, thresholds);
87
+ const { Icon, chip } = META[level];
88
+ return /* @__PURE__ */ jsxRuntime.jsxs(
89
+ "span",
90
+ {
91
+ ref,
92
+ className: chunkS5RVSXDV_cjs.cn(
93
+ "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold",
94
+ chip,
95
+ className
96
+ ),
97
+ ...props,
98
+ children: [
99
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { "aria-hidden": "true", className: "h-3 w-3 shrink-0" }),
100
+ label,
101
+ " ",
102
+ ageText(days)
103
+ ]
104
+ }
105
+ );
106
+ });
107
+ var FreshnessDot = React__namespace.forwardRef(function FreshnessDot2({
108
+ date,
109
+ thresholds = DEFAULT_THRESHOLDS,
110
+ label = "Reviewed",
111
+ className,
112
+ ...props
113
+ }, ref) {
114
+ const days = daysSince(date);
115
+ const level = levelForDays(days, thresholds);
116
+ const description = `${META[level].label} \u2014 ${label} ${ageText(days)}`;
117
+ return /* @__PURE__ */ jsxRuntime.jsx(
118
+ "span",
119
+ {
120
+ ref,
121
+ role: "img",
122
+ "aria-label": description,
123
+ title: description,
124
+ className: chunkS5RVSXDV_cjs.cn(
125
+ "inline-block h-2 w-2 shrink-0 rounded-full",
126
+ META[level].dot,
127
+ className
128
+ ),
129
+ ...props
130
+ }
131
+ );
132
+ });
133
+
134
+ exports.FreshnessBadge = FreshnessBadge;
135
+ exports.FreshnessDot = FreshnessDot;
136
+ exports.daysSince = daysSince;
137
+ exports.freshnessLevel = freshnessLevel;
138
+ //# sourceMappingURL=chunk-3TXOFAXP.cjs.map
139
+ //# sourceMappingURL=chunk-3TXOFAXP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/FreshnessBadge/FreshnessBadge.tsx"],"names":["DateTime","CircleCheck","CircleMinus","CircleAlert","CircleHelp","React","FreshnessBadge","jsxs","cn","jsx","FreshnessDot"],"mappings":"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","file":"chunk-3TXOFAXP.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport {\n CircleAlert,\n CircleCheck,\n CircleHelp,\n CircleMinus,\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\n// =============================================================================\n// Types & helpers\n// =============================================================================\n\nexport type FreshnessLevel = 'fresh' | 'aging' | 'stale' | 'unknown';\n\nexport interface FreshnessThresholds {\n /** Days within which a date counts as fresh (default 90). */\n fresh: number;\n /** Days within which a date counts as aging; beyond is stale (default 180). */\n aging: number;\n}\n\nconst DEFAULT_THRESHOLDS: FreshnessThresholds = { fresh: 90, aging: 180 };\n\nfunction toDateTime(date: string | Date): DateTime {\n return typeof date === 'string'\n ? DateTime.fromISO(date)\n : DateTime.fromJSDate(date);\n}\n\n/**\n * Whole days elapsed since the given date (0 for today/future), or `null`\n * when the date cannot be parsed.\n */\nexport function daysSince(date: string | Date): number | null {\n const dt = toDateTime(date);\n if (!dt.isValid) return null;\n const days = Math.floor(DateTime.now().diff(dt, 'days').days);\n return Math.max(0, days);\n}\n\nfunction levelForDays(\n days: number | null,\n thresholds: FreshnessThresholds\n): FreshnessLevel {\n if (days === null) return 'unknown';\n if (days < thresholds.fresh) return 'fresh';\n if (days < thresholds.aging) return 'aging';\n return 'stale';\n}\n\n/**\n * Bucket a date into fresh / aging / stale by day thresholds. Unparseable\n * dates return `unknown` rather than masquerading as fresh or stale.\n */\nexport function freshnessLevel(\n date: string | Date,\n thresholds: FreshnessThresholds = DEFAULT_THRESHOLDS\n): FreshnessLevel {\n return levelForDays(daysSince(date), thresholds);\n}\n\nfunction ageText(days: number | null): string {\n if (days === null) return 'date unknown';\n return days === 0 ? 'today' : days === 1 ? 'yesterday' : `${days}d ago`;\n}\n\nconst META: Record<\n FreshnessLevel,\n { Icon: typeof CircleCheck; chip: string; dot: string; label: string }\n> = {\n fresh: {\n Icon: CircleCheck,\n chip: 'bg-success/10 text-success-800 dark:bg-success/20 dark:text-success',\n dot: 'bg-success',\n label: 'Fresh',\n },\n aging: {\n Icon: CircleMinus,\n chip: 'bg-warning/15 text-warning-800 dark:bg-warning/20 dark:text-warning',\n dot: 'bg-warning',\n label: 'Aging',\n },\n stale: {\n Icon: CircleAlert,\n chip: 'bg-destructive/10 text-destructive-700 dark:bg-destructive/20 dark:text-destructive',\n dot: 'bg-destructive',\n label: 'Stale',\n },\n unknown: {\n Icon: CircleHelp,\n chip: 'bg-muted text-muted-foreground',\n dot: 'bg-muted-foreground/50',\n label: 'Unknown',\n },\n};\n\n// =============================================================================\n// Components\n// =============================================================================\n\nexport interface FreshnessBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The date being aged — last review, last sync, last update. */\n date: string | Date;\n /** Day cutoffs for fresh/aging (default 90/180). */\n thresholds?: FreshnessThresholds;\n /** Verb before the age (default \"Reviewed\"). */\n label?: string;\n}\n\n/**\n * A recency chip that ages from success through warning to destructive:\n * \"Reviewed 12d ago\". Suits source registries, sync statuses, data-quality\n * dashboards — anywhere staleness is a signal.\n *\n * @example\n * ```tsx\n * <FreshnessBadge date=\"2026-07-01\" />\n * <FreshnessBadge date={lastSync} label=\"Synced\" thresholds={{ fresh: 1, aging: 7 }} />\n * ```\n */\nexport const FreshnessBadge = React.forwardRef<\n HTMLSpanElement,\n FreshnessBadgeProps\n>(function FreshnessBadge(\n {\n date,\n thresholds = DEFAULT_THRESHOLDS,\n label = 'Reviewed',\n className,\n ...props\n },\n ref\n) {\n const days = daysSince(date);\n const level = levelForDays(days, thresholds);\n const { Icon, chip } = META[level];\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold',\n chip,\n className\n )}\n {...props}\n >\n <Icon aria-hidden=\"true\" className=\"h-3 w-3 shrink-0\" />\n {label} {ageText(days)}\n </span>\n );\n});\n\nexport interface FreshnessDotProps extends React.HTMLAttributes<HTMLSpanElement> {\n date: string | Date;\n thresholds?: FreshnessThresholds;\n /** Verb used in the accessible label and tooltip (default \"Reviewed\"). */\n label?: string;\n}\n\n/** Colored dot for tight spots — table cells, tooltip source rows. */\nexport const FreshnessDot = React.forwardRef<\n HTMLSpanElement,\n FreshnessDotProps\n>(function FreshnessDot(\n {\n date,\n thresholds = DEFAULT_THRESHOLDS,\n label = 'Reviewed',\n className,\n ...props\n },\n ref\n) {\n const days = daysSince(date);\n const level = levelForDays(days, thresholds);\n const description = `${META[level].label} — ${label} ${ageText(days)}`;\n return (\n <span\n ref={ref}\n role=\"img\"\n aria-label={description}\n title={description}\n className={cn(\n 'inline-block h-2 w-2 shrink-0 rounded-full',\n META[level].dot,\n className\n )}\n {...props}\n />\n );\n});\n"]}
@@ -11,5 +11,5 @@ var brands = {
11
11
  };
12
12
 
13
13
  export { brands };
14
- //# sourceMappingURL=chunk-TXRQQMG5.js.map
15
- //# sourceMappingURL=chunk-TXRQQMG5.js.map
14
+ //# sourceMappingURL=chunk-BCJFOSZX.js.map
15
+ //# sourceMappingURL=chunk-BCJFOSZX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,kBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-TXRQQMG5.js","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,kBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-BCJFOSZX.js","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
@@ -1,15 +1,15 @@
1
1
  import { Textarea } from './chunk-H3YO5GBM.js';
2
2
  import { Tooltip } from './chunk-FJ7YPVKV.js';
3
3
  import { RadioGroup, Radio } from './chunk-EPSB4WTL.js';
4
+ import { Select } from './chunk-XBKOZRDO.js';
4
5
  import { DateInput } from './chunk-IILJGFI5.js';
5
6
  import { Label } from './chunk-I3WGZPI6.js';
6
- import { Select } from './chunk-XBKOZRDO.js';
7
7
  import { Card, CardHeader, CardContent } from './chunk-QYSUYB3S.js';
8
8
  import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-XMCIXHGH.js';
9
9
  import { Input } from './chunk-3IMM2PM4.js';
10
10
  import { AlertCircle, Plus, GripVertical, StickyNote, Ban, Pencil, CalendarCheck, ExternalLink, ThumbsUp, HandMetal, ThumbsDown, HelpCircle, ChevronDown, ChevronUp, RefreshCw } from './chunk-3PXOIAF6.js';
11
- import { Button } from './chunk-D2GID3YK.js';
12
11
  import { Badge } from './chunk-BMSG4NBH.js';
12
+ import { Button } from './chunk-D2GID3YK.js';
13
13
  import { useLiveAnnouncement, useDragReorder, dragIndicatorClasses } from './chunk-7ZVTLTJF.js';
14
14
  import { cn } from './chunk-TQONQSJO.js';
15
15
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1565,5 +1565,5 @@ function MedicationReconciliation({
1565
1565
  }
1566
1566
 
1567
1567
  export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig };
1568
- //# sourceMappingURL=chunk-5D253OQS.js.map
1569
- //# sourceMappingURL=chunk-5D253OQS.js.map
1568
+ //# sourceMappingURL=chunk-GEG6G7OF.js.map
1569
+ //# sourceMappingURL=chunk-GEG6G7OF.js.map