feat(datetime): add header text to multiple selection; improve header consistency between modes (#25817)
Co-authored-by: Sean Perkins <sean@ionic.io>
@@ -524,14 +524,14 @@ export declare interface IonDatetime extends Components.IonDatetime {
|
||||
|
||||
@ProxyCmp({
|
||||
defineCustomElementFn: undefined,
|
||||
inputs: ['cancelText', 'clearText', 'color', 'dayValues', 'disabled', 'doneText', 'firstDayOfWeek', 'hourCycle', 'hourValues', 'isDateEnabled', 'locale', 'max', 'min', 'minuteValues', 'mode', 'monthValues', 'multiple', 'name', 'preferWheel', 'presentation', 'readonly', 'showClearButton', 'showDefaultButtons', 'showDefaultTimeLabel', 'showDefaultTitle', 'size', 'value', 'yearValues'],
|
||||
inputs: ['cancelText', 'clearText', 'color', 'dayValues', 'disabled', 'doneText', 'firstDayOfWeek', 'hourCycle', 'hourValues', 'isDateEnabled', 'locale', 'max', 'min', 'minuteValues', 'mode', 'monthValues', 'multiple', 'name', 'preferWheel', 'presentation', 'readonly', 'showClearButton', 'showDefaultButtons', 'showDefaultTimeLabel', 'showDefaultTitle', 'size', 'titleSelectedDatesFormatter', 'value', 'yearValues'],
|
||||
methods: ['confirm', 'reset', 'cancel']
|
||||
})
|
||||
@Component({
|
||||
selector: 'ion-datetime',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: '<ng-content></ng-content>',
|
||||
inputs: ['cancelText', 'clearText', 'color', 'dayValues', 'disabled', 'doneText', 'firstDayOfWeek', 'hourCycle', 'hourValues', 'isDateEnabled', 'locale', 'max', 'min', 'minuteValues', 'mode', 'monthValues', 'multiple', 'name', 'preferWheel', 'presentation', 'readonly', 'showClearButton', 'showDefaultButtons', 'showDefaultTimeLabel', 'showDefaultTitle', 'size', 'value', 'yearValues']
|
||||
inputs: ['cancelText', 'clearText', 'color', 'dayValues', 'disabled', 'doneText', 'firstDayOfWeek', 'hourCycle', 'hourValues', 'isDateEnabled', 'locale', 'max', 'min', 'minuteValues', 'mode', 'monthValues', 'multiple', 'name', 'preferWheel', 'presentation', 'readonly', 'showClearButton', 'showDefaultButtons', 'showDefaultTimeLabel', 'showDefaultTitle', 'size', 'titleSelectedDatesFormatter', 'value', 'yearValues']
|
||||
})
|
||||
export class IonDatetime {
|
||||
protected el: HTMLElement;
|
||||
|
||||
@@ -397,6 +397,7 @@ ion-datetime,prop,showDefaultButtons,boolean,false,false,false
|
||||
ion-datetime,prop,showDefaultTimeLabel,boolean,true,false,false
|
||||
ion-datetime,prop,showDefaultTitle,boolean,false,false,false
|
||||
ion-datetime,prop,size,"cover" | "fixed",'fixed',false,false
|
||||
ion-datetime,prop,titleSelectedDatesFormatter,((selectedDates: string[]) => string) | undefined,undefined,false,false
|
||||
ion-datetime,prop,value,null | string | string[] | undefined,undefined,false,false
|
||||
ion-datetime,prop,yearValues,number | number[] | string | undefined,undefined,false,false
|
||||
ion-datetime,method,cancel,cancel(closeOverlay?: boolean) => Promise<void>
|
||||
|
||||
14
core/src/components.d.ts
vendored
@@ -5,7 +5,7 @@
|
||||
* It contains typing information for all components that exist in this project.
|
||||
*/
|
||||
import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
|
||||
import { AccordionGroupChangeEventDetail, ActionSheetAttributes, ActionSheetButton, AlertButton, AlertInput, AnimationBuilder, AutocompleteTypes, BreadcrumbCollapsedClickEventDetail, CheckboxChangeEventDetail, Color, ComponentProps, ComponentRef, DatetimeChangeEventDetail, DatetimePresentation, DomRenderFn, FooterHeightFn, FrameworkDelegate, HeaderFn, HeaderHeightFn, InputChangeEventDetail, ItemHeightFn, ItemRenderFn, ItemReorderEventDetail, LoadingAttributes, MenuChangeEventDetail, ModalAttributes, ModalBreakpointChangeEventDetail, ModalHandleBehavior, NavComponent, NavComponentWithProps, NavOptions, OverlayEventDetail, PickerAttributes, PickerButton, PickerColumn, PopoverAttributes, PopoverSize, PositionAlign, PositionReference, PositionSide, RadioGroupChangeEventDetail, RangeChangeEventDetail, RangeKnobMoveEndEventDetail, RangeKnobMoveStartEventDetail, RangeValue, RefresherEventDetail, RouteID, RouterDirection, RouterEventDetail, RouterOutletOptions, RouteWrite, ScrollBaseDetail, ScrollDetail, SearchbarChangeEventDetail, SegmentButtonLayout, SegmentChangeEventDetail, SelectChangeEventDetail, SelectInterface, SelectPopoverOption, Side, SpinnerTypes, StyleEventDetail, SwipeGestureHandler, TabBarChangedEventDetail, TabButtonClickEventDetail, TabButtonLayout, TextareaChangeEventDetail, TextFieldTypes, ToastButton, ToggleChangeEventDetail, TransitionDoneFn, TransitionInstruction, TriggerAction, ViewController } from "./interface";
|
||||
import { AccordionGroupChangeEventDetail, ActionSheetAttributes, ActionSheetButton, AlertButton, AlertInput, AnimationBuilder, AutocompleteTypes, BreadcrumbCollapsedClickEventDetail, CheckboxChangeEventDetail, Color, ComponentProps, ComponentRef, DatetimeChangeEventDetail, DatetimePresentation, DomRenderFn, FooterHeightFn, FrameworkDelegate, HeaderFn, HeaderHeightFn, InputChangeEventDetail, ItemHeightFn, ItemRenderFn, ItemReorderEventDetail, LoadingAttributes, MenuChangeEventDetail, ModalAttributes, ModalBreakpointChangeEventDetail, ModalHandleBehavior, NavComponent, NavComponentWithProps, NavOptions, OverlayEventDetail, PickerAttributes, PickerButton, PickerColumn, PopoverAttributes, PopoverSize, PositionAlign, PositionReference, PositionSide, RadioGroupChangeEventDetail, RangeChangeEventDetail, RangeKnobMoveEndEventDetail, RangeKnobMoveStartEventDetail, RangeValue, RefresherEventDetail, RouteID, RouterDirection, RouterEventDetail, RouterOutletOptions, RouteWrite, ScrollBaseDetail, ScrollDetail, SearchbarChangeEventDetail, SegmentButtonLayout, SegmentChangeEventDetail, SelectChangeEventDetail, SelectInterface, SelectPopoverOption, Side, SpinnerTypes, StyleEventDetail, SwipeGestureHandler, TabBarChangedEventDetail, TabButtonClickEventDetail, TabButtonLayout, TextareaChangeEventDetail, TextFieldTypes, TitleSelectedDatesFormatter, ToastButton, ToggleChangeEventDetail, TransitionDoneFn, TransitionInstruction, TriggerAction, ViewController } from "./interface";
|
||||
import { IonicSafeString } from "./utils/sanitization";
|
||||
import { AlertAttributes } from "./components/alert/alert-interface";
|
||||
import { CounterFormatter } from "./components/item/item-interface";
|
||||
@@ -826,13 +826,17 @@ export namespace Components {
|
||||
*/
|
||||
"showDefaultTimeLabel": boolean;
|
||||
/**
|
||||
* If `true`, a header will be shown above the calendar picker. On `ios` mode this will include the slotted title, and on `md` mode this will include the slotted title and the selected date.
|
||||
* If `true`, a header will be shown above the calendar picker. This will include both the slotted title, and the selected date.
|
||||
*/
|
||||
"showDefaultTitle": boolean;
|
||||
/**
|
||||
* If `cover`, the `ion-datetime` will expand to cover the full width of its container. If `fixed`, the `ion-datetime` will have a fixed width.
|
||||
*/
|
||||
"size": 'cover' | 'fixed';
|
||||
/**
|
||||
* A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days".
|
||||
*/
|
||||
"titleSelectedDatesFormatter"?: TitleSelectedDatesFormatter;
|
||||
/**
|
||||
* The value of the datetime as a valid ISO 8601 datetime string. Should be an array of strings if `multiple="true"`.
|
||||
*/
|
||||
@@ -4802,13 +4806,17 @@ declare namespace LocalJSX {
|
||||
*/
|
||||
"showDefaultTimeLabel"?: boolean;
|
||||
/**
|
||||
* If `true`, a header will be shown above the calendar picker. On `ios` mode this will include the slotted title, and on `md` mode this will include the slotted title and the selected date.
|
||||
* If `true`, a header will be shown above the calendar picker. This will include both the slotted title, and the selected date.
|
||||
*/
|
||||
"showDefaultTitle"?: boolean;
|
||||
/**
|
||||
* If `cover`, the `ion-datetime` will expand to cover the full width of its container. If `fixed`, the `ion-datetime` will have a fixed width.
|
||||
*/
|
||||
"size"?: 'cover' | 'fixed';
|
||||
/**
|
||||
* A callback used to format the header text that shows how many dates are selected. Only used if there are 0 or more than 1 selected (i.e. unused for exactly 1). By default, the header text is set to "numberOfDates days".
|
||||
*/
|
||||
"titleSelectedDatesFormatter"?: TitleSelectedDatesFormatter;
|
||||
/**
|
||||
* The value of the datetime as a valid ISO 8601 datetime string. Should be an array of strings if `multiple="true"`.
|
||||
*/
|
||||
|
||||
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 81 KiB |
@@ -23,3 +23,5 @@ export interface DatetimeParts {
|
||||
}
|
||||
|
||||
export type DatetimePresentation = 'date-time' | 'time-date' | 'date' | 'time' | 'month' | 'year' | 'month-year';
|
||||
|
||||
export type TitleSelectedDatesFormatter = (selectedDates: string[]) => string;
|
||||
|
||||
@@ -20,12 +20,16 @@
|
||||
@include padding($datetime-ios-padding, $datetime-ios-padding, $datetime-ios-padding, $datetime-ios-padding);
|
||||
|
||||
border-bottom: $datetime-ios-border-color;
|
||||
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
:host .datetime-header .datetime-title {
|
||||
color: var(--title-color);
|
||||
}
|
||||
|
||||
font-size: 14px;
|
||||
:host .datetime-header .datetime-selected-date {
|
||||
@include margin(10px, null, null, null);
|
||||
}
|
||||
|
||||
// Calendar / Header / Action Buttons
|
||||
|
||||
@@ -10,6 +10,7 @@ import type {
|
||||
DatetimeParts,
|
||||
Mode,
|
||||
StyleEventDetail,
|
||||
TitleSelectedDatesFormatter,
|
||||
} from '../../interface';
|
||||
import { startFocusVisible } from '../../utils/focus-visible';
|
||||
import { getElementRoot, raf, renderHiddenInput } from '../../utils/helpers';
|
||||
@@ -313,6 +314,14 @@ export class Datetime implements ComponentInterface {
|
||||
*/
|
||||
@Prop() firstDayOfWeek = 0;
|
||||
|
||||
/**
|
||||
* A callback used to format the header text that shows how many
|
||||
* dates are selected. Only used if there are 0 or more than 1
|
||||
* selected (i.e. unused for exactly 1). By default, the header
|
||||
* text is set to "numberOfDates days".
|
||||
*/
|
||||
@Prop() titleSelectedDatesFormatter?: TitleSelectedDatesFormatter;
|
||||
|
||||
/**
|
||||
* If `true`, multiple dates can be selected at once. Only
|
||||
* applies to `presentation="date"` and `preferWheel="false"`.
|
||||
@@ -388,9 +397,8 @@ export class Datetime implements ComponentInterface {
|
||||
|
||||
/**
|
||||
* If `true`, a header will be shown above the calendar
|
||||
* picker. On `ios` mode this will include the
|
||||
* slotted title, and on `md` mode this will include
|
||||
* the slotted title and the selected date.
|
||||
* picker. This will include both the slotted title, and
|
||||
* the selected date.
|
||||
*/
|
||||
@Prop() showDefaultTitle = false;
|
||||
|
||||
@@ -2071,20 +2079,36 @@ export class Datetime implements ComponentInterface {
|
||||
</ion-popover>,
|
||||
];
|
||||
}
|
||||
private renderCalendarViewHeader(mode: Mode) {
|
||||
private renderCalendarViewHeader() {
|
||||
const hasSlottedTitle = this.el.querySelector('[slot="title"]') !== null;
|
||||
if (!hasSlottedTitle && !this.showDefaultTitle) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { activeParts, titleSelectedDatesFormatter } = this;
|
||||
const isArray = Array.isArray(activeParts);
|
||||
|
||||
let headerText: string;
|
||||
if (isArray && activeParts.length !== 1) {
|
||||
headerText = `${activeParts.length} days`; // default/fallback for multiple selection
|
||||
if (titleSelectedDatesFormatter !== undefined) {
|
||||
try {
|
||||
headerText = titleSelectedDatesFormatter(convertDataToISO(activeParts));
|
||||
} catch (e) {
|
||||
printIonError('Exception in provided `titleSelectedDatesFormatter`: ', e);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// for exactly 1 day selected (multiple set or not), show a formatted version of that
|
||||
headerText = getMonthAndDay(this.locale, isArray ? activeParts[0] : activeParts);
|
||||
}
|
||||
|
||||
return (
|
||||
<div class="datetime-header">
|
||||
<div class="datetime-title">
|
||||
<slot name="title">Select Date</slot>
|
||||
</div>
|
||||
{mode === 'md' && !this.multiple && (
|
||||
<div class="datetime-selected-date">{getMonthAndDay(this.locale, this.activeParts as DatetimeParts)}</div>
|
||||
)}
|
||||
<div class="datetime-selected-date">{headerText}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -2137,7 +2161,7 @@ export class Datetime implements ComponentInterface {
|
||||
switch (presentation) {
|
||||
case 'date-time':
|
||||
return [
|
||||
this.renderCalendarViewHeader(mode),
|
||||
this.renderCalendarViewHeader(),
|
||||
this.renderCalendar(mode),
|
||||
this.renderCalendarViewMonthYearPicker(),
|
||||
this.renderTime(),
|
||||
@@ -2145,7 +2169,7 @@ export class Datetime implements ComponentInterface {
|
||||
];
|
||||
case 'time-date':
|
||||
return [
|
||||
this.renderCalendarViewHeader(mode),
|
||||
this.renderCalendarViewHeader(),
|
||||
this.renderTime(),
|
||||
this.renderCalendar(mode),
|
||||
this.renderCalendarViewMonthYearPicker(),
|
||||
@@ -2159,7 +2183,7 @@ export class Datetime implements ComponentInterface {
|
||||
return [this.renderWheelView(), this.renderFooter()];
|
||||
default:
|
||||
return [
|
||||
this.renderCalendarViewHeader(mode),
|
||||
this.renderCalendarViewHeader(),
|
||||
this.renderCalendar(mode),
|
||||
this.renderCalendarViewMonthYearPicker(),
|
||||
this.renderFooter(),
|
||||
|
||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 191 KiB |
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 191 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 222 KiB After Width: | Height: | Size: 223 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 201 KiB |
|
Before Width: | Height: | Size: 208 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 222 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 222 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 201 KiB |
|
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 207 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 196 KiB After Width: | Height: | Size: 202 KiB |