@linzjs/windows 9.0.0 → 9.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ribbon/Ribbon.scss +30 -10
- package/dist/ribbon/RibbonButton.tsx +11 -1
- package/dist/ribbon/RibbonButtonLink.tsx +3 -2
- package/dist/ribbon/RibbonButtonOpenPanel.tsx +3 -10
- package/dist/ribbon/RibbonButtonSliderContext.tsx +4 -0
- package/dist/ribbon/RibbonSliderButton.tsx +5 -1
- package/package.json +1 -1
package/dist/ribbon/Ribbon.scss
CHANGED
|
@@ -16,12 +16,23 @@
|
|
|
16
16
|
background-color: lui.$polar;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
&:disabled {
|
|
20
|
+
cursor: not-allowed;
|
|
21
|
+
}
|
|
22
|
+
|
|
19
23
|
span.LuiIcon {
|
|
20
24
|
display: block;
|
|
21
25
|
margin: auto;
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
|
|
29
|
+
.RibbonButtonProcessing {
|
|
30
|
+
display: flex;
|
|
31
|
+
width: 44px;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
.RibbonButtonSkeleton {
|
|
26
37
|
padding: 4px;
|
|
27
38
|
margin: 0;
|
|
@@ -110,37 +121,46 @@
|
|
|
110
121
|
flex-direction: row;
|
|
111
122
|
}
|
|
112
123
|
|
|
113
|
-
$RibbonSliderMenu-
|
|
114
|
-
$RibbonSliderMenu-
|
|
124
|
+
$RibbonSliderMenu-buttonMargin: 2px;
|
|
125
|
+
$RibbonSliderMenu-gap: 6px;
|
|
126
|
+
$RibbonSliderMenu-buttonHalfHeight: 20px;
|
|
115
127
|
|
|
116
128
|
.RibbonSliderMenu-right, .RibbonSliderMenu-right-down {
|
|
117
|
-
translate: ($RibbonSliderMenu-
|
|
129
|
+
translate: ($RibbonSliderMenu-buttonMargin) (-$RibbonSliderMenu-gap);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.RibbonSliderMenu-right-center {
|
|
133
|
+
translate: ($RibbonSliderMenu-buttonMargin) ($RibbonSliderMenu-buttonHalfHeight);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.RibbonSliderMenu-left-center {
|
|
137
|
+
translate: ($RibbonSliderMenu-buttonMargin) ($RibbonSliderMenu-buttonHalfHeight);
|
|
118
138
|
}
|
|
119
139
|
|
|
120
140
|
.RibbonSliderMenu-left, .RibbonSliderMenu-left-down {
|
|
121
|
-
translate: (-$RibbonSliderMenu-
|
|
141
|
+
translate: (-$RibbonSliderMenu-buttonMargin) (-$RibbonSliderMenu-gap);
|
|
122
142
|
}
|
|
123
143
|
|
|
124
144
|
.RibbonSliderMenu-right-up {
|
|
125
|
-
translate: ($RibbonSliderMenu-
|
|
145
|
+
translate: ($RibbonSliderMenu-buttonMargin) ($RibbonSliderMenu-gap);
|
|
126
146
|
}
|
|
127
147
|
|
|
128
148
|
.RibbonSliderMenu-left-up {
|
|
129
|
-
translate: (-$RibbonSliderMenu-
|
|
149
|
+
translate: (-$RibbonSliderMenu-buttonMargin) ($RibbonSliderMenu-gap);
|
|
130
150
|
}
|
|
131
151
|
|
|
132
152
|
.RibbonSliderMenu-up, .RibbonSliderMenu-up-right {
|
|
133
|
-
translate: (-$RibbonSliderMenu-
|
|
153
|
+
translate: (-$RibbonSliderMenu-gap) (-$RibbonSliderMenu-buttonMargin);
|
|
134
154
|
}
|
|
135
155
|
|
|
136
156
|
.RibbonSliderMenu-down-left {
|
|
137
|
-
translate: ($RibbonSliderMenu-
|
|
157
|
+
translate: ($RibbonSliderMenu-gap) ($RibbonSliderMenu-buttonMargin);
|
|
138
158
|
}
|
|
139
159
|
|
|
140
160
|
.RibbonSliderMenu-down, .RibbonSliderMenu-down-right {
|
|
141
|
-
translate: (-$RibbonSliderMenu-
|
|
161
|
+
translate: (-$RibbonSliderMenu-gap) ($RibbonSliderMenu-buttonMargin);
|
|
142
162
|
}
|
|
143
163
|
|
|
144
164
|
.RibbonSliderMenu-down-left {
|
|
145
|
-
translate: ($RibbonSliderMenu-
|
|
165
|
+
translate: ($RibbonSliderMenu-gap) ($RibbonSliderMenu-buttonMargin);
|
|
146
166
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './Ribbon.scss';
|
|
2
2
|
|
|
3
|
-
import { LuiIcon } from '@linzjs/lui';
|
|
3
|
+
import { LuiIcon, LuiMiniSpinner } from '@linzjs/lui';
|
|
4
4
|
import { IconName } from '@linzjs/lui/dist/components/LuiIcon/LuiIcon';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
6
|
import { forwardRef, ReactElement, useContext } from 'react';
|
|
@@ -20,6 +20,7 @@ export interface RibbonButtonProps {
|
|
|
20
20
|
disabled?: boolean;
|
|
21
21
|
selected?: boolean;
|
|
22
22
|
loading?: boolean;
|
|
23
|
+
processing?: boolean;
|
|
23
24
|
className?: string;
|
|
24
25
|
testId?: string;
|
|
25
26
|
onClick?: () => void;
|
|
@@ -37,6 +38,7 @@ export const RibbonButton = forwardRef<HTMLButtonElement, RibbonButtonProps>(fun
|
|
|
37
38
|
className,
|
|
38
39
|
selected,
|
|
39
40
|
loading,
|
|
41
|
+
processing,
|
|
40
42
|
disabled,
|
|
41
43
|
testId,
|
|
42
44
|
onClick,
|
|
@@ -59,6 +61,14 @@ export const RibbonButton = forwardRef<HTMLButtonElement, RibbonButtonProps>(fun
|
|
|
59
61
|
);
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
if (processing) {
|
|
65
|
+
return (
|
|
66
|
+
<div className={'RibbonButtonProcessing'}>
|
|
67
|
+
<LuiMiniSpinner size={20} />
|
|
68
|
+
</div>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
62
72
|
return (
|
|
63
73
|
<button
|
|
64
74
|
ref={ref}
|
|
@@ -7,10 +7,11 @@ import { RibbonButton, RibbonButtonProps } from './RibbonButton';
|
|
|
7
7
|
export type RibbonButtonLinkProps = RibbonButtonProps & {
|
|
8
8
|
href: string;
|
|
9
9
|
target?: string;
|
|
10
|
+
rel?: string;
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
export const RibbonButtonLink = forwardRef<HTMLButtonElement, RibbonButtonLinkProps>(function RibbonButtonLink(
|
|
13
|
-
{ onClick, href, target = '_blank', ...props },
|
|
14
|
+
{ onClick, href, rel = 'noreferrer', target = '_blank', ...props },
|
|
14
15
|
ref,
|
|
15
16
|
) {
|
|
16
17
|
return (
|
|
@@ -19,7 +20,7 @@ export const RibbonButtonLink = forwardRef<HTMLButtonElement, RibbonButtonLinkPr
|
|
|
19
20
|
{...props}
|
|
20
21
|
onClick={() => {
|
|
21
22
|
onClick?.();
|
|
22
|
-
void window.open(href, target);
|
|
23
|
+
void window.open(href, target, rel);
|
|
23
24
|
}}
|
|
24
25
|
/>
|
|
25
26
|
);
|
|
@@ -8,21 +8,14 @@ import { RibbonButton, RibbonButtonProps } from './RibbonButton';
|
|
|
8
8
|
|
|
9
9
|
export type RibbonButtonOpenPanelProps = Omit<RibbonButtonProps, 'onClick'> & OpenPanelOptions;
|
|
10
10
|
export const RibbonButtonOpenPanel = forwardRef<HTMLButtonElement, RibbonButtonOpenPanelProps>(
|
|
11
|
-
function RibbonButtonOpenPanel(
|
|
12
|
-
{ title, icon, className, disabled, testId, uniqueId = title, loading, ...openPanelOptions },
|
|
13
|
-
ref,
|
|
14
|
-
) {
|
|
11
|
+
function RibbonButtonOpenPanel({ uniqueId, componentFn, poppedOut, onClose, className, ...buttonProps }, ref) {
|
|
15
12
|
const { openPanel, openPanels } = useContext(PanelsContext);
|
|
16
13
|
|
|
17
14
|
return (
|
|
18
15
|
<RibbonButton
|
|
19
16
|
ref={ref}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
title={title}
|
|
23
|
-
disabled={disabled}
|
|
24
|
-
loading={loading}
|
|
25
|
-
onClick={() => openPanel({ uniqueId, ...openPanelOptions })}
|
|
17
|
+
{...buttonProps}
|
|
18
|
+
onClick={() => openPanel({ uniqueId: uniqueId || buttonProps.title, componentFn, poppedOut, onClose })}
|
|
26
19
|
className={clsx(openPanels.has(uniqueId ?? '') && 'RibbonButton-selected', className)}
|
|
27
20
|
/>
|
|
28
21
|
);
|
|
@@ -3,14 +3,18 @@ import { createContext } from 'react';
|
|
|
3
3
|
export const ribbonSliderAlignments = {
|
|
4
4
|
right: ['left', 'right', 'top'],
|
|
5
5
|
'right-down': ['left', 'right', 'top'],
|
|
6
|
+
'right-center': ['left', 'right', 'top', '0%, -50%'],
|
|
6
7
|
'right-up': ['left', 'right', 'bottom'],
|
|
7
8
|
left: ['right', 'left', 'top'],
|
|
8
9
|
'left-down': ['right', 'left', 'top'],
|
|
10
|
+
'left-center': ['right', 'left', 'top', '0%, -50%'],
|
|
9
11
|
'left-up': ['right', 'left', 'bottom'],
|
|
10
12
|
'down-left': ['top', 'bottom', 'right'],
|
|
13
|
+
'down-center': ['top', 'bottom', 'right', '50%, 0%'],
|
|
11
14
|
'down-right': ['top', 'bottom', 'left'],
|
|
12
15
|
down: ['top', 'bottom', 'left'],
|
|
13
16
|
'up-left': ['bottom', 'top', 'right'],
|
|
17
|
+
'up-center': ['bottom', 'top', 'right', '50%, 0%'],
|
|
14
18
|
'up-right': ['bottom', 'top', 'left'],
|
|
15
19
|
up: ['bottom', 'top', 'left'],
|
|
16
20
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './Ribbon.scss';
|
|
2
2
|
|
|
3
|
+
import clsx from 'clsx';
|
|
3
4
|
import { PropsWithChildren, ReactElement, useState } from 'react';
|
|
4
5
|
import { v4 } from 'uuid';
|
|
5
6
|
|
|
@@ -9,10 +10,12 @@ import { RibbonButtonSliderContext, RibbonSliderAlignment, ribbonSliderAlignment
|
|
|
9
10
|
export interface RibbonSliderProps extends RibbonButtonProps {
|
|
10
11
|
autoClose?: boolean;
|
|
11
12
|
alignment: RibbonSliderAlignment;
|
|
13
|
+
sliderClassName?: string;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
export const RibbonButtonSlider = ({
|
|
15
17
|
alignment,
|
|
18
|
+
sliderClassName,
|
|
16
19
|
autoClose = false,
|
|
17
20
|
children,
|
|
18
21
|
onClick,
|
|
@@ -40,11 +43,12 @@ export const RibbonButtonSlider = ({
|
|
|
40
43
|
{...{ ['popover' as never]: 'auto' }}
|
|
41
44
|
role="menu"
|
|
42
45
|
aria-label="Menu"
|
|
43
|
-
className={`RibbonSliderMenu RibbonSliderMenu-${alignment}
|
|
46
|
+
className={clsx(`RibbonSliderMenu RibbonSliderMenu-${alignment}`, sliderClassName)}
|
|
44
47
|
style={{
|
|
45
48
|
positionAnchor,
|
|
46
49
|
[alignments[0]]: `anchor(${positionAnchor} ${alignments[1]})`,
|
|
47
50
|
[alignments[2]]: `anchor(${positionAnchor} ${alignments[2]})`,
|
|
51
|
+
...(alignments[3] && { transform: `translate(${alignments[3]})` }),
|
|
48
52
|
}}
|
|
49
53
|
>
|
|
50
54
|
{children}
|