@indinno/digicode-ui 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +39 -143
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/styles.css +1496 -0
  7. package/dist/ui.d.ts +78 -0
  8. package/dist/ui.d.ts.map +1 -0
  9. package/dist/ui.js +76 -0
  10. package/dist/ui.js.map +1 -0
  11. package/package.json +43 -22
  12. package/LICENSE +0 -21
  13. package/bin/digicode.mjs +0 -136
  14. package/registry/components/accordion.tsx +0 -41
  15. package/registry/components/alert.tsx +0 -21
  16. package/registry/components/avatar.tsx +0 -18
  17. package/registry/components/badge.tsx +0 -9
  18. package/registry/components/breadcrumb.tsx +0 -22
  19. package/registry/components/button.tsx +0 -38
  20. package/registry/components/card.tsx +0 -10
  21. package/registry/components/checkbox.tsx +0 -15
  22. package/registry/components/dialog.tsx +0 -46
  23. package/registry/components/drawer.tsx +0 -42
  24. package/registry/components/dropdown-menu.tsx +0 -38
  25. package/registry/components/empty-state.tsx +0 -20
  26. package/registry/components/input.tsx +0 -28
  27. package/registry/components/pagination.tsx +0 -21
  28. package/registry/components/progress.tsx +0 -17
  29. package/registry/components/radio-group.tsx +0 -40
  30. package/registry/components/select.tsx +0 -33
  31. package/registry/components/separator.tsx +0 -10
  32. package/registry/components/skeleton.tsx +0 -6
  33. package/registry/components/spinner.tsx +0 -11
  34. package/registry/components/stat-card.tsx +0 -21
  35. package/registry/components/switch.tsx +0 -15
  36. package/registry/components/table.tsx +0 -11
  37. package/registry/components/tabs.tsx +0 -52
  38. package/registry/components/textarea.tsx +0 -22
  39. package/registry/components/tooltip.tsx +0 -16
  40. package/registry/lib/cn.ts +0 -3
  41. package/registry/registry.json +0 -32
  42. package/registry/styles/digicode.css +0 -253
