@noambz/ui 0.7.0 → 0.8.0

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 (99) hide show
  1. package/dist/components/atoms/index.d.ts +1 -0
  2. package/dist/components/atoms/index.d.ts.map +1 -1
  3. package/dist/components/atoms/index.js +1 -0
  4. package/dist/components/atoms/index.js.map +1 -1
  5. package/dist/components/atoms/price-change/index.d.ts +2 -0
  6. package/dist/components/atoms/price-change/index.d.ts.map +1 -0
  7. package/dist/components/atoms/price-change/index.js +11 -0
  8. package/dist/components/atoms/price-change/index.js.map +1 -0
  9. package/dist/components/atoms/price-change/price-change.d.ts +19 -0
  10. package/dist/components/atoms/price-change/price-change.d.ts.map +1 -0
  11. package/dist/components/atoms/price-change/price-change.js +39 -0
  12. package/dist/components/atoms/price-change/price-change.js.map +1 -0
  13. package/dist/components/atoms/price-change/price-change.stories.d.ts +9 -0
  14. package/dist/components/atoms/price-change/price-change.stories.d.ts.map +1 -0
  15. package/dist/components/atoms/tag/tag.d.ts +1 -1
  16. package/dist/components/molecules/content-list-item/content-list-item.d.ts +15 -0
  17. package/dist/components/molecules/content-list-item/content-list-item.d.ts.map +1 -0
  18. package/dist/components/molecules/content-list-item/content-list-item.js +72 -0
  19. package/dist/components/molecules/content-list-item/content-list-item.js.map +1 -0
  20. package/dist/components/molecules/content-list-item/content-list-item.stories.d.ts +7 -0
  21. package/dist/components/molecules/content-list-item/content-list-item.stories.d.ts.map +1 -0
  22. package/dist/components/molecules/content-list-item/index.d.ts +2 -0
  23. package/dist/components/molecules/content-list-item/index.d.ts.map +1 -0
  24. package/dist/components/molecules/content-list-item/index.js +7 -0
  25. package/dist/components/molecules/content-list-item/index.js.map +1 -0
  26. package/dist/components/molecules/index.d.ts +4 -0
  27. package/dist/components/molecules/index.d.ts.map +1 -1
  28. package/dist/components/molecules/index.js +4 -0
  29. package/dist/components/molecules/index.js.map +1 -1
  30. package/dist/components/molecules/metric-strip/index.d.ts +2 -0
  31. package/dist/components/molecules/metric-strip/index.d.ts.map +1 -0
  32. package/dist/components/molecules/metric-strip/index.js +7 -0
  33. package/dist/components/molecules/metric-strip/index.js.map +1 -0
  34. package/dist/components/molecules/metric-strip/metric-strip.d.ts +17 -0
  35. package/dist/components/molecules/metric-strip/metric-strip.d.ts.map +1 -0
  36. package/dist/components/molecules/metric-strip/metric-strip.js +40 -0
  37. package/dist/components/molecules/metric-strip/metric-strip.js.map +1 -0
  38. package/dist/components/molecules/metric-strip/metric-strip.stories.d.ts +7 -0
  39. package/dist/components/molecules/metric-strip/metric-strip.stories.d.ts.map +1 -0
  40. package/dist/components/molecules/quote-row/index.d.ts +2 -0
  41. package/dist/components/molecules/quote-row/index.d.ts.map +1 -0
  42. package/dist/components/molecules/quote-row/index.js +5 -0
  43. package/dist/components/molecules/quote-row/index.js.map +1 -0
  44. package/dist/components/molecules/quote-row/quote-row.d.ts +13 -0
  45. package/dist/components/molecules/quote-row/quote-row.d.ts.map +1 -0
  46. package/dist/components/molecules/quote-row/quote-row.js +33 -0
  47. package/dist/components/molecules/quote-row/quote-row.js.map +1 -0
  48. package/dist/components/molecules/quote-row/quote-row.stories.d.ts +7 -0
  49. package/dist/components/molecules/quote-row/quote-row.stories.d.ts.map +1 -0
  50. package/dist/components/molecules/social-post-card/index.d.ts +2 -0
  51. package/dist/components/molecules/social-post-card/index.d.ts.map +1 -0
  52. package/dist/components/molecules/social-post-card/index.js +7 -0
  53. package/dist/components/molecules/social-post-card/index.js.map +1 -0
  54. package/dist/components/molecules/social-post-card/social-post-card.d.ts +15 -0
  55. package/dist/components/molecules/social-post-card/social-post-card.d.ts.map +1 -0
  56. package/dist/components/molecules/social-post-card/social-post-card.js +61 -0
  57. package/dist/components/molecules/social-post-card/social-post-card.js.map +1 -0
  58. package/dist/components/molecules/social-post-card/social-post-card.stories.d.ts +7 -0
  59. package/dist/components/molecules/social-post-card/social-post-card.stories.d.ts.map +1 -0
  60. package/dist/components/organisms/app-shell/app-shell-layout.d.ts +6 -0
  61. package/dist/components/organisms/app-shell/app-shell-layout.d.ts.map +1 -1
  62. package/dist/components/organisms/app-shell/app-shell-layout.js +8 -3
  63. package/dist/components/organisms/app-shell/app-shell-layout.js.map +1 -1
  64. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.d.ts +12 -0
  65. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.d.ts.map +1 -0
  66. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.js +76 -0
  67. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.js.map +1 -0
  68. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.stories.d.ts +7 -0
  69. package/dist/components/organisms/horizontal-scroller/horizontal-scroller.stories.d.ts.map +1 -0
  70. package/dist/components/organisms/horizontal-scroller/index.d.ts +2 -0
  71. package/dist/components/organisms/horizontal-scroller/index.d.ts.map +1 -0
  72. package/dist/components/organisms/horizontal-scroller/index.js +7 -0
  73. package/dist/components/organisms/horizontal-scroller/index.js.map +1 -0
  74. package/dist/components/organisms/index.d.ts +1 -0
  75. package/dist/components/organisms/index.d.ts.map +1 -1
  76. package/dist/components/organisms/index.js +1 -0
  77. package/dist/components/organisms/index.js.map +1 -1
  78. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.d.ts +12 -0
  79. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.d.ts.map +1 -0
  80. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.js +19 -0
  81. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.js.map +1 -0
  82. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.d.ts +15 -0
  83. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.d.ts.map +1 -0
  84. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.js +15 -0
  85. package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.js.map +1 -0
  86. package/dist/components/utility-wrappers/appearance-sync/apply-appearance.d.ts +10 -0
  87. package/dist/components/utility-wrappers/appearance-sync/apply-appearance.d.ts.map +1 -0
  88. package/dist/components/utility-wrappers/appearance-sync/apply-appearance.js +26 -0
  89. package/dist/components/utility-wrappers/appearance-sync/apply-appearance.js.map +1 -0
  90. package/dist/components/utility-wrappers/appearance-sync/index.d.ts +5 -0
  91. package/dist/components/utility-wrappers/appearance-sync/index.d.ts.map +1 -0
  92. package/dist/components/utility-wrappers/appearance-sync/index.js +21 -0
  93. package/dist/components/utility-wrappers/appearance-sync/index.js.map +1 -0
  94. package/dist/components/utility-wrappers/index.d.ts +1 -0
  95. package/dist/components/utility-wrappers/index.d.ts.map +1 -1
  96. package/dist/components/utility-wrappers/index.js +1 -0
  97. package/dist/components/utility-wrappers/index.js.map +1 -1
  98. package/package.json +1 -1
  99. package/src/styles/theme.css +51 -1
