@vuu-ui/vuu-ui-controls 0.8.5-debug

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.
Files changed (36) hide show
  1. package/cjs/index.js +44047 -0
  2. package/cjs/index.js.map +7 -0
  3. package/esm/index.js +44136 -0
  4. package/esm/index.js.map +7 -0
  5. package/index.css +899 -0
  6. package/index.css.map +7 -0
  7. package/package.json +29 -0
  8. package/types/drag-drop/DragDropProvider.d.ts +22 -0
  9. package/types/drag-drop/Draggable.d.ts +12 -0
  10. package/types/drag-drop/DropIndicator.d.ts +7 -0
  11. package/types/drag-drop/drag-utils.d.ts +48 -0
  12. package/types/drag-drop/dragDropTypesNext.d.ts +72 -0
  13. package/types/drag-drop/drop-target-utils.d.ts +75 -0
  14. package/types/drag-drop/index.d.ts +2 -0
  15. package/types/drag-drop/useAutoScroll.d.ts +11 -0
  16. package/types/drag-drop/useDragDisplacers.d.ts +15 -0
  17. package/types/drag-drop/useDragDropIndicator.d.ts +2 -0
  18. package/types/drag-drop/useDragDropNaturalMovementNext.d.ts +2 -0
  19. package/types/drag-drop/useDragDropNext.d.ts +2 -0
  20. package/types/drag-drop/useDragSpacers.d.ts +7 -0
  21. package/types/drag-drop/useDropIndicator.d.ts +8 -0
  22. package/types/drag-drop/useTransition.d.ts +3 -0
  23. package/types/editable-label/EditableLabel.d.ts +14 -0
  24. package/types/editable-label/index.d.ts +1 -0
  25. package/types/index.d.ts +2 -0
  26. package/types/tabstrip/Tab.d.ts +27 -0
  27. package/types/tabstrip/TabMenu.d.ts +12 -0
  28. package/types/tabstrip/TabMenuOptions.d.ts +10 -0
  29. package/types/tabstrip/TabsTypes.d.ts +112 -0
  30. package/types/tabstrip/Tabstrip.d.ts +4 -0
  31. package/types/tabstrip/index.d.ts +4 -0
  32. package/types/tabstrip/tabstrip-dom-utils.d.ts +3 -0
  33. package/types/tabstrip/useAnimatedSelectionThumb.d.ts +6 -0
  34. package/types/tabstrip/useKeyboardNavigation.d.ts +29 -0
  35. package/types/tabstrip/useSelection.d.ts +14 -0
  36. package/types/tabstrip/useTabstrip.d.ts +49 -0
