Skip to content

Commit

Permalink
feat: Watermark calculates the width and height of content by default
Browse files Browse the repository at this point in the history
* docs: update docs

* docs: update demo

* test: update snapshot
  • Loading branch information
JarvisArt committed Dec 4, 2022
1 parent de556f0 commit 9c218b1
Show file tree
Hide file tree
Showing 10 changed files with 2,247 additions and 146 deletions.
1,286 changes: 1,257 additions & 29 deletions components/watermark/__tests__/__snapshots__/demo-extend.test.ts.snap

Large diffs are not rendered by default.

784 changes: 755 additions & 29 deletions components/watermark/__tests__/__snapshots__/demo.test.ts.snap

Large diffs are not rendered by default.

13 changes: 9 additions & 4 deletions components/watermark/__tests__/__snapshots__/index.test.tsx.snap
Expand Up @@ -30,7 +30,7 @@ exports[`Watermark Observe the modification of data-watermark-id 1`] = `
>
<div
data-watermark-id="jfei"
style="z-index: 9; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-size: 320px; pointer-events: none; background-repeat: repeat; background-position: -300px -300px; background-image: url('data:image/png;base64,00'); "
style="z-index: 9; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-size: 216px; pointer-events: none; background-repeat: repeat; background-position: -300px -300px; background-image: url('data:image/png;base64,00'); "
/>
</div>
</div>
Expand All @@ -44,7 +44,7 @@ exports[`Watermark The offset should be correct 1`] = `
>
<div
data-watermark-id="7mte-1669650061677"
style="z-index: 9; position: absolute; left: 100px; top: 100px; width: calc(100% - 100px); height: calc(100% - 100px); background-size: 320px; pointer-events: none; background-repeat: repeat; background-position: 0px 0px; background-image: url('data:image/png;base64,00'); "
style="z-index: 9; position: absolute; left: 100px; top: 100px; width: calc(100% - 100px); height: calc(100% - 100px); background-size: 214px; pointer-events: none; background-repeat: repeat; background-position: 0px 0px; background-image: url('data:image/png;base64,00'); "
/>
</div>
</div>
Expand All @@ -58,7 +58,7 @@ exports[`Watermark The watermark should render successfully 1`] = `
>
<div
data-watermark-id="7mte-1669650061677"
style="z-index: 9; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-size: 320px; pointer-events: none; background-repeat: repeat; background-position: 0px 0px; background-image: url('data:image/png;base64,00'); "
style="z-index: 9; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-size: 210px; pointer-events: none; background-repeat: repeat; background-position: 0px 0px; background-image: url('data:image/png;base64,00'); "
/>
</div>
</div>
Expand All @@ -67,5 +67,10 @@ exports[`Watermark The watermark should render successfully 1`] = `
exports[`Watermark rtl render component should be rendered correctly in RTL direction 1`] = `
<div
style="position: relative;"
/>
>
<div
data-watermark-id="7mte-1669650061677"
style="z-index: 9; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-size: 200px; pointer-events: none; background-repeat: repeat; background-position: 0px 0px; background-image: url('data:image/png;base64,00'); "
/>
</div>
`;
7 changes: 7 additions & 0 deletions components/watermark/demo/custom.md
@@ -0,0 +1,7 @@
## zh-CN

通过自定义参数配置预览水印效果。

## en-US

Preview the watermark effect by configuring custom parameters.
167 changes: 167 additions & 0 deletions components/watermark/demo/custom.tsx
@@ -0,0 +1,167 @@
import React, { useMemo, useState } from 'react';
import { Watermark, Popover, Typography, Form, Input, Slider, Space, InputNumber } from 'antd';
import { SketchPicker } from 'react-color';
import type { RGBColor } from 'react-color';

const { Paragraph } = Typography;

interface ColorPickerProps {
value?: RGBColor;
onChange?: (value: RGBColor) => void;
}

const ColorPicker: React.FC<ColorPickerProps> = ({ value, onChange }) => {
const switchStyle = {
padding: 4,
background: '#fff',
borderRadius: 2,
border: '1px solid #dedede',
display: 'inline-block',
cursor: 'pointer',
};

const colorStyle = {
width: 36,
height: 14,
borderRadius: 2,
background: `rgba(${value?.r}, ${value?.g}, ${value?.b}, ${value?.a})`,
};

return (
<Popover
trigger="click"
placement="bottomLeft"
overlayInnerStyle={{ padding: 0 }}
content={<SketchPicker color={value} onChange={(color) => onChange?.(color.rgb)} />}
>
<div style={switchStyle}>
<div style={colorStyle} />
</div>
</Popover>
);
};

