@intechstudio/grid-uikit 1.20260914.1126 → 1.20260916.1334

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.
@@ -0,0 +1,171 @@
1
+ <script lang="ts">
2
+ import SvgIcon from "./SvgIcon.svelte";
3
+ import { tooltip } from "./tooltip";
4
+ import { createEventDispatcher } from "svelte";
5
+
6
+ const dispatch = createEventDispatcher();
7
+
8
+ export let iconPath: string = "";
9
+ export let iconData: string | undefined = undefined;
10
+ export let disabled: boolean = false;
11
+ export let compact: boolean = false;
12
+ export let tooltipText: string | undefined = undefined;
13
+ export let onClick: (() => void) | undefined = undefined;
14
+ export let onMouseDown: ((e: MouseEvent) => void) | undefined = undefined;
15
+ export let id: string | undefined = undefined;
16
+ export let ariaLabel: string | undefined = undefined;
17
+ export let stopPropagation: boolean = false;
18
+ export let href: string | undefined = undefined;
19
+ export let target: string | undefined = undefined;
20
+ export let rel: string | undefined = undefined;
21
+ export let tooltipDelay: number | undefined = undefined;
22
+ export let tooltipDuration: number | undefined = undefined;
23
+ export let tooltipExtendedText: string | undefined = undefined;
24
+ export let tooltipButtons: any[] | undefined = undefined;
25
+ export let tooltipTriggerEvents: string[] | undefined = undefined;
26
+
27
+ // `pressed` shows the squish instantly (no transition) for as long as the
28
+ // button is physically held down. `clicking` takes over on release to ease
29
+ // it back out over the full duration, even if the press was very brief -
30
+ // its 0% keyframe matches `.pressed` exactly so the swap is invisible.
31
+ let pressed = false;
32
+ let clicking = false;
33
+
34
+ function restartClickAnimation() {
35
+ if (clicking) {
36
+ // Already mid-animation (rapid repeated clicks): force a restart by
37
+ // clearing the class and re-adding it next frame.
38
+ clicking = false;
39
+ requestAnimationFrame(() => (clicking = true));
40
+ } else {
41
+ clicking = true;
42
+ }
43
+ }
44
+
45
+ function handleMouseDown(e: MouseEvent) {
46
+ pressed = true;
47
+ clicking = false;
48
+ onMouseDown?.(e);
49
+ }
50
+
51
+ function handleMouseUp() {
52
+ if (pressed) {
53
+ pressed = false;
54
+ restartClickAnimation();
55
+ }
56
+ }
57
+
58
+ function handleMouseLeaveInternal(e: MouseEvent) {
59
+ // Dragging off the button while held cancels the press without playing
60
+ // the release animation.
61
+ pressed = false;
62
+ dispatch("mouseleave", e);
63
+ }
64
+
65
+ function handleClick(e: MouseEvent) {
66
+ if (stopPropagation) e.stopPropagation();
67
+ if (e.detail === 0) {
68
+ // Keyboard/programmatic activation: no mousedown/mouseup pair fired.
69
+ restartClickAnimation();
70
+ }
71
+ dispatch("click");
72
+ onClick?.();
73
+ }
74
+ </script>
75
+
76
+ <svelte:element
77
+ this={href ? "a" : "button"}
78
+ {id}
79
+ {href}
80
+ target={href ? target : undefined}
81
+ rel={href ? rel : undefined}
82
+ aria-label={ariaLabel}
83
+ on:click={handleClick}
84
+ on:mousedown={handleMouseDown}
85
+ on:mouseup={handleMouseUp}
86
+ on:mouseenter
87
+ on:mouseleave={handleMouseLeaveInternal}
88
+ on:animationend={() => (clicking = false)}
89
+ disabled={href ? undefined : disabled}
90
+ use:tooltip={tooltipText
91
+ ? {
92
+ text: tooltipText,
93
+ extendedText: tooltipExtendedText,
94
+ delay: tooltipDelay,
95
+ duration: tooltipDuration,
96
+ buttons: tooltipButtons,
97
+ triggerEvents:
98
+ tooltipTriggerEvents ?? (tooltipButtons ? ["show-buttons", "hover"] : undefined),
99
+ }
100
+ : undefined}
101
+ class="icon-button"
102
+ class:compact
103
+ >
104
+ <div class="icon-button-inner" class:pressed class:clicking>
105
+ <SvgIcon {iconPath} {iconData} fill="var(--foreground)" />
106
+ </div>
107
+ </svelte:element>
108
+
109
+ <style>
110
+ .icon-button {
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: center;
114
+ border-radius: var(--radius);
115
+ cursor: pointer;
116
+ pointer-events: auto;
117
+ padding: 0.5rem;
118
+ border: none;
119
+ background-color: transparent;
120
+ color: inherit;
121
+ text-decoration: none;
122
+ }
123
+
124
+ .icon-button.compact {
125
+ padding: 0.375rem;
126
+ }
127
+
128
+ .icon-button:hover {
129
+ background-color: var(--background-muted);
130
+ }
131
+
132
+ .icon-button:focus {
133
+ outline: var(--focus-outline);
134
+ outline-offset: var(--focus-offset);
135
+ }
136
+
137
+ .icon-button:disabled {
138
+ opacity: 0.3;
139
+ cursor: default;
140
+ }
141
+
142
+ .icon-button:disabled:hover {
143
+ background-color: transparent;
144
+ }
145
+
146
+ .icon-button-inner {
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ }
151
+
152
+ .icon-button-inner.pressed {
153
+ transform: scale(0.8);
154
+ opacity: 0.5;
155
+ }
156
+
157
+ .icon-button-inner.clicking {
158
+ animation: click-squish 250ms ease-out;
159
+ }
160
+
161
+ @keyframes click-squish {
162
+ 0% {
163
+ transform: scale(0.8);
164
+ opacity: 0.5;
165
+ }
166
+ 100% {
167
+ transform: scale(1);
168
+ opacity: 1;
169
+ }
170
+ }
171
+ </style>
@@ -0,0 +1,41 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const IconButton: $$__sveltets_2_IsomorphicComponent<{
15
+ iconPath?: string;
16
+ iconData?: string | undefined;
17
+ disabled?: boolean;
18
+ compact?: boolean;
19
+ tooltipText?: string | undefined;
20
+ onClick?: (() => void) | undefined;
21
+ onMouseDown?: ((e: MouseEvent) => void) | undefined;
22
+ id?: string | undefined;
23
+ ariaLabel?: string | undefined;
24
+ stopPropagation?: boolean;
25
+ href?: string | undefined;
26
+ target?: string | undefined;
27
+ rel?: string | undefined;
28
+ tooltipDelay?: number | undefined;
29
+ tooltipDuration?: number | undefined;
30
+ tooltipExtendedText?: string | undefined;
31
+ tooltipButtons?: any[] | undefined;
32
+ tooltipTriggerEvents?: string[] | undefined;
33
+ }, {
34
+ mouseenter: MouseEvent;
35
+ mouseleave: CustomEvent<any>;
36
+ click: CustomEvent<any>;
37
+ } & {
38
+ [evt: string]: CustomEvent<any>;
39
+ }, {}, {}, string>;
40
+ type IconButton = InstanceType<typeof IconButton>;
41
+ export default IconButton;
@@ -6,6 +6,7 @@
6
6
 
