index.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. import type { FormThemeClasses, FormThemeExtension } from '@common/types/form'
  3. type Classes = Record<string, string>
  4. export const addFloatingLabel = (classes: Classes): Classes => {
  5. const inputClass = classes.input || ''
  6. const labelClass = classes.label || ''
  7. return {
  8. outer: `${classes.outer || ''} floating-input`,
  9. wrapper: `${classes.wrapper || ''} relative`,
  10. input: `${inputClass} w-full h-14 text-sm bg-gray-500 rounded-xl border-none focus:outline-none placeholder:text-transparent focus-within:pt-8 formkit-populated:pt-8`,
  11. label: `${labelClass} absolute top-0 left-0 py-5 px-3 h-14 text-base transition-all duration-100 ease-in-out origin-left pointer-events-none formkit-populated:-translate-y-3 formkit-populated:translate-x-1 formkit-populated:scale-75 formkit-populated:opacity-75`,
  12. }
  13. }
  14. export const addDateLabel = (classes: Classes): Classes => {
  15. const newClasses = addFloatingLabel(classes)
  16. return {
  17. ...newClasses,
  18. inner: 'flex flex-col items-center bg-gray-500 rounded-xl',
  19. }
  20. }
  21. const getCoreClasses: FormThemeExtension = (classes: FormThemeClasses) => {
  22. return {
  23. global: {},
  24. text: addFloatingLabel(classes.text),
  25. email: addFloatingLabel(classes.email),
  26. number: addFloatingLabel(classes.number),
  27. search: addFloatingLabel(classes.search),
  28. tel: addFloatingLabel(classes.tel),
  29. time: addFloatingLabel(classes.time),
  30. date: addDateLabel(classes.date),
  31. datetimeLocal: addDateLabel(classes['datetime-local']),
  32. textarea: addFloatingLabel(classes.textarea),
  33. password: addFloatingLabel(classes.password),
  34. select: addFloatingLabel({
  35. ...(classes.select || {}),
  36. outer: `${classes.select && classes.select.outer} field-select`,
  37. }),
  38. treeselect: addFloatingLabel({
  39. ...(classes.select || {}),
  40. outer: `${classes.select && classes.select.outer} field-treeselect`,
  41. }),
  42. }
  43. }
  44. export default getCoreClasses