@burdenoff/microfe-buildmyiq 2026.709.1 → 2026.710.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/dist/buildmyiq/BuildmyiqRoot.d.ts +5 -0
  2. package/dist/buildmyiq/BuildmyiqRoot.d.ts.map +1 -0
  3. package/dist/buildmyiq/BuildmyiqRoutes.d.ts +4 -0
  4. package/dist/buildmyiq/BuildmyiqRoutes.d.ts.map +1 -0
  5. package/dist/buildmyiq/components/Avatar.d.ts +15 -0
  6. package/dist/buildmyiq/components/Avatar.d.ts.map +1 -0
  7. package/dist/buildmyiq/components/Avatar.js.map +1 -1
  8. package/dist/buildmyiq/components/BuiDiscussion.d.ts +18 -0
  9. package/dist/buildmyiq/components/BuiDiscussion.d.ts.map +1 -0
  10. package/dist/buildmyiq/components/BuiTags.d.ts +17 -0
  11. package/dist/buildmyiq/components/BuiTags.d.ts.map +1 -0
  12. package/dist/buildmyiq/components/DataTable.d.ts +28 -0
  13. package/dist/buildmyiq/components/DataTable.d.ts.map +1 -0
  14. package/dist/buildmyiq/components/EmptyState.d.ts +18 -0
  15. package/dist/buildmyiq/components/EmptyState.d.ts.map +1 -0
  16. package/dist/buildmyiq/components/EvidenceUpload.d.ts +14 -0
  17. package/dist/buildmyiq/components/EvidenceUpload.d.ts.map +1 -0
  18. package/dist/buildmyiq/components/FileLink.d.ts +15 -0
  19. package/dist/buildmyiq/components/FileLink.d.ts.map +1 -0
  20. package/dist/buildmyiq/components/FilterTabs.d.ts +18 -0
  21. package/dist/buildmyiq/components/FilterTabs.d.ts.map +1 -0
  22. package/dist/buildmyiq/components/MetricsCard.d.ts +23 -0
  23. package/dist/buildmyiq/components/MetricsCard.d.ts.map +1 -0
  24. package/dist/buildmyiq/components/MiniBar.d.ts +16 -0
  25. package/dist/buildmyiq/components/MiniBar.d.ts.map +1 -0
  26. package/dist/buildmyiq/components/PageLayout.d.ts +16 -0
  27. package/dist/buildmyiq/components/PageLayout.d.ts.map +1 -0
  28. package/dist/buildmyiq/components/Pagination.d.ts +22 -0
  29. package/dist/buildmyiq/components/Pagination.d.ts.map +1 -0
  30. package/dist/buildmyiq/components/StateViews.d.ts +24 -0
  31. package/dist/buildmyiq/components/StateViews.d.ts.map +1 -0
  32. package/dist/buildmyiq/components/StatusBadge.d.ts +9 -0
  33. package/dist/buildmyiq/components/StatusBadge.d.ts.map +1 -0
  34. package/dist/buildmyiq/components/Tabs.d.ts +17 -0
  35. package/dist/buildmyiq/components/Tabs.d.ts.map +1 -0
  36. package/dist/buildmyiq/components/Viz.d.ts +25 -0
  37. package/dist/buildmyiq/components/Viz.d.ts.map +1 -0
  38. package/dist/buildmyiq/components/Viz.js.map +1 -1
  39. package/dist/buildmyiq/components/index.d.ts +21 -0
  40. package/dist/buildmyiq/components/index.d.ts.map +1 -0
  41. package/dist/buildmyiq/context/BuildmyiqContext.d.ts +16 -0
  42. package/dist/buildmyiq/context/BuildmyiqContext.d.ts.map +1 -0
  43. package/dist/buildmyiq/context/index.d.ts +6 -0
  44. package/dist/buildmyiq/context/index.d.ts.map +1 -0
  45. package/dist/buildmyiq/hooks/index.d.ts +10 -0
  46. package/dist/buildmyiq/hooks/index.d.ts.map +1 -0
  47. package/dist/buildmyiq/hooks/useBuiComments.d.ts +36 -0
  48. package/dist/buildmyiq/hooks/useBuiComments.d.ts.map +1 -0
  49. package/dist/buildmyiq/hooks/useBuiFiles.d.ts +47 -0
  50. package/dist/buildmyiq/hooks/useBuiFiles.d.ts.map +1 -0
  51. package/dist/buildmyiq/hooks/useBuiTags.d.ts +44 -0
  52. package/dist/buildmyiq/hooks/useBuiTags.d.ts.map +1 -0
  53. package/dist/buildmyiq/hooks/useBuildmyiqApi.d.ts +65 -0
  54. package/dist/buildmyiq/hooks/useBuildmyiqApi.d.ts.map +1 -0
  55. package/dist/buildmyiq/hooks/useCursorPager.d.ts +33 -0
  56. package/dist/buildmyiq/hooks/useCursorPager.d.ts.map +1 -0
  57. package/dist/buildmyiq/index.d.ts +9 -0
  58. package/dist/buildmyiq/index.d.ts.map +1 -0
  59. package/dist/buildmyiq/pages/DashboardPage.d.ts +4 -0
  60. package/dist/buildmyiq/pages/DashboardPage.d.ts.map +1 -0
  61. package/dist/buildmyiq/pages/_shared/CourseCard.d.ts +13 -0
  62. package/dist/buildmyiq/pages/_shared/CourseCard.d.ts.map +1 -0
  63. package/dist/buildmyiq/pages/_shared/index.d.ts +6 -0
  64. package/dist/buildmyiq/pages/_shared/index.d.ts.map +1 -0
  65. package/dist/buildmyiq/pages/assessments/AssessmentDetailPage.d.ts +4 -0
  66. package/dist/buildmyiq/pages/assessments/AssessmentDetailPage.d.ts.map +1 -0
  67. package/dist/buildmyiq/pages/assessments/AssessmentDetailPage.js.map +1 -1
  68. package/dist/buildmyiq/pages/assessments/AssessmentsPage.d.ts +4 -0
  69. package/dist/buildmyiq/pages/assessments/AssessmentsPage.d.ts.map +1 -0
  70. package/dist/buildmyiq/pages/assessments/TakeAssessmentPage.d.ts +4 -0
  71. package/dist/buildmyiq/pages/assessments/TakeAssessmentPage.d.ts.map +1 -0
  72. package/dist/buildmyiq/pages/assessments/TakeAssessmentPage.js.map +1 -1
  73. package/dist/buildmyiq/pages/authoring/AuthoringPage.d.ts +4 -0
  74. package/dist/buildmyiq/pages/authoring/AuthoringPage.d.ts.map +1 -0
  75. package/dist/buildmyiq/pages/authoring/CourseBuilderPage.d.ts +4 -0
  76. package/dist/buildmyiq/pages/authoring/CourseBuilderPage.d.ts.map +1 -0
  77. package/dist/buildmyiq/pages/authoring/CourseBuilderPage.js.map +1 -1
  78. package/dist/buildmyiq/pages/authoring/_forms.d.ts +44 -0
  79. package/dist/buildmyiq/pages/authoring/_forms.d.ts.map +1 -0
  80. package/dist/buildmyiq/pages/catalog/CatalogPage.d.ts +4 -0
  81. package/dist/buildmyiq/pages/catalog/CatalogPage.d.ts.map +1 -0
  82. package/dist/buildmyiq/pages/catalog/CourseDetailPage.d.ts +4 -0
  83. package/dist/buildmyiq/pages/catalog/CourseDetailPage.d.ts.map +1 -0
  84. package/dist/buildmyiq/pages/certificates/CertificatesPage.d.ts +4 -0
  85. package/dist/buildmyiq/pages/certificates/CertificatesPage.d.ts.map +1 -0
  86. package/dist/buildmyiq/pages/certificates/CertificatesPage.js.map +1 -1
  87. package/dist/buildmyiq/pages/cohorts/CohortsPage.d.ts +4 -0
  88. package/dist/buildmyiq/pages/cohorts/CohortsPage.d.ts.map +1 -0
  89. package/dist/buildmyiq/pages/insights/InsightsPage.d.ts +4 -0
  90. package/dist/buildmyiq/pages/insights/InsightsPage.d.ts.map +1 -0
  91. package/dist/buildmyiq/pages/insights/InsightsPage.js.map +1 -1
  92. package/dist/buildmyiq/pages/learning/LessonPlayerPage.d.ts +4 -0
  93. package/dist/buildmyiq/pages/learning/LessonPlayerPage.d.ts.map +1 -0
  94. package/dist/buildmyiq/pages/learning/MyLearningPage.d.ts +4 -0
  95. package/dist/buildmyiq/pages/learning/MyLearningPage.d.ts.map +1 -0
  96. package/dist/buildmyiq/pages/learning/MyLearningPage.js.map +1 -1
  97. package/dist/buildmyiq/pages/paths/PathsPage.d.ts +4 -0
  98. package/dist/buildmyiq/pages/paths/PathsPage.d.ts.map +1 -0
  99. package/dist/buildmyiq/pages/paths/PathsPage.js.map +1 -1
  100. package/dist/buildmyiq/pages/skills/SkillsPage.d.ts +4 -0
  101. package/dist/buildmyiq/pages/skills/SkillsPage.d.ts.map +1 -0
  102. package/dist/buildmyiq/pages/skills/SkillsPage.js.map +1 -1
  103. package/dist/buildmyiq/pages/submissions/SubmissionsPage.d.ts +4 -0
  104. package/dist/buildmyiq/pages/submissions/SubmissionsPage.d.ts.map +1 -0
  105. package/dist/buildmyiq/pages/submissions/SubmissionsPage.js +4 -8
  106. package/dist/buildmyiq/pages/submissions/SubmissionsPage.js.map +1 -1
  107. package/dist/buildmyiq/shared/hooks/useTr.d.ts +9 -0
  108. package/dist/buildmyiq/shared/hooks/useTr.d.ts.map +1 -0
  109. package/dist/buildmyiq/types/index.d.ts +382 -0
  110. package/dist/buildmyiq/types/index.d.ts.map +1 -0
  111. package/dist/buildmyiq/utils/cn.d.ts +4 -0
  112. package/dist/buildmyiq/utils/cn.d.ts.map +1 -0
  113. package/dist/buildmyiq/utils/cn.js +2 -2
  114. package/dist/buildmyiq/utils/formatters.d.ts +33 -0
  115. package/dist/buildmyiq/utils/formatters.d.ts.map +1 -0
  116. package/dist/buildmyiq/utils/i18n.d.ts +6 -0
  117. package/dist/buildmyiq/utils/i18n.d.ts.map +1 -0
  118. package/dist/buildmyiq/utils/index.d.ts +9 -0
  119. package/dist/buildmyiq/utils/index.d.ts.map +1 -0
  120. package/dist/buildmyiq/utils/navigation.d.ts +14 -0
  121. package/dist/buildmyiq/utils/navigation.d.ts.map +1 -0
  122. package/dist/dev/main.d.ts +2 -0
  123. package/dist/dev/main.d.ts.map +1 -0
  124. package/dist/generated/global-operations.d.ts +2 -0
  125. package/dist/generated/global-operations.d.ts.map +1 -0
  126. package/dist/generated/global-types.d.ts +18199 -0
  127. package/dist/generated/global-types.d.ts.map +1 -0
  128. package/dist/generated/wspace-operations.d.ts +2 -0
  129. package/dist/generated/wspace-operations.d.ts.map +1 -0
  130. package/dist/generated/wspace-types.d.ts +43046 -0
  131. package/dist/generated/wspace-types.d.ts.map +1 -0
  132. package/dist/index.d.ts +3 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +2 -1
  135. package/dist/node_modules/{clsx → .bun/clsx@2.1.1/node_modules/clsx}/dist/clsx.js +1 -1
  136. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
  137. package/dist/node_modules/{tailwind-merge → .bun/tailwind-merge@3.5.0/node_modules/tailwind-merge}/dist/bundle-mjs.js +170 -212
  138. package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  139. package/dist/services/assistantApi.d.ts +76 -0
  140. package/dist/services/assistantApi.d.ts.map +1 -0
  141. package/dist/services/assistantApi.js +272 -0
  142. package/dist/services/assistantApi.js.map +1 -0
  143. package/dist/services/createSandboxAssistantTransport.d.ts +40 -0
  144. package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
  145. package/dist/services/createSandboxAssistantTransport.js +120 -0
  146. package/dist/services/createSandboxAssistantTransport.js.map +1 -0
  147. package/dist/types/assistant.d.ts +15 -0
  148. package/dist/types/assistant.d.ts.map +1 -0
  149. package/dist/utils/pageContext.d.ts +17 -0
  150. package/dist/utils/pageContext.d.ts.map +1 -0
  151. package/dist/utils/pageContext.js +49 -0
  152. package/dist/utils/pageContext.js.map +1 -0
  153. package/package.json +1 -1
  154. package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
  155. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ import { BuildmyiqRootProps } from './types';