package/index.css.map ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/vuu-ui-controls/src/editable-label/EditableLabel.css", "../../../packages/vuu-shell/src/connection-status/ConnectionStatusIcon.css", "../../../packages/vuu-shell/src/login/LoginPanel.css", "../../../packages/vuu-shell/src/session-editing-form/SessionEditingForm.css", "../../../packages/vuu-shell/src/user-profile/UserPanel.css", "../../../packages/vuu-shell/src/user-profile/UserProfile.css", "../../../packages/vuu-shell/src/theme-switch/ThemeSwitch.css", "../../../packages/vuu-shell/src/app-header/AppHeader.css", "../../../packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.css", "../../../packages/vuu-shell/src/left-nav/LeftNav.css", "../../../packages/vuu-shell/src/shell.css", "../../../packages/vuu-popups/src/dialog/Dialog.css", "../../../packages/vuu-popups/src/menu/MenuList.css", "../../../packages/vuu-popups/src/popup/popup-service.css", "../../../packages/vuu-popups/src/popup-menu/PopupMenu.css", "../../../packages/vuu-ui-controls/src/drag-drop/Draggable.css", "../../../packages/vuu-ui-controls/src/tabstrip/Tabstrip.css", "../../../packages/vuu-ui-controls/src/tabstrip/TabMenu.css", "../../../packages/vuu-ui-controls/src/tabstrip/Tab.css"],
4
+ "sourcesContent": [".vuuEditableLabel {\n --saltInput-minWidth: 14px;\n --saltInput-position: absolute;\n --editableLabel-padding: var(--saltEditableLabel-padding, 6px);\n --editableLabel-height: var(--saltEditableLabel-height, 26px);\n color: inherit;\n cursor: default;\n display: flex;\n flex-direction: column;\n font-size: var(--salt-text-fontSize);\n height: var(--editableLabel-height);\n justify-content: center;\n outline: none;\n padding: 0 var(--editableLabel-padding);\n position: relative;\n z-index: var(--salt-zIndex-default);\n}\n\n.vuuEditableLabel:before {\n content: attr(data-text);\n display: block;\n height: 0px;\n visibility: hidden;\n white-space: pre-wrap;\n}\n\n.vuuEditableLabel .saltInput {\n font-weight: var(--salt-text-fontWeight);\n left: var(--editableLabel-padding, 0);\n padding: 0;\n outline-style: none;\n right: var(--editableLabel-padding, 0);\n}\n\n.vuuEditableLabel-input {\n outline: none;\n}\n", ".vuuStatus-container {\n\tdisplay: flex;\n}\n\n.vuuStatus-text {\n\talign-self: center;\n}\n\n\n.vuuStatus {\n\t--vuu-icon-height: 18px;\n\t--vuu-icon-padding: var(--vuuStatus-padding, 6px);\n\t--vuu-icon-width: var(--vuuStatus-width, auto);\n\t--vuu-icon-min-width: var(--vuuStatus-min-width, 20px);\n\talign-items: center;\n\tdisplay: inline-flex;\n\theight: var(--vuu-icon-height);\n\tjustify-content: center;\n\tmin-width: var(--vuu-icon-min-width);\n\tpadding: 0 var(--vuu-icon-padding);\n\twidth: var(--vuu-icon-width);\n\tposition: relative;\n}\n\n.vuuStatus[data-icon]::after {\n\tinset: 0 0 0 0;\n\tcontent: '';\n\tbox-shadow: 0 0 0 0 black;\n\tposition: absolute;\n\tmask: var(--vuu-icon-svg) center center/20px 20px no-repeat;\n\t-webkit-mask: var(--vuu-icon-svg) center center/20px 20px no-repeat;\n}\n\n.vuuActiveStatus::after {\n\t--vuu-icon-svg: var(--svg-active-status);\n\tbackground-color: rgb(0, 255, 0);\n}\n\n.vuuConnectingStatus::after {\n\t--vuu-icon-svg: var(--svg-connecting-status);\n\tbackground-color: orange;\n\ttransform: scale(1);\n\tanimation: infinite pulse 1s;\n}\n\n.vuuDisconnectedStatus::after {\n\t--vuu-icon-svg: var(--svg-disconnected-status);\n\tbackground-color: red;\n\ttransform: scale(1);\n\tanimation: infinite pulse 0.5s;\n}\n\n@keyframes pulse {\n\t0% {\n\t\ttransform: scale(0.95);\n\t\tbox-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);\n\t}\n\n\t70% {\n\t\ttransform: scale(1);\n\t\tbox-shadow: 0 0 0 0 rgba(0, 0, 0, 0);\n\t}\n\n\t100% {\n\t\ttransform: scale(0.95);\n\t\tbox-shadow: 0 0 0 0 rgba(0, 0, 0, 0);\n\t}\n}", ".vuuLoginPanel {\n --hwTextInput-border: solid 1px #ccc;\n --hwTextInput-height: 28px;\n --hwTextInput-padding: 0 12px;\n --hwTextInput-width: 100%;\n --login-row-height: 60px;\n align-content: center;\n align-items: center;\n border: solid 1px lightgray;\n display: flex;\n flex-direction: column;\n gap: 24px;\n justify-content: center;\n justify-items: center;\n margin: 0 auto;\n padding: 48px 48px 24px 48px;\n width: fit-content;\n}\n\n.vuuLoginPanel-login {\n grid-column: 2/3;\n align-self: end;\n justify-self: end;\n}\n", ".vuuSessionEditingForm {\n display: flex;\n flex-direction: column;\n gap: 3px;\n min-width: 400px;\n padding: 6px;\n}\n\n.vuuSessionEditingForm-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n gap: 3px;\n overflow: auto;\n}\n\n.vuuSessionEditingForm-field {\n align-items: center;\n display: flex;\n height: 32px;\n}\n\n.vuuSessionEditingForm-fieldLabel {\n flex: 0 0 50%;\n}\n\n.vuuSessionEditingForm-fieldValue {\n max-width: 50%;\n}\n\n.vuuSessionEditingForm-fieldValue.vuuReadOnly {\n font-weight: var(--salt-text-label-fontWeight-strong);\n}\n\n.vuuSessionEditingForm-buttonbar {\n align-items: center;\n border-top: solid 1px var(--salt-container-primary-borderColor);\n display: flex;\n justify-content: flex-end;\n flex: 0 0 autox;\n gap: 6px;\n padding-top: 6px;\n}\n\n.vuuSessionEditingForm-errorBanner {\n --vuu-icon-left: 3px;\n --vuu-icon-size: 18px;\n --vuu-icon-top: 3px;\n border: solid 1px var(--salt-status-error-borderColor);\n line-height: 24px;\n padding: 0 6px 0 26px;\n position: relative;\n}", ".vuuUserPanel {\n background-color: white;\n display: flex;\n flex-direction: column;\n max-height: 400px;\n padding: 12px;\n}\n\nvuuUserPanel-history {\n flex: 1 1 auto;\n}\n\n.vuuUserPanel-buttonBar {\n --saltButton-width: 100%;\n align-items: flex-end;\n border-top: 1px solid var(--surface3);\n display: flex;\n flex: 0 0 32px;\n justify-content: flex-start;\n}\n\n.btn-logout {\n --hwButton-icon-left: 12px;\n --hwButton-padding: 0 6px 0 24px;\n padding-left: 24px;\n}\n", ".vuuUserProfile {\n --svg-icon: var(--svg-user);\n}\n", ".vuuThemeSwitch {\n --saltButton-minWidth: 22px;\n}\n\n.vuuThemeSwitch {\n --svg-light: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><path d=\"M24 31q2.9 0 4.95-2.05Q31 26.9 31 24q0-2.9-2.05-4.95Q26.9 17 24 17q-2.9 0-4.95 2.05Q17 21.1 17 24q0 2.9 2.05 4.95Q21.1 31 24 31Zm0 3q-4.15 0-7.075-2.925T14 24q0-4.15 2.925-7.075T24 14q4.15 0 7.075 2.925T34 24q0 4.15-2.925 7.075T24 34ZM3.5 25.5q-.65 0-1.075-.425Q2 24.65 2 24q0-.65.425-1.075Q2.85 22.5 3.5 22.5h5q.65 0 1.075.425Q10 23.35 10 24q0 .65-.425 1.075-.425.425-1.075.425Zm36 0q-.65 0-1.075-.425Q38 24.65 38 24q0-.65.425-1.075.425-.425 1.075-.425h5q.65 0 1.075.425Q46 23.35 46 24q0 .65-.425 1.075-.425.425-1.075.425ZM24 10q-.65 0-1.075-.425Q22.5 9.15 22.5 8.5v-5q0-.65.425-1.075Q23.35 2 24 2q.65 0 1.075.425.425.425.425 1.075v5q0 .65-.425 1.075Q24.65 10 24 10Zm0 36q-.65 0-1.075-.425-.425-.425-.425-1.075v-5q0-.65.425-1.075Q23.35 38 24 38q.65 0 1.075.425.425.425.425 1.075v5q0 .65-.425 1.075Q24.65 46 24 46ZM12 14.1l-2.85-2.8q-.45-.45-.425-1.075.025-.625.425-1.075.45-.45 1.075-.45t1.075.45L14.1 12q.4.45.4 1.05 0 .6-.4 1-.4.45-1.025.45-.625 0-1.075-.4Zm24.7 24.75L33.9 36q-.4-.45-.4-1.075t.45-1.025q.4-.45 1-.45t1.05.45l2.85 2.8q.45.45.425 1.075-.025.625-.425 1.075-.45.45-1.075.45t-1.075-.45ZM33.9 14.1q-.45-.45-.45-1.05 0-.6.45-1.05l2.8-2.85q.45-.45 1.075-.425.625.025 1.075.425.45.45.45 1.075t-.45 1.075L36 14.1q-.4.4-1.025.4-.625 0-1.075-.4ZM9.15 38.85q-.45-.45-.45-1.075t.45-1.075L12 33.9q.45-.45 1.05-.45.6 0 1.05.45.45.45.45 1.05 0 .6-.45 1.05l-2.8 2.85q-.45.45-1.075.425-.625-.025-1.075-.425ZM24 24Z\"/></svg>');\n --svg-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><path d=\"M24 42q-7.5 0-12.75-5.25T6 24q0-7.5 5.25-12.75T24 6q.4 0 .85.025.45.025 1.15.075-1.8 1.6-2.8 3.95-1 2.35-1 4.95 0 4.5 3.15 7.65Q28.5 25.8 33 25.8q2.6 0 4.95-.925T41.9 22.3q.05.6.075.975Q42 23.65 42 24q0 7.5-5.25 12.75T24 42Zm0-3q5.45 0 9.5-3.375t5.05-7.925q-1.25.55-2.675.825Q34.45 28.8 33 28.8q-5.75 0-9.775-4.025T19.2 15q0-1.2.25-2.575.25-1.375.9-3.125-4.9 1.35-8.125 5.475Q9 18.9 9 24q0 6.25 4.375 10.625T24 39Zm-.2-14.85Z\"/></svg>');\n}\n\n.salt-density-high .vuuThemeSwitch {\n --saltButton-minWidth: 16px;\n --saltButton-width: 18px;\n --vuuThemeSwitch-iconSize: 16px;\n}\n\n.vuuThemeSwitch [data-icon] {\n --vuu-icon-size: var(--vuuThemeSwitch-iconSize,18px);\n}\n\n.vuuThemeSwitch [data-icon='light'] {\n --vuu-icon-svg: var(--svg-light);\n}\n.vuuThemeSwitch [data-icon='dark'] {\n --vuu-icon-svg: var(--svg-dark);\n}\n", ".vuuAppHeader {\n align-items: center;\n border-bottom: solid 1px var(--salt-container-secondary-borderColor);\n display: flex;\n height: 40px;\n justify-content: flex-end;\n}\n\n.vuu-purple-theme .vuuAppHeader {\n border-radius: 8px;\n border: 1px solid #D6D7DA; \n height: 44px;\n margin-bottom: 8px;\n}", ".vuuContextPanel {\n position: relative;\n transition: width .3s ease-in-out;\n width: var(--vuu-side-panel-width, 0px) !important;\n z-index: 1;\n}\n\n.vuuContextPanel-expanded {\n --vuu-side-panel-width: 300px !important;\n --vuu-side-panel-shadow: -4px 4px 4px rgba(0, 0, 0, 0.1);\n --vuu-side-panel-padding: 24px;\n}\n\n.vuuContextPanel-overlay {\n width: 0px !important;\n}\n\n.vuuContextPanel-inner {\n background-color: var(--salt-container-primary-background);\n box-shadow: var(--vuu-side-panel-shadow, none);\n height: 100%;\n padding-bottom: 24px;\n padding-top: 24px;\n padding-left: var(--vuu-side-panel-padding, 0);\n padding-right: var(--vuu-side-panel-padding, 0);\n position: absolute;\n right: 0;\n top:0;\n transition-property: padding-left, padding-right, width;\n transition-duration: .3s;\n transition-timing-function: ease-in-out;\n width: var(--vuu-side-panel-width, 0px);\n\n}\n\n.vuuContextPanel-header {\n align-items: center;\n display: flex;\n flex-wrap: nowrap;\n height: 27px;\n justify-content: space-between;\n}\n\n.vuuContextPanel-title {\n font-size: 20px;\n font-weight: 700;\n white-space: nowrap;\n}", ".vuuLeftNav {\n\n --svg-demo: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M11.3333 11C11.52 11 11.6667 10.8533 11.6667 10.6667C11.6667 10.48 11.52 10.3333 11.3333 10.3333C11.1467 10.3333 11 10.48 11 10.6667C11 10.8533 11.1467 11 11.3333 11Z\"/><path d=\"M5.99999 8.66667C6.36818 8.66667 6.66666 8.36819 6.66666 8C6.66666 7.63181 6.36818 7.33334 5.99999 7.33334C5.63181 7.33334 5.33333 7.63181 5.33333 8C5.33333 8.36819 5.63181 8.66667 5.99999 8.66667Z\"/><path d=\"M8.66667 6C9.03486 6 9.33333 5.70152 9.33333 5.33333C9.33333 4.96514 9.03486 4.66667 8.66667 4.66667C8.29848 4.66667 8 4.96514 8 5.33333C8 5.70152 8.29848 6 8.66667 6Z\"/><path d=\"M8.66667 11.3333C9.03486 11.3333 9.33333 11.0349 9.33333 10.6667C9.33333 10.2985 9.03486 10 8.66667 10C8.29848 10 8 10.2985 8 10.6667C8 11.0349 8.29848 11.3333 8.66667 11.3333Z\"/><path d=\"M11.3333 8.33333C11.52 8.33333 11.6667 8.18666 11.6667 8C11.6667 7.81333 11.52 7.66666 11.3333 7.66666C11.1467 7.66666 11 7.81333 11 8C11 8.18666 11.1467 8.33333 11.3333 8.33333Z\"/><path d=\"M8.66667 8.66667C9.03486 8.66667 9.33333 8.36819 9.33333 8C9.33333 7.63181 9.03486 7.33334 8.66667 7.33334C8.29848 7.33334 8 7.63181 8 8C8 8.36819 8.29848 8.66667 8.66667 8.66667Z\"/><path d=\"M2 2H14V3.33333H2V2Z\"/><path d=\"M3.33333 6.33333C3.88561 6.33333 4.33333 5.88562 4.33333 5.33333C4.33333 4.78105 3.88561 4.33333 3.33333 4.33333C2.78104 4.33333 2.33333 4.78105 2.33333 5.33333C2.33333 5.88562 2.78104 6.33333 3.33333 6.33333Z\"/><path d=\"M3.33333 9C3.88561 9 4.33333 8.55228 4.33333 8C4.33333 7.44772 3.88561 7 3.33333 7C2.78104 7 2.33333 7.44772 2.33333 8C2.33333 8.55228 2.78104 9 3.33333 9Z\"/><path d=\"M3.33333 11.6667C3.88561 11.6667 4.33333 11.2189 4.33333 10.6667C4.33333 10.1144 3.88561 9.66666 3.33333 9.66666C2.78104 9.66666 2.33333 10.1144 2.33333 10.6667C2.33333 11.2189 2.78104 11.6667 3.33333 11.6667Z\"/><path d=\"M11.3333 5.66667C11.52 5.66667 11.6667 5.52 11.6667 5.33333C11.6667 5.14667 11.52 5 11.3333 5C11.1467 5 11 5.14667 11 5.33333C11 5.52 11.1467 5.66667 11.3333 5.66667Z\"/><path d=\"M5.99999 11.3333C6.36818 11.3333 6.66666 11.0349 6.66666 10.6667C6.66666 10.2985 6.36818 10 5.99999 10C5.63181 10 5.33333 10.2985 5.33333 10.6667C5.33333 11.0349 5.63181 11.3333 5.99999 11.3333Z\"/><path d=\"M5.99999 6C6.36818 6 6.66666 5.70152 6.66666 5.33333C6.66666 4.96514 6.36818 4.66667 5.99999 4.66667C5.63181 4.66667 5.33333 4.96514 5.33333 5.33333C5.33333 5.70152 5.63181 6 5.99999 6Z\"/><path d=\"M2 12.6667H14V14H2V12.6667Z\"/></svg>');\n --svg-tables: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2 6H4.66667V3.33334H3.33333C2.6 3.33334 2 3.93334 2 4.66667V6ZM2 9.33334H4.66667V6.66667H2V9.33334ZM5.33333 9.33334H8V6.66667H5.33333V9.33334ZM8.66667 9.33334H11.3333V6.66667H8.66667V9.33334ZM5.33333 6H8V3.33334H5.33333V6ZM8.66667 3.33334V6H11.3333V3.33334H8.66667ZM12 9.33334H14.6667V6.66667H12V9.33334ZM3.33333 12.6667H4.66667V10H2V11.3333C2 12.0667 2.6 12.6667 3.33333 12.6667ZM5.33333 12.6667H8V10H5.33333V12.6667ZM8.66667 12.6667H11.3333V10H8.66667V12.6667ZM12 12.6667H13.3333C14.0667 12.6667 14.6667 12.0667 14.6667 11.3333V10H12V12.6667ZM12 3.33334V6H14.6667V4.66667C14.6667 3.93334 14.0667 3.33334 13.3333 3.33334H12Z\"/></svg>');\n --svg-templates: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M15.3333 12.6667H14L14 3.33334H15.3333L15.3333 12.6667ZM12.6667 12.6667H11.3333L11.3333 3.33334H12.6667L12.6667 12.6667ZM1.33333 12.6667L9.33333 12.6667C9.69999 12.6667 9.99999 12.3667 9.99999 12V4.00001C9.99999 3.63334 9.69999 3.33334 9.33333 3.33334L1.33333 3.33334C0.966661 3.33334 0.666661 3.63334 0.666661 4.00001L0.666661 12C0.666661 12.3667 0.966661 12.6667 1.33333 12.6667ZM1.99999 4.66667L8.66666 4.66667V11.3333L1.99999 11.3333L1.99999 4.66667Z\"/></svg>');\n --svg-layouts: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M15.3333 10H14V11.3333H15.3333V10ZM15.3333 12.6667H14V14H15.3333V12.6667ZM15.3333 7.33333H14V8.66667H15.3333V7.33333ZM10 2H8.66667V3.33333H10V2ZM15.3333 4.66667H14V6H15.3333V4.66667ZM0.666672 14H7.33334V10H0.666672V14ZM2.00001 4.66667H0.666672V6H2.00001V4.66667ZM10 12.6667H8.66667V14H10V12.6667ZM12.6667 2H11.3333V3.33333H12.6667V2ZM15.3333 2H14V3.33333H15.3333V2ZM12.6667 12.6667H11.3333V14H12.6667V12.6667ZM2.00001 7.33333H0.666672V8.66667H2.00001V7.33333ZM7.33334 2H6.00001V3.33333H7.33334V2ZM4.66667 2H3.33334V3.33333H4.66667V2ZM2.00001 2H0.666672V3.33333H2.00001V2Z\"/></svg>');\n --vuu-accent-color: #f37880;\n --vuu-light-text-primary: #15171b;\n background-color: #2A015F;\n container-type: inline-size;\n display: flex;\n flex-direction: column;\n padding: 32px 16px;\n transition: width .3s ease-in-out;\n\n}\n\n.vuuLeftNav-logo {\n display: flex;\n flex: 0 0 auto;\n justify-content: center;\n}\n\n.vuuLeftNav-main {\n flex: 1 1 auto;\n}\n\n.vuuLeftNav-menu {\n color: white;\n margin-top: 102px;\n padding: 0;\n}\n\n.vuuLeftNav-menuitem {\n --vuu-icon-color: white;\n align-items: center;\n border-radius: 6px;\n display: flex;\n font-weight: 700;\n height: 40px;\n line-height: 24px;\n list-style: none;\n padding: 8px 16px 8px 48px; \n}\n\n.vuuLeftNav-menuitem[data-icon] {\n --vuu-icon-left: 32px;\n --vuu-icon-size: 16px;\n}\n\n.vuuLeftNav-menuitem[data-icon='demo'] {\n --vuu-icon-svg: var(--svg-demo);\n }\n.vuuLeftNav-menuitem[data-icon='tables'] {\n --vuu-icon-svg: var(--svg-tables);\n }\n.vuuLeftNav-menuitem[data-icon='templates'] {\n --vuu-icon-svg: var(--svg-templates);\n }\n.vuuLeftNav-menuitem[data-icon='layouts'] {\n --vuu-icon-svg: var(--svg-layouts);\n }\n\n .vuuLeftNav-menuitem-label {\n white-space: nowrap;\n }\n\n.vuuLeftNav-menuitem-active {\n --vuu-icon-color: var(--vuu-accent-color);\n background: rgba(255, 255, 255, 0.10);\n border-left: solid 4px var(--vuu-accent-color);\n}\n\n@container (max-width: 100px) {\n .vuuLeftNav-menuitem {\n padding-left: 28px;\n }\n .vuuLeftNav-menuitem-label {\n display: none;\n }\n}\n\n.vuuLeftNav-buttonBar {\n align-items: center;\n display: flex;\n flex: 0 0 100px;\n justify-content: center;;\n}\n\n.vuuLeftNav-toggleButton {\n --vuu-icon-color: var(--vuu-light-text-primary);\n --vuu-icon-left: 11px;\n --vuu-icon-top: 10px;\n --vuu-icon-size: 16px;\n background-color: var(--vuu-accent-color);\n border-width: 0;\n border-radius: 18px;\n height: 36px;\n position: relative;\n width: 36px\n}\n\n.vuuLeftNav-toggleButton-open {\n --vuu-icon-left: 9px;\n\n}", ".vuuShell {\n background-color: var(--salt-container-primary-background, ivory);\n height: var(--vuuShell-height, 100vh);\n width: var(--vuuShell-width, 100vw);\n}\n\n.vuuShell-palette {\n --vuuView-border: none;\n --vuuView-margin: 0;\n}\n\n.vuuShell-warningPlaceholder {\n background-color: var(--salt-container-background-high);\n height: 100%;\n}\n", ".vuuDialog {\n background: var(--salt-container-primary-background);\n border: var(--vuuDialog-border, solid 1px #ccc);\n border-radius: 5px;\n padding: var(--vuuDialog-padding, 0);\n box-shadow: var(--salt-overlayable-shadow, none);\n height: var(--vuuDialog-height, fit-content);\n width: var(--vuuDialog-width, fit-content);\n}\n\n.vuuDialog-header {\n --saltButton-height: 28px;\n --saltButton-width: 28px;\n\n --saltToolbar-background: transparent;\n --saltToolbar-height: calc(var(--salt-size-base) + 5px);\n border-bottom: solid 1px var(--salt-container-primary-borderColor);\n}\n\n.vuuDialog-header > .Responsive-inner {\n align-items: center;\n}\n\n.vuuDialog-header > .Responsive-inner > :last-child{\n right: 2px;\n}\n\n\n", ".vuuMenuList {\n --context-menu-color: var(--vuuMenuList-color,#161616);\n --context-menu-padding: var(--hw-list-item-padding, 0 6px);\n --context-menu-shadow: var(--hw-dialog-shadow, 0 6px 12px rgba(0, 0, 0, 0.175));\n --focus-visible-border-color: var(--hw-focus-visible-border-color, rgb(141, 154, 179));\n --context-menu-highlight-bg: #a4d5f4;\n --context-menu-blur-focus-bg: #e0e4e9;\n --menu-item-icon-color: black;\n --menu-item-twisty-color: black;\n --menu-item-twisty-content: '';\n --menu-item-twisty-top: 50%;\n --menu-item-twisty-left: auto;\n --menu-item-twisty-right: 0px;\n --menu-icon-size: 12px;\n\n background-clip: padding-box;\n background-color: white;\n border-radius: 4px;\n border: solid 1px var(--vuuMenuList-borderColor, rgba(0, 0, 0, 0.15));\n box-shadow: var(--context-menu-shadow);\n font-size: var(--vuuMenuList-fontSize, var(--salt-text-label-fontSize));\n font-weight: var(--salt-typography-fontWeight-semiBold);\n list-style: none;\n margin: 2px 0 0;\n outline: 0;\n overflow: hidden;\n padding: var(--vuuMenuList-padding, 0);\n position: absolute;\n}\n\n.vuuMenuItem {\n align-items: center;\n border-width: 1px;\n border-color: var(--vuuMenuItem-borderColor, transparent);\n border-style: var(--vuuMenuItem-borderStyle, none);\n color: var(--context-menu-color);\n display: flex;\n gap: 6px;\n height: var(--vuuMenuItem-height, var(--hw-list-item-height, 24px));\n padding: var(--context-menu-padding);\n padding-right: 24px;\n position: relative;\n white-space: nowrap;\n}\n\n.vuuIconContainer {\n display: inline-block;\n flex: 12px 0 0;\n height: var(--menu-icon-size);\n mask-repeat: no-repeat;\n width: var(--menu-icon-size);\n}\n\n.vuuMenuItem[aria-expanded='true'] {\n background-color: var(--context-menu-blur-focus-bg);\n}\n\n.vuuMenuItem-separator {\n border-top: solid 1px var(--context-menu-blur-focus-bg);\n}\n\n.vuuMenuItem[aria-haspopup='true']:after {\n content: var(--menu-item-twisty-content);\n -webkit-mask: var(--vuu-svg-chevron-right) center center/8px 8px no-repeat;\n mask: var(---vuu-svg-chevron-right) center center/8px 8px no-repeat;\n background-color: var(--menu-item-twisty-color);\n height: 16px;\n left: var(--menu-item-twisty-left);\n right: var(--menu-item-twisty-right);\n margin-top: -8px;\n position: absolute;\n top: var(--menu-item-twisty-top);\n transition: transform 0.3s;\n width: 16px;\n}\n\n.vuuMenuItem[data-highlighted] {\n background-color: var(--context-menu-highlight-bg);\n}\n\n.vuuMenuItem:hover {\n background-color: var(--context-menu-highlight-bg);\n cursor: default;\n}\n\n.vuuMenuList-childMenuShowing .vuuMenuItem[data-highlighted] {\n background-color: var(--context-menu-blur-focus-bg);\n}\n\n.vuuMenuItem.focusVisible:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0px;\n border: dotted var(--focus-visible-border-color) 2px;\n}\n\n.vuuPopupContainer.top-bottom-right-right .popup-menu {\n left: auto;\n right: 0;\n}\n\n.popup-menu .menu-item.showing > button,\n.popup-menu .menu-item > button:focus,\n.popup-menu .menu-item > button:hover {\n text-decoration: none;\n color: rgb(0, 0, 0);\n background-color: rgb(220, 220, 220);\n}\n.vuuMenuItem-button:active,\n.vuuMenuItem-button:hover {\n outline: 0;\n}\n\n.popup-menu .menu-item.disabled > button {\n clear: both;\n font-weight: normal;\n line-height: 1.5;\n color: rgb(120, 120, 120);\n white-space: nowrap;\n text-decoration: none;\n cursor: default;\n}\n", ".vuuPopup {\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n overflow: visible;\n z-index: 1000;\n}\n\n.vuuPopup {\n position: absolute;\n}\n", ".vuuPopupMenu {\n --saltButton-height: 24px;\n --saltButton-width: 24px;\n --vuu-icon-color: #606477;\n --vuu-icon-height: 20px;\n --vuu-icon-left: 2px;\n --vuu-icon-size: 16px;\n --vuu-icon-top: 2px;\n --vuu-icon-width: 20px;\n\n background: var(--vuuPopupMenu-background, transparent);\n border-radius: 4px;\n cursor: pointer;\n display: inline-block;\n margin-top: 2px;\n padding: 2px;\n}\n\n.vuuPopupMenu:hover {\n /* --vuu-icon-color: #15171B; */\n --vuu-icon-color: var(--saltButton-text-color-hover);\n}\n\n.vuuPopupMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --vuu-icon-color: white;\n}\n\n/* temp references to theme until new theme fully incorporated */\n.vuu-theme-purple .vuuPopupMenu:hover {\n --saltButton-background-hover: #F37880;\n}\n\n.vuu-theme-purple .vuuPopupMenu-open {\n --saltButton-background: #6D18BD;\n}", ".vuuDraggable {\n background: transparent;\n box-shadow: var(--salt-overlayable-shadow-drag);\n cursor: var(--salt-draggable-grab-cursor-active);\n position: absolute;\n opacity: .95;\n z-index: 2000;\n}\n\n.vuuDraggable-spacer {\n display: var(--saltDraggable-display, inline-block);\n height: var(--saltDraggable-spacer-height, var(--tabs-tabstrip-height));\n transition: var(--saltDraggable-transitionProp, width) 0.3s ease;\n width: var(--saltDraggable-spacer-width, 0);\n}\n\n.vuuDraggable-dropIndicatorPosition {\n display: var(--saltDraggable-display, inline-block);\n /* height: var(--saltDraggable-spacer-height, var(--tabs-tabstrip-height)); */\n /* width: var(--saltDraggable-spacer-width, 0); */\n height: 0px;\n width: 100%;\n}\n\n.vuuDraggable-dropIndicatorContainer {\n transition: var(--saltDraggable-transitionProp, top) 0.2s ease;\n}\n\n.vuuDraggable-dropIndicator {\n /* height: var(--saltDraggable-spacer-height, var(--tabs-tabstrip-height)); */\n /* width: var(--saltDraggable-spacer-width, 0); */\n background-color: var(--salt-palette-accent-background);\n height: 2px;\n width: 100%;\n}\n\n.vuuDraggable-dropIndicator:before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 3px;\n background-color: var(--salt-palette-accent-background);\n position: absolute;\n top: -2px;\n left: -3px;\n}\n\n.vuuDraggable-settling {\n transition-property: left, top;\n transition-duration: .15s;\n transition-timing-function: ease-out;\n}\n\n.vuuDraggable-spacer {\n order: 1;\n}", "/* Component class applied to the root element */\n.vuuTabstrip {\n --vuuOverflowContainer-background: transparent;\n /* --tabs-tabstrip-height: var(--vuuTabstrip-height, var(--salt-size-stackable)); */\n --tabs-tabstrip-height: var(--vuuTabstrip-height, 28px);\n --tabs-tabstrip-dragging-display: none;\n --tabs-tabstrip-display: inline-flex;\n --tabs-tabstrip-background: transparent;\n\n align-items: flex-start;\n align-self: var(--saltTabs-tabstrip-alignSelf, stretch);\n border-bottom: var(--vuuTabstrip-borderBottom, solid 1px var(--salt-container-primary-borderColor));\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n position: relative;\n overflow: visible;\n display: flex;\n min-width: 28px;\n width: 100%;\n}\n\n/* Tabstrip orientation is horizontal */\n.vuuTabstrip-horizontal {\n --vuuTabActivationIndicator-height: 1px;\n --vuuTabActivationIndicator-thumb-inset: -1px 0 0 0;\n --tab-activationIndicator-borderStyle: none none solid none;\n --tab-activationIndicator-inset: auto 0px 0px 0px;\n --tab-activationIndicator-transitionProperty: left;\n --tab-activationIndicator-thumb-height: 0px;\n --tab-thumb-height: 2px;\n}\n\n/* Tabstrip orientation is vertical */\n.vuuTabstrip-vertical {\n --vuuTabActivationIndicator-thumb-inset: 0 0 0 -1px;\n\n --tab-activationIndicator-transition: top 0.3s ease;\n --tab-activationIndicator-borderStyle: none solid none none;\n --tab-activationIndicator-inset: 0px 0px 0px auto;\n --tab-activationIndicator-transitionProperty: top;\n --tab-activationIndicator-width: 1px;\n --tab-activationIndicator-thumb-width: 2px;\n\n align-self: flex-start;\n display: inline-flex;\n}\n\n.vuuTabstrip-draggingTab {\n --vuuTabs-activationIndicator-transition: none;\n}\n\n.vuuTabstrip-draggingTab .vuuTab {\n pointer-events: none;\n}\n\n/* Tabstrip orientation is horizontal */\n.vuuTabstrip-horizontal {\n height: var(--tabs-tabstrip-height);\n}\n\n.vuuTabstrip-addTabButton {\n --saltButton-height: 20px;\n --saltButton-width: 20px;\n}\n\n.vuuTabstrip-overflowMenu.saltDropdown {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.vuuTabstrip-overflowMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-text-color: var(--salt-actionable-secondary-text-color-active);\n}\n\n.vuuTabstrip-overflowMenu-open .saltButton {\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.vuuTabstrip-inner {\n width: 100%;\n align-items: center;\n display: flex;\n flex-basis: auto;\n flex-grow: 0;\n flex-shrink: 1;\n flex-wrap: wrap;\n justify-content: flex-start;\n line-height: var(--tabs-tabstrip-height);\n}\n\n.vuuTabstrip-vertical .vuuTabstrip-inner {\n flex-direction: column;\n height: auto;\n}\n\n.vuuTabstrip-centered .vuuTabstrip-inner {\n justify-content: center;\n}\n\n/* Styling applied to Draggable wrapper when used to drag a Tab */\n.vuuDraggable[class*=\"vuuTabstrip\"] {\n --tabs-tabstrip-display: flex;\n --tabs-tabstrip-height: 100%;\n --tabs-tabstrip-dragging-display: block;\n\n --tabs-tab-background: var(--salt-navigable-primary-background-hover);\n --tabs-tab-before-content: \"\";\n --tabs-tab-before-background: var(--salt-navigable-indicator-hover);\n --tabs-tab-before-height: var(--tab-activationIndicator-thumb-height);\n --tabs-tab-before-inset: var(--tab-activationIndicator-inset);\n --tabs-tab-before-width: var(--tab-activationIndicator-thumb-width);\n --tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);\n --tabs-tab-position: static;\n\n font-size: 12px;\n}\n\n.vuuDraggable-tabstrip-horizontal {\n --tab-thumb-height: 2px;\n --tabs-tabstrip-height: 28px;\n --tab-activationIndicator-thumb-height: 2px;\n --tab-activationIndicator-inset: auto 0px 0px 0px;\n\n line-height: var(--tabs-tabstrip-height);\n}\n.vuuDraggable-tabstrip-vertical {\n --tab-activationIndicator-inset: 0px 0px 0px auto;\n --tab-activationIndicator-thumb-width: 2px;\n}\n\n.vuuDraggable[class*=\"tabstrip\"] .vuuTab[aria-selected=\"true\"]:before {\n --tabs-tab-before-background: var(--salt-navigable-indicator-active);\n}\n\n/* [data-overflowed] {\n order: 99;\n visibility: hidden;\n} */\n\n.vuuTabstrip-overflowMenu-dropTarget:after {\n background: var(--salt-selectable-background-selected);\n content: \"\";\n position: absolute;\n height: 2px;\n left: 0;\n right: 0;\n bottom: 0;\n}\n", ".vuuTabMenu {\n top: -2px;\n}", "/* Class applied to root Tab element */\n.vuuTab {\n --saltEditableLabel-padding: 0;\n --saltEditableLabel-height: var(--tabs-tabstrip-height);\n --saltInputLegacy-minWidth: 4em;\n\n --tab-background: var(--salt-navigable-primary-background);\n --tab-cursor: pointer;\n --tab-position: relative;\n}\n\n.vuuTab {\n align-items: center;\n align-self: stretch;\n background: var(--vuuTab-background, var(--tab-background));\n border: none;\n border-radius: 0;\n color: var(--salt-text-primary-foreground);\n cursor: var(--vuuTab-cursor, var(--tab-cursor));\n display: var(--tabs-tabstrip-display);\n gap: 8px;\n height: var(--vuuTab-height, var(--tabs-tabstrip-height));\n letter-spacing: var(--vuuTab-letterSpacing, var(--tab-letterSpacing, 0));\n min-width: var(--vuuTab-minWidth, 40px);\n outline: none;\n padding: 0 24px;\n position: var(--vuuTab-position, var(--tab-position));\n user-select: none;\n}\n\n/* Overrides characteristic used in saltFocusVisible */\n.vuuTab.saltFocusVisible:after {\n inset: 2px 2px 4px 2px;\n}\n\n.vuuTab:not(.vuuTab-vertical) {\n margin: 0 var(--tab-spacing) 0 0;\n}\n\n.vuuTab-selected {\n color: var(--salt-text-primary-foreground);\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* main content aria of Tab */\n.vuuTab-main {\n align-items: center;;\n background: inherit;\n border: none;\n color: inherit;\n cursor: inherit;\n display: flex;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n height: var(--vuuTabstrip-height, var(--salt-size-stackable));\n outline: none;\n position: relative;\n}\n\n.vuuTab-closeable .vuuTab-main {\n border-right: solid transparent var(--salt-size-unit);\n}\n\n.vuuTab .vuuTab-closeButton {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* the close Button on a closeable Tab*/\n.vuuTab-close-icon {\n display: none;\n}\n\n.salt-density-touch .vuuTab-close-icon,\n.salt-density-low .vuuTab-close-icon {\n display: block;\n}\n\n.salt-density-touch .vuuTab-close-icon-small,\n.salt-density-low .vuuTab-close-icon-small {\n display: none;\n}\n\n.vuuTab .vuuTab-text {\n display: inline-block;\n position: relative;\n overflow: hidden;\n text-align: var(--salt-text-textAlign-embedded);\n text-overflow: ellipsis;\n top: var(--vuuTab-top, var(--tab-top, auto));\n white-space: nowrap;\n /* ensure content sits above focus ring */\n z-index: var(--salt-zIndex-default);\n}\n\n.vuuTab-vertical .vuuTab-text {\n text-align: var(--salt-text-textAlign);\n}\n\n.vuuTab .vuuTab-text:before {\n height: 0;\n content: attr(data-text);\n display: block;\n visibility: hidden;\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* FIXME: these are all focusVisible styles, but with a bespoke inset */\n.vuuTab-editing:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 2px;\n outline-color: var(--salt-focused-outlineColor);\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-offset: -2px;\n}\n\n.vuuTab-vertical.vuuTab-editing:after {\n right: 2px;\n bottom: 0;\n}\n\n.vuuTab-vertical .saltFocusVisible:not(.vuuTab-selected):before {\n left: auto;\n height: auto;\n top: 0;\n width: 2px;\n}\n\n.vuuTab.saltFocusVisible {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n}\n\n.vuuTab:before {\n content: var(--tab-before-content, none);\n background: var(--tab-before-background);\n height: var(--tab-before-height);\n inset: var(--tab-before-inset);\n position: absolute;\n width: var(--tab-before-width);\n z-index: 1;\n}\n\n.vuuTabstrip-draggingTab .vuuTab-selected:before {\n --tab-before-content: \"\";\n --tab-before-background: var(--salt-navigable-indicator-color-active);\n --tab-before-height: var(--tab-thumb-height);\n --tab-before-inset: var(--tab-activationIndicator-inset);\n --tab-before-width: var(--tab-activationIndicator-thumb-width);\n}\n\n/* Hover styling */\n.vuuDraggable .vuuTab:before,\n.vuuTab:not(.vuuTab-selected).saltFocusVisible:before,\n.vuuTab:hover:not(.vuuTab-selected):before {\n --tab-before-content: \"\";\n --tab-before-background: var(--salt-navigable-indicator-hover);\n --tab-before-height: var(--tab-thumb-height);\n --tab-before-inset: var(--tab-activationIndicator-inset);\n --tab-before-width: var(--tab-activationIndicator-thumb-width);\n}\n\n.vuuTab-selected:before {\n --tab-before-content: \"\";\n background: var(--salt-navigable-indicator-active);\n height: var(--tab-thumb-height);\n position: absolute;\n left: var(--tab-thumb-offset,0);\n bottom:0px; \n transition: var(--tab-thumb-transition, none);\n width: var(--tab-thumb-width, 100%);\n}\n\n.vuuTab:hover:not(.vuuTab-closeHover) {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n}\n\n/* .vuuTabstrip.vuuTabThumb-noTransition .vuuTab-selected:before {\n transition: none; \n} */"],
5
+ "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;;;ACnCF;AACC;AAAA;AAGD;AACC;AAAA;AAID;AACC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGD;AACC;AACA;AACA;AACA;AACA;AACA;AAAA;AAGD;AACC;AACA;AAAA;AAGD;AACC;AACA;AACA;AACA;AAAA;AAGD;AACC;AACA;AACA;AACA;AAAA;AAGD;AAAA;AAEE;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;;;ACjEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;;;ACtBF;AACI;AACA;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;ACnDJ;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;;;ACxBF;AACE;AAAA;;;ACDF;AACI;AAAA;AAGJ;AACI;AACA;AAAA;AAGJ;AACI;AACA;AACA;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AAAA;AAEJ;AACI;AAAA;;;ACvBJ;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;;;ACZF;AACI;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAIJ;AACI;AACA;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AAAA;;;AC9CJ;AAEI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIJ;AACI;AACA;AACA;AAAA;AAGJ;AACI;AAAA;AAGJ;AACI;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AACA;AACD;AACA;AACA;AAAA;AAGH;AACI;AACA;AAAA;AAGJ;AACI;AAAA;AAEJ;AACI;AAAA;AAEJ;AACI;AAAA;AAEJ;AACI;AAAA;AAGF;AACE;AAAA;AAGJ;AACG;AACA;AACA;AAAA;AAGH;AACI;AACI;AAAA;AAEJ;AACI;AAAA;AAAA;AAIR;AACI;AACA;AACA;AACA;AAAA;AAGJ;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGJ;AACI;AAAA;;;ACvGJ;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;;;ACbF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAEA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;;;ACxBF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAAA;AAGE;AACA;AACA;AAAA;AAEF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;AC3HF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;;;ACZF;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGJ;AAEI;AAAA;AAGJ;AACI;AACA;AAAA;AAIJ;AACI;AAAA;AAGJ;AACI;AAAA;;;AClCJ;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAGA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAGE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;;;ACrDF;AACE;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAIF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAIF;AACE;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAEA;AAAA;AAEF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAQF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;AClJF;AACI;AAAA;;;ACAJ;AACE;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAIF;AACE;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAIF;AAAA;AAAA;AAGE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@vuu-ui/vuu-ui-controls",
3
+ "version": "0.8.5-debug",
4
+ "description": "VUU UI Controls",
5
+ "author": "heswell",
6
+ "license": "Apache-2.0",
7
+ "dependencies": {
8
+ "@salt-ds/core": "1.2.0",
9
+ "@vuu-ui/vuu-data": "0.8.5-debug",
10
+ "@vuu-ui/vuu-data-types": "0.8.5-debug",
11
+ "@vuu-ui/vuu-layout": "0.8.5-debug",
12
+ "@vuu-ui/vuu-utils": "0.8.5-debug"
13
+ },
14
+ "peerDependencies": {
15
+ "classnames": "^2.2.6",
16
+ "react": "^17.0.2",
17
+ "react-dom": "^17.0.2"
18
+ },
19
+ "files": [
20
+ "cjs",
21
+ "esm",
22
+ "index.css",
23
+ "index.css.map",
24
+ "/types"
25
+ ],
26
+ "module": "esm/index.js",
27
+ "main": "cjs/index.js",
28
+ "types": "types/index.d.ts"
29
+ }
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from "react";
2
+ export interface DragDropContextProps {
3
+ dragSources?: Map<string, string[]>;
4
+ dropTargets?: Map<string, string[]>;
5
+ registerDragDropParty: (id: string) => void;
6
+ }
7
+ export type DragSources = {
8
+ [key: string]: {
9
+ dropTargets: string | string[];
10
+ };
11
+ };
12
+ export interface DragDropProviderProps {
13
+ children: ReactNode;
14
+ dragSources: DragSources;
15
+ }
16
+ export declare const DragDropProvider: ({ children, dragSources: dragSourcesProp, }: DragDropProviderProps) => JSX.Element;
17
+ export interface DragDropProviderResult {
18
+ isDragSource: boolean;
19
+ isDropTarget: boolean;
20
+ register: (id: string) => void;
21
+ }
22
+ export declare const useDragDropProvider: (id?: string) => DragDropProviderResult;
@@ -0,0 +1,12 @@
1
+ import { CSSProperties, MutableRefObject, TransitionEventHandler } from "react";
2
+ import "./Draggable.css";
3
+ export declare const Draggable: import("react").ForwardRefExoticComponent<{
4
+ wrapperClassName: string;
5
+ element: HTMLElement;
6
+ onTransitionEnd?: TransitionEventHandler<Element> | undefined;
7
+ scale?: number | undefined;
8
+ style: CSSProperties;
9
+ } & import("react").RefAttributes<HTMLDivElement>>;
10
+ export declare const createDragSpacer: (transitioning?: MutableRefObject<boolean>) => HTMLElement;
11
+ export declare const createDropIndicatorPosition: () => HTMLElement;
12
+ export declare const createDropIndicator: (transitioning?: MutableRefObject<boolean>) => HTMLElement;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { Rect } from "./dragDropTypesNext";
3
+ import "./DropIndicator.css";
4
+ export declare const DropIndicator: import("react").ForwardRefExoticComponent<{
5
+ className?: string | undefined;
6
+ rect: Rect;
7
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,48 @@
1
+ import { Direction, orientationType } from "./dragDropTypesNext";
2
+ export type MeasuredDropTarget = {
3
+ currentIndex: number;
4
+ dataIndex?: number;
5
+ element: HTMLElement;
6
+ index: number;
7
+ order: number | undefined;
8
+ isDraggedElement: boolean;
9
+ isOverflowIndicator?: boolean;
10
+ start: number;
11
+ end: number;
12
+ mid: number;
13
+ size: number;
14
+ };
15
+ export type targetType = {
16
+ element: HTMLElement | null;
17
+ index: number;
18
+ isLast?: boolean;
19
+ };
20
+ type Dimension = keyof Pick<DOMRect, "width" | "height">;
21
+ export declare const measureElementSizePositionAndOrder: (element: HTMLElement, dimension?: Dimension, includeAutoMargin?: boolean) => [number, number, number | undefined];
22
+ export declare const dimensions: (orientation: orientationType) => {
23
+ CLIENT_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
24
+ CONTRA: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
25
+ CONTRA_POS: "clientX" | "clientY";
26
+ DIMENSION: "width" | "height";
27
+ END: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
28
+ POS: "clientX" | "clientY";
29
+ SCROLL_POS: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
30
+ SCROLL_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
31
+ START: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
32
+ } | {
33
+ CLIENT_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
34
+ CONTRA: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
35
+ CONTRA_POS: "clientX" | "clientY";
36
+ DIMENSION: "width" | "height";
37
+ END: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
38
+ POS: "clientX" | "clientY";
39
+ SCROLL_POS: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
40
+ SCROLL_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
41
+ START: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
42
+ };
43
+ export declare const getDraggedItem: (measuredItems: MeasuredDropTarget[]) => MeasuredDropTarget;
44
+ export declare const moveDragItem: (measuredItems: MeasuredDropTarget[], dropTarget: MeasuredDropTarget) => MeasuredDropTarget[];
45
+ export declare const isDraggedElement: (item: MeasuredDropTarget) => boolean;
46
+ export declare const measureDropTargets: (container: HTMLElement, orientation: orientationType, draggedItem: HTMLElement, itemQuery?: string) => MeasuredDropTarget[];
47
+ export declare const getNextDropTarget: (dropTargets: MeasuredDropTarget[], pos: number, direction: Direction) => MeasuredDropTarget | null;
48
+ export {};
@@ -0,0 +1,72 @@
1
+ import { MouseEventHandler, RefObject } from "react";
2
+ export type ViewportRange = {
3
+ atEnd: boolean;
4
+ atStart: boolean;
5
+ from: number;
6
+ to: number;
7
+ };
8
+ type dimension = "width" | "height" | "scrollWidth" | "scrollHeight";
9
+ type dimensions = {
10
+ size: dimension;
11
+ depth: dimension;
12
+ scrollDepth: dimension;
13
+ };
14
+ export type dimensionsType = {
15
+ horizontal: dimensions;
16
+ vertical: dimensions;
17
+ };
18
+ export type orientationType = keyof dimensionsType;
19
+ export type dragStrategy = "drop-indicator" | "natural-movement";
20
+ export type Direction = "fwd" | "bwd";
21
+ export declare const FWD: Direction;
22
+ export declare const BWD: Direction;
23
+ export interface MouseOffset {
24
+ x: number;
25
+ y: number;
26
+ }
27
+ export type Rect = {
28
+ height: number;
29
+ left: number;
30
+ top: number;
31
+ width: number;
32
+ };
33
+ export interface DragHookResult {
34
+ draggable?: JSX.Element;
35
+ dropIndicator?: JSX.Element;
36
+ draggedItemIndex?: number;
37
+ isDragging: boolean;
38
+ isScrolling: RefObject<boolean>;
39
+ onMouseDown?: MouseEventHandler;
40
+ revealOverflowedItems: boolean;
41
+ }
42
+ export interface InternalDragHookResult extends Omit<DragHookResult, "isDragging" | "isScrolling"> {
43
+ beginDrag: (evt: MouseEvent) => void;
44
+ drag: (dragPos: number, mouseMoveDirection: "fwd" | "bwd") => void;
45
+ drop: () => void;
46
+ handleScrollStart: () => void;
47
+ handleScrollStop: (scrollDirection: "fwd" | "bwd", _scrollPos: number, atEnd: boolean) => void;
48
+ }
49
+ export interface DragDropProps {
50
+ allowDragDrop?: boolean | dragStrategy;
51
+ /** this is the className that will be assigned during drag to the dragged element */
52
+ draggableClassName: string;
53
+ extendedDropZone?: boolean;
54
+ id?: string;
55
+ isDragSource?: boolean;
56
+ isDropTarget?: boolean;
57
+ onDragStart?: () => void;
58
+ onDrop: (fromIndex: number, toIndex: number) => void;
59
+ onDropSettle?: (toIndex: number) => void;
60
+ orientation: orientationType;
61
+ containerRef: RefObject<HTMLElement>;
62
+ itemQuery?: string;
63
+ viewportRange?: ViewportRange;
64
+ }
65
+ export type DragDropHook = (props: DragDropProps) => DragHookResult;
66
+ export interface InternalDragDropProps extends Omit<DragDropProps, "draggableClassName"> {
67
+ draggableRef: RefObject<HTMLDivElement>;
68
+ isDragSource?: boolean;
69
+ isDropTarget?: boolean;
70
+ selected?: unknown;
71
+ }
72
+ export {};
@@ -0,0 +1,75 @@
1
+ import { ViewportRange } from "./dragDropTypesNext";
2
+ import { Direction, orientationType, Rect } from "./dragDropTypesNext";
3
+ export declare const NOT_OVERFLOWED = ":not(.wrapped)";
4
+ export declare const NOT_HIDDEN = ":not([aria-hidden=\"true\"])";
5
+ export type MeasuredDropTarget = {
6
+ /**
7
+ The index position currently occupied by this item. If draggable
8
+ is dropped here, this will be the destination drop position.
9
+ */
10
+ currentIndex: number;
11
+ dataIndex?: number;
12
+ element: HTMLElement;
13
+ id: string;
14
+ index: number;
15
+ isDraggedItem: boolean;
16
+ isLast?: boolean;
17
+ isOverflowIndicator?: boolean;
18
+ start: number;
19
+ end: number;
20
+ mid: number;
21
+ size: number;
22
+ };
23
+ export type targetType = {
24
+ element: HTMLElement | null;
25
+ index: number;
26
+ isLast?: boolean;
27
+ };
28
+ /** clones and removes id */
29
+ export declare const cloneElement: <T extends HTMLElement>(element: T) => T;
30
+ type Dimension = keyof Pick<DOMRect, "width" | "height">;
31
+ type ElementPosition = "x" | "y";
32
+ export declare const measureElementSizeAndPosition: (element: HTMLElement, dimension?: Dimension, includeAutoMargin?: boolean) => number[];
33
+ export declare const dimensions: (orientation: orientationType) => {
34
+ CLIENT_POS: "clientX" | "clientY";
35
+ CLIENT_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
36
+ CONTRA: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
37
+ CONTRA_CLIENT_POS: "clientX" | "clientY";
38
+ CONTRA_END: "width" | "height";
39
+ CONTRA_POS: ElementPosition;
40
+ DIMENSION: "width" | "height";
41
+ END: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
42
+ POS: ElementPosition;
43
+ SCROLL_POS: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
44
+ SCROLL_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
45
+ START: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
46
+ } | {
47
+ CLIENT_POS: "clientX" | "clientY";
48
+ CLIENT_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
49
+ CONTRA: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
50
+ CONTRA_CLIENT_POS: "clientX" | "clientY";
51
+ CONTRA_END: "width" | "height";
52
+ CONTRA_POS: ElementPosition;
53
+ DIMENSION: "width" | "height";
54
+ END: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
55
+ POS: ElementPosition;
56
+ SCROLL_POS: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
57
+ SCROLL_SIZE: "scrollLeft" | "scrollWidth" | "clientWidth" | "scrollTop" | "scrollHeight" | "clientHeight";
58
+ START: "left" | "right" | "x" | "y" | "width" | "height" | "bottom" | "top";
59
+ };
60
+ export declare const getItemById: (measuredItems: MeasuredDropTarget[], id: string) => MeasuredDropTarget | undefined;
61
+ export declare const removeDraggedItem: (measuredItems: MeasuredDropTarget[], index: number) => void;
62
+ export type dropZone = "start" | "end";
63
+ export declare const measureDropTargets: (container: HTMLElement, orientation: orientationType, itemQuery?: string, viewportRange?: ViewportRange, draggedItemId?: string) => MeasuredDropTarget[];
64
+ export declare const getIndexOfDraggedItem: (dropTargets: MeasuredDropTarget[]) => number;
65
+ export declare const mutateDropTargetsSwitchDropTargetPosition: (dropTargets: MeasuredDropTarget[], direction: Direction) => void;
66
+ export declare const getNextDropTarget: (dropTargets: MeasuredDropTarget[], pos: number, mouseMoveDirection: Direction) => MeasuredDropTarget;
67
+ /**
68
+ * An item within a scrollable container might have a width or height greater than that of
69
+ * the container. If we drag such an item, we don't want the draggable to be larger than
70
+ * the container.
71
+ */
72
+ export declare function constrainRect(targetRect: Rect, constraintRect: Rect): Rect;
73
+ export declare const moveItem: <T = unknown>(items: T[], fromIndex: number, toIndex: number) => T[];
74
+ export declare const dropTargetsDebugString: (dropTargets: MeasuredDropTarget[]) => string;
75
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from "./DragDropProvider";
2
+ export * from "./useDragDropNext";
@@ -0,0 +1,11 @@
1
+ import { RefObject } from "react";
2
+ export type ScrollStopHandler = (scrollDirection: "fwd" | "bwd", scrollPos: number, atEnd: boolean) => void;
3
+ export declare const useAutoScroll: ({ containerRef, onScrollingStopped, orientation, }: {
4
+ containerRef: RefObject<HTMLElement>;
5
+ onScrollingStopped?: ScrollStopHandler | undefined;
6
+ orientation?: "horizontal" | "vertical" | undefined;
7
+ }) => {
8
+ isScrolling: import("react").MutableRefObject<boolean>;
9
+ startScrolling: (direction: "fwd" | "bwd", scrollRate: number, scrollUnit?: any) => void;
10
+ stopScrolling: (atEnd?: any) => void;
11
+ };
@@ -0,0 +1,15 @@
1
+ import { MeasuredDropTarget } from "./drop-target-utils";
2
+ import { Direction } from "./dragDropTypesNext";
3
+ export type DragDisplacersHookResult = {
4
+ clearDisplacedItem: () => void;
5
+ displaceItem: (dropTargets: MeasuredDropTarget[], dropTarget: MeasuredDropTarget, size: number, useTransition?: boolean, direction?: Direction | "static", orientation?: "horizontal" | "vertical") => void;
6
+ displaceLastItem: (dropTargets: MeasuredDropTarget[], dropTarget: MeasuredDropTarget, size: number, useTransition?: boolean, direction?: Direction | "static", orientation?: "horizontal" | "vertical") => void;
7
+ clearSpacers: () => void;
8
+ };
9
+ export type DragDisplacersHook = () => DragDisplacersHookResult;
10
+ /**
11
+ * Manage a pair of displacer elements to smoothly display a moving gap between
12
+ * list items of any kind. Designed to be used in a drag drop operation. The 'static'
13
+ * direction option should be used at drag start or following scroll.
14
+ */
15
+ export declare const useDragDisplacers: DragDisplacersHook;
@@ -0,0 +1,2 @@
1
+ import { InternalDragDropProps, InternalDragHookResult } from "./dragDropTypesNext";
2
+ export declare const useDragDropIndicator: ({ draggableRef, onDrop, orientation, containerRef, itemQuery, selected, viewportRange, }: InternalDragDropProps) => InternalDragHookResult;
@@ -0,0 +1,2 @@
1
+ import { InternalDragDropProps, InternalDragHookResult } from "./dragDropTypesNext";
2
+ export declare const useDragDropNaturalMovement: ({ draggableRef, onDrop, orientation, containerRef, itemQuery, selected, viewportRange, }: InternalDragDropProps) => InternalDragHookResult;
@@ -0,0 +1,2 @@
1
+ import { DragDropHook } from "./dragDropTypesNext";
2
+ export declare const useDragDropNext: DragDropHook;
@@ -0,0 +1,7 @@
1
+ import { MeasuredDropTarget } from "./drag-utils";
2
+ import { Direction } from "./dragDropTypesNext";
3
+ export declare const useDragSpacers: () => {
4
+ displaceItem: (item: MeasuredDropTarget | null | undefined, draggedItem: MeasuredDropTarget, useTransition?: any, direction?: Direction) => void;
5
+ displaceLastItem: (item: MeasuredDropTarget, size: number, useTransition?: any) => void;
6
+ clearSpacers: () => void;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { dropZone, MeasuredDropTarget } from "./drop-target-utils";
2
+ export declare const SPACER_SIZE = 0;
3
+ export type DropIndicatorHookResult = {
4
+ positionDropIndicator: (dropTarget: MeasuredDropTarget, dropZone: dropZone) => HTMLElement;
5
+ clearSpacer: () => void;
6
+ };
7
+ export type DropIndicatorHook = () => DropIndicatorHookResult;
8
+ export declare const useDropIndicator: DropIndicatorHook;
@@ -0,0 +1,3 @@
1
+ export declare const useTransition: () => {
2
+ applyTransition: (element: HTMLElement, property: string, value: string) => void;
3
+ };
@@ -0,0 +1,14 @@
1
+ import { HTMLAttributes } from "react";
2
+ import "./EditableLabel.css";
3
+ export interface EditableLabelProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
4
+ className?: string;
5
+ defaultEditing?: boolean;
6
+ defaultValue?: string;
7
+ editing?: boolean;
8
+ onEnterEditMode: () => void;
9
+ onChange?: (value: string) => void;
10
+ onExitEditMode: (originalLabel: string | undefined, editedLabel: string | undefined, allowDeactivation?: boolean, editCancelled?: boolean) => void;
11
+ defaultIsEditing?: boolean;
12
+ value?: string;
13
+ }
14
+ export declare const EditableLabel: import("react").ForwardRefExoticComponent<EditableLabelProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1 @@
1
+ export * from "./EditableLabel";
@@ -0,0 +1,2 @@
1
+ export * from "./editable-label";
2
+ export * from "./tabstrip";
@@ -0,0 +1,27 @@
1
+ import { KeyboardEvent, MouseEvent } from "react";
2
+ import "./Tab.css";
3
+ import { MenuActionHandler } from "packages/vuu-data-types";
4
+ export declare const Tab: import("react").ForwardRefExoticComponent<Omit<import("react").HTMLAttributes<HTMLElement>, "onKeyUp" | "onClick"> & {
5
+ ariaControls?: string | undefined;
6
+ closeable?: boolean | undefined;
7
+ draggable?: boolean | undefined;
8
+ dragging?: boolean | undefined;
9
+ editable?: boolean | undefined;
10
+ editing?: boolean | undefined;
11
+ focused?: boolean | undefined;
12
+ focusVisible?: boolean | undefined;
13
+ focusedChildIndex?: number | undefined;
14
+ location?: string | undefined;
15
+ selected?: boolean | undefined;
16
+ showMenuButton?: boolean | undefined;
17
+ index: number;
18
+ label?: string | undefined;
19
+ onClick?: ((e: MouseEvent<HTMLElement, globalThis.MouseEvent>, index: number) => void) | undefined;
20
+ onClose?: ((index: number) => void) | undefined;
21
+ onEnterEditMode?: (() => void) | undefined;
22
+ onExitEditMode?: import("./TabsTypes").exitEditHandler | undefined;
23
+ onKeyUp?: ((e: KeyboardEvent<Element>, index: number) => void) | undefined;
24
+ onMenuAction?: MenuActionHandler | undefined;
25
+ onMenuClose?: (() => void) | undefined;
26
+ orientation?: "horizontal" | "vertical" | undefined;
27
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { MenuActionHandler } from "packages/vuu-data-types";
3
+ import "./TabMenu.css";
4
+ export interface TabMenuProps {
5
+ allowClose: boolean;
6
+ allowRename: boolean;
7
+ location?: string;
8
+ onMenuAction: MenuActionHandler;
9
+ onMenuClose?: () => void;
10
+ index: number;
11
+ }
12
+ export declare const TabMenu: ({ allowClose, allowRename, location, onMenuAction, onMenuClose, index, }: TabMenuProps) => JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { ContextMenuItemDescriptor } from "packages/vuu-data-types";
2
+ export type MenuOptions = {
3
+ [key: string]: unknown;
4
+ };
5
+ export interface TabMenuOptions {
6
+ tabIndex: number;
7
+ }
8
+ export declare const isTabMenuOptions: (options: unknown) => options is TabMenuOptions;
9
+ export declare const closeCommand: (options?: MenuOptions) => ContextMenuItemDescriptor;
10
+ export declare const renameCommand: (options?: MenuOptions) => ContextMenuItemDescriptor;
@@ -0,0 +1,112 @@
1
+ import type { AriaAttributes, HTMLAttributes, KeyboardEvent, MouseEvent, ReactElement } from "react";
2
+ import type { EditableLabelProps } from "../editable-label";
3
+ import type { MenuActionHandler } from "packages/vuu-data-types";
4
+ export type orientationType = "horizontal" | "vertical";
5
+ export type ExitEditModeHandler = (originalValue: string, editedValue: string, allowDeactivation: boolean, tabIndex: number) => void;
6
+ export interface FocusAPI {
7
+ focus: () => void;
8
+ }
9
+ export type navigationProps = Pick<TabProps, "onFocus" | "onKeyDown">;
10
+ export type composableTabProps = navigationProps & Pick<TabProps, "onClick" | "onEnterEditMode" | "onExitEditMode" | "onMouseDown">;
11
+ export type TabstripVariant = "primary" | "tertiary";
12
+ export interface TabstripProps extends HTMLAttributes<HTMLDivElement> {
13
+ /**
14
+ * index value of Active Tab.
15
+ */
16
+ activeTabIndex: number;
17
+ /**
18
+ * Boolean that enables add new tab
19
+ */
20
+ allowAddTab?: boolean;
21
+ /**
22
+ * when true Tabs may be re-arranged by dragging individual Tabs to new position within Tabstrip.
23
+ */
24
+ allowDragDrop?: boolean;
25
+ /**
26
+ * when true Tabs may be closed by user. This can be overridden on each individual Tab
27
+ */
28
+ allowCloseTab?: boolean;
29
+ /**
30
+ * when true Tab labels may be edited by user. This can be overridden on each individual Tab
31
+ */
32
+ allowRenameTab?: boolean;
33
+ animateSelectionThumb?: boolean;
34
+ /**
35
+ * Boolean that indicates if tabs are centered on the container
36
+ */
37
+ centered?: boolean;
38
+ /**
39
+ * index value of Selected Tab, used in uncontrolled mode
40
+ */
41
+ defaultActiveTabIndex?: number;
42
+ editing?: boolean;
43
+ keyBoardActivation?: "manual" | "automatic";
44
+ /**
45
+ * A custom context menu location for TabMenu
46
+ */
47
+ location?: string;
48
+ /**
49
+ * callback that fires when user has clicked Add Tab button.
50
+ * client is responsible for re-render with additional tab.
51
+ * It is also responsibility of client to select tne new tab
52
+ * by setting activeTabIndex, if that is the desired behaviour.
53
+ */
54
+ onAddTab?: () => void;
55
+ /**
56
+ * callback that fires when tab selection changes
57
+ */
58
+ onActiveChange?: (tabIndex: number) => void;
59
+ /**
60
+ * callback that fires when user has opted to remove tab.
61
+ * client is responsible for re-render with tab removed.
62
+ * It is also responsibility of client to select tne new tab
63
+ * by setting activeTabIndex, a suggested value for this is
64
+ * provided by newActiveTabIndex.
65
+ */
66
+ onCloseTab?: (tabIndex: number, newActiveTabIndex: number) => void;
67
+ onMoveTab?: (fromIndex: number, toIndex: number) => void;
68
+ orientation?: orientationType;
69
+ onEnterEditMode?: () => void;
70
+ onExitEditMode?: ExitEditModeHandler;
71
+ /**
72
+ * Boolean that indicates whether to enable overflow dropdown or not
73
+ */
74
+ overflowMenu?: boolean;
75
+ promptForNewTabName?: boolean;
76
+ /**
77
+ * Should each tab render a popup menu. Default is false if tab is
78
+ * not closeable or renameable, otherwise true.
79
+ */
80
+ showTabMenuButton?: boolean;
81
+ }
82
+ export type exitEditHandler = (originalValue: string, editedValue: string, allowDeactivation: boolean, tabIndex: number) => void;
83
+ export interface responsiveDataAttributes {
84
+ "data-index": number;
85
+ "data-overflowed"?: boolean;
86
+ "data-priority": number;
87
+ }
88
+ export type TabProps = Omit<HTMLAttributes<HTMLElement>, "onClick" | "onKeyUp"> & {
89
+ ariaControls?: AriaAttributes["aria-controls"];
90
+ closeable?: boolean;
91
+ draggable?: boolean;
92
+ dragging?: boolean;
93
+ editable?: boolean;
94
+ editing?: EditableLabelProps["editing"];
95
+ focused?: boolean;
96
+ focusVisible?: boolean;
97
+ focusedChildIndex?: number;
98
+ location?: string;
99
+ selected?: boolean;
100
+ showMenuButton?: boolean;
101
+ index: number;
102
+ label?: EditableLabelProps["defaultValue"];
103
+ onClick?: (e: MouseEvent<HTMLElement>, index: number) => void;
104
+ onClose?: (index: number) => void;
105
+ onEnterEditMode?: () => void;
106
+ onExitEditMode?: exitEditHandler;
107
+ onKeyUp?: (e: KeyboardEvent, index: number) => void;
108
+ onMenuAction?: MenuActionHandler;
109
+ onMenuClose?: () => void;
110
+ orientation?: "horizontal" | "vertical";
111
+ };
112
+ export type TabElement = ReactElement<TabProps>;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { TabstripProps } from "./TabsTypes";
3
+ import "./Tabstrip.css";
4
+ export declare const Tabstrip: ({ activeTabIndex: activeTabIndexProp, allowAddTab, allowCloseTab, allowDragDrop, allowRenameTab, animateSelectionThumb, children, className: classNameProp, id: idProp, keyBoardActivation, location, onActiveChange, onAddTab, onCloseTab, onExitEditMode, onMoveTab, orientation, showTabMenuButton, style: styleProp, ...htmlAttributes }: TabstripProps) => JSX.Element;