@jacshuo/onyx 0.1.4

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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +497 -0
  3. package/dist/components/Accordion.d.ts +20 -0
  4. package/dist/components/Accordion.d.ts.map +1 -0
  5. package/dist/components/Alert.d.ts +25 -0
  6. package/dist/components/Alert.d.ts.map +1 -0
  7. package/dist/components/Badge.d.ts +7 -0
  8. package/dist/components/Badge.d.ts.map +1 -0
  9. package/dist/components/Button.d.ts +7 -0
  10. package/dist/components/Button.d.ts.map +1 -0
  11. package/dist/components/Card.d.ts +30 -0
  12. package/dist/components/Card.d.ts.map +1 -0
  13. package/dist/components/Chat.d.ts +29 -0
  14. package/dist/components/Chat.d.ts.map +1 -0
  15. package/dist/components/CinePlayer.d.ts +37 -0
  16. package/dist/components/CinePlayer.d.ts.map +1 -0
  17. package/dist/components/Dialog.d.ts +21 -0
  18. package/dist/components/Dialog.d.ts.map +1 -0
  19. package/dist/components/Dropdown.d.ts +57 -0
  20. package/dist/components/Dropdown.d.ts.map +1 -0
  21. package/dist/components/DropdownButton.d.ts +33 -0
  22. package/dist/components/DropdownButton.d.ts.map +1 -0
  23. package/dist/components/FileExplorer.d.ts +93 -0
  24. package/dist/components/FileExplorer.d.ts.map +1 -0
  25. package/dist/components/FilmReel.d.ts +40 -0
  26. package/dist/components/FilmReel.d.ts.map +1 -0
  27. package/dist/components/Header.d.ts +50 -0
  28. package/dist/components/Header.d.ts.map +1 -0
  29. package/dist/components/ImageCard.d.ts +23 -0
  30. package/dist/components/ImageCard.d.ts.map +1 -0
  31. package/dist/components/Input.d.ts +21 -0
  32. package/dist/components/Input.d.ts.map +1 -0
  33. package/dist/components/Label.d.ts +7 -0
  34. package/dist/components/Label.d.ts.map +1 -0
  35. package/dist/components/List.d.ts +8 -0
  36. package/dist/components/List.d.ts.map +1 -0
  37. package/dist/components/MiniPlayer.d.ts +50 -0
  38. package/dist/components/MiniPlayer.d.ts.map +1 -0
  39. package/dist/components/Panel.d.ts +9 -0
  40. package/dist/components/Panel.d.ts.map +1 -0
  41. package/dist/components/SideNav.d.ts +64 -0
  42. package/dist/components/SideNav.d.ts.map +1 -0
  43. package/dist/components/Table.d.ts +79 -0
  44. package/dist/components/Table.d.ts.map +1 -0
  45. package/dist/components/Tabs.d.ts +25 -0
  46. package/dist/components/Tabs.d.ts.map +1 -0
  47. package/dist/components/Tooltip.d.ts +14 -0
  48. package/dist/components/Tooltip.d.ts.map +1 -0
  49. package/dist/components/Tree.d.ts +31 -0
  50. package/dist/components/Tree.d.ts.map +1 -0
  51. package/dist/index.cjs +1 -0
  52. package/dist/index.d.ts +27 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +1 -0
  55. package/dist/lib/utils.d.ts +3 -0
  56. package/dist/lib/utils.d.ts.map +1 -0
  57. package/dist/styles/theme.d.ts +48 -0
  58. package/dist/styles/theme.d.ts.map +1 -0
  59. package/dist/styles.css +4086 -0
  60. package/package.json +108 -0