@@ -4,6 +4,7 @@ export * from "./input/index.js";
4
4
  export * from "./kbd/index.js";
5
5
  export * from "./label/index.js";
6
6
  export * from "./popover/index.js";
7
+ export * from "./price-change/index.js";
7
8
  export * from "./radio-group/index.js";
8
9
  export * from "./separator/index.js";
9
10
  export * from "./skeleton/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC"}
@@ -4,6 +4,7 @@ export * from "./input/index.js";
4
4
  export * from "./kbd/index.js";
5
5
  export * from "./label/index.js";
6
6
  export * from "./popover/index.js";
7
+ export * from "./price-change/index.js";
7
8
  export * from "./radio-group/index.js";
8
9
  export * from "./separator/index.js";
9
10
  export * from "./skeleton/index.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/atoms/index.ts"],"sourcesContent":["export * from \"./avatar/index.js\";\nexport * from \"./checkbox/index.js\";\nexport * from \"./input/index.js\";\nexport * from \"./kbd/index.js\";\nexport * from \"./label/index.js\";\nexport * from \"./popover/index.js\";\nexport * from \"./radio-group/index.js\";\nexport * from \"./separator/index.js\";\nexport * from \"./skeleton/index.js\";\nexport * from \"./spinner/index.js\";\nexport * from \"./switch/index.js\";\nexport * from \"./tag/index.js\";\nexport * from \"./textarea/index.js\";\nexport * from \"./toggle/index.js\";\nexport * from \"./typography/index.js\";\nexport * from \"./visually-hidden/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/atoms/index.ts"],"sourcesContent":["export * from \"./avatar/index.js\";\nexport * from \"./checkbox/index.js\";\nexport * from \"./input/index.js\";\nexport * from \"./kbd/index.js\";\nexport * from \"./label/index.js\";\nexport * from \"./popover/index.js\";\nexport * from \"./price-change/index.js\";\nexport * from \"./radio-group/index.js\";\nexport * from \"./separator/index.js\";\nexport * from \"./skeleton/index.js\";\nexport * from \"./spinner/index.js\";\nexport * from \"./switch/index.js\";\nexport * from \"./tag/index.js\";\nexport * from \"./textarea/index.js\";\nexport * from \"./toggle/index.js\";\nexport * from \"./typography/index.js\";\nexport * from \"./visually-hidden/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { PriceChange, PriceChangeToneEnum, toneFromChange, type IPriceChangeProps, } from "./price-change.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/price-change/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import {
2
+ PriceChange,
3
+ PriceChangeToneEnum,
4
+ toneFromChange
5
+ } from "./price-change.js";
6
+ export {
7
+ PriceChange,
8
+ PriceChangeToneEnum,
9
+ toneFromChange
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/atoms/price-change/index.ts"],"sourcesContent":["export {\n PriceChange,\n PriceChangeToneEnum,\n toneFromChange,\n type IPriceChangeProps,\n} from \"./price-change.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;","names":[]}
@@ -0,0 +1,19 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export declare enum PriceChangeToneEnum {
3
+ POSITIVE = "positive",
4
+ NEGATIVE = "negative",
5
+ NEUTRAL = "neutral"
6
+ }
7
+ export interface IPriceChangeProps extends HTMLAttributes<HTMLSpanElement> {
8
+ children: ReactNode;
9
+ tone?: PriceChangeToneEnum;
10
+ }
11
+ /**
12
+ * Signed price/percentage delta with semantic tone coloring.
13
+ */
14
+ export declare const PriceChange: import("react").ForwardRefExoticComponent<IPriceChangeProps & import("react").RefAttributes<HTMLSpanElement>>;
15
+ /**
16
+ * Derives a tone from a numeric change value.
17
+ */
18
+ export declare function toneFromChange(change: number | null | undefined): PriceChangeToneEnum;
19
+ //# sourceMappingURL=price-change.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-change.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/price-change/price-change.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGxE,oBAAY,mBAAmB;IAC7B,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,eAAe,CAAC;IACxE,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAQD;;GAEG;AACH,eAAO,MAAM,WAAW,+GAavB,CAAC;AAGF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,mBAAmB,CAQrF"}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { cn } from "../../../utils/cn.js";
5
+ var PriceChangeToneEnum = /* @__PURE__ */ ((PriceChangeToneEnum2) => {
6
+ PriceChangeToneEnum2["POSITIVE"] = "positive";
7
+ PriceChangeToneEnum2["NEGATIVE"] = "negative";
8
+ PriceChangeToneEnum2["NEUTRAL"] = "neutral";
9
+ return PriceChangeToneEnum2;
10
+ })(PriceChangeToneEnum || {});
11
+ const TONE_CLASS = {
12
+ ["positive" /* POSITIVE */]: "text-success",
13
+ ["negative" /* NEGATIVE */]: "text-danger",
14
+ ["neutral" /* NEUTRAL */]: "text-muted-foreground"
15
+ };
16
+ const PriceChange = forwardRef(
17
+ ({ children, tone = "neutral" /* NEUTRAL */, className, ...props }, ref) => /* @__PURE__ */ jsx(
18
+ "span",
19
+ {
20
+ ref,
21
+ className: cn("font-medium tabular-nums", TONE_CLASS[tone], className),
22
+ ...props,
23
+ children
24
+ }
25
+ )
26
+ );
27
+ PriceChange.displayName = "PriceChange";
28
+ function toneFromChange(change) {
29
+ if (change === null || change === void 0 || change === 0) {
30
+ return "neutral" /* NEUTRAL */;
31
+ }
32
+ return change > 0 ? "positive" /* POSITIVE */ : "negative" /* NEGATIVE */;
33
+ }
34
+ export {
35
+ PriceChange,
36
+ PriceChangeToneEnum,
37
+ toneFromChange
38
+ };
39
+ //# sourceMappingURL=price-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/atoms/price-change/price-change.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn.js\";\n\nexport enum PriceChangeToneEnum {\n POSITIVE = \"positive\",\n NEGATIVE = \"negative\",\n NEUTRAL = \"neutral\",\n}\n\nexport interface IPriceChangeProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n tone?: PriceChangeToneEnum;\n}\n\nconst TONE_CLASS: Record<PriceChangeToneEnum, string> = {\n [PriceChangeToneEnum.POSITIVE]: \"text-success\",\n [PriceChangeToneEnum.NEGATIVE]: \"text-danger\",\n [PriceChangeToneEnum.NEUTRAL]: \"text-muted-foreground\",\n};\n\n/**\n * Signed price/percentage delta with semantic tone coloring.\n */\nexport const PriceChange = forwardRef<HTMLSpanElement, IPriceChangeProps>(\n (\n { children, tone = PriceChangeToneEnum.NEUTRAL, className, ...props },\n ref,\n ) => (\n <span\n ref={ref}\n className={cn(\"font-medium tabular-nums\", TONE_CLASS[tone], className)}\n {...props}\n >\n {children}\n </span>\n ),\n);\nPriceChange.displayName = \"PriceChange\";\n\n/**\n * Derives a tone from a numeric change value.\n */\nexport function toneFromChange(change: number | null | undefined): PriceChangeToneEnum {\n if (change === null || change === undefined || change === 0) {\n return PriceChangeToneEnum.NEUTRAL;\n }\n\n return change > 0\n ? PriceChangeToneEnum.POSITIVE\n : PriceChangeToneEnum.NEGATIVE;\n}\n"],"mappings":";AA8BI;AA5BJ,SAAS,kBAAuD;AAChE,SAAS,UAAU;AAEZ,IAAK,sBAAL,kBAAKA,yBAAL;AACL,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,aAAU;AAHA,SAAAA;AAAA,GAAA;AAWZ,MAAM,aAAkD;AAAA,EACtD,CAAC,yBAA4B,GAAG;AAAA,EAChC,CAAC,yBAA4B,GAAG;AAAA,EAChC,CAAC,uBAA2B,GAAG;AACjC;AAKO,MAAM,cAAc;AAAA,EACzB,CACE,EAAE,UAAU,OAAO,yBAA6B,WAAW,GAAG,MAAM,GACpE,QAEA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,4BAA4B,WAAW,IAAI,GAAG,SAAS;AAAA,MACpE,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AACA,YAAY,cAAc;AAKnB,SAAS,eAAe,QAAwD;AACrF,MAAI,WAAW,QAAQ,WAAW,UAAa,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,IACZ,4BACA;AACN;","names":["PriceChangeToneEnum"]}
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { PriceChange } from "./price-change.js";
3
+ declare const meta: Meta<typeof PriceChange>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof PriceChange>;
6
+ export declare const Positive: Story;
7
+ export declare const Negative: Story;
8
+ export declare const Neutral: Story;
9
+ //# sourceMappingURL=price-change.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-change.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/price-change/price-change.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAuB,MAAM,mBAAmB,CAAC;AAErE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAIlC,CAAC;AACF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
2
  import { type HTMLAttributes } from "react";
3
3
  declare const tagVariants: (props?: ({
4
- tone?: "accent" | "neutral" | "info" | "success" | "warning" | "danger" | null | undefined;
4
+ tone?: "neutral" | "accent" | "info" | "success" | "warning" | "danger" | null | undefined;
5
5
  size?: "sm" | "md" | null | undefined;
6
6
  outlined?: boolean | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -0,0 +1,15 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export interface IContentListItemProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
3
+ title: ReactNode;
4
+ source?: ReactNode;
5
+ publishedAt?: ReactNode;
6
+ summary?: ReactNode;
7
+ href?: string;
8
+ external?: boolean;
9
+ onClick?: () => void;
10
+ }
11
+ /**
12
+ * Dense headline row for news and content feeds.
13
+ */
14
+ export declare const ContentListItem: import("react").ForwardRefExoticComponent<IContentListItemProps & import("react").RefAttributes<HTMLElement>>;
15
+ //# sourceMappingURL=content-list-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-list-item.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/content-list-item/content-list-item.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,+GAiF3B,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import {
4
+ forwardRef
5
+ } from "react";
6
+ import { cn } from "../../../utils/cn.js";
7
+ const ContentListItem = forwardRef(
8
+ ({
9
+ title,
10
+ source,
11
+ publishedAt,
12
+ summary,
13
+ href,
14
+ external = false,
15
+ onClick,
16
+ className,
17
+ ...props
18
+ }, ref) => {
19
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
20
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium leading-snug text-foreground", children: title }),
21
+ source || publishedAt ? /* @__PURE__ */ jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-muted-foreground", children: [
22
+ source ? /* @__PURE__ */ jsx("span", { children: source }) : null,
23
+ source && publishedAt ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
24
+ publishedAt ? /* @__PURE__ */ jsx("span", { children: publishedAt }) : null
25
+ ] }) : null,
26
+ summary ? /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-muted-foreground", children: summary }) : null
27
+ ] });
28
+ const sharedClassName = cn(
29
+ "block rounded-lg border border-border-base bg-surface px-3 py-2.5 transition-colors",
30
+ (href || onClick) && "hover:border-border-strong",
31
+ className
32
+ );
33
+ if (href) {
34
+ const anchorProps = props;
35
+ return /* @__PURE__ */ jsx(
36
+ "a",
37
+ {
38
+ ref,
39
+ href,
40
+ className: sharedClassName,
41
+ target: external ? "_blank" : void 0,
42
+ rel: external ? "noopener noreferrer" : void 0,
43
+ ...anchorProps,
44
+ children: body
45
+ }
46
+ );
47
+ }
48
+ return /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ ref,
52
+ role: onClick ? "button" : void 0,
53
+ tabIndex: onClick ? 0 : void 0,
54
+ onClick,
55
+ onKeyDown: onClick ? (event) => {
56
+ if (event.key === "Enter" || event.key === " ") {
57
+ event.preventDefault();
58
+ onClick();
59
+ }
60
+ } : void 0,
61
+ className: cn(sharedClassName, onClick && "cursor-pointer"),
62
+ ...props,
63
+ children: body
64
+ }
65
+ );
66
+ }
67
+ );
68
+ ContentListItem.displayName = "ContentListItem";
69
+ export {
70
+ ContentListItem
71
+ };
72
+ //# sourceMappingURL=content-list-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/content-list-item/content-list-item.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { cn } from \"../../../utils/cn.js\";\n\nexport interface IContentListItemProps\n extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title: ReactNode;\n source?: ReactNode;\n publishedAt?: ReactNode;\n summary?: ReactNode;\n href?: string;\n external?: boolean;\n onClick?: () => void;\n}\n\n/**\n * Dense headline row for news and content feeds.\n */\nexport const ContentListItem = forwardRef<HTMLElement, IContentListItemProps>(\n (\n {\n title,\n source,\n publishedAt,\n summary,\n href,\n external = false,\n onClick,\n className,\n ...props\n },\n ref,\n ) => {\n const body = (\n <>\n <div className=\"text-sm font-medium leading-snug text-foreground\">\n {title}\n </div>\n {source || publishedAt ? (\n <div className=\"mt-1 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-muted-foreground\">\n {source ? <span>{source}</span> : null}\n {source && publishedAt ? <span aria-hidden=\"true\">·</span> : null}\n {publishedAt ? <span>{publishedAt}</span> : null}\n </div>\n ) : null}\n {summary ? (\n <p className=\"mt-1 line-clamp-2 text-xs text-muted-foreground\">\n {summary}\n </p>\n ) : null}\n </>\n );\n\n const sharedClassName = cn(\n \"block rounded-lg border border-border-base bg-surface px-3 py-2.5 transition-colors\",\n (href || onClick) && \"hover:border-border-strong\",\n className,\n );\n\n if (href) {\n const anchorProps = props as AnchorHTMLAttributes<HTMLAnchorElement>;\n\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={sharedClassName}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n {...anchorProps}\n >\n {body}\n </a>\n );\n }\n\n return (\n <div\n ref={ref as Ref<HTMLDivElement>}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n onClick\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n className={cn(sharedClassName, onClick && \"cursor-pointer\")}\n {...props}\n >\n {body}\n </div>\n );\n },\n);\nContentListItem.displayName = \"ContentListItem\";"],"mappings":";AAyCM,mBACE,KAIE,YALJ;AAvCN;AAAA,EACE;AAAA,OAKK;AACP,SAAS,UAAU;AAgBZ,MAAM,kBAAkB;AAAA,EAC7B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,OACJ,iCACE;AAAA,0BAAC,SAAI,WAAU,oDACZ,iBACH;AAAA,MACC,UAAU,cACT,qBAAC,SAAI,WAAU,oFACZ;AAAA,iBAAS,oBAAC,UAAM,kBAAO,IAAU;AAAA,QACjC,UAAU,cAAc,oBAAC,UAAK,eAAY,QAAO,kBAAC,IAAU;AAAA,QAC5D,cAAc,oBAAC,UAAM,uBAAY,IAAU;AAAA,SAC9C,IACE;AAAA,MACH,UACC,oBAAC,OAAE,WAAU,mDACV,mBACH,IACE;AAAA,OACN;AAGF,UAAM,kBAAkB;AAAA,MACtB;AAAA,OACC,QAAQ,YAAY;AAAA,MACrB;AAAA,IACF;AAEA,QAAI,MAAM;AACR,YAAM,cAAc;AAEpB,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,QAAQ,WAAW,WAAW;AAAA,UAC9B,KAAK,WAAW,wBAAwB;AAAA,UACvC,GAAG;AAAA,UAEH;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM,UAAU,WAAW;AAAA,QAC3B,UAAU,UAAU,IAAI;AAAA,QACxB;AAAA,QACA,WACE,UACI,CAAC,UAAU;AACT,cAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,kBAAM,eAAe;AACrB,oBAAQ;AAAA,UACV;AAAA,QACF,IACA;AAAA,QAEN,WAAW,GAAG,iBAAiB,WAAW,gBAAgB;AAAA,QACzD,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,gBAAgB,cAAc;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { ContentListItem } from "./content-list-item.js";
3
+ declare const meta: Meta<typeof ContentListItem>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof ContentListItem>;
6
+ export declare const Default: Story;
7
+ //# sourceMappingURL=content-list-item.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-list-item.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/content-list-item/content-list-item.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAItC,CAAC;AACF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9C,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ContentListItem, type IContentListItemProps, } from "./content-list-item.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/content-list-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import {
2
+ ContentListItem
3
+ } from "./content-list-item.js";
4
+ export {
5
+ ContentListItem
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/content-list-item/index.ts"],"sourcesContent":["export {\n ContentListItem,\n type IContentListItemProps,\n} from \"./content-list-item.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAEK;","names":[]}
@@ -3,12 +3,14 @@ export * from "./alert/index.js";
3
3
  export * from "./breadcrumbs/index.js";
