@flamingo-stack/openframe-frontend-core 0.0.842 → 0.0.843

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 (74) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-YNKXXDOI.cjs → chunk-2H5D2PUC.cjs} +4 -4
  3. package/dist/{chunk-7UZYI4GV.cjs → chunk-2JZFXGHE.cjs} +2 -2
  4. package/dist/{chunk-GQJXOX5S.cjs → chunk-2WGA2IRN.cjs} +157 -85
  5. package/dist/{chunk-RAFWT3WG.cjs → chunk-3IXW2EKO.cjs} +24 -24
  6. package/dist/{chunk-3ONBCAD2.cjs → chunk-DUB2UVYS.cjs} +22 -33
  7. package/dist/{chunk-CQQRGM6D.cjs → chunk-HLMA6CDT.cjs} +31 -31
  8. package/dist/{chunk-ZOWAYKDN.cjs → chunk-OGINOWMT.cjs} +3 -3
  9. package/dist/{chunk-2HRQU4ZL.cjs → chunk-QBZ73IK7.cjs} +10 -10
  10. package/dist/{chunk-WOYARKPQ.cjs → chunk-QJRZVIQP.cjs} +7 -7
  11. package/dist/{chunk-SMZWXY4X.cjs → chunk-QKZQ5Q6E.cjs} +6 -1
  12. package/dist/{chunk-IVM35OAW.cjs → chunk-SOQVKIWM.cjs} +3 -3
  13. package/dist/{chunk-IVS23CAK.cjs → chunk-ZXEWBJUE.cjs} +3 -3
  14. package/dist/{cloud-tenants-U6Y2UZVF.cjs → cloud-tenants-VPYROTKH.cjs} +2 -2
  15. package/dist/components/case-studies/index.cjs +11 -11
  16. package/dist/components/contact/index.cjs +3 -3
  17. package/dist/components/docs/index.cjs +4 -4
  18. package/dist/components/embeds/index.cjs +3 -3
  19. package/dist/components/faq/index.cjs +3 -3
  20. package/dist/components/features/devices/device-unread-indicator.d.ts +6 -0
  21. package/dist/components/features/devices/device-unread-indicator.d.ts.map +1 -0
  22. package/dist/components/features/devices/device-unread-indicator.js +12 -0
  23. package/dist/components/features/devices/devices-grid.d.ts.map +1 -1
  24. package/dist/components/features/devices/devices-grid.js +5 -1
  25. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
  26. package/dist/components/features/devices/devices-table-columns.js +3 -1
  27. package/dist/components/features/devices/devices-view-config.d.ts +6 -4
  28. package/dist/components/features/devices/devices-view-config.d.ts.map +1 -1
  29. package/dist/components/features/devices/index.d.ts +1 -0
  30. package/dist/components/features/devices/index.d.ts.map +1 -1
  31. package/dist/components/features/devices/index.js +2 -0
  32. package/dist/components/features/devices/types.d.ts +2 -0
  33. package/dist/components/features/devices/types.d.ts.map +1 -1
  34. package/dist/components/features/index.cjs +4 -2
  35. package/dist/components/help-center-pages/index.cjs +46 -46
  36. package/dist/components/index.cjs +25 -17
  37. package/dist/components/meeting-scheduler/index.cjs +20 -20
  38. package/dist/components/navigation/count-pill.d.ts +10 -0
  39. package/dist/components/navigation/count-pill.d.ts.map +1 -0
  40. package/dist/components/navigation/count-pill.js +18 -0
  41. package/dist/components/navigation/index.cjs +9 -3
  42. package/dist/components/navigation/index.d.ts +4 -0
  43. package/dist/components/navigation/index.d.ts.map +1 -1
  44. package/dist/components/navigation/index.js +5 -0
  45. package/dist/components/navigation/navigation-sidebar-grouped.d.ts.map +1 -1
  46. package/dist/components/navigation/navigation-sidebar-grouped.js +1 -12
  47. package/dist/components/navigation/unread-notifications-indicator.d.ts +19 -0
  48. package/dist/components/navigation/unread-notifications-indicator.d.ts.map +1 -0
  49. package/dist/components/navigation/unread-notifications-indicator.js +45 -0
  50. package/dist/components/onboarding-guides/index.cjs +3 -3
  51. package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -1
  52. package/dist/components/product-demo/fixtures/devices.js +6 -1
  53. package/dist/components/product-demo/index.cjs +11 -11
  54. package/dist/components/tickets/index.cjs +5 -5
  55. package/dist/components/ui/index.cjs +2 -2
  56. package/dist/{devices-HB4GEMJH.cjs → devices-W76BAABE.cjs} +5 -5
  57. package/dist/index.cjs +11 -3
  58. package/dist/{knowledge-I53Z6DV7.cjs → knowledge-ILAIWOSY.cjs} +2 -2
  59. package/dist/{logs-SFLAZIQG.cjs → logs-VCPRFJGB.cjs} +9 -9
  60. package/dist/{policies-EIAGQO6T.cjs → policies-3BNAW4M5.cjs} +6 -6
  61. package/dist/{scripts-SNJ4UVRF.cjs → scripts-VFFSJDYV.cjs} +7 -7
  62. package/dist/{software-update-AZFRUC5N.cjs → software-update-VTBTLCZO.cjs} +7 -7
  63. package/package.json +1 -1
  64. package/src/components/features/devices/device-unread-indicator.tsx +14 -0
  65. package/src/components/features/devices/devices-grid.tsx +9 -1
  66. package/src/components/features/devices/devices-table-columns.tsx +3 -0
  67. package/src/components/features/devices/devices-view-config.tsx +6 -4
  68. package/src/components/features/devices/index.ts +1 -0
  69. package/src/components/features/devices/types.ts +2 -0
  70. package/src/components/navigation/count-pill.tsx +25 -0
  71. package/src/components/navigation/index.ts +4 -0
  72. package/src/components/navigation/navigation-sidebar-grouped.tsx +1 -14
  73. package/src/components/navigation/unread-notifications-indicator.tsx +69 -0
  74. package/src/components/product-demo/fixtures/devices.ts +7 -0