@@ -0,0 +1,37 @@
1
+ export interface CinePlayerMedia {
2
+ /** Display title. */
3
+ title: string;
4
+ /** Subtitle / description line. */
5
+ subtitle?: string;
6
+ /** Media type tag (e.g. 'movie', 'clip', 'episode'). Used for sorting. */
7
+ type?: string;
8
+ /** Source URL (http/blob/file). */
9
+ src: string;
10
+ /** Poster / thumbnail URL. */
11
+ poster?: string;
12
+ /** Duration in seconds (auto-detected if omitted). */
13
+ duration?: number;
14
+ }
15
+ export type CinePlayerSortKey = 'title' | 'type' | 'duration';
16
+ export interface CinePlayerProps {
17
+ /** Media playlist. */
18
+ playlist: CinePlayerMedia[];
19
+ /** Starting index. @default 0 */
20
+ initialTrack?: number;
21
+ /** Auto-play when ready. @default false */
22
+ autoPlay?: boolean;
23
+ /** Initial shuffle state. @default false */
24
+ shuffle?: boolean;
25
+ /** Initial loop state. @default false */
26
+ loop?: boolean;
27
+ /** Called on track change. */
28
+ onTrackChange?: (index: number, media: CinePlayerMedia) => void;
29
+ /** Called when play state changes. */
30
+ onPlayChange?: (playing: boolean) => void;
31
+ /** Accent color (any CSS color value). @default '#8b5cf6' */
32
+ accent?: string;
33
+ /** Extra class name on root. */
34
+ className?: string;
35
+ }
36
+ export declare function CinePlayer({ playlist, initialTrack, autoPlay, shuffle: shuffleProp, loop: loopProp, onTrackChange, onPlayChange, accent, className, }: CinePlayerProps): import("react/jsx-runtime").JSX.Element;
37
+ //# sourceMappingURL=CinePlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CinePlayer.d.ts","sourceRoot":"","sources":["../../src/components/CinePlayer.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChE,sCAAsC;IACtC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAgB,EAChB,QAAgB,EAChB,OAAO,EAAE,WAAmB,EAC5B,IAAI,EAAE,QAAgB,EACtB,aAAa,EACb,YAAY,EACZ,MAAkB,EAClB,SAAS,GACV,EAAE,eAAe,2CA+lBjB"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { dialogContentVariants } from '../styles/theme';
4
+ type DialogProps = {
5
+ open: boolean;
6
+ onOpenChange: (open: boolean) => void;
7
+ modal?: boolean;
8
+ /** When true, clicking outside the dialog closes it. @default false */
9
+ closeOnOutsideClick?: boolean;
10
+ children: React.ReactNode;
11
+ };
12
+ export declare function Dialog({ open, onOpenChange, modal, closeOnOutsideClick, children, }: DialogProps): import("react/jsx-runtime").JSX.Element | null;
13
+ type DialogContentProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof dialogContentVariants>;
14
+ export declare function DialogContent({ size, className, children, ...props }: DialogContentProps): import("react/jsx-runtime").JSX.Element | null;
15
+ export declare function DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
16
+ export declare function DialogTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): import("react/jsx-runtime").JSX.Element;
17
+ export declare function DialogDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): import("react/jsx-runtime").JSX.Element;
18
+ export declare function DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
19
+ export declare function DialogClose({ className, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement>): import("react/jsx-runtime").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/components/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8D,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAkCxD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAY,EACZ,mBAA2B,EAC3B,QAAQ,GACT,EAAE,WAAW,kDAuCb;AAID,KAAK,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAC5D,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE7C,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,kDAwDxF;AAID,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAEzF;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,2CAO5F;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,2CAI5C;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAEzF;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,2CAe/C"}
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ export interface DropdownOption {
3
+ /** Unique value for this option. */
4
+ value: string;
5
+ /** Display label. Defaults to value. */
6
+ label?: string;
7
+ /** Icon rendered before the label. */
8
+ icon?: React.ReactNode;
9
+ /** Disable this option. */
10
+ disabled?: boolean;
11
+ /** Nested children for cascading (hierarchical) menus. */
12
+ children?: DropdownOption[];
13
+ }
14
+ interface DropdownBaseProps {
15
+ /** Available options. Supports nested children for cascading. */
16
+ options: DropdownOption[];
17
+ /** Placeholder text when nothing is selected. */
18
+ placeholder?: string;
19
+ /** Allow the user to type to filter options. @default false */
20
+ editable?: boolean;
21
+ /** Called when the user submits a value not in the list (editable mode). */
22
+ onAddItem?: (value: string) => void;
23
+ /** Disable the entire dropdown. */
24
+ disabled?: boolean;
25
+ /** Menu alignment. @default 'left' */
26
+ align?: 'left' | 'right';
27
+ /** Additional class name for the root container. */
28
+ className?: string;
29
+ }
30
+ export interface DropdownSingleProps extends DropdownBaseProps {
31
+ /** Enable multi-select with checkboxes. @default false */
32
+ multiple?: false;
33
+ /** Currently selected value (controlled, single mode). */
34
+ value?: string;
35
+ /** Callback fired when an option is selected (single mode). */
36
+ onChange?: (value: string, option: DropdownOption) => void;
37
+ /** Not used in single mode. */
38
+ selected?: never;
39
+ /** Not used in single mode. */
40
+ onSelectionChange?: never;
41
+ }
42
+ export interface DropdownMultipleProps extends DropdownBaseProps {
43
+ /** Enable multi-select with checkboxes. */
44
+ multiple: true;
45
+ /** Currently selected values (controlled, multi mode). */
46
+ selected?: string[];
47
+ /** Callback fired when selection changes (multi mode). */
48
+ onSelectionChange?: (selected: string[]) => void;
49
+ /** Not used in multi mode. */
50
+ value?: never;
51
+ /** Not used in multi mode. */
52
+ onChange?: never;
53
+ }
54
+ export type DropdownProps = DropdownSingleProps | DropdownMultipleProps;
55
+ export declare function Dropdown(props: DropdownProps): import("react/jsx-runtime").JSX.Element;
56
+ export {};
57
+ //# sourceMappingURL=Dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../src/components/Dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,UAAU,iBAAiB;IACzB,iEAAiE;IACjE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3D,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,KAAK,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,2CAA2C;IAC3C,QAAQ,EAAE,IAAI,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAwNxE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAwN5C"}
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { buttonVariants } from '../styles/theme';
4
+ export interface DropdownItem {
5
+ /** Unique key. Falls back to label when label is a string. */
6
+ key?: string;
7
+ label: React.ReactNode;
8
+ /** Disable this item. */
9
+ disabled?: boolean;
10
+ /** Divider rendered before this item. */
11
+ divider?: boolean;
12
+ onClick?: () => void;
13
+ }
14
+ export interface DropdownButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, VariantProps<typeof buttonVariants> {
15
+ /** Button label. */
16
+ label: React.ReactNode;
17
+ /** Dropdown menu items. */
18
+ items: DropdownItem[];
19
+ /** Menu alignment. @default 'left' */
20
+ align?: 'left' | 'right';
21
+ /** Show a search/add input at the top of the menu. */
22
+ editable?: boolean;
23
+ /** Called when the user presses Enter on a value not in the list. */
24
+ onAddItem?: (value: string) => void;
25
+ /** Enable multi-select with checkboxes. */
26
+ multiple?: boolean;
27
+ /** Currently selected keys (controlled). */
28
+ selected?: string[];
29
+ /** Called when the selection changes (multi-select mode). */
30
+ onSelectionChange?: (selected: string[]) => void;
31
+ }
32
+ export declare function DropdownButton({ label, items, intent, size, align, className, disabled, editable, onAddItem, multiple, selected, onSelectionChange, ...props }: DropdownButtonProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=DropdownButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownButton.d.ts","sourceRoot":"","sources":["../../src/components/DropdownButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBACf,SACE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,EAC/D,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,oBAAoB;IACpB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,2BAA2B;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAGzB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAClD;AAUD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,KAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,QAAgB,EAChB,QAAa,EACb,iBAAiB,EACjB,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAyNrB"}
@@ -0,0 +1,93 @@
1
+ import React from 'react';
2
+ export interface FileExplorerItem {
3
+ /** File or directory name (including extension). */
4
+ name: string;
5
+ /** Absolute or virtual path. */
6
+ path: string;
7
+ /** Item type. */
8
+ type: 'file' | 'directory';
9
+ /** Size in bytes (files only). */
10
+ size?: number;
11
+ /** File extension (e.g. '.tsx'). Auto-derived from name if omitted. */
12
+ extension?: string;
13
+ /** Last modified date. */
14
+ modifiedAt?: Date | string;
15
+ /** Creation date. */
16
+ createdAt?: Date | string;
17
+ /** MIME type string. */
18
+ mimeType?: string;
19
+ /** Whether this item is hidden. */
20
+ hidden?: boolean;
21
+ }
22
+ export type FileExplorerViewMode = 'list' | 'grid';
23
+ export type FileExplorerDockSide = 'left' | 'right';
24
+ /** Toolbar input mode: filter current list or navigate to a path. */
25
+ export type FileExplorerInputMode = 'search' | 'navigate';
26
+ /** A custom action shown in the properties panel. */
27
+ export interface FileExplorerAction {
28
+ /** Unique key for the action. */
29
+ key: string;
30
+ /** Label displayed on the button. */
31
+ label: string;
32
+ /** Optional lucide icon component. */
33
+ icon?: React.ComponentType<{
34
+ className?: string;
35
+ }>;
36
+ /** Called when the action is clicked. */
37
+ onClick: (file: FileExplorerItem) => void;
38
+ }
39
+ export interface FileExplorerProps {
40
+ /** Files / directories to display. */
41
+ files: FileExplorerItem[];
42
+ /** Window title. @default 'File Explorer' */
43
+ title?: string;
44
+ /** Accent color (any CSS color). @default '#8b5cf6' */
45
+ accent?: string;
46
+ /** Default view mode. @default 'list' */
47
+ defaultView?: FileExplorerViewMode;
48
+ /** Initial window position {x, y}. */
49
+ initialPosition?: {
50
+ x: number;
51
+ y: number;
52
+ };
53
+ /** Initial window dimensions (px). */
54
+ initialSize?: {
55
+ width: number;
56
+ height: number;
57
+ };
58
+ /** Enable dock-to-edge behaviour. @default false */
59
+ dockable?: boolean;
60
+ /** Which edge to dock to. @default 'right' */
61
+ dockSide?: FileExplorerDockSide;
62
+ /** Whether the explorer starts visible. @default true */
63
+ visible?: boolean;
64
+ /** Called on double-click of a file. */
65
+ onFileOpen?: (file: FileExplorerItem) => void;
66
+ /** Called when selection changes. */
67
+ onSelectionChange?: (files: FileExplorerItem[]) => void;
68
+ /** Called when navigating into a directory. */
69
+ onNavigate?: (path: string) => void;
70
+ /** Called when the user confirms deletion of selected files via the Delete key. */
71
+ onDelete?: (files: FileExplorerItem[]) => void;
72
+ /** Called on close button. */
73
+ onClose?: () => void;
74
+ /** Called on minimize/dock. */
75
+ onMinimize?: () => void;
76
+ /** Called when user presses Enter in navigate mode. Receives the typed path. */
77
+ onPathSubmit?: (path: string) => void;
78
+ /** Default input mode. @default 'search' */
79
+ defaultInputMode?: FileExplorerInputMode;
80
+ /** Custom actions shown in the properties panel. Each receives the inspected file. */
81
+ actions?: FileExplorerAction[];
82
+ /** Whether the window is resizable. @default true */
83
+ resizable?: boolean;
84
+ /** Minimum window size when resizing. @default { width: 400, height: 300 } */
85
+ minSize?: {
86
+ width: number;
87
+ height: number;
88
+ };
89
+ /** Extra class on outermost wrapper. */
90
+ className?: string;
91
+ }
92
+ export declare function FileExplorer({ files, title, accent, defaultView, initialPosition, initialSize, dockable, dockSide, visible: visibleProp, onFileOpen, onSelectionChange, onNavigate, onDelete, onClose, onMinimize, onPathSubmit, defaultInputMode, actions, resizable, minSize, className, }: FileExplorerProps): import("react/jsx-runtime").JSX.Element | null;
93
+ //# sourceMappingURL=FileExplorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileExplorer.d.ts","sourceRoot":"","sources":["../../src/components/FileExplorer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ export interface FilmReelPhoto {
3
+ src: string;
4
+ alt?: string;
5
+ title?: string;
6
+ /** A short memoir or description for this photo. */
7
+ description?: string;
8
+ metadata?: {
9
+ camera?: string;
10
+ lens?: string;
11
+ aperture?: string;
12
+ shutter?: string;
13
+ iso?: string;
14
+ date?: string;
15
+ location?: string;
16
+ [key: string]: string | undefined;
17
+ };
18
+ }
19
+ export interface FilmReelAction {
20
+ key: string;
21
+ icon: React.ReactNode;
22
+ activeIcon?: React.ReactNode;
23
+ label: string;
24
+ toggle?: boolean;
25
+ }
26
+ export type FilmReelLayout = 'strip' | 'sheet' | 'stack';
27
+ export interface FilmReelProps {
28
+ photos: FilmReelPhoto[];
29
+ layout?: FilmReelLayout;
30
+ actions?: FilmReelAction[];
31
+ onAction?: (action: string, photo: FilmReelPhoto, index: number) => void;
32
+ className?: string;
33
+ showGrain?: boolean;
34
+ /** Left-side header text for the contact sheet layout. */
35
+ sheetTitle?: string;
36
+ /** Right-side label text for the contact sheet layout. */
37
+ sheetLabel?: string;
38
+ }
39
+ export declare function FilmReel({ photos, layout, actions, onAction, className, showGrain, sheetTitle, sheetLabel, }: FilmReelProps): import("react/jsx-runtime").JSX.Element;
40
+ //# sourceMappingURL=FilmReel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilmReel.d.ts","sourceRoot":"","sources":["../../src/components/FilmReel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAyBzF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,MAAgB,EAChB,OAAyB,EACzB,QAAQ,EACR,SAAS,EACT,SAAgB,EAChB,UAAU,EACV,UAAU,GACX,EAAE,aAAa,2CAoDf"}
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ export interface HeaderNavItem {
3
+ /** Display label. */
4
+ label: React.ReactNode;
5
+ /** URL or route path. */
6
+ href?: string;
7
+ /** Marks this item as currently active. */
8
+ active?: boolean;
9
+ /** Click handler (for SPA routing or custom behaviour). */
10
+ onClick?: (e: React.MouseEvent) => void;
11
+ }
12
+ export interface HeaderAction {
13
+ /** Unique key. Falls back to index. */
14
+ key?: string;
15
+ /** Icon or element to render. */
16
+ icon: React.ReactNode;
17
+ /** Accessible label for the button. */
18
+ 'aria-label': string;
19
+ /** Click handler. */
20
+ onClick?: (e: React.MouseEvent) => void;
21
+ /** Render as a link instead of a button. */
22
+ href?: string;
23
+ /** Open in new tab (when href is set). */
24
+ external?: boolean;
25
+ }
26
+ export interface HeaderProps {
27
+ /** Brand text, logo element, or both. */
28
+ brand?: React.ReactNode;
29
+ /** Click handler on the brand element (e.g. navigate home). */
30
+ onBrandClick?: (e: React.MouseEvent) => void;
31
+ /** Primary navigation items displayed after the brand. */
32
+ navItems?: HeaderNavItem[];
33
+ /** Action buttons rendered on the right side (e.g. search, theme toggle, login). */
34
+ actions?: HeaderAction[];
35
+ /** Override the link component used for nav items (e.g. React-Router NavLink). */
36
+ linkComponent?: React.ComponentType<{
37
+ href: string;
38
+ className?: string;
39
+ onClick?: (e: React.MouseEvent) => void;
40
+ children: React.ReactNode;
41
+ }>;
42
+ /** Fixed height class. @default 'h-12' */
43
+ height?: string;
44
+ /** Additional class names for the root header element. */
45
+ className?: string;
46
+ /** Content rendered between nav items and actions (e.g. search bar). */
47
+ children?: React.ReactNode;
48
+ }
49
+ export declare function Header({ brand, onBrandClick, navItems, actions, linkComponent: Link, height, className, children, }: HeaderProps): import("react/jsx-runtime").JSX.Element;
50
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,oFAAoF;IACpF,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kFAAkF;IAClF,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAClC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;KAC3B,CAAC,CAAC;IACH,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAwBD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,YAAY,EACZ,QAAa,EACb,OAAY,EACZ,aAAa,EAAE,IAAkB,EACjC,MAAe,EACf,SAAS,EACT,QAAQ,GACT,EAAE,WAAW,2CAkHb"}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ export interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Image source URL. */
4
+ src: string;
5
+ /** Image alt text. */
6
+ alt?: string;
7
+ /** Fixed aspect ratio for the image area. @default '16/9' */
8
+ aspectRatio?: string;
9
+ }
10
+ export interface ImageCardBodyProps extends React.HTMLAttributes<HTMLDivElement> {
11
+ }
12
+ export interface ImageCardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
13
+ }
14
+ export interface ImageCardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
15
+ }
16
+ export interface ImageCardActionsProps extends React.HTMLAttributes<HTMLDivElement> {
17
+ }
18
+ export declare function ImageCard({ src, alt, aspectRatio, className, children, ...props }: ImageCardProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function ImageCardBody({ className, ...props }: ImageCardBodyProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function ImageCardTitle({ className, ...props }: ImageCardTitleProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ImageCardDescription({ className, ...props }: ImageCardDescriptionProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function ImageCardActions({ className, ...props }: ImageCardActionsProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=ImageCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageCard.d.ts","sourceRoot":"","sources":["../../src/components/ImageCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AACnF,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;CAAG;AACxF,MAAM,WAAW,yBAA0B,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;CAAG;AAChG,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAItF,wBAAgB,SAAS,CAAC,EACxB,GAAG,EACH,GAAQ,EACR,WAAoB,EACpB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,2CAgChB;AAID,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,2CAExE;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,2CAO1E;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,2CAItF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,2CAU9E"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { inputVariants } from '../styles/theme';
4
+ type InputVariants = VariantProps<typeof inputVariants>;
5
+ type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> & {
6
+ state?: InputVariants['state'];
7
+ inputSize?: InputVariants['size'];
8
+ /** Icon or label shown at the start of the input with a highlighted background */
9
+ prefix?: React.ReactNode;
10
+ /** Icon shown inside the input at the end (non-interactive decoration) */
11
+ suffix?: React.ReactNode;
12
+ /** Clickable action button rendered at the end of the input */
13
+ action?: {
14
+ icon: React.ReactNode;
15
+ onClick: () => void;
16
+ 'aria-label'?: string;
17
+ };
18
+ };
19
+ export declare function Input({ state, inputSize, className, prefix, suffix, action, ...props }: InputProps): import("react/jsx-runtime").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/components/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAExD,KAAK,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IACvF,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,kFAAkF;IAClF,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAaF,wBAAgB,KAAK,CAAC,EACpB,KAAiB,EACjB,SAAgB,EAChB,SAAS,EACT,MAAM,EACN,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE,UAAU,2CA6DZ"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { labelVariants } from '../styles/theme';
4
+ type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<typeof labelVariants>;
5
+ export declare function Label({ intent, size, className, ...props }: LabelProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=Label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../src/components/Label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,KAAK,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnG,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAEtE"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { listVariants } from '../styles/theme';
4
+ type ListProps = React.HTMLAttributes<HTMLUListElement> & VariantProps<typeof listVariants>;
5
+ export declare function List({ intent, className, ...props }: ListProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ListItem({ className, ...props }: React.LiHTMLAttributes<HTMLLIElement>): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=List.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/components/List.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,KAAK,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAE5F,wBAAgB,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,2CAE9D;AAED,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,2CAEtF"}
@@ -0,0 +1,50 @@
1
+ export interface MiniPlayerTrack {
2
+ /** Display title. */
3
+ title: string;
4
+ /** Artist name. */
5
+ artist?: string;
6
+ /** Album name. */
7
+ album?: string;
8
+ /** URL (http/blob/file) or local path for Electron. */
9
+ src: string;
10
+ /** Album art URL. Omit to show a placeholder. */
11
+ cover?: string;
12
+ /** Duration in seconds (auto-detected if not provided). */
13
+ duration?: number;
14
+ }
15
+ export type MiniPlayerPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
16
+ export type MiniPlayerEntrance = 'bottom' | 'top' | 'left' | 'right';
17
+ export interface MiniPlayerProps {
18
+ /** Playlist of tracks. */
19
+ playlist: MiniPlayerTrack[];
20
+ /** Starting track index. @default 0 */
21
+ initialTrack?: number;
22
+ /** Position on screen. @default 'bottom-right' */
23
+ position?: MiniPlayerPosition;
24
+ /** Entrance animation direction. @default derived from position */
25
+ entrance?: MiniPlayerEntrance;
26
+ /** Theme override. Follows parent by default. */
27
+ theme?: 'dark' | 'light';
28
+ /** When true, player docks to the nearest edge and reveals on hover. @default false */
29
+ docked?: boolean;
30
+ /** When true, player is visible (managed externally or auto-shown on track change). */
31
+ visible?: boolean;
32
+ /** Called when visibility changes internally. */
33
+ onVisibleChange?: (v: boolean) => void;
34
+ /** Called on track change. */
35
+ onTrackChange?: (index: number, track: MiniPlayerTrack) => void;
36
+ /** Called on like toggle. */
37
+ onLike?: (index: number, track: MiniPlayerTrack, liked: boolean) => void;
38
+ /** Auto-play the first track when ready. @default true */
39
+ autoPlay?: boolean;
40
+ /** Initial shuffle state. @default false */
41
+ shuffle?: boolean;
42
+ /** Initial single-track loop state. @default false */
43
+ loop?: boolean;
44
+ /** Accent color (any CSS color value). @default '#8b5cf6' */
45
+ accent?: string;
46
+ /** Extra class name. */
47
+ className?: string;
48
+ }
49
+ export declare function MiniPlayer({ playlist, initialTrack, position, entrance: entranceProp, theme, docked: dockedProp, visible: visibleProp, onVisibleChange, onTrackChange, onLike, autoPlay, shuffle: shuffleProp, loop: loopProp, accent, className, }: MiniPlayerProps): import("react/jsx-runtime").JSX.Element;
50
+ //# sourceMappingURL=MiniPlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniPlayer.d.ts","sourceRoot":"","sources":["../../src/components/MiniPlayer.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,KAAK,GACL,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,8BAA8B;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChE,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuDD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAgB,EAChB,QAAyB,EACzB,QAAQ,EAAE,YAAY,EACtB,KAAK,EACL,MAAM,EAAE,UAAkB,EAC1B,OAAO,EAAE,WAAW,EACpB,eAAe,EACf,aAAa,EACb,MAAM,EACN,QAAe,EACf,OAAO,EAAE,WAAmB,EAC5B,IAAI,EAAE,QAAgB,EACtB,MAAkB,EAClB,SAAS,GACV,EAAE,eAAe,2CAsiBjB"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { panelVariants } from '../styles/theme';
4
+ type PanelProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof panelVariants>;
5
+ export declare function Panel({ intent, size, className, ...props }: PanelProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function PanelHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
7
+ export declare function PanelContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/components/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,KAAK,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAE5F,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAEtE;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAUxF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAIzF"}
@@ -0,0 +1,64 @@
1
+ import React from 'react';
2
+ export type SideNavCollapseMode = 'expanded' | 'icons' | 'mini';
3
+ export interface SideNavItem {
4
+ /** Unique key (falls back to `path` or `label`). */
5
+ key?: string;
6
+ /** Display label. */
7
+ label: string;
8
+ /** Route path — renders a link when provided. */
9
+ path?: string;
10
+ /** Nested children — renders a collapsible group. */
11
+ children?: SideNavItem[];
12
+ /** Icon element shown before the label. */
13
+ icon?: React.ReactNode;
14
+ /** Whether the group is expanded by default (only for items with children). */
15
+ defaultOpen?: boolean;
16
+ }
17
+ /**
18
+ * Props for a custom link component.
19
+ * When using react-router, pass NavLink. When using plain HTML, an `<a>` wrapper.
20
+ */
21
+ export type SideNavLinkComponentProps = {
22
+ to: string;
23
+ className: string | ((props: {
24
+ isActive: boolean;
25
+ }) => string);
26
+ style?: React.CSSProperties;
27
+ children: React.ReactNode;
28
+ };
29
+ export interface SideNavProps extends React.HTMLAttributes<HTMLElement> {
30
+ /** Navigation items (supports nesting). */
31
+ items: SideNavItem[];
32
+ /** Section title rendered above the items. */
33
+ title?: string;
34
+ /** Base path prefix prepended to every item `path`. Defaults to `"/"`. */
35
+ basePath?: string;
36
+ /** When provided, renders buttons instead of links and calls this on click. */
37
+ onItemClick?: (item: SideNavItem, fullPath: string) => void;
38
+ /**
39
+ * Custom link component (e.g. react-router's NavLink).
40
+ * Falls back to a plain `<a>` tag if not provided.
41
+ */
42
+ LinkComponent?: React.ComponentType<SideNavLinkComponentProps>;
43
+ /** Show collapse / expand toggle. */
44
+ collapsible?: boolean;
45
+ /** Controlled collapse mode. */
46
+ collapseMode?: SideNavCollapseMode;
47
+ /** Default collapse mode (uncontrolled). @default 'expanded' */
48
+ defaultCollapseMode?: SideNavCollapseMode;
49
+ /** Fires when collapse mode changes. */
50
+ onCollapseModeChange?: (mode: SideNavCollapseMode) => void;
51
+ /** Show indentation guide lines for nested items. @default true */
52
+ showLines?: boolean;
53
+ /**
54
+ * Controlled set of expanded group keys.
55
+ * Each key is `item.key ?? item.label`.
56
+ */
57
+ expandedKeys?: Set<string>;
58
+ /** Default expanded keys (uncontrolled). When omitted all groups start open. */
59
+ defaultExpandedKeys?: Set<string> | 'all';
60
+ /** Fires when a group is toggled. */
61
+ onExpandedKeysChange?: (keys: Set<string>) => void;
62
+ }
63
+ export declare function SideNav({ items, title, basePath, onItemClick, LinkComponent, collapsible, collapseMode: controlledMode, defaultCollapseMode, onCollapseModeChange, showLines, expandedKeys: controlledExpandedKeys, defaultExpandedKeys, onExpandedKeysChange, className, ...props }: SideNavProps): import("react/jsx-runtime").JSX.Element;
64
+ //# sourceMappingURL=SideNav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNav.d.ts","sourceRoot":"","sources":["../../src/components/SideNav.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAO9E,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,CAAC,CAAC;IAC/D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACrE,2CAA2C;IAC3C,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;IAC/D,qCAAqC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC3D,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IAC1C,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACpD;AAqVD,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,QAAc,EACd,WAAW,EACX,aAA2B,EAC3B,WAAW,EACX,YAAY,EAAE,cAAc,EAC5B,mBAAgC,EAChC,oBAAoB,EACpB,SAAgB,EAChB,YAAY,EAAE,sBAAsB,EACpC,mBAA2B,EAC3B,oBAAoB,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,2CAmHd"}