prime-ui-kit 0.9.2 → 0.10.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/README.md +18 -9
- package/THIRD_PARTY_NOTICES +76 -0
- package/dist/chunks/{chunk-ZEFCDEEQ.js → chunk-4TRNUP45.js} +1085 -526
- package/dist/chunks/chunk-EJ2ZVQYL.js +5805 -0
- package/dist/chunks/chunk-GFKDZFQR.js +1208 -0
- package/dist/chunks/{chunk-LXGRKN34.js → chunk-K4FACFQ2.js} +776 -484
- package/dist/chunks/{chunk-IQELQNMR.js → chunk-T7CLQXGB.js} +20 -5
- package/dist/color-picker.js +3 -2
- package/dist/components/button/Button.d.ts +24 -4
- package/dist/components/card/Card.d.ts +1 -1
- package/dist/components/code-block/CodeBlock.d.ts +1 -1
- package/dist/components/color-picker/ColorPicker.d.ts +1 -1
- package/dist/components/data-table/Row.d.ts +3 -1
- package/dist/components/data-table/rows.d.ts +4 -0
- package/dist/components/digit-input/DigitInput.d.ts +6 -1
- package/dist/components/index.d.ts +4 -1
- package/dist/components/input/Input.d.ts +16 -1
- package/dist/components/input/passwordStrength.d.ts +9 -0
- package/dist/components/progress-bar/ProgressBar.d.ts +16 -1
- package/dist/components/sparkline/Sparkline.d.ts +26 -0
- package/dist/hooks/useEdgeOverflow.d.ts +4 -0
- package/dist/icon-set.d.ts +501 -0
- package/dist/icons/Icon.d.ts +10 -18
- package/dist/icons/glyph.d.ts +40 -0
- package/dist/icons/glyphs/a-arrow-down.d.ts +2 -0
- package/dist/icons/glyphs/a-arrow-up.d.ts +2 -0
- package/dist/icons/glyphs/accessibility.d.ts +2 -0
- package/dist/icons/glyphs/activity.d.ts +2 -0
- package/dist/icons/glyphs/air-vent.d.ts +2 -0
- package/dist/icons/glyphs/airplay.d.ts +2 -0
- package/dist/icons/glyphs/alarm-clock-check.d.ts +2 -0
- package/dist/icons/glyphs/alarm-clock-minus.d.ts +2 -0
- package/dist/icons/glyphs/alarm-clock-plus.d.ts +2 -0
- package/dist/icons/glyphs/alarm-clock.d.ts +2 -0
- package/dist/icons/glyphs/alarm-smoke.d.ts +2 -0
- package/dist/icons/glyphs/align-horizontal-space-around.d.ts +2 -0
- package/dist/icons/glyphs/align-vertical-space-around.d.ts +2 -0
- package/dist/icons/glyphs/ambulance.d.ts +2 -0
- package/dist/icons/glyphs/angry.d.ts +2 -0
- package/dist/icons/glyphs/annoyed.d.ts +2 -0
- package/dist/icons/glyphs/archive.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-down-dash.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-down.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-left-dash.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-left.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-right-dash.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-right.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-up-dash.d.ts +2 -0
- package/dist/icons/glyphs/arrow-big-up.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-0-1.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-1-0.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-a-z.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-left.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-right.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down-z-a.d.ts +2 -0
- package/dist/icons/glyphs/arrow-down.d.ts +2 -0
- package/dist/icons/glyphs/arrow-left.d.ts +2 -0
- package/dist/icons/glyphs/arrow-right.d.ts +2 -0
- package/dist/icons/glyphs/arrow-up-down.d.ts +2 -0
- package/dist/icons/glyphs/arrow-up-left.d.ts +2 -0
- package/dist/icons/glyphs/arrow-up-right.d.ts +2 -0
- package/dist/icons/glyphs/arrow-up.d.ts +2 -0
- package/dist/icons/glyphs/at-sign.d.ts +2 -0
- package/dist/icons/glyphs/atom.d.ts +2 -0
- package/dist/icons/glyphs/audio-lines.d.ts +2 -0
- package/dist/icons/glyphs/axe.d.ts +2 -0
- package/dist/icons/glyphs/badge-alert.d.ts +2 -0
- package/dist/icons/glyphs/badge-percent.d.ts +2 -0
- package/dist/icons/glyphs/ban.d.ts +2 -0
- package/dist/icons/glyphs/banana.d.ts +2 -0
- package/dist/icons/glyphs/battery-charging.d.ts +2 -0
- package/dist/icons/glyphs/battery-full.d.ts +2 -0
- package/dist/icons/glyphs/battery-low.d.ts +2 -0
- package/dist/icons/glyphs/battery-medium.d.ts +2 -0
- package/dist/icons/glyphs/battery-plus.d.ts +2 -0
- package/dist/icons/glyphs/battery-warning.d.ts +2 -0
- package/dist/icons/glyphs/battery.d.ts +2 -0
- package/dist/icons/glyphs/bell-electric.d.ts +2 -0
- package/dist/icons/glyphs/bell.d.ts +2 -0
- package/dist/icons/glyphs/biceps-flexed.d.ts +2 -0
- package/dist/icons/glyphs/binary.d.ts +2 -0
- package/dist/icons/glyphs/blocks.d.ts +2 -0
- package/dist/icons/glyphs/bluetooth-connected.d.ts +2 -0
- package/dist/icons/glyphs/bluetooth-off.d.ts +2 -0
- package/dist/icons/glyphs/bluetooth-searching.d.ts +2 -0
- package/dist/icons/glyphs/bluetooth.d.ts +2 -0
- package/dist/icons/glyphs/bold.d.ts +2 -0
- package/dist/icons/glyphs/bone.d.ts +2 -0
- package/dist/icons/glyphs/book-open.d.ts +2 -0
- package/dist/icons/glyphs/book-text.d.ts +2 -0
- package/dist/icons/glyphs/bookmark-check.d.ts +2 -0
- package/dist/icons/glyphs/bookmark-minus.d.ts +2 -0
- package/dist/icons/glyphs/bookmark-plus.d.ts +2 -0
- package/dist/icons/glyphs/bookmark-x.d.ts +2 -0
- package/dist/icons/glyphs/bookmark.d.ts +2 -0
- package/dist/icons/glyphs/bot-message-square.d.ts +2 -0
- package/dist/icons/glyphs/bot.d.ts +2 -0
- package/dist/icons/glyphs/box.d.ts +2 -0
- package/dist/icons/glyphs/boxes.d.ts +2 -0
- package/dist/icons/glyphs/brain.d.ts +2 -0
- package/dist/icons/glyphs/briefcase-business.d.ts +2 -0
- package/dist/icons/glyphs/calendar-check-2.d.ts +2 -0
- package/dist/icons/glyphs/calendar-check.d.ts +2 -0
- package/dist/icons/glyphs/calendar-cog.d.ts +2 -0
- package/dist/icons/glyphs/calendar-days.d.ts +2 -0
- package/dist/icons/glyphs/calendar.d.ts +2 -0
- package/dist/icons/glyphs/car.d.ts +2 -0
- package/dist/icons/glyphs/cast.d.ts +2 -0
- package/dist/icons/glyphs/cctv.d.ts +2 -0
- package/dist/icons/glyphs/chart-bar-decreasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-bar-increasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-column-decreasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-column-increasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-column.d.ts +2 -0
- package/dist/icons/glyphs/chart-line.d.ts +2 -0
- package/dist/icons/glyphs/chart-no-axes-column-decreasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-no-axes-column-increasing.d.ts +2 -0
- package/dist/icons/glyphs/chart-pie.d.ts +2 -0
- package/dist/icons/glyphs/chart-scatter.d.ts +2 -0
- package/dist/icons/glyphs/chart-spline.d.ts +2 -0
- package/dist/icons/glyphs/check-check.d.ts +2 -0
- package/dist/icons/glyphs/check.d.ts +2 -0
- package/dist/icons/glyphs/chess-bishop.d.ts +2 -0
- package/dist/icons/glyphs/chess-king.d.ts +2 -0
- package/dist/icons/glyphs/chess-knight.d.ts +2 -0
- package/dist/icons/glyphs/chess-pawn.d.ts +2 -0
- package/dist/icons/glyphs/chevron-down.d.ts +2 -0
- package/dist/icons/glyphs/chevron-first.d.ts +2 -0
- package/dist/icons/glyphs/chevron-left.d.ts +2 -0
- package/dist/icons/glyphs/chevron-right.d.ts +2 -0
- package/dist/icons/glyphs/chevron-up.d.ts +2 -0
- package/dist/icons/glyphs/chevrons-down-up.d.ts +2 -0
- package/dist/icons/glyphs/chevrons-left-right.d.ts +2 -0
- package/dist/icons/glyphs/chevrons-left.d.ts +2 -0
- package/dist/icons/glyphs/chevrons-right-left.d.ts +2 -0
- package/dist/icons/glyphs/chevrons-up-down.d.ts +2 -0
- package/dist/icons/glyphs/chromium.d.ts +2 -0
- package/dist/icons/glyphs/cigarette-off.d.ts +2 -0
- package/dist/icons/glyphs/cigarette.d.ts +2 -0
- package/dist/icons/glyphs/circle-check.d.ts +2 -0
- package/dist/icons/glyphs/circle-chevron-down.d.ts +2 -0
- package/dist/icons/glyphs/circle-chevron-left.d.ts +2 -0
- package/dist/icons/glyphs/circle-chevron-right.d.ts +2 -0
- package/dist/icons/glyphs/circle-chevron-up.d.ts +2 -0
- package/dist/icons/glyphs/circle-dashed.d.ts +2 -0
- package/dist/icons/glyphs/circle-dollar-sign.d.ts +2 -0
- package/dist/icons/glyphs/circle-gauge.d.ts +2 -0
- package/dist/icons/glyphs/circle-question-mark.d.ts +2 -0
- package/dist/icons/glyphs/circle-x.d.ts +2 -0
- package/dist/icons/glyphs/circle.d.ts +2 -0
- package/dist/icons/glyphs/clapperboard.d.ts +2 -0
- package/dist/icons/glyphs/clipboard-check.d.ts +2 -0
- package/dist/icons/glyphs/clock.d.ts +2 -0
- package/dist/icons/glyphs/cloud-backup.d.ts +2 -0
- package/dist/icons/glyphs/cloud-cog.d.ts +2 -0
- package/dist/icons/glyphs/cloud-download.d.ts +2 -0
- package/dist/icons/glyphs/cloud-lightning.d.ts +2 -0
- package/dist/icons/glyphs/cloud-off.d.ts +2 -0
- package/dist/icons/glyphs/cloud-rain-wind.d.ts +2 -0
- package/dist/icons/glyphs/cloud-rain.d.ts +2 -0
- package/dist/icons/glyphs/cloud-snow.d.ts +2 -0
- package/dist/icons/glyphs/cloud-sun.d.ts +2 -0
- package/dist/icons/glyphs/cloud-sync.d.ts +2 -0
- package/dist/icons/glyphs/cloud-upload.d.ts +2 -0
- package/dist/icons/glyphs/code-xml.d.ts +2 -0
- package/dist/icons/glyphs/coffee.d.ts +2 -0
- package/dist/icons/glyphs/cog.d.ts +2 -0
- package/dist/icons/glyphs/compass.d.ts +2 -0
- package/dist/icons/glyphs/concierge-bell.d.ts +2 -0
- package/dist/icons/glyphs/construction.d.ts +2 -0
- package/dist/icons/glyphs/contrast.d.ts +2 -0
- package/dist/icons/glyphs/cooking-pot.d.ts +2 -0
- package/dist/icons/glyphs/copy.d.ts +2 -0
- package/dist/icons/glyphs/corner-down-left.d.ts +2 -0
- package/dist/icons/glyphs/corner-down-right.d.ts +2 -0
- package/dist/icons/glyphs/corner-left-down.d.ts +2 -0
- package/dist/icons/glyphs/corner-left-up.d.ts +2 -0
- package/dist/icons/glyphs/corner-right-down.d.ts +2 -0
- package/dist/icons/glyphs/corner-right-up.d.ts +2 -0
- package/dist/icons/glyphs/corner-up-left.d.ts +2 -0
- package/dist/icons/glyphs/corner-up-right.d.ts +2 -0
- package/dist/icons/glyphs/cpu.d.ts +2 -0
- package/dist/icons/glyphs/credit-card.d.ts +2 -0
- package/dist/icons/glyphs/cup-soda.d.ts +2 -0
- package/dist/icons/glyphs/database-backup.d.ts +2 -0
- package/dist/icons/glyphs/delete.d.ts +2 -0
- package/dist/icons/glyphs/disc-3.d.ts +2 -0
- package/dist/icons/glyphs/dollar-sign.d.ts +2 -0
- package/dist/icons/glyphs/download.d.ts +2 -0
- package/dist/icons/glyphs/dribbble.d.ts +2 -0
- package/dist/icons/glyphs/droplet.d.ts +2 -0
- package/dist/icons/glyphs/drum.d.ts +2 -0
- package/dist/icons/glyphs/earth.d.ts +2 -0
- package/dist/icons/glyphs/ellipsis.d.ts +2 -0
- package/dist/icons/glyphs/euro.d.ts +2 -0
- package/dist/icons/glyphs/ev-charger.d.ts +2 -0
- package/dist/icons/glyphs/expand.d.ts +2 -0
- package/dist/icons/glyphs/external-link.d.ts +2 -0
- package/dist/icons/glyphs/eye-off.d.ts +2 -0
- package/dist/icons/glyphs/eye.d.ts +2 -0
- package/dist/icons/glyphs/facebook.d.ts +2 -0
- package/dist/icons/glyphs/fan.d.ts +2 -0
- package/dist/icons/glyphs/feather.d.ts +2 -0
- package/dist/icons/glyphs/figma.d.ts +2 -0
- package/dist/icons/glyphs/file-chart-line.d.ts +2 -0
- package/dist/icons/glyphs/file-check-corner.d.ts +2 -0
- package/dist/icons/glyphs/file-check.d.ts +2 -0
- package/dist/icons/glyphs/file-cog.d.ts +2 -0
- package/dist/icons/glyphs/file-pen-line.d.ts +2 -0
- package/dist/icons/glyphs/file-stack.d.ts +2 -0
- package/dist/icons/glyphs/file-text.d.ts +2 -0
- package/dist/icons/glyphs/fingerprint-pattern.d.ts +2 -0
- package/dist/icons/glyphs/fish-symbol.d.ts +2 -0
- package/dist/icons/glyphs/flame.d.ts +2 -0
- package/dist/icons/glyphs/flask-conical.d.ts +2 -0
- package/dist/icons/glyphs/folder-archive.d.ts +2 -0
- package/dist/icons/glyphs/folder-check.d.ts +2 -0
- package/dist/icons/glyphs/folder-clock.d.ts +2 -0
- package/dist/icons/glyphs/folder-code.d.ts +2 -0
- package/dist/icons/glyphs/folder-cog.d.ts +2 -0
- package/dist/icons/glyphs/folder-dot.d.ts +2 -0
- package/dist/icons/glyphs/folder-down.d.ts +2 -0
- package/dist/icons/glyphs/folder-git-2.d.ts +2 -0
- package/dist/icons/glyphs/folder-git.d.ts +2 -0
- package/dist/icons/glyphs/folder-heart.d.ts +2 -0
- package/dist/icons/glyphs/folder-input.d.ts +2 -0
- package/dist/icons/glyphs/folder-kanban.d.ts +2 -0
- package/dist/icons/glyphs/folder-key.d.ts +2 -0
- package/dist/icons/glyphs/folder-lock.d.ts +2 -0
- package/dist/icons/glyphs/folder-minus.d.ts +2 -0
- package/dist/icons/glyphs/folder-open.d.ts +2 -0
- package/dist/icons/glyphs/folder-output.d.ts +2 -0
- package/dist/icons/glyphs/folder-plus.d.ts +2 -0
- package/dist/icons/glyphs/folder-root.d.ts +2 -0
- package/dist/icons/glyphs/folder-sync.d.ts +2 -0
- package/dist/icons/glyphs/folder-tree.d.ts +2 -0
- package/dist/icons/glyphs/folder-up.d.ts +2 -0
- package/dist/icons/glyphs/folder-x.d.ts +2 -0
- package/dist/icons/glyphs/folders.d.ts +2 -0
- package/dist/icons/glyphs/frame.d.ts +2 -0
- package/dist/icons/glyphs/frown.d.ts +2 -0
- package/dist/icons/glyphs/gallery-horizontal-end.d.ts +2 -0
- package/dist/icons/glyphs/gallery-thumbnails.d.ts +2 -0
- package/dist/icons/glyphs/gallery-vertical-end.d.ts +2 -0
- package/dist/icons/glyphs/gauge.d.ts +2 -0
- package/dist/icons/glyphs/gavel.d.ts +2 -0
- package/dist/icons/glyphs/georgian-lari.d.ts +2 -0
- package/dist/icons/glyphs/git-branch.d.ts +2 -0
- package/dist/icons/glyphs/git-commit-horizontal.d.ts +2 -0
- package/dist/icons/glyphs/git-commit-vertical.d.ts +2 -0
- package/dist/icons/glyphs/git-compare-arrows.d.ts +2 -0
- package/dist/icons/glyphs/git-compare.d.ts +2 -0
- package/dist/icons/glyphs/git-fork.d.ts +2 -0
- package/dist/icons/glyphs/git-graph.d.ts +2 -0
- package/dist/icons/glyphs/git-merge.d.ts +2 -0
- package/dist/icons/glyphs/git-pull-request-closed.d.ts +2 -0
- package/dist/icons/glyphs/git-pull-request-create.d.ts +2 -0
- package/dist/icons/glyphs/git-pull-request.d.ts +2 -0
- package/dist/icons/glyphs/github.d.ts +2 -0
- package/dist/icons/glyphs/gitlab.d.ts +2 -0
- package/dist/icons/glyphs/graduation-cap.d.ts +2 -0
- package/dist/icons/glyphs/grip-horizontal.d.ts +2 -0
- package/dist/icons/glyphs/grip-vertical.d.ts +2 -0
- package/dist/icons/glyphs/grip.d.ts +2 -0
- package/dist/icons/glyphs/hammer.d.ts +2 -0
- package/dist/icons/glyphs/hand-coins.d.ts +2 -0
- package/dist/icons/glyphs/hand-fist.d.ts +2 -0
- package/dist/icons/glyphs/hand-grab.d.ts +2 -0
- package/dist/icons/glyphs/hand-heart.d.ts +2 -0
- package/dist/icons/glyphs/hand-helping.d.ts +2 -0
- package/dist/icons/glyphs/hand-metal.d.ts +2 -0
- package/dist/icons/glyphs/hand.d.ts +2 -0
- package/dist/icons/glyphs/hard-drive-download.d.ts +2 -0
- package/dist/icons/glyphs/hard-drive-upload.d.ts +2 -0
- package/dist/icons/glyphs/hard-drive.d.ts +2 -0
- package/dist/icons/glyphs/hat-glasses.d.ts +2 -0
- package/dist/icons/glyphs/heart-handshake.d.ts +2 -0
- package/dist/icons/glyphs/heart-pulse.d.ts +2 -0
- package/dist/icons/glyphs/heart.d.ts +2 -0
- package/dist/icons/glyphs/history.d.ts +2 -0
- package/dist/icons/glyphs/hourglass.d.ts +2 -0
- package/dist/icons/glyphs/house.d.ts +2 -0
- package/dist/icons/glyphs/id-card.d.ts +2 -0
- package/dist/icons/glyphs/image.d.ts +2 -0
- package/dist/icons/glyphs/inbox.d.ts +2 -0
- package/dist/icons/glyphs/indian-rupee.d.ts +2 -0
- package/dist/icons/glyphs/info.d.ts +2 -0
- package/dist/icons/glyphs/instagram.d.ts +2 -0
- package/dist/icons/glyphs/italic.d.ts +2 -0
- package/dist/icons/glyphs/japanese-yen.d.ts +2 -0
- package/dist/icons/glyphs/key-round.d.ts +2 -0
- package/dist/icons/glyphs/key-square.d.ts +2 -0
- package/dist/icons/glyphs/key.d.ts +2 -0
- package/dist/icons/glyphs/keyboard.d.ts +2 -0
- package/dist/icons/glyphs/languages.d.ts +2 -0
- package/dist/icons/glyphs/laptop-minimal-check.d.ts +2 -0
- package/dist/icons/glyphs/laugh.d.ts +2 -0
- package/dist/icons/glyphs/layers.d.ts +2 -0
- package/dist/icons/glyphs/layout-dashboard.d.ts +2 -0
- package/dist/icons/glyphs/layout-grid.d.ts +2 -0
- package/dist/icons/glyphs/layout-panel-top.d.ts +2 -0
- package/dist/icons/glyphs/leaf.d.ts +2 -0
- package/dist/icons/glyphs/leafy-green.d.ts +2 -0
- package/dist/icons/glyphs/link-2.d.ts +2 -0
- package/dist/icons/glyphs/link.d.ts +2 -0
- package/dist/icons/glyphs/linkedin.d.ts +2 -0
- package/dist/icons/glyphs/list-filter.d.ts +2 -0
- package/dist/icons/glyphs/list-todo.d.ts +2 -0
- package/dist/icons/glyphs/list.d.ts +2 -0
- package/dist/icons/glyphs/loader-circle.d.ts +2 -0
- package/dist/icons/glyphs/loader-pinwheel.d.ts +2 -0
- package/dist/icons/glyphs/loader.d.ts +2 -0
- package/dist/icons/glyphs/lock-keyhole-open.d.ts +2 -0
- package/dist/icons/glyphs/lock-keyhole.d.ts +2 -0
- package/dist/icons/glyphs/lock-open.d.ts +2 -0
- package/dist/icons/glyphs/lock.d.ts +2 -0
- package/dist/icons/glyphs/log-in.d.ts +2 -0
- package/dist/icons/glyphs/log-out.d.ts +2 -0
- package/dist/icons/glyphs/mail-check.d.ts +2 -0
- package/dist/icons/glyphs/mail.d.ts +2 -0
- package/dist/icons/glyphs/mailbox.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-check-inside.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-check.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-house.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-minus-inside.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-minus.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-off.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-plus-inside.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-plus.d.ts +2 -0
- package/dist/icons/glyphs/map-pin-x-inside.d.ts +2 -0
- package/dist/icons/glyphs/map-pin.d.ts +2 -0
- package/dist/icons/glyphs/maximize-2.d.ts +2 -0
- package/dist/icons/glyphs/maximize.d.ts +2 -0
- package/dist/icons/glyphs/meh.d.ts +2 -0
- package/dist/icons/glyphs/menu.d.ts +2 -0
- package/dist/icons/glyphs/message-circle-check.d.ts +2 -0
- package/dist/icons/glyphs/message-circle-dashed.d.ts +2 -0
- package/dist/icons/glyphs/message-circle-more.d.ts +2 -0
- package/dist/icons/glyphs/message-circle-plus.d.ts +2 -0
- package/dist/icons/glyphs/message-circle-x.d.ts +2 -0
- package/dist/icons/glyphs/message-circle.d.ts +2 -0
- package/dist/icons/glyphs/message-square-check.d.ts +2 -0
- package/dist/icons/glyphs/message-square-dashed.d.ts +2 -0
- package/dist/icons/glyphs/message-square-more.d.ts +2 -0
- package/dist/icons/glyphs/message-square-plus.d.ts +2 -0
- package/dist/icons/glyphs/message-square-x.d.ts +2 -0
- package/dist/icons/glyphs/message-square.d.ts +2 -0
- package/dist/icons/glyphs/mic-off.d.ts +2 -0
- package/dist/icons/glyphs/mic.d.ts +2 -0
- package/dist/icons/glyphs/minimize.d.ts +2 -0
- package/dist/icons/glyphs/minus.d.ts +2 -0
- package/dist/icons/glyphs/monitor-check.d.ts +2 -0
- package/dist/icons/glyphs/monitor-cog.d.ts +2 -0
- package/dist/icons/glyphs/monitor.d.ts +2 -0
- package/dist/icons/glyphs/moon.d.ts +2 -0
- package/dist/icons/glyphs/mouse-pointer-click.d.ts +2 -0
- package/dist/icons/glyphs/nfc.d.ts +2 -0
- package/dist/icons/glyphs/package.d.ts +2 -0
- package/dist/icons/glyphs/palette.d.ts +2 -0
- package/dist/icons/glyphs/panel-left-close.d.ts +2 -0
- package/dist/icons/glyphs/panel-left-open.d.ts +2 -0
- package/dist/icons/glyphs/panel-right-open.d.ts +2 -0
- package/dist/icons/glyphs/paperclip.d.ts +2 -0
- package/dist/icons/glyphs/party-popper.d.ts +2 -0
- package/dist/icons/glyphs/pause.d.ts +2 -0
- package/dist/icons/glyphs/pen-tool.d.ts +2 -0
- package/dist/icons/glyphs/philippine-peso.d.ts +2 -0
- package/dist/icons/glyphs/phone-call.d.ts +2 -0
- package/dist/icons/glyphs/phone-forwarded.d.ts +2 -0
- package/dist/icons/glyphs/phone-incoming.d.ts +2 -0
- package/dist/icons/glyphs/phone-missed.d.ts +2 -0
- package/dist/icons/glyphs/phone-off.d.ts +2 -0
- package/dist/icons/glyphs/phone.d.ts +2 -0
- package/dist/icons/glyphs/pickaxe.d.ts +2 -0
- package/dist/icons/glyphs/pipette.d.ts +2 -0
- package/dist/icons/glyphs/plane-landing.d.ts +2 -0
- package/dist/icons/glyphs/plane-takeoff.d.ts +2 -0
- package/dist/icons/glyphs/plane.d.ts +2 -0
- package/dist/icons/glyphs/play.d.ts +2 -0
- package/dist/icons/glyphs/plug-zap.d.ts +2 -0
- package/dist/icons/glyphs/plus.d.ts +2 -0
- package/dist/icons/glyphs/pound-sterling.d.ts +2 -0
- package/dist/icons/glyphs/projector.d.ts +2 -0
- package/dist/icons/glyphs/rabbit.d.ts +2 -0
- package/dist/icons/glyphs/radio-tower.d.ts +2 -0
- package/dist/icons/glyphs/radio.d.ts +2 -0
- package/dist/icons/glyphs/receipt-cent.d.ts +2 -0
- package/dist/icons/glyphs/receipt-euro.d.ts +2 -0
- package/dist/icons/glyphs/receipt-indian-rupee.d.ts +2 -0
- package/dist/icons/glyphs/receipt-japanese-yen.d.ts +2 -0
- package/dist/icons/glyphs/receipt-pound-sterling.d.ts +2 -0
- package/dist/icons/glyphs/receipt-russian-ruble.d.ts +2 -0
- package/dist/icons/glyphs/receipt-swiss-franc.d.ts +2 -0
- package/dist/icons/glyphs/receipt-text.d.ts +2 -0
- package/dist/icons/glyphs/receipt-turkish-lira.d.ts +2 -0
- package/dist/icons/glyphs/receipt.d.ts +2 -0
- package/dist/icons/glyphs/redo-dot.d.ts +2 -0
- package/dist/icons/glyphs/redo.d.ts +2 -0
- package/dist/icons/glyphs/refresh-ccw-dot.d.ts +2 -0
- package/dist/icons/glyphs/refresh-ccw.d.ts +2 -0
- package/dist/icons/glyphs/refresh-cw-off.d.ts +2 -0
- package/dist/icons/glyphs/refresh-cw.d.ts +2 -0
- package/dist/icons/glyphs/rocket.d.ts +2 -0
- package/dist/icons/glyphs/rocking-chair.d.ts +2 -0
- package/dist/icons/glyphs/roller-coaster.d.ts +2 -0
- package/dist/icons/glyphs/rotate-ccw.d.ts +2 -0
- package/dist/icons/glyphs/rotate-cw.d.ts +2 -0
- package/dist/icons/glyphs/route.d.ts +2 -0
- package/dist/icons/glyphs/router.d.ts +2 -0
- package/dist/icons/glyphs/russian-ruble.d.ts +2 -0
- package/dist/icons/glyphs/satellite-dish.d.ts +2 -0
- package/dist/icons/glyphs/saudi-riyal.d.ts +2 -0
- package/dist/icons/glyphs/scan-face.d.ts +2 -0
- package/dist/icons/glyphs/scan-text.d.ts +2 -0
- package/dist/icons/glyphs/search.d.ts +2 -0
- package/dist/icons/glyphs/send.d.ts +2 -0
- package/dist/icons/glyphs/server-cog.d.ts +2 -0
- package/dist/icons/glyphs/server-crash.d.ts +2 -0
- package/dist/icons/glyphs/server.d.ts +2 -0
- package/dist/icons/glyphs/settings.d.ts +2 -0
- package/dist/icons/glyphs/shield-check.d.ts +2 -0
- package/dist/icons/glyphs/ship-wheel.d.ts +2 -0
- package/dist/icons/glyphs/ship.d.ts +2 -0
- package/dist/icons/glyphs/shopping-cart.d.ts +2 -0
- package/dist/icons/glyphs/shower-head.d.ts +2 -0
- package/dist/icons/glyphs/shredder.d.ts +2 -0
- package/dist/icons/glyphs/shrink.d.ts +2 -0
- package/dist/icons/glyphs/sliders-horizontal.d.ts +2 -0
- package/dist/icons/glyphs/smartphone-charging.d.ts +2 -0
- package/dist/icons/glyphs/smartphone-nfc.d.ts +2 -0
- package/dist/icons/glyphs/smartphone.d.ts +2 -0
- package/dist/icons/glyphs/smile-plus.d.ts +2 -0
- package/dist/icons/glyphs/smile.d.ts +2 -0
- package/dist/icons/glyphs/snowflake.d.ts +2 -0
- package/dist/icons/glyphs/soup.d.ts +2 -0
- package/dist/icons/glyphs/sparkles.d.ts +2 -0
- package/dist/icons/glyphs/spray-can.d.ts +2 -0
- package/dist/icons/glyphs/square-activity.d.ts +2 -0
- package/dist/icons/glyphs/square-arrow-down.d.ts +2 -0
- package/dist/icons/glyphs/square-arrow-left.d.ts +2 -0
- package/dist/icons/glyphs/square-arrow-right.d.ts +2 -0
- package/dist/icons/glyphs/square-arrow-up.d.ts +2 -0
- package/dist/icons/glyphs/square-chevron-down.d.ts +2 -0
- package/dist/icons/glyphs/square-chevron-left.d.ts +2 -0
- package/dist/icons/glyphs/square-chevron-right.d.ts +2 -0
- package/dist/icons/glyphs/square-chevron-up.d.ts +2 -0
- package/dist/icons/glyphs/square-pen.d.ts +2 -0
- package/dist/icons/glyphs/square-stack.d.ts +2 -0
- package/dist/icons/glyphs/stamp.d.ts +2 -0
- package/dist/icons/glyphs/stethoscope.d.ts +2 -0
- package/dist/icons/glyphs/sun-dim.d.ts +2 -0
- package/dist/icons/glyphs/sun-medium.d.ts +2 -0
- package/dist/icons/glyphs/sun-moon.d.ts +2 -0
- package/dist/icons/glyphs/sun.d.ts +2 -0
- package/dist/icons/glyphs/sunset.d.ts +2 -0
- package/dist/icons/glyphs/swiss-franc.d.ts +2 -0
- package/dist/icons/glyphs/switch-camera.d.ts +2 -0
- package/dist/icons/glyphs/syringe.d.ts +2 -0
- package/dist/icons/glyphs/tablet.d.ts +2 -0
- package/dist/icons/glyphs/telescope.d.ts +2 -0
- package/dist/icons/glyphs/terminal.d.ts +2 -0
- package/dist/icons/glyphs/text-align-center.d.ts +2 -0
- package/dist/icons/glyphs/text-align-end.d.ts +2 -0
- package/dist/icons/glyphs/text-align-start.d.ts +2 -0
- package/dist/icons/glyphs/thermometer.d.ts +2 -0
- package/dist/icons/glyphs/thumbs-down.d.ts +2 -0
- package/dist/icons/glyphs/thumbs-up.d.ts +2 -0
- package/dist/icons/glyphs/ticket.d.ts +2 -0
- package/dist/icons/glyphs/timer.d.ts +2 -0
- package/dist/icons/glyphs/tornado.d.ts +2 -0
- package/dist/icons/glyphs/train-track.d.ts +2 -0
- package/dist/icons/glyphs/trash-2.d.ts +2 -0
- package/dist/icons/glyphs/tree-deciduous.d.ts +2 -0
- package/dist/icons/glyphs/tree-pine.d.ts +2 -0
- package/dist/icons/glyphs/trending-down.d.ts +2 -0
- package/dist/icons/glyphs/trending-up-down.d.ts +2 -0
- package/dist/icons/glyphs/trending-up.d.ts +2 -0
- package/dist/icons/glyphs/triangle-alert.d.ts +2 -0
- package/dist/icons/glyphs/truck.d.ts +2 -0
- package/dist/icons/glyphs/turkish-lira.d.ts +2 -0
- package/dist/icons/glyphs/twitch.d.ts +2 -0
- package/dist/icons/glyphs/twitter.d.ts +2 -0
- package/dist/icons/glyphs/underline.d.ts +2 -0
- package/dist/icons/glyphs/undo-dot.d.ts +2 -0
- package/dist/icons/glyphs/undo.d.ts +2 -0
- package/dist/icons/glyphs/unplug.d.ts +2 -0
- package/dist/icons/glyphs/upload.d.ts +2 -0
- package/dist/icons/glyphs/user-check.d.ts +2 -0
- package/dist/icons/glyphs/user-plus.d.ts +2 -0
- package/dist/icons/glyphs/user-round-check.d.ts +2 -0
- package/dist/icons/glyphs/user-round-cog.d.ts +2 -0
- package/dist/icons/glyphs/user-round-plus.d.ts +2 -0
- package/dist/icons/glyphs/user-round.d.ts +2 -0
- package/dist/icons/glyphs/user.d.ts +2 -0
- package/dist/icons/glyphs/users-round.d.ts +2 -0
- package/dist/icons/glyphs/users.d.ts +2 -0
- package/dist/icons/glyphs/vibrate.d.ts +2 -0
- package/dist/icons/glyphs/volume.d.ts +2 -0
- package/dist/icons/glyphs/wallet.d.ts +2 -0
- package/dist/icons/glyphs/washing-machine.d.ts +2 -0
- package/dist/icons/glyphs/waves-arrow-down.d.ts +2 -0
- package/dist/icons/glyphs/waves-arrow-up.d.ts +2 -0
- package/dist/icons/glyphs/waves-ladder.d.ts +2 -0
- package/dist/icons/glyphs/waves.d.ts +2 -0
- package/dist/icons/glyphs/waypoints.d.ts +2 -0
- package/dist/icons/glyphs/webhook.d.ts +2 -0
- package/dist/icons/glyphs/wifi-cog.d.ts +2 -0
- package/dist/icons/glyphs/wifi-low.d.ts +2 -0
- package/dist/icons/glyphs/wifi-pen.d.ts +2 -0
- package/dist/icons/glyphs/wifi-sync.d.ts +2 -0
- package/dist/icons/glyphs/wifi.d.ts +2 -0
- package/dist/icons/glyphs/wind-arrow-down.d.ts +2 -0
- package/dist/icons/glyphs/wind.d.ts +2 -0
- package/dist/icons/glyphs/workflow.d.ts +2 -0
- package/dist/icons/glyphs/wrench.d.ts +2 -0
- package/dist/icons/glyphs/x.d.ts +2 -0
- package/dist/icons/glyphs/youtube.d.ts +2 -0
- package/dist/icons/glyphs/zap-off.d.ts +2 -0
- package/dist/icons/glyphs/zap.d.ts +2 -0
- package/dist/icons/iconPlay.d.ts +2 -0
- package/dist/icons/registry.d.ts +81 -78
- package/dist/icons.js +996 -0
- package/dist/index.css +1257 -399
- package/dist/index.d.ts +1 -0
- package/dist/index.js +13 -5
- package/dist/internal/CheckMark.d.ts +12 -0
- package/dist/internal/ChoiceField.d.ts +1 -1
- package/dist/internal/FieldFrame.d.ts +17 -0
- package/dist/internal/MorphText.d.ts +12 -0
- package/dist/internal/RollingNumber.d.ts +14 -0
- package/dist/internal/surfaceDepth.d.ts +25 -0
- package/dist/internal/swatch.d.ts +4 -1
- package/dist/layout/app-shell/AppShell.d.ts +2 -2
- package/dist/motion/celebrate.d.ts +18 -0
- package/dist/tokens/layers.d.ts +37 -0
- package/dist/tokens/naming.d.ts +1 -1
- package/dist/tokens/primitives.d.ts +1 -0
- package/dist/tokens/semantic.d.ts +67 -56
- package/dist/tokens/themes/dark.d.ts +7 -14
- package/package.json +11 -4
- package/src/components/accordion/COMPONENT.md +4 -4
- package/src/components/avatar/COMPONENT.md +1 -1
- package/src/components/button/COMPONENT.md +30 -7
- package/src/components/button/examples/download.tsx +45 -0
- package/src/components/button/examples/hold-to-confirm.tsx +23 -0
- package/src/components/button/examples/in-form.tsx +15 -3
- package/src/components/button/examples/label-morph.tsx +38 -0
- package/src/components/button/examples/variants.tsx +1 -0
- package/src/components/card/COMPONENT.md +4 -2
- package/src/components/card/examples/narrow.tsx +2 -2
- package/src/components/card/examples/panel-chart.tsx +1 -1
- package/src/components/card/examples/variants.tsx +1 -1
- package/src/components/checkbox/COMPONENT.md +1 -1
- package/src/components/checkbox/examples/examples.module.css +1 -1
- package/src/components/code-block/COMPONENT.md +6 -6
- package/src/components/code-block/examples/overview.tsx +1 -1
- package/src/components/code-block/examples/variants.tsx +1 -1
- package/src/components/color-picker/COMPONENT.md +3 -3
- package/src/components/color-picker/examples/in-form.tsx +13 -5
- package/src/components/color-picker/examples/validation.tsx +10 -4
- package/src/components/color-swatches/COMPONENT.md +6 -6
- package/src/components/color-swatches/examples/in-form.tsx +11 -5
- package/src/components/command-menu/COMPONENT.md +1 -1
- package/src/components/crossfade/examples/overview.tsx +3 -3
- package/src/components/data-table/COMPONENT.md +5 -4
- package/src/components/datepicker/COMPONENT.md +3 -3
- package/src/components/datepicker/examples/in-form.tsx +30 -9
- package/src/components/datepicker/examples/validation.tsx +20 -10
- package/src/components/digit-input/COMPONENT.md +8 -6
- package/src/components/digit-input/examples/in-form.tsx +22 -4
- package/src/components/digit-input/examples/on-complete.tsx +7 -6
- package/src/components/digit-input/examples/validation.tsx +12 -5
- package/src/components/dnd/COMPONENT.md +1 -1
- package/src/components/dnd/examples/examples.module.css +4 -4
- package/src/components/drawer/COMPONENT.md +1 -1
- package/src/components/drawer/examples/in-form.tsx +7 -2
- package/src/components/dropdown/COMPONENT.md +1 -1
- package/src/components/dropdown/examples/examples.module.css +1 -1
- package/src/components/empty-page/examples/examples.module.css +1 -1
- package/src/components/example-frame/COMPONENT.md +1 -1
- package/src/components/file-upload/COMPONENT.md +3 -3
- package/src/components/file-upload/examples/in-form.tsx +28 -4
- package/src/components/file-upload/examples/validation.tsx +37 -6
- package/src/components/input/COMPONENT.md +13 -4
- package/src/components/input/examples/in-form.tsx +42 -7
- package/src/components/input/examples/password-strength.tsx +12 -0
- package/src/components/input/examples/validation.tsx +38 -13
- package/src/components/kanban/COMPONENT.md +4 -4
- package/src/components/login-form/COMPONENT.md +4 -4
- package/src/components/login-form/examples/register.tsx +2 -2
- package/src/components/login-form/examples/reset-password.tsx +2 -2
- package/src/components/modal/COMPONENT.md +3 -3
- package/src/components/modal/examples/examples.module.css +2 -2
- package/src/components/modal/examples/in-form.tsx +7 -2
- package/src/components/native-select/COMPONENT.md +3 -3
- package/src/components/native-select/examples/examples.module.css +2 -0
- package/src/components/native-select/examples/in-form.tsx +18 -3
- package/src/components/native-select/examples/validation.tsx +8 -3
- package/src/components/page-content/examples/examples.module.css +1 -1
- package/src/components/popover/COMPONENT.md +2 -2
- package/src/components/popover/examples/in-form.tsx +27 -5
- package/src/components/progress-bar/COMPONENT.md +5 -1
- package/src/components/progress-bar/examples/examples.module.css +7 -0
- package/src/components/progress-bar/examples/milestone.tsx +43 -0
- package/src/components/progress-bar/examples/steps.tsx +35 -0
- package/src/components/radio/COMPONENT.md +1 -1
- package/src/components/select/COMPONENT.md +3 -3
- package/src/components/select/examples/examples.module.css +1 -0
- package/src/components/select/examples/in-form.tsx +25 -3
- package/src/components/select/examples/validation.tsx +8 -3
- package/src/components/skeleton/examples/with-crossfade.tsx +3 -3
- package/src/components/slider/COMPONENT.md +1 -1
- package/src/components/sparkline/COMPONENT.md +98 -0
- package/src/components/sparkline/examples/examples.module.css +13 -0
- package/src/components/sparkline/examples/overview.tsx +27 -0
- package/src/components/sparkline/examples/period.tsx +46 -0
- package/src/components/switch/COMPONENT.md +1 -1
- package/src/components/tabs/COMPONENT.md +15 -16
- package/src/components/tabs/examples/examples.module.css +14 -0
- package/src/components/tabs/examples/orientation.tsx +87 -33
- package/src/components/tag-select/COMPONENT.md +3 -3
- package/src/components/tag-select/examples/examples.module.css +1 -0
- package/src/components/tag-select/examples/in-form.tsx +19 -2
- package/src/components/tag-select/examples/validation.tsx +7 -2
- package/src/components/textarea/COMPONENT.md +3 -3
- package/src/components/textarea/examples/in-form.tsx +20 -8
- package/src/components/textarea/examples/validation.tsx +24 -8
- package/src/components/tooltip/COMPONENT.md +8 -6
- package/src/components/tooltip/examples/examples.module.css +2 -2
- package/src/layout/app-header/COMPONENT.md +1 -1
- package/src/layout/app-header/examples/examples.module.css +4 -4
- package/src/layout/app-shell/COMPONENT.md +8 -8
- package/src/layout/app-shell/examples/examples.module.css +3 -3
- package/src/layout/bottom-nav/COMPONENT.md +1 -1
- package/src/layout/bottom-nav/examples/examples.module.css +1 -1
- package/src/layout/sidebar/COMPONENT.md +4 -4
- package/src/layout/sidebar/examples/examples.module.css +5 -5
- package/src/styles/globals.css +125 -2
- package/src/styles/theme-dark.css +37 -13
- package/src/styles/theme-light.css +61 -16
- package/src/styles/tokens.css +1 -0
|
@@ -1,27 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import {
|
|
2
|
+
Activity,
|
|
3
|
+
ArrowDown,
|
|
4
|
+
ArrowUp,
|
|
5
|
+
ArrowUpDown,
|
|
6
|
+
Bell,
|
|
7
|
+
Bold,
|
|
8
|
+
BookOpen,
|
|
9
|
+
Calendar,
|
|
10
|
+
ChartColumn,
|
|
11
|
+
Check,
|
|
12
|
+
ChevronDown,
|
|
13
|
+
ChevronLeft,
|
|
14
|
+
ChevronRight,
|
|
15
|
+
ChevronUp,
|
|
16
|
+
ChevronsLeft,
|
|
17
|
+
ChevronsUpDown,
|
|
18
|
+
Circle,
|
|
19
|
+
CircleCheck,
|
|
20
|
+
CircleX,
|
|
21
|
+
CloudOff,
|
|
22
|
+
CloudUpload,
|
|
23
|
+
CodeXml,
|
|
24
|
+
ControlSizeProvider,
|
|
25
|
+
Copy,
|
|
26
|
+
Download,
|
|
27
|
+
Ellipsis,
|
|
28
|
+
ExternalLink,
|
|
29
|
+
Eye,
|
|
30
|
+
EyeOff,
|
|
31
|
+
FileText,
|
|
32
|
+
GripVertical,
|
|
33
|
+
HardDrive,
|
|
34
|
+
House,
|
|
35
|
+
Image,
|
|
36
|
+
Inbox,
|
|
37
|
+
Info,
|
|
38
|
+
Italic,
|
|
39
|
+
KeyRound,
|
|
40
|
+
LayoutDashboard,
|
|
41
|
+
LayoutGrid,
|
|
42
|
+
Link2,
|
|
43
|
+
List,
|
|
44
|
+
ListFilter,
|
|
45
|
+
ListTodo,
|
|
46
|
+
Lock,
|
|
47
|
+
LogIn,
|
|
48
|
+
LogOut,
|
|
49
|
+
Mail,
|
|
50
|
+
MailCheck,
|
|
51
|
+
Menu,
|
|
52
|
+
MessageSquare,
|
|
53
|
+
Minus,
|
|
54
|
+
Monitor,
|
|
55
|
+
Moon,
|
|
56
|
+
Package,
|
|
57
|
+
PanelLeftClose,
|
|
58
|
+
PanelLeftOpen,
|
|
59
|
+
Pipette,
|
|
60
|
+
Plus,
|
|
61
|
+
Receipt,
|
|
62
|
+
RefreshCw,
|
|
63
|
+
Rocket,
|
|
64
|
+
Search,
|
|
65
|
+
Send,
|
|
66
|
+
Settings,
|
|
67
|
+
ShoppingCart,
|
|
68
|
+
Smartphone,
|
|
69
|
+
Sun,
|
|
70
|
+
Tablet,
|
|
71
|
+
Trash2,
|
|
72
|
+
TriangleAlert,
|
|
73
|
+
Truck,
|
|
74
|
+
Underline,
|
|
75
|
+
UserRound,
|
|
76
|
+
Users,
|
|
77
|
+
Wallet,
|
|
78
|
+
X,
|
|
79
|
+
cx,
|
|
80
|
+
iconBoxClass,
|
|
81
|
+
textTone_default,
|
|
82
|
+
useControlSize,
|
|
83
|
+
useIconRoot,
|
|
84
|
+
useOptionalControlSize
|
|
85
|
+
} from "./chunk-GFKDZFQR.js";
|
|
17
86
|
|
|
18
87
|
// src/components/spinner/Spinner.tsx
|
|
19
|
-
import * as
|
|
20
|
-
|
|
21
|
-
// src/internal/cx.ts
|
|
22
|
-
function cx(...classNames) {
|
|
23
|
-
return classNames.filter(Boolean).join(" ");
|
|
24
|
-
}
|
|
88
|
+
import * as React from "react";
|
|
25
89
|
|
|
26
90
|
// src/internal/data-attributes.ts
|
|
27
91
|
function toDataAttributes(input) {
|
|
@@ -36,37 +100,16 @@ function toDataAttributes(input) {
|
|
|
36
100
|
return result;
|
|
37
101
|
}
|
|
38
102
|
|
|
39
|
-
// src/internal/iconBox.module.css
|
|
40
|
-
var iconBox_default = {
|
|
41
|
-
box: "iconBox_box",
|
|
42
|
-
xs: "iconBox_xs",
|
|
43
|
-
s: "iconBox_s",
|
|
44
|
-
m: "iconBox_m",
|
|
45
|
-
l: "iconBox_l",
|
|
46
|
-
xl: "iconBox_xl",
|
|
47
|
-
inherit: "iconBox_inherit"
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// src/internal/iconBox.ts
|
|
51
|
-
function iconBoxClass(size, tier) {
|
|
52
|
-
return cx(iconBox_default.box, iconBox_default[size ?? tier ?? "m"], size === void 0 && iconBox_default.inherit);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// src/internal/textTone.module.css
|
|
56
|
-
var textTone_default = {
|
|
57
|
-
tone: "textTone_tone"
|
|
58
|
-
};
|
|
59
|
-
|
|
60
103
|
// src/internal/VisuallyHidden.module.css
|
|
61
104
|
var VisuallyHidden_default = {
|
|
62
105
|
root: "VisuallyHidden_root"
|
|
63
106
|
};
|
|
64
107
|
|
|
65
108
|
// src/internal/VisuallyHidden.tsx
|
|
66
|
-
import { jsx
|
|
109
|
+
import { jsx } from "react/jsx-runtime";
|
|
67
110
|
var visuallyHiddenClass = VisuallyHidden_default.root;
|
|
68
111
|
function VisuallyHidden({ className, ...rest }) {
|
|
69
|
-
return /* @__PURE__ */
|
|
112
|
+
return /* @__PURE__ */ jsx("span", { className: cx(VisuallyHidden_default.root, className), ...rest });
|
|
70
113
|
}
|
|
71
114
|
|
|
72
115
|
// src/components/spinner/Spinner.module.css
|
|
@@ -77,7 +120,7 @@ var Spinner_default = {
|
|
|
77
120
|
};
|
|
78
121
|
|
|
79
122
|
// src/components/spinner/Spinner.tsx
|
|
80
|
-
import { jsx as
|
|
123
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
81
124
|
var SPINNER_LABELS = {
|
|
82
125
|
loading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430"
|
|
83
126
|
};
|
|
@@ -89,7 +132,7 @@ function Spinner({
|
|
|
89
132
|
...rest
|
|
90
133
|
}) {
|
|
91
134
|
const controlSize = useOptionalControlSize();
|
|
92
|
-
const labels =
|
|
135
|
+
const labels = React.useMemo(() => ({ ...SPINNER_LABELS, ...labelsProp }), [labelsProp]);
|
|
93
136
|
const size = sizeProp ?? controlSize ?? "m";
|
|
94
137
|
return /* @__PURE__ */ jsxs(
|
|
95
138
|
"span",
|
|
@@ -99,13 +142,16 @@ function Spinner({
|
|
|
99
142
|
...toDataAttributes({ size, tone: tone === "default" ? void 0 : tone }),
|
|
100
143
|
...rest,
|
|
101
144
|
children: [
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ jsx2("span", { className: Spinner_default.ring, "aria-hidden": "true" }),
|
|
146
|
+
/* @__PURE__ */ jsx2(VisuallyHidden, { children: labels.loading })
|
|
104
147
|
]
|
|
105
148
|
}
|
|
106
149
|
);
|
|
107
150
|
}
|
|
108
151
|
|
|
152
|
+
// src/components/button/Button.tsx
|
|
153
|
+
import * as React7 from "react";
|
|
154
|
+
|
|
109
155
|
// src/internal/fieldSurface.module.css
|
|
110
156
|
var fieldSurface_default = {
|
|
111
157
|
surface: "fieldSurface_surface"
|
|
@@ -127,12 +173,12 @@ var fieldTierClass = fieldTier_default.tier;
|
|
|
127
173
|
var fieldTriggerClass = `${fieldTier_default.tier} ${fieldSurface_default.surface} ${fieldTrigger_default.trigger}`;
|
|
128
174
|
|
|
129
175
|
// src/internal/iconLayout.ts
|
|
130
|
-
import * as
|
|
176
|
+
import * as React2 from "react";
|
|
131
177
|
function iconLayout(children, iconType) {
|
|
132
|
-
const content =
|
|
178
|
+
const content = React2.Children.toArray(children).filter(
|
|
133
179
|
(child) => !(typeof child === "string" && child.trim() === "")
|
|
134
180
|
);
|
|
135
|
-
const isIcon = (child) =>
|
|
181
|
+
const isIcon = (child) => React2.isValidElement(child) && child.type === iconType;
|
|
136
182
|
const iconOnly = content.length > 0 && content.every(isIcon);
|
|
137
183
|
return {
|
|
138
184
|
iconOnly,
|
|
@@ -141,11 +187,152 @@ function iconLayout(children, iconType) {
|
|
|
141
187
|
};
|
|
142
188
|
}
|
|
143
189
|
|
|
190
|
+
// src/internal/MorphText.tsx
|
|
191
|
+
import * as React4 from "react";
|
|
192
|
+
|
|
193
|
+
// src/hooks/usePresence.ts
|
|
194
|
+
import * as React3 from "react";
|
|
195
|
+
var DURATION_FALLBACK_MS = {
|
|
196
|
+
fast: 230,
|
|
197
|
+
base: 380,
|
|
198
|
+
slow: 570
|
|
199
|
+
};
|
|
200
|
+
var TIMEOUT_SLACK_MS = 50;
|
|
201
|
+
function prefersReducedMotion() {
|
|
202
|
+
return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
203
|
+
}
|
|
204
|
+
function parseDurationMs(raw) {
|
|
205
|
+
const value = raw.trim();
|
|
206
|
+
if (value === "") return null;
|
|
207
|
+
const n = Number.parseFloat(value);
|
|
208
|
+
if (Number.isNaN(n)) return null;
|
|
209
|
+
if (value.endsWith("ms")) return n;
|
|
210
|
+
if (value.endsWith("s")) return n * 1e3;
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
function motionDurationMs(token) {
|
|
214
|
+
if (typeof document === "undefined") return DURATION_FALLBACK_MS[token];
|
|
215
|
+
const raw = getComputedStyle(document.documentElement).getPropertyValue(
|
|
216
|
+
`--prime-motion-duration-${token}`
|
|
217
|
+
);
|
|
218
|
+
return parseDurationMs(raw) ?? DURATION_FALLBACK_MS[token];
|
|
219
|
+
}
|
|
220
|
+
function exitTimeoutMs(token) {
|
|
221
|
+
return motionDurationMs(token) + TIMEOUT_SLACK_MS;
|
|
222
|
+
}
|
|
223
|
+
function usePresence(open, options = {}) {
|
|
224
|
+
const { exitDuration = "base" } = options;
|
|
225
|
+
const [mounted, setMounted] = React3.useState(open);
|
|
226
|
+
if (open && !mounted) setMounted(true);
|
|
227
|
+
if (!open && mounted && prefersReducedMotion()) setMounted(false);
|
|
228
|
+
const openRef = React3.useRef(open);
|
|
229
|
+
openRef.current = open;
|
|
230
|
+
React3.useEffect(() => {
|
|
231
|
+
if (open || !mounted) return;
|
|
232
|
+
const id = window.setTimeout(() => setMounted(false), exitTimeoutMs(exitDuration));
|
|
233
|
+
return () => window.clearTimeout(id);
|
|
234
|
+
}, [open, mounted, exitDuration]);
|
|
235
|
+
const onExitEnd = React3.useCallback((event) => {
|
|
236
|
+
if (event.target !== event.currentTarget) return;
|
|
237
|
+
if (!openRef.current) setMounted(false);
|
|
238
|
+
}, []);
|
|
239
|
+
return { mounted: open || mounted, state: open ? "open" : "closed", onExitEnd };
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// src/internal/MorphText.module.css
|
|
243
|
+
var MorphText_default = {
|
|
244
|
+
root: "MorphText_root",
|
|
245
|
+
morphing: "MorphText_morphing",
|
|
246
|
+
sizer: "MorphText_sizer",
|
|
247
|
+
layer: "MorphText_layer",
|
|
248
|
+
letter: "MorphText_letter",
|
|
249
|
+
letterOut: "MorphText_letterOut",
|
|
250
|
+
primeMorphOut: "MorphText_primeMorphOut",
|
|
251
|
+
letterIn: "MorphText_letterIn",
|
|
252
|
+
primeMorphIn: "MorphText_primeMorphIn"
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// src/internal/MorphText.tsx
|
|
256
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
257
|
+
function digitsOnly(a, b) {
|
|
258
|
+
return a.replace(/\d/g, "") === b.replace(/\d/g, "");
|
|
259
|
+
}
|
|
260
|
+
function letters(text, kind) {
|
|
261
|
+
return [...text].map((char, i) => /* @__PURE__ */ jsx3(
|
|
262
|
+
"span",
|
|
263
|
+
{
|
|
264
|
+
className: cx(MorphText_default.letter, kind === "in" ? MorphText_default.letterIn : MorphText_default.letterOut),
|
|
265
|
+
style: { "--morph-i": i },
|
|
266
|
+
children: char
|
|
267
|
+
},
|
|
268
|
+
i
|
|
269
|
+
));
|
|
270
|
+
}
|
|
271
|
+
function settleMs(text, root) {
|
|
272
|
+
const css = getComputedStyle(root);
|
|
273
|
+
const read = (name) => Number.parseFloat(css.getPropertyValue(name)) || 0;
|
|
274
|
+
const base = read("--prime-motion-duration-base");
|
|
275
|
+
const step = read("--prime-motion-stagger") / 6;
|
|
276
|
+
return base + step * text.length + 50;
|
|
277
|
+
}
|
|
278
|
+
function MorphText({ children: text, className }) {
|
|
279
|
+
const rootRef = React4.useRef(null);
|
|
280
|
+
const sizerRef = React4.useRef(null);
|
|
281
|
+
const prevText = React4.useRef(null);
|
|
282
|
+
const restWidth = React4.useRef(0);
|
|
283
|
+
const nextId = React4.useRef(0);
|
|
284
|
+
const [morph, setMorph] = React4.useState(null);
|
|
285
|
+
const morphRef = React4.useRef(morph);
|
|
286
|
+
morphRef.current = morph;
|
|
287
|
+
React4.useLayoutEffect(() => {
|
|
288
|
+
const root = rootRef.current;
|
|
289
|
+
const prev = prevText.current;
|
|
290
|
+
prevText.current = text;
|
|
291
|
+
if (!root || prev === null || prev === text) return;
|
|
292
|
+
if (prefersReducedMotion() || digitsOnly(prev, text)) {
|
|
293
|
+
setMorph(null);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const running = morphRef.current;
|
|
297
|
+
const width = running ? root.getBoundingClientRect().width : restWidth.current;
|
|
298
|
+
nextId.current += 1;
|
|
299
|
+
setMorph({ id: nextId.current, from: running ? running.to : prev, to: text, width });
|
|
300
|
+
}, [text]);
|
|
301
|
+
React4.useLayoutEffect(() => {
|
|
302
|
+
if (!morph) return;
|
|
303
|
+
const root = rootRef.current;
|
|
304
|
+
const sizer = sizerRef.current;
|
|
305
|
+
if (!root || !sizer) return;
|
|
306
|
+
const target = sizer.getBoundingClientRect().width;
|
|
307
|
+
if (target !== morph.width) {
|
|
308
|
+
root.style.width = `${morph.width}px`;
|
|
309
|
+
root.getBoundingClientRect();
|
|
310
|
+
root.style.width = `${target}px`;
|
|
311
|
+
}
|
|
312
|
+
const timer = window.setTimeout(() => setMorph(null), settleMs(morph.to, root));
|
|
313
|
+
return () => window.clearTimeout(timer);
|
|
314
|
+
}, [morph]);
|
|
315
|
+
React4.useLayoutEffect(() => {
|
|
316
|
+
if (morph || !rootRef.current) return;
|
|
317
|
+
rootRef.current.style.width = "";
|
|
318
|
+
restWidth.current = rootRef.current.getBoundingClientRect().width;
|
|
319
|
+
});
|
|
320
|
+
if (!morph) {
|
|
321
|
+
return /* @__PURE__ */ jsx3("span", { ref: rootRef, className: cx(MorphText_default.root, className), children: text });
|
|
322
|
+
}
|
|
323
|
+
return /* @__PURE__ */ jsxs2("span", { ref: rootRef, className: cx(MorphText_default.root, MorphText_default.morphing, className), children: [
|
|
324
|
+
/* @__PURE__ */ jsx3("span", { ref: sizerRef, className: MorphText_default.sizer, "aria-hidden": "true", children: morph.to }),
|
|
325
|
+
/* @__PURE__ */ jsx3("span", { className: MorphText_default.layer, "aria-hidden": "true", children: letters(morph.from, "out") }, `out-${morph.id}`),
|
|
326
|
+
/* @__PURE__ */ jsx3("span", { className: MorphText_default.layer, "aria-hidden": "true", children: letters(morph.to, "in") }, `in-${morph.id}`),
|
|
327
|
+
/* @__PURE__ */ jsx3(VisuallyHidden, { children: morph.to })
|
|
328
|
+
] });
|
|
329
|
+
}
|
|
330
|
+
|
|
144
331
|
// src/internal/slot.tsx
|
|
145
|
-
import * as
|
|
332
|
+
import * as React6 from "react";
|
|
146
333
|
|
|
147
334
|
// src/hooks/useMergedRefs.ts
|
|
148
|
-
import * as
|
|
335
|
+
import * as React5 from "react";
|
|
149
336
|
|
|
150
337
|
// src/internal/mergeRefs.ts
|
|
151
338
|
function mergeRefs(...refs) {
|
|
@@ -163,7 +350,7 @@ function mergeRefs(...refs) {
|
|
|
163
350
|
|
|
164
351
|
// src/hooks/useMergedRefs.ts
|
|
165
352
|
function useMergedRefs(...refs) {
|
|
166
|
-
return
|
|
353
|
+
return React5.useMemo(() => mergeRefs(...refs), refs);
|
|
167
354
|
}
|
|
168
355
|
|
|
169
356
|
// src/internal/slot.tsx
|
|
@@ -206,14 +393,14 @@ function blockDisabledClick(event) {
|
|
|
206
393
|
event.stopPropagation();
|
|
207
394
|
}
|
|
208
395
|
function Slot({ children, ref, ...slotProps }) {
|
|
209
|
-
const child =
|
|
396
|
+
const child = React6.isValidElement(children) ? children : null;
|
|
210
397
|
const childRef = child?.props.ref ?? void 0;
|
|
211
398
|
const composedRef = useMergedRefs(ref, childRef);
|
|
212
399
|
if (!child) return /* @__PURE__ */ jsx4(Fragment, { children });
|
|
213
400
|
const merged = mergeProps(slotProps, child.props);
|
|
214
401
|
const disabled = slotProps["aria-disabled"] === true || slotProps["aria-disabled"] === "true";
|
|
215
402
|
if (disabled) merged.onClickCapture = blockDisabledClick;
|
|
216
|
-
return
|
|
403
|
+
return React6.cloneElement(child, { ...merged, ref: composedRef });
|
|
217
404
|
}
|
|
218
405
|
Slot.displayName = "Slot";
|
|
219
406
|
|
|
@@ -231,11 +418,57 @@ var touchTargetBlockClass = touchTarget_default.targetBlock;
|
|
|
231
418
|
var Button_default = {
|
|
232
419
|
root: "Button_root",
|
|
233
420
|
icon: "Button_icon",
|
|
234
|
-
spinner: "Button_spinner"
|
|
421
|
+
spinner: "Button_spinner",
|
|
422
|
+
fillTrack: "Button_fillTrack",
|
|
423
|
+
fill: "Button_fill"
|
|
235
424
|
};
|
|
236
425
|
|
|
237
426
|
// src/components/button/Button.tsx
|
|
238
|
-
import { jsx as jsx5, jsxs as
|
|
427
|
+
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
428
|
+
var BUTTON_LABELS = { holdHint: "\u0423\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C" };
|
|
429
|
+
var HOLD_MS = 1200;
|
|
430
|
+
function useHoldToConfirm(enabled, onConfirm) {
|
|
431
|
+
const [phase, setPhase] = React7.useState("idle");
|
|
432
|
+
const timer = React7.useRef(void 0);
|
|
433
|
+
const confirm = React7.useRef(onConfirm);
|
|
434
|
+
confirm.current = onConfirm;
|
|
435
|
+
React7.useEffect(() => () => window.clearTimeout(timer.current), []);
|
|
436
|
+
const start = () => {
|
|
437
|
+
if (!enabled || phase === "holding" || phase === "done") return;
|
|
438
|
+
setPhase("holding");
|
|
439
|
+
timer.current = window.setTimeout(() => {
|
|
440
|
+
setPhase("done");
|
|
441
|
+
confirm.current?.();
|
|
442
|
+
}, HOLD_MS);
|
|
443
|
+
};
|
|
444
|
+
const stop = () => {
|
|
445
|
+
window.clearTimeout(timer.current);
|
|
446
|
+
setPhase(
|
|
447
|
+
(current) => current === "holding" ? "cancel" : current === "done" ? "idle" : current
|
|
448
|
+
);
|
|
449
|
+
};
|
|
450
|
+
return { phase, start, stop };
|
|
451
|
+
}
|
|
452
|
+
function morphLabels(children) {
|
|
453
|
+
const out = [];
|
|
454
|
+
let run = null;
|
|
455
|
+
const flush = () => {
|
|
456
|
+
if (run !== null && run !== "") {
|
|
457
|
+
out.push(/* @__PURE__ */ jsx5(MorphText, { children: run }, `label-${out.length}`));
|
|
458
|
+
}
|
|
459
|
+
run = null;
|
|
460
|
+
};
|
|
461
|
+
for (const child of React7.Children.toArray(children)) {
|
|
462
|
+
if (typeof child === "string" || typeof child === "number") {
|
|
463
|
+
run = (run ?? "") + String(child);
|
|
464
|
+
} else {
|
|
465
|
+
flush();
|
|
466
|
+
out.push(child);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
flush();
|
|
470
|
+
return out;
|
|
471
|
+
}
|
|
239
472
|
function ButtonRoot({
|
|
240
473
|
children,
|
|
241
474
|
className,
|
|
@@ -245,6 +478,10 @@ function ButtonRoot({
|
|
|
245
478
|
fullWidth,
|
|
246
479
|
type = "button",
|
|
247
480
|
loading = false,
|
|
481
|
+
progress,
|
|
482
|
+
holdToConfirm = false,
|
|
483
|
+
onConfirm,
|
|
484
|
+
labels,
|
|
248
485
|
disabled,
|
|
249
486
|
asChild = false,
|
|
250
487
|
onClick: onClick2,
|
|
@@ -254,6 +491,11 @@ function ButtonRoot({
|
|
|
254
491
|
const size = useControlSize(sizeProp);
|
|
255
492
|
const isDisabled = disabled || loading;
|
|
256
493
|
const layout = iconLayout(children, ButtonIcon);
|
|
494
|
+
const hold = useHoldToConfirm(holdToConfirm && !isDisabled, onConfirm);
|
|
495
|
+
const hintId = React7.useId();
|
|
496
|
+
const inProgress = progress !== void 0;
|
|
497
|
+
const [fillUsed, setFillUsed] = React7.useState(false);
|
|
498
|
+
if ((inProgress || holdToConfirm) && !fillUsed) setFillUsed(true);
|
|
257
499
|
const dataAttrs = toDataAttributes({
|
|
258
500
|
variant,
|
|
259
501
|
tone,
|
|
@@ -266,7 +508,9 @@ function ButtonRoot({
|
|
|
266
508
|
"leading-icon": layout.leadingIcon || void 0,
|
|
267
509
|
"trailing-icon": layout.trailingIcon || void 0,
|
|
268
510
|
// Without a leading icon the spinner is centered over the hidden label: width stays put.
|
|
269
|
-
"loading-overlay": loading && !asChild && !layout.leadingIcon && !layout.iconOnly || void 0
|
|
511
|
+
"loading-overlay": loading && !asChild && !layout.leadingIcon && !layout.iconOnly || void 0,
|
|
512
|
+
progress: inProgress || void 0,
|
|
513
|
+
hold: holdToConfirm ? hold.phase : void 0
|
|
270
514
|
});
|
|
271
515
|
const classes = cx(fieldTierClass, touchTargetClass, Button_default.root, className);
|
|
272
516
|
if (asChild) {
|
|
@@ -284,23 +528,85 @@ function ButtonRoot({
|
|
|
284
528
|
}
|
|
285
529
|
) });
|
|
286
530
|
}
|
|
287
|
-
|
|
531
|
+
const {
|
|
532
|
+
onPointerDown: onPointerDown2,
|
|
533
|
+
onPointerUp,
|
|
534
|
+
onPointerLeave,
|
|
535
|
+
onPointerCancel,
|
|
536
|
+
onKeyDown: onKeyDown2,
|
|
537
|
+
onKeyUp,
|
|
538
|
+
onBlur
|
|
539
|
+
} = rest;
|
|
540
|
+
const holdHandlers = holdToConfirm ? {
|
|
541
|
+
onPointerDown: (event) => {
|
|
542
|
+
onPointerDown2?.(event);
|
|
543
|
+
if (event.button === 0) hold.start();
|
|
544
|
+
},
|
|
545
|
+
onPointerUp: (event) => {
|
|
546
|
+
onPointerUp?.(event);
|
|
547
|
+
hold.stop();
|
|
548
|
+
},
|
|
549
|
+
onPointerLeave: (event) => {
|
|
550
|
+
onPointerLeave?.(event);
|
|
551
|
+
hold.stop();
|
|
552
|
+
},
|
|
553
|
+
onPointerCancel: (event) => {
|
|
554
|
+
onPointerCancel?.(event);
|
|
555
|
+
hold.stop();
|
|
556
|
+
},
|
|
557
|
+
onKeyDown: (event) => {
|
|
558
|
+
onKeyDown2?.(event);
|
|
559
|
+
if ((event.key === " " || event.key === "Enter") && !event.repeat) {
|
|
560
|
+
event.preventDefault();
|
|
561
|
+
hold.start();
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
onKeyUp: (event) => {
|
|
565
|
+
onKeyUp?.(event);
|
|
566
|
+
if (event.key === " " || event.key === "Enter") hold.stop();
|
|
567
|
+
},
|
|
568
|
+
onBlur: (event) => {
|
|
569
|
+
onBlur?.(event);
|
|
570
|
+
hold.stop();
|
|
571
|
+
},
|
|
572
|
+
onContextMenu: (event) => {
|
|
573
|
+
rest.onContextMenu?.(event);
|
|
574
|
+
if (hold.phase === "holding" || hold.phase === "done") event.preventDefault();
|
|
575
|
+
}
|
|
576
|
+
} : null;
|
|
577
|
+
const describedBy = holdToConfirm ? cx(rest["aria-describedby"], hintId) || void 0 : rest["aria-describedby"];
|
|
578
|
+
const button = /* @__PURE__ */ jsxs3(
|
|
288
579
|
"button",
|
|
289
580
|
{
|
|
290
581
|
...rest,
|
|
582
|
+
...holdHandlers,
|
|
291
583
|
ref,
|
|
292
584
|
type,
|
|
293
585
|
className: classes,
|
|
294
586
|
disabled: isDisabled,
|
|
295
|
-
"aria-busy": loading || void 0,
|
|
587
|
+
"aria-busy": loading || inProgress || void 0,
|
|
588
|
+
"aria-describedby": describedBy,
|
|
296
589
|
onClick: onClick2,
|
|
590
|
+
style: inProgress || holdToConfirm ? {
|
|
591
|
+
...rest.style,
|
|
592
|
+
"--btn-progress": inProgress ? Math.min(1, Math.max(0, progress)) : void 0,
|
|
593
|
+
"--btn-hold-duration": holdToConfirm ? `${HOLD_MS}ms` : void 0
|
|
594
|
+
} : rest.style,
|
|
297
595
|
...dataAttrs,
|
|
298
|
-
children:
|
|
299
|
-
|
|
300
|
-
children
|
|
301
|
-
|
|
596
|
+
children: [
|
|
597
|
+
fillUsed ? /* @__PURE__ */ jsx5("span", { className: Button_default.fillTrack, "aria-hidden": "true", children: /* @__PURE__ */ jsx5("span", { className: Button_default.fill }) }) : null,
|
|
598
|
+
/* @__PURE__ */ jsxs3(ControlSizeProvider, { value: size, children: [
|
|
599
|
+
loading ? /* @__PURE__ */ jsx5(Spinner, { className: Button_default.spinner, "aria-hidden": "true" }) : null,
|
|
600
|
+
morphLabels(children)
|
|
601
|
+
] })
|
|
602
|
+
]
|
|
302
603
|
}
|
|
303
604
|
);
|
|
605
|
+
if (!holdToConfirm) return button;
|
|
606
|
+
return /* @__PURE__ */ jsxs3(Fragment2, { children: [
|
|
607
|
+
button,
|
|
608
|
+
/* @__PURE__ */ jsx5(VisuallyHidden, { id: hintId, children: { ...BUTTON_LABELS, ...labels }.holdHint })
|
|
609
|
+
] });
|
|
304
610
|
}
|
|
305
611
|
ButtonRoot.displayName = "Button.Root";
|
|
306
612
|
function ButtonIcon({ children, className, ...rest }) {
|
|
@@ -339,90 +645,7 @@ function Divider({
|
|
|
339
645
|
);
|
|
340
646
|
}
|
|
341
647
|
|
|
342
|
-
// src/icons/Icon.module.css
|
|
343
|
-
var Icon_default = {
|
|
344
|
-
root: "Icon_root"
|
|
345
|
-
};
|
|
346
|
-
|
|
347
648
|
// src/icons/registry.ts
|
|
348
|
-
import {
|
|
349
|
-
Activity,
|
|
350
|
-
AlertTriangle,
|
|
351
|
-
ArrowDown,
|
|
352
|
-
ArrowUp,
|
|
353
|
-
ArrowUpDown,
|
|
354
|
-
Bell,
|
|
355
|
-
Bold,
|
|
356
|
-
BookOpen,
|
|
357
|
-
Calendar,
|
|
358
|
-
ChartColumn,
|
|
359
|
-
Check,
|
|
360
|
-
CheckCircle2,
|
|
361
|
-
ChevronDown,
|
|
362
|
-
ChevronLeft,
|
|
363
|
-
ChevronRight,
|
|
364
|
-
ChevronsLeft,
|
|
365
|
-
ChevronsUpDown,
|
|
366
|
-
ChevronUp,
|
|
367
|
-
Circle,
|
|
368
|
-
CloudOff,
|
|
369
|
-
CloudUpload,
|
|
370
|
-
Code2,
|
|
371
|
-
Copy,
|
|
372
|
-
Download,
|
|
373
|
-
ExternalLink,
|
|
374
|
-
Eye,
|
|
375
|
-
EyeOff,
|
|
376
|
-
FileText,
|
|
377
|
-
GripVertical,
|
|
378
|
-
HardDrive,
|
|
379
|
-
House,
|
|
380
|
-
Image,
|
|
381
|
-
Inbox,
|
|
382
|
-
Info,
|
|
383
|
-
Italic,
|
|
384
|
-
KeyRound,
|
|
385
|
-
LayoutDashboard,
|
|
386
|
-
LayoutGrid,
|
|
387
|
-
Link2,
|
|
388
|
-
List,
|
|
389
|
-
ListFilter,
|
|
390
|
-
ListTodo,
|
|
391
|
-
Lock,
|
|
392
|
-
LogIn,
|
|
393
|
-
LogOut,
|
|
394
|
-
Mail,
|
|
395
|
-
MailCheck,
|
|
396
|
-
Menu,
|
|
397
|
-
MessageSquare,
|
|
398
|
-
Minus,
|
|
399
|
-
Monitor,
|
|
400
|
-
Moon,
|
|
401
|
-
MoreHorizontal,
|
|
402
|
-
Package,
|
|
403
|
-
PanelLeftClose,
|
|
404
|
-
PanelLeftOpen,
|
|
405
|
-
Pipette,
|
|
406
|
-
Plus,
|
|
407
|
-
Receipt,
|
|
408
|
-
RefreshCw,
|
|
409
|
-
Rocket,
|
|
410
|
-
Search,
|
|
411
|
-
Send,
|
|
412
|
-
Settings,
|
|
413
|
-
ShoppingCart,
|
|
414
|
-
Smartphone,
|
|
415
|
-
Sun,
|
|
416
|
-
Tablet,
|
|
417
|
-
Trash2,
|
|
418
|
-
Truck,
|
|
419
|
-
Underline,
|
|
420
|
-
UserRound,
|
|
421
|
-
Users,
|
|
422
|
-
Wallet,
|
|
423
|
-
X,
|
|
424
|
-
XCircle
|
|
425
|
-
} from "lucide-react";
|
|
426
649
|
var iconRegistry = {
|
|
427
650
|
"nav.chevronDown": ChevronDown,
|
|
428
651
|
"nav.chevronLeft": ChevronLeft,
|
|
@@ -449,7 +672,7 @@ var iconRegistry = {
|
|
|
449
672
|
"action.filter": ListFilter,
|
|
450
673
|
"action.login": LogIn,
|
|
451
674
|
"action.logout": LogOut,
|
|
452
|
-
"action.more":
|
|
675
|
+
"action.more": Ellipsis,
|
|
453
676
|
"action.refresh": RefreshCw,
|
|
454
677
|
"action.remove": Minus,
|
|
455
678
|
"action.search": Search,
|
|
@@ -487,16 +710,18 @@ var iconRegistry = {
|
|
|
487
710
|
"sort.ascending": ArrowUp,
|
|
488
711
|
"sort.descending": ArrowDown,
|
|
489
712
|
"sort.none": ArrowUpDown,
|
|
490
|
-
"status.danger":
|
|
713
|
+
"status.danger": CircleX,
|
|
491
714
|
"status.emailSent": MailCheck,
|
|
492
715
|
"status.info": Info,
|
|
493
716
|
"status.locked": Lock,
|
|
494
717
|
"status.offline": CloudOff,
|
|
495
|
-
"status.success":
|
|
496
|
-
|
|
718
|
+
"status.success": CircleCheck,
|
|
719
|
+
/** A rising trend; a falling one is the same arrow turned half a turn (it rotates between them). */
|
|
720
|
+
"status.trendUp": ArrowUp,
|
|
721
|
+
"status.warning": TriangleAlert,
|
|
497
722
|
"theme.dark": Moon,
|
|
498
723
|
"theme.light": Sun,
|
|
499
|
-
"view.code":
|
|
724
|
+
"view.code": CodeXml,
|
|
500
725
|
"view.preview": Eye,
|
|
501
726
|
"viewport.desktop": Monitor,
|
|
502
727
|
"viewport.mobile": Smartphone,
|
|
@@ -505,46 +730,44 @@ var iconRegistry = {
|
|
|
505
730
|
|
|
506
731
|
// src/icons/Icon.tsx
|
|
507
732
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
508
|
-
function IconSvg({
|
|
509
|
-
glyph: GlyphSvg,
|
|
510
|
-
className,
|
|
511
|
-
size,
|
|
512
|
-
tone = "default",
|
|
513
|
-
strokeWidth = 1.75,
|
|
514
|
-
...rest
|
|
515
|
-
}) {
|
|
516
|
-
const tier = useOptionalControlSize();
|
|
517
|
-
return /* @__PURE__ */ jsx7(
|
|
518
|
-
GlyphSvg,
|
|
519
|
-
{
|
|
520
|
-
className: cx(Icon_default.root, iconBoxClass(size, tier), textTone_default.tone, className),
|
|
521
|
-
"data-tone": tone === "default" ? void 0 : tone,
|
|
522
|
-
strokeWidth,
|
|
523
|
-
"aria-hidden": "true",
|
|
524
|
-
...rest
|
|
525
|
-
}
|
|
526
|
-
);
|
|
527
|
-
}
|
|
528
733
|
function Icon({ name, ...rest }) {
|
|
529
|
-
|
|
734
|
+
const Glyph = iconRegistry[name];
|
|
735
|
+
return /* @__PURE__ */ jsx7(Glyph, { ...rest });
|
|
530
736
|
}
|
|
531
737
|
function createIcon(glyph) {
|
|
532
|
-
|
|
533
|
-
|
|
738
|
+
const LucideGlyph = glyph;
|
|
739
|
+
function DomainIcon({
|
|
740
|
+
className,
|
|
741
|
+
size,
|
|
742
|
+
tone,
|
|
743
|
+
animated,
|
|
744
|
+
strokeWidth = 1.75,
|
|
745
|
+
...rest
|
|
746
|
+
}) {
|
|
747
|
+
const root = useIconRoot({ className, size, tone, animated, motion: "generic" });
|
|
748
|
+
return /* @__PURE__ */ jsx7(
|
|
749
|
+
LucideGlyph,
|
|
750
|
+
{
|
|
751
|
+
strokeWidth,
|
|
752
|
+
"aria-hidden": "true",
|
|
753
|
+
...root,
|
|
754
|
+
...rest
|
|
755
|
+
}
|
|
756
|
+
);
|
|
534
757
|
}
|
|
535
758
|
DomainIcon.displayName = `Icon(${glyph.displayName ?? "Glyph"})`;
|
|
536
759
|
return DomainIcon;
|
|
537
760
|
}
|
|
538
761
|
|
|
539
762
|
// src/components/scroll-container/ScrollContainer.tsx
|
|
540
|
-
import * as
|
|
763
|
+
import * as React9 from "react";
|
|
541
764
|
|
|
542
765
|
// src/hooks/useEdgeOverflow.ts
|
|
543
|
-
import * as
|
|
766
|
+
import * as React8 from "react";
|
|
544
767
|
var NONE = { start: false, end: false };
|
|
545
768
|
function useEdgeOverflow(ref, enabled, horizontal) {
|
|
546
|
-
const [overflow, setOverflow] =
|
|
547
|
-
|
|
769
|
+
const [overflow, setOverflow] = React8.useState(NONE);
|
|
770
|
+
React8.useLayoutEffect(() => {
|
|
548
771
|
const node = ref.current;
|
|
549
772
|
if (!enabled || !node) return;
|
|
550
773
|
const update = () => {
|
|
@@ -552,6 +775,8 @@ function useEdgeOverflow(ref, enabled, horizontal) {
|
|
|
552
775
|
const max = horizontal ? node.scrollWidth - node.clientWidth : node.scrollHeight - node.clientHeight;
|
|
553
776
|
const start = position > 1;
|
|
554
777
|
const end = max - position > 1;
|
|
778
|
+
node.style.setProperty("--edge-start", `${Math.max(0, position)}px`);
|
|
779
|
+
node.style.setProperty("--edge-end", `${Math.max(0, max - position)}px`);
|
|
555
780
|
setOverflow((prev) => prev.start === start && prev.end === end ? prev : { start, end });
|
|
556
781
|
};
|
|
557
782
|
let frame = 0;
|
|
@@ -613,7 +838,7 @@ function ScrollContainer({
|
|
|
613
838
|
ref,
|
|
614
839
|
...rest
|
|
615
840
|
}) {
|
|
616
|
-
const innerRef =
|
|
841
|
+
const innerRef = React9.useRef(null);
|
|
617
842
|
const mergedRef = useMergedRefs(innerRef, ref);
|
|
618
843
|
const horizontal = axis === "horizontal";
|
|
619
844
|
const overflow = useEdgeOverflow(innerRef, fade, horizontal);
|
|
@@ -725,7 +950,7 @@ var Label_default = {
|
|
|
725
950
|
};
|
|
726
951
|
|
|
727
952
|
// src/components/label/Label.tsx
|
|
728
|
-
import { jsx as jsx10, jsxs as
|
|
953
|
+
import { jsx as jsx10, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
729
954
|
var LABEL_LABELS = { optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" };
|
|
730
955
|
function LabelRoot({
|
|
731
956
|
className,
|
|
@@ -749,7 +974,7 @@ function LabelRoot({
|
|
|
749
974
|
"aria-disabled": disabled || void 0,
|
|
750
975
|
...rest,
|
|
751
976
|
...toDataAttributes({ disabled: disabled || void 0, size }),
|
|
752
|
-
children: /* @__PURE__ */
|
|
977
|
+
children: /* @__PURE__ */ jsxs4(ControlSizeProvider, { value: size, children: [
|
|
753
978
|
children,
|
|
754
979
|
required ? /* @__PURE__ */ jsx10("span", { className: Label_default.asterisk, "aria-hidden": "true", children: "*" }) : null,
|
|
755
980
|
optional ? /* @__PURE__ */ jsx10("span", { className: Label_default.optional, children: labels?.optional ?? LABEL_LABELS.optional }) : null
|
|
@@ -774,21 +999,21 @@ var Label = {
|
|
|
774
999
|
};
|
|
775
1000
|
|
|
776
1001
|
// src/components/checkbox/Checkbox.tsx
|
|
777
|
-
import * as
|
|
1002
|
+
import * as React12 from "react";
|
|
778
1003
|
|
|
779
1004
|
// src/hooks/useControllableState.ts
|
|
780
|
-
import * as
|
|
1005
|
+
import * as React10 from "react";
|
|
781
1006
|
function useControllableState({
|
|
782
1007
|
value,
|
|
783
1008
|
defaultValue,
|
|
784
1009
|
onChange
|
|
785
1010
|
}) {
|
|
786
|
-
const [internalValue, setInternalValue] =
|
|
1011
|
+
const [internalValue, setInternalValue] = React10.useState(defaultValue);
|
|
787
1012
|
const isControlled = value !== void 0;
|
|
788
1013
|
const currentValue = isControlled ? value : internalValue;
|
|
789
|
-
const currentValueRef =
|
|
1014
|
+
const currentValueRef = React10.useRef(currentValue);
|
|
790
1015
|
currentValueRef.current = currentValue;
|
|
791
|
-
const setValue =
|
|
1016
|
+
const setValue = React10.useCallback(
|
|
792
1017
|
(nextValue) => {
|
|
793
1018
|
const previousValue = currentValueRef.current;
|
|
794
1019
|
const computedValue = typeof nextValue === "function" ? nextValue(previousValue) : nextValue;
|
|
@@ -806,62 +1031,34 @@ function useControllableState({
|
|
|
806
1031
|
return [currentValue, setValue];
|
|
807
1032
|
}
|
|
808
1033
|
|
|
809
|
-
// src/internal/
|
|
810
|
-
var
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
controlCell: "ChoiceField_controlCell",
|
|
815
|
-
input: "ChoiceField_input",
|
|
816
|
-
text: "ChoiceField_text",
|
|
817
|
-
support: "ChoiceField_support",
|
|
818
|
-
visual: "ChoiceField_visual"
|
|
1034
|
+
// src/internal/CheckMark.module.css
|
|
1035
|
+
var CheckMark_default = {
|
|
1036
|
+
svg: "CheckMark_svg",
|
|
1037
|
+
check: "CheckMark_check",
|
|
1038
|
+
bar: "CheckMark_bar"
|
|
819
1039
|
};
|
|
820
1040
|
|
|
821
|
-
// src/internal/
|
|
822
|
-
import { jsx as jsx11, jsxs as
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
function ChoiceField({
|
|
827
|
-
ids,
|
|
828
|
-
size,
|
|
829
|
-
state,
|
|
830
|
-
disabled,
|
|
831
|
-
readOnly = false,
|
|
832
|
-
hint,
|
|
833
|
-
error,
|
|
834
|
-
control,
|
|
835
|
-
className,
|
|
836
|
-
children
|
|
837
|
-
}) {
|
|
838
|
-
return /* @__PURE__ */ jsx11(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs4(
|
|
839
|
-
"div",
|
|
1041
|
+
// src/internal/CheckMark.tsx
|
|
1042
|
+
import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1043
|
+
function CheckMark({ state, className }) {
|
|
1044
|
+
return /* @__PURE__ */ jsxs5(
|
|
1045
|
+
"svg",
|
|
840
1046
|
{
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
disabled: disabled || void 0,
|
|
847
|
-
readonly: readOnly || void 0
|
|
848
|
-
}),
|
|
1047
|
+
viewBox: "0 0 24 24",
|
|
1048
|
+
className: cx(CheckMark_default.svg, className),
|
|
1049
|
+
"data-state": state,
|
|
1050
|
+
"aria-hidden": "true",
|
|
1051
|
+
focusable: "false",
|
|
849
1052
|
children: [
|
|
850
|
-
/* @__PURE__ */
|
|
851
|
-
|
|
852
|
-
children
|
|
853
|
-
] }),
|
|
854
|
-
ids.showError ? /* @__PURE__ */ jsx11(Hint.Root, { id: ids.errorId, size, invalid: true, className: ChoiceField_default.support, children: error }) : ids.showHint ? /* @__PURE__ */ jsx11(Hint.Root, { id: ids.hintId, size, disabled, className: ChoiceField_default.support, children: hint }) : null
|
|
1053
|
+
/* @__PURE__ */ jsx11("path", { d: "M5.5 12.5l4.25 4.25L18.5 8", pathLength: 1, className: CheckMark_default.check }),
|
|
1054
|
+
/* @__PURE__ */ jsx11("path", { d: "M7 12h10", pathLength: 1, className: CheckMark_default.bar })
|
|
855
1055
|
]
|
|
856
|
-
}
|
|
857
|
-
)
|
|
858
|
-
}
|
|
859
|
-
function ChoiceLabel({ className, ...rest }) {
|
|
860
|
-
return /* @__PURE__ */ jsx11("span", { className: cx(ChoiceField_default.text, className), ...rest });
|
|
1056
|
+
}
|
|
1057
|
+
);
|
|
861
1058
|
}
|
|
862
1059
|
|
|
863
1060
|
// src/internal/FieldFrame.tsx
|
|
864
|
-
import * as
|
|
1061
|
+
import * as React11 from "react";
|
|
865
1062
|
|
|
866
1063
|
// src/internal/formatLabel.ts
|
|
867
1064
|
function formatLabel(template, values) {
|
|
@@ -871,6 +1068,31 @@ function formatLabel(template, values) {
|
|
|
871
1068
|
).trim();
|
|
872
1069
|
}
|
|
873
1070
|
|
|
1071
|
+
// src/internal/RollingNumber.module.css
|
|
1072
|
+
var RollingNumber_default = {
|
|
1073
|
+
root: "RollingNumber_root",
|
|
1074
|
+
digit: "RollingNumber_digit",
|
|
1075
|
+
char: "RollingNumber_char"
|
|
1076
|
+
};
|
|
1077
|
+
|
|
1078
|
+
// src/internal/RollingNumber.tsx
|
|
1079
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
1080
|
+
function RollingNumber({ children, className }) {
|
|
1081
|
+
const chars = [...String(children)];
|
|
1082
|
+
return /* @__PURE__ */ jsx12("span", { className: cx(RollingNumber_default.root, className), children: chars.map((char, i) => {
|
|
1083
|
+
const key = chars.length - i;
|
|
1084
|
+
return /\d/.test(char) ? /* @__PURE__ */ jsx12(
|
|
1085
|
+
"span",
|
|
1086
|
+
{
|
|
1087
|
+
className: RollingNumber_default.digit,
|
|
1088
|
+
style: { "--rolling-n": char },
|
|
1089
|
+
children: char
|
|
1090
|
+
},
|
|
1091
|
+
`d${key}`
|
|
1092
|
+
) : /* @__PURE__ */ jsx12("span", { className: RollingNumber_default.char, children: char }, `c${key}`);
|
|
1093
|
+
}) });
|
|
1094
|
+
}
|
|
1095
|
+
|
|
874
1096
|
// src/internal/FieldFrame.module.css
|
|
875
1097
|
var FieldFrame_default = {
|
|
876
1098
|
root: "FieldFrame_root",
|
|
@@ -880,11 +1102,16 @@ var FieldFrame_default = {
|
|
|
880
1102
|
body: "FieldFrame_body",
|
|
881
1103
|
supportText: "FieldFrame_supportText",
|
|
882
1104
|
support: "FieldFrame_support",
|
|
883
|
-
|
|
1105
|
+
shakeSelf: "FieldFrame_shakeSelf",
|
|
1106
|
+
"field-shake-odd": "FieldFrame_field-shake-odd",
|
|
1107
|
+
"field-shake-even": "FieldFrame_field-shake-even",
|
|
1108
|
+
counter: "FieldFrame_counter",
|
|
1109
|
+
leaving: "FieldFrame_leaving",
|
|
1110
|
+
"field-error-leave": "FieldFrame_field-error-leave"
|
|
884
1111
|
};
|
|
885
1112
|
|
|
886
1113
|
// src/internal/FieldFrame.tsx
|
|
887
|
-
import { jsx as
|
|
1114
|
+
import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
888
1115
|
function hasContent(node) {
|
|
889
1116
|
return node != null && node !== false && node !== "";
|
|
890
1117
|
}
|
|
@@ -894,7 +1121,7 @@ function useFieldFrame(explicitId, {
|
|
|
894
1121
|
error,
|
|
895
1122
|
invalid
|
|
896
1123
|
}, ariaDescribedBy) {
|
|
897
|
-
const generated =
|
|
1124
|
+
const generated = React11.useId();
|
|
898
1125
|
const controlId = explicitId ?? generated;
|
|
899
1126
|
const labelId = `${controlId}-label`;
|
|
900
1127
|
const hintId = `${controlId}-hint`;
|
|
@@ -914,6 +1141,25 @@ function useFieldFrame(explicitId, {
|
|
|
914
1141
|
invalid: Boolean(invalid) || showError
|
|
915
1142
|
};
|
|
916
1143
|
}
|
|
1144
|
+
function useErrorShake(invalid, error) {
|
|
1145
|
+
const key = !invalid ? null : typeof error === "string" || typeof error === "number" ? String(error) : "invalid";
|
|
1146
|
+
const previous = React11.useRef(key);
|
|
1147
|
+
const [count, setCount] = React11.useState(0);
|
|
1148
|
+
React11.useEffect(() => {
|
|
1149
|
+
if (key !== null && key !== previous.current) setCount((n) => n + 1);
|
|
1150
|
+
previous.current = key;
|
|
1151
|
+
}, [key]);
|
|
1152
|
+
if (count === 0) return void 0;
|
|
1153
|
+
return count % 2 ? "odd" : "even";
|
|
1154
|
+
}
|
|
1155
|
+
function useLeavingError(showError, error) {
|
|
1156
|
+
const last = React11.useRef(error);
|
|
1157
|
+
if (showError) last.current = error;
|
|
1158
|
+
const presence = usePresence(showError, { exitDuration: "fast" });
|
|
1159
|
+
if (showError || !presence.mounted) return null;
|
|
1160
|
+
return { node: last.current, onExitEnd: presence.onExitEnd };
|
|
1161
|
+
}
|
|
1162
|
+
var leavingErrorClass = FieldFrame_default.leaving;
|
|
917
1163
|
function FieldFrame({
|
|
918
1164
|
size,
|
|
919
1165
|
ids,
|
|
@@ -933,8 +1179,10 @@ function FieldFrame({
|
|
|
933
1179
|
...rest
|
|
934
1180
|
}) {
|
|
935
1181
|
const { showError, showHint } = ids;
|
|
936
|
-
const
|
|
937
|
-
const
|
|
1182
|
+
const leaving = useLeavingError(showError, error);
|
|
1183
|
+
const showSupport = showError || showHint || leaving != null || counter != null || reserveSupportRow;
|
|
1184
|
+
const shake = useErrorShake(ids.invalid, error);
|
|
1185
|
+
const labelNode = hasContent(label) ? /* @__PURE__ */ jsx13(
|
|
938
1186
|
Label.Root,
|
|
939
1187
|
{
|
|
940
1188
|
id: ids.labelId,
|
|
@@ -948,7 +1196,7 @@ function FieldFrame({
|
|
|
948
1196
|
children: label
|
|
949
1197
|
}
|
|
950
1198
|
) : null;
|
|
951
|
-
return /* @__PURE__ */
|
|
1199
|
+
return /* @__PURE__ */ jsxs6(
|
|
952
1200
|
"div",
|
|
953
1201
|
{
|
|
954
1202
|
...rest,
|
|
@@ -956,22 +1204,34 @@ function FieldFrame({
|
|
|
956
1204
|
...toDataAttributes({
|
|
957
1205
|
size,
|
|
958
1206
|
invalid: ids.invalid || void 0,
|
|
959
|
-
disabled: disabled || void 0
|
|
1207
|
+
disabled: disabled || void 0,
|
|
1208
|
+
shake
|
|
960
1209
|
}),
|
|
961
1210
|
children: [
|
|
962
|
-
labelEnd != null ? /* @__PURE__ */
|
|
1211
|
+
labelEnd != null ? /* @__PURE__ */ jsxs6("div", { className: FieldFrame_default.labelRow, children: [
|
|
963
1212
|
labelNode,
|
|
964
|
-
/* @__PURE__ */
|
|
1213
|
+
/* @__PURE__ */ jsx13("span", { className: FieldFrame_default.labelEnd, children: labelEnd })
|
|
965
1214
|
] }) : labelNode,
|
|
966
|
-
/* @__PURE__ */
|
|
1215
|
+
/* @__PURE__ */ jsxs6("div", { className: FieldFrame_default.body, children: [
|
|
967
1216
|
children,
|
|
968
|
-
showSupport ? /* @__PURE__ */
|
|
1217
|
+
showSupport ? /* @__PURE__ */ jsxs6(
|
|
969
1218
|
"div",
|
|
970
1219
|
{
|
|
971
1220
|
className: FieldFrame_default.support,
|
|
972
1221
|
...toDataAttributes({ size, reserve: reserveSupportRow || void 0 }),
|
|
973
1222
|
children: [
|
|
974
|
-
showError ? /* @__PURE__ */
|
|
1223
|
+
showError ? /* @__PURE__ */ jsx13(Hint.Root, { id: ids.errorId, size, invalid: true, className: FieldFrame_default.supportText, children: error }) : leaving ? /* @__PURE__ */ jsx13(
|
|
1224
|
+
Hint.Root,
|
|
1225
|
+
{
|
|
1226
|
+
size,
|
|
1227
|
+
invalid: true,
|
|
1228
|
+
"aria-hidden": "true",
|
|
1229
|
+
"data-state": "closed",
|
|
1230
|
+
onAnimationEnd: leaving.onExitEnd,
|
|
1231
|
+
className: cx(FieldFrame_default.supportText, FieldFrame_default.leaving),
|
|
1232
|
+
children: leaving.node
|
|
1233
|
+
}
|
|
1234
|
+
) : showHint ? /* @__PURE__ */ jsx13(
|
|
975
1235
|
Hint.Root,
|
|
976
1236
|
{
|
|
977
1237
|
id: ids.hintId,
|
|
@@ -980,7 +1240,7 @@ function FieldFrame({
|
|
|
980
1240
|
className: FieldFrame_default.supportText,
|
|
981
1241
|
children: hint
|
|
982
1242
|
}
|
|
983
|
-
) : /* @__PURE__ */
|
|
1243
|
+
) : /* @__PURE__ */ jsx13("span", { className: FieldFrame_default.supportText }),
|
|
984
1244
|
counter
|
|
985
1245
|
]
|
|
986
1246
|
}
|
|
@@ -991,7 +1251,7 @@ function FieldFrame({
|
|
|
991
1251
|
);
|
|
992
1252
|
}
|
|
993
1253
|
function FieldCounter({ current, max, size, label, className, ...rest }) {
|
|
994
|
-
return /* @__PURE__ */
|
|
1254
|
+
return /* @__PURE__ */ jsxs6(
|
|
995
1255
|
"span",
|
|
996
1256
|
{
|
|
997
1257
|
...rest,
|
|
@@ -1000,35 +1260,101 @@ function FieldCounter({ current, max, size, label, className, ...rest }) {
|
|
|
1000
1260
|
"data-invalid": current > max || void 0,
|
|
1001
1261
|
"aria-live": "polite",
|
|
1002
1262
|
children: [
|
|
1003
|
-
/* @__PURE__ */
|
|
1004
|
-
current,
|
|
1263
|
+
/* @__PURE__ */ jsxs6("span", { "aria-hidden": "true", children: [
|
|
1264
|
+
/* @__PURE__ */ jsx13(RollingNumber, { children: current }),
|
|
1005
1265
|
"/",
|
|
1006
1266
|
max
|
|
1007
1267
|
] }),
|
|
1008
|
-
/* @__PURE__ */
|
|
1268
|
+
/* @__PURE__ */ jsx13(VisuallyHidden, { children: formatLabel(label, { current, max }) })
|
|
1009
1269
|
]
|
|
1010
1270
|
}
|
|
1011
1271
|
);
|
|
1012
1272
|
}
|
|
1013
1273
|
|
|
1274
|
+
// src/internal/ChoiceField.module.css
|
|
1275
|
+
var ChoiceField_default = {
|
|
1276
|
+
tier: "ChoiceField_tier",
|
|
1277
|
+
field: "ChoiceField_field",
|
|
1278
|
+
row: "ChoiceField_row",
|
|
1279
|
+
controlCell: "ChoiceField_controlCell",
|
|
1280
|
+
input: "ChoiceField_input",
|
|
1281
|
+
text: "ChoiceField_text",
|
|
1282
|
+
support: "ChoiceField_support",
|
|
1283
|
+
visual: "ChoiceField_visual"
|
|
1284
|
+
};
|
|
1285
|
+
|
|
1286
|
+
// src/internal/ChoiceField.tsx
|
|
1287
|
+
import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1288
|
+
var choiceInputClass = ChoiceField_default.input;
|
|
1289
|
+
var choiceVisualClass = ChoiceField_default.visual;
|
|
1290
|
+
var choiceTierClass = ChoiceField_default.tier;
|
|
1291
|
+
function ChoiceField({
|
|
1292
|
+
ids,
|
|
1293
|
+
size,
|
|
1294
|
+
state,
|
|
1295
|
+
disabled,
|
|
1296
|
+
readOnly = false,
|
|
1297
|
+
hint,
|
|
1298
|
+
error,
|
|
1299
|
+
control,
|
|
1300
|
+
className,
|
|
1301
|
+
children
|
|
1302
|
+
}) {
|
|
1303
|
+
const shake = useErrorShake(ids.invalid, error);
|
|
1304
|
+
const leaving = useLeavingError(ids.showError, error);
|
|
1305
|
+
return /* @__PURE__ */ jsx14(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs7(
|
|
1306
|
+
"div",
|
|
1307
|
+
{
|
|
1308
|
+
className: cx(ChoiceField_default.tier, ChoiceField_default.field, className),
|
|
1309
|
+
...toDataAttributes({
|
|
1310
|
+
size,
|
|
1311
|
+
state,
|
|
1312
|
+
invalid: ids.invalid || void 0,
|
|
1313
|
+
disabled: disabled || void 0,
|
|
1314
|
+
readonly: readOnly || void 0
|
|
1315
|
+
}),
|
|
1316
|
+
children: [
|
|
1317
|
+
/* @__PURE__ */ jsxs7(
|
|
1318
|
+
"label",
|
|
1319
|
+
{
|
|
1320
|
+
htmlFor: ids.controlId,
|
|
1321
|
+
className: cx(ChoiceField_default.row, FieldFrame_default.shakeSelf),
|
|
1322
|
+
"data-shake": shake,
|
|
1323
|
+
children: [
|
|
1324
|
+
/* @__PURE__ */ jsx14("span", { className: cx(ChoiceField_default.controlCell, touchTargetClass), children: control }),
|
|
1325
|
+
children
|
|
1326
|
+
]
|
|
1327
|
+
}
|
|
1328
|
+
),
|
|
1329
|
+
ids.showError ? /* @__PURE__ */ jsx14(Hint.Root, { id: ids.errorId, size, invalid: true, className: ChoiceField_default.support, children: error }) : leaving ? /* @__PURE__ */ jsx14(
|
|
1330
|
+
Hint.Root,
|
|
1331
|
+
{
|
|
1332
|
+
size,
|
|
1333
|
+
invalid: true,
|
|
1334
|
+
"aria-hidden": "true",
|
|
1335
|
+
"data-state": "closed",
|
|
1336
|
+
onAnimationEnd: leaving.onExitEnd,
|
|
1337
|
+
className: cx(ChoiceField_default.support, leavingErrorClass),
|
|
1338
|
+
children: leaving.node
|
|
1339
|
+
}
|
|
1340
|
+
) : ids.showHint ? /* @__PURE__ */ jsx14(Hint.Root, { id: ids.hintId, size, disabled, className: ChoiceField_default.support, children: hint }) : null
|
|
1341
|
+
]
|
|
1342
|
+
}
|
|
1343
|
+
) });
|
|
1344
|
+
}
|
|
1345
|
+
function ChoiceLabel({ className, ...rest }) {
|
|
1346
|
+
return /* @__PURE__ */ jsx14("span", { className: cx(ChoiceField_default.text, className), ...rest });
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1014
1349
|
// src/components/checkbox/Checkbox.module.css
|
|
1015
1350
|
var Checkbox_default = {
|
|
1016
1351
|
root: "Checkbox_root",
|
|
1017
1352
|
indicator: "Checkbox_indicator",
|
|
1018
|
-
control: "Checkbox_control"
|
|
1019
|
-
svg: "Checkbox_svg",
|
|
1020
|
-
checkPath: "Checkbox_checkPath",
|
|
1021
|
-
indeterminateLine: "Checkbox_indeterminateLine"
|
|
1353
|
+
control: "Checkbox_control"
|
|
1022
1354
|
};
|
|
1023
1355
|
|
|
1024
1356
|
// src/components/checkbox/Checkbox.tsx
|
|
1025
|
-
import { Fragment as
|
|
1026
|
-
function CheckboxMark() {
|
|
1027
|
-
return /* @__PURE__ */ jsxs6("svg", { viewBox: "0 0 24 24", className: Checkbox_default.svg, "aria-hidden": "true", focusable: "false", children: [
|
|
1028
|
-
/* @__PURE__ */ jsx13("path", { d: "M5.5 12.5l4.25 4.25L18.5 8", pathLength: 1, className: Checkbox_default.checkPath }),
|
|
1029
|
-
/* @__PURE__ */ jsx13("path", { d: "M7 12h10", pathLength: 1, className: Checkbox_default.indeterminateLine })
|
|
1030
|
-
] });
|
|
1031
|
-
}
|
|
1357
|
+
import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1032
1358
|
function CheckboxRoot({
|
|
1033
1359
|
id,
|
|
1034
1360
|
checked: checkedProp,
|
|
@@ -1054,12 +1380,12 @@ function CheckboxRoot({
|
|
|
1054
1380
|
defaultValue: defaultChecked,
|
|
1055
1381
|
onChange: onCheckedChange
|
|
1056
1382
|
});
|
|
1057
|
-
const internalRef =
|
|
1383
|
+
const internalRef = React12.useRef(null);
|
|
1058
1384
|
const mergedRef = useMergedRefs(internalRef, ref);
|
|
1059
|
-
|
|
1385
|
+
React12.useEffect(() => {
|
|
1060
1386
|
if (internalRef.current) internalRef.current.indeterminate = indeterminate;
|
|
1061
1387
|
}, [indeterminate]);
|
|
1062
|
-
return /* @__PURE__ */
|
|
1388
|
+
return /* @__PURE__ */ jsx15(
|
|
1063
1389
|
ChoiceField,
|
|
1064
1390
|
{
|
|
1065
1391
|
ids,
|
|
@@ -1070,8 +1396,8 @@ function CheckboxRoot({
|
|
|
1070
1396
|
hint,
|
|
1071
1397
|
error,
|
|
1072
1398
|
className: cx(Checkbox_default.root, className),
|
|
1073
|
-
control: /* @__PURE__ */
|
|
1074
|
-
/* @__PURE__ */
|
|
1399
|
+
control: /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
1400
|
+
/* @__PURE__ */ jsx15(
|
|
1075
1401
|
"input",
|
|
1076
1402
|
{
|
|
1077
1403
|
...inputRest,
|
|
@@ -1089,7 +1415,12 @@ function CheckboxRoot({
|
|
|
1089
1415
|
"aria-describedby": ids.describedBy
|
|
1090
1416
|
}
|
|
1091
1417
|
),
|
|
1092
|
-
/* @__PURE__ */
|
|
1418
|
+
/* @__PURE__ */ jsx15("span", { className: cx(choiceVisualClass, Checkbox_default.control), "aria-hidden": "true", children: /* @__PURE__ */ jsx15(
|
|
1419
|
+
CheckMark,
|
|
1420
|
+
{
|
|
1421
|
+
state: indeterminate ? "indeterminate" : checked ? "checked" : "unchecked"
|
|
1422
|
+
}
|
|
1423
|
+
) })
|
|
1093
1424
|
] }),
|
|
1094
1425
|
children
|
|
1095
1426
|
}
|
|
@@ -1097,7 +1428,7 @@ function CheckboxRoot({
|
|
|
1097
1428
|
}
|
|
1098
1429
|
CheckboxRoot.displayName = "Checkbox.Root";
|
|
1099
1430
|
function CheckboxLabel(props) {
|
|
1100
|
-
return /* @__PURE__ */
|
|
1431
|
+
return /* @__PURE__ */ jsx15(ChoiceLabel, { ...props });
|
|
1101
1432
|
}
|
|
1102
1433
|
CheckboxLabel.displayName = "Checkbox.Label";
|
|
1103
1434
|
function CheckboxIndicator({
|
|
@@ -1109,7 +1440,7 @@ function CheckboxIndicator({
|
|
|
1109
1440
|
...rest
|
|
1110
1441
|
}) {
|
|
1111
1442
|
const size = useControlSize(sizeProp);
|
|
1112
|
-
return /* @__PURE__ */
|
|
1443
|
+
return /* @__PURE__ */ jsx15(
|
|
1113
1444
|
"span",
|
|
1114
1445
|
{
|
|
1115
1446
|
"aria-hidden": "true",
|
|
@@ -1126,7 +1457,7 @@ function CheckboxIndicator({
|
|
|
1126
1457
|
disabled: disabled || void 0
|
|
1127
1458
|
}),
|
|
1128
1459
|
...rest,
|
|
1129
|
-
children: /* @__PURE__ */
|
|
1460
|
+
children: /* @__PURE__ */ jsx15(CheckMark, { state: indeterminate ? "indeterminate" : checked ? "checked" : "unchecked" })
|
|
1130
1461
|
}
|
|
1131
1462
|
);
|
|
1132
1463
|
}
|
|
@@ -1138,7 +1469,7 @@ var Checkbox = {
|
|
|
1138
1469
|
};
|
|
1139
1470
|
|
|
1140
1471
|
// src/internal/swatch.tsx
|
|
1141
|
-
import * as
|
|
1472
|
+
import * as React13 from "react";
|
|
1142
1473
|
|
|
1143
1474
|
// src/internal/swatch.module.css
|
|
1144
1475
|
var swatch_default = {
|
|
@@ -1151,7 +1482,7 @@ var swatch_default = {
|
|
|
1151
1482
|
};
|
|
1152
1483
|
|
|
1153
1484
|
// src/internal/swatch.tsx
|
|
1154
|
-
import { Fragment as
|
|
1485
|
+
import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1155
1486
|
var COLOR_PRESETS = [
|
|
1156
1487
|
{ value: "#ef4444", label: "\u041A\u0440\u0430\u0441\u043D\u044B\u0439" },
|
|
1157
1488
|
{ value: "#f97316", label: "\u041E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439" },
|
|
@@ -1171,7 +1502,7 @@ var COLOR_PRESETS = [
|
|
|
1171
1502
|
{ value: "#be185d", label: "\u0422\u0451\u043C\u043D\u043E-\u0440\u043E\u0437\u043E\u0432\u044B\u0439" }
|
|
1172
1503
|
];
|
|
1173
1504
|
function useSwatchOptions(presets, allowEmpty, emptyLabel) {
|
|
1174
|
-
return
|
|
1505
|
+
return React13.useMemo(
|
|
1175
1506
|
() => [
|
|
1176
1507
|
...presets.map((preset) => ({ ...preset, contrast: markContrast(preset.value) })),
|
|
1177
1508
|
...allowEmpty ? [{ value: null, label: emptyLabel, contrast: "dark" }] : []
|
|
@@ -1182,17 +1513,17 @@ function useSwatchOptions(presets, allowEmpty, emptyLabel) {
|
|
|
1182
1513
|
var swatchClass = swatch_default.swatch;
|
|
1183
1514
|
var swatchTierClass = swatch_default.tier;
|
|
1184
1515
|
function SwatchFill({ value }) {
|
|
1185
|
-
if (value == null) return /* @__PURE__ */
|
|
1186
|
-
return /* @__PURE__ */
|
|
1516
|
+
if (value == null) return /* @__PURE__ */ jsx16("span", { "aria-hidden": true, className: swatch_default.checker });
|
|
1517
|
+
return /* @__PURE__ */ jsx16("svg", { className: swatch_default.fill, "aria-hidden": "true", viewBox: "0 0 1 1", preserveAspectRatio: "none", children: /* @__PURE__ */ jsx16("rect", { width: "1", height: "1", fill: value }) });
|
|
1187
1518
|
}
|
|
1188
1519
|
function SwatchContent({ value, selected }) {
|
|
1189
|
-
return /* @__PURE__ */
|
|
1190
|
-
/* @__PURE__ */
|
|
1191
|
-
|
|
1520
|
+
return /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
1521
|
+
/* @__PURE__ */ jsx16(SwatchFill, { value }),
|
|
1522
|
+
/* @__PURE__ */ jsx16(CheckMark, { state: selected ? "checked" : "unchecked", className: swatch_default.check })
|
|
1192
1523
|
] });
|
|
1193
1524
|
}
|
|
1194
1525
|
function SwatchChip({ value, className, ...rest }) {
|
|
1195
|
-
return /* @__PURE__ */
|
|
1526
|
+
return /* @__PURE__ */ jsx16("span", { ...rest, "aria-hidden": true, className: cx(swatch_default.chip, className), children: /* @__PURE__ */ jsx16(SwatchFill, { value }) });
|
|
1196
1527
|
}
|
|
1197
1528
|
function sameColor(a, b) {
|
|
1198
1529
|
return (a ?? "").trim().toLowerCase() === (b ?? "").trim().toLowerCase();
|
|
@@ -1236,7 +1567,7 @@ function markContrast(value) {
|
|
|
1236
1567
|
}
|
|
1237
1568
|
|
|
1238
1569
|
// src/components/color-swatches/ColorSwatches.tsx
|
|
1239
|
-
import * as
|
|
1570
|
+
import * as React14 from "react";
|
|
1240
1571
|
|
|
1241
1572
|
// src/internal/rovingFocus.ts
|
|
1242
1573
|
var PREV = {
|
|
@@ -1285,7 +1616,7 @@ var ColorSwatches_default = {
|
|
|
1285
1616
|
};
|
|
1286
1617
|
|
|
1287
1618
|
// src/components/color-swatches/ColorSwatches.tsx
|
|
1288
|
-
import { jsx as
|
|
1619
|
+
import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1289
1620
|
var COLOR_SWATCHES_LABELS = {
|
|
1290
1621
|
group: "\u0426\u0432\u0435\u0442",
|
|
1291
1622
|
empty: "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430",
|
|
@@ -1330,7 +1661,7 @@ function ColorSwatches({
|
|
|
1330
1661
|
const options = useSwatchOptions(presets, allowEmpty, labels.empty);
|
|
1331
1662
|
const selectedIndex = options.findIndex((option) => sameColor(option.value, value));
|
|
1332
1663
|
const focusIndex = Math.max(0, selectedIndex);
|
|
1333
|
-
const itemRefs =
|
|
1664
|
+
const itemRefs = React14.useRef([]);
|
|
1334
1665
|
const labelledBy = ariaLabelledBy ?? ids.labelledBy;
|
|
1335
1666
|
const onKeyDown2 = (event) => {
|
|
1336
1667
|
const current = itemRefs.current.indexOf(document.activeElement);
|
|
@@ -1345,7 +1676,7 @@ function ColorSwatches({
|
|
|
1345
1676
|
setValue(options[next].value);
|
|
1346
1677
|
itemRefs.current[next]?.focus();
|
|
1347
1678
|
};
|
|
1348
|
-
return /* @__PURE__ */
|
|
1679
|
+
return /* @__PURE__ */ jsx17(
|
|
1349
1680
|
FieldFrame,
|
|
1350
1681
|
{
|
|
1351
1682
|
...rest,
|
|
@@ -1360,7 +1691,7 @@ function ColorSwatches({
|
|
|
1360
1691
|
optionalLabel: labels.optional,
|
|
1361
1692
|
group: true,
|
|
1362
1693
|
className,
|
|
1363
|
-
children: /* @__PURE__ */
|
|
1694
|
+
children: /* @__PURE__ */ jsxs10(
|
|
1364
1695
|
"div",
|
|
1365
1696
|
{
|
|
1366
1697
|
id: ids.controlId,
|
|
@@ -1382,7 +1713,7 @@ function ColorSwatches({
|
|
|
1382
1713
|
const selected = index === selectedIndex;
|
|
1383
1714
|
return (
|
|
1384
1715
|
// biome-ignore lint/a11y/useSemanticElements: a swatch is a styled button in a roving radiogroup; a native radio cannot carry the color fill and check mark
|
|
1385
|
-
/* @__PURE__ */
|
|
1716
|
+
/* @__PURE__ */ jsx17(
|
|
1386
1717
|
"button",
|
|
1387
1718
|
{
|
|
1388
1719
|
ref: (el) => {
|
|
@@ -1401,13 +1732,13 @@ function ColorSwatches({
|
|
|
1401
1732
|
contrast: option.contrast
|
|
1402
1733
|
}),
|
|
1403
1734
|
onClick: () => setValue(option.value),
|
|
1404
|
-
children: /* @__PURE__ */
|
|
1735
|
+
children: /* @__PURE__ */ jsx17(SwatchContent, { value: option.value, selected })
|
|
1405
1736
|
},
|
|
1406
1737
|
option.value ?? "empty"
|
|
1407
1738
|
)
|
|
1408
1739
|
);
|
|
1409
1740
|
}),
|
|
1410
|
-
name ? /* @__PURE__ */
|
|
1741
|
+
name ? /* @__PURE__ */ jsx17("input", { type: "hidden", name, value: value ?? "" }) : null
|
|
1411
1742
|
]
|
|
1412
1743
|
}
|
|
1413
1744
|
)
|
|
@@ -1425,7 +1756,7 @@ var EmptyPage_default = {
|
|
|
1425
1756
|
};
|
|
1426
1757
|
|
|
1427
1758
|
// src/components/empty-page/EmptyPage.tsx
|
|
1428
|
-
import { jsx as
|
|
1759
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1429
1760
|
function EmptyPageRoot({
|
|
1430
1761
|
size = "m",
|
|
1431
1762
|
layout = "default",
|
|
@@ -1433,31 +1764,31 @@ function EmptyPageRoot({
|
|
|
1433
1764
|
children,
|
|
1434
1765
|
...rest
|
|
1435
1766
|
}) {
|
|
1436
|
-
return /* @__PURE__ */
|
|
1767
|
+
return /* @__PURE__ */ jsx18(
|
|
1437
1768
|
"div",
|
|
1438
1769
|
{
|
|
1439
1770
|
className: cx(EmptyPage_default.root, layout !== "compact" && enterMotion_default.enterBaseChildren, className),
|
|
1440
1771
|
...rest,
|
|
1441
1772
|
...toDataAttributes({ size, layout: layout === "default" ? void 0 : layout }),
|
|
1442
|
-
children: /* @__PURE__ */
|
|
1773
|
+
children: /* @__PURE__ */ jsx18(ControlSizeProvider, { value: size, children })
|
|
1443
1774
|
}
|
|
1444
1775
|
);
|
|
1445
1776
|
}
|
|
1446
1777
|
EmptyPageRoot.displayName = "EmptyPage.Root";
|
|
1447
1778
|
function EmptyPageIcon({ tone = "neutral", className, ...rest }) {
|
|
1448
|
-
return /* @__PURE__ */
|
|
1779
|
+
return /* @__PURE__ */ jsx18("div", { className: cx(EmptyPage_default.iconWrap, className), "data-tone": tone, ...rest });
|
|
1449
1780
|
}
|
|
1450
1781
|
EmptyPageIcon.displayName = "EmptyPage.Icon";
|
|
1451
1782
|
function EmptyPageTitle({ as: Tag = "h2", className, ref, ...rest }) {
|
|
1452
|
-
return /* @__PURE__ */
|
|
1783
|
+
return /* @__PURE__ */ jsx18(Tag, { ref, className: cx(EmptyPage_default.title, className), ...rest });
|
|
1453
1784
|
}
|
|
1454
1785
|
EmptyPageTitle.displayName = "EmptyPage.Title";
|
|
1455
1786
|
function EmptyPageDescription({ className, ...rest }) {
|
|
1456
|
-
return /* @__PURE__ */
|
|
1787
|
+
return /* @__PURE__ */ jsx18("p", { className: cx(EmptyPage_default.description, className), ...rest });
|
|
1457
1788
|
}
|
|
1458
1789
|
EmptyPageDescription.displayName = "EmptyPage.Description";
|
|
1459
1790
|
function EmptyPageActions({ className, ...rest }) {
|
|
1460
|
-
return /* @__PURE__ */
|
|
1791
|
+
return /* @__PURE__ */ jsx18("div", { className: cx(EmptyPage_default.actions, className), ...rest });
|
|
1461
1792
|
}
|
|
1462
1793
|
EmptyPageActions.displayName = "EmptyPage.Actions";
|
|
1463
1794
|
var EmptyPage = {
|
|
@@ -1468,16 +1799,208 @@ var EmptyPage = {
|
|
|
1468
1799
|
Actions: EmptyPageActions
|
|
1469
1800
|
};
|
|
1470
1801
|
|
|
1802
|
+
// src/components/progress-bar/ProgressBar.tsx
|
|
1803
|
+
import * as React15 from "react";
|
|
1804
|
+
|
|
1805
|
+
// src/internal/progressSegments.ts
|
|
1806
|
+
function resolveValue(value, max) {
|
|
1807
|
+
const top = max !== void 0 && max > 0 ? max : 100;
|
|
1808
|
+
const clamped = Math.min(top, Math.max(Number.isFinite(value) ? value : 0, 0));
|
|
1809
|
+
return {
|
|
1810
|
+
value: clamped,
|
|
1811
|
+
max: top,
|
|
1812
|
+
ratio: clamped / top,
|
|
1813
|
+
percent: Math.round(clamped / top * 100)
|
|
1814
|
+
};
|
|
1815
|
+
}
|
|
1816
|
+
var DEFAULT_PROGRESS_SEGMENTS_LABELS = {
|
|
1817
|
+
empty: "\u041D\u0435\u0442 \u0441\u0435\u0433\u043C\u0435\u043D\u0442\u043E\u0432",
|
|
1818
|
+
allEmpty: "\u0412\u0441\u0435 \u0441\u0435\u0433\u043C\u0435\u043D\u0442\u044B \u043F\u0443\u0441\u0442\u044B"
|
|
1819
|
+
};
|
|
1820
|
+
function nonNegative(n) {
|
|
1821
|
+
return Number.isFinite(n) && n > 0 ? n : 0;
|
|
1822
|
+
}
|
|
1823
|
+
function resolveSegments(input, max, labels) {
|
|
1824
|
+
const segments = input.map((s) => ({ ...s, value: nonNegative(s.value) }));
|
|
1825
|
+
const total = segments.reduce((acc, s) => acc + s.value, 0);
|
|
1826
|
+
const scale = max !== void 0 && max > 0 ? Math.max(max, total) : total;
|
|
1827
|
+
let text;
|
|
1828
|
+
if (segments.length === 0) text = labels.empty;
|
|
1829
|
+
else if (scale <= 0) text = labels.allEmpty;
|
|
1830
|
+
else
|
|
1831
|
+
text = segments.map((s) => {
|
|
1832
|
+
const pct = Math.round(s.value / scale * 100);
|
|
1833
|
+
return s.label ? `${s.label}: ${pct}%` : `${pct}%`;
|
|
1834
|
+
}).join(", ");
|
|
1835
|
+
return {
|
|
1836
|
+
segments,
|
|
1837
|
+
total,
|
|
1838
|
+
scale,
|
|
1839
|
+
rest: scale - total,
|
|
1840
|
+
percent: scale > 0 ? Math.round(total / scale * 100) : 0,
|
|
1841
|
+
text
|
|
1842
|
+
};
|
|
1843
|
+
}
|
|
1844
|
+
|
|
1845
|
+
// src/components/progress-bar/ProgressBar.module.css
|
|
1846
|
+
var ProgressBar_default = {
|
|
1847
|
+
root: "ProgressBar_root",
|
|
1848
|
+
segment: "ProgressBar_segment",
|
|
1849
|
+
header: "ProgressBar_header",
|
|
1850
|
+
label: "ProgressBar_label",
|
|
1851
|
+
value: "ProgressBar_value",
|
|
1852
|
+
native: "ProgressBar_native",
|
|
1853
|
+
bar: "ProgressBar_bar",
|
|
1854
|
+
fill: "ProgressBar_fill",
|
|
1855
|
+
segments: "ProgressBar_segments",
|
|
1856
|
+
rest: "ProgressBar_rest",
|
|
1857
|
+
step: "ProgressBar_step"
|
|
1858
|
+
};
|
|
1859
|
+
|
|
1860
|
+
// src/components/progress-bar/ProgressBar.tsx
|
|
1861
|
+
import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1862
|
+
var MIN_STEPS = 2;
|
|
1863
|
+
var MAX_STEPS = 12;
|
|
1864
|
+
function useStepOrder(filled, count) {
|
|
1865
|
+
const prev = React15.useRef(filled);
|
|
1866
|
+
const from = prev.current;
|
|
1867
|
+
React15.useEffect(() => {
|
|
1868
|
+
prev.current = filled;
|
|
1869
|
+
}, [filled]);
|
|
1870
|
+
return Array.from(
|
|
1871
|
+
{ length: count },
|
|
1872
|
+
(_, i) => filled >= from ? Math.max(0, i - from) : Math.max(0, from - 1 - i)
|
|
1873
|
+
);
|
|
1874
|
+
}
|
|
1875
|
+
function ProgressBar(props) {
|
|
1876
|
+
const {
|
|
1877
|
+
label,
|
|
1878
|
+
size = "m",
|
|
1879
|
+
showValue = false,
|
|
1880
|
+
className,
|
|
1881
|
+
value: valueProp,
|
|
1882
|
+
max: maxProp,
|
|
1883
|
+
tone: toneProp,
|
|
1884
|
+
segments: segmentsProp,
|
|
1885
|
+
segmentGap = "none",
|
|
1886
|
+
steps = false,
|
|
1887
|
+
labels,
|
|
1888
|
+
"aria-label": ariaLabel,
|
|
1889
|
+
...rest
|
|
1890
|
+
} = props;
|
|
1891
|
+
const labelId = React15.useId();
|
|
1892
|
+
const descriptionId = React15.useId();
|
|
1893
|
+
const stepResolved = !segmentsProp && steps ? resolveValue(valueProp ?? 0, maxProp) : null;
|
|
1894
|
+
const stepCount = stepResolved ? Math.min(MAX_STEPS, Math.max(MIN_STEPS, Math.round(stepResolved.max))) : 0;
|
|
1895
|
+
const stepFilled = stepResolved ? Math.round(stepResolved.value / stepResolved.max * stepCount) : 0;
|
|
1896
|
+
const stepOrder = useStepOrder(stepFilled, stepCount);
|
|
1897
|
+
let percent;
|
|
1898
|
+
let tone;
|
|
1899
|
+
let bar;
|
|
1900
|
+
if (segmentsProp) {
|
|
1901
|
+
const resolved = resolveSegments(segmentsProp, maxProp, {
|
|
1902
|
+
...DEFAULT_PROGRESS_SEGMENTS_LABELS,
|
|
1903
|
+
...labels
|
|
1904
|
+
});
|
|
1905
|
+
const { segments, total, rest: free, text } = resolved;
|
|
1906
|
+
percent = resolved.percent;
|
|
1907
|
+
const named = Boolean(label || ariaLabel);
|
|
1908
|
+
const a11y = named ? {
|
|
1909
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
1910
|
+
"aria-label": label ? void 0 : ariaLabel,
|
|
1911
|
+
"aria-describedby": descriptionId
|
|
1912
|
+
} : { "aria-label": text };
|
|
1913
|
+
bar = /* @__PURE__ */ jsxs11(Fragment5, { children: [
|
|
1914
|
+
named ? /* @__PURE__ */ jsx19(VisuallyHidden, { id: descriptionId, children: text }) : null,
|
|
1915
|
+
/* @__PURE__ */ jsxs11(
|
|
1916
|
+
"div",
|
|
1917
|
+
{
|
|
1918
|
+
className: ProgressBar_default.bar,
|
|
1919
|
+
role: "group",
|
|
1920
|
+
...a11y,
|
|
1921
|
+
...toDataAttributes({ "segment-gap": segmentGap }),
|
|
1922
|
+
children: [
|
|
1923
|
+
total > 0 ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.segments, style: { flexGrow: total }, children: segments.map((seg, i) => /* @__PURE__ */ jsx19(
|
|
1924
|
+
"span",
|
|
1925
|
+
{
|
|
1926
|
+
className: ProgressBar_default.segment,
|
|
1927
|
+
style: { flexGrow: seg.value },
|
|
1928
|
+
title: seg.label,
|
|
1929
|
+
...toDataAttributes({ tone: seg.tone ?? "accent" })
|
|
1930
|
+
},
|
|
1931
|
+
i
|
|
1932
|
+
)) }) : null,
|
|
1933
|
+
free > 0 || total === 0 ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.rest, style: { flexGrow: free > 0 ? free : 1 } }) : null
|
|
1934
|
+
]
|
|
1935
|
+
}
|
|
1936
|
+
)
|
|
1937
|
+
] });
|
|
1938
|
+
} else {
|
|
1939
|
+
const resolved = resolveValue(valueProp ?? 0, maxProp);
|
|
1940
|
+
const { value, max } = resolved;
|
|
1941
|
+
percent = resolved.percent;
|
|
1942
|
+
tone = toneProp ?? "accent";
|
|
1943
|
+
bar = /* @__PURE__ */ jsxs11(Fragment5, { children: [
|
|
1944
|
+
/* @__PURE__ */ jsx19(
|
|
1945
|
+
"progress",
|
|
1946
|
+
{
|
|
1947
|
+
value,
|
|
1948
|
+
max,
|
|
1949
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
1950
|
+
"aria-label": label ? void 0 : ariaLabel,
|
|
1951
|
+
className: ProgressBar_default.native
|
|
1952
|
+
}
|
|
1953
|
+
),
|
|
1954
|
+
steps ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.bar, "aria-hidden": "true", "data-steps": "true", children: stepOrder.map((order, i) => /* @__PURE__ */ jsx19(
|
|
1955
|
+
"span",
|
|
1956
|
+
{
|
|
1957
|
+
className: ProgressBar_default.step,
|
|
1958
|
+
"data-filled": i < stepFilled || void 0,
|
|
1959
|
+
style: { "--pb-step-order": order }
|
|
1960
|
+
},
|
|
1961
|
+
i
|
|
1962
|
+
)) }) : /* @__PURE__ */ jsx19(
|
|
1963
|
+
"span",
|
|
1964
|
+
{
|
|
1965
|
+
className: ProgressBar_default.bar,
|
|
1966
|
+
"aria-hidden": "true",
|
|
1967
|
+
style: { "--pb-ratio": resolved.ratio },
|
|
1968
|
+
children: /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.fill })
|
|
1969
|
+
}
|
|
1970
|
+
)
|
|
1971
|
+
] });
|
|
1972
|
+
}
|
|
1973
|
+
return /* @__PURE__ */ jsxs11("div", { className: cx(ProgressBar_default.root, className), ...rest, ...toDataAttributes({ size, tone }), children: [
|
|
1974
|
+
label || showValue ? /* @__PURE__ */ jsxs11("div", { className: ProgressBar_default.header, children: [
|
|
1975
|
+
label ? /* @__PURE__ */ jsx19("span", { className: ProgressBar_default.label, id: labelId, children: label }) : null,
|
|
1976
|
+
showValue ? /* @__PURE__ */ jsxs11("span", { className: ProgressBar_default.value, "aria-hidden": "true", children: [
|
|
1977
|
+
percent,
|
|
1978
|
+
"%"
|
|
1979
|
+
] }) : null
|
|
1980
|
+
] }) : null,
|
|
1981
|
+
bar
|
|
1982
|
+
] });
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
// src/components/input/passwordStrength.ts
|
|
1986
|
+
var SHORT = 8;
|
|
1987
|
+
function getPasswordStrength(value) {
|
|
1988
|
+
if (value.length === 0) return 0;
|
|
1989
|
+
const points = Number(/\p{Ll}/u.test(value)) + Number(/\p{Lu}/u.test(value)) + Number(/\p{N}/u.test(value)) + Number(/[^\p{L}\p{N}\s]/u.test(value)) + Number(value.length >= 10) + Number(value.length >= 14);
|
|
1990
|
+
const level = points >= 5 ? 4 : points === 4 ? 3 : points === 3 ? 2 : 1;
|
|
1991
|
+
return value.length < SHORT ? Math.min(level, 2) : level;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1471
1994
|
// src/components/input/Input.tsx
|
|
1472
|
-
import * as
|
|
1995
|
+
import * as React17 from "react";
|
|
1473
1996
|
|
|
1474
1997
|
// src/internal/context.ts
|
|
1475
|
-
import * as
|
|
1998
|
+
import * as React16 from "react";
|
|
1476
1999
|
function createComponentContext(displayName) {
|
|
1477
|
-
const Ctx =
|
|
2000
|
+
const Ctx = React16.createContext(null);
|
|
1478
2001
|
Ctx.displayName = `${displayName}Context`;
|
|
1479
2002
|
function useComponentContext() {
|
|
1480
|
-
const value =
|
|
2003
|
+
const value = React16.useContext(Ctx);
|
|
1481
2004
|
if (value === null) {
|
|
1482
2005
|
throw new Error(
|
|
1483
2006
|
`[prime-ui-kit] \`${displayName}\` sub-component must be used inside \`${displayName}.Root\`.`
|
|
@@ -1496,15 +2019,27 @@ var Input_default = {
|
|
|
1496
2019
|
field: "Input_field",
|
|
1497
2020
|
inlineAffix: "Input_inlineAffix",
|
|
1498
2021
|
icon: "Input_icon",
|
|
1499
|
-
action: "Input_action"
|
|
2022
|
+
action: "Input_action",
|
|
2023
|
+
strengthWord: "Input_strengthWord"
|
|
1500
2024
|
};
|
|
1501
2025
|
|
|
1502
2026
|
// src/components/input/Input.tsx
|
|
1503
|
-
import { jsx as
|
|
2027
|
+
import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1504
2028
|
var INPUT_LABELS = {
|
|
1505
2029
|
optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E",
|
|
1506
2030
|
clear: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",
|
|
1507
|
-
counter: "{current} \u0438\u0437 {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432"
|
|
2031
|
+
counter: "{current} \u0438\u0437 {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
|
|
2032
|
+
strength: "\u041D\u0430\u0434\u0451\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044F",
|
|
2033
|
+
strengthWeak: "\u0421\u043B\u0430\u0431\u044B\u0439",
|
|
2034
|
+
strengthEasy: "\u041B\u0451\u0433\u043A\u0438\u0439",
|
|
2035
|
+
strengthMedium: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439",
|
|
2036
|
+
strengthHard: "\u0421\u043B\u043E\u0436\u043D\u044B\u0439"
|
|
2037
|
+
};
|
|
2038
|
+
var STRENGTH_TONES = {
|
|
2039
|
+
1: "danger",
|
|
2040
|
+
2: "warning",
|
|
2041
|
+
3: "accent",
|
|
2042
|
+
4: "success"
|
|
1508
2043
|
};
|
|
1509
2044
|
var [InputProvider, useInputContext] = createComponentContext("Input");
|
|
1510
2045
|
function InputRoot({
|
|
@@ -1519,17 +2054,20 @@ function InputRoot({
|
|
|
1519
2054
|
counter,
|
|
1520
2055
|
reserveSupportRow = false,
|
|
1521
2056
|
id,
|
|
2057
|
+
strength = false,
|
|
2058
|
+
getStrength = getPasswordStrength,
|
|
1522
2059
|
labels: labelsProp,
|
|
1523
2060
|
children,
|
|
1524
2061
|
className,
|
|
1525
2062
|
...rest
|
|
1526
2063
|
}) {
|
|
2064
|
+
const [strengthValue, setStrengthValue] = React17.useState("");
|
|
1527
2065
|
const size = useControlSize(sizeProp);
|
|
1528
2066
|
const ids = useFieldFrame(id, { label, hint, error, invalid });
|
|
1529
|
-
const labels =
|
|
2067
|
+
const labels = React17.useMemo(() => ({ ...INPUT_LABELS, ...labelsProp }), [labelsProp]);
|
|
1530
2068
|
const { invalid: isInvalid, controlId: inputId, describedBy } = ids;
|
|
1531
|
-
const inputRef =
|
|
1532
|
-
const contextValue =
|
|
2069
|
+
const inputRef = React17.useRef(null);
|
|
2070
|
+
const contextValue = React17.useMemo(
|
|
1533
2071
|
() => ({
|
|
1534
2072
|
size,
|
|
1535
2073
|
invalid: isInvalid,
|
|
@@ -1538,11 +2076,14 @@ function InputRoot({
|
|
|
1538
2076
|
inputId,
|
|
1539
2077
|
inputRef,
|
|
1540
2078
|
describedBy,
|
|
1541
|
-
labels
|
|
2079
|
+
labels,
|
|
2080
|
+
reportValue: strength ? setStrengthValue : null
|
|
1542
2081
|
}),
|
|
1543
|
-
[size, isInvalid, focusRing, required, inputId, describedBy, labels]
|
|
2082
|
+
[size, isInvalid, focusRing, required, inputId, describedBy, labels, strength]
|
|
1544
2083
|
);
|
|
1545
|
-
|
|
2084
|
+
const level = strength ? getStrength(strengthValue) : 0;
|
|
2085
|
+
const levelWord = level ? [labels.strengthWeak, labels.strengthEasy, labels.strengthMedium, labels.strengthHard][level - 1] : "";
|
|
2086
|
+
return /* @__PURE__ */ jsx20(InputProvider, { value: contextValue, children: /* @__PURE__ */ jsx20(ControlSizeProvider, { value: size, children: /* @__PURE__ */ jsxs12(
|
|
1546
2087
|
FieldFrame,
|
|
1547
2088
|
{
|
|
1548
2089
|
...rest,
|
|
@@ -1553,18 +2094,45 @@ function InputRoot({
|
|
|
1553
2094
|
optional,
|
|
1554
2095
|
hint,
|
|
1555
2096
|
error,
|
|
1556
|
-
counter,
|
|
1557
|
-
|
|
2097
|
+
counter: strength ? /* @__PURE__ */ jsxs12(Fragment6, { children: [
|
|
2098
|
+
/* @__PURE__ */ jsx20(
|
|
2099
|
+
"span",
|
|
2100
|
+
{
|
|
2101
|
+
className: Input_default.strengthWord,
|
|
2102
|
+
"data-tone": level ? STRENGTH_TONES[level] : void 0,
|
|
2103
|
+
"aria-live": "polite",
|
|
2104
|
+
children: levelWord ? /* @__PURE__ */ jsxs12(Fragment6, { children: [
|
|
2105
|
+
/* @__PURE__ */ jsx20(VisuallyHidden, { children: `${labels.strength}: ` }),
|
|
2106
|
+
/* @__PURE__ */ jsx20(MorphText, { children: levelWord })
|
|
2107
|
+
] }) : null
|
|
2108
|
+
}
|
|
2109
|
+
),
|
|
2110
|
+
counter
|
|
2111
|
+
] }) : counter,
|
|
2112
|
+
reserveSupportRow: reserveSupportRow || strength,
|
|
1558
2113
|
optionalLabel: labels.optional,
|
|
1559
2114
|
className: cx(fieldTierClass, Input_default.root, className),
|
|
1560
|
-
children
|
|
2115
|
+
children: [
|
|
2116
|
+
children,
|
|
2117
|
+
strength ? /* @__PURE__ */ jsx20(
|
|
2118
|
+
ProgressBar,
|
|
2119
|
+
{
|
|
2120
|
+
steps: true,
|
|
2121
|
+
value: level,
|
|
2122
|
+
max: 4,
|
|
2123
|
+
tone: level ? STRENGTH_TONES[level] : "neutral",
|
|
2124
|
+
size: "xs",
|
|
2125
|
+
"aria-label": labels.strength
|
|
2126
|
+
}
|
|
2127
|
+
) : null
|
|
2128
|
+
]
|
|
1561
2129
|
}
|
|
1562
2130
|
) }) });
|
|
1563
2131
|
}
|
|
1564
2132
|
InputRoot.displayName = "Input.Root";
|
|
1565
2133
|
function InputWrapper({ children, className, ...rest }) {
|
|
1566
2134
|
const { size, invalid, focusRing } = useInputContext();
|
|
1567
|
-
return /* @__PURE__ */
|
|
2135
|
+
return /* @__PURE__ */ jsx20(
|
|
1568
2136
|
"div",
|
|
1569
2137
|
{
|
|
1570
2138
|
...rest,
|
|
@@ -1588,10 +2156,23 @@ function InputField({
|
|
|
1588
2156
|
ref,
|
|
1589
2157
|
...rest
|
|
1590
2158
|
}) {
|
|
1591
|
-
const {
|
|
2159
|
+
const {
|
|
2160
|
+
inputId,
|
|
2161
|
+
inputRef,
|
|
2162
|
+
invalid,
|
|
2163
|
+
required: requiredCtx,
|
|
2164
|
+
describedBy,
|
|
2165
|
+
reportValue
|
|
2166
|
+
} = useInputContext();
|
|
1592
2167
|
const setRefs = useMergedRefs(inputRef, ref);
|
|
2168
|
+
const controlled = rest.value;
|
|
2169
|
+
React17.useEffect(() => {
|
|
2170
|
+
if (!reportValue) return;
|
|
2171
|
+
if (controlled !== void 0) reportValue(String(controlled));
|
|
2172
|
+
else if (inputRef.current) reportValue(inputRef.current.value);
|
|
2173
|
+
}, [reportValue, controlled, inputRef]);
|
|
1593
2174
|
const resolvedDescribedBy = [ariaDescribedBy, describedBy].filter(Boolean).join(" ") || void 0;
|
|
1594
|
-
return /* @__PURE__ */
|
|
2175
|
+
return /* @__PURE__ */ jsx20(
|
|
1595
2176
|
"input",
|
|
1596
2177
|
{
|
|
1597
2178
|
...rest,
|
|
@@ -1604,21 +2185,22 @@ function InputField({
|
|
|
1604
2185
|
onChange: (event) => {
|
|
1605
2186
|
onChange?.(event);
|
|
1606
2187
|
onValueChange?.(event.target.value);
|
|
2188
|
+
reportValue?.(event.target.value);
|
|
1607
2189
|
}
|
|
1608
2190
|
}
|
|
1609
2191
|
);
|
|
1610
2192
|
}
|
|
1611
2193
|
InputField.displayName = "Input.Field";
|
|
1612
2194
|
function InputIcon({ side, children, className, ...rest }) {
|
|
1613
|
-
return /* @__PURE__ */
|
|
2195
|
+
return /* @__PURE__ */ jsx20("span", { ...rest, className: cx(Input_default.icon, className), "data-side": side, "aria-hidden": "true", children });
|
|
1614
2196
|
}
|
|
1615
2197
|
InputIcon.displayName = "Input.Icon";
|
|
1616
2198
|
function InputAffix({ side, children, className, ...rest }) {
|
|
1617
|
-
return /* @__PURE__ */
|
|
2199
|
+
return /* @__PURE__ */ jsx20("div", { ...rest, className: cx(Input_default.affix, className), "data-side": side, "aria-hidden": "true", children });
|
|
1618
2200
|
}
|
|
1619
2201
|
InputAffix.displayName = "Input.Affix";
|
|
1620
2202
|
function InputInlineAffix({ side, children, className, ...rest }) {
|
|
1621
|
-
return /* @__PURE__ */
|
|
2203
|
+
return /* @__PURE__ */ jsx20(
|
|
1622
2204
|
"span",
|
|
1623
2205
|
{
|
|
1624
2206
|
...rest,
|
|
@@ -1632,7 +2214,7 @@ function InputInlineAffix({ side, children, className, ...rest }) {
|
|
|
1632
2214
|
InputInlineAffix.displayName = "Input.InlineAffix";
|
|
1633
2215
|
function InputClearButton({ className, onClick: onClick2, ref, ...rest }) {
|
|
1634
2216
|
const { inputId, inputRef, labels } = useInputContext();
|
|
1635
|
-
return /* @__PURE__ */
|
|
2217
|
+
return /* @__PURE__ */ jsx20(
|
|
1636
2218
|
"button",
|
|
1637
2219
|
{
|
|
1638
2220
|
...rest,
|
|
@@ -1645,14 +2227,14 @@ function InputClearButton({ className, onClick: onClick2, ref, ...rest }) {
|
|
|
1645
2227
|
onClick2?.(event);
|
|
1646
2228
|
if (!event.defaultPrevented) inputRef.current?.focus();
|
|
1647
2229
|
},
|
|
1648
|
-
children: /* @__PURE__ */
|
|
2230
|
+
children: /* @__PURE__ */ jsx20(Icon, { name: "action.close" })
|
|
1649
2231
|
}
|
|
1650
2232
|
);
|
|
1651
2233
|
}
|
|
1652
2234
|
InputClearButton.displayName = "Input.ClearButton";
|
|
1653
2235
|
function InputCounter(props) {
|
|
1654
2236
|
const { size, labels } = useInputContext();
|
|
1655
|
-
return /* @__PURE__ */
|
|
2237
|
+
return /* @__PURE__ */ jsx20(FieldCounter, { ...props, size, label: labels.counter });
|
|
1656
2238
|
}
|
|
1657
2239
|
InputCounter.displayName = "Input.Counter";
|
|
1658
2240
|
var Input = {
|
|
@@ -1667,17 +2249,17 @@ var Input = {
|
|
|
1667
2249
|
};
|
|
1668
2250
|
|
|
1669
2251
|
// src/internal/imageSlot.tsx
|
|
1670
|
-
import * as
|
|
2252
|
+
import * as React19 from "react";
|
|
1671
2253
|
|
|
1672
2254
|
// src/hooks/useImageStatus.ts
|
|
1673
|
-
import * as
|
|
2255
|
+
import * as React18 from "react";
|
|
1674
2256
|
function useImageStatus(report, { onLoad, onError } = {}) {
|
|
1675
|
-
const [status, setStatus] =
|
|
1676
|
-
|
|
2257
|
+
const [status, setStatus] = React18.useState("loading");
|
|
2258
|
+
React18.useLayoutEffect(() => {
|
|
1677
2259
|
report("loading");
|
|
1678
2260
|
return () => report("idle");
|
|
1679
2261
|
}, [report]);
|
|
1680
|
-
const handleLoad =
|
|
2262
|
+
const handleLoad = React18.useCallback(
|
|
1681
2263
|
(event) => {
|
|
1682
2264
|
setStatus("loaded");
|
|
1683
2265
|
report("loaded");
|
|
@@ -1685,7 +2267,7 @@ function useImageStatus(report, { onLoad, onError } = {}) {
|
|
|
1685
2267
|
},
|
|
1686
2268
|
[onLoad, report]
|
|
1687
2269
|
);
|
|
1688
|
-
const handleError =
|
|
2270
|
+
const handleError = React18.useCallback(
|
|
1689
2271
|
(event) => {
|
|
1690
2272
|
setStatus("error");
|
|
1691
2273
|
report("error");
|
|
@@ -1697,18 +2279,18 @@ function useImageStatus(report, { onLoad, onError } = {}) {
|
|
|
1697
2279
|
}
|
|
1698
2280
|
|
|
1699
2281
|
// src/internal/imageSlot.tsx
|
|
1700
|
-
import { jsx as
|
|
2282
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1701
2283
|
function createImageSlot(name, classNames) {
|
|
1702
2284
|
const [Provider, useSlotContext] = createComponentContext(name);
|
|
1703
2285
|
function ImageSlotProvider({ children }) {
|
|
1704
|
-
const [imageStatus, setImageStatus] =
|
|
1705
|
-
const value =
|
|
1706
|
-
return /* @__PURE__ */
|
|
2286
|
+
const [imageStatus, setImageStatus] = React19.useState("idle");
|
|
2287
|
+
const value = React19.useMemo(() => ({ imageStatus, setImageStatus }), [imageStatus]);
|
|
2288
|
+
return /* @__PURE__ */ jsx21(Provider, { value, children });
|
|
1707
2289
|
}
|
|
1708
2290
|
function ImageInner({ src, alt = "", className, onLoad, onError, ...rest }) {
|
|
1709
2291
|
const { setImageStatus } = useSlotContext();
|
|
1710
2292
|
const image = useImageStatus(setImageStatus, { onLoad, onError });
|
|
1711
|
-
return /* @__PURE__ */
|
|
2293
|
+
return /* @__PURE__ */ jsx21(
|
|
1712
2294
|
"img",
|
|
1713
2295
|
{
|
|
1714
2296
|
src,
|
|
@@ -1722,12 +2304,12 @@ function createImageSlot(name, classNames) {
|
|
|
1722
2304
|
);
|
|
1723
2305
|
}
|
|
1724
2306
|
function Image2(props) {
|
|
1725
|
-
return /* @__PURE__ */
|
|
2307
|
+
return /* @__PURE__ */ jsx21(ImageInner, { ...props }, props.src);
|
|
1726
2308
|
}
|
|
1727
2309
|
Image2.displayName = `${name}.Image`;
|
|
1728
2310
|
function Fallback({ className, ...rest }) {
|
|
1729
2311
|
const { imageStatus } = useSlotContext();
|
|
1730
|
-
return /* @__PURE__ */
|
|
2312
|
+
return /* @__PURE__ */ jsx21(
|
|
1731
2313
|
"span",
|
|
1732
2314
|
{
|
|
1733
2315
|
className: cx(classNames.fallback, className),
|
|
@@ -1758,7 +2340,7 @@ var Thumbnail_default = {
|
|
|
1758
2340
|
};
|
|
1759
2341
|
|
|
1760
2342
|
// src/components/thumbnail/Thumbnail.tsx
|
|
1761
|
-
import { jsx as
|
|
2343
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1762
2344
|
var slot = createImageSlot("Thumbnail", { image: Thumbnail_default.image, fallback: Thumbnail_default.fallback });
|
|
1763
2345
|
function ThumbnailRoot({
|
|
1764
2346
|
size = "m",
|
|
@@ -1771,7 +2353,7 @@ function ThumbnailRoot({
|
|
|
1771
2353
|
children,
|
|
1772
2354
|
...rest
|
|
1773
2355
|
}) {
|
|
1774
|
-
return /* @__PURE__ */
|
|
2356
|
+
return /* @__PURE__ */ jsx22(slot.ImageSlotProvider, { children: /* @__PURE__ */ jsx22(
|
|
1775
2357
|
"div",
|
|
1776
2358
|
{
|
|
1777
2359
|
className: cx(Thumbnail_default.root, palette_default.hue, className),
|
|
@@ -1790,7 +2372,7 @@ function ThumbnailRoot({
|
|
|
1790
2372
|
}
|
|
1791
2373
|
ThumbnailRoot.displayName = "Thumbnail.Root";
|
|
1792
2374
|
function ThumbnailImage({ fit = "cover", ...rest }) {
|
|
1793
|
-
return /* @__PURE__ */
|
|
2375
|
+
return /* @__PURE__ */ jsx22(slot.Image, { ...rest, "data-fit": fit });
|
|
1794
2376
|
}
|
|
1795
2377
|
ThumbnailImage.displayName = "Thumbnail.Image";
|
|
1796
2378
|
var ThumbnailFallback = slot.Fallback;
|
|
@@ -1801,10 +2383,10 @@ var Thumbnail = {
|
|
|
1801
2383
|
};
|
|
1802
2384
|
|
|
1803
2385
|
// src/components/select/Select.tsx
|
|
1804
|
-
import * as
|
|
2386
|
+
import * as React33 from "react";
|
|
1805
2387
|
|
|
1806
2388
|
// src/internal/listbox.ts
|
|
1807
|
-
import * as
|
|
2389
|
+
import * as React20 from "react";
|
|
1808
2390
|
var optionDomId = (listboxId, value) => `${listboxId}-opt-${value.replace(/\s+/g, "_")}`;
|
|
1809
2391
|
function enabledOptions(container) {
|
|
1810
2392
|
if (!container) return [];
|
|
@@ -1829,11 +2411,11 @@ function createStore(initial) {
|
|
|
1829
2411
|
};
|
|
1830
2412
|
}
|
|
1831
2413
|
function useCreateStore(initial) {
|
|
1832
|
-
return
|
|
2414
|
+
return React20.useState(() => createStore(initial))[0];
|
|
1833
2415
|
}
|
|
1834
2416
|
function useStoreSlice(store, select) {
|
|
1835
2417
|
const read = () => select(store.get());
|
|
1836
|
-
return
|
|
2418
|
+
return React20.useSyncExternalStore(store.subscribe, read, read);
|
|
1837
2419
|
}
|
|
1838
2420
|
function handleListboxKeyDown(event, { items, highlight, onSelect }) {
|
|
1839
2421
|
if (items.length === 0) return;
|
|
@@ -1855,10 +2437,10 @@ function handleListboxKeyDown(event, { items, highlight, onSelect }) {
|
|
|
1855
2437
|
}
|
|
1856
2438
|
var TYPEAHEAD_RESET_MS = 500;
|
|
1857
2439
|
function useTypeahead() {
|
|
1858
|
-
const state =
|
|
1859
|
-
|
|
1860
|
-
const isTyping =
|
|
1861
|
-
const find =
|
|
2440
|
+
const state = React20.useRef({ buffer: "", timer: 0 });
|
|
2441
|
+
React20.useEffect(() => () => window.clearTimeout(state.current.timer), []);
|
|
2442
|
+
const isTyping = React20.useCallback(() => state.current.buffer !== "", []);
|
|
2443
|
+
const find = React20.useCallback(
|
|
1862
2444
|
(key, items, highlighted) => {
|
|
1863
2445
|
const s = state.current;
|
|
1864
2446
|
window.clearTimeout(s.timer);
|
|
@@ -1880,7 +2462,7 @@ function useTypeahead() {
|
|
|
1880
2462
|
}
|
|
1881
2463
|
|
|
1882
2464
|
// src/internal/MenuGroup.tsx
|
|
1883
|
-
import * as
|
|
2465
|
+
import * as React21 from "react";
|
|
1884
2466
|
|
|
1885
2467
|
// src/internal/menu.module.css
|
|
1886
2468
|
var menu_default = {
|
|
@@ -1898,12 +2480,12 @@ var menu_default = {
|
|
|
1898
2480
|
};
|
|
1899
2481
|
|
|
1900
2482
|
// src/internal/MenuGroup.tsx
|
|
1901
|
-
import { jsx as
|
|
2483
|
+
import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1902
2484
|
function MenuGroup({ label, className, children, ...rest }) {
|
|
1903
|
-
const labelId =
|
|
2485
|
+
const labelId = React21.useId();
|
|
1904
2486
|
return (
|
|
1905
2487
|
// biome-ignore lint/a11y/useSemanticElements: role="group" inside a menu / listbox; <fieldset> is not allowed there
|
|
1906
|
-
/* @__PURE__ */
|
|
2488
|
+
/* @__PURE__ */ jsxs13(
|
|
1907
2489
|
"div",
|
|
1908
2490
|
{
|
|
1909
2491
|
...rest,
|
|
@@ -1911,7 +2493,7 @@ function MenuGroup({ label, className, children, ...rest }) {
|
|
|
1911
2493
|
"aria-labelledby": label != null ? labelId : void 0,
|
|
1912
2494
|
className: cx(menu_default.group, className),
|
|
1913
2495
|
children: [
|
|
1914
|
-
label != null ? /* @__PURE__ */
|
|
2496
|
+
label != null ? /* @__PURE__ */ jsx23("div", { id: labelId, role: "presentation", className: menu_default.groupLabel, children: label }) : null,
|
|
1915
2497
|
children
|
|
1916
2498
|
]
|
|
1917
2499
|
}
|
|
@@ -1948,11 +2530,11 @@ var overlayMotion_default = {
|
|
|
1948
2530
|
};
|
|
1949
2531
|
|
|
1950
2532
|
// src/internal/Portal.tsx
|
|
1951
|
-
import * as
|
|
2533
|
+
import * as React22 from "react";
|
|
1952
2534
|
import { createPortal } from "react-dom";
|
|
1953
2535
|
function Portal({ children, container }) {
|
|
1954
|
-
const [mounted, setMounted] =
|
|
1955
|
-
|
|
2536
|
+
const [mounted, setMounted] = React22.useState(false);
|
|
2537
|
+
React22.useLayoutEffect(() => {
|
|
1956
2538
|
setMounted(true);
|
|
1957
2539
|
return () => setMounted(false);
|
|
1958
2540
|
}, []);
|
|
@@ -1967,8 +2549,28 @@ var sheet_default = {
|
|
|
1967
2549
|
swipeX: "sheet_swipeX"
|
|
1968
2550
|
};
|
|
1969
2551
|
|
|
2552
|
+
// src/internal/surfaceDepth.tsx
|
|
2553
|
+
import * as React23 from "react";
|
|
2554
|
+
var SurfaceDepthContext = React23.createContext(0);
|
|
2555
|
+
SurfaceDepthContext.displayName = "SurfaceDepthContext";
|
|
2556
|
+
function nextSurfaceDepth(depth) {
|
|
2557
|
+
if (typeof depth === "number") return Math.min(depth + 1, 4);
|
|
2558
|
+
if (depth === "tinted") return 1;
|
|
2559
|
+
return depth === "floating" ? "floating-1" : "floating-2";
|
|
2560
|
+
}
|
|
2561
|
+
function useNestedSurfaceDepth() {
|
|
2562
|
+
return nextSurfaceDepth(React23.useContext(SurfaceDepthContext));
|
|
2563
|
+
}
|
|
2564
|
+
var SurfaceDepthProvider = SurfaceDepthContext.Provider;
|
|
2565
|
+
var StageDepthContext = React23.createContext(0);
|
|
2566
|
+
StageDepthContext.displayName = "StageDepthContext";
|
|
2567
|
+
var StageDepthProvider = StageDepthContext.Provider;
|
|
2568
|
+
function useStageDepth() {
|
|
2569
|
+
return React23.useContext(StageDepthContext);
|
|
2570
|
+
}
|
|
2571
|
+
|
|
1970
2572
|
// src/internal/overlay/layerStack.ts
|
|
1971
|
-
import * as
|
|
2573
|
+
import * as React24 from "react";
|
|
1972
2574
|
|
|
1973
2575
|
// src/internal/overlay/focus.ts
|
|
1974
2576
|
var FOCUSABLE = [
|
|
@@ -2089,22 +2691,22 @@ function push(entry) {
|
|
|
2089
2691
|
if (stack.length === 0) listen(false);
|
|
2090
2692
|
};
|
|
2091
2693
|
}
|
|
2092
|
-
var LayerContext =
|
|
2694
|
+
var LayerContext = React24.createContext(null);
|
|
2093
2695
|
var LayerProvider = LayerContext.Provider;
|
|
2094
2696
|
function useLayer(open, options) {
|
|
2095
|
-
const parent =
|
|
2096
|
-
const [entry] =
|
|
2697
|
+
const parent = React24.useContext(LayerContext);
|
|
2698
|
+
const [entry] = React24.useState(() => ({ parent, trap: false, ...options }));
|
|
2097
2699
|
entry.parent = parent;
|
|
2098
2700
|
entry.refs = options.refs;
|
|
2099
2701
|
entry.dismiss = options.dismiss;
|
|
2100
2702
|
entry.trap = options.trap ?? false;
|
|
2101
2703
|
entry.onDismiss = options.onDismiss;
|
|
2102
|
-
|
|
2704
|
+
React24.useLayoutEffect(() => open ? push(entry) : void 0, [open, entry]);
|
|
2103
2705
|
return entry;
|
|
2104
2706
|
}
|
|
2105
2707
|
|
|
2106
2708
|
// src/internal/overlay/FloatingPanel.tsx
|
|
2107
|
-
import { Fragment as
|
|
2709
|
+
import { Fragment as Fragment7, jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2108
2710
|
function FloatingPanel({
|
|
2109
2711
|
floating,
|
|
2110
2712
|
size,
|
|
@@ -2129,6 +2731,7 @@ function FloatingPanel({
|
|
|
2129
2731
|
className
|
|
2130
2732
|
),
|
|
2131
2733
|
"data-size": size,
|
|
2734
|
+
...surface && !sheet ? { "data-depth": "floating" } : null,
|
|
2132
2735
|
...sheet ? null : {
|
|
2133
2736
|
"data-state": presence.state,
|
|
2134
2737
|
"data-side": floating.side,
|
|
@@ -2139,9 +2742,9 @@ function FloatingPanel({
|
|
|
2139
2742
|
floating.onKeyDown(event);
|
|
2140
2743
|
}
|
|
2141
2744
|
};
|
|
2142
|
-
const panel = scroll ? /* @__PURE__ */
|
|
2143
|
-
return /* @__PURE__ */
|
|
2144
|
-
/* @__PURE__ */
|
|
2745
|
+
const panel = scroll ? /* @__PURE__ */ jsx24(ScrollContainer, { ...props, ref: panelRef, children }) : /* @__PURE__ */ jsx24("div", { ...props, ref: panelRef, children });
|
|
2746
|
+
return /* @__PURE__ */ jsx24(Portal, { children: /* @__PURE__ */ jsx24(LayerProvider, { value: floating.layer, children: /* @__PURE__ */ jsx24(SurfaceDepthProvider, { value: "floating", children: /* @__PURE__ */ jsx24(ControlSizeProvider, { value: size, children: sheet ? /* @__PURE__ */ jsxs14(Fragment7, { children: [
|
|
2747
|
+
/* @__PURE__ */ jsx24(
|
|
2145
2748
|
"div",
|
|
2146
2749
|
{
|
|
2147
2750
|
role: "presentation",
|
|
@@ -2149,7 +2752,7 @@ function FloatingPanel({
|
|
|
2149
2752
|
"data-state": presence.state
|
|
2150
2753
|
}
|
|
2151
2754
|
),
|
|
2152
|
-
/* @__PURE__ */
|
|
2755
|
+
/* @__PURE__ */ jsxs14(
|
|
2153
2756
|
"div",
|
|
2154
2757
|
{
|
|
2155
2758
|
ref: floating.panelRef,
|
|
@@ -2159,29 +2762,30 @@ function FloatingPanel({
|
|
|
2159
2762
|
overlayMotion_default.sheet,
|
|
2160
2763
|
sheet_default.swipeY
|
|
2161
2764
|
),
|
|
2765
|
+
"data-depth": "floating",
|
|
2162
2766
|
"data-state": presence.state,
|
|
2163
2767
|
onAnimationEnd: presence.onExitEnd,
|
|
2164
2768
|
onPointerDown: floating.onSheetPointerDown,
|
|
2165
2769
|
children: [
|
|
2166
|
-
/* @__PURE__ */
|
|
2770
|
+
/* @__PURE__ */ jsx24("div", { className: sheet_default.handle, "data-swipe-handle": "", "aria-hidden": "true" }),
|
|
2167
2771
|
panel
|
|
2168
2772
|
]
|
|
2169
2773
|
}
|
|
2170
2774
|
)
|
|
2171
|
-
] }) : panel }) }) });
|
|
2775
|
+
] }) : panel }) }) }) });
|
|
2172
2776
|
}
|
|
2173
2777
|
function FloatingTrigger({ triggerProps, children, ...forwarded }) {
|
|
2174
|
-
return /* @__PURE__ */
|
|
2778
|
+
return /* @__PURE__ */ jsx24(Slot, { ...forwarded, children: /* @__PURE__ */ jsx24(Slot, { ...triggerProps, children }) });
|
|
2175
2779
|
}
|
|
2176
2780
|
|
|
2177
2781
|
// src/internal/overlay/useFloatingLayer.ts
|
|
2178
|
-
import * as
|
|
2782
|
+
import * as React30 from "react";
|
|
2179
2783
|
|
|
2180
2784
|
// src/hooks/useMediaQuery.ts
|
|
2181
|
-
import * as
|
|
2785
|
+
import * as React25 from "react";
|
|
2182
2786
|
var COMPACT_QUERY = "(max-width: 639px)";
|
|
2183
2787
|
function useMediaQuery(query, enabled = true) {
|
|
2184
|
-
const subscribe =
|
|
2788
|
+
const subscribe = React25.useCallback(
|
|
2185
2789
|
(onChange) => {
|
|
2186
2790
|
if (!enabled || typeof window === "undefined" || !window.matchMedia) return () => {
|
|
2187
2791
|
};
|
|
@@ -2192,18 +2796,18 @@ function useMediaQuery(query, enabled = true) {
|
|
|
2192
2796
|
[enabled, query]
|
|
2193
2797
|
);
|
|
2194
2798
|
const getSnapshot = () => enabled && typeof window !== "undefined" && !!window.matchMedia ? window.matchMedia(query).matches : false;
|
|
2195
|
-
return
|
|
2799
|
+
return React25.useSyncExternalStore(subscribe, getSnapshot, () => false);
|
|
2196
2800
|
}
|
|
2197
2801
|
|
|
2198
2802
|
// src/hooks/usePosition.ts
|
|
2199
|
-
import * as
|
|
2803
|
+
import * as React27 from "react";
|
|
2200
2804
|
|
|
2201
2805
|
// src/internal/AnchorRectContext.tsx
|
|
2202
|
-
import * as
|
|
2203
|
-
var AnchorRectContext =
|
|
2806
|
+
import * as React26 from "react";
|
|
2807
|
+
var AnchorRectContext = React26.createContext(null);
|
|
2204
2808
|
var AnchorRectProvider = AnchorRectContext.Provider;
|
|
2205
2809
|
function useAnchorRectResolver() {
|
|
2206
|
-
return
|
|
2810
|
+
return React26.useContext(AnchorRectContext);
|
|
2207
2811
|
}
|
|
2208
2812
|
|
|
2209
2813
|
// src/internal/layoutPxFromPrimitives.ts
|
|
@@ -2328,11 +2932,11 @@ function usePosition(enabled, anchorRef, layerRef, {
|
|
|
2328
2932
|
offsetToken = "--prime-panel-offset",
|
|
2329
2933
|
arrowInset
|
|
2330
2934
|
} = {}) {
|
|
2331
|
-
const [attached, setAttached] =
|
|
2332
|
-
const [resolvedSide, setResolvedSide] =
|
|
2935
|
+
const [attached, setAttached] = React27.useState(false);
|
|
2936
|
+
const [resolvedSide, setResolvedSide] = React27.useState(preferredSide);
|
|
2333
2937
|
const resolveAnchorRect = useAnchorRectResolver();
|
|
2334
|
-
const metricsRef =
|
|
2335
|
-
const update =
|
|
2938
|
+
const metricsRef = React27.useRef(null);
|
|
2939
|
+
const update = React27.useCallback(
|
|
2336
2940
|
(remeasure) => {
|
|
2337
2941
|
const anchor = anchorRef.current;
|
|
2338
2942
|
const layer = layerRef.current;
|
|
@@ -2386,9 +2990,9 @@ function usePosition(enabled, anchorRef, layerRef, {
|
|
|
2386
2990
|
resolveAnchorRect
|
|
2387
2991
|
]
|
|
2388
2992
|
);
|
|
2389
|
-
const updateRef =
|
|
2993
|
+
const updateRef = React27.useRef(update);
|
|
2390
2994
|
updateRef.current = update;
|
|
2391
|
-
const attachLayer =
|
|
2995
|
+
const attachLayer = React27.useCallback(
|
|
2392
2996
|
(node) => {
|
|
2393
2997
|
layerRef.current = node;
|
|
2394
2998
|
setAttached(node !== null);
|
|
@@ -2396,10 +3000,10 @@ function usePosition(enabled, anchorRef, layerRef, {
|
|
|
2396
3000
|
[layerRef]
|
|
2397
3001
|
);
|
|
2398
3002
|
const active = enabled && attached;
|
|
2399
|
-
|
|
3003
|
+
React27.useLayoutEffect(() => {
|
|
2400
3004
|
if (active) update(true);
|
|
2401
3005
|
}, [active, update]);
|
|
2402
|
-
|
|
3006
|
+
React27.useLayoutEffect(() => {
|
|
2403
3007
|
if (!active) return;
|
|
2404
3008
|
let frame = 0;
|
|
2405
3009
|
let remeasure = false;
|
|
@@ -2433,57 +3037,8 @@ function usePosition(enabled, anchorRef, layerRef, {
|
|
|
2433
3037
|
return { side: resolvedSide, attachLayer };
|
|
2434
3038
|
}
|
|
2435
3039
|
|
|
2436
|
-
// src/hooks/usePresence.ts
|
|
2437
|
-
import * as React24 from "react";
|
|
2438
|
-
var DURATION_FALLBACK_MS = {
|
|
2439
|
-
fast: 230,
|
|
2440
|
-
base: 380,
|
|
2441
|
-
slow: 570
|
|
2442
|
-
};
|
|
2443
|
-
var TIMEOUT_SLACK_MS = 50;
|
|
2444
|
-
function prefersReducedMotion() {
|
|
2445
|
-
return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2446
|
-
}
|
|
2447
|
-
function parseDurationMs(raw) {
|
|
2448
|
-
const value = raw.trim();
|
|
2449
|
-
if (value === "") return null;
|
|
2450
|
-
const n = Number.parseFloat(value);
|
|
2451
|
-
if (Number.isNaN(n)) return null;
|
|
2452
|
-
if (value.endsWith("ms")) return n;
|
|
2453
|
-
if (value.endsWith("s")) return n * 1e3;
|
|
2454
|
-
return null;
|
|
2455
|
-
}
|
|
2456
|
-
function motionDurationMs(token) {
|
|
2457
|
-
if (typeof document === "undefined") return DURATION_FALLBACK_MS[token];
|
|
2458
|
-
const raw = getComputedStyle(document.documentElement).getPropertyValue(
|
|
2459
|
-
`--prime-motion-duration-${token}`
|
|
2460
|
-
);
|
|
2461
|
-
return parseDurationMs(raw) ?? DURATION_FALLBACK_MS[token];
|
|
2462
|
-
}
|
|
2463
|
-
function exitTimeoutMs(token) {
|
|
2464
|
-
return motionDurationMs(token) + TIMEOUT_SLACK_MS;
|
|
2465
|
-
}
|
|
2466
|
-
function usePresence(open, options = {}) {
|
|
2467
|
-
const { exitDuration = "base" } = options;
|
|
2468
|
-
const [mounted, setMounted] = React24.useState(open);
|
|
2469
|
-
if (open && !mounted) setMounted(true);
|
|
2470
|
-
if (!open && mounted && prefersReducedMotion()) setMounted(false);
|
|
2471
|
-
const openRef = React24.useRef(open);
|
|
2472
|
-
openRef.current = open;
|
|
2473
|
-
React24.useEffect(() => {
|
|
2474
|
-
if (open || !mounted) return;
|
|
2475
|
-
const id = window.setTimeout(() => setMounted(false), exitTimeoutMs(exitDuration));
|
|
2476
|
-
return () => window.clearTimeout(id);
|
|
2477
|
-
}, [open, mounted, exitDuration]);
|
|
2478
|
-
const onExitEnd = React24.useCallback((event) => {
|
|
2479
|
-
if (event.target !== event.currentTarget) return;
|
|
2480
|
-
if (!openRef.current) setMounted(false);
|
|
2481
|
-
}, []);
|
|
2482
|
-
return { mounted: open || mounted, state: open ? "open" : "closed", onExitEnd };
|
|
2483
|
-
}
|
|
2484
|
-
|
|
2485
3040
|
// src/hooks/useScrollLock.ts
|
|
2486
|
-
import * as
|
|
3041
|
+
import * as React28 from "react";
|
|
2487
3042
|
var lockCount = 0;
|
|
2488
3043
|
var saved = null;
|
|
2489
3044
|
function lockScroll() {
|
|
@@ -2508,7 +3063,7 @@ function unlockScroll() {
|
|
|
2508
3063
|
}
|
|
2509
3064
|
}
|
|
2510
3065
|
function useScrollLock(enabled) {
|
|
2511
|
-
|
|
3066
|
+
React28.useEffect(() => {
|
|
2512
3067
|
if (!enabled) return;
|
|
2513
3068
|
lockScroll();
|
|
2514
3069
|
return unlockScroll;
|
|
@@ -2516,7 +3071,7 @@ function useScrollLock(enabled) {
|
|
|
2516
3071
|
}
|
|
2517
3072
|
|
|
2518
3073
|
// src/hooks/useSwipeDismiss.ts
|
|
2519
|
-
import * as
|
|
3074
|
+
import * as React29 from "react";
|
|
2520
3075
|
var SLOP_PX = 8;
|
|
2521
3076
|
var DISTANCE_RATIO = 0.3;
|
|
2522
3077
|
var FLICK_VELOCITY = 0.5;
|
|
@@ -2544,11 +3099,11 @@ function useSwipeDismiss({
|
|
|
2544
3099
|
touchAnywhere = false,
|
|
2545
3100
|
onProgress
|
|
2546
3101
|
}) {
|
|
2547
|
-
const optionsRef =
|
|
3102
|
+
const optionsRef = React29.useRef({ direction, onDismiss, handle, touchAnywhere, onProgress });
|
|
2548
3103
|
optionsRef.current = { direction, onDismiss, handle, touchAnywhere, onProgress };
|
|
2549
|
-
const cleanupRef =
|
|
2550
|
-
|
|
2551
|
-
const onPointerDown2 =
|
|
3104
|
+
const cleanupRef = React29.useRef(null);
|
|
3105
|
+
React29.useEffect(() => () => cleanupRef.current?.(), []);
|
|
3106
|
+
const onPointerDown2 = React29.useCallback(
|
|
2552
3107
|
(event) => {
|
|
2553
3108
|
if (!enabled || event.defaultPrevented || !event.isPrimary || event.button !== 0) return;
|
|
2554
3109
|
const { direction: direction2, handle: handle2, touchAnywhere: touchAnywhere2 } = optionsRef.current;
|
|
@@ -2655,24 +3210,24 @@ function useFloatingLayer({
|
|
|
2655
3210
|
const sheet = useMediaQuery(COMPACT_QUERY, sheetOption);
|
|
2656
3211
|
const presence = usePresence(open, { exitDuration: sheet ? "base" : exitDuration });
|
|
2657
3212
|
const mounted = presence.mounted && (open || !skipExit);
|
|
2658
|
-
const contentRef =
|
|
3213
|
+
const contentRef = React30.useRef(null);
|
|
2659
3214
|
const position = usePosition(mounted && !sheet, triggerRef, contentRef, positionOptions);
|
|
2660
3215
|
useScrollLock(open && sheet);
|
|
2661
|
-
const [panel, setPanel] =
|
|
3216
|
+
const [panel, setPanel] = React30.useState(null);
|
|
2662
3217
|
const { attachLayer } = position;
|
|
2663
|
-
const panelRef =
|
|
3218
|
+
const panelRef = React30.useCallback(
|
|
2664
3219
|
(node) => {
|
|
2665
3220
|
attachLayer(node);
|
|
2666
3221
|
setPanel(node);
|
|
2667
3222
|
},
|
|
2668
3223
|
[attachLayer]
|
|
2669
3224
|
);
|
|
2670
|
-
const outsideRef =
|
|
2671
|
-
const close =
|
|
3225
|
+
const outsideRef = React30.useRef(false);
|
|
3226
|
+
const close = React30.useCallback(() => {
|
|
2672
3227
|
outsideRef.current = false;
|
|
2673
3228
|
onOpenChange(false);
|
|
2674
3229
|
}, [onOpenChange]);
|
|
2675
|
-
const dismissOutside =
|
|
3230
|
+
const dismissOutside = React30.useCallback(() => {
|
|
2676
3231
|
outsideRef.current = true;
|
|
2677
3232
|
onOpenChange(false);
|
|
2678
3233
|
}, [onOpenChange]);
|
|
@@ -2696,7 +3251,7 @@ function useFloatingLayer({
|
|
|
2696
3251
|
onDismiss
|
|
2697
3252
|
});
|
|
2698
3253
|
const passive = dismiss === "none";
|
|
2699
|
-
|
|
3254
|
+
React30.useEffect(() => {
|
|
2700
3255
|
if (!open || !panel || passive) return;
|
|
2701
3256
|
outsideRef.current = false;
|
|
2702
3257
|
if (focusOnOpen) focusInto(panel);
|
|
@@ -2761,10 +3316,10 @@ var Select_default = {
|
|
|
2761
3316
|
};
|
|
2762
3317
|
|
|
2763
3318
|
// src/components/select/SelectItem.tsx
|
|
2764
|
-
import * as
|
|
3319
|
+
import * as React32 from "react";
|
|
2765
3320
|
|
|
2766
3321
|
// src/internal/HighlightMatch.tsx
|
|
2767
|
-
import * as
|
|
3322
|
+
import * as React31 from "react";
|
|
2768
3323
|
|
|
2769
3324
|
// src/internal/HighlightMatch.module.css
|
|
2770
3325
|
var HighlightMatch_default = {
|
|
@@ -2772,7 +3327,7 @@ var HighlightMatch_default = {
|
|
|
2772
3327
|
};
|
|
2773
3328
|
|
|
2774
3329
|
// src/internal/HighlightMatch.tsx
|
|
2775
|
-
import { Fragment as
|
|
3330
|
+
import { Fragment as Fragment8, jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2776
3331
|
function matchIndex(text, query) {
|
|
2777
3332
|
if (!query) return -1;
|
|
2778
3333
|
return text.toLowerCase().indexOf(query.toLowerCase());
|
|
@@ -2780,18 +3335,18 @@ function matchIndex(text, query) {
|
|
|
2780
3335
|
function HighlightMatch({ text, query }) {
|
|
2781
3336
|
const q = query.trim();
|
|
2782
3337
|
const at = matchIndex(text, q);
|
|
2783
|
-
if (at < 0) return /* @__PURE__ */
|
|
2784
|
-
return /* @__PURE__ */
|
|
3338
|
+
if (at < 0) return /* @__PURE__ */ jsx25(Fragment8, { children: text });
|
|
3339
|
+
return /* @__PURE__ */ jsxs15("span", { children: [
|
|
2785
3340
|
text.slice(0, at),
|
|
2786
|
-
/* @__PURE__ */
|
|
3341
|
+
/* @__PURE__ */ jsx25("mark", { className: HighlightMatch_default.match, children: text.slice(at, at + q.length) }),
|
|
2787
3342
|
text.slice(at + q.length)
|
|
2788
3343
|
] });
|
|
2789
3344
|
}
|
|
2790
3345
|
function highlightChildren(children, query) {
|
|
2791
3346
|
if (!query.trim()) return children;
|
|
2792
|
-
return
|
|
3347
|
+
return React31.Children.map(
|
|
2793
3348
|
children,
|
|
2794
|
-
(child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */
|
|
3349
|
+
(child) => typeof child === "string" || typeof child === "number" ? /* @__PURE__ */ jsx25(HighlightMatch, { text: String(child), query }) : child
|
|
2795
3350
|
);
|
|
2796
3351
|
}
|
|
2797
3352
|
|
|
@@ -2825,24 +3380,24 @@ function createItemRegistry() {
|
|
|
2825
3380
|
var [SelectProvider, useSelectContext] = createComponentContext("Select");
|
|
2826
3381
|
|
|
2827
3382
|
// src/components/select/SelectItem.tsx
|
|
2828
|
-
import { jsx as
|
|
3383
|
+
import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2829
3384
|
var MEDIA_SIZE = { xs: "xs", s: "xs", m: "s", l: "s", xl: "m" };
|
|
2830
3385
|
function textOf(node) {
|
|
2831
3386
|
if (node == null || typeof node === "boolean") return "";
|
|
2832
3387
|
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
2833
3388
|
if (Array.isArray(node)) return node.map(textOf).join("");
|
|
2834
|
-
if (
|
|
3389
|
+
if (React32.isValidElement(node))
|
|
2835
3390
|
return textOf(node.props.children);
|
|
2836
3391
|
return "";
|
|
2837
3392
|
}
|
|
2838
3393
|
function SelectItemIcon({ className, ...rest }) {
|
|
2839
|
-
return /* @__PURE__ */
|
|
3394
|
+
return /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: cx(menu_default.itemIcon, className), ...rest });
|
|
2840
3395
|
}
|
|
2841
3396
|
SelectItemIcon.displayName = "Select.ItemIcon";
|
|
2842
|
-
var OptionQueryContext =
|
|
3397
|
+
var OptionQueryContext = React32.createContext("");
|
|
2843
3398
|
function SelectItemText({ children, className, ...rest }) {
|
|
2844
|
-
const query =
|
|
2845
|
-
return /* @__PURE__ */
|
|
3399
|
+
const query = React32.useContext(OptionQueryContext);
|
|
3400
|
+
return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemTitle, className), children: highlightChildren(children, query) });
|
|
2846
3401
|
}
|
|
2847
3402
|
SelectItemText.displayName = "Select.ItemText";
|
|
2848
3403
|
function SelectItemDescription({
|
|
@@ -2850,12 +3405,12 @@ function SelectItemDescription({
|
|
|
2850
3405
|
className,
|
|
2851
3406
|
...rest
|
|
2852
3407
|
}) {
|
|
2853
|
-
const query =
|
|
2854
|
-
return /* @__PURE__ */
|
|
3408
|
+
const query = React32.useContext(OptionQueryContext);
|
|
3409
|
+
return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemDescription, className), children: highlightChildren(children, query) });
|
|
2855
3410
|
}
|
|
2856
3411
|
SelectItemDescription.displayName = "Select.ItemDescription";
|
|
2857
3412
|
function SelectItemMeta({ children, className, ...rest }) {
|
|
2858
|
-
return /* @__PURE__ */
|
|
3413
|
+
return /* @__PURE__ */ jsx26("span", { ...rest, className: cx(Select_default.itemMeta, className), children });
|
|
2859
3414
|
}
|
|
2860
3415
|
SelectItemMeta.displayName = "Select.ItemMeta";
|
|
2861
3416
|
function splitItemChildren(children) {
|
|
@@ -2868,11 +3423,11 @@ function splitItemChildren(children) {
|
|
|
2868
3423
|
description: ""
|
|
2869
3424
|
};
|
|
2870
3425
|
let plain = "";
|
|
2871
|
-
for (const child of
|
|
2872
|
-
if (!
|
|
3426
|
+
for (const child of React32.Children.toArray(children)) {
|
|
3427
|
+
if (!React32.isValidElement(child)) {
|
|
2873
3428
|
plain += textOf(child);
|
|
2874
3429
|
parts.body.push(child);
|
|
2875
|
-
} else if (child.type ===
|
|
3430
|
+
} else if (child.type === React32.Fragment) {
|
|
2876
3431
|
const inner = splitItemChildren(child.props.children);
|
|
2877
3432
|
parts.leading.push(...inner.leading);
|
|
2878
3433
|
parts.body.push(...inner.body);
|
|
@@ -2902,7 +3457,7 @@ function splitItemChildren(children) {
|
|
|
2902
3457
|
}
|
|
2903
3458
|
function sizeMedia(leading, size) {
|
|
2904
3459
|
return leading.map(
|
|
2905
|
-
(node) =>
|
|
3460
|
+
(node) => React32.isValidElement(node) && node.type === Thumbnail.Root ? React32.cloneElement(node, {
|
|
2906
3461
|
size: node.props.size ?? MEDIA_SIZE[size],
|
|
2907
3462
|
className: cx(Select_default.media, node.props.className),
|
|
2908
3463
|
"aria-hidden": true
|
|
@@ -2924,7 +3479,7 @@ function SelectItem({
|
|
|
2924
3479
|
const haystack = normalize(`${resolvedLabel} ${parts.description} ${keywords ?? ""}`);
|
|
2925
3480
|
const isSelected = selected.includes(value);
|
|
2926
3481
|
const isHighlighted = useStoreSlice(highlight, (current) => current === value);
|
|
2927
|
-
|
|
3482
|
+
React32.useLayoutEffect(
|
|
2928
3483
|
() => registry.register(value, resolvedLabel, haystack),
|
|
2929
3484
|
[registry, value, resolvedLabel, haystack]
|
|
2930
3485
|
);
|
|
@@ -2933,7 +3488,7 @@ function SelectItem({
|
|
|
2933
3488
|
return (
|
|
2934
3489
|
// biome-ignore lint/a11y/useFocusableInteractive: focus stays on the listbox / search (aria-activedescendant)
|
|
2935
3490
|
// biome-ignore lint/a11y/useKeyWithClickEvents: the keyboard is handled on the listbox
|
|
2936
|
-
/* @__PURE__ */
|
|
3491
|
+
/* @__PURE__ */ jsxs16(
|
|
2937
3492
|
"div",
|
|
2938
3493
|
{
|
|
2939
3494
|
ref,
|
|
@@ -2957,11 +3512,11 @@ function SelectItem({
|
|
|
2957
3512
|
rich: parts.rich || void 0
|
|
2958
3513
|
}),
|
|
2959
3514
|
children: [
|
|
2960
|
-
multiple ? /* @__PURE__ */
|
|
3515
|
+
multiple ? /* @__PURE__ */ jsx26(Checkbox.Indicator, { checked: isSelected, disabled, size: stepDown(size) }) : null,
|
|
2961
3516
|
sizeMedia(parts.leading, size),
|
|
2962
|
-
/* @__PURE__ */
|
|
3517
|
+
/* @__PURE__ */ jsx26("span", { className: Select_default.itemText, children: /* @__PURE__ */ jsx26(OptionQueryContext.Provider, { value: query, children: highlightChildren(parts.body, query) }) }),
|
|
2963
3518
|
parts.meta,
|
|
2964
|
-
multiple ? null : /* @__PURE__ */
|
|
3519
|
+
multiple ? null : /* @__PURE__ */ jsx26("span", { className: menu_default.check, "aria-hidden": "true", children: isSelected ? /* @__PURE__ */ jsx26(Icon, { name: "action.check" }) : null })
|
|
2965
3520
|
]
|
|
2966
3521
|
}
|
|
2967
3522
|
)
|
|
@@ -2970,7 +3525,7 @@ function SelectItem({
|
|
|
2970
3525
|
SelectItem.displayName = "Select.Item";
|
|
2971
3526
|
|
|
2972
3527
|
// src/components/select/Select.tsx
|
|
2973
|
-
import { jsx as
|
|
3528
|
+
import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2974
3529
|
var SELECT_LABELS = {
|
|
2975
3530
|
search: "\u041F\u043E\u0438\u0441\u043A",
|
|
2976
3531
|
empty: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
|
|
@@ -3007,14 +3562,14 @@ function SelectRoot(props) {
|
|
|
3007
3562
|
...rest
|
|
3008
3563
|
} = props;
|
|
3009
3564
|
const multiple = props.multiple === true;
|
|
3010
|
-
const labels =
|
|
3565
|
+
const labels = React33.useMemo(() => ({ ...SELECT_LABELS, ...labelsProp }), [labelsProp]);
|
|
3011
3566
|
const ids = useFieldFrame(id, { hint, error, invalid });
|
|
3012
3567
|
const [value, setValue] = useControllableState({
|
|
3013
3568
|
value: props.value,
|
|
3014
3569
|
defaultValue: props.defaultValue ?? (multiple ? [] : void 0),
|
|
3015
3570
|
onChange: props.onValueChange
|
|
3016
3571
|
});
|
|
3017
|
-
const selected =
|
|
3572
|
+
const selected = React33.useMemo(
|
|
3018
3573
|
() => Array.isArray(value) ? value : value ? [value] : [],
|
|
3019
3574
|
[value]
|
|
3020
3575
|
);
|
|
@@ -3024,11 +3579,11 @@ function SelectRoot(props) {
|
|
|
3024
3579
|
onChange: onOpenChange
|
|
3025
3580
|
});
|
|
3026
3581
|
const highlight = useCreateStore(void 0);
|
|
3027
|
-
const [registry] =
|
|
3028
|
-
const [query, setQuery] =
|
|
3029
|
-
const triggerRef =
|
|
3582
|
+
const [registry] = React33.useState(createItemRegistry);
|
|
3583
|
+
const [query, setQuery] = React33.useState("");
|
|
3584
|
+
const triggerRef = React33.useRef(null);
|
|
3030
3585
|
if (!isOpen && query !== "") setQuery("");
|
|
3031
|
-
const pick =
|
|
3586
|
+
const pick = React33.useCallback(
|
|
3032
3587
|
(optionValue) => {
|
|
3033
3588
|
if (multiple) {
|
|
3034
3589
|
setValue((prev) => {
|
|
@@ -3042,8 +3597,8 @@ function SelectRoot(props) {
|
|
|
3042
3597
|
},
|
|
3043
3598
|
[multiple, setValue, setOpen]
|
|
3044
3599
|
);
|
|
3045
|
-
const clear =
|
|
3046
|
-
const context =
|
|
3600
|
+
const clear = React33.useCallback(() => setValue(multiple ? [] : ""), [multiple, setValue]);
|
|
3601
|
+
const context = React33.useMemo(
|
|
3047
3602
|
() => ({
|
|
3048
3603
|
size,
|
|
3049
3604
|
invalid: ids.invalid,
|
|
@@ -3092,7 +3647,7 @@ function SelectRoot(props) {
|
|
|
3092
3647
|
labels
|
|
3093
3648
|
]
|
|
3094
3649
|
);
|
|
3095
|
-
return /* @__PURE__ */
|
|
3650
|
+
return /* @__PURE__ */ jsx27(
|
|
3096
3651
|
FieldFrame,
|
|
3097
3652
|
{
|
|
3098
3653
|
...rest,
|
|
@@ -3106,7 +3661,7 @@ function SelectRoot(props) {
|
|
|
3106
3661
|
disabled,
|
|
3107
3662
|
optionalLabel: labels.optional,
|
|
3108
3663
|
className,
|
|
3109
|
-
children: /* @__PURE__ */
|
|
3664
|
+
children: /* @__PURE__ */ jsx27(SelectProvider, { value: context, children: /* @__PURE__ */ jsx27(ControlSizeProvider, { value: size, children }) })
|
|
3110
3665
|
}
|
|
3111
3666
|
);
|
|
3112
3667
|
}
|
|
@@ -3140,7 +3695,7 @@ function SelectTrigger({
|
|
|
3140
3695
|
} = useSelectContext();
|
|
3141
3696
|
const mergedRef = useMergedRefs(triggerRef, ref);
|
|
3142
3697
|
const showClear = clearable && selected.length > 0 && !disabled && !loading;
|
|
3143
|
-
return /* @__PURE__ */
|
|
3698
|
+
return /* @__PURE__ */ jsxs17(
|
|
3144
3699
|
"button",
|
|
3145
3700
|
{
|
|
3146
3701
|
...rest,
|
|
@@ -3181,11 +3736,11 @@ function SelectTrigger({
|
|
|
3181
3736
|
"focus-ring": focusRing ? void 0 : false
|
|
3182
3737
|
}),
|
|
3183
3738
|
children: [
|
|
3184
|
-
/* @__PURE__ */
|
|
3739
|
+
/* @__PURE__ */ jsx27("span", { className: Select_default.triggerMain, children }),
|
|
3185
3740
|
showClear ? (
|
|
3186
3741
|
// A segment, not a button: interactive content inside a <button> is invalid. The keyboard
|
|
3187
3742
|
// clears with Delete / Backspace on the trigger.
|
|
3188
|
-
/* @__PURE__ */
|
|
3743
|
+
/* @__PURE__ */ jsx27(
|
|
3189
3744
|
"span",
|
|
3190
3745
|
{
|
|
3191
3746
|
className: Select_default.clear,
|
|
@@ -3197,11 +3752,11 @@ function SelectTrigger({
|
|
|
3197
3752
|
event.stopPropagation();
|
|
3198
3753
|
clear();
|
|
3199
3754
|
},
|
|
3200
|
-
children: /* @__PURE__ */
|
|
3755
|
+
children: /* @__PURE__ */ jsx27(Icon, { name: "action.close" })
|
|
3201
3756
|
}
|
|
3202
3757
|
)
|
|
3203
3758
|
) : null,
|
|
3204
|
-
/* @__PURE__ */
|
|
3759
|
+
/* @__PURE__ */ jsx27("span", { className: Select_default.chevron, "aria-hidden": "true", children: loading ? /* @__PURE__ */ jsx27(Spinner, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx27(Icon, { name: "nav.chevronDown" }) })
|
|
3205
3760
|
]
|
|
3206
3761
|
}
|
|
3207
3762
|
);
|
|
@@ -3213,7 +3768,7 @@ function SelectValue({ renderValue, className, ...rest }) {
|
|
|
3213
3768
|
if (selected.length > 0 && renderValue && !multiple) {
|
|
3214
3769
|
const value = selected[0] ?? "";
|
|
3215
3770
|
const parts = splitItemChildren(renderValue({ value, label: text }));
|
|
3216
|
-
return /* @__PURE__ */
|
|
3771
|
+
return /* @__PURE__ */ jsxs17(
|
|
3217
3772
|
"span",
|
|
3218
3773
|
{
|
|
3219
3774
|
...rest,
|
|
@@ -3221,12 +3776,12 @@ function SelectValue({ renderValue, className, ...rest }) {
|
|
|
3221
3776
|
...toDataAttributes({ rich: parts.rich || void 0 }),
|
|
3222
3777
|
children: [
|
|
3223
3778
|
sizeMedia(parts.leading, size),
|
|
3224
|
-
/* @__PURE__ */
|
|
3779
|
+
/* @__PURE__ */ jsx27("span", { className: Select_default.valueBody, children: parts.body })
|
|
3225
3780
|
]
|
|
3226
3781
|
}
|
|
3227
3782
|
);
|
|
3228
3783
|
}
|
|
3229
|
-
return /* @__PURE__ */
|
|
3784
|
+
return /* @__PURE__ */ jsx27(
|
|
3230
3785
|
"span",
|
|
3231
3786
|
{
|
|
3232
3787
|
...rest,
|
|
@@ -3238,7 +3793,7 @@ function SelectValue({ renderValue, className, ...rest }) {
|
|
|
3238
3793
|
}
|
|
3239
3794
|
SelectValue.displayName = "Select.Value";
|
|
3240
3795
|
function SelectTriggerIcon({ className, ...rest }) {
|
|
3241
|
-
return /* @__PURE__ */
|
|
3796
|
+
return /* @__PURE__ */ jsx27("span", { "aria-hidden": "true", className: cx(Select_default.triggerIcon, className), ...rest });
|
|
3242
3797
|
}
|
|
3243
3798
|
SelectTriggerIcon.displayName = "Select.TriggerIcon";
|
|
3244
3799
|
function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
@@ -3258,7 +3813,7 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
|
3258
3813
|
labels,
|
|
3259
3814
|
registry
|
|
3260
3815
|
} = useSelectContext();
|
|
3261
|
-
const listboxRef =
|
|
3816
|
+
const listboxRef = React33.useRef(null);
|
|
3262
3817
|
const floating = useFloatingLayer({
|
|
3263
3818
|
open: isOpen,
|
|
3264
3819
|
onOpenChange: setOpen,
|
|
@@ -3289,9 +3844,9 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
|
3289
3844
|
}
|
|
3290
3845
|
handleListboxKeyDown(event, { items, highlight, onSelect: pick });
|
|
3291
3846
|
};
|
|
3292
|
-
if (!floating.mounted) return /* @__PURE__ */
|
|
3847
|
+
if (!floating.mounted) return /* @__PURE__ */ jsx27("div", { hidden: true, children });
|
|
3293
3848
|
const activeDescendant = isOpen && highlighted !== void 0 ? optionDomId(listboxId, highlighted) : void 0;
|
|
3294
|
-
return /* @__PURE__ */
|
|
3849
|
+
return /* @__PURE__ */ jsxs17(
|
|
3295
3850
|
FloatingPanel,
|
|
3296
3851
|
{
|
|
3297
3852
|
...rest,
|
|
@@ -3303,9 +3858,9 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
|
3303
3858
|
children: [
|
|
3304
3859
|
searchable ? (
|
|
3305
3860
|
// The permanent focus of the panel: no ring, the caret is the indicator (foundation §7).
|
|
3306
|
-
/* @__PURE__ */
|
|
3307
|
-
/* @__PURE__ */
|
|
3308
|
-
/* @__PURE__ */
|
|
3861
|
+
/* @__PURE__ */ jsxs17("div", { className: cx(menu_default.searchRow, Select_default.search), "data-focus-ring": "false", children: [
|
|
3862
|
+
/* @__PURE__ */ jsx27(Icon, { name: "action.search", size: "s" }),
|
|
3863
|
+
/* @__PURE__ */ jsx27(
|
|
3309
3864
|
"input",
|
|
3310
3865
|
{
|
|
3311
3866
|
type: "text",
|
|
@@ -3324,11 +3879,11 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
|
3324
3879
|
)
|
|
3325
3880
|
] })
|
|
3326
3881
|
) : null,
|
|
3327
|
-
loading ? /* @__PURE__ */
|
|
3328
|
-
/* @__PURE__ */
|
|
3882
|
+
loading ? /* @__PURE__ */ jsxs17("div", { className: Select_default.status, role: "status", children: [
|
|
3883
|
+
/* @__PURE__ */ jsx27(Spinner, { "aria-hidden": "true" }),
|
|
3329
3884
|
labels.loading
|
|
3330
3885
|
] }) : null,
|
|
3331
|
-
/* @__PURE__ */
|
|
3886
|
+
/* @__PURE__ */ jsx27(
|
|
3332
3887
|
ScrollContainer,
|
|
3333
3888
|
{
|
|
3334
3889
|
ref: listboxRef,
|
|
@@ -3344,11 +3899,11 @@ function SelectContent({ searchable = false, className, children, ...rest }) {
|
|
|
3344
3899
|
children
|
|
3345
3900
|
}
|
|
3346
3901
|
),
|
|
3347
|
-
isEmpty && !loading ? /* @__PURE__ */
|
|
3348
|
-
/* @__PURE__ */
|
|
3349
|
-
query !== "" && labels.emptyHint ? /* @__PURE__ */
|
|
3902
|
+
isEmpty && !loading ? /* @__PURE__ */ jsxs17(EmptyPage.Root, { layout: "compact", role: "status", children: [
|
|
3903
|
+
/* @__PURE__ */ jsx27(EmptyPage.Title, { as: "p", children: labels.empty }),
|
|
3904
|
+
query !== "" && labels.emptyHint ? /* @__PURE__ */ jsx27(EmptyPage.Description, { children: labels.emptyHint }) : null
|
|
3350
3905
|
] }) : null,
|
|
3351
|
-
/* @__PURE__ */
|
|
3906
|
+
/* @__PURE__ */ jsx27(HighlightOnOpen, { listboxRef, highlight })
|
|
3352
3907
|
]
|
|
3353
3908
|
}
|
|
3354
3909
|
);
|
|
@@ -3359,9 +3914,9 @@ function HighlightOnOpen({
|
|
|
3359
3914
|
highlight
|
|
3360
3915
|
}) {
|
|
3361
3916
|
const { isOpen, query, selected } = useSelectContext();
|
|
3362
|
-
const selectedRef =
|
|
3917
|
+
const selectedRef = React33.useRef(selected);
|
|
3363
3918
|
selectedRef.current = selected;
|
|
3364
|
-
|
|
3919
|
+
React33.useLayoutEffect(() => {
|
|
3365
3920
|
if (!isOpen) return;
|
|
3366
3921
|
const options = enabledOptions(listboxRef.current);
|
|
3367
3922
|
const first = options.find((item) => selectedRef.current.includes(item.dataset.value ?? ""));
|
|
@@ -3369,17 +3924,17 @@ function HighlightOnOpen({
|
|
|
3369
3924
|
first?.scrollIntoView?.({ block: "nearest" });
|
|
3370
3925
|
return () => highlight.set(void 0);
|
|
3371
3926
|
}, [isOpen, listboxRef, highlight]);
|
|
3372
|
-
|
|
3927
|
+
React33.useLayoutEffect(() => {
|
|
3373
3928
|
if (query !== "") highlight.set(enabledOptions(listboxRef.current)[0]?.dataset.value);
|
|
3374
3929
|
}, [query, listboxRef, highlight]);
|
|
3375
3930
|
return null;
|
|
3376
3931
|
}
|
|
3377
3932
|
function SelectGroup({ className, ...rest }) {
|
|
3378
|
-
return /* @__PURE__ */
|
|
3933
|
+
return /* @__PURE__ */ jsx27(MenuGroup, { ...rest, className: cx(Select_default.group, className) });
|
|
3379
3934
|
}
|
|
3380
3935
|
SelectGroup.displayName = "Select.Group";
|
|
3381
3936
|
function SelectSeparator({ className, ...rest }) {
|
|
3382
|
-
return /* @__PURE__ */
|
|
3937
|
+
return /* @__PURE__ */ jsx27(Divider, { ...rest, className: cx(menu_default.separator, Select_default.separator, className) });
|
|
3383
3938
|
}
|
|
3384
3939
|
SelectSeparator.displayName = "Select.Separator";
|
|
3385
3940
|
var Select = {
|
|
@@ -3398,21 +3953,20 @@ var Select = {
|
|
|
3398
3953
|
};
|
|
3399
3954
|
|
|
3400
3955
|
export {
|
|
3401
|
-
ControlSizeProvider,
|
|
3402
|
-
useOptionalControlSize,
|
|
3403
|
-
useControlSize,
|
|
3404
|
-
cx,
|
|
3405
3956
|
toDataAttributes,
|
|
3406
3957
|
fieldSurfaceClass,
|
|
3407
3958
|
fieldTierClass,
|
|
3408
3959
|
fieldTriggerClass,
|
|
3409
3960
|
iconLayout,
|
|
3961
|
+
prefersReducedMotion,
|
|
3962
|
+
motionDurationMs,
|
|
3963
|
+
exitTimeoutMs,
|
|
3964
|
+
usePresence,
|
|
3965
|
+
visuallyHiddenClass,
|
|
3966
|
+
VisuallyHidden,
|
|
3410
3967
|
useMergedRefs,
|
|
3411
3968
|
Slot,
|
|
3412
3969
|
touchTargetBlockClass,
|
|
3413
|
-
textTone_default,
|
|
3414
|
-
visuallyHiddenClass,
|
|
3415
|
-
VisuallyHidden,
|
|
3416
3970
|
Spinner,
|
|
3417
3971
|
Button,
|
|
3418
3972
|
Divider,
|
|
@@ -3421,12 +3975,16 @@ export {
|
|
|
3421
3975
|
useEdgeOverflow,
|
|
3422
3976
|
ScrollContainer,
|
|
3423
3977
|
palette_default,
|
|
3978
|
+
RollingNumber,
|
|
3424
3979
|
createComponentContext,
|
|
3425
3980
|
createImageSlot,
|
|
3426
3981
|
useControllableState,
|
|
3427
3982
|
overlayMotion_default,
|
|
3428
3983
|
Portal,
|
|
3429
3984
|
sheet_default,
|
|
3985
|
+
useNestedSurfaceDepth,
|
|
3986
|
+
SurfaceDepthProvider,
|
|
3987
|
+
useStageDepth,
|
|
3430
3988
|
focusInto,
|
|
3431
3989
|
focusBack,
|
|
3432
3990
|
activeElement,
|
|
@@ -3439,10 +3997,6 @@ export {
|
|
|
3439
3997
|
AnchorRectProvider,
|
|
3440
3998
|
readCssLengthPx,
|
|
3441
3999
|
getViewportPadPx,
|
|
3442
|
-
prefersReducedMotion,
|
|
3443
|
-
motionDurationMs,
|
|
3444
|
-
exitTimeoutMs,
|
|
3445
|
-
usePresence,
|
|
3446
4000
|
useScrollLock,
|
|
3447
4001
|
useSwipeDismiss,
|
|
3448
4002
|
useFloatingLayer,
|
|
@@ -3457,15 +4011,15 @@ export {
|
|
|
3457
4011
|
textTones,
|
|
3458
4012
|
enterMotion_default,
|
|
3459
4013
|
Hint,
|
|
3460
|
-
choiceInputClass,
|
|
3461
|
-
choiceVisualClass,
|
|
3462
|
-
ChoiceField,
|
|
3463
|
-
ChoiceLabel,
|
|
3464
4014
|
Label,
|
|
3465
4015
|
formatLabel,
|
|
3466
4016
|
useFieldFrame,
|
|
3467
4017
|
FieldFrame,
|
|
3468
4018
|
FieldCounter,
|
|
4019
|
+
choiceInputClass,
|
|
4020
|
+
choiceVisualClass,
|
|
4021
|
+
ChoiceField,
|
|
4022
|
+
ChoiceLabel,
|
|
3469
4023
|
Checkbox,
|
|
3470
4024
|
COLOR_PRESETS,
|
|
3471
4025
|
useSwatchOptions,
|
|
@@ -3487,6 +4041,11 @@ export {
|
|
|
3487
4041
|
handleListboxKeyDown,
|
|
3488
4042
|
menu_default,
|
|
3489
4043
|
MenuGroup,
|
|
4044
|
+
resolveValue,
|
|
4045
|
+
DEFAULT_PROGRESS_SEGMENTS_LABELS,
|
|
4046
|
+
resolveSegments,
|
|
4047
|
+
ProgressBar,
|
|
4048
|
+
getPasswordStrength,
|
|
3490
4049
|
Input,
|
|
3491
4050
|
Thumbnail,
|
|
3492
4051
|
Select
|