srcdev-nuxt-components 9.4.4 → 9.4.5

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 (84) hide show
  1. package/.claude/commands/migrate-component.md +68 -0
  2. package/.claude/component-ledger/artifact-url.txt +1 -0
  3. package/.claude/component-ledger/audit.json +1 -0
  4. package/.claude/component-ledger/build.mjs +111 -0
  5. package/.claude/component-ledger/output.html +559 -0
  6. package/.claude/component-ledger/template.html +559 -0
  7. package/.claude/hooks/refresh-component-ledger.sh +32 -0
  8. package/.claude/settings.json +10 -0
  9. package/.claude/skills/components/animated-svg-text.md +78 -0
  10. package/.claude/skills/components/canvas-switcher.md +61 -0
  11. package/.claude/skills/components/clip-element.md +67 -0
  12. package/.claude/skills/components/clipped-panel.md +64 -0
  13. package/.claude/skills/components/deep-expanding-menu-classic.md +94 -0
  14. package/.claude/skills/components/deep-expanding-menu.md +92 -0
  15. package/.claude/skills/components/display-banner.md +60 -0
  16. package/.claude/skills/components/display-tooltip-defined.md +136 -0
  17. package/.claude/skills/components/display-tooltip.md +84 -0
  18. package/.claude/skills/composable-tooltips-guide.md +10 -0
  19. package/.claude/skills/index.md +7 -1
  20. package/.claude/skills/storybook-add-story.md +30 -0
  21. package/.vscode/srcdev-component-animated-svg-text.code-snippets +15 -0
  22. package/.vscode/srcdev-component-canvas-switcher.code-snippets +9 -0
  23. package/.vscode/srcdev-component-clip-element.code-snippets +20 -0
  24. package/.vscode/srcdev-component-clipped-panel.code-snippets +23 -0
  25. package/.vscode/srcdev-component-deep-expanding-menu-classic.code-snippets +9 -0
  26. package/.vscode/srcdev-component-deep-expanding-menu.code-snippets +9 -0
  27. package/.vscode/srcdev-component-display-banner.code-snippets +30 -0
  28. package/.vscode/srcdev-component-display-tooltip-defined.code-snippets +14 -0
  29. package/.vscode/srcdev-component-display-tooltip.code-snippets +27 -0
  30. package/app/components/01.atoms/animations/animated-svg-text/AnimatedSvgText.vue +58 -0
  31. package/app/components/01.atoms/animations/animated-svg-text/CONSUMER-STYLING.md +34 -0
  32. package/app/components/01.atoms/animations/animated-svg-text/stories/AnimatedSvgText.stories.ts +69 -0
  33. package/app/components/01.atoms/animations/animated-svg-text/tests/AnimatedSvgText.spec.ts +63 -0
  34. package/app/components/01.atoms/animations/animated-svg-text/tests/__snapshots__/AnimatedSvgText.spec.ts.snap +7 -0
  35. package/app/components/01.atoms/animations/clip-element/CONSUMER-STYLING.md +27 -0
  36. package/app/components/{clip-element → 01.atoms/animations/clip-element}/ClipElement.vue +16 -11
  37. package/app/components/01.atoms/animations/clip-element/stories/ClipElement.stories.ts +133 -0
  38. package/app/components/01.atoms/animations/clip-element/tests/ClipElement.spec.ts +70 -0
  39. package/app/components/01.atoms/animations/clip-element/tests/__snapshots__/ClipElement.spec.ts.snap +7 -0
  40. package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +27 -0
  41. package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +111 -0
  42. package/app/components/01.atoms/canvas-switcher/stories/CanvasSwitcher.stories.ts +75 -0
  43. package/app/components/01.atoms/canvas-switcher/tests/CanvasSwitcher.spec.ts +67 -0
  44. package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +39 -0
  45. package/app/components/01.atoms/clipped-panel/ClippedPanel.vue +68 -0
  46. package/app/components/01.atoms/clipped-panel/stories/ClippedPanel.stories.ts +105 -0
  47. package/app/components/01.atoms/clipped-panel/tests/ClippedPanel.spec.ts +67 -0
  48. package/app/components/01.atoms/clipped-panel/tests/__snapshots__/ClippedPanel.spec.ts.snap +3 -0
  49. package/app/components/01.atoms/display-banner/CONSUMER-STYLING.md +35 -0
  50. package/app/components/{display-banner → 01.atoms/display-banner}/DisplayBanner.vue +13 -35
  51. package/app/components/01.atoms/display-banner/stories/DisplayBanner.stories.ts +100 -0
  52. package/app/components/01.atoms/display-banner/tests/DisplayBanner.spec.ts +78 -0
  53. package/app/components/01.atoms/display-banner/tests/__snapshots__/DisplayBanner.spec.ts.snap +8 -0
  54. package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +62 -0
  55. package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +185 -0
  56. package/app/components/01.atoms/display-tooltip/stories/DisplayTooltip.stories.ts +94 -0
  57. package/app/components/01.atoms/display-tooltip/tests/DisplayTooltip.spec.ts +75 -0
  58. package/app/components/01.atoms/display-tooltip/tests/__snapshots__/DisplayTooltip.spec.ts.snap +12 -0
  59. package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +42 -0
  60. package/app/components/02.molecules/display-tooltip-defined/DisplayTooltipDefined.vue +103 -0
  61. package/app/components/02.molecules/display-tooltip-defined/stories/DisplayTooltipDefined.stories.ts +126 -0
  62. package/app/components/02.molecules/display-tooltip-defined/tests/DisplayTooltipDefined.spec.ts +66 -0
  63. package/app/components/02.molecules/display-tooltip-defined/tests/__snapshots__/DisplayTooltipDefined.spec.ts.snap +17 -0
  64. package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +44 -0
  65. package/app/components/{deep-expanding-menu → 02.molecules/navigation/deep-expanding-menu}/DeepExpandingMenu.vue +53 -64
  66. package/app/components/02.molecules/navigation/deep-expanding-menu/stories/DeepExpandingMenu.stories.ts +79 -0
  67. package/app/components/02.molecules/navigation/deep-expanding-menu/tests/DeepExpandingMenu.spec.ts +92 -0
  68. package/app/components/02.molecules/navigation/deep-expanding-menu/tests/__snapshots__/DeepExpandingMenu.spec.ts.snap +17 -0
  69. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +40 -0
  70. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/DeepExpandingMenuClassic.vue +200 -0
  71. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/stories/DeepExpandingMenuClassic.stories.ts +79 -0
  72. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/tests/DeepExpandingMenuClassic.spec.ts +82 -0
  73. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/tests/__snapshots__/DeepExpandingMenuClassic.spec.ts.snap +18 -0
  74. package/app/types/components/display-tooltip-defined.d.ts +10 -0
  75. package/app/types/components/index.ts +1 -0
  76. package/package.json +1 -1
  77. package/app/components/animated-svg-text/AnimatedSvgText.vue +0 -89
  78. package/app/components/canvas-switcher/CanvasSwitcher.vue +0 -104
  79. package/app/components/clipped-panels/ClippedPanel.vue +0 -87
  80. package/app/components/deep-expanding-menu/DeepExpandingMenuOld.vue +0 -218
  81. package/app/components/display-details/DisplayDetailsCore.vue +0 -122
  82. package/app/components/display-tooltip/DisplayTooltip.vue +0 -170
  83. package/app/components/display-tooltip/DisplayTooltipDefined.vue +0 -103
  84. package/app/components/magnetic-navigation/MagneticNavigation.vue +0 -162