7
7
  let {
8
8
  text = "",
9
+ extendedText = undefined,
9
10
  placement = "top",
10
11
  duration = 250,
11
12
  delay = 750,
@@ -301,7 +302,7 @@
301
302
  class="tooltip-container-text"
302
303
  class:tooltip-whitespace-nowrap={nowrap}
303
304
  >
304
- {text}
305
+ {showbuttons && extendedText !== undefined ? extendedText : text}
305
306
  </div>
306
307
  {:else}
307
308
  <svelte:component
@@ -1,5 +1,6 @@
1
1
  declare const MoltenTooltip: import("svelte").Component<{
2
2
  text?: string;
3
+ extendedText?: any;
3
4
  placement?: string;
4
5
  duration?: number;
5
6
  delay?: number;
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export { default as MoltenPushButton } from "./MoltenPushButton.svelte";
13
13
  export { default as MoltenPushButtonGroup } from "./MoltenPushButtonGroup.svelte";
14
14
  export { contextMenu, contextTarget, type ContextMenuOptions, } from "./context-target";
15
15
  export { default as SvgIcon } from "./SvgIcon.svelte";
16
+ export { default as IconButton } from "./IconButton.svelte";
17
+ export { tooltip } from "./tooltip";
16
18
  export { default as MeltCombo, type MeltComboSuggestion, type MeltComboData, } from "./MeltCombo.svelte";
17
19
  export { default as MarkdownContainer, type MarkdownContainerTypes, } from "./MarkdownContainer.svelte";
18
20
  export { default as Toggle } from "./Toggle.svelte";
package/dist/index.js CHANGED
@@ -13,6 +13,8 @@ export { default as MoltenPushButton } from "./MoltenPushButton.svelte";
13
13
  export { default as MoltenPushButtonGroup } from "./MoltenPushButtonGroup.svelte";
14
14
  export { contextMenu, contextTarget, } from "./context-target";
15
15
  export { default as SvgIcon } from "./SvgIcon.svelte";
16
+ export { default as IconButton } from "./IconButton.svelte";
17
+ export { tooltip } from "./tooltip";
16
18
  export { default as MeltCombo, } from "./MeltCombo.svelte";
17
19
  export { default as MarkdownContainer, } from "./MarkdownContainer.svelte";
18
20
  export { default as Toggle } from "./Toggle.svelte";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intechstudio/grid-uikit",
3
- "version": "1.20260914.1126",
3
+ "version": "1.20260916.1334",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/intechstudio/grid-uikit.git"