@cloudflare/kumo 1.5.0 → 1.5.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 (41) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/ai/component-registry.json +10 -4
  3. package/ai/component-registry.md +87 -35
  4. package/ai/schemas.ts +1 -0
  5. package/bin/kumo.js +23 -19
  6. package/dist/.build-complete +1 -1
  7. package/dist/ai/schemas.d.ts +2147 -0
  8. package/dist/ai/schemas.d.ts.map +1 -0
  9. package/dist/catalog.js +1 -1
  10. package/dist/{clipboard-text-CqueQiB8.js → clipboard-text-B32_yb2r.js} +9 -9
  11. package/dist/clipboard-text-B32_yb2r.js.map +1 -0
  12. package/dist/command-line/cli.js +16 -17
  13. package/dist/command-line/commands/ai.js +2 -3
  14. package/dist/components/clipboard-text.js +1 -1
  15. package/dist/components/pagination.js +1 -1
  16. package/dist/components/table.js +1 -1
  17. package/dist/index.js +40 -29
  18. package/dist/index.js.map +1 -1
  19. package/dist/{pagination-Bm8eMWpj.js → pagination-Cf-yRO-n.js} +20 -19
  20. package/dist/pagination-Cf-yRO-n.js.map +1 -0
  21. package/dist/{schemas-B-D2OT-O.js → schemas-H10xB2M_.js} +4 -2
  22. package/dist/{schemas-B-D2OT-O.js.map → schemas-H10xB2M_.js.map} +1 -1
  23. package/dist/src/blocks/delete-resource/delete-resource.d.ts.map +1 -1
  24. package/dist/src/blocks/delete-resource/delete-resource.tsx +213 -0
  25. package/dist/src/blocks/page-header/page-header.tsx +99 -0
  26. package/dist/src/blocks/resource-list/resource-list.test.tsx +28 -0
  27. package/dist/src/blocks/resource-list/resource-list.tsx +69 -0
  28. package/dist/src/command-line/commands/ai.d.ts.map +1 -1
  29. package/dist/src/components/pagination/pagination.d.ts +8 -1
  30. package/dist/src/components/pagination/pagination.d.ts.map +1 -1
  31. package/dist/src/components/table/table.d.ts +2 -0
  32. package/dist/src/components/table/table.d.ts.map +1 -1
  33. package/dist/styles/kumo-standalone.css +1 -1
  34. package/dist/table-DtUrZ2Rj.js +149 -0
  35. package/dist/table-DtUrZ2Rj.js.map +1 -0
  36. package/package.json +1 -1
  37. package/scripts/css-build.ts +47 -1
  38. package/dist/clipboard-text-CqueQiB8.js.map +0 -1
  39. package/dist/pagination-Bm8eMWpj.js.map +0 -1
  40. package/dist/table-BUmvaBj8.js +0 -153
  41. package/dist/table-BUmvaBj8.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination-Bm8eMWpj.js","sources":["../src/components/pagination/pagination.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { InputGroup } from \"../input\";\nimport {\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretLeftIcon,\n CaretRightIcon,\n} from \"@phosphor-icons/react\";\nimport { cn } from \"../../utils/cn\";\n\n/** Pagination controls variant definitions. */\nexport const KUMO_PAGINATION_VARIANTS = {\n controls: {\n full: {\n classes: \"\",\n description:\n \"Full pagination controls with first, previous, page input, next, and last buttons\",\n },\n simple: {\n classes: \"\",\n description:\n \"Simple pagination controls with only previous and next buttons\",\n },\n },\n} as const;\n\nexport type KumoPaginationControls =\n keyof typeof KUMO_PAGINATION_VARIANTS.controls;\n\nexport const KUMO_PAGINATION_DEFAULT_VARIANTS = {\n controls: \"full\",\n} as const;\n\nexport interface KumoPaginationVariantsProps {\n controls?: KumoPaginationControls;\n}\n\nexport function paginationVariants({\n controls = KUMO_PAGINATION_DEFAULT_VARIANTS.controls,\n}: KumoPaginationVariantsProps = {}) {\n return cn(\n \"flex items-center justify-between gap-2\",\n KUMO_PAGINATION_VARIANTS.controls[controls].classes,\n );\n}\n\n/**\n * Pagination component props.\n *\n * @example\n * ```tsx\n * <Pagination page={page} setPage={setPage} perPage={10} totalCount={100} />\n * <Pagination page={page} setPage={setPage} perPage={10} totalCount={100} controls=\"simple\" />\n * ```\n */\nexport interface PaginationProps extends KumoPaginationVariantsProps {\n /** Callback fired when the current page changes. */\n setPage: (page: number) => void;\n /**\n * Current page number (1-indexed).\n * @default 1\n */\n page?: number;\n /** Number of items displayed per page. */\n perPage?: number;\n /** Total number of items across all pages. */\n totalCount?: number;\n}\n\n/**\n * Page navigation controls with page count display.\n *\n * @example\n * ```tsx\n * <Pagination page={page} setPage={setPage} perPage={10} totalCount={100} />\n * ```\n */\nexport function Pagination({\n page = 1,\n perPage,\n totalCount,\n setPage,\n controls = KUMO_PAGINATION_DEFAULT_VARIANTS.controls,\n}: PaginationProps) {\n const [editingPage, setEditingPage] = useState<number>(1);\n\n // Value of the input as its being modified to display in the input, eventually syncs with `pagination.page`\n useEffect(() => {\n setEditingPage(page);\n }, [page]);\n\n const pageShowingRange = useMemo(() => {\n let lower = page * (perPage ?? 1) - (perPage ?? 0) + 1;\n let upper = Math.min(page * (perPage ?? 0), totalCount ?? 0);\n\n if (Number.isNaN(lower)) lower = 0;\n if (Number.isNaN(upper)) upper = 0;\n\n return `${lower}-${upper}`;\n }, [page, perPage, totalCount]);\n\n const maxPage = useMemo(() => {\n return Math.ceil((totalCount ?? 1) / (perPage ?? 1));\n }, [totalCount, perPage]);\n\n return (\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"grow text-sm text-kumo-strong\">\n {totalCount && totalCount > 0\n ? `Showing ${pageShowingRange} of ${totalCount}`\n : null}\n </div>\n <div>\n <InputGroup focusMode=\"individual\">\n {controls === \"full\" && (\n <InputGroup.Button\n variant=\"secondary\"\n aria-label=\"First page\"\n disabled={page <= 1}\n onClick={() => {\n setPage(1);\n setEditingPage(1);\n }}\n >\n <CaretDoubleLeftIcon size={16} />\n </InputGroup.Button>\n )}\n <InputGroup.Button\n variant=\"secondary\"\n aria-label=\"Previous page\"\n disabled={page <= 1}\n onClick={() => {\n const previousPage = Math.max(page - 1, 1);\n setPage(previousPage);\n setEditingPage(previousPage);\n }}\n >\n <CaretLeftIcon size={16} />\n </InputGroup.Button>\n {controls === \"full\" && (\n <InputGroup.Input\n style={{ width: 50 }}\n className=\"text-center\"\n aria-label=\"Page number\"\n value={editingPage}\n onValueChange={(value: string) => {\n setEditingPage(Number(value));\n }}\n onBlur={() => {\n let number = Math.max(editingPage, 1);\n number = Math.min(number, maxPage);\n setPage(number);\n setEditingPage(number);\n }}\n />\n )}\n <InputGroup.Button\n variant=\"secondary\"\n aria-label=\"Next page\"\n disabled={page === maxPage}\n onClick={() => {\n const nextPage = Math.min(page + 1, maxPage);\n setPage(nextPage);\n setEditingPage(nextPage);\n }}\n >\n <CaretRightIcon size={16} />\n </InputGroup.Button>\n {controls === \"full\" && (\n <InputGroup.Button\n variant=\"secondary\"\n aria-label=\"Last page\"\n disabled={page === maxPage}\n onClick={() => {\n setPage(maxPage);\n setEditingPage(maxPage);\n }}\n >\n <CaretDoubleRightIcon size={16} />\n </InputGroup.Button>\n )}\n </InputGroup>\n </div>\n </div>\n );\n}\n"],"names":["KUMO_PAGINATION_DEFAULT_VARIANTS","Pagination","page","perPage","totalCount","setPage","controls","editingPage","setEditingPage","useState","useEffect","pageShowingRange","useMemo","lower","upper","maxPage","jsxs","jsx","InputGroup","CaretDoubleLeftIcon","previousPage","CaretLeftIcon","value","number","nextPage","CaretRightIcon","CaretDoubleRightIcon"],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- "use client";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { forwardRef as o } from "react";