package/dist/ui.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, ReactNode, SelectHTMLAttributes, TextareaHTMLAttributes } from "react";
2
+ type ButtonVariant = "dark" | "light" | "text";
3
+ export type CornerStyle = "square" | "subtle" | "rounded" | "pill";
4
+ export type CornerProps = {
5
+ corners?: CornerStyle;
6
+ };
7
+ export type ButtonProps = {
8
+ corners?: CornerStyle;
9
+ label: ReactNode;
10
+ variant?: ButtonVariant;
11
+ arrow?: boolean;
12
+ className?: string;
13
+ };
14
+ export declare function Button({ corners, label, variant, arrow, className, ...props }: ButtonProps & ButtonHTMLAttributes<HTMLButtonElement>): import("react").JSX.Element;
15
+ export declare function ButtonLink({ corners, label, variant, arrow, className, ...props }: ButtonProps & AnchorHTMLAttributes<HTMLAnchorElement>): import("react").JSX.Element;
16
+ export declare function Brand({ compact }: {
17
+ compact?: boolean;
18
+ }): import("react").JSX.Element;
19
+ export declare function SectionHeading({ eyebrow, title, description, aside, centered, }: {
20
+ eyebrow?: string;
21
+ title: ReactNode;
22
+ description?: ReactNode;
23
+ aside?: ReactNode;
24
+ centered?: boolean;
25
+ }): import("react").JSX.Element;
26
+ export type FieldProps = {
27
+ label: string;
28
+ hint?: ReactNode;
29
+ required?: boolean;
30
+ children: ReactNode;
31
+ className?: string;
32
+ };
33
+ export declare function Field({ label, hint, required, children, className }: FieldProps): import("react").JSX.Element;
34
+ export declare function Input({ corners, className, ...props }: InputHTMLAttributes<HTMLInputElement> & CornerProps): import("react").JSX.Element;
35
+ export declare function Textarea({ corners, className, ...props }: TextareaHTMLAttributes<HTMLTextAreaElement> & CornerProps): import("react").JSX.Element;
36
+ export declare function Select({ corners, className, children, ...props }: SelectHTMLAttributes<HTMLSelectElement> & CornerProps): import("react").JSX.Element;
37
+ export type ServiceVisualKind = "automation" | "store" | "logistics" | "analytics" | "ai";
38
+ export declare function ServiceVisual({ kind }: {
39
+ kind: ServiceVisualKind;
40
+ }): import("react").JSX.Element;
41
+ export type ServiceCardProps = {
42
+ eyebrow?: string;
43
+ title: ReactNode;
44
+ description: ReactNode;
45
+ visual?: ServiceVisualKind;
46
+ scope?: string[];
47
+ action?: ReactNode;
48
+ wide?: boolean;
49
+ className?: string;
50
+ };
51
+ export declare function ServiceCard({ eyebrow, title, description, visual, scope, action, wide, className, }: ServiceCardProps): import("react").JSX.Element;
52
+ export type ProductPreviewKind = "tasks" | "inventory" | "school";
53
+ export declare function ProductPreview({ kind, large, }: {
54
+ kind: ProductPreviewKind;
55
+ large?: boolean;
56
+ }): import("react").JSX.Element;
57
+ export type ProductCardProps = {
58
+ category?: string;
59
+ title: ReactNode;
60
+ description: ReactNode;
61
+ preview?: ProductPreviewKind;
62
+ features?: string[];
63
+ footer?: ReactNode;
64
+ action?: ReactNode;
65
+ onPreview?: () => void;
66
+ className?: string;
67
+ };
68
+ export declare function ProductCard({ category, title, description, preview, features, footer, action, onPreview, className, }: ProductCardProps): import("react").JSX.Element;
69
+ export declare const digicodeIcons: {
70
+ sheet: import("lucide-react").LucideIcon;
71
+ shop: import("lucide-react").LucideIcon;
72
+ code: import("lucide-react").LucideIcon;
73
+ truck: import("lucide-react").LucideIcon;
74
+ chart: import("lucide-react").LucideIcon;
75
+ sparkles: import("lucide-react").LucideIcon;
76
+ };
77
+ export {};
78
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/library/ui.tsx"],"names":[],"mappings":"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"}
package/dist/ui.js ADDED
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { ArrowUpRight, BarChart3, Braces, Check, CheckCheck, ChevronRight, CodeXml, FileCheck2, FileText, GraduationCap, LayoutGrid, Mail, MoreHorizontal, Package, Plus, Search, Send, ShoppingBag, Sparkles, Table2, Truck, Users, Workflow, Zap, } from "lucide-react";
3
+ function Label({ label, arrow }) {
4
+ return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "dc-button-label", children: [_jsx("span", { children: label }), _jsx("span", { "aria-hidden": "true", children: label })] }), arrow && _jsx(ArrowUpRight, { size: 17, "aria-hidden": "true" })] }));
5
+ }
6
+ export function Button({ corners = "subtle", label, variant = "dark", arrow = false, className = "", ...props }) {
7
+ return (_jsx("button", { "data-corners": corners, className: `dc-button dc-button--${variant} ${className}`, ...props, children: _jsx(Label, { label: label, arrow: arrow }) }));
8
+ }
9
+ export function ButtonLink({ corners = "subtle", label, variant = "dark", arrow = false, className = "", ...props }) {
10
+ return (_jsx("a", { "data-corners": corners, className: `dc-button dc-button--${variant} ${className}`, ...props, children: _jsx(Label, { label: label, arrow: arrow }) }));
11
+ }
12
+ export function Brand({ compact = false }) {
13
+ return (_jsxs("span", { className: `dc-brand ${compact ? "dc-brand--compact" : ""}`, children: [_jsx("span", { className: "dc-brand-mark", children: _jsx(CodeXml, { "aria-hidden": "true", strokeWidth: 2.6 }) }), _jsxs("span", { className: "dc-brand-type", children: ["DigiCode", _jsx("span", { className: "dc-brand-subtitle", children: "SOLUTIONS" })] })] }));
14
+ }
15
+ export function SectionHeading({ eyebrow, title, description, aside, centered = false, }) {
16
+ return (_jsxs("div", { className: `dc-section-heading ${centered ? "dc-section-heading--center" : ""}`, children: [_jsxs("div", { children: [eyebrow && (_jsxs("p", { className: "dc-eyebrow", children: [_jsx("span", {}), eyebrow] })), _jsx("h2", { children: title }), description && _jsx("p", { className: "dc-section-description", children: description })] }), aside && _jsx("div", { className: "dc-section-heading-aside", children: aside })] }));
17
+ }
18
+ export function Field({ label, hint, required, children, className = "" }) {
19
+ return (_jsxs("label", { className: `dc-field ${className}`, children: [_jsxs("span", { className: "dc-field-label", children: [label, required && _jsx("span", { "aria-hidden": "true", children: "*" })] }), children, hint && _jsx("span", { className: "dc-field-hint", children: hint })] }));
20
+ }
21
+ export function Input({ corners = "subtle", className = "", ...props }) {
22
+ return _jsx("input", { "data-corners": corners, className: `dc-input ${className}`, ...props });
23
+ }
24
+ export function Textarea({ corners = "subtle", className = "", ...props }) {
25
+ return _jsx("textarea", { "data-corners": corners, className: `dc-input dc-textarea ${className}`, ...props });
26
+ }
27
+ export function Select({ corners = "subtle", className = "", children, ...props }) {
28
+ return (_jsx("select", { "data-corners": corners, className: `dc-input dc-select ${className}`, ...props, children: children }));
29
+ }
30
+ export function ServiceVisual({ kind }) {
31
+ if (kind === "automation") {
32
+ return (_jsxs("div", { className: "dc-service-visual dc-automation-visual", "aria-hidden": "true", children: [_jsx("div", { className: "dc-visual-grid" }), _jsxs("div", { className: "dc-workflow-node", children: [_jsx("span", { className: "dc-app-icon dc-app-icon--green", children: _jsx(Table2, {}) }), _jsxs("div", { children: [_jsx("b", { children: "New row in Google Sheets" }), _jsx("small", { children: "When a new order arrives" })] }), _jsx(Check, { size: 15 })] }), _jsxs("div", { className: "dc-workflow-connector", children: [_jsx("span", {}), _jsx(Zap, { size: 13 }), _jsx("span", {})] }), _jsxs("div", { className: "dc-workflow-node", children: [_jsx("span", { className: "dc-app-icon dc-app-icon--blue", children: _jsx(Workflow, {}) }), _jsxs("div", { children: [_jsx("b", { children: "A little automation magic" }), _jsx("small", { children: "Process, organize, and update" })] }), _jsx(Check, { size: 15 })] }), _jsxs("div", { className: "dc-workflow-branch", children: [_jsx("span", {}), _jsx("span", {})] }), _jsxs("div", { className: "dc-workflow-outputs", children: [_jsxs("span", { children: [_jsx(Mail, { size: 17 }), "Send an email"] }), _jsxs("span", { children: [_jsx(Send, { size: 17 }), "Notify your team"] })] }), _jsxs("span", { className: "dc-automation-toast", children: [_jsx("span", { children: _jsx(CheckCheck, { size: 15 }) }), "Workflow completed. Time saved."] })] }));
33
+ }
34
+ if (kind === "store") {
35
+ return (_jsxs("div", { className: "dc-service-visual dc-store-visual", "aria-hidden": "true", children: [_jsxs("div", { className: "dc-store-browser", children: [_jsxs("div", { className: "dc-browser-bar", children: [_jsxs("span", { children: [_jsx("i", {}), _jsx("i", {}), _jsx("i", {})] }), _jsx("small", { children: "yourbrand.com" }), _jsx(CodeXml, { size: 11 })] }), _jsxs("div", { className: "dc-store-nav", children: [_jsx("b", { children: "the daily." }), _jsxs("span", { children: ["Shop \u00A0 Our story \u00A0 ", _jsx(ShoppingBag, { size: 11 })] })] }), _jsxs("div", { className: "dc-store-content", children: [_jsxs("div", { children: [_jsx("small", { children: "A BETTER EVERYDAY" }), _jsxs("strong", { children: ["Good mornings", _jsx("br", {}), "start here."] }), _jsxs("p", { children: ["Thoughtfully sourced.", _jsx("br", {}), "Beautifully brewed."] }), _jsxs("span", { className: "dc-store-cta", children: ["Find your favorite ", _jsx(ArrowUpRight, { size: 10 })] })] }), _jsx("span", { className: "dc-store-photo" })] }), _jsxs("div", { className: "dc-store-bottom", children: [_jsx("span", { children: "Made with care." }), _jsx("span", { children: "Delivered to your door." })] })] }), _jsxs("div", { className: "dc-store-notification", children: [_jsx("span", { className: "dc-app-icon dc-app-icon--green", children: _jsx(ShoppingBag, { size: 19 }) }), _jsxs("div", { children: [_jsx("b", { children: "Your next chapter, online." }), _jsx("small", { children: "Websites & Shopify development" })] }), _jsx(Sparkles, { size: 14 })] })] }));
36
+ }
37
+ if (kind === "logistics") {
38
+ return (_jsx("div", { className: "dc-service-visual dc-logistics-visual", "aria-hidden": "true", children: _jsxs("div", { className: "dc-dispatch-card", children: [_jsxs("div", { className: "dc-mini-panel-heading", children: [_jsx("b", { children: "Order #DG-1024" }), _jsx("span", { className: "dc-status-pill", children: "On the move" })] }), _jsx("div", { className: "dc-delivery-line", children: [Package, Truck, Check].map((Component, index) => (_jsx("span", { className: index < 2 ? "done" : "", children: _jsx(Component, { size: 19 }) }, index))) }), _jsxs("div", { className: "dc-delivery-labels", children: [_jsx("span", { children: "Confirmed" }), _jsx("span", { children: "Dispatched" }), _jsx("span", { children: "Delivered" })] }), _jsxs("div", { className: "dc-dispatch-detail", children: [_jsxs("span", { children: [_jsx(Package, { size: 16 }), "All your orders. One place."] }), _jsx(ArrowUpRight, { size: 13 })] })] }) }));
39
+ }
40
+ if (kind === "analytics") {
41
+ return (_jsx("div", { className: "dc-service-visual dc-analytics-visual", "aria-hidden": "true", children: _jsxs("div", { className: "dc-report-card", children: [_jsxs("div", { className: "dc-mini-panel-heading", children: [_jsx("b", { children: "Weekly overview" }), _jsx("span", { children: "Last 7 days" })] }), _jsxs("div", { className: "dc-report-total", children: [_jsx("strong", { children: "128" }), _jsx("span", { children: "tasks completed" }), _jsx("small", { children: "+12 this week" })] }), _jsx("div", { className: "dc-report-bars", children: [42, 66, 51, 82, 62, 95, 76].map((height, index) => (_jsx("span", { style: { height: `${height}%` } }, index))) }), _jsx("div", { className: "dc-report-days", children: "MTWTFSS".split("").map((day, index) => (_jsx("span", { children: day }, index))) })] }) }));
42
+ }
43
+ return (_jsxs("div", { className: "dc-service-visual dc-ai-visual", "aria-hidden": "true", children: [_jsx("div", { className: "dc-visual-grid" }), _jsxs("div", { className: "dc-ai-path", children: [_jsx("span", { children: _jsx(FileText, { size: 27 }) }), _jsx("i", {}), _jsx("span", { className: "dc-ai-center", children: _jsx(Sparkles, { size: 30 }) }), _jsx("i", {}), _jsx("span", { children: _jsx(Table2, { size: 27 }) })] }), _jsxs("div", { className: "dc-extracted-card", children: [_jsxs("div", { children: [_jsx(FileCheck2, { size: 16 }), _jsx("b", { children: "Order data extracted" }), _jsx("span", { className: "dc-status-dot" })] }), _jsxs("p", { children: [_jsx("span", { children: "Customer" }), _jsx("span", { children: "Order details" }), _jsxs("span", { children: ["Ready to sync ", _jsx(Check, { size: 11 })] })] })] })] }));
44
+ }
45
+ export function ServiceCard({ eyebrow, title, description, visual = "automation", scope = [], action, wide = false, className = "", }) {
46
+ return (_jsxs("article", { className: `dc-service-card ${wide ? "dc-service-card--wide" : ""} ${className}`, children: [_jsx(ServiceVisual, { kind: visual }), _jsxs("div", { className: "dc-service-card-content", children: [eyebrow && _jsx("span", { className: "dc-card-eyebrow", children: eyebrow }), _jsx("h3", { children: title }), _jsx("p", { children: description }), scope.length > 0 && (_jsx("ul", { className: "dc-service-scope", children: scope.map((item) => (_jsxs("li", { children: [_jsx(Check, { size: 15, "aria-hidden": "true" }), item] }, item))) })), action] })] }));
47
+ }
48
+ export function ProductPreview({ kind, large = false, }) {
49
+ return (_jsxs("div", { className: `dc-product-preview dc-product-preview--${kind} ${large ? "dc-product-preview--large" : ""}`, "aria-label": `Illustrative ${kind} interface with sample data`, role: "img", children: [_jsx("div", { className: "dc-product-preview-grid" }), _jsxs("div", { className: "dc-preview-window", children: [_jsxs("div", { className: "dc-preview-toolbar", children: [_jsxs("span", { children: [_jsx("i", {}), _jsx("i", {}), _jsx("i", {})] }), _jsx("small", { children: kind === "tasks"
50
+ ? "My workspace"
51
+ : kind === "inventory"
52
+ ? "Order workspace"
53
+ : "School workspace" }), _jsx(MoreHorizontal, { size: 14 })] }), kind === "tasks" ? _jsx(TaskPreview, {}) : kind === "inventory" ? _jsx(InventoryPreview, {}) : _jsx(SchoolPreview, {})] })] }));
54
+ }
55
+ function TaskPreview() {
56
+ return (_jsxs("div", { className: "dc-task-preview-content", children: [_jsxs("div", { className: "dc-preview-heading", children: [_jsx("b", { children: "Your work, in flow." }), _jsxs("span", { children: [_jsx(Plus, { size: 10 }), "New task"] })] }), _jsxs("div", { className: "dc-preview-tabs", children: [_jsxs("b", { children: ["All tasks ", _jsx("small", { children: "12" })] }), _jsx("span", { children: "My tasks" }), _jsx("span", { children: "Reports" })] }), ["Review weekly sales report", "Follow up on pending orders", "Update product inventory"].map((label, index) => (_jsxs("div", { className: "dc-preview-task", children: [_jsx("span", { className: `dc-task-check ${index === 0 ? "checked" : ""}`, children: index === 0 && _jsx(Check, { size: 9 }) }), _jsxs("span", { children: [label, _jsx("small", { children: ["Reporting", "Operations", "Inventory"][index] })] }), _jsx("span", { className: `dc-preview-avatar dc-avatar-${index}`, children: ["RK", "AJ", "SK"][index] })] }, label))), _jsxs("div", { className: "dc-preview-summary", children: [_jsxs("span", { children: [_jsx("i", {}), "Everything has its place."] }), _jsx(ChevronRight, { size: 11 })] })] }));
57
+ }
58
+ function InventoryPreview() {
59
+ return (_jsxs("div", { className: "dc-inventory-preview-content", children: [_jsxs("div", { className: "dc-preview-heading", children: [_jsx("b", { children: "Orders & inventory" }), _jsx(Search, { size: 13 })] }), _jsxs("div", { className: "dc-inventory-counts", children: [_jsxs("span", { children: [_jsx(Package, { size: 13 }), _jsx("small", { children: "Orders" }), _jsx("b", { children: "128" })] }), _jsxs("span", { children: [_jsx(Truck, { size: 13 }), _jsx("small", { children: "In transit" }), _jsx("b", { children: "24" })] }), _jsxs("span", { children: [_jsx(Check, { size: 13 }), _jsx("small", { children: "Delivered" }), _jsx("b", { children: "104" })] })] }), _jsx("div", { className: "dc-order-list", children: ["DG-1024", "DG-1023", "DG-1022"].map((id, index) => (_jsxs("div", { children: [_jsx("span", { className: "dc-order-box", children: _jsx(Package, { size: 13 }) }), _jsxs("b", { children: ["#", id] }), _jsx("span", { className: `dc-order-status dc-order-status-${index}`, children: ["Dispatched", "Processing", "Delivered"][index] }), _jsx(ChevronRight, { size: 10 })] }, id))) })] }));
60
+ }
61
+ function SchoolPreview() {
62
+ return (_jsxs("div", { className: "dc-school-preview-content", children: [_jsxs("div", { className: "dc-school-preview-sidebar", children: [_jsx(GraduationCap, { size: 20 }), _jsx(LayoutGrid, { size: 13 }), _jsx(Users, { size: 13 }), _jsx(Package, { size: 13 })] }), _jsxs("div", { className: "dc-school-preview-main", children: [_jsxs("div", { className: "dc-preview-heading", children: [_jsx("b", { children: "A good day to learn." }), _jsx("span", { className: "dc-preview-avatar", children: "AK" })] }), _jsxs("div", { className: "dc-school-stat", children: [_jsx("span", { children: _jsx(Users, { size: 18 }) }), _jsxs("div", { children: [_jsx("small", { children: "Today's attendance" }), _jsxs("b", { children: ["28 ", _jsx("em", { children: "/ 30 students" })] })] }), _jsx("strong", { children: "93%" })] }), _jsx("b", { className: "dc-class-title", children: "Your classroom" }), ["Attendance & daily care", "Learning & activities", "Student observations"].map((label, index) => (_jsxs("div", { className: "dc-class-row", children: [_jsx("span", { className: `dc-class-dot dc-class-dot-${index}` }), _jsx("span", { children: label }), _jsx(ChevronRight, { size: 10 })] }, label)))] })] }));
63
+ }
64
+ export function ProductCard({ category, title, description, preview = "tasks", features = [], footer, action, onPreview, className = "", }) {
65
+ const previewElement = _jsx(ProductPreview, { kind: preview });
66
+ return (_jsxs("article", { className: `dc-product-card ${className}`, children: [onPreview ? (_jsxs("button", { className: "dc-product-preview-trigger", onClick: onPreview, "aria-label": "View product preview", children: [previewElement, _jsx("span", { className: "dc-preview-open", children: _jsx(ArrowUpRight, { size: 18 }) })] })) : (_jsxs("div", { className: "dc-product-preview-trigger", children: [previewElement, _jsx("span", { className: "dc-preview-open", children: _jsx(ArrowUpRight, { size: 18 }) })] })), _jsxs("div", { className: "dc-product-card-body", children: [category && _jsx("span", { className: "dc-product-category", children: category }), _jsx("h3", { children: title }), _jsx("p", { children: description }), features.length > 0 && (_jsx("ul", { className: "dc-feature-list", children: features.map((feature) => (_jsxs("li", { children: [_jsx(Check, { size: 15 }), feature] }, feature))) })), (footer || action) && (_jsxs("div", { className: "dc-product-card-bottom", children: [footer && _jsx("span", { children: footer }), action] }))] })] }));
67
+ }
68
+ export const digicodeIcons = {
69
+ sheet: Table2,
70
+ shop: ShoppingBag,
71
+ code: Braces,
72
+ truck: Truck,
73
+ chart: BarChart3,
74
+ sparkles: Sparkles,
75
+ };
76
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/library/ui.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,31 +1,52 @@
1
1
  {
2
2
  "name": "@indinno/digicode-ui",
3
- "version": "0.1.0",
4
- "description": "DigiCode shadcn-style source-owned React UI primitives for reusable product interfaces.",
3
+ "repository": { "type": "git", "url": "git+https://github.com/misindinno/digicode-ui.git" },
4
+ "publishConfig": { "access": "public" },
5
+ "version": "0.1.1",
6
+ "description": "Reusable DigiCode Solutions React UI components, cards, inputs, and animated controls.",
7
+ "private": false,
5
8
  "type": "module",
6
- "license": "MIT",
7
- "bin": {
8
- "digicode": "./bin/digicode.mjs"
9
- },
10
- "files": [
11
- "bin",
12
- "registry",
13
- "README.md",
14
- "LICENSE"
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "sideEffects": [
12
+ "./dist/styles.css",
13
+ "./src/library/styles.css"
15
14
  ],
16
- "keywords": [
17
- "react",
18
- "nextjs",
19
- "ui",
20
- "components",
21
- "design-system",
22
- "shadcn",
23
- "cli"
15
+ "files": [
16
+ "dist",
17
+ "README.md"
24
18
  ],
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ },
24
+ "./styles.css": "./dist/styles.css"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.build.json && node scripts/copy-library-assets.mjs",
28
+ "typecheck": "tsc -p tsconfig.build.json --noEmit",
29
+ "preview": "vite --host 127.0.0.1",
30
+ "prepublishOnly": "npm run build",
31
+ "pack:check": "npm pack --dry-run"
32
+ },
25
33
  "engines": {
26
- "node": ">=18"
34
+ "node": ">=20.9.0"
35
+ },
36
+ "peerDependencies": {
37
+ "lucide-react": ">=0.468.0 || >=1.0.0",
38
+ "react": ">=18.2.0 || >=19.0.0",
39
+ "react-dom": ">=18.2.0 || >=19.0.0"
27
40
  },
28
- "publishConfig": {
29
- "access": "public"
41
+ "devDependencies": {
42
+ "@types/node": "26.6.2",
43
+ "@types/react": "19.3.0",
44
+ "@types/react-dom": "19.3.0",
45
+ "lucide-react": "1.47.0",
46
+ "prettier": "3.9.8",
47
+ "react": "19.3.0",
48
+ "react-dom": "19.3.0",
49
+ "typescript": "6.0.3",
50
+ "vite": "7.1.7"
30
51
  }
31
52
  }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 DigiCode
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
package/bin/digicode.mjs DELETED
@@ -1,136 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import path from "node:path";
4
- import { fileURLToPath } from "node:url";
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
- const packageRoot = path.resolve(__dirname, "..");
9
- const registryRoot = path.join(packageRoot, "registry");
10
- const manifest = JSON.parse(fs.readFileSync(path.join(registryRoot, "registry.json"), "utf8"));
11
- const args = process.argv.slice(2);
12
- const command = args[0];
13
- const requested = args.slice(1);
14
- const cwd = process.cwd();
15
-
16
- function fail(message) {
17
- console.error(`\nDigiCode: ${message}\n`);
18
- process.exit(1);
19
- }
20
-
21
- function detectSourceRoot() {
22
- if (fs.existsSync(path.join(cwd, "src"))) return path.join(cwd, "src");
23
- return cwd;
24
- }
25
-
26
- function paths() {
27
- const sourceRoot = detectSourceRoot();
28
- return {
29
- sourceRoot,
30
- componentsDir: path.join(sourceRoot, "components", "ui"),
31
- libDir: path.join(sourceRoot, "lib"),
32
- stylesDir: path.join(sourceRoot, "styles"),
33
- configFile: path.join(cwd, "digicode.json")
34
- };
35
- }
36
-
37
- function ensureDir(dir) {
38
- fs.mkdirSync(dir, { recursive: true });
39
- }
40
-
41
- function copyIfMissing(source, destination, force = false) {
42
- ensureDir(path.dirname(destination));
43
- if (fs.existsSync(destination) && !force) return false;
44
- fs.copyFileSync(source, destination);
45
- return true;
46
- }
47
-
48
- function init() {
49
- const p = paths();
50
- ensureDir(p.componentsDir);
51
- ensureDir(p.libDir);
52
- ensureDir(p.stylesDir);
53
-
54
- copyIfMissing(path.join(registryRoot, "lib", "cn.ts"), path.join(p.libDir, "cn.ts"));
55
- copyIfMissing(path.join(registryRoot, "styles", "digicode.css"), path.join(p.stylesDir, "digicode.css"));
56
-
57
- if (!fs.existsSync(p.configFile)) {
58
- fs.writeFileSync(
59
- p.configFile,
60
- JSON.stringify(
61
- {
62
- sourceRoot: path.relative(cwd, p.sourceRoot) || ".",
63
- components: path.relative(cwd, p.componentsDir),
64
- styles: path.relative(cwd, path.join(p.stylesDir, "digicode.css")),
65
- style: manifest.style
66
- },
67
- null,
68
- 2
69
- ) + "\n"
70
- );
71
- }
72
-
73
- console.log("\nDigiCode initialized.");
74
- console.log(`Components: ${path.relative(cwd, p.componentsDir)}`);
75
- console.log(`Styles: ${path.relative(cwd, path.join(p.stylesDir, "digicode.css"))}`);
76
- console.log("\nImport the stylesheet once in your root layout/main entry.");
77
- if (p.sourceRoot.endsWith(`${path.sep}src`)) {
78
- console.log('For Next.js src/app/layout.tsx: import "../styles/digicode.css";');
79
- } else {
80
- console.log('For app/layout.tsx: import "../styles/digicode.css";');
81
- }
82
- }
83
-
84
- function add(names) {
85
- if (!names.length) fail(`Specify components, for example: digicode add button input card`);
86
- init();
87
-
88
- const p = paths();
89
- const targets = names.includes("all") ? manifest.components : names;
90
- const unknown = targets.filter((name) => !manifest.components.includes(name));
91
- if (unknown.length) fail(`Unknown component${unknown.length > 1 ? "s" : ""}: ${unknown.join(", ")}`);
92
-
93
- let copied = 0;
94
- for (const name of targets) {
95
- const source = path.join(registryRoot, "components", `${name}.tsx`);
96
- const destination = path.join(p.componentsDir, `${name}.tsx`);
97
- if (copyIfMissing(source, destination)) {
98
- console.log(`+ ${path.relative(cwd, destination)}`);
99
- copied++;
100
- } else {
101
- console.log(`= ${path.relative(cwd, destination)} (already exists)`);
102
- }
103
- }
104
-
105
- console.log(`\n${copied} component${copied === 1 ? "" : "s"} added.`);
106
- }
107
-
108
- function list() {
109
- console.log("\nAvailable DigiCode components:\n");
110
- for (const name of manifest.components) console.log(` - ${name}`);
111
- console.log("");
112
- }
113
-
114
- function help() {
115
- console.log(`\nDigiCode CLI\n\nUsage:\n digicode init\n digicode add button input card\n digicode add all\n digicode list\n\nWith npx after publishing:\n npx @indinno/digicode-ui init\n npx @indinno/digicode-ui add button input card\n`);
116
- }
117
-
118
- switch (command) {
119
- case "init":
120
- init();
121
- break;
122
- case "add":
123
- add(requested);
124
- break;
125
- case "list":
126
- list();
127
- break;
128
- case undefined:
129
- case "help":
130
- case "--help":
131
- case "-h":
132
- help();
133
- break;
134
- default:
135
- fail(`Unknown command: ${command}`);
136
- }
@@ -1,41 +0,0 @@
1
- "use client";
2
-
3
- import { useState, type ReactNode } from "react";
4
-
5
- export interface AccordionItem {
6
- value: string;
7
- title: ReactNode;
8
- content: ReactNode;
9
- }
10
-
11
- export interface AccordionProps {
12
- items: AccordionItem[];
13
- defaultValue?: string;
14
- allowCollapse?: boolean;
15
- className?: string;
16
- }
17
-
18
- export function Accordion({ items, defaultValue, allowCollapse = true, className }: AccordionProps) {
19
- const [open, setOpen] = useState(defaultValue ?? "");
20
- return (
21
- <div className={className ? `digicode-accordion ${className}` : "digicode-accordion"}>
22
- {items.map((item) => {
23
- const expanded = open === item.value;
24
- return (
25
- <div className="digicode-accordion__item" key={item.value}>
26
- <button
27
- type="button"
28
- className="digicode-accordion__trigger"
29
- aria-expanded={expanded}
30
- onClick={() => setOpen(expanded && allowCollapse ? "" : item.value)}
31
- >
32
- <span>{item.title}</span>
33
- <span className="digicode-accordion__chevron" aria-hidden="true">⌄</span>
34
- </button>
35
- {expanded && <div className="digicode-accordion__content">{item.content}</div>}
36
- </div>
37
- );
38
- })}
39
- </div>
40
- );
41
- }
@@ -1,21 +0,0 @@
1
- import type { HTMLAttributes, ReactNode } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export type AlertVariant = "default" | "info" | "success" | "warning" | "danger";
5
- export interface AlertProps extends HTMLAttributes<HTMLDivElement> {
6
- variant?: AlertVariant;
7
- icon?: ReactNode;
8
- title?: string;
9
- }
10
-
11
- export function Alert({ className, variant = "default", icon, title, children, ...props }: AlertProps) {
12
- return (
13
- <div role="alert" className={cn("digicode-alert", variant !== "default" && `digicode-alert--${variant}`, className)} {...props}>
14
- {icon && <span className="digicode-alert__icon">{icon}</span>}
15
- <div>
16
- {title && <p className="digicode-alert__title">{title}</p>}
17
- <div className="digicode-alert__description">{children}</div>
18
- </div>
19
- </div>
20
- );
21
- }
@@ -1,18 +0,0 @@
1
- import type { HTMLAttributes, ImgHTMLAttributes } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
5
- src?: string;
6
- alt?: string;
7
- fallback?: string;
8
- size?: "sm" | "md" | "lg";
9
- imageProps?: ImgHTMLAttributes<HTMLImageElement>;
10
- }
11
-
12
- export function Avatar({ className, src, alt = "", fallback = "?", size = "md", imageProps, ...props }: AvatarProps) {
13
- return (
14
- <span className={cn("digicode-avatar", `digicode-avatar--${size}`, className)} {...props}>
15
- {src ? <img src={src} alt={alt} {...imageProps} /> : fallback}
16
- </span>
17
- );
18
- }
@@ -1,9 +0,0 @@
1
- import type { HTMLAttributes } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export type BadgeVariant = "default" | "primary" | "success" | "warning" | "danger";
5
- export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> { variant?: BadgeVariant; }
6
-
7
- export function Badge({ className, variant = "default", ...props }: BadgeProps) {
8
- return <span className={cn("digicode-badge", variant !== "default" && `digicode-badge--${variant}`, className)} {...props} />;
9
- }
@@ -1,22 +0,0 @@
1
- import type { ReactNode } from "react";
2
-
3
- export interface BreadcrumbItem {
4
- label: ReactNode;
5
- href?: string;
6
- }
7
-
8
- export function Breadcrumb({ items, separator = "/", className }: { items: BreadcrumbItem[]; separator?: ReactNode; className?: string }) {
9
- return (
10
- <nav aria-label="Breadcrumb" className={className ? `digicode-breadcrumb ${className}` : "digicode-breadcrumb"}>
11
- {items.map((item, index) => {
12
- const current = index === items.length - 1;
13
- return (
14
- <span key={index} style={{ display: "contents" }}>
15
- {current ? <span className="digicode-breadcrumb__current" aria-current="page">{item.label}</span> : item.href ? <a href={item.href}>{item.label}</a> : <span>{item.label}</span>}
16
- {!current && <span className="digicode-breadcrumb__sep" aria-hidden="true">{separator}</span>}
17
- </span>
18
- );
19
- })}
20
- </nav>
21
- );
22
- }
@@ -1,38 +0,0 @@
1
- import type { ButtonHTMLAttributes, ReactNode } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export type ButtonVariant = "primary" | "secondary" | "outline" | "ghost" | "destructive" | "link";
5
- export type ButtonSize = "sm" | "md" | "lg" | "icon";
6
-
7
- export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
8
- variant?: ButtonVariant;
9
- size?: ButtonSize;
10
- loading?: boolean;
11
- leftIcon?: ReactNode;
12
- rightIcon?: ReactNode;
13
- }
14
-
15
- export function Button({
16
- className,
17
- variant = "primary",
18
- size = "md",
19
- loading = false,
20
- leftIcon,
21
- rightIcon,
22
- disabled,
23
- children,
24
- ...props
25
- }: ButtonProps) {
26
- return (
27
- <button
28
- className={cn("digicode-button", `digicode-button--${variant}`, size !== "md" && `digicode-button--${size}`, className)}
29
- disabled={disabled || loading}
30
- aria-busy={loading || undefined}
31
- {...props}
32
- >
33
- {loading ? <span className="digicode-button__spinner" aria-hidden="true" /> : leftIcon}
34
- {children}
35
- {!loading && rightIcon}
36
- </button>
37
- );
38
- }
@@ -1,10 +0,0 @@
1
- import type { HTMLAttributes } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export interface CardProps extends HTMLAttributes<HTMLDivElement> { elevated?: boolean; }
5
- export function Card({ className, elevated = false, ...props }: CardProps) { return <div className={cn("digicode-card", elevated && "digicode-card--elevated", className)} {...props} />; }
6
- export function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) { return <div className={cn("digicode-card__header", className)} {...props} />; }
7
- export function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) { return <h3 className={cn("digicode-card__title", className)} {...props} />; }
8
- export function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) { return <p className={cn("digicode-card__description", className)} {...props} />; }
9
- export function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) { return <div className={cn("digicode-card__content", className)} {...props} />; }
10
- export function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) { return <div className={cn("digicode-card__footer", className)} {...props} />; }
@@ -1,15 +0,0 @@
1
- import { forwardRef, type InputHTMLAttributes, type ReactNode } from "react";
2
- import { cn } from "../../lib/cn";
3
-
4
- export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
5
- label?: ReactNode;
6
- }
7
-
8
- export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox({ className, label, ...props }, ref) {
9
- return (
10
- <label className="digicode-checkline">
11
- <input ref={ref} type="checkbox" className={cn("digicode-checkbox", className)} {...props} />
12
- {label && <span>{label}</span>}
13
- </label>
14
- );
15
- });