@unofficialbox/box-open-elements 0.3.0 → 0.5.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 +37 -12
- package/dist/components/actions/button-group.d.ts +2 -2
- package/dist/components/actions/button-group.js +3 -9
- package/dist/components/actions/button.d.ts +2 -2
- package/dist/components/actions/button.js +3 -9
- package/dist/components/actions/icon-button.d.ts +2 -2
- package/dist/components/actions/icon-button.js +3 -9
- package/dist/components/actions/link-button.d.ts +11 -2
- package/dist/components/actions/link-button.js +58 -13
- package/dist/components/actions/menu-item.d.ts +2 -2
- package/dist/components/actions/menu-item.js +3 -9
- package/dist/components/actions/menu.d.ts +2 -2
- package/dist/components/actions/menu.js +3 -9
- package/dist/components/actions/segmented-control.d.ts +2 -2
- package/dist/components/actions/segmented-control.js +3 -9
- package/dist/components/collections/card.d.ts +2 -2
- package/dist/components/collections/card.js +3 -9
- package/dist/components/collections/carousel.d.ts +9 -2
- package/dist/components/collections/carousel.js +74 -13
- package/dist/components/collections/datalist-item.d.ts +8 -2
- package/dist/components/collections/datalist-item.js +42 -10
- package/dist/components/collections/draggable-list.d.ts +2 -2
- package/dist/components/collections/draggable-list.js +4 -10
- package/dist/components/collections/grid-view.d.ts +2 -2
- package/dist/components/collections/grid-view.js +10 -12
- package/dist/components/collections/pagination.d.ts +2 -2
- package/dist/components/collections/pagination.js +3 -9
- package/dist/components/collections/table.d.ts +2 -2
- package/dist/components/collections/table.js +3 -9
- package/dist/components/collections/thumbnail-card.d.ts +2 -2
- package/dist/components/collections/thumbnail-card.js +3 -9
- package/dist/components/collections/tree-grid.d.ts +2 -2
- package/dist/components/collections/tree-grid.js +3 -9
- package/dist/components/collections/tree.d.ts +2 -2
- package/dist/components/collections/tree.js +3 -9
- package/dist/components/feedback/alert.d.ts +4 -2
- package/dist/components/feedback/alert.js +33 -10
- package/dist/components/feedback/badge.d.ts +12 -2
- package/dist/components/feedback/badge.js +73 -13
- package/dist/components/feedback/badgeable.d.ts +2 -2
- package/dist/components/feedback/badgeable.js +3 -9
- package/dist/components/feedback/chip.d.ts +7 -2
- package/dist/components/feedback/chip.js +77 -11
- package/dist/components/feedback/empty-state.d.ts +2 -2
- package/dist/components/feedback/empty-state.js +3 -9
- package/dist/components/feedback/error-mask.d.ts +4 -2
- package/dist/components/feedback/error-mask.js +26 -9
- package/dist/components/feedback/help-text.d.ts +2 -2
- package/dist/components/feedback/help-text.js +10 -9
- package/dist/components/feedback/nudge.d.ts +2 -2
- package/dist/components/feedback/nudge.js +3 -9
- package/dist/components/feedback/progress-bar.d.ts +2 -2
- package/dist/components/feedback/progress-bar.js +3 -9
- package/dist/components/feedback/progress-ring.d.ts +2 -2
- package/dist/components/feedback/progress-ring.js +3 -9
- package/dist/components/feedback/progress-steps.d.ts +2 -2
- package/dist/components/feedback/progress-steps.js +3 -9
- package/dist/components/feedback/skeleton.d.ts +2 -2
- package/dist/components/feedback/skeleton.js +3 -9
- package/dist/components/feedback/spinner.d.ts +6 -2
- package/dist/components/feedback/spinner.js +33 -11
- package/dist/components/feedback/toast.d.ts +7 -2
- package/dist/components/feedback/toast.js +62 -20
- package/dist/components/files/drop-zone.d.ts +2 -2
- package/dist/components/files/drop-zone.js +3 -9
- package/dist/components/forms/calendar.d.ts +2 -2
- package/dist/components/forms/calendar.js +3 -9
- package/dist/components/forms/category-selector.d.ts +13 -2
- package/dist/components/forms/category-selector.js +214 -26
- package/dist/components/forms/checkbox-group.d.ts +2 -2
- package/dist/components/forms/checkbox-group.js +3 -9
- package/dist/components/forms/checkbox.d.ts +8 -2
- package/dist/components/forms/checkbox.js +61 -10
- package/dist/components/forms/color-picker.d.ts +2 -2
- package/dist/components/forms/color-picker.js +3 -9
- package/dist/components/forms/combobox.d.ts +32 -3
- package/dist/components/forms/combobox.js +351 -53
- package/dist/components/forms/date-field.d.ts +9 -2
- package/dist/components/forms/date-field.js +76 -10
- package/dist/components/forms/dropdown.d.ts +7 -2
- package/dist/components/forms/dropdown.js +35 -12
- package/dist/components/forms/dual-listbox.d.ts +2 -2
- package/dist/components/forms/dual-listbox.js +3 -9
- package/dist/components/forms/fieldset.d.ts +2 -2
- package/dist/components/forms/fieldset.js +3 -9
- package/dist/components/forms/multi-select.d.ts +2 -2
- package/dist/components/forms/multi-select.js +3 -9
- package/dist/components/forms/number-input.d.ts +2 -2
- package/dist/components/forms/number-input.js +3 -9
- package/dist/components/forms/pill-cloud.d.ts +2 -2
- package/dist/components/forms/pill-cloud.js +3 -9
- package/dist/components/forms/pill-selector-dropdown.d.ts +2 -2
- package/dist/components/forms/pill-selector-dropdown.js +3 -9
- package/dist/components/forms/radio-group.d.ts +11 -10
- package/dist/components/forms/radio-group.js +46 -15
- package/dist/components/forms/range-slider.d.ts +2 -2
- package/dist/components/forms/range-slider.js +3 -9
- package/dist/components/forms/rating.d.ts +2 -2
- package/dist/components/forms/rating.js +3 -9
- package/dist/components/forms/rich-text-input.d.ts +2 -2
- package/dist/components/forms/rich-text-input.js +3 -9
- package/dist/components/forms/search-field.d.ts +10 -2
- package/dist/components/forms/search-field.js +58 -22
- package/dist/components/forms/select.d.ts +20 -10
- package/dist/components/forms/select.js +107 -23
- package/dist/components/forms/slider.d.ts +2 -2
- package/dist/components/forms/slider.js +3 -9
- package/dist/components/forms/spin-button.d.ts +2 -2
- package/dist/components/forms/spin-button.js +3 -9
- package/dist/components/forms/switch.d.ts +2 -2
- package/dist/components/forms/switch.js +3 -9
- package/dist/components/forms/tag-input.d.ts +2 -2
- package/dist/components/forms/tag-input.js +3 -9
- package/dist/components/forms/text-area.d.ts +2 -2
- package/dist/components/forms/text-area.js +3 -9
- package/dist/components/forms/text-field.d.ts +15 -2
- package/dist/components/forms/text-field.js +139 -10
- package/dist/components/forms/time-field.d.ts +13 -2
- package/dist/components/forms/time-field.js +54 -9
- package/dist/components/identity/avatar.d.ts +6 -2
- package/dist/components/identity/avatar.js +68 -10
- package/dist/components/identity/contact-datalist-item.d.ts +10 -2
- package/dist/components/identity/contact-datalist-item.js +74 -11
- package/dist/components/identity/persona.d.ts +2 -2
- package/dist/components/identity/persona.js +3 -9
- package/dist/components/layout/app-shell.d.ts +2 -2
- package/dist/components/layout/app-shell.js +3 -9
- package/dist/components/layout/divider.d.ts +2 -2
- package/dist/components/layout/divider.js +3 -9
- package/dist/components/layout/nav-sidebar.d.ts +2 -2
- package/dist/components/layout/nav-sidebar.js +26 -9
- package/dist/components/layout/section.d.ts +2 -2
- package/dist/components/layout/section.js +3 -9
- package/dist/components/layout/sidebar-toggle-button.d.ts +5 -2
- package/dist/components/layout/sidebar-toggle-button.js +24 -11
- package/dist/components/layout/split-view.d.ts +2 -2
- package/dist/components/layout/split-view.js +3 -9
- package/dist/components/navigation/accordion.d.ts +5 -2
- package/dist/components/navigation/accordion.js +20 -11
- package/dist/components/navigation/breadcrumb.d.ts +2 -2
- package/dist/components/navigation/breadcrumb.js +3 -9
- package/dist/components/navigation/tabs.d.ts +2 -2
- package/dist/components/navigation/tabs.js +3 -9
- package/dist/components/overlays/context-menu.d.ts +2 -2
- package/dist/components/overlays/context-menu.js +3 -9
- package/dist/components/overlays/dialog.d.ts +2 -2
- package/dist/components/overlays/dialog.js +3 -9
- package/dist/components/overlays/drawer.d.ts +2 -2
- package/dist/components/overlays/drawer.js +3 -9
- package/dist/components/overlays/guide-tooltip.d.ts +51 -0
- package/dist/components/overlays/guide-tooltip.js +355 -0
- package/dist/components/overlays/popover.d.ts +2 -2
- package/dist/components/overlays/popover.js +3 -9
- package/dist/components/overlays/tooltip.d.ts +12 -2
- package/dist/components/overlays/tooltip.js +77 -20
- package/dist/components/visuals/illustration.d.ts +2 -2
- package/dist/components/visuals/illustration.js +3 -9
- package/dist/core/element.d.ts +5 -1
- package/dist/core/element.js +29 -1
- package/dist/entries/access-stats.d.ts +1 -0
- package/dist/entries/access-stats.js +1 -0
- package/dist/entries/accordion.d.ts +1 -0
- package/dist/entries/accordion.js +1 -0
- package/dist/entries/alert.d.ts +1 -0
- package/dist/entries/alert.js +1 -0
- package/dist/entries/annotation-inspector.d.ts +1 -0
- package/dist/entries/annotation-inspector.js +1 -0
- package/dist/entries/annotation-thread.d.ts +1 -0
- package/dist/entries/annotation-thread.js +1 -0
- package/dist/entries/annotation-toolbar.d.ts +1 -0
- package/dist/entries/annotation-toolbar.js +1 -0
- package/dist/entries/app-shell.d.ts +1 -0
- package/dist/entries/app-shell.js +1 -0
- package/dist/entries/avatar.d.ts +1 -0
- package/dist/entries/avatar.js +1 -0
- package/dist/entries/badge.d.ts +1 -0
- package/dist/entries/badge.js +1 -0
- package/dist/entries/badgeable.d.ts +1 -0
- package/dist/entries/badgeable.js +1 -0
- package/dist/entries/bar-chart.d.ts +1 -0
- package/dist/entries/bar-chart.js +1 -0
- package/dist/entries/breadcrumb.d.ts +1 -0
- package/dist/entries/breadcrumb.js +1 -0
- package/dist/entries/bulk-action-bar.d.ts +1 -0
- package/dist/entries/bulk-action-bar.js +1 -0
- package/dist/entries/button-group.d.ts +1 -0
- package/dist/entries/button-group.js +1 -0
- package/dist/entries/button.d.ts +1 -0
- package/dist/entries/button.js +1 -0
- package/dist/entries/calendar.d.ts +1 -0
- package/dist/entries/calendar.js +1 -0
- package/dist/entries/card.d.ts +1 -0
- package/dist/entries/card.js +1 -0
- package/dist/entries/carousel.d.ts +1 -0
- package/dist/entries/carousel.js +1 -0
- package/dist/entries/category-selector.d.ts +1 -0
- package/dist/entries/category-selector.js +1 -0
- package/dist/entries/chart-panel.d.ts +1 -0
- package/dist/entries/chart-panel.js +1 -0
- package/dist/entries/checkbox-group.d.ts +1 -0
- package/dist/entries/checkbox-group.js +1 -0
- package/dist/entries/checkbox.d.ts +1 -0
- package/dist/entries/checkbox.js +1 -0
- package/dist/entries/chip.d.ts +1 -0
- package/dist/entries/chip.js +1 -0
- package/dist/entries/collaborator-avatars.d.ts +1 -0
- package/dist/entries/collaborator-avatars.js +1 -0
- package/dist/entries/color-picker.d.ts +1 -0
- package/dist/entries/color-picker.js +1 -0
- package/dist/entries/combobox.d.ts +1 -0
- package/dist/entries/combobox.js +1 -0
- package/dist/entries/contact-datalist-item.d.ts +1 -0
- package/dist/entries/contact-datalist-item.js +1 -0
- package/dist/entries/content-explorer.d.ts +1 -0
- package/dist/entries/content-explorer.js +1 -0
- package/dist/entries/context-menu.d.ts +1 -0
- package/dist/entries/context-menu.js +1 -0
- package/dist/entries/datalist-item.d.ts +1 -0
- package/dist/entries/datalist-item.js +1 -0
- package/dist/entries/date-field.d.ts +1 -0
- package/dist/entries/date-field.js +1 -0
- package/dist/entries/dialog.d.ts +1 -0
- package/dist/entries/dialog.js +1 -0
- package/dist/entries/divider.d.ts +1 -0
- package/dist/entries/divider.js +1 -0
- package/dist/entries/donut-chart.d.ts +1 -0
- package/dist/entries/donut-chart.js +1 -0
- package/dist/entries/draggable-list.d.ts +1 -0
- package/dist/entries/draggable-list.js +1 -0
- package/dist/entries/drawer.d.ts +1 -0
- package/dist/entries/drawer.js +1 -0
- package/dist/entries/drop-zone.d.ts +1 -0
- package/dist/entries/drop-zone.js +1 -0
- package/dist/entries/dropdown.d.ts +1 -0
- package/dist/entries/dropdown.js +1 -0
- package/dist/entries/dual-listbox.d.ts +1 -0
- package/dist/entries/dual-listbox.js +1 -0
- package/dist/entries/empty-state.d.ts +1 -0
- package/dist/entries/empty-state.js +1 -0
- package/dist/entries/error-mask.d.ts +1 -0
- package/dist/entries/error-mask.js +1 -0
- package/dist/entries/explorer-action-menu.d.ts +1 -0
- package/dist/entries/explorer-action-menu.js +1 -0
- package/dist/entries/explorer-breadcrumbs.d.ts +1 -0
- package/dist/entries/explorer-breadcrumbs.js +1 -0
- package/dist/entries/explorer-items.d.ts +1 -0
- package/dist/entries/explorer-items.js +1 -0
- package/dist/entries/explorer-list.d.ts +1 -0
- package/dist/entries/explorer-list.js +1 -0
- package/dist/entries/explorer-table.d.ts +1 -0
- package/dist/entries/explorer-table.js +1 -0
- package/dist/entries/explorer-toolbar.d.ts +1 -0
- package/dist/entries/explorer-toolbar.js +1 -0
- package/dist/entries/fieldset.d.ts +1 -0
- package/dist/entries/fieldset.js +1 -0
- package/dist/entries/file-request-builder.d.ts +1 -0
- package/dist/entries/file-request-builder.js +1 -0
- package/dist/entries/filter-bar.d.ts +1 -0
- package/dist/entries/filter-bar.js +1 -0
- package/dist/entries/governance-panel.d.ts +1 -0
- package/dist/entries/governance-panel.js +1 -0
- package/dist/entries/grid-view.d.ts +1 -0
- package/dist/entries/grid-view.js +1 -0
- package/dist/entries/guide-tooltip.d.ts +1 -0
- package/dist/entries/guide-tooltip.js +1 -0
- package/dist/entries/help-text.d.ts +1 -0
- package/dist/entries/help-text.js +1 -0
- package/dist/entries/icon-button.d.ts +1 -0
- package/dist/entries/icon-button.js +1 -0
- package/dist/entries/illustration.d.ts +1 -0
- package/dist/entries/illustration.js +1 -0
- package/dist/entries/invite-collaborators-modal.d.ts +1 -0
- package/dist/entries/invite-collaborators-modal.js +1 -0
- package/dist/entries/item-details-panel.d.ts +1 -0
- package/dist/entries/item-details-panel.js +1 -0
- package/dist/entries/item-form.d.ts +1 -0
- package/dist/entries/item-form.js +1 -0
- package/dist/entries/line-chart.d.ts +1 -0
- package/dist/entries/line-chart.js +1 -0
- package/dist/entries/link-button.d.ts +1 -0
- package/dist/entries/link-button.js +1 -0
- package/dist/entries/menu-item.d.ts +1 -0
- package/dist/entries/menu-item.js +1 -0
- package/dist/entries/menu.d.ts +1 -0
- package/dist/entries/menu.js +1 -0
- package/dist/entries/metadata-filter-builder.d.ts +1 -0
- package/dist/entries/metadata-filter-builder.js +1 -0
- package/dist/entries/metadata-inspector.d.ts +1 -0
- package/dist/entries/metadata-inspector.js +1 -0
- package/dist/entries/metric-card.d.ts +1 -0
- package/dist/entries/metric-card.js +1 -0
- package/dist/entries/multi-select.d.ts +1 -0
- package/dist/entries/multi-select.js +1 -0
- package/dist/entries/nav-sidebar.d.ts +1 -0
- package/dist/entries/nav-sidebar.js +1 -0
- package/dist/entries/nudge.d.ts +1 -0
- package/dist/entries/nudge.js +1 -0
- package/dist/entries/number-input.d.ts +1 -0
- package/dist/entries/number-input.js +1 -0
- package/dist/entries/pagination.d.ts +1 -0
- package/dist/entries/pagination.js +1 -0
- package/dist/entries/permission-matrix.d.ts +1 -0
- package/dist/entries/permission-matrix.js +1 -0
- package/dist/entries/persona.d.ts +1 -0
- package/dist/entries/persona.js +1 -0
- package/dist/entries/pill-cloud.d.ts +1 -0
- package/dist/entries/pill-cloud.js +1 -0
- package/dist/entries/pill-selector-dropdown.d.ts +1 -0
- package/dist/entries/pill-selector-dropdown.js +1 -0
- package/dist/entries/popover.d.ts +1 -0
- package/dist/entries/popover.js +1 -0
- package/dist/entries/presence.d.ts +1 -0
- package/dist/entries/presence.js +1 -0
- package/dist/entries/preview-header.d.ts +1 -0
- package/dist/entries/preview-header.js +1 -0
- package/dist/entries/preview.d.ts +1 -0
- package/dist/entries/preview.js +1 -0
- package/dist/entries/progress-bar.d.ts +1 -0
- package/dist/entries/progress-bar.js +1 -0
- package/dist/entries/progress-ring.d.ts +1 -0
- package/dist/entries/progress-ring.js +1 -0
- package/dist/entries/progress-steps.d.ts +1 -0
- package/dist/entries/progress-steps.js +1 -0
- package/dist/entries/radio-group.d.ts +1 -0
- package/dist/entries/radio-group.js +1 -0
- package/dist/entries/range-slider.d.ts +1 -0
- package/dist/entries/range-slider.js +1 -0
- package/dist/entries/rating.d.ts +1 -0
- package/dist/entries/rating.js +1 -0
- package/dist/entries/review-queue-item.d.ts +1 -0
- package/dist/entries/review-queue-item.js +1 -0
- package/dist/entries/rich-text-input.d.ts +1 -0
- package/dist/entries/rich-text-input.js +1 -0
- package/dist/entries/saved-view-picker.d.ts +1 -0
- package/dist/entries/saved-view-picker.js +1 -0
- package/dist/entries/search-field.d.ts +1 -0
- package/dist/entries/search-field.js +1 -0
- package/dist/entries/search-results-header.d.ts +1 -0
- package/dist/entries/search-results-header.js +1 -0
- package/dist/entries/section.d.ts +1 -0
- package/dist/entries/section.js +1 -0
- package/dist/entries/segmented-control.d.ts +1 -0
- package/dist/entries/segmented-control.js +1 -0
- package/dist/entries/select.d.ts +1 -0
- package/dist/entries/select.js +1 -0
- package/dist/entries/share-panel.d.ts +1 -0
- package/dist/entries/share-panel.js +1 -0
- package/dist/entries/sidebar-toggle-button.d.ts +1 -0
- package/dist/entries/sidebar-toggle-button.js +1 -0
- package/dist/entries/skeleton.d.ts +1 -0
- package/dist/entries/skeleton.js +1 -0
- package/dist/entries/slider.d.ts +1 -0
- package/dist/entries/slider.js +1 -0
- package/dist/entries/spin-button.d.ts +1 -0
- package/dist/entries/spin-button.js +1 -0
- package/dist/entries/spinner.d.ts +1 -0
- package/dist/entries/spinner.js +1 -0
- package/dist/entries/split-view.d.ts +1 -0
- package/dist/entries/split-view.js +1 -0
- package/dist/entries/switch.d.ts +1 -0
- package/dist/entries/switch.js +1 -0
- package/dist/entries/table.d.ts +1 -0
- package/dist/entries/table.js +1 -0
- package/dist/entries/tabs.d.ts +1 -0
- package/dist/entries/tabs.js +1 -0
- package/dist/entries/tag-input.d.ts +1 -0
- package/dist/entries/tag-input.js +1 -0
- package/dist/entries/task-assignment-panel.d.ts +1 -0
- package/dist/entries/task-assignment-panel.js +1 -0
- package/dist/entries/text-area.d.ts +1 -0
- package/dist/entries/text-area.js +1 -0
- package/dist/entries/text-field.d.ts +1 -0
- package/dist/entries/text-field.js +1 -0
- package/dist/entries/thumbnail-card.d.ts +1 -0
- package/dist/entries/thumbnail-card.js +1 -0
- package/dist/entries/time-field.d.ts +1 -0
- package/dist/entries/time-field.js +1 -0
- package/dist/entries/toast.d.ts +1 -0
- package/dist/entries/toast.js +1 -0
- package/dist/entries/tooltip.d.ts +1 -0
- package/dist/entries/tooltip.js +1 -0
- package/dist/entries/tree-grid.d.ts +1 -0
- package/dist/entries/tree-grid.js +1 -0
- package/dist/entries/tree.d.ts +1 -0
- package/dist/entries/tree.js +1 -0
- package/dist/entries/unified-share-modal.d.ts +1 -0
- package/dist/entries/unified-share-modal.js +1 -0
- package/dist/foundations/geometry/tokens.d.ts +46 -45
- package/dist/foundations/geometry/tokens.js +46 -45
- package/dist/foundations/motion/tokens.d.ts +10 -10
- package/dist/foundations/motion/tokens.js +10 -10
- package/dist/foundations/overlay/positioning.js +5 -1
- package/dist/foundations/profiles/built-ins.d.ts +4 -0
- package/dist/foundations/profiles/built-ins.js +131 -0
- package/dist/foundations/profiles/controller.d.ts +4 -0
- package/dist/foundations/profiles/controller.js +107 -0
- package/dist/foundations/profiles/index.d.ts +4 -0
- package/dist/foundations/profiles/index.js +3 -0
- package/dist/foundations/profiles/registry.d.ts +72 -0
- package/dist/foundations/profiles/registry.js +119 -0
- package/dist/foundations/profiles/types.d.ts +94 -0
- package/dist/foundations/profiles/types.js +1 -0
- package/dist/foundations/theming/controller.d.ts +37 -0
- package/dist/foundations/theming/controller.js +176 -0
- package/dist/foundations/theming/index.d.ts +2 -0
- package/dist/foundations/theming/index.js +1 -0
- package/dist/foundations/tokens/box-dark.d.ts +3 -3
- package/dist/foundations/tokens/box-defaults.d.ts +3 -3
- package/dist/foundations/tokens/index.d.ts +2 -2
- package/dist/foundations/tokens/index.js +1 -1
- package/dist/foundations/tokens/registry.d.ts +37 -7
- package/dist/foundations/tokens/registry.js +55 -5
- package/dist/foundations/tokens/types.d.ts +38 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +4 -1
- package/dist/patterns/content-explorer/adapters/action-menu.d.ts +2 -2
- package/dist/patterns/content-explorer/adapters/action-menu.js +3 -9
- package/dist/patterns/content-explorer/adapters/breadcrumbs.d.ts +2 -2
- package/dist/patterns/content-explorer/adapters/breadcrumbs.js +3 -9
- package/dist/patterns/content-explorer/adapters/items.d.ts +3 -3
- package/dist/patterns/content-explorer/adapters/items.js +4 -10
- package/dist/patterns/content-explorer/adapters/list.d.ts +2 -2
- package/dist/patterns/content-explorer/adapters/list.js +3 -9
- package/dist/patterns/content-explorer/adapters/table.d.ts +2 -2
- package/dist/patterns/content-explorer/adapters/table.js +3 -9
- package/dist/patterns/content-explorer/adapters/toolbar.d.ts +2 -2
- package/dist/patterns/content-explorer/adapters/toolbar.js +7 -13
- package/dist/patterns/content-explorer/content-explorer.d.ts +15 -15
- package/dist/patterns/content-explorer/content-explorer.js +5 -11
- package/dist/patterns/file-request/file-request-builder.d.ts +2 -2
- package/dist/patterns/file-request/file-request-builder.js +3 -9
- package/dist/patterns/governance/governance-panel.d.ts +2 -2
- package/dist/patterns/governance/governance-panel.js +3 -6
- package/dist/patterns/insights/bar-chart.d.ts +2 -2
- package/dist/patterns/insights/bar-chart.js +3 -6
- package/dist/patterns/insights/chart-panel.d.ts +2 -2
- package/dist/patterns/insights/chart-panel.js +3 -6
- package/dist/patterns/insights/donut-chart.d.ts +2 -2
- package/dist/patterns/insights/donut-chart.js +3 -6
- package/dist/patterns/insights/line-chart.d.ts +2 -2
- package/dist/patterns/insights/line-chart.js +3 -6
- package/dist/patterns/insights/metric-card.d.ts +2 -2
- package/dist/patterns/insights/metric-card.js +3 -6
- package/dist/patterns/item/bulk-action-bar.d.ts +2 -2
- package/dist/patterns/item/bulk-action-bar.js +3 -6
- package/dist/patterns/item/item-details-panel.d.ts +2 -2
- package/dist/patterns/item/item-details-panel.js +3 -9
- package/dist/patterns/item/item-form.d.ts +2 -2
- package/dist/patterns/item/item-form.js +3 -9
- package/dist/patterns/item/preview-header.d.ts +2 -2
- package/dist/patterns/item/preview-header.js +3 -9
- package/dist/patterns/metadata/metadata-filter-builder.d.ts +2 -2
- package/dist/patterns/metadata/metadata-filter-builder.js +3 -9
- package/dist/patterns/metadata/metadata-inspector.d.ts +2 -2
- package/dist/patterns/metadata/metadata-inspector.js +3 -9
- package/dist/patterns/preview/annotation-inspector.d.ts +2 -2
- package/dist/patterns/preview/annotation-inspector.js +3 -9
- package/dist/patterns/preview/annotation-thread.d.ts +2 -2
- package/dist/patterns/preview/annotation-thread.js +3 -9
- package/dist/patterns/preview/annotation-toolbar.d.ts +2 -2
- package/dist/patterns/preview/annotation-toolbar.js +3 -9
- package/dist/patterns/preview/preview-element.d.ts +2 -2
- package/dist/patterns/preview/preview-element.js +3 -9
- package/dist/patterns/search/filter-bar.d.ts +2 -2
- package/dist/patterns/search/filter-bar.js +3 -9
- package/dist/patterns/search/saved-view-picker.d.ts +2 -2
- package/dist/patterns/search/saved-view-picker.js +3 -9
- package/dist/patterns/search/search-results-header.d.ts +2 -2
- package/dist/patterns/search/search-results-header.js +3 -9
- package/dist/patterns/share/access-stats.d.ts +2 -2
- package/dist/patterns/share/access-stats.js +3 -9
- package/dist/patterns/share/collaborator-avatars.d.ts +2 -2
- package/dist/patterns/share/collaborator-avatars.js +3 -9
- package/dist/patterns/share/invite-collaborators-modal.d.ts +2 -2
- package/dist/patterns/share/invite-collaborators-modal.js +3 -9
- package/dist/patterns/share/permission-matrix.d.ts +2 -2
- package/dist/patterns/share/permission-matrix.js +3 -9
- package/dist/patterns/share/presence.d.ts +2 -2
- package/dist/patterns/share/presence.js +3 -9
- package/dist/patterns/share/share-panel.d.ts +2 -2
- package/dist/patterns/share/share-panel.js +3 -9
- package/dist/patterns/share/unified-share-modal.d.ts +2 -2
- package/dist/patterns/share/unified-share-modal.js +3 -9
- package/dist/patterns/task/review-queue-item.d.ts +2 -2
- package/dist/patterns/task/review-queue-item.js +3 -6
- package/dist/patterns/task/task-assignment-panel.d.ts +2 -2
- package/dist/patterns/task/task-assignment-panel.js +3 -6
- package/package.json +5 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { FormAssociatedElement, boeFormFieldErrorStyles, boeFormFieldSupportStyles, formDescriptionMarkup, formErrorMessageMarkup, } from "../../core/index.js";
|
|
2
2
|
import { boeControl, boeInputControlStyles, boeSpace } from "../../foundations/geometry/index.js";
|
|
3
|
+
import { boeMotionDuration, boeMotionEasing, boeReducedMotionStyles, } from "../../foundations/motion/index.js";
|
|
3
4
|
const DEFAULT_TAG_NAME = "box-text-field";
|
|
5
|
+
const VALID_INPUT_TYPES = new Set(["text", "email", "tel", "url", "password", "search", "number"]);
|
|
6
|
+
const spinnerMarkup = '<span part="spinner" aria-hidden="true"></span>';
|
|
7
|
+
const validMarkup = '<svg part="valid-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M6.5 11L3 7.5l1-1 2.5 2.5L12 3.5l1 1z" fill="currentColor"/></svg>';
|
|
4
8
|
/** Input chrome tracks BUE `@mixin box-inputs` (`src/styles/_inputs.scss`). */
|
|
5
9
|
const textFieldStyles = `
|
|
6
10
|
:host {
|
|
@@ -33,16 +37,92 @@ const textFieldStyles = `
|
|
|
33
37
|
color: var(--boe-token-text-text-placeholder, #909090);
|
|
34
38
|
}
|
|
35
39
|
|
|
40
|
+
/* Control wrapper holds the input plus optional leading icon and trailing
|
|
41
|
+
status. With no adornments it is layout-neutral (default renders unchanged). */
|
|
42
|
+
[part="control"] {
|
|
43
|
+
position: relative;
|
|
44
|
+
display: block;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
[part="icon"] {
|
|
48
|
+
position: absolute;
|
|
49
|
+
inset-block-start: 50%;
|
|
50
|
+
inset-inline-start: 0.6rem;
|
|
51
|
+
transform: translateY(-50%);
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
color: var(--boe-token-text-text-secondary, #6f6f6f);
|
|
55
|
+
pointer-events: none;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[part="icon"]:not(.has-content) {
|
|
59
|
+
display: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
[part="icon"]::slotted(*) {
|
|
63
|
+
inline-size: 1rem;
|
|
64
|
+
block-size: 1rem;
|
|
65
|
+
display: block;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[part="control"][data-has-icon="true"] [part="input"] {
|
|
69
|
+
padding-inline-start: 2.1rem;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[part="status"] {
|
|
73
|
+
position: absolute;
|
|
74
|
+
inset-block-start: 50%;
|
|
75
|
+
inset-inline-end: 0.65rem;
|
|
76
|
+
transform: translateY(-50%);
|
|
77
|
+
display: none;
|
|
78
|
+
align-items: center;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[part="control"][data-status="loading"] [part="status"],
|
|
82
|
+
[part="control"][data-status="valid"] [part="status"] {
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[part="control"][data-status="loading"] [part="input"],
|
|
87
|
+
[part="control"][data-status="valid"] [part="input"] {
|
|
88
|
+
padding-inline-end: 2.2rem;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[part="spinner"] {
|
|
92
|
+
inline-size: 1rem;
|
|
93
|
+
block-size: 1rem;
|
|
94
|
+
border-radius: 999px;
|
|
95
|
+
border: 2px solid color-mix(in srgb, var(--boe-token-surface-surface-brand, #0061d5) 20%, transparent);
|
|
96
|
+
border-top-color: var(--boe-token-surface-surface-brand, #0061d5);
|
|
97
|
+
animation: boe-text-field-spin ${boeMotionDuration.spin} ${boeMotionEasing.linear} infinite;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@keyframes boe-text-field-spin {
|
|
101
|
+
to { transform: rotate(360deg); }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
${boeReducedMotionStyles('[part="spinner"]', "animation-duration: 1.6s;")}
|
|
105
|
+
|
|
106
|
+
[part="valid-icon"] {
|
|
107
|
+
inline-size: 1.05rem;
|
|
108
|
+
block-size: 1.05rem;
|
|
109
|
+
color: var(--boe-token-surface-status-surface-success, #26c281);
|
|
110
|
+
}
|
|
111
|
+
|
|
36
112
|
${boeFormFieldErrorStyles}
|
|
37
113
|
${boeFormFieldSupportStyles}
|
|
38
114
|
`;
|
|
39
|
-
export class
|
|
115
|
+
export class TextField extends FormAssociatedElement {
|
|
116
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
40
117
|
static get observedAttributes() {
|
|
41
118
|
return [
|
|
42
119
|
...FormAssociatedElement.fieldObservedAttributes,
|
|
43
120
|
"disabled",
|
|
44
121
|
"label",
|
|
45
122
|
"placeholder",
|
|
123
|
+
"type",
|
|
124
|
+
"loading",
|
|
125
|
+
"valid",
|
|
46
126
|
"value",
|
|
47
127
|
];
|
|
48
128
|
}
|
|
@@ -51,6 +131,31 @@ export class BoxTextFieldElement extends FormAssociatedElement {
|
|
|
51
131
|
labelEl;
|
|
52
132
|
descriptionEl;
|
|
53
133
|
errorEl;
|
|
134
|
+
controlEl;
|
|
135
|
+
iconSlot;
|
|
136
|
+
statusEl;
|
|
137
|
+
/** Input type passthrough (text/email/tel/url/password/search/number). */
|
|
138
|
+
get type() {
|
|
139
|
+
const value = this.getAttribute("type");
|
|
140
|
+
return value && VALID_INPUT_TYPES.has(value) ? value : "text";
|
|
141
|
+
}
|
|
142
|
+
set type(value) {
|
|
143
|
+
this.setAttribute("type", value);
|
|
144
|
+
}
|
|
145
|
+
/** Shows a trailing spinner (e.g. while validating/looking up asynchronously). */
|
|
146
|
+
get loading() {
|
|
147
|
+
return this.hasAttribute("loading");
|
|
148
|
+
}
|
|
149
|
+
set loading(value) {
|
|
150
|
+
this.toggleAttribute("loading", Boolean(value));
|
|
151
|
+
}
|
|
152
|
+
/** Shows a trailing success check (explicit valid affirmation). */
|
|
153
|
+
get valid() {
|
|
154
|
+
return this.hasAttribute("valid");
|
|
155
|
+
}
|
|
156
|
+
set valid(value) {
|
|
157
|
+
this.toggleAttribute("valid", Boolean(value));
|
|
158
|
+
}
|
|
54
159
|
get value() {
|
|
55
160
|
return this.valueInternal;
|
|
56
161
|
}
|
|
@@ -105,7 +210,11 @@ export class BoxTextFieldElement extends FormAssociatedElement {
|
|
|
105
210
|
<label part="field">
|
|
106
211
|
<span part="label"></span>
|
|
107
212
|
${formDescriptionMarkup()}
|
|
108
|
-
<
|
|
213
|
+
<span part="control">
|
|
214
|
+
<slot name="icon" part="icon"></slot>
|
|
215
|
+
<input type="text" part="input" />
|
|
216
|
+
<span part="status" aria-hidden="true"></span>
|
|
217
|
+
</span>
|
|
109
218
|
${formErrorMessageMarkup()}
|
|
110
219
|
</label>
|
|
111
220
|
`;
|
|
@@ -113,8 +222,12 @@ export class BoxTextFieldElement extends FormAssociatedElement {
|
|
|
113
222
|
this.descriptionEl = this.shadowRoot.querySelector('[part="description"]');
|
|
114
223
|
this.inputEl = this.shadowRoot.querySelector('[part="input"]');
|
|
115
224
|
this.errorEl = this.shadowRoot.querySelector('[part="error-message"]');
|
|
225
|
+
this.controlEl = this.shadowRoot.querySelector('[part="control"]');
|
|
226
|
+
this.iconSlot = this.shadowRoot.querySelector('slot[name="icon"]');
|
|
227
|
+
this.statusEl = this.shadowRoot.querySelector('[part="status"]');
|
|
116
228
|
}
|
|
117
229
|
setupListeners() {
|
|
230
|
+
this.iconSlot.addEventListener("slotchange", () => this.syncIconSlot());
|
|
118
231
|
this.inputEl.addEventListener("input", event => {
|
|
119
232
|
const nextValue = event.currentTarget.value;
|
|
120
233
|
this.valueInternal = nextValue;
|
|
@@ -127,12 +240,35 @@ export class BoxTextFieldElement extends FormAssociatedElement {
|
|
|
127
240
|
}));
|
|
128
241
|
});
|
|
129
242
|
}
|
|
243
|
+
syncIconSlot() {
|
|
244
|
+
if (!this.iconSlot || !this.controlEl) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const hasContent = this.iconSlot.assignedNodes({ flatten: true }).length > 0;
|
|
248
|
+
this.iconSlot.classList.toggle("has-content", hasContent);
|
|
249
|
+
this.controlEl.dataset.hasIcon = hasContent ? "true" : "false";
|
|
250
|
+
}
|
|
130
251
|
update() {
|
|
131
252
|
if (!this.inputEl || !this.labelEl || !this.errorEl) {
|
|
132
253
|
return;
|
|
133
254
|
}
|
|
134
255
|
this.labelEl.textContent = this.label;
|
|
256
|
+
this.inputEl.type = this.type;
|
|
135
257
|
this.inputEl.placeholder = this.placeholder;
|
|
258
|
+
this.syncIconSlot();
|
|
259
|
+
// Trailing status: loading spinner takes precedence over the valid check.
|
|
260
|
+
if (this.loading) {
|
|
261
|
+
this.controlEl.dataset.status = "loading";
|
|
262
|
+
this.statusEl.innerHTML = spinnerMarkup;
|
|
263
|
+
}
|
|
264
|
+
else if (this.valid) {
|
|
265
|
+
this.controlEl.dataset.status = "valid";
|
|
266
|
+
this.statusEl.innerHTML = validMarkup;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
this.controlEl.removeAttribute("data-status");
|
|
270
|
+
this.statusEl.innerHTML = "";
|
|
271
|
+
}
|
|
136
272
|
if (this.shadowRoot?.activeElement !== this.inputEl) {
|
|
137
273
|
this.inputEl.value = this.valueInternal;
|
|
138
274
|
}
|
|
@@ -147,11 +283,4 @@ export class BoxTextFieldElement extends FormAssociatedElement {
|
|
|
147
283
|
this.applyInvalidState(this.inputEl, this.errorEl);
|
|
148
284
|
}
|
|
149
285
|
}
|
|
150
|
-
|
|
151
|
-
const existingElement = customElements.get(tagName);
|
|
152
|
-
if (existingElement) {
|
|
153
|
-
return existingElement;
|
|
154
|
-
}
|
|
155
|
-
customElements.define(tagName, BoxTextFieldElement);
|
|
156
|
-
return BoxTextFieldElement;
|
|
157
|
-
};
|
|
286
|
+
TextField.register();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FormAssociatedElement } from "../../core/index.js";
|
|
2
2
|
import type { FormValue } from "../../core/index.js";
|
|
3
|
-
export declare class
|
|
3
|
+
export declare class TimeField extends FormAssociatedElement {
|
|
4
|
+
static readonly tagName: string;
|
|
4
5
|
static get observedAttributes(): string[];
|
|
5
6
|
private valueInternal;
|
|
6
7
|
private inputEl;
|
|
@@ -21,9 +22,19 @@ export declare class BoxTimeFieldElement extends FormAssociatedElement {
|
|
|
21
22
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
22
23
|
protected getFormValue(): FormValue;
|
|
23
24
|
protected restoreFormValue(value: FormValue): void;
|
|
25
|
+
/**
|
|
26
|
+
* Parse a human time string in 24-hour (`13:30`) or 12-hour (`1:30 PM`,
|
|
27
|
+
* `1 pm`) form to canonical `HH:MM`. Returns `""` for empty input and `null`
|
|
28
|
+
* when it cannot be parsed.
|
|
29
|
+
*/
|
|
30
|
+
static parseTime(raw: string): string | null;
|
|
31
|
+
/**
|
|
32
|
+
* Set the value from a human 12h/24h string. On success updates the value and
|
|
33
|
+
* returns true; on a parse failure emits `parse-error` and returns false.
|
|
34
|
+
*/
|
|
35
|
+
setTimeString(value: string): boolean;
|
|
24
36
|
private syncValue;
|
|
25
37
|
protected renderTemplate(): void;
|
|
26
38
|
protected setupListeners(): void;
|
|
27
39
|
protected update(): void;
|
|
28
40
|
}
|
|
29
|
-
export declare const defineBoxTimeFieldElement: (tagName?: string) => typeof BoxTimeFieldElement;
|
|
@@ -54,7 +54,8 @@ const timeFieldStyles = `
|
|
|
54
54
|
|
|
55
55
|
${boeFormFieldErrorStyles}
|
|
56
56
|
`;
|
|
57
|
-
export class
|
|
57
|
+
export class TimeField extends FormAssociatedElement {
|
|
58
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
58
59
|
static get observedAttributes() {
|
|
59
60
|
return [
|
|
60
61
|
...FormAssociatedElement.formObservedAttributes,
|
|
@@ -132,6 +133,57 @@ export class BoxTimeFieldElement extends FormAssociatedElement {
|
|
|
132
133
|
this.update();
|
|
133
134
|
}
|
|
134
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse a human time string in 24-hour (`13:30`) or 12-hour (`1:30 PM`,
|
|
138
|
+
* `1 pm`) form to canonical `HH:MM`. Returns `""` for empty input and `null`
|
|
139
|
+
* when it cannot be parsed.
|
|
140
|
+
*/
|
|
141
|
+
static parseTime(raw) {
|
|
142
|
+
const value = raw.trim().toLowerCase();
|
|
143
|
+
if (!value) {
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
const twentyFour = value.match(/^([01]?\d|2[0-3]):([0-5]\d)$/);
|
|
147
|
+
if (twentyFour) {
|
|
148
|
+
return `${twentyFour[1].padStart(2, "0")}:${twentyFour[2]}`;
|
|
149
|
+
}
|
|
150
|
+
const twelve = value.match(/^(\d{1,2})(?::([0-5]\d))?\s*(am|pm)$/);
|
|
151
|
+
if (twelve) {
|
|
152
|
+
let hours = Number.parseInt(twelve[1], 10);
|
|
153
|
+
const minutes = twelve[2] ?? "00";
|
|
154
|
+
if (hours < 1 || hours > 12) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
if (twelve[3] === "pm" && hours !== 12) {
|
|
158
|
+
hours += 12;
|
|
159
|
+
}
|
|
160
|
+
else if (twelve[3] === "am" && hours === 12) {
|
|
161
|
+
hours = 0;
|
|
162
|
+
}
|
|
163
|
+
return `${String(hours).padStart(2, "0")}:${minutes}`;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Set the value from a human 12h/24h string. On success updates the value and
|
|
169
|
+
* returns true; on a parse failure emits `parse-error` and returns false.
|
|
170
|
+
*/
|
|
171
|
+
setTimeString(value) {
|
|
172
|
+
const parsed = TimeField.parseTime(value);
|
|
173
|
+
if (parsed === null) {
|
|
174
|
+
this.dispatchEvent(new CustomEvent("parse-error", {
|
|
175
|
+
bubbles: true,
|
|
176
|
+
composed: true,
|
|
177
|
+
detail: { value },
|
|
178
|
+
}));
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
this.syncValue(parsed);
|
|
182
|
+
if (this.isRendered) {
|
|
183
|
+
this.update();
|
|
184
|
+
}
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
135
187
|
syncValue(nextValue) {
|
|
136
188
|
this.valueInternal = nextValue;
|
|
137
189
|
this.setAttribute("value", nextValue);
|
|
@@ -193,11 +245,4 @@ export class BoxTimeFieldElement extends FormAssociatedElement {
|
|
|
193
245
|
this.applyInvalidState(this.inputEl, this.errorEl);
|
|
194
246
|
}
|
|
195
247
|
}
|
|
196
|
-
|
|
197
|
-
const existingElement = customElements.get(tagName);
|
|
198
|
-
if (existingElement) {
|
|
199
|
-
return existingElement;
|
|
200
|
-
}
|
|
201
|
-
customElements.define(tagName, BoxTimeFieldElement);
|
|
202
|
-
return BoxTimeFieldElement;
|
|
203
|
-
};
|
|
248
|
+
TimeField.register();
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { BaseElement } from "../../core/index.js";
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class Avatar extends BaseElement {
|
|
3
|
+
static readonly tagName: string;
|
|
3
4
|
static get observedAttributes(): string[];
|
|
4
5
|
private avatarEl;
|
|
6
|
+
/** Corner indicator: `""`/`none` (default), `online`, or `external`. */
|
|
7
|
+
get badge(): string;
|
|
8
|
+
set badge(value: string);
|
|
5
9
|
get alt(): string;
|
|
6
10
|
set alt(value: string);
|
|
7
11
|
get initials(): string;
|
|
@@ -16,6 +20,6 @@ export declare class BoxAvatarElement extends BaseElement {
|
|
|
16
20
|
set tone(value: string);
|
|
17
21
|
protected renderTemplate(): void;
|
|
18
22
|
protected update(): void;
|
|
23
|
+
private syncBadge;
|
|
19
24
|
private showAvatarFallback;
|
|
20
25
|
}
|
|
21
|
-
export declare const defineBoxAvatarElement: (tagName?: string) => typeof BoxAvatarElement;
|
|
@@ -76,12 +76,50 @@ const avatarStyles = `
|
|
|
76
76
|
[part="image"][hidden] {
|
|
77
77
|
display: none;
|
|
78
78
|
}
|
|
79
|
+
|
|
80
|
+
/* Corner status/external indicator. Absent by default (no layout impact). */
|
|
81
|
+
[part="badge"] {
|
|
82
|
+
position: absolute;
|
|
83
|
+
inset-block-end: 0;
|
|
84
|
+
inset-inline-end: 0;
|
|
85
|
+
box-sizing: border-box;
|
|
86
|
+
inline-size: max(8px, calc(var(--avatar-size, ${DEFAULT_SIZE}px) * 0.34));
|
|
87
|
+
block-size: max(8px, calc(var(--avatar-size, ${DEFAULT_SIZE}px) * 0.34));
|
|
88
|
+
border-radius: 999px;
|
|
89
|
+
border: 2px solid var(--boe-token-surface-surface, #ffffff);
|
|
90
|
+
display: grid;
|
|
91
|
+
place-items: center;
|
|
92
|
+
color: #ffffff;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
[part="badge"][data-badge="online"] {
|
|
96
|
+
background: var(--boe-token-surface-status-surface-success, #26c281);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
[part="badge"][data-badge="external"] {
|
|
100
|
+
background: var(--boe-token-surface-status-surface-inprogress, #f5b31b);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
[part="badge"] svg {
|
|
104
|
+
inline-size: 62%;
|
|
105
|
+
block-size: 62%;
|
|
106
|
+
fill: currentColor;
|
|
107
|
+
}
|
|
79
108
|
`;
|
|
80
|
-
export class
|
|
109
|
+
export class Avatar extends BaseElement {
|
|
110
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
81
111
|
static get observedAttributes() {
|
|
82
|
-
return ["alt", "initials", "name", "size", "src", "tone"];
|
|
112
|
+
return ["alt", "badge", "initials", "name", "size", "src", "tone"];
|
|
83
113
|
}
|
|
84
114
|
avatarEl;
|
|
115
|
+
/** Corner indicator: `""`/`none` (default), `online`, or `external`. */
|
|
116
|
+
get badge() {
|
|
117
|
+
const value = this.getAttribute("badge");
|
|
118
|
+
return value === "online" || value === "external" ? value : "none";
|
|
119
|
+
}
|
|
120
|
+
set badge(value) {
|
|
121
|
+
this.setAttribute("badge", value);
|
|
122
|
+
}
|
|
85
123
|
get alt() {
|
|
86
124
|
return this.getAttribute("alt") ?? this.name;
|
|
87
125
|
}
|
|
@@ -171,6 +209,33 @@ export class BoxAvatarElement extends BaseElement {
|
|
|
171
209
|
}
|
|
172
210
|
this.showAvatarFallback(existingFallback, fallback);
|
|
173
211
|
}
|
|
212
|
+
this.syncBadge();
|
|
213
|
+
}
|
|
214
|
+
syncBadge() {
|
|
215
|
+
const badge = this.badge;
|
|
216
|
+
let badgeEl = this.avatarEl.querySelector('[part="badge"]');
|
|
217
|
+
if (badge === "none") {
|
|
218
|
+
badgeEl?.remove();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (!badgeEl) {
|
|
222
|
+
badgeEl = document.createElement("span");
|
|
223
|
+
badgeEl.setAttribute("part", "badge");
|
|
224
|
+
this.avatarEl.append(badgeEl);
|
|
225
|
+
}
|
|
226
|
+
badgeEl.dataset.badge = badge;
|
|
227
|
+
if (badge === "external") {
|
|
228
|
+
badgeEl.setAttribute("aria-label", "External user");
|
|
229
|
+
badgeEl.setAttribute("role", "img");
|
|
230
|
+
// Outward arrow marks an external collaborator.
|
|
231
|
+
badgeEl.innerHTML =
|
|
232
|
+
'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 3h7v7h-2V6.4l-6.3 6.3-1.4-1.4L9.6 5H6V3z"/></svg>';
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
badgeEl.setAttribute("aria-label", "Online");
|
|
236
|
+
badgeEl.setAttribute("role", "img");
|
|
237
|
+
badgeEl.innerHTML = "";
|
|
238
|
+
}
|
|
174
239
|
}
|
|
175
240
|
showAvatarFallback(existingFallback, fallback) {
|
|
176
241
|
const fallbackEl = existingFallback ?? document.createElement("span");
|
|
@@ -181,11 +246,4 @@ export class BoxAvatarElement extends BaseElement {
|
|
|
181
246
|
}
|
|
182
247
|
}
|
|
183
248
|
}
|
|
184
|
-
|
|
185
|
-
const existingElement = customElements.get(tagName);
|
|
186
|
-
if (existingElement) {
|
|
187
|
-
return existingElement;
|
|
188
|
-
}
|
|
189
|
-
customElements.define(tagName, BoxAvatarElement);
|
|
190
|
-
return BoxAvatarElement;
|
|
191
|
-
};
|
|
249
|
+
Avatar.register();
|
|
@@ -5,12 +5,21 @@ import { BaseElement } from "../../core/index.js";
|
|
|
5
5
|
* `role="option"` that emits `select` with its `value` on click or Enter/Space
|
|
6
6
|
* and reflects `selected` to `aria-selected`; the host owns the list.
|
|
7
7
|
*/
|
|
8
|
-
export declare class
|
|
8
|
+
export declare class ContactDatalistItem extends BaseElement {
|
|
9
|
+
static readonly tagName: string;
|
|
9
10
|
static get observedAttributes(): string[];
|
|
10
11
|
private itemEl;
|
|
11
12
|
private avatarEl;
|
|
12
13
|
private nameEl;
|
|
14
|
+
private externalEl;
|
|
15
|
+
private subtitleEl;
|
|
13
16
|
private emailEl;
|
|
17
|
+
/** Marks the contact as an external collaborator. */
|
|
18
|
+
get external(): boolean;
|
|
19
|
+
set external(value: boolean);
|
|
20
|
+
/** Optional secondary detail line below the email (e.g. role or company). */
|
|
21
|
+
get subtitle(): string;
|
|
22
|
+
set subtitle(value: string);
|
|
14
23
|
get name(): string;
|
|
15
24
|
set name(value: string);
|
|
16
25
|
get email(): string;
|
|
@@ -28,4 +37,3 @@ export declare class BoxContactDatalistItemElement extends BaseElement {
|
|
|
28
37
|
protected setupListeners(): void;
|
|
29
38
|
protected update(): void;
|
|
30
39
|
}
|
|
31
|
-
export declare const defineBoxContactDatalistItemElement: (tagName?: string) => typeof BoxContactDatalistItemElement;
|
|
@@ -71,6 +71,13 @@ const contactStyles = `
|
|
|
71
71
|
gap: 0.1rem;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
[part="name-row"] {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: 0.4rem;
|
|
78
|
+
min-inline-size: 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
74
81
|
[part="name"] {
|
|
75
82
|
font-size: 0.9rem;
|
|
76
83
|
font-weight: 600;
|
|
@@ -79,6 +86,35 @@ const contactStyles = `
|
|
|
79
86
|
white-space: nowrap;
|
|
80
87
|
}
|
|
81
88
|
|
|
89
|
+
/* External-collaborator marker beside the name. */
|
|
90
|
+
[part="external"] {
|
|
91
|
+
flex: none;
|
|
92
|
+
font-size: 0.66rem;
|
|
93
|
+
font-weight: 700;
|
|
94
|
+
letter-spacing: 0.04em;
|
|
95
|
+
text-transform: uppercase;
|
|
96
|
+
padding: 1px 5px;
|
|
97
|
+
border-radius: 999px;
|
|
98
|
+
background: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 18%, var(--boe-token-surface-surface, #ffffff) 82%);
|
|
99
|
+
color: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 55%, var(--boe-token-text-text, #222222));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[part="external"][hidden] {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
[part="subtitle"] {
|
|
107
|
+
font-size: 0.74rem;
|
|
108
|
+
color: var(--boe-token-text-text-secondary, #6f6f6f);
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
white-space: nowrap;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
[part="subtitle"][hidden] {
|
|
115
|
+
display: none;
|
|
116
|
+
}
|
|
117
|
+
|
|
82
118
|
[part="email"] {
|
|
83
119
|
font-size: 0.78rem;
|
|
84
120
|
color: var(--boe-token-text-text-secondary, #6f6f6f);
|
|
@@ -97,14 +133,31 @@ const contactStyles = `
|
|
|
97
133
|
* `role="option"` that emits `select` with its `value` on click or Enter/Space
|
|
98
134
|
* and reflects `selected` to `aria-selected`; the host owns the list.
|
|
99
135
|
*/
|
|
100
|
-
export class
|
|
136
|
+
export class ContactDatalistItem extends BaseElement {
|
|
137
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
101
138
|
static get observedAttributes() {
|
|
102
|
-
return ["disabled", "email", "name", "selected", "src", "value"];
|
|
139
|
+
return ["disabled", "email", "external", "name", "selected", "src", "subtitle", "value"];
|
|
103
140
|
}
|
|
104
141
|
itemEl;
|
|
105
142
|
avatarEl;
|
|
106
143
|
nameEl;
|
|
144
|
+
externalEl;
|
|
145
|
+
subtitleEl;
|
|
107
146
|
emailEl;
|
|
147
|
+
/** Marks the contact as an external collaborator. */
|
|
148
|
+
get external() {
|
|
149
|
+
return this.hasAttribute("external");
|
|
150
|
+
}
|
|
151
|
+
set external(value) {
|
|
152
|
+
this.toggleAttribute("external", value);
|
|
153
|
+
}
|
|
154
|
+
/** Optional secondary detail line below the email (e.g. role or company). */
|
|
155
|
+
get subtitle() {
|
|
156
|
+
return this.getAttribute("subtitle") ?? "";
|
|
157
|
+
}
|
|
158
|
+
set subtitle(value) {
|
|
159
|
+
this.setAttribute("subtitle", value);
|
|
160
|
+
}
|
|
108
161
|
get name() {
|
|
109
162
|
return this.getAttribute("name") ?? "";
|
|
110
163
|
}
|
|
@@ -160,14 +213,20 @@ export class BoxContactDatalistItemElement extends BaseElement {
|
|
|
160
213
|
<div part="item" role="option">
|
|
161
214
|
<span part="avatar" aria-hidden="true"></span>
|
|
162
215
|
<span part="body">
|
|
163
|
-
<span part="name"
|
|
216
|
+
<span part="name-row">
|
|
217
|
+
<span part="name"></span>
|
|
218
|
+
<span part="external" hidden>External</span>
|
|
219
|
+
</span>
|
|
164
220
|
<span part="email" hidden></span>
|
|
221
|
+
<span part="subtitle" hidden></span>
|
|
165
222
|
</span>
|
|
166
223
|
</div>
|
|
167
224
|
`;
|
|
168
225
|
this.itemEl = this.shadowRoot.querySelector('[part="item"]');
|
|
169
226
|
this.avatarEl = this.shadowRoot.querySelector('[part="avatar"]');
|
|
170
227
|
this.nameEl = this.shadowRoot.querySelector('[part="name"]');
|
|
228
|
+
this.externalEl = this.shadowRoot.querySelector('[part="external"]');
|
|
229
|
+
this.subtitleEl = this.shadowRoot.querySelector('[part="subtitle"]');
|
|
171
230
|
this.emailEl = this.shadowRoot.querySelector('[part="email"]');
|
|
172
231
|
}
|
|
173
232
|
setupListeners() {
|
|
@@ -215,6 +274,14 @@ export class BoxContactDatalistItemElement extends BaseElement {
|
|
|
215
274
|
}
|
|
216
275
|
}
|
|
217
276
|
this.nameEl.textContent = this.name;
|
|
277
|
+
const external = this.external;
|
|
278
|
+
this.externalEl.hidden = !external;
|
|
279
|
+
if (external) {
|
|
280
|
+
this.itemEl.setAttribute("aria-description", "External collaborator");
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this.itemEl.removeAttribute("aria-description");
|
|
284
|
+
}
|
|
218
285
|
if (this.email) {
|
|
219
286
|
this.emailEl.hidden = false;
|
|
220
287
|
this.emailEl.textContent = this.email;
|
|
@@ -223,13 +290,9 @@ export class BoxContactDatalistItemElement extends BaseElement {
|
|
|
223
290
|
this.emailEl.hidden = true;
|
|
224
291
|
this.emailEl.textContent = "";
|
|
225
292
|
}
|
|
293
|
+
const subtitle = this.subtitle;
|
|
294
|
+
this.subtitleEl.hidden = !subtitle;
|
|
295
|
+
this.subtitleEl.textContent = subtitle;
|
|
226
296
|
}
|
|
227
297
|
}
|
|
228
|
-
|
|
229
|
-
const existingElement = customElements.get(tagName);
|
|
230
|
-
if (existingElement) {
|
|
231
|
-
return existingElement;
|
|
232
|
-
}
|
|
233
|
-
customElements.define(tagName, BoxContactDatalistItemElement);
|
|
234
|
-
return BoxContactDatalistItemElement;
|
|
235
|
-
};
|
|
298
|
+
ContactDatalistItem.register();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseElement } from "../../core/index.js";
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class Persona extends BaseElement {
|
|
3
|
+
static readonly tagName: string;
|
|
3
4
|
static get observedAttributes(): string[];
|
|
4
5
|
private avatarEl;
|
|
5
6
|
private nameEl;
|
|
@@ -25,4 +26,3 @@ export declare class BoxPersonaElement extends BaseElement {
|
|
|
25
26
|
protected update(): void;
|
|
26
27
|
private showAvatarFallback;
|
|
27
28
|
}
|
|
28
|
-
export declare const defineBoxPersonaElement: (tagName?: string) => typeof BoxPersonaElement;
|
|
@@ -120,7 +120,8 @@ const personaStyles = `
|
|
|
120
120
|
color: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 58%, var(--boe-token-text-text, #222222) 42%);
|
|
121
121
|
}
|
|
122
122
|
`;
|
|
123
|
-
export class
|
|
123
|
+
export class Persona extends BaseElement {
|
|
124
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
124
125
|
static get observedAttributes() {
|
|
125
126
|
return ["description", "initials", "name", "size", "src", "status", "subtitle", "tone"];
|
|
126
127
|
}
|
|
@@ -262,11 +263,4 @@ export class BoxPersonaElement extends BaseElement {
|
|
|
262
263
|
}
|
|
263
264
|
}
|
|
264
265
|
}
|
|
265
|
-
|
|
266
|
-
const existingElement = customElements.get(tagName);
|
|
267
|
-
if (existingElement) {
|
|
268
|
-
return existingElement;
|
|
269
|
-
}
|
|
270
|
-
customElements.define(tagName, BoxPersonaElement);
|
|
271
|
-
return BoxPersonaElement;
|
|
272
|
-
};
|
|
266
|
+
Persona.register();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseElement } from "../../core/index.js";
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class AppShell extends BaseElement {
|
|
3
|
+
static readonly tagName: string;
|
|
3
4
|
static get observedAttributes(): string[];
|
|
4
5
|
private shellEl;
|
|
5
6
|
private titleEl;
|
|
@@ -23,4 +24,3 @@ export declare class BoxAppShellElement extends BaseElement {
|
|
|
23
24
|
private syncLandmarkVisibility;
|
|
24
25
|
protected update(): void;
|
|
25
26
|
}
|
|
26
|
-
export declare const defineBoxAppShellElement: (tagName?: string) => typeof BoxAppShellElement;
|
|
@@ -134,7 +134,8 @@ const appShellStyles = `
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
`;
|
|
137
|
-
export class
|
|
137
|
+
export class AppShell extends BaseElement {
|
|
138
|
+
static tagName = DEFAULT_TAG_NAME;
|
|
138
139
|
static get observedAttributes() {
|
|
139
140
|
return ["heading", "nav-label", "aside-label"];
|
|
140
141
|
}
|
|
@@ -248,11 +249,4 @@ export class BoxAppShellElement extends BaseElement {
|
|
|
248
249
|
this.syncLandmarkVisibility();
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
|
-
|
|
252
|
-
const existingElement = customElements.get(tagName);
|
|
253
|
-
if (existingElement) {
|
|
254
|
-
return existingElement;
|
|
255
|
-
}
|
|
256
|
-
customElements.define(tagName, BoxAppShellElement);
|
|
257
|
-
return BoxAppShellElement;
|
|
258
|
-
};
|
|
252
|
+
AppShell.register();
|