krl-alfred 2.23.7 → 2.23.9

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.
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { UploaderProps } from './props';
3
- declare const Uploader: ({ className, title, description, images, maxCount, columnCount, uploadLabel, coverBadgeText, variant, selectedIndex, showCoverBadge, accept, disabled, imagePadding, onUpload, onRemove, onSelect, }: UploaderProps) => React.JSX.Element;
3
+ declare const Uploader: ({ className, title, description, images, maxCount, columnCount, uploadLabel, coverBadgeText, variant, selectedIndexes, selectedIndex, showCoverBadge, accept, disabled, imagePadding, imageFit, onUpload, onRemove, onSelect, }: UploaderProps) => React.JSX.Element;
4
4
  export default Uploader;
@@ -21,13 +21,14 @@ var Uploader_styled_1 = require("./Uploader.styled");
21
21
  var Icon_1 = __importDefault(require("../Icon/Icon"));
22
22
  var Badges_1 = __importDefault(require("../Badges/Badges"));
23
23
  var Uploader = function (_a) {
24
- var className = _a.className, title = _a.title, description = _a.description, _b = _a.images, images = _b === void 0 ? props_1.UploaderDefault.images : _b, _c = _a.maxCount, maxCount = _c === void 0 ? props_1.UploaderDefault.maxCount : _c, _d = _a.columnCount, columnCount = _d === void 0 ? props_1.UploaderDefault.columnCount : _d, _e = _a.uploadLabel, uploadLabel = _e === void 0 ? props_1.UploaderDefault.uploadLabel : _e, _f = _a.coverBadgeText, coverBadgeText = _f === void 0 ? props_1.UploaderDefault.coverBadgeText : _f, _g = _a.variant, variant = _g === void 0 ? props_1.UploaderDefault.variant : _g, _h = _a.selectedIndex, selectedIndex = _h === void 0 ? props_1.UploaderDefault.selectedIndex : _h, _j = _a.showCoverBadge, showCoverBadge = _j === void 0 ? props_1.UploaderDefault.showCoverBadge : _j, _k = _a.accept, accept = _k === void 0 ? props_1.UploaderDefault.accept : _k, _l = _a.disabled, disabled = _l === void 0 ? props_1.UploaderDefault.disabled : _l, _m = _a.imagePadding, imagePadding = _m === void 0 ? props_1.UploaderDefault.imagePadding : _m, onUpload = _a.onUpload, onRemove = _a.onRemove, onSelect = _a.onSelect;
24
+ var className = _a.className, title = _a.title, description = _a.description, _b = _a.images, images = _b === void 0 ? props_1.UploaderDefault.images : _b, _c = _a.maxCount, maxCount = _c === void 0 ? props_1.UploaderDefault.maxCount : _c, _d = _a.columnCount, columnCount = _d === void 0 ? props_1.UploaderDefault.columnCount : _d, _e = _a.uploadLabel, uploadLabel = _e === void 0 ? props_1.UploaderDefault.uploadLabel : _e, _f = _a.coverBadgeText, coverBadgeText = _f === void 0 ? props_1.UploaderDefault.coverBadgeText : _f, _g = _a.variant, variant = _g === void 0 ? props_1.UploaderDefault.variant : _g, selectedIndexes = _a.selectedIndexes, selectedIndex = _a.selectedIndex, _h = _a.showCoverBadge, showCoverBadge = _h === void 0 ? props_1.UploaderDefault.showCoverBadge : _h, _j = _a.accept, accept = _j === void 0 ? props_1.UploaderDefault.accept : _j, _k = _a.disabled, disabled = _k === void 0 ? props_1.UploaderDefault.disabled : _k, _l = _a.imagePadding, imagePadding = _l === void 0 ? props_1.UploaderDefault.imagePadding : _l, _m = _a.imageFit, imageFit = _m === void 0 ? props_1.UploaderDefault.imageFit : _m, onUpload = _a.onUpload, onRemove = _a.onRemove, onSelect = _a.onSelect;
25
25
  var fileInputRef = (0, react_1.useRef)(null);
26
26
  var uploadIndexRef = (0, react_1.useRef)(null);
27
27
  var localPreviewsRef = (0, react_1.useRef)({});
28
28
  var _o = (0, react_1.useState)({}), localPreviews = _o[0], setLocalPreviews = _o[1];
29
29
  var slots = Array.from({ length: maxCount }, function (_, index) { var _a, _b; return (_b = (_a = images[index]) !== null && _a !== void 0 ? _a : localPreviews[index]) !== null && _b !== void 0 ? _b : null; });
30
30
  var isCoverSelect = variant === 'coverSelect';
31
+ var activeSelectedIndexes = selectedIndexes !== null && selectedIndexes !== void 0 ? selectedIndexes : (selectedIndex !== undefined && selectedIndex !== null ? [selectedIndex] : props_1.UploaderDefault.selectedIndexes);
31
32
  localPreviewsRef.current = localPreviews;
32
33
  (0, react_1.useEffect)(function () {
33
34
  return function () {
@@ -107,10 +108,10 @@ var Uploader = function (_a) {
107
108
  return ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderStyled, __assign({ className: className }, { children: [(title || description) && ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderHeader, { children: [title && (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderTitle, { children: title }), description && (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderDescription, { children: description })] })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderGrid, __assign({ "$columnCount": columnCount }, { children: slots.map(function (image, index) {
108
109
  var _a, _b;
109
110
  var isEmpty = !image;
110
- var isSelected = isCoverSelect && selectedIndex === index && !isEmpty;
111
+ var isSelected = isCoverSelect && !isEmpty && activeSelectedIndexes.includes(index);
111
112
  var showCoverOnSlot = !isCoverSelect && showCoverBadge && index === 0;
112
113
  var showUploadContent = isEmpty || showCoverOnSlot;
113
- return ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderSlot, __assign({ type: "button", "$isEmpty": isEmpty, "$isSelected": isSelected, "$disabled": disabled, disabled: disabled, onClick: function () { return handleSlotClick(index, image); } }, { children: [image && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderSlotMedia, __assign({ "$padding": imagePadding }, { children: (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderSlotImage, { src: image.src, alt: (_a = image.alt) !== null && _a !== void 0 ? _a : '' }) })), !isCoverSelect && ((0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderRemoveButton, __assign({ type: "button", "aria-label": "G\u00F6rseli kald\u0131r", onClick: function (event) { return handleRemove(event, index); } }, { children: (0, jsx_runtime_1.jsx)(Icon_1.default, { name: "Closebig" }) })))] })), showUploadContent && ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderUploadContent, __assign({ "$hasImage": !isEmpty }, { children: [showCoverOnSlot && ((0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadBadgeWrapper, { children: renderCoverBadge() })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadLabel, __assign({ "$isHidden": !isEmpty && showCoverOnSlot }, { children: uploadLabel })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadIcon, __assign({ "$isHidden": !isEmpty && showCoverOnSlot }, { children: (0, jsx_runtime_1.jsx)(Icon_1.default, { name: "PlusMd", width: "1.5rem", height: "1.5rem", color: "var(--primary)" }) }))] })))] }), (_b = image === null || image === void 0 ? void 0 : image.id) !== null && _b !== void 0 ? _b : "slot-".concat(index)));
114
+ return ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderSlot, __assign({ type: "button", "$isEmpty": isEmpty, "$isSelected": isSelected, "$disabled": disabled, disabled: disabled, onClick: function () { return handleSlotClick(index, image); } }, { children: [image && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderSlotMedia, __assign({ "$padding": imagePadding }, { children: (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderSlotImage, { src: image.src, alt: (_a = image.alt) !== null && _a !== void 0 ? _a : '', "$fit": imageFit }) })), !isCoverSelect && ((0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderRemoveButton, __assign({ type: "button", "aria-label": "G\u00F6rseli kald\u0131r", onClick: function (event) { return handleRemove(event, index); } }, { children: (0, jsx_runtime_1.jsx)(Icon_1.default, { name: "Closebig" }) })))] })), showUploadContent && ((0, jsx_runtime_1.jsxs)(Uploader_styled_1.UploaderUploadContent, __assign({ "$hasImage": !isEmpty }, { children: [showCoverOnSlot && ((0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadBadgeWrapper, { children: renderCoverBadge() })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadLabel, __assign({ "$isHidden": !isEmpty && showCoverOnSlot }, { children: uploadLabel })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderUploadIcon, __assign({ "$isHidden": !isEmpty && showCoverOnSlot }, { children: (0, jsx_runtime_1.jsx)(Icon_1.default, { name: "PlusMd", width: "1.5rem", height: "1.5rem", color: "var(--primary)" }) }))] })))] }), (_b = image === null || image === void 0 ? void 0 : image.id) !== null && _b !== void 0 ? _b : "slot-".concat(index)));
114
115
  }) })), (0, jsx_runtime_1.jsx)(Uploader_styled_1.UploaderHiddenInput, { ref: fileInputRef, type: "file", accept: accept, onChange: handleFileChange })] })));