@@ -5,12 +5,12 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
8
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
9
9
 
10
10
  // src/components/product-demo/screens/devices-view.tsx
11
11
  var _jsxruntime = require('react/jsx-runtime');
12
12
  var DEVICES_SEARCH_QUERY = "Windows";
13
- var TOOLBAR = { ..._chunkGQJXOX5Scjs.IDLE_DEVICES_TOOLBAR, searchValue: DEVICES_SEARCH_QUERY };
13
+ var TOOLBAR = { ..._chunk2WGA2IRNcjs.IDLE_DEVICES_TOOLBAR, searchValue: DEVICES_SEARCH_QUERY };
14
14
  var NO_HEADER = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
15
15
  var HIDDEN_WHEN_COMPACT = ["organization"];
16
16
  var NO_DEVICES = [];
@@ -22,7 +22,7 @@ function DevicesScreenView({
22
22
  loading = false
23
23
  }) {
24
24
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25
- _chunkGQJXOX5Scjs.DevicesPanelView,
25
+ _chunk2WGA2IRNcjs.DevicesPanelView,
26
26
  {
27
27
  className: "p-[var(--spacing-system-l)]",
28
28
  headerSlot: NO_HEADER,
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkIVM35OAWcjs = require('./chunk-IVM35OAW.cjs');
6
+ var _chunkSOQVKIWMcjs = require('./chunk-SOQVKIWM.cjs');
7
7
 
8
8
 
9
9
 
@@ -20,7 +20,7 @@ var _chunk6M764K5Zcjs = require('./chunk-6M764K5Z.cjs');
20
20
 
21
21
 
22
22
 
23
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
23
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
24
24
 
25
25
 
26
26
  var _chunkWCK5T3UDcjs = require('./chunk-WCK5T3UD.cjs');
@@ -354,7 +354,7 @@ function toDocContent(value, requestedPath) {
354
354
  function toDataSync(value) {
355
355
  if (!isRecord(value)) return void 0;
356
356
  const source = readString(value, "source");
357
- if (!_chunkGQJXOX5Scjs.isDataSyncSource.call(void 0, source)) return void 0;
357
+ if (!_chunk2WGA2IRNcjs.isDataSyncSource.call(void 0, source)) return void 0;
358
358
  return { source, syncedAt: _nullishCoalesce(readString(value, "syncedAt"), () => ( null)) };
359
359
  }
360
360
  function useDocumentTree(config, initialPath) {
@@ -796,7 +796,7 @@ function DocViewerContent({
796
796
  const defaultEmptyText = structure.length > 0 ? "Select a document from the sidebar to view" : "No documents yet. Add content from the admin panel.";
797
797
  const resolvedEmptyText = emptyStateText || defaultEmptyText;
798
798
  const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { ...bgStyle, ...containerBgStyle }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWCK5T3UDcjs.PageLayout, { title, subtitle, titleSize: "h1", titleWrap: true, backButton: _nullishCoalesce(backCfg, () => ( void 0)), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-10", children: [
799
- synced && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.DataSyncLine, { sync: _optionalChain([content, 'optionalAccess', _19 => _19.sync]), loading: !content && (isLoadingContent || isLoadingStructure) }),
799
+ synced && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.DataSyncLine, { sync: _optionalChain([content, 'optionalAccess', _19 => _19.sync]), loading: !content && (isLoadingContent || isLoadingStructure) }),
800
800
  showAIChat && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
801
801
  _chunk6M764K5Zcjs.DocSearchBar,
802
802
  {
@@ -887,7 +887,7 @@ function DocViewerContent({
887
887
  ) })
888
888
  ] })
889
889
  ] }) }) });
890
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
890
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
891
891
  }
892
892
 
893
893
  // src/components/docs/skeletons.tsx
@@ -959,7 +959,7 @@ function EmbedSkeleton({ documentType, region = true } = {}) {
959
959
  ] }),
960
960
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex w-full items-center gap-2 content-sm:w-auto", children: Array.from({ length: buttonCount }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3TOWCFIKcjs.UnifiedSkeleton, { className: "h-10 w-full flex-1 rounded content-sm:w-32 content-sm:flex-initial" }, i)) })
961
961
  ] }),
962
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.EmbedLoadingSkeleton, { region: false })
962
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.EmbedLoadingSkeleton, { region: false })
963
963
  ] });
964
964
  }
965
965
 
@@ -967,11 +967,11 @@ function EmbedSkeleton({ documentType, region = true } = {}) {
967
967
 
968
968
  var DEFAULT_TITLE = "Documents";
969
969
  var defaultFallbackRenderer = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "py-16 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary", children: "Unsupported document type" }) });
970
- var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIVM35OAWcjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
971
- var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIVM35OAWcjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
972
- var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
970
+ var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSOQVKIWMcjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
971
+ var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSOQVKIWMcjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
972
+ var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
973
973
  var defaultFileRenderer = (content) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
