@luis-angel-martin-dzul/input-styles 0.0.14 → 0.0.17

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/README.md CHANGED
@@ -6,7 +6,8 @@ Incluye componentes de inputs, selects, botones, paginación y más, estilizados
6
6
 
7
7
  ------
8
8
 
9
- ![Última actualización](https://img.shields.io/badge/Actualizado-31%20de%20Marzo%20del%2026-blue)
9
+ ![Última actualización](https://img.shields.io/badge/Actualizado-29%20de%20Mayo%20del%2026-blue)
10
+ ![Versión](https://img.shields.io/badge/versión-0.0.15-indigo)
10
11
 
11
12
  ------
12
13
 
@@ -18,12 +19,6 @@ La librería se distribuye mediante **npm**:
18
19
  npm install @luis-angel-martin-dzul/input-styles
19
20
  ```
20
21
 
21
- ### Dependencias peer requeridas
22
-
23
- ```
24
- npm install vue@^3.3.0 v-calendar@^3.0.0
25
- ```
26
-
27
22
  ------
28
23
 
29
24
  # 🚀 Uso en Vue + Vite
@@ -34,14 +29,12 @@ En `main.js` o `main.ts`:
34
29
  import { createApp } from 'vue'
35
30
  import App from './App.vue'
36
31
 
37
- import 'v-calendar/style.css'
38
32
  import '@luis-angel-martin-dzul/input-styles/style.css'
39
33
  import InputStyle from '@luis-angel-martin-dzul/input-styles'
40
34
 
41
35
  const app = createApp(App)
42
36
 
43
- app.component('font-awesome-icon', FontAwesomeIcon)
44
- app.use(VCalendar, { locale: 'es', firstDayOfWeek: 1 })
37
+ app.use(InputStyle)
45
38
  app.mount('#app')
46
39
  ```
47
40
 
@@ -64,17 +57,32 @@ La librería expone un sistema de **tokens de estilo configurables** que permite
64
57
 
65
58
  Los estilos se configuran **antes de montar la app**, importando `configureStyles` directamente.
66
59
 
60
+ ## Opción A — vía `app.use` (recomendado)
61
+
62
+ ```js
63
+ import VueInputYuc from '@luis-angel-martin-dzul/input-styles'
64
+
65
+ app.use(VueInputYuc, {
66
+ styles: {
67
+ INPUT_BASE: 'w-full px-0 py-2 bg-transparent border-b focus:outline-none ...',
68
+ ICON_VALID: 'text-emerald-500',
69
+ // solo los tok ens que quieras cambiar
70
+ }
71
+ })
72
+ ```
73
+
74
+ ## Opción B — importación directa
75
+
67
76
  ```js
68
77
  import { configureStyles } from '@luis-angel-martin-dzul/input-styles'
69
78
 
70
79
  configureStyles({
71
- LOADER_ARC_STROKE: '#3B82F6',
72
- REQUIRED_ASTERISK: 'text-red-500',
73
- // solo los tokens que quieras cambiar
80
+ LOADER_ARC_STROKE: '#3B82F6',
81
+ REQUIRED_ASTERISK: 'text-red-500',
74
82
  })
75
83
  ```
76
84
 
77
- > ⚠️ `configureStyles()` debe llamarse **antes** de que los componentes se monten. Los cambios no son reactivos después del montaje inicial.
85
+ ⚠️ `configureStyles()` debe llamarse **antes** de que los componentes se monten. Los cambios no son reactivos después del montaje inicial.
78
86
 
79
87
  ------
80
88
 
@@ -521,7 +529,9 @@ Toggle switch estilizado.
521
529
 
522
530
  ## InputDateStyle
523
531
 
524
- Selector de fecha con máscara `dd/mm/aaaa`, navegación por teclado entre secciones y calendario visual (v-calendar). El valor se emite en formato `YYYY-MM-DD`.
532
+ Selector de fecha con máscara `dd/mm/aaaa`, navegación por teclado entre secciones y calendario visual nativo (sin dependencias externas). El valor se emite en formato `YYYY-MM-DD`.
533
+
534
+ El calendario incluye vistas de días, meses y años, y un botón **Hoy** para navegar rápidamente a la fecha actual.
525
535
 
526
536
  ```vue
527
537
  <InputDateStyle
@@ -540,8 +550,9 @@ Selector de fecha con máscara `dd/mm/aaaa`, navegación por teclado entre secci
540
550
  | `description` | `String` | `''` | |
541
551
  | `min` | `String` | `'1900-01-01'` | Fecha mínima seleccionable en el calendario (formato `YYYY-MM-DD`). |
542
552
  | `max` | `String` | `'2100-12-31'` | Fecha máxima seleccionable en el calendario (formato `YYYY-MM-DD`). |
543
- | `disabledDates` | `Array \| Object` | `[]` | Fechas deshabilitadas en el calendario. Acepta el formato de `v-calendar`. |
553
+ | `disabledDates` | `Array` | `[]` | Fechas deshabilitadas. Array de strings `'YYYY-MM-DD'` o objetos `Date`. |
544
554
  | `disabled` | `Boolean` | `false` | |
555
+ | `readonly` | `Boolean` | `false` | Solo lectura: muestra el valor pero bloquea la edición por teclado. |
545
556
  | `required` | `Boolean` | `false` | |
546
557
  | `validate` | `Boolean \| null` | `null` | |
547
558
  | `mclass` | `String` | `null` | |
@@ -550,6 +561,7 @@ Selector de fecha con máscara `dd/mm/aaaa`, navegación por teclado entre secci
550
561
 
551
562
  **Navegación por teclado:**
552
563
  - Escribe los dígitos y el foco avanza automáticamente entre día → mes → año
564
+ - `↑` / `↓` — incrementar/decrementar la sección activa
553
565
  - `←` / `→` — mover entre secciones
554
566
  - `Backspace` / `Delete` — limpiar la sección activa
555
567
  - Clic en el ícono 📅 — abre/cierra el calendario visual
@@ -588,6 +600,53 @@ Selector de hora con picker de columnas scrollables. Soporta formato 12h (AM/PM)
588
600
 
589
601
  ------
590
602
 
603
+ ## InputDateTimeStyle
604
+
605
+ Selector combinado de fecha y hora con máscara `dd/mm/aaaa hh:mm` (o `dd/mm/aaaa hh:mm a.m.` en modo 12h), calendario visual nativo y picker de columnas scrollables para la hora. El valor se emite en formato `YYYY-MM-DDTHH:mm:00.000`.
606
+
607
+ ```vue
608
+ <InputDateTimeStyle
609
+ v-model="fechaHora"
610
+ label="Fecha y hora"
611
+ min="2000-01-01"
612
+ max="2100-12-31"
613
+ :is24h="true"
614
+ :validate="validate"
615
+ />
616
+ ```
617
+
618
+ | Prop | Tipo | Default | Descripción |
619
+ | ---- | ---- | ------- | ----------- |
620
+ | `modelValue` | `String \| Date` | — | Valor en formato `YYYY-MM-DDTHH:mm:00.000` o `Date`. |
621
+ | `label` | `String` | `''` | |
622
+ | `description` | `String` | `''` | |
623
+ | `min` | `String` | `'1900-01-01'` | Fecha mínima seleccionable (formato `YYYY-MM-DD`). |
624
+ | `max` | `String` | `'2100-12-31'` | Fecha máxima seleccionable (formato `YYYY-MM-DD`). |
625
+ | `disabledDates` | `Array` | `[]` | Fechas deshabilitadas. Array de strings `'YYYY-MM-DD'` o `Date`. |
626
+ | `is24h` | `Boolean` | `false` | `true` = formato 24h, `false` = formato 12h con selector a.m./p.m. |
627
+ | `disabled` | `Boolean` | `false` | |
628
+ | `readonly` | `Boolean` | `false` | Solo lectura. |
629
+ | `required` | `Boolean` | `false` | |
630
+ | `validate` | `Boolean \| null` | `null` | |
631
+ | `mclass` | `String` | `null` | |
632
+
633
+ **Valor emitido:** `'YYYY-MM-DDTHH:mm:00.000'` (string) o `''` si la fecha/hora es inválida o está vacía.
634
+
635
+ **Comportamiento del picker:**
636
+ - El calendario permanece abierto al seleccionar la fecha, para que puedas ajustar también la hora.
637
+ - El selector de hora embebido en el picker usa las mismas columnas scrollables que `InputTimeStyle`.
638
+ - Botón **Ahora** — establece la fecha y hora actuales de un solo clic.
639
+
640
+ **Navegación por teclado:**
641
+ - Escribe los dígitos y el foco avanza automáticamente: día → mes → año → hora → minuto → a.m./p.m.
642
+ - `↑` / `↓` — incrementar/decrementar la sección activa
643
+ - `←` / `→` — mover entre secciones
644
+ - `Backspace` / `Delete` — limpiar la sección activa
645
+ - `a` / `p` — cambiar entre a.m. y p.m. (solo modo 12h)
646
+ - Clic en el ícono 📅 — abre/cierra el picker
647
+
648
+ ------
649
+
591
650
  ## InputFileUploadStyle
592
651
 
593
652
  Botón para adjuntar archivos con validación de tamaño y formato.
@@ -758,6 +817,13 @@ El paginador muestra hasta 7 botones con elipsis (`...`) inteligentes cuando hay
758
817
  :validate="validaciones.fecha"
759
818
  />
760
819
 
820
+ <InputDateTimeStyle
821
+ v-model="form.fechaHora"
822
+ label="Fecha y hora"
823
+ :is24h="true"
824
+ :validate="validaciones.fechaHora"
825
+ />
826
+
761
827
  <InputTimeStyle
762
828
  v-model="form.hora"
763
829
  label="Hora"
@@ -784,18 +850,18 @@ El paginador muestra hasta 7 botones con elipsis (`...`) inteligentes cuando hay
784
850
  import { ref } from 'vue'
785
851
  import {
786
852
  InputTextStyle, InputNumberStyle, InputPasswordStyle,
787
- SelectStyle, InputDateStyle, InputTimeStyle,
853
+ SelectStyle, InputDateStyle, InputDateTimeStyle, InputTimeStyle,
788
854
  InputCheckStyle, ButtonStyle
789
855
  } from '@luis-angel-martin-dzul/input-styles'
790
856
 
791
857
  const form = ref({
792
858
  nombre: '', monto: '', password: '',
793
- pais: null, fecha: '', hora: '', acepta: false
859
+ pais: null, fecha: '', fechaHora: '', hora: '', acepta: false
794
860
  })
795
861
 
796
862
  const validaciones = ref({
797
863
  nombre: null, monto: null, password: null,
798
- pais: null, fecha: null
864
+ pais: null, fecha: null, fechaHora: null
799
865
  })
800
866
 
801
867
  const paises = [
@@ -1 +1 @@
1
- .alert-container{position:fixed;top:20px;right:20px;width:340px;display:flex;flex-direction:column;gap:10px;z-index:99999}.alert{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid transparent;border-radius:.375rem;background-color:#f9fafb;box-shadow:0 2px 6px #0000001f;opacity:0;transform:translate(40px);transition:opacity .25s ease,transform .25s ease}.alert.show{opacity:1;transform:translate(0)}.alert.hide{opacity:0;transform:translate(40px)}.alert-icon{display:flex;align-items:center;justify-content:center;width:26px}.alert-icon svg{width:22px;height:22px;display:block}.alert-icon svg path{fill:currentColor!important}.alert-texts{flex:1}.alert-title{font-size:14px;font-weight:700;overflow:hidden;text-overflow:ellipsis}.alert-message{font-size:13px;margin-top:2px;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.alert-close{font-size:18px;font-weight:700;cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:.5rem;transition:.2s ease}.alert-close:hover{background:#d1d5db}.alert-success{background-color:#ecfdf5;color:#065f46;border-color:#b4dfc6}.alert-error{background-color:#fef2f2;color:#991b1b;border-color:#f0c5c5}.alert-warning{background-color:#fffbeb;color:#92400e;border-color:#f0dfa5}.alert-info{background-color:#eff6ff;color:#1e40af;border-color:#c7daf5}.alert-neutral{background-color:#f3f4f6;color:#374151;border-color:#cbd5e1}.dialog-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000073;display:flex;justify-content:center;align-items:center;z-index:99998;opacity:0;transition:opacity .25s ease}.dialog-overlay.show{opacity:1}.dialog-box{background:#fff;border-radius:.5rem;box-shadow:0 25px 50px -12px #00000040;max-height:90vh;display:flex;flex-direction:column;width:400px;max-width:90%;padding:1rem;transform:translateY(-20px);transition:transform .25s ease}.dialog-overlay.show .dialog-box{transform:translateY(0)}.dialog-box.fixed-width{width:380px;max-width:90%}.dialog-title{font-size:18px;font-weight:700;color:#1f2937}.dialog-description{font-size:14px;color:#374151;margin-bottom:10px;white-space:pre-line}.dialog-buttons{display:flex;gap:10px;margin-top:10px}.dialog-buttons.two-buttons{display:grid;grid-template-columns:1fr 1fr;gap:10px}.dialog-buttons.one-button{display:flex}.dialog-buttons.one-button .dialog-btn{flex:1}.dialog-btn{font-size:14px;font-weight:600;cursor:pointer;transition:.2s ease;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:6px}.dialog-buttons .dialog-btn{flex:1}.btn-blue{font-size:.75rem;padding:.25rem .5rem;background-color:#0284c7;color:#fff;border-radius:.125rem;cursor:pointer;border:none;transition:background-color .2s ease}.btn-blue:hover{background-color:#0ea5e9}.btn-blue:disabled{background-color:#7dd3fc;color:#6b7280;cursor:not-allowed}.btn-white{font-size:.75rem;padding:.25rem .5rem;background-color:#fff;color:#374151;border:1px solid #d1d5db;border-radius:.125rem;cursor:pointer;transition:background-color .2s ease}.btn-white:hover{background-color:#f3f4f6}.btn-white:disabled{background-color:#d1d5db;color:#6b7280;cursor:not-allowed}.dialog-btn-cancel{font-size:.75rem;padding:.25rem .5rem;background-color:#fff;color:#374151;border:1px solid #d1d5db;border-radius:.125rem;cursor:pointer;transition:background-color .2s ease}.dialog-btn-cancel:hover{background-color:#f3f4f6}.dialog-btn-cancel:disabled{background-color:#d1d5db;color:#6b7280;cursor:not-allowed}.dialog-btn-accept{font-size:.75rem;padding:.25rem .5rem;background-color:#0284c7;color:#fff;border-radius:.125rem;cursor:pointer;border:none;transition:background-color .2s ease}.dialog-btn-accept:hover{background-color:#0ea5e9}.dialog-btn-accept:disabled{background-color:#7dd3fc;color:#6b7280;cursor:not-allowed}.dialog-loading-layout{display:flex;gap:16px;margin-top:16px;min-height:60px}.dialog-loading-icon{flex-shrink:0;display:flex;align-items:center;min-height:60px}.dialog-loading-spinner{width:40px;height:40px;border:3px solid #e5e7eb;border-top-color:#0d9488;border-radius:50%;animation:dialog-spin .8s linear infinite}.dialog-loading-texts{flex:1;display:flex;flex-direction:column;justify-content:center;gap:4px}.dialog-loading-title{font-size:15px;font-weight:600;color:#1f2937;line-height:1.4}.dialog-loading-message{font-size:13px;color:#6b7280;line-height:1.4}@keyframes dialog-spin{to{transform:rotate(360deg)}}@keyframes dialogShake{0%{transform:translateY(0)}30%{transform:translateY(-6px)}60%{transform:translateY(3px)}to{transform:translateY(0)}}.dialog-shake{animation:dialogShake .25s ease}.dialog-box:has(.dialog-loading-layout) .dialog-title{display:none}.dialog-box:has(.dialog-loading-layout) .dialog-description{display:none}.dialog-box:has(.dialog-loading-layout:only-child){padding:1rem}.dialog-box:has(.dialog-loading-layout):not(:has(.dialog-buttons)){padding-bottom:1rem}.dialog-box:has(.dialog-loading-layout:first-child:last-child) .dialog-loading-layout{margin-top:0}input[type=date][data-v-2f7f0f95]::-webkit-calendar-picker-indicator,input[type=datetime-local][data-v-2f7f0f95]::-webkit-calendar-picker-indicator,input[type=time][data-v-2f7f0f95]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}input[type=date][data-v-2f7f0f95],input[type=datetime-local][data-v-2f7f0f95],input[type=time][data-v-2f7f0f95]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}.vc-focus[data-v-2f7f0f95]{box-shadow:none!important}.vc-container[data-v-2f7f0f95]{--vc-accent-500: #60A5FA}input[type=date][data-v-cd7ea14f]::-webkit-calendar-picker-indicator,input[type=datetime-local][data-v-cd7ea14f]::-webkit-calendar-picker-indicator,input[type=time][data-v-cd7ea14f]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}input[type=date][data-v-cd7ea14f],input[type=datetime-local][data-v-cd7ea14f],input[type=time][data-v-cd7ea14f]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}
1
+ .alert-container{position:fixed;top:20px;right:20px;width:340px;display:flex;flex-direction:column;gap:10px;z-index:99999}.alert{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid transparent;border-radius:.375rem;background-color:#f9fafb;box-shadow:0 2px 6px #0000001f;opacity:0;transform:translate(40px);transition:opacity .25s ease,transform .25s ease}.alert.show{opacity:1;transform:translate(0)}.alert.hide{opacity:0;transform:translate(40px)}.alert-icon{display:flex;align-items:center;justify-content:center;width:26px}.alert-icon svg{width:22px;height:22px;display:block}.alert-icon svg path{fill:currentColor!important}.alert-texts{flex:1}.alert-title{font-size:14px;font-weight:700;overflow:hidden;text-overflow:ellipsis}.alert-message{font-size:13px;margin-top:2px;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.alert-close{font-size:18px;font-weight:700;cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:.5rem;transition:.2s ease}.alert-close:hover{background:#d1d5db}.alert-success{background-color:#ecfdf5;color:#065f46;border-color:#b4dfc6}.alert-error{background-color:#fef2f2;color:#991b1b;border-color:#f0c5c5}.alert-warning{background-color:#fffbeb;color:#92400e;border-color:#f0dfa5}.alert-info{background-color:#eff6ff;color:#1e40af;border-color:#c7daf5}.alert-neutral{background-color:#f3f4f6;color:#374151;border-color:#cbd5e1}.dialog-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000073;display:flex;justify-content:center;align-items:center;z-index:99998;opacity:0;transition:opacity .25s ease}.dialog-overlay.show{opacity:1}.dialog-box{background:#fff;border-radius:.5rem;box-shadow:0 25px 50px -12px #00000040;max-height:90vh;display:flex;flex-direction:column;width:400px;max-width:90%;padding:1rem;transform:translateY(-20px);transition:transform .25s ease}.dialog-overlay.show .dialog-box{transform:translateY(0)}.dialog-box.fixed-width{width:380px;max-width:90%}.dialog-title{font-size:18px;font-weight:700;color:#1f2937}.dialog-description{font-size:14px;color:#374151;margin-bottom:10px;white-space:pre-line}.dialog-buttons{display:flex;gap:10px;margin-top:10px}.dialog-buttons.two-buttons{display:grid;grid-template-columns:1fr 1fr;gap:10px}.dialog-buttons.one-button{display:flex}.dialog-buttons.one-button .dialog-btn{flex:1}.dialog-btn{font-size:14px;font-weight:600;cursor:pointer;transition:.2s ease;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:6px}.dialog-buttons .dialog-btn{flex:1}.btn-blue{font-size:.75rem;padding:.25rem .5rem;background-color:#0284c7;color:#fff;border-radius:.125rem;cursor:pointer;border:none;transition:background-color .2s ease}.btn-blue:hover{background-color:#0ea5e9}.btn-blue:disabled{background-color:#7dd3fc;color:#6b7280;cursor:not-allowed}.btn-white{font-size:.75rem;padding:.25rem .5rem;background-color:#fff;color:#374151;border:1px solid #d1d5db;border-radius:.125rem;cursor:pointer;transition:background-color .2s ease}.btn-white:hover{background-color:#f3f4f6}.btn-white:disabled{background-color:#d1d5db;color:#6b7280;cursor:not-allowed}.dialog-btn-cancel{font-size:.75rem;padding:.25rem .5rem;background-color:#fff;color:#374151;border:1px solid #d1d5db;border-radius:.125rem;cursor:pointer;transition:background-color .2s ease}.dialog-btn-cancel:hover{background-color:#f3f4f6}.dialog-btn-cancel:disabled{background-color:#d1d5db;color:#6b7280;cursor:not-allowed}.dialog-btn-accept{font-size:.75rem;padding:.25rem .5rem;background-color:#0284c7;color:#fff;border-radius:.125rem;cursor:pointer;border:none;transition:background-color .2s ease}.dialog-btn-accept:hover{background-color:#0ea5e9}.dialog-btn-accept:disabled{background-color:#7dd3fc;color:#6b7280;cursor:not-allowed}.dialog-loading-layout{display:flex;gap:16px;margin-top:16px;min-height:60px}.dialog-loading-icon{flex-shrink:0;display:flex;align-items:center;min-height:60px}.dialog-loading-spinner{width:40px;height:40px;border:3px solid #e5e7eb;border-top-color:#0d9488;border-radius:50%;animation:dialog-spin .8s linear infinite}.dialog-loading-texts{flex:1;display:flex;flex-direction:column;justify-content:center;gap:4px}.dialog-loading-title{font-size:15px;font-weight:600;color:#1f2937;line-height:1.4}.dialog-loading-message{font-size:13px;color:#6b7280;line-height:1.4}@keyframes dialog-spin{to{transform:rotate(360deg)}}@keyframes dialogShake{0%{transform:translateY(0)}30%{transform:translateY(-6px)}60%{transform:translateY(3px)}to{transform:translateY(0)}}.dialog-shake{animation:dialogShake .25s ease}.dialog-box:has(.dialog-loading-layout) .dialog-title{display:none}.dialog-box:has(.dialog-loading-layout) .dialog-description{display:none}.dialog-box:has(.dialog-loading-layout:only-child){padding:1rem}.dialog-box:has(.dialog-loading-layout):not(:has(.dialog-buttons)){padding-bottom:1rem}.dialog-box:has(.dialog-loading-layout:first-child:last-child) .dialog-loading-layout{margin-top:0}input[type=date][data-v-77cda018]::-webkit-calendar-picker-indicator,input[type=datetime-local][data-v-77cda018]::-webkit-calendar-picker-indicator,input[type=time][data-v-77cda018]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}input[type=date][data-v-77cda018],input[type=datetime-local][data-v-77cda018],input[type=time][data-v-77cda018]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}input[type=date][data-v-a1d95f22]::-webkit-calendar-picker-indicator,input[type=datetime-local][data-v-a1d95f22]::-webkit-calendar-picker-indicator,input[type=time][data-v-a1d95f22]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}input[type=date][data-v-a1d95f22],input[type=datetime-local][data-v-a1d95f22],input[type=time][data-v-a1d95f22]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}input[type=date][data-v-99e5a751]::-webkit-calendar-picker-indicator,input[type=datetime-local][data-v-99e5a751]::-webkit-calendar-picker-indicator,input[type=time][data-v-99e5a751]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}input[type=date][data-v-99e5a751],input[type=datetime-local][data-v-99e5a751],input[type=time][data-v-99e5a751]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}