@hachej/boring-ui-kit 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/markdown-editor.js +2 -4
- package/package.json +2 -2
- package/r/app-shell.json +9 -9
- package/r/button.json +1 -1
- package/r/dock.json +1 -1
- package/r/documents.json +10 -10
- package/r/feedback-preview.json +1 -1
- package/r/feedback.json +5 -5
- package/r/file-tree.json +5 -5
- package/r/html-viewer.json +3 -3
- package/r/maquette-viewer.json +90 -0
- package/r/markdown-editor.json +3 -3
- package/r/pi-ambient.json +6 -6
- package/r/pi-app.json +22 -13
- package/r/pi-chat.json +6 -6
- package/r/pi-workspace.json +4 -4
- package/r/provider-setup.json +2 -2
- package/r/registry.json +174 -76
- package/r/task-list-viewer.json +2 -2
- package/r/utils.json +9 -2
- package/r/version-history.json +3 -3
- package/r/viewers.json +11 -11
package/r/registry.json
CHANGED
|
@@ -103,16 +103,22 @@
|
|
|
103
103
|
"name": "utils",
|
|
104
104
|
"type": "registry:lib",
|
|
105
105
|
"title": "Shared helpers",
|
|
106
|
-
"description": "The class merge helper `cn` and `copyText` (host callback, Clipboard API, then a selection copy that works over plain HTTP) shared by every Tailwind item, installed once in components/utils/.",
|
|
106
|
+
"description": "The class merge helper `cn` and `copyText` (host callback, Clipboard API, then a selection copy that works over plain HTTP) shared by every Tailwind item, and the app shell's header slot for an embedded page's controls (`ScreenHeaderSlotContext`), installed once in components/utils/.",
|
|
107
107
|
"dependencies": [
|
|
108
108
|
"clsx@^2.1.1",
|
|
109
|
-
"tailwind-merge@^3.7.0"
|
|
109
|
+
"tailwind-merge@^3.7.0",
|
|
110
|
+
"react@^19.0.0"
|
|
110
111
|
],
|
|
111
112
|
"files": [
|
|
112
113
|
{
|
|
113
114
|
"path": "registry/utils/utils.ts",
|
|
114
115
|
"type": "registry:lib",
|
|
115
116
|
"target": "components/utils/utils.ts"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "registry/utils/screen-header-slot.ts",
|
|
120
|
+
"type": "registry:lib",
|
|
121
|
+
"target": "components/utils/screen-header-slot.ts"
|
|
116
122
|
}
|
|
117
123
|
]
|
|
118
124
|
},
|
|
@@ -127,7 +133,7 @@
|
|
|
127
133
|
"lucide-react@^1.51.0"
|
|
128
134
|
],
|
|
129
135
|
"registryDependencies": [
|
|
130
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
136
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
131
137
|
"dropdown-menu",
|
|
132
138
|
"button",
|
|
133
139
|
"toggle",
|
|
@@ -155,8 +161,8 @@
|
|
|
155
161
|
"title": "Markdown editor",
|
|
156
162
|
"description": "A host-owned styled wrapper over the concrete borrowed Markdown controller.",
|
|
157
163
|
"dependencies": [
|
|
158
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
159
|
-
"@hachej/boring-files@^0.4.
|
|
164
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
165
|
+
"@hachej/boring-files@^0.4.2",
|
|
160
166
|
"react@^19.0.0",
|
|
161
167
|
"react-dom@^19.0.0",
|
|
162
168
|
"marked@^17.0.6",
|
|
@@ -311,7 +317,7 @@
|
|
|
311
317
|
},
|
|
312
318
|
"docs": "Create and own a MarkdownController from @hachej/boring-ui-kit/markdown. Pass it to MarkdownEditor. The wrapper does not acquire resources or dispose the controller. Check the repository release notes for available npm versions; local tarball tests do not establish registry availability.",
|
|
313
319
|
"registryDependencies": [
|
|
314
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
320
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json"
|
|
315
321
|
]
|
|
316
322
|
},
|
|
317
323
|
{
|
|
@@ -320,8 +326,8 @@
|
|
|
320
326
|
"title": "HTML source and passive preview",
|
|
321
327
|
"description": "Exact HTML source editing with a reconstructed passive preview and borrowed controller. Browser security qualification remains separate.",
|
|
322
328
|
"dependencies": [
|
|
323
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
324
|
-
"@hachej/boring-files@^0.4.
|
|
329
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
330
|
+
"@hachej/boring-files@^0.4.2",
|
|
325
331
|
"react@^19.0.0",
|
|
326
332
|
"react-dom@^19.0.0"
|
|
327
333
|
],
|
|
@@ -369,7 +375,7 @@
|
|
|
369
375
|
}
|
|
370
376
|
},
|
|
371
377
|
"registryDependencies": [
|
|
372
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
378
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json"
|
|
373
379
|
]
|
|
374
380
|
},
|
|
375
381
|
{
|
|
@@ -378,8 +384,8 @@
|
|
|
378
384
|
"title": "Pi chat",
|
|
379
385
|
"description": "A complete Tailwind chat over the borrowed native chat controller: composer, messages, one collapsible activity block per turn (tool calls and reasoning), message queue, history, a human-in-the-loop question card, an Approve / Deny card for host tools wrapped with requireApproval optional artifact cards that open generated content in the host's panel, and feedback cards for the opt-in feedback tool (lists, and Show offers that the host page resolves). Chat only: no layout. Owned, editable source; no AI SDK. The optional pi-ambient and pi-workspace blocks build on it.",
|
|
380
386
|
"dependencies": [
|
|
381
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
382
|
-
"@hachej/boring-files@^0.4.
|
|
387
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
388
|
+
"@hachej/boring-files@^0.4.2",
|
|
383
389
|
"react@^19.0.0",
|
|
384
390
|
"react-dom@^19.0.0",
|
|
385
391
|
"marked@^17.0.6",
|
|
@@ -393,8 +399,8 @@
|
|
|
393
399
|
"@shadcn/react@0.3.1"
|
|
394
400
|
],
|
|
395
401
|
"registryDependencies": [
|
|
396
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
397
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
402
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
403
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
398
404
|
"trace",
|
|
399
405
|
"message",
|
|
400
406
|
"message-scroller",
|
|
@@ -646,7 +652,7 @@
|
|
|
646
652
|
"title": "Pi ambient agent",
|
|
647
653
|
"description": "AmbientChat, a compact floating agent bar that grows into a chat window over an existing page, and AgentNotifications, toasts for finished, failed and waiting tasks (with the one guarded browser Notification helper). A block over the pi-chat item; its in-window artifact panel uses the pi-workspace layout.",
|
|
648
654
|
"dependencies": [
|
|
649
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
655
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
650
656
|
"react@^19.0.0",
|
|
651
657
|
"react-dom@^19.0.0",
|
|
652
658
|
"@earendil-works/pi-durable@~1.2.0",
|
|
@@ -654,11 +660,11 @@
|
|
|
654
660
|
"lucide-react@^1.51.0"
|
|
655
661
|
],
|
|
656
662
|
"registryDependencies": [
|
|
657
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
658
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
659
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
660
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
661
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
663
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
664
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
665
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-workspace.json",
|
|
666
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
667
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
662
668
|
"message-scroller",
|
|
663
669
|
"button",
|
|
664
670
|
"toggle",
|
|
@@ -694,7 +700,7 @@
|
|
|
694
700
|
"react@^19.0.0"
|
|
695
701
|
],
|
|
696
702
|
"registryDependencies": [
|
|
697
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
703
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json"
|
|
698
704
|
],
|
|
699
705
|
"files": [
|
|
700
706
|
{
|
|
@@ -714,10 +720,10 @@
|
|
|
714
720
|
"react-dom@^19.0.0"
|
|
715
721
|
],
|
|
716
722
|
"registryDependencies": [
|
|
717
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
718
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
719
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
720
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
723
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
724
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
725
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
726
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/dock.json",
|
|
721
727
|
"badge",
|
|
722
728
|
"card"
|
|
723
729
|
],
|
|
@@ -734,32 +740,119 @@
|
|
|
734
740
|
}
|
|
735
741
|
]
|
|
736
742
|
},
|
|
743
|
+
{
|
|
744
|
+
"name": "maquette-viewer",
|
|
745
|
+
"type": "registry:component",
|
|
746
|
+
"title": "Maquette viewer",
|
|
747
|
+
"description": "MaquetteViewer and maquetteKind: a PM agent's *.maquette.json mock-up (format v1, versioned) one screen at a time, drawn from the host's shadcn components, under one thin icon bar: Back, previous and next (also arrow keys and swipe), and a menu with guided tours and How it works (the workflow diagram in a dialog). Optional phone or desktop frame and #screen=<id> deep links. The pi-app artifact panel shows .maquette.json files with it by default; app artifactKinds win.",
|
|
748
|
+
"dependencies": [
|
|
749
|
+
"react@^19.0.0",
|
|
750
|
+
"lucide-react@^1.51.0"
|
|
751
|
+
],
|
|
752
|
+
"registryDependencies": [
|
|
753
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
754
|
+
"alert",
|
|
755
|
+
"badge",
|
|
756
|
+
"bubble",
|
|
757
|
+
"button",
|
|
758
|
+
"card",
|
|
759
|
+
"empty",
|
|
760
|
+
"input",
|
|
761
|
+
"item",
|
|
762
|
+
"label",
|
|
763
|
+
"native-select",
|
|
764
|
+
"separator",
|
|
765
|
+
"table",
|
|
766
|
+
"dialog",
|
|
767
|
+
"dropdown-menu",
|
|
768
|
+
"popover"
|
|
769
|
+
],
|
|
770
|
+
"files": [
|
|
771
|
+
{
|
|
772
|
+
"path": "registry/maquette-viewer/maquette.ts",
|
|
773
|
+
"type": "registry:lib",
|
|
774
|
+
"target": "components/maquette-viewer/maquette.ts"
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
"path": "registry/maquette-viewer/maquette-labels.ts",
|
|
778
|
+
"type": "registry:lib",
|
|
779
|
+
"target": "components/maquette-viewer/maquette-labels.ts"
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"path": "registry/maquette-viewer/maquette-blocks.tsx",
|
|
783
|
+
"type": "registry:component",
|
|
784
|
+
"target": "components/maquette-viewer/maquette-blocks.tsx"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
"path": "registry/maquette-viewer/maquette-diagram.tsx",
|
|
788
|
+
"type": "registry:component",
|
|
789
|
+
"target": "components/maquette-viewer/maquette-diagram.tsx"
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
"path": "registry/maquette-viewer/maquette-viewer.tsx",
|
|
793
|
+
"type": "registry:component",
|
|
794
|
+
"target": "components/maquette-viewer/maquette-viewer.tsx"
|
|
795
|
+
}
|
|
796
|
+
],
|
|
797
|
+
"css": {
|
|
798
|
+
"@layer components": {
|
|
799
|
+
"[data-boring=\"maquette-viewer\"] [data-maquette=\"placeholder\"]": {
|
|
800
|
+
"border-width": "var(--default-border-width, 1px)",
|
|
801
|
+
"border-style": "dashed",
|
|
802
|
+
"border-color": "var(--border)",
|
|
803
|
+
"background-color": "var(--muted)"
|
|
804
|
+
},
|
|
805
|
+
"[data-boring=\"maquette-viewer\"] [data-hint=\"pulse\"] [data-goto]": {
|
|
806
|
+
"animation": "var(--animate-pulse)",
|
|
807
|
+
"animation-iteration-count": "1"
|
|
808
|
+
},
|
|
809
|
+
"[data-boring=\"maquette-viewer\"] [data-goto]:focus-visible": {
|
|
810
|
+
"outline": "2px solid color-mix(in oklch, var(--ring) 55%, transparent)",
|
|
811
|
+
"outline-offset": "2px"
|
|
812
|
+
},
|
|
813
|
+
"@media (hover: hover) and (pointer: fine)": {
|
|
814
|
+
"[data-boring=\"maquette-viewer\"] [data-goto]:hover": {
|
|
815
|
+
"outline": "2px solid color-mix(in oklch, var(--ring) 55%, transparent)",
|
|
816
|
+
"outline-offset": "2px"
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
"@media (prefers-reduced-motion: reduce)": {
|
|
820
|
+
"[data-boring=\"maquette-viewer\"] [data-hint=\"pulse\"] [data-goto]": {
|
|
821
|
+
"animation": "none"
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
},
|
|
737
827
|
{
|
|
738
828
|
"name": "pi-app",
|
|
739
829
|
"type": "registry:block",
|
|
740
830
|
"title": "Pi agent app",
|
|
741
|
-
"description": "AgentWorkspace: a whole agent page in one component. Left: the sessions pane (search, New, rename, archive, delete; collapsible, a drawer on a narrow screen). Center: PiChat. Right: the artifact viewers (artifact panel with versions, file viewer, auto-open of new artifacts) in the ArtifactWorkspace panel, a full-screen sheet on a phone. Props are data and callbacks; hooks for the conversations handler (useConversations), the chat transport (useRemoteChat) and saved resources (useSaved).",
|
|
831
|
+
"description": "AgentWorkspace: a whole agent page in one component. Left: the sessions pane (search, New, rename, archive, delete; collapsible, a drawer on a narrow screen). Center: PiChat. Right: the artifact viewers (artifact panel with versions, file viewer, auto-open of new artifacts) in the ArtifactWorkspace panel, a full-screen sheet on a phone. layout=\"embedded\" drops the left column for one compact top bar (title, History, Library, New) that joins an app-shell screen header. Props are data and callbacks; hooks for the conversations handler (useConversations), the chat transport (useRemoteChat) and saved resources (useSaved).",
|
|
742
832
|
"dependencies": [
|
|
743
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
744
|
-
"@hachej/boring-files@^0.4.
|
|
833
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
834
|
+
"@hachej/boring-files@^0.4.2",
|
|
745
835
|
"react@^19.0.0",
|
|
746
836
|
"react-dom@^19.0.0",
|
|
747
837
|
"lucide-react@^1.51.0"
|
|
748
838
|
],
|
|
749
839
|
"registryDependencies": [
|
|
750
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
751
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
752
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
753
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
754
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
755
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
840
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
841
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
842
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-workspace.json",
|
|
843
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/viewers.json",
|
|
844
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/maquette-viewer.json",
|
|
845
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
846
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
756
847
|
"drawer",
|
|
757
848
|
"button",
|
|
758
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
849
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/file-tree.json",
|
|
759
850
|
"dropdown-menu",
|
|
760
851
|
"scroll-area",
|
|
761
852
|
"separator",
|
|
762
|
-
"table"
|
|
853
|
+
"table",
|
|
854
|
+
"popover",
|
|
855
|
+
"tooltip"
|
|
763
856
|
],
|
|
764
857
|
"files": [
|
|
765
858
|
{
|
|
@@ -777,6 +870,11 @@
|
|
|
777
870
|
"type": "registry:component",
|
|
778
871
|
"target": "components/pi-app/history-column.tsx"
|
|
779
872
|
},
|
|
873
|
+
{
|
|
874
|
+
"path": "registry/pi-app/workspace-bar.tsx",
|
|
875
|
+
"type": "registry:component",
|
|
876
|
+
"target": "components/pi-app/workspace-bar.tsx"
|
|
877
|
+
},
|
|
780
878
|
{
|
|
781
879
|
"path": "registry/pi-app/artifact-panel.tsx",
|
|
782
880
|
"type": "registry:component",
|
|
@@ -835,19 +933,19 @@
|
|
|
835
933
|
"title": "App shell: layouts, list/detail and agent layer",
|
|
836
934
|
"description": "AppShell with three layouts. B \"workspace\" puts a ListDetail on a screen (phone: the list, then the detail as a stack step with Back; wide: a 20rem list and the detail side by side, sidebar as an icon rail). C \"chat\" wraps the app's own AgentWorkspace (untouched, passed as the nav item's render; install the pi-app item yourself) in the same sidebar, account menu and header; it takes no shell agent. A \"screen\": one screen at a time, every screen kept mounted. On a phone bottom tabs (at most four; more give three plus a « Plus » sheet) and an avatar button that opens the account sheet; on a wide screen the shadcn sidebar (icon rail, NavUser). One header per screen through useScreenHeader (title, subtitle, back, up to two actions, the rest behind « … »). The account menu holds « Améliorer l'app » (the improve agent), the app's own entries and sign out. AppSheet is the one bottom sheet (one open at a time, Back closes it). It mounts the AgentLayer: one agent's PiChat above the app (phone: a drawer with peek, half and full snap points; wide: a right panel), the improve agent in the same layer, optional push-to-talk and point mode. Also useAgentContext and readAgentContext (the screen on show travels as `context` with each submit) and useBackLayer, the one Back manager. Built on explicitly pinned Base UI drawer and dropdown-menu recipes, plus the sidebar and avatar of the host's own shadcn style.",
|
|
837
935
|
"dependencies": [
|
|
838
|
-
"@hachej/boring-feedback@^0.4.
|
|
839
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
936
|
+
"@hachej/boring-feedback@^0.4.2",
|
|
937
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
840
938
|
"@base-ui/react@^1.9.0",
|
|
841
939
|
"react@^19.0.0",
|
|
842
940
|
"react-dom@^19.0.0",
|
|
843
941
|
"lucide-react@^1.51.0"
|
|
844
942
|
],
|
|
845
943
|
"registryDependencies": [
|
|
846
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
847
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
848
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
849
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
850
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
944
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
945
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/dock.json",
|
|
946
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/feedback.json",
|
|
947
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
948
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
851
949
|
"drawer",
|
|
852
950
|
"sidebar",
|
|
853
951
|
"avatar",
|
|
@@ -972,8 +1070,8 @@
|
|
|
972
1070
|
"title": "Viewers",
|
|
973
1071
|
"description": "The standard viewer top bar (title, status, viewer controls, Refresh, Share, Copy, Download, Open in new tab, Close, overflow menu) with Tailwind panes over it: the Markdown editor with a formatting toolbar and prose styling, the passive HTML preview and source editor, an image viewer with zoom and pan, and a PDF viewer. Owned, editable source over the borrowed controllers; no AI SDK.",
|
|
974
1072
|
"dependencies": [
|
|
975
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
976
|
-
"@hachej/boring-files@^0.4.
|
|
1073
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
1074
|
+
"@hachej/boring-files@^0.4.2",
|
|
977
1075
|
"react@^19.0.0",
|
|
978
1076
|
"react-dom@^19.0.0",
|
|
979
1077
|
"marked@^17.0.6",
|
|
@@ -993,12 +1091,12 @@
|
|
|
993
1091
|
"pdfjs-dist@6.3.289"
|
|
994
1092
|
],
|
|
995
1093
|
"registryDependencies": [
|
|
996
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
997
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
998
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
1094
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
1095
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
1096
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
999
1097
|
"button",
|
|
1000
1098
|
"toggle",
|
|
1001
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
1099
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/version-history.json",
|
|
1002
1100
|
"toggle-group",
|
|
1003
1101
|
"dialog",
|
|
1004
1102
|
"textarea",
|
|
@@ -1435,8 +1533,8 @@
|
|
|
1435
1533
|
"lucide-react@^1.51.0"
|
|
1436
1534
|
],
|
|
1437
1535
|
"registryDependencies": [
|
|
1438
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
1439
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
1536
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
1537
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
1440
1538
|
"button",
|
|
1441
1539
|
"input",
|
|
1442
1540
|
"label",
|
|
@@ -1457,9 +1555,9 @@
|
|
|
1457
1555
|
"title": "Feedback",
|
|
1458
1556
|
"description": "Feedback from the chat composer: one Feedback button starts feedback mode on the application page (hover, click to pin a numbered note, hold ⌥ to use the app, optional voice), and one chip carries the notes to the next message. FeedbackBar, NoteBubble, FeedbackChip with its review, useComposerFeedback for the pi-chat composer, and PickerOverlay styles. Optional, not mounted by default: PointButton, AnnotateSheet, FeedbackList and FeedbackReport. Picking, masking, anchoring and placement stay in @hachej/boring-feedback/page and /ui, so restyling cannot weaken them.",
|
|
1459
1557
|
"dependencies": [
|
|
1460
|
-
"@hachej/boring-feedback@^0.4.
|
|
1461
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
1462
|
-
"@hachej/boring-files@^0.4.
|
|
1558
|
+
"@hachej/boring-feedback@^0.4.2",
|
|
1559
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
1560
|
+
"@hachej/boring-files@^0.4.2",
|
|
1463
1561
|
"react@^19.0.0",
|
|
1464
1562
|
"react-dom@^19.0.0",
|
|
1465
1563
|
"lucide-react@^1.51.0"
|
|
@@ -1957,8 +2055,8 @@
|
|
|
1957
2055
|
}
|
|
1958
2056
|
},
|
|
1959
2057
|
"registryDependencies": [
|
|
1960
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
1961
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2058
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
2059
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
1962
2060
|
"button",
|
|
1963
2061
|
"toggle",
|
|
1964
2062
|
"badge",
|
|
@@ -1973,7 +2071,7 @@
|
|
|
1973
2071
|
"title": "Feedback preview",
|
|
1974
2072
|
"description": "PreviewBanner: a live, reversible preview of a change in the page (Approve / Discard) over `@hachej/boring-feedback/preview`, whose subagent calls models through a host gateway. Separate from `feedback` so annotation-only apps do not install the model SDK; install `feedback` first (its styles cover the banner).",
|
|
1975
2073
|
"dependencies": [
|
|
1976
|
-
"@hachej/boring-feedback@^0.4.
|
|
2074
|
+
"@hachej/boring-feedback@^0.4.2",
|
|
1977
2075
|
"@earendil-works/pi-ai@~1.2.0",
|
|
1978
2076
|
"react@^19.0.0"
|
|
1979
2077
|
],
|
|
@@ -1997,8 +2095,8 @@
|
|
|
1997
2095
|
"title": "Consumer task-list viewer",
|
|
1998
2096
|
"description": "A consumer-defined task-list schema and controller over the shared text buffer, with a restylable borrowed React renderer.",
|
|
1999
2097
|
"dependencies": [
|
|
2000
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
2001
|
-
"@hachej/boring-files@^0.4.
|
|
2098
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
2099
|
+
"@hachej/boring-files@^0.4.2",
|
|
2002
2100
|
"react@^19.0.0",
|
|
2003
2101
|
"react-dom@^19.0.0",
|
|
2004
2102
|
"zod@^4.6.5"
|
|
@@ -2054,12 +2152,12 @@
|
|
|
2054
2152
|
"title": "Version history rows",
|
|
2055
2153
|
"description": "Shared view-only version rows and menu metadata with relative time, provenance and Current. No file reads, publication or restoration.",
|
|
2056
2154
|
"dependencies": [
|
|
2057
|
-
"@hachej/boring-files@^0.4.
|
|
2155
|
+
"@hachej/boring-files@^0.4.2",
|
|
2058
2156
|
"react@^19.0.0"
|
|
2059
2157
|
],
|
|
2060
2158
|
"registryDependencies": [
|
|
2061
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2062
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2159
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
2160
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
2063
2161
|
"button"
|
|
2064
2162
|
],
|
|
2065
2163
|
"files": [
|
|
@@ -2076,15 +2174,15 @@
|
|
|
2076
2174
|
"title": "File tree",
|
|
2077
2175
|
"description": "Browse, search, upload and inspect retained versions through one revisionProvider binding. Uses the consumer's shadcn Button and dropdown-menu with shared version-history rows; Base UI style only.",
|
|
2078
2176
|
"dependencies": [
|
|
2079
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
2080
|
-
"@hachej/boring-files@^0.4.
|
|
2177
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
2178
|
+
"@hachej/boring-files@^0.4.2",
|
|
2081
2179
|
"react@^19.0.0",
|
|
2082
2180
|
"lucide-react@^1.51.0"
|
|
2083
2181
|
],
|
|
2084
2182
|
"registryDependencies": [
|
|
2085
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2086
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2087
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2183
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
2184
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
2185
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/version-history.json",
|
|
2088
2186
|
"button",
|
|
2089
2187
|
"dropdown-menu",
|
|
2090
2188
|
"collapsible",
|
|
@@ -2108,20 +2206,20 @@
|
|
|
2108
2206
|
"title": "Documents: the Library, a file and its revisions",
|
|
2109
2207
|
"description": "The workspace's Library as the list, the chosen file in its viewer and its retained revisions beside it (an older one opens read-only). DocumentSheet opens one document over the app for a host's « Voir la fiche », with an optional « Toutes les fiches ». Every read goes through one revisionProvider binding.",
|
|
2110
2208
|
"dependencies": [
|
|
2111
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
2112
|
-
"@hachej/boring-files@^0.4.
|
|
2209
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
2210
|
+
"@hachej/boring-files@^0.4.2",
|
|
2113
2211
|
"react@^19.0.0",
|
|
2114
2212
|
"lucide-react@^1.51.0"
|
|
2115
2213
|
],
|
|
2116
2214
|
"registryDependencies": [
|
|
2117
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2118
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2119
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2120
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2121
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2122
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2123
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2124
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
2215
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
2216
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/utils.json",
|
|
2217
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
2218
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-chat.json",
|
|
2219
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/pi-app.json",
|
|
2220
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/app-shell.json",
|
|
2221
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/file-tree.json",
|
|
2222
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/viewers.json",
|
|
2125
2223
|
"drawer",
|
|
2126
2224
|
"button",
|
|
2127
2225
|
"scroll-area",
|
package/r/task-list-viewer.json
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"title": "Consumer task-list viewer",
|
|
5
5
|
"description": "A consumer-defined task-list schema and controller over the shared text buffer, with a restylable borrowed React renderer.",
|
|
6
6
|
"dependencies": [
|
|
7
|
-
"@hachej/boring-ui-kit@^0.4.
|
|
8
|
-
"@hachej/boring-files@^0.4.
|
|
7
|
+
"@hachej/boring-ui-kit@^0.4.2",
|
|
8
|
+
"@hachej/boring-files@^0.4.2",
|
|
9
9
|
"react@^19.0.0",
|
|
10
10
|
"react-dom@^19.0.0",
|
|
11
11
|
"zod@^4.6.5"
|
package/r/utils.json
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "utils",
|
|
4
4
|
"title": "Shared helpers",
|
|
5
|
-
"description": "The class merge helper `cn` and `copyText` (host callback, Clipboard API, then a selection copy that works over plain HTTP) shared by every Tailwind item, installed once in components/utils/.",
|
|
5
|
+
"description": "The class merge helper `cn` and `copyText` (host callback, Clipboard API, then a selection copy that works over plain HTTP) shared by every Tailwind item, and the app shell's header slot for an embedded page's controls (`ScreenHeaderSlotContext`), installed once in components/utils/.",
|
|
6
6
|
"dependencies": [
|
|
7
7
|
"clsx@^2.1.1",
|
|
8
|
-
"tailwind-merge@^3.7.0"
|
|
8
|
+
"tailwind-merge@^3.7.0",
|
|
9
|
+
"react@^19.0.0"
|
|
9
10
|
],
|
|
10
11
|
"files": [
|
|
11
12
|
{
|
|
@@ -13,6 +14,12 @@
|
|
|
13
14
|
"content": "import { clsx } from 'clsx';\nimport type { ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string { return twMerge(clsx(inputs)); }\n\n/** Thrown when no automatic copy worked; `text` is what the person must copy by hand (a viewer shows it selected). */\nexport class ManualCopyError extends Error {\n readonly text: string;\n constructor(text: string) { super('Copy the text by hand'); this.name = 'ManualCopyError'; this.text = text; }\n}\n\n/**\n * Copies `text` using the host's callback when given, else the async Clipboard API (secure contexts only), else a hidden\n * textarea and `document.execCommand('copy')` (works over plain HTTP). Throws `ManualCopyError` when none worked.\n * This is the one place this item touches the clipboard; `npm run check` keeps it that way.\n */\nexport async function copyText(text: string, onCopy?: (text: string) => Promise<void>): Promise<void> {\n if (onCopy) return onCopy(text);\n try { const clipboard = globalThis.navigator?.clipboard; if (clipboard) { await clipboard.writeText(text); return; } }\n catch { /* denied or unfocused: use the selection route */ }\n const doc = globalThis.document;\n if (doc?.body && typeof doc.execCommand === 'function') {\n const area = doc.createElement('textarea');\n area.value = text;\n area.setAttribute('readonly', '');\n area.style.cssText = 'position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none';\n const focus = doc.activeElement instanceof HTMLElement ? doc.activeElement : undefined;\n doc.body.append(area);\n try { area.select(); area.setSelectionRange(0, text.length); if (doc.execCommand('copy')) return; }\n catch { /* fall through */ }\n finally { area.remove(); focus?.focus({ preventScroll: true }); }\n }\n throw new ManualCopyError(text);\n}\n\n/**\n * A block's `labels` or `icons`: `defaults` with each partial override on top, later ones winning. A key an override leaves `undefined`\n * keeps the value below it, so a host can pass `{ title: maybe }` safely.\n */\nexport function withDefaults<T extends object>(defaults: T, ...overrides: readonly (Partial<T> | undefined)[]): T {\n const merged: Record<string, unknown> = { ...defaults as Record<string, unknown> };\n for (const override of overrides) for (const [key, value] of Object.entries(override ?? {})) if (value !== undefined) merged[key] = value;\n return merged as T;\n}\n",
|
|
14
15
|
"type": "registry:lib",
|
|
15
16
|
"target": "components/utils/utils.ts"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "registry/utils/screen-header-slot.ts",
|
|
20
|
+
"content": "// Where an embedded page puts its own header controls when a host header already exists. The app shell (`app-shell`) provides the\n// element of its screen header to the screen on show; `AgentWorkspace layout=\"embedded\"` (`pi-app`) renders its bar's controls there\n// (a React portal), so the page has one header row. Null outside a shell screen on show: the page keeps its own bar. Host concern: Pi has\n// no layout. It lives here because both items depend on `utils` and neither imports the other.\nimport { createContext, useContext } from 'react';\n\nexport const ScreenHeaderSlotContext = createContext<HTMLElement | null>(null);\n\n/** The host header's slot for the calling screen's controls, or null when there is none. */\nexport const useScreenHeaderSlot = (): HTMLElement | null => useContext(ScreenHeaderSlotContext);\n",
|
|
21
|
+
"type": "registry:lib",
|
|
22
|
+
"target": "components/utils/screen-header-slot.ts"
|
|
16
23
|
}
|
|
17
24
|
],
|
|
18
25
|
"type": "registry:lib"
|
package/r/version-history.json
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
"title": "Version history rows",
|
|
5
5
|
"description": "Shared view-only version rows and menu metadata with relative time, provenance and Current. No file reads, publication or restoration.",
|
|
6
6
|
"dependencies": [
|
|
7
|
-
"@hachej/boring-files@^0.4.
|
|
7
|
+
"@hachej/boring-files@^0.4.2",
|
|
8
8
|
"react@^19.0.0"
|
|
9
9
|
],
|
|
10
10
|
"registryDependencies": [
|
|
11
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
12
|
-
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.
|
|
11
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/theme.json",
|
|
12
|
+
"https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.2/r/button.json",
|
|
13
13
|
"button"
|
|
14
14
|
],
|
|
15
15
|
"files": [
|