974
- _chunkIVM35OAWcjs.FileDownloadCard,
974
+ _chunkSOQVKIWMcjs.FileDownloadCard,
975
975
  {
976
976
  fileName: content.fileName,
977
977
  mimeType: content.mimeType,
@@ -12,7 +12,7 @@ var _chunk6M764K5Zcjs = require('./chunk-6M764K5Z.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
15
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
16
16
 
17
17
 
18
18
  var _chunkWCK5T3UDcjs = require('./chunk-WCK5T3UD.cjs');
@@ -173,7 +173,7 @@ function OnboardingGuidesCatalogView({
173
173
  }
174
174
  ),
175
175
  (loading || sections.length > 0) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
176
- _chunkGQJXOX5Scjs.FilterPillRow,
176
+ _chunk2WGA2IRNcjs.FilterPillRow,
177
177
  {
178
178
  label: "Section",
179
179
  selectedValue: activeSection,
@@ -184,7 +184,7 @@ function OnboardingGuidesCatalogView({
184
184
  )
185
185
  ] });
186
186
  if (!loading && selfFetch && guidesRes.error) {
187
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
187
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
188
188
  }
189
189
  const view = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: CATALOG_VIEW_CLASS, children: [
190
190
  preControls,
@@ -304,7 +304,7 @@ function OnboardingGuideDetailView({
304
304
  slug,
305
305
  guideEndpoint,
306
306
  related = [],
307
- MarkdownRenderer = _chunkGQJXOX5Scjs.RichMarkdownRenderer,
307
+ MarkdownRenderer = _chunk2WGA2IRNcjs.RichMarkdownRenderer,
308
308
  renderRelatedCard,
309
309
  backHref,
310
310
  backLabel = "Back to Getting Started",
@@ -316,7 +316,7 @@ function OnboardingGuideDetailView({
316
316
  const runtime = _chunkUJ7AXHRZcjs.useChatRuntime.call(void 0, );
317
317
  const captions = _chunkWPMJUYW3cjs.useCaptions.call(void 0, );
318
318
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
319
- const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
319
+ const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
320
320
  const url = initialData ? null : slug && guideEndpoint ? guideEndpoint(slug) : null;
321
321
  const scoped = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, );
322
322
  const {
@@ -334,7 +334,7 @@ function OnboardingGuideDetailView({
334
334
  const backCfg = { label: backLabel, onClick: () => router.push(resolvedBackHref) };
335
335
  const loading = scoped || !guide && isLoading;
336
336
  if (!loading && (error || !guide)) {
337
- return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.LoadError, { message: "Guide not found.", onRetry: reload }));
337
+ return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.LoadError, { message: "Guide not found.", onRetry: reload }));
338
338
  }
339
339
  const view = _nullishCoalesce(guide, () => ( EMPTY_ONBOARDING_GUIDE));
340
340
  const { captionsUrl, highlightCaptionsUrl } = captions.forEntity("onboarding_guide", view);
@@ -352,7 +352,7 @@ function OnboardingGuideDetailView({
352
352
  };
353
353
  const renderRelatedCardFn = _nullishCoalesce(renderRelatedCard, () => ( defaultRenderRelatedCard));
354
354
  const page = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWCK5T3UDcjs.PageLayout, { title: view.title, loading, titleSize: "h1", titleWrap: true, backButton: backCfg, children: [
355
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.EntityTagBadges, { tags: view.onboarding_guide_tags }),
355
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.EntityTagBadges, { tags: view.onboarding_guide_tags }),
356
356
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
357
357
  _chunk23DVVS4Icjs.EntityAuthorCard,
358
358
  {
@@ -6,6 +6,10 @@
6
6
  var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
7
7
 
8
8
  // src/components/product-demo/fixtures/devices.ts
9
+ var DEMO_UNREAD_NOTIFICATIONS = {
10
+ "device-reception": 2,
11
+ "device-leo": 1
12
+ };
9
13
  function device(cast, demo, type, status, lastSeenMinutesAgo) {
10
14
  const organization = cast.organization(demo.organization);
11
15
  return {
@@ -19,7 +23,8 @@ function device(cast, demo, type, status, lastSeenMinutesAgo) {
19
23
  last_seen: _chunkFDZOE5TLcjs.demoMinutesAgo.call(void 0, lastSeenMinutesAgo),
20
24
  organizationId: organization.id,
21
25
  organization: organization.name,
22
- organizationImageUrl: organization.logoUrl
26
+ organizationImageUrl: organization.logoUrl,
27
+ unreadNotificationCount: DEMO_UNREAD_NOTIFICATIONS[demo.id]
23
28
  };
24
29
  }
25
30
  function countBy(devices, pick) {
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
4
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
5
5
 
6
6
 
7
7
  var _chunkCKR42OBKcjs = require('./chunk-CKR42OBK.cjs');
@@ -48,7 +48,7 @@ function GoogleSheetsViewer({ externalUrl, fileName, height }) {
48
48
  ] });
49
49
  }
50
50
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
51
- _chunkGQJXOX5Scjs.EmbedViewerFrame,
51
+ _chunk2WGA2IRNcjs.EmbedViewerFrame,
52
52
  {
53
53
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCKR42OBKcjs.GoogleSheetsIcon, { className: "h-5 w-5 shrink-0" }),
54
54
  title: displayName,
@@ -83,7 +83,7 @@ function PdfViewer({ src, fileName, onPreview, onDownload, height }) {
83
83
  ] });
84
84
  }
85
85
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
86
- _chunkGQJXOX5Scjs.EmbedViewerFrame,
86
+ _chunk2WGA2IRNcjs.EmbedViewerFrame,
87
87
  {
88
88
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkM7ZSKWT3cjs.AdobePdfIcon, { className: "h-5 w-5 shrink-0" }),
89
89
  title: displayName,
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
5
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
6
6
 
7
7
 
8
8
 
@@ -209,7 +209,7 @@ function ContactForm({
209
209
  !showEmail && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "input", { type: "hidden", ...register("email") }),
210
210
  !showHelpCategory && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "input", { type: "hidden", ...register("helpCategory") }),
211
211
  !showMessage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "input", { type: "hidden", ...register("message") }),
212
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.HoneypotField, { ...honeypotInputProps }),
212
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.HoneypotField, { ...honeypotInputProps }),
213
213
  extraTopField,
