@fragment-build/ui 3.3.0 → 4.0.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 (83) hide show
  1. package/components/code-snippet/CodeSnippet.d.ts +9 -0
  2. package/components/code-snippet/CodeSnippet.js +14 -4
  3. package/components/code-snippet/CodeSnippet.js.map +1 -1
  4. package/components/code-snippet/code-snippet.css +18 -0
  5. package/components/segmented-control/SegmentedControl.d.ts +16 -0
  6. package/components/segmented-control/SegmentedControl.js +18 -0
  7. package/components/segmented-control/SegmentedControl.js.map +1 -0
  8. package/components/segmented-control/SegmentedControl.styles.d.ts +46 -0
  9. package/components/segmented-control/SegmentedControl.styles.js +20 -0
  10. package/components/segmented-control/SegmentedControl.styles.js.map +1 -0
  11. package/components/segmented-control/segmented-control.css +41 -0
  12. package/fragments/empty-state/EmptyState.d.ts +12 -0
  13. package/fragments/empty-state/EmptyState.js +12 -0
  14. package/fragments/empty-state/EmptyState.js.map +1 -0
  15. package/fragments/empty-state/EmptyState.styles.d.ts +55 -0
  16. package/fragments/empty-state/EmptyState.styles.js +23 -0
  17. package/fragments/empty-state/EmptyState.styles.js.map +1 -0
  18. package/fragments/empty-state/empty-state.css +39 -0
  19. package/fragments/form/FormCard.d.ts +14 -0
  20. package/fragments/form/FormCard.js +14 -0
  21. package/fragments/form/FormCard.js.map +1 -0
  22. package/fragments/form/FormCard.styles.d.ts +49 -0
  23. package/fragments/form/FormCard.styles.js +23 -0
  24. package/fragments/form/FormCard.styles.js.map +1 -0
  25. package/fragments/form/FormSection.d.ts +3 -1
  26. package/fragments/form/FormSection.js +2 -2
  27. package/fragments/form/FormSection.js.map +1 -1
  28. package/fragments/form/FormSection.styles.d.ts +6 -0
  29. package/fragments/form/FormSection.styles.js +2 -0
  30. package/fragments/form/FormSection.styles.js.map +1 -1
  31. package/fragments/form/form-card.css +42 -0
  32. package/fragments/form/form-section.css +22 -10
  33. package/fragments/form/form.css +1 -1
  34. package/fragments/page/PageHeader.d.ts +7 -2
  35. package/fragments/page/PageHeader.js +3 -3
  36. package/fragments/page/PageHeader.js.map +1 -1
  37. package/fragments/page/PageHeader.styles.d.ts +30 -21
  38. package/fragments/page/PageHeader.styles.js +10 -0
  39. package/fragments/page/PageHeader.styles.js.map +1 -1
  40. package/fragments/page/page-header.css +23 -3
  41. package/fragments/save-bar/SaveBar.d.ts +12 -0
  42. package/fragments/save-bar/SaveBar.js +15 -0
  43. package/fragments/save-bar/SaveBar.js.map +1 -0
  44. package/fragments/save-bar/SaveBar.styles.d.ts +37 -0
  45. package/fragments/save-bar/SaveBar.styles.js +16 -0
  46. package/fragments/save-bar/SaveBar.styles.js.map +1 -0
  47. package/fragments/save-bar/save-bar.css +28 -0
  48. package/fragments/shell/shell.css +8 -4
  49. package/fragments/sidebar/Sidebar.js +4 -1
  50. package/fragments/sidebar/Sidebar.js.map +1 -1
  51. package/fragments/sidebar/sidebar.css +48 -24
  52. package/fragments/stat/StatCard.d.ts +29 -0
  53. package/fragments/stat/StatCard.js +20 -0
  54. package/fragments/stat/StatCard.js.map +1 -0
  55. package/fragments/stat/StatCard.styles.d.ts +85 -0
  56. package/fragments/stat/StatCard.styles.js +26 -0
  57. package/fragments/stat/StatCard.styles.js.map +1 -0
  58. package/fragments/stat/stat-card.css +64 -0
  59. package/fragments/widget/Widget.d.ts +9 -2
  60. package/fragments/widget/Widget.js +4 -3
  61. package/fragments/widget/Widget.js.map +1 -1
  62. package/fragments/widget/Widget.styles.d.ts +51 -0
  63. package/fragments/widget/Widget.styles.js +12 -0
  64. package/fragments/widget/Widget.styles.js.map +1 -1
  65. package/fragments/widget/widget.css +50 -4
  66. package/index.css +142 -38
  67. package/index.d.ts +5 -0
  68. package/index.js +5 -0
  69. package/index.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/components/code-snippet/code-snippet.css +18 -0
  72. package/src/components/segmented-control/segmented-control.css +41 -0
  73. package/src/fragments/empty-state/empty-state.css +39 -0
  74. package/src/fragments/form/form-card.css +42 -0
  75. package/src/fragments/form/form-section.css +22 -10
  76. package/src/fragments/form/form.css +1 -1
  77. package/src/fragments/page/page-header.css +23 -3
  78. package/src/fragments/save-bar/save-bar.css +28 -0
  79. package/src/fragments/shell/shell.css +8 -4
  80. package/src/fragments/sidebar/sidebar.css +48 -24
  81. package/src/fragments/stat/stat-card.css +64 -0
  82. package/src/fragments/widget/widget.css +50 -4
  83. package/src/index.css +142 -38
