(defpackage :ucw-forms
  (:use :cl :arnesi :ucw-core :ucw :iterate)
  (:shadowing-import-from :ucw-core :parent)
  (:export
      ;; forms
   #:form-field
   #:value
   #:client-value
   #:tabindex

   #:form-component-mixin

   #:string-field
   #:textarea-field
   #:number-field
   #:integer-field
   #:range-field
   #:password-field
   #:checkbox-field
   #:file-upload-field

   #:select-field
   #:mapping-select-field
   #:alist-select-field
   #:hash-table-select-field
   #:plist-select-field
   #:data-set

   #:submit-button
   #:radio-group
   #:value-widget
   #:date-field
   #:date-ymd
   #:is-a-date-validator
   #:is-a-date-time-validator
   #:time-range-validator
   #:dmy-date-field
   #:mdy-date-field
   #:hidden-field

   #:validator
   #:validators
   #:validate
   #:message
   #:validp
   #:is-an-integer-validator
   #:number-range-validator  
   #:length-validator
   #:min-length
   #:max-length
   #:not-empty-validator
   #:string=-validator
   #:integer-range-validator
   #:regex-validator
   #:regex
   #:hostname-validator
   #:e-mail-address-validator
   #:phone-number-validator

   #:form-fields-of
   #:default-validp ; not sure if this should be exported
   ))

(defpackage :ucw-forms.simple-form
  (:use :cl :ucw-core :ucw :ucw-forms)
  (:import-from :arnesi :defgeneric/cc :defmethod/cc :if-bind)
  (:nicknames :ucw-simple-form)
  (:export
   ;; Simple Form
   :simple-form
   :file-upload-form
   :form-invalid-p
   :form-fields
   
   :form-validator
   :make-validators

   :process-form
   :cancel-form

   :define-html-form))

(defpackage :ucw-forms-tags
  (:use :cl :ucw-core :ucw-standard :yaclml)
  (:import-from :arnesi :rebinding :when-bind :with-call/cc :with-unique-names))