@px-ui/ui 1.0.10 → 1.1.0
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/{avatar-CbuG-kqF.d.ts → avatar-DTxH_yTY.d.ts} +6 -6
- package/dist/{avatar-CbuG-kqF.d.ts.map → avatar-DTxH_yTY.d.ts.map} +1 -1
- package/dist/{avatar-Bb0tx0Hn.js → avatar-DnDnGmSj.js} +3 -3
- package/dist/{avatar-Bb0tx0Hn.js.map → avatar-DnDnGmSj.js.map} +1 -1
- package/dist/{button-BkzvdmIX.d.ts → button-Cfd9X6pX.d.ts} +7 -7
- package/dist/{button-BkzvdmIX.d.ts.map → button-Cfd9X6pX.d.ts.map} +1 -1
- package/dist/{button-hBUFMmsZ.js → button-DnHwqwy0.js} +2 -2
- package/dist/{button-hBUFMmsZ.js.map → button-DnHwqwy0.js.map} +1 -1
- package/dist/checkbox-CwkX29tL.js +22 -0
- package/dist/checkbox-CwkX29tL.js.map +1 -0
- package/dist/collapsible-DsrYXIW5.js +28 -0
- package/dist/collapsible-DsrYXIW5.js.map +1 -0
- package/dist/{combobox-CHkmVNZ2.js → combobox-5IAivvXw.js} +8 -8
- package/dist/{combobox-CHkmVNZ2.js.map → combobox-5IAivvXw.js.map} +1 -1
- package/dist/{combobox-C5txQ2La.d.ts → combobox-BBMYGrI2.d.ts} +19 -19
- package/dist/{combobox-C5txQ2La.d.ts.map → combobox-BBMYGrI2.d.ts.map} +1 -1
- package/dist/components/accordion.d.ts +5 -5
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/alert-dialog.d.ts +14 -14
- package/dist/components/alert-dialog.js +2 -2
- package/dist/components/alert.d.ts +7 -7
- package/dist/components/alert.js +1 -1
- package/dist/components/aspect-ratio.d.ts +2 -2
- package/dist/components/aspect-ratio.d.ts.map +1 -1
- package/dist/components/aspect-ratio.js +1 -1
- package/dist/components/attachment.d.ts +64 -0
- package/dist/components/attachment.d.ts.map +1 -0
- package/dist/components/attachment.js +107 -0
- package/dist/components/attachment.js.map +1 -0
- package/dist/components/avatar-group.d.ts +4 -4
- package/dist/components/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar-group.js +4 -4
- package/dist/components/avatar.d.ts +1 -1
- package/dist/components/avatar.js +3 -3
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/breadcrumb.d.ts +7 -7
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/bubble.d.ts +39 -0
- package/dist/components/bubble.d.ts.map +1 -0
- package/dist/components/bubble.js +76 -0
- package/dist/components/bubble.js.map +1 -0
- package/dist/components/button-group.d.ts +6 -6
- package/dist/components/button-group.js +2 -2
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.js +2 -2
- package/dist/components/calendar.d.ts +4 -4
- package/dist/components/calendar.js +2 -2
- package/dist/components/card.d.ts +8 -8
- package/dist/components/card.js +1 -1
- package/dist/components/carousel.d.ts +7 -7
- package/dist/components/carousel.js +2 -2
- package/dist/components/chart.d.ts +5 -5
- package/dist/components/chart.js +1 -1
- package/dist/components/checkbox.d.ts +2 -2
- package/dist/components/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox.js +3 -21
- package/dist/components/collapsible.d.ts +4 -4
- package/dist/components/collapsible.js +3 -27
- package/dist/components/combobox.d.ts +2 -2
- package/dist/components/combobox.js +11 -11
- package/dist/components/command.d.ts +11 -11
- package/dist/components/command.js +6 -6
- package/dist/components/context-menu.d.ts +16 -16
- package/dist/components/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu.js +1 -1
- package/dist/components/currency-select-field.d.ts +4 -4
- package/dist/components/currency-select-field.js +11 -11
- package/dist/components/dialog.d.ts +11 -11
- package/dist/components/dialog.js +3 -3
- package/dist/components/direction.js +1 -1
- package/dist/components/drawer.d.ts +11 -11
- package/dist/components/drawer.js +1 -1
- package/dist/components/dropdown-menu.d.ts +1 -1
- package/dist/components/dropdown-menu.js +2 -2
- package/dist/components/editor-output.d.ts +87 -0
- package/dist/components/editor-output.d.ts.map +1 -0
- package/dist/components/editor-output.js +158 -0
- package/dist/components/editor-output.js.map +1 -0
- package/dist/components/empty.d.ts +9 -9
- package/dist/components/empty.js +3 -61
- package/dist/components/field.d.ts +15 -15
- package/dist/components/field.js +3 -3
- package/dist/components/file-upload-field.d.ts +3 -3
- package/dist/components/file-upload-field.js +5 -5
- package/dist/components/file-upload.d.ts +3 -3
- package/dist/components/file-upload.js +4 -4
- package/dist/components/hover-card.d.ts +4 -4
- package/dist/components/hover-card.js +1 -1
- package/dist/components/icon.d.ts +83 -0
- package/dist/components/icon.d.ts.map +1 -0
- package/dist/components/icon.js +188 -0
- package/dist/components/icon.js.map +1 -0
- package/dist/components/input-group.d.ts +9 -9
- package/dist/components/input-group.js +5 -5
- package/dist/components/input-otp.d.ts +5 -5
- package/dist/components/input-otp.js +1 -1
- package/dist/components/input.d.ts +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/item.d.ts +14 -14
- package/dist/components/item.d.ts.map +1 -1
- package/dist/components/item.js +2 -2
- package/dist/components/kbd.d.ts +3 -3
- package/dist/components/kbd.js +1 -1
- package/dist/components/label.d.ts +1 -1
- package/dist/components/label.js +2 -2
- package/dist/components/marker.d.ts +27 -0
- package/dist/components/marker.d.ts.map +1 -0
- package/dist/components/marker.js +46 -0
- package/dist/components/marker.js.map +1 -0
- package/dist/components/menubar.d.ts +18 -18
- package/dist/components/menubar.d.ts.map +1 -1
- package/dist/components/menubar.js +7 -7
- package/dist/components/menubar.js.map +1 -1
- package/dist/components/message-scroller.d.ts +36 -0
- package/dist/components/message-scroller.d.ts.map +1 -0
- package/dist/components/message-scroller.js +63 -0
- package/dist/components/message-scroller.js.map +1 -0
- package/dist/components/message.d.ts +34 -0
- package/dist/components/message.d.ts.map +1 -0
- package/dist/components/message.js +52 -0
- package/dist/components/message.js.map +1 -0
- package/dist/components/native-select.d.ts +4 -4
- package/dist/components/native-select.js +1 -1
- package/dist/components/navigation-menu.d.ts +11 -11
- package/dist/components/navigation-menu.js +1 -1
- package/dist/components/pagination.d.ts +9 -9
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/pagination.js +2 -2
- package/dist/components/phone-input.d.ts +2 -2
- package/dist/components/phone-input.js +1 -1
- package/dist/components/popover.d.ts +7 -7
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/popover.js +2 -2
- package/dist/components/progress.d.ts +6 -6
- package/dist/components/progress.js +1 -1
- package/dist/components/radio-group.d.ts +3 -3
- package/dist/components/radio-group.js +1 -1
- package/dist/components/resizable.d.ts +4 -4
- package/dist/components/resizable.js +1 -1
- package/dist/components/rich-text-editor.d.ts +204 -0
- package/dist/components/rich-text-editor.d.ts.map +1 -0
- package/dist/components/rich-text-editor.js +359 -0
- package/dist/components/rich-text-editor.js.map +1 -0
- package/dist/components/scroll-area.d.ts +13 -3
- package/dist/components/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area.js +3 -38
- package/dist/components/select.d.ts +10 -10
- package/dist/components/select.js +1 -1
- package/dist/components/separator.d.ts +1 -1
- package/dist/components/separator.js +2 -2
- package/dist/components/sheet.d.ts +9 -9
- package/dist/components/sheet.js +3 -3
- package/dist/components/sidebar.d.ts +26 -26
- package/dist/components/sidebar.d.ts.map +1 -1
- package/dist/components/sidebar.js +8 -8
- package/dist/components/skeleton.d.ts +2 -2
- package/dist/components/skeleton.js +2 -2
- package/dist/components/slider.d.ts +2 -2
- package/dist/components/slider.js +1 -1
- package/dist/components/sortable-list.d.ts +153 -0
- package/dist/components/sortable-list.d.ts.map +1 -0
- package/dist/components/sortable-list.js +191 -0
- package/dist/components/sortable-list.js.map +1 -0
- package/dist/components/spinner.d.ts +2 -2
- package/dist/components/spinner.js +2 -2
- package/dist/components/stepper.d.ts +171 -0
- package/dist/components/stepper.d.ts.map +1 -0
- package/dist/components/stepper.js +281 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/switch.d.ts +2 -2
- package/dist/components/switch.js +1 -1
- package/dist/components/table.d.ts +9 -9
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.d.ts +8 -8
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/textarea.d.ts +2 -2
- package/dist/components/textarea.js +2 -2
- package/dist/components/toast.d.ts +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/toggle-group.d.ts +4 -4
- package/dist/components/toggle-group.js +2 -2
- package/dist/components/toggle.d.ts +1 -1
- package/dist/components/toggle.js +2 -2
- package/dist/components/tooltip.d.ts +1 -1
- package/dist/components/tooltip.js +2 -2
- package/dist/components/tree-select.d.ts +192 -0
- package/dist/components/tree-select.d.ts.map +1 -0
- package/dist/components/tree-select.js +421 -0
- package/dist/components/tree-select.js.map +1 -0
- package/dist/{dialog-DrdXva1a.js → dialog-DuGJUPQl.js} +3 -3
- package/dist/{dialog-DrdXva1a.js.map → dialog-DuGJUPQl.js.map} +1 -1
- package/dist/{dropdown-menu-CcumvwhM.js → dropdown-menu-BWEfcvmP.js} +19 -19
- package/dist/{dropdown-menu-CcumvwhM.js.map → dropdown-menu-BWEfcvmP.js.map} +1 -1
- package/dist/{dropdown-menu-BC7zFA2L.d.ts → dropdown-menu-DGgfWYrK.d.ts} +17 -17
- package/dist/{dropdown-menu-BC7zFA2L.d.ts.map → dropdown-menu-DGgfWYrK.d.ts.map} +1 -1
- package/dist/empty-U4zrLmFU.js +62 -0
- package/dist/empty-U4zrLmFU.js.map +1 -0
- package/dist/{file-upload-DoGu67Bu.d.ts → file-upload-BvAtAxLc.d.ts} +10 -10
- package/dist/{file-upload-DoGu67Bu.d.ts.map → file-upload-BvAtAxLc.d.ts.map} +1 -1
- package/dist/{file-upload-DeCIv13t.js → file-upload-DU5FAkHm.js} +4 -4
- package/dist/{file-upload-DeCIv13t.js.map → file-upload-DU5FAkHm.js.map} +1 -1
- package/dist/hooks/use-async-options.d.ts +1 -1
- package/dist/hooks/use-async-options.js +1 -1
- package/dist/hooks/use-debounce.js +1 -1
- package/dist/hooks/use-file-upload.d.ts +1 -1
- package/dist/hooks/use-file-upload.js +1 -1
- package/dist/hooks/use-infinite-scroll.d.ts +1 -1
- package/dist/hooks/use-infinite-scroll.js +2 -2
- package/dist/hooks/use-intersection-observer.d.ts +1 -1
- package/dist/hooks/use-intersection-observer.js +1 -1
- package/dist/hooks/use-mobile.js +1 -1
- package/dist/{input-CoP6CeA5.d.ts → input-BExbcSu4.d.ts} +3 -3
- package/dist/input-BExbcSu4.d.ts.map +1 -0
- package/dist/{input-group-DqEkmpXW.js → input-group-B5PMRYld.js} +5 -5
- package/dist/{input-group-DqEkmpXW.js.map → input-group-B5PMRYld.js.map} +1 -1
- package/dist/{input-8jqdnUZl.js → input-jIoNIdLQ.js} +2 -2
- package/dist/{input-8jqdnUZl.js.map → input-jIoNIdLQ.js.map} +1 -1
- package/dist/label-BFg2hxuL.d.ts +11 -0
- package/dist/label-BFg2hxuL.d.ts.map +1 -0
- package/dist/{label-AaH9ZYCZ.js → label-DsRhOKY_.js} +2 -2
- package/dist/{label-AaH9ZYCZ.js.map → label-DsRhOKY_.js.map} +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/{popover-C9D43EuT.js → popover-BGkU46G7.js} +2 -2
- package/dist/{popover-C9D43EuT.js.map → popover-BGkU46G7.js.map} +1 -1
- package/dist/providers/px-ui-provider.d.ts +4 -4
- package/dist/providers/px-ui-provider.d.ts.map +1 -1
- package/dist/providers/px-ui-provider.js +4 -4
- package/dist/scroll-area-mNVMQ0Of.js +40 -0
- package/dist/scroll-area-mNVMQ0Of.js.map +1 -0
- package/dist/{separator-BS3ilczC.js → separator-D0bew2D_.js} +2 -2
- package/dist/{separator-BS3ilczC.js.map → separator-D0bew2D_.js.map} +1 -1
- package/dist/{separator-D0hWdzUT.d.ts → separator-Df76guaT.d.ts} +3 -3
- package/dist/{separator-D0hWdzUT.d.ts.map → separator-Df76guaT.d.ts.map} +1 -1
- package/dist/{sheet-CLjNDrfL.js → sheet-BB23q6wd.js} +3 -3
- package/dist/{sheet-CLjNDrfL.js.map → sheet-BB23q6wd.js.map} +1 -1
- package/dist/{skeleton-BcIxI5Wq.js → skeleton-knxLhbA5.js} +2 -2
- package/dist/{skeleton-BcIxI5Wq.js.map → skeleton-knxLhbA5.js.map} +1 -1
- package/dist/{spinner-Bo0sUZEg.js → spinner-9MdgLDTZ.js} +2 -2
- package/dist/{spinner-Bo0sUZEg.js.map → spinner-9MdgLDTZ.js.map} +1 -1
- package/dist/styles.css +665 -1
- package/dist/{textarea-Cq0o323P.js → textarea-hZg0gA8u.js} +2 -2
- package/dist/{textarea-Cq0o323P.js.map → textarea-hZg0gA8u.js.map} +1 -1
- package/dist/{toast-COWAQbIk.js → toast-BdxoP8vz.js} +2 -2
- package/dist/{toast-COWAQbIk.js.map → toast-BdxoP8vz.js.map} +1 -1
- package/dist/{toast-DkzzdXGU.d.ts → toast-C5FRpq1P.d.ts} +4 -4
- package/dist/{toast-DkzzdXGU.d.ts.map → toast-C5FRpq1P.d.ts.map} +1 -1
- package/dist/{toggle-lqIyJptS.js → toggle-BZXrLBLK.js} +2 -2
- package/dist/{toggle-lqIyJptS.js.map → toggle-BZXrLBLK.js.map} +1 -1
- package/dist/{toggle-Dq3ftPFj.d.ts → toggle-CyTngkhT.d.ts} +6 -6
- package/dist/{toggle-Dq3ftPFj.d.ts.map → toggle-CyTngkhT.d.ts.map} +1 -1
- package/dist/{tooltip-DBoqfN9z.d.ts → tooltip-CkX3CD71.d.ts} +6 -6
- package/dist/{tooltip-DBoqfN9z.d.ts.map → tooltip-CkX3CD71.d.ts.map} +1 -1
- package/dist/{tooltip-DkPxCJIL.js → tooltip-Dsfn_zZD.js} +2 -2
- package/dist/{tooltip-DkPxCJIL.js.map → tooltip-Dsfn_zZD.js.map} +1 -1
- package/dist/{use-async-options-Cu5T43vj.d.ts → use-async-options-DdyHJxHh.d.ts} +1 -1
- package/dist/{use-async-options-Cu5T43vj.d.ts.map → use-async-options-DdyHJxHh.d.ts.map} +1 -1
- package/dist/{use-async-options-CcsImGX4.js → use-async-options-tueAuVs_.js} +1 -1
- package/dist/{use-async-options-CcsImGX4.js.map → use-async-options-tueAuVs_.js.map} +1 -1
- package/dist/{use-debounce-_qaEZqtt.js → use-debounce-7gIeOwla.js} +1 -1
- package/dist/{use-debounce-_qaEZqtt.js.map → use-debounce-7gIeOwla.js.map} +1 -1
- package/dist/{use-file-upload-yy-xLBtn.d.ts → use-file-upload-Bc7CyQ7O.d.ts} +1 -1
- package/dist/{use-file-upload-yy-xLBtn.d.ts.map → use-file-upload-Bc7CyQ7O.d.ts.map} +1 -1
- package/dist/{use-file-upload-Dxrej28u.js → use-file-upload-DQD1vY_Z.js} +1 -1
- package/dist/{use-file-upload-Dxrej28u.js.map → use-file-upload-DQD1vY_Z.js.map} +1 -1
- package/dist/{use-infinite-scroll-CpbhGGT5.js → use-infinite-scroll-HpeMA2MK.js} +2 -2
- package/dist/{use-infinite-scroll-CpbhGGT5.js.map → use-infinite-scroll-HpeMA2MK.js.map} +1 -1
- package/dist/{use-intersection-observer-C2xDq2SW.d.ts → use-intersection-observer-DNPextJs.d.ts} +1 -1
- package/dist/{use-intersection-observer-C2xDq2SW.d.ts.map → use-intersection-observer-DNPextJs.d.ts.map} +1 -1
- package/dist/{use-intersection-observer-CZfnep4z.js → use-intersection-observer-rlKEjyL1.js} +1 -1
- package/dist/{use-intersection-observer-CZfnep4z.js.map → use-intersection-observer-rlKEjyL1.js.map} +1 -1
- package/dist/{use-mobile-l5ebOdQl.js → use-mobile-DUqQzj2D.js} +1 -1
- package/dist/{use-mobile-l5ebOdQl.js.map → use-mobile-DUqQzj2D.js.map} +1 -1
- package/dist/{utils-mWJR2N24.js → utils-DUlptRpf.js} +1 -1
- package/dist/{utils-mWJR2N24.js.map → utils-DUlptRpf.js.map} +1 -1
- package/package.json +81 -1
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/collapsible.js.map +0 -1
- package/dist/components/empty.js.map +0 -1
- package/dist/components/scroll-area.js.map +0 -1
- package/dist/input-CoP6CeA5.d.ts.map +0 -1
- package/dist/label-Dw4Hcz5k.d.ts +0 -11
- package/dist/label-Dw4Hcz5k.d.ts.map +0 -1
- /package/dist/{direction-BKSh6e6q.js → direction-DFPbwDSF.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { t as cn } from "../utils-
|
|
2
|
-
import "../button-
|
|
3
|
-
import "../input-
|
|
4
|
-
import "../textarea-
|
|
5
|
-
import { n as InputGroupAddon } from "../input-group-
|
|
6
|
-
import "../spinner-
|
|
7
|
-
import "../use-async-options-
|
|
8
|
-
import "../use-intersection-observer-
|
|
9
|
-
import "../use-infinite-scroll-
|
|
10
|
-
import "../use-debounce-
|
|
11
|
-
import { f as ComboboxList, l as ComboboxInput, m as ComboboxStatus, s as ComboboxContent, t as Combobox, u as ComboboxItem } from "../combobox-
|
|
1
|
+
import { t as cn } from "../utils-DUlptRpf.js";
|
|
2
|
+
import "../button-DnHwqwy0.js";
|
|
3
|
+
import "../input-jIoNIdLQ.js";
|
|
4
|
+
import "../textarea-hZg0gA8u.js";
|
|
5
|
+
import { n as InputGroupAddon } from "../input-group-B5PMRYld.js";
|
|
6
|
+
import "../spinner-9MdgLDTZ.js";
|
|
7
|
+
import "../use-async-options-tueAuVs_.js";
|
|
8
|
+
import "../use-intersection-observer-rlKEjyL1.js";
|
|
9
|
+
import "../use-infinite-scroll-HpeMA2MK.js";
|
|
10
|
+
import "../use-debounce-7gIeOwla.js";
|
|
11
|
+
import { f as ComboboxList, l as ComboboxInput, m as ComboboxStatus, s as ComboboxContent, t as Combobox, u as ComboboxItem } from "../combobox-5IAivvXw.js";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
import "react";
|
|
14
14
|
import ReactCountryFlag from "react-country-flag";
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime137 from "react/jsx-runtime";
|
|
2
2
|
import * as React$1 from "react";
|
|
3
3
|
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
4
4
|
|
|
5
5
|
//#region src/components/dialog.d.ts
|
|
6
6
|
declare function Dialog({
|
|
7
7
|
...props
|
|
8
|
-
}: Dialog$1.Root.Props):
|
|
8
|
+
}: Dialog$1.Root.Props): react_jsx_runtime137.JSX.Element;
|
|
9
9
|
declare function DialogTrigger({
|
|
10
10
|
...props
|
|
11
|
-
}: Dialog$1.Trigger.Props):
|
|
11
|
+
}: Dialog$1.Trigger.Props): react_jsx_runtime137.JSX.Element;
|
|
12
12
|
declare function DialogPortal({
|
|
13
13
|
...props
|
|
14
|
-
}: Dialog$1.Portal.Props):
|
|
14
|
+
}: Dialog$1.Portal.Props): react_jsx_runtime137.JSX.Element;
|
|
15
15
|
declare function DialogClose({
|
|
16
16
|
...props
|
|
17
|
-
}: Dialog$1.Close.Props):
|
|
17
|
+
}: Dialog$1.Close.Props): react_jsx_runtime137.JSX.Element;
|
|
18
18
|
declare function DialogOverlay({
|
|
19
19
|
className,
|
|
20
20
|
...props
|
|
21
|
-
}: Dialog$1.Backdrop.Props):
|
|
21
|
+
}: Dialog$1.Backdrop.Props): react_jsx_runtime137.JSX.Element;
|
|
22
22
|
declare function DialogContent({
|
|
23
23
|
className,
|
|
24
24
|
children,
|
|
@@ -26,11 +26,11 @@ declare function DialogContent({
|
|
|
26
26
|
...props
|
|
27
27
|
}: Dialog$1.Popup.Props & {
|
|
28
28
|
showCloseButton?: boolean;
|
|
29
|
-
}):
|
|
29
|
+
}): react_jsx_runtime137.JSX.Element;
|
|
30
30
|
declare function DialogHeader({
|
|
31
31
|
className,
|
|
32
32
|
...props
|
|
33
|
-
}: React$1.ComponentProps<"div">):
|
|
33
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime137.JSX.Element;
|
|
34
34
|
declare function DialogFooter({
|
|
35
35
|
className,
|
|
36
36
|
showCloseButton,
|
|
@@ -38,15 +38,15 @@ declare function DialogFooter({
|
|
|
38
38
|
...props
|
|
39
39
|
}: React$1.ComponentProps<"div"> & {
|
|
40
40
|
showCloseButton?: boolean;
|
|
41
|
-
}):
|
|
41
|
+
}): react_jsx_runtime137.JSX.Element;
|
|
42
42
|
declare function DialogTitle({
|
|
43
43
|
className,
|
|
44
44
|
...props
|
|
45
|
-
}: Dialog$1.Title.Props):
|
|
45
|
+
}: Dialog$1.Title.Props): react_jsx_runtime137.JSX.Element;
|
|
46
46
|
declare function DialogDescription({
|
|
47
47
|
className,
|
|
48
48
|
...props
|
|
49
|
-
}: Dialog$1.Description.Props):
|
|
49
|
+
}: Dialog$1.Description.Props): react_jsx_runtime137.JSX.Element;
|
|
50
50
|
/**
|
|
51
51
|
* Creates a handle that links a `Dialog` to one or more `DialogTrigger`s via
|
|
52
52
|
* their `handle` prop. Use it for detached triggers (a trigger rendered outside
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../utils-
|
|
2
|
-
import "../button-
|
|
3
|
-
import { a as DialogFooter, c as DialogPortal, d as createDialogHandle, i as DialogDescription, l as DialogTitle, n as DialogClose, o as DialogHeader, r as DialogContent, s as DialogOverlay, t as Dialog, u as DialogTrigger } from "../dialog-
|
|
1
|
+
import "../utils-DUlptRpf.js";
|
|
2
|
+
import "../button-DnHwqwy0.js";
|
|
3
|
+
import { a as DialogFooter, c as DialogPortal, d as createDialogHandle, i as DialogDescription, l as DialogTitle, n as DialogClose, o as DialogHeader, r as DialogContent, s as DialogOverlay, t as Dialog, u as DialogTrigger } from "../dialog-DuGJUPQl.js";
|
|
4
4
|
|
|
5
5
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, createDialogHandle };
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime147 from "react/jsx-runtime";
|
|
2
2
|
import * as React$1 from "react";
|
|
3
3
|
import { Drawer as Drawer$1 } from "@base-ui/react/drawer";
|
|
4
4
|
|
|
5
5
|
//#region src/components/drawer.d.ts
|
|
6
6
|
declare function Drawer({
|
|
7
7
|
...props
|
|
8
|
-
}: React$1.ComponentProps<typeof Drawer$1.Root>):
|
|
8
|
+
}: React$1.ComponentProps<typeof Drawer$1.Root>): react_jsx_runtime147.JSX.Element;
|
|
9
9
|
declare function DrawerTrigger({
|
|
10
10
|
...props
|
|
11
|
-
}: React$1.ComponentProps<typeof Drawer$1.Trigger>):
|
|
11
|
+
}: React$1.ComponentProps<typeof Drawer$1.Trigger>): react_jsx_runtime147.JSX.Element;
|
|
12
12
|
declare function DrawerPortal({
|
|
13
13
|
...props
|
|
14
|
-
}: React$1.ComponentProps<typeof Drawer$1.Portal>):
|
|
14
|
+
}: React$1.ComponentProps<typeof Drawer$1.Portal>): react_jsx_runtime147.JSX.Element;
|
|
15
15
|
declare function DrawerClose({
|
|
16
16
|
...props
|
|
17
|
-
}: React$1.ComponentProps<typeof Drawer$1.Close>):
|
|
17
|
+
}: React$1.ComponentProps<typeof Drawer$1.Close>): react_jsx_runtime147.JSX.Element;
|
|
18
18
|
declare function DrawerOverlay({
|
|
19
19
|
className,
|
|
20
20
|
...props
|
|
21
|
-
}: React$1.ComponentProps<typeof Drawer$1.Backdrop>):
|
|
21
|
+
}: React$1.ComponentProps<typeof Drawer$1.Backdrop>): react_jsx_runtime147.JSX.Element;
|
|
22
22
|
declare function DrawerContent({
|
|
23
23
|
className,
|
|
24
24
|
children,
|
|
25
25
|
...props
|
|
26
|
-
}: React$1.ComponentProps<typeof Drawer$1.Popup>):
|
|
26
|
+
}: React$1.ComponentProps<typeof Drawer$1.Popup>): react_jsx_runtime147.JSX.Element;
|
|
27
27
|
declare function DrawerHeader({
|
|
28
28
|
className,
|
|
29
29
|
...props
|
|
30
|
-
}: React$1.ComponentProps<"div">):
|
|
30
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime147.JSX.Element;
|
|
31
31
|
declare function DrawerFooter({
|
|
32
32
|
className,
|
|
33
33
|
...props
|
|
34
|
-
}: React$1.ComponentProps<"div">):
|
|
34
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime147.JSX.Element;
|
|
35
35
|
declare function DrawerTitle({
|
|
36
36
|
className,
|
|
37
37
|
...props
|
|
38
|
-
}: React$1.ComponentProps<typeof Drawer$1.Title>):
|
|
38
|
+
}: React$1.ComponentProps<typeof Drawer$1.Title>): react_jsx_runtime147.JSX.Element;
|
|
39
39
|
declare function DrawerDescription({
|
|
40
40
|
className,
|
|
41
41
|
...props
|
|
42
|
-
}: React$1.ComponentProps<typeof Drawer$1.Description>):
|
|
42
|
+
}: React$1.ComponentProps<typeof Drawer$1.Description>): react_jsx_runtime147.JSX.Element;
|
|
43
43
|
//#endregion
|
|
44
44
|
export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger };
|
|
45
45
|
//# sourceMappingURL=drawer.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator } from "../dropdown-menu-
|
|
1
|
+
import { a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator } from "../dropdown-menu-DGgfWYrK.js";
|
|
2
2
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "../utils-
|
|
2
|
-
import { a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator } from "../dropdown-menu-
|
|
1
|
+
import "../utils-DUlptRpf.js";
|
|
2
|
+
import { a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator } from "../dropdown-menu-BWEfcvmP.js";
|
|
3
3
|
|
|
4
4
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as react_jsx_runtime172 from "react/jsx-runtime";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
import { Config } from "dompurify";
|
|
4
|
+
|
|
5
|
+
//#region src/components/editor-output.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Default DOMPurify allow-list used by {@link EditorOutput}.
|
|
9
|
+
*
|
|
10
|
+
* Covers the formatting that the paired `RichTextEditor` can produce —
|
|
11
|
+
* headings, emphasis, lists, links, blockquotes, code, tables, and images —
|
|
12
|
+
* while stripping anything that could execute (`<script>`, `<style>`,
|
|
13
|
+
* `<iframe>`, inline event handlers like `onclick`, and `javascript:` URIs).
|
|
14
|
+
* `RETURN_TRUSTED_TYPE` is intentionally off so the result is a plain string
|
|
15
|
+
* suitable for `dangerouslySetInnerHTML`.
|
|
16
|
+
*/
|
|
17
|
+
declare const DEFAULT_SANITIZE_CONFIG: Config;
|
|
18
|
+
/**
|
|
19
|
+
* Token-driven prose styling for sanitized rich-text output.
|
|
20
|
+
*
|
|
21
|
+
* These are the descendant typography rules applied to whatever HTML
|
|
22
|
+
* {@link EditorOutput} renders (headings, lists, links, code, tables, …).
|
|
23
|
+
* Kept as a single exported constant so the component's `cn()` call merges
|
|
24
|
+
* this prose base with the consumer's layout-only `className` — and so other
|
|
25
|
+
* surfaces can reuse the exact same prose treatment if needed.
|
|
26
|
+
*
|
|
27
|
+
* All colors resolve to `globals.css` semantic tokens, so it adapts to
|
|
28
|
+
* light/dark themes automatically.
|
|
29
|
+
*/
|
|
30
|
+
declare const EDITOR_OUTPUT_PROSE: string;
|
|
31
|
+
interface EditorOutputProps extends Omit<React$1.ComponentProps<"div">, "children" | "dangerouslySetInnerHTML"> {
|
|
32
|
+
/**
|
|
33
|
+
* The raw, untrusted rich-text HTML string to render. It is sanitized with
|
|
34
|
+
* DOMPurify before being injected into the DOM. Pass the value produced by
|
|
35
|
+
* the paired `RichTextEditor`.
|
|
36
|
+
*/
|
|
37
|
+
html: string;
|
|
38
|
+
/**
|
|
39
|
+
* Additional DOMPurify configuration, shallow-merged over the built-in
|
|
40
|
+
* allow-list. The merge is per-key, so passing `ALLOWED_TAGS` or
|
|
41
|
+
* `ALLOWED_ATTR` *replaces* that list rather than extending it. Spread
|
|
42
|
+
* {@link DEFAULT_SANITIZE_CONFIG} to widen from the defaults. `FORBID_TAGS`
|
|
43
|
+
* keeps `<script>`, `<style>`, `<iframe>` and friends stripped regardless of
|
|
44
|
+
* what you pass.
|
|
45
|
+
*/
|
|
46
|
+
sanitizeConfig?: Config;
|
|
47
|
+
/** Additional class names applied to the prose-styled wrapper. */
|
|
48
|
+
className?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `EditorOutput` — the read-only renderer for sanitized rich-text HTML.
|
|
52
|
+
*
|
|
53
|
+
* Pairs with `RichTextEditor`: the editor produces an HTML string, and this
|
|
54
|
+
* component safely displays it. The input is **never** trusted: it is run
|
|
55
|
+
* through DOMPurify against a sensible allow-list (formatting, links, lists,
|
|
56
|
+
* tables, images) with all scripts, inline event handlers, and unsafe URI
|
|
57
|
+
* schemes stripped before being rendered via `dangerouslySetInnerHTML`.
|
|
58
|
+
*
|
|
59
|
+
* Client-rendered: DOMPurify needs a DOM (`window`), so sanitization runs in
|
|
60
|
+
* the browser and the markup is injected on the first paint. If imported into
|
|
61
|
+
* a server render (no `window`) it emits empty markup and fills in on the
|
|
62
|
+
* client.
|
|
63
|
+
*
|
|
64
|
+
* Styling resolves entirely to `globals.css` design tokens, so output adapts
|
|
65
|
+
* to light/dark themes automatically.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```tsx
|
|
69
|
+
* // Render the value coming out of a RichTextEditor
|
|
70
|
+
* <EditorOutput html={job.descriptionHtml} />
|
|
71
|
+
*
|
|
72
|
+
* // Tighten the allow-list for a comment surface (no images, no tables)
|
|
73
|
+
* <EditorOutput
|
|
74
|
+
* html={comment.body}
|
|
75
|
+
* sanitizeConfig={{ ALLOWED_TAGS: ["p", "br", "b", "i", "em", "strong", "a"] }}
|
|
76
|
+
* />
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
declare function EditorOutput({
|
|
80
|
+
html,
|
|
81
|
+
sanitizeConfig,
|
|
82
|
+
className,
|
|
83
|
+
...props
|
|
84
|
+
}: EditorOutputProps): react_jsx_runtime172.JSX.Element;
|
|
85
|
+
//#endregion
|
|
86
|
+
export { DEFAULT_SANITIZE_CONFIG, EDITOR_OUTPUT_PROSE, EditorOutput, EditorOutputProps };
|
|
87
|
+
//# sourceMappingURL=editor-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-output.d.ts","names":[],"sources":["../../src/components/editor-output.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAGkD;AAkEjD;AAsCD;;;;;AAmBC,cA7GK,uBA4Ie,EA5IU,MA4IV;;;;;;;;;;;;;cA1Ef;UAwBW,iBAAA,SACP,KAAK,OAAA,CAAM;;;;;;;;;;;;;;;mBAeF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCV,YAAA;;;;;GAKN,oBAAiB,oBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { t as cn } from "../utils-DUlptRpf.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import DOMPurify from "dompurify";
|
|
7
|
+
|
|
8
|
+
//#region src/components/editor-output.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Default DOMPurify allow-list used by {@link EditorOutput}.
|
|
11
|
+
*
|
|
12
|
+
* Covers the formatting that the paired `RichTextEditor` can produce —
|
|
13
|
+
* headings, emphasis, lists, links, blockquotes, code, tables, and images —
|
|
14
|
+
* while stripping anything that could execute (`<script>`, `<style>`,
|
|
15
|
+
* `<iframe>`, inline event handlers like `onclick`, and `javascript:` URIs).
|
|
16
|
+
* `RETURN_TRUSTED_TYPE` is intentionally off so the result is a plain string
|
|
17
|
+
* suitable for `dangerouslySetInnerHTML`.
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_SANITIZE_CONFIG = {
|
|
20
|
+
ALLOWED_TAGS: [
|
|
21
|
+
"a",
|
|
22
|
+
"b",
|
|
23
|
+
"blockquote",
|
|
24
|
+
"br",
|
|
25
|
+
"code",
|
|
26
|
+
"div",
|
|
27
|
+
"em",
|
|
28
|
+
"h1",
|
|
29
|
+
"h2",
|
|
30
|
+
"h3",
|
|
31
|
+
"h4",
|
|
32
|
+
"h5",
|
|
33
|
+
"h6",
|
|
34
|
+
"hr",
|
|
35
|
+
"i",
|
|
36
|
+
"img",
|
|
37
|
+
"li",
|
|
38
|
+
"ol",
|
|
39
|
+
"p",
|
|
40
|
+
"pre",
|
|
41
|
+
"s",
|
|
42
|
+
"span",
|
|
43
|
+
"strong",
|
|
44
|
+
"sub",
|
|
45
|
+
"sup",
|
|
46
|
+
"table",
|
|
47
|
+
"tbody",
|
|
48
|
+
"td",
|
|
49
|
+
"th",
|
|
50
|
+
"thead",
|
|
51
|
+
"tr",
|
|
52
|
+
"u",
|
|
53
|
+
"ul"
|
|
54
|
+
],
|
|
55
|
+
ALLOWED_ATTR: [
|
|
56
|
+
"href",
|
|
57
|
+
"target",
|
|
58
|
+
"rel",
|
|
59
|
+
"src",
|
|
60
|
+
"alt",
|
|
61
|
+
"title",
|
|
62
|
+
"colspan",
|
|
63
|
+
"rowspan"
|
|
64
|
+
],
|
|
65
|
+
ALLOWED_URI_REGEXP: /^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.-]+(?:[^a-z+.\-:]|$))/i,
|
|
66
|
+
FORBID_TAGS: [
|
|
67
|
+
"script",
|
|
68
|
+
"style",
|
|
69
|
+
"iframe",
|
|
70
|
+
"object",
|
|
71
|
+
"embed",
|
|
72
|
+
"form"
|
|
73
|
+
],
|
|
74
|
+
FORBID_ATTR: ["style", "srcset"]
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Token-driven prose styling for sanitized rich-text output.
|
|
78
|
+
*
|
|
79
|
+
* These are the descendant typography rules applied to whatever HTML
|
|
80
|
+
* {@link EditorOutput} renders (headings, lists, links, code, tables, …).
|
|
81
|
+
* Kept as a single exported constant so the component's `cn()` call merges
|
|
82
|
+
* this prose base with the consumer's layout-only `className` — and so other
|
|
83
|
+
* surfaces can reuse the exact same prose treatment if needed.
|
|
84
|
+
*
|
|
85
|
+
* All colors resolve to `globals.css` semantic tokens, so it adapts to
|
|
86
|
+
* light/dark themes automatically.
|
|
87
|
+
*/
|
|
88
|
+
const EDITOR_OUTPUT_PROSE = [
|
|
89
|
+
"text-foreground text-sm leading-relaxed break-words",
|
|
90
|
+
"[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-2xl [&_h1]:font-semibold",
|
|
91
|
+
"[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-xl [&_h2]:font-semibold",
|
|
92
|
+
"[&_h3]:mt-3 [&_h3]:mb-1.5 [&_h3]:text-lg [&_h3]:font-semibold",
|
|
93
|
+
"[&_h4]:mt-3 [&_h4]:mb-1.5 [&_h4]:text-base [&_h4]:font-semibold",
|
|
94
|
+
"[&_p]:my-2",
|
|
95
|
+
"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:ps-6",
|
|
96
|
+
"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:ps-6",
|
|
97
|
+
"[&_li]:my-0.5",
|
|
98
|
+
"[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-4 hover:[&_a]:no-underline",
|
|
99
|
+
"[&_strong]:font-semibold [&_b]:font-semibold",
|
|
100
|
+
"[&_em]:italic [&_i]:italic",
|
|
101
|
+
"[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic",
|
|
102
|
+
"[&_code]:rounded [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-xs",
|
|
103
|
+
"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-md [&_pre]:bg-muted [&_pre]:p-3 [&_pre]:text-xs",
|
|
104
|
+
"[&_pre_code]:bg-transparent [&_pre_code]:p-0",
|
|
105
|
+
"[&_hr]:my-4 [&_hr]:border-border",
|
|
106
|
+
"[&_img]:my-2 [&_img]:max-w-full [&_img]:rounded-md",
|
|
107
|
+
"[&_table]:my-3 [&_table]:w-full [&_table]:border-collapse [&_table]:text-left",
|
|
108
|
+
"[&_th]:border [&_th]:border-border [&_th]:bg-muted [&_th]:px-2.5 [&_th]:py-1.5 [&_th]:font-medium",
|
|
109
|
+
"[&_td]:border [&_td]:border-border [&_td]:px-2.5 [&_td]:py-1.5"
|
|
110
|
+
].join(" ");
|
|
111
|
+
/**
|
|
112
|
+
* `EditorOutput` — the read-only renderer for sanitized rich-text HTML.
|
|
113
|
+
*
|
|
114
|
+
* Pairs with `RichTextEditor`: the editor produces an HTML string, and this
|
|
115
|
+
* component safely displays it. The input is **never** trusted: it is run
|
|
116
|
+
* through DOMPurify against a sensible allow-list (formatting, links, lists,
|
|
117
|
+
* tables, images) with all scripts, inline event handlers, and unsafe URI
|
|
118
|
+
* schemes stripped before being rendered via `dangerouslySetInnerHTML`.
|
|
119
|
+
*
|
|
120
|
+
* Client-rendered: DOMPurify needs a DOM (`window`), so sanitization runs in
|
|
121
|
+
* the browser and the markup is injected on the first paint. If imported into
|
|
122
|
+
* a server render (no `window`) it emits empty markup and fills in on the
|
|
123
|
+
* client.
|
|
124
|
+
*
|
|
125
|
+
* Styling resolves entirely to `globals.css` design tokens, so output adapts
|
|
126
|
+
* to light/dark themes automatically.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```tsx
|
|
130
|
+
* // Render the value coming out of a RichTextEditor
|
|
131
|
+
* <EditorOutput html={job.descriptionHtml} />
|
|
132
|
+
*
|
|
133
|
+
* // Tighten the allow-list for a comment surface (no images, no tables)
|
|
134
|
+
* <EditorOutput
|
|
135
|
+
* html={comment.body}
|
|
136
|
+
* sanitizeConfig={{ ALLOWED_TAGS: ["p", "br", "b", "i", "em", "strong", "a"] }}
|
|
137
|
+
* />
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
function EditorOutput({ html, sanitizeConfig, className, ...props }) {
|
|
141
|
+
const sanitized = React$1.useMemo(() => {
|
|
142
|
+
if (typeof window === "undefined") return "";
|
|
143
|
+
return DOMPurify.sanitize(html ?? "", {
|
|
144
|
+
...DEFAULT_SANITIZE_CONFIG,
|
|
145
|
+
...sanitizeConfig
|
|
146
|
+
});
|
|
147
|
+
}, [html, sanitizeConfig]);
|
|
148
|
+
return /* @__PURE__ */ jsx("div", {
|
|
149
|
+
"data-slot": "editor-output",
|
|
150
|
+
className: cn(EDITOR_OUTPUT_PROSE, className),
|
|
151
|
+
dangerouslySetInnerHTML: { __html: sanitized },
|
|
152
|
+
...props
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//#endregion
|
|
157
|
+
export { DEFAULT_SANITIZE_CONFIG, EDITOR_OUTPUT_PROSE, EditorOutput };
|
|
158
|
+
//# sourceMappingURL=editor-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-output.js","names":["DEFAULT_SANITIZE_CONFIG: Config","React"],"sources":["../../src/components/editor-output.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport DOMPurify, { type Config } from \"dompurify\"\n\nimport { cn } from \"@px-ui/ui/lib/utils\"\n\n/**\n * Default DOMPurify allow-list used by {@link EditorOutput}.\n *\n * Covers the formatting that the paired `RichTextEditor` can produce —\n * headings, emphasis, lists, links, blockquotes, code, tables, and images —\n * while stripping anything that could execute (`<script>`, `<style>`,\n * `<iframe>`, inline event handlers like `onclick`, and `javascript:` URIs).\n * `RETURN_TRUSTED_TYPE` is intentionally off so the result is a plain string\n * suitable for `dangerouslySetInnerHTML`.\n */\nconst DEFAULT_SANITIZE_CONFIG: Config = {\n ALLOWED_TAGS: [\n \"a\",\n \"b\",\n \"blockquote\",\n \"br\",\n \"code\",\n \"div\",\n \"em\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"hr\",\n \"i\",\n \"img\",\n \"li\",\n \"ol\",\n \"p\",\n \"pre\",\n \"s\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"th\",\n \"thead\",\n \"tr\",\n \"u\",\n \"ul\",\n ],\n ALLOWED_ATTR: [\n \"href\",\n \"target\",\n \"rel\",\n \"src\",\n \"alt\",\n \"title\",\n \"colspan\",\n \"rowspan\",\n ],\n // Only safe URI schemes; blocks javascript:, data: (except images), etc.\n ALLOWED_URI_REGEXP:\n /^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.-]+(?:[^a-z+.\\-:]|$))/i,\n // Force-strip anything that can execute or leak.\n FORBID_TAGS: [\"script\", \"style\", \"iframe\", \"object\", \"embed\", \"form\"],\n FORBID_ATTR: [\"style\", \"srcset\"],\n}\n\n/**\n * Token-driven prose styling for sanitized rich-text output.\n *\n * These are the descendant typography rules applied to whatever HTML\n * {@link EditorOutput} renders (headings, lists, links, code, tables, …).\n * Kept as a single exported constant so the component's `cn()` call merges\n * this prose base with the consumer's layout-only `className` — and so other\n * surfaces can reuse the exact same prose treatment if needed.\n *\n * All colors resolve to `globals.css` semantic tokens, so it adapts to\n * light/dark themes automatically.\n */\nconst EDITOR_OUTPUT_PROSE = [\n \"text-foreground text-sm leading-relaxed break-words\",\n \"[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-2xl [&_h1]:font-semibold\",\n \"[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-xl [&_h2]:font-semibold\",\n \"[&_h3]:mt-3 [&_h3]:mb-1.5 [&_h3]:text-lg [&_h3]:font-semibold\",\n \"[&_h4]:mt-3 [&_h4]:mb-1.5 [&_h4]:text-base [&_h4]:font-semibold\",\n \"[&_p]:my-2\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:ps-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:ps-6\",\n \"[&_li]:my-0.5\",\n \"[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-4 hover:[&_a]:no-underline\",\n \"[&_strong]:font-semibold [&_b]:font-semibold\",\n \"[&_em]:italic [&_i]:italic\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic\",\n \"[&_code]:rounded [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-xs\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-md [&_pre]:bg-muted [&_pre]:p-3 [&_pre]:text-xs\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0\",\n \"[&_hr]:my-4 [&_hr]:border-border\",\n \"[&_img]:my-2 [&_img]:max-w-full [&_img]:rounded-md\",\n \"[&_table]:my-3 [&_table]:w-full [&_table]:border-collapse [&_table]:text-left\",\n \"[&_th]:border [&_th]:border-border [&_th]:bg-muted [&_th]:px-2.5 [&_th]:py-1.5 [&_th]:font-medium\",\n \"[&_td]:border [&_td]:border-border [&_td]:px-2.5 [&_td]:py-1.5\",\n].join(\" \")\n\nexport interface EditorOutputProps\n extends Omit<React.ComponentProps<\"div\">, \"children\" | \"dangerouslySetInnerHTML\"> {\n /**\n * The raw, untrusted rich-text HTML string to render. It is sanitized with\n * DOMPurify before being injected into the DOM. Pass the value produced by\n * the paired `RichTextEditor`.\n */\n html: string\n /**\n * Additional DOMPurify configuration, shallow-merged over the built-in\n * allow-list. The merge is per-key, so passing `ALLOWED_TAGS` or\n * `ALLOWED_ATTR` *replaces* that list rather than extending it. Spread\n * {@link DEFAULT_SANITIZE_CONFIG} to widen from the defaults. `FORBID_TAGS`\n * keeps `<script>`, `<style>`, `<iframe>` and friends stripped regardless of\n * what you pass.\n */\n sanitizeConfig?: Config\n /** Additional class names applied to the prose-styled wrapper. */\n className?: string\n}\n\n/**\n * `EditorOutput` — the read-only renderer for sanitized rich-text HTML.\n *\n * Pairs with `RichTextEditor`: the editor produces an HTML string, and this\n * component safely displays it. The input is **never** trusted: it is run\n * through DOMPurify against a sensible allow-list (formatting, links, lists,\n * tables, images) with all scripts, inline event handlers, and unsafe URI\n * schemes stripped before being rendered via `dangerouslySetInnerHTML`.\n *\n * Client-rendered: DOMPurify needs a DOM (`window`), so sanitization runs in\n * the browser and the markup is injected on the first paint. If imported into\n * a server render (no `window`) it emits empty markup and fills in on the\n * client.\n *\n * Styling resolves entirely to `globals.css` design tokens, so output adapts\n * to light/dark themes automatically.\n *\n * @example\n * ```tsx\n * // Render the value coming out of a RichTextEditor\n * <EditorOutput html={job.descriptionHtml} />\n *\n * // Tighten the allow-list for a comment surface (no images, no tables)\n * <EditorOutput\n * html={comment.body}\n * sanitizeConfig={{ ALLOWED_TAGS: [\"p\", \"br\", \"b\", \"i\", \"em\", \"strong\", \"a\"] }}\n * />\n * ```\n */\nfunction EditorOutput({\n html,\n sanitizeConfig,\n className,\n ...props\n}: EditorOutputProps) {\n // DOMPurify requires a DOM. Consumer apps render on the client, so `window`\n // is present at first paint and the sanitized markup shows immediately, with\n // no empty-then-fill flash. useMemo keeps re-sanitizing cheap. The\n // `typeof window` guard is purely defensive: if this is ever imported into a\n // server render, it emits empty markup instead of throwing, then fills in on\n // the client.\n const sanitized = React.useMemo(() => {\n if (typeof window === \"undefined\") return \"\"\n return DOMPurify.sanitize(html ?? \"\", {\n ...DEFAULT_SANITIZE_CONFIG,\n ...sanitizeConfig,\n }) as string\n }, [html, sanitizeConfig])\n\n return (\n <div\n data-slot=\"editor-output\"\n // Prose base (typography) + consumer className (layout only).\n className={cn(EDITOR_OUTPUT_PROSE, className)}\n dangerouslySetInnerHTML={{ __html: sanitized }}\n {...props}\n />\n )\n}\n\nexport { EditorOutput, DEFAULT_SANITIZE_CONFIG, EDITOR_OUTPUT_PROSE }\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAMA,0BAAkC;CACtC,cAAc;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,cAAc;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CAED,oBACE;CAEF,aAAa;EAAC;EAAU;EAAS;EAAU;EAAU;EAAS;EAAO;CACrE,aAAa,CAAC,SAAS,SAAS;CACjC;;;;;;;;;;;;;AAcD,MAAM,sBAAsB;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDX,SAAS,aAAa,EACpB,MACA,gBACA,WACA,GAAG,SACiB;CAOpB,MAAM,YAAYC,QAAM,cAAc;AACpC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO,UAAU,SAAS,QAAQ,IAAI;GACpC,GAAG;GACH,GAAG;GACJ,CAAC;IACD,CAAC,MAAM,eAAe,CAAC;AAE1B,QACE,oBAAC;EACC,aAAU;EAEV,WAAW,GAAG,qBAAqB,UAAU;EAC7C,yBAAyB,EAAE,QAAQ,WAAW;EAC9C,GAAI;GACJ"}
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime173 from "react/jsx-runtime";
|
|
2
2
|
import { VariantProps } from "class-variance-authority";
|
|
3
|
-
import * as
|
|
3
|
+
import * as class_variance_authority_types7 from "class-variance-authority/types";
|
|
4
4
|
|
|
5
5
|
//#region src/components/empty.d.ts
|
|
6
6
|
declare function Empty({
|
|
7
7
|
className,
|
|
8
8
|
...props
|
|
9
|
-
}: React.ComponentProps<"div">):
|
|
9
|
+
}: React.ComponentProps<"div">): react_jsx_runtime173.JSX.Element;
|
|
10
10
|
declare function EmptyHeader({
|
|
11
11
|
className,
|
|
12
12
|
...props
|
|
13
|
-
}: React.ComponentProps<"div">):
|
|
13
|
+
}: React.ComponentProps<"div">): react_jsx_runtime173.JSX.Element;
|
|
14
14
|
declare const emptyMediaVariants: (props?: ({
|
|
15
15
|
variant?: "default" | "icon" | null | undefined;
|
|
16
|
-
} &
|
|
16
|
+
} & class_variance_authority_types7.ClassProp) | undefined) => string;
|
|
17
17
|
declare function EmptyMedia({
|
|
18
18
|
className,
|
|
19
19
|
variant,
|
|
20
20
|
...props
|
|
21
|
-
}: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>):
|
|
21
|
+
}: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): react_jsx_runtime173.JSX.Element;
|
|
22
22
|
declare function EmptyTitle({
|
|
23
23
|
className,
|
|
24
24
|
...props
|
|
25
|
-
}: React.ComponentProps<"div">):
|
|
25
|
+
}: React.ComponentProps<"div">): react_jsx_runtime173.JSX.Element;
|
|
26
26
|
declare function EmptyDescription({
|
|
27
27
|
className,
|
|
28
28
|
...props
|
|
29
|
-
}: React.ComponentProps<"p">):
|
|
29
|
+
}: React.ComponentProps<"p">): react_jsx_runtime173.JSX.Element;
|
|
30
30
|
declare function EmptyContent({
|
|
31
31
|
className,
|
|
32
32
|
...props
|
|
33
|
-
}: React.ComponentProps<"div">):
|
|
33
|
+
}: React.ComponentProps<"div">): react_jsx_runtime173.JSX.Element;
|
|
34
34
|
//#endregion
|
|
35
35
|
export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
|
|
36
36
|
//# sourceMappingURL=empty.d.ts.map
|
package/dist/components/empty.js
CHANGED
|
@@ -1,62 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { cva } from "class-variance-authority";
|
|
1
|
+
import "../utils-DUlptRpf.js";
|
|
2
|
+
import { a as EmptyMedia, i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, t as Empty } from "../empty-U4zrLmFU.js";
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
function Empty({ className, ...props }) {
|
|
7
|
-
return /* @__PURE__ */ jsx("div", {
|
|
8
|
-
"data-slot": "empty",
|
|
9
|
-
className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-12 text-center text-balance", className),
|
|
10
|
-
...props
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
function EmptyHeader({ className, ...props }) {
|
|
14
|
-
return /* @__PURE__ */ jsx("div", {
|
|
15
|
-
"data-slot": "empty-header",
|
|
16
|
-
className: cn("flex max-w-sm flex-col items-center gap-2", className),
|
|
17
|
-
...props
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
21
|
-
variants: { variant: {
|
|
22
|
-
default: "bg-transparent",
|
|
23
|
-
icon: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6"
|
|
24
|
-
} },
|
|
25
|
-
defaultVariants: { variant: "default" }
|
|
26
|
-
});
|
|
27
|
-
function EmptyMedia({ className, variant = "default", ...props }) {
|
|
28
|
-
return /* @__PURE__ */ jsx("div", {
|
|
29
|
-
"data-slot": "empty-icon",
|
|
30
|
-
"data-variant": variant,
|
|
31
|
-
className: cn(emptyMediaVariants({
|
|
32
|
-
variant,
|
|
33
|
-
className
|
|
34
|
-
})),
|
|
35
|
-
...props
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function EmptyTitle({ className, ...props }) {
|
|
39
|
-
return /* @__PURE__ */ jsx("div", {
|
|
40
|
-
"data-slot": "empty-title",
|
|
41
|
-
className: cn("font-heading text-lg font-medium tracking-ppx-tight", className),
|
|
42
|
-
...props
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
function EmptyDescription({ className, ...props }) {
|
|
46
|
-
return /* @__PURE__ */ jsx("div", {
|
|
47
|
-
"data-slot": "empty-description",
|
|
48
|
-
className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
49
|
-
...props
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
function EmptyContent({ className, ...props }) {
|
|
53
|
-
return /* @__PURE__ */ jsx("div", {
|
|
54
|
-
"data-slot": "empty-content",
|
|
55
|
-
className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance", className),
|
|
56
|
-
...props
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
//#endregion
|
|
61
|
-
export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
|
|
62
|
-
//# sourceMappingURL=empty.js.map
|
|
4
|
+
export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
|