@@ -1,41 +1,53 @@
1
1
  @layer components {
2
2
  .fragment-form-section__main {
3
- @apply flex flex-col;
3
+ @apply flex flex-col gap-4;
4
4
  }
5
5
 
6
6
  .fragment-form-section__info {
7
- @apply flex-1 pb-4;
7
+ @apply min-w-0;
8
8
  }
9
9
 
10
- .fragment-form-section__content {
11
- @apply flex flex-col gap-4 flex-1 min-w-0;
10
+ .fragment-form-section__title-row {
11
+ @apply flex items-center gap-2;
12
+ }
13
+
14
+ .fragment-form-section__title {
15
+ @apply text-sm font-semibold;
12
16
  }
13
17
 
14
18
  .fragment-form-section__description {
15
- @apply text-sm text-muted;
19
+ @apply mt-1 text-sm text-muted;
20
+ }
21
+
22
+ .fragment-form-section__content {
23
+ @apply flex flex-col gap-5 flex-1 min-w-0;
16
24
  }
17
25
 
26
+ /*
27
+ * Label column and control column. The label column is narrow and fixed so that, down a long
28
+ * settings page, every control starts on the same vertical line.
29
+ */
18
30
  .fragment-form-section--horizontal {
19
31
  .fragment-form-section__main {
20
- @apply sm:flex-row;
32
+ @apply md:flex-row md:gap-10;
21
33
  }
22
34
  .fragment-form-section__info {
23
- @apply sm:max-w-sm sm:pr-4 sm:pb-0;
35
+ @apply md:w-72 md:shrink-0;
24
36
  }
25
37
  .fragment-form-section__content {
26
- @apply sm:items-end sm:justify-center sm:max-w-sm;
38
+ @apply md:max-w-xl;
27
39
  }
28
40
  }
29
41
 
30
42
  .fragment-form-section--vertical {
31
43
  .fragment-form-section__content {
32
- @apply sm:max-w-3xl;
44
+ @apply md:max-w-3xl;
33
45
  }
34
46
  }
35
47
 
36
48
  .fragment-form-section--full-width {
37
49
  .fragment-form-section__content {
38
- @apply sm:max-w-full;
50
+ @apply md:max-w-full;
39
51
  }
40
52
  }
41
53
  }
@@ -1,5 +1,5 @@
1
1
  @layer components {
2
2
  .fragment-form__separator {
3
- @apply my-6;
3
+ @apply my-7;
4
4
  }
5
5
  }
@@ -1,10 +1,15 @@
1
1
  /**
2
- * Primary UI component for Form Sections
2
+ * Primary UI component for Page Headers
3
3
  */
4
4
  import React from 'react';
5
5
  export interface PageHeaderProps {
6
+ /** Actions, aligned to the end of the title row. */
6
7
  children?: React.ReactNode;
7
- title: string;
8
+ title: React.ReactNode;
8
9
  description?: React.ReactNode;
10
+ /** A small line above the title: a breadcrumb, a back link or a section name. */
11
+ eyebrow?: React.ReactNode;
12
+ /** Content below the title row that still belongs to the header, such as tabs or filters. */
13
+ footer?: React.ReactNode;
9
14
  }
10
15
  export declare const PageHeader: React.FC<PageHeaderProps>;
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { pageHeader } from './PageHeader.styles';
4
- export const PageHeader = ({ children, title, description, ...props }) => {
5
- const v = pageHeader(props);
6
- return (_jsxs("header", { className: v.base(), children: [_jsxs("div", { children: [_jsx("h1", { children: title }), description && _jsx("p", { className: v.description(), children: description })] }), _jsx("div", { className: v.actions(), children: children })] }));
4
+ export const PageHeader = ({ children, title, description, eyebrow, footer }) => {
5
+ const v = pageHeader({ hasFooter: !!footer });
6
+ return (_jsxs("header", { className: v.base(), children: [_jsxs("div", { className: v.row(), children: [_jsxs("div", { className: v.heading(), children: [eyebrow && _jsx("div", { className: v.eyebrow(), children: eyebrow }), _jsx("h1", { className: v.title(), children: title }), description && _jsx("p", { className: v.description(), children: description })] }), children && _jsx("div", { className: v.actions(), children: children })] }), footer && _jsx("div", { className: v.footer(), children: footer })] }));
7
7
  };
8
8
  //# sourceMappingURL=PageHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeader.js","sourceRoot":"","sources":["../../src/fragments/page/PageHeader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AASjD,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAClG,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAE5B,OAAO,CACL,kBAAQ,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACzB,0BACE,uBAAK,KAAK,GAAM,EACf,WAAW,IAAI,YAAG,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAK,IAC5D,EACN,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YAAG,QAAQ,GAAO,IACtC,CACV,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"PageHeader.js","sourceRoot":"","sources":["../../src/fragments/page/PageHeader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAajD,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;IACzG,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C,OAAO,CACL,kBAAQ,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACzB,eAAK,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,aACrB,eAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,aACxB,OAAO,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YAAG,OAAO,GAAO,EACxD,aAAI,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAG,KAAK,GAAM,EACrC,WAAW,IAAI,YAAG,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAK,IAC5D,EACL,QAAQ,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YAAG,QAAQ,GAAO,IACtD,EACL,MAAM,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,YAAG,MAAM,GAAO,IAC9C,CACV,CAAC;AACJ,CAAC,CAAC"}
@@ -1,37 +1,46 @@
1
1
  export declare const pageHeader: import("tailwind-variants").TVReturnType<{
2
- [key: string]: {
3
- [key: string]: import("tailwind-variants").ClassValue | {
4
- base?: import("tailwind-variants").ClassValue;
5
- description?: import("tailwind-variants").ClassValue;
6
- actions?: import("tailwind-variants").ClassValue;
2
+ hasFooter: {
3
+ true: {
4
+ base: string;
7
5
  };
8
6
  };
9
- } | {
10
- [x: string]: {
11
- [x: string]: import("tailwind-variants").ClassValue | {
12
- base?: import("tailwind-variants").ClassValue;
13
- description?: import("tailwind-variants").ClassValue;
14
- actions?: import("tailwind-variants").ClassValue;
15
- };
16
- };
17
- } | {}, {
7
+ }, {
18
8
  base: string;
9
+ row: string;
10
+ heading: string;
11
+ eyebrow: string;
12
+ title: string;
19
13
  description: string;
20
14
  actions: string;
15
+ footer: string;
21
16
  }, undefined, {
22
- [key: string]: {
23
- [key: string]: import("tailwind-variants").ClassValue | {
24
- base?: import("tailwind-variants").ClassValue;
25
- description?: import("tailwind-variants").ClassValue;
26
- actions?: import("tailwind-variants").ClassValue;
17
+ hasFooter: {
18
+ true: {
19
+ base: string;
27
20
  };
28
21
  };
29
- } | {}, {
22
+ }, {
30
23
  base: string;
24
+ row: string;
25
+ heading: string;
26
+ eyebrow: string;
27
+ title: string;
31
28
  description: string;
32
29
  actions: string;
33
- }, import("tailwind-variants").TVReturnTypeLike<unknown, {
30
+ footer: string;
31
+ }, import("tailwind-variants").TVReturnTypeLike<{
32
+ hasFooter: {
33
+ true: {
34
+ base: string;
35
+ };
36
+ };
37
+ }, {
34
38
  base: string;
39
+ row: string;
40
+ heading: string;
41
+ eyebrow: string;
42
+ title: string;
35
43
  description: string;
36
44
  actions: string;
45
+ footer: string;
37
46
  }>>;
@@ -2,8 +2,18 @@ import { tv } from 'tailwind-variants';
2
2
  export const pageHeader = tv({
3
3
  slots: {
4
4
  base: 'fragment-page-header',
5
+ row: 'fragment-page-header__row',
6
+ heading: 'fragment-page-header__heading',
7
+ eyebrow: 'fragment-page-header__eyebrow',
8
+ title: 'fragment-page-header__title',
5
9
  description: 'fragment-page-header__description',
6
10
  actions: 'fragment-page-header__actions',
11
+ footer: 'fragment-page-header__footer',
12
+ },
13
+ variants: {
14
+ hasFooter: {
15
+ true: { base: 'fragment-page-header--with-footer' },
16
+ },
7
17
  },
8
18
  });
9
19
  //# sourceMappingURL=PageHeader.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeader.styles.js","sourceRoot":"","sources":["../../src/fragments/page/PageHeader.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,+BAA+B;KACzC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"PageHeader.styles.js","sourceRoot":"","sources":["../../src/fragments/page/PageHeader.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,IAAI,EAAE,sBAAsB;QAC5B,GAAG,EAAE,2BAA2B;QAChC,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,+BAA+B;QACxC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,+BAA+B;QACxC,MAAM,EAAE,8BAA8B;KACvC;IACD,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;SACpD;KACF;CACF,CAAC,CAAC"}
@@ -1,13 +1,33 @@
1
1
  @layer components {
2
2
  .fragment-page-header {
3
- @apply flex gap-4 justify-between sm:items-end mb-8 flex-col sm:flex-row;
3
+ @apply flex flex-col gap-5 mb-8;
4
+ }
5
+
6
+ .fragment-page-header--with-footer {
7
+ @apply mb-6;
8
+ }
9
+
10
+ .fragment-page-header__row {
11
+ @apply flex gap-4 justify-between flex-col sm:flex-row sm:items-end;
12
+ }
13
+
14
+ .fragment-page-header__heading {
15
+ @apply min-w-0;
16
+ }
17
+
18
+ .fragment-page-header__eyebrow {
19
+ @apply mb-1.5 flex items-center gap-1.5 text-xs font-medium text-muted;
4
20
  }
5
21
 
6
22
  .fragment-page-header__description {
7
- @apply mt-2 text-muted;
23
+ @apply mt-1 max-w-2xl text-sm text-muted;
8
24
  }
9
25
 
10
26
  .fragment-page-header__actions {
11
- @apply flex gap-4;
27
+ @apply flex flex-wrap gap-2 items-center shrink-0;
28
+ }
29
+
30
+ .fragment-page-header__footer {
31
+ @apply min-w-0;
12
32
  }
13
33
  }
@@ -0,0 +1,12 @@
1
+ export interface SaveBarProps {
2
+ isVisible: boolean;
3
+ isPending?: boolean;
4
+ message: React.ReactNode;
5
+ saveLabel: React.ReactNode;
6
+ discardLabel?: React.ReactNode;
7
+ onDiscard?: () => void;
8
+ /** Omit when the bar sits inside a `<form>`: the save button then submits it. */
9
+ onSave?: () => void;
10
+ isSaveDisabled?: boolean;
11
+ }
12
+ export declare const SaveBar: React.FC<SaveBarProps>;
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * The bar a settings form saves from. It appears once something has changed and stays pinned to
5
+ * the bottom of the viewport while the form scrolls, so the save action is never a scroll away and
6
+ * an unsaved edit is never silent.
7
+ */
8
+ import { Button } from '@heroui/react';
9
+ import { IconAlertCircle } from '@tabler/icons-react';
10
+ import { saveBar } from './SaveBar.styles';
11
+ export const SaveBar = ({ isVisible, isPending, message, saveLabel, discardLabel, onDiscard, onSave, isSaveDisabled, }) => {
12
+ const v = saveBar({ isVisible });
13
+ return (_jsx("div", { "aria-hidden": !isVisible, className: v.base(), inert: !isVisible, children: _jsxs("div", { className: v.bar(), children: [_jsx("span", { "aria-live": "polite", className: v.message(), children: isVisible && (_jsxs(_Fragment, { children: [_jsx(IconAlertCircle, { size: 16, stroke: 1.75 }), message] })) }), _jsxs("div", { className: v.actions(), children: [onDiscard && discardLabel && (_jsx(Button, { isDisabled: isPending, onPress: onDiscard, size: "sm", type: "button", variant: "ghost", children: discardLabel })), _jsx(Button, { isDisabled: isSaveDisabled, isPending: isPending, onPress: onSave, size: "sm", type: onSave ? 'button' : 'submit', children: saveLabel })] })] }) }));
14
+ };
15
+ //# sourceMappingURL=SaveBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveBar.js","sourceRoot":"","sources":["../../src/fragments/save-bar/SaveBar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAc3C,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAC9C,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAC1F,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAEjC,OAAO,CACL,6BAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,YAClE,eAAK,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,aAErB,4BAAgB,QAAQ,EAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YAC5C,SAAS,IAAI,CACZ,8BACE,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAI,EAC1C,OAAO,IACP,CACJ,GACI,EACP,eAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,aACxB,SAAS,IAAI,YAAY,IAAI,CAC5B,KAAC,MAAM,IAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,YACvF,YAAY,GACN,CACV,EACD,KAAC,MAAM,IACL,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,YAEjC,SAAS,GACH,IACL,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ export declare const saveBar: import("tailwind-variants").TVReturnType<{
2
+ isVisible: {
3
+ true: {
4
+ base: string;
5
+ };
6
+ false: {};
7
+ };
8
+ }, {
9
+ base: string;
10
+ bar: string;
11
+ message: string;
12
+ actions: string;
13
+ }, undefined, {
14
+ isVisible: {
15
+ true: {
16
+ base: string;
17
+ };
18
+ false: {};
19
+ };
20
+ }, {
21
+ base: string;
22
+ bar: string;
23
+ message: string;
24
+ actions: string;
25
+ }, import("tailwind-variants").TVReturnTypeLike<{
26
+ isVisible: {
27
+ true: {
28
+ base: string;
29
+ };
30
+ false: {};
31
+ };
32
+ }, {
33
+ base: string;
34
+ bar: string;
35
+ message: string;
36
+ actions: string;
37
+ }>>;
@@ -0,0 +1,16 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const saveBar = tv({
3
+ slots: {
4
+ base: 'fragment-save-bar',
5
+ bar: 'fragment-save-bar__bar',
6
+ message: 'fragment-save-bar__message',
7
+ actions: 'fragment-save-bar__actions',
8
+ },
9
+ variants: {
10
+ isVisible: {
11
+ true: { base: 'fragment-save-bar--visible' },
12
+ false: {},
13
+ },
14
+ },
15
+ });
16
+ //# sourceMappingURL=SaveBar.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveBar.styles.js","sourceRoot":"","sources":["../../src/fragments/save-bar/SaveBar.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;IACxB,KAAK,EAAE;QACL,IAAI,EAAE,mBAAmB;QACzB,GAAG,EAAE,wBAAwB;QAC7B,OAAO,EAAE,4BAA4B;QACrC,OAAO,EAAE,4BAA4B;KACtC;IACD,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC5C,KAAK,EAAE,EAAE;SACV;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ @layer components {
2
+ /* Sticky inside the form rather than fixed to the viewport, so it never needs to know how wide the rail is. */
3
+ /* Takes no room while hidden, so a clean form ends where its last field does. */
4
+ .fragment-save-bar {
5
+ @apply pointer-events-none sticky bottom-20 z-30 flex h-0 justify-center overflow-visible md:bottom-6;
6
+ @apply translate-y-4 opacity-0 transition-[opacity,translate] duration-200 motion-reduce:transition-none;
7
+ }
8
+
9
+ .fragment-save-bar--visible {
10
+ @apply pointer-events-auto mt-6 h-auto translate-y-0 opacity-100;
11
+ }
12
+
13
+ .fragment-save-bar__bar {
14
+ @apply flex w-full max-w-2xl items-center justify-between gap-4 rounded-2xl border border-border bg-overlay py-2 pr-2 pl-4
15
+ text-sm shadow-lg;
16
+ }
17
+
18
+ .fragment-save-bar__message {
19
+ @apply flex items-center gap-2 font-medium text-foreground;
20
+ & svg {
21
+ @apply shrink-0 text-warning;
22
+ }
23
+ }
24
+
25
+ .fragment-save-bar__actions {
26
+ @apply flex shrink-0 items-center gap-1;
27
+ }
28
+ }
@@ -7,16 +7,20 @@
7
7
  @apply flex-col;
8
8
  }
9
9
 
10
+ /*
11
+ * The content column is capped at a width a table or a two-column dashboard still reads well at.
12
+ * Past ~1600px the eye travels too far between a label and its value, and a wide monitor is
13
+ * better spent on margin than on stretching every card.
14
+ */
10
15
  .fragment-shell__main {
11
- @apply flex-1 min-w-0 mx-auto;
16
+ @apply flex-1 min-w-0 mx-auto w-full;
12
17
 
13
18
  .fragment-shell--horizontal & {
14
- @apply px-8 lg:px-12 xl:px-20 py-14 max-w-[2100px];
19
+ @apply px-4 sm:px-6 lg:px-10 pt-6 pb-24 md:pt-8 md:pb-12 max-w-[1600px];
15
20
  }
16
21
 
17
22
  .fragment-shell--vertical & {
18
- @apply px-8 py-6 max-w-[2100px] w-full;
23
+ @apply px-4 sm:px-6 lg:px-10 py-6 max-w-[1600px];
19
24
  }
20
-
21
25
  }
22
26
  }
@@ -73,7 +73,10 @@ export const Sidebar = ({ items, currentPath, layout: defaultLayout = 'auto' })
73
73
  }) }), _jsx("div", { className: v.expandedFooter(), children: items.map((item) => {
74
74
  const children = item.align === 'bottom' ? renderItems(item, { layout: 'expanded', activeLink }) : null;
75
75
  return children ? (_jsx("div", { className: getAlignmentClass(item.align), children: children }, item.key)) : null;
76
- }) })] }), _jsx("div", { className: v.placeholder() }), _jsx("div", { className: v.layoutButtonWrapper(), children: _jsx(Button, { size: "sm", isIconOnly: true, variant: "tertiary", className: v.layoutButton(), onPress: toggleLayout, children: _jsx(IconChevronLeft, {}) }) })] }), _jsxs("nav", { className: v.bottomNav(), onClick: () => setMobileMenuOpen(false), children: [items.find((item) => item.type === 'navigation')?.navigation?.map((navItem) => (_jsxs(Tooltip, { children: [_jsx(Tooltip.Trigger, { children: _jsx(Button, { render: (props) => _jsx(ButtonLink, { ...props, href: navItem.link }), isIconOnly: true, variant: activeLink === navItem.link ? 'tertiary' : 'ghost', onPress: () => setMobileMenuOpen(false), children: _jsxs(Badge.Anchor, { children: [navItem.icon, typeof navItem.badgeContent === 'string' && navItem.badgeContent ? (_jsx(Badge, { variant: "primary", color: "accent", size: "sm", className: "fragment-sidebar__bottom-nav-badge", children: navItem.badgeContent })) : null] }) }) }), _jsx(Tooltip.Content, { placement: "top", offset: 10, children: navItem.label })] }, navItem.label))), _jsx(Button, { variant: mobileMenuOpen ? 'tertiary' : 'ghost', isIconOnly: true, onPress: () => setMobileMenuOpen(!mobileMenuOpen), children: _jsx(IconDots, {}) })] }), _jsx(Modal, { isOpen: mobileMenuOpen, onOpenChange: setMobileMenuOpen, children: _jsx(Modal.Backdrop, { children: _jsx(Modal.Container, { children: _jsxs(Modal.Dialog, { children: [_jsx(Modal.Header, {}), _jsx(Modal.Body, { className: v.bottomNavModalBody(), children: items.map((item) => {
76
+ }) })] }), _jsx("div", { className: v.placeholder() }), _jsx("div", { className: v.layoutButtonWrapper(), children: _jsx(Button, { size: "sm", isIconOnly: true, variant: "tertiary", className: v.layoutButton(), onPress: toggleLayout, children: _jsx(IconChevronLeft, {}) }) })] }), _jsxs("nav", { className: v.bottomNav(), onClick: () => setMobileMenuOpen(false), children: [items
77
+ .filter((item) => item.type === 'navigation')
78
+ .flatMap((item) => item.navigation)
79
+ .map((navItem) => (_jsxs(Tooltip, { children: [_jsx(Tooltip.Trigger, { children: _jsx(Button, { render: (props) => _jsx(ButtonLink, { ...props, href: navItem.link }), isIconOnly: true, variant: activeLink === navItem.link ? 'tertiary' : 'ghost', onPress: () => setMobileMenuOpen(false), children: _jsxs(Badge.Anchor, { children: [navItem.icon, typeof navItem.badgeContent === 'string' && navItem.badgeContent ? (_jsx(Badge, { variant: "primary", color: "accent", size: "sm", className: "fragment-sidebar__bottom-nav-badge", children: navItem.badgeContent })) : null] }) }) }), _jsx(Tooltip.Content, { placement: "top", offset: 10, children: navItem.label })] }, navItem.label))), _jsx(Button, { variant: mobileMenuOpen ? 'tertiary' : 'ghost', isIconOnly: true, onPress: () => setMobileMenuOpen(!mobileMenuOpen), children: _jsx(IconDots, {}) })] }), _jsx(Modal, { isOpen: mobileMenuOpen, onOpenChange: setMobileMenuOpen, children: _jsx(Modal.Backdrop, { children: _jsx(Modal.Container, { children: _jsxs(Modal.Dialog, { children: [_jsx(Modal.Header, {}), _jsx(Modal.Body, { className: v.bottomNavModalBody(), children: items.map((item) => {
77
80
  const children = item.align !== 'bottom' ? renderItems(item, { layout: 'expanded', activeLink }) : null;
78
81
  return children ? (_jsx("div", { className: getAlignmentClass(item.align), children: children }, item.key)) : null;
79
82
  }) }), _jsx(Modal.Footer, { className: v.bottomNavModalFooter(), children: items.map((item) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/fragments/sidebar/Sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/fragments/sidebar/Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -5,28 +5,29 @@
5
5
 
6
6
  .fragment-sidebar__collapsed {
7
7
  @apply fixed top-0 left-0 border-r border-border bg-sidebar text-sidebar-foreground
8
- flex flex-col h-screen gap-8 transition-all;
8
+ flex flex-col h-screen gap-4 transition-all z-40;
9
9
  }
10
10
 
11
11
  .fragment-sidebar__collapsed-body {
12
- @apply w-20 items-center flex flex-col gap-8 px-3 pt-8 overflow-y-auto flex-1;
12
+ @apply w-16 items-center flex flex-col gap-6 px-2 pt-5 overflow-y-auto flex-1;
13
13
  }
14
14
 
15
15
  .fragment-sidebar__collapsed-footer {
16
- @apply w-20 items-center flex flex-col gap-8 px-3 pb-8;
16
+ @apply w-16 items-center flex flex-col gap-3 px-2 pb-4;
17
17
  }
18
18
 
19
19
  .fragment-sidebar__expanded {
20
20
  @apply fixed top-0 left-0 border-r border-border bg-sidebar text-sidebar-foreground
21
- flex flex-col h-screen gap-8 overflow-hidden transition-all;
21
+ flex flex-col h-screen gap-4 overflow-hidden transition-all z-40;
22
22
  }
23
23
 
24
24
  .fragment-sidebar__expanded-body {
25
- @apply w-72 flex flex-col gap-8 px-3 pt-8 overflow-y-auto flex-1;
25
+ @apply w-64 flex flex-col gap-6 px-3 pt-5 overflow-y-auto flex-1;
26
26
  }
27
27
 
28
+ /* The footer is chrome (account, workspace), so it is tucked behind a hairline. */
28
29
  .fragment-sidebar__expanded-footer {
29
- @apply w-72 flex flex-col gap-8 px-3 pb-8;
30
+ @apply w-64 flex flex-col gap-2 px-3 pt-3 pb-4 border-t border-border;
30
31
  }
31
32
 
32
33
  .fragment-sidebar__placeholder {
@@ -34,11 +35,14 @@
34
35
  }
35
36
 
36
37
  .fragment-sidebar__layout-button-wrapper {
37
- @apply fixed top-6 transition-all;
38
+ @apply fixed top-6 transition-all z-50;
38
39
  }
39
40
 
40
41
  .fragment-sidebar__layout-button {
41
- @apply h-6! w-6!;
42
+ @apply h-6! w-6! min-w-6! bg-surface! border border-border shadow-sm text-muted;
43
+ & svg {
44
+ @apply size-3.5;
45
+ }
42
46
  }
43
47
 
44
48
  .fragment-sidebar__bottom-nav {
@@ -68,8 +72,15 @@
68
72
 
69
73
  .fragment-sidebar__collapsed-nav {
70
74
  @apply flex flex-col gap-1;
75
+
76
+ /* The active item looks selected the same way at either rail width: the soft fill. */
77
+ .button--primary {
78
+ @apply bg-accent-soft;
79
+ color: var(--sidebar-accent-soft-foreground, var(--accent-soft-foreground));
80
+ }
81
+
71
82
  & svg {
72
- @apply size-5! shrink-0 self-center;
83
+ @apply size-[18px]! shrink-0 self-center;
73
84
  }
74
85
  }
75
86
 
@@ -106,23 +117,36 @@
106
117
  }
107
118
 
108
119
  .fragment-sidebar__custom-item {
109
- @apply px-2;
120
+ @apply px-1;
110
121
  }
111
122
 
112
123
  .fragment-sidebar__nav {
113
- @apply text-sm;
124
+ @apply text-sm flex flex-col gap-0.5;
125
+
126
+ /* Group label: quiet, so it organises the list without competing with it. */
127
+ & > .header {
128
+ @apply px-3 pb-1 text-xs font-medium text-muted;
129
+ }
130
+
131
+ .list-box {
132
+ @apply gap-0.5;
133
+ }
114
134
 
115
135
  .list-box-item {
116
- @apply px-3! pr-1! py-1! h-10!;
136
+ @apply px-3! pr-1! py-1! h-9! gap-3! rounded-lg! font-normal text-sidebar-foreground/80;
137
+ &:hover, &[data-hovered="true"] {
138
+ background-color: var(--sidebar-default, var(--default)) !important;
139
+ @apply text-sidebar-foreground;
140
+ }
117
141
  }
118
142
 
119
143
  & svg {
120
- @apply size-5 shrink-0 self-center;
144
+ @apply size-[18px] shrink-0 self-center;
121
145
  }
122
146
  }
123
147
 
124
148
  .fragment-sidebar__accordion-trigger {
125
- @apply w-full flex items-center gap-3 h-10 px-3 pr-1 py-1 rounded-2xl text-sm font-normal cursor-pointer
149
+ @apply w-full flex items-center gap-3 h-9 px-3 pr-1 py-1 rounded-lg text-sm font-normal cursor-pointer
126
150
  text-sidebar-foreground transition-colors;
127
151
  &:hover, &[data-hovered="true"] {
128
152
  /* `--default` is a page-level palette colour; opt out per-rail with `--sidebar-default`. */
@@ -161,7 +185,7 @@
161
185
 
162
186
  .fragment-sidebar__nav-item--active {
163
187
  /* `--accent-soft` is translucent, so it composites over the rail, not the page. */
164
- @apply bg-accent-soft!;
188
+ @apply bg-accent-soft! font-medium!;
165
189
  color: var(--sidebar-accent-soft-foreground, var(--accent-soft-foreground)) !important;
166
190
  }
167
191
 
@@ -180,13 +204,13 @@
180
204
  /* Layout modifier variants */
181
205
  .fragment-sidebar--auto {
182
206
  .fragment-sidebar__expanded {
183
- @apply w-20 opacity-0 pointer-events-none xl:w-72 xl:opacity-100 xl:pointer-events-auto;
207
+ @apply w-16 opacity-0 pointer-events-none xl:w-64 xl:opacity-100 xl:pointer-events-auto;
184
208
  }
185
209
  .fragment-sidebar__placeholder {
186
- @apply w-20 opacity-0 pointer-events-none xl:w-72 xl:opacity-100 xl:pointer-events-auto;
210
+ @apply w-16 opacity-0 pointer-events-none xl:w-64 xl:opacity-100 xl:pointer-events-auto;
187
211
  }
188
212
  .fragment-sidebar__layout-button-wrapper {
189
- @apply left-20 translate-x-1/2 rotate-180 xl:left-72 xl:-translate-x-1/2 xl:rotate-0;
213
+ @apply left-16 translate-x-1/2 rotate-180 xl:left-64 xl:-translate-x-1/2 xl:rotate-0;
190
214
  }
191
215
  .fragment-sidebar__collapsed {
192
216
  @apply xl:opacity-0;
@@ -195,13 +219,13 @@
195
219
 
196
220
  .fragment-sidebar--collapsed {
197
221
  .fragment-sidebar__expanded {
198
- @apply w-20 opacity-0 pointer-events-none;
222
+ @apply w-16 opacity-0 pointer-events-none;
199
223
  }
200
224
  .fragment-sidebar__placeholder {
201
- @apply w-20 opacity-0 pointer-events-none;
225
+ @apply w-16 opacity-0 pointer-events-none;
202
226
  }
203
227
  .fragment-sidebar__layout-button-wrapper {
204
- @apply left-20 translate-x-1/2 rotate-180;
228
+ @apply left-16 translate-x-1/2 rotate-180;
205
229
  }
206
230
  }
207
231
 
@@ -210,13 +234,13 @@
210
234
  @apply opacity-0;
211
235
  }
212
236
  .fragment-sidebar__expanded {
213
- @apply w-72;
237
+ @apply w-64;
214
238
  }
215
239
  .fragment-sidebar__placeholder {
216
- @apply w-72;
240
+ @apply w-64;
217
241
  }
218
242
  .fragment-sidebar__layout-button-wrapper {
219
- @apply left-72 -translate-x-1/2;
243
+ @apply left-64 -translate-x-1/2;
220
244
  }
221
245
  }
222
246
  }
@@ -0,0 +1,29 @@
1
+ export interface StatCardDelta {
2
+ /** Already formatted and signed, e.g. "+12%". */
3
+ value: React.ReactNode;
4
+ direction: 'up' | 'down' | 'flat';
5
+ /**
6
+ * Whether this direction is good news. Defaults to "up is good"; pass it explicitly for a
7
+ * number where down is the win (a bounce rate, a cost).
8
+ */
9
+ sentiment?: 'positive' | 'negative' | 'neutral';
10
+ /** The period the change is measured against, e.g. "vs. previous 30 days". */
11
+ label?: React.ReactNode;
12
+ }
13
+ export interface StatCardProps {
14
+ label: React.ReactNode;
15
+ value: React.ReactNode;
16
+ icon?: React.ReactNode;
17
+ delta?: StatCardDelta;
18
+ /** One quiet line under the value. */
19
+ hint?: React.ReactNode;
20
+ /** Shown behind an info icon beside the label. */
21
+ help?: React.ReactNode;
22
+ /** Accessible name of the info icon. */
23
+ helpLabel?: string;
24
+ isLoading?: boolean;
25
+ /** Marks the card as the one the view is about: a lifted surface and a larger value. */
26
+ emphasis?: boolean;
27
+ className?: string;
28
+ }
29
+ export declare const StatCard: React.FC<StatCardProps>;