@hachej/boring-ui-kit 0.3.2 → 0.4.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 (57) hide show
  1. package/README.md +46 -18
  2. package/THIRD_PARTY_NOTICES.md +35 -0
  3. package/bin/boring-ui-blocks.mjs +286 -0
  4. package/dist/canvas-editor-native.d.ts +4 -1
  5. package/dist/canvas-editor-native.js +8 -6
  6. package/dist/canvas-editor.js +1 -1
  7. package/dist/canvas-proposals.d.ts +3 -1
  8. package/dist/canvas-proposals.js +4 -3
  9. package/dist/experience-document-viewer.d.ts +3 -0
  10. package/dist/experience-document-viewer.js +6 -5
  11. package/dist/experience.d.ts +3 -0
  12. package/dist/experience.js +2 -1
  13. package/dist/file-tree-view.d.ts +76 -3
  14. package/dist/file-tree-view.js +172 -39
  15. package/dist/file-tree.d.ts +3 -0
  16. package/dist/file-tree.js +17 -2
  17. package/dist/html-viewer.d.ts +4 -0
  18. package/dist/html-viewer.js +5 -3
  19. package/dist/markdown-autosave.d.ts +13 -0
  20. package/dist/markdown-autosave.js +94 -0
  21. package/dist/markdown-editor.d.ts +16 -0
  22. package/dist/markdown-editor.js +81 -17
  23. package/dist/markdown-extensions.js +9 -1
  24. package/dist/markdown-proposal-diff.d.ts +2 -1
  25. package/dist/markdown-proposal-diff.js +3 -2
  26. package/dist/markdown-safety.js +3 -1
  27. package/dist/native-chat.js +1 -1
  28. package/dist/remote-chat.d.ts +18 -0
  29. package/dist/remote-chat.js +149 -7
  30. package/dist/text-buffer.js +3 -2
  31. package/dist/text-draft-controls.d.ts +3 -1
  32. package/dist/text-draft-controls.js +3 -2
  33. package/dist/viewer-components.d.ts +14 -0
  34. package/dist/viewer-components.js +1 -0
  35. package/package.json +8 -4
  36. package/r/app-shell.json +39 -20
  37. package/r/button.json +19 -11
  38. package/r/dock.json +2 -2
  39. package/r/documents.json +17 -14
  40. package/r/feedback-preview.json +8 -2
  41. package/r/feedback.json +46 -325
  42. package/r/file-tree.json +14 -6
  43. package/r/html-viewer.json +8 -42
  44. package/r/markdown-editor.json +38 -87
  45. package/r/pi-ambient.json +15 -8
  46. package/r/pi-app.json +30 -24
  47. package/r/pi-chat.json +101 -70
  48. package/r/pi-workspace.json +7 -5
  49. package/r/provider-setup.json +9 -4
  50. package/r/registry.json +471 -893
  51. package/r/task-list-viewer.json +11 -21
  52. package/r/theme.json +23 -4
  53. package/r/version-history.json +24 -0
  54. package/r/viewers.json +139 -320
  55. package/styles/file-tree.css +41 -42
  56. package/dist/file-tree-shadcn.d.ts +0 -8
  57. package/dist/file-tree-shadcn.js +0 -14