115
116
  };
116
117
  exports.default = Uploader;
@@ -22,7 +22,11 @@ export declare const UploaderSlotMedia: import("styled-components/dist/types").I
22
22
  }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$padding"> & {
23
23
  $padding?: string;
24
24
  }, never>>> & string;
25
- export declare const UploaderSlotImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never> & Partial<Pick<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>>> & string;
25
+ export declare const UploaderSlotImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "$fit"> & {
26
+ $fit?: 'cover' | 'contain';
27
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "$fit"> & {
28
+ $fit?: 'cover' | 'contain';
29
+ }, never>>> & string;
26
30
  export declare const UploaderUploadContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$hasImage"> & {
27
31
  $hasImage?: boolean;
28
32
  }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$hasImage"> & {
@@ -45,7 +45,7 @@ exports.UploaderSlot = styled_components_1.default.button(templateObject_9 || (t
45
45
  return slotFilledStyles;
46
46
  });
47
47
  exports.UploaderSlotMedia = styled_components_1.default.div(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ", ";\n box-sizing: border-box;\n"], ["\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ", ";\n box-sizing: border-box;\n"])), function (props) { return props.$padding || '1rem'; });
48
- exports.UploaderSlotImage = styled_components_1.default.img(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n object-fit: cover;\n box-sizing: border-box;\n pointer-events: none;\n border-radius: 0.5rem;\n"], ["\n width: 100%;\n height: 100%;\n object-fit: cover;\n box-sizing: border-box;\n pointer-events: none;\n border-radius: 0.5rem;\n"])));
48
+ exports.UploaderSlotImage = styled_components_1.default.img(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n object-fit: ", ";\n box-sizing: border-box;\n pointer-events: none;\n border-radius: 0.5rem;\n"], ["\n width: 100%;\n height: 100%;\n object-fit: ", ";\n box-sizing: border-box;\n pointer-events: none;\n border-radius: 0.5rem;\n"])), function (props) { return props.$fit || 'cover'; });
49
49
  exports.UploaderUploadContent = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n position: ", ";\n z-index: ", ";\n"], ["\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n position: ", ";\n z-index: ", ";\n"])), function (props) { return props.$hasImage ? 'relative' : 'static'; }, function (props) { return props.$hasImage ? 1 : 'auto'; });
50
50
  exports.UploaderUploadBadgeWrapper = styled_components_1.default.div(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n margin-bottom: 0.5rem;\n"], ["\n margin-bottom: 0.5rem;\n"])));
51
51
  exports.UploaderUploadLabel = styled_components_1.default.span(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n color: var(--primary);\n font: var(--body-semi-bold-14-17);\n visibility: ", ";\n"], ["\n color: var(--primary);\n font: var(--body-semi-bold-14-17);\n visibility: ", ";\n"])), function (props) { return props.$isHidden ? 'hidden' : 'visible'; });
@@ -4,6 +4,7 @@ export interface UploaderImage {
4
4
  alt?: string;
5
5
  }
6
6
  export type UploaderVariant = 'default' | 'coverSelect';
7
+ export type UploaderImageFit = 'cover' | 'contain';
7
8
  export interface UploaderProps {
8
9
  className?: string;
9
10
  title?: string;
@@ -15,14 +16,20 @@ export interface UploaderProps {
15
16
  uploadLabel?: string;
16
17
  coverBadgeText?: string;
17
18
  variant?: UploaderVariant;
19
+ /** Seçili slot index'leri (birden fazla olabilir) */
20
+ selectedIndexes?: number[];
21
+ /** @deprecated `selectedIndexes` kullan. Tek seçim için `[index]` geç. */
18
22
  selectedIndex?: number;
19
23
  showCoverBadge?: boolean;
20
24
  accept?: string;
21
25
  disabled?: boolean;
22
26
  /** Slot görseli padding'i (`1.5rem`, `1rem`, `1.5rem 1rem` vb.) */
23
27
  imagePadding?: string;
28
+ /** Slot görseli object-fit değeri */
29
+ imageFit?: UploaderImageFit;
24
30
  onUpload?: (index: number, file: File) => void;
25
31
  onRemove?: (index: number) => void;
32
+ /** Slot seçildiğinde çağrılır; parent selectedIndexes'i yönetir */
26
33
  onSelect?: (index: number) => void;
27
34
  }
28
35
  export declare const UploaderDefault: {
@@ -32,9 +39,11 @@ export declare const UploaderDefault: {
32
39
  uploadLabel: string;
33
40
  coverBadgeText: string;
34
41
  variant: UploaderVariant;
42
+ selectedIndexes: number[];
35
43
  selectedIndex: number;
36
44
  showCoverBadge: boolean;
37
45
  accept: string;
38
46
  disabled: boolean;
39
47
  imagePadding: string;
48
+ imageFit: UploaderImageFit;
40
49
  };
@@ -8,9 +8,11 @@ exports.UploaderDefault = {
8
8
  uploadLabel: 'Yükle',
9
9
  coverBadgeText: 'Kapak',
10
10
  variant: 'default',
11
- selectedIndex: 0,
11
+ selectedIndexes: [],
12
+ selectedIndex: undefined,
12
13
  showCoverBadge: true,
13
14
  accept: 'image/*',
14
15
  disabled: false,
15
16
  imagePadding: '1rem',
17
+ imageFit: 'cover',
16
18
  };
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { UploaderImage } from '../props';
3
3
  declare const _default: {
4
4
  title: string;
5
- component: ({ className, title, description, images, maxCount, columnCount, uploadLabel, coverBadgeText, variant, selectedIndex, showCoverBadge, accept, disabled, imagePadding, onUpload, onRemove, onSelect, }: import("../props").UploaderProps) => React.JSX.Element;
5
+ component: ({ className, title, description, images, maxCount, columnCount, uploadLabel, coverBadgeText, variant, selectedIndexes, selectedIndex, showCoverBadge, accept, disabled, imagePadding, imageFit, onUpload, onRemove, onSelect, }: import("../props").UploaderProps) => React.JSX.Element;
6
6
  tags: string[];
7
7
  argTypes: {
8
8
  variant: {
@@ -24,6 +24,13 @@ declare const _default: {
24
24
  imagePadding: {
25
25
  control: string;
26
26
  };
27
+ imageFit: {
28
+ control: string;
29
+ options: string[];
30
+ };
31
+ selectedIndexes: {
32
+ control: string;
33
+ };
27
34
  };
28
35
  };
29
36
  export default _default;
@@ -58,7 +65,7 @@ export declare const CoverSelect: {
58
65
  title: string;
59
66
  variant: string;
60
67
  images: UploaderImage[];
61
- selectedIndex: number;
68
+ selectedIndexes: number[];
62
69
  maxCount: number;
63
70
  };
64
71
  };
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
14
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
15
  if (ar || !(i in from)) {
@@ -36,6 +47,8 @@ exports.default = {
36
47
  showCoverBadge: { control: 'boolean' },
37
48
  disabled: { control: 'boolean' },
38
49
  imagePadding: { control: 'text' },
50
+ imageFit: { control: 'select', options: ['cover', 'contain'] },
51
+ selectedIndexes: { control: 'object' },
39
52
  },
40
53
  };
41
54
  exports.Empty = {
@@ -69,7 +82,7 @@ exports.CoverSelect = {
69
82
  title: 'Ana görselden seç',
70
83
  variant: 'coverSelect',
71
84
  images: [sampleImage],
72
- selectedIndex: 0,
85
+ selectedIndexes: [0],
73
86
  maxCount: 4,
74
87
  },
75
88
  };
@@ -94,8 +107,15 @@ exports.Interactive = {
94
107
  render: function () { return (0, jsx_runtime_1.jsx)(UploaderInteractiveStory, {}); },
95
108
  };
96
109
  var UploaderCoverSelectStory = function () {
97
- var _a = (0, react_1.useState)(0), selectedIndex = _a[0], setSelectedIndex = _a[1];
98
- return ((0, jsx_runtime_1.jsx)(Uploader_1.default, { title: "Ana g\u00F6rselden se\u00E7", variant: "coverSelect", images: [sampleImage], selectedIndex: selectedIndex, maxCount: 4, onSelect: setSelectedIndex }));
110
+ var _a = (0, react_1.useState)([0]), selectedIndexes = _a[0], setSelectedIndexes = _a[1];
111
+ var images = [sampleImage, __assign(__assign({}, sampleImage), { id: 'sample-2' }), __assign(__assign({}, sampleImage), { id: 'sample-3' })];
112
+ return ((0, jsx_runtime_1.jsx)(Uploader_1.default, { title: "Ana g\u00F6rselden se\u00E7", variant: "coverSelect", images: images, selectedIndexes: selectedIndexes, maxCount: 4, onSelect: function (index) {
113
+ setSelectedIndexes(function (prev) {
114
+ return prev.includes(index)
115
+ ? prev.filter(function (item) { return item !== index; })
116
+ : __spreadArray(__spreadArray([], prev, true), [index], false);
117
+ });
118
+ } }));
99
119
  };
100
120
  exports.CoverSelectInteractive = {
101
121
  render: function () { return (0, jsx_runtime_1.jsx)(UploaderCoverSelectStory, {}); },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "krl-alfred",
3
- "version": "2.23.7",
3
+ "version": "2.23.9",
4
4
  "files": [
5
5
  "dist"
6
6
  ],