214
214
  showNameEmailRow && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-md:gap-6", children: [
215
215
  showName && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
@@ -334,7 +334,7 @@ function ContactForm({
334
334
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSWF6TNZ3cjs.RequiredMark, {})
335
335
  ] }),
336
336
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
337
- _chunkGQJXOX5Scjs.Textarea,
337
+ _chunk2WGA2IRNcjs.Textarea,
338
338
  {
339
339
  id: "message",
340
340
  ...register("message"),
@@ -9,7 +9,7 @@ var _chunkLHV2R6QUcjs = require('./chunk-LHV2R6QU.cjs');
9
9
  var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
10
10
 
11
11
 
12
- var _chunkGQJXOX5Scjs = require('./chunk-GQJXOX5S.cjs');
12
+ var _chunk2WGA2IRNcjs = require('./chunk-2WGA2IRN.cjs');
13
13
  require('./chunk-WCK5T3UD.cjs');
14
14
  require('./chunk-744JXTDP.cjs');
15
15
  require('./chunk-NMLNZCK2.cjs');
@@ -1921,7 +1921,7 @@ var getHref = () => "#";
1921
1921
  function CloudTenantsScreen(_props) {
1922
1922
  const cast = _chunkLHV2R6QUcjs.useProductDemoCast.call(void 0, );
1923
1923
  const fixture = _react.useMemo.call(void 0, () => buildCloudTenantsFixture(cast), [cast]);
1924
- const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.TenantsTableView, { rows: fixture.rows, getHref, now: fixture.now });
1924
+ const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.TenantsTableView, { rows: fixture.rows, getHref, now: fixture.now });
1925
1925
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg p-[var(--spacing-system-l)]", children: table });
1926
1926
  }
1927
1927
 
@@ -4,13 +4,13 @@
4
4
  var _chunkDTKGIG4Acjs = require('../../chunk-DTKGIG4A.cjs');
5
5
 
6
6
 
7
- var _chunkIVS23CAKcjs = require('../../chunk-IVS23CAK.cjs');
7
+ var _chunkZXEWBJUEcjs = require('../../chunk-ZXEWBJUE.cjs');
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
- var _chunkGQJXOX5Scjs = require('../../chunk-GQJXOX5S.cjs');
13
+ var _chunk2WGA2IRNcjs = require('../../chunk-2WGA2IRN.cjs');
14
14
  require('../../chunk-WCK5T3UD.cjs');
15
15
  require('../../chunk-744JXTDP.cjs');
16
16
  require('../../chunk-NMLNZCK2.cjs');
@@ -1934,9 +1934,9 @@ function ShareExperienceSection({
1934
1934
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-h2", children: howItWorksTitle }),
1935
1935
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4", children: howItWorksBody })
1936
1936
  ] }),
1937
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkGQJXOX5Scjs.BenefitCardGrid, { columns: 4, children: [
1937
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk2WGA2IRNcjs.BenefitCardGrid, { columns: 4, children: [
1938
1938
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1939
- _chunkGQJXOX5Scjs.BenefitCard,
1939
+ _chunk2WGA2IRNcjs.BenefitCard,
1940
1940
  {
1941
1941
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMJQLBIZMcjs.G2Icon, { color: "var(--social-g2)", size: 24 }) }),
1942
1942
  title: "G2",
@@ -1945,7 +1945,7 @@ function ShareExperienceSection({
1945
1945
  }
1946
1946
  ),
1947
1947
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1948
- _chunkGQJXOX5Scjs.BenefitCard,
1948
+ _chunk2WGA2IRNcjs.BenefitCard,
1949
1949
  {
1950
1950
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA2VKPXOBcjs.CapterraIcon, { size: 24 }) }),
1951
1951
  title: "Capterra",
@@ -1954,7 +1954,7 @@ function ShareExperienceSection({
1954
1954
  }
1955
1955
  ),
1956
1956
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1957
- _chunkGQJXOX5Scjs.BenefitCard,
1957
+ _chunk2WGA2IRNcjs.BenefitCard,
1958
1958
  {
1959
1959
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTLKSZG3Dcjs.TrustpilotIcon, { size: 24 }) }),
1960
1960
  title: "TrustPilot",
@@ -1963,7 +1963,7 @@ function ShareExperienceSection({
1963
1963
  }
1964
1964
  ),
1965
1965
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1966
- _chunkGQJXOX5Scjs.BenefitCard,
1966
+ _chunk2WGA2IRNcjs.BenefitCard,
1967
1967
  {
1968
1968
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkILYW6BQNcjs.GetappIcon, { size: 24 }) }),
1969
1969
  title: "GetApp",
@@ -1972,7 +1972,7 @@ function ShareExperienceSection({
1972
1972
  }
1973
1973
  )
1974
1974
  ] }),
