diff --git a/components/Checkbox/src/index.svelte b/components/Checkbox/src/index.svelte
index 72e5de9b..baeeacad 100644
--- a/components/Checkbox/src/index.svelte
+++ b/components/Checkbox/src/index.svelte
@@ -18,6 +18,10 @@
export let indeterminate: KCheckboxProps['indeterminate'] = false;
export let cls: KCheckboxProps['cls'] = undefined;
export let attrs: KCheckboxProps['attrs'] = {};
+ /**
+ * @internal
+ */
+ export let canCancel: KCheckboxProps['canCancel'] = false;
// updateValue
const dispatch = createEventDispatcher();
@@ -43,6 +47,9 @@
*/
const handleUpdateValue = () => {
if (isDisabled) return;
+ if (canCancel && valueInner) {
+ return;
+ }
doUpdatedValue(!valueInner, true);
isIndeterminate = false;
// Being in a checkbox group does not trigger it
diff --git a/components/Checkbox/src/types.d.ts b/components/Checkbox/src/types.d.ts
index 782610e8..bf341f51 100644
--- a/components/Checkbox/src/types.d.ts
+++ b/components/Checkbox/src/types.d.ts
@@ -8,6 +8,7 @@ export type KCheckboxProps = {
bgUnCheckColor: string;
label: string;
value: boolean;
+ canCancel: boolean;
uid: string | number;
size: IKunSize;
disabled: boolean;
diff --git a/components/CheckboxGroup/src/index.svelte b/components/CheckboxGroup/src/index.svelte
index e17b790c..81c09226 100644
--- a/components/CheckboxGroup/src/index.svelte
+++ b/components/CheckboxGroup/src/index.svelte
@@ -35,7 +35,7 @@
}
onMount(() => {
// Register event, KForm can set KInput value
- if (formContext && formInstance) {
+ if (formContext && formInstance && field) {
formUpdateField(true);
formPropsChangeCb(formInstance.__dynamicProps);
formInstance.__itemCompMap[field] = {
diff --git a/components/ColorPicker/__test__/color-picker.spec.ts b/components/ColorPicker/__test__/color-picker.spec.ts
new file mode 100644
index 00000000..72baecd3
--- /dev/null
+++ b/components/ColorPicker/__test__/color-picker.spec.ts
@@ -0,0 +1,32 @@
+import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
+import KColorPicker from '../src';
+
+let host;
+
+const initHost = () => {
+ host = globalThis.document.createElement('div');
+ host.setAttribute('id', 'host');
+ globalThis.document.body.appendChild(host);
+};
+beforeEach(() => {
+ initHost();
+ vi.useFakeTimers();
+});
+afterEach(() => {
+ host.remove();
+ vi.useRealTimers();
+});
+
+describe('Test: KColorPicker', () => {
+ test('props: cls', async () => {
+ const instance = new KColorPicker({
+ target: host,
+ props: {
+ cls: 'k-color-picker--test'
+ }
+ });
+ expect(instance).toBeTruthy();
+ expect(host!.innerHTML.includes('k-color-picker--test')).toBeTruthy();
+ expect(host.innerHTML).matchSnapshot();
+ });
+});
diff --git a/components/ColorPicker/package.json b/components/ColorPicker/package.json
new file mode 100644
index 00000000..b1acf5c9
--- /dev/null
+++ b/components/ColorPicker/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@ikun-ui/color-picker",
+ "version": "0.2.1",
+ "type": "module",
+ "main": "src/index.ts",
+ "types": "src/index.d.ts",
+ "svelte": "src/index.ts",
+ "keywords": [
+ "svelte",
+ "svelte3",
+ "web component",
+ "component",
+ "react",
+ "vue",
+ "svelte-kit",
+ "dx"
+ ],
+ "files": [
+ "dist",
+ "package.json"
+ ],
+ "scripts": {
+ "build": "svelte-package -i src",
+ "publish:pre": "node ../../scripts/pre-publish.js",
+ "publish:npm": "pnpm run publish:pre && pnpm publish --no-git-checks --access public"
+ },
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.js",
+ "module": "dist/index.js",
+ "svelte": "dist/index.js",
+ "types": "dist/index.d.ts"
+ },
+ "dependencies": {
+ "@ikun-ui/icon": "workspace:*",
+ "@ikun-ui/popover": "workspace:*",
+ "@ikun-ui/input": "workspace:*",
+ "@ikun-ui/input-number": "workspace:*",
+ "@ikun-ui/dropdown": "workspace:*",
+ "@ikun-ui/checkbox": "workspace:*",
+ "@ikun-ui/checkbox-group": "workspace:*",
+ "@ikun-ui/utils": "workspace:*",
+ "esm-env": "^1.0.0",
+ "tinycolor2": "^1.6.0",
+ "baiwusanyu-utils": "^1.0.18",
+ "clsx": "^2.0.0",
+ "svelte": "^4.2.7"
+ },
+ "devDependencies": {
+ "@sveltejs/package": "^2.2.5",
+ "@tsconfig/svelte": "^5.0.2",
+ "@types/tinycolor2": "^1.4.6",
+ "tslib": "^2.6.2",
+ "typescript": "^5.3.3"
+ }
+}
diff --git a/components/ColorPicker/src/block.svelte b/components/ColorPicker/src/block.svelte
new file mode 100644
index 00000000..0c678dcc
--- /dev/null
+++ b/components/ColorPicker/src/block.svelte
@@ -0,0 +1,54 @@
+
+
+{#if trigger}
+
+{:else}
+
+{/if}
diff --git a/components/ColorPicker/src/format.svelte b/components/ColorPicker/src/format.svelte
new file mode 100644
index 00000000..162f943d
--- /dev/null
+++ b/components/ColorPicker/src/format.svelte
@@ -0,0 +1,195 @@
+
+
+
+
+
+ {curFormat}
+
+
+
+ RGB
+ HEX
+ HSV
+
+
+ {#if formatValue !== 'hex'}
+
handleInput(e, 'hr')}
+ cls={inputNumCls}
+ size="sm"
+ >
+
handleInput(e, 'sg')}
+ cls={inputNumCls}
+ size="sm"
+ >
+
+
handleInput(e, 'vb')}
+ cls={inputNumCls}
+ size="sm"
+ >
+ {/if}
+ {#if formatValue === 'hex'}
+
handleInput(e, 'hex')} size="sm">
+ #
+
+ {/if}
+ {#if !disabledAlpha}
+
handleInput(e, 'a')}
+ cls={inputNumCls}
+ size="sm"
+ >
+ {/if}
+
diff --git a/components/ColorPicker/src/index.svelte b/components/ColorPicker/src/index.svelte
new file mode 100644
index 00000000..a5d223b1
--- /dev/null
+++ b/components/ColorPicker/src/index.svelte
@@ -0,0 +1,245 @@
+
+
+
+
+ {#if $$slots.default}
+
+ {:else}
+
+
+ {#if showText}
+
+ {formatColor(formatValue, blockColor)}
+
+ {/if}
+
+
+ {/if}
+
+
+
+
+
+
+
+
+ {#if !disabledAlpha}
+
+ {/if}
+
+
+
+
+
+ {#if presets && presets.length}
+
+ {/if}
+
+
+
+
diff --git a/components/ColorPicker/src/index.ts b/components/ColorPicker/src/index.ts
new file mode 100644
index 00000000..4f4cd64e
--- /dev/null
+++ b/components/ColorPicker/src/index.ts
@@ -0,0 +1,23 @@
+///
+import ColorPicker from './index.svelte';
+import ColorPickerPalette from './palette.svelte';
+import ColorPickerSlider from './slider.svelte';
+import ColorPickerBlock from './block.svelte';
+import ColorPickerFormat from './format.svelte';
+import ColorPickerPreset from './preset.svelte';
+export { ColorPicker as KColorPicker };
+export { ColorPickerPalette as KColorPickerPalette };
+export { ColorPickerSlider as KColorPickerSlider };
+export { ColorPickerBlock as KColorPickerBlock };
+export { ColorPickerFormat as KColorPickerFormat };
+export { ColorPickerPreset as KColorPickerPreset };
+export default ColorPicker;
+
+export type {
+ KColorPickerProps,
+ KColorPickerPaletteProps,
+ KColorPickerSliderProps,
+ KColorPickerBlockProps,
+ KColorPickerFormatProps,
+ KColorPickerPresetProps
+} from './types';
diff --git a/components/ColorPicker/src/palette.svelte b/components/ColorPicker/src/palette.svelte
new file mode 100644
index 00000000..e7e5be8a
--- /dev/null
+++ b/components/ColorPicker/src/palette.svelte
@@ -0,0 +1,157 @@
+
+
+
diff --git a/components/ColorPicker/src/preset.svelte b/components/ColorPicker/src/preset.svelte
new file mode 100644
index 00000000..187659ca
--- /dev/null
+++ b/components/ColorPicker/src/preset.svelte
@@ -0,0 +1,85 @@
+
+
+
+
+ {#each normalPresets as preset, index (preset.label + index)}
+
+
handleExpend(index)} aria-hidden="true">
+
+ {preset.label}
+
+ {#if preset.defaultOpen}
+
+ {#each preset.colors as color (color)}
+
+ {/each}
+
+ {/if}
+
+ {/each}
+
+
diff --git a/components/ColorPicker/src/slider.svelte b/components/ColorPicker/src/slider.svelte
new file mode 100644
index 00000000..504fb6b7
--- /dev/null
+++ b/components/ColorPicker/src/slider.svelte
@@ -0,0 +1,102 @@
+
+
+
+
diff --git a/components/ColorPicker/src/types.d.ts b/components/ColorPicker/src/types.d.ts
new file mode 100644
index 00000000..b1f08b67
--- /dev/null
+++ b/components/ColorPicker/src/types.d.ts
@@ -0,0 +1,233 @@
+///
+import type { ClassValue } from 'clsx';
+import type { IKunPlacement, IKunSize, IKunTrigger } from '@ikun-ui/utils';
+export type KColorPickerProps = {
+ /**
+ * 标题
+ * @type string ;
+ * @default ''
+ */
+ title: string;
+ /**
+ * 允许清除选择的颜色
+ * @type boolean
+ * @default false
+ */
+ allowClear?: boolean;
+ /**
+ * 默认颜色的值
+ * @expiremrnt 决定线性范围,他会根据颜色的 slider 来变化
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ defaultValue: string | RgbaColor | HsvaColor;
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ /**
+ * 颜色格式值
+ * @type 'rgb' | 'hex' | 'hsv'
+ * @default 'rgb'
+ */
+ format?: 'rgb' | 'hex' | 'hsv';
+ /**
+ * 禁用颜色选择器
+ * @type boolean
+ * @default false
+ */
+ disabled?: boolean;
+ /**
+ * 禁用透明度
+ * @type boolean
+ * @default false
+ */
+ disabledAlpha?: boolean;
+ /**
+ * 弹出窗口的位置
+ * @type IKunPlacement
+ * @default 'top'
+ */
+ placement?: IKunPlacement;
+ /**
+ * 预设的颜色
+ * @type { label: string, colors: Array, defaultOpen?: boolean }[]
+ * @default undefined
+ */
+ presets?: KColorPickerPreset[];
+ /**
+ * 触发器大小
+ * @type IKunSize
+ * @default 'md'
+ */
+ size: IKunSize;
+ /**
+ * 触发器是否显示文本
+ * @type boolean
+ * @default false
+ */
+ showText: boolean;
+ /**
+ * 颜色选择器的触发模式
+ * @type IKunTrigger
+ * @default 'click'
+ */
+ trigger: IKunTrigger;
+ cls: ClassValue;
+ attrs: Record;
+};
+
+export type KColorPickerPaletteProps = {
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ /**
+ * 默认颜色的值
+ * @expiremrnt 决定线性范围,他会根据颜色的 slider 来变化
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ defaultValue: string | RgbaColor | HsvaColor;
+ cls: ClassValue;
+ attrs: Record;
+};
+
+export type KColorPickerSliderProps = {
+ max: number;
+ min: number;
+ step: number;
+ isAlpha: boolean;
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ cls: ClassValue;
+ attrs: Record;
+};
+
+export type KColorPickerBlockProps = {
+ disabled: boolean;
+ focus: boolean;
+ isClear: boolean;
+ trigger: boolean;
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ /**
+ * 触发器大小
+ * @type IKunSize
+ * @default 'md'
+ */
+ size: IKunSize;
+ cls: ClassValue;
+ attrs: Record;
+};
+
+export type KColorPickerFormatProps = {
+ /**
+ * 禁用透明度
+ * @type boolean
+ * @default false
+ */
+ disabledAlpha?: boolean;
+ /**
+ * 颜色格式值
+ * @type 'rgb' | 'hex' | 'hsv'
+ * @default 'rgb'
+ */
+ format?: 'rgb' | 'hex' | 'hsv';
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ cls: ClassValue;
+ attrs: Record;
+};
+
+// TODO:
+// 🚧 slider
+// 🚧 顔色格式轉換
+// 🚧 多個 popover
+
+// TODO: 🚧 Title and Clear
+// TODO: 🚧 颜色选择区
+// TODO: 🚧 颜色选择条
+// TODO: 🚧 透明度选择条
+// TODO: 🚧 HEX 格式输入控件与值输出
+// TODO: 🚧 HSB 格式输入控件与值输出
+// TODO: 🚧 RGB 格式输入控件与值输出
+// TODO: 🚧 颜色预设区域
+// TODO: 受控模式
+
+// TODO: 🚧 props allowClear 允许清除选择的颜色 boolean @default false
+// TODO: 🚧 props value 颜色的值 string @default ''
+// TODO: 🚧 defaultValue value 初始化时决定线性范围 string @default ''
+// TODO: 🚧 props format 颜色格式值 rgb | hex | hsb @default rgb
+// TODO: 🚧 props disabled 禁用颜色选择器 boolean @default false
+// TODO: 🚧 props disabledAlpha 禁用透明度 boolean @default false
+// TODO: 🚧 props placement unit test
+// TODO: 🚧 props presets 预设的颜色 { label: string, colors: Array, defaultOpen?: boolean }[] @default undefined
+// TODO: 🚧 props size 触发器大小 IkunSize @default 'md'
+// TODO: 🚧 props showText 触发器是否显示文本 boolean @default false
+// TODO: 🚧 props trigger unit test
+
+// TODO: 🚧 event change 颜色变化的回调 (color: string) => void
+// TODO: 🚧 event changeComplete 颜色选择完成的回调 (color: string) => void
+
+// TODO: 🚧 event formatChange 颜色格式变化的回调 (format: 'hex' | 'rgb' | 'hsb') => void
+// TODO: 🚧 event openChange 当 open 被改变时的回调 (open: boolean) => void
+// TODO: 🚧 event clear 清除的回调 () => void
+
+// TODO: 🚧 slot presetLabel 预设的 label 插槽
+// TODO: 🚧 slot text 后置插槽(参数颜色值)
+// TODO: 🚧 slot default 自定义触发插槽
+// TODO: 🚧 slot title 标题插槽
+
+// TODO: dark mode
+export interface RgbaColor {
+ r: number;
+ g: number;
+ b: number;
+ a: number;
+}
+
+export interface HsvaColor {
+ h: number;
+ s: number;
+ v: number;
+ a: number;
+}
+
+export interface KColorPickerPreset {
+ defaultOpen?: boolean;
+ label: string;
+ colors: string[] | RgbaColor[] | HsvaColor[];
+}
+export type KColorPickerPresetProps = {
+ /**
+ * 颜色的值
+ * @type string | RgbaColor | HsvaColor;
+ * @default ''
+ */
+ value: string | RgbaColor | HsvaColor;
+ /**
+ * 预设颜色的值
+ * @type string[] | RgbaColor[] | HsvaColor[];
+ * @default ''
+ */
+ presets: KColorPickerPreset[];
+ cls: ClassValue;
+ attrs: Record;
+};
diff --git a/components/ColorPicker/tsconfig.json b/components/ColorPicker/tsconfig.json
new file mode 100644
index 00000000..fe0d7c4f
--- /dev/null
+++ b/components/ColorPicker/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+
+ "compilerOptions": {
+ "noImplicitAny": true,
+ "strict": true,
+ "declaration": true
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.svelte"],
+ "exclude": ["node_modules/*", "**/*.spec.ts"]
+}
diff --git a/components/Dropdown/src/index.ts b/components/Dropdown/src/index.ts
index c42a14a3..777ed956 100644
--- a/components/Dropdown/src/index.ts
+++ b/components/Dropdown/src/index.ts
@@ -2,7 +2,7 @@
import Dropdown from './index.svelte';
import DropdownItem from './item.svelte';
export { Dropdown as KDropdown };
-export { DropdownItem as DropdownItem };
+export { DropdownItem as KDropdownItem };
export default Dropdown;
export type { KDropdownProps, KDropdownItemProps, KDropdownCtx } from './types';
diff --git a/components/index.ts b/components/index.ts
index 0ef52060..09d3bea5 100644
--- a/components/index.ts
+++ b/components/index.ts
@@ -63,3 +63,4 @@ export * from '@ikun-ui/segmented';
export * from '@ikun-ui/steps';
export * from '@ikun-ui/auto-complete';
export * from '@ikun-ui/skeleton';
+export * from '@ikun-ui/color-picker';
diff --git a/package.json b/package.json
index b3f38248..b6e565a3 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,7 @@
"clean:deps": "node scripts/clean-deps.js && node scripts/clean-root-deps.js",
"prepare": "npx simple-git-hooks",
"update:deps": "npx taze -w -r major && pnpm run init",
- "create:new:comp": "node scripts/new-component.js skeleton"
+ "create:new:comp": "node scripts/new-component.js color-picker"
},
"peerDependencies": {
"baiwusanyu-utils": "^1.0.18",
@@ -145,7 +145,8 @@
"@ikun-ui/segmented": "workspace:*",
"@ikun-ui/steps": "workspace:*",
"@ikun-ui/auto-complete": "workspace:*",
- "@ikun-ui/skeleton": "workspace:*"
+ "@ikun-ui/skeleton": "workspace:*",
+ "@ikun-ui/color-picker": "workspace:*"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4fc6e311..a8d61f1d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -59,6 +59,9 @@ importers:
'@ikun-ui/collapse-wrapper':
specifier: workspace:*
version: link:components/CollapseWrapper
+ '@ikun-ui/color-picker':
+ specifier: workspace:*
+ version: link:components/ColorPicker
'@ikun-ui/contextmenu':
specifier: workspace:*
version: link:components/Contextmenu
@@ -885,6 +888,64 @@ importers:
specifier: ^5.3.3
version: 5.3.3
+ components/ColorPicker:
+ dependencies:
+ '@ikun-ui/checkbox':
+ specifier: workspace:*
+ version: link:../Checkbox
+ '@ikun-ui/checkbox-group':
+ specifier: workspace:*
+ version: link:../CheckboxGroup
+ '@ikun-ui/dropdown':
+ specifier: workspace:*
+ version: link:../Dropdown
+ '@ikun-ui/icon':
+ specifier: workspace:*
+ version: link:../Icon
+ '@ikun-ui/input':
+ specifier: workspace:*
+ version: link:../Input
+ '@ikun-ui/input-number':
+ specifier: workspace:*
+ version: link:../InputNumber
+ '@ikun-ui/popover':
+ specifier: workspace:*
+ version: link:../Popover
+ '@ikun-ui/utils':
+ specifier: workspace:*
+ version: link:../../utils
+ baiwusanyu-utils:
+ specifier: ^1.0.18
+ version: 1.0.18(ansi-colors@4.1.3)(moment@2.29.4)
+ clsx:
+ specifier: ^2.0.0
+ version: 2.1.0
+ esm-env:
+ specifier: ^1.0.0
+ version: 1.0.0
+ svelte:
+ specifier: ^4.2.7
+ version: 4.2.8
+ tinycolor2:
+ specifier: ^1.6.0
+ version: 1.6.0
+ devDependencies:
+ '@sveltejs/package':
+ specifier: ^2.2.5
+ version: 2.2.5(svelte@4.2.8)(typescript@5.3.3)
+ '@tsconfig/svelte':
+ specifier: ^5.0.2
+ version: 5.0.2
+ '@types/tinycolor2':
+ specifier: ^1.4.6
+ version: 1.4.6
+ tslib:
+ specifier: ^2.6.2
+ version: 2.6.2
+ typescript:
+ specifier: ^5.3.3
+ version: 5.3.3
+
components/Contextmenu:
dependencies:
'@ikun-ui/icon':
@@ -4076,6 +4137,10 @@ packages:
resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==}
dev: true
+ /@types/tinycolor2@1.4.6:
+ resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==}
+ dev: true
+
/@types/unist@3.0.2:
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
dev: true
@@ -5405,7 +5470,7 @@ packages:
dev: true
/emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, tarball: https://r2.cnpmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz}
dev: true
/emoji-regex@9.2.2:
@@ -6422,7 +6487,7 @@ packages:
engines: {node: '>=0.10.0'}
/is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, tarball: https://r2.cnpmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz}
engines: {node: '>=8'}
dev: true
@@ -8077,7 +8142,7 @@ packages:
dev: true
/string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, tarball: https://r2.cnpmjs.org/string-width/-/string-width-4.2.3.tgz}
engines: {node: '>=8'}
dependencies:
emoji-regex: 8.0.0
@@ -8540,6 +8605,10 @@ packages:
resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
dev: true
+ /tinycolor2@1.6.0:
+ resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
+ dev: false
+
/tinypool@0.8.1:
resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==}
engines: {node: '>=14.0.0'}
@@ -9279,7 +9348,7 @@ packages:
dev: true
/wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, tarball: https://r2.cnpmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz}
engines: {node: '>=10'}
dependencies:
ansi-styles: 4.3.0
diff --git a/preset/src/rules/index.ts b/preset/src/rules/index.ts
index c8e72807..39bcd0fb 100644
--- a/preset/src/rules/index.ts
+++ b/preset/src/rules/index.ts
@@ -16,6 +16,7 @@ import { getIkunColorRules } from './src/ikun-color';
import { tabRules } from './src/tab';
import { carouselRules } from './src/carousel';
import { skeletonRules } from './src/skeleton';
+import { colorPickerRules } from './src/color-picker';
import { baseRules } from './src/base';
declare type dynamicRulesFunc = (...args: any[]) => Array any)>;
@@ -31,6 +32,7 @@ export const defaultRules = {
...tabRules,
...carouselRules,
...skeletonRules,
+ ...colorPickerRules,
...baseRules,
...getColCls(),
...getDescriptionsGridColCls(),
diff --git a/preset/src/rules/src/base.ts b/preset/src/rules/src/base.ts
index f52fbb0e..c9bb7953 100644
--- a/preset/src/rules/src/base.ts
+++ b/preset/src/rules/src/base.ts
@@ -1,3 +1,9 @@
export const baseRules = {
- 'k-user-drag-none': { '-webkit-user-drag': 'none' }
+ 'k-user-drag-none': {
+ '-webkit-user-drag': 'none'
+ },
+ 'k-transparent-bg': {
+ 'background-image':
+ 'conic-gradient(rgba(0, 0, 0, 0.06) 0 25%, transparent 0 50%, rgba(0, 0, 0, 0.06) 0 75%, transparent 0);'
+ }
};
diff --git a/preset/src/rules/src/color-picker.ts b/preset/src/rules/src/color-picker.ts
new file mode 100644
index 00000000..fc451599
--- /dev/null
+++ b/preset/src/rules/src/color-picker.ts
@@ -0,0 +1,27 @@
+export const colorPickerRules = {
+ 'k-color-picker-shadow': { 'box-shadow': '0 0 0 2px #ff787542' },
+ 'palette-bg': {
+ 'background-image':
+ 'linear-gradient(0deg, rgb(0, 0, 0), transparent),\n' +
+ '\t\t\tlinear-gradient(90deg, rgb(255, 255, 255), rgba(255, 255, 255, 0))'
+ },
+ 'color-block-bg': {
+ 'background-size': '50% 50%;'
+ },
+ 'color-alpha-bg': {
+ 'background-size': '8px 8px'
+ },
+ 'color-track': {
+ background:
+ 'linear-gradient(\n' +
+ '\t\t\tto right,\n' +
+ '\t\t\trgb(255, 0, 0),\n' +
+ '\t\t\trgb(255, 255, 0),\n' +
+ '\t\t\trgb(0, 255, 0),\n' +
+ '\t\t\trgb(0, 255, 255),\n' +
+ '\t\t\trgb(0, 0, 255),\n' +
+ '\t\t\trgb(255, 0, 255),\n' +
+ '\t\t\trgb(255, 0, 0)\n' +
+ '\t\t);'
+ }
+};
diff --git a/preset/src/shortcuts/index.ts b/preset/src/shortcuts/index.ts
index ebd32598..5d64999d 100644
--- a/preset/src/shortcuts/index.ts
+++ b/preset/src/shortcuts/index.ts
@@ -1,3 +1,4 @@
+import { colorPickerShortcuts } from './src/color-picker';
import { skeletonShortcuts } from './src/skeleton';
import { autoCompleteShortcuts } from './src/auto-complete';
import { stepsShortcuts } from './src/steps';
@@ -66,6 +67,8 @@ export const defaultShortcuts = [
commonShortcuts,
// don't remove
// anchor defaultShortcuts
+ // color-picker
+ colorPickerShortcuts,
// skeleton
skeletonShortcuts,
// auto-complete
@@ -181,6 +184,7 @@ export const defaultShortcuts = [
export function getSafeList() {
// don't remove
// anchor shortcuts
+ const colorPickerList = Object.keys(colorPickerShortcuts);
const skeletonList = Object.keys(skeletonShortcuts);
const autoCompleteList = Object.keys(autoCompleteShortcuts);
const stepsList = Object.keys(stepsShortcuts);
@@ -241,6 +245,7 @@ export function getSafeList() {
let res = iconList
// don't remove
// anchor list
+ .concat(colorPickerList)
.concat(skeletonList)
.concat(autoCompleteList)
.concat(stepsList)
@@ -370,3 +375,4 @@ export { segmentedShortcuts } from './src/segmented';
export { stepsShortcuts } from './src/steps';
export { autoCompleteShortcuts } from './src/auto-complete';
export { skeletonShortcuts } from './src/skeleton';
+export { colorPickerShortcuts } from './src/color-picker';
diff --git a/preset/src/shortcuts/src/color-picker.ts b/preset/src/shortcuts/src/color-picker.ts
new file mode 100644
index 00000000..acedc2d9
--- /dev/null
+++ b/preset/src/shortcuts/src/color-picker.ts
@@ -0,0 +1,53 @@
+export const colorPickerShortcuts: Record = {
+ 'k-color-picker': 'm-4px',
+ 'k-color-picker-header': 'fbc text-base',
+ 'k-color-picker-title': 'mb-12px',
+ 'k-color-picker-line':
+ "after:(content-[''] pa right-14px top-15px w-22px h-2px block bg-ikun-error origin-right -rotate-45)",
+ 'k-color-picker-clear':
+ 'w-18px h-18px k-border border-ikun-bd-base rounded-4px cursor-pointer mb-12px',
+ 'k-color-picker-palette':
+ 'pr overflow-hidden left-0 top-0 rounded-4px w-269px h-160px palette-bg',
+ 'k-color-picker-pointer':
+ 'cursor-pointer pa rounded-16px w-14px h-14px bd-3 border-solid border-white',
+ 'k-color-picker--hsb': 'fcc mt-12px w-full',
+ 'k-color-picker--hs': 'w-full mr-12px',
+ 'k-color-picker--alpha': 'mt-12px',
+ 'k-color-picker-block': 'w-28px h-28px color-block-bg k-transparent-bg rounded-4px',
+ 'k-color-picker-block-clear':
+ "color-block-bg k-border border-ikun-bd-base rounded-4px pr w-28px h-28px k-transparent-bg after:(content-[''] pa right-2px top-0 w-32px h-2px block bg-ikun-error origin-right -rotate-45)",
+ 'k-color-picker-block--sm': 'w-16px h-16px',
+ 'k-color-picker-block--md': 'w-24px h-24px',
+ 'k-color-picker-block--lg': 'w-32px h-32px',
+ 'k-color-picker-block-w--disabled': 'k-cur-disabled',
+ 'k-color-picker-block-w':
+ 'p-4px box-border rounded-4px k-border border-ikun-bd-base cursor-pointer fcc hover:border-ikun-main',
+ 'k-color-picker-block-w--focus': 'border-ikun-main k-color-picker-shadow',
+ 'k-color-picker-block-w--sm': 'min-w-24px h-24px',
+ 'k-color-picker-block-w--md': 'min-w-32px h-32px',
+ 'k-color-picker-trigger--disabled': 'k-bg-disabled k-cur-disabled',
+ 'k-color-picker-txt': 'ml-4px',
+ 'k-color-picker-block-w--lg': 'min-w-40px h-40px',
+ 'k-color-picker-block-content': 'w-28px h-28px rounded-4px',
+ 'k-color-picker-block-content--sm': 'w-16px h-16px rounded-4px',
+ 'k-color-picker-block-content--md': 'w-24px h-24px rounded-4px',
+ 'k-color-picker-block-content--lg': 'w-32px h-32px rounded-4px',
+ 'k-color-picker-slider': 'cursor-pointer pr select-none h-8px',
+ 'k-color-picker-slider_alpha': 'color-alpha-bg k-transparent-bg ',
+ 'k-color-picker-slider--track':
+ 'color-track pa h-8px w-full pointer-events-none box-border top-1/2 rounded-8px left-0 right-0 -translate-y-1/2',
+ 'k-color-picker-slider--track_alpha':
+ 'pa h-8px w-full pointer-events-none box-border top-1/2 rounded-8px left-0 right-0 -translate-y-1/2',
+ 'k-color-picker-slider--thumb':
+ '-translate-y-1/2 -translate-x-1/2 border-solid border-white bd-3 box-border pointer-events-none pa h-14px w-14px rounded-full shadow top-1/2',
+ 'k-color-picker-format': 'fsc mt-12px',
+ 'k-color-picker-format--val': 'fcc cursor-pointer',
+ 'k-color-picker-format--input-num': 'w-50px ml-6px',
+ 'k-color-picker-format--input': 'ml-6px',
+ 'k-color-picker-preset--icon': 'op50 k-icon-transition',
+ 'k-color-picker-preset--container': 'mt-12px cursor-pointer',
+ 'k-color-picker-preset--head': 'fsc',
+ 'k-color-picker-preset--label': 'text-12px ml-4px',
+ 'k-color-picker-preset--color': 'grid mt-12px gap-6px grid-cols-11',
+ 'k-color-picker-preset--checkbox': 'w-18px h-18px rounded-4px'
+};
diff --git a/preset/src/shortcuts/src/common.ts b/preset/src/shortcuts/src/common.ts
index f1e8f473..4488bc29 100644
--- a/preset/src/shortcuts/src/common.ts
+++ b/preset/src/shortcuts/src/common.ts
@@ -36,5 +36,7 @@ export const commonShortcuts: UserShortcuts = {
'bdtr-1': 'border-l-0 border-t-1 border-b-0 border-r-1',
'n-bdb-1': 'border-l-1 border-t-1 border-b-0 border-r-1',
'n-bdt-1': 'border-l-1 border-t-0 border-b-1 border-r-1',
- 'n-bdl-1': 'border-l-0 border-t-1 border-b-1 border-r-1'
+ 'n-bdl-1': 'border-l-0 border-t-1 border-b-1 border-r-1',
+ 'bd-2': 'border-t-2 border-l-2 border-b-2 border-r-2',
+ 'bd-3': 'border-t-3 border-l-3 border-b-3 border-r-3'
};
diff --git a/preset/src/shortcuts/src/popover.ts b/preset/src/shortcuts/src/popover.ts
index f134189b..2c249dcf 100644
--- a/preset/src/shortcuts/src/popover.ts
+++ b/preset/src/shortcuts/src/popover.ts
@@ -1,6 +1,6 @@
export const popoverShortcuts: Record = {
// popover
- 'k-popover--base': 'rounded p2 bg-ikun-white z-999 box-border text-ikun-tx-base',
+ 'k-popover--base': 'rounded p-8px bg-ikun-white z-999 box-border text-ikun-tx-base',
'k-popover--base__left': 'k-popover-shadow__left',
'k-popover--base__top': 'k-popover-shadow__top',
'k-popover--base__right': 'k-popover-shadow__right',