const App: React.FC = () => {
const [form] = Form.useForm();
const [config, setConfig] = useState({
content: 'Ant Design',
color: { r: 0, g: 0, b: 0, a: 0.15 },
fontSize: 16,
zIndex: 11,
rotate: -22,
gap: [200, 200],
offset: undefined,
});
const { content, color, fontSize, zIndex, rotate, gap, offset } = config;

const watermarkProps = useMemo(
() => ({
content,
font: {
color: `rgba(${color.r},${color.g},${color.b},${color.a})`,
fontSize,
},
zIndex,
rotate,
gap,
offset,
}),
[config],
);

return (
<div style={{ display: 'flex' }}>
<Watermark {...watermarkProps}>
<Typography>
<Paragraph>
The light-speed iteration of the digital world makes products more complex. However,
human consciousness and attention resources are limited. Facing this design
contradiction, the pursuit of natural interaction will be the consistent direction of
Ant Design.
</Paragraph>
<Paragraph>
Natural user cognition: According to cognitive psychology, about 80% of external
information is obtained through visual channels. The most important visual elements in
the interface design, including layout, colors, illustrations, icons, etc., should fully
absorb the laws of nature, thereby reducing the user&apos;s cognitive cost and bringing
authentic and smooth feelings. In some scenarios, opportunely adding other sensory
channels such as hearing, touch can create a richer and more natural product experience.
</Paragraph>
<Paragraph>
Natural user behavior: In the interaction with the system, the designer should fully
understand the relationship between users, system roles, and task objectives, and also
contextually organize system functions and services. At the same time, a series of
methods such as behavior analysis, artificial intelligence and sensors could be applied
to assist users to make effective decisions and reduce extra operations of users, to
save users&apos; mental and physical resources and make human-computer interaction more
natural.
</Paragraph>
</Typography>
<img
style={{
zIndex: 10,
width: '100%',
maxWidth: 800,
position: 'relative',
}}
src="https://gw.alipayobjects.com/mdn/rms_08e378/afts/img/A*zx7LTI_ECSAAAAAAAAAAAABkARQnAQ"
alt="示例图片"
/>
</Watermark>
<Form
style={{
width: 280,
flexShrink: 0,
borderLeft: '1px solid #eee',
paddingLeft: 20,
marginLeft: 20,
}}
form={form}
layout="vertical"
initialValues={config}
onValuesChange={(_, values) => {
setConfig(values);
console.log(_, values);
}}
>
<Form.Item name="content" label="Content">
<Input placeholder="请输入" />
</Form.Item>
<Form.Item name="color" label="Color">
<ColorPicker />
</Form.Item>
<Form.Item name="fontSize" label="FontSize">
<Slider step={1} min={0} max={100} />
</Form.Item>
<Form.Item name="zIndex" label="zIndex">
<Slider step={1} min={0} max={100} />
</Form.Item>
<Form.Item name="rotate" label="Rotate">
<Slider step={1} min={-180} max={180} />
</Form.Item>
<Form.Item label="Gap" style={{ marginBottom: 0 }}>
<Space style={{ display: 'flex' }} align="baseline">
<Form.Item name={['gap', 0]}>
<InputNumber placeholder="gapX" style={{ width: '100%' }} />
</Form.Item>
<Form.Item name={['gap', 1]}>
<InputNumber placeholder="gapY" style={{ width: '100%' }} />
</Form.Item>
</Space>
</Form.Item>
<Form.Item label="Offset" style={{ marginBottom: 0 }}>
<Space style={{ display: 'flex' }} align="baseline">
<Form.Item name={['offset', 0]}>
<InputNumber placeholder="offsetLeft" style={{ width: '100%' }} />
</Form.Item>
<Form.Item name={['offset', 1]}>
<InputNumber placeholder="offsetTop" style={{ width: '100%' }} />
</Form.Item>
</Space>
</Form.Item>
</Form>
</div>
);
};

export default App;
7 changes: 0 additions & 7 deletions components/watermark/demo/z-index.md

This file was deleted.

44 changes: 0 additions & 44 deletions components/watermark/demo/z-index.tsx

This file was deleted.

6 changes: 3 additions & 3 deletions components/watermark/index.en-US.md
Expand Up @@ -20,16 +20,16 @@ Add specific text or patterns to the page.
<code src="./demo/basic.tsx">Basic</code>
<code src="./demo/multi-line.tsx">Multi-line watermark</code>
<code src="./demo/image.tsx">Image watermark</code>
<code src="./demo/z-index.tsx">High priority</code>
<code src="./demo/custom.tsx">Custom configuration</code>

## API

### Watermark

| Property | Description | Type | Default | Version |
| --- | --- | --- | --- | --- |
| width | The width of the watermark | number | 120 | |
| height | The height of the watermark | number | 64 | |
| width | The width of the watermark, the default value of `content` is its own width | number | 120 | |
| height | The height of the watermark, the default value of `content` is its own height | number | 64 | |
| rotate | When the watermark is drawn, the rotation Angle, unit `°` | number | -22 | |
| zIndex | The z-index of the appended watermark element | number | 9 | |
| image | Image source, it is recommended to export 2x or 3x image, high priority | string | - | |
Expand Down

0 comments on commit 9c218b1

Please sign in to comment.