1975
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIVS23CAKcjs.ContactForm, { ...DEFAULT_CONTACT_FORM_PROPS, ...contactFormProps })
1975
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZXEWBJUEcjs.ContactForm, { ...DEFAULT_CONTACT_FORM_PROPS, ...contactFormProps })
1976
1976
  ] }) })
1977
1977
  ] });
1978
1978
  }
@@ -1989,7 +1989,7 @@ function EntityQuotesPanel({ quotes, className }) {
1989
1989
  // Optional per record, so the loading state draws none: the gate leaves the loaded panel out of its comparison.
1990
1990
  // A plain block around the one panel, so the parent's spacing applies to it as it did to the panel.
1991
1991
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-loading-optional": true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1992
- _chunkGQJXOX5Scjs.StackedRowsPanel,
1992
+ _chunk2WGA2IRNcjs.StackedRowsPanel,
1993
1993
  {
1994
1994
  className,
1995
1995
  title: `${_chunkDTKGIG4Acjs.ENTITY_QUOTES_TITLE} \xB7 ${quotes.length}`,
@@ -2027,14 +2027,14 @@ function QuoteCardTile({ quote, decorative, className, loading, ...props }) {
2027
2027
  className: _chunk63A4GZMBcjs.cn.call(void 0, QUOTE_CARD_CLASS, "hover:border-ods-border-hover", className),
2028
2028
  ...props,
2029
2029
  children: [
2030
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.PersonCell, { size: "lg", name: `"${quote.text}"`, secondary: quote.attribution, avatarUrl: quote.logoUrl }),
2030
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.PersonCell, { size: "lg", name: `"${quote.text}"`, secondary: quote.attribution, avatarUrl: quote.logoUrl }),
2031
2031
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWPMJUYW3cjs.CardHitLayer, { href: quote.href, label: `${quote.text}, ${quote.attribution}`, decorative })
2032
2032
  ]
2033
2033
  }
2034
2034
  );
2035
2035
  }
2036
2036
  function QuoteCardTileSkeleton({ className }) {
2037
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEUEPGHY4cjs.Card, { variant: "panel", className: _chunk63A4GZMBcjs.cn.call(void 0, QUOTE_CARD_CLASS, className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2XCORRJVcjs.LoadingRegion, { label: "Loading a customer story", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGQJXOX5Scjs.PersonCell, { loading: true, size: "lg" }) }) });
2037
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEUEPGHY4cjs.Card, { variant: "panel", className: _chunk63A4GZMBcjs.cn.call(void 0, QUOTE_CARD_CLASS, className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2XCORRJVcjs.LoadingRegion, { label: "Loading a customer story", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2WGA2IRNcjs.PersonCell, { loading: true, size: "lg" }) }) });
2038
2038
  }
2039
2039
  var QUOTE_STRIP_SKELETON_CARDS = 4;
