@apipass/design-system 3.1.0 → 4.0.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/lib/embedded-styles.js +1 -1
- package/dist/lib/json-viewer.index.cjs +2 -0
- package/dist/lib/json-viewer.index.cjs.map +1 -0
- package/dist/lib/json-viewer.index.js +5 -0
- package/dist/lib/json-viewer.index.js.map +1 -0
- package/dist/lib/lib.index.cjs +1 -1
- package/dist/lib/lib.index.js +645 -642
- package/dist/lib/lib.index.js.map +1 -1
- package/dist/lib/style.css +1 -1
- package/dist/lib/ui/hooks/useOverlayPortal.cjs +2 -0
- package/dist/lib/ui/hooks/useOverlayPortal.cjs.map +1 -0
- package/dist/lib/ui/hooks/useOverlayPortal.js +17 -0
- package/dist/lib/ui/hooks/useOverlayPortal.js.map +1 -0
- package/dist/lib/ui/primitives/ComboBox/ComboBox.cjs +1 -1
- package/dist/lib/ui/primitives/ComboBox/ComboBox.cjs.map +1 -1
- package/dist/lib/ui/primitives/ComboBox/ComboBox.js +31 -30
- package/dist/lib/ui/primitives/ComboBox/ComboBox.js.map +1 -1
- package/dist/lib/ui/primitives/DateRangePicker/DateRangePicker.cjs +1 -1
- package/dist/lib/ui/primitives/DateRangePicker/DateRangePicker.cjs.map +1 -1
- package/dist/lib/ui/primitives/DateRangePicker/DateRangePicker.js +187 -178
- package/dist/lib/ui/primitives/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/lib/ui/primitives/Dialog/Dialog.cjs +1 -1
- package/dist/lib/ui/primitives/Dialog/Dialog.cjs.map +1 -1
- package/dist/lib/ui/primitives/Dialog/Dialog.js +52 -41
- package/dist/lib/ui/primitives/Dialog/Dialog.js.map +1 -1
- package/dist/lib/ui/primitives/JsonViewer/JsonViewer.cjs +2 -0
- package/dist/lib/ui/primitives/JsonViewer/JsonViewer.cjs.map +1 -0
- package/dist/lib/ui/primitives/JsonViewer/JsonViewer.js +121 -0
- package/dist/lib/ui/primitives/JsonViewer/JsonViewer.js.map +1 -0
- package/dist/lib/ui/primitives/Menu/Menu.cjs +1 -1
- package/dist/lib/ui/primitives/Menu/Menu.cjs.map +1 -1
- package/dist/lib/ui/primitives/Menu/Menu.js +68 -57
- package/dist/lib/ui/primitives/Menu/Menu.js.map +1 -1
- package/dist/lib/ui/primitives/Search/Search.cjs +1 -1
- package/dist/lib/ui/primitives/Search/Search.cjs.map +1 -1
- package/dist/lib/ui/primitives/Search/Search.js +21 -20
- package/dist/lib/ui/primitives/Search/Search.js.map +1 -1
- package/dist/lib/ui/primitives/Select/Select.cjs +1 -1
- package/dist/lib/ui/primitives/Select/Select.cjs.map +1 -1
- package/dist/lib/ui/primitives/Select/Select.js +31 -30
- package/dist/lib/ui/primitives/Select/Select.js.map +1 -1
- package/dist/lib/ui/primitives/Tooltip/Tooltip.cjs +1 -1
- package/dist/lib/ui/primitives/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/lib/ui/primitives/Tooltip/Tooltip.js +56 -53
- package/dist/lib/ui/primitives/Tooltip/Tooltip.js.map +1 -1
- package/dist/types/json-viewer.index.d.ts +1 -0
- package/dist/types/ui/hooks/index.d.ts +1 -0
- package/dist/types/ui/hooks/useOverlayPortal.d.ts +15 -0
- package/dist/types/ui/primitives/Dialog/Dialog.d.ts +1 -1
- package/dist/types/ui/primitives/JsonViewer/JsonViewer.d.ts +16 -0
- package/dist/types/ui/primitives/Menu/Menu.d.ts +1 -1
- package/package.json +34 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangePicker.js","sources":["../../../../../src/ui/primitives/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Time,\n getLocalTimeZone,\n toCalendarDate,\n toCalendarDateTime,\n type DateValue,\n} from \"@internationalized/date\";\nimport { clsx } from \"clsx\";\nimport {\n IconCalendar,\n IconCheck,\n IconChevronDown,\n IconChevronLeft,\n IconChevronRight,\n} from \"icons\";\nimport {\n Button,\n Description,\n Field,\n Label,\n ListBox,\n ListBoxItem,\n Text,\n TextSmallStrong,\n} from \"primitives\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n Button as RACButton,\n CalendarCell as RACCalendarCell,\n CalendarGrid as RACCalendarGrid,\n DateField as RACDateField,\n DateInput as RACDateInput,\n DateSegment as RACDateSegment,\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Group as RACGroup,\n Heading as RACHeading,\n I18nProvider as RACI18nProvider,\n Label as RACLabel,\n Popover as RACPopover,\n RangeCalendar as RACRangeCalendar,\n RangeCalendarStateContext,\n useLocale,\n type TimeValue,\n} from \"react-aria-components\";\nimport {\n createDateRangePresets,\n type DateRangePresetKey,\n} from \"./dateRangePresets\";\nimport \"./daterangepicker.css\";\n\nconst dayStartTime = () => new Time(0, 0, 0);\nconst dayEndTime = () => new Time(23, 59, 59);\n\nfunction CalendarAnchorSync({\n onAnchorChange,\n}: {\n onAnchorChange: (anchor: DateValue | null) => void;\n}) {\n const state = useContext(RangeCalendarStateContext);\n const anchor = state?.anchorDate ?? null;\n const anchorKey = anchor?.toString();\n useEffect(() => {\n onAnchorChange(anchor);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [anchorKey]);\n return null;\n}\n\nexport interface DateRangePreset {\n id: string;\n label: string;\n getValue: () => { start: DateValue; end: DateValue };\n}\n\nexport interface DateRangePickerValue {\n preset?: DateRangePreset;\n start: DateValue | null;\n end: DateValue | null;\n}\n\nexport interface DateRangePickerLabels {\n placeholder: string;\n relativeLabel: string;\n absoluteLabel: string;\n startDateLabel: string;\n endDateLabel: string;\n cancelLabel?: string | null;\n applyLabel?: string | null;\n}\n\nexport interface DateRangePickerProps {\n className?: string;\n locale?: string;\n label?: string;\n \"aria-label\"?: string;\n description?: string;\n errorMessage?: string;\n labels: DateRangePickerLabels;\n intervals?: DateRangePreset[];\n presetKeys?: DateRangePresetKey[];\n presetLabels?: Record<DateRangePresetKey, string>;\n hideTime?: boolean;\n minValue?: DateValue;\n maxValue?: DateValue;\n timezone?: string;\n isDisabled?: boolean;\n isRequired?: boolean;\n value?: DateRangePickerValue;\n defaultValue?: DateRangePickerValue;\n onChange?: (value: DateRangePickerValue) => void;\n}\n\ntype DateRange = { start: DateValue; end: DateValue };\n\ntype DraftState = {\n range: DateRange | null;\n startTime: TimeValue | null;\n endTime: TimeValue | null;\n preset?: DateRangePreset;\n};\n\nconst timeFromDateValue = (date: DateValue | null): TimeValue | null =>\n date && \"hour\" in date ? new Time(date.hour, date.minute, date.second) : null;\n\nconst toDraftState = (value?: DateRangePickerValue): DraftState => {\n if (!value || (!value.start && !value.end)) {\n return { range: null, startTime: null, endTime: null, preset: value?.preset };\n }\n const range =\n value.start && value.end\n ? { start: toCalendarDate(value.start), end: toCalendarDate(value.end) }\n : null;\n return {\n range,\n startTime: timeFromDateValue(value.start),\n endTime: timeFromDateValue(value.end),\n preset: value.preset,\n };\n};\n\nconst combineDateAndTime = (\n date: DateValue | undefined,\n time: TimeValue | null,\n hideTime: boolean,\n): DateValue | null => {\n if (!date) return null;\n const calendarDate = toCalendarDate(date);\n if (hideTime || !time) return calendarDate;\n return toCalendarDateTime(calendarDate, time);\n};\n\nconst draftToValue = (\n draft: DraftState,\n hideTime: boolean,\n): DateRangePickerValue => ({\n preset: draft.preset,\n start: combineDateAndTime(draft.range?.start, draft.startTime, hideTime),\n end: combineDateAndTime(draft.range?.end, draft.endTime, hideTime),\n});\n\nexport function DateRangePicker({\n className,\n locale: localeProp,\n label,\n \"aria-label\": ariaLabel,\n description,\n errorMessage,\n labels,\n intervals: intervalsProp,\n presetKeys,\n presetLabels,\n hideTime = false,\n minValue,\n maxValue,\n timezone: timezoneProp,\n isDisabled = false,\n isRequired = false,\n value,\n defaultValue,\n onChange,\n}: DateRangePickerProps) {\n const { locale: ambientLocale } = useLocale();\n const locale = localeProp ?? ambientLocale ?? \"pt-BR\";\n const timezone = timezoneProp ?? getLocalTimeZone();\n const {\n placeholder,\n relativeLabel,\n absoluteLabel,\n startDateLabel,\n endDateLabel,\n cancelLabel,\n applyLabel,\n } = labels;\n\n const intervals = useMemo(() => {\n if (intervalsProp) return intervalsProp;\n if (!presetKeys) return undefined;\n if (!presetLabels) {\n throw new Error(\n \"DateRangePicker: `presetLabels` is required when `presetKeys` is provided.\",\n );\n }\n return createDateRangePresets({\n locale,\n timezone,\n include: presetKeys,\n labels: presetLabels,\n });\n }, [intervalsProp, presetKeys, presetLabels, locale, timezone]);\n\n const [committed, setCommitted] = useState<DraftState>(() =>\n toDraftState(value ?? defaultValue),\n );\n const [draft, setDraft] = useState<DraftState>(committed);\n const [previewStart, setPreviewStart] = useState<DateValue | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n useEffect(() => {\n if (value !== undefined) setCommitted(toDraftState(value));\n }, [value]);\n\n const clearPreset = (next: DraftState): DraftState => ({\n ...next,\n preset: undefined,\n });\n\n const withDefaultTimes = (next: DraftState): DraftState =>\n hideTime\n ? next\n : {\n ...next,\n startTime: next.startTime ?? dayStartTime(),\n endTime: next.endTime ?? dayEndTime(),\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setDraft(committed);\n setPreviewStart(null);\n }\n setIsOpen(open);\n };\n\n const selectPreset = (preset: DateRangePreset) => {\n setPreviewStart(null);\n const { start, end } = preset.getValue();\n setDraft({\n range: { start: toCalendarDate(start), end: toCalendarDate(end) },\n startTime: timeFromDateValue(start),\n endTime: timeFromDateValue(end),\n preset,\n });\n };\n\n const handleAnchorChange = (anchor: DateValue | null) => {\n setPreviewStart(anchor);\n if (anchor && !hideTime) {\n setDraft((current) =>\n clearPreset({\n ...current,\n startTime: current.startTime ?? dayStartTime(),\n }),\n );\n }\n };\n\n const setRange = (range: DateRange | null) => {\n setPreviewStart(null);\n setDraft((current) => withDefaultTimes(clearPreset({ ...current, range })));\n };\n\n const setStartField = (dateTime: DateValue | null) => {\n if (!dateTime) return;\n setPreviewStart(null);\n const date = toCalendarDate(dateTime);\n const time = timeFromDateValue(dateTime);\n setDraft((current) => {\n const nextStartTime = hideTime\n ? current.startTime\n : (time ?? current.startTime ?? dayStartTime());\n const start = combineDateAndTime(date, nextStartTime, hideTime);\n const currentEnd = combineDateAndTime(\n current.range?.end,\n current.endTime,\n hideTime,\n );\n const pushEnd = Boolean(start && currentEnd && currentEnd.compare(start) < 0);\n return clearPreset({\n ...current,\n range: {\n start: date,\n end: pushEnd || !current.range?.end ? date : current.range.end,\n },\n startTime: nextStartTime,\n endTime: pushEnd ? nextStartTime : current.endTime,\n });\n });\n };\n\n const setEndField = (dateTime: DateValue | null) => {\n if (!dateTime) return;\n const date = toCalendarDate(dateTime);\n const time = timeFromDateValue(dateTime);\n setDraft((current) => {\n const nextEndTime = hideTime\n ? current.endTime\n : (time ?? current.endTime ?? dayEndTime());\n const end = combineDateAndTime(date, nextEndTime, hideTime);\n const start = combineDateAndTime(\n current.range?.start,\n current.startTime,\n hideTime,\n );\n if (start && end && end.compare(start) < 0) return current;\n return clearPreset({\n ...current,\n range: { start: current.range?.start ?? date, end: date },\n endTime: nextEndTime,\n });\n });\n };\n\n const apply = () => {\n setCommitted(draft);\n onChange?.(draftToValue(draft, hideTime));\n setIsOpen(false);\n };\n\n const cancel = () => setIsOpen(false);\n\n const showFooter = Boolean(cancelLabel || applyLabel);\n\n const triggerText = () => {\n if (committed.preset) return committed.preset.label;\n if (committed.range) {\n const format = (date: DateValue) =>\n date\n .toDate(timezone)\n .toLocaleString(locale, {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n ...(hideTime\n ? {}\n : { hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n });\n const start = combineDateAndTime(\n committed.range.start,\n committed.startTime,\n hideTime,\n );\n const end = combineDateAndTime(\n committed.range.end,\n committed.endTime,\n hideTime,\n );\n if (start && end) return `${format(start)} — ${format(end)}`;\n }\n return null;\n };\n\n const selectedText = triggerText();\n const hasPresets = Boolean(intervals && intervals.length > 0);\n const fieldGranularity = hideTime ? \"day\" : \"second\";\n const startFieldValue = combineDateAndTime(\n draft.range?.start ?? previewStart ?? undefined,\n draft.startTime,\n hideTime,\n );\n const endFieldValue = combineDateAndTime(\n draft.range?.end ?? undefined,\n draft.endTime,\n hideTime,\n );\n\n const content = (\n <Field className={clsx(className, \"date-range-picker\")}>\n {label && <Label>{label}</Label>}\n <RACDialogTrigger isOpen={isOpen} onOpenChange={handleOpenChange}>\n <RACButton\n className=\"date-range-picker-trigger\"\n isDisabled={isDisabled}\n aria-label={label ? undefined : (ariaLabel ?? placeholder)}\n aria-required={isRequired || undefined}\n data-invalid={errorMessage ? true : undefined}\n >\n {committed.preset ? (\n <span className=\"date-range-picker-preset-badge\">\n <IconCalendar aria-hidden=\"true\" />\n {committed.preset.label}\n </span>\n ) : (\n <span\n className=\"date-range-picker-value\"\n data-placeholder={selectedText ? undefined : true}\n >\n {selectedText ?? placeholder}\n </span>\n )}\n <IconChevronDown aria-hidden=\"true\" />\n </RACButton>\n <RACPopover className=\"date-range-picker-popover\" placement=\"bottom start\">\n <RACDialog className=\"date-range-picker-dialog\">\n <div className=\"date-range-picker-body\">\n {hasPresets && (\n <div className=\"date-range-picker-presets\">\n <TextSmallStrong className=\"date-range-picker-section-title\">\n {relativeLabel}\n </TextSmallStrong>\n <ListBox\n aria-label={relativeLabel}\n className=\"date-range-picker-presets-list\"\n selectionMode=\"single\"\n selectedKeys={draft.preset ? [draft.preset.id] : []}\n items={intervals}\n onSelectionChange={(keys) => {\n const [id] = [...keys];\n const preset = intervals?.find((item) => item.id === id);\n if (preset) selectPreset(preset);\n }}\n >\n {(item) => (\n <ListBoxItem\n id={item.id}\n textValue={item.label}\n className=\"date-range-picker-preset-item\"\n >\n <span>{item.label}</span>\n <IconCheck\n aria-hidden=\"true\"\n className=\"date-range-picker-preset-check\"\n />\n </ListBoxItem>\n )}\n </ListBox>\n </div>\n )}\n\n <div className=\"date-range-picker-absolute\">\n <TextSmallStrong className=\"date-range-picker-section-title\">\n {absoluteLabel}\n </TextSmallStrong>\n\n <div className=\"date-range-picker-fields\">\n <RACDateField\n className=\"date-range-picker-datefield\"\n granularity={fieldGranularity}\n value={startFieldValue}\n minValue={minValue}\n maxValue={endFieldValue ?? maxValue}\n onChange={setStartField}\n >\n <RACLabel className=\"date-range-picker-field-label\">\n {startDateLabel}\n </RACLabel>\n <RACGroup className=\"date-range-picker-input\">\n <RACDateInput>\n {(segment) => <RACDateSegment segment={segment} />}\n </RACDateInput>\n <IconCalendar aria-hidden=\"true\" />\n </RACGroup>\n </RACDateField>\n\n <RACDateField\n className=\"date-range-picker-datefield\"\n granularity={fieldGranularity}\n value={endFieldValue}\n minValue={startFieldValue ?? minValue}\n maxValue={maxValue}\n onChange={setEndField}\n >\n <RACLabel className=\"date-range-picker-field-label\">\n {endDateLabel}\n </RACLabel>\n <RACGroup className=\"date-range-picker-input\">\n <RACDateInput>\n {(segment) => <RACDateSegment segment={segment} />}\n </RACDateInput>\n <IconCalendar aria-hidden=\"true\" />\n </RACGroup>\n </RACDateField>\n </div>\n\n <RACRangeCalendar\n className=\"date-range-picker-calendar\"\n aria-label={absoluteLabel}\n value={draft.range}\n minValue={minValue}\n maxValue={maxValue}\n onChange={setRange}\n >\n <CalendarAnchorSync onAnchorChange={handleAnchorChange} />\n <header className=\"date-range-picker-calendar-header\">\n <RACButton\n slot=\"previous\"\n className=\"date-range-picker-calendar-nav\"\n >\n <IconChevronLeft aria-hidden=\"true\" />\n </RACButton>\n <RACHeading className=\"date-range-picker-calendar-heading\" />\n <RACButton\n slot=\"next\"\n className=\"date-range-picker-calendar-nav\"\n >\n <IconChevronRight aria-hidden=\"true\" />\n </RACButton>\n </header>\n <RACCalendarGrid className=\"date-range-picker-calendar-grid\">\n {(date) => (\n <RACCalendarCell\n date={date}\n className=\"date-range-picker-calendar-cell\"\n />\n )}\n </RACCalendarGrid>\n </RACRangeCalendar>\n </div>\n </div>\n\n {showFooter && (\n <div className=\"date-range-picker-actions\">\n {cancelLabel && (\n <Button variant=\"neutral\" size=\"small\" onPress={cancel}>\n {cancelLabel}\n </Button>\n )}\n {applyLabel && (\n <Button variant=\"primary\" size=\"small\" onPress={apply}>\n {applyLabel}\n </Button>\n )}\n </div>\n )}\n </RACDialog>\n </RACPopover>\n </RACDialogTrigger>\n {description && <Description>{description}</Description>}\n {errorMessage && (\n <Text className=\"date-range-picker-error\" elementType=\"span\">\n {errorMessage}\n </Text>\n )}\n </Field>\n );\n\n return localeProp ? (\n <RACI18nProvider locale={localeProp}>{content}</RACI18nProvider>\n ) : (\n content\n );\n}\n"],"names":["dayStartTime","Time","dayEndTime","CalendarAnchorSync","onAnchorChange","state","useContext","RangeCalendarStateContext","anchor","anchorKey","useEffect","timeFromDateValue","date","toDraftState","value","toCalendarDate","combineDateAndTime","time","hideTime","calendarDate","toCalendarDateTime","draftToValue","draft","_a","_b","DateRangePicker","className","localeProp","label","ariaLabel","description","errorMessage","labels","intervalsProp","presetKeys","presetLabels","minValue","maxValue","timezoneProp","isDisabled","isRequired","defaultValue","onChange","ambientLocale","useLocale","locale","timezone","getLocalTimeZone","placeholder","relativeLabel","absoluteLabel","startDateLabel","endDateLabel","cancelLabel","applyLabel","intervals","useMemo","createDateRangePresets","committed","setCommitted","useState","setDraft","previewStart","setPreviewStart","isOpen","setIsOpen","clearPreset","next","withDefaultTimes","handleOpenChange","open","selectPreset","preset","start","end","handleAnchorChange","current","setRange","range","setStartField","dateTime","nextStartTime","currentEnd","pushEnd","setEndField","nextEndTime","apply","cancel","showFooter","selectedText","format","hasPresets","fieldGranularity","startFieldValue","endFieldValue","content","jsxs","Field","clsx","jsx","Label","RACDialogTrigger","RACButton","IconCalendar","IconChevronDown","RACPopover","RACDialog","TextSmallStrong","ListBox","keys","id","item","ListBoxItem","IconCheck","RACDateField","RACLabel","RACGroup","RACDateInput","segment","RACDateSegment","RACRangeCalendar","IconChevronLeft","RACHeading","IconChevronRight","RACCalendarGrid","RACCalendarCell","Button","Description","Text","RACI18nProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateRangePicker.js","sources":["../../../../../src/ui/primitives/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Time,\n getLocalTimeZone,\n toCalendarDate,\n toCalendarDateTime,\n type DateValue,\n} from \"@internationalized/date\";\nimport { clsx } from \"clsx\";\nimport { useOverlayPortalContainer } from \"hooks\";\nimport {\n IconCalendar,\n IconCheck,\n IconChevronDown,\n IconChevronLeft,\n IconChevronRight,\n} from \"icons\";\nimport {\n Button,\n Description,\n Field,\n Label,\n ListBox,\n ListBoxItem,\n Text,\n TextSmallStrong,\n} from \"primitives\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n Button as RACButton,\n CalendarCell as RACCalendarCell,\n CalendarGrid as RACCalendarGrid,\n DateField as RACDateField,\n DateInput as RACDateInput,\n DateSegment as RACDateSegment,\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Group as RACGroup,\n Heading as RACHeading,\n I18nProvider as RACI18nProvider,\n Label as RACLabel,\n Popover as RACPopover,\n RangeCalendar as RACRangeCalendar,\n RangeCalendarStateContext,\n useLocale,\n type TimeValue,\n} from \"react-aria-components\";\nimport {\n createDateRangePresets,\n type DateRangePresetKey,\n} from \"./dateRangePresets\";\nimport \"./daterangepicker.css\";\n\nconst dayStartTime = () => new Time(0, 0, 0);\nconst dayEndTime = () => new Time(23, 59, 59);\n\nfunction CalendarAnchorSync({\n onAnchorChange,\n}: {\n onAnchorChange: (anchor: DateValue | null) => void;\n}) {\n const state = useContext(RangeCalendarStateContext);\n const anchor = state?.anchorDate ?? null;\n const anchorKey = anchor?.toString();\n useEffect(() => {\n onAnchorChange(anchor);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [anchorKey]);\n return null;\n}\n\nexport interface DateRangePreset {\n id: string;\n label: string;\n getValue: () => { start: DateValue; end: DateValue };\n}\n\nexport interface DateRangePickerValue {\n preset?: DateRangePreset;\n start: DateValue | null;\n end: DateValue | null;\n}\n\nexport interface DateRangePickerLabels {\n placeholder: string;\n relativeLabel: string;\n absoluteLabel: string;\n startDateLabel: string;\n endDateLabel: string;\n cancelLabel?: string | null;\n applyLabel?: string | null;\n}\n\nexport interface DateRangePickerProps {\n className?: string;\n locale?: string;\n label?: string;\n \"aria-label\"?: string;\n description?: string;\n errorMessage?: string;\n labels: DateRangePickerLabels;\n intervals?: DateRangePreset[];\n presetKeys?: DateRangePresetKey[];\n presetLabels?: Record<DateRangePresetKey, string>;\n hideTime?: boolean;\n minValue?: DateValue;\n maxValue?: DateValue;\n timezone?: string;\n isDisabled?: boolean;\n isRequired?: boolean;\n value?: DateRangePickerValue;\n defaultValue?: DateRangePickerValue;\n onChange?: (value: DateRangePickerValue) => void;\n}\n\ntype DateRange = { start: DateValue; end: DateValue };\n\ntype DraftState = {\n range: DateRange | null;\n startTime: TimeValue | null;\n endTime: TimeValue | null;\n preset?: DateRangePreset;\n};\n\nconst timeFromDateValue = (date: DateValue | null): TimeValue | null =>\n date && \"hour\" in date ? new Time(date.hour, date.minute, date.second) : null;\n\nconst toDraftState = (value?: DateRangePickerValue): DraftState => {\n if (!value || (!value.start && !value.end)) {\n return { range: null, startTime: null, endTime: null, preset: value?.preset };\n }\n const range =\n value.start && value.end\n ? { start: toCalendarDate(value.start), end: toCalendarDate(value.end) }\n : null;\n return {\n range,\n startTime: timeFromDateValue(value.start),\n endTime: timeFromDateValue(value.end),\n preset: value.preset,\n };\n};\n\nconst combineDateAndTime = (\n date: DateValue | undefined,\n time: TimeValue | null,\n hideTime: boolean,\n): DateValue | null => {\n if (!date) return null;\n const calendarDate = toCalendarDate(date);\n if (hideTime || !time) return calendarDate;\n return toCalendarDateTime(calendarDate, time);\n};\n\nconst draftToValue = (\n draft: DraftState,\n hideTime: boolean,\n): DateRangePickerValue => ({\n preset: draft.preset,\n start: combineDateAndTime(draft.range?.start, draft.startTime, hideTime),\n end: combineDateAndTime(draft.range?.end, draft.endTime, hideTime),\n});\n\nexport function DateRangePicker({\n className,\n locale: localeProp,\n label,\n \"aria-label\": ariaLabel,\n description,\n errorMessage,\n labels,\n intervals: intervalsProp,\n presetKeys,\n presetLabels,\n hideTime = false,\n minValue,\n maxValue,\n timezone: timezoneProp,\n isDisabled = false,\n isRequired = false,\n value,\n defaultValue,\n onChange,\n}: DateRangePickerProps) {\n // Sem container explícito o popover faz portal no document.body — fora da\n // shadow root do MFE, sem CSS. Ver ui/hooks/useOverlayPortal.\n const portalContainer = useOverlayPortalContainer();\n const { locale: ambientLocale } = useLocale();\n const locale = localeProp ?? ambientLocale ?? \"pt-BR\";\n const timezone = timezoneProp ?? getLocalTimeZone();\n const {\n placeholder,\n relativeLabel,\n absoluteLabel,\n startDateLabel,\n endDateLabel,\n cancelLabel,\n applyLabel,\n } = labels;\n\n const intervals = useMemo(() => {\n if (intervalsProp) return intervalsProp;\n if (!presetKeys) return undefined;\n if (!presetLabels) {\n throw new Error(\n \"DateRangePicker: `presetLabels` is required when `presetKeys` is provided.\",\n );\n }\n return createDateRangePresets({\n locale,\n timezone,\n include: presetKeys,\n labels: presetLabels,\n });\n }, [intervalsProp, presetKeys, presetLabels, locale, timezone]);\n\n const [committed, setCommitted] = useState<DraftState>(() =>\n toDraftState(value ?? defaultValue),\n );\n const [draft, setDraft] = useState<DraftState>(committed);\n const [previewStart, setPreviewStart] = useState<DateValue | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n useEffect(() => {\n if (value !== undefined) setCommitted(toDraftState(value));\n }, [value]);\n\n const clearPreset = (next: DraftState): DraftState => ({\n ...next,\n preset: undefined,\n });\n\n const withDefaultTimes = (next: DraftState): DraftState =>\n hideTime\n ? next\n : {\n ...next,\n startTime: next.startTime ?? dayStartTime(),\n endTime: next.endTime ?? dayEndTime(),\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setDraft(committed);\n setPreviewStart(null);\n }\n setIsOpen(open);\n };\n\n const selectPreset = (preset: DateRangePreset) => {\n setPreviewStart(null);\n const { start, end } = preset.getValue();\n setDraft({\n range: { start: toCalendarDate(start), end: toCalendarDate(end) },\n startTime: timeFromDateValue(start),\n endTime: timeFromDateValue(end),\n preset,\n });\n };\n\n const handleAnchorChange = (anchor: DateValue | null) => {\n setPreviewStart(anchor);\n if (anchor && !hideTime) {\n setDraft((current) =>\n clearPreset({\n ...current,\n startTime: current.startTime ?? dayStartTime(),\n }),\n );\n }\n };\n\n const setRange = (range: DateRange | null) => {\n setPreviewStart(null);\n setDraft((current) => withDefaultTimes(clearPreset({ ...current, range })));\n };\n\n const setStartField = (dateTime: DateValue | null) => {\n if (!dateTime) return;\n setPreviewStart(null);\n const date = toCalendarDate(dateTime);\n const time = timeFromDateValue(dateTime);\n setDraft((current) => {\n const nextStartTime = hideTime\n ? current.startTime\n : (time ?? current.startTime ?? dayStartTime());\n const start = combineDateAndTime(date, nextStartTime, hideTime);\n const currentEnd = combineDateAndTime(\n current.range?.end,\n current.endTime,\n hideTime,\n );\n const pushEnd = Boolean(start && currentEnd && currentEnd.compare(start) < 0);\n return clearPreset({\n ...current,\n range: {\n start: date,\n end: pushEnd || !current.range?.end ? date : current.range.end,\n },\n startTime: nextStartTime,\n endTime: pushEnd ? nextStartTime : current.endTime,\n });\n });\n };\n\n const setEndField = (dateTime: DateValue | null) => {\n if (!dateTime) return;\n const date = toCalendarDate(dateTime);\n const time = timeFromDateValue(dateTime);\n setDraft((current) => {\n const nextEndTime = hideTime\n ? current.endTime\n : (time ?? current.endTime ?? dayEndTime());\n const end = combineDateAndTime(date, nextEndTime, hideTime);\n const start = combineDateAndTime(\n current.range?.start,\n current.startTime,\n hideTime,\n );\n if (start && end && end.compare(start) < 0) return current;\n return clearPreset({\n ...current,\n range: { start: current.range?.start ?? date, end: date },\n endTime: nextEndTime,\n });\n });\n };\n\n const apply = () => {\n setCommitted(draft);\n onChange?.(draftToValue(draft, hideTime));\n setIsOpen(false);\n };\n\n const cancel = () => setIsOpen(false);\n\n const showFooter = Boolean(cancelLabel || applyLabel);\n\n const triggerText = () => {\n if (committed.preset) return committed.preset.label;\n if (committed.range) {\n const format = (date: DateValue) =>\n date\n .toDate(timezone)\n .toLocaleString(locale, {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n ...(hideTime\n ? {}\n : { hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" }),\n });\n const start = combineDateAndTime(\n committed.range.start,\n committed.startTime,\n hideTime,\n );\n const end = combineDateAndTime(\n committed.range.end,\n committed.endTime,\n hideTime,\n );\n if (start && end) return `${format(start)} — ${format(end)}`;\n }\n return null;\n };\n\n const selectedText = triggerText();\n const hasPresets = Boolean(intervals && intervals.length > 0);\n const fieldGranularity = hideTime ? \"day\" : \"second\";\n const startFieldValue = combineDateAndTime(\n draft.range?.start ?? previewStart ?? undefined,\n draft.startTime,\n hideTime,\n );\n const endFieldValue = combineDateAndTime(\n draft.range?.end ?? undefined,\n draft.endTime,\n hideTime,\n );\n\n const content = (\n <Field className={clsx(className, \"date-range-picker\")}>\n {label && <Label>{label}</Label>}\n <RACDialogTrigger isOpen={isOpen} onOpenChange={handleOpenChange}>\n <RACButton\n className=\"date-range-picker-trigger\"\n isDisabled={isDisabled}\n aria-label={label ? undefined : (ariaLabel ?? placeholder)}\n aria-required={isRequired || undefined}\n data-invalid={errorMessage ? true : undefined}\n >\n {committed.preset ? (\n <span className=\"date-range-picker-preset-badge\">\n <IconCalendar aria-hidden=\"true\" />\n {committed.preset.label}\n </span>\n ) : (\n <span\n className=\"date-range-picker-value\"\n data-placeholder={selectedText ? undefined : true}\n >\n {selectedText ?? placeholder}\n </span>\n )}\n <IconChevronDown aria-hidden=\"true\" />\n </RACButton>\n <RACPopover\n className=\"date-range-picker-popover\"\n placement=\"bottom start\"\n UNSTABLE_portalContainer={portalContainer}\n >\n <RACDialog className=\"date-range-picker-dialog\">\n <div className=\"date-range-picker-body\">\n {hasPresets && (\n <div className=\"date-range-picker-presets\">\n <TextSmallStrong className=\"date-range-picker-section-title\">\n {relativeLabel}\n </TextSmallStrong>\n <ListBox\n aria-label={relativeLabel}\n className=\"date-range-picker-presets-list\"\n selectionMode=\"single\"\n selectedKeys={draft.preset ? [draft.preset.id] : []}\n items={intervals}\n onSelectionChange={(keys) => {\n const [id] = [...keys];\n const preset = intervals?.find((item) => item.id === id);\n if (preset) selectPreset(preset);\n }}\n >\n {(item) => (\n <ListBoxItem\n id={item.id}\n textValue={item.label}\n className=\"date-range-picker-preset-item\"\n >\n <span>{item.label}</span>\n <IconCheck\n aria-hidden=\"true\"\n className=\"date-range-picker-preset-check\"\n />\n </ListBoxItem>\n )}\n </ListBox>\n </div>\n )}\n\n <div className=\"date-range-picker-absolute\">\n <TextSmallStrong className=\"date-range-picker-section-title\">\n {absoluteLabel}\n </TextSmallStrong>\n\n <div className=\"date-range-picker-fields\">\n <RACDateField\n className=\"date-range-picker-datefield\"\n granularity={fieldGranularity}\n value={startFieldValue}\n minValue={minValue}\n maxValue={endFieldValue ?? maxValue}\n onChange={setStartField}\n >\n <RACLabel className=\"date-range-picker-field-label\">\n {startDateLabel}\n </RACLabel>\n <RACGroup className=\"date-range-picker-input\">\n <RACDateInput>\n {(segment) => <RACDateSegment segment={segment} />}\n </RACDateInput>\n <IconCalendar aria-hidden=\"true\" />\n </RACGroup>\n </RACDateField>\n\n <RACDateField\n className=\"date-range-picker-datefield\"\n granularity={fieldGranularity}\n value={endFieldValue}\n minValue={startFieldValue ?? minValue}\n maxValue={maxValue}\n onChange={setEndField}\n >\n <RACLabel className=\"date-range-picker-field-label\">\n {endDateLabel}\n </RACLabel>\n <RACGroup className=\"date-range-picker-input\">\n <RACDateInput>\n {(segment) => <RACDateSegment segment={segment} />}\n </RACDateInput>\n <IconCalendar aria-hidden=\"true\" />\n </RACGroup>\n </RACDateField>\n </div>\n\n <RACRangeCalendar\n className=\"date-range-picker-calendar\"\n aria-label={absoluteLabel}\n value={draft.range}\n minValue={minValue}\n maxValue={maxValue}\n onChange={setRange}\n >\n <CalendarAnchorSync onAnchorChange={handleAnchorChange} />\n <header className=\"date-range-picker-calendar-header\">\n <RACButton\n slot=\"previous\"\n className=\"date-range-picker-calendar-nav\"\n >\n <IconChevronLeft aria-hidden=\"true\" />\n </RACButton>\n <RACHeading className=\"date-range-picker-calendar-heading\" />\n <RACButton\n slot=\"next\"\n className=\"date-range-picker-calendar-nav\"\n >\n <IconChevronRight aria-hidden=\"true\" />\n </RACButton>\n </header>\n <RACCalendarGrid className=\"date-range-picker-calendar-grid\">\n {(date) => (\n <RACCalendarCell\n date={date}\n className=\"date-range-picker-calendar-cell\"\n />\n )}\n </RACCalendarGrid>\n </RACRangeCalendar>\n </div>\n </div>\n\n {showFooter && (\n <div className=\"date-range-picker-actions\">\n {cancelLabel && (\n <Button variant=\"neutral\" size=\"small\" onPress={cancel}>\n {cancelLabel}\n </Button>\n )}\n {applyLabel && (\n <Button variant=\"primary\" size=\"small\" onPress={apply}>\n {applyLabel}\n </Button>\n )}\n </div>\n )}\n </RACDialog>\n </RACPopover>\n </RACDialogTrigger>\n {description && <Description>{description}</Description>}\n {errorMessage && (\n <Text className=\"date-range-picker-error\" elementType=\"span\">\n {errorMessage}\n </Text>\n )}\n </Field>\n );\n\n return localeProp ? (\n <RACI18nProvider locale={localeProp}>{content}</RACI18nProvider>\n ) : (\n content\n );\n}\n"],"names":["dayStartTime","Time","dayEndTime","CalendarAnchorSync","onAnchorChange","state","useContext","RangeCalendarStateContext","anchor","anchorKey","useEffect","timeFromDateValue","date","toDraftState","value","toCalendarDate","combineDateAndTime","time","hideTime","calendarDate","toCalendarDateTime","draftToValue","draft","_a","_b","DateRangePicker","className","localeProp","label","ariaLabel","description","errorMessage","labels","intervalsProp","presetKeys","presetLabels","minValue","maxValue","timezoneProp","isDisabled","isRequired","defaultValue","onChange","portalContainer","useOverlayPortalContainer","ambientLocale","useLocale","locale","timezone","getLocalTimeZone","placeholder","relativeLabel","absoluteLabel","startDateLabel","endDateLabel","cancelLabel","applyLabel","intervals","useMemo","createDateRangePresets","committed","setCommitted","useState","setDraft","previewStart","setPreviewStart","isOpen","setIsOpen","clearPreset","next","withDefaultTimes","handleOpenChange","open","selectPreset","preset","start","end","handleAnchorChange","current","setRange","range","setStartField","dateTime","nextStartTime","currentEnd","pushEnd","setEndField","nextEndTime","apply","cancel","showFooter","selectedText","format","hasPresets","fieldGranularity","startFieldValue","endFieldValue","content","jsxs","Field","clsx","jsx","Label","RACDialogTrigger","RACButton","IconCalendar","IconChevronDown","RACPopover","RACDialog","TextSmallStrong","ListBox","keys","id","item","ListBoxItem","IconCheck","RACDateField","RACLabel","RACGroup","RACDateInput","segment","RACDateSegment","RACRangeCalendar","IconChevronLeft","RACHeading","IconChevronRight","RACCalendarGrid","RACCalendarCell","Button","Description","Text","RACI18nProvider"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),l=require("../../../vendor/clsx/dist/clsx.cjs"),t=require("react-aria-components");;/* empty css */const m=require("../../icons/IconX.cjs"),r=require("../Text/Text.cjs"),c=require("../IconButton/IconButton.cjs"),j=require("../Button/Button.cjs"),N=require("../../hooks/useOverlayPortal.cjs");function u({className:o,type:e="card",...a}){const i=l.clsx(o,"dialog",`dialog-type-${e}`);return s.jsx(t.Dialog,{className:i,...a})}const y=({onPress:o})=>s.jsx(c.IconButton,{className:"dialog-close","aria-label":"Dismiss dialog",onPress:o,variant:"subtle",size:"small",children:s.jsx(m.IconX,{})});function g({...o}){return s.jsx(t.DialogTrigger,{...o})}function B({label:o,icon:e,variant:a,children:i,...n}){return s.jsxs(g,{children:[e?s.jsx(c.IconButton,{variant:a,"aria-label":o,children:e}):s.jsx(j.Button,{variant:a,children:o}),s.jsx(d,{isDismissable:!0,children:s.jsx(u,{...n,children:i})})]})}function T({className:o,...e}){const a=l.clsx(o,"dialog-title");return s.jsx(r.TextHeading,{...e,slot:"title",className:a})}function b({className:o,...e}){const a=l.clsx(o,"dialog-description");return s.jsx(r.Text,{...e,className:a})}function p({bleed:o,className:e,...a}){const i=l.clsx(e,"dialog-body",o&&"dialog-body-bleed");return s.jsx("div",{...a,className:i})}function d({children:o,className:e,isDismissable:a,UNSTABLE_portalContainer:i,...n}){const x=l.clsx(e,"dialog-backdrop"),D=N.useOverlayPortalContainer();return s.jsx(t.ModalOverlay,{className:x,isDismissable:a,...n,UNSTABLE_portalContainer:i??D,children:s.jsx(t.Modal,{className:"dialog-container",children:o})})}exports.Dialog=u;exports.DialogBody=p;exports.DialogButton=B;exports.DialogClose=y;exports.DialogDescription=b;exports.DialogModal=d;exports.DialogTitle=T;exports.DialogTrigger=g;
|
|
2
2
|
//# sourceMappingURL=Dialog.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.cjs","sources":["../../../../../src/ui/primitives/Dialog/Dialog.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { IconX } from \"icons\";\nimport {\n Button,\n ButtonProps,\n IconButton,\n IconButtonProps,\n Text,\n TextHeading,\n type TextHeadingProps,\n type TextProps,\n} from \"primitives\";\nimport {\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Modal as RACModal,\n ModalOverlay as RACModalOverlay,\n type DialogProps as RACDialogProps,\n type DialogTriggerProps as RACDialogTriggerProps,\n type ModalOverlayProps as RACModalOverlayProps,\n} from \"react-aria-components\";\nimport \"./dialog.css\";\n\nexport type DialogProps = RACDialogProps & {\n type?: \"sheet\" | \"card\";\n};\nexport function Dialog({ className, type = \"card\", ...props }: DialogProps) {\n const classNames = clsx(className, \"dialog\", `dialog-type-${type}`);\n return <RACDialog className={classNames} {...props} />;\n}\n\nexport type DialogCloseProps = Pick<IconButtonProps, \"onPress\">;\nexport const DialogClose = ({ onPress }: DialogCloseProps) => (\n <IconButton\n className=\"dialog-close\"\n aria-label=\"Dismiss dialog\"\n onPress={onPress}\n variant=\"subtle\"\n size=\"small\"\n >\n <IconX />\n </IconButton>\n);\n\nexport type DialogTriggerProps = RACDialogTriggerProps;\nexport function DialogTrigger({ ...props }: DialogTriggerProps) {\n return <RACDialogTrigger {...props} />;\n}\n\nexport interface DialogButtonProps\n extends DialogProps,\n Omit<DialogTriggerProps, \"children\"> {\n label: string;\n variant?: ButtonProps[\"variant\"];\n icon?: React.ReactNode;\n}\nexport function DialogButton({\n label,\n icon,\n variant,\n children,\n ...props\n}: DialogButtonProps) {\n return (\n <DialogTrigger>\n {icon ? (\n <IconButton variant={variant} aria-label={label}>\n {icon}\n </IconButton>\n ) : (\n <Button variant={variant}>{label}</Button>\n )}\n <DialogModal isDismissable>\n <Dialog {...props}>{children}</Dialog>\n </DialogModal>\n </DialogTrigger>\n );\n}\n\nexport type DialogTitleProps = TextHeadingProps;\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n const classNames = clsx(className, \"dialog-title\");\n return <TextHeading {...props} slot=\"title\" className={classNames} />;\n}\n\nexport type DialogDescriptionProps = TextProps;\nexport function DialogDescription({\n className,\n ...props\n}: DialogDescriptionProps) {\n const classNames = clsx(className, \"dialog-description\");\n return <Text {...props} className={classNames} />;\n}\n\nexport type DialogBodyProps = {\n bleed?: boolean;\n} & React.ComponentPropsWithoutRef<\"div\">;\nexport function DialogBody({ bleed, className, ...props }: DialogBodyProps) {\n const classNames = clsx(\n className,\n \"dialog-body\",\n bleed && \"dialog-body-bleed\",\n );\n return <div {...props} className={classNames} />;\n}\n\nexport type DialogModalProps = RACModalOverlayProps;\nexport function DialogModal({\n children,\n className,\n isDismissable,\n ...props\n}: DialogModalProps) {\n const classNames = clsx(className, \"dialog-backdrop\");\n return (\n <RACModalOverlay
|
|
1
|
+
{"version":3,"file":"Dialog.cjs","sources":["../../../../../src/ui/primitives/Dialog/Dialog.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useOverlayPortalContainer } from \"hooks\";\nimport { IconX } from \"icons\";\nimport {\n Button,\n ButtonProps,\n IconButton,\n IconButtonProps,\n Text,\n TextHeading,\n type TextHeadingProps,\n type TextProps,\n} from \"primitives\";\nimport {\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Modal as RACModal,\n ModalOverlay as RACModalOverlay,\n type DialogProps as RACDialogProps,\n type DialogTriggerProps as RACDialogTriggerProps,\n type ModalOverlayProps as RACModalOverlayProps,\n} from \"react-aria-components\";\nimport \"./dialog.css\";\n\nexport type DialogProps = RACDialogProps & {\n type?: \"sheet\" | \"card\";\n};\nexport function Dialog({ className, type = \"card\", ...props }: DialogProps) {\n const classNames = clsx(className, \"dialog\", `dialog-type-${type}`);\n return <RACDialog className={classNames} {...props} />;\n}\n\nexport type DialogCloseProps = Pick<IconButtonProps, \"onPress\">;\nexport const DialogClose = ({ onPress }: DialogCloseProps) => (\n <IconButton\n className=\"dialog-close\"\n aria-label=\"Dismiss dialog\"\n onPress={onPress}\n variant=\"subtle\"\n size=\"small\"\n >\n <IconX />\n </IconButton>\n);\n\nexport type DialogTriggerProps = RACDialogTriggerProps;\nexport function DialogTrigger({ ...props }: DialogTriggerProps) {\n return <RACDialogTrigger {...props} />;\n}\n\nexport interface DialogButtonProps\n extends DialogProps,\n Omit<DialogTriggerProps, \"children\"> {\n label: string;\n variant?: ButtonProps[\"variant\"];\n icon?: React.ReactNode;\n}\nexport function DialogButton({\n label,\n icon,\n variant,\n children,\n ...props\n}: DialogButtonProps) {\n return (\n <DialogTrigger>\n {icon ? (\n <IconButton variant={variant} aria-label={label}>\n {icon}\n </IconButton>\n ) : (\n <Button variant={variant}>{label}</Button>\n )}\n <DialogModal isDismissable>\n <Dialog {...props}>{children}</Dialog>\n </DialogModal>\n </DialogTrigger>\n );\n}\n\nexport type DialogTitleProps = TextHeadingProps;\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n const classNames = clsx(className, \"dialog-title\");\n return <TextHeading {...props} slot=\"title\" className={classNames} />;\n}\n\nexport type DialogDescriptionProps = TextProps;\nexport function DialogDescription({\n className,\n ...props\n}: DialogDescriptionProps) {\n const classNames = clsx(className, \"dialog-description\");\n return <Text {...props} className={classNames} />;\n}\n\nexport type DialogBodyProps = {\n bleed?: boolean;\n} & React.ComponentPropsWithoutRef<\"div\">;\nexport function DialogBody({ bleed, className, ...props }: DialogBodyProps) {\n const classNames = clsx(\n className,\n \"dialog-body\",\n bleed && \"dialog-body-bleed\",\n );\n return <div {...props} className={classNames} />;\n}\n\nexport type DialogModalProps = RACModalOverlayProps;\nexport function DialogModal({\n children,\n className,\n isDismissable,\n UNSTABLE_portalContainer,\n ...props\n}: DialogModalProps) {\n const classNames = clsx(className, \"dialog-backdrop\");\n // Sem um container explícito, o RAC faz portal no document.body — fora da\n // shadow root do MFE, onde o CSS do DS não alcança, e o dialog abre sem\n // estilo. Ver OverlayPortalProvider em ui/hooks/useOverlayPortal.\n const portalContainer = useOverlayPortalContainer();\n return (\n <RACModalOverlay\n className={classNames}\n isDismissable={isDismissable}\n {...props}\n UNSTABLE_portalContainer={UNSTABLE_portalContainer ?? portalContainer}\n >\n <RACModal className={\"dialog-container\"}>{children}</RACModal>\n </RACModalOverlay>\n );\n}\n"],"names":["Dialog","className","type","props","classNames","clsx","jsx","RACDialog","DialogClose","onPress","IconButton","IconX","DialogTrigger","RACDialogTrigger","DialogButton","label","icon","variant","children","Button","DialogModal","DialogTitle","TextHeading","DialogDescription","Text","DialogBody","bleed","isDismissable","UNSTABLE_portalContainer","portalContainer","useOverlayPortalContainer","RACModalOverlay","RACModal"],"mappings":"qaA2BO,SAASA,EAAO,CAAE,UAAAC,EAAW,KAAAC,EAAO,OAAQ,GAAGC,GAAsB,CAC1E,MAAMC,EAAaC,EAAAA,KAAKJ,EAAW,SAAU,eAAeC,CAAI,EAAE,EAClE,OAAOI,EAAAA,IAACC,EAAAA,OAAA,CAAU,UAAWH,EAAa,GAAGD,EAAO,CACtD,CAGO,MAAMK,EAAc,CAAC,CAAE,QAAAC,CAAA,IAC5BH,EAAAA,IAACI,EAAAA,WAAA,CACC,UAAU,eACV,aAAW,iBACX,QAAAD,EACA,QAAQ,SACR,KAAK,QAEL,eAACE,EAAAA,MAAA,CAAA,CAAM,CAAA,CACT,EAIK,SAASC,EAAc,CAAE,GAAGT,GAA6B,CAC9D,OAAOG,MAACO,EAAAA,cAAA,CAAkB,GAAGV,CAAA,CAAO,CACtC,CASO,SAASW,EAAa,CAC3B,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,GAAGf,CACL,EAAsB,CACpB,cACGS,EAAA,CACE,SAAA,CAAAI,EACCV,EAAAA,IAACI,EAAAA,WAAA,CAAW,QAAAO,EAAkB,aAAYF,EACvC,WACH,EAEAT,EAAAA,IAACa,EAAAA,OAAA,CAAO,QAAAF,EAAmB,SAAAF,EAAM,EAEnCT,EAAAA,IAACc,GAAY,cAAa,GACxB,eAACpB,EAAA,CAAQ,GAAGG,EAAQ,SAAAe,CAAA,CAAS,CAAA,CAC/B,CAAA,EACF,CAEJ,CAGO,SAASG,EAAY,CAAE,UAAApB,EAAW,GAAGE,GAA2B,CACrE,MAAMC,EAAaC,EAAAA,KAAKJ,EAAW,cAAc,EACjD,aAAQqB,EAAAA,YAAA,CAAa,GAAGnB,EAAO,KAAK,QAAQ,UAAWC,EAAY,CACrE,CAGO,SAASmB,EAAkB,CAChC,UAAAtB,EACA,GAAGE,CACL,EAA2B,CACzB,MAAMC,EAAaC,EAAAA,KAAKJ,EAAW,oBAAoB,EACvD,OAAOK,EAAAA,IAACkB,EAAAA,KAAA,CAAM,GAAGrB,EAAO,UAAWC,EAAY,CACjD,CAKO,SAASqB,EAAW,CAAE,MAAAC,EAAO,UAAAzB,EAAW,GAAGE,GAA0B,CAC1E,MAAMC,EAAaC,EAAAA,KACjBJ,EACA,cACAyB,GAAS,mBAAA,EAEX,OAAOpB,EAAAA,IAAC,MAAA,CAAK,GAAGH,EAAO,UAAWC,EAAY,CAChD,CAGO,SAASgB,EAAY,CAC1B,SAAAF,EACA,UAAAjB,EACA,cAAA0B,EACA,yBAAAC,EACA,GAAGzB,CACL,EAAqB,CACnB,MAAMC,EAAaC,EAAAA,KAAKJ,EAAW,iBAAiB,EAI9C4B,EAAkBC,EAAAA,0BAAA,EACxB,OACExB,EAAAA,IAACyB,EAAAA,aAAA,CACC,UAAW3B,EACX,cAAAuB,EACC,GAAGxB,EACJ,yBAA0ByB,GAA4BC,EAEtD,SAAAvB,EAAAA,IAAC0B,EAAAA,MAAA,CAAS,UAAW,mBAAqB,SAAAd,CAAA,CAAS,CAAA,CAAA,CAGzD"}
|
|
@@ -1,77 +1,88 @@
|
|
|
1
|
-
import { jsx as a, jsxs as
|
|
2
|
-
import { clsx as
|
|
3
|
-
import { Dialog as
|
|
1
|
+
import { jsx as a, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
import { clsx as s } from "../../../vendor/clsx/dist/clsx.js";
|
|
3
|
+
import { Dialog as g, DialogTrigger as d, ModalOverlay as u, Modal as p } from "react-aria-components";
|
|
4
4
|
/* empty css */
|
|
5
|
-
import { IconX as
|
|
6
|
-
import { TextHeading as D, Text as
|
|
7
|
-
import { IconButton as
|
|
8
|
-
import { Button as
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import { IconX as f } from "../../icons/IconX.js";
|
|
6
|
+
import { TextHeading as D, Text as N } from "../Text/Text.js";
|
|
7
|
+
import { IconButton as e } from "../IconButton/IconButton.js";
|
|
8
|
+
import { Button as b } from "../Button/Button.js";
|
|
9
|
+
import { useOverlayPortalContainer as T } from "../../hooks/useOverlayPortal.js";
|
|
10
|
+
function h({ className: o, type: i = "card", ...l }) {
|
|
11
|
+
const r = s(o, "dialog", `dialog-type-${i}`);
|
|
12
|
+
return /* @__PURE__ */ a(g, { className: r, ...l });
|
|
12
13
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
14
|
+
const z = ({ onPress: o }) => /* @__PURE__ */ a(
|
|
15
|
+
e,
|
|
15
16
|
{
|
|
16
17
|
className: "dialog-close",
|
|
17
18
|
"aria-label": "Dismiss dialog",
|
|
18
19
|
onPress: o,
|
|
19
20
|
variant: "subtle",
|
|
20
21
|
size: "small",
|
|
21
|
-
children: /* @__PURE__ */ a(
|
|
22
|
+
children: /* @__PURE__ */ a(f, {})
|
|
22
23
|
}
|
|
23
24
|
);
|
|
24
|
-
function
|
|
25
|
-
return /* @__PURE__ */ a(
|
|
25
|
+
function x({ ...o }) {
|
|
26
|
+
return /* @__PURE__ */ a(d, { ...o });
|
|
26
27
|
}
|
|
27
|
-
function
|
|
28
|
+
function A({
|
|
28
29
|
label: o,
|
|
29
30
|
icon: i,
|
|
30
31
|
variant: l,
|
|
31
|
-
children:
|
|
32
|
-
...
|
|
32
|
+
children: r,
|
|
33
|
+
...t
|
|
33
34
|
}) {
|
|
34
|
-
return /* @__PURE__ */
|
|
35
|
-
i ? /* @__PURE__ */ a(
|
|
36
|
-
/* @__PURE__ */ a(
|
|
35
|
+
return /* @__PURE__ */ m(x, { children: [
|
|
36
|
+
i ? /* @__PURE__ */ a(e, { variant: l, "aria-label": o, children: i }) : /* @__PURE__ */ a(b, { variant: l, children: o }),
|
|
37
|
+
/* @__PURE__ */ a(y, { isDismissable: !0, children: /* @__PURE__ */ a(h, { ...t, children: r }) })
|
|
37
38
|
] });
|
|
38
39
|
}
|
|
39
|
-
function
|
|
40
|
-
const l =
|
|
40
|
+
function E({ className: o, ...i }) {
|
|
41
|
+
const l = s(o, "dialog-title");
|
|
41
42
|
return /* @__PURE__ */ a(D, { ...i, slot: "title", className: l });
|
|
42
43
|
}
|
|
43
|
-
function
|
|
44
|
+
function H({
|
|
44
45
|
className: o,
|
|
45
46
|
...i
|
|
46
47
|
}) {
|
|
47
|
-
const l =
|
|
48
|
-
return /* @__PURE__ */ a(
|
|
48
|
+
const l = s(o, "dialog-description");
|
|
49
|
+
return /* @__PURE__ */ a(N, { ...i, className: l });
|
|
49
50
|
}
|
|
50
|
-
function
|
|
51
|
-
const
|
|
51
|
+
function L({ bleed: o, className: i, ...l }) {
|
|
52
|
+
const r = s(
|
|
52
53
|
i,
|
|
53
54
|
"dialog-body",
|
|
54
55
|
o && "dialog-body-bleed"
|
|
55
56
|
);
|
|
56
|
-
return /* @__PURE__ */ a("div", { ...l, className:
|
|
57
|
+
return /* @__PURE__ */ a("div", { ...l, className: r });
|
|
57
58
|
}
|
|
58
|
-
function
|
|
59
|
+
function y({
|
|
59
60
|
children: o,
|
|
60
61
|
className: i,
|
|
61
62
|
isDismissable: l,
|
|
62
|
-
|
|
63
|
+
UNSTABLE_portalContainer: r,
|
|
64
|
+
...t
|
|
63
65
|
}) {
|
|
64
|
-
const
|
|
65
|
-
return /* @__PURE__ */ a(
|
|
66
|
+
const n = s(i, "dialog-backdrop"), c = T();
|
|
67
|
+
return /* @__PURE__ */ a(
|
|
68
|
+
u,
|
|
69
|
+
{
|
|
70
|
+
className: n,
|
|
71
|
+
isDismissable: l,
|
|
72
|
+
...t,
|
|
73
|
+
UNSTABLE_portalContainer: r ?? c,
|
|
74
|
+
children: /* @__PURE__ */ a(p, { className: "dialog-container", children: o })
|
|
75
|
+
}
|
|
76
|
+
);
|
|
66
77
|
}
|
|
67
78
|
export {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
h as Dialog,
|
|
80
|
+
L as DialogBody,
|
|
81
|
+
A as DialogButton,
|
|
82
|
+
z as DialogClose,
|
|
83
|
+
H as DialogDescription,
|
|
84
|
+
y as DialogModal,
|
|
85
|
+
E as DialogTitle,
|
|
86
|
+
x as DialogTrigger
|
|
76
87
|
};
|
|
77
88
|
//# sourceMappingURL=Dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["../../../../../src/ui/primitives/Dialog/Dialog.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { IconX } from \"icons\";\nimport {\n Button,\n ButtonProps,\n IconButton,\n IconButtonProps,\n Text,\n TextHeading,\n type TextHeadingProps,\n type TextProps,\n} from \"primitives\";\nimport {\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Modal as RACModal,\n ModalOverlay as RACModalOverlay,\n type DialogProps as RACDialogProps,\n type DialogTriggerProps as RACDialogTriggerProps,\n type ModalOverlayProps as RACModalOverlayProps,\n} from \"react-aria-components\";\nimport \"./dialog.css\";\n\nexport type DialogProps = RACDialogProps & {\n type?: \"sheet\" | \"card\";\n};\nexport function Dialog({ className, type = \"card\", ...props }: DialogProps) {\n const classNames = clsx(className, \"dialog\", `dialog-type-${type}`);\n return <RACDialog className={classNames} {...props} />;\n}\n\nexport type DialogCloseProps = Pick<IconButtonProps, \"onPress\">;\nexport const DialogClose = ({ onPress }: DialogCloseProps) => (\n <IconButton\n className=\"dialog-close\"\n aria-label=\"Dismiss dialog\"\n onPress={onPress}\n variant=\"subtle\"\n size=\"small\"\n >\n <IconX />\n </IconButton>\n);\n\nexport type DialogTriggerProps = RACDialogTriggerProps;\nexport function DialogTrigger({ ...props }: DialogTriggerProps) {\n return <RACDialogTrigger {...props} />;\n}\n\nexport interface DialogButtonProps\n extends DialogProps,\n Omit<DialogTriggerProps, \"children\"> {\n label: string;\n variant?: ButtonProps[\"variant\"];\n icon?: React.ReactNode;\n}\nexport function DialogButton({\n label,\n icon,\n variant,\n children,\n ...props\n}: DialogButtonProps) {\n return (\n <DialogTrigger>\n {icon ? (\n <IconButton variant={variant} aria-label={label}>\n {icon}\n </IconButton>\n ) : (\n <Button variant={variant}>{label}</Button>\n )}\n <DialogModal isDismissable>\n <Dialog {...props}>{children}</Dialog>\n </DialogModal>\n </DialogTrigger>\n );\n}\n\nexport type DialogTitleProps = TextHeadingProps;\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n const classNames = clsx(className, \"dialog-title\");\n return <TextHeading {...props} slot=\"title\" className={classNames} />;\n}\n\nexport type DialogDescriptionProps = TextProps;\nexport function DialogDescription({\n className,\n ...props\n}: DialogDescriptionProps) {\n const classNames = clsx(className, \"dialog-description\");\n return <Text {...props} className={classNames} />;\n}\n\nexport type DialogBodyProps = {\n bleed?: boolean;\n} & React.ComponentPropsWithoutRef<\"div\">;\nexport function DialogBody({ bleed, className, ...props }: DialogBodyProps) {\n const classNames = clsx(\n className,\n \"dialog-body\",\n bleed && \"dialog-body-bleed\",\n );\n return <div {...props} className={classNames} />;\n}\n\nexport type DialogModalProps = RACModalOverlayProps;\nexport function DialogModal({\n children,\n className,\n isDismissable,\n ...props\n}: DialogModalProps) {\n const classNames = clsx(className, \"dialog-backdrop\");\n return (\n <RACModalOverlay
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../../../../../src/ui/primitives/Dialog/Dialog.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useOverlayPortalContainer } from \"hooks\";\nimport { IconX } from \"icons\";\nimport {\n Button,\n ButtonProps,\n IconButton,\n IconButtonProps,\n Text,\n TextHeading,\n type TextHeadingProps,\n type TextProps,\n} from \"primitives\";\nimport {\n Dialog as RACDialog,\n DialogTrigger as RACDialogTrigger,\n Modal as RACModal,\n ModalOverlay as RACModalOverlay,\n type DialogProps as RACDialogProps,\n type DialogTriggerProps as RACDialogTriggerProps,\n type ModalOverlayProps as RACModalOverlayProps,\n} from \"react-aria-components\";\nimport \"./dialog.css\";\n\nexport type DialogProps = RACDialogProps & {\n type?: \"sheet\" | \"card\";\n};\nexport function Dialog({ className, type = \"card\", ...props }: DialogProps) {\n const classNames = clsx(className, \"dialog\", `dialog-type-${type}`);\n return <RACDialog className={classNames} {...props} />;\n}\n\nexport type DialogCloseProps = Pick<IconButtonProps, \"onPress\">;\nexport const DialogClose = ({ onPress }: DialogCloseProps) => (\n <IconButton\n className=\"dialog-close\"\n aria-label=\"Dismiss dialog\"\n onPress={onPress}\n variant=\"subtle\"\n size=\"small\"\n >\n <IconX />\n </IconButton>\n);\n\nexport type DialogTriggerProps = RACDialogTriggerProps;\nexport function DialogTrigger({ ...props }: DialogTriggerProps) {\n return <RACDialogTrigger {...props} />;\n}\n\nexport interface DialogButtonProps\n extends DialogProps,\n Omit<DialogTriggerProps, \"children\"> {\n label: string;\n variant?: ButtonProps[\"variant\"];\n icon?: React.ReactNode;\n}\nexport function DialogButton({\n label,\n icon,\n variant,\n children,\n ...props\n}: DialogButtonProps) {\n return (\n <DialogTrigger>\n {icon ? (\n <IconButton variant={variant} aria-label={label}>\n {icon}\n </IconButton>\n ) : (\n <Button variant={variant}>{label}</Button>\n )}\n <DialogModal isDismissable>\n <Dialog {...props}>{children}</Dialog>\n </DialogModal>\n </DialogTrigger>\n );\n}\n\nexport type DialogTitleProps = TextHeadingProps;\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n const classNames = clsx(className, \"dialog-title\");\n return <TextHeading {...props} slot=\"title\" className={classNames} />;\n}\n\nexport type DialogDescriptionProps = TextProps;\nexport function DialogDescription({\n className,\n ...props\n}: DialogDescriptionProps) {\n const classNames = clsx(className, \"dialog-description\");\n return <Text {...props} className={classNames} />;\n}\n\nexport type DialogBodyProps = {\n bleed?: boolean;\n} & React.ComponentPropsWithoutRef<\"div\">;\nexport function DialogBody({ bleed, className, ...props }: DialogBodyProps) {\n const classNames = clsx(\n className,\n \"dialog-body\",\n bleed && \"dialog-body-bleed\",\n );\n return <div {...props} className={classNames} />;\n}\n\nexport type DialogModalProps = RACModalOverlayProps;\nexport function DialogModal({\n children,\n className,\n isDismissable,\n UNSTABLE_portalContainer,\n ...props\n}: DialogModalProps) {\n const classNames = clsx(className, \"dialog-backdrop\");\n // Sem um container explícito, o RAC faz portal no document.body — fora da\n // shadow root do MFE, onde o CSS do DS não alcança, e o dialog abre sem\n // estilo. Ver OverlayPortalProvider em ui/hooks/useOverlayPortal.\n const portalContainer = useOverlayPortalContainer();\n return (\n <RACModalOverlay\n className={classNames}\n isDismissable={isDismissable}\n {...props}\n UNSTABLE_portalContainer={UNSTABLE_portalContainer ?? portalContainer}\n >\n <RACModal className={\"dialog-container\"}>{children}</RACModal>\n </RACModalOverlay>\n );\n}\n"],"names":["Dialog","className","type","props","classNames","clsx","jsx","RACDialog","DialogClose","onPress","IconButton","IconX","DialogTrigger","RACDialogTrigger","DialogButton","label","icon","variant","children","Button","DialogModal","DialogTitle","TextHeading","DialogDescription","Text","DialogBody","bleed","isDismissable","UNSTABLE_portalContainer","portalContainer","useOverlayPortalContainer","RACModalOverlay","RACModal"],"mappings":";;;;;;;;;AA2BO,SAASA,EAAO,EAAE,WAAAC,GAAW,MAAAC,IAAO,QAAQ,GAAGC,KAAsB;AAC1E,QAAMC,IAAaC,EAAKJ,GAAW,UAAU,eAAeC,CAAI,EAAE;AAClE,SAAO,gBAAAI,EAACC,GAAA,EAAU,WAAWH,GAAa,GAAGD,GAAO;AACtD;AAGO,MAAMK,IAAc,CAAC,EAAE,SAAAC,EAAA,MAC5B,gBAAAH;AAAA,EAACI;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV,cAAW;AAAA,IACX,SAAAD;AAAA,IACA,SAAQ;AAAA,IACR,MAAK;AAAA,IAEL,4BAACE,GAAA,CAAA,CAAM;AAAA,EAAA;AACT;AAIK,SAASC,EAAc,EAAE,GAAGT,KAA6B;AAC9D,SAAO,gBAAAG,EAACO,GAAA,EAAkB,GAAGV,EAAA,CAAO;AACtC;AASO,SAASW,EAAa;AAAA,EAC3B,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGf;AACL,GAAsB;AACpB,2BACGS,GAAA,EACE,UAAA;AAAA,IAAAI,IACC,gBAAAV,EAACI,GAAA,EAAW,SAAAO,GAAkB,cAAYF,GACvC,aACH,IAEA,gBAAAT,EAACa,GAAA,EAAO,SAAAF,GAAmB,UAAAF,GAAM;AAAA,IAEnC,gBAAAT,EAACc,KAAY,eAAa,IACxB,4BAACpB,GAAA,EAAQ,GAAGG,GAAQ,UAAAe,EAAA,CAAS,EAAA,CAC/B;AAAA,EAAA,GACF;AAEJ;AAGO,SAASG,EAAY,EAAE,WAAApB,GAAW,GAAGE,KAA2B;AACrE,QAAMC,IAAaC,EAAKJ,GAAW,cAAc;AACjD,2BAAQqB,GAAA,EAAa,GAAGnB,GAAO,MAAK,SAAQ,WAAWC,GAAY;AACrE;AAGO,SAASmB,EAAkB;AAAA,EAChC,WAAAtB;AAAA,EACA,GAAGE;AACL,GAA2B;AACzB,QAAMC,IAAaC,EAAKJ,GAAW,oBAAoB;AACvD,SAAO,gBAAAK,EAACkB,GAAA,EAAM,GAAGrB,GAAO,WAAWC,GAAY;AACjD;AAKO,SAASqB,EAAW,EAAE,OAAAC,GAAO,WAAAzB,GAAW,GAAGE,KAA0B;AAC1E,QAAMC,IAAaC;AAAA,IACjBJ;AAAA,IACA;AAAA,IACAyB,KAAS;AAAA,EAAA;AAEX,SAAO,gBAAApB,EAAC,OAAA,EAAK,GAAGH,GAAO,WAAWC,GAAY;AAChD;AAGO,SAASgB,EAAY;AAAA,EAC1B,UAAAF;AAAA,EACA,WAAAjB;AAAA,EACA,eAAA0B;AAAA,EACA,0BAAAC;AAAA,EACA,GAAGzB;AACL,GAAqB;AACnB,QAAMC,IAAaC,EAAKJ,GAAW,iBAAiB,GAI9C4B,IAAkBC,EAAA;AACxB,SACE,gBAAAxB;AAAA,IAACyB;AAAAA,IAAA;AAAA,MACC,WAAW3B;AAAA,MACX,eAAAuB;AAAA,MACC,GAAGxB;AAAA,MACJ,0BAA0ByB,KAA4BC;AAAA,MAEtD,UAAA,gBAAAvB,EAAC0B,GAAA,EAAS,WAAW,oBAAqB,UAAAd,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAGzD;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("react"),S=require("../../../vendor/clsx/dist/clsx.cjs"),x=require("@codemirror/state"),v=require("@codemirror/view"),q=require("@codemirror/lang-json"),d=require("@codemirror/language"),c=require("@lezer/highlight");;/* empty css */const E=require("../../icons/IconChevronDown.cjs"),R=require("../../icons/IconChevronRight.cjs"),j=require("../Button/Button.cjs"),C=220,N=d.HighlightStyle.define([{tag:c.tags.propertyName,color:"var(--json-viewer-color-key)"},{tag:c.tags.string,color:"var(--json-viewer-color-string)",fontWeight:600},{tag:[c.tags.number,c.tags.bool,c.tags.null],color:"var(--json-viewer-color-scalar)"},{tag:[c.tags.separator,c.tags.squareBracket,c.tags.brace],color:"var(--json-viewer-color-punctuation)"}]),H=v.EditorView.theme({"&":{backgroundColor:"transparent",color:"var(--json-viewer-color-punctuation)",fontSize:"13px"},"&.cm-focused":{outline:"none"},".cm-content":{fontFamily:"var(--sds-typography-family-mono)",padding:"45px 124px 12px 4px"},".cm-gutters":{backgroundColor:"transparent",border:"none",color:"var(--json-viewer-color-caret)",paddingLeft:"5px"},".cm-scroller":{overflow:"auto"}}),I=[q.json(),d.foldGutter(),d.syntaxHighlighting(N)];function k(t){try{return JSON.stringify(t,null,2)??"null"}catch{return String(t)}}function z(t){return typeof t=="number"?`${t}px`:t}function p(t,i){i.length>0&&t.dispatch({effects:i.map(o=>d.foldEffect.of(o))})}function B(t){const i=[],o=t.length;let n=0;for(;n<o&&t[n]!=="{"&&t[n]!=="[";)n++;if(n>=o)return i;let f=0,l=!1,s=-1;for(;n<o;n++){const r=t[n];if(l){r==="\\"?n++:r==='"'&&(l=!1);continue}if(r==='"'){l=!0;continue}if(r==="{"||r==="["){f++,f===2&&(s=n+1);continue}(r==="}"||r==="]")&&(f===2&&s!==-1&&(i.push({from:s,to:n}),s=-1),f--)}return i}function F({value:t,expandAllLabel:i,actions:o,className:n,height:f}){const l=u.useRef(null),s=u.useRef(null),[r,m]=u.useState(!1),g=u.useMemo(()=>k(t),[t]),h=u.useMemo(()=>B(g),[g]),y=z(f??C);u.useEffect(()=>{if(!l.current)return;const e=new v.EditorView({parent:l.current,state:x.EditorState.create({doc:g,extensions:[v.EditorView.editable.of(!1),x.EditorState.readOnly.of(!0),H,...I]})});return s.current=e,p(e,h),()=>{e.destroy(),s.current=null}},[]),u.useEffect(()=>{const e=s.current;if(!e)return;const w=e.state.doc.toString();w!==g&&(e.dispatch({changes:{from:0,to:w.length,insert:g}}),p(e,h),m(!1))},[g,h]);const b=()=>{const e=s.current;e&&(r?p(e,h):d.unfoldAll(e),m(!r))};return a.jsxs("div",{className:S.clsx("json-viewer",n),children:[a.jsx(j.Button,{"aria-label":i,variant:"subtle",size:"small",className:"json-viewer-expand-all",onPress:b,children:r?a.jsx(E.IconChevronDown,{size:"14"}):a.jsx(R.IconChevronRight,{size:"14"})}),o&&o.length>0&&a.jsx("div",{className:"json-viewer-actions",children:o.map(e=>a.jsx(j.Button,{"aria-label":e.label,variant:"subtle",size:"small",className:"json-viewer-action",onPress:e.onPress,children:e.icon},e.key))}),a.jsx("div",{ref:l,className:"json-viewer-content",style:{height:y}})]})}exports.JsonViewer=F;
|
|
2
|
+
//# sourceMappingURL=JsonViewer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonViewer.cjs","sources":["../../../../../src/ui/primitives/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { json } from \"@codemirror/lang-json\";\nimport { foldEffect, foldGutter, HighlightStyle, syntaxHighlighting, unfoldAll } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { Button } from \"primitives\";\nimport { IconChevronDown, IconChevronRight } from \"icons\";\nimport \"./jsonviewer.css\";\n\nexport interface JsonViewerAction {\n key: string;\n label: string;\n icon: ReactNode;\n onPress: () => void;\n}\n\nexport interface JsonViewerProps {\n value: unknown;\n expandAllLabel: string;\n actions?: JsonViewerAction[];\n className?: string;\n height?: string | number;\n}\n\nconst DEFAULT_HEIGHT = 220;\n\nconst jsonHighlightStyle = HighlightStyle.define([\n { tag: t.propertyName, color: \"var(--json-viewer-color-key)\" },\n { tag: t.string, color: \"var(--json-viewer-color-string)\", fontWeight: 600 },\n { tag: [t.number, t.bool, t.null], color: \"var(--json-viewer-color-scalar)\" },\n { tag: [t.separator, t.squareBracket, t.brace], color: \"var(--json-viewer-color-punctuation)\" },\n]);\n\nconst theme = EditorView.theme({\n \"&\": { backgroundColor: \"transparent\", color: \"var(--json-viewer-color-punctuation)\", fontSize: \"13px\" },\n \"&.cm-focused\": { outline: \"none\" },\n \".cm-content\": { fontFamily: \"var(--sds-typography-family-mono)\", padding: \"45px 124px 12px 4px\" },\n \".cm-gutters\": {\n backgroundColor: \"transparent\",\n border: \"none\",\n color: \"var(--json-viewer-color-caret)\",\n paddingLeft: \"5px\",\n },\n \".cm-scroller\": { overflow: \"auto\" },\n});\n\nconst extensions = [json(), foldGutter(), syntaxHighlighting(jsonHighlightStyle)];\n\nfunction serialize(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return String(value);\n }\n}\n\nfunction toCssSize(size: string | number): string {\n return typeof size === \"number\" ? `${size}px` : size;\n}\n\nfunction applyFoldRanges(view: EditorView, ranges: { from: number; to: number }[]) {\n if (ranges.length > 0) view.dispatch({ effects: ranges.map((range) => foldEffect.of(range)) });\n}\n\n/**\n * Finds the fold range of every direct child (depth 1) of the root object/array\n * by scanning the text itself for matching brackets. This mirrors what\n * CodeMirror's `foldable()` would compute, but doesn't depend on the lezer\n * parser having finished tokenizing the document — which for a multi-MB\n * document is not guaranteed synchronously at mount time.\n */\nfunction computeFirstLevelFoldRanges(text: string): { from: number; to: number }[] {\n const ranges: { from: number; to: number }[] = [];\n const n = text.length;\n let i = 0;\n while (i < n && text[i] !== \"{\" && text[i] !== \"[\") i++;\n if (i >= n) return ranges;\n\n let depth = 0;\n let inString = false;\n let pendingStart = -1;\n for (; i < n; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\" || ch === \"[\") {\n depth++;\n if (depth === 2) pendingStart = i + 1;\n continue;\n }\n if (ch === \"}\" || ch === \"]\") {\n if (depth === 2 && pendingStart !== -1) {\n ranges.push({ from: pendingStart, to: i });\n pendingStart = -1;\n }\n depth--;\n }\n }\n return ranges;\n}\n\nexport function JsonViewer({ value, expandAllLabel, actions, className, height }: JsonViewerProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const text = useMemo(() => serialize(value), [value]);\n const foldRanges = useMemo(() => computeFirstLevelFoldRanges(text), [text]);\n const editorHeight = toCssSize(height ?? DEFAULT_HEIGHT);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const view = new EditorView({\n parent: containerRef.current,\n state: EditorState.create({\n doc: text,\n extensions: [EditorView.editable.of(false), EditorState.readOnly.of(true), theme, ...extensions],\n }),\n });\n viewRef.current = view;\n applyFoldRanges(view, foldRanges);\n return () => {\n view.destroy();\n viewRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n const currentText = view.state.doc.toString();\n if (currentText !== text) {\n view.dispatch({ changes: { from: 0, to: currentText.length, insert: text } });\n applyFoldRanges(view, foldRanges);\n setIsExpanded(false);\n }\n }, [text, foldRanges]);\n\n const toggleExpandAll = () => {\n const view = viewRef.current;\n if (!view) return;\n if (isExpanded) {\n applyFoldRanges(view, foldRanges);\n } else {\n unfoldAll(view);\n }\n setIsExpanded(!isExpanded);\n };\n\n return (\n <div className={clsx(\"json-viewer\", className)}>\n <Button\n aria-label={expandAllLabel}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-expand-all\"\n onPress={toggleExpandAll}\n >\n {isExpanded ? <IconChevronDown size=\"14\" /> : <IconChevronRight size=\"14\" />}\n </Button>\n {actions && actions.length > 0 && (\n <div className=\"json-viewer-actions\">\n {actions.map((action) => (\n <Button\n key={action.key}\n aria-label={action.label}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-action\"\n onPress={action.onPress}\n >\n {action.icon}\n </Button>\n ))}\n </div>\n )}\n <div ref={containerRef} className=\"json-viewer-content\" style={{ height: editorHeight }} />\n </div>\n );\n}\n"],"names":["DEFAULT_HEIGHT","jsonHighlightStyle","HighlightStyle","t","theme","EditorView","extensions","json","foldGutter","syntaxHighlighting","serialize","value","toCssSize","size","applyFoldRanges","view","ranges","range","foldEffect","computeFirstLevelFoldRanges","text","n","i","depth","inString","pendingStart","ch","JsonViewer","expandAllLabel","actions","className","height","containerRef","useRef","viewRef","isExpanded","setIsExpanded","useState","useMemo","foldRanges","editorHeight","useEffect","EditorState","currentText","toggleExpandAll","unfoldAll","clsx","jsx","Button","IconChevronDown","IconChevronRight","action"],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsxs as E, jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as v, useState as N, useMemo as w, useEffect as x } from "react";
|
|
3
|
+
import { clsx as R } from "../../../vendor/clsx/dist/clsx.js";
|
|
4
|
+
import { EditorState as y } from "@codemirror/state";
|
|
5
|
+
import { EditorView as d } from "@codemirror/view";
|
|
6
|
+
import { json as H } from "@codemirror/lang-json";
|
|
7
|
+
import { foldGutter as k, syntaxHighlighting as z, HighlightStyle as C, foldEffect as F, unfoldAll as I } from "@codemirror/language";
|
|
8
|
+
import { tags as l } from "@lezer/highlight";
|
|
9
|
+
/* empty css */
|
|
10
|
+
import { IconChevronDown as A } from "../../icons/IconChevronDown.js";
|
|
11
|
+
import { IconChevronRight as L } from "../../icons/IconChevronRight.js";
|
|
12
|
+
import { Button as j } from "../Button/Button.js";
|
|
13
|
+
const P = 220, T = C.define([
|
|
14
|
+
{ tag: l.propertyName, color: "var(--json-viewer-color-key)" },
|
|
15
|
+
{ tag: l.string, color: "var(--json-viewer-color-string)", fontWeight: 600 },
|
|
16
|
+
{ tag: [l.number, l.bool, l.null], color: "var(--json-viewer-color-scalar)" },
|
|
17
|
+
{ tag: [l.separator, l.squareBracket, l.brace], color: "var(--json-viewer-color-punctuation)" }
|
|
18
|
+
]), B = d.theme({
|
|
19
|
+
"&": { backgroundColor: "transparent", color: "var(--json-viewer-color-punctuation)", fontSize: "13px" },
|
|
20
|
+
"&.cm-focused": { outline: "none" },
|
|
21
|
+
".cm-content": { fontFamily: "var(--sds-typography-family-mono)", padding: "45px 124px 12px 4px" },
|
|
22
|
+
".cm-gutters": {
|
|
23
|
+
backgroundColor: "transparent",
|
|
24
|
+
border: "none",
|
|
25
|
+
color: "var(--json-viewer-color-caret)",
|
|
26
|
+
paddingLeft: "5px"
|
|
27
|
+
},
|
|
28
|
+
".cm-scroller": { overflow: "auto" }
|
|
29
|
+
}), D = [H(), k(), z(T)];
|
|
30
|
+
function G(t) {
|
|
31
|
+
try {
|
|
32
|
+
return JSON.stringify(t, null, 2) ?? "null";
|
|
33
|
+
} catch {
|
|
34
|
+
return String(t);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function J(t) {
|
|
38
|
+
return typeof t == "number" ? `${t}px` : t;
|
|
39
|
+
}
|
|
40
|
+
function p(t, s) {
|
|
41
|
+
s.length > 0 && t.dispatch({ effects: s.map((n) => F.of(n)) });
|
|
42
|
+
}
|
|
43
|
+
function O(t) {
|
|
44
|
+
const s = [], n = t.length;
|
|
45
|
+
let r = 0;
|
|
46
|
+
for (; r < n && t[r] !== "{" && t[r] !== "["; ) r++;
|
|
47
|
+
if (r >= n) return s;
|
|
48
|
+
let c = 0, a = !1, i = -1;
|
|
49
|
+
for (; r < n; r++) {
|
|
50
|
+
const o = t[r];
|
|
51
|
+
if (a) {
|
|
52
|
+
o === "\\" ? r++ : o === '"' && (a = !1);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (o === '"') {
|
|
56
|
+
a = !0;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (o === "{" || o === "[") {
|
|
60
|
+
c++, c === 2 && (i = r + 1);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
(o === "}" || o === "]") && (c === 2 && i !== -1 && (s.push({ from: i, to: r }), i = -1), c--);
|
|
64
|
+
}
|
|
65
|
+
return s;
|
|
66
|
+
}
|
|
67
|
+
function ee({ value: t, expandAllLabel: s, actions: n, className: r, height: c }) {
|
|
68
|
+
const a = v(null), i = v(null), [o, g] = N(!1), f = w(() => G(t), [t]), m = w(() => O(f), [f]), b = J(c ?? P);
|
|
69
|
+
x(() => {
|
|
70
|
+
if (!a.current) return;
|
|
71
|
+
const e = new d({
|
|
72
|
+
parent: a.current,
|
|
73
|
+
state: y.create({
|
|
74
|
+
doc: f,
|
|
75
|
+
extensions: [d.editable.of(!1), y.readOnly.of(!0), B, ...D]
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
return i.current = e, p(e, m), () => {
|
|
79
|
+
e.destroy(), i.current = null;
|
|
80
|
+
};
|
|
81
|
+
}, []), x(() => {
|
|
82
|
+
const e = i.current;
|
|
83
|
+
if (!e) return;
|
|
84
|
+
const h = e.state.doc.toString();
|
|
85
|
+
h !== f && (e.dispatch({ changes: { from: 0, to: h.length, insert: f } }), p(e, m), g(!1));
|
|
86
|
+
}, [f, m]);
|
|
87
|
+
const S = () => {
|
|
88
|
+
const e = i.current;
|
|
89
|
+
e && (o ? p(e, m) : I(e), g(!o));
|
|
90
|
+
};
|
|
91
|
+
return /* @__PURE__ */ E("div", { className: R("json-viewer", r), children: [
|
|
92
|
+
/* @__PURE__ */ u(
|
|
93
|
+
j,
|
|
94
|
+
{
|
|
95
|
+
"aria-label": s,
|
|
96
|
+
variant: "subtle",
|
|
97
|
+
size: "small",
|
|
98
|
+
className: "json-viewer-expand-all",
|
|
99
|
+
onPress: S,
|
|
100
|
+
children: o ? /* @__PURE__ */ u(A, { size: "14" }) : /* @__PURE__ */ u(L, { size: "14" })
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
n && n.length > 0 && /* @__PURE__ */ u("div", { className: "json-viewer-actions", children: n.map((e) => /* @__PURE__ */ u(
|
|
104
|
+
j,
|
|
105
|
+
{
|
|
106
|
+
"aria-label": e.label,
|
|
107
|
+
variant: "subtle",
|
|
108
|
+
size: "small",
|
|
109
|
+
className: "json-viewer-action",
|
|
110
|
+
onPress: e.onPress,
|
|
111
|
+
children: e.icon
|
|
112
|
+
},
|
|
113
|
+
e.key
|
|
114
|
+
)) }),
|
|
115
|
+
/* @__PURE__ */ u("div", { ref: a, className: "json-viewer-content", style: { height: b } })
|
|
116
|
+
] });
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
ee as JsonViewer
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=JsonViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonViewer.js","sources":["../../../../../src/ui/primitives/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { json } from \"@codemirror/lang-json\";\nimport { foldEffect, foldGutter, HighlightStyle, syntaxHighlighting, unfoldAll } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { Button } from \"primitives\";\nimport { IconChevronDown, IconChevronRight } from \"icons\";\nimport \"./jsonviewer.css\";\n\nexport interface JsonViewerAction {\n key: string;\n label: string;\n icon: ReactNode;\n onPress: () => void;\n}\n\nexport interface JsonViewerProps {\n value: unknown;\n expandAllLabel: string;\n actions?: JsonViewerAction[];\n className?: string;\n height?: string | number;\n}\n\nconst DEFAULT_HEIGHT = 220;\n\nconst jsonHighlightStyle = HighlightStyle.define([\n { tag: t.propertyName, color: \"var(--json-viewer-color-key)\" },\n { tag: t.string, color: \"var(--json-viewer-color-string)\", fontWeight: 600 },\n { tag: [t.number, t.bool, t.null], color: \"var(--json-viewer-color-scalar)\" },\n { tag: [t.separator, t.squareBracket, t.brace], color: \"var(--json-viewer-color-punctuation)\" },\n]);\n\nconst theme = EditorView.theme({\n \"&\": { backgroundColor: \"transparent\", color: \"var(--json-viewer-color-punctuation)\", fontSize: \"13px\" },\n \"&.cm-focused\": { outline: \"none\" },\n \".cm-content\": { fontFamily: \"var(--sds-typography-family-mono)\", padding: \"45px 124px 12px 4px\" },\n \".cm-gutters\": {\n backgroundColor: \"transparent\",\n border: \"none\",\n color: \"var(--json-viewer-color-caret)\",\n paddingLeft: \"5px\",\n },\n \".cm-scroller\": { overflow: \"auto\" },\n});\n\nconst extensions = [json(), foldGutter(), syntaxHighlighting(jsonHighlightStyle)];\n\nfunction serialize(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return String(value);\n }\n}\n\nfunction toCssSize(size: string | number): string {\n return typeof size === \"number\" ? `${size}px` : size;\n}\n\nfunction applyFoldRanges(view: EditorView, ranges: { from: number; to: number }[]) {\n if (ranges.length > 0) view.dispatch({ effects: ranges.map((range) => foldEffect.of(range)) });\n}\n\n/**\n * Finds the fold range of every direct child (depth 1) of the root object/array\n * by scanning the text itself for matching brackets. This mirrors what\n * CodeMirror's `foldable()` would compute, but doesn't depend on the lezer\n * parser having finished tokenizing the document — which for a multi-MB\n * document is not guaranteed synchronously at mount time.\n */\nfunction computeFirstLevelFoldRanges(text: string): { from: number; to: number }[] {\n const ranges: { from: number; to: number }[] = [];\n const n = text.length;\n let i = 0;\n while (i < n && text[i] !== \"{\" && text[i] !== \"[\") i++;\n if (i >= n) return ranges;\n\n let depth = 0;\n let inString = false;\n let pendingStart = -1;\n for (; i < n; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\" || ch === \"[\") {\n depth++;\n if (depth === 2) pendingStart = i + 1;\n continue;\n }\n if (ch === \"}\" || ch === \"]\") {\n if (depth === 2 && pendingStart !== -1) {\n ranges.push({ from: pendingStart, to: i });\n pendingStart = -1;\n }\n depth--;\n }\n }\n return ranges;\n}\n\nexport function JsonViewer({ value, expandAllLabel, actions, className, height }: JsonViewerProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const text = useMemo(() => serialize(value), [value]);\n const foldRanges = useMemo(() => computeFirstLevelFoldRanges(text), [text]);\n const editorHeight = toCssSize(height ?? DEFAULT_HEIGHT);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const view = new EditorView({\n parent: containerRef.current,\n state: EditorState.create({\n doc: text,\n extensions: [EditorView.editable.of(false), EditorState.readOnly.of(true), theme, ...extensions],\n }),\n });\n viewRef.current = view;\n applyFoldRanges(view, foldRanges);\n return () => {\n view.destroy();\n viewRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n const currentText = view.state.doc.toString();\n if (currentText !== text) {\n view.dispatch({ changes: { from: 0, to: currentText.length, insert: text } });\n applyFoldRanges(view, foldRanges);\n setIsExpanded(false);\n }\n }, [text, foldRanges]);\n\n const toggleExpandAll = () => {\n const view = viewRef.current;\n if (!view) return;\n if (isExpanded) {\n applyFoldRanges(view, foldRanges);\n } else {\n unfoldAll(view);\n }\n setIsExpanded(!isExpanded);\n };\n\n return (\n <div className={clsx(\"json-viewer\", className)}>\n <Button\n aria-label={expandAllLabel}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-expand-all\"\n onPress={toggleExpandAll}\n >\n {isExpanded ? <IconChevronDown size=\"14\" /> : <IconChevronRight size=\"14\" />}\n </Button>\n {actions && actions.length > 0 && (\n <div className=\"json-viewer-actions\">\n {actions.map((action) => (\n <Button\n key={action.key}\n aria-label={action.label}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-action\"\n onPress={action.onPress}\n >\n {action.icon}\n </Button>\n ))}\n </div>\n )}\n <div ref={containerRef} className=\"json-viewer-content\" style={{ height: editorHeight }} />\n </div>\n );\n}\n"],"names":["DEFAULT_HEIGHT","jsonHighlightStyle","HighlightStyle","t","theme","EditorView","extensions","json","foldGutter","syntaxHighlighting","serialize","value","toCssSize","size","applyFoldRanges","view","ranges","range","foldEffect","computeFirstLevelFoldRanges","text","i","depth","inString","pendingStart","ch","JsonViewer","expandAllLabel","actions","className","height","containerRef","useRef","viewRef","isExpanded","setIsExpanded","useState","useMemo","foldRanges","editorHeight","useEffect","EditorState","currentText","toggleExpandAll","unfoldAll","clsx","jsx","Button","IconChevronDown","IconChevronRight","action"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("../../../vendor/clsx/dist/clsx.cjs"),c=require("react-aria-components");;/* empty css */const M=require("../../icons/IconChevronDown.cjs"),a=require("../Fieldset/Fieldset.cjs"),d=require("../IconButton/IconButton.cjs"),j=require("../Button/Button.cjs"),N=require("../../hooks/useOverlayPortal.cjs"),h=require("../Text/Text.cjs");function i({className:n,...e}){return t.jsx(c.Menu,{className:r.clsx(n,"menu"),...e})}function l({...n}){return t.jsx(c.MenuTrigger,{...n})}function f({label:n,children:e,icon:s,placement:u,variant:o,...x}){return t.jsxs(l,{children:[s?t.jsx(d.IconButton,{variant:o,"aria-label":n,children:s}):t.jsx(j.Button,{variant:o,children:n}),t.jsx(m,{placement:u,children:t.jsx(i,{...x,children:e})})]})}function m({UNSTABLE_portalContainer:n,...e}){const s=N.useOverlayPortalContainer();return t.jsx(c.Popover,{...e,UNSTABLE_portalContainer:n??s})}function g({className:n,...e}){const s=r.clsx(n,"menu-item"),u=e.textValue||(typeof e.children=="string"?e.children:void 0);return t.jsx(c.MenuItem,{...e,className:s,textValue:u,children:({hasSubmenu:o})=>t.jsxs(t.Fragment,{children:[e.children,o&&t.jsx(M.IconChevronDown,{})]})})}function q({className:n,...e}){const s=r.clsx(n,"menu-header");return t.jsx("div",{...e,className:s})}function v({className:n,...e}){const s=r.clsx(n,"menu-section");return t.jsx("div",{...e,className:s})}function S({className:n,...e}){const s=r.clsx(n,"menu-heading");return t.jsx(h.TextHeading,{...e,className:s})}function p({className:n,...e}){const s=r.clsx(n,"menu-separator");return t.jsx(c.Separator,{...e,className:s})}function b({className:n,...e}){const s=r.clsx(n,"menu-label");return t.jsx(a.Label,{...e,className:s})}function B({className:n,...e}){const s=r.clsx(n,"menu-description");return t.jsx(a.Description,{...e,className:s})}function I({children:n,className:e,...s}){const u=r.clsx(e,"menu-shortcut");return t.jsx(a.Keyboard,{...s,className:u,children:n})}exports.Menu=i;exports.MenuButton=f;exports.MenuDescription=B;exports.MenuHeader=q;exports.MenuHeading=S;exports.MenuItem=g;exports.MenuLabel=b;exports.MenuPopover=m;exports.MenuSection=v;exports.MenuSeparator=p;exports.MenuShortcut=I;exports.MenuTrigger=l;
|
|
2
2
|
//# sourceMappingURL=Menu.cjs.map
|