@@ -1,46 +1,45 @@
1
- /* shadcn/ui sidebar-11 adaptation; MIT. See ../THIRD_PARTY_NOTICES.md. */
2
- [data-boring="file-tree"] {
3
- color: var(--foreground, #18181b);
4
- background: var(--background, #fff);
5
- font: inherit;
6
- min-width: 0;
7
- }
1
+ /* Layout only. Appearance (colour, radius, border, shadow, type, motion) belongs to the host's shadcn components: Button, Input, Empty,
2
+ Separator, Collapsible and the sidebar menu. */
3
+ [data-boring="file-tree"] { min-width: 0; }
8
4
  [data-boring="file-tree"] *, [data-boring="file-tree"] *::before, [data-boring="file-tree"] *::after { box-sizing: border-box; }
5
+ [data-boring="file-tree"][data-variant="list"] { position: relative; min-height: 100%; }
6
+ [data-boring="file-tree"] .file-tree-menu { margin: 0; padding: .5rem; list-style: none; }
7
+ [data-boring="file-tree"][data-variant="list"] .file-tree-menu { padding: 0 .75rem .75rem; }
9
8
  [data-boring="file-tree"] ul { list-style: none; }
10
- [data-boring="file-tree"] button, [data-boring="file-tree"] input { font: inherit; }
11
- [data-boring="file-tree"] button { cursor: pointer; }
12
- [data-boring="file-tree"] [data-slot="sidebar-menu"] { display: flex; width: 100%; min-width: 0; flex-direction: column; gap: .25rem; margin: 0; padding: .5rem; }
13
- [data-boring="file-tree"] [data-slot="sidebar-menu-item"] { position: relative; border-radius: .375rem; outline: none; }
14
- [data-boring="file-tree"] [data-slot="sidebar-menu-item"] > div { display: flex; align-items: center; gap: .25rem; }
15
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"] {
16
- display: flex; align-items: center; gap: .5rem; flex: 1; width: 100%; min-width: 0;
17
- height: 2rem; overflow: hidden; border: 0; border-radius: .375rem; padding: .5rem;
18
- background: transparent; color: inherit; text-align: left; font-size: .875rem;
19
- line-height: 1.25rem; outline: none; transition: width .15s, height .15s, padding .15s;
20
- }
21
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"]:hover,
22
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"]:active {
23
- background: var(--sidebar-accent, var(--accent, #f4f4f5));
24
- color: var(--sidebar-accent-foreground, var(--accent-foreground, #18181b));
25
- }
26
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"][data-active="true"] { font-weight: 500; color: var(--sidebar-accent-foreground, var(--accent-foreground, #18181b)); }
27
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"] > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
28
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"] > svg { width: 1rem; height: 1rem; flex-shrink: 0; transition: transform .15s; }
29
- [data-boring="file-tree"] [data-slot="sidebar-menu-item"][data-state="open"] > div > button > svg:first-child { transform: rotate(90deg); }
30
- [data-boring="file-tree"] [data-slot="sidebar-menu-sub"] {
31
- display: flex; min-width: 0; flex-direction: column; gap: .25rem;
32
- margin: 0 .875rem; padding: .125rem .625rem; transform: translateX(1px);
33
- border-left: 1px solid var(--sidebar-border, var(--border, #e4e4e7));
34
- }
35
- [data-boring="file-tree"] [data-slot="sidebar-menu-sub"][hidden] { display: none; }
36
- [data-boring="file-tree"] [data-slot="sidebar-menu-item"]:focus-visible,
37
- [data-boring="file-tree"] button:focus-visible,
38
- [data-boring="file-tree"] input:focus-visible { outline: 2px solid var(--sidebar-ring, var(--ring, #71717a)); outline-offset: 2px; }
39
- [data-boring="file-tree"] button:disabled { pointer-events: none; opacity: .5; }
40
- [data-boring="file-tree"] > div:first-child { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; padding: .5rem; }
41
- [data-boring="file-tree"] input[type="search"] { flex: 1; min-width: 0; padding: .375rem .5rem; border: 1px solid var(--input, #d4d4d8); border-radius: .375rem; color: inherit; background: transparent; }
42
- [data-boring="file-tree"] input[type="file"] { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
9
+ [data-boring="file-tree"] .file-tree-item { position: relative; outline: none; }
10
+ [data-boring="file-tree"] .file-tree-item > div { display: flex; align-items: center; gap: .25rem; }
11
+ [data-boring="file-tree"] .file-tree-row-button { flex: 1; width: 100%; min-width: 0; justify-content: flex-start; overflow: hidden; }
12
+ [data-boring="file-tree"][data-variant="list"] .file-tree-row-button { height: auto; min-height: 3rem; }
13
+ [data-boring="file-tree"] .file-tree-row-button > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
14
+ [data-boring="file-tree"] .file-tree-item[aria-expanded="true"] > div > button > svg:first-child { transform: rotate(90deg); }
15
+ [data-boring="file-tree"] .file-tree-chevron-space { display: block; flex: 0 0 1rem; }
16
+ [data-boring="file-tree"] .file-tree-copy { display: flex; align-items: center; gap: .5rem; min-width: 0; flex: 1; text-align: start; }
17
+ [data-boring="file-tree"][data-variant="list"] .file-tree-copy { flex-direction: column; align-items: stretch; gap: 0; }
18
+ [data-boring="file-tree"] .file-tree-name, [data-boring="file-tree"] .file-tree-parent { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
19
+ [data-boring="file-tree"] [data-file-meta] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted-foreground); font-weight: 400; }
20
+ [data-boring="file-tree"] .file-tree-header { display: flex; align-items: center; gap: .5rem; padding: .75rem 1rem .5rem; min-height: 3.5rem; }
21
+ [data-boring="file-tree"] .file-tree-header h2 { margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
22
+ [data-boring="file-tree"] .file-tree-count { flex: 1; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
23
+ [data-boring="file-tree"] .file-tree-toolbar { display: flex; align-items: center; gap: .5rem; padding: .5rem; }
24
+ [data-boring="file-tree"][data-variant="list"] .file-tree-toolbar { padding: .25rem 1rem .75rem; }
25
+ [data-boring="file-tree"] .file-tree-search { display: flex; flex: 1; min-width: 0; position: relative; }
26
+ [data-boring="file-tree"] .file-tree-search > [data-slot="input"] { flex: 1; width: 100%; min-width: 0; }
27
+ [data-boring="file-tree"][data-variant="list"] .file-tree-search > [data-slot="input"] { padding-left: 2.25rem; }
28
+ [data-boring="file-tree"][data-variant="list"] .file-tree-search > svg { position: absolute; left: .75rem; top: 50%; transform: translateY(-50%); width: 1rem; height: 1rem; pointer-events: none; color: var(--muted-foreground); }
29
+ [data-boring="file-tree"] input[type="file"] { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; }
30
+ [data-boring="file-tree"] .file-tree-status { padding: .5rem; color: var(--muted-foreground); }
31
+ [data-boring="file-tree"] .file-tree-history { padding: .5rem; }
43
32
  [data-boring="file-tree"] pre { max-height: 20rem; overflow: auto; white-space: pre-wrap; }
44
- @media (prefers-reduced-motion: reduce) {
45
- [data-boring="file-tree"] [data-slot="sidebar-menu-button"], [data-boring="file-tree"] [data-slot="sidebar-menu-button"] > svg { transition: none; }
33
+ [data-boring="file-tree"] .file-tree-announcements { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }
34
+ [data-boring="file-tree"] [data-upload-spinner] { flex-shrink: 0; width: 1rem; height: 1rem; margin: .5rem; color: var(--muted-foreground); }
35
+ [data-boring="file-tree"] [data-upload-error] { display: block; padding: 0 .5rem .5rem; color: var(--destructive); white-space: normal; overflow-wrap: anywhere; }
36
+ [data-boring="file-tree"] > p[role="alert"], [data-boring="file-tree"] > ul[aria-label] { overflow-wrap: anywhere; }
37
+ [data-boring="file-tree"] .file-tree-drop { position: absolute; inset: .25rem; z-index: 5; display: flex; flex-direction: column; pointer-events: none; }
38
+ [data-boring="file-tree"] .file-tree-drop > [data-slot="empty"] { flex: 1; background: var(--background); }
39
+ @media (hover: hover) and (pointer: fine) {
40
+ [data-boring="file-tree"] [data-file-more] { opacity: 0; }
41
+ [data-boring="file-tree"] .file-tree-item > div:hover [data-file-more],
42
+ [data-boring="file-tree"] .file-tree-item:focus-within > div [data-file-more],
43
+ [data-boring="file-tree"] [data-file-more][aria-expanded="true"] { opacity: 1; }
46
44
  }
45
+ [data-boring="file-tree"] .file-tree-empty { min-height: 14rem; }
@@ -1,8 +0,0 @@
1
- import type { ComponentProps } from 'react';
2
- export declare function SidebarMenu({ className, ...props }: ComponentProps<'ul'>): import("react").JSX.Element;
3
- export declare function SidebarMenuItem({ className, ...props }: ComponentProps<'li'>): import("react").JSX.Element;
4
- export declare function SidebarMenuButton({ className, isActive, ...props }: ComponentProps<'button'> & {
5
- readonly isActive?: boolean;
6
- }): import("react").JSX.Element;
7
- export declare function SidebarMenuSub({ className, ...props }: ComponentProps<'ul'>): import("react").JSX.Element;
8
- //# sourceMappingURL=file-tree-shadcn.d.ts.map
@@ -1,14 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- export function SidebarMenu({ className = '', ...props }) {
4
- return _jsx("ul", { "data-slot": "sidebar-menu", "data-sidebar": "menu", className: `flex w-full min-w-0 flex-col gap-1 ${className}`, ...props });
5
- }
6
- export function SidebarMenuItem({ className = '', ...props }) {
7
- return _jsx("li", { "data-slot": "sidebar-menu-item", "data-sidebar": "menu-item", className: `group/menu-item relative ${className}`, ...props });
8
- }
9
- export function SidebarMenuButton({ className = '', isActive = false, ...props }) {
10
- return _jsx("button", { type: "button", "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": "default", "data-active": isActive, className: `peer/menu-button flex h-8 w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 ${className}`, ...props });
11
- }
12
- export function SidebarMenuSub({ className = '', ...props }) {
13
- return _jsx("ul", { "data-slot": "sidebar-menu-sub", "data-sidebar": "menu-sub", className: `mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 ${className}`, ...props });
14
- }