@ada-cx/lovelace 1.0.0-setup.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 +113 -0
- package/dist/components/AgentMessage/AgentMessage.css.d.ts +2 -0
- package/dist/components/AgentMessage/AgentMessage.css.js +7 -0
- package/dist/components/AgentMessage/AgentMessage.css.js.map +1 -0
- package/dist/components/AgentMessage/AgentMessage.d.ts +21 -0
- package/dist/components/AgentMessage/AgentMessage.js +24 -0
- package/dist/components/AgentMessage/AgentMessage.js.map +1 -0
- package/dist/components/AgentMessage/index.d.ts +2 -0
- package/dist/components/Avatar/Avatar.css.d.ts +48 -0
- package/dist/components/Avatar/Avatar.css.js +28 -0
- package/dist/components/Avatar/Avatar.css.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +35 -0
- package/dist/components/Avatar/Avatar.js +26 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/AvatarPlaceholder.d.ts +14 -0
- package/dist/components/Avatar/AvatarPlaceholder.js +18 -0
- package/dist/components/Avatar/AvatarPlaceholder.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +4 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.css.d.ts +3 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.css.js +8 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.css.js.map +1 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.d.ts +24 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.js +28 -0
- package/dist/components/BubbleOverlay/BubbleOverlay.js.map +1 -0
- package/dist/components/BubbleOverlay/index.d.ts +1 -0
- package/dist/components/Button/Button.css.d.ts +48 -0
- package/dist/components/Button/Button.css.js +29 -0
- package/dist/components/Button/Button.css.js.map +1 -0
- package/dist/components/Button/Button.d.ts +14 -0
- package/dist/components/Button/Button.js +24 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Checkbox/Checkbox.css.d.ts +19 -0
- package/dist/components/Checkbox/Checkbox.css.js +7 -0
- package/dist/components/Checkbox/Checkbox.css.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +22 -0
- package/dist/components/Checkbox/Checkbox.js +42 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/index.d.ts +1 -0
- package/dist/components/Chip/Chip.css.d.ts +19 -0
- package/dist/components/Chip/Chip.css.js +51 -0
- package/dist/components/Chip/Chip.css.js.map +1 -0
- package/dist/components/Chip/Chip.d.ts +23 -0
- package/dist/components/Chip/Chip.js +21 -0
- package/dist/components/Chip/Chip.js.map +1 -0
- package/dist/components/Chip/index.d.ts +2 -0
- package/dist/components/Dialog/Dialog.css.d.ts +15 -0
- package/dist/components/Dialog/Dialog.css.js +16 -0
- package/dist/components/Dialog/Dialog.css.js.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +15 -0
- package/dist/components/Dialog/Dialog.js +18 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/Dialog/DialogActions.d.ts +8 -0
- package/dist/components/Dialog/DialogActions.js +14 -0
- package/dist/components/Dialog/DialogActions.js.map +1 -0
- package/dist/components/Dialog/DialogBody.d.ts +7 -0
- package/dist/components/Dialog/DialogBody.js +14 -0
- package/dist/components/Dialog/DialogBody.js.map +1 -0
- package/dist/components/Dialog/DialogContent.d.ts +8 -0
- package/dist/components/Dialog/DialogContent.js +14 -0
- package/dist/components/Dialog/DialogContent.js.map +1 -0
- package/dist/components/Dialog/DialogIcon.d.ts +11 -0
- package/dist/components/Dialog/DialogIcon.js +18 -0
- package/dist/components/Dialog/DialogIcon.js.map +1 -0
- package/dist/components/Dialog/DialogRoot.d.ts +15 -0
- package/dist/components/Dialog/DialogRoot.js +14 -0
- package/dist/components/Dialog/DialogRoot.js.map +1 -0
- package/dist/components/Dialog/DialogTitle.d.ts +7 -0
- package/dist/components/Dialog/DialogTitle.js +16 -0
- package/dist/components/Dialog/DialogTitle.js.map +1 -0
- package/dist/components/Dialog/index.d.ts +6 -0
- package/dist/components/DialogOverlay/DialogOverlay.css.d.ts +3 -0
- package/dist/components/DialogOverlay/DialogOverlay.css.js +8 -0
- package/dist/components/DialogOverlay/DialogOverlay.css.js.map +1 -0
- package/dist/components/DialogOverlay/DialogOverlay.d.ts +30 -0
- package/dist/components/DialogOverlay/DialogOverlay.js +29 -0
- package/dist/components/DialogOverlay/DialogOverlay.js.map +1 -0
- package/dist/components/DialogOverlay/index.d.ts +1 -0
- package/dist/components/Divider/Divider.css.d.ts +27 -0
- package/dist/components/Divider/Divider.css.js +17 -0
- package/dist/components/Divider/Divider.css.js.map +1 -0
- package/dist/components/Divider/Divider.d.ts +27 -0
- package/dist/components/Divider/Divider.js +35 -0
- package/dist/components/Divider/Divider.js.map +1 -0
- package/dist/components/Divider/index.d.ts +1 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.css.d.ts +3 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.css.js +8 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.css.js.map +1 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.d.ts +22 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.js +28 -0
- package/dist/components/FullscreenOverlay/FullscreenOverlay.js.map +1 -0
- package/dist/components/FullscreenOverlay/index.d.ts +1 -0
- package/dist/components/Header/Header.css.d.ts +2 -0
- package/dist/components/Header/Header.css.js +7 -0
- package/dist/components/Header/Header.css.js.map +1 -0
- package/dist/components/Header/Header.d.ts +6 -0
- package/dist/components/Header/Header.js +8 -0
- package/dist/components/Header/Header.js.map +1 -0
- package/dist/components/Header/HeaderRoot.d.ts +11 -0
- package/dist/components/Header/HeaderRoot.js +16 -0
- package/dist/components/Header/HeaderRoot.js.map +1 -0
- package/dist/components/Header/HeaderTitle.d.ts +10 -0
- package/dist/components/Header/HeaderTitle.js +16 -0
- package/dist/components/Header/HeaderTitle.js.map +1 -0
- package/dist/components/Header/index.d.ts +2 -0
- package/dist/components/Icon/Icon.css.d.ts +1 -0
- package/dist/components/Icon/Icon.css.js +7 -0
- package/dist/components/Icon/Icon.css.js.map +1 -0
- package/dist/components/Icon/Icon.d.ts +7 -0
- package/dist/components/Icon/Icon.js +22 -0
- package/dist/components/Icon/Icon.js.map +1 -0
- package/dist/components/Icon/icons/AdaLogo.css.d.ts +1 -0
- package/dist/components/Icon/icons/AdaLogo.css.js +7 -0
- package/dist/components/Icon/icons/AdaLogo.css.js.map +1 -0
- package/dist/components/Icon/icons/AdaLogo.d.ts +6 -0
- package/dist/components/Icon/icons/AdaLogo.js +27 -0
- package/dist/components/Icon/icons/AdaLogo.js.map +1 -0
- package/dist/components/Icon/icons/ArrowDown.d.ts +2 -0
- package/dist/components/Icon/icons/ArrowDown.js +17 -0
- package/dist/components/Icon/icons/ArrowDown.js.map +1 -0
- package/dist/components/Icon/icons/ArrowLeft.d.ts +8 -0
- package/dist/components/Icon/icons/ArrowLeft.js +18 -0
- package/dist/components/Icon/icons/ArrowLeft.js.map +1 -0
- package/dist/components/Icon/icons/ArrowNortheast.d.ts +2 -0
- package/dist/components/Icon/icons/ArrowNortheast.js +14 -0
- package/dist/components/Icon/icons/ArrowNortheast.js.map +1 -0
- package/dist/components/Icon/icons/ArrowNorthwest.d.ts +2 -0
- package/dist/components/Icon/icons/ArrowNorthwest.js +14 -0
- package/dist/components/Icon/icons/ArrowNorthwest.js.map +1 -0
- package/dist/components/Icon/icons/ArrowRight.d.ts +8 -0
- package/dist/components/Icon/icons/ArrowRight.js +18 -0
- package/dist/components/Icon/icons/ArrowRight.js.map +1 -0
- package/dist/components/Icon/icons/Bell.d.ts +2 -0
- package/dist/components/Icon/icons/Bell.js +14 -0
- package/dist/components/Icon/icons/Bell.js.map +1 -0
- package/dist/components/Icon/icons/BellSlash.d.ts +2 -0
- package/dist/components/Icon/icons/BellSlash.js +14 -0
- package/dist/components/Icon/icons/BellSlash.js.map +1 -0
- package/dist/components/Icon/icons/Checkmark.d.ts +2 -0
- package/dist/components/Icon/icons/Checkmark.js +14 -0
- package/dist/components/Icon/icons/Checkmark.js.map +1 -0
- package/dist/components/Icon/icons/ChevronLeft.d.ts +2 -0
- package/dist/components/Icon/icons/ChevronLeft.js +14 -0
- package/dist/components/Icon/icons/ChevronLeft.js.map +1 -0
- package/dist/components/Icon/icons/ChevronRight.d.ts +2 -0
- package/dist/components/Icon/icons/ChevronRight.js +14 -0
- package/dist/components/Icon/icons/ChevronRight.js.map +1 -0
- package/dist/components/Icon/icons/CloudUpload.d.ts +2 -0
- package/dist/components/Icon/icons/CloudUpload.js +14 -0
- package/dist/components/Icon/icons/CloudUpload.js.map +1 -0
- package/dist/components/Icon/icons/Download.d.ts +2 -0
- package/dist/components/Icon/icons/Download.js +14 -0
- package/dist/components/Icon/icons/Download.js.map +1 -0
- package/dist/components/Icon/icons/Ellipses.d.ts +2 -0
- package/dist/components/Icon/icons/Ellipses.js +14 -0
- package/dist/components/Icon/icons/Ellipses.js.map +1 -0
- package/dist/components/Icon/icons/Email.d.ts +2 -0
- package/dist/components/Icon/icons/Email.js +14 -0
- package/dist/components/Icon/icons/Email.js.map +1 -0
- package/dist/components/Icon/icons/ExclamationSync.d.ts +2 -0
- package/dist/components/Icon/icons/ExclamationSync.js +14 -0
- package/dist/components/Icon/icons/ExclamationSync.js.map +1 -0
- package/dist/components/Icon/icons/ExclamationTriangle.d.ts +2 -0
- package/dist/components/Icon/icons/ExclamationTriangle.js +18 -0
- package/dist/components/Icon/icons/ExclamationTriangle.js.map +1 -0
- package/dist/components/Icon/icons/Eye.d.ts +2 -0
- package/dist/components/Icon/icons/Eye.js +14 -0
- package/dist/components/Icon/icons/Eye.js.map +1 -0
- package/dist/components/Icon/icons/EyeSlash.d.ts +2 -0
- package/dist/components/Icon/icons/EyeSlash.js +14 -0
- package/dist/components/Icon/icons/EyeSlash.js.map +1 -0
- package/dist/components/Icon/icons/Glyph.d.ts +16 -0
- package/dist/components/Icon/icons/Glyph.js +24 -0
- package/dist/components/Icon/icons/Glyph.js.map +1 -0
- package/dist/components/Icon/icons/Language.d.ts +2 -0
- package/dist/components/Icon/icons/Language.js +14 -0
- package/dist/components/Icon/icons/Language.js.map +1 -0
- package/dist/components/Icon/icons/MediaSlash.d.ts +2 -0
- package/dist/components/Icon/icons/MediaSlash.js +14 -0
- package/dist/components/Icon/icons/MediaSlash.js.map +1 -0
- package/dist/components/Icon/icons/MessagingFill.d.ts +2 -0
- package/dist/components/Icon/icons/MessagingFill.js +18 -0
- package/dist/components/Icon/icons/MessagingFill.js.map +1 -0
- package/dist/components/Icon/icons/Minimize.d.ts +2 -0
- package/dist/components/Icon/icons/Minimize.js +14 -0
- package/dist/components/Icon/icons/Minimize.js.map +1 -0
- package/dist/components/Icon/icons/Mute.d.ts +2 -0
- package/dist/components/Icon/icons/Mute.js +14 -0
- package/dist/components/Icon/icons/Mute.js.map +1 -0
- package/dist/components/Icon/icons/Paperclip.d.ts +2 -0
- package/dist/components/Icon/icons/Paperclip.js +14 -0
- package/dist/components/Icon/icons/Paperclip.js.map +1 -0
- package/dist/components/Icon/icons/PersonFill.d.ts +2 -0
- package/dist/components/Icon/icons/PersonFill.js +14 -0
- package/dist/components/Icon/icons/PersonFill.js.map +1 -0
- package/dist/components/Icon/icons/PlayFill.d.ts +2 -0
- package/dist/components/Icon/icons/PlayFill.js +14 -0
- package/dist/components/Icon/icons/PlayFill.js.map +1 -0
- package/dist/components/Icon/icons/SendFill.d.ts +2 -0
- package/dist/components/Icon/icons/SendFill.js +14 -0
- package/dist/components/Icon/icons/SendFill.js.map +1 -0
- package/dist/components/Icon/icons/StarBadgeFill.d.ts +2 -0
- package/dist/components/Icon/icons/StarBadgeFill.js +18 -0
- package/dist/components/Icon/icons/StarBadgeFill.js.map +1 -0
- package/dist/components/Icon/icons/ThumbsDown.d.ts +2 -0
- package/dist/components/Icon/icons/ThumbsDown.js +14 -0
- package/dist/components/Icon/icons/ThumbsDown.js.map +1 -0
- package/dist/components/Icon/icons/ThumbsUp.d.ts +2 -0
- package/dist/components/Icon/icons/ThumbsUp.js +14 -0
- package/dist/components/Icon/icons/ThumbsUp.js.map +1 -0
- package/dist/components/Icon/icons/Volume.d.ts +2 -0
- package/dist/components/Icon/icons/Volume.js +14 -0
- package/dist/components/Icon/icons/Volume.js.map +1 -0
- package/dist/components/Icon/icons/Xmark.d.ts +2 -0
- package/dist/components/Icon/icons/Xmark.js +14 -0
- package/dist/components/Icon/icons/Xmark.js.map +1 -0
- package/dist/components/Icon/icons/XmarkCircle.d.ts +2 -0
- package/dist/components/Icon/icons/XmarkCircle.js +14 -0
- package/dist/components/Icon/icons/XmarkCircle.js.map +1 -0
- package/dist/components/Icon/icons/index.d.ts +34 -0
- package/dist/components/Icon/index.d.ts +3 -0
- package/dist/components/IconButton/IconButton.css.d.ts +54 -0
- package/dist/components/IconButton/IconButton.css.js +30 -0
- package/dist/components/IconButton/IconButton.css.js.map +1 -0
- package/dist/components/IconButton/IconButton.d.ts +18 -0
- package/dist/components/IconButton/IconButton.js +25 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/IconButton/index.d.ts +2 -0
- package/dist/components/Image/Image.css.d.ts +1 -0
- package/dist/components/Image/Image.css.js +7 -0
- package/dist/components/Image/Image.css.js.map +1 -0
- package/dist/components/Image/Image.d.ts +16 -0
- package/dist/components/Image/Image.js +44 -0
- package/dist/components/Image/Image.js.map +1 -0
- package/dist/components/Image/index.d.ts +2 -0
- package/dist/components/Input/Input.context.d.ts +12 -0
- package/dist/components/Input/Input.context.js +11 -0
- package/dist/components/Input/Input.context.js.map +1 -0
- package/dist/components/Input/Input.css.d.ts +11 -0
- package/dist/components/Input/Input.css.js +16 -0
- package/dist/components/Input/Input.css.js.map +1 -0
- package/dist/components/Input/Input.d.ts +22 -0
- package/dist/components/Input/Input.js +20 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/InputButton.d.ts +12 -0
- package/dist/components/Input/InputButton.js +21 -0
- package/dist/components/Input/InputButton.js.map +1 -0
- package/dist/components/Input/InputControl.d.ts +8 -0
- package/dist/components/Input/InputControl.js +15 -0
- package/dist/components/Input/InputControl.js.map +1 -0
- package/dist/components/Input/InputField.d.ts +9 -0
- package/dist/components/Input/InputField.js +23 -0
- package/dist/components/Input/InputField.js.map +1 -0
- package/dist/components/Input/InputHelperText.d.ts +8 -0
- package/dist/components/Input/InputHelperText.js +20 -0
- package/dist/components/Input/InputHelperText.js.map +1 -0
- package/dist/components/Input/InputLabel.d.ts +8 -0
- package/dist/components/Input/InputLabel.js +16 -0
- package/dist/components/Input/InputLabel.js.map +1 -0
- package/dist/components/Input/InputRoot.d.ts +11 -0
- package/dist/components/Input/InputRoot.js +30 -0
- package/dist/components/Input/InputRoot.js.map +1 -0
- package/dist/components/Input/InputTextArea.d.ts +15 -0
- package/dist/components/Input/InputTextArea.js +39 -0
- package/dist/components/Input/InputTextArea.js.map +1 -0
- package/dist/components/Input/index.d.ts +2 -0
- package/dist/components/Link/Link.css.d.ts +8 -0
- package/dist/components/Link/Link.css.js +16 -0
- package/dist/components/Link/Link.css.js.map +1 -0
- package/dist/components/Link/Link.d.ts +12 -0
- package/dist/components/Link/Link.js +24 -0
- package/dist/components/Link/Link.js.map +1 -0
- package/dist/components/Link/index.d.ts +2 -0
- package/dist/components/MenuItem/Menu.d.ts +14 -0
- package/dist/components/MenuItem/Menu.js +15 -0
- package/dist/components/MenuItem/Menu.js.map +1 -0
- package/dist/components/MenuItem/MenuItem.css.d.ts +4 -0
- package/dist/components/MenuItem/MenuItem.css.js +7 -0
- package/dist/components/MenuItem/MenuItem.css.js.map +1 -0
- package/dist/components/MenuItem/MenuItem.d.ts +10 -0
- package/dist/components/MenuItem/MenuItem.js +12 -0
- package/dist/components/MenuItem/MenuItem.js.map +1 -0
- package/dist/components/MenuItem/MenuItemLeading.d.ts +11 -0
- package/dist/components/MenuItem/MenuItemLeading.js +17 -0
- package/dist/components/MenuItem/MenuItemLeading.js.map +1 -0
- package/dist/components/MenuItem/MenuItemRoot.d.ts +18 -0
- package/dist/components/MenuItem/MenuItemRoot.js +15 -0
- package/dist/components/MenuItem/MenuItemRoot.js.map +1 -0
- package/dist/components/MenuItem/MenuItemTrailing.d.ts +14 -0
- package/dist/components/MenuItem/MenuItemTrailing.js +17 -0
- package/dist/components/MenuItem/MenuItemTrailing.js.map +1 -0
- package/dist/components/MenuItem/index.d.ts +4 -0
- package/dist/components/Overlay/overlay.css.d.ts +2 -0
- package/dist/components/PictureMessage/PictureMessage.css.d.ts +27 -0
- package/dist/components/PictureMessage/PictureMessage.css.js +25 -0
- package/dist/components/PictureMessage/PictureMessage.css.js.map +1 -0
- package/dist/components/PictureMessage/PictureMessage.d.ts +37 -0
- package/dist/components/PictureMessage/PictureMessage.js +34 -0
- package/dist/components/PictureMessage/PictureMessage.js.map +1 -0
- package/dist/components/PictureMessage/index.d.ts +1 -0
- package/dist/components/PillButton/PillButton.css.d.ts +10 -0
- package/dist/components/PillButton/PillButton.css.js +16 -0
- package/dist/components/PillButton/PillButton.css.js.map +1 -0
- package/dist/components/PillButton/PillButton.d.ts +16 -0
- package/dist/components/PillButton/PillButton.js +18 -0
- package/dist/components/PillButton/PillButton.js.map +1 -0
- package/dist/components/PillButton/index.d.ts +2 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.css.d.ts +1 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.css.js +7 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.css.js.map +1 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.d.ts +19 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.js +16 -0
- package/dist/components/ProactiveMessage/ProactiveMessage.js.map +1 -0
- package/dist/components/ProactiveMessage/index.d.ts +2 -0
- package/dist/components/Radio/Radio.css.d.ts +5 -0
- package/dist/components/Radio/Radio.css.js +7 -0
- package/dist/components/Radio/Radio.css.js.map +1 -0
- package/dist/components/Radio/Radio.d.ts +15 -0
- package/dist/components/Radio/Radio.js +23 -0
- package/dist/components/Radio/Radio.js.map +1 -0
- package/dist/components/Radio/RadioGroup.d.ts +15 -0
- package/dist/components/Radio/RadioGroup.js +16 -0
- package/dist/components/Radio/RadioGroup.js.map +1 -0
- package/dist/components/Radio/index.d.ts +4 -0
- package/dist/components/ScrollMarker/ScrollMarker.css.d.ts +24 -0
- package/dist/components/ScrollMarker/ScrollMarker.css.js +25 -0
- package/dist/components/ScrollMarker/ScrollMarker.css.js.map +1 -0
- package/dist/components/ScrollMarker/ScrollMarker.d.ts +26 -0
- package/dist/components/ScrollMarker/ScrollMarker.js +29 -0
- package/dist/components/ScrollMarker/ScrollMarker.js.map +1 -0
- package/dist/components/ScrollMarker/index.d.ts +1 -0
- package/dist/components/Sheet/Sheet.css.d.ts +8 -0
- package/dist/components/Sheet/Sheet.css.js +7 -0
- package/dist/components/Sheet/Sheet.css.js.map +1 -0
- package/dist/components/Sheet/Sheet.d.ts +14 -0
- package/dist/components/Sheet/Sheet.js +14 -0
- package/dist/components/Sheet/Sheet.js.map +1 -0
- package/dist/components/Sheet/SheetActions.d.ts +7 -0
- package/dist/components/Sheet/SheetActions.js +14 -0
- package/dist/components/Sheet/SheetActions.js.map +1 -0
- package/dist/components/Sheet/SheetBody.d.ts +11 -0
- package/dist/components/Sheet/SheetBody.js +20 -0
- package/dist/components/Sheet/SheetBody.js.map +1 -0
- package/dist/components/Sheet/SheetHeader.d.ts +17 -0
- package/dist/components/Sheet/SheetHeader.js +44 -0
- package/dist/components/Sheet/SheetHeader.js.map +1 -0
- package/dist/components/Sheet/SheetRoot.d.ts +9 -0
- package/dist/components/Sheet/SheetRoot.js +16 -0
- package/dist/components/Sheet/SheetRoot.js.map +1 -0
- package/dist/components/Sheet/index.d.ts +4 -0
- package/dist/components/SheetOverlay/SheetOverlay.css.d.ts +3 -0
- package/dist/components/SheetOverlay/SheetOverlay.css.js +8 -0
- package/dist/components/SheetOverlay/SheetOverlay.css.js.map +1 -0
- package/dist/components/SheetOverlay/SheetOverlay.d.ts +24 -0
- package/dist/components/SheetOverlay/SheetOverlay.js +28 -0
- package/dist/components/SheetOverlay/SheetOverlay.js.map +1 -0
- package/dist/components/SheetOverlay/index.d.ts +1 -0
- package/dist/components/Spinner/Spinner.css.d.ts +22 -0
- package/dist/components/Spinner/Spinner.css.js +25 -0
- package/dist/components/Spinner/Spinner.css.js.map +1 -0
- package/dist/components/Spinner/Spinner.d.ts +19 -0
- package/dist/components/Spinner/Spinner.js +24 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/index.d.ts +2 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.css.d.ts +3 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.css.js +7 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.css.js.map +1 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.d.ts +39 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.js +51 -0
- package/dist/components/Survey/SurveyRating/SurveyRating.js.map +1 -0
- package/dist/components/Survey/SurveyRating/index.d.ts +1 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.css.d.ts +1 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.css.js +7 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.css.js.map +1 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.d.ts +40 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.js +38 -0
- package/dist/components/Survey/SurveySelect/SurveySelect.js.map +1 -0
- package/dist/components/Survey/SurveySelect/index.d.ts +1 -0
- package/dist/components/Survey/index.d.ts +2 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.css.d.ts +6 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.css.js +7 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.css.js.map +1 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.d.ts +36 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.js +44 -0
- package/dist/components/ThinkingShimmer/ThinkingShimmer.js.map +1 -0
- package/dist/components/ThinkingShimmer/index.d.ts +2 -0
- package/dist/components/ToastNotification/ToastNotification.css.d.ts +30 -0
- package/dist/components/ToastNotification/ToastNotification.css.js +25 -0
- package/dist/components/ToastNotification/ToastNotification.css.js.map +1 -0
- package/dist/components/ToastNotification/ToastNotification.d.ts +36 -0
- package/dist/components/ToastNotification/ToastNotification.js +31 -0
- package/dist/components/ToastNotification/ToastNotification.js.map +1 -0
- package/dist/components/ToastNotification/index.d.ts +2 -0
- package/dist/components/Toggle/Toggle.css.d.ts +14 -0
- package/dist/components/Toggle/Toggle.css.js +7 -0
- package/dist/components/Toggle/Toggle.css.js.map +1 -0
- package/dist/components/Toggle/Toggle.d.ts +18 -0
- package/dist/components/Toggle/Toggle.js +19 -0
- package/dist/components/Toggle/Toggle.js.map +1 -0
- package/dist/components/Toggle/index.d.ts +2 -0
- package/dist/components/Tooltip/Tooltip.css.d.ts +3 -0
- package/dist/components/Tooltip/Tooltip.css.js +7 -0
- package/dist/components/Tooltip/Tooltip.css.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +19 -0
- package/dist/components/Tooltip/Tooltip.js +32 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/index.d.ts +2 -0
- package/dist/components/TypingIndicator/TypingIndicator.css.d.ts +3 -0
- package/dist/components/TypingIndicator/TypingIndicator.css.js +7 -0
- package/dist/components/TypingIndicator/TypingIndicator.css.js.map +1 -0
- package/dist/components/TypingIndicator/TypingIndicator.d.ts +27 -0
- package/dist/components/TypingIndicator/TypingIndicator.js +34 -0
- package/dist/components/TypingIndicator/TypingIndicator.js.map +1 -0
- package/dist/components/TypingIndicator/index.d.ts +2 -0
- package/dist/components/UserMessage/UserMessage.css.d.ts +7 -0
- package/dist/components/UserMessage/UserMessage.css.js +7 -0
- package/dist/components/UserMessage/UserMessage.css.js.map +1 -0
- package/dist/components/UserMessage/UserMessage.d.ts +22 -0
- package/dist/components/UserMessage/UserMessage.js +45 -0
- package/dist/components/UserMessage/UserMessage.js.map +1 -0
- package/dist/components/UserMessage/index.d.ts +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/usePrefersReducedMotion.d.ts +3 -0
- package/dist/hooks/usePrefersReducedMotion.js +20 -0
- package/dist/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/hooks/useSubmitOnEnter.d.ts +7 -0
- package/dist/hooks/useSubmitOnEnter.js +11 -0
- package/dist/hooks/useSubmitOnEnter.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +75 -0
- package/dist/runtime/LovelaceProvider.d.ts +24 -0
- package/dist/runtime/LovelaceProvider.js +45 -0
- package/dist/runtime/LovelaceProvider.js.map +1 -0
- package/dist/runtime/branding.d.ts +133 -0
- package/dist/runtime/branding.js +92 -0
- package/dist/runtime/branding.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/style.css +2 -0
- package/dist/tokens/generated/tokens.d.ts +4 -0
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/index.js +2 -0
- package/dist/tokens/tokens.d.ts +8 -0
- package/dist/tokens/tokens.js +6 -0
- package/dist/tokens/tokens.js.map +1 -0
- package/dist/tokens.css +316 -0
- package/dist/utils/cx.d.ts +2 -0
- package/dist/utils/cx.js +6 -0
- package/dist/utils/cx.js.map +1 -0
- package/dist/vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js +80 -0
- package/dist/vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { cx as e } from "../../utils/cx.js";
|
|
2
|
+
import { sheetDialog as t, sheetModal as n, sheetScrim as r } from "./SheetOverlay.css.js";
|
|
3
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
4
|
+
import { useLocale as a } from "react-aria";
|
|
5
|
+
import { Dialog as o, Modal as s, ModalOverlay as c } from "react-aria-components";
|
|
6
|
+
//#region src/components/SheetOverlay/SheetOverlay.tsx
|
|
7
|
+
function l({ isOpen: l, onOpenChange: u, isDismissable: d = !0, "aria-label": f, className: p, children: m }) {
|
|
8
|
+
let { direction: h } = a();
|
|
9
|
+
return /* @__PURE__ */ i(c, {
|
|
10
|
+
isOpen: l,
|
|
11
|
+
onOpenChange: u,
|
|
12
|
+
isDismissable: d,
|
|
13
|
+
className: r,
|
|
14
|
+
dir: h,
|
|
15
|
+
children: /* @__PURE__ */ i(s, {
|
|
16
|
+
className: n,
|
|
17
|
+
children: /* @__PURE__ */ i(o, {
|
|
18
|
+
"aria-label": f,
|
|
19
|
+
className: e(t, p),
|
|
20
|
+
children: m
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { l as SheetOverlay };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=SheetOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SheetOverlay.js","names":[],"sources":["../../../src/components/SheetOverlay/SheetOverlay.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useLocale } from \"react-aria\";\nimport {\n\tDialog as AriaDialog,\n\tModal,\n\tModalOverlay,\n} from \"react-aria-components\";\nimport { cx } from \"../../utils/cx.js\";\nimport { sheetDialog, sheetModal, sheetScrim } from \"./SheetOverlay.css.js\";\n\nexport interface SheetOverlayProps {\n\t/** Whether the sheet is open. */\n\tisOpen: boolean;\n\t/** Called with the next open state on dismiss (scrim tap, Escape) or programmatic close. */\n\tonOpenChange: (isOpen: boolean) => void;\n\t/** Dismiss on scrim tap. Escape always cancels (RAC default). Defaults to `true`. */\n\tisDismissable?: boolean;\n\t/** Accessible name fallback when the child has no `Sheet.Header` title. */\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\tchildren: ReactNode;\n}\n\n/**\n * Modal bottom-sheet presentation: dark scrim, focus-trap, dismiss-on-tap/Escape,\n * bottom-anchored, rounded-top corners, slide-up. Wraps arbitrary children\n * (typically a `Sheet`). For a full-window surface use `FullscreenOverlay`; for a\n * centered dialog `Dialog`; for a non-dimming bottom bubble `BubbleOverlay`.\n *\n * Give the dialog an accessible name via either a `Sheet.Header` title or the\n * `aria-label` prop — with neither (e.g. an actions-only Confirm sheet) RAC\n * emits a missing-name warning.\n */\nexport function SheetOverlay({\n\tisOpen,\n\tonOpenChange,\n\tisDismissable = true,\n\t\"aria-label\": ariaLabel,\n\tclassName,\n\tchildren,\n}: SheetOverlayProps) {\n\t// Stated, not inherited: this renders through a portal, so its direction must\n\t// not depend on where the portal lands. See the portalled-surface scenario\n\t// under the RTL requirement in openspec/specs/accessibility/spec.md.\n\tconst { direction } = useLocale();\n\n\treturn (\n\t\t<ModalOverlay\n\t\t\tisOpen={isOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t\tisDismissable={isDismissable}\n\t\t\tclassName={sheetScrim}\n\t\t\tdir={direction}\n\t\t>\n\t\t\t<Modal className={sheetModal}>\n\t\t\t\t<AriaDialog\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tclassName={cx(sheetDialog, className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</AriaDialog>\n\t\t\t</Modal>\n\t\t</ModalOverlay>\n\t);\n}\n"],"mappings":";;;;;;AAiCA,SAAgB,EAAa,EAC5B,WACA,iBACA,mBAAgB,IAChB,cAAc,GACd,cACA,eACqB;CAIrB,IAAM,EAAE,iBAAc,GAAW;AAEjC,QACC,kBAAC,GAAD;EACS;EACM;EACC;EACf,WAAW;EACX,KAAK;YAEL,kBAAC,GAAD;GAAO,WAAW;aACjB,kBAAC,GAAD;IACC,cAAY;IACZ,WAAW,EAAG,GAAa,EAAU;IAEpC;IACW,CAAA;GACN,CAAA;EACM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SheetOverlay, type SheetOverlayProps } from "./SheetOverlay.js";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const spinner: import("@vanilla-extract/recipes").RuntimeFn<{
|
|
2
|
+
size: {
|
|
3
|
+
sm: {
|
|
4
|
+
width: "16px";
|
|
5
|
+
height: "16px";
|
|
6
|
+
borderWidth: "2px";
|
|
7
|
+
};
|
|
8
|
+
lg: {
|
|
9
|
+
width: "32px";
|
|
10
|
+
height: "32px";
|
|
11
|
+
borderWidth: "3px";
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
background: {
|
|
15
|
+
default: {
|
|
16
|
+
borderTopColor: "var(--lovelace-color-neutral-0)" | "var(--lovelace-color-neutral-50)" | "var(--lovelace-color-neutral-100)" | "var(--lovelace-color-neutral-200)" | "var(--lovelace-color-neutral-300)" | "var(--lovelace-color-neutral-400)" | "var(--lovelace-color-neutral-500)" | "var(--lovelace-color-neutral-600)" | "var(--lovelace-color-neutral-700)" | "var(--lovelace-color-neutral-800)" | "var(--lovelace-color-neutral-900)" | "var(--lovelace-color-red-50)" | "var(--lovelace-color-orange-50)" | "var(--lovelace-color-green-50)" | "var(--lovelace-color-green-100)" | "var(--lovelace-color-green-200)" | "var(--lovelace-color-green-300)" | "var(--lovelace-color-green-400)" | "var(--lovelace-color-green-500)" | "var(--lovelace-color-green-600)" | "var(--lovelace-color-green-700)" | "var(--lovelace-color-green-800)" | "var(--lovelace-color-green-900)" | "var(--lovelace-color-orange-100)" | "var(--lovelace-color-orange-200)" | "var(--lovelace-color-orange-300)" | "var(--lovelace-color-orange-400)" | "var(--lovelace-color-orange-500)" | "var(--lovelace-color-orange-600)" | "var(--lovelace-color-orange-700)" | "var(--lovelace-color-orange-800)" | "var(--lovelace-color-orange-900)" | "var(--lovelace-color-red-100)" | "var(--lovelace-color-red-200)" | "var(--lovelace-color-red-300)" | "var(--lovelace-color-red-400)" | "var(--lovelace-color-red-500)" | "var(--lovelace-color-red-600)" | "var(--lovelace-color-red-700)" | "var(--lovelace-color-red-800)" | "var(--lovelace-color-red-900)" | "var(--lovelace-spacing-4)" | "var(--lovelace-spacing-8)" | "var(--lovelace-spacing-12)" | "var(--lovelace-spacing-16)" | "var(--lovelace-spacing-20)" | "var(--lovelace-spacing-24)" | "var(--lovelace-spacing-32)" | "var(--lovelace-spacing-40)" | "var(--lovelace-spacing-48)" | "var(--lovelace-font-weight-400)" | "var(--lovelace-font-weight-500)" | "var(--lovelace-font-weight-600)" | "var(--lovelace-color-blue-50)" | "var(--lovelace-color-blue-100)" | "var(--lovelace-color-blue-200)" | "var(--lovelace-color-blue-300)" | "var(--lovelace-color-blue-400)" | "var(--lovelace-color-blue-500)" | "var(--lovelace-color-blue-600)" | "var(--lovelace-color-blue-700)" | "var(--lovelace-color-blue-800)" | "var(--lovelace-color-blue-900)" | "var(--lovelace-font-size-12)" | "var(--lovelace-font-size-14)" | "var(--lovelace-font-size-16)" | "var(--lovelace-font-size-18)" | "var(--lovelace-font-size-20)" | "var(--lovelace-font-size-22)" | "var(--lovelace-font-size-24)" | "var(--lovelace-font-size-26)" | "var(--lovelace-font-size-28)" | "var(--lovelace-font-line-height-16)" | "var(--lovelace-font-line-height-18)" | "var(--lovelace-font-line-height-22)" | "var(--lovelace-font-line-height-24)" | "var(--lovelace-font-line-height-26)" | "var(--lovelace-font-line-height-28)" | "var(--lovelace-font-line-height-30)" | "var(--lovelace-font-line-height-32)" | "var(--lovelace-font-line-height-34)" | "var(--lovelace-border-radius-0)" | "var(--lovelace-p-border-radius-6)" | "var(--lovelace-p-border-radius-10)" | "var(--lovelace-p-border-radius-14)" | "var(--lovelace-p-border-radius-20)" | "var(--lovelace-p-border-radius-24)" | "var(--lovelace-border-radius-999)" | "var(--lovelace-font-paragraph-spacing-4)" | "var(--lovelace-font-paragraph-spacing-6)" | "var(--lovelace-font-paragraph-spacing-8)" | "var(--lovelace-font-paragraph-spacing-10)" | "var(--lovelace-font-paragraph-spacing-12)" | "var(--lovelace-color-accent-50)" | "var(--lovelace-color-accent-100)" | "var(--lovelace-color-accent-200)" | "var(--lovelace-color-accent-300)" | "var(--lovelace-color-accent-400)" | "var(--lovelace-color-accent-500)" | "var(--lovelace-color-accent-600)" | "var(--lovelace-color-accent-700)" | "var(--lovelace-color-accent-800)" | "var(--lovelace-color-accent-900)" | "var(--lovelace-font-family-sans-serif)" | "var(--lovelace-font-family-mono)" | "var(--lovelace-border-width-1)" | "var(--lovelace-border-width-2)" | "var(--lovelace-dimension-16)" | "var(--lovelace-dimension-20)" | "var(--lovelace-dimension-22)" | "var(--lovelace-dimension-24)" | "var(--lovelace-dimension-32)" | "var(--lovelace-dimension-36)" | "var(--lovelace-color-content-default)" | "var(--lovelace-color-content-secondary)" | "var(--lovelace-color-content-secondary-inverse)" | "var(--lovelace-color-content-disabled)" | "var(--lovelace-color-content-inverse)" | "var(--lovelace-color-background-default)" | "var(--lovelace-color-background-secondary)" | "var(--lovelace-color-background-tertiary)" | "var(--lovelace-color-background-quaternary)" | "var(--lovelace-color-background-disabled)" | "var(--lovelace-color-background-inverse)" | "var(--lovelace-color-background-neutral-overlay)" | "var(--lovelace-color-border-default)" | "var(--lovelace-color-border-medium)" | "var(--lovelace-color-border-strong)" | "var(--lovelace-color-content-link)" | "var(--lovelace-color-background-destructive)" | "var(--lovelace-color-content-destructive)" | "var(--lovelace-color-background-destructive-light)" | "var(--lovelace-color-border-destructive)" | "var(--lovelace-color-content-on-destructive)" | "var(--lovelace-color-content-warning)" | "var(--lovelace-color-background-warning)" | "var(--lovelace-color-background-warning-light)" | "var(--lovelace-color-border-warning)" | "var(--lovelace-color-content-success)" | "var(--lovelace-color-background-success)" | "var(--lovelace-color-background-success-light)" | "var(--lovelace-color-border-success)" | "var(--lovelace-color-content-accent)" | "var(--lovelace-color-content-on-accent)" | "var(--lovelace-color-content-on-scrim)" | "var(--lovelace-color-background-accent)" | "var(--lovelace-color-background-highlight-overlay)" | "var(--lovelace-color-border-focus)" | "var(--lovelace-color-border-accent)" | "var(--lovelace-color-border-highlight)" | "var(--lovelace-font-weight-regular)" | "var(--lovelace-font-size-caption)" | "var(--lovelace-line-height-caption)" | "var(--lovelace-paragraph-spacing-caption)" | "var(--lovelace-paragraph-spacing-body)" | "var(--lovelace-paragraph-spacing-title)" | "var(--lovelace-line-height-body)" | "var(--lovelace-line-height-title-small)" | "var(--lovelace-line-height-title-large)" | "var(--lovelace-font-size-body)" | "var(--lovelace-font-size-title-small)" | "var(--lovelace-font-size-title-large)" | "var(--lovelace-font-weight-medium)" | "var(--lovelace-font-weight-semi-bold)" | "var(--lovelace-font-family-body)" | "var(--lovelace-font-family-heading)" | "var(--lovelace-font-family-code)" | "var(--lovelace-border-radius-none)" | "var(--lovelace-border-radius-6)" | "var(--lovelace-border-radius-10)" | "var(--lovelace-border-radius-14)" | "var(--lovelace-border-radius-20)" | "var(--lovelace-border-radius-24)" | "var(--lovelace-border-radius-full)" | "var(--lovelace-padding-4)" | "var(--lovelace-padding-8)" | "var(--lovelace-padding-12)" | "var(--lovelace-gap-4)" | "var(--lovelace-padding-16)" | "var(--lovelace-gap-8)" | "var(--lovelace-gap-12)" | "var(--lovelace-gap-16)" | "var(--lovelace-gap-20)" | "var(--lovelace-padding-20)" | "var(--lovelace-border-width-default)" | "var(--lovelace-border-width-focus)" | "var(--lovelace-opacity-state-hover)" | "var(--lovelace-opacity-state-focus)" | "var(--lovelace-opacity-state-pressed)" | "var(--lovelace-icon-size-sm)" | "var(--lovelace-icon-size-md)" | "var(--lovelace-icon-size-control)" | "var(--lovelace-icon-size-lg)" | "var(--lovelace-easing-standard)" | "var(--lovelace-easing-emphasized)" | "var(--lovelace-easing-decelerate)" | "var(--lovelace-easing-accelerate)" | "var(--lovelace-duration-fast)" | "var(--lovelace-duration-medium)" | "var(--lovelace-duration-slow)" | "var(--lovelace-message-user-background)" | "var(--lovelace-message-user-content)" | "var(--lovelace-button-primary-background)" | "var(--lovelace-button-primary-content)" | "var(--lovelace-header-background)" | "var(--lovelace-pill-content-primary)" | "var(--lovelace-header-content)" | "var(--lovelace-chip-background-selected)" | "var(--lovelace-chatfab-background)" | "var(--lovelace-chatfab-content)" | "var(--lovelace-composer-background)" | "var(--lovelace-composer-border-default)" | "var(--lovelace-composer-content-default)" | "var(--lovelace-composer-content-secondary)" | "var(--lovelace-composer-border-focus)" | "var(--lovelace-composer-border-active)" | "var(--lovelace-avatar-background)" | "var(--lovelace-avatar-content)" | "var(--lovelace-scrollmarker-background)" | "var(--lovelace-scrollmarker-content)" | "var(--lovelace-send-button-background)" | "var(--lovelace-chat-background)" | "var(--lovelace-border-radius-button)" | "var(--lovelace-border-radius-message)" | "var(--lovelace-border-radius-input)" | "var(--lovelace-border-radius-composer)" | "var(--lovelace-border-radius-avatar)" | "var(--lovelace-border-radius-pill)" | "var(--lovelace-border-radius-media-preview)" | "var(--lovelace-border-radius-container)";
|
|
17
|
+
};
|
|
18
|
+
accent: {
|
|
19
|
+
borderTopColor: "var(--lovelace-color-neutral-0)" | "var(--lovelace-color-neutral-50)" | "var(--lovelace-color-neutral-100)" | "var(--lovelace-color-neutral-200)" | "var(--lovelace-color-neutral-300)" | "var(--lovelace-color-neutral-400)" | "var(--lovelace-color-neutral-500)" | "var(--lovelace-color-neutral-600)" | "var(--lovelace-color-neutral-700)" | "var(--lovelace-color-neutral-800)" | "var(--lovelace-color-neutral-900)" | "var(--lovelace-color-red-50)" | "var(--lovelace-color-orange-50)" | "var(--lovelace-color-green-50)" | "var(--lovelace-color-green-100)" | "var(--lovelace-color-green-200)" | "var(--lovelace-color-green-300)" | "var(--lovelace-color-green-400)" | "var(--lovelace-color-green-500)" | "var(--lovelace-color-green-600)" | "var(--lovelace-color-green-700)" | "var(--lovelace-color-green-800)" | "var(--lovelace-color-green-900)" | "var(--lovelace-color-orange-100)" | "var(--lovelace-color-orange-200)" | "var(--lovelace-color-orange-300)" | "var(--lovelace-color-orange-400)" | "var(--lovelace-color-orange-500)" | "var(--lovelace-color-orange-600)" | "var(--lovelace-color-orange-700)" | "var(--lovelace-color-orange-800)" | "var(--lovelace-color-orange-900)" | "var(--lovelace-color-red-100)" | "var(--lovelace-color-red-200)" | "var(--lovelace-color-red-300)" | "var(--lovelace-color-red-400)" | "var(--lovelace-color-red-500)" | "var(--lovelace-color-red-600)" | "var(--lovelace-color-red-700)" | "var(--lovelace-color-red-800)" | "var(--lovelace-color-red-900)" | "var(--lovelace-spacing-4)" | "var(--lovelace-spacing-8)" | "var(--lovelace-spacing-12)" | "var(--lovelace-spacing-16)" | "var(--lovelace-spacing-20)" | "var(--lovelace-spacing-24)" | "var(--lovelace-spacing-32)" | "var(--lovelace-spacing-40)" | "var(--lovelace-spacing-48)" | "var(--lovelace-font-weight-400)" | "var(--lovelace-font-weight-500)" | "var(--lovelace-font-weight-600)" | "var(--lovelace-color-blue-50)" | "var(--lovelace-color-blue-100)" | "var(--lovelace-color-blue-200)" | "var(--lovelace-color-blue-300)" | "var(--lovelace-color-blue-400)" | "var(--lovelace-color-blue-500)" | "var(--lovelace-color-blue-600)" | "var(--lovelace-color-blue-700)" | "var(--lovelace-color-blue-800)" | "var(--lovelace-color-blue-900)" | "var(--lovelace-font-size-12)" | "var(--lovelace-font-size-14)" | "var(--lovelace-font-size-16)" | "var(--lovelace-font-size-18)" | "var(--lovelace-font-size-20)" | "var(--lovelace-font-size-22)" | "var(--lovelace-font-size-24)" | "var(--lovelace-font-size-26)" | "var(--lovelace-font-size-28)" | "var(--lovelace-font-line-height-16)" | "var(--lovelace-font-line-height-18)" | "var(--lovelace-font-line-height-22)" | "var(--lovelace-font-line-height-24)" | "var(--lovelace-font-line-height-26)" | "var(--lovelace-font-line-height-28)" | "var(--lovelace-font-line-height-30)" | "var(--lovelace-font-line-height-32)" | "var(--lovelace-font-line-height-34)" | "var(--lovelace-border-radius-0)" | "var(--lovelace-p-border-radius-6)" | "var(--lovelace-p-border-radius-10)" | "var(--lovelace-p-border-radius-14)" | "var(--lovelace-p-border-radius-20)" | "var(--lovelace-p-border-radius-24)" | "var(--lovelace-border-radius-999)" | "var(--lovelace-font-paragraph-spacing-4)" | "var(--lovelace-font-paragraph-spacing-6)" | "var(--lovelace-font-paragraph-spacing-8)" | "var(--lovelace-font-paragraph-spacing-10)" | "var(--lovelace-font-paragraph-spacing-12)" | "var(--lovelace-color-accent-50)" | "var(--lovelace-color-accent-100)" | "var(--lovelace-color-accent-200)" | "var(--lovelace-color-accent-300)" | "var(--lovelace-color-accent-400)" | "var(--lovelace-color-accent-500)" | "var(--lovelace-color-accent-600)" | "var(--lovelace-color-accent-700)" | "var(--lovelace-color-accent-800)" | "var(--lovelace-color-accent-900)" | "var(--lovelace-font-family-sans-serif)" | "var(--lovelace-font-family-mono)" | "var(--lovelace-border-width-1)" | "var(--lovelace-border-width-2)" | "var(--lovelace-dimension-16)" | "var(--lovelace-dimension-20)" | "var(--lovelace-dimension-22)" | "var(--lovelace-dimension-24)" | "var(--lovelace-dimension-32)" | "var(--lovelace-dimension-36)" | "var(--lovelace-color-content-default)" | "var(--lovelace-color-content-secondary)" | "var(--lovelace-color-content-secondary-inverse)" | "var(--lovelace-color-content-disabled)" | "var(--lovelace-color-content-inverse)" | "var(--lovelace-color-background-default)" | "var(--lovelace-color-background-secondary)" | "var(--lovelace-color-background-tertiary)" | "var(--lovelace-color-background-quaternary)" | "var(--lovelace-color-background-disabled)" | "var(--lovelace-color-background-inverse)" | "var(--lovelace-color-background-neutral-overlay)" | "var(--lovelace-color-border-default)" | "var(--lovelace-color-border-medium)" | "var(--lovelace-color-border-strong)" | "var(--lovelace-color-content-link)" | "var(--lovelace-color-background-destructive)" | "var(--lovelace-color-content-destructive)" | "var(--lovelace-color-background-destructive-light)" | "var(--lovelace-color-border-destructive)" | "var(--lovelace-color-content-on-destructive)" | "var(--lovelace-color-content-warning)" | "var(--lovelace-color-background-warning)" | "var(--lovelace-color-background-warning-light)" | "var(--lovelace-color-border-warning)" | "var(--lovelace-color-content-success)" | "var(--lovelace-color-background-success)" | "var(--lovelace-color-background-success-light)" | "var(--lovelace-color-border-success)" | "var(--lovelace-color-content-accent)" | "var(--lovelace-color-content-on-accent)" | "var(--lovelace-color-content-on-scrim)" | "var(--lovelace-color-background-accent)" | "var(--lovelace-color-background-highlight-overlay)" | "var(--lovelace-color-border-focus)" | "var(--lovelace-color-border-accent)" | "var(--lovelace-color-border-highlight)" | "var(--lovelace-font-weight-regular)" | "var(--lovelace-font-size-caption)" | "var(--lovelace-line-height-caption)" | "var(--lovelace-paragraph-spacing-caption)" | "var(--lovelace-paragraph-spacing-body)" | "var(--lovelace-paragraph-spacing-title)" | "var(--lovelace-line-height-body)" | "var(--lovelace-line-height-title-small)" | "var(--lovelace-line-height-title-large)" | "var(--lovelace-font-size-body)" | "var(--lovelace-font-size-title-small)" | "var(--lovelace-font-size-title-large)" | "var(--lovelace-font-weight-medium)" | "var(--lovelace-font-weight-semi-bold)" | "var(--lovelace-font-family-body)" | "var(--lovelace-font-family-heading)" | "var(--lovelace-font-family-code)" | "var(--lovelace-border-radius-none)" | "var(--lovelace-border-radius-6)" | "var(--lovelace-border-radius-10)" | "var(--lovelace-border-radius-14)" | "var(--lovelace-border-radius-20)" | "var(--lovelace-border-radius-24)" | "var(--lovelace-border-radius-full)" | "var(--lovelace-padding-4)" | "var(--lovelace-padding-8)" | "var(--lovelace-padding-12)" | "var(--lovelace-gap-4)" | "var(--lovelace-padding-16)" | "var(--lovelace-gap-8)" | "var(--lovelace-gap-12)" | "var(--lovelace-gap-16)" | "var(--lovelace-gap-20)" | "var(--lovelace-padding-20)" | "var(--lovelace-border-width-default)" | "var(--lovelace-border-width-focus)" | "var(--lovelace-opacity-state-hover)" | "var(--lovelace-opacity-state-focus)" | "var(--lovelace-opacity-state-pressed)" | "var(--lovelace-icon-size-sm)" | "var(--lovelace-icon-size-md)" | "var(--lovelace-icon-size-control)" | "var(--lovelace-icon-size-lg)" | "var(--lovelace-easing-standard)" | "var(--lovelace-easing-emphasized)" | "var(--lovelace-easing-decelerate)" | "var(--lovelace-easing-accelerate)" | "var(--lovelace-duration-fast)" | "var(--lovelace-duration-medium)" | "var(--lovelace-duration-slow)" | "var(--lovelace-message-user-background)" | "var(--lovelace-message-user-content)" | "var(--lovelace-button-primary-background)" | "var(--lovelace-button-primary-content)" | "var(--lovelace-header-background)" | "var(--lovelace-pill-content-primary)" | "var(--lovelace-header-content)" | "var(--lovelace-chip-background-selected)" | "var(--lovelace-chatfab-background)" | "var(--lovelace-chatfab-content)" | "var(--lovelace-composer-background)" | "var(--lovelace-composer-border-default)" | "var(--lovelace-composer-content-default)" | "var(--lovelace-composer-content-secondary)" | "var(--lovelace-composer-border-focus)" | "var(--lovelace-composer-border-active)" | "var(--lovelace-avatar-background)" | "var(--lovelace-avatar-content)" | "var(--lovelace-scrollmarker-background)" | "var(--lovelace-scrollmarker-content)" | "var(--lovelace-send-button-background)" | "var(--lovelace-chat-background)" | "var(--lovelace-border-radius-button)" | "var(--lovelace-border-radius-message)" | "var(--lovelace-border-radius-input)" | "var(--lovelace-border-radius-composer)" | "var(--lovelace-border-radius-avatar)" | "var(--lovelace-border-radius-pill)" | "var(--lovelace-border-radius-media-preview)" | "var(--lovelace-border-radius-container)";
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createRuntimeFn as e } from "../../vendor/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/components/Spinner/Spinner.css.ts
|
|
4
|
+
var t = e({
|
|
5
|
+
defaultClassName: "_2rqyvg1",
|
|
6
|
+
variantClassNames: {
|
|
7
|
+
size: {
|
|
8
|
+
sm: "_2rqyvg2",
|
|
9
|
+
lg: "_2rqyvg3"
|
|
10
|
+
},
|
|
11
|
+
background: {
|
|
12
|
+
default: "_2rqyvg4",
|
|
13
|
+
accent: "_2rqyvg5"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
size: "sm",
|
|
18
|
+
background: "default"
|
|
19
|
+
},
|
|
20
|
+
compoundVariants: []
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { t as spinner };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=Spinner.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.css.js","names":[],"sources":["../../../src/components/Spinner/Spinner.css.ts"],"sourcesContent":["import { keyframes } from \"@vanilla-extract/css\";\nimport { recipe } from \"@vanilla-extract/recipes\";\nimport { t } from \"../../tokens/index.js\";\n\nconst spin = keyframes({\n\tto: { transform: \"rotate(360deg)\" },\n});\n\n// A loading spinner communicates essential system status, so reduced motion\n// slows the animation rather than freezing it — a stationary spinner reads as\n// \"stuck\". Applied both natively (@media) and via the JS-reflected\n// data-reduced-motion attribute so the behavior is observable in tests.\nconst REDUCED_MOTION_DURATION = \"2.4s\";\n\nexport const spinner = recipe({\n\tbase: {\n\t\tdisplay: \"inline-block\",\n\t\tboxSizing: \"border-box\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: t(\"color-background-neutral-overlay\"),\n\t\tborderRadius: \"50%\",\n\t\tanimation: `${spin} 0.8s linear infinite`,\n\t\t\"@media\": {\n\t\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\t\tanimationDuration: REDUCED_MOTION_DURATION,\n\t\t\t},\n\t\t},\n\t\tselectors: {\n\t\t\t\"&[data-reduced-motion]\": {\n\t\t\t\tanimationDuration: REDUCED_MOTION_DURATION,\n\t\t\t},\n\t\t},\n\t},\n\tvariants: {\n\t\t// Hardcoded sizes and border widths are correct — Figma frame sizes.\n\t\tsize: {\n\t\t\tsm: { width: \"16px\", height: \"16px\", borderWidth: \"2px\" },\n\t\t\tlg: { width: \"32px\", height: \"32px\", borderWidth: \"3px\" },\n\t\t},\n\t\tbackground: {\n\t\t\tdefault: { borderTopColor: t(\"color-content-default\") },\n\t\t\taccent: { borderTopColor: t(\"color-content-on-accent\") },\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"sm\",\n\t\tbackground: \"default\",\n\t},\n});\n"],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CSSProperties, Ref } from "react";
|
|
2
|
+
export type SpinnerSize = "sm" | "lg";
|
|
3
|
+
export type SpinnerBackground = "default" | "accent";
|
|
4
|
+
export interface SpinnerProps {
|
|
5
|
+
/** `sm` (16px) for inline / in-button, `lg` (32px) for region / page. */
|
|
6
|
+
size?: SpinnerSize;
|
|
7
|
+
/**
|
|
8
|
+
* The background the spinner sits on. `default` adapts to light/dark mode;
|
|
9
|
+
* `accent` is for filled-accent (brand-colored) surfaces where the arc must
|
|
10
|
+
* stay white in both themes, since the accent color does not invert.
|
|
11
|
+
*/
|
|
12
|
+
background?: SpinnerBackground;
|
|
13
|
+
/** Accessible name announced by assistive tech. */
|
|
14
|
+
label?: string;
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: CSSProperties;
|
|
17
|
+
ref?: Ref<HTMLDivElement>;
|
|
18
|
+
}
|
|
19
|
+
export declare function Spinner({ size, background, label, className, ...rest }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { cx as e } from "../../utils/cx.js";
|
|
2
|
+
import { usePrefersReducedMotion as t } from "../../hooks/usePrefersReducedMotion.js";
|
|
3
|
+
import { spinner as n } from "./Spinner.css.js";
|
|
4
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/Spinner/Spinner.tsx
|
|
6
|
+
function i({ size: i = "sm", background: a = "default", label: o = "Loading", className: s, ...c }) {
|
|
7
|
+
let l = t();
|
|
8
|
+
return /* @__PURE__ */ r("div", {
|
|
9
|
+
...c,
|
|
10
|
+
role: "status",
|
|
11
|
+
"aria-label": o,
|
|
12
|
+
"data-size": i,
|
|
13
|
+
"data-background": a,
|
|
14
|
+
"data-reduced-motion": l || void 0,
|
|
15
|
+
className: e(n({
|
|
16
|
+
size: i,
|
|
17
|
+
background: a
|
|
18
|
+
}), s)
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { i as Spinner };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","names":[],"sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import type { CSSProperties, Ref } from \"react\";\nimport { usePrefersReducedMotion } from \"../../hooks/index.js\";\nimport { cx } from \"../../utils/cx.js\";\nimport { spinner } from \"./Spinner.css.js\";\n\nexport type SpinnerSize = \"sm\" | \"lg\";\nexport type SpinnerBackground = \"default\" | \"accent\";\n\nexport interface SpinnerProps {\n\t/** `sm` (16px) for inline / in-button, `lg` (32px) for region / page. */\n\tsize?: SpinnerSize;\n\t/**\n\t * The background the spinner sits on. `default` adapts to light/dark mode;\n\t * `accent` is for filled-accent (brand-colored) surfaces where the arc must\n\t * stay white in both themes, since the accent color does not invert.\n\t */\n\tbackground?: SpinnerBackground;\n\t/** Accessible name announced by assistive tech. */\n\tlabel?: string;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nexport function Spinner({\n\tsize = \"sm\",\n\tbackground = \"default\",\n\tlabel = \"Loading\",\n\tclassName,\n\t...rest\n}: SpinnerProps) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\treturn (\n\t\t<div\n\t\t\t{...rest}\n\t\t\trole=\"status\"\n\t\t\taria-label={label}\n\t\t\tdata-size={size}\n\t\t\tdata-background={background}\n\t\t\tdata-reduced-motion={reducedMotion || undefined}\n\t\t\tclassName={cx(spinner({ size, background }), className)}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;AAwBA,SAAgB,EAAQ,EACvB,UAAO,MACP,gBAAa,WACb,WAAQ,WACR,cACA,GAAG,KACa;CAChB,IAAM,IAAgB,GAAyB;AAC/C,QACC,kBAAC,OAAD;EACC,GAAI;EACJ,MAAK;EACL,cAAY;EACZ,aAAW;EACX,mBAAiB;EACjB,uBAAqB,KAAiB,KAAA;EACtC,WAAW,EAAG,EAAQ;GAAE;GAAM;GAAY,CAAC,EAAE,EAAU;EACtD,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
//#region src/components/Survey/SurveyRating/SurveyRating.css.ts
|
|
3
|
+
var e = "jzxfg70", t = "jzxfg71", n = "jzxfg72";
|
|
4
|
+
//#endregion
|
|
5
|
+
export { n as surveyRatingLabels, e as surveyRatingRoot, t as surveyRatingScale };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=SurveyRating.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurveyRating.css.js","names":[],"sources":["../../../../src/components/Survey/SurveyRating/SurveyRating.css.ts"],"sourcesContent":["import { style } from \"@vanilla-extract/css\";\nimport { t } from \"../../../tokens/index.js\";\n\nexport const surveyRatingRoot = style({\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: t(\"gap-8\"),\n\twidth: \"fit-content\",\n});\n\nexport const surveyRatingScale = style({\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: t(\"gap-8\"),\n\twidth: \"100%\",\n});\n\nexport const surveyRatingLabels = style({\n\tdisplay: \"flex\",\n\tjustifyContent: \"space-between\",\n\twidth: \"100%\",\n\tfontFamily: t(\"font-family-body\"),\n\tfontWeight: t(\"font-weight-regular\"),\n\tfontSize: t(\"font-size-caption\"),\n\tlineHeight: t(\"line-height-caption\"),\n\tcolor: t(\"color-content-secondary\"),\n});\n"],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode, Ref } from "react";
|
|
2
|
+
import type { Key } from "react-aria-components";
|
|
3
|
+
export interface SurveyRatingOption {
|
|
4
|
+
/** Numeric value shown on the chip (e.g. 1–5, 1–10). Rendered unless `icon` is set. */
|
|
5
|
+
value: number;
|
|
6
|
+
/** Stable identity used for selection. Defaults to the option's array index. */
|
|
7
|
+
key?: Key;
|
|
8
|
+
/** Endpoint label to render as selected option. */
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Renders an icon chip (emoji, thumbs) instead of the numeric value. */
|
|
11
|
+
icon?: ReactNode;
|
|
12
|
+
/** Accessible name for the option. Overrides the numeric value / icon; icon options fall back to `label`. */
|
|
13
|
+
"aria-label"?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SurveyRatingProps {
|
|
16
|
+
/** Ordered rating options, lowest value first. */
|
|
17
|
+
options: SurveyRatingOption[];
|
|
18
|
+
/** Accessible name for the rating group. */
|
|
19
|
+
"aria-label": string;
|
|
20
|
+
/** Show the first and last options' labels as scale endpoints. */
|
|
21
|
+
showLabels?: boolean;
|
|
22
|
+
isDisabled?: boolean;
|
|
23
|
+
/** Selected option key (controlled). `null` means nothing selected. */
|
|
24
|
+
selectedKey?: Key | null;
|
|
25
|
+
/** Initially-selected option key (uncontrolled). */
|
|
26
|
+
defaultSelectedKey?: Key | null;
|
|
27
|
+
/** Fires with the newly-selected key and option, or `null` when deselected. */
|
|
28
|
+
onChange?: (key: Key | null, option: SurveyRatingOption | null) => void;
|
|
29
|
+
className?: string;
|
|
30
|
+
style?: CSSProperties;
|
|
31
|
+
ref?: Ref<HTMLDivElement>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Single-select rating scale for post-conversation surveys. Renders each option as a
|
|
35
|
+
* square {@link Chip}; a numeric `value` or an `icon` (emoji, thumbs) per option supports
|
|
36
|
+
* arbitrary scales. Exactly one option is selectable at a time, and tapping the selected
|
|
37
|
+
* option deselects it (React Aria toggle semantics).
|
|
38
|
+
*/
|
|
39
|
+
export declare function SurveyRating({ options, showLabels, isDisabled, selectedKey, defaultSelectedKey, onChange, className, style, ref, "aria-label": ariaLabel, }: SurveyRatingProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { cx as e } from "../../../utils/cx.js";
|
|
2
|
+
import { Chip as t } from "../../Chip/Chip.js";
|
|
3
|
+
import { surveyRatingRoot as n, surveyRatingScale as r } from "./SurveyRating.css.js";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
import { ToggleButtonGroup as o } from "react-aria-components";
|
|
6
|
+
//#region src/components/Survey/SurveyRating/SurveyRating.tsx
|
|
7
|
+
var s = (e, t) => e.key ?? t, c = 7, l = 48, u = 8, d = (e) => {
|
|
8
|
+
let t = Math.max(1, Math.ceil(e / c));
|
|
9
|
+
return Math.max(1, Math.ceil(e / t));
|
|
10
|
+
}, f = (e) => {
|
|
11
|
+
let t = d(e);
|
|
12
|
+
return t * l + (t - 1) * u;
|
|
13
|
+
};
|
|
14
|
+
function p({ options: c, showLabels: l = !1, isDisabled: u, selectedKey: d, defaultSelectedKey: p, onChange: m, className: h, style: g, ref: _, "aria-label": v }) {
|
|
15
|
+
let y = c[0]?.label, b = c[c.length - 1]?.label, x = (e) => {
|
|
16
|
+
let t = e.size ? [...e][0] : null, n = t == null ? null : c.find((e, n) => s(e, n) === t) ?? null;
|
|
17
|
+
m?.(t, n);
|
|
18
|
+
}, S = (e) => e == null ? [] : [e], C = d !== void 0;
|
|
19
|
+
return /* @__PURE__ */ a("div", {
|
|
20
|
+
ref: _,
|
|
21
|
+
className: e(n, h),
|
|
22
|
+
style: g,
|
|
23
|
+
children: [/* @__PURE__ */ i(o, {
|
|
24
|
+
selectionMode: "single",
|
|
25
|
+
isDisabled: u,
|
|
26
|
+
"aria-label": v,
|
|
27
|
+
className: r,
|
|
28
|
+
style: { maxWidth: f(c.length) },
|
|
29
|
+
onSelectionChange: x,
|
|
30
|
+
selectedKeys: C ? S(d) : void 0,
|
|
31
|
+
defaultSelectedKeys: C ? void 0 : S(p),
|
|
32
|
+
children: c.map((e, n) => {
|
|
33
|
+
let r = e.icon != null;
|
|
34
|
+
return /* @__PURE__ */ i(t, {
|
|
35
|
+
id: s(e, n),
|
|
36
|
+
variant: r ? "icon" : "number",
|
|
37
|
+
size: "lg",
|
|
38
|
+
"aria-label": e["aria-label"] ?? (r ? e.label : void 0),
|
|
39
|
+
children: e.icon ?? e.value
|
|
40
|
+
}, s(e, n));
|
|
41
|
+
})
|
|
42
|
+
}), l && (y != null || b != null) && /* @__PURE__ */ a("div", {
|
|
43
|
+
className: "jzxfg72",
|
|
44
|
+
children: [/* @__PURE__ */ i("span", { children: y }), /* @__PURE__ */ i("span", { children: b })]
|
|
45
|
+
})]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { p as SurveyRating };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=SurveyRating.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurveyRating.js","names":[],"sources":["../../../../src/components/Survey/SurveyRating/SurveyRating.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode, Ref } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport { ToggleButtonGroup } from \"react-aria-components\";\nimport { cx } from \"../../../utils/cx.js\";\nimport { Chip } from \"../../Chip/index.js\";\nimport {\n\tsurveyRatingLabels,\n\tsurveyRatingRoot,\n\tsurveyRatingScale,\n} from \"./SurveyRating.css.js\";\n\nexport interface SurveyRatingOption {\n\t/** Numeric value shown on the chip (e.g. 1–5, 1–10). Rendered unless `icon` is set. */\n\tvalue: number;\n\t/** Stable identity used for selection. Defaults to the option's array index. */\n\tkey?: Key;\n\t/** Endpoint label to render as selected option. */\n\tlabel?: string;\n\t/** Renders an icon chip (emoji, thumbs) instead of the numeric value. */\n\ticon?: ReactNode;\n\t/** Accessible name for the option. Overrides the numeric value / icon; icon options fall back to `label`. */\n\t\"aria-label\"?: string;\n}\n\nexport interface SurveyRatingProps {\n\t/** Ordered rating options, lowest value first. */\n\toptions: SurveyRatingOption[];\n\t/** Accessible name for the rating group. */\n\t\"aria-label\": string;\n\t/** Show the first and last options' labels as scale endpoints. */\n\tshowLabels?: boolean;\n\tisDisabled?: boolean;\n\t/** Selected option key (controlled). `null` means nothing selected. */\n\tselectedKey?: Key | null;\n\t/** Initially-selected option key (uncontrolled). */\n\tdefaultSelectedKey?: Key | null;\n\t/** Fires with the newly-selected key and option, or `null` when deselected. */\n\tonChange?: (key: Key | null, option: SurveyRatingOption | null) => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nconst keyFor = (option: SurveyRatingOption, index: number) =>\n\toption.key ?? index;\n\n/** Most chips allowed on one row before the scale wraps to a balanced grid. */\nconst MAX_PER_ROW = 7;\n\n/** Chip footprint at `size=\"lg\"` — mirrors Chip.css.ts's fixed 48px square + gap-8. */\nconst CHIP_SIZE_LG = 48;\nconst CHIP_GAP = 8;\n\n/** Column count that splits `count` options into evenly-sized rows (11 → 6, 10 → 5, 7 → 7). */\nconst balancedColumns = (count: number) => {\n\tconst rows = Math.max(1, Math.ceil(count / MAX_PER_ROW));\n\treturn Math.max(1, Math.ceil(count / rows));\n};\n\n/**\n * Width that wraps the scale at the balanced column count. A cap rather than a fixed\n * track count, so a container narrower than this wraps further instead of overflowing\n * (the 0-10 scale is 328px wide — wider than the 320px BubbleOverlay cap).\n */\nconst balancedMaxWidth = (count: number) => {\n\tconst cols = balancedColumns(count);\n\treturn cols * CHIP_SIZE_LG + (cols - 1) * CHIP_GAP;\n};\n\n/**\n * Single-select rating scale for post-conversation surveys. Renders each option as a\n * square {@link Chip}; a numeric `value` or an `icon` (emoji, thumbs) per option supports\n * arbitrary scales. Exactly one option is selectable at a time, and tapping the selected\n * option deselects it (React Aria toggle semantics).\n */\nexport function SurveyRating({\n\toptions,\n\tshowLabels = false,\n\tisDisabled,\n\tselectedKey,\n\tdefaultSelectedKey,\n\tonChange,\n\tclassName,\n\tstyle,\n\tref,\n\t\"aria-label\": ariaLabel,\n}: SurveyRatingProps) {\n\tconst lowLabel = options[0]?.label;\n\tconst highLabel = options[options.length - 1]?.label;\n\n\tconst handleSelectionChange = (keys: Set<Key>) => {\n\t\tconst key = keys.size ? [...keys][0] : null;\n\t\tconst option =\n\t\t\tkey == null\n\t\t\t\t? null\n\t\t\t\t: (options.find((o, i) => keyFor(o, i) === key) ?? null);\n\t\tonChange?.(key, option);\n\t};\n\n\t// Translate the single-key facade into RAC's Set-based controlled/uncontrolled props:\n\t// a defined `selectedKey` (including `null`) is controlled; otherwise it's uncontrolled.\n\tconst toKeys = (key: Key | null | undefined) => (key == null ? [] : [key]);\n\tconst isControlled = selectedKey !== undefined;\n\n\treturn (\n\t\t<div ref={ref} className={cx(surveyRatingRoot, className)} style={style}>\n\t\t\t<ToggleButtonGroup\n\t\t\t\tselectionMode=\"single\"\n\t\t\t\tisDisabled={isDisabled}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={surveyRatingScale}\n\t\t\t\tstyle={{ maxWidth: balancedMaxWidth(options.length) }}\n\t\t\t\tonSelectionChange={handleSelectionChange}\n\t\t\t\tselectedKeys={isControlled ? toKeys(selectedKey) : undefined}\n\t\t\t\tdefaultSelectedKeys={\n\t\t\t\t\tisControlled ? undefined : toKeys(defaultSelectedKey)\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{options.map((option, index) => {\n\t\t\t\t\tconst isIcon = option.icon != null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\tkey={keyFor(option, index)}\n\t\t\t\t\t\t\tid={keyFor(option, index)}\n\t\t\t\t\t\t\tvariant={isIcon ? \"icon\" : \"number\"}\n\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\toption[\"aria-label\"] ?? (isIcon ? option.label : undefined)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.icon ?? option.value}\n\t\t\t\t\t\t</Chip>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ToggleButtonGroup>\n\t\t\t{showLabels && (lowLabel != null || highLabel != null) && (\n\t\t\t\t<div className={surveyRatingLabels}>\n\t\t\t\t\t<span>{lowLabel}</span>\n\t\t\t\t\t<span>{highLabel}</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;AA2CA,IAAM,KAAU,GAA4B,MAC3C,EAAO,OAAO,GAGT,IAAc,GAGd,IAAe,IACf,IAAW,GAGX,KAAmB,MAAkB;CAC1C,IAAM,IAAO,KAAK,IAAI,GAAG,KAAK,KAAK,IAAQ,EAAY,CAAC;AACxD,QAAO,KAAK,IAAI,GAAG,KAAK,KAAK,IAAQ,EAAK,CAAC;GAQtC,KAAoB,MAAkB;CAC3C,IAAM,IAAO,EAAgB,EAAM;AACnC,QAAO,IAAO,KAAgB,IAAO,KAAK;;AAS3C,SAAgB,EAAa,EAC5B,YACA,gBAAa,IACb,eACA,gBACA,uBACA,aACA,cACA,UACA,QACA,cAAc,KACO;CACrB,IAAM,IAAW,EAAQ,IAAI,OACvB,IAAY,EAAQ,EAAQ,SAAS,IAAI,OAEzC,KAAyB,MAAmB;EACjD,IAAM,IAAM,EAAK,OAAO,CAAC,GAAG,EAAK,CAAC,KAAK,MACjC,IACL,KAAO,OACJ,OACC,EAAQ,MAAM,GAAG,MAAM,EAAO,GAAG,EAAE,KAAK,EAAI,IAAI;AACrD,MAAW,GAAK,EAAO;IAKlB,KAAU,MAAiC,KAAO,OAAO,EAAE,GAAG,CAAC,EAAI,EACnE,IAAe,MAAgB,KAAA;AAErC,QACC,kBAAC,OAAD;EAAU;EAAK,WAAW,EAAG,GAAkB,EAAU;EAAS;YAAlE,CACC,kBAAC,GAAD;GACC,eAAc;GACF;GACZ,cAAY;GACZ,WAAW;GACX,OAAO,EAAE,UAAU,EAAiB,EAAQ,OAAO,EAAE;GACrD,mBAAmB;GACnB,cAAc,IAAe,EAAO,EAAY,GAAG,KAAA;GACnD,qBACC,IAAe,KAAA,IAAY,EAAO,EAAmB;aAGrD,EAAQ,KAAK,GAAQ,MAAU;IAC/B,IAAM,IAAS,EAAO,QAAQ;AAC9B,WACC,kBAAC,GAAD;KAEC,IAAI,EAAO,GAAQ,EAAM;KACzB,SAAS,IAAS,SAAS;KAC3B,MAAK;KACL,cACC,EAAO,kBAAkB,IAAS,EAAO,QAAQ,KAAA;eAGjD,EAAO,QAAQ,EAAO;KACjB,EATD,EAAO,GAAQ,EAAM,CASpB;KAEP;GACiB,CAAA,EACnB,MAAe,KAAY,QAAQ,KAAa,SAChD,kBAAC,OAAD;GAAK,WAAA;aAAL,CACC,kBAAC,QAAD,EAAA,UAAO,GAAgB,CAAA,EACvB,kBAAC,QAAD,EAAA,UAAO,GAAiB,CAAA,CACnB;KAEF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SurveyRating, type SurveyRatingOption, type SurveyRatingProps, } from "./SurveyRating.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const surveySelectRoot: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurveySelect.css.js","names":[],"sources":["../../../../src/components/Survey/SurveySelect/SurveySelect.css.ts"],"sourcesContent":["import { style } from \"@vanilla-extract/css\";\nimport { t } from \"../../../tokens/index.js\";\n\nexport const surveySelectRoot = style({\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: t(\"gap-8\"),\n\twidth: \"100%\",\n});\n"],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CSSProperties, Ref } from "react";
|
|
2
|
+
import type { Key } from "react-aria-components";
|
|
3
|
+
export interface SurveySelectOption {
|
|
4
|
+
/** Chip label text. */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Stable identity used for selection. Defaults to the option's array index. */
|
|
7
|
+
key?: Key;
|
|
8
|
+
}
|
|
9
|
+
export interface SurveySelectProps {
|
|
10
|
+
/** Selectable options, rendered in order. */
|
|
11
|
+
options: SurveySelectOption[];
|
|
12
|
+
/** Accessible name for the group. */
|
|
13
|
+
"aria-label": string;
|
|
14
|
+
/**
|
|
15
|
+
* `multiple` (default) allows any number of selected chips; `single` allows at
|
|
16
|
+
* most one (e.g. a Yes/No question) and renders as a radiogroup.
|
|
17
|
+
*/
|
|
18
|
+
selectionMode?: "single" | "multiple";
|
|
19
|
+
/**
|
|
20
|
+
* When `true`, a selected option can't be toggled back off — restores radio
|
|
21
|
+
* semantics for a required single-select (e.g. a Yes/No question).
|
|
22
|
+
*/
|
|
23
|
+
disallowEmptySelection?: boolean;
|
|
24
|
+
isDisabled?: boolean;
|
|
25
|
+
/** Selected option keys (controlled). */
|
|
26
|
+
selectedKeys?: Key[];
|
|
27
|
+
/** Initially-selected option keys (uncontrolled). */
|
|
28
|
+
defaultSelectedKeys?: Key[];
|
|
29
|
+
/** Fires with the full set of selected keys and their options, in option order. */
|
|
30
|
+
onChange?: (keys: Key[], options: SurveySelectOption[]) => void;
|
|
31
|
+
className?: string;
|
|
32
|
+
style?: CSSProperties;
|
|
33
|
+
ref?: Ref<HTMLDivElement>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Multi-select chip group for surveys — the labelled-pill counterpart to the single-select
|
|
37
|
+
* {@link SurveyRating}. Any number of options can be selected at once; selection state
|
|
38
|
+
* renders the accent fill on each {@link Chip}.
|
|
39
|
+
*/
|
|
40
|
+
export declare function SurveySelect({ options, selectionMode, disallowEmptySelection, isDisabled, selectedKeys, defaultSelectedKeys, onChange, className, style, ref, "aria-label": ariaLabel, }: SurveySelectProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cx as e } from "../../../utils/cx.js";
|
|
2
|
+
import { Chip as t } from "../../Chip/Chip.js";
|
|
3
|
+
import { surveySelectRoot as n } from "./SurveySelect.css.js";
|
|
4
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
5
|
+
import { ToggleButtonGroup as i } from "react-aria-components";
|
|
6
|
+
//#region src/components/Survey/SurveySelect/SurveySelect.tsx
|
|
7
|
+
var a = (e, t) => e.key ?? t;
|
|
8
|
+
function o({ options: o, selectionMode: s = "multiple", disallowEmptySelection: c, isDisabled: l, selectedKeys: u, defaultSelectedKeys: d, onChange: f, className: p, style: m, ref: h, "aria-label": g }) {
|
|
9
|
+
let _ = (e) => {
|
|
10
|
+
let t = o.map((e, t) => ({
|
|
11
|
+
option: e,
|
|
12
|
+
key: a(e, t)
|
|
13
|
+
})).filter(({ key: t }) => e.has(t));
|
|
14
|
+
f?.(t.map((e) => e.key), t.map((e) => e.option));
|
|
15
|
+
}, v = u !== void 0;
|
|
16
|
+
return /* @__PURE__ */ r(i, {
|
|
17
|
+
ref: h,
|
|
18
|
+
selectionMode: s,
|
|
19
|
+
disallowEmptySelection: c,
|
|
20
|
+
isDisabled: l,
|
|
21
|
+
"aria-label": g,
|
|
22
|
+
className: e(n, p),
|
|
23
|
+
style: m,
|
|
24
|
+
onSelectionChange: _,
|
|
25
|
+
selectedKeys: v ? u : void 0,
|
|
26
|
+
defaultSelectedKeys: v ? void 0 : d ?? [],
|
|
27
|
+
children: o.map((e, n) => /* @__PURE__ */ r(t, {
|
|
28
|
+
id: a(e, n),
|
|
29
|
+
variant: "text",
|
|
30
|
+
size: "md",
|
|
31
|
+
children: e.label
|
|
32
|
+
}, a(e, n)))
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { o as SurveySelect };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=SurveySelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurveySelect.js","names":[],"sources":["../../../../src/components/Survey/SurveySelect/SurveySelect.tsx"],"sourcesContent":["import type { CSSProperties, Ref } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport { ToggleButtonGroup } from \"react-aria-components\";\nimport { cx } from \"../../../utils/cx.js\";\nimport { Chip } from \"../../Chip/index.js\";\nimport { surveySelectRoot } from \"./SurveySelect.css.js\";\n\nexport interface SurveySelectOption {\n\t/** Chip label text. */\n\tlabel: string;\n\t/** Stable identity used for selection. Defaults to the option's array index. */\n\tkey?: Key;\n}\n\nexport interface SurveySelectProps {\n\t/** Selectable options, rendered in order. */\n\toptions: SurveySelectOption[];\n\t/** Accessible name for the group. */\n\t\"aria-label\": string;\n\t/**\n\t * `multiple` (default) allows any number of selected chips; `single` allows at\n\t * most one (e.g. a Yes/No question) and renders as a radiogroup.\n\t */\n\tselectionMode?: \"single\" | \"multiple\";\n\t/**\n\t * When `true`, a selected option can't be toggled back off — restores radio\n\t * semantics for a required single-select (e.g. a Yes/No question).\n\t */\n\tdisallowEmptySelection?: boolean;\n\tisDisabled?: boolean;\n\t/** Selected option keys (controlled). */\n\tselectedKeys?: Key[];\n\t/** Initially-selected option keys (uncontrolled). */\n\tdefaultSelectedKeys?: Key[];\n\t/** Fires with the full set of selected keys and their options, in option order. */\n\tonChange?: (keys: Key[], options: SurveySelectOption[]) => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLDivElement>;\n}\n\nconst keyFor = (option: SurveySelectOption, index: number) =>\n\toption.key ?? index;\n\n/**\n * Multi-select chip group for surveys — the labelled-pill counterpart to the single-select\n * {@link SurveyRating}. Any number of options can be selected at once; selection state\n * renders the accent fill on each {@link Chip}.\n */\nexport function SurveySelect({\n\toptions,\n\tselectionMode = \"multiple\",\n\tdisallowEmptySelection,\n\tisDisabled,\n\tselectedKeys,\n\tdefaultSelectedKeys,\n\tonChange,\n\tclassName,\n\tstyle,\n\tref,\n\t\"aria-label\": ariaLabel,\n}: SurveySelectProps) {\n\tconst handleSelectionChange = (keys: Set<Key>) => {\n\t\tconst selected = options\n\t\t\t.map((option, index) => ({ option, key: keyFor(option, index) }))\n\t\t\t.filter(({ key }) => keys.has(key));\n\t\tonChange?.(\n\t\t\tselected.map((s) => s.key),\n\t\t\tselected.map((s) => s.option),\n\t\t);\n\t};\n\n\tconst isControlled = selectedKeys !== undefined;\n\n\treturn (\n\t\t<ToggleButtonGroup\n\t\t\tref={ref}\n\t\t\tselectionMode={selectionMode}\n\t\t\tdisallowEmptySelection={disallowEmptySelection}\n\t\t\tisDisabled={isDisabled}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cx(surveySelectRoot, className)}\n\t\t\tstyle={style}\n\t\t\tonSelectionChange={handleSelectionChange}\n\t\t\tselectedKeys={isControlled ? selectedKeys : undefined}\n\t\t\tdefaultSelectedKeys={\n\t\t\t\tisControlled ? undefined : (defaultSelectedKeys ?? [])\n\t\t\t}\n\t\t>\n\t\t\t{options.map((option, index) => (\n\t\t\t\t<Chip\n\t\t\t\t\tkey={keyFor(option, index)}\n\t\t\t\t\tid={keyFor(option, index)}\n\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\tsize=\"md\"\n\t\t\t\t>\n\t\t\t\t\t{option.label}\n\t\t\t\t</Chip>\n\t\t\t))}\n\t\t</ToggleButtonGroup>\n\t);\n}\n"],"mappings":";;;;;;AAyCA,IAAM,KAAU,GAA4B,MAC3C,EAAO,OAAO;AAOf,SAAgB,EAAa,EAC5B,YACA,mBAAgB,YAChB,2BACA,eACA,iBACA,wBACA,aACA,cACA,UACA,QACA,cAAc,KACO;CACrB,IAAM,KAAyB,MAAmB;EACjD,IAAM,IAAW,EACf,KAAK,GAAQ,OAAW;GAAE;GAAQ,KAAK,EAAO,GAAQ,EAAM;GAAE,EAAE,CAChE,QAAQ,EAAE,aAAU,EAAK,IAAI,EAAI,CAAC;AACpC,MACC,EAAS,KAAK,MAAM,EAAE,IAAI,EAC1B,EAAS,KAAK,MAAM,EAAE,OAAO,CAC7B;IAGI,IAAe,MAAiB,KAAA;AAEtC,QACC,kBAAC,GAAD;EACM;EACU;EACS;EACZ;EACZ,cAAY;EACZ,WAAW,EAAG,GAAkB,EAAU;EACnC;EACP,mBAAmB;EACnB,cAAc,IAAe,IAAe,KAAA;EAC5C,qBACC,IAAe,KAAA,IAAa,KAAuB,EAAE;YAGrD,EAAQ,KAAK,GAAQ,MACrB,kBAAC,GAAD;GAEC,IAAI,EAAO,GAAQ,EAAM;GACzB,SAAQ;GACR,MAAK;aAEJ,EAAO;GACF,EAND,EAAO,GAAQ,EAAM,CAMpB,CACN;EACiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SurveySelect, type SurveySelectOption, type SurveySelectProps, } from "./SurveySelect.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
//#region src/components/ThinkingShimmer/ThinkingShimmer.css.ts
|
|
3
|
+
var e = "_9az62f2", t = "_9az62f3", n = "_9az62f4", r = "_9az62f5";
|
|
4
|
+
//#endregion
|
|
5
|
+
export { r as dot, n as ellipsis, e as root, t as visuallyHidden };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=ThinkingShimmer.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThinkingShimmer.css.js","names":[],"sources":["../../../src/components/ThinkingShimmer/ThinkingShimmer.css.ts"],"sourcesContent":["import { keyframes, style } from \"@vanilla-extract/css\";\nimport { t } from \"../../tokens/index.js\";\n\n// Widen to `string` so the multi-stop template literal below doesn't blow up into\n// an intractable union of the tokens' literal `var(--lovelace-…)` types.\n// The base is the *secondary* content token, so the color each glyph shows most of\n// the time — and at rest — reads as a transient status line rather than body text,\n// while a glint sweeps across it (same model as the legacy `ui` shimmer).\n// Secondary is the lightest content-tier token that still clears WCAG AA in both\n// themes (5.05:1 on the light surface, 7.81:1 on dark). Legacy's shimmer is lighter\n// still, but it hardcodes #e8e8e8→#999999 at 1.23:1–2.85:1 with no dark variant;\n// matching it exactly would be a contrast waiver, not a token choice.\nconst shimmerBase: string = t(\"color-content-secondary\");\n// The glint moves AWAY from the surface rather than toward it — darker than the base in\n// light mode (#181a1e on #ffffff), lighter in dark (#ffffff on #181a1e). Stating it as\n// \"lighter\" or \"darker\" is wrong in one theme or the other; what holds in both is that\n// it is the higher-contrast end, 17.42:1.\n//\n// That direction is forced, not a preference. The gradient is clipped to the text, so\n// every stop is a glyph colour and owes AA, and per the note above\n// `color-content-secondary` is already the lightest neutral content token that clears\n// it — so no lighter glint exists. Enumerated the whole content tier to be sure: the\n// only AA-passing tokens lighter in light mode are `success`/`warning`, status hues and\n// wrong for a neutral status line.\n//\n// This was `color-border-default` — a NON-text token, 1.47:1 light and 1.69:1 dark, i.e.\n// under even the 3:1 non-text floor, which made the mid-sweep glyphs very nearly\n// invisible and was exactly the waiver the note above refuses.\nconst shimmerGlint: string = t(\"color-content-default\");\nexport const restingColor: string = t(\"color-content-secondary\");\n\n// Exported so the AA test can read the stops out of the gradient itself rather than a\n// hand-kept list of colours beside it. A stop added as a `t()` token is then checked\n// automatically; one written as a literal is NOT — the scrape only sees `var()` — so a\n// companion test rejects colour literals here rather than letting one ship unchecked.\nexport const shimmerGradient = `linear-gradient(90deg, ${shimmerBase} 0%, ${shimmerBase} 35%, ${shimmerGlint} 50%, ${shimmerBase} 65%, ${shimmerBase} 100%)`;\n\n// One smooth, constant-velocity sweep (linear). The gradient tiles\n// (background-repeat) and each cycle translates by exactly one tile width (200%),\n// so the loop is seamless and the text is always fully covered — no transparent\n// glyphs mid-sweep, no easing pulse.\nconst sweep = keyframes({\n\t\"0%\": { backgroundPositionX: \"200%\" },\n\t\"100%\": { backgroundPositionX: \"0%\" },\n});\n\n// Staggered vertical bounce for the ellipsis, via `vertical-align` — NOT\n// `top`/`transform`, which promote the dot to its own compositing layer and drop it\n// out of the root's `-webkit-background-clip: text`, leaving it invisible.\nconst dotBounce = keyframes({\n\t\"0%, 80%, 100%\": { verticalAlign: \"0\" },\n\t\"40%\": { verticalAlign: \"0.3em\" },\n});\n\nexport const root = style({\n\tdisplay: \"inline-block\",\n\tfontFamily: t(\"font-family-body\"),\n\tfontWeight: t(\"font-weight-medium\"),\n\tfontSize: t(\"font-size-body\"),\n\tlineHeight: t(\"line-height-body\"),\n\twhiteSpace: \"nowrap\",\n\t// A gradient clipped to the text and swept across it. The dots are plain inline\n\t// descendants covered by this same clip, so one band flows through the whole\n\t// label. Stops reference the tokens directly (currentColor can't express the\n\t// theme-aware stops); in dark mode they invert so the sweep keeps matching the\n\t// surface.\n\tbackgroundImage: shimmerGradient,\n\tbackgroundSize: \"200% 100%\",\n\tbackgroundRepeat: \"repeat\",\n\tbackgroundClip: \"text\",\n\tWebkitBackgroundClip: \"text\",\n\tcolor: \"transparent\",\n\tWebkitTextFillColor: \"transparent\",\n\tanimation: `${sweep} 2s linear infinite`,\n\t\"@media\": {\n\t\t// Reduced motion: hold the shimmer static at a flat, muted resting color —\n\t\t// never signal the loading state with animation alone.\n\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\tanimation: \"none\",\n\t\t\tbackgroundImage: \"none\",\n\t\t\tcolor: restingColor,\n\t\t\tWebkitTextFillColor: restingColor,\n\t\t},\n\t},\n});\n\n// Carries the announced status string as real text (live regions announce\n// rendered text, not `aria-label`), while staying out of the visual layout.\nexport const visuallyHidden = style({\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0, 0, 0, 0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n});\n\nexport const ellipsis = style({\n\tdisplay: \"inline\",\n});\n\nexport const dot = style({\n\t// Plain inline and unpositioned so the dots stay in the root's single text clip;\n\t// color and gradient are inherited, only the bounce (see `dotBounce`) moves them.\n\tdisplay: \"inline\",\n\t// Zero line-height so a bounced dot can't grow the line box and shift the whole\n\t// label; the raise fits within the root's existing line-height headroom.\n\tlineHeight: 0,\n\tanimation: `${dotBounce} 1.4s ease-in-out infinite`,\n\tselectors: {\n\t\t\"&:nth-child(2)\": { animationDelay: \"0.16s\" },\n\t\t\"&:nth-child(3)\": { animationDelay: \"0.32s\" },\n\t},\n\t\"@media\": {\n\t\t\"(prefers-reduced-motion: reduce)\": {\n\t\t\tanimation: \"none\",\n\t\t},\n\t},\n});\n"],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CSSProperties, HTMLAttributes, Ref } from "react";
|
|
2
|
+
export interface ThinkingShimmerProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
|
|
3
|
+
/** Visible and announced label. Trailing dots are normalized before the animated ellipsis is appended. */
|
|
4
|
+
label?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: CSSProperties;
|
|
7
|
+
ref?: Ref<HTMLSpanElement>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* AI thinking indicator — a label with a trailing ellipsis, shown while the AI
|
|
11
|
+
* agent is generating a response. A single shimmer band sweeps continuously
|
|
12
|
+
* through the whole label (word and dots). Render it as a transient status line in
|
|
13
|
+
* the message list while the assistant is streaming (or before the first token),
|
|
14
|
+
* and remove it once content arrives. Use only for AI generation, not for a human
|
|
15
|
+
* agent typing.
|
|
16
|
+
*
|
|
17
|
+
* Exposed as a polite live region. Two distinct a11y paths carry the same
|
|
18
|
+
* `announced` string, which defaults to `label`: `aria-label` gives the region
|
|
19
|
+
* its accessible name (`role="status"` is not name-from-content, so descendant
|
|
20
|
+
* text alone yields no name), and a visually-hidden copy of the text drives the
|
|
21
|
+
* on-appearance announcement (live regions announce rendered text, not
|
|
22
|
+
* `aria-label`). Both are needed — dropping either loses the name or the
|
|
23
|
+
* announcement. The visible word (which strips trailing dots before rendering
|
|
24
|
+
* the animated ellipsis) and dots are hidden from assistive tech. Honors reduced
|
|
25
|
+
* motion by holding the shimmer static at a flat resting color.
|
|
26
|
+
*
|
|
27
|
+
* Reliable on-appearance announcement additionally depends on the consuming
|
|
28
|
+
* surface keeping a persistent live region present before this mounts (the app's
|
|
29
|
+
* MessageList/MessageAnnouncer already do); validate with a real screen reader
|
|
30
|
+
* when a surface adopts this component.
|
|
31
|
+
*
|
|
32
|
+
* A surface that already wraps this in its own live region should pass
|
|
33
|
+
* `aria-live="off"`: two nested regions announce the same text twice, in an order
|
|
34
|
+
* neither controls.
|
|
35
|
+
*/
|
|
36
|
+
export declare function ThinkingShimmer({ label, className, "aria-label": ariaLabel, "aria-live": ariaLive, ...rest }: ThinkingShimmerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { cx as e } from "../../utils/cx.js";
|
|
2
|
+
import { dot as t, ellipsis as n, root as r, visuallyHidden as i } from "./ThinkingShimmer.css.js";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/ThinkingShimmer/ThinkingShimmer.tsx
|
|
5
|
+
function s({ label: s = "Thinking", className: l, "aria-label": u, "aria-live": d = "polite", ...f }) {
|
|
6
|
+
let p = c(s), m = u ?? s;
|
|
7
|
+
return /* @__PURE__ */ o("span", {
|
|
8
|
+
...f,
|
|
9
|
+
role: "status",
|
|
10
|
+
"aria-live": d,
|
|
11
|
+
"aria-label": m,
|
|
12
|
+
className: e(r, l),
|
|
13
|
+
children: [/* @__PURE__ */ a("span", {
|
|
14
|
+
className: i,
|
|
15
|
+
children: m
|
|
16
|
+
}), /* @__PURE__ */ o("span", {
|
|
17
|
+
"aria-hidden": "true",
|
|
18
|
+
children: [p, /* @__PURE__ */ o("span", {
|
|
19
|
+
className: n,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ a("span", {
|
|
22
|
+
className: t,
|
|
23
|
+
children: "."
|
|
24
|
+
}),
|
|
25
|
+
/* @__PURE__ */ a("span", {
|
|
26
|
+
className: t,
|
|
27
|
+
children: "."
|
|
28
|
+
}),
|
|
29
|
+
/* @__PURE__ */ a("span", {
|
|
30
|
+
className: t,
|
|
31
|
+
children: "."
|
|
32
|
+
})
|
|
33
|
+
]
|
|
34
|
+
})]
|
|
35
|
+
})]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function c(e) {
|
|
39
|
+
return e.replace(/[\s.…]+$/, "");
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { s as ThinkingShimmer };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=ThinkingShimmer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThinkingShimmer.js","names":[],"sources":["../../../src/components/ThinkingShimmer/ThinkingShimmer.tsx"],"sourcesContent":["import type { CSSProperties, HTMLAttributes, Ref } from \"react\";\nimport { cx } from \"../../utils/cx.js\";\nimport { dot, ellipsis, root, visuallyHidden } from \"./ThinkingShimmer.css.js\";\n\nexport interface ThinkingShimmerProps\n\textends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\t/** Visible and announced label. Trailing dots are normalized before the animated ellipsis is appended. */\n\tlabel?: string;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tref?: Ref<HTMLSpanElement>;\n}\n\n/**\n * AI thinking indicator — a label with a trailing ellipsis, shown while the AI\n * agent is generating a response. A single shimmer band sweeps continuously\n * through the whole label (word and dots). Render it as a transient status line in\n * the message list while the assistant is streaming (or before the first token),\n * and remove it once content arrives. Use only for AI generation, not for a human\n * agent typing.\n *\n * Exposed as a polite live region. Two distinct a11y paths carry the same\n * `announced` string, which defaults to `label`: `aria-label` gives the region\n * its accessible name (`role=\"status\"` is not name-from-content, so descendant\n * text alone yields no name), and a visually-hidden copy of the text drives the\n * on-appearance announcement (live regions announce rendered text, not\n * `aria-label`). Both are needed — dropping either loses the name or the\n * announcement. The visible word (which strips trailing dots before rendering\n * the animated ellipsis) and dots are hidden from assistive tech. Honors reduced\n * motion by holding the shimmer static at a flat resting color.\n *\n * Reliable on-appearance announcement additionally depends on the consuming\n * surface keeping a persistent live region present before this mounts (the app's\n * MessageList/MessageAnnouncer already do); validate with a real screen reader\n * when a surface adopts this component.\n *\n * A surface that already wraps this in its own live region should pass\n * `aria-live=\"off\"`: two nested regions announce the same text twice, in an order\n * neither controls.\n */\nexport function ThinkingShimmer({\n\tlabel = \"Thinking\",\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-live\": ariaLive = \"polite\",\n\t...rest\n}: ThinkingShimmerProps) {\n\tconst visibleLabel = stripTrailingEllipsis(label);\n\tconst announced = ariaLabel ?? label;\n\treturn (\n\t\t<span\n\t\t\t{...rest}\n\t\t\trole=\"status\"\n\t\t\taria-live={ariaLive}\n\t\t\taria-label={announced}\n\t\t\tclassName={cx(root, className)}\n\t\t>\n\t\t\t<span className={visuallyHidden}>{announced}</span>\n\t\t\t<span aria-hidden=\"true\">\n\t\t\t\t{visibleLabel}\n\t\t\t\t<span className={ellipsis}>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t\t<span className={dot}>.</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction stripTrailingEllipsis(label: string): string {\n\treturn label.replace(/[\\s.…]+$/, \"\");\n}\n"],"mappings":";;;;AAwCA,SAAgB,EAAgB,EAC/B,WAAQ,YACR,cACA,cAAc,GACd,aAAa,IAAW,UACxB,GAAG,KACqB;CACxB,IAAM,IAAe,EAAsB,EAAM,EAC3C,IAAY,KAAa;AAC/B,QACC,kBAAC,QAAD;EACC,GAAI;EACJ,MAAK;EACL,aAAW;EACX,cAAY;EACZ,WAAW,EAAG,GAAM,EAAU;YAL/B,CAOC,kBAAC,QAAD;GAAM,WAAW;aAAiB;GAAiB,CAAA,EACnD,kBAAC,QAAD;GAAM,eAAY;aAAlB,CACE,GACD,kBAAC,QAAD;IAAM,WAAW;cAAjB;KACC,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KAC9B,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KAC9B,kBAAC,QAAD;MAAM,WAAW;gBAAK;MAAQ,CAAA;KACxB;MACD;KACD;;;AAIT,SAAS,EAAsB,GAAuB;AACrD,QAAO,EAAM,QAAQ,YAAY,GAAG"}
|