@zyncat/ui 0.8.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/LICENSE +21 -0
- package/README.md +133 -0
- package/dist/alert.css +132 -0
- package/dist/alert.d.ts +46 -0
- package/dist/alert.js +80 -0
- package/dist/alert.js.map +1 -0
- package/dist/avatar-group.d.ts +24 -0
- package/dist/avatar-group.js +23 -0
- package/dist/avatar-group.js.map +1 -0
- package/dist/avatar.css +200 -0
- package/dist/avatar.d.ts +35 -0
- package/dist/avatar.js +67 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.css +182 -0
- package/dist/badge.d.ts +34 -0
- package/dist/badge.js +4 -0
- package/dist/badge.js.map +1 -0
- package/dist/button.css +269 -0
- package/dist/button.d.ts +44 -0
- package/dist/button.js +4 -0
- package/dist/button.js.map +1 -0
- package/dist/checkbox.css +177 -0
- package/dist/checkbox.d.ts +35 -0
- package/dist/checkbox.js +5 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunk-2ERBBFZS.js +12 -0
- package/dist/chunk-2ERBBFZS.js.map +1 -0
- package/dist/chunk-2HORSLXJ.js +191 -0
- package/dist/chunk-2HORSLXJ.js.map +1 -0
- package/dist/chunk-36WVAQKL.js +40 -0
- package/dist/chunk-36WVAQKL.js.map +1 -0
- package/dist/chunk-3SBCBYB7.js +575 -0
- package/dist/chunk-3SBCBYB7.js.map +1 -0
- package/dist/chunk-4R2GQO43.js +125 -0
- package/dist/chunk-4R2GQO43.js.map +1 -0
- package/dist/chunk-64UU4LGU.js +258 -0
- package/dist/chunk-64UU4LGU.js.map +1 -0
- package/dist/chunk-7SZCJ7WI.js +35 -0
- package/dist/chunk-7SZCJ7WI.js.map +1 -0
- package/dist/chunk-BIDVNLJO.js +38 -0
- package/dist/chunk-BIDVNLJO.js.map +1 -0
- package/dist/chunk-CONSWNIV.js +17 -0
- package/dist/chunk-CONSWNIV.js.map +1 -0
- package/dist/chunk-EQ32F2QJ.js +75 -0
- package/dist/chunk-EQ32F2QJ.js.map +1 -0
- package/dist/chunk-GY7JOPUQ.js +111 -0
- package/dist/chunk-GY7JOPUQ.js.map +1 -0
- package/dist/chunk-I4XQ4PV2.js +30 -0
- package/dist/chunk-I4XQ4PV2.js.map +1 -0
- package/dist/chunk-JSKXZMLH.js +67 -0
- package/dist/chunk-JSKXZMLH.js.map +1 -0
- package/dist/chunk-L3Q3VDIW.js +295 -0
- package/dist/chunk-L3Q3VDIW.js.map +1 -0
- package/dist/chunk-LDC3RIYA.js +62 -0
- package/dist/chunk-LDC3RIYA.js.map +1 -0
- package/dist/chunk-MKIQFK7S.js +43 -0
- package/dist/chunk-MKIQFK7S.js.map +1 -0
- package/dist/chunk-MMRIQNEN.js +20 -0
- package/dist/chunk-MMRIQNEN.js.map +1 -0
- package/dist/chunk-MXOPCFWR.js +59 -0
- package/dist/chunk-MXOPCFWR.js.map +1 -0
- package/dist/chunk-NEF5XAHG.js +17 -0
- package/dist/chunk-NEF5XAHG.js.map +1 -0
- package/dist/chunk-NNXJCLTV.js +22 -0
- package/dist/chunk-NNXJCLTV.js.map +1 -0
- package/dist/chunk-O4N2OBTR.js +94 -0
- package/dist/chunk-O4N2OBTR.js.map +1 -0
- package/dist/chunk-PMECHR3A.js +38 -0
- package/dist/chunk-PMECHR3A.js.map +1 -0
- package/dist/chunk-QDK66S4G.js +44 -0
- package/dist/chunk-QDK66S4G.js.map +1 -0
- package/dist/chunk-QGNC7LH5.js +8 -0
- package/dist/chunk-QGNC7LH5.js.map +1 -0
- package/dist/chunk-QMSJZCK3.js +398 -0
- package/dist/chunk-QMSJZCK3.js.map +1 -0
- package/dist/chunk-S5ZTZANS.js +57 -0
- package/dist/chunk-S5ZTZANS.js.map +1 -0
- package/dist/chunk-S7B34VGN.js +14 -0
- package/dist/chunk-S7B34VGN.js.map +1 -0
- package/dist/chunk-TCUCYFT7.js +25 -0
- package/dist/chunk-TCUCYFT7.js.map +1 -0
- package/dist/chunk-TYHR4VNM.js +193 -0
- package/dist/chunk-TYHR4VNM.js.map +1 -0
- package/dist/chunk-U5QQZC3U.js +56 -0
- package/dist/chunk-U5QQZC3U.js.map +1 -0
- package/dist/chunk-UE63OOVG.js +13 -0
- package/dist/chunk-UE63OOVG.js.map +1 -0
- package/dist/chunk-VTJTGVZZ.js +22 -0
- package/dist/chunk-VTJTGVZZ.js.map +1 -0
- package/dist/chunk-W3SHPKSB.js +49 -0
- package/dist/chunk-W3SHPKSB.js.map +1 -0
- package/dist/chunk-XZAEIQDR.js +188 -0
- package/dist/chunk-XZAEIQDR.js.map +1 -0
- package/dist/chunk-YGGCQNNU.js +92 -0
- package/dist/chunk-YGGCQNNU.js.map +1 -0
- package/dist/collapse.css +88 -0
- package/dist/collapse.d.ts +46 -0
- package/dist/collapse.js +5 -0
- package/dist/collapse.js.map +1 -0
- package/dist/count-badge.d.ts +13 -0
- package/dist/count-badge.js +13 -0
- package/dist/count-badge.js.map +1 -0
- package/dist/date-field.d.ts +25 -0
- package/dist/date-field.js +87 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.css +595 -0
- package/dist/date-range-field.d.ts +33 -0
- package/dist/date-range-field.js +404 -0
- package/dist/date-range-field.js.map +1 -0
- package/dist/datetime-field.d.ts +29 -0
- package/dist/datetime-field.js +155 -0
- package/dist/datetime-field.js.map +1 -0
- package/dist/dialog.css +180 -0
- package/dist/dialog.d.ts +42 -0
- package/dist/dialog.js +128 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dom-props-C0jrllBw.d.ts +5 -0
- package/dist/field-chrome-CMPOQSLs.d.ts +28 -0
- package/dist/field-shell-Cuda-feL.d.ts +24 -0
- package/dist/glide.d.ts +15 -0
- package/dist/glide.js +5 -0
- package/dist/glide.js.map +1 -0
- package/dist/icon.css +33 -0
- package/dist/input.css +333 -0
- package/dist/mcp.js +359 -0
- package/dist/motion-devtools.css +265 -0
- package/dist/motion-devtools.d.ts +51 -0
- package/dist/motion-devtools.js +354 -0
- package/dist/motion-devtools.js.map +1 -0
- package/dist/motion-scale-Canq4stZ.d.ts +18 -0
- package/dist/motion-tokens.d.ts +28 -0
- package/dist/motion-tokens.js +3 -0
- package/dist/motion-tokens.js.map +1 -0
- package/dist/multi-select.d.ts +44 -0
- package/dist/multi-select.js +109 -0
- package/dist/multi-select.js.map +1 -0
- package/dist/number-field.d.ts +36 -0
- package/dist/number-field.js +112 -0
- package/dist/number-field.js.map +1 -0
- package/dist/odometer.css +62 -0
- package/dist/otp-field.d.ts +31 -0
- package/dist/otp-field.js +98 -0
- package/dist/otp-field.js.map +1 -0
- package/dist/overlay.css +23 -0
- package/dist/pagination.css +43 -0
- package/dist/pagination.d.ts +29 -0
- package/dist/pagination.js +107 -0
- package/dist/pagination.js.map +1 -0
- package/dist/popover.css +69 -0
- package/dist/popover.d.ts +35 -0
- package/dist/popover.js +15 -0
- package/dist/popover.js.map +1 -0
- package/dist/radio-group.css +300 -0
- package/dist/radio-group.d.ts +52 -0
- package/dist/radio-group.js +115 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/select.css +416 -0
- package/dist/select.d.ts +49 -0
- package/dist/select.js +99 -0
- package/dist/select.js.map +1 -0
- package/dist/sheet.css +26 -0
- package/dist/sheet.d.ts +31 -0
- package/dist/sheet.js +14 -0
- package/dist/sheet.js.map +1 -0
- package/dist/status-badge.d.ts +19 -0
- package/dist/status-badge.js +72 -0
- package/dist/status-badge.js.map +1 -0
- package/dist/table.css +348 -0
- package/dist/table.d.ts +75 -0
- package/dist/table.js +262 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.css +208 -0
- package/dist/tabs.d.ts +71 -0
- package/dist/tabs.js +181 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag.css +248 -0
- package/dist/tag.d.ts +52 -0
- package/dist/tag.js +72 -0
- package/dist/tag.js.map +1 -0
- package/dist/text-field.d.ts +28 -0
- package/dist/text-field.js +69 -0
- package/dist/text-field.js.map +1 -0
- package/dist/textarea.css +219 -0
- package/dist/textarea.d.ts +38 -0
- package/dist/textarea.js +144 -0
- package/dist/textarea.js.map +1 -0
- package/dist/time-field.d.ts +28 -0
- package/dist/time-field.js +66 -0
- package/dist/time-field.js.map +1 -0
- package/dist/timing-7JA_zQHP.d.ts +27 -0
- package/dist/toast-store.d.ts +86 -0
- package/dist/toast-store.js +3 -0
- package/dist/toast-store.js.map +1 -0
- package/dist/toast.css +257 -0
- package/dist/toast.d.ts +12 -0
- package/dist/toast.js +310 -0
- package/dist/toast.js.map +1 -0
- package/dist/toggle-tag.d.ts +34 -0
- package/dist/toggle-tag.js +57 -0
- package/dist/toggle-tag.js.map +1 -0
- package/dist/toggle.css +152 -0
- package/dist/toggle.d.ts +31 -0
- package/dist/toggle.js +75 -0
- package/dist/toggle.js.map +1 -0
- package/dist/tooltip.css +86 -0
- package/dist/tooltip.d.ts +30 -0
- package/dist/tooltip.js +268 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/types-SGMShK7R.d.ts +22 -0
- package/llms.txt +196 -0
- package/next.d.mts +7 -0
- package/next.mjs +59 -0
- package/package.json +257 -0
- package/src/components/composites/alert/Alert.tsx +141 -0
- package/src/components/composites/alert/alert.css +132 -0
- package/src/components/composites/date-picker/DateField.tsx +80 -0
- package/src/components/composites/date-picker/DateRangeField.tsx +110 -0
- package/src/components/composites/date-picker/DateTimeField.tsx +162 -0
- package/src/components/composites/date-picker/TimeField.tsx +78 -0
- package/src/components/composites/date-picker/calendar-panel.tsx +216 -0
- package/src/components/composites/date-picker/date-picker.css +595 -0
- package/src/components/composites/date-picker/date-utils.ts +56 -0
- package/src/components/composites/date-picker/field-shell.tsx +85 -0
- package/src/components/composites/date-picker/range-panel.tsx +363 -0
- package/src/components/composites/date-picker/time-core.tsx +290 -0
- package/src/components/composites/date-picker/use-day-focus.ts +35 -0
- package/src/components/composites/dialog/Dialog.tsx +198 -0
- package/src/components/composites/dialog/dialog.css +180 -0
- package/src/components/composites/pagination/Pagination.tsx +131 -0
- package/src/components/composites/pagination/pagination.css +43 -0
- package/src/components/composites/popover/Popover.tsx +141 -0
- package/src/components/composites/popover/popover.css +69 -0
- package/src/components/composites/select/MultiSelect.tsx +133 -0
- package/src/components/composites/select/Select.tsx +122 -0
- package/src/components/composites/select/core/index.ts +4 -0
- package/src/components/composites/select/core/menu.tsx +100 -0
- package/src/components/composites/select/core/panel.tsx +154 -0
- package/src/components/composites/select/core/trigger.tsx +74 -0
- package/src/components/composites/select/core/types.ts +39 -0
- package/src/components/composites/select/core/use-listbox.ts +182 -0
- package/src/components/composites/select/select.css +416 -0
- package/src/components/composites/sheet/Sheet.tsx +135 -0
- package/src/components/composites/sheet/sheet.css +26 -0
- package/src/components/composites/sheet/use-sheet-drag.ts +126 -0
- package/src/components/composites/table/Table.tsx +377 -0
- package/src/components/composites/table/table.css +348 -0
- package/src/components/composites/tabs/Tabs.tsx +278 -0
- package/src/components/composites/tabs/tabs.css +208 -0
- package/src/components/composites/toast/Toast.tsx +380 -0
- package/src/components/composites/toast/toast-store.ts +295 -0
- package/src/components/composites/toast/toast.css +257 -0
- package/src/components/composites/tooltip/Tooltip.tsx +110 -0
- package/src/components/composites/tooltip/tooltip-host.tsx +184 -0
- package/src/components/composites/tooltip/tooltip-store.ts +81 -0
- package/src/components/composites/tooltip/tooltip.css +86 -0
- package/src/components/dev/MotionDevtools.tsx +200 -0
- package/src/components/dev/motion-devtools.css +265 -0
- package/src/components/dev/slowmo-engine.ts +230 -0
- package/src/components/internal/glass/glass.css +100 -0
- package/src/components/internal/glass/glint.ts +9 -0
- package/src/components/internal/hooks/use-controllable.ts +21 -0
- package/src/components/internal/hooks/use-scroll-edges.ts +46 -0
- package/src/components/internal/icon/Icon.tsx +66 -0
- package/src/components/internal/icon/IconSlot.tsx +10 -0
- package/src/components/internal/icon/icon.css +33 -0
- package/src/components/internal/overlay/focus.ts +68 -0
- package/src/components/internal/overlay/layer.tsx +149 -0
- package/src/components/internal/overlay/modal.tsx +141 -0
- package/src/components/internal/overlay/overlay.css +23 -0
- package/src/components/internal/overlay/position.ts +103 -0
- package/src/components/internal/utils/cx.ts +3 -0
- package/src/components/internal/utils/token-px.ts +8 -0
- package/src/components/primitives/avatar/Avatar.tsx +120 -0
- package/src/components/primitives/avatar/AvatarGroup.tsx +56 -0
- package/src/components/primitives/avatar/avatar.css +200 -0
- package/src/components/primitives/badge/Badge.tsx +75 -0
- package/src/components/primitives/badge/CountBadge.tsx +20 -0
- package/src/components/primitives/badge/StatusBadge.tsx +111 -0
- package/src/components/primitives/badge/badge.css +182 -0
- package/src/components/primitives/badge/odometer.css +62 -0
- package/src/components/primitives/badge/odometer.tsx +36 -0
- package/src/components/primitives/button/Button.tsx +102 -0
- package/src/components/primitives/button/button.css +269 -0
- package/src/components/primitives/checkbox/Checkbox.tsx +76 -0
- package/src/components/primitives/checkbox/check-glyph.tsx +28 -0
- package/src/components/primitives/checkbox/checkbox.css +177 -0
- package/src/components/primitives/collapse/Collapse.tsx +86 -0
- package/src/components/primitives/collapse/collapse.css +88 -0
- package/src/components/primitives/collapse/collapse.typecheck.tsx +29 -0
- package/src/components/primitives/input/NumberField.tsx +139 -0
- package/src/components/primitives/input/OtpField.tsx +134 -0
- package/src/components/primitives/input/TextField.tsx +110 -0
- package/src/components/primitives/input/field-chrome.tsx +83 -0
- package/src/components/primitives/input/input.css +333 -0
- package/src/components/primitives/radio-group/RadioGroup.tsx +183 -0
- package/src/components/primitives/radio-group/radio-group.css +300 -0
- package/src/components/primitives/tag/Tag.tsx +143 -0
- package/src/components/primitives/tag/ToggleTag.tsx +97 -0
- package/src/components/primitives/tag/tag.css +248 -0
- package/src/components/primitives/textarea/Textarea.tsx +190 -0
- package/src/components/primitives/textarea/textarea.css +219 -0
- package/src/components/primitives/toggle/Toggle.tsx +105 -0
- package/src/components/primitives/toggle/toggle.css +152 -0
- package/src/css.d.ts +1 -0
- package/src/dom-props.ts +1 -0
- package/src/engine/animate.ts +141 -0
- package/src/engine/drag.ts +53 -0
- package/src/engine/ease.ts +155 -0
- package/src/engine/flip.ts +59 -0
- package/src/engine/index.ts +13 -0
- package/src/mcp/server.ts +420 -0
- package/src/motion/element.tsx +53 -0
- package/src/motion/flip.tsx +87 -0
- package/src/motion/glide.tsx +47 -0
- package/src/motion/motion-timing.ts +33 -0
- package/src/motion/presence-context.ts +18 -0
- package/src/motion/presence.tsx +91 -0
- package/src/motion/timing.ts +49 -0
- package/src/motion/use-motion.ts +64 -0
- package/src/styles.css +26 -0
- package/src/tokens/avatar.css +20 -0
- package/src/tokens/color.css +58 -0
- package/src/tokens/elevation.css +22 -0
- package/src/tokens/fonts.css +3 -0
- package/src/tokens/glass.css +20 -0
- package/src/tokens/icons.css +7 -0
- package/src/tokens/layers.css +6 -0
- package/src/tokens/motion-scale.ts +17 -0
- package/src/tokens/motion-tokens.ts +92 -0
- package/src/tokens/motion.css +49 -0
- package/src/tokens/radius.css +11 -0
- package/src/tokens/semantic.css +65 -0
- package/src/tokens/spacing.css +26 -0
- package/src/tokens/typography.css +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/date-picker/DateTimeField.tsx"],"names":[],"mappings":"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","file":"datetime-field.js","sourcesContent":["'use client';\n\nimport './date-picker.css';\nimport { useState, useEffect } from 'react';\nimport { Popover } from '../popover/Popover';\nimport { FieldShell, FieldTrigger, type DateFieldBaseProps } from './field-shell';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { TimeSegments, disp12 } from './time-core';\nimport { DtpPanel } from './calendar-panel';\nimport { pad, displayDay } from './date-utils';\n\ninterface DateTimeParts {\n date: string | null;\n time: string | null;\n}\n\nfunction displayTime(t: string, format?: '24h' | '12h'): string {\n if (format !== '12h') return t;\n const p = t.split(':').map(Number);\n const mer = p[0] >= 12 ? 'PM' : 'AM';\n return disp12(p[0]) + ':' + pad(p[1]) + ' ' + mer;\n}\nfunction dttfSplit(v: string | null | undefined): DateTimeParts {\n if (!v) return { date: null, time: null };\n const i = v.indexOf('T');\n return i < 0 ? { date: v, time: null } : { date: v.slice(0, i), time: v.slice(i + 1) };\n}\n\nexport interface DateTimeFieldProps extends DateFieldBaseProps {\n /** Controlled value, 'YYYY-MM-DDTHH:mm'. */\n value?: string | null;\n /** Uncontrolled initial value, 'YYYY-MM-DDTHH:mm'. Use instead of `value`. @default null */\n defaultValue?: string | null;\n /** Fires once both date and time are set, with 'YYYY-MM-DDTHH:mm' (an incomplete half never commits). */\n onChange?: (value: string) => void;\n /** Trigger text shown when no value is picked. @default 'Pick date & time' */\n placeholder?: string;\n /** IANA timezone (e.g. 'Europe/Riga') - display context, shown in the footer. */\n timezone?: string;\n /** Lower bound - 'YYYY-MM-DD' or 'YYYY-MM-DDTHH:mm', inclusive. */\n min?: string;\n /** Upper bound - 'YYYY-MM-DD' or 'YYYY-MM-DDTHH:mm', inclusive. */\n max?: string;\n /** Time display only; storage stays 24h. Default '24h'. */\n format?: '24h' | '12h';\n /** ↑/↓ step granularity in minutes (typing is exact). Default 5. */\n minuteStep?: number;\n}\n\nexport function DateTimeField({\n value,\n defaultValue = null,\n onChange,\n label,\n placeholder = 'Pick date & time',\n timezone,\n min,\n max,\n format = '24h',\n minuteStep = 5,\n required = false,\n invalid = false,\n message,\n disabled = false,\n className = '',\n htmlProps,\n animation,\n}: DateTimeFieldProps) {\n const [val, commit] = useControllable<string | null>(\n value,\n defaultValue,\n onChange as ((next: string | null) => void) | undefined,\n );\n const parts = dttfSplit(val);\n\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pendDate, setPendDate] = useState<string | null>(null);\n const [pendTime, setPendTime] = useState<string | null>(null);\n useEffect(() => {\n setPendDate(null);\n setPendTime(null);\n }, [val]);\n\n const date = pendDate != null ? pendDate : parts.date;\n const time = pendTime != null ? pendTime : parts.time;\n\n const minL = dttfSplit(min);\n const maxL = dttfSplit(max);\n const minTime = date && date === minL.date ? minL.time : null;\n const maxTime = date && date === maxL.date ? maxL.time : null;\n\n function commitIf(d: string | null, t: string | null) {\n if (!d || !t) return;\n let tt = t;\n if (minL.time && d === minL.date && tt < minL.time) tt = minL.time;\n if (maxL.time && d === maxL.date && tt > maxL.time) tt = maxL.time;\n if (tt !== t) setPendTime(tt);\n const next = d + 'T' + tt;\n if (next !== val) commit(next);\n }\n function handleDate(d: string) {\n setPendDate(d);\n commitIf(d, time);\n }\n function handleTime(t: string) {\n setPendTime(t);\n commitIf(date, t);\n }\n\n const display = date ? displayDay(date) + ', ' + (time ? displayTime(time, format) : '--:--') : null;\n const trigger = <FieldTrigger display={display} placeholder={placeholder} disabled={disabled} />;\n\n return (\n <FieldShell\n variant=\"dtf\"\n label={label}\n required={required}\n invalid={invalid}\n message={message}\n icon=\"calendar\"\n className={className}\n htmlProps={htmlProps}\n >\n <Popover\n trigger={trigger}\n side=\"bottom\"\n align=\"start\"\n animation={animation}\n open={pickerOpen}\n onOpenChange={setPickerOpen}\n >\n <DtpPanel\n val={date}\n commit={handleDate}\n close={() => setPickerOpen(false)}\n min={minL.date}\n max={maxL.date}\n timezone={timezone}\n label={label}\n slot={\n <div className=\"dtp__time\">\n <span className=\"dtp__timeLabel\">Time</span>\n <span className=\"dtp__timeHint\" aria-hidden=\"true\">\n <kbd>↑</kbd>\n <kbd>↓</kbd>\n </span>\n <TimeSegments\n value={time}\n onCommit={handleTime}\n format={format}\n minuteStep={minuteStep}\n min={minTime}\n max={maxTime}\n ariaLabel=\"Time\"\n />\n </div>\n }\n />\n </Popover>\n </FieldShell>\n );\n}\n"]}
|
package/dist/dialog.css
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/* dialog.css - the styled dialog surface (the modal shell owns modality + motion). */
|
|
2
|
+
|
|
3
|
+
/* Modal placement - the shell layer centers the panel with breathing room. */
|
|
4
|
+
.overlay-layer--dialog {
|
|
5
|
+
place-items: center;
|
|
6
|
+
padding: var(--space-6);
|
|
7
|
+
}
|
|
8
|
+
.overlay-panel--dialog {
|
|
9
|
+
max-width: 100%;
|
|
10
|
+
max-height: 100%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* The panel - flex column so the body scrolls between a pinned header + footer; padding lives on the parts. */
|
|
14
|
+
.dialog {
|
|
15
|
+
--dialog-w: 32rem;
|
|
16
|
+
position: relative;
|
|
17
|
+
margin: 0;
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
min-height: 0;
|
|
21
|
+
width: var(--dialog-w);
|
|
22
|
+
max-width: 100%;
|
|
23
|
+
max-height: min(85dvh, 44rem);
|
|
24
|
+
padding: 0;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
background: var(--bg-surface);
|
|
27
|
+
border: var(--border-hairline) solid var(--border-default);
|
|
28
|
+
border-radius: var(--radius-xl);
|
|
29
|
+
box-shadow: var(--shadow-xl);
|
|
30
|
+
color: var(--text-body);
|
|
31
|
+
font-family: var(--font-sans);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.dialog[data-size='sm'] {
|
|
35
|
+
--dialog-w: 25rem;
|
|
36
|
+
}
|
|
37
|
+
.dialog[data-size='lg'] {
|
|
38
|
+
--dialog-w: 40rem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Header - icon - heading - close; flex-start keeps a tall heading top-aligned with the badge. */
|
|
42
|
+
.dialog__header {
|
|
43
|
+
flex: 0 0 auto;
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: flex-start;
|
|
46
|
+
gap: var(--space-3);
|
|
47
|
+
padding: var(--space-5) var(--space-5) var(--space-4);
|
|
48
|
+
transition:
|
|
49
|
+
border-color var(--duration-base) var(--ease-standard),
|
|
50
|
+
box-shadow var(--duration-base) var(--ease-standard);
|
|
51
|
+
border-bottom: var(--border-hairline) solid transparent;
|
|
52
|
+
}
|
|
53
|
+
/* divider + faint lift appears only once the body is scrolled under it */
|
|
54
|
+
.dialog:has(.dialog__body[data-scroll-top]) .dialog__header {
|
|
55
|
+
border-bottom-color: var(--border-subtle);
|
|
56
|
+
box-shadow: var(--shadow-xs);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.dialog__icon {
|
|
60
|
+
flex: 0 0 auto;
|
|
61
|
+
display: grid;
|
|
62
|
+
place-items: center;
|
|
63
|
+
width: 2.25rem;
|
|
64
|
+
height: 2.25rem;
|
|
65
|
+
border-radius: var(--radius-md);
|
|
66
|
+
background: var(--accent-subtle);
|
|
67
|
+
color: var(--text-accent);
|
|
68
|
+
font-size: var(--icon-md);
|
|
69
|
+
}
|
|
70
|
+
.dialog[data-tone='danger'] .dialog__icon {
|
|
71
|
+
background: var(--danger-subtle);
|
|
72
|
+
color: var(--danger-text);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.dialog__heading {
|
|
76
|
+
flex: 1 1 auto;
|
|
77
|
+
min-width: 0;
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
gap: var(--space-1);
|
|
81
|
+
/* nudge text to optical-center against the 36px icon badge when present */
|
|
82
|
+
padding-top: var(--space-px);
|
|
83
|
+
}
|
|
84
|
+
.dialog__title {
|
|
85
|
+
margin: 0;
|
|
86
|
+
color: var(--text-strong);
|
|
87
|
+
font: var(--weight-semibold) var(--size-heading)/var(--leading-heading) var(--font-sans);
|
|
88
|
+
letter-spacing: var(--tracking-tight);
|
|
89
|
+
text-wrap: pretty;
|
|
90
|
+
}
|
|
91
|
+
.dialog__desc {
|
|
92
|
+
margin: 0;
|
|
93
|
+
color: var(--text-muted);
|
|
94
|
+
font: var(--type-body);
|
|
95
|
+
text-wrap: pretty;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* close - a quiet ghost icon button; the hit box is bigger than the glyph */
|
|
99
|
+
.dialog__close {
|
|
100
|
+
flex: 0 0 auto;
|
|
101
|
+
appearance: none;
|
|
102
|
+
margin: calc(var(--space-1) * -1) calc(var(--space-1) * -1) 0 0;
|
|
103
|
+
display: grid;
|
|
104
|
+
place-items: center;
|
|
105
|
+
width: 1.75rem;
|
|
106
|
+
height: 1.75rem;
|
|
107
|
+
padding: 0;
|
|
108
|
+
border: none;
|
|
109
|
+
border-radius: var(--radius-md);
|
|
110
|
+
background: transparent;
|
|
111
|
+
color: var(--text-subtle);
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
font-size: var(--icon-sm);
|
|
114
|
+
transition: var(--transition-control);
|
|
115
|
+
}
|
|
116
|
+
.dialog__close:hover {
|
|
117
|
+
background: var(--neutral-wash);
|
|
118
|
+
color: var(--text-strong);
|
|
119
|
+
}
|
|
120
|
+
.dialog__close:active {
|
|
121
|
+
background: var(--bg-muted);
|
|
122
|
+
}
|
|
123
|
+
.dialog__close:focus-visible {
|
|
124
|
+
outline: none;
|
|
125
|
+
color: var(--text-strong);
|
|
126
|
+
box-shadow: var(--ring-accent);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Body - the scroll region; min-height:0 lets it shrink so header/footer stay pinned. */
|
|
130
|
+
.dialog__body {
|
|
131
|
+
flex: 1 1 auto;
|
|
132
|
+
min-height: 0;
|
|
133
|
+
overflow-y: auto;
|
|
134
|
+
overscroll-behavior: contain;
|
|
135
|
+
padding: 0 var(--space-5) var(--space-5);
|
|
136
|
+
color: var(--text-body);
|
|
137
|
+
font: var(--type-body);
|
|
138
|
+
}
|
|
139
|
+
.dialog:has(.dialog__icon) .dialog__body {
|
|
140
|
+
padding-left: calc(var(--space-5) + 2.25rem + var(--space-3));
|
|
141
|
+
}
|
|
142
|
+
.dialog:has(.dialog__footer) .dialog__body {
|
|
143
|
+
padding-bottom: var(--space-4);
|
|
144
|
+
}
|
|
145
|
+
.dialog__body > :first-child {
|
|
146
|
+
margin-top: 0;
|
|
147
|
+
}
|
|
148
|
+
.dialog__body > :last-child {
|
|
149
|
+
margin-bottom: 0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.dialog__body {
|
|
153
|
+
scrollbar-width: thin;
|
|
154
|
+
scrollbar-color: var(--border-strong) transparent;
|
|
155
|
+
}
|
|
156
|
+
.dialog__body::-webkit-scrollbar {
|
|
157
|
+
width: 10px;
|
|
158
|
+
}
|
|
159
|
+
.dialog__body::-webkit-scrollbar-thumb {
|
|
160
|
+
background: var(--border-strong);
|
|
161
|
+
border-radius: var(--radius-full);
|
|
162
|
+
border: 3px solid var(--bg-surface);
|
|
163
|
+
background-clip: padding-box;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Footer - right-aligned actions; gains a top divider only when the body scrolls under it. */
|
|
167
|
+
.dialog__footer {
|
|
168
|
+
flex: 0 0 auto;
|
|
169
|
+
display: flex;
|
|
170
|
+
align-items: center;
|
|
171
|
+
justify-content: flex-end;
|
|
172
|
+
gap: var(--space-2);
|
|
173
|
+
flex-wrap: wrap;
|
|
174
|
+
padding: var(--space-4) var(--space-5) var(--space-5);
|
|
175
|
+
border-top: var(--border-hairline) solid transparent;
|
|
176
|
+
transition: border-color var(--duration-base) var(--ease-standard);
|
|
177
|
+
}
|
|
178
|
+
.dialog:has(.dialog__body[data-scroll-bottom]) .dialog__footer {
|
|
179
|
+
border-top-color: var(--border-subtle);
|
|
180
|
+
}
|
package/dist/dialog.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactElement, ReactNode, HTMLAttributes } from 'react';
|
|
3
|
+
import { D as DisableableAnimation } from './timing-7JA_zQHP.js';
|
|
4
|
+
import { D as DataAttributes } from './dom-props-C0jrllBw.js';
|
|
5
|
+
import './motion-scale-Canq4stZ.js';
|
|
6
|
+
|
|
7
|
+
interface DialogProps {
|
|
8
|
+
/** Controlled open state. Omit for uncontrolled (use defaultOpen + trigger). */
|
|
9
|
+
open?: boolean;
|
|
10
|
+
/** Initial open state when uncontrolled. @default false */
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
/** Fires whenever the open state changes. Pair with `open` for controlled use. */
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
/** Optional element cloned to open the dialog on click (uncontrolled ergonomics). */
|
|
15
|
+
trigger?: ReactElement | null;
|
|
16
|
+
/** Header title - rendered as the `<h2>` and wired to `aria-labelledby`. */
|
|
17
|
+
title?: ReactNode;
|
|
18
|
+
/** Subtext under the title - wired to `aria-describedby`. @default null */
|
|
19
|
+
description?: ReactNode;
|
|
20
|
+
/** Panel width. @default 'md' */
|
|
21
|
+
size?: 'sm' | 'md' | 'lg';
|
|
22
|
+
/** 'danger' tints the header icon badge + is the convention for destructive confirms. */
|
|
23
|
+
tone?: 'default' | 'danger';
|
|
24
|
+
/** Your own icon node for the header badge (alert dialogs). */
|
|
25
|
+
icon?: ReactNode;
|
|
26
|
+
/** Close button + backdrop/Esc dismissal. Default true. */
|
|
27
|
+
dismissible?: boolean;
|
|
28
|
+
/** Action row - a node, or a render fn `(close) => node` so uncontrolled dialogs can dismiss. */
|
|
29
|
+
footer?: ReactNode | ((close: () => void) => ReactNode);
|
|
30
|
+
/** Dialog body - scrolls when tall; its scroll edges flag the header lift + footer divider. */
|
|
31
|
+
children?: ReactNode;
|
|
32
|
+
/** Base id for the panel; drives the trigger's `aria-controls` and the title/desc aria ids.
|
|
33
|
+
* Auto-generated when omitted. */
|
|
34
|
+
id?: string;
|
|
35
|
+
/** Standard attributes (className, style, data-*, ...) forwarded to the dialog `<section>`. */
|
|
36
|
+
htmlProps?: HTMLAttributes<HTMLElement> & DataAttributes;
|
|
37
|
+
/** Open/close timing - motion tokens only, or `null` to disable. @default open 'slow'/'entrance', close 'base'/'standard' */
|
|
38
|
+
animation?: DisableableAnimation;
|
|
39
|
+
}
|
|
40
|
+
declare function Dialog({ open: controlledOpen, defaultOpen, onOpenChange, trigger, title, description, size, tone, icon, dismissible, footer, children, id, htmlProps, animation, }: DialogProps): react.JSX.Element;
|
|
41
|
+
|
|
42
|
+
export { Dialog, type DialogProps };
|
package/dist/dialog.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
'use client';import { useScrollEdges } from './chunk-BIDVNLJO.js';
|
|
2
|
+
import { ModalShell } from './chunk-4R2GQO43.js';
|
|
3
|
+
import './chunk-LDC3RIYA.js';
|
|
4
|
+
import { ovCloneTrigger, OverlayPortal } from './chunk-GY7JOPUQ.js';
|
|
5
|
+
import { resolveMotionTiming } from './chunk-NEF5XAHG.js';
|
|
6
|
+
import { Presence } from './chunk-MXOPCFWR.js';
|
|
7
|
+
import './chunk-W3SHPKSB.js';
|
|
8
|
+
import './chunk-L3Q3VDIW.js';
|
|
9
|
+
import { IconSlot } from './chunk-2ERBBFZS.js';
|
|
10
|
+
import { Icon } from './chunk-3SBCBYB7.js';
|
|
11
|
+
import { useControllable } from './chunk-MMRIQNEN.js';
|
|
12
|
+
import './chunk-S5ZTZANS.js';
|
|
13
|
+
import './chunk-VTJTGVZZ.js';
|
|
14
|
+
import { cx } from './chunk-QGNC7LH5.js';
|
|
15
|
+
import './dialog.css';
|
|
16
|
+
import { useId, useRef, Fragment } from 'react';
|
|
17
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
18
|
+
|
|
19
|
+
var DIALOG_TIMING = {
|
|
20
|
+
open: { duration: "slow", ease: "entrance" },
|
|
21
|
+
close: { duration: "base", ease: "standard" }
|
|
22
|
+
};
|
|
23
|
+
function DialogSurface({
|
|
24
|
+
panelId,
|
|
25
|
+
size,
|
|
26
|
+
tone,
|
|
27
|
+
icon,
|
|
28
|
+
title,
|
|
29
|
+
description,
|
|
30
|
+
dismissible,
|
|
31
|
+
footerContent,
|
|
32
|
+
requestClose,
|
|
33
|
+
htmlProps,
|
|
34
|
+
children
|
|
35
|
+
}) {
|
|
36
|
+
const bodyRef = useRef(null);
|
|
37
|
+
const titleId = panelId + "-title";
|
|
38
|
+
const descId = panelId + "-desc";
|
|
39
|
+
useScrollEdges(bodyRef, (edges, el) => {
|
|
40
|
+
el.toggleAttribute("data-scroll-top", edges.top);
|
|
41
|
+
el.toggleAttribute("data-scroll-bottom", edges.bottom);
|
|
42
|
+
});
|
|
43
|
+
return /* @__PURE__ */ jsxs(
|
|
44
|
+
"section",
|
|
45
|
+
{
|
|
46
|
+
...htmlProps,
|
|
47
|
+
className: cx("dialog", htmlProps?.className),
|
|
48
|
+
role: "dialog",
|
|
49
|
+
"aria-modal": "true",
|
|
50
|
+
"data-size": size === "md" ? void 0 : size,
|
|
51
|
+
"data-tone": tone === "default" ? void 0 : tone,
|
|
52
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
53
|
+
"aria-describedby": description ? descId : void 0,
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ jsxs("header", { className: "dialog__header", children: [
|
|
56
|
+
icon && /* @__PURE__ */ jsx("span", { className: "dialog__icon", children: /* @__PURE__ */ jsx(IconSlot, { size: "md", children: icon }) }),
|
|
57
|
+
/* @__PURE__ */ jsxs("div", { className: "dialog__heading", children: [
|
|
58
|
+
title && /* @__PURE__ */ jsx("h2", { className: "dialog__title", id: titleId, children: title }),
|
|
59
|
+
description && /* @__PURE__ */ jsx("p", { className: "dialog__desc", id: descId, children: description })
|
|
60
|
+
] }),
|
|
61
|
+
dismissible && /* @__PURE__ */ jsx("button", { type: "button", className: "dialog__close", "aria-label": "Close dialog", onClick: requestClose, children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm", weight: "bold" }) })
|
|
62
|
+
] }),
|
|
63
|
+
/* @__PURE__ */ jsx("div", { className: "dialog__body", ref: bodyRef, children }),
|
|
64
|
+
footerContent && /* @__PURE__ */ jsx("footer", { className: "dialog__footer", children: footerContent })
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function Dialog({
|
|
70
|
+
open: controlledOpen,
|
|
71
|
+
defaultOpen = false,
|
|
72
|
+
onOpenChange,
|
|
73
|
+
trigger = null,
|
|
74
|
+
title,
|
|
75
|
+
description = null,
|
|
76
|
+
size = "md",
|
|
77
|
+
tone = "default",
|
|
78
|
+
icon = null,
|
|
79
|
+
dismissible = true,
|
|
80
|
+
footer = null,
|
|
81
|
+
children,
|
|
82
|
+
id,
|
|
83
|
+
htmlProps,
|
|
84
|
+
animation
|
|
85
|
+
}) {
|
|
86
|
+
const autoId = useId();
|
|
87
|
+
const panelId = id || "dialog-" + autoId;
|
|
88
|
+
const [open, setOpen] = useControllable(controlledOpen, defaultOpen, onOpenChange);
|
|
89
|
+
const triggerRef = useRef(null);
|
|
90
|
+
const close = () => setOpen(false);
|
|
91
|
+
const timings = resolveMotionTiming(animation, DIALOG_TIMING);
|
|
92
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
93
|
+
ovCloneTrigger(trigger, { open, onPress: () => setOpen(true), panelId, haspopup: "dialog", triggerRef }),
|
|
94
|
+
/* @__PURE__ */ jsx(OverlayPortal, { children: /* @__PURE__ */ jsx(Presence, { children: open && /* @__PURE__ */ jsx(
|
|
95
|
+
ModalShell,
|
|
96
|
+
{
|
|
97
|
+
animate: { y: [6, 0], scale: [0.98, 1], opacity: [0, 1], timing: timings.open },
|
|
98
|
+
exit: { y: [6], scale: [0.98], opacity: [0], timing: timings.close },
|
|
99
|
+
layerClass: "overlay-layer--dialog",
|
|
100
|
+
panelClass: "overlay-panel--dialog",
|
|
101
|
+
panelId,
|
|
102
|
+
dismissible,
|
|
103
|
+
requestClose: close,
|
|
104
|
+
children: /* @__PURE__ */ jsx(
|
|
105
|
+
DialogSurface,
|
|
106
|
+
{
|
|
107
|
+
panelId,
|
|
108
|
+
size,
|
|
109
|
+
tone,
|
|
110
|
+
icon,
|
|
111
|
+
title,
|
|
112
|
+
description,
|
|
113
|
+
dismissible,
|
|
114
|
+
footerContent: typeof footer === "function" ? footer(close) : footer,
|
|
115
|
+
requestClose: close,
|
|
116
|
+
htmlProps,
|
|
117
|
+
children
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
},
|
|
121
|
+
"dialog"
|
|
122
|
+
) }) })
|
|
123
|
+
] });
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export { Dialog };
|
|
127
|
+
//# sourceMappingURL=dialog.js.map
|
|
128
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/dialog/Dialog.tsx"],"names":[],"mappings":"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","file":"dialog.js","sourcesContent":["'use client';\n\nimport './dialog.css';\nimport { Fragment, useId, useRef, type HTMLAttributes, type ReactElement, type ReactNode } from 'react';\nimport { Presence } from '../../../motion/presence';\nimport { resolveMotionTiming } from '../../../motion/motion-timing';\nimport type { DisableableAnimation } from '../../../motion/timing';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { ovCloneTrigger, OverlayPortal } from '../../internal/overlay/layer';\nimport { ModalShell } from '../../internal/overlay/modal';\nimport { Icon } from '../../internal/icon/Icon';\nimport { IconSlot } from '../../internal/icon/IconSlot';\nimport { useScrollEdges } from '../../internal/hooks/use-scroll-edges';\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\n\nconst DIALOG_TIMING = {\n open: { duration: 'slow', ease: 'entrance' },\n close: { duration: 'base', ease: 'standard' },\n} as const;\n\nexport interface DialogProps {\n /** Controlled open state. Omit for uncontrolled (use defaultOpen + trigger). */\n open?: boolean;\n /** Initial open state when uncontrolled. @default false */\n defaultOpen?: boolean;\n /** Fires whenever the open state changes. Pair with `open` for controlled use. */\n onOpenChange?: (open: boolean) => void;\n /** Optional element cloned to open the dialog on click (uncontrolled ergonomics). */\n trigger?: ReactElement | null;\n /** Header title - rendered as the `<h2>` and wired to `aria-labelledby`. */\n title?: ReactNode;\n /** Subtext under the title - wired to `aria-describedby`. @default null */\n description?: ReactNode;\n /** Panel width. @default 'md' */\n size?: 'sm' | 'md' | 'lg';\n /** 'danger' tints the header icon badge + is the convention for destructive confirms. */\n tone?: 'default' | 'danger';\n /** Your own icon node for the header badge (alert dialogs). */\n icon?: ReactNode;\n /** Close button + backdrop/Esc dismissal. Default true. */\n dismissible?: boolean;\n /** Action row - a node, or a render fn `(close) => node` so uncontrolled dialogs can dismiss. */\n footer?: ReactNode | ((close: () => void) => ReactNode);\n /** Dialog body - scrolls when tall; its scroll edges flag the header lift + footer divider. */\n children?: ReactNode;\n /** Base id for the panel; drives the trigger's `aria-controls` and the title/desc aria ids.\n * Auto-generated when omitted. */\n id?: string;\n /** Standard attributes (className, style, data-*, ...) forwarded to the dialog `<section>`. */\n htmlProps?: HTMLAttributes<HTMLElement> & DataAttributes;\n /** Open/close timing - motion tokens only, or `null` to disable. @default open 'slow'/'entrance', close 'base'/'standard' */\n animation?: DisableableAnimation;\n}\n\ninterface DialogSurfaceProps {\n panelId: string;\n size: 'sm' | 'md' | 'lg';\n tone: 'default' | 'danger';\n icon: ReactNode;\n title: ReactNode;\n description: ReactNode;\n dismissible: boolean;\n footerContent: ReactNode;\n requestClose: () => void;\n htmlProps?: HTMLAttributes<HTMLElement> & DataAttributes;\n children?: ReactNode;\n}\n\nfunction DialogSurface({\n panelId,\n size,\n tone,\n icon,\n title,\n description,\n dismissible,\n footerContent,\n requestClose,\n htmlProps,\n children,\n}: DialogSurfaceProps) {\n const bodyRef = useRef<HTMLDivElement>(null);\n const titleId = panelId + '-title';\n const descId = panelId + '-desc';\n\n useScrollEdges(bodyRef, (edges, el) => {\n el.toggleAttribute('data-scroll-top', edges.top);\n el.toggleAttribute('data-scroll-bottom', edges.bottom);\n });\n\n return (\n <section\n {...htmlProps}\n className={cx('dialog', htmlProps?.className)}\n role=\"dialog\"\n aria-modal=\"true\"\n data-size={size === 'md' ? undefined : size}\n data-tone={tone === 'default' ? undefined : tone}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descId : undefined}\n >\n <header className=\"dialog__header\">\n {icon && (\n <span className=\"dialog__icon\">\n <IconSlot size=\"md\">{icon}</IconSlot>\n </span>\n )}\n <div className=\"dialog__heading\">\n {title && (\n <h2 className=\"dialog__title\" id={titleId}>\n {title}\n </h2>\n )}\n {description && (\n <p className=\"dialog__desc\" id={descId}>\n {description}\n </p>\n )}\n </div>\n {dismissible && (\n <button type=\"button\" className=\"dialog__close\" aria-label=\"Close dialog\" onClick={requestClose}>\n <Icon name=\"x\" size=\"sm\" weight=\"bold\" />\n </button>\n )}\n </header>\n\n <div className=\"dialog__body\" ref={bodyRef}>\n {children}\n </div>\n\n {footerContent && <footer className=\"dialog__footer\">{footerContent}</footer>}\n </section>\n );\n}\n\nexport function Dialog({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger = null,\n title,\n description = null,\n size = 'md',\n tone = 'default',\n icon = null,\n dismissible = true,\n footer = null,\n children,\n id,\n htmlProps,\n animation,\n}: DialogProps) {\n const autoId = useId();\n const panelId = id || 'dialog-' + autoId;\n const [open, setOpen] = useControllable(controlledOpen, defaultOpen, onOpenChange);\n const triggerRef = useRef<HTMLElement>(null);\n const close = () => setOpen(false);\n\n const timings = resolveMotionTiming(animation, DIALOG_TIMING);\n\n return (\n <Fragment>\n {ovCloneTrigger(trigger, { open, onPress: () => setOpen(true), panelId, haspopup: 'dialog', triggerRef })}\n <OverlayPortal>\n <Presence>\n {open && (\n <ModalShell\n key=\"dialog\"\n animate={{ y: [6, 0], scale: [0.98, 1], opacity: [0, 1], timing: timings.open }}\n exit={{ y: [6], scale: [0.98], opacity: [0], timing: timings.close }}\n layerClass=\"overlay-layer--dialog\"\n panelClass=\"overlay-panel--dialog\"\n panelId={panelId}\n dismissible={dismissible}\n requestClose={close}\n >\n <DialogSurface\n panelId={panelId}\n size={size}\n tone={tone}\n icon={icon}\n title={title}\n description={description}\n dismissible={dismissible}\n footerContent={typeof footer === 'function' ? footer(close) : footer}\n requestClose={close}\n htmlProps={htmlProps}\n >\n {children}\n </DialogSurface>\n </ModalShell>\n )}\n </Presence>\n </OverlayPortal>\n </Fragment>\n );\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
interface FieldIdProps {
|
|
4
|
+
/** Field id, ties the label to the control. */
|
|
5
|
+
id?: string;
|
|
6
|
+
}
|
|
7
|
+
interface FieldRequirementProps {
|
|
8
|
+
/** Mark the control required - reaches the native element and shows a danger `*` after the label. */
|
|
9
|
+
required?: boolean;
|
|
10
|
+
/** Show a muted "(optional)" after the label. */
|
|
11
|
+
optional?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface FieldCoreMessagingProps {
|
|
14
|
+
/** Label text (sentence case). */
|
|
15
|
+
label?: ReactNode;
|
|
16
|
+
/** Neutral helper text - shown when there's no validation message. */
|
|
17
|
+
helper?: ReactNode;
|
|
18
|
+
/** Error message - sets the error state (border + icon + colour). Wins over warning/success/helper. */
|
|
19
|
+
error?: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
interface FieldMessagingProps extends FieldIdProps, FieldRequirementProps, FieldCoreMessagingProps {
|
|
22
|
+
/** Warning message - amber state. Loses to `error`; wins over `success`/`helper`. */
|
|
23
|
+
warning?: ReactNode;
|
|
24
|
+
/** Success message - green state. Loses to `error`/`warning`; wins over `helper`. */
|
|
25
|
+
success?: ReactNode;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type { FieldIdProps as F, FieldCoreMessagingProps as a, FieldMessagingProps as b, FieldRequirementProps as c };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
import { D as DisableableAnimation } from './timing-7JA_zQHP.js';
|
|
3
|
+
import { D as DataAttributes } from './dom-props-C0jrllBw.js';
|
|
4
|
+
|
|
5
|
+
interface DateFieldBaseProps {
|
|
6
|
+
/** Field label rendered above the trigger. */
|
|
7
|
+
label?: string;
|
|
8
|
+
/** Asterisk on the label. @default false */
|
|
9
|
+
required?: boolean;
|
|
10
|
+
/** Danger border + message color (.fld is-error). @default false */
|
|
11
|
+
invalid?: boolean;
|
|
12
|
+
/** Helper / error text under the field. */
|
|
13
|
+
message?: string;
|
|
14
|
+
/** Disable the field. @default false */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/** Extra class on the field shell root. */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Standard <div> attributes (style, data-*, aria-*, ...) forwarded to the field shell root. */
|
|
19
|
+
htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;
|
|
20
|
+
/** Popover open/close timing - motion tokens only, or `null` to disable. (Not used by TimeField, which is inline.) */
|
|
21
|
+
animation?: DisableableAnimation;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type { DateFieldBaseProps as D };
|
package/dist/glide.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { RefObject } from 'react';
|
|
3
|
+
|
|
4
|
+
type GlideApi = ReturnType<typeof useGlide>;
|
|
5
|
+
declare function useGlide<T extends HTMLElement>(containerRef: RefObject<T | null>): {
|
|
6
|
+
ref: RefObject<HTMLSpanElement>;
|
|
7
|
+
enter: (target: HTMLElement | null) => void;
|
|
8
|
+
leave: () => void;
|
|
9
|
+
};
|
|
10
|
+
declare function GlidePill({ className, glide }: {
|
|
11
|
+
className?: string;
|
|
12
|
+
glide: GlideApi;
|
|
13
|
+
}): react.JSX.Element;
|
|
14
|
+
|
|
15
|
+
export { type GlideApi, GlidePill, useGlide };
|
package/dist/glide.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"glide.js"}
|
package/dist/icon.css
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* Icon - base layout (inline/flex seating); size and color come from props/tokens. */
|
|
2
|
+
|
|
3
|
+
.icon {
|
|
4
|
+
flex: none;
|
|
5
|
+
vertical-align: middle;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* icon-slot - locks a consumer icon node to the token size and currentColor. */
|
|
9
|
+
.icon-slot {
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
flex: none;
|
|
14
|
+
color: currentColor;
|
|
15
|
+
}
|
|
16
|
+
.icon-slot--sm {
|
|
17
|
+
width: var(--icon-sm);
|
|
18
|
+
height: var(--icon-sm);
|
|
19
|
+
}
|
|
20
|
+
.icon-slot--md {
|
|
21
|
+
width: var(--icon-md);
|
|
22
|
+
height: var(--icon-md);
|
|
23
|
+
}
|
|
24
|
+
.icon-slot--lg {
|
|
25
|
+
width: var(--icon-lg);
|
|
26
|
+
height: var(--icon-lg);
|
|
27
|
+
}
|
|
28
|
+
.icon-slot > svg,
|
|
29
|
+
.icon-slot > img {
|
|
30
|
+
width: 100%;
|
|
31
|
+
height: 100%;
|
|
32
|
+
display: block;
|
|
33
|
+
}
|