logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git

popover.vue (2901B)


  1. <template>
  2. <span
  3. @mouseenter="onMouseenter"
  4. @mouseleave="onMouseleave"
  5. >
  6. <button
  7. ref="trigger"
  8. class="popover-trigger-button"
  9. :class="normalButton ? 'button-default btn' : 'button-unstyled'"
  10. type="button"
  11. v-bind="triggerAttrs"
  12. @click="onClick"
  13. >
  14. <slot name="trigger" />
  15. </button>
  16. <teleport
  17. :disabled="!teleport"
  18. to="#popovers"
  19. >
  20. <transition name="fade">
  21. <div
  22. v-if="!hidden"
  23. ref="content"
  24. :style="styles"
  25. class="popover"
  26. :class="popoverClass || 'popover-default'"
  27. @mouseenter="onMouseenterContent"
  28. @mouseleave="onMouseleaveContent"
  29. @click="onClickContent"
  30. >
  31. <slot
  32. name="content"
  33. class="popover-inner"
  34. :close="hidePopover"
  35. />
  36. </div>
  37. </transition>
  38. </teleport>
  39. </span>
  40. </template>
  41. <script src="./popover.js" />
  42. <style lang="scss">
  43. .popover-trigger-button {
  44. display: inline-block;
  45. }
  46. .popover {
  47. z-index: var(--ZI_popover_override, var(--ZI_popovers));
  48. position: fixed;
  49. min-width: 0;
  50. max-width: calc(100vw - 20px);
  51. box-shadow: var(--shadow);
  52. }
  53. .popover-default {
  54. &::after {
  55. content: "";
  56. position: absolute;
  57. top: -1px;
  58. bottom: -1px;
  59. left: -1px;
  60. right: -1px;
  61. z-index: -1px;
  62. box-shadow: var(--shadow);
  63. pointer-events: none;
  64. }
  65. border-radius: var(--roundness);
  66. border-color: var(--border);
  67. border-style: solid;
  68. border-width: 1px;
  69. }
  70. .dropdown-menu {
  71. display: block;
  72. padding: 0;
  73. font-size: 1em;
  74. text-align: left;
  75. list-style: none;
  76. max-width: 100vw;
  77. z-index: var(--ZI_popover_override, var(--ZI_popovers));
  78. white-space: nowrap;
  79. .dropdown-divider {
  80. height: 0;
  81. margin: 0.5rem 0;
  82. overflow: hidden;
  83. border-top: 1px solid var(--border);
  84. }
  85. .dropdown-item {
  86. border: none;
  87. &-icon {
  88. svg {
  89. width: var(--__line-height);
  90. margin-right: var(--__horizontal-gap);
  91. }
  92. }
  93. &.-has-submenu {
  94. .chevron-icon {
  95. margin-right: 0.25rem;
  96. margin-left: 2rem;
  97. }
  98. }
  99. .menu-checkbox {
  100. display: inline-block;
  101. vertical-align: middle;
  102. min-width: calc(var(--__line-height) + 1px);
  103. max-width: calc(var(--__line-height) + 1px);
  104. min-height: calc(var(--__line-height) + 1px);
  105. max-height: calc(var(--__line-height) + 1px);
  106. line-height: var(--__line-height);
  107. text-align: center;
  108. border-radius: 0;
  109. box-shadow: var(--shadow);
  110. margin-right: var(--__horizontal-gap);
  111. &.menu-checkbox-checked::after {
  112. font-size: 1.25em;
  113. content: "✓";
  114. }
  115. &.-radio {
  116. border-radius: 9999px;
  117. &.menu-checkbox-checked::after {
  118. font-size: 2em;
  119. content: "•";
  120. }
  121. }
  122. }
  123. }
  124. }
  125. </style>