4
- import { c as n } from "./cn-Bhsu1vx2.js";
5
- import { C as b } from "./checkbox-CWANiedi.js";
6
- const m = {
7
- layout: {
8
- auto: {
9
- classes: "",
10
- description: "Auto table layout - columns resize based on content"
11
- },
12
- fixed: {
13
- classes: "table-fixed",
14
- description: "Fixed table layout - columns have equal width, controlled via colgroup"
15
- }
16
- },
17
- variant: {
18
- default: {
19
- classes: "",
20
- description: "Default row variant"
21
- },
22
- selected: {
23
- classes: "bg-kumo-tint",
24
- description: "Selected row variant"
25
- }
26
- }
27
- }, k = {
28
- layout: "auto",
29
- variant: "default"
30
- }, p = o(({ layout: a = "auto", ...e }, s) => {
31
- const l = n(
32
- "w-full",
33
- m.layout[a].classes,
34
- "[&_tr_td]:border-b [&_tr_td]:border-kumo-fill [&_tr:last-child_td]:border-b-0",
35
- // Row border
36
- "[&_tr_td]:p-3",
37
- // Cell padding
38
- "[&_tr_th]:border-b [&_tr_th]:border-kumo-fill [&_tr_th]:p-3 [&_tr_th]:font-semibold",
39
- // Header styles
40
- "[&_tr_th]:bg-kumo-base",
41
- // Header background color
42
- "text-left text-kumo-default",
43
- e.className
44
- );
45
- return /* @__PURE__ */ t("table", { ref: s, ...e, className: l });
46
- }), T = o((a, e) => /* @__PURE__ */ t("thead", { ref: e, ...a })), d = o((a, e) => {
47
- const s = n("group relative", a.className);
48
- return /* @__PURE__ */ t("th", { ref: e, ...a, className: s });
49
- }), f = o(({ variant: a = k.variant, ...e }, s) => {
50
- const l = n(
51
- m.variant[a].classes,
52
- e.className
53
- );
54
- return /* @__PURE__ */ t("tr", { ref: s, ...e, className: l });
55
- }), h = o((a, e) => /* @__PURE__ */ t("tbody", { ref: e, ...a })), u = o((a, e) => /* @__PURE__ */ t("td", { ref: e, ...a })), N = o((a, e) => /* @__PURE__ */ t("tfoot", { ref: e, ...a })), _ = o((a, e) => /* @__PURE__ */ t(
56
- "button",
57
- {
58
- ref: e,
59
- ...a,
60
- type: "button",
61
- "aria-label": "Resize column",
62
- className: n(
63
- "invisible h-full group-hover:visible",
64
- // Make the handle invisible by default
65
- "w-[10px]",
66
- // Hitting area
67
- "flex items-center justify-center",
68
- // Center the handle
69
- "cursor-col-resize touch-none select-none",
70
- // Prevent selection and touch events
71
- "absolute top-0 right-0",
72
- // Position the handle
73
- "m-0 bg-kumo-base p-0"
74
- // Override the stratus button styles
75
- ),
76
- children: /* @__PURE__ */ t("span", { className: "h-5 w-[2px] rounded bg-kumo-ring" })
77
- }
78
- )), y = o(({ checked: a, onValueChange: e, label: s, disabled: l, ...c }, i) => /* @__PURE__ */ t(
79
- u,
80
- {
81
- ref: i,
82
- ...c,
83
- className: n(
84
- "cursor-pointer p-0 leading-none",
85
- l && "cursor-default",
86
- c.className
87
- ),
88
- onClick: (r) => {
89
- r.stopPropagation(), l || e?.(!a);
90
- },
91
- children: /* @__PURE__ */ t(
92
- b,
93
- {
94
- checked: a,
95
- onClick: (r) => r.stopPropagation(),
96
- onCheckedChange: e,
97
- "aria-label": s ?? "Select row",
98
- disabled: l
99
- }
100
- )
101
- }
102
- )), C = o(({ checked: a, onValueChange: e, label: s, disabled: l, ...c }, i) => /* @__PURE__ */ t(
103
- d,
104
- {
105
- ref: i,
106
- ...c,
107
- className: n(
108
- "cursor-pointer p-0 leading-none",
109
- l && "cursor-default",
110
- c.className
111
- ),
112
- onClick: (r) => {
113
- r.stopPropagation(), l || e?.(!a);
114
- },
115
- children: /* @__PURE__ */ t(
116
- b,
117
- {
118
- checked: a,
119
- onClick: (r) => r.stopPropagation(),
120
- onCheckedChange: e,
121
- "aria-label": s ?? "Select all rows",
122
- disabled: l
123
- }
124
- )
125
- }
126
- ));
127
- p.displayName = "Table";
128
- h.displayName = "Table.Body";
129
- d.displayName = "Table.Head";
130
- f.displayName = "Table.Row";
131
- u.displayName = "Table.Cell";
132
- N.displayName = "Table.Footer";
133
- T.displayName = "Table.Header";
134
- _.displayName = "Table.ResizeHandle";
135
- y.displayName = "Table.CheckCell";
136
- C.displayName = "Table.CheckHead";
137
- const x = Object.assign(p, {
138
- Header: T,
139
- Head: d,
140
- Row: f,
141
- Body: h,
142
- Cell: u,
143
- CheckCell: y,
144
- CheckHead: C,
145
- Footer: N,
146
- ResizeHandle: _
147
- });
148
- export {
149
- k as K,
150
- x as T,
151
- m as a
152
- };
153
- //# sourceMappingURL=table-BUmvaBj8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-BUmvaBj8.js","sources":["../src/components/table/table.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Checkbox } from \"../checkbox\";\n\n/** Table layout and row variant definitions mapping names to their Tailwind classes. */\nexport const KUMO_TABLE_VARIANTS = {\n layout: {\n auto: {\n classes: \"\",\n description: \"Auto table layout - columns resize based on content\",\n },\n fixed: {\n classes: \"table-fixed\",\n description:\n \"Fixed table layout - columns have equal width, controlled via colgroup\",\n },\n },\n variant: {\n default: {\n classes: \"\",\n description: \"Default row variant\",\n },\n selected: {\n classes: \"bg-kumo-tint\",\n description: \"Selected row variant\",\n },\n },\n} as const;\n\nexport const KUMO_TABLE_DEFAULT_VARIANTS = {\n layout: \"auto\",\n variant: \"default\",\n} as const;\n\nexport type KumoTableRowVariant = keyof typeof KUMO_TABLE_VARIANTS.variant;\nexport type KumoTableLayout = keyof typeof KUMO_TABLE_VARIANTS.layout;\n\n/**\n * Table root — applies layout, borders, padding, and header styles.\n *\n * @example\n * ```tsx\n * <Table layout=\"fixed\">\n * <Table.Header>\n * <Table.Row>\n * <Table.Head>Name</Table.Head>\n * <Table.Head>Status</Table.Head>\n * </Table.Row>\n * </Table.Header>\n * <Table.Body>\n * <Table.Row>\n * <Table.Cell>Worker A</Table.Cell>\n * <Table.Cell>Active</Table.Cell>\n * </Table.Row>\n * </Table.Body>\n * </Table>\n * ```\n */\nconst TableRoot = forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement> & {\n /**\n * Table layout algorithm.\n * - `\"auto\"` — columns resize based on content\n * - `\"fixed\"` — equal-width columns, controlled via `<colgroup>`\n * @default \"auto\"\n */\n layout?: KumoTableLayout;\n }\n>(({ layout = \"auto\", ...props }, ref) => {\n const className = cn(\n \"w-full\",\n KUMO_TABLE_VARIANTS.layout[layout].classes,\n \"[&_tr_td]:border-b [&_tr_td]:border-kumo-fill [&_tr:last-child_td]:border-b-0\", // Row border\n \"[&_tr_td]:p-3\", // Cell padding\n \"[&_tr_th]:border-b [&_tr_th]:border-kumo-fill [&_tr_th]:p-3 [&_tr_th]:font-semibold\", // Header styles\n \"[&_tr_th]:bg-kumo-base\", // Header background color\n \"text-left text-kumo-default\",\n props.className,\n );\n\n return <table ref={ref} {...props} className={className} />;\n});\n\nconst TableHeader = forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>((props, ref) => {\n return <thead ref={ref} {...props} />;\n});\n\nconst TableHead = forwardRef<\n HTMLTableCellElement,\n React.HTMLAttributes<HTMLTableCellElement>\n>((props, ref) => {\n const className = cn(\"group relative\", props.className);\n return <th ref={ref} {...props} className={className} />;\n});\n\nconst TableRow = forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement> & {\n variant?: KumoTableRowVariant;\n }\n>(({ variant = KUMO_TABLE_DEFAULT_VARIANTS.variant, ...props }, ref) => {\n const className = cn(\n KUMO_TABLE_VARIANTS.variant[variant].classes,\n props.className,\n );\n\n return <tr ref={ref} {...props} className={className} />;\n});\n\nconst TableBody = forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>((props, ref) => {\n return <tbody ref={ref} {...props} />;\n});\n\nconst TableCell = forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>((props, ref) => {\n return <td ref={ref} {...props} />;\n});\n\nconst TableFooter = forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>((props, ref) => {\n return <tfoot ref={ref} {...props} />;\n});\n\nconst TableResizeHandle = forwardRef<\n HTMLButtonElement,\n React.HTMLAttributes<HTMLButtonElement>\n>((props, ref) => {\n return (\n <button\n ref={ref}\n {...props}\n type=\"button\"\n aria-label=\"Resize column\"\n className={cn(\n \"invisible h-full group-hover:visible\", // Make the handle invisible by default\n \"w-[10px]\", // Hitting area\n \"flex items-center justify-center\", // Center the handle\n \"cursor-col-resize touch-none select-none\", // Prevent selection and touch events\n \"absolute top-0 right-0\", // Position the handle\n \"m-0 bg-kumo-base p-0\", // Override the stratus button styles\n )}\n >\n <span className=\"h-5 w-[2px] rounded bg-kumo-ring\" />\n </button>\n );\n});\n\n/**\n * Special cell that makes the entire cell area a hit target for the checkbox.\n */\n\nconst TableCheckCell = forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement> & {\n checked?: boolean;\n onValueChange?: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n }\n>(({ checked, onValueChange, label, disabled, ...props }, ref) => {\n return (\n <TableCell\n ref={ref}\n {...props}\n className={cn(\n \"cursor-pointer p-0 leading-none\",\n disabled && \"cursor-default\",\n props.className,\n )}\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled) {\n onValueChange?.(!checked);\n }\n }}\n >\n <Checkbox\n checked={checked}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={onValueChange}\n aria-label={label ?? \"Select row\"}\n disabled={disabled}\n />\n </TableCell>\n );\n});\n\nconst TableCheckHead = forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement> & {\n checked?: boolean;\n onValueChange?: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n }\n>(({ checked, onValueChange, label, disabled, ...props }, ref) => {\n return (\n <TableHead\n ref={ref}\n {...props}\n className={cn(\n \"cursor-pointer p-0 leading-none\",\n disabled && \"cursor-default\",\n props.className,\n )}\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled) {\n onValueChange?.(!checked);\n }\n }}\n >\n <Checkbox\n checked={checked}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={onValueChange}\n aria-label={label ?? \"Select all rows\"}\n disabled={disabled}\n />\n </TableHead>\n );\n});\n\nTableRoot.displayName = \"Table\";\nTableBody.displayName = \"Table.Body\";\nTableHead.displayName = \"Table.Head\";\nTableRow.displayName = \"Table.Row\";\nTableCell.displayName = \"Table.Cell\";\nTableFooter.displayName = \"Table.Footer\";\nTableHeader.displayName = \"Table.Header\";\nTableResizeHandle.displayName = \"Table.ResizeHandle\";\nTableCheckCell.displayName = \"Table.CheckCell\";\nTableCheckHead.displayName = \"Table.CheckHead\";\n\n/**\n * Table — semantic HTML table with styled rows, cells, and selection support.\n *\n * Compound component: `Table` (Root), `.Header`, `.Head`, `.Body`, `.Row`,\n * `.Cell`, `.Footer`, `.CheckCell`, `.CheckHead`, `.ResizeHandle`.\n *\n * @example\n * ```tsx\n * <Table>\n * <Table.Header>\n * <Table.Row>\n * <Table.CheckHead checked={allSelected} onValueChange={toggleAll} />\n * <Table.Head>Name</Table.Head>\n * </Table.Row>\n * </Table.Header>\n * <Table.Body>\n * {rows.map((row) => (\n * <Table.Row key={row.id} variant={selected.has(row.id) ? \"selected\" : \"default\"}>\n * <Table.CheckCell checked={selected.has(row.id)} onValueChange={() => toggle(row.id)} />\n * <Table.Cell>{row.name}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table>\n * ```\n */\nexport const Table = Object.assign(TableRoot, {\n Header: TableHeader,\n Head: TableHead,\n Row: TableRow,\n Body: TableBody,\n Cell: TableCell,\n CheckCell: TableCheckCell,\n CheckHead: TableCheckHead,\n Footer: TableFooter,\n ResizeHandle: TableResizeHandle,\n});\n"],"names":["KUMO_TABLE_VARIANTS","KUMO_TABLE_DEFAULT_VARIANTS","TableRoot","forwardRef","layout","props","ref","className","cn","jsx","TableHeader","TableHead","TableRow","variant","TableBody","TableCell","TableFooter","TableResizeHandle","TableCheckCell","checked","onValueChange","label","disabled","e","Checkbox","TableCheckHead","Table"],"mappings":"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"}