linear-react-components-ui 2.1.0-beta.2 → 2.1.0-beta.3
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/lib/inputs2/date/datefield/base.js +263 -255
- package/lib/inputs2/date/datefield/base.js.map +1 -1
- package/lib/inputs2/date/dateperiodfield/base.js +398 -373
- package/lib/inputs2/date/dateperiodfield/base.js.map +1 -1
- package/lib/inputs2/date/helpers.d.ts +4 -0
- package/lib/inputs2/date/helpers.js +15 -0
- package/lib/inputs2/date/helpers.js.map +1 -1
- package/lib/inputs2/date/hooks/useDateMask.d.ts +2 -0
- package/lib/inputs2/date/hooks/useDateMask.js +93 -56
- package/lib/inputs2/date/hooks/useDateMask.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateMask.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateMask.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { useIMask, IMask } from 'react-imask';\nimport type { DateVariant } from '../types';\nimport { getDateFormats } from '../helpers';\n\ninterface UseDateMaskParams {\n inputRef: React.RefObject<HTMLInputElement | null>;\n variant?: DateVariant;\n defaultValue?: string;\n undigitable?: boolean;\n onCommit: (date: Moment) => void;\n onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;\n}\n\n// Cada segmento é um bloco próprio: é isso que impede os dígitos de deslizarem para a\n// esquerda ao digitar por cima de uma seleção. O `pad` completa `3` como `03`.\nconst buildMaskOptions = (variant: DateVariant) => {\n const { ptbrFormat } = getDateFormats(variant);\n return {\n mask: Date,\n pattern: variant === 'datetime' ? '`d/`m/`Y `H:`M' : '`d/`m/`Y',\n lazy: false,\n placeholderChar: '_',\n overwrite: true,\n autofix: 'pad',\n blocks: {\n d: { mask: IMask.MaskedRange, from: 1, to: 31, maxLength: 2, autofix: 'pad' },\n m: { mask: IMask.MaskedRange, from: 1, to: 12, maxLength: 2, autofix: 'pad' },\n Y: { mask: IMask.MaskedRange, from: 1900, to: 2099, maxLength: 4 },\n H: { mask: IMask.MaskedRange, from: 0, to: 23, maxLength: 2 },\n M: { mask: IMask.MaskedRange, from: 0, to: 59, maxLength: 2 },\n },\n format: (date: Date) => moment(date).format(ptbrFormat),\n parse: (value: string) => moment(value, ptbrFormat).toDate(),\n } as any;\n};\n\nexport const useDateMask = (params: UseDateMaskParams) => {\n const {\n inputRef, variant = 'date', defaultValue, undigitable = false,\n onCommit, onPaste, onBeforeInput,\n } = params;\n const { ptbrFormat } = getDateFormats(variant);\n const maskOptions = React.useMemo(() => buildMaskOptions(variant), [variant]);\n\n const { value, unmaskedValue, setValue } = useIMask(maskOptions, {\n ref: inputRef,\n defaultValue,\n onAccept: (acceptedValue: string, mask: any) => {\n // onAccept dispara a cada tecla, então sem esse guard o onChange sairia\n // com datas pela metade enquanto a pessoa ainda está digitando.\n if (!mask?.masked?.isComplete) return;\n const date = moment(acceptedValue, ptbrFormat);\n if (date.isValid()) { onCommit(date); }\n },\n });\n\n const handleOnPaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onPaste?.(event);\n }\n };\n\n const handleOnBeforeInput = (event: React.InputEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onBeforeInput?.(event);\n }\n };\n\n return {\n maskedValue: value,\n unmaskedValue,\n setMaskValue: setValue,\n handleOnPaste,\n handleOnBeforeInput,\n };\n};\n"],"names":["buildMaskOptions","variant","ptbrFormat","getDateFormats","mask","Date","pattern","lazy","placeholderChar","overwrite","autofix","blocks","d","IMask","MaskedRange","from","to","maxLength","m","Y","H","M","format","date","moment","parse","value","toDate","useDateMask","params","$","_c","inputRef","t0","defaultValue","undigitable","t1","onCommit","onPaste","onBeforeInput","undefined","
|
|
1
|
+
{"version":3,"file":"useDateMask.js","sources":["../../../../src/lib/inputs2/date/hooks/useDateMask.ts"],"sourcesContent":["import React from 'react';\nimport moment, { type Moment } from 'moment';\nimport { useIMask, IMask } from 'react-imask';\nimport type { DateVariant } from '../types';\nimport { getDateFormats, getMaskSegments } from '../helpers';\n\ninterface UseDateMaskParams {\n inputRef: React.RefObject<HTMLInputElement | null>;\n variant?: DateVariant;\n defaultValue?: string;\n undigitable?: boolean;\n readOnly?: boolean;\n onCommit: (date: Moment) => void;\n onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n onBeforeInput?: (event: React.InputEvent<HTMLInputElement>) => void;\n}\n\n// Cada segmento é um bloco próprio: é isso que impede os dígitos de deslizarem para a\n// esquerda ao digitar por cima de uma seleção. O `pad` completa `3` como `03`.\nconst buildMaskOptions = (variant: DateVariant) => {\n const { ptbrFormat } = getDateFormats(variant);\n return {\n mask: Date,\n pattern: variant === 'datetime' ? '`d/`m/`Y `H:`M' : '`d/`m/`Y',\n lazy: false,\n placeholderChar: '_',\n overwrite: true,\n autofix: 'pad',\n blocks: {\n d: { mask: IMask.MaskedRange, from: 1, to: 31, maxLength: 2, autofix: 'pad' },\n m: { mask: IMask.MaskedRange, from: 1, to: 12, maxLength: 2, autofix: 'pad' },\n Y: { mask: IMask.MaskedRange, from: 1900, to: 2099, maxLength: 4 },\n H: { mask: IMask.MaskedRange, from: 0, to: 23, maxLength: 2 },\n M: { mask: IMask.MaskedRange, from: 0, to: 59, maxLength: 2 },\n },\n format: (date: Date) => moment(date).format(ptbrFormat),\n parse: (value: string) => moment(value, ptbrFormat).toDate(),\n } as any;\n};\n\nexport const useDateMask = (params: UseDateMaskParams) => {\n const {\n inputRef, variant = 'date', defaultValue, undigitable = false, readOnly = false,\n onCommit, onPaste, onBeforeInput,\n } = params;\n const { ptbrFormat } = getDateFormats(variant);\n const maskOptions = React.useMemo(() => buildMaskOptions(variant), [variant]);\n\n const { value, unmaskedValue, setValue } = useIMask(maskOptions, {\n ref: inputRef,\n defaultValue,\n onAccept: (acceptedValue: string, mask: any) => {\n // onAccept dispara a cada tecla, então sem esse guard o onChange sairia\n // com datas pela metade enquanto a pessoa ainda está digitando.\n if (!mask?.masked?.isComplete) return;\n const date = moment(acceptedValue, ptbrFormat);\n if (date.isValid()) { onCommit(date); }\n },\n });\n\n // Selecionar um dígito e digitar por cima é o gesto de \"reescrever este segmento\". Sem\n // normalizar a seleção, o dígito que não cabe transborda para o segmento seguinte e o\n // sobrescreve calado — digitar `13` sobre o mês de 12/10/2026 levava o ano para 1926.\n // Precisa ser na captura: o iMask escuta keydown no próprio input e fotografa a seleção\n // ali, então um handler de bolha chegaria tarde.\n const handleOnKeyDownCapture = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (undigitable || readOnly) return;\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n if (event.key.length !== 1 || !/\\d/.test(event.key)) return;\n const input = inputRef.current;\n const start = input?.selectionStart;\n const end = input?.selectionEnd;\n if (!input || start == null || end == null || start === end) return;\n const segment = getMaskSegments(ptbrFormat)\n .find(item => start >= item.start && end <= item.end);\n if (!segment) return;\n input.setSelectionRange(segment.start, segment.end);\n };\n\n const handleOnPaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onPaste?.(event);\n }\n };\n\n const handleOnBeforeInput = (event: React.InputEvent<HTMLInputElement>) => {\n if (undigitable) {\n event.preventDefault();\n } else {\n onBeforeInput?.(event);\n }\n };\n\n return {\n maskedValue: value,\n unmaskedValue,\n setMaskValue: setValue,\n handleOnPaste,\n handleOnBeforeInput,\n handleOnKeyDownCapture,\n };\n};\n"],"names":["buildMaskOptions","variant","ptbrFormat","getDateFormats","mask","Date","pattern","lazy","placeholderChar","overwrite","autofix","blocks","d","IMask","MaskedRange","from","to","maxLength","m","Y","H","M","format","date","moment","parse","value","toDate","useDateMask","params","$","_c","inputRef","t0","defaultValue","undigitable","t1","readOnly","t2","onCommit","onPaste","onBeforeInput","undefined","t3","t4","maskOptions","t5","acceptedValue","masked","isComplete","isValid","t6","ref","onAccept","unmaskedValue","setValue","useIMask","t7","event","ctrlKey","metaKey","altKey","key","length","test","input","current","start","selectionStart","end","selectionEnd","segment","getMaskSegments","find","item","setSelectionRange","handleOnKeyDownCapture","t8","event_0","preventDefault","handleOnPaste","t9","event_1","handleOnBeforeInput","t10","maskedValue","setMaskValue"],"mappings":"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"}
|