3
+
4
+ export declare const BuildmyiqRoot: FC<BuildmyiqRootProps>;
5
+ //# sourceMappingURL=BuildmyiqRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildmyiqRoot.d.ts","sourceRoot":"","sources":["../../src/buildmyiq/BuildmyiqRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAqBhC,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,SAAS,CAAC;AAY3D,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAqIhD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+
3
+ export declare const BuildmyiqRoutes: FC;
4
+ //# sourceMappingURL=BuildmyiqRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildmyiqRoutes.d.ts","sourceRoot":"","sources":["../../src/buildmyiq/BuildmyiqRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAc,EAAE,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAwGvD,eAAO,MAAM,eAAe,EAAE,EAmE7B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FC } from 'react';
2
+
3
+ interface AvatarProps {
4
+ /** Display name — its initials are shown when no image is provided. */
5
+ name?: string | null;
6
+ /** Stable seed (e.g. a user id) used for the tint + fallback initials. */
7
+ seed?: string | null;
8
+ /** Real image URL (only for the signed-in user / resolved members). */
9
+ src?: string | null;
10
+ size?: 'xs' | 'sm' | 'md' | 'lg';
11
+ className?: string;
12
+ }
13
+ export declare const Avatar: FC<AvatarProps>;
14
+ export {};
15
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/Avatar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,UAAU,WAAW;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwCD,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAwBlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","names":[],"sources":["../../../src/buildmyiq/components/Avatar.tsx"],"sourcesContent":["/**\n * Avatar — a deterministic initials avatar (with optional real image).\n * @module buildmyiq/components\n *\n * HONEST BY DESIGN: when we have a real name/photo (the signed-in user) we show\n * it; for anyone we can only identify by id we render initials derived from the\n * id on a deterministic token-based tint — never a fabricated name or stock\n * photo. The colour is picked from a fixed set of semantic accent tints so it is\n * theme-safe and reproducible for the same seed.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface AvatarProps {\n /** Display name — its initials are shown when no image is provided. */\n name?: string | null;\n /** Stable seed (e.g. a user id) used for the tint + fallback initials. */\n seed?: string | null;\n /** Real image URL (only for the signed-in user / resolved members). */\n src?: string | null;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst SIZE: Record<NonNullable<AvatarProps['size']>, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-xs',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n};\n\n// Theme-safe tint set (semantic CSS vars → always resolve in light/dark).\nconst TINTS = [\n 'bg-[var(--color-accent-soft)] text-text-primary',\n 'bg-status-success-bg-subtle text-status-success-text',\n 'bg-status-warning-bg-subtle text-status-warning-text',\n 'bg-[color-mix(in_srgb,var(--color-accent-teal)_18%,transparent)] text-[var(--color-accent-teal)]',\n 'bg-[color-mix(in_srgb,var(--color-accent-primary)_16%,transparent)] text-[var(--color-accent-primary)]',\n 'bg-bg-sunken text-text-secondary',\n];\n\nconst hash = (s: string): number => {\n let h = 0;\n for (let i = 0; i < s.length; i += 1) h = (h * 31 + s.charCodeAt(i)) | 0;\n return Math.abs(h);\n};\n\nconst initialsOf = (name?: string | null, seed?: string | null): string => {\n const src = (name ?? '').trim();\n if (src) {\n const parts = src.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n return src.slice(0, 2).toUpperCase();\n }\n return (seed ?? '?').replace(/[^a-zA-Z0-9]/g, '').slice(0, 2).toUpperCase() || '?';\n};\n\nexport const Avatar: FC<AvatarProps> = ({ name, seed, src, size = 'md', className }) => {\n const tint = TINTS[hash(seed ?? name ?? '?') % TINTS.length];\n if (src) {\n return (\n <img\n src={src}\n alt=\"\"\n className={cn('shrink-0 rounded-full object-cover', SIZE[size], className)}\n />\n );\n }\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex shrink-0 select-none items-center justify-center rounded-full font-semibold',\n SIZE[size],\n tint,\n className\n )}\n >\n {initialsOf(name, seed)}\n </span>\n );\n};\n"],"mappings":";;;AAyBA,IAAM,IAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAGK,IAAQ;CACZ;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,KAAQ,MAAsB;CAClC,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,EAAG,KAAK,IAAI,KAAK,EAAE,WAAW,EAAE,GAAI;AACvE,QAAO,KAAK,IAAI,EAAE;GAGd,KAAc,GAAsB,MAAiC;CACzE,IAAM,KAAO,KAAQ,IAAI,MAAM;AAC/B,KAAI,GAAK;EACP,IAAM,IAAQ,EAAI,MAAM,MAAM,CAAC,OAAO,QAAQ;AAE9C,SADI,EAAM,UAAU,KAAW,EAAM,GAAG,KAAK,EAAM,EAAM,SAAS,GAAG,IAAI,aAAa,GAC/E,EAAI,MAAM,GAAG,EAAE,CAAC,aAAa;;AAEtC,SAAQ,KAAQ,KAAK,QAAQ,iBAAiB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,aAAa,IAAI;GAGpE,KAA2B,EAAE,SAAM,SAAM,QAAK,UAAO,MAAM,mBAAgB;CACtF,IAAM,IAAO,EAAM,EAAK,KAAQ,KAAQ,IAAI,GAAG,EAAM;AAUrD,QATI,IAEA,kBAAC,OAAD;EACO;EACL,KAAI;EACJ,WAAW,EAAG,sCAAsC,EAAK,IAAO,EAAU;EAC1E,CAAA,GAIJ,kBAAC,QAAD;EACE,eAAY;EACZ,WAAW,EACT,2FACA,EAAK,IACL,GACA,EACD;YAEA,EAAW,GAAM,EAAK;EAClB,CAAA"}
1
+ {"version":3,"file":"Avatar.js","names":[],"sources":["../../../src/buildmyiq/components/Avatar.tsx"],"sourcesContent":["/**\n * Avatar — a deterministic initials avatar (with optional real image).\n * @module buildmyiq/components\n *\n * HONEST BY DESIGN: when we have a real name/photo (the signed-in user) we show\n * it; for anyone we can only identify by id we render initials derived from the\n * id on a deterministic token-based tint — never a fabricated name or stock\n * photo. The colour is picked from a fixed set of semantic accent tints so it is\n * theme-safe and reproducible for the same seed.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface AvatarProps {\n /** Display name — its initials are shown when no image is provided. */\n name?: string | null;\n /** Stable seed (e.g. a user id) used for the tint + fallback initials. */\n seed?: string | null;\n /** Real image URL (only for the signed-in user / resolved members). */\n src?: string | null;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst SIZE: Record<NonNullable<AvatarProps['size']>, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-xs',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n};\n\n// Theme-safe tint set (semantic CSS vars → always resolve in light/dark).\nconst TINTS = [\n 'bg-[var(--color-accent-soft)] text-text-primary',\n 'bg-status-success-bg-subtle text-status-success-text',\n 'bg-status-warning-bg-subtle text-status-warning-text',\n 'bg-[color-mix(in_srgb,var(--color-accent-teal)_18%,transparent)] text-[var(--color-accent-teal)]',\n 'bg-[color-mix(in_srgb,var(--color-accent-primary)_16%,transparent)] text-[var(--color-accent-primary)]',\n 'bg-bg-sunken text-text-secondary',\n];\n\nconst hash = (s: string): number => {\n let h = 0;\n for (let i = 0; i < s.length; i += 1) h = (h * 31 + s.charCodeAt(i)) | 0;\n return Math.abs(h);\n};\n\nconst initialsOf = (name?: string | null, seed?: string | null): string => {\n const src = (name ?? '').trim();\n if (src) {\n const parts = src.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n return src.slice(0, 2).toUpperCase();\n }\n return (\n (seed ?? '?')\n .replace(/[^a-zA-Z0-9]/g, '')\n .slice(0, 2)\n .toUpperCase() || '?'\n );\n};\n\nexport const Avatar: FC<AvatarProps> = ({ name, seed, src, size = 'md', className }) => {\n const tint = TINTS[hash(seed ?? name ?? '?') % TINTS.length];\n if (src) {\n return (\n <img\n src={src}\n alt=\"\"\n className={cn('shrink-0 rounded-full object-cover', SIZE[size], className)}\n />\n );\n }\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex shrink-0 select-none items-center justify-center rounded-full font-semibold',\n SIZE[size],\n tint,\n className\n )}\n >\n {initialsOf(name, seed)}\n </span>\n );\n};\n"],"mappings":";;;AAyBA,IAAM,IAAyD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAGK,IAAQ;CACZ;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,KAAQ,MAAsB;CAClC,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,EAAG,KAAK,IAAI,KAAK,EAAE,WAAW,EAAE,GAAI;AACvE,QAAO,KAAK,IAAI,EAAE;GAGd,KAAc,GAAsB,MAAiC;CACzE,IAAM,KAAO,KAAQ,IAAI,MAAM;AAC/B,KAAI,GAAK;EACP,IAAM,IAAQ,EAAI,MAAM,MAAM,CAAC,OAAO,QAAQ;AAE9C,SADI,EAAM,UAAU,KAAW,EAAM,GAAG,KAAK,EAAM,EAAM,SAAS,GAAG,IAAI,aAAa,GAC/E,EAAI,MAAM,GAAG,EAAE,CAAC,aAAa;;AAEtC,SACG,KAAQ,KACN,QAAQ,iBAAiB,GAAG,CAC5B,MAAM,GAAG,EAAE,CACX,aAAa,IAAI;GAIX,KAA2B,EAAE,SAAM,SAAM,QAAK,UAAO,MAAM,mBAAgB;CACtF,IAAM,IAAO,EAAM,EAAK,KAAQ,KAAQ,IAAI,GAAG,EAAM;AAUrD,QATI,IAEA,kBAAC,OAAD;EACO;EACL,KAAI;EACJ,WAAW,EAAG,sCAAsC,EAAK,IAAO,EAAU;EAC1E,CAAA,GAIJ,kBAAC,QAAD;EACE,eAAY;EACZ,WAAW,EACT,2FACA,EAAK,IACL,GACA,EACD;YAEA,EAAW,GAAM,EAAK;EAClB,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * BuiDiscussion — a comment thread on any Buildmyiq entity (Integration B).
3
+ * @module buildmyiq/components/BuiDiscussion
4
+ *
5
+ * Reuses the platform EntityComment API (`getEntityComments` /
6
+ * `createEntityComment`) keyed by `(entityType, entityId)` — no buildmyiq-svc change.
7
+ * Renders root comments (author, body, time) + a composer. Robust to empty
8
+ * state and errors.
9
+ */
10
+ interface BuiDiscussionProps {
11
+ entityType: string;
12
+ entityId: string;
13
+ title?: string;
14
+ description?: string;
15
+ }
16
+ export declare function BuiDiscussion({ entityType, entityId, title, description, }: BuiDiscussionProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=BuiDiscussion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiDiscussion.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/BuiDiscussion.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,QAAQ,EACR,KAAoB,EACpB,WAAkE,GACnE,EAAE,kBAAkB,2CAoGpB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * BuiTags — a lightweight tag control for Buildmyiq entities (Integration C).
3
+ * @module buildmyiq/components/BuiTags
4
+ *
5
+ * The buildmyiq svc exposes no tags field, so this drives the platform tag store
6
+ * directly: `getEntityTags` (display), `searchTags` (+ `createTag`) to pick or
7
+ * create, `assignTag`/`removeTagAssignment` to link — all via the workspace
8
+ * gateway. No buildmyiq-svc change.
9
+ */
10
+ interface BuiTagsProps {
11
+ entityType: string;
12
+ entityId: string;
13
+ label?: string;
14
+ }
15
+ export declare function BuiTags({ entityType, entityId, label }: BuiTagsProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=BuiTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiTags.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/BuiTags.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAc,EAAE,EAAE,YAAY,2CAuL7E"}
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface Column<T> {
4
+ key: string;
5
+ header: ReactNode;
6
+ render: (row: T) => ReactNode;
7
+ align?: 'left' | 'right' | 'center';
8
+ className?: string;
9
+ /** Hide below the `md` breakpoint for a mobile-friendly layout. */
10
+ hideOnMobile?: boolean;
11
+ /** Provide to make this column click-sortable (returns a comparable value). */
12
+ sortValue?: (row: T) => string | number;
13
+ }
14
+ interface DataTableProps<T> {
15
+ columns: Column<T>[];
16
+ rows: T[];
17
+ rowKey: (row: T) => string;
18
+ onRowClick?: (row: T) => void;
19
+ className?: string;
20
+ /** Default sort: a column key + direction. */
21
+ defaultSort?: {
22
+ key: string;
23
+ dir: 'asc' | 'desc';
24
+ };
25
+ }
26
+ export declare function DataTable<T>({ columns, rows, rowKey, onRowClick, className, defaultSort, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/DataTable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK1D,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;CACzC;AAED,UAAU,cAAc,CAAC,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD;AAQD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,GACZ,EAAE,cAAc,CAAC,CAAC,CAAC,2CAqGnB"}
@@ -0,0 +1,18 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface EmptyStateProps {
4
+ icon?: ReactNode;
5
+ /**
6
+ * On-brand illustration name → `/illustrations/<name>.webp`. Standard names:
7
+ * empty-data, empty-search, empty-files, empty-people, empty-notifications,
8
+ * onboarding, empty-generic.
9
+ */
10
+ illustration?: string;
11
+ title: string;
12
+ description?: string;
13
+ action?: ReactNode;
14
+ className?: string;
15
+ }
16
+ export declare const EmptyState: FC<EmptyStateProps>;
17
+ export {};
18
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/EmptyState.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA8B1C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { UploadedBuiFile } from '../hooks';
2
+
3
+ interface EvidenceUploadProps {
4
+ id: string;
5
+ label: string;
6
+ value: UploadedBuiFile | null;
7
+ onChange: (value: UploadedBuiFile | null) => void;
8
+ accept?: string;
9
+ disabled?: boolean;
10
+ hint?: string;
11
+ }
12
+ export declare function EvidenceUpload({ id, label, value, onChange, accept, disabled, hint, }: EvidenceUploadProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=EvidenceUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvidenceUpload.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/EvidenceUpload.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAElE,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAA0C,EAC1C,QAAgB,EAChB,IAAI,GACL,EAAE,mBAAmB,2CAkFrB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * FileLink — resolves a federated File id to a download link (Integration A).
3
+ * @module buildmyiq/components/FileLink
4
+ *
5
+ * The buildmyiq queries select `cover { id }` / `media { id }` (just the id). This
6
+ * resolves the platform File via `getFile(id)` for its name + signed
7
+ * `downloadUrl` so evidence/report artifacts render as a real link.
8
+ */
9
+ interface FileLinkProps {
10
+ fileId: string | null | undefined;
11
+ className?: string;
12
+ }
13
+ export declare function FileLink({ fileId, className }: FileLinkProps): import("react/jsx-runtime").JSX.Element | null;
14
+ export {};
15
+ //# sourceMappingURL=FileLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileLink.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/FileLink.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa,kDA0C5D"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * FilterTabs — a segmented status/enum filter control.
3
+ * @module buildmyiq/components
4
+ */
5
+ export interface FilterOption<V extends string> {
6
+ value: V;
7
+ label: string;
8
+ count?: number;
9
+ }
10
+ interface FilterTabsProps<V extends string> {
11
+ options: FilterOption<V>[];
12
+ value: V;
13
+ onChange: (value: V) => void;
14
+ className?: string;
15
+ }
16
+ export declare function FilterTabs<V extends string>({ options, value, onChange, className, }: FilterTabsProps<V>): import("react/jsx-runtime").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=FilterTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTabs.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/FilterTabs.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM;IAC5C,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe,CAAC,CAAC,SAAS,MAAM;IACxC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EAC3C,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,2CAyCpB"}
@@ -0,0 +1,23 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { TrendDirection } from '../types';
3
+
4
+ type Accent = 'success' | 'warning' | 'error';
5
+ interface MetricsCardProps {
6
+ icon: ReactNode;
7
+ value: string | number;
8
+ label: string;
9
+ trend?: TrendDirection;
10
+ trendValue?: string;
11
+ className?: string;
12
+ /** Render as the page's hero metric (glass treatment + accent glow). */
13
+ featured?: boolean;
14
+ /** Severity accent — tints the icon and adds a soft top-edge glow. */
15
+ accent?: Accent;
16
+ /** Optional pill shown in the top-right (e.g. "Critical"). */
17
+ pill?: ReactNode;
18
+ /** Optional slot under the value (e.g. a MiniBar or sub-label). */
19
+ footer?: ReactNode;
20
+ }
21
+ export declare const MetricsCard: FC<MetricsCardProps>;
22
+ export {};
23
+ //# sourceMappingURL=MetricsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/MetricsCard.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,UAAU,gBAAgB;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAoBD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsC5C,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MiniBar — a thin inline progress bar (target progress, completion, breach %).
3
+ * @module buildmyiq/components
4
+ */
5
+ interface MiniBarProps {
6
+ /** 0–100. */
7
+ value: number;
8
+ className?: string;
9
+ /** Bar fill token class (defaults to accent). */
10
+ barClassName?: string;
11
+ /** Height in px. */
12
+ height?: number;
13
+ }
14
+ export declare function MiniBar({ value, className, barClassName, height, }: MiniBarProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=MiniBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniBar.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/MiniBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,UAAU,YAAY;IACpB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,SAAS,EACT,YAAiD,EACjD,MAAU,GACX,EAAE,YAAY,2CAiBd"}
@@ -0,0 +1,16 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface PageLayoutProps {
4
+ title: ReactNode;
5
+ description?: string;
6
+ actions?: ReactNode;
7
+ children: ReactNode;
8
+ className?: string;
9
+ /** Render the title as a gradient hero heading (reserve for the ONE primary page). */
10
+ titleGradient?: boolean;
11
+ /** Drop a subtle living-glass aurora behind the header (primary page only). */
12
+ aurora?: boolean;
13
+ }
14
+ export declare const PageLayout: FC<PageLayoutProps>;
15
+ export {};
16
+ //# sourceMappingURL=PageLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLayout.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/PageLayout.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAoC1C,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pagination — cursor-aware Prev/Next control for Bui* connection lists.
3
+ * @module buildmyiq/components
4
+ *
5
+ * The svc list connections return `pageInfo { cursor, hasMore }` and paginate by
6
+ * cursor (offset is a no-op). Pages track a 0-indexed `page` for display and a
7
+ * cursor stack for navigation; this control exposes Prev/Next, disabling Prev on
8
+ * page 0 and Next when the server reports no more rows.
9
+ */
10
+ interface PaginationProps {
11
+ page: number;
12
+ pageSize: number;
13
+ /** Number of rows on the current page. */
14
+ itemCount: number;
15
+ /** Server flag: are there more rows after this page? */
16
+ hasMore: boolean;
17
+ onPageChange: (page: number) => void;
18
+ className?: string;
19
+ }
20
+ export declare function Pagination({ page, pageSize, itemCount, hasMore, onPageChange, className, }: PaginationProps): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};
22
+ //# sourceMappingURL=Pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/Pagination.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,YAAY,EACZ,SAAS,GACV,EAAE,eAAe,kDAuCjB"}
@@ -0,0 +1,24 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface LoadingViewProps {
4
+ label?: string;
5
+ className?: string;
6
+ }
7
+ export declare const LoadingView: FC<LoadingViewProps>;
8
+ interface ErrorViewProps {
9
+ title?: string;
10
+ message?: string;
11
+ onRetry?: () => void;
12
+ className?: string;
13
+ }
14
+ export declare const ErrorView: FC<ErrorViewProps>;
15
+ interface SectionProps {
16
+ title: string;
17
+ description?: string;
18
+ action?: ReactNode;
19
+ children: ReactNode;
20
+ className?: string;
21
+ }
22
+ export declare const Section: FC<SectionProps>;
23
+ export {};
24
+ //# sourceMappingURL=StateViews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateViews.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/StateViews.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK3C,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAK5C,CAAC;AAEF,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CA2BxC,CAAC;AAEF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAWpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+
3
+ interface StatusBadgeProps {
4
+ status: string;
5
+ className?: string;
6
+ }
7
+ export declare const StatusBadge: FC<StatusBadgeProps>;
8
+ export {};
9
+ //# sourceMappingURL=StatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/StatusBadge.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsB5C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface TabItem<V extends string> {
4
+ value: V;
5
+ label: string;
6
+ icon?: ReactNode;
7
+ count?: number;
8
+ }
9
+ interface TabsProps<V extends string> {
10
+ items: TabItem<V>[];
11
+ value: V;
12
+ onChange: (value: V) => void;
13
+ className?: string;
14
+ }
15
+ export declare function Tabs<V extends string>({ items, value, onChange, className }: TabsProps<V>): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/Tabs.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACvC,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM;IAClC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,2CAyCzF"}
@@ -0,0 +1,25 @@
1
+ import { FC } from 'react';
2
+
3
+ interface ProgressRingProps {
4
+ /** 0–100. */
5
+ value: number;
6
+ size?: number;
7
+ stroke?: number;
8
+ /** CSS colour for the arc (defaults to the teal accent). */
9
+ color?: string;
10
+ /** Center label; when omitted the rounded percent is shown. */
11
+ label?: string;
12
+ className?: string;
13
+ }
14
+ export declare const ProgressRing: FC<ProgressRingProps>;
15
+ interface SparklineProps {
16
+ /** Series of numbers; rendered as a smooth trend line. */
17
+ data: number[];
18
+ width?: number;
19
+ height?: number;
20
+ color?: string;
21
+ className?: string;
22
+ }
23
+ export declare const Sparkline: FC<SparklineProps>;
24
+ export {};
25
+ //# sourceMappingURL=Viz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Viz.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/Viz.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,UAAU,iBAAiB;IACzB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA4C9C,CAAC;AAEF,UAAU,cAAc;IACtB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CA2CxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Viz.js","names":[],"sources":["../../../src/buildmyiq/components/Viz.tsx"],"sourcesContent":["/**\n * Viz — tiny self-contained tokenized SVG chart primitives.\n * @module buildmyiq/components\n *\n * ProgressRing (circular % meter) and Sparkline (trend line). Both are pure SVG,\n * driven by semantic CSS-variable colours (no raw hex), and take numeric data\n * only — the caller always passes REAL derived values.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface ProgressRingProps {\n /** 0–100. */\n value: number;\n size?: number;\n stroke?: number;\n /** CSS colour for the arc (defaults to the teal accent). */\n color?: string;\n /** Center label; when omitted the rounded percent is shown. */\n label?: string;\n className?: string;\n}\n\nexport const ProgressRing: FC<ProgressRingProps> = ({\n value,\n size = 64,\n stroke = 6,\n color = 'var(--color-accent-teal)',\n label,\n className,\n}) => {\n const clamped = Math.max(0, Math.min(100, value));\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n const offset = c - (clamped / 100) * c;\n return (\n <div className={cn('relative inline-flex items-center justify-center', className)} style={{ width: size, height: size }}>\n <svg width={size} height={size} className=\"-rotate-90\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"var(--color-bg-sunken)\"\n strokeWidth={stroke}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={color}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={c}\n strokeDashoffset={offset}\n className=\"transition-[stroke-dashoffset] duration-700 ease-out\"\n />\n </svg>\n <span className=\"absolute text-xs font-semibold tabular-nums text-text-primary\">\n {label ?? `${Math.round(clamped)}%`}\n </span>\n </div>\n );\n};\n\ninterface SparklineProps {\n /** Series of numbers; rendered as a smooth trend line. */\n data: number[];\n width?: number;\n height?: number;\n color?: string;\n className?: string;\n}\n\nexport const Sparkline: FC<SparklineProps> = ({\n data,\n width = 96,\n height = 28,\n color = 'var(--color-accent-teal)',\n className,\n}) => {\n if (data.length < 2) {\n return (\n <svg width={width} height={height} className={className} aria-hidden=\"true\">\n <line\n x1=\"0\"\n y1={height - 2}\n x2={width}\n y2={height - 2}\n stroke=\"var(--color-border-seam)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n const min = Math.min(...data);\n const max = Math.max(...data);\n const span = max - min || 1;\n const stepX = width / (data.length - 1);\n const pts = data.map((v, i) => {\n const x = i * stepX;\n const y = height - 3 - ((v - min) / span) * (height - 6);\n return `${x.toFixed(1)},${y.toFixed(1)}`;\n });\n return (\n <svg width={width} height={height} className={className} aria-hidden=\"true\">\n <polyline\n points={pts.join(' ')}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n"],"mappings":";;;AAwBA,IAAa,KAAuC,EAClD,UACA,UAAO,IACP,YAAS,GACT,WAAQ,4BACR,UACA,mBACI;CACJ,IAAM,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,EAAM,CAAC,EAC3C,KAAK,IAAO,KAAU,GACtB,IAAI,IAAI,KAAK,KAAK,GAClB,IAAS,IAAK,IAAU,MAAO;AACrC,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,oDAAoD,EAAU;EAAE,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;YAAvH,CACE,kBAAC,OAAD;GAAK,OAAO;GAAM,QAAQ;GAAM,WAAU;aAA1C,CACE,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,CAAA,EACF,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACL,QAAQ;IACR,aAAa;IACb,eAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,WAAU;IACV,CAAA,CACE;MACN,kBAAC,QAAD;GAAM,WAAU;aACb,KAAS,GAAG,KAAK,MAAM,EAAQ,CAAC;GAC5B,CAAA,CACH;;GAaG,KAAiC,EAC5C,SACA,WAAQ,IACR,YAAS,IACT,WAAQ,4BACR,mBACI;AACJ,KAAI,EAAK,SAAS,EAChB,QACE,kBAAC,OAAD;EAAY;EAAe;EAAmB;EAAW,eAAY;YACnE,kBAAC,QAAD;GACE,IAAG;GACH,IAAI,IAAS;GACb,IAAI;GACJ,IAAI,IAAS;GACb,QAAO;GACP,aAAY;GACZ,eAAc;GACd,CAAA;EACE,CAAA;CAGV,IAAM,IAAM,KAAK,IAAI,GAAG,EAAK,EAEvB,IADM,KAAK,IAAI,GAAG,EAAK,GACV,KAAO,GACpB,IAAQ,KAAS,EAAK,SAAS;AAMrC,QACE,kBAAC,OAAD;EAAY;EAAe;EAAmB;EAAW,eAAY;YACnE,kBAAC,YAAD;GACE,QARM,EAAK,KAAK,GAAG,MAAM;IAC7B,IAAM,IAAI,IAAI,GACR,IAAI,IAAS,KAAM,IAAI,KAAO,KAAS,IAAS;AACtD,WAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE;KACtC,CAIgB,KAAK,IAAI;GACrB,MAAK;GACL,QAAQ;GACR,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,CAAA;EACE,CAAA"}
1
+ {"version":3,"file":"Viz.js","names":[],"sources":["../../../src/buildmyiq/components/Viz.tsx"],"sourcesContent":["/**\n * Viz — tiny self-contained tokenized SVG chart primitives.\n * @module buildmyiq/components\n *\n * ProgressRing (circular % meter) and Sparkline (trend line). Both are pure SVG,\n * driven by semantic CSS-variable colours (no raw hex), and take numeric data\n * only — the caller always passes REAL derived values.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface ProgressRingProps {\n /** 0–100. */\n value: number;\n size?: number;\n stroke?: number;\n /** CSS colour for the arc (defaults to the teal accent). */\n color?: string;\n /** Center label; when omitted the rounded percent is shown. */\n label?: string;\n className?: string;\n}\n\nexport const ProgressRing: FC<ProgressRingProps> = ({\n value,\n size = 64,\n stroke = 6,\n color = 'var(--color-accent-teal)',\n label,\n className,\n}) => {\n const clamped = Math.max(0, Math.min(100, value));\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n const offset = c - (clamped / 100) * c;\n return (\n <div\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: size, height: size }}\n >\n <svg width={size} height={size} className=\"-rotate-90\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"var(--color-bg-sunken)\"\n strokeWidth={stroke}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={color}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={c}\n strokeDashoffset={offset}\n className=\"transition-[stroke-dashoffset] duration-700 ease-out\"\n />\n </svg>\n <span className=\"absolute text-xs font-semibold tabular-nums text-text-primary\">\n {label ?? `${Math.round(clamped)}%`}\n </span>\n </div>\n );\n};\n\ninterface SparklineProps {\n /** Series of numbers; rendered as a smooth trend line. */\n data: number[];\n width?: number;\n height?: number;\n color?: string;\n className?: string;\n}\n\nexport const Sparkline: FC<SparklineProps> = ({\n data,\n width = 96,\n height = 28,\n color = 'var(--color-accent-teal)',\n className,\n}) => {\n if (data.length < 2) {\n return (\n <svg width={width} height={height} className={className} aria-hidden=\"true\">\n <line\n x1=\"0\"\n y1={height - 2}\n x2={width}\n y2={height - 2}\n stroke=\"var(--color-border-seam)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n const min = Math.min(...data);\n const max = Math.max(...data);\n const span = max - min || 1;\n const stepX = width / (data.length - 1);\n const pts = data.map((v, i) => {\n const x = i * stepX;\n const y = height - 3 - ((v - min) / span) * (height - 6);\n return `${x.toFixed(1)},${y.toFixed(1)}`;\n });\n return (\n <svg width={width} height={height} className={className} aria-hidden=\"true\">\n <polyline\n points={pts.join(' ')}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n"],"mappings":";;;AAwBA,IAAa,KAAuC,EAClD,UACA,UAAO,IACP,YAAS,GACT,WAAQ,4BACR,UACA,mBACI;CACJ,IAAM,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,EAAM,CAAC,EAC3C,KAAK,IAAO,KAAU,GACtB,IAAI,IAAI,KAAK,KAAK,GAClB,IAAS,IAAK,IAAU,MAAO;AACrC,QACE,kBAAC,OAAD;EACE,WAAW,EAAG,oDAAoD,EAAU;EAC5E,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;YAFtC,CAIE,kBAAC,OAAD;GAAK,OAAO;GAAM,QAAQ;GAAM,WAAU;aAA1C,CACE,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,CAAA,EACF,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACL,QAAQ;IACR,aAAa;IACb,eAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,WAAU;IACV,CAAA,CACE;MACN,kBAAC,QAAD;GAAM,WAAU;aACb,KAAS,GAAG,KAAK,MAAM,EAAQ,CAAC;GAC5B,CAAA,CACH;;GAaG,KAAiC,EAC5C,SACA,WAAQ,IACR,YAAS,IACT,WAAQ,4BACR,mBACI;AACJ,KAAI,EAAK,SAAS,EAChB,QACE,kBAAC,OAAD;EAAY;EAAe;EAAmB;EAAW,eAAY;YACnE,kBAAC,QAAD;GACE,IAAG;GACH,IAAI,IAAS;GACb,IAAI;GACJ,IAAI,IAAS;GACb,QAAO;GACP,aAAY;GACZ,eAAc;GACd,CAAA;EACE,CAAA;CAGV,IAAM,IAAM,KAAK,IAAI,GAAG,EAAK,EAEvB,IADM,KAAK,IAAI,GAAG,EAAK,GACV,KAAO,GACpB,IAAQ,KAAS,EAAK,SAAS;AAMrC,QACE,kBAAC,OAAD;EAAY;EAAe;EAAmB;EAAW,eAAY;YACnE,kBAAC,YAAD;GACE,QARM,EAAK,KAAK,GAAG,MAAM;IAC7B,IAAM,IAAI,IAAI,GACR,IAAI,IAAS,KAAM,IAAI,KAAO,KAAS,IAAS;AACtD,WAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE;KACtC,CAIgB,KAAK,IAAI;GACrB,MAAK;GACL,QAAQ;GACR,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,CAAA;EACE,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Components index
3
+ * @module buildmyiq/components
4
+ */
5
+ export { PageLayout } from './PageLayout';
6
+ export { MetricsCard } from './MetricsCard';
7
+ export { StatusBadge } from './StatusBadge';
8
+ export { EmptyState } from './EmptyState';
9
+ export { LoadingView, ErrorView, Section } from './StateViews';
10
+ export { DataTable, type Column } from './DataTable';
11
+ export { FilterTabs, type FilterOption } from './FilterTabs';
12
+ export { Tabs, type TabItem } from './Tabs';
13
+ export { Pagination } from './Pagination';
14
+ export { MiniBar } from './MiniBar';
15
+ export { Avatar } from './Avatar';
16
+ export { ProgressRing, Sparkline } from './Viz';
17
+ export { EvidenceUpload } from './EvidenceUpload';
18
+ export { FileLink } from './FileLink';
19
+ export { BuiDiscussion } from './BuiDiscussion';
20
+ export { BuiTags } from './BuiTags';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { BuildmyiqRootProps } from '../types';
3
+
4
+ interface BuildmyiqContextValue extends Omit<BuildmyiqRootProps, 'registerNavItems' | 'registerFooterItems' | 'navigate'> {
5
+ isStandalone: boolean;
6
+ /** Shell's navigate function (only available in integrated mode). */
7
+ navigate?: (path: string) => void;
8
+ /** Navigate to a path relative to basePath. */
9
+ navigateTo: (relativePath: string) => void;
10
+ /** Get the full path for a relative path. */
11
+ getPath: (relativePath: string) => string;
12
+ }
13
+ export declare function useBuildmyiq(): BuildmyiqContextValue;
14
+ export declare const BuildmyiqProvider: FC<PropsWithChildren<BuildmyiqRootProps>>;
15
+ export {};
16
+ //# sourceMappingURL=BuildmyiqContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildmyiqContext.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/context/BuildmyiqContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,UAAU,qBAAsB,SAAQ,IAAI,CAC1C,kBAAkB,EAClB,kBAAkB,GAAG,qBAAqB,GAAG,UAAU,CACxD;IACC,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,+CAA+C;IAC/C,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,6CAA6C;IAC7C,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C;AAID,wBAAgB,YAAY,IAAI,qBAAqB,CAMpD;AAiHD,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAmBvE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Context index
3
+ * @module buildmyiq/context
4
+ */
5
+ export { BuildmyiqProvider, useBuildmyiq } from './BuildmyiqContext';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/context/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Hooks index
3
+ * @module buildmyiq/hooks
4
+ */
5
+ export * from './useBuildmyiqApi';
6
+ export * from './useCursorPager';
7
+ export * from './useBuiFiles';
8
+ export * from './useBuiComments';
9
+ export * from './useBuiTags';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Buildmyiq — wspace-conversations-svc EntityComment REUSE hooks (Integration B).
3
+ * @module buildmyiq/hooks/useBuiComments
4
+ *
5
+ * Adds a discussion surface to Buildmyiq entities WITHOUT any buildmyiq-svc change by
6
+ * reusing the generic EntityComment API composed into the WORKSPACE supergraph.
7
+ * Comments attach to any entity by `(entityType, entityId)`:
8
+ * - `getEntityComments(input): EntityCommentConnection!`
9
+ * - `createEntityComment(input): EntityComment!`
10
+ *
11
+ * Transport reuses `wspaceFetch` from `useBuiFiles` (workspace gateway +
12
+ * workspace token). Lives in a separate file; `useBuildmyiqApi.ts` is
13
+ * untouched.
14
+ */
15
+ export interface BuiComment {
16
+ id: string;
17
+ authorId: string;
18
+ authorType: string;
19
+ content: {
20
+ text: string | null;
21
+ markdown: string | null;
22
+ };
23
+ createdAt: string;
24
+ edited: boolean;
25
+ parentCommentId: string | null;
26
+ replyCount: number;
27
+ }
28
+ /** Top-level (root) comments for an Buildmyiq entity, oldest first. */
29
+ export declare const useBuiComments: (entityType: string, entityId: string | undefined) => import('@tanstack/react-query').UseQueryResult<{
30
+ items: BuiComment[];
31
+ total: number;
32
+ }, Error>;
33
+ export declare const useEcoCreateComment: (entityType: string, entityId: string) => import('@tanstack/react-query').UseMutationResult<{
34
+ id: string;
35
+ }, Error, string, unknown>;
36
+ //# sourceMappingURL=useBuiComments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBuiComments.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/hooks/useBuiComments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,uEAAuE;AACvE,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS;;;SAwC9E,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,EAAE,UAAU,MAAM;QAKN,MAAM;0BAmBvE,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Buildmyiq — wspace-files-svc REUSE hooks (Integration A).
3
+ * @module buildmyiq/hooks/useBuiFiles
4
+ *
5
+ * Reuses the platform file store (`wspace-files-svc`) WITHOUT any buildmyiq-svc
6
+ * change: the buildmyiq schema already exposes `BuiLesson.mediaFileId` /
7
+ * `BuiCertificate.fileId`; this module lets the UI actually produce a `fileId` via
8
+ * the canonical 3-step upload flow composed into the WORKSPACE supergraph:
9
+ * 1. `initiateUpload(input)` → `{ uploadUrl, session { id } }`
10
+ * 2. HTTP `PUT` the bytes to the returned signed `uploadUrl`
11
+ * 3. `completeUpload(input: { sessionId })` → `{ fileId }`
12
+ * plus `getFile(id)` to resolve an existing evidence/report file's name + URL.
13
+ *
14
+ * Transport mirrors `useBuildmyiqApi` exactly — `graphqlFetch({ gateway:
15
+ * 'workspace', workspaceToken: true })` — so no ApolloProvider is required.
16
+ * These hooks live in a SEPARATE file by design; `useBuildmyiqApi.ts` is
17
+ * left untouched.
18
+ */
19
+ /** Execute a workspace-gateway GraphQL operation with the workspace token. */
20
+ export declare const wspaceFetch: <TData>(query: string, variables: Record<string, unknown>, baseUrl?: string) => Promise<TData>;
21
+ export interface UploadedBuiFile {
22
+ fileId: string;
23
+ fileName: string;
24
+ }
25
+ export interface UseBuiFileUploadResult {
26
+ upload: (file: File) => Promise<UploadedBuiFile>;
27
+ isUploading: boolean;
28
+ /** 0–100 byte-progress of the signed-URL PUT. */
29
+ progress: number;
30
+ error: string | null;
31
+ reset: () => void;
32
+ }
33
+ /**
34
+ * Imperative upload hook: `await upload(file)` runs the platform 3-step flow and
35
+ * resolves to `{ fileId, fileName }`. `fileId` is what the buildmyiq mutations accept
36
+ * (`buiCreateCourse.coverFileId`, `buiIssueCertificate.fileId`).
37
+ */
38
+ export declare const useBuiFileUpload: () => UseBuiFileUploadResult;
39
+ export interface BuiFileMeta {
40
+ id: string;
41
+ name: string;
42
+ downloadUrl: string | null;
43
+ mimeType: string;
44
+ size: string;
45
+ }
46
+ export declare const useEcoFile: (id: string | null | undefined) => import('@tanstack/react-query').UseQueryResult<BuiFileMeta | null, Error>;
47
+ //# sourceMappingURL=useBuiFiles.d.ts.map