4
4
  export * from "./button/index.js";
5
5
  export * from "./card/index.js";
6
+ export * from "./content-list-item/index.js";
6
7
  export * from "./dropdown-menu/index.js";
7
8
  export * from "./empty-state/index.js";
8
9
  export * from "./form/index.js";
9
10
  export * from "./form-field/index.js";
10
11
  export * from "./labeled-switch/index.js";
11
12
  export * from "./language-toggle/index.js";
13
+ export * from "./metric-strip/index.js";
12
14
  export * from "./multi-toggle/index.js";
13
15
  export * from "./page-header/index.js";
14
16
  export * from "./number-input/index.js";
@@ -16,7 +18,9 @@ export * from "./otp-input/index.js";
16
18
  export * from "./pagination/index.js";
17
19
  export * from "./progress/index.js";
18
20
  export * from "./query-state/index.js";
21
+ export * from "./quote-row/index.js";
19
22
  export * from "./search-input/index.js";
23
+ export * from "./social-post-card/index.js";
20
24
  export * from "./stat-grid/index.js";
21
25
  export * from "./tag-input/index.js";
22
26
  export * from "./signal-card/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
@@ -3,12 +3,14 @@ export * from "./alert/index.js";
3
3
  export * from "./breadcrumbs/index.js";
4
4
  export * from "./button/index.js";