2040
2040
  function QuoteCardsStripSkeleton({ count, className }) {
@@ -1,8 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunkIVS23CAKcjs = require('../../chunk-IVS23CAK.cjs');
5
- require('../../chunk-GQJXOX5S.cjs');
4
+ var _chunkZXEWBJUEcjs = require('../../chunk-ZXEWBJUE.cjs');
5
+ require('../../chunk-2WGA2IRN.cjs');
6
6
  require('../../chunk-WCK5T3UD.cjs');
7
7
  require('../../chunk-744JXTDP.cjs');
8
8
  require('../../chunk-NMLNZCK2.cjs');
@@ -1857,4 +1857,4 @@ require('../../chunk-V45KLJQP.cjs');
1857
1857
  require('../../chunk-QDB2JO55.cjs');
1858
1858
 
1859
1859
 
1860
- exports.ContactForm = _chunkIVS23CAKcjs.ContactForm;
1860
+ exports.ContactForm = _chunkZXEWBJUEcjs.ContactForm;
@@ -6,13 +6,13 @@
6
6
 
7
7
 
8
8
 
9
- var _chunk2HRQU4ZLcjs = require('../../chunk-2HRQU4ZL.cjs');
10
- require('../../chunk-IVM35OAW.cjs');
9
+ var _chunkQBZ73IK7cjs = require('../../chunk-QBZ73IK7.cjs');
10
+ require('../../chunk-SOQVKIWM.cjs');
11
11
 
12
12
 
13
13
  var _chunk5CPEMPNPcjs = require('../../chunk-5CPEMPNP.cjs');
14
14
  require('../../chunk-6M764K5Z.cjs');
15
- require('../../chunk-GQJXOX5S.cjs');
15
+ require('../../chunk-2WGA2IRN.cjs');
16
16
  require('../../chunk-WCK5T3UD.cjs');
17
17
  require('../../chunk-744JXTDP.cjs');
18
18
  require('../../chunk-NMLNZCK2.cjs');
@@ -1872,4 +1872,4 @@ require('../../chunk-QDB2JO55.cjs');
1872
1872
 
1873
1873
 
1874
1874
 
1875
- exports.DocNavigationProvider = _chunk2HRQU4ZLcjs.DocNavigationProvider; exports.DocViewer = _chunk2HRQU4ZLcjs.DocViewer; exports.DocsHubPage = _chunk2HRQU4ZLcjs.DocsHubPage; exports.useDocNavigation = _chunk2HRQU4ZLcjs.useDocNavigation; exports.useDocumentTree = _chunk2HRQU4ZLcjs.useDocumentTree; exports.useScrollSpy = _chunk5CPEMPNPcjs.useScrollSpy;
1875
+ exports.DocNavigationProvider = _chunkQBZ73IK7cjs.DocNavigationProvider; exports.DocViewer = _chunkQBZ73IK7cjs.DocViewer; exports.DocsHubPage = _chunkQBZ73IK7cjs.DocsHubPage; exports.useDocNavigation = _chunkQBZ73IK7cjs.useDocNavigation; exports.useDocumentTree = _chunkQBZ73IK7cjs.useDocumentTree; exports.useScrollSpy = _chunk5CPEMPNPcjs.useScrollSpy;
@@ -4,7 +4,7 @@ require('../../chunk-7SEARXQW.cjs');
4
4
 
5
5
 
6
6
 
7
- var _chunkIVM35OAWcjs = require('../../chunk-IVM35OAW.cjs');
7
+ var _chunkSOQVKIWMcjs = require('../../chunk-SOQVKIWM.cjs');
8
8
 
9
9
 
10
10
 
@@ -25,7 +25,7 @@ var _chunkIVM35OAWcjs = require('../../chunk-IVM35OAW.cjs');
25
25
 
26
26
 
27
27
 
28
- var _chunkGQJXOX5Scjs = require('../../chunk-GQJXOX5S.cjs');
28
+ var _chunk2WGA2IRNcjs = require('../../chunk-2WGA2IRN.cjs');
29
29
  require('../../chunk-WCK5T3UD.cjs');
30
30
  require('../../chunk-744JXTDP.cjs');
31
31
  require('../../chunk-NMLNZCK2.cjs');
@@ -1901,4 +1901,4 @@ require('../../chunk-QDB2JO55.cjs');
1901
1901
 
1902
1902
 
1903
1903
 
1904
- exports.ClaudeEmbed = _chunkGQJXOX5Scjs.ClaudeEmbed; exports.EMBED_SIZES = _chunkGQJXOX5Scjs.EMBED_SIZES; exports.EmbedContainer = _chunkGQJXOX5Scjs.EmbedContainer; exports.EmbedIframe = _chunkGQJXOX5Scjs.EmbedIframe; exports.EmbedViewerFrame = _chunkGQJXOX5Scjs.EmbedViewerFrame; exports.FigmaEmbed = _chunkGQJXOX5Scjs.FigmaEmbed; exports.FileDownloadCard = _chunkIVM35OAWcjs.FileDownloadCard; exports.GoogleSheetsViewer = _chunkIVM35OAWcjs.GoogleSheetsViewer; exports.LinkPreviewContainer = _chunkGQJXOX5Scjs.LinkPreviewContainer; exports.LinkedInContainer = _chunkGQJXOX5Scjs.LinkedInContainer; exports.LinkedInEmbedClient = _chunkGQJXOX5Scjs.LinkedInEmbedClient; exports.MarkdownImage = _chunkGQJXOX5Scjs.MarkdownImage; exports.OGLinkErrorBoundary = _chunkGQJXOX5Scjs.OGLinkErrorBoundary; exports.OGLinkPreview = _chunkGQJXOX5Scjs.OGLinkPreview; exports.PdfViewer = _chunkIVM35OAWcjs.PdfViewer; exports.RedditContainer = _chunkGQJXOX5Scjs.RedditContainer; exports.RedditEmbedClient = _chunkGQJXOX5Scjs.RedditEmbedClient; exports.RichMarkdownRuntimeProvider = _chunkGQJXOX5Scjs.RichMarkdownRuntimeProvider; exports.TwitterContainer = _chunkGQJXOX5Scjs.TwitterContainer; exports.TwitterEmbedClient = _chunkGQJXOX5Scjs.TwitterEmbedClient; exports.YouTubeContainer = _chunkGQJXOX5Scjs.YouTubeContainer; exports.useRichMarkdownRuntime = _chunkGQJXOX5Scjs.useRichMarkdownRuntime;
1904
+ exports.ClaudeEmbed = _chunk2WGA2IRNcjs.ClaudeEmbed; exports.EMBED_SIZES = _chunk2WGA2IRNcjs.EMBED_SIZES; exports.EmbedContainer = _chunk2WGA2IRNcjs.EmbedContainer; exports.EmbedIframe = _chunk2WGA2IRNcjs.EmbedIframe; exports.EmbedViewerFrame = _chunk2WGA2IRNcjs.EmbedViewerFrame; exports.FigmaEmbed = _chunk2WGA2IRNcjs.FigmaEmbed; exports.FileDownloadCard = _chunkSOQVKIWMcjs.FileDownloadCard; exports.GoogleSheetsViewer = _chunkSOQVKIWMcjs.GoogleSheetsViewer; exports.LinkPreviewContainer = _chunk2WGA2IRNcjs.LinkPreviewContainer; exports.LinkedInContainer = _chunk2WGA2IRNcjs.LinkedInContainer; exports.LinkedInEmbedClient = _chunk2WGA2IRNcjs.LinkedInEmbedClient; exports.MarkdownImage = _chunk2WGA2IRNcjs.MarkdownImage; exports.OGLinkErrorBoundary = _chunk2WGA2IRNcjs.OGLinkErrorBoundary; exports.OGLinkPreview = _chunk2WGA2IRNcjs.OGLinkPreview; exports.PdfViewer = _chunkSOQVKIWMcjs.PdfViewer; exports.RedditContainer = _chunk2WGA2IRNcjs.RedditContainer; exports.RedditEmbedClient = _chunk2WGA2IRNcjs.RedditEmbedClient; exports.RichMarkdownRuntimeProvider = _chunk2WGA2IRNcjs.RichMarkdownRuntimeProvider; exports.TwitterContainer = _chunk2WGA2IRNcjs.TwitterContainer; exports.TwitterEmbedClient = _chunk2WGA2IRNcjs.TwitterEmbedClient; exports.YouTubeContainer = _chunk2WGA2IRNcjs.YouTubeContainer; exports.useRichMarkdownRuntime = _chunk2WGA2IRNcjs.useRichMarkdownRuntime;
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunk7UZYI4GVcjs = require('../../chunk-7UZYI4GV.cjs');
4
+ var _chunk2JZFXGHEcjs = require('../../chunk-2JZFXGHE.cjs');
5
5
 
6
6
 
7
7
 
@@ -9,7 +9,7 @@ var _chunk7UZYI4GVcjs = require('../../chunk-7UZYI4GV.cjs');
9
9
 
10
10
 
11
11
  var _chunkQPJUQ5YUcjs = require('../../chunk-QPJUQ5YU.cjs');
12
- require('../../chunk-GQJXOX5S.cjs');
12
+ require('../../chunk-2WGA2IRN.cjs');
13
13
  require('../../chunk-WCK5T3UD.cjs');
14
14
  require('../../chunk-744JXTDP.cjs');
15
15
  require('../../chunk-NMLNZCK2.cjs');
@@ -1869,4 +1869,4 @@ require('../../chunk-QDB2JO55.cjs');
1869
1869
 
1870
1870
 
1871
1871
 
1872
- exports.FAQ_SECTION_SKELETON_QUESTIONS = _chunkQPJUQ5YUcjs.FAQ_SECTION_SKELETON_QUESTIONS; exports.FaqAskCard = _chunkQPJUQ5YUcjs.FaqAskCard; exports.FaqDocumentPage = _chunk7UZYI4GVcjs.FaqDocumentPage; exports.FaqSection = _chunkQPJUQ5YUcjs.FaqSection; exports.PAGE_FAQ_SECTION_ID = _chunkQPJUQ5YUcjs.PAGE_FAQ_SECTION_ID; exports.SharedPageFaq = _chunkQPJUQ5YUcjs.SharedPageFaq;
1872
+ exports.FAQ_SECTION_SKELETON_QUESTIONS = _chunkQPJUQ5YUcjs.FAQ_SECTION_SKELETON_QUESTIONS; exports.FaqAskCard = _chunkQPJUQ5YUcjs.FaqAskCard; exports.FaqDocumentPage = _chunk2JZFXGHEcjs.FaqDocumentPage; exports.FaqSection = _chunkQPJUQ5YUcjs.FaqSection; exports.PAGE_FAQ_SECTION_ID = _chunkQPJUQ5YUcjs.PAGE_FAQ_SECTION_ID; exports.SharedPageFaq = _chunkQPJUQ5YUcjs.SharedPageFaq;
@@ -0,0 +1,6 @@
1
+ import type { DeviceRow } from './types';
2
+ /** The viewer's unread notifications about a device, opening them where the host lists them. Nothing at 0. */
3
+ export declare function DeviceUnreadIndicator({ device }: {
4
+ device: DeviceRow;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=device-unread-indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-unread-indicator.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/device-unread-indicator.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,+BAMtE"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { UnreadNotificationsIndicator } from "../../navigation/unread-notifications-indicator.js";
4
+ import { useDevicesViewConfig } from "./devices-view-config.js";
5
+ function DeviceUnreadIndicator({ device }) {
6
+ const { getDeviceNotificationsHref } = useDevicesViewConfig();
7
+ const count = device.unreadNotificationCount ?? 0;
8
+ return /* @__PURE__ */ jsx(UnreadNotificationsIndicator, { count, href: count > 0 ? getDeviceNotificationsHref?.(device) : void 0 });
9
+ }
10
+ export {
11
+ DeviceUnreadIndicator
12
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"devices-grid.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC/D,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qHAAqH;IACrH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAgB9C,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,EAC3D,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,YAAwE,EACxE,aAAoB,EACpB,QAAsC,GACvC,EAAE,gBAAgB,CAAC,CAAC,CAAC,qBA6DrB"}
1
+ {"version":3,"file":"devices-grid.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC/D,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qHAAqH;IACrH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAgB9C,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,EAC3D,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,YAAwE,EACxE,aAAoB,EACpB,QAAsC,GACvC,EAAE,gBAAgB,CAAC,CAAC,CAAC,qBAoErB"}
@@ -6,6 +6,7 @@ import { DeviceCard } from "../../ui/index.js";
6
6
  import { LoadingItems, useLoadingScope } from "../../ui/loading-scope.js";
7
7
  import { getDeviceName } from "./device-name.js";
8
8
  import { getDeviceOperatingSystem, getDeviceStatusConfig } from "./device-status.js";
9
+ import { DeviceUnreadIndicator } from "./device-unread-indicator.js";
9
10
  import { useDevicesViewConfig } from "./devices-view-config.js";
10
11
  const DEVICES_GRID_CLASS = "grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-3";
11
12
  const DEVICES_GRID_SKELETON_CARDS = 12;
@@ -53,7 +54,10 @@ function DevicesGrid({
53
54
  variant: statusConfig.variant
54
55
  } : void 0,
55
56
  onDeviceClick: () => handleDeviceClick(device),
56
- actions: GRID_CARD_ACTIONS,
57
+ actions: device.unreadNotificationCount ? {
58
+ ...GRID_CARD_ACTIONS,
59
+ detailsButton: { component: /* @__PURE__ */ jsx(DeviceUnreadIndicator, { device }) }
60
+ } : GRID_CARD_ACTIONS,
57
61
  className: "h-full",
58
62
  "data-loading-item": true
59
63
  },
@@ -1 +1 @@
1
- {"version":3,"file":"devices-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-table-columns.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devices-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-table-columns.tsx"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ import { getDeviceName } from "./device-name.js";
21
21
  import { getDeviceStatusConfig } from "./device-status.js";
22
22
  import { DEFAULT_VISIBLE_STATUSES } from "./device-statuses.js";
23
23
  import { DeviceTypeTile } from "./device-type-tile.js";
24
+ import { DeviceUnreadIndicator } from "./device-unread-indicator.js";
24
25
  import { useDeviceImageUrl, useDevicesViewConfig } from "./devices-view-config.js";
25
26
  function formatDateTime(input) {
26
27
  const date = formatDate(input);
@@ -194,7 +195,8 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
194
195
  const device = row.original;
195
196
  return /* @__PURE__ */ jsxs("div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-4 py-0", children: [
196
197
  /* @__PURE__ */ jsx(DeviceTypeTile, { type: device.type }),
197
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(TruncateText, { children: getDeviceName(device) }) })
198
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(TruncateText, { children: getDeviceName(device) }) }),
199
+ /* @__PURE__ */ jsx(DeviceUnreadIndicator, { device })
198
200
  ] });
