@fkui/vue-labs 5.44.0 → 5.45.0
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/cjs/index.cjs.js +2 -65
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/esm/index.esm.js +4 -67
- package/dist/esm/index.esm.js.map +1 -1
- package/dist/types/index.d.ts +11 -618
- package/dist/types/tsdoc-metadata.json +1 -1
- package/dummy.css +1 -0
- package/package.json +4 -3
- package/dist/cjs/vue-labs.css +0 -18
- package/dist/esm/vue-labs.css +0 -18
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -158,7 +158,7 @@ const validators = [hoursMinutesValidator, greaterThanTimeValidator, lessThanTim
|
|
|
158
158
|
for (const validator of validators) {
|
|
159
159
|
logic.ValidationService.registerValidator(validator);
|
|
160
160
|
}
|
|
161
|
-
const _sfc_main
|
|
161
|
+
const _sfc_main = vue.defineComponent({
|
|
162
162
|
name: "XTimeTextField",
|
|
163
163
|
extends: vue$1.FTextField,
|
|
164
164
|
mixins: [vue$1.TranslationMixin],
|
|
@@ -192,73 +192,10 @@ const _sfc_main$1 = vue.defineComponent({
|
|
|
192
192
|
logic.ValidationService.validateElement(inputElement);
|
|
193
193
|
}
|
|
194
194
|
});
|
|
195
|
-
const _sfc_main = vue.defineComponent({
|
|
196
|
-
name: "XSearchBar",
|
|
197
|
-
components: {
|
|
198
|
-
FIcon: vue$1.FIcon,
|
|
199
|
-
FSearchTextField: vue$1.FSearchTextField
|
|
200
|
-
},
|
|
201
|
-
props: {
|
|
202
|
-
modelValue: {
|
|
203
|
-
type: String,
|
|
204
|
-
required: true
|
|
205
|
-
},
|
|
206
|
-
maxLength: {
|
|
207
|
-
type: Number,
|
|
208
|
-
default: 20
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
emits: ["update:modelValue", "changedValue"],
|
|
212
|
-
computed: {
|
|
213
|
-
value: {
|
|
214
|
-
get() {
|
|
215
|
-
return this.modelValue;
|
|
216
|
-
},
|
|
217
|
-
set(value) {
|
|
218
|
-
if (this.value !== value) {
|
|
219
|
-
this.$emit("changedValue", [this.value, value]);
|
|
220
|
-
}
|
|
221
|
-
this.$emit("update:modelValue", value);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
const _export_sfc = (sfc, props) => {
|
|
227
|
-
const target = sfc.__vccOpts || sfc;
|
|
228
|
-
for (const [key, val] of props) {
|
|
229
|
-
target[key] = val;
|
|
230
|
-
}
|
|
231
|
-
return target;
|
|
232
|
-
};
|
|
233
|
-
const _hoisted_1 = {
|
|
234
|
-
class: "button button--primary search-bar-button",
|
|
235
|
-
type: "submit",
|
|
236
|
-
"data-test": "search-bar-submit"
|
|
237
|
-
};
|
|
238
|
-
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
239
|
-
const _component_f_icon = vue.resolveComponent("f-icon");
|
|
240
|
-
const _component_f_search_text_field = vue.resolveComponent("f-search-text-field");
|
|
241
|
-
return vue.openBlock(), vue.createBlock(_component_f_search_text_field, {
|
|
242
|
-
modelValue: _ctx.value,
|
|
243
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.value = $event),
|
|
244
|
-
class: "x-search-bar",
|
|
245
|
-
maxlength: _ctx.maxLength
|
|
246
|
-
}, {
|
|
247
|
-
default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "default")]),
|
|
248
|
-
tooltip: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "tooltip")]),
|
|
249
|
-
"input-right": vue.withCtx(() => [vue.createElementVNode("button", _hoisted_1, [vue.createVNode(_component_f_icon, {
|
|
250
|
-
name: "search",
|
|
251
|
-
library: "f"
|
|
252
|
-
}), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("span", null, [vue.renderSlot(_ctx.$slots, "button-text", {}, () => [_cache[1] || (_cache[1] = vue.createTextVNode(" Sök "))])])])]),
|
|
253
|
-
_: 3
|
|
254
|
-
}, 8, ["modelValue", "maxlength"]);
|
|
255
|
-
}
|
|
256
|
-
const XSearchBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
|
|
257
195
|
exports.HOURS_MINUTES_REGEXP = HOURS_MINUTES_REGEXP;
|
|
258
196
|
exports.HOURS_MINUTES_WITHOUT_COLON_REGEXP = HOURS_MINUTES_WITHOUT_COLON_REGEXP;
|
|
259
197
|
exports.HoursMinutesValidatorUtils = HoursMinutesValidatorUtils;
|
|
260
|
-
exports.
|
|
261
|
-
exports.XTimeTextField = _sfc_main$1;
|
|
198
|
+
exports.XTimeTextField = _sfc_main;
|
|
262
199
|
exports.forgivingParseTimeToNumber = forgivingParseTimeToNumber;
|
|
263
200
|
exports.formatNumberToTime = formatNumberToTime;
|
|
264
201
|
exports.hoursMinutesStringToMinutes = hoursMinutesStringToMinutes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/components/XTimeTextField/utils/constants.ts","../../src/components/XTimeTextField/utils/HoursMinutesNumberUtils.ts","../../src/components/XTimeTextField/converters/HoursMinutesConverter.ts","../../src/components/XTimeTextField/utils/HoursMinutesValidatorUtils.ts","../../src/components/XTimeTextField/validators/HoursMinutesValidator.ts","../../src/components/XTimeTextField/validators/GreaterThanTimeValidator.ts","../../src/components/XTimeTextField/validators/LessThanTimeValidator.ts","../../src/components/XTimeTextField/validators/MaxTimeValidator.ts","../../src/components/XTimeTextField/validators/MinTimeValidator.ts","../../src/components/XTimeTextField/validators/index.ts","../../src/components/XTimeTextField/XTimeTextField.vue","../../src/components/XSearchBar/XSearchBar.vue"],"sourcesContent":["/**\n * @public\n */\nexport const HOURS_MINUTES_REGEXP =\n /^(?<hours>[0-9]+)?(:(?<minutes>[0-5][0-9]))?$/;\n\n/**\n * @public\n */\nexport const HOURS_MINUTES_WITHOUT_COLON_REGEXP =\n /^(?<hours>[0-9]{2})(?<minutes>[0-5][0-9])$/;\n","import {\n TranslationService,\n isEmpty,\n isSet,\n stripWhitespace,\n} from \"@fkui/logic\";\nimport { HoursMinutesString } from \"../converters\";\nimport {\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_WITHOUT_COLON_REGEXP,\n} from \"./constants\";\n\nfunction findMatch(regexps: RegExp[], value: string): RegExpMatchArray | null {\n for (const regexp of regexps) {\n const match = value.match(regexp);\n\n if (match) {\n return match;\n }\n }\n\n return null;\n}\n\nfunction padInitialZeros(value: string | undefined, maxLength = 2): string {\n value = value ?? \"\";\n return value.padStart(maxLength, \"0\");\n}\n\n/**\n * @public\n */\nexport function hoursMinutesStringToMinutes(\n valueString: string,\n extraForgiving = false,\n): number | undefined {\n if (isEmpty(valueString.trim())) {\n return undefined;\n }\n\n const [hours, minutes] = splitHoursMinutes(valueString, extraForgiving).map(\n (value) => parseInt(value, 10),\n );\n const totalMinutes = hours * 60 + minutes;\n\n return !isNaN(totalMinutes) ? totalMinutes : undefined;\n}\n\n/**\n * @public\n */\nexport function minutesToHoursMinutesString(\n value?: number,\n): HoursMinutesString {\n let valueString = \"\";\n const safeValue = value ?? NaN;\n if (!isNaN(safeValue)) {\n const { hours, minutes } = minutesToObject(safeValue);\n valueString = [hours, minutes]\n .map((value) => String(value).padStart(2, \"0\"))\n .join(\":\");\n }\n\n return stripWhitespace(valueString);\n}\n\n/**\n * @public\n */\nexport function splitHoursMinutes(\n valueString: string,\n extraForgiving = false,\n): string[] {\n const regexps = extraForgiving\n ? [HOURS_MINUTES_WITHOUT_COLON_REGEXP, HOURS_MINUTES_REGEXP]\n : [HOURS_MINUTES_REGEXP];\n const match = findMatch(regexps, stripWhitespace(valueString));\n\n if (!match) {\n return [\"\", \"\"];\n }\n\n const hours = padInitialZeros(match?.groups?.hours);\n const minutes = padInitialZeros(match?.groups?.minutes);\n\n return [hours, minutes];\n}\n\n/**\n * Accepts time as a number and returns a user friendly string (to be used in i.e. review mode)\n * Example:\n * Input: 13.5\n * Output: '13 timmar och 30 minuter'\n *\n * @public\n */\nexport function minutesToUserFriendlyString(value: number): string {\n const [hours, minutes] = splitHoursMinutes(\n minutesToHoursMinutesString(value),\n ).map(Number);\n\n return TranslationService.provider.translate(\n \"ARBE.RW.generell.etikett.timmarochminuter\",\n \"{{hours}} timmar och {{minutes}} minuter\",\n { hours, minutes },\n );\n}\n\n/**\n * Helper for converting AgeTimeTextField values into hours. For convienence,\n * it is possible to provide multiple values and get their sum. The actual\n * conversion will be performed as a last step, to minimize the amount of rounding\n * errors.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value in hours.\n * @returns The sum of all values divided by 60. E.g., `150` becomes `2.5`.\n */\nexport function minutesToHoursFloat(\n ...values: Array<number | undefined>\n): number {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return minutes / 60;\n}\n\n/**\n * Helper for converting AgeTimeTextField values into an object. For\n * convenience, it is possible to provide multiple values and get their sum.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value into an\n * hour minute object.\n * @returns The sum of all values in an object representation. E.g.,\n * `150` becomes `{ hours: 2, minutes: 30 }`\n */\nexport function minutesToObject(...values: Array<number | undefined>): {\n hours: number;\n minutes: number;\n} {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return {\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n };\n}\n","import {\n minutesToHoursMinutesString,\n hoursMinutesStringToMinutes,\n} from \"../utils\";\n\n/**\n * A string in the format hh:mm (hours may exceed two digits), e.g., 08:15, 16:00 and 900:12.\n *\n * @public\n */\nexport type HoursMinutesString = string;\n\n/**\n * @public\n */\nexport function formatNumberToTime(\n value?: number,\n): HoursMinutesString | undefined {\n if (typeof value !== \"number\" || isNaN(value)) {\n return undefined;\n }\n\n return minutesToHoursMinutesString(value);\n}\n\nfunction parseTimeToNumberUsingConfig(\n value: string | null | undefined,\n extraForgiving: boolean,\n): number | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const parsedValue =\n hoursMinutesStringToMinutes(value, extraForgiving) ?? NaN;\n\n return !isNaN(parsedValue) ? parsedValue : undefined;\n}\n\n/**\n * @public\n */\nexport function parseTimeToNumber(value?: string | null): number | undefined {\n return parseTimeToNumberUsingConfig(value, false);\n}\n\n/**\n * @public\n */\nexport function forgivingParseTimeToNumber(\n value?: string | null,\n): number | undefined {\n return parseTimeToNumberUsingConfig(value, true);\n}\n","import { type ValidatorConfig, isSet } from \"@fkui/logic\";\nimport { parseTimeToNumber } from \"../converters\";\n\n/**\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical\n * debt, should be refactored to vanilla functions */\nexport class HoursMinutesValidatorUtils {\n public static validate(\n value: string,\n config: ValidatorConfig,\n name: string,\n compare: (value: number, limit: number) => boolean,\n ): boolean {\n if (value === \"\") {\n return true;\n }\n\n const limit = config[name];\n if (!isSet(limit)) {\n return false;\n }\n\n const parseFunction =\n HoursMinutesValidatorUtils.getParserFromConfig(config);\n const limitAsNumber = parseFunction(String(config[name]));\n if (!isSet(limitAsNumber)) {\n throw new Error(`config.${name} must be a number`);\n }\n\n const valueAsNumber = parseFunction(value);\n if (!isSet(valueAsNumber)) {\n return false;\n }\n\n return compare(valueAsNumber, limitAsNumber);\n }\n\n public static getParserFromConfig(\n config?: ValidatorConfig,\n ): (viewValue: string | null | undefined) => number | undefined {\n if (\n !isSet(config) ||\n !Array.isArray(config.parser) ||\n !isSet(config.parser?.[0]) ||\n typeof config.parser[0] !== \"function\"\n ) {\n return parseTimeToNumber;\n }\n\n return config.parser[0] as (\n viewValue: string | null | undefined,\n ) => number | undefined;\n }\n}\n","import {\n type ValidatableHTMLElement,\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n isEmpty,\n isSet,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const hoursMinutesValidator: Validator = {\n name: \"hoursMinutes\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return (\n isEmpty(value) ||\n isSet(HoursMinutesValidatorUtils.getParserFromConfig(config)(value))\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const greaterThanTimeValidator: Validator = {\n name: \"greaterThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value > limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const lessThanTimeValidator: Validator = {\n name: \"lessThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value < limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const maxTimeValidator: Validator = {\n name: \"maxTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value <= limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n type ValidatableHTMLElement,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const minTimeValidator: Validator = {\n name: \"minTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value >= limit;\n },\n );\n },\n};\n","import { ValidationService, type Validator } from \"@fkui/logic\";\nimport { hoursMinutesValidator } from \"./HoursMinutesValidator\";\nimport { greaterThanTimeValidator } from \"./GreaterThanTimeValidator\";\nimport { lessThanTimeValidator } from \"./LessThanTimeValidator\";\nimport { maxTimeValidator } from \"./MaxTimeValidator\";\nimport { minTimeValidator } from \"./MinTimeValidator\";\n\nconst validators: Validator[] = [\n hoursMinutesValidator,\n greaterThanTimeValidator,\n lessThanTimeValidator,\n maxTimeValidator,\n minTimeValidator,\n];\n\nfor (const validator of validators) {\n ValidationService.registerValidator(validator);\n}\n","<script lang=\"ts\">\nimport { type PropType, defineComponent } from \"vue\";\nimport { FTextField, TranslationMixin, type ParseFunction, type FormatFunction, useTextFieldSetup } from \"@fkui/vue\";\nimport { isSet, ValidationService } from \"@fkui/logic\";\nimport { HoursMinutesString, formatNumberToTime, parseTimeToNumber } from \"./converters\";\nimport \"./validators\";\n\nexport default defineComponent({\n name: \"XTimeTextField\",\n extends: FTextField,\n mixins: [TranslationMixin],\n props: {\n formatter: {\n type: Function as PropType<FormatFunction<HoursMinutesString>>,\n required: false,\n default: formatNumberToTime,\n },\n parser: {\n type: Function as PropType<ParseFunction<number>>,\n required: false,\n default: parseTimeToNumber,\n },\n },\n setup(props) {\n return useTextFieldSetup(props);\n },\n mounted() {\n const inputElement: HTMLInputElement = this.$el.querySelector(\"input\");\n\n if (!isSet(inputElement)) {\n throw new Error(`Could not find input element in XTimeTextField with id ${this.$el.id}`);\n }\n\n ValidationService.addValidatorsToElement(\n inputElement,\n {\n maxLength: { length: 10 },\n hoursMinutes: {},\n },\n true,\n );\n\n inputElement.setAttribute(\"inputmode\", \"numeric\");\n\n ValidationService.validateElement(inputElement);\n },\n});\n</script>\n","<template>\n <f-search-text-field v-model=\"value\" class=\"x-search-bar\" :maxlength=\"maxLength\">\n <template #default>\n <!-- @slot Slot for input label -->\n <slot></slot>\n </template>\n <template #tooltip>\n <!-- @slot Slot for tooltip -->\n <slot name=\"tooltip\"></slot>\n </template>\n <template #input-right>\n <button class=\"button button--primary search-bar-button\" type=\"submit\" data-test=\"search-bar-submit\">\n <f-icon name=\"search\" library=\"f\"></f-icon>\n <span>\n <!-- @slot Slot for text in button -->\n <slot name=\"button-text\"> Sök </slot>\n </span>\n </button>\n </template>\n </f-search-text-field>\n</template>\n<script lang=\"ts\">\nimport { FIcon, FSearchTextField } from \"@fkui/vue\";\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"XSearchBar\",\n components: {\n FIcon,\n FSearchTextField,\n },\n props: {\n modelValue: {\n type: String,\n required: true,\n },\n maxLength: {\n type: Number,\n default: 20,\n },\n },\n emits: [\"update:modelValue\", \"changedValue\"],\n computed: {\n value: {\n get() {\n return this.modelValue;\n },\n set(value: string) {\n if (this.value !== value) {\n /**\n * Event that is dispatched when the value is changed and differs from the previous value.\n *\n * @event changedValue\n */\n this.$emit(\"changedValue\", [this.value, value]);\n }\n /**\n * V-model event.\n *\n * @event update:modelValue\n * @type {string}\n */\n this.$emit(\"update:modelValue\", value);\n },\n },\n },\n});\n</script>\n<style lang=\"scss\">\n@import \"./XSearchBar.scss\";\n</style>\n"],"names":["HOURS_MINUTES_REGEXP","HOURS_MINUTES_WITHOUT_COLON_REGEXP","findMatch","regexps","value","regexp","match","padInitialZeros","maxLength","_value","padStart","hoursMinutesStringToMinutes","valueString","extraForgiving","isEmpty","trim","hours","minutes","splitHoursMinutes","map","parseInt","totalMinutes","isNaN","minutesToHoursMinutesString","safeValue","NaN","minutesToObject","String","join","stripWhitespace","groups","minutesToUserFriendlyString","Number","TranslationService","provider","translate","minutesToHoursFloat","values","filter","isSet","reduce","sum","Math","floor","formatNumberToTime","parseTimeToNumberUsingConfig","_hoursMinutesStringTo","parsedValue","parseTimeToNumber","forgivingParseTimeToNumber","HoursMinutesValidatorUtils","validate","config","name","compare","limit","parseFunction","getParserFromConfig","limitAsNumber","Error","valueAsNumber","Array","isArray","parser","hoursMinutesValidator","validation","_element","greaterThanTimeValidator","lessThanTimeValidator","maxTimeValidator","minTimeValidator","validators","validator","ValidationService","registerValidator","defineComponent","extends","FTextField","mixins","TranslationMixin","props","formatter","type","Function","required","default","setup","useTextFieldSetup","mounted","inputElement","$el","querySelector","id","addValidatorsToElement","length","hoursMinutes","setAttribute","validateElement","components","FIcon","FSearchTextField","modelValue","emits","computed","get","set","$emit","_hoisted_1","class","_component_f_search_text_field","_resolveComponent","_openBlock","_ctx","_cache","$event","maxlength","_renderSlot","$slots","_withCtx","_createElementVNode","_createVNode","_component_f_icon","_createTextVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/components/XTimeTextField/utils/constants.ts","../../src/components/XTimeTextField/utils/HoursMinutesNumberUtils.ts","../../src/components/XTimeTextField/converters/HoursMinutesConverter.ts","../../src/components/XTimeTextField/utils/HoursMinutesValidatorUtils.ts","../../src/components/XTimeTextField/validators/HoursMinutesValidator.ts","../../src/components/XTimeTextField/validators/GreaterThanTimeValidator.ts","../../src/components/XTimeTextField/validators/LessThanTimeValidator.ts","../../src/components/XTimeTextField/validators/MaxTimeValidator.ts","../../src/components/XTimeTextField/validators/MinTimeValidator.ts","../../src/components/XTimeTextField/validators/index.ts","../../src/components/XTimeTextField/XTimeTextField.vue"],"sourcesContent":["/**\n * @public\n */\nexport const HOURS_MINUTES_REGEXP =\n /^(?<hours>[0-9]+)?(:(?<minutes>[0-5][0-9]))?$/;\n\n/**\n * @public\n */\nexport const HOURS_MINUTES_WITHOUT_COLON_REGEXP =\n /^(?<hours>[0-9]{2})(?<minutes>[0-5][0-9])$/;\n","import {\n TranslationService,\n isEmpty,\n isSet,\n stripWhitespace,\n} from \"@fkui/logic\";\nimport { HoursMinutesString } from \"../converters\";\nimport {\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_WITHOUT_COLON_REGEXP,\n} from \"./constants\";\n\nfunction findMatch(regexps: RegExp[], value: string): RegExpMatchArray | null {\n for (const regexp of regexps) {\n const match = value.match(regexp);\n\n if (match) {\n return match;\n }\n }\n\n return null;\n}\n\nfunction padInitialZeros(value: string | undefined, maxLength = 2): string {\n value = value ?? \"\";\n return value.padStart(maxLength, \"0\");\n}\n\n/**\n * @public\n */\nexport function hoursMinutesStringToMinutes(\n valueString: string,\n extraForgiving = false,\n): number | undefined {\n if (isEmpty(valueString.trim())) {\n return undefined;\n }\n\n const [hours, minutes] = splitHoursMinutes(valueString, extraForgiving).map(\n (value) => parseInt(value, 10),\n );\n const totalMinutes = hours * 60 + minutes;\n\n return !isNaN(totalMinutes) ? totalMinutes : undefined;\n}\n\n/**\n * @public\n */\nexport function minutesToHoursMinutesString(\n value?: number,\n): HoursMinutesString {\n let valueString = \"\";\n const safeValue = value ?? NaN;\n if (!isNaN(safeValue)) {\n const { hours, minutes } = minutesToObject(safeValue);\n valueString = [hours, minutes]\n .map((value) => String(value).padStart(2, \"0\"))\n .join(\":\");\n }\n\n return stripWhitespace(valueString);\n}\n\n/**\n * @public\n */\nexport function splitHoursMinutes(\n valueString: string,\n extraForgiving = false,\n): string[] {\n const regexps = extraForgiving\n ? [HOURS_MINUTES_WITHOUT_COLON_REGEXP, HOURS_MINUTES_REGEXP]\n : [HOURS_MINUTES_REGEXP];\n const match = findMatch(regexps, stripWhitespace(valueString));\n\n if (!match) {\n return [\"\", \"\"];\n }\n\n const hours = padInitialZeros(match?.groups?.hours);\n const minutes = padInitialZeros(match?.groups?.minutes);\n\n return [hours, minutes];\n}\n\n/**\n * Accepts time as a number and returns a user friendly string (to be used in i.e. review mode)\n * Example:\n * Input: 13.5\n * Output: '13 timmar och 30 minuter'\n *\n * @public\n */\nexport function minutesToUserFriendlyString(value: number): string {\n const [hours, minutes] = splitHoursMinutes(\n minutesToHoursMinutesString(value),\n ).map(Number);\n\n return TranslationService.provider.translate(\n \"ARBE.RW.generell.etikett.timmarochminuter\",\n \"{{hours}} timmar och {{minutes}} minuter\",\n { hours, minutes },\n );\n}\n\n/**\n * Helper for converting AgeTimeTextField values into hours. For convienence,\n * it is possible to provide multiple values and get their sum. The actual\n * conversion will be performed as a last step, to minimize the amount of rounding\n * errors.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value in hours.\n * @returns The sum of all values divided by 60. E.g., `150` becomes `2.5`.\n */\nexport function minutesToHoursFloat(\n ...values: Array<number | undefined>\n): number {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return minutes / 60;\n}\n\n/**\n * Helper for converting AgeTimeTextField values into an object. For\n * convenience, it is possible to provide multiple values and get their sum.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value into an\n * hour minute object.\n * @returns The sum of all values in an object representation. E.g.,\n * `150` becomes `{ hours: 2, minutes: 30 }`\n */\nexport function minutesToObject(...values: Array<number | undefined>): {\n hours: number;\n minutes: number;\n} {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return {\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n };\n}\n","import {\n minutesToHoursMinutesString,\n hoursMinutesStringToMinutes,\n} from \"../utils\";\n\n/**\n * A string in the format hh:mm (hours may exceed two digits), e.g., 08:15, 16:00 and 900:12.\n *\n * @public\n */\nexport type HoursMinutesString = string;\n\n/**\n * @public\n */\nexport function formatNumberToTime(\n value?: number,\n): HoursMinutesString | undefined {\n if (typeof value !== \"number\" || isNaN(value)) {\n return undefined;\n }\n\n return minutesToHoursMinutesString(value);\n}\n\nfunction parseTimeToNumberUsingConfig(\n value: string | null | undefined,\n extraForgiving: boolean,\n): number | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const parsedValue =\n hoursMinutesStringToMinutes(value, extraForgiving) ?? NaN;\n\n return !isNaN(parsedValue) ? parsedValue : undefined;\n}\n\n/**\n * @public\n */\nexport function parseTimeToNumber(value?: string | null): number | undefined {\n return parseTimeToNumberUsingConfig(value, false);\n}\n\n/**\n * @public\n */\nexport function forgivingParseTimeToNumber(\n value?: string | null,\n): number | undefined {\n return parseTimeToNumberUsingConfig(value, true);\n}\n","import { type ValidatorConfig, isSet } from \"@fkui/logic\";\nimport { parseTimeToNumber } from \"../converters\";\n\n/**\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical\n * debt, should be refactored to vanilla functions */\nexport class HoursMinutesValidatorUtils {\n public static validate(\n value: string,\n config: ValidatorConfig,\n name: string,\n compare: (value: number, limit: number) => boolean,\n ): boolean {\n if (value === \"\") {\n return true;\n }\n\n const limit = config[name];\n if (!isSet(limit)) {\n return false;\n }\n\n const parseFunction =\n HoursMinutesValidatorUtils.getParserFromConfig(config);\n const limitAsNumber = parseFunction(String(config[name]));\n if (!isSet(limitAsNumber)) {\n throw new Error(`config.${name} must be a number`);\n }\n\n const valueAsNumber = parseFunction(value);\n if (!isSet(valueAsNumber)) {\n return false;\n }\n\n return compare(valueAsNumber, limitAsNumber);\n }\n\n public static getParserFromConfig(\n config?: ValidatorConfig,\n ): (viewValue: string | null | undefined) => number | undefined {\n if (\n !isSet(config) ||\n !Array.isArray(config.parser) ||\n !isSet(config.parser?.[0]) ||\n typeof config.parser[0] !== \"function\"\n ) {\n return parseTimeToNumber;\n }\n\n return config.parser[0] as (\n viewValue: string | null | undefined,\n ) => number | undefined;\n }\n}\n","import {\n type ValidatableHTMLElement,\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n isEmpty,\n isSet,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const hoursMinutesValidator: Validator = {\n name: \"hoursMinutes\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return (\n isEmpty(value) ||\n isSet(HoursMinutesValidatorUtils.getParserFromConfig(config)(value))\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const greaterThanTimeValidator: Validator = {\n name: \"greaterThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value > limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const lessThanTimeValidator: Validator = {\n name: \"lessThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value < limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const maxTimeValidator: Validator = {\n name: \"maxTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value <= limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n type ValidatableHTMLElement,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const minTimeValidator: Validator = {\n name: \"minTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value >= limit;\n },\n );\n },\n};\n","import { ValidationService, type Validator } from \"@fkui/logic\";\nimport { hoursMinutesValidator } from \"./HoursMinutesValidator\";\nimport { greaterThanTimeValidator } from \"./GreaterThanTimeValidator\";\nimport { lessThanTimeValidator } from \"./LessThanTimeValidator\";\nimport { maxTimeValidator } from \"./MaxTimeValidator\";\nimport { minTimeValidator } from \"./MinTimeValidator\";\n\nconst validators: Validator[] = [\n hoursMinutesValidator,\n greaterThanTimeValidator,\n lessThanTimeValidator,\n maxTimeValidator,\n minTimeValidator,\n];\n\nfor (const validator of validators) {\n ValidationService.registerValidator(validator);\n}\n","<script lang=\"ts\">\nimport { type PropType, defineComponent } from \"vue\";\nimport { FTextField, TranslationMixin, type ParseFunction, type FormatFunction, useTextFieldSetup } from \"@fkui/vue\";\nimport { isSet, ValidationService } from \"@fkui/logic\";\nimport { HoursMinutesString, formatNumberToTime, parseTimeToNumber } from \"./converters\";\nimport \"./validators\";\n\nexport default defineComponent({\n name: \"XTimeTextField\",\n extends: FTextField,\n mixins: [TranslationMixin],\n props: {\n formatter: {\n type: Function as PropType<FormatFunction<HoursMinutesString>>,\n required: false,\n default: formatNumberToTime,\n },\n parser: {\n type: Function as PropType<ParseFunction<number>>,\n required: false,\n default: parseTimeToNumber,\n },\n },\n setup(props) {\n return useTextFieldSetup(props);\n },\n mounted() {\n const inputElement: HTMLInputElement = this.$el.querySelector(\"input\");\n\n if (!isSet(inputElement)) {\n throw new Error(`Could not find input element in XTimeTextField with id ${this.$el.id}`);\n }\n\n ValidationService.addValidatorsToElement(\n inputElement,\n {\n maxLength: { length: 10 },\n hoursMinutes: {},\n },\n true,\n );\n\n inputElement.setAttribute(\"inputmode\", \"numeric\");\n\n ValidationService.validateElement(inputElement);\n },\n});\n</script>\n"],"names":["HOURS_MINUTES_REGEXP","HOURS_MINUTES_WITHOUT_COLON_REGEXP","findMatch","regexps","value","regexp","match","padInitialZeros","maxLength","_value","padStart","hoursMinutesStringToMinutes","valueString","extraForgiving","isEmpty","trim","hours","minutes","splitHoursMinutes","map","parseInt","totalMinutes","isNaN","minutesToHoursMinutesString","safeValue","NaN","minutesToObject","String","join","stripWhitespace","groups","minutesToUserFriendlyString","Number","TranslationService","provider","translate","minutesToHoursFloat","values","filter","isSet","reduce","sum","Math","floor","formatNumberToTime","parseTimeToNumberUsingConfig","_hoursMinutesStringTo","parsedValue","parseTimeToNumber","forgivingParseTimeToNumber","HoursMinutesValidatorUtils","validate","config","name","compare","limit","parseFunction","getParserFromConfig","limitAsNumber","Error","valueAsNumber","Array","isArray","parser","hoursMinutesValidator","validation","_element","greaterThanTimeValidator","lessThanTimeValidator","maxTimeValidator","minTimeValidator","validators","validator","ValidationService","registerValidator","defineComponent","extends","FTextField","mixins","TranslationMixin","props","formatter","type","Function","required","default","setup","useTextFieldSetup","mounted","inputElement","$el","querySelector","id","addValidatorsToElement","length","hoursMinutes","setAttribute","validateElement"],"mappings":"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"}
|
package/dist/esm/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isEmpty, stripWhitespace, TranslationService, isSet, ValidationService } from "@fkui/logic";
|
|
2
|
-
import { defineComponent
|
|
3
|
-
import { FTextField, TranslationMixin, useTextFieldSetup
|
|
2
|
+
import { defineComponent } from "vue";
|
|
3
|
+
import { FTextField, TranslationMixin, useTextFieldSetup } from "@fkui/vue";
|
|
4
4
|
const HOURS_MINUTES_REGEXP = /^(?<hours>[0-9]+)?(:(?<minutes>[0-5][0-9]))?$/;
|
|
5
5
|
const HOURS_MINUTES_WITHOUT_COLON_REGEXP = /^(?<hours>[0-9]{2})(?<minutes>[0-5][0-9])$/;
|
|
6
6
|
function findMatch(regexps, value) {
|
|
@@ -156,7 +156,7 @@ const validators = [hoursMinutesValidator, greaterThanTimeValidator, lessThanTim
|
|
|
156
156
|
for (const validator of validators) {
|
|
157
157
|
ValidationService.registerValidator(validator);
|
|
158
158
|
}
|
|
159
|
-
const _sfc_main
|
|
159
|
+
const _sfc_main = defineComponent({
|
|
160
160
|
name: "XTimeTextField",
|
|
161
161
|
extends: FTextField,
|
|
162
162
|
mixins: [TranslationMixin],
|
|
@@ -190,74 +190,11 @@ const _sfc_main$1 = defineComponent({
|
|
|
190
190
|
ValidationService.validateElement(inputElement);
|
|
191
191
|
}
|
|
192
192
|
});
|
|
193
|
-
const _sfc_main = defineComponent({
|
|
194
|
-
name: "XSearchBar",
|
|
195
|
-
components: {
|
|
196
|
-
FIcon,
|
|
197
|
-
FSearchTextField
|
|
198
|
-
},
|
|
199
|
-
props: {
|
|
200
|
-
modelValue: {
|
|
201
|
-
type: String,
|
|
202
|
-
required: true
|
|
203
|
-
},
|
|
204
|
-
maxLength: {
|
|
205
|
-
type: Number,
|
|
206
|
-
default: 20
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
emits: ["update:modelValue", "changedValue"],
|
|
210
|
-
computed: {
|
|
211
|
-
value: {
|
|
212
|
-
get() {
|
|
213
|
-
return this.modelValue;
|
|
214
|
-
},
|
|
215
|
-
set(value) {
|
|
216
|
-
if (this.value !== value) {
|
|
217
|
-
this.$emit("changedValue", [this.value, value]);
|
|
218
|
-
}
|
|
219
|
-
this.$emit("update:modelValue", value);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
const _export_sfc = (sfc, props) => {
|
|
225
|
-
const target = sfc.__vccOpts || sfc;
|
|
226
|
-
for (const [key, val] of props) {
|
|
227
|
-
target[key] = val;
|
|
228
|
-
}
|
|
229
|
-
return target;
|
|
230
|
-
};
|
|
231
|
-
const _hoisted_1 = {
|
|
232
|
-
class: "button button--primary search-bar-button",
|
|
233
|
-
type: "submit",
|
|
234
|
-
"data-test": "search-bar-submit"
|
|
235
|
-
};
|
|
236
|
-
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
237
|
-
const _component_f_icon = resolveComponent("f-icon");
|
|
238
|
-
const _component_f_search_text_field = resolveComponent("f-search-text-field");
|
|
239
|
-
return openBlock(), createBlock(_component_f_search_text_field, {
|
|
240
|
-
modelValue: _ctx.value,
|
|
241
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.value = $event),
|
|
242
|
-
class: "x-search-bar",
|
|
243
|
-
maxlength: _ctx.maxLength
|
|
244
|
-
}, {
|
|
245
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
|
|
246
|
-
tooltip: withCtx(() => [renderSlot(_ctx.$slots, "tooltip")]),
|
|
247
|
-
"input-right": withCtx(() => [createElementVNode("button", _hoisted_1, [createVNode(_component_f_icon, {
|
|
248
|
-
name: "search",
|
|
249
|
-
library: "f"
|
|
250
|
-
}), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("span", null, [renderSlot(_ctx.$slots, "button-text", {}, () => [_cache[1] || (_cache[1] = createTextVNode(" Sök "))])])])]),
|
|
251
|
-
_: 3
|
|
252
|
-
}, 8, ["modelValue", "maxlength"]);
|
|
253
|
-
}
|
|
254
|
-
const XSearchBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
|
|
255
193
|
export {
|
|
256
194
|
HOURS_MINUTES_REGEXP,
|
|
257
195
|
HOURS_MINUTES_WITHOUT_COLON_REGEXP,
|
|
258
196
|
HoursMinutesValidatorUtils,
|
|
259
|
-
|
|
260
|
-
_sfc_main$1 as XTimeTextField,
|
|
197
|
+
_sfc_main as XTimeTextField,
|
|
261
198
|
forgivingParseTimeToNumber,
|
|
262
199
|
formatNumberToTime,
|
|
263
200
|
hoursMinutesStringToMinutes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/components/XTimeTextField/utils/constants.ts","../../src/components/XTimeTextField/utils/HoursMinutesNumberUtils.ts","../../src/components/XTimeTextField/converters/HoursMinutesConverter.ts","../../src/components/XTimeTextField/utils/HoursMinutesValidatorUtils.ts","../../src/components/XTimeTextField/validators/HoursMinutesValidator.ts","../../src/components/XTimeTextField/validators/GreaterThanTimeValidator.ts","../../src/components/XTimeTextField/validators/LessThanTimeValidator.ts","../../src/components/XTimeTextField/validators/MaxTimeValidator.ts","../../src/components/XTimeTextField/validators/MinTimeValidator.ts","../../src/components/XTimeTextField/validators/index.ts","../../src/components/XTimeTextField/XTimeTextField.vue","../../src/components/XSearchBar/XSearchBar.vue"],"sourcesContent":["/**\n * @public\n */\nexport const HOURS_MINUTES_REGEXP =\n /^(?<hours>[0-9]+)?(:(?<minutes>[0-5][0-9]))?$/;\n\n/**\n * @public\n */\nexport const HOURS_MINUTES_WITHOUT_COLON_REGEXP =\n /^(?<hours>[0-9]{2})(?<minutes>[0-5][0-9])$/;\n","import {\n TranslationService,\n isEmpty,\n isSet,\n stripWhitespace,\n} from \"@fkui/logic\";\nimport { HoursMinutesString } from \"../converters\";\nimport {\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_WITHOUT_COLON_REGEXP,\n} from \"./constants\";\n\nfunction findMatch(regexps: RegExp[], value: string): RegExpMatchArray | null {\n for (const regexp of regexps) {\n const match = value.match(regexp);\n\n if (match) {\n return match;\n }\n }\n\n return null;\n}\n\nfunction padInitialZeros(value: string | undefined, maxLength = 2): string {\n value = value ?? \"\";\n return value.padStart(maxLength, \"0\");\n}\n\n/**\n * @public\n */\nexport function hoursMinutesStringToMinutes(\n valueString: string,\n extraForgiving = false,\n): number | undefined {\n if (isEmpty(valueString.trim())) {\n return undefined;\n }\n\n const [hours, minutes] = splitHoursMinutes(valueString, extraForgiving).map(\n (value) => parseInt(value, 10),\n );\n const totalMinutes = hours * 60 + minutes;\n\n return !isNaN(totalMinutes) ? totalMinutes : undefined;\n}\n\n/**\n * @public\n */\nexport function minutesToHoursMinutesString(\n value?: number,\n): HoursMinutesString {\n let valueString = \"\";\n const safeValue = value ?? NaN;\n if (!isNaN(safeValue)) {\n const { hours, minutes } = minutesToObject(safeValue);\n valueString = [hours, minutes]\n .map((value) => String(value).padStart(2, \"0\"))\n .join(\":\");\n }\n\n return stripWhitespace(valueString);\n}\n\n/**\n * @public\n */\nexport function splitHoursMinutes(\n valueString: string,\n extraForgiving = false,\n): string[] {\n const regexps = extraForgiving\n ? [HOURS_MINUTES_WITHOUT_COLON_REGEXP, HOURS_MINUTES_REGEXP]\n : [HOURS_MINUTES_REGEXP];\n const match = findMatch(regexps, stripWhitespace(valueString));\n\n if (!match) {\n return [\"\", \"\"];\n }\n\n const hours = padInitialZeros(match?.groups?.hours);\n const minutes = padInitialZeros(match?.groups?.minutes);\n\n return [hours, minutes];\n}\n\n/**\n * Accepts time as a number and returns a user friendly string (to be used in i.e. review mode)\n * Example:\n * Input: 13.5\n * Output: '13 timmar och 30 minuter'\n *\n * @public\n */\nexport function minutesToUserFriendlyString(value: number): string {\n const [hours, minutes] = splitHoursMinutes(\n minutesToHoursMinutesString(value),\n ).map(Number);\n\n return TranslationService.provider.translate(\n \"ARBE.RW.generell.etikett.timmarochminuter\",\n \"{{hours}} timmar och {{minutes}} minuter\",\n { hours, minutes },\n );\n}\n\n/**\n * Helper for converting AgeTimeTextField values into hours. For convienence,\n * it is possible to provide multiple values and get their sum. The actual\n * conversion will be performed as a last step, to minimize the amount of rounding\n * errors.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value in hours.\n * @returns The sum of all values divided by 60. E.g., `150` becomes `2.5`.\n */\nexport function minutesToHoursFloat(\n ...values: Array<number | undefined>\n): number {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return minutes / 60;\n}\n\n/**\n * Helper for converting AgeTimeTextField values into an object. For\n * convenience, it is possible to provide multiple values and get their sum.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value into an\n * hour minute object.\n * @returns The sum of all values in an object representation. E.g.,\n * `150` becomes `{ hours: 2, minutes: 30 }`\n */\nexport function minutesToObject(...values: Array<number | undefined>): {\n hours: number;\n minutes: number;\n} {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return {\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n };\n}\n","import {\n minutesToHoursMinutesString,\n hoursMinutesStringToMinutes,\n} from \"../utils\";\n\n/**\n * A string in the format hh:mm (hours may exceed two digits), e.g., 08:15, 16:00 and 900:12.\n *\n * @public\n */\nexport type HoursMinutesString = string;\n\n/**\n * @public\n */\nexport function formatNumberToTime(\n value?: number,\n): HoursMinutesString | undefined {\n if (typeof value !== \"number\" || isNaN(value)) {\n return undefined;\n }\n\n return minutesToHoursMinutesString(value);\n}\n\nfunction parseTimeToNumberUsingConfig(\n value: string | null | undefined,\n extraForgiving: boolean,\n): number | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const parsedValue =\n hoursMinutesStringToMinutes(value, extraForgiving) ?? NaN;\n\n return !isNaN(parsedValue) ? parsedValue : undefined;\n}\n\n/**\n * @public\n */\nexport function parseTimeToNumber(value?: string | null): number | undefined {\n return parseTimeToNumberUsingConfig(value, false);\n}\n\n/**\n * @public\n */\nexport function forgivingParseTimeToNumber(\n value?: string | null,\n): number | undefined {\n return parseTimeToNumberUsingConfig(value, true);\n}\n","import { type ValidatorConfig, isSet } from \"@fkui/logic\";\nimport { parseTimeToNumber } from \"../converters\";\n\n/**\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical\n * debt, should be refactored to vanilla functions */\nexport class HoursMinutesValidatorUtils {\n public static validate(\n value: string,\n config: ValidatorConfig,\n name: string,\n compare: (value: number, limit: number) => boolean,\n ): boolean {\n if (value === \"\") {\n return true;\n }\n\n const limit = config[name];\n if (!isSet(limit)) {\n return false;\n }\n\n const parseFunction =\n HoursMinutesValidatorUtils.getParserFromConfig(config);\n const limitAsNumber = parseFunction(String(config[name]));\n if (!isSet(limitAsNumber)) {\n throw new Error(`config.${name} must be a number`);\n }\n\n const valueAsNumber = parseFunction(value);\n if (!isSet(valueAsNumber)) {\n return false;\n }\n\n return compare(valueAsNumber, limitAsNumber);\n }\n\n public static getParserFromConfig(\n config?: ValidatorConfig,\n ): (viewValue: string | null | undefined) => number | undefined {\n if (\n !isSet(config) ||\n !Array.isArray(config.parser) ||\n !isSet(config.parser?.[0]) ||\n typeof config.parser[0] !== \"function\"\n ) {\n return parseTimeToNumber;\n }\n\n return config.parser[0] as (\n viewValue: string | null | undefined,\n ) => number | undefined;\n }\n}\n","import {\n type ValidatableHTMLElement,\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n isEmpty,\n isSet,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const hoursMinutesValidator: Validator = {\n name: \"hoursMinutes\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return (\n isEmpty(value) ||\n isSet(HoursMinutesValidatorUtils.getParserFromConfig(config)(value))\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const greaterThanTimeValidator: Validator = {\n name: \"greaterThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value > limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const lessThanTimeValidator: Validator = {\n name: \"lessThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value < limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const maxTimeValidator: Validator = {\n name: \"maxTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value <= limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n type ValidatableHTMLElement,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const minTimeValidator: Validator = {\n name: \"minTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value >= limit;\n },\n );\n },\n};\n","import { ValidationService, type Validator } from \"@fkui/logic\";\nimport { hoursMinutesValidator } from \"./HoursMinutesValidator\";\nimport { greaterThanTimeValidator } from \"./GreaterThanTimeValidator\";\nimport { lessThanTimeValidator } from \"./LessThanTimeValidator\";\nimport { maxTimeValidator } from \"./MaxTimeValidator\";\nimport { minTimeValidator } from \"./MinTimeValidator\";\n\nconst validators: Validator[] = [\n hoursMinutesValidator,\n greaterThanTimeValidator,\n lessThanTimeValidator,\n maxTimeValidator,\n minTimeValidator,\n];\n\nfor (const validator of validators) {\n ValidationService.registerValidator(validator);\n}\n","<script lang=\"ts\">\nimport { type PropType, defineComponent } from \"vue\";\nimport { FTextField, TranslationMixin, type ParseFunction, type FormatFunction, useTextFieldSetup } from \"@fkui/vue\";\nimport { isSet, ValidationService } from \"@fkui/logic\";\nimport { HoursMinutesString, formatNumberToTime, parseTimeToNumber } from \"./converters\";\nimport \"./validators\";\n\nexport default defineComponent({\n name: \"XTimeTextField\",\n extends: FTextField,\n mixins: [TranslationMixin],\n props: {\n formatter: {\n type: Function as PropType<FormatFunction<HoursMinutesString>>,\n required: false,\n default: formatNumberToTime,\n },\n parser: {\n type: Function as PropType<ParseFunction<number>>,\n required: false,\n default: parseTimeToNumber,\n },\n },\n setup(props) {\n return useTextFieldSetup(props);\n },\n mounted() {\n const inputElement: HTMLInputElement = this.$el.querySelector(\"input\");\n\n if (!isSet(inputElement)) {\n throw new Error(`Could not find input element in XTimeTextField with id ${this.$el.id}`);\n }\n\n ValidationService.addValidatorsToElement(\n inputElement,\n {\n maxLength: { length: 10 },\n hoursMinutes: {},\n },\n true,\n );\n\n inputElement.setAttribute(\"inputmode\", \"numeric\");\n\n ValidationService.validateElement(inputElement);\n },\n});\n</script>\n","<template>\n <f-search-text-field v-model=\"value\" class=\"x-search-bar\" :maxlength=\"maxLength\">\n <template #default>\n <!-- @slot Slot for input label -->\n <slot></slot>\n </template>\n <template #tooltip>\n <!-- @slot Slot for tooltip -->\n <slot name=\"tooltip\"></slot>\n </template>\n <template #input-right>\n <button class=\"button button--primary search-bar-button\" type=\"submit\" data-test=\"search-bar-submit\">\n <f-icon name=\"search\" library=\"f\"></f-icon>\n <span>\n <!-- @slot Slot for text in button -->\n <slot name=\"button-text\"> Sök </slot>\n </span>\n </button>\n </template>\n </f-search-text-field>\n</template>\n<script lang=\"ts\">\nimport { FIcon, FSearchTextField } from \"@fkui/vue\";\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"XSearchBar\",\n components: {\n FIcon,\n FSearchTextField,\n },\n props: {\n modelValue: {\n type: String,\n required: true,\n },\n maxLength: {\n type: Number,\n default: 20,\n },\n },\n emits: [\"update:modelValue\", \"changedValue\"],\n computed: {\n value: {\n get() {\n return this.modelValue;\n },\n set(value: string) {\n if (this.value !== value) {\n /**\n * Event that is dispatched when the value is changed and differs from the previous value.\n *\n * @event changedValue\n */\n this.$emit(\"changedValue\", [this.value, value]);\n }\n /**\n * V-model event.\n *\n * @event update:modelValue\n * @type {string}\n */\n this.$emit(\"update:modelValue\", value);\n },\n },\n },\n});\n</script>\n<style lang=\"scss\">\n@import \"./XSearchBar.scss\";\n</style>\n"],"names":["HOURS_MINUTES_REGEXP","HOURS_MINUTES_WITHOUT_COLON_REGEXP","findMatch","regexps","value","regexp","match","padInitialZeros","maxLength","_value","padStart","hoursMinutesStringToMinutes","valueString","extraForgiving","isEmpty","trim","hours","minutes","splitHoursMinutes","map","parseInt","totalMinutes","isNaN","minutesToHoursMinutesString","safeValue","NaN","minutesToObject","String","join","stripWhitespace","groups","minutesToUserFriendlyString","Number","TranslationService","provider","translate","minutesToHoursFloat","values","filter","isSet","reduce","sum","Math","floor","formatNumberToTime","parseTimeToNumberUsingConfig","_hoursMinutesStringTo","parsedValue","parseTimeToNumber","forgivingParseTimeToNumber","HoursMinutesValidatorUtils","validate","config","name","compare","limit","parseFunction","getParserFromConfig","limitAsNumber","Error","valueAsNumber","Array","isArray","parser","hoursMinutesValidator","validation","_element","greaterThanTimeValidator","lessThanTimeValidator","maxTimeValidator","minTimeValidator","validators","validator","ValidationService","registerValidator","defineComponent","extends","FTextField","mixins","TranslationMixin","props","formatter","type","Function","required","default","setup","useTextFieldSetup","mounted","inputElement","$el","querySelector","id","addValidatorsToElement","length","hoursMinutes","setAttribute","validateElement","components","FIcon","FSearchTextField","modelValue","emits","computed","get","set","$emit","_hoisted_1","class","_component_f_search_text_field","_resolveComponent","_openBlock","_ctx","_cache","$event","maxlength","_renderSlot","$slots","_withCtx","_createElementVNode","_createVNode","_component_f_icon","_createTextVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/components/XTimeTextField/utils/constants.ts","../../src/components/XTimeTextField/utils/HoursMinutesNumberUtils.ts","../../src/components/XTimeTextField/converters/HoursMinutesConverter.ts","../../src/components/XTimeTextField/utils/HoursMinutesValidatorUtils.ts","../../src/components/XTimeTextField/validators/HoursMinutesValidator.ts","../../src/components/XTimeTextField/validators/GreaterThanTimeValidator.ts","../../src/components/XTimeTextField/validators/LessThanTimeValidator.ts","../../src/components/XTimeTextField/validators/MaxTimeValidator.ts","../../src/components/XTimeTextField/validators/MinTimeValidator.ts","../../src/components/XTimeTextField/validators/index.ts","../../src/components/XTimeTextField/XTimeTextField.vue"],"sourcesContent":["/**\n * @public\n */\nexport const HOURS_MINUTES_REGEXP =\n /^(?<hours>[0-9]+)?(:(?<minutes>[0-5][0-9]))?$/;\n\n/**\n * @public\n */\nexport const HOURS_MINUTES_WITHOUT_COLON_REGEXP =\n /^(?<hours>[0-9]{2})(?<minutes>[0-5][0-9])$/;\n","import {\n TranslationService,\n isEmpty,\n isSet,\n stripWhitespace,\n} from \"@fkui/logic\";\nimport { HoursMinutesString } from \"../converters\";\nimport {\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_WITHOUT_COLON_REGEXP,\n} from \"./constants\";\n\nfunction findMatch(regexps: RegExp[], value: string): RegExpMatchArray | null {\n for (const regexp of regexps) {\n const match = value.match(regexp);\n\n if (match) {\n return match;\n }\n }\n\n return null;\n}\n\nfunction padInitialZeros(value: string | undefined, maxLength = 2): string {\n value = value ?? \"\";\n return value.padStart(maxLength, \"0\");\n}\n\n/**\n * @public\n */\nexport function hoursMinutesStringToMinutes(\n valueString: string,\n extraForgiving = false,\n): number | undefined {\n if (isEmpty(valueString.trim())) {\n return undefined;\n }\n\n const [hours, minutes] = splitHoursMinutes(valueString, extraForgiving).map(\n (value) => parseInt(value, 10),\n );\n const totalMinutes = hours * 60 + minutes;\n\n return !isNaN(totalMinutes) ? totalMinutes : undefined;\n}\n\n/**\n * @public\n */\nexport function minutesToHoursMinutesString(\n value?: number,\n): HoursMinutesString {\n let valueString = \"\";\n const safeValue = value ?? NaN;\n if (!isNaN(safeValue)) {\n const { hours, minutes } = minutesToObject(safeValue);\n valueString = [hours, minutes]\n .map((value) => String(value).padStart(2, \"0\"))\n .join(\":\");\n }\n\n return stripWhitespace(valueString);\n}\n\n/**\n * @public\n */\nexport function splitHoursMinutes(\n valueString: string,\n extraForgiving = false,\n): string[] {\n const regexps = extraForgiving\n ? [HOURS_MINUTES_WITHOUT_COLON_REGEXP, HOURS_MINUTES_REGEXP]\n : [HOURS_MINUTES_REGEXP];\n const match = findMatch(regexps, stripWhitespace(valueString));\n\n if (!match) {\n return [\"\", \"\"];\n }\n\n const hours = padInitialZeros(match?.groups?.hours);\n const minutes = padInitialZeros(match?.groups?.minutes);\n\n return [hours, minutes];\n}\n\n/**\n * Accepts time as a number and returns a user friendly string (to be used in i.e. review mode)\n * Example:\n * Input: 13.5\n * Output: '13 timmar och 30 minuter'\n *\n * @public\n */\nexport function minutesToUserFriendlyString(value: number): string {\n const [hours, minutes] = splitHoursMinutes(\n minutesToHoursMinutesString(value),\n ).map(Number);\n\n return TranslationService.provider.translate(\n \"ARBE.RW.generell.etikett.timmarochminuter\",\n \"{{hours}} timmar och {{minutes}} minuter\",\n { hours, minutes },\n );\n}\n\n/**\n * Helper for converting AgeTimeTextField values into hours. For convienence,\n * it is possible to provide multiple values and get their sum. The actual\n * conversion will be performed as a last step, to minimize the amount of rounding\n * errors.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value in hours.\n * @returns The sum of all values divided by 60. E.g., `150` becomes `2.5`.\n */\nexport function minutesToHoursFloat(\n ...values: Array<number | undefined>\n): number {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return minutes / 60;\n}\n\n/**\n * Helper for converting AgeTimeTextField values into an object. For\n * convenience, it is possible to provide multiple values and get their sum.\n *\n * Parameters that are undefined or NaN will be ignored and add 0 to the sum.\n *\n * @public\n * @param values - Values in minutes, to be converted into a value into an\n * hour minute object.\n * @returns The sum of all values in an object representation. E.g.,\n * `150` becomes `{ hours: 2, minutes: 30 }`\n */\nexport function minutesToObject(...values: Array<number | undefined>): {\n hours: number;\n minutes: number;\n} {\n const minutes = values\n .filter((value): value is number => isSet(value) && !isNaN(value))\n .reduce((sum, value) => sum + value, 0);\n\n return {\n hours: Math.floor(minutes / 60),\n minutes: minutes % 60,\n };\n}\n","import {\n minutesToHoursMinutesString,\n hoursMinutesStringToMinutes,\n} from \"../utils\";\n\n/**\n * A string in the format hh:mm (hours may exceed two digits), e.g., 08:15, 16:00 and 900:12.\n *\n * @public\n */\nexport type HoursMinutesString = string;\n\n/**\n * @public\n */\nexport function formatNumberToTime(\n value?: number,\n): HoursMinutesString | undefined {\n if (typeof value !== \"number\" || isNaN(value)) {\n return undefined;\n }\n\n return minutesToHoursMinutesString(value);\n}\n\nfunction parseTimeToNumberUsingConfig(\n value: string | null | undefined,\n extraForgiving: boolean,\n): number | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const parsedValue =\n hoursMinutesStringToMinutes(value, extraForgiving) ?? NaN;\n\n return !isNaN(parsedValue) ? parsedValue : undefined;\n}\n\n/**\n * @public\n */\nexport function parseTimeToNumber(value?: string | null): number | undefined {\n return parseTimeToNumberUsingConfig(value, false);\n}\n\n/**\n * @public\n */\nexport function forgivingParseTimeToNumber(\n value?: string | null,\n): number | undefined {\n return parseTimeToNumberUsingConfig(value, true);\n}\n","import { type ValidatorConfig, isSet } from \"@fkui/logic\";\nimport { parseTimeToNumber } from \"../converters\";\n\n/**\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical\n * debt, should be refactored to vanilla functions */\nexport class HoursMinutesValidatorUtils {\n public static validate(\n value: string,\n config: ValidatorConfig,\n name: string,\n compare: (value: number, limit: number) => boolean,\n ): boolean {\n if (value === \"\") {\n return true;\n }\n\n const limit = config[name];\n if (!isSet(limit)) {\n return false;\n }\n\n const parseFunction =\n HoursMinutesValidatorUtils.getParserFromConfig(config);\n const limitAsNumber = parseFunction(String(config[name]));\n if (!isSet(limitAsNumber)) {\n throw new Error(`config.${name} must be a number`);\n }\n\n const valueAsNumber = parseFunction(value);\n if (!isSet(valueAsNumber)) {\n return false;\n }\n\n return compare(valueAsNumber, limitAsNumber);\n }\n\n public static getParserFromConfig(\n config?: ValidatorConfig,\n ): (viewValue: string | null | undefined) => number | undefined {\n if (\n !isSet(config) ||\n !Array.isArray(config.parser) ||\n !isSet(config.parser?.[0]) ||\n typeof config.parser[0] !== \"function\"\n ) {\n return parseTimeToNumber;\n }\n\n return config.parser[0] as (\n viewValue: string | null | undefined,\n ) => number | undefined;\n }\n}\n","import {\n type ValidatableHTMLElement,\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n isEmpty,\n isSet,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const hoursMinutesValidator: Validator = {\n name: \"hoursMinutes\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return (\n isEmpty(value) ||\n isSet(HoursMinutesValidatorUtils.getParserFromConfig(config)(value))\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const greaterThanTimeValidator: Validator = {\n name: \"greaterThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value > limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const lessThanTimeValidator: Validator = {\n name: \"lessThanTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n \"limit\",\n (value: number, limit: number) => {\n return value < limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatableHTMLElement,\n type ValidatorConfig,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const maxTimeValidator: Validator = {\n name: \"maxTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value <= limit;\n },\n );\n },\n};\n","import {\n type Validator,\n type ValidatorName,\n type ValidatorConfig,\n type ValidatableHTMLElement,\n} from \"@fkui/logic\";\nimport { HoursMinutesValidatorUtils } from \"../utils\";\n\nexport const minTimeValidator: Validator = {\n name: \"minTime\" as ValidatorName,\n validation(\n value: string,\n _element: ValidatableHTMLElement,\n config: ValidatorConfig,\n ): boolean {\n return HoursMinutesValidatorUtils.validate(\n value,\n config,\n this.name,\n (value: number, limit: number) => {\n return value >= limit;\n },\n );\n },\n};\n","import { ValidationService, type Validator } from \"@fkui/logic\";\nimport { hoursMinutesValidator } from \"./HoursMinutesValidator\";\nimport { greaterThanTimeValidator } from \"./GreaterThanTimeValidator\";\nimport { lessThanTimeValidator } from \"./LessThanTimeValidator\";\nimport { maxTimeValidator } from \"./MaxTimeValidator\";\nimport { minTimeValidator } from \"./MinTimeValidator\";\n\nconst validators: Validator[] = [\n hoursMinutesValidator,\n greaterThanTimeValidator,\n lessThanTimeValidator,\n maxTimeValidator,\n minTimeValidator,\n];\n\nfor (const validator of validators) {\n ValidationService.registerValidator(validator);\n}\n","<script lang=\"ts\">\nimport { type PropType, defineComponent } from \"vue\";\nimport { FTextField, TranslationMixin, type ParseFunction, type FormatFunction, useTextFieldSetup } from \"@fkui/vue\";\nimport { isSet, ValidationService } from \"@fkui/logic\";\nimport { HoursMinutesString, formatNumberToTime, parseTimeToNumber } from \"./converters\";\nimport \"./validators\";\n\nexport default defineComponent({\n name: \"XTimeTextField\",\n extends: FTextField,\n mixins: [TranslationMixin],\n props: {\n formatter: {\n type: Function as PropType<FormatFunction<HoursMinutesString>>,\n required: false,\n default: formatNumberToTime,\n },\n parser: {\n type: Function as PropType<ParseFunction<number>>,\n required: false,\n default: parseTimeToNumber,\n },\n },\n setup(props) {\n return useTextFieldSetup(props);\n },\n mounted() {\n const inputElement: HTMLInputElement = this.$el.querySelector(\"input\");\n\n if (!isSet(inputElement)) {\n throw new Error(`Could not find input element in XTimeTextField with id ${this.$el.id}`);\n }\n\n ValidationService.addValidatorsToElement(\n inputElement,\n {\n maxLength: { length: 10 },\n hoursMinutes: {},\n },\n true,\n );\n\n inputElement.setAttribute(\"inputmode\", \"numeric\");\n\n ValidationService.validateElement(inputElement);\n },\n});\n</script>\n"],"names":["HOURS_MINUTES_REGEXP","HOURS_MINUTES_WITHOUT_COLON_REGEXP","findMatch","regexps","value","regexp","match","padInitialZeros","maxLength","_value","padStart","hoursMinutesStringToMinutes","valueString","extraForgiving","isEmpty","trim","hours","minutes","splitHoursMinutes","map","parseInt","totalMinutes","isNaN","minutesToHoursMinutesString","safeValue","NaN","minutesToObject","String","join","stripWhitespace","groups","minutesToUserFriendlyString","Number","TranslationService","provider","translate","minutesToHoursFloat","values","filter","isSet","reduce","sum","Math","floor","formatNumberToTime","parseTimeToNumberUsingConfig","_hoursMinutesStringTo","parsedValue","parseTimeToNumber","forgivingParseTimeToNumber","HoursMinutesValidatorUtils","validate","config","name","compare","limit","parseFunction","getParserFromConfig","limitAsNumber","Error","valueAsNumber","Array","isArray","parser","hoursMinutesValidator","validation","_element","greaterThanTimeValidator","lessThanTimeValidator","maxTimeValidator","minTimeValidator","validators","validator","ValidationService","registerValidator","defineComponent","extends","FTextField","mixins","TranslationMixin","props","formatter","type","Function","required","default","setup","useTextFieldSetup","mounted","inputElement","$el","querySelector","id","addValidatorsToElement","length","hoursMinutes","setAttribute","validateElement"],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -108,624 +108,6 @@ export declare function parseTimeToNumber(value?: string | null): number | undef
|
|
|
108
108
|
*/
|
|
109
109
|
export declare function splitHoursMinutes(valueString: string, extraForgiving?: boolean): string[];
|
|
110
110
|
|
|
111
|
-
export declare const XSearchBar: DefineComponent<ExtractPropTypes< {
|
|
112
|
-
modelValue: {
|
|
113
|
-
type: StringConstructor;
|
|
114
|
-
required: true;
|
|
115
|
-
};
|
|
116
|
-
maxLength: {
|
|
117
|
-
type: NumberConstructor;
|
|
118
|
-
default: number;
|
|
119
|
-
};
|
|
120
|
-
}>, {}, {}, {
|
|
121
|
-
value: {
|
|
122
|
-
get(): string;
|
|
123
|
-
set(value: string): void;
|
|
124
|
-
};
|
|
125
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ("update:modelValue" | "changedValue")[], "update:modelValue" | "changedValue", PublicProps, Readonly<ExtractPropTypes< {
|
|
126
|
-
modelValue: {
|
|
127
|
-
type: StringConstructor;
|
|
128
|
-
required: true;
|
|
129
|
-
};
|
|
130
|
-
maxLength: {
|
|
131
|
-
type: NumberConstructor;
|
|
132
|
-
default: number;
|
|
133
|
-
};
|
|
134
|
-
}>> & Readonly<{
|
|
135
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
136
|
-
onChangedValue?: ((...args: any[]) => any) | undefined;
|
|
137
|
-
}>, {
|
|
138
|
-
maxLength: number;
|
|
139
|
-
}, {}, {
|
|
140
|
-
FIcon: DefineComponent<ExtractPropTypes< {
|
|
141
|
-
name: {
|
|
142
|
-
type: StringConstructor;
|
|
143
|
-
required: true;
|
|
144
|
-
};
|
|
145
|
-
library: {
|
|
146
|
-
type: StringConstructor;
|
|
147
|
-
required: false;
|
|
148
|
-
default: string;
|
|
149
|
-
};
|
|
150
|
-
flip: {
|
|
151
|
-
type: PropType<string>;
|
|
152
|
-
default: null;
|
|
153
|
-
required: false;
|
|
154
|
-
validator(value: string): boolean;
|
|
155
|
-
};
|
|
156
|
-
rotate: {
|
|
157
|
-
type: PropType<string>;
|
|
158
|
-
default: null;
|
|
159
|
-
required: false;
|
|
160
|
-
validator(value: string): boolean;
|
|
161
|
-
};
|
|
162
|
-
}>, {}, {}, {
|
|
163
|
-
spriteKey(): string;
|
|
164
|
-
spriteId(): string;
|
|
165
|
-
modifiers(): string[];
|
|
166
|
-
ariaHidden(): "true" | undefined;
|
|
167
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
168
|
-
name: {
|
|
169
|
-
type: StringConstructor;
|
|
170
|
-
required: true;
|
|
171
|
-
};
|
|
172
|
-
library: {
|
|
173
|
-
type: StringConstructor;
|
|
174
|
-
required: false;
|
|
175
|
-
default: string;
|
|
176
|
-
};
|
|
177
|
-
flip: {
|
|
178
|
-
type: PropType<string>;
|
|
179
|
-
default: null;
|
|
180
|
-
required: false;
|
|
181
|
-
validator(value: string): boolean;
|
|
182
|
-
};
|
|
183
|
-
rotate: {
|
|
184
|
-
type: PropType<string>;
|
|
185
|
-
default: null;
|
|
186
|
-
required: false;
|
|
187
|
-
validator(value: string): boolean;
|
|
188
|
-
};
|
|
189
|
-
}>> & Readonly<{}>, {
|
|
190
|
-
library: string;
|
|
191
|
-
flip: string;
|
|
192
|
-
rotate: string;
|
|
193
|
-
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
194
|
-
FSearchTextField: DefineComponent<ExtractPropTypes< {
|
|
195
|
-
id: {
|
|
196
|
-
type: StringConstructor;
|
|
197
|
-
required: false;
|
|
198
|
-
default: () => string;
|
|
199
|
-
};
|
|
200
|
-
modelValue: {
|
|
201
|
-
type: StringConstructor;
|
|
202
|
-
required: false;
|
|
203
|
-
default: string;
|
|
204
|
-
};
|
|
205
|
-
clearableScreenReaderText: {
|
|
206
|
-
type: StringConstructor;
|
|
207
|
-
required: false;
|
|
208
|
-
default: string;
|
|
209
|
-
};
|
|
210
|
-
maxLength: {
|
|
211
|
-
type: NumberConstructor;
|
|
212
|
-
default: number;
|
|
213
|
-
};
|
|
214
|
-
}>, {}, {
|
|
215
|
-
defaultText: string;
|
|
216
|
-
}, {
|
|
217
|
-
canClear(): boolean;
|
|
218
|
-
}, {
|
|
219
|
-
clear(): void;
|
|
220
|
-
onInput(event: Event): void;
|
|
221
|
-
onChange(event: Event): void;
|
|
222
|
-
onBlur(event: Event): void;
|
|
223
|
-
onUpdate(event: Event): void;
|
|
224
|
-
}, ComponentOptionsMixin, ComponentOptionsMixin, ("blur" | "change" | "update:modelValue" | "update")[], "blur" | "change" | "update:modelValue" | "update", PublicProps, Readonly<ExtractPropTypes< {
|
|
225
|
-
id: {
|
|
226
|
-
type: StringConstructor;
|
|
227
|
-
required: false;
|
|
228
|
-
default: () => string;
|
|
229
|
-
};
|
|
230
|
-
modelValue: {
|
|
231
|
-
type: StringConstructor;
|
|
232
|
-
required: false;
|
|
233
|
-
default: string;
|
|
234
|
-
};
|
|
235
|
-
clearableScreenReaderText: {
|
|
236
|
-
type: StringConstructor;
|
|
237
|
-
required: false;
|
|
238
|
-
default: string;
|
|
239
|
-
};
|
|
240
|
-
maxLength: {
|
|
241
|
-
type: NumberConstructor;
|
|
242
|
-
default: number;
|
|
243
|
-
};
|
|
244
|
-
}>> & Readonly<{
|
|
245
|
-
onBlur?: ((...args: any[]) => any) | undefined;
|
|
246
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
247
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
248
|
-
onUpdate?: ((...args: any[]) => any) | undefined;
|
|
249
|
-
}>, {
|
|
250
|
-
id: string;
|
|
251
|
-
modelValue: string;
|
|
252
|
-
maxLength: number;
|
|
253
|
-
clearableScreenReaderText: string;
|
|
254
|
-
}, {}, {
|
|
255
|
-
FTextField: DefineComponent<ExtractPropTypes< {
|
|
256
|
-
id: {
|
|
257
|
-
type: StringConstructor;
|
|
258
|
-
required: false;
|
|
259
|
-
default: () => string;
|
|
260
|
-
};
|
|
261
|
-
inline: {
|
|
262
|
-
type: BooleanConstructor;
|
|
263
|
-
required: false;
|
|
264
|
-
default: boolean;
|
|
265
|
-
};
|
|
266
|
-
modelValue: {
|
|
267
|
-
type: (StringConstructor | NumberConstructor)[];
|
|
268
|
-
required: false;
|
|
269
|
-
default: string;
|
|
270
|
-
};
|
|
271
|
-
type: {
|
|
272
|
-
type: StringConstructor;
|
|
273
|
-
required: false;
|
|
274
|
-
default: string;
|
|
275
|
-
};
|
|
276
|
-
formatter: {
|
|
277
|
-
type: PropType<FormatFunction<any>>;
|
|
278
|
-
required: false;
|
|
279
|
-
default: undefined;
|
|
280
|
-
};
|
|
281
|
-
parser: {
|
|
282
|
-
type: PropType<ParseFunction<any>>;
|
|
283
|
-
required: false;
|
|
284
|
-
default: undefined;
|
|
285
|
-
};
|
|
286
|
-
labelWidth: {
|
|
287
|
-
type: StringConstructor;
|
|
288
|
-
required: false;
|
|
289
|
-
default: string;
|
|
290
|
-
};
|
|
291
|
-
inputWidth: {
|
|
292
|
-
type: StringConstructor;
|
|
293
|
-
required: false;
|
|
294
|
-
default: string;
|
|
295
|
-
};
|
|
296
|
-
options: {
|
|
297
|
-
type: PropType<string[] | undefined>;
|
|
298
|
-
required: false;
|
|
299
|
-
default: () => undefined;
|
|
300
|
-
};
|
|
301
|
-
}>, {
|
|
302
|
-
textFieldTableMode: boolean;
|
|
303
|
-
viewValue: Ref<string, string>;
|
|
304
|
-
onOptionSelected: (value: string) => void;
|
|
305
|
-
dropdownId: string;
|
|
306
|
-
dropdownIsOpen: Readonly<Ref<boolean, boolean>>;
|
|
307
|
-
dropdownOptions: Readonly<Ref<string[], string[]>>;
|
|
308
|
-
activeOptionId: string;
|
|
309
|
-
activeOption: Readonly<Ref<string | null, string | null>>;
|
|
310
|
-
toggleDropdown: () => void;
|
|
311
|
-
selectOption: (value: string) => void;
|
|
312
|
-
closeDropdown: () => void;
|
|
313
|
-
}, {
|
|
314
|
-
showErrorPopup: boolean;
|
|
315
|
-
lastModelValue: unknown;
|
|
316
|
-
validationMessage: string;
|
|
317
|
-
validityMode: string;
|
|
318
|
-
isAfterInitialRender: boolean;
|
|
319
|
-
defaultText: string;
|
|
320
|
-
descriptionText: string;
|
|
321
|
-
descriptionScreenReaderText: string;
|
|
322
|
-
discreteDescriptionText: string;
|
|
323
|
-
discreteDescriptionScreenReaderText: string;
|
|
324
|
-
}, {
|
|
325
|
-
showPopupError(): boolean;
|
|
326
|
-
labelClass(): string;
|
|
327
|
-
isValid(): boolean;
|
|
328
|
-
hasError(): boolean;
|
|
329
|
-
rootClass(): Record<string, boolean>;
|
|
330
|
-
labelWrapperClass(): string | undefined;
|
|
331
|
-
inputWrapperClass(): string | undefined;
|
|
332
|
-
isModelUpdatedProgrammatically(): boolean;
|
|
333
|
-
}, {
|
|
334
|
-
onDropdownSelect(value: string): void;
|
|
335
|
-
onDropdownClose(): void;
|
|
336
|
-
getErrorPopupAnchor(): HTMLElement;
|
|
337
|
-
closePopupError(): void;
|
|
338
|
-
onChange(): Promise<void>;
|
|
339
|
-
onFocus(): void;
|
|
340
|
-
onBlur(): Promise<void>;
|
|
341
|
-
onValidity({ detail }: CustomEvent<ValidityEvent>): Promise<void>;
|
|
342
|
-
onPendingValidity(): void;
|
|
343
|
-
onValidationConfigUpdate(): Promise<void>;
|
|
344
|
-
resolveNewModelValue(viewValue: string): unknown;
|
|
345
|
-
syncViewValueAfterModelUpdate(newModelValue: unknown): void | never;
|
|
346
|
-
triggerComponentValidityEvent(validityEvent: ValidityEvent): void;
|
|
347
|
-
setViewValueToFormattedValueOrFallbackToValue(): void;
|
|
348
|
-
}, ComponentOptionsMixin, ComponentOptionsMixin, ("blur" | "change" | "update:modelValue" | "update")[], "blur" | "change" | "update:modelValue" | "update", PublicProps, Readonly<ExtractPropTypes< {
|
|
349
|
-
id: {
|
|
350
|
-
type: StringConstructor;
|
|
351
|
-
required: false;
|
|
352
|
-
default: () => string;
|
|
353
|
-
};
|
|
354
|
-
inline: {
|
|
355
|
-
type: BooleanConstructor;
|
|
356
|
-
required: false;
|
|
357
|
-
default: boolean;
|
|
358
|
-
};
|
|
359
|
-
modelValue: {
|
|
360
|
-
type: (StringConstructor | NumberConstructor)[];
|
|
361
|
-
required: false;
|
|
362
|
-
default: string;
|
|
363
|
-
};
|
|
364
|
-
type: {
|
|
365
|
-
type: StringConstructor;
|
|
366
|
-
required: false;
|
|
367
|
-
default: string;
|
|
368
|
-
};
|
|
369
|
-
formatter: {
|
|
370
|
-
type: PropType<FormatFunction<any>>;
|
|
371
|
-
required: false;
|
|
372
|
-
default: undefined;
|
|
373
|
-
};
|
|
374
|
-
parser: {
|
|
375
|
-
type: PropType<ParseFunction<any>>;
|
|
376
|
-
required: false;
|
|
377
|
-
default: undefined;
|
|
378
|
-
};
|
|
379
|
-
labelWidth: {
|
|
380
|
-
type: StringConstructor;
|
|
381
|
-
required: false;
|
|
382
|
-
default: string;
|
|
383
|
-
};
|
|
384
|
-
inputWidth: {
|
|
385
|
-
type: StringConstructor;
|
|
386
|
-
required: false;
|
|
387
|
-
default: string;
|
|
388
|
-
};
|
|
389
|
-
options: {
|
|
390
|
-
type: PropType<string[] | undefined>;
|
|
391
|
-
required: false;
|
|
392
|
-
default: () => undefined;
|
|
393
|
-
};
|
|
394
|
-
}>> & Readonly<{
|
|
395
|
-
onBlur?: ((...args: any[]) => any) | undefined;
|
|
396
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
397
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
398
|
-
onUpdate?: ((...args: any[]) => any) | undefined;
|
|
399
|
-
}>, {
|
|
400
|
-
type: string;
|
|
401
|
-
id: string;
|
|
402
|
-
modelValue: string | number;
|
|
403
|
-
inline: boolean;
|
|
404
|
-
options: string[] | undefined;
|
|
405
|
-
labelWidth: string;
|
|
406
|
-
formatter: FormatFunction<any>;
|
|
407
|
-
parser: ParseFunction<any>;
|
|
408
|
-
inputWidth: string;
|
|
409
|
-
}, {}, {
|
|
410
|
-
FLabel: DefineComponent<ExtractPropTypes< {
|
|
411
|
-
for: {
|
|
412
|
-
type: PropType<string | undefined>;
|
|
413
|
-
required: false;
|
|
414
|
-
default: undefined;
|
|
415
|
-
};
|
|
416
|
-
}>, void, {
|
|
417
|
-
descriptionClass: string[];
|
|
418
|
-
discreteDescriptionClass: string[];
|
|
419
|
-
}, {
|
|
420
|
-
forProperty(): string | undefined;
|
|
421
|
-
hasDefaultSlot(): boolean;
|
|
422
|
-
hasErrorMessageSlot(): boolean;
|
|
423
|
-
hasDescriptionSlot(): boolean;
|
|
424
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
425
|
-
for: {
|
|
426
|
-
type: PropType<string | undefined>;
|
|
427
|
-
required: false;
|
|
428
|
-
default: undefined;
|
|
429
|
-
};
|
|
430
|
-
}>> & Readonly<{}>, {
|
|
431
|
-
for: string | undefined;
|
|
432
|
-
}, {}, {
|
|
433
|
-
FIcon: DefineComponent<ExtractPropTypes< {
|
|
434
|
-
name: {
|
|
435
|
-
type: StringConstructor;
|
|
436
|
-
required: true;
|
|
437
|
-
};
|
|
438
|
-
library: {
|
|
439
|
-
type: StringConstructor;
|
|
440
|
-
required: false;
|
|
441
|
-
default: string;
|
|
442
|
-
};
|
|
443
|
-
flip: {
|
|
444
|
-
type: PropType<string>;
|
|
445
|
-
default: null;
|
|
446
|
-
required: false;
|
|
447
|
-
validator(value: string): boolean;
|
|
448
|
-
};
|
|
449
|
-
rotate: {
|
|
450
|
-
type: PropType<string>;
|
|
451
|
-
default: null;
|
|
452
|
-
required: false;
|
|
453
|
-
validator(value: string): boolean;
|
|
454
|
-
};
|
|
455
|
-
}>, {}, {}, {
|
|
456
|
-
spriteKey(): string;
|
|
457
|
-
spriteId(): string;
|
|
458
|
-
modifiers(): string[];
|
|
459
|
-
ariaHidden(): "true" | undefined;
|
|
460
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
461
|
-
name: {
|
|
462
|
-
type: StringConstructor;
|
|
463
|
-
required: true;
|
|
464
|
-
};
|
|
465
|
-
library: {
|
|
466
|
-
type: StringConstructor;
|
|
467
|
-
required: false;
|
|
468
|
-
default: string;
|
|
469
|
-
};
|
|
470
|
-
flip: {
|
|
471
|
-
type: PropType<string>;
|
|
472
|
-
default: null;
|
|
473
|
-
required: false;
|
|
474
|
-
validator(value: string): boolean;
|
|
475
|
-
};
|
|
476
|
-
rotate: {
|
|
477
|
-
type: PropType<string>;
|
|
478
|
-
default: null;
|
|
479
|
-
required: false;
|
|
480
|
-
validator(value: string): boolean;
|
|
481
|
-
};
|
|
482
|
-
}>> & Readonly<{}>, {
|
|
483
|
-
library: string;
|
|
484
|
-
flip: string;
|
|
485
|
-
rotate: string;
|
|
486
|
-
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
487
|
-
}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
488
|
-
FIcon: DefineComponent<ExtractPropTypes< {
|
|
489
|
-
name: {
|
|
490
|
-
type: StringConstructor;
|
|
491
|
-
required: true;
|
|
492
|
-
};
|
|
493
|
-
library: {
|
|
494
|
-
type: StringConstructor;
|
|
495
|
-
required: false;
|
|
496
|
-
default: string;
|
|
497
|
-
};
|
|
498
|
-
flip: {
|
|
499
|
-
type: PropType<string>;
|
|
500
|
-
default: null;
|
|
501
|
-
required: false;
|
|
502
|
-
validator(value: string): boolean;
|
|
503
|
-
};
|
|
504
|
-
rotate: {
|
|
505
|
-
type: PropType<string>;
|
|
506
|
-
default: null;
|
|
507
|
-
required: false;
|
|
508
|
-
validator(value: string): boolean;
|
|
509
|
-
};
|
|
510
|
-
}>, {}, {}, {
|
|
511
|
-
spriteKey(): string;
|
|
512
|
-
spriteId(): string;
|
|
513
|
-
modifiers(): string[];
|
|
514
|
-
ariaHidden(): "true" | undefined;
|
|
515
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
516
|
-
name: {
|
|
517
|
-
type: StringConstructor;
|
|
518
|
-
required: true;
|
|
519
|
-
};
|
|
520
|
-
library: {
|
|
521
|
-
type: StringConstructor;
|
|
522
|
-
required: false;
|
|
523
|
-
default: string;
|
|
524
|
-
};
|
|
525
|
-
flip: {
|
|
526
|
-
type: PropType<string>;
|
|
527
|
-
default: null;
|
|
528
|
-
required: false;
|
|
529
|
-
validator(value: string): boolean;
|
|
530
|
-
};
|
|
531
|
-
rotate: {
|
|
532
|
-
type: PropType<string>;
|
|
533
|
-
default: null;
|
|
534
|
-
required: false;
|
|
535
|
-
validator(value: string): boolean;
|
|
536
|
-
};
|
|
537
|
-
}>> & Readonly<{}>, {
|
|
538
|
-
library: string;
|
|
539
|
-
flip: string;
|
|
540
|
-
rotate: string;
|
|
541
|
-
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
542
|
-
IPopupError: DefineComponent<ExtractPropTypes< {
|
|
543
|
-
isOpen: {
|
|
544
|
-
type: BooleanConstructor;
|
|
545
|
-
required: true;
|
|
546
|
-
};
|
|
547
|
-
errorMessage: {
|
|
548
|
-
type: StringConstructor;
|
|
549
|
-
required: false;
|
|
550
|
-
default: string;
|
|
551
|
-
};
|
|
552
|
-
anchor: {
|
|
553
|
-
type: PropType<HTMLElement | null | undefined>;
|
|
554
|
-
required: false;
|
|
555
|
-
default: undefined;
|
|
556
|
-
};
|
|
557
|
-
}>, {}, IPopupErrorData, {
|
|
558
|
-
popupClasses(): string[];
|
|
559
|
-
arrowClass(): string;
|
|
560
|
-
errorStyle(): string;
|
|
561
|
-
}, {
|
|
562
|
-
onResize(): void;
|
|
563
|
-
onKeyEsc(event: KeyboardEvent): void;
|
|
564
|
-
onClose(): void;
|
|
565
|
-
setArrowOffset(): void;
|
|
566
|
-
toggleIsOpen(isOpen: boolean): Promise<void>;
|
|
567
|
-
}, ComponentOptionsMixin, ComponentOptionsMixin, "close"[], "close", PublicProps, Readonly<ExtractPropTypes< {
|
|
568
|
-
isOpen: {
|
|
569
|
-
type: BooleanConstructor;
|
|
570
|
-
required: true;
|
|
571
|
-
};
|
|
572
|
-
errorMessage: {
|
|
573
|
-
type: StringConstructor;
|
|
574
|
-
required: false;
|
|
575
|
-
default: string;
|
|
576
|
-
};
|
|
577
|
-
anchor: {
|
|
578
|
-
type: PropType<HTMLElement | null | undefined>;
|
|
579
|
-
required: false;
|
|
580
|
-
default: undefined;
|
|
581
|
-
};
|
|
582
|
-
}>> & Readonly<{
|
|
583
|
-
onClose?: ((...args: any[]) => any) | undefined;
|
|
584
|
-
}>, {
|
|
585
|
-
anchor: HTMLElement | null | undefined;
|
|
586
|
-
errorMessage: string;
|
|
587
|
-
}, {}, {
|
|
588
|
-
FIcon: DefineComponent<ExtractPropTypes< {
|
|
589
|
-
name: {
|
|
590
|
-
type: StringConstructor;
|
|
591
|
-
required: true;
|
|
592
|
-
};
|
|
593
|
-
library: {
|
|
594
|
-
type: StringConstructor;
|
|
595
|
-
required: false;
|
|
596
|
-
default: string;
|
|
597
|
-
};
|
|
598
|
-
flip: {
|
|
599
|
-
type: PropType<string>;
|
|
600
|
-
default: null;
|
|
601
|
-
required: false;
|
|
602
|
-
validator(value: string): boolean;
|
|
603
|
-
};
|
|
604
|
-
rotate: {
|
|
605
|
-
type: PropType<string>;
|
|
606
|
-
default: null;
|
|
607
|
-
required: false;
|
|
608
|
-
validator(value: string): boolean;
|
|
609
|
-
};
|
|
610
|
-
}>, {}, {}, {
|
|
611
|
-
spriteKey(): string;
|
|
612
|
-
spriteId(): string;
|
|
613
|
-
modifiers(): string[];
|
|
614
|
-
ariaHidden(): "true" | undefined;
|
|
615
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
616
|
-
name: {
|
|
617
|
-
type: StringConstructor;
|
|
618
|
-
required: true;
|
|
619
|
-
};
|
|
620
|
-
library: {
|
|
621
|
-
type: StringConstructor;
|
|
622
|
-
required: false;
|
|
623
|
-
default: string;
|
|
624
|
-
};
|
|
625
|
-
flip: {
|
|
626
|
-
type: PropType<string>;
|
|
627
|
-
default: null;
|
|
628
|
-
required: false;
|
|
629
|
-
validator(value: string): boolean;
|
|
630
|
-
};
|
|
631
|
-
rotate: {
|
|
632
|
-
type: PropType<string>;
|
|
633
|
-
default: null;
|
|
634
|
-
required: false;
|
|
635
|
-
validator(value: string): boolean;
|
|
636
|
-
};
|
|
637
|
-
}>> & Readonly<{}>, {
|
|
638
|
-
library: string;
|
|
639
|
-
flip: string;
|
|
640
|
-
rotate: string;
|
|
641
|
-
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
642
|
-
}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
643
|
-
IComboboxDropdown: DefineComponent< {
|
|
644
|
-
id: string;
|
|
645
|
-
isOpen: boolean;
|
|
646
|
-
options: string[];
|
|
647
|
-
activeOption: string | null;
|
|
648
|
-
activeOptionId: string;
|
|
649
|
-
inputNode: HTMLInputElement;
|
|
650
|
-
}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
651
|
-
close: () => any;
|
|
652
|
-
select: (option: string) => any;
|
|
653
|
-
}, string, PublicProps, Readonly<{
|
|
654
|
-
id: string;
|
|
655
|
-
isOpen: boolean;
|
|
656
|
-
options: string[];
|
|
657
|
-
activeOption: string | null;
|
|
658
|
-
activeOptionId: string;
|
|
659
|
-
inputNode: HTMLInputElement;
|
|
660
|
-
}> & Readonly<{
|
|
661
|
-
onClose?: (() => any) | undefined;
|
|
662
|
-
onSelect?: ((option: string) => any) | undefined;
|
|
663
|
-
}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
664
|
-
listbox: HTMLUListElement;
|
|
665
|
-
}, HTMLDivElement>;
|
|
666
|
-
IComboboxToggleButton: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
667
|
-
toggle: () => any;
|
|
668
|
-
}, string, PublicProps, Readonly<{}> & Readonly<{
|
|
669
|
-
onToggle?: (() => any) | undefined;
|
|
670
|
-
}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLButtonElement>;
|
|
671
|
-
}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
672
|
-
FIcon: DefineComponent<ExtractPropTypes< {
|
|
673
|
-
name: {
|
|
674
|
-
type: StringConstructor;
|
|
675
|
-
required: true;
|
|
676
|
-
};
|
|
677
|
-
library: {
|
|
678
|
-
type: StringConstructor;
|
|
679
|
-
required: false;
|
|
680
|
-
default: string;
|
|
681
|
-
};
|
|
682
|
-
flip: {
|
|
683
|
-
type: PropType<string>;
|
|
684
|
-
default: null;
|
|
685
|
-
required: false;
|
|
686
|
-
validator(value: string): boolean;
|
|
687
|
-
};
|
|
688
|
-
rotate: {
|
|
689
|
-
type: PropType<string>;
|
|
690
|
-
default: null;
|
|
691
|
-
required: false;
|
|
692
|
-
validator(value: string): boolean;
|
|
693
|
-
};
|
|
694
|
-
}>, {}, {}, {
|
|
695
|
-
spriteKey(): string;
|
|
696
|
-
spriteId(): string;
|
|
697
|
-
modifiers(): string[];
|
|
698
|
-
ariaHidden(): "true" | undefined;
|
|
699
|
-
}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
|
|
700
|
-
name: {
|
|
701
|
-
type: StringConstructor;
|
|
702
|
-
required: true;
|
|
703
|
-
};
|
|
704
|
-
library: {
|
|
705
|
-
type: StringConstructor;
|
|
706
|
-
required: false;
|
|
707
|
-
default: string;
|
|
708
|
-
};
|
|
709
|
-
flip: {
|
|
710
|
-
type: PropType<string>;
|
|
711
|
-
default: null;
|
|
712
|
-
required: false;
|
|
713
|
-
validator(value: string): boolean;
|
|
714
|
-
};
|
|
715
|
-
rotate: {
|
|
716
|
-
type: PropType<string>;
|
|
717
|
-
default: null;
|
|
718
|
-
required: false;
|
|
719
|
-
validator(value: string): boolean;
|
|
720
|
-
};
|
|
721
|
-
}>> & Readonly<{}>, {
|
|
722
|
-
library: string;
|
|
723
|
-
flip: string;
|
|
724
|
-
rotate: string;
|
|
725
|
-
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
726
|
-
}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
727
|
-
}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
728
|
-
|
|
729
111
|
export declare const XTimeTextField: DefineComponent<ExtractPropTypes< {
|
|
730
112
|
formatter: {
|
|
731
113
|
type: PropType<FormatFunction<HoursMinutesString>>;
|
|
@@ -795,6 +177,11 @@ type: PropType<string[] | undefined>;
|
|
|
795
177
|
required: false;
|
|
796
178
|
default: () => undefined;
|
|
797
179
|
};
|
|
180
|
+
disabled: {
|
|
181
|
+
type: BooleanConstructor;
|
|
182
|
+
required: false;
|
|
183
|
+
default: boolean;
|
|
184
|
+
};
|
|
798
185
|
}>, {
|
|
799
186
|
textFieldTableMode: boolean;
|
|
800
187
|
viewValue: Ref<string, string>;
|
|
@@ -888,6 +275,11 @@ type: PropType<string[] | undefined>;
|
|
|
888
275
|
required: false;
|
|
889
276
|
default: () => undefined;
|
|
890
277
|
};
|
|
278
|
+
disabled: {
|
|
279
|
+
type: BooleanConstructor;
|
|
280
|
+
required: false;
|
|
281
|
+
default: boolean;
|
|
282
|
+
};
|
|
891
283
|
}>> & Readonly<{
|
|
892
284
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
893
285
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
@@ -898,6 +290,7 @@ type: string;
|
|
|
898
290
|
id: string;
|
|
899
291
|
modelValue: string | number;
|
|
900
292
|
inline: boolean;
|
|
293
|
+
disabled: boolean;
|
|
901
294
|
options: string[] | undefined;
|
|
902
295
|
labelWidth: string;
|
|
903
296
|
formatter: FormatFunction<any>;
|
package/dummy.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* dummy css file while there is no actual style generated by any component */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fkui/vue-labs",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.45.0",
|
|
4
4
|
"description": "Experimental and unstable FKUI components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fkui",
|
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
"import": "./dist/esm/index.esm.js"
|
|
24
24
|
},
|
|
25
25
|
"./pageobject/*": "./pageobject/*",
|
|
26
|
-
"./style.css": "./
|
|
26
|
+
"./style.css": "./dummy.css"
|
|
27
27
|
},
|
|
28
28
|
"main": "./dist/cjs/index.cjs.js",
|
|
29
29
|
"module": "./dist/esm/index.esm.js",
|
|
30
30
|
"types": "./dist/types/index.d.ts",
|
|
31
31
|
"files": [
|
|
32
32
|
"dist",
|
|
33
|
+
"dummy.css",
|
|
33
34
|
"htmlvalidate",
|
|
34
35
|
"pageobject/**/*.{js,js.map,d.ts}",
|
|
35
36
|
"!**/examples/**",
|
|
@@ -71,5 +72,5 @@
|
|
|
71
72
|
"node": ">= 20",
|
|
72
73
|
"npm": ">= 7"
|
|
73
74
|
},
|
|
74
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "8acf0ec98104671d8411346256fa664abf2e94af"
|
|
75
76
|
}
|
package/dist/cjs/vue-labs.css
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
.x-search-bar .text-field__input-wrapper {
|
|
2
|
-
gap: 0;
|
|
3
|
-
}
|
|
4
|
-
.x-search-bar input {
|
|
5
|
-
border-right: 0;
|
|
6
|
-
border-top-right-radius: 0;
|
|
7
|
-
border-bottom-right-radius: 0;
|
|
8
|
-
}
|
|
9
|
-
.x-search-bar .button.button--primary {
|
|
10
|
-
margin-bottom: 0;
|
|
11
|
-
margin-top: 0;
|
|
12
|
-
border-top-left-radius: 0;
|
|
13
|
-
border-bottom-left-radius: 0;
|
|
14
|
-
width: auto;
|
|
15
|
-
padding: 0.25rem 0.75rem;
|
|
16
|
-
height: var(--f-height-large);
|
|
17
|
-
min-width: 6rem;
|
|
18
|
-
}
|
package/dist/esm/vue-labs.css
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
.x-search-bar .text-field__input-wrapper {
|
|
2
|
-
gap: 0;
|
|
3
|
-
}
|
|
4
|
-
.x-search-bar input {
|
|
5
|
-
border-right: 0;
|
|
6
|
-
border-top-right-radius: 0;
|
|
7
|
-
border-bottom-right-radius: 0;
|
|
8
|
-
}
|
|
9
|
-
.x-search-bar .button.button--primary {
|
|
10
|
-
margin-bottom: 0;
|
|
11
|
-
margin-top: 0;
|
|
12
|
-
border-top-left-radius: 0;
|
|
13
|
-
border-bottom-left-radius: 0;
|
|
14
|
-
width: auto;
|
|
15
|
-
padding: 0.25rem 0.75rem;
|
|
16
|
-
height: var(--f-height-large);
|
|
17
|
-
min-width: 6rem;
|
|
18
|
-
}
|