@@ -1,218 +0,0 @@
1
- <template>
2
- <component :is="tag" class="deep-expanding-menu-old" :class="[elementClasses]">
3
- <div class="inner">
4
- <template v-for="(link, key) in navLinks" :key="key">
5
- <NuxtLink v-if="link.path" :to="link.path" class="navigation-link">{{ link.name }}</NuxtLink>
6
- <details v-else ref="navigationGroupRef" class="navigation-group" name="navigation-group">
7
- <summary class="navigation-group-toggle">
8
- <span>{{ link.name }}</span>
9
- <Icon name="bi:caret-down-fill" class="icon" />
10
- </summary>
11
- <div :id="`popovertarget-nav-1-${key}`" class="navigation-group-panel">
12
- <h4 class="page-heading-4 mb-6">{{ link.childLinksTitle }}</h4>
13
- <ul class="navigation-group-list">
14
- <li v-for="childLink in link.childLinks" :key="childLink.name" class="navigation-group-item">
15
- <NuxtLink :to="childLink.path" class="navigation-group-link">{{ childLink.name }}</NuxtLink>
16
- </li>
17
- </ul>
18
- </div>
19
- </details>
20
- </template>
21
- </div>
22
- </component>
23
- </template>
24
-
25
- <script setup lang="ts">
26
- import { onClickOutside } from "@vueuse/core";
27
-
28
- const props = defineProps({
29
- tag: {
30
- type: String,
31
- default: "nav",
32
- validator(value: string) {
33
- return ["div", "section", "nav", "ul", "ol"].includes(value);
34
- },
35
- },
36
- navLinks: {
37
- type: Array as PropType<ResponsiveHeaderNavItem[]>,
38
- default: () => [],
39
- },
40
- styleClassPassthrough: {
41
- type: [String, Array] as PropType<string | string[]>,
42
- default: () => [],
43
- },
44
- });
45
-
46
- const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
47
-
48
- const navigationGroupRef = useTemplateRef<HTMLElement[]>("navigationGroupRef");
49
-
50
- watch(
51
- () => props.styleClassPassthrough,
52
- () => {
53
- resetElementClasses(props.styleClassPassthrough);
54
- }
55
- );
56
-
57
- onMounted(() => {
58
- navigationGroupRef.value?.forEach((element, index) => {
59
- onClickOutside(element, () => {
60
- navigationGroupRef.value?.[index]?.removeAttribute("open");
61
- });
62
- });
63
- });
64
- </script>
65
-
66
- <script lang="ts">
67
- interface ResponsiveHeaderNavItem {
68
- name: string;
69
- path?: string;
70
- isExternal?: boolean;
71
- childLinksTitle?: string;
72
- childLinks?: ResponsiveHeaderNavItem[];
73
- }
74
- </script>
75
-
76
- <style lang="css">
77
- @layer components {
78
- @layer popover-setup {
79
- .deep-expanding-menu-old {
80
- container-type: inline-size;
81
- display: grid;
82
- grid-template-areas: "element-stack";
83
- align-items: center;
84
- gap: 12px;
85
-
86
- .inner {
87
- grid-area: element-stack;
88
- display: flex;
89
- gap: 24px;
90
- align-items: center;
91
- z-index: 1;
92
-
93
- .navigation-link,
94
- .navigation-group-toggle {
95
- all: unset;
96
- border-bottom: 2px solid transparent;
97
- padding-block: 8px;
98
-
99
- transition: border-color 200ms;
100
-
101
- &:hover {
102
- cursor: pointer;
103
- border-color: light-dark(var(--blue-10), var(--slate-00));
104
- }
105
-
106
- &:focus {
107
- border-color: light-dark(var(--blue-10), var(--slate-00));
108
- }
109
-
110
- &:focus-visible {
111
- border-color: light-dark(var(--blue-10), var(--slate-00));
112
- }
113
- }
114
-
115
- .navigation-group {
116
- --_icon-transform: scaleY(1);
117
-
118
- display: grid;
119
- grid-template-areas: "details-stack";
120
- z-index: 1;
121
- position: relative;
122
-
123
- summary::-webkit-details-marker,
124
- summary::marker {
125
- display: none;
126
- }
127
-
128
- &[open] {
129
- --_icon-transform: scaleY(-1);
130
- }
131
-
132
- .navigation-group-toggle {
133
- grid-area: details-stack;
134
-
135
- display: flex !important;
136
- align-items: center;
137
- gap: 12px;
138
- list-style: none;
139
-
140
- .icon {
141
- display: block;
142
- font-size: 1.2rem;
143
-
144
- transform: var(--_icon-transform);
145
- transition: transform 200ms;
146
- }
147
- }
148
-
149
- .navigation-group-panel {
150
- background-color: black;
151
- display: grid;
152
- grid-area: details-stack;
153
- z-index: 2;
154
- position: absolute;
155
- inset: auto;
156
- top: 40px;
157
- left: 0px;
158
- gap: 12px;
159
-
160
- width: 200px;
161
-
162
- @media screen and (min-width: 768px) {
163
- width: 400px;
164
- }
165
-
166
- @media screen and (min-width: 1024px) {
167
- width: 600px;
168
- }
169
-
170
- background-color: white;
171
- border: 1px solid black;
172
- border-radius: 12px;
173
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
174
- padding: 12px;
175
- overflow: clip;
176
-
177
- h4 {
178
- color: var(--slate-10);
179
- }
180
-
181
- .navigation-group-list {
182
- display: grid;
183
- grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
184
- gap: 12px;
185
- padding-inline-start: 0;
186
- margin-block-end: 8px;
187
-
188
- .navigation-group-item {
189
- display: block;
190
-
191
- a.navigation-group-link {
192
- display: inline-block;
193
- color: var(--slate-10);
194
- text-decoration: none;
195
- padding-block: 8px;
196
-
197
- border-bottom: 2px solid transparent;
198
-
199
- transition: border-color 200ms;
200
-
201
- &:hover {
202
- cursor: pointer;
203
- border-color: var(--slate-10);
204
- }
205
-
206
- &:focus-visible {
207
- border-color: var(--slate-10);
208
- }
209
- }
210
- }
211
- }
212
- }
213
- }
214
- }
215
- }
216
- }
217
- }
218
- </style>
@@ -1,122 +0,0 @@
1
- <template>
2
- <details :name="name" class="display-details" :class="[elementClasses]" ref="detailsRef">
3
- <summary class="display-details-summary" :id="triggerId" :aria-controls="contentId" ref="summaryRef">
4
- <span class="label">
5
- <slot name="summary"></slot>
6
- </span>
7
- <slot name="summaryIcon">
8
- <Icon name="bi:caret-down-fill" class="icon" :class="iconSize" />
9
- </slot>
10
- </summary>
11
- <div class="display-details-content" :aria-labelledby="triggerId" :id="contentId" role="region" ref="contentRef">
12
- <div class="inner">
13
- <slot name="details-content"></slot>
14
- </div>
15
- </div>
16
- </details>
17
- </template>
18
-
19
- <script setup lang="ts">
20
- const props = defineProps({
21
- name: {
22
- type: String,
23
- required: true,
24
- },
25
- id: {
26
- type: String,
27
- required: true,
28
- },
29
- iconSize: {
30
- type: String,
31
- default: "small",
32
- validator(value: string) {
33
- return ["small", "medium", "large"].includes(value)
34
- },
35
- },
36
- styleClassPassthrough: {
37
- type: [String, Array] as PropType<string | string[]>,
38
- default: () => [],
39
- },
40
- })
41
-
42
- const triggerId = computed(() => `${props.id}-trigger`)
43
- const contentId = computed(() => `${props.id}-content`)
44
-
45
- const { elementClasses, resetElementClasses, updateElementClasses } = useStyleClassPassthrough(
46
- props.styleClassPassthrough
47
- )
48
-
49
- updateElementClasses([props.iconSize])
50
-
51
- const detailsRef = useTemplateRef<HTMLDetailsElement>("detailsRef")
52
- const summaryRef = useTemplateRef<HTMLElement | null>("summaryRef")
53
- const contentRef = useTemplateRef<HTMLDivElement | null>("contentRef")
54
- </script>
55
-
56
- <style lang="css">
57
- @layer components {
58
- .display-details {
59
- border: none;
60
- outline: none;
61
- box-shadow: none;
62
- border-radius: 0;
63
-
64
- &[open] {
65
- .display-details-summary {
66
- .icon {
67
- transform: scaleY(-1);
68
- }
69
- }
70
- .display-details-content {
71
- grid-template-rows: 1fr;
72
- overflow: hidden;
73
- }
74
- }
75
-
76
- .display-details-summary {
77
- display: flex;
78
- align-items: center;
79
- justify-content: space-between;
80
- flex-direction: row;
81
- gap: 0;
82
-
83
- list-style: none;
84
-
85
- &::-webkit-details-marker,
86
- &::marker {
87
- display: none;
88
- }
89
-
90
- overflow: clip;
91
-
92
- .label {
93
- display: block;
94
- flex-grow: 1;
95
- }
96
-
97
- .icon {
98
- display: block;
99
-
100
- transform: scaleY(1);
101
-
102
- font-size: 1.2rem;
103
- &.medium {
104
- font-size: 1.8rem;
105
- }
106
- &.large {
107
- font-size: 2.4rem;
108
- }
109
- }
110
- }
111
-
112
- .display-details-content {
113
- display: grid;
114
- grid-template-rows: 0;
115
-
116
- .inner {
117
- overflow: hidden;
118
- }
119
- }
120
- }
121
- }
122
- </style>
@@ -1,170 +0,0 @@
1
- <template>
2
- <div class="display-tooltip-core" :class="[elementClasses]" :style="`--anchor-name: ${tooltipAnchorName}`">
3
- <div class="display-tooltip-trigger-wrapper body-md">
4
- <slot v-if="slots.triggerContent" name="triggerContent"></slot>
5
- <button
6
- :popovertarget="tooltipId"
7
- popovertargetaction="toggle"
8
- class="display-tooltip-trigger-button"
9
- :class="{ hide: hideTooltipTrigger }"
10
- aria-label="Toggle the popover"
11
- >
12
- <Icon name="fa7-solid:circle-question" class="display-tooltip-trigger-icon" aria-hidden="true" />
13
- </button>
14
- </div>
15
- <div :id="tooltipId" ref="popover1" popover class="display-tooltip-popover">
16
- <div class="display-tooltip-popover-content">
17
- <slot name="tooltipContent"></slot>
18
- </div>
19
- </div>
20
- </div>
21
- </template>
22
-
23
- <script setup lang="ts">
24
- const props = defineProps({
25
- tooltipId: {
26
- type: String,
27
- default: "",
28
- },
29
- styleClassPassthrough: {
30
- type: [String, Array] as PropType<string | string[]>,
31
- default: () => [],
32
- },
33
- });
34
-
35
- const slots = useSlots();
36
- const tooltipId = computed(() => {
37
- return props.tooltipId.length ? props.tooltipId : `nuxt-tooltip-${useId()}`;
38
- });
39
- const tooltipAnchorName = `tooltip-anchor-${useId()}`;
40
- const hideTooltipTrigger = ref(false);
41
-
42
- const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
43
- </script>
44
-
45
- <style lang="css">
46
- @layer components {
47
- .display-tooltip-core {
48
- padding-block: 8px;
49
- position: relative;
50
-
51
- .display-tooltip-trigger-wrapper {
52
- display: inline-flex;
53
- align-items: flex-start;
54
-
55
- .display-tooltip-trigger-button {
56
- margin-left: 8px;
57
-
58
- &.hide {
59
- width: 0;
60
- overflow: hidden;
61
- opacity: 0;
62
- }
63
-
64
- .display-tooltip-trigger-icon {
65
- display: inline-flex;
66
- align-items: center;
67
- justify-content: center;
68
- width: 20px;
69
- height: 20px;
70
- color: var(--nuxt-text-header);
71
- font-size: 18px;
72
- line-height: 20px;
73
- }
74
- }
75
- }
76
-
77
- .display-tooltip-trigger-button {
78
- all: unset;
79
- aspect-ratio: 1 / 1;
80
- width: 24px;
81
- display: grid;
82
- place-items: center;
83
-
84
- outline: 1px solid transparent;
85
- anchor-name: var(--anchor-name);
86
-
87
- @supports (corner-shape: squircle) {
88
- corner-shape: squircle;
89
- border-radius: 50%;
90
- }
91
-
92
- &:hover {
93
- cursor: pointer;
94
- text-decoration: underline;
95
- }
96
-
97
- &:hover,
98
- &:focus-visible {
99
- outline-offset: 2px;
100
- }
101
- }
102
-
103
- .display-tooltip-popover {
104
- display: none;
105
- position: absolute;
106
- border: none;
107
- width: 300px;
108
-
109
- outline: 1px solid light-dark(black, white);
110
- color: light-dark(black, white);
111
- background-color: light-dark(white, black);
112
- border-radius: 8px;
113
-
114
- position-anchor: var(--anchor-name);
115
- margin: 0;
116
- inset: auto;
117
- top: calc(anchor(top) + 0px);
118
- left: calc(anchor(right) + 1px);
119
- opacity: 0;
120
- transition:
121
- opacity 200ms,
122
- display 200ms,
123
- overlay 200ms;
124
-
125
- transition-behavior: allow-discrete;
126
- position-try-fallbacks: flip-inline;
127
-
128
- /* .popover-action {
129
- display: flex;
130
- justify-content: flex-end;
131
- padding: 8px;
132
- border-bottom: 1px solid var(--nuxt-stroke-border-grey);
133
- } */
134
-
135
- .display-tooltip-popover-content {
136
- .display-tooltip-close-button {
137
- all: unset;
138
- cursor: pointer;
139
- color: var(--nuxt-text-accessibility-blue);
140
- border: 1px solid var(--theme-border);
141
- outline: 1px solid var(--theme-ring);
142
-
143
- font-weight: 600;
144
- padding: 8px 12px;
145
-
146
- &:hover,
147
- &:focus {
148
- text-decoration: underline;
149
- border: 1px solid var(--theme-surface);
150
- outline: 1px solid var(--theme-surface);
151
- outline-offset: 2px;
152
- }
153
- }
154
- }
155
-
156
- &:popover-open {
157
- display: flex;
158
- opacity: 1;
159
-
160
- flex-direction: column;
161
-
162
- @starting-style {
163
- display: flex;
164
- opacity: 0;
165
- }
166
- }
167
- }
168
- }
169
- }
170
- </style>
@@ -1,103 +0,0 @@
1
- <template>
2
- <DisplayTooltip :tooltip-id="tooltipId" :style-class-passthrough>
3
- <template v-if="slots.triggerContent" #triggerContent>
4
- <slot name="triggerContent"></slot>
5
- </template>
6
- <template #tooltipContent>
7
- <div class="popover-content-defined">
8
- <component
9
- :is="props.contentText.tooltipTitle?.tag"
10
- v-if="props.contentText.tooltipTitle"
11
- class="tooltip-title subtitle-sm"
12
- >
13
- {{ props.contentText.tooltipTitle.text }}
14
- </component>
15
- <component
16
- :is="props.contentText.tooltipContent?.tag"
17
- v-if="props.contentText.tooltipContent"
18
- class="tooltip-body body-sm"
19
- >
20
- {{ props.contentText.tooltipContent.text }}
21
- </component>
22
- <component
23
- :is="props.contentText.tooltipAction?.tag"
24
- v-if="props.contentText.tooltipAction"
25
- class="tooltip-action input-value"
26
- >
27
- {{ props.contentText.tooltipAction.text }}
28
- </component>
29
- <button
30
- :popovertarget="tooltipId"
31
- popovertargetaction="hide"
32
- class="display-tooltip-close-button"
33
- aria-label="Close tool tip"
34
- >
35
- Close
36
- </button>
37
- </div>
38
- </template>
39
- </DisplayTooltip>
40
- </template>
41
-
42
- <script lang="ts">
43
- export interface TooltipContentText {
44
- tooltipTitle?: {
45
- tag: string
46
- text: string
47
- }
48
- tooltipContent?: {
49
- tag: string
50
- text: string
51
- }
52
- tooltipAction?: {
53
- tag: string
54
- text: string
55
- }
56
- }
57
- </script>
58
-
59
- <script setup lang="ts">
60
- const props = defineProps({
61
- tooltipId: {
62
- type: String,
63
- default: "",
64
- },
65
- contentText: {
66
- type: Object as PropType<TooltipContentText>,
67
- default: () => ({}),
68
- },
69
- styleClassPassthrough: {
70
- type: [String, Array] as PropType<string | string[]>,
71
- default: () => [],
72
- },
73
- })
74
-
75
- const slots = useSlots()
76
- const tooltipId = computed(() => {
77
- return props.tooltipId.length ? `nuxt-tooltip-${props.tooltipId}` : `nuxt-tooltip-${useId()}`
78
- })
79
- </script>
80
-
81
- <style lang="css">
82
- @layer components {
83
- .display-tooltip-core {
84
- .popover {
85
- .popover-content {
86
- .popover-content-defined {
87
- .tooltip-title {
88
- color: var(--nuxt-text-white-header);
89
- }
90
-
91
- .tooltip-body {
92
- color: var(--nuxt-text-white-body);
93
- }
94
-
95
- .tooltip-action {
96
- color: var(--nuxt-text-white-body);
97
- }
98
- }
99
- }
100
- }
101
- }
102
- }
103
- </style>