199
201
  },
200
202
  meta: { width: "flex-1 content-md:w-1/4" }
@@ -2,14 +2,16 @@ import { type ReactNode } from 'react';
2
2
  import type { DeviceRow } from './types';
3
3
  /**
4
4
  * What the device views cannot know by themselves, because it belongs to the
5
- * host: where a device's page lives, where images are served from, and whether
6
- * the page runs inside the mobile shell. The product provides it once, above
7
- * every page; without a provider the views render as a picture (no links,
8
- * image URLs used as given).
5
+ * host: where a device's page and its notifications live, where images are
6
+ * served from, and whether the page runs inside the mobile shell. The product
7
+ * provides it once, above every page; without a provider the views render as a
8
+ * picture (no links, image URLs used as given).
9
9
  */
10
10
  export interface DevicesViewConfig {
11
11
  /** The device's page. Absent: rows and cards are not links. */
12
12
  getDeviceHref?: (device: DeviceRow) => string | undefined;
13
+ /** The viewer's notifications about the device. Absent: the unread indicator is a counter, not a button. */
14
+ getDeviceNotificationsHref?: (device: DeviceRow) => string | undefined;
13
15
  /** A customer image's full URL from its stored path and content hash. */
14
16
  resolveImageUrl?: (imageUrl: string | null | undefined, hash?: string | null) => string | undefined;
15
17
  /** The page runs inside the mobile shell: options nobody can pick there are dropped. */
@@ -1 +1 @@
1
- {"version":3,"file":"devices-view-config.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-view-config.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,CAAC;IACpG,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,wBAAgB,yBAAyB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAE/G;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAG/G"}
1
+ {"version":3,"file":"devices-view-config.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-view-config.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,4GAA4G;IAC5G,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,CAAC;IACpG,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,wBAAgB,yBAAyB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAE/G;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAG/G"}
@@ -9,6 +9,7 @@ export { DEFAULT_DASHBOARD_STATUSES, DEFAULT_DEVICES_LIST_STATUSES, DEFAULT_VISI
9
9
  export { DeviceTagsFilterButton } from './device-tags-filter-button';
10
10
  export { renderDeviceTypeIcon } from './device-type-icon';
11
11
  export { DeviceTypeTile } from './device-type-tile';
12
+ export { DeviceUnreadIndicator } from './device-unread-indicator';
12
13
  export { DevicesFilterToolbar, type DevicesFilterToolbarProps } from './devices-filter-toolbar';
13
14
  export { DevicesGrid, type DevicesGridProps } from './devices-grid';
14
15
  export { DevicesGridFilters, type DevicesGridFiltersProps } from './devices-grid-filters';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,GACP,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,KAAK,YAAY,EACjB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,GACP,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,KAAK,YAAY,EACjB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -21,6 +21,7 @@ import {
21
21
  import { DeviceTagsFilterButton } from "./device-tags-filter-button.js";
22
22
  import { renderDeviceTypeIcon } from "./device-type-icon.js";
23
23
  import { DeviceTypeTile } from "./device-type-tile.js";
24
+ import { DeviceUnreadIndicator } from "./device-unread-indicator.js";
24
25
  import { DevicesFilterToolbar } from "./devices-filter-toolbar.js";
25
26
  import { DevicesGrid } from "./devices-grid.js";
26
27
  import { DevicesGridFilters } from "./devices-grid-filters.js";
@@ -63,6 +64,7 @@ export {
63
64
  DeviceSelector,
64
65
  DeviceTagsFilterButton,
65
66
  DeviceTypeTile,
67
+ DeviceUnreadIndicator,
66
68
  DevicesFilterToolbar,
67
69
  DevicesGrid,
68
70
  DevicesGridFilters,
@@ -32,6 +32,8 @@ export interface DeviceRow extends DeviceNameSource {
32
32
  organizationImageUrl?: string | null;
33
33
  organizationImageHash?: string | null;
34
34
  tags?: DeviceTag[];
35
+ /** The viewer's unread notifications about this device. Absent or 0: no indicator. */
36
+ unreadNotificationCount?: number;
35
37
  }
36
38
  export interface DeviceFilterValue {
37
39
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,sFAAsF;IACtF,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB"}