5
5
  export * from "./card/index.js";
6
+ export * from "./content-list-item/index.js";
6
7
  export * from "./dropdown-menu/index.js";
7
8
  export * from "./empty-state/index.js";
8
9
  export * from "./form/index.js";
9
10
  export * from "./form-field/index.js";
10
11
  export * from "./labeled-switch/index.js";
11
12
  export * from "./language-toggle/index.js";
13
+ export * from "./metric-strip/index.js";
12
14
  export * from "./multi-toggle/index.js";
13
15
  export * from "./page-header/index.js";
14
16
  export * from "./number-input/index.js";
@@ -16,7 +18,9 @@ export * from "./otp-input/index.js";
16
18
  export * from "./pagination/index.js";
17
19
  export * from "./progress/index.js";
18
20
  export * from "./query-state/index.js";
21
+ export * from "./quote-row/index.js";
19
22
  export * from "./search-input/index.js";
23
+ export * from "./social-post-card/index.js";
20
24
  export * from "./stat-grid/index.js";
21
25
  export * from "./tag-input/index.js";
22
26
  export * from "./signal-card/index.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/molecules/index.ts"],"sourcesContent":["export * from \"./accordion/index.js\";\nexport * from \"./alert/index.js\";\nexport * from \"./breadcrumbs/index.js\";\nexport * from \"./button/index.js\";\nexport * from \"./card/index.js\";\nexport * from \"./dropdown-menu/index.js\";\nexport * from \"./empty-state/index.js\";\nexport * from \"./form/index.js\";\nexport * from \"./form-field/index.js\";\nexport * from \"./labeled-switch/index.js\";\nexport * from \"./language-toggle/index.js\";\nexport * from \"./multi-toggle/index.js\";\nexport * from \"./page-header/index.js\";\nexport * from \"./number-input/index.js\";\nexport * from \"./otp-input/index.js\";\nexport * from \"./pagination/index.js\";\nexport * from \"./progress/index.js\";\nexport * from \"./query-state/index.js\";\nexport * from \"./search-input/index.js\";\nexport * from \"./stat-grid/index.js\";\nexport * from \"./tag-input/index.js\";\nexport * from \"./signal-card/index.js\";\nexport * from \"./signal-severity-badge/index.js\";\nexport * from \"./summary-header/index.js\";\nexport * from \"./tabs/index.js\";\nexport * from \"./text-artifact-card/index.js\";\nexport * from \"./theme-toggle/index.js\";\nexport * from \"./tooltip/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/molecules/index.ts"],"sourcesContent":["export * from \"./accordion/index.js\";\nexport * from \"./alert/index.js\";\nexport * from \"./breadcrumbs/index.js\";\nexport * from \"./button/index.js\";\nexport * from \"./card/index.js\";\nexport * from \"./content-list-item/index.js\";\nexport * from \"./dropdown-menu/index.js\";\nexport * from \"./empty-state/index.js\";\nexport * from \"./form/index.js\";\nexport * from \"./form-field/index.js\";\nexport * from \"./labeled-switch/index.js\";\nexport * from \"./language-toggle/index.js\";\nexport * from \"./metric-strip/index.js\";\nexport * from \"./multi-toggle/index.js\";\nexport * from \"./page-header/index.js\";\nexport * from \"./number-input/index.js\";\nexport * from \"./otp-input/index.js\";\nexport * from \"./pagination/index.js\";\nexport * from \"./progress/index.js\";\nexport * from \"./query-state/index.js\";\nexport * from \"./quote-row/index.js\";\nexport * from \"./search-input/index.js\";\nexport * from \"./social-post-card/index.js\";\nexport * from \"./stat-grid/index.js\";\nexport * from \"./tag-input/index.js\";\nexport * from \"./signal-card/index.js\";\nexport * from \"./signal-severity-badge/index.js\";\nexport * from \"./summary-header/index.js\";\nexport * from \"./tabs/index.js\";\nexport * from \"./text-artifact-card/index.js\";\nexport * from \"./theme-toggle/index.js\";\nexport * from \"./tooltip/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { MetricStrip, type IMetricStripItem, type IMetricStripProps, } from "./metric-strip.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/metric-strip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import {
2
+ MetricStrip
3
+ } from "./metric-strip.js";
4
+ export {
5
+ MetricStrip
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/metric-strip/index.ts"],"sourcesContent":["export {\n MetricStrip,\n type IMetricStripItem,\n type IMetricStripProps,\n} from \"./metric-strip.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAGK;","names":[]}
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from "react";
2
+ export interface IMetricStripItem {
3
+ id: string;
4
+ label: ReactNode;
5
+ value: ReactNode;
6
+ change?: ReactNode;
7
+ }
8
+ export interface IMetricStripProps {
9
+ items: readonly IMetricStripItem[];
10
+ className?: string;
11
+ ariaLabel?: string;
12
+ }
13
+ /**
14
+ * Compact horizontal metrics tape for dashboards and market strips.
15
+ */
16
+ export declare function MetricStrip({ items, className, ariaLabel, }: IMetricStripProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=metric-strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-strip.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/metric-strip/metric-strip.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,SAAS,EACT,SAAqB,GACtB,EAAE,iBAAiB,+BA6BnB"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import {} from "react";
4
+ import { cn } from "../../../utils/cn.js";
5
+ function MetricStrip({
6
+ items,
7
+ className,
8
+ ariaLabel = "Metrics"
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ role: "list",
14
+ "aria-label": ariaLabel,
15
+ className: cn(
16
+ "flex gap-2 overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
17
+ className
18
+ ),
19
+ children: items.map((item) => /* @__PURE__ */ jsxs(
20
+ "div",
21
+ {
22
+ role: "listitem",
23
+ className: "min-w-[8.5rem] shrink-0 rounded-lg border border-border-base bg-surface px-3 py-2",
24
+ children: [
25
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: item.label }),
26
+ /* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex items-baseline gap-2", children: [
27
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold tabular-nums text-foreground", children: item.value }),
28
+ item.change ? /* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums", children: item.change }) : null
29
+ ] })
30
+ ]
31
+ },
32
+ item.id
33
+ ))
34
+ }
35
+ );
36
+ }
37
+ export {
38
+ MetricStrip
39
+ };
40
+ //# sourceMappingURL=metric-strip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/metric-strip/metric-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn.js\";\n\nexport interface IMetricStripItem {\n id: string;\n label: ReactNode;\n value: ReactNode;\n change?: ReactNode;\n}\n\nexport interface IMetricStripProps {\n items: readonly IMetricStripItem[];\n className?: string;\n ariaLabel?: string;\n}\n\n/**\n * Compact horizontal metrics tape for dashboards and market strips.\n */\nexport function MetricStrip({\n items,\n className,\n ariaLabel = \"Metrics\",\n}: IMetricStripProps) {\n return (\n <div\n role=\"list\"\n aria-label={ariaLabel}\n className={cn(\n \"flex gap-2 overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n className,\n )}\n >\n {items.map((item) => (\n <div\n key={item.id}\n role=\"listitem\"\n className=\"min-w-[8.5rem] shrink-0 rounded-lg border border-border-base bg-surface px-3 py-2\"\n >\n <div className=\"text-xs text-muted-foreground\">{item.label}</div>\n <div className=\"mt-0.5 flex items-baseline gap-2\">\n <span className=\"text-sm font-semibold tabular-nums text-foreground\">\n {item.value}\n </span>\n {item.change ? (\n <span className=\"text-xs tabular-nums\">{item.change}</span>\n ) : null}\n </div>\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";AAyCU,cACA,YADA;AAvCV,eAA+B;AAC/B,SAAS,UAAU;AAkBZ,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM,IAAI,CAAC,SACV;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAU;AAAA,UAEV;AAAA,gCAAC,SAAI,WAAU,iCAAiC,eAAK,OAAM;AAAA,YAC3D,qBAAC,SAAI,WAAU,oCACb;AAAA,kCAAC,UAAK,WAAU,sDACb,eAAK,OACR;AAAA,cACC,KAAK,SACJ,oBAAC,UAAK,WAAU,wBAAwB,eAAK,QAAO,IAClD;AAAA,eACN;AAAA;AAAA;AAAA,QAZK,KAAK;AAAA,MAaZ,CACD;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { MetricStrip } from "./metric-strip.js";
3
+ declare const meta: Meta<typeof MetricStrip>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof MetricStrip>;
6
+ export declare const Default: Story;
7
+ //# sourceMappingURL=metric-strip.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-strip.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/metric-strip/metric-strip.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAIlC,CAAC;AACF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAsBrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { QuoteRow, type IQuoteRowProps } from "./quote-row.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/quote-row/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { QuoteRow } from "./quote-row.js";
2
+ export {
3
+ QuoteRow
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/quote-row/index.ts"],"sourcesContent":["export { QuoteRow, type IQuoteRowProps } from \"./quote-row.js\";\n"],"mappings":"AAAA,SAAS,gBAAqC;","names":[]}
@@ -0,0 +1,13 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export interface IQuoteRowProps extends HTMLAttributes<HTMLDivElement> {
3
+ symbol: ReactNode;
4
+ name?: ReactNode;
5
+ price: ReactNode;
6
+ change?: ReactNode;
7
+ visual?: ReactNode;
8
+ }
9
+ /**
10
+ * Compact quote row for movers lists and watchlist strips.
11
+ */
12
+ export declare const QuoteRow: import("react").ForwardRefExoticComponent<IQuoteRowProps & import("react").RefAttributes<HTMLDivElement>>;
13
+ //# sourceMappingURL=quote-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-row.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/quote-row/quote-row.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGxE,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,2GA6BpB,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { cn } from "../../../utils/cn.js";
5
+ const QuoteRow = forwardRef(
6
+ ({ symbol, name, price, change, visual, className, ...props }, ref) => /* @__PURE__ */ jsxs(
7
+ "div",
8
+ {
9
+ ref,
10
+ className: cn(
11
+ "flex items-center gap-3 rounded-lg border border-border-base bg-surface px-3 py-2",
12
+ className
13
+ ),
14
+ ...props,
15
+ children: [
16
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
17
+ /* @__PURE__ */ jsx("div", { className: "font-mono text-sm font-semibold text-foreground", children: symbol }),
18
+ name ? /* @__PURE__ */ jsx("div", { className: "truncate text-xs text-muted-foreground", children: name }) : null
19
+ ] }),
20
+ visual ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: visual }) : null,
21
+ /* @__PURE__ */ jsxs("div", { className: "shrink-0 text-end", children: [
22
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium tabular-nums text-foreground", children: price }),
23
+ change ? /* @__PURE__ */ jsx("div", { className: "text-xs tabular-nums", children: change }) : null
24
+ ] })
25
+ ]
26
+ }
27
+ )
28
+ );
29
+ QuoteRow.displayName = "QuoteRow";
30
+ export {
31
+ QuoteRow
32
+ };
33
+ //# sourceMappingURL=quote-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/quote-row/quote-row.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn.js\";\n\nexport interface IQuoteRowProps extends HTMLAttributes<HTMLDivElement> {\n symbol: ReactNode;\n name?: ReactNode;\n price: ReactNode;\n change?: ReactNode;\n visual?: ReactNode;\n}\n\n/**\n * Compact quote row for movers lists and watchlist strips.\n */\nexport const QuoteRow = forwardRef<HTMLDivElement, IQuoteRowProps>(\n ({ symbol, name, price, change, visual, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 rounded-lg border border-border-base bg-surface px-3 py-2\",\n className,\n )}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-mono text-sm font-semibold text-foreground\">\n {symbol}\n </div>\n {name ? (\n <div className=\"truncate text-xs text-muted-foreground\">{name}</div>\n ) : null}\n </div>\n {visual ? <div className=\"shrink-0\">{visual}</div> : null}\n <div className=\"shrink-0 text-end\">\n <div className=\"text-sm font-medium tabular-nums text-foreground\">\n {price}\n </div>\n {change ? (\n <div className=\"text-xs tabular-nums\">{change}</div>\n ) : null}\n </div>\n </div>\n ),\n);\nQuoteRow.displayName = \"QuoteRow\";\n"],"mappings":";AA0BM,SACE,KADF;AAxBN,SAAS,kBAAuD;AAChE,SAAS,UAAU;AAaZ,MAAM,WAAW;AAAA,EACtB,CAAC,EAAE,QAAQ,MAAM,OAAO,QAAQ,QAAQ,WAAW,GAAG,MAAM,GAAG,QAC7D;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,6BAAC,SAAI,WAAU,kBACb;AAAA,8BAAC,SAAI,WAAU,mDACZ,kBACH;AAAA,UACC,OACC,oBAAC,SAAI,WAAU,0CAA0C,gBAAK,IAC5D;AAAA,WACN;AAAA,QACC,SAAS,oBAAC,SAAI,WAAU,YAAY,kBAAO,IAAS;AAAA,QACrD,qBAAC,SAAI,WAAU,qBACb;AAAA,8BAAC,SAAI,WAAU,oDACZ,iBACH;AAAA,UACC,SACC,oBAAC,SAAI,WAAU,wBAAwB,kBAAO,IAC5C;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;AACA,SAAS,cAAc;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { QuoteRow } from "./quote-row.js";
3
+ declare const meta: Meta<typeof QuoteRow>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof QuoteRow>;
6
+ export declare const Default: Story;
7
+ //# sourceMappingURL=quote-row.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-row.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/quote-row/quote-row.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAI/B,CAAC;AACF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SocialPostCard, type ISocialPostCardProps, } from "./social-post-card.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/social-post-card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import {
2
+ SocialPostCard
3
+ } from "./social-post-card.js";
4
+ export {
5
+ SocialPostCard
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/molecules/social-post-card/index.ts"],"sourcesContent":["export {\n SocialPostCard,\n type ISocialPostCardProps,\n} from \"./social-post-card.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAEK;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export interface ISocialPostCardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
3
+ author: ReactNode;
4
+ handle?: ReactNode;
5
+ body: ReactNode;
6
+ meta?: ReactNode;
7
+ ticker?: ReactNode;
8
+ href?: string;
9
+ external?: boolean;
10
+ }
11
+ /**
12
+ * Compact social/post card for horizontal feeds and highlight rails.
13
+ */
14
+ export declare const SocialPostCard: import("react").ForwardRefExoticComponent<ISocialPostCardProps & import("react").RefAttributes<HTMLDivElement>>;
15
+ //# sourceMappingURL=social-post-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-post-card.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/social-post-card/social-post-card.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMxE,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACrD,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,iHAqE1B,CAAC"}