@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.
- package/dist/components/atoms/index.d.ts +1 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +1 -0
- package/dist/components/atoms/index.js.map +1 -1
- package/dist/components/atoms/price-change/index.d.ts +2 -0
- package/dist/components/atoms/price-change/index.d.ts.map +1 -0
- package/dist/components/atoms/price-change/index.js +11 -0
- package/dist/components/atoms/price-change/index.js.map +1 -0
- package/dist/components/atoms/price-change/price-change.d.ts +19 -0
- package/dist/components/atoms/price-change/price-change.d.ts.map +1 -0
- package/dist/components/atoms/price-change/price-change.js +39 -0
- package/dist/components/atoms/price-change/price-change.js.map +1 -0
- package/dist/components/atoms/price-change/price-change.stories.d.ts +9 -0
- package/dist/components/atoms/price-change/price-change.stories.d.ts.map +1 -0
- package/dist/components/atoms/tag/tag.d.ts +1 -1
- package/dist/components/molecules/content-list-item/content-list-item.d.ts +15 -0
- package/dist/components/molecules/content-list-item/content-list-item.d.ts.map +1 -0
- package/dist/components/molecules/content-list-item/content-list-item.js +72 -0
- package/dist/components/molecules/content-list-item/content-list-item.js.map +1 -0
- package/dist/components/molecules/content-list-item/content-list-item.stories.d.ts +7 -0
- package/dist/components/molecules/content-list-item/content-list-item.stories.d.ts.map +1 -0
- package/dist/components/molecules/content-list-item/index.d.ts +2 -0
- package/dist/components/molecules/content-list-item/index.d.ts.map +1 -0
- package/dist/components/molecules/content-list-item/index.js +7 -0
- package/dist/components/molecules/content-list-item/index.js.map +1 -0
- package/dist/components/molecules/index.d.ts +4 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/index.js +4 -0
- package/dist/components/molecules/index.js.map +1 -1
- package/dist/components/molecules/metric-strip/index.d.ts +2 -0
- package/dist/components/molecules/metric-strip/index.d.ts.map +1 -0
- package/dist/components/molecules/metric-strip/index.js +7 -0
- package/dist/components/molecules/metric-strip/index.js.map +1 -0
- package/dist/components/molecules/metric-strip/metric-strip.d.ts +17 -0
- package/dist/components/molecules/metric-strip/metric-strip.d.ts.map +1 -0
- package/dist/components/molecules/metric-strip/metric-strip.js +40 -0
- package/dist/components/molecules/metric-strip/metric-strip.js.map +1 -0
- package/dist/components/molecules/metric-strip/metric-strip.stories.d.ts +7 -0
- package/dist/components/molecules/metric-strip/metric-strip.stories.d.ts.map +1 -0
- package/dist/components/molecules/quote-row/index.d.ts +2 -0
- package/dist/components/molecules/quote-row/index.d.ts.map +1 -0
- package/dist/components/molecules/quote-row/index.js +5 -0
- package/dist/components/molecules/quote-row/index.js.map +1 -0
- package/dist/components/molecules/quote-row/quote-row.d.ts +13 -0
- package/dist/components/molecules/quote-row/quote-row.d.ts.map +1 -0
- package/dist/components/molecules/quote-row/quote-row.js +33 -0
- package/dist/components/molecules/quote-row/quote-row.js.map +1 -0
- package/dist/components/molecules/quote-row/quote-row.stories.d.ts +7 -0
- package/dist/components/molecules/quote-row/quote-row.stories.d.ts.map +1 -0
- package/dist/components/molecules/social-post-card/index.d.ts +2 -0
- package/dist/components/molecules/social-post-card/index.d.ts.map +1 -0
- package/dist/components/molecules/social-post-card/index.js +7 -0
- package/dist/components/molecules/social-post-card/index.js.map +1 -0
- package/dist/components/molecules/social-post-card/social-post-card.d.ts +15 -0
- package/dist/components/molecules/social-post-card/social-post-card.d.ts.map +1 -0
- package/dist/components/molecules/social-post-card/social-post-card.js +61 -0
- package/dist/components/molecules/social-post-card/social-post-card.js.map +1 -0
- package/dist/components/molecules/social-post-card/social-post-card.stories.d.ts +7 -0
- package/dist/components/molecules/social-post-card/social-post-card.stories.d.ts.map +1 -0
- package/dist/components/organisms/app-shell/app-shell-layout.d.ts +6 -0
- package/dist/components/organisms/app-shell/app-shell-layout.d.ts.map +1 -1
- package/dist/components/organisms/app-shell/app-shell-layout.js +8 -3
- package/dist/components/organisms/app-shell/app-shell-layout.js.map +1 -1
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.d.ts +12 -0
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.d.ts.map +1 -0
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.js +76 -0
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.js.map +1 -0
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.stories.d.ts +7 -0
- package/dist/components/organisms/horizontal-scroller/horizontal-scroller.stories.d.ts.map +1 -0
- package/dist/components/organisms/horizontal-scroller/index.d.ts +2 -0
- package/dist/components/organisms/horizontal-scroller/index.d.ts.map +1 -0
- package/dist/components/organisms/horizontal-scroller/index.js +7 -0
- package/dist/components/organisms/horizontal-scroller/index.js.map +1 -0
- package/dist/components/organisms/index.d.ts +1 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +1 -0
- package/dist/components/organisms/index.js.map +1 -1
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.d.ts +12 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.d.ts.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.js +19 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.js.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.d.ts +15 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.d.ts.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.js +15 -0
- package/dist/components/utility-wrappers/appearance-sync/appearance-sync.type.js.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/apply-appearance.d.ts +10 -0
- package/dist/components/utility-wrappers/appearance-sync/apply-appearance.d.ts.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/apply-appearance.js +26 -0
- package/dist/components/utility-wrappers/appearance-sync/apply-appearance.js.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/index.d.ts +5 -0
- package/dist/components/utility-wrappers/appearance-sync/index.d.ts.map +1 -0
- package/dist/components/utility-wrappers/appearance-sync/index.js +21 -0
- package/dist/components/utility-wrappers/appearance-sync/index.js.map +1 -0
- package/dist/components/utility-wrappers/index.d.ts +1 -0
- package/dist/components/utility-wrappers/index.d.ts.map +1 -1
- package/dist/components/utility-wrappers/index.js +1 -0
- package/dist/components/utility-wrappers/index.js.map +1 -1
- package/package.json +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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?: "
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|