aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/data/format/css/value.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/data/format/css/value.lux')
-rw-r--r--stdlib/source/library/lux/data/format/css/value.lux2548
1 files changed, 1268 insertions, 1280 deletions
diff --git a/stdlib/source/library/lux/data/format/css/value.lux b/stdlib/source/library/lux/data/format/css/value.lux
index 9569c445b..ae4393448 100644
--- a/stdlib/source/library/lux/data/format/css/value.lux
+++ b/stdlib/source/library/lux/data/format/css/value.lux
@@ -33,21 +33,19 @@
(template: (enumeration: <abstraction> <representation> <out> <sample>+ <definition>+)
(abstract: .public <abstraction>
- {}
-
<representation>
- (def: .public <out>
- (-> <abstraction> <representation>)
- (|>> :representation))
+ [(def: .public <out>
+ (-> <abstraction> <representation>)
+ (|>> :representation))
- (`` (template [<name> <value>]
- [(def: .public <name> <abstraction> (:abstraction <value>))]
+ (`` (template [<name> <value>]
+ [(def: .public <name> <abstraction> (:abstraction <value>))]
- (~~ (template.spliced <sample>+))
- ))
+ (~~ (template.spliced <sample>+))
+ ))
- (template.spliced <definition>+)))
+ (template.spliced <definition>+)]))
(template: (multi: <multi> <type> <separator>)
(def: .public (<multi> pre post)
@@ -64,1281 +62,1271 @@
(|> raw (text.split_at 1) maybe.trusted product.right))))
(abstract: .public (Value brand)
- {}
-
Text
- (def: .public value
- (-> (Value Any) Text)
- (|>> :representation))
-
- (template [<name> <value>]
- [(def: .public <name> Value (:abstraction <value>))]
-
- [initial "initial"]
- [inherit "inherit"]
- [unset "unset"]
- )
-
- (template [<brand> <alias>+ <value>+]
- [(abstract: .public <brand> {} Any)
-
- (`` (template [<name> <value>]
- [(def: .public <name>
- (Value <brand>)
- (:abstraction <value>))]
-
- (~~ (template.spliced <alias>+))))
-
- (with_expansions [<rows> (template.spliced <value>+)]
- (template [<value>]
- [(`` (def: .public (~~ (..text_identifier <value>))
- (Value <brand>)
- (:abstraction <value>)))]
-
- <rows>))]
-
- [All
- []
- []]
-
- [Number
- []
- []]
-
- [Length
- []
- []]
-
- [Time
- []
- []]
-
- [Thickness
- []
- [["medium"]
- ["thin"]
- ["thick"]]]
-
- [Slice
- [[full_slice "fill"]]
- []]
-
- [Alignment
- [[auto_alignment "auto"]]
- [["stretch"]
- ["center"]
- ["flex-start"]
- ["flex-end"]
- ["baseline"]
- ["space-between"]
- ["space-around"]]]
-
- [Animation
- []
- []]
-
- [Animation_Direction
- [[normal_direction "normal"]]
- [["reverse"]
- ["alternate"]
- ["alternate-reverse"]]]
-
- [Animation_Fill
- [[fill_forwards "forwards"]
- [fill_backwards "backwards"]
- [fill_both "both"]]
- []]
-
- [Column_Fill
- []
- [["balance"]
- ["auto"]]]
-
- [Column_Span
- []
- [["all"]]]
-
- [Iteration
- []
- [["infinite"]]]
-
- [Count
- []
- []]
-
- [Play
- []
- [["paused"]
- ["running"]]]
-
- [Timing
- []
- [["linear"]
- ["ease"]
- ["ease-in"]
- ["ease-out"]
- ["ease-in-out"]
- ["step-start"]
- ["step-end"]]]
-
- [Visibility
- [[invisible "hidden"]
- [collapse_visibility "collapse"]]
- [["visible"]]]
-
- [Attachment
- [[scroll_attachment "scroll"]
- [fixed_attachment "fixed"]
- [local_attachment "local"]]
- []]
-
- [Blend
- [[normal_blend "normal"]]
- [["multiply"]
- ["screen"]
- ["overlay"]
- ["darken"]
- ["lighten"]
- ["color-dodge"]
- ["color-burn"]
- ["difference"]
- ["exclusion"]
- ["hue"]
- ["saturation"]
- ["color"]
- ["luminosity"]]]
-
- [Span
- []
- [["border-box"]
- ["padding-box"]
- ["content-box"]]]
-
- [Image
- [[no_image "none"]]
- []]
-
- [Repeat
- [[stretch_repeat "stretch"]]
- [["repeat"]
- ["repeat-x"]
- ["repeat-y"]
- ["no-repeat"]
- ["space"]
- ["round"]]]
-
- [Location
- [[left_top "left top"]
- [left_center "left center"]
- [left_bottom "left bottom"]
- [right_top "right top"]
- [right_center "right center"]
- [right_bottom "right bottom"]
- [center_top "center top"]
- [center_center "center center"]
- [center_bottom "center bottom"]]
- []]
-
- [Fit
- [[no_fit "none"]]
- [["fill"]
- ["cover"]
- ["contain"]
- ["scale-down"]]]
-
- [Border
- []
- [["hidden"]
- ["dotted"]
- ["dashed"]
- ["solid"]
- ["double"]
- ["groove"]
- ["ridge"]
- ["inset"]
- ["outset"]]]
-
- [Collapse
- []
- [["separate"]
- ["collapse"]]]
-
- [Box_Decoration_Break
- []
- [["slice"]
- ["clone"]]]
-
- [Caption
- []
- [["top"]
- ["bottom"]]]
-
- [Float
- [[float_left "left"]
- [float_right "right"]]
- []]
-
- [Clear
- [[clear_left "left"]
- [clear_right "right"]
- [clear_both "both"]]
- []]
-
- [Counter
- []
- []]
-
- [Content
- []
- [["open-quote"]
- ["close-quote"]
- ["no-open-quote"]
- ["no-close-quote"]]]
-
- [Cursor
- [[horizontal_text "text"]
- [no_cursor "none"]]
- [["alias"]
- ["all-scroll"]
- ["cell"]
- ["context-menu"]
- ["col-resize"]
- ["copy"]
- ["crosshair"]
- ["default"]
- ["e-resize"]
- ["ew-resize"]
- ["grab"]
- ["grabbing"]
- ["help"]
- ["move"]
- ["n-resize"]
- ["ne-resize"]
- ["nesw-resize"]
- ["ns-resize"]
- ["nw-resize"]
- ["nwse-resize"]
- ["no-drop"]
- ["not-allowed"]
- ["pointer"]
- ["progress"]
- ["row-resize"]
- ["s-resize"]
- ["se-resize"]
- ["sw-resize"]
- ["vertical-text"]
- ["w-resize"]
- ["wait"]
- ["zoom-in"]
- ["zoom-out"]]]
-
- [Shadow
- []
- []]
-
- [Clip
- []
- []]
-
- [Text_Direction
- [[left_to_right "ltr"]
- [right_to_left "rtl"]]
- []]
-
- [Display
- [[grid_display "grid"]
- [no_display "none"]]
- [["inline"]
- ["block"]
- ["contents"]
- ["flex"]
- ["inline-block"]
- ["inline-flex"]
- ["inline-grid"]
- ["inline-table"]
- ["list-item"]
- ["run-in"]
- ["table"]
- ["table-caption"]
- ["table-column-group"]
- ["table-header-group"]
- ["table-footer-group"]
- ["table-row-group"]
- ["table-cell"]
- ["table-column"]
- ["table-row"]]]
-
- [Empty
- []
- [["show"]
- ["hide"]]]
-
- [Filter
- []
- []]
-
- [Flex_Direction
- []
- [["row"]
- ["row-reverse"]
- ["column"]
- ["column-reverse"]]]
-
- [Flex_Wrap
- [[no_wrap "nowrap"]]
- [["wrap"]
- ["wrap_reverse"]]]
-
- [Font_Kerning
- [[auto_kerning "auto"]
- [normal_kerning "normal"]
- [no_kerning "none"]]
- []]
-
- [Font_Size
- [[medium_size "medium"]
- [xx_small_size "xx-small"]
- [x_small_size "x-small"]
- [small_size "small"]
- [large_size "large"]
- [x_large_size "x-large"]
- [xx_large_size "xx-large"]
- [smaller_size "smaller"]
- [larger_size "larger"]]
- []]
-
- [Font_Stretch
- [[normal_stretch "normal"]]
- [["condensed"]
- ["ultra-condensed"]
- ["extra-condensed"]
- ["semi-condensed"]
- ["expanded"]
- ["semi-expanded"]
- ["extra-expanded"]
- ["ultra-expanded"]]]
-
- [Font_Style
- [[normal_style "normal"]]
- [["italic"]
- ["oblique"]]]
-
- [Font_Weight
- [[normal_weight "normal"]
- [weight_100 "100"]
- [weight_200 "200"]
- [weight_300 "300"]
- [weight_400 "400"]
- [weight_500 "500"]
- [weight_600 "600"]
- [weight_700 "700"]
- [weight_800 "800"]
- [weight_900 "900"]]
- [["bold"]]]
-
- [Font_Variant
- [[normal_font "normal"]]
- [["small-caps"]]]
-
- [Grid
- []
- []]
-
- [Grid_Content
- [[auto_content "auto"]]
- [["max-content"]
- ["min-content"]]]
-
- [Grid_Flow
- [[row_flow "row"]
- [column_flow "column"]
- [dense_flow "dense"]
- [row_dense_flow "row dense"]
- [column_dense_flow "column dense"]]
- []]
-
- [Grid_Span
- [[auto_span "auto"]]
- []]
-
- [Grid_Template
- []
- []]
-
- [Hanging_Punctuation
- [[no_hanging_punctuation "none"]]
- [["first"]
- ["last"]
- ["allow-end"]
- ["force-end"]]]
-
- [Hyphens
- [[no_hyphens "none"]
- [manual_hyphens "manual"]
- [auto_hyphens "auto"]]
- []]
-
- [Orientation
- []
- [["portrait"]
- ["landscape"]]]
-
- [Resolution
- []
- []]
-
- [Scan
- []
- [["interlace"]
- ["progressive"]]]
-
- [Boolean
- [[false "0"]
- [true "1"]]
- []]
-
- [Update
- [[no_update "none"]
- [slow_update "slow"]
- [fast_update "fast"]]
- []]
-
- [Block_Overflow
- [[no_block_overflow "none"]
- [scroll_block_overflow "scroll"]
- [optional_paged_block_overflow "optional-paged"]
- [paged_block_overflow "paged"]]
- []]
-
- [Inline_Overflow
- [[no_inline_overflow "none"]
- [scroll_inline_overflow "scroll"]]
- []]
-
- [Display_Mode
- []
- [["fullscreen"]
- ["standalone"]
- ["minimal-ui"]
- ["browser"]]]
-
- [Color_Gamut
- []
- [["srgb"]
- ["p3"]
- ["rec2020"]]]
-
- [Inverted_Colors
- [[no_inverted_colors "none"]
- [inverted_colors "inverted"]]
- []]
-
- [Pointer
- [[no_pointer "none"]
- [coarse_pointer "coarse"]
- [fine_pointer "fine"]]
- []]
-
- [Hover
- [[no_hover "none"]]
- [["hover"]]]
-
- [Light
- [[dim_light "dim"]
- [normal_light "normal"]
- [washed_light "washed"]]
- []]
-
- [Ratio
- []
- []]
-
- [Scripting
- [[no_scripting "none"]
- [initial_scripting_only "initial-only"]
- [scripting_enabled "enabled"]]
- []]
-
- [Motion
- [[no_motion_preference "no-preference"]
- [reduced_motion "reduce"]]
- []]
-
- [Color_Scheme
- [[no_color_scheme_preference "no-preference"]
- [light_color_scheme "light"]
- [dark_color_scheme "dark"]]
- []]
-
- [Isolation
- [[auto_isolation "auto"]]
- [["isolate"]]]
-
- [List_Style_Position
- []
- [["inside"]
- ["outside"]]]
-
- [List_Style_Type
- [[no_list_style "none"]]
- [["disc"]
- ["armenian"]
- ["circle"]
- ["cjk-ideographic"]
- ["decimal"]
- ["decimal-leading-zero"]
- ["georgian"]
- ["hebrew"]
- ["hiragana"]
- ["hiragana-iroha"]
- ["katakana"]
- ["katakana-iroha"]
- ["lower-alpha"]
- ["lower-greek"]
- ["lower-latin"]
- ["lower-roman"]
- ["square"]
- ["upper-alpha"]
- ["upper-greek"]
- ["upper-latin"]
- ["upper-roman"]]]
-
- [Color
- []
- []]
-
- [Overflow
- [[visible_overflow "visible"]
- [hidden_overflow "hidden"]
- [scroll_overflow "scroll"]
- [auto_overflow "auto"]]
- []]
-
- [Page_Break
- [[auto_page_break "auto"]
- [always_page_break "always"]
- [avoid_page_break "avoid"]
- [left_page_break "left"]
- [right_page_break "right"]]
- []]
-
- [Pointer_Events
- [[auto_pointer_events "auto"]
- [no_pointer_events "none"]]
- []]
-
- [Position
- []
- [["static"]
- ["absolute"]
- ["fixed"]
- ["relative"]
- ["sticky"]]]
-
- [Quotes
- [[no_quotes "none"]]
- []]
-
- [Resize
- [[resize_none "none"]
- [resize_both "both"]
- [resize_horizontal "horizontal"]
- [resize_vertical "vertical"]]
- []]
-
- [Scroll_Behavior
- [[auto_scroll_behavior "auto"]
- [smooth_scroll_behavior "smooth"]]
- []]
-
- [Table_Layout
- [[auto_table_layout "auto"]
- [fixed_table_layout "fixed"]]
- []]
-
- [Text_Align
- [[left_text_align "left"]
- [right_text_align "right"]
- [center_text_align "center"]
- [justify_text_align "justify"]]
- []]
-
- [Text_Align_Last
- [[auto_text_align_last "auto"]
- [left_text_align_last "left"]
- [right_text_align_last "right"]
- [center_text_align_last "center"]
- [justify_text_align_last "justify"]
- [start_text_align_last "start"]
- [end_text_align_last "end"]]
- []]
-
- [Text_Decoration_Line
- [[no_text_decoration_line "none"]
- [underline_text_decoration_line "underline"]
- [overline_text_decoration_line "overline"]
- [line_through_text_decoration_line "line-through"]]
- []]
-
- [Text_Decoration_Style
- [[solid_text_decoration_style "solid"]
- [double_text_decoration_style "double"]
- [dotted_text_decoration_style "dotted"]
- [dashed_text_decoration_style "dashed"]
- [wavy_text_decoration_style "wavy"]]
- []]
-
- [Text_Justification
- [[auto_text_justification "auto"]
- [inter_word_text_justification "inter-word"]
- [inter_character_text_justification "inter-character"]
- [no_text_justification "none"]]
- []]
-
- [Text_Overflow
- [[clip_text_overflow "clip"]
- [ellipsis_text_overflow "ellipsis"]]
- []]
-
- [Text_Transform
- [[no_text_transform "none"]]
- [["capitalize"]
- ["uppercase"]
- ["lowercase"]]]
-
- [Transform
- [[no_transform "none"]]
- []]
-
- [Transform_Origin
- []
- []]
-
- [Transform_Style
- []
- [["flat"]
- ["preserve_3d"]]]
-
- [Transition
- [[transition_none "none"]
- [transition_all "all"]]
- []]
-
- [Bidi
- [[bidi_normal "normal"]
- [bidi_embed "embed"]
- [bidi_isolate "isolate"]
- [bidi_isolate_override "isolate-override"]
- [bidi_plaintext "plaintext"]]
- [["bidi-override"]]]
-
- [User_Select
- [[user_select_auto "auto"]
- [user_select_none "none"]
- [user_select_text "text"]
- [user_select_all "all"]]
- []]
-
- [Vertical_Align
- [[vertical_align_baseline "baseline"]
- [vertical_align_sub "sub"]
- [vertical_align_super "super"]
- [vertical_align_top "top"]
- [vertical_align_text_top "text-top"]
- [vertical_align_middle "middle"]
- [vertical_align_bottom "bottom"]
- [vertical_align_text_bottom "text-bottom"]]
- []]
-
- [White_Space
- [[normal_white_space "normal"]
- [no_wrap_white_space "nowrap"]
- [pre_white_space "pre"]
- [pre_line_white_space "pre-line"]
- [pre_wrap_white_space "pre-wrap"]]
- []]
-
- [Word_Break
- [[normal_word_break "normal"]]
- [["break-all"]
- ["keep-all"]
- ["break-word"]]]
-
- [Word_Wrap
- [[normal_word_wrap "normal"]
- [break_word_word_wrap "break-word"]]
- []]
-
- [Writing_Mode
- [[top_to_bottom_writing_mode "horizontal-tb"]
- [left_to_right_writing_mode "vertical-rl"]
- [right_to_left_writing_mode "vertical-lr"]]
- []]
-
- [Z_Index
- []
- []]
- )
-
- (def: value_separator ",")
-
- (def: (apply name inputs)
- (-> Text (List Text) Value)
- (|> inputs
- (text.interposed ..value_separator)
- (text.enclosed ["(" ")"])
- (format name)
- :abstraction))
-
- (enumeration: Step Text
- step
- [[start "start"]
- [end "end"]]
- [])
-
- (def: .public (steps intervals step)
- (-> Nat Step (Value Timing))
- (..apply "steps" (list (%.nat intervals) (..step step))))
-
- (def: .public (cubic_bezier p0 p1 p2 p3)
- (-> Frac Frac Frac Frac (Value Timing))
- (|> (list p0 p1 p2 p3)
- (list\each %number)
- (..apply "cubic-bezier")))
-
- (template [<name> <brand>]
- [(def: .public <name>
- (-> Nat (Value <brand>))
- (|>> %.nat :abstraction))]
-
- [iteration Iteration]
- [count Count]
- [slice_number/1 Slice]
- [span_line Grid_Span]
- )
-
- (def: .public animation
- (-> Label (Value Animation))
- (|>> :abstraction))
-
- (def: .public (rgb color)
- (-> color.Color (Value Color))
- (let [[red green blue] (color.rgb color)]
- (..apply "rgb" (list (%.nat red)
- (%.nat green)
- (%.nat blue)))))
-
- (def: .public (rgba pigment)
- (-> color.Pigment (Value Color))
- (let [(^slots [#color.color #color.alpha]) pigment
- [red green blue] (color.rgb color)]
- (..apply "rgba" (list (%.nat red)
- (%.nat green)
- (%.nat blue)
- (if (r.= (\ r.interval top) alpha)
- "1.0"
- (format "0" (%.rev alpha)))))))
-
- (template [<name> <suffix>]
- [(def: .public (<name> value)
- (-> Frac (Value Length))
- (:abstraction (format (%number value) <suffix>)))]
-
- [em "em"]
- [ex "ex"]
- [rem "rem"]
- [ch "ch"]
- [vw "vw"]
- [vh "vh"]
- [vmin "vmin"]
- [vmax "vmax"]
- [% "%"]
- [cm "cm"]
- [mm "mm"]
- [in "in"]
- [px "px"]
- [pt "pt"]
- [pc "pc"]
- [fr "fr"]
- )
-
- (def: (%int value)
- (Format Int)
- (if (i.< +0 value)
- (%.int value)
- (%.nat (.nat value))))
-
- (template [<name> <suffix>]
- [(def: .public (<name> value)
- (-> Int (Value Time))
- (:abstraction (format (if (i.< +0 value)
- (%.int value)
- (%.nat (.nat value)))
- <suffix>)))]
-
-
- [seconds "s"]
- [milli_seconds "ms"]
- )
-
- (def: .public thickness
- (-> (Value Length) (Value Thickness))
- (|>> :transmutation))
-
- (def: slice_separator " ")
-
- (def: .public (slice_number/2 horizontal vertical)
- (-> Nat Nat (Value Slice))
- (:abstraction (format (%.nat horizontal) ..slice_separator
- (%.nat vertical))))
-
- (abstract: .public Stop
- {}
-
- Text
-
- (def: .public stop
- (-> (Value Color) Stop)
- (|>> (:representation Value) (:abstraction Stop)))
-
- (def: stop_separator " ")
-
- (def: .public (single_stop length color)
- (-> (Value Length) (Value Color) Stop)
- (:abstraction (format (:representation Value color) ..stop_separator
- (:representation Value length))))
-
- (def: .public (double_stop start end color)
- (-> (Value Length) (Value Length) (Value Color) Stop)
- (:abstraction (format (:representation Value color) ..stop_separator
- (:representation Value start) ..stop_separator
- (:representation Value end))))
-
- (abstract: .public Hint
- {}
-
- Text
-
- (def: .public hint
- (-> (Value Length) Hint)
- (|>> (:representation Value) (:abstraction Hint)))
-
- (def: (with_hint [hint stop])
- (-> [(Maybe Hint) Stop] Text)
- (case hint
- #.None
- (:representation Stop stop)
+ [(def: .public value
+ (-> (Value Any) Text)
+ (|>> :representation))
+
+ (template [<name> <value>]
+ [(def: .public <name> Value (:abstraction <value>))]
+
+ [initial "initial"]
+ [inherit "inherit"]
+ [unset "unset"]
+ )
+
+ (template [<brand> <alias>+ <value>+]
+ [(abstract: .public <brand> Any [])
+
+ (`` (template [<name> <value>]
+ [(def: .public <name>
+ (Value <brand>)
+ (:abstraction <value>))]
+
+ (~~ (template.spliced <alias>+))))
+
+ (with_expansions [<rows> (template.spliced <value>+)]
+ (template [<value>]
+ [(`` (def: .public (~~ (..text_identifier <value>))
+ (Value <brand>)
+ (:abstraction <value>)))]
- (#.Some hint)
- (format (:representation Hint hint) ..value_separator (:representation Stop stop))))))
-
- (type: .public (List/1 a)
- [a (List a)])
-
- (abstract: .public Angle
- {}
-
- Text
-
- (def: .public angle
- (-> Angle Text)
- (|>> :representation))
-
- (def: .public (turn value)
- (-> Rev Angle)
- (:abstraction (format (%.rev value) "turn")))
-
- (def: degree_limit Nat 360)
-
- (def: .public (degree value)
- (-> Nat Angle)
- (:abstraction (format (%.nat (n.% ..degree_limit value)) "deg")))
-
- (template [<degree> <name>]
- [(def: .public <name>
- Angle
- (..degree <degree>))]
+ <rows>))]
+
+ [All
+ []
+ []]
+
+ [Number
+ []
+ []]
+
+ [Length
+ []
+ []]
+
+ [Time
+ []
+ []]
+
+ [Thickness
+ []
+ [["medium"]
+ ["thin"]
+ ["thick"]]]
+
+ [Slice
+ [[full_slice "fill"]]
+ []]
+
+ [Alignment
+ [[auto_alignment "auto"]]
+ [["stretch"]
+ ["center"]
+ ["flex-start"]
+ ["flex-end"]
+ ["baseline"]
+ ["space-between"]
+ ["space-around"]]]
+
+ [Animation
+ []
+ []]
+
+ [Animation_Direction
+ [[normal_direction "normal"]]
+ [["reverse"]
+ ["alternate"]
+ ["alternate-reverse"]]]
+
+ [Animation_Fill
+ [[fill_forwards "forwards"]
+ [fill_backwards "backwards"]
+ [fill_both "both"]]
+ []]
+
+ [Column_Fill
+ []
+ [["balance"]
+ ["auto"]]]
+
+ [Column_Span
+ []
+ [["all"]]]
+
+ [Iteration
+ []
+ [["infinite"]]]
+
+ [Count
+ []
+ []]
+
+ [Play
+ []
+ [["paused"]
+ ["running"]]]
+
+ [Timing
+ []
+ [["linear"]
+ ["ease"]
+ ["ease-in"]
+ ["ease-out"]
+ ["ease-in-out"]
+ ["step-start"]
+ ["step-end"]]]
+
+ [Visibility
+ [[invisible "hidden"]
+ [collapse_visibility "collapse"]]
+ [["visible"]]]
+
+ [Attachment
+ [[scroll_attachment "scroll"]
+ [fixed_attachment "fixed"]
+ [local_attachment "local"]]
+ []]
+
+ [Blend
+ [[normal_blend "normal"]]
+ [["multiply"]
+ ["screen"]
+ ["overlay"]
+ ["darken"]
+ ["lighten"]
+ ["color-dodge"]
+ ["color-burn"]
+ ["difference"]
+ ["exclusion"]
+ ["hue"]
+ ["saturation"]
+ ["color"]
+ ["luminosity"]]]
+
+ [Span
+ []
+ [["border-box"]
+ ["padding-box"]
+ ["content-box"]]]
+
+ [Image
+ [[no_image "none"]]
+ []]
+
+ [Repeat
+ [[stretch_repeat "stretch"]]
+ [["repeat"]
+ ["repeat-x"]
+ ["repeat-y"]
+ ["no-repeat"]
+ ["space"]
+ ["round"]]]
+
+ [Location
+ [[left_top "left top"]
+ [left_center "left center"]
+ [left_bottom "left bottom"]
+ [right_top "right top"]
+ [right_center "right center"]
+ [right_bottom "right bottom"]
+ [center_top "center top"]
+ [center_center "center center"]
+ [center_bottom "center bottom"]]
+ []]
+
+ [Fit
+ [[no_fit "none"]]
+ [["fill"]
+ ["cover"]
+ ["contain"]
+ ["scale-down"]]]
+
+ [Border
+ []
+ [["hidden"]
+ ["dotted"]
+ ["dashed"]
+ ["solid"]
+ ["double"]
+ ["groove"]
+ ["ridge"]
+ ["inset"]
+ ["outset"]]]
+
+ [Collapse
+ []
+ [["separate"]
+ ["collapse"]]]
+
+ [Box_Decoration_Break
+ []
+ [["slice"]
+ ["clone"]]]
+
+ [Caption
+ []
+ [["top"]
+ ["bottom"]]]
+
+ [Float
+ [[float_left "left"]
+ [float_right "right"]]
+ []]
+
+ [Clear
+ [[clear_left "left"]
+ [clear_right "right"]
+ [clear_both "both"]]
+ []]
+
+ [Counter
+ []
+ []]
+
+ [Content
+ []
+ [["open-quote"]
+ ["close-quote"]
+ ["no-open-quote"]
+ ["no-close-quote"]]]
+
+ [Cursor
+ [[horizontal_text "text"]
+ [no_cursor "none"]]
+ [["alias"]
+ ["all-scroll"]
+ ["cell"]
+ ["context-menu"]
+ ["col-resize"]
+ ["copy"]
+ ["crosshair"]
+ ["default"]
+ ["e-resize"]
+ ["ew-resize"]
+ ["grab"]
+ ["grabbing"]
+ ["help"]
+ ["move"]
+ ["n-resize"]
+ ["ne-resize"]
+ ["nesw-resize"]
+ ["ns-resize"]
+ ["nw-resize"]
+ ["nwse-resize"]
+ ["no-drop"]
+ ["not-allowed"]
+ ["pointer"]
+ ["progress"]
+ ["row-resize"]
+ ["s-resize"]
+ ["se-resize"]
+ ["sw-resize"]
+ ["vertical-text"]
+ ["w-resize"]
+ ["wait"]
+ ["zoom-in"]
+ ["zoom-out"]]]
+
+ [Shadow
+ []
+ []]
+
+ [Clip
+ []
+ []]
+
+ [Text_Direction
+ [[left_to_right "ltr"]
+ [right_to_left "rtl"]]
+ []]
+
+ [Display
+ [[grid_display "grid"]
+ [no_display "none"]]
+ [["inline"]
+ ["block"]
+ ["contents"]
+ ["flex"]
+ ["inline-block"]
+ ["inline-flex"]
+ ["inline-grid"]
+ ["inline-table"]
+ ["list-item"]
+ ["run-in"]
+ ["table"]
+ ["table-caption"]
+ ["table-column-group"]
+ ["table-header-group"]
+ ["table-footer-group"]
+ ["table-row-group"]
+ ["table-cell"]
+ ["table-column"]
+ ["table-row"]]]
+
+ [Empty
+ []
+ [["show"]
+ ["hide"]]]
+
+ [Filter
+ []
+ []]
+
+ [Flex_Direction
+ []
+ [["row"]
+ ["row-reverse"]
+ ["column"]
+ ["column-reverse"]]]
+
+ [Flex_Wrap
+ [[no_wrap "nowrap"]]
+ [["wrap"]
+ ["wrap_reverse"]]]
+
+ [Font_Kerning
+ [[auto_kerning "auto"]
+ [normal_kerning "normal"]
+ [no_kerning "none"]]
+ []]
+
+ [Font_Size
+ [[medium_size "medium"]
+ [xx_small_size "xx-small"]
+ [x_small_size "x-small"]
+ [small_size "small"]
+ [large_size "large"]
+ [x_large_size "x-large"]
+ [xx_large_size "xx-large"]
+ [smaller_size "smaller"]
+ [larger_size "larger"]]
+ []]
+
+ [Font_Stretch
+ [[normal_stretch "normal"]]
+ [["condensed"]
+ ["ultra-condensed"]
+ ["extra-condensed"]
+ ["semi-condensed"]
+ ["expanded"]
+ ["semi-expanded"]
+ ["extra-expanded"]
+ ["ultra-expanded"]]]
+
+ [Font_Style
+ [[normal_style "normal"]]
+ [["italic"]
+ ["oblique"]]]
+
+ [Font_Weight
+ [[normal_weight "normal"]
+ [weight_100 "100"]
+ [weight_200 "200"]
+ [weight_300 "300"]
+ [weight_400 "400"]
+ [weight_500 "500"]
+ [weight_600 "600"]
+ [weight_700 "700"]
+ [weight_800 "800"]
+ [weight_900 "900"]]
+ [["bold"]]]
+
+ [Font_Variant
+ [[normal_font "normal"]]
+ [["small-caps"]]]
+
+ [Grid
+ []
+ []]
+
+ [Grid_Content
+ [[auto_content "auto"]]
+ [["max-content"]
+ ["min-content"]]]
+
+ [Grid_Flow
+ [[row_flow "row"]
+ [column_flow "column"]
+ [dense_flow "dense"]
+ [row_dense_flow "row dense"]
+ [column_dense_flow "column dense"]]
+ []]
+
+ [Grid_Span
+ [[auto_span "auto"]]
+ []]
+
+ [Grid_Template
+ []
+ []]
+
+ [Hanging_Punctuation
+ [[no_hanging_punctuation "none"]]
+ [["first"]
+ ["last"]
+ ["allow-end"]
+ ["force-end"]]]
+
+ [Hyphens
+ [[no_hyphens "none"]
+ [manual_hyphens "manual"]
+ [auto_hyphens "auto"]]
+ []]
+
+ [Orientation
+ []
+ [["portrait"]
+ ["landscape"]]]
+
+ [Resolution
+ []
+ []]
+
+ [Scan
+ []
+ [["interlace"]
+ ["progressive"]]]
+
+ [Boolean
+ [[false "0"]
+ [true "1"]]
+ []]
+
+ [Update
+ [[no_update "none"]
+ [slow_update "slow"]
+ [fast_update "fast"]]
+ []]
+
+ [Block_Overflow
+ [[no_block_overflow "none"]
+ [scroll_block_overflow "scroll"]
+ [optional_paged_block_overflow "optional-paged"]
+ [paged_block_overflow "paged"]]
+ []]
+
+ [Inline_Overflow
+ [[no_inline_overflow "none"]
+ [scroll_inline_overflow "scroll"]]
+ []]
+
+ [Display_Mode
+ []
+ [["fullscreen"]
+ ["standalone"]
+ ["minimal-ui"]
+ ["browser"]]]
+
+ [Color_Gamut
+ []
+ [["srgb"]
+ ["p3"]
+ ["rec2020"]]]
+
+ [Inverted_Colors
+ [[no_inverted_colors "none"]
+ [inverted_colors "inverted"]]
+ []]
+
+ [Pointer
+ [[no_pointer "none"]
+ [coarse_pointer "coarse"]
+ [fine_pointer "fine"]]
+ []]
+
+ [Hover
+ [[no_hover "none"]]
+ [["hover"]]]
+
+ [Light
+ [[dim_light "dim"]
+ [normal_light "normal"]
+ [washed_light "washed"]]
+ []]
+
+ [Ratio
+ []
+ []]
+
+ [Scripting
+ [[no_scripting "none"]
+ [initial_scripting_only "initial-only"]
+ [scripting_enabled "enabled"]]
+ []]
+
+ [Motion
+ [[no_motion_preference "no-preference"]
+ [reduced_motion "reduce"]]
+ []]
+
+ [Color_Scheme
+ [[no_color_scheme_preference "no-preference"]
+ [light_color_scheme "light"]
+ [dark_color_scheme "dark"]]
+ []]
+
+ [Isolation
+ [[auto_isolation "auto"]]
+ [["isolate"]]]
+
+ [List_Style_Position
+ []
+ [["inside"]
+ ["outside"]]]
+
+ [List_Style_Type
+ [[no_list_style "none"]]
+ [["disc"]
+ ["armenian"]
+ ["circle"]
+ ["cjk-ideographic"]
+ ["decimal"]
+ ["decimal-leading-zero"]
+ ["georgian"]
+ ["hebrew"]
+ ["hiragana"]
+ ["hiragana-iroha"]
+ ["katakana"]
+ ["katakana-iroha"]
+ ["lower-alpha"]
+ ["lower-greek"]
+ ["lower-latin"]
+ ["lower-roman"]
+ ["square"]
+ ["upper-alpha"]
+ ["upper-greek"]
+ ["upper-latin"]
+ ["upper-roman"]]]
+
+ [Color
+ []
+ []]
+
+ [Overflow
+ [[visible_overflow "visible"]
+ [hidden_overflow "hidden"]
+ [scroll_overflow "scroll"]
+ [auto_overflow "auto"]]
+ []]
+
+ [Page_Break
+ [[auto_page_break "auto"]
+ [always_page_break "always"]
+ [avoid_page_break "avoid"]
+ [left_page_break "left"]
+ [right_page_break "right"]]
+ []]
+
+ [Pointer_Events
+ [[auto_pointer_events "auto"]
+ [no_pointer_events "none"]]
+ []]
+
+ [Position
+ []
+ [["static"]
+ ["absolute"]
+ ["fixed"]
+ ["relative"]
+ ["sticky"]]]
+
+ [Quotes
+ [[no_quotes "none"]]
+ []]
+
+ [Resize
+ [[resize_none "none"]
+ [resize_both "both"]
+ [resize_horizontal "horizontal"]
+ [resize_vertical "vertical"]]
+ []]
+
+ [Scroll_Behavior
+ [[auto_scroll_behavior "auto"]
+ [smooth_scroll_behavior "smooth"]]
+ []]
+
+ [Table_Layout
+ [[auto_table_layout "auto"]
+ [fixed_table_layout "fixed"]]
+ []]
+
+ [Text_Align
+ [[left_text_align "left"]
+ [right_text_align "right"]
+ [center_text_align "center"]
+ [justify_text_align "justify"]]
+ []]
+
+ [Text_Align_Last
+ [[auto_text_align_last "auto"]
+ [left_text_align_last "left"]
+ [right_text_align_last "right"]
+ [center_text_align_last "center"]
+ [justify_text_align_last "justify"]
+ [start_text_align_last "start"]
+ [end_text_align_last "end"]]
+ []]
+
+ [Text_Decoration_Line
+ [[no_text_decoration_line "none"]
+ [underline_text_decoration_line "underline"]
+ [overline_text_decoration_line "overline"]
+ [line_through_text_decoration_line "line-through"]]
+ []]
+
+ [Text_Decoration_Style
+ [[solid_text_decoration_style "solid"]
+ [double_text_decoration_style "double"]
+ [dotted_text_decoration_style "dotted"]
+ [dashed_text_decoration_style "dashed"]
+ [wavy_text_decoration_style "wavy"]]
+ []]
+
+ [Text_Justification
+ [[auto_text_justification "auto"]
+ [inter_word_text_justification "inter-word"]
+ [inter_character_text_justification "inter-character"]
+ [no_text_justification "none"]]
+ []]
+
+ [Text_Overflow
+ [[clip_text_overflow "clip"]
+ [ellipsis_text_overflow "ellipsis"]]
+ []]
+
+ [Text_Transform
+ [[no_text_transform "none"]]
+ [["capitalize"]
+ ["uppercase"]
+ ["lowercase"]]]
+
+ [Transform
+ [[no_transform "none"]]
+ []]
+
+ [Transform_Origin
+ []
+ []]
+
+ [Transform_Style
+ []
+ [["flat"]
+ ["preserve_3d"]]]
+
+ [Transition
+ [[transition_none "none"]
+ [transition_all "all"]]
+ []]
+
+ [Bidi
+ [[bidi_normal "normal"]
+ [bidi_embed "embed"]
+ [bidi_isolate "isolate"]
+ [bidi_isolate_override "isolate-override"]
+ [bidi_plaintext "plaintext"]]
+ [["bidi-override"]]]
+
+ [User_Select
+ [[user_select_auto "auto"]
+ [user_select_none "none"]
+ [user_select_text "text"]
+ [user_select_all "all"]]
+ []]
+
+ [Vertical_Align
+ [[vertical_align_baseline "baseline"]
+ [vertical_align_sub "sub"]
+ [vertical_align_super "super"]
+ [vertical_align_top "top"]
+ [vertical_align_text_top "text-top"]
+ [vertical_align_middle "middle"]
+ [vertical_align_bottom "bottom"]
+ [vertical_align_text_bottom "text-bottom"]]
+ []]
+
+ [White_Space
+ [[normal_white_space "normal"]
+ [no_wrap_white_space "nowrap"]
+ [pre_white_space "pre"]
+ [pre_line_white_space "pre-line"]
+ [pre_wrap_white_space "pre-wrap"]]
+ []]
+
+ [Word_Break
+ [[normal_word_break "normal"]]
+ [["break-all"]
+ ["keep-all"]
+ ["break-word"]]]
+
+ [Word_Wrap
+ [[normal_word_wrap "normal"]
+ [break_word_word_wrap "break-word"]]
+ []]
+
+ [Writing_Mode
+ [[top_to_bottom_writing_mode "horizontal-tb"]
+ [left_to_right_writing_mode "vertical-rl"]
+ [right_to_left_writing_mode "vertical-lr"]]
+ []]
+
+ [Z_Index
+ []
+ []]
+ )
+
+ (def: value_separator ",")
+
+ (def: (apply name inputs)
+ (-> Text (List Text) Value)
+ (|> inputs
+ (text.interposed ..value_separator)
+ (text.enclosed ["(" ")"])
+ (format name)
+ :abstraction))
+
+ (enumeration: Step Text
+ step
+ [[start "start"]
+ [end "end"]]
+ [])
+
+ (def: .public (steps intervals step)
+ (-> Nat Step (Value Timing))
+ (..apply "steps" (list (%.nat intervals) (..step step))))
+
+ (def: .public (cubic_bezier p0 p1 p2 p3)
+ (-> Frac Frac Frac Frac (Value Timing))
+ (|> (list p0 p1 p2 p3)
+ (list\each %number)
+ (..apply "cubic-bezier")))
+
+ (template [<name> <brand>]
+ [(def: .public <name>
+ (-> Nat (Value <brand>))
+ (|>> %.nat :abstraction))]
+
+ [iteration Iteration]
+ [count Count]
+ [slice_number/1 Slice]
+ [span_line Grid_Span]
+ )
+
+ (def: .public animation
+ (-> Label (Value Animation))
+ (|>> :abstraction))
+
+ (def: .public (rgb color)
+ (-> color.Color (Value Color))
+ (let [[red green blue] (color.rgb color)]
+ (..apply "rgb" (list (%.nat red)
+ (%.nat green)
+ (%.nat blue)))))
+
+ (def: .public (rgba pigment)
+ (-> color.Pigment (Value Color))
+ (let [(^slots [#color.color #color.alpha]) pigment
+ [red green blue] (color.rgb color)]
+ (..apply "rgba" (list (%.nat red)
+ (%.nat green)
+ (%.nat blue)
+ (if (r.= (\ r.interval top) alpha)
+ "1.0"
+ (format "0" (%.rev alpha)))))))
+
+ (template [<name> <suffix>]
+ [(def: .public (<name> value)
+ (-> Frac (Value Length))
+ (:abstraction (format (%number value) <suffix>)))]
+
+ [em "em"]
+ [ex "ex"]
+ [rem "rem"]
+ [ch "ch"]
+ [vw "vw"]
+ [vh "vh"]
+ [vmin "vmin"]
+ [vmax "vmax"]
+ [% "%"]
+ [cm "cm"]
+ [mm "mm"]
+ [in "in"]
+ [px "px"]
+ [pt "pt"]
+ [pc "pc"]
+ [fr "fr"]
+ )
+
+ (def: (%int value)
+ (Format Int)
+ (if (i.< +0 value)
+ (%.int value)
+ (%.nat (.nat value))))
+
+ (template [<name> <suffix>]
+ [(def: .public (<name> value)
+ (-> Int (Value Time))
+ (:abstraction (format (if (i.< +0 value)
+ (%.int value)
+ (%.nat (.nat value)))
+ <suffix>)))]
+
+
+ [seconds "s"]
+ [milli_seconds "ms"]
+ )
+
+ (def: .public thickness
+ (-> (Value Length) (Value Thickness))
+ (|>> :transmutation))
+
+ (def: slice_separator " ")
+
+ (def: .public (slice_number/2 horizontal vertical)
+ (-> Nat Nat (Value Slice))
+ (:abstraction (format (%.nat horizontal) ..slice_separator
+ (%.nat vertical))))
+
+ (abstract: .public Stop
+ Text
+
+ [(def: .public stop
+ (-> (Value Color) Stop)
+ (|>> (:representation Value) (:abstraction Stop)))
+
+ (def: stop_separator " ")
+
+ (def: .public (single_stop length color)
+ (-> (Value Length) (Value Color) Stop)
+ (:abstraction (format (:representation Value color) ..stop_separator
+ (:representation Value length))))
+
+ (def: .public (double_stop start end color)
+ (-> (Value Length) (Value Length) (Value Color) Stop)
+ (:abstraction (format (:representation Value color) ..stop_separator
+ (:representation Value start) ..stop_separator
+ (:representation Value end))))
+
+ (abstract: .public Hint
+ Text
+
+ [(def: .public hint
+ (-> (Value Length) Hint)
+ (|>> (:representation Value) (:abstraction Hint)))
+
+ (def: (with_hint [hint stop])
+ (-> [(Maybe Hint) Stop] Text)
+ (case hint
+ #.None
+ (:representation Stop stop)
+
+ (#.Some hint)
+ (format (:representation Hint hint) ..value_separator (:representation Stop stop))))])])
+
+ (type: .public (List/1 a)
+ [a (List a)])
+
+ (abstract: .public Angle
+ Text
+
+ [(def: .public angle
+ (-> Angle Text)
+ (|>> :representation))
+
+ (def: .public (turn value)
+ (-> Rev Angle)
+ (:abstraction (format (%.rev value) "turn")))
+
+ (def: degree_limit Nat 360)
- [000 to_top]
- [090 to_right]
- [180 to_bottom]
- [270 to_left]
- )
-
- (template [<name> <function>]
- [(def: .public (<name> angle start next)
- (-> Angle Stop (List/1 [(Maybe Hint) Stop]) (Value Image))
- (let [[now after] next]
- (..apply <function> (list& (:representation Angle angle)
- (with_hint now)
- (list\each with_hint after)))))]
-
- [linear_gradient "linear-gradient"]
- [repeating_linear_gradient "repeating-linear-gradient"]
- )
- )
-
- (abstract: .public Percentage
- {}
-
- Text
-
- (def: .public percentage
- (-> Percentage Text)
- (|>> :representation))
-
- (def: percentage_limit Nat (.++ 100))
-
- (def: .public (%% value)
- (-> Nat Percentage)
- (:abstraction (format (%.nat (n.% percentage_limit value)) "%")))
-
- (def: .public slice_percent/1
- (-> Percentage (Value Slice))
- (|>> :representation (:abstraction Value)))
-
- (def: .public (slice_percent/2 horizontal vertical)
- (-> Percentage Percentage (Value Slice))
- (:abstraction Value (format (:representation horizontal) ..slice_separator
- (:representation vertical))))
-
- (template [<input> <pre> <function>+]
- [(`` (template [<name> <function>]
- [(def: .public <name>
- (-> <input> (Value Filter))
- (|>> <pre> (list) (..apply <function>)))]
-
- (~~ (template.spliced <function>+))))]
-
- [Nat (<| (:representation Value) ..px n.frac)
- [[blur "blur"]]]
- [Nat (<| ..angle ..degree)
- [[hue_rotate "hue-rotate"]]]
- [Percentage (:representation Percentage)
- [[brightness "brightness"]
- [contrast "contrast"]
- [grayscale "grayscale"]
- [invert "invert"]
- [opacity "opacity"]
- [saturate "saturate"]
- [sepia "sepia"]]]
- )
- )
-
- (def: .public svg_filter
- (-> URL (Value Filter))
- (|>> (list) (..apply "url")))
-
- (def: default_shadow_length (px +0.0))
-
- (def: .public (drop_shadow horizontal vertical blur spread color)
- (-> (Value Length) (Value Length)
- (Maybe (Value Length)) (Maybe (Value Length))
- (Value Color)
- (Value Filter))
- (|> (list (:representation horizontal)
- (:representation vertical)
- (|> blur (maybe.else ..default_shadow_length) :representation)
- (|> spread (maybe.else ..default_shadow_length) :representation)
- (:representation color))
- (text.interposed " ")
- (list)
- (..apply "drop-shadow")))
-
- (def: length_separator " ")
-
- (template [<name> <type>]
- [(def: .public (<name> horizontal vertical)
- (-> (Value Length) (Value Length) (Value <type>))
- (:abstraction (format (:representation horizontal)
- ..length_separator
- (:representation vertical))))]
-
- [location Location]
- [fit Fit]
- )
-
- (def: .public (fit/1 length)
- (-> (Value Length) (Value Fit))
- (..fit length length))
-
- (def: .public image
- (-> URL (Value Image))
- (|>> %.text
+ (def: .public (degree value)
+ (-> Nat Angle)
+ (:abstraction (format (%.nat (n.% ..degree_limit value)) "deg")))
+
+ (template [<degree> <name>]
+ [(def: .public <name>
+ Angle
+ (..degree <degree>))]
+
+ [000 to_top]
+ [090 to_right]
+ [180 to_bottom]
+ [270 to_left]
+ )
+
+ (template [<name> <function>]
+ [(def: .public (<name> angle start next)
+ (-> Angle Stop (List/1 [(Maybe Hint) Stop]) (Value Image))
+ (let [[now after] next]
+ (..apply <function> (list& (:representation Angle angle)
+ (with_hint now)
+ (list\each with_hint after)))))]
+
+ [linear_gradient "linear-gradient"]
+ [repeating_linear_gradient "repeating-linear-gradient"]
+ )]
+ )
+
+ (abstract: .public Percentage
+ Text
+
+ [(def: .public percentage
+ (-> Percentage Text)
+ (|>> :representation))
+
+ (def: percentage_limit Nat (.++ 100))
+
+ (def: .public (%% value)
+ (-> Nat Percentage)
+ (:abstraction (format (%.nat (n.% percentage_limit value)) "%")))
+
+ (def: .public slice_percent/1
+ (-> Percentage (Value Slice))
+ (|>> :representation (:abstraction Value)))
+
+ (def: .public (slice_percent/2 horizontal vertical)
+ (-> Percentage Percentage (Value Slice))
+ (:abstraction Value (format (:representation horizontal) ..slice_separator
+ (:representation vertical))))
+
+ (template [<input> <pre> <function>+]
+ [(`` (template [<name> <function>]
+ [(def: .public <name>
+ (-> <input> (Value Filter))
+ (|>> <pre> (list) (..apply <function>)))]
+
+ (~~ (template.spliced <function>+))))]
+
+ [Nat (<| (:representation Value) ..px n.frac)
+ [[blur "blur"]]]
+ [Nat (<| ..angle ..degree)
+ [[hue_rotate "hue-rotate"]]]
+ [Percentage (:representation Percentage)
+ [[brightness "brightness"]
+ [contrast "contrast"]
+ [grayscale "grayscale"]
+ [invert "invert"]
+ [opacity "opacity"]
+ [saturate "saturate"]
+ [sepia "sepia"]]]
+ )]
+ )
+
+ (def: .public svg_filter
+ (-> URL (Value Filter))
+ (|>> (list) (..apply "url")))
+
+ (def: default_shadow_length (px +0.0))
+
+ (def: .public (drop_shadow horizontal vertical blur spread color)
+ (-> (Value Length) (Value Length)
+ (Maybe (Value Length)) (Maybe (Value Length))
+ (Value Color)
+ (Value Filter))
+ (|> (list (:representation horizontal)
+ (:representation vertical)
+ (|> blur (maybe.else ..default_shadow_length) :representation)
+ (|> spread (maybe.else ..default_shadow_length) :representation)
+ (:representation color))
+ (text.interposed " ")
(list)
- (..apply "url")))
-
- (enumeration: Shape Text
- shape
- [[ellipse_shape "ellipse"]
- [circle_shape "circle"]]
- [])
-
- (enumeration: Extent Text
- extent
- [[closest_side "closest-side"]
- [closest_corner "closest-corner"]
- [farthest_side "farthest-side"]
- [farthest_corner "farthest-corner"]]
- [])
-
- (template [<name> <function>]
- [(def: .public (<name> shape extent location start next)
- (-> Shape (Maybe Extent) (Value Location)
- Stop (List/1 [(Maybe Hint) Stop])
- (Value Image))
- (let [after_extent (format "at " (:representation location))
- with_extent (case extent
- (#.Some extent)
- (format (..extent extent) " " after_extent)
-
- #.None
- after_extent)
- where (format (..shape shape) " " with_extent)
- [now after] next]
- (..apply <function> (list& (..shape shape)
- (with_hint now)
- (list\each with_hint after)))))]
-
- [radial_gradient "radial-gradient"]
- [repeating_radial_gradient "repeating-radial-gradient"]
- )
-
- (def: .public (shadow horizontal vertical blur spread color inset?)
- (-> (Value Length) (Value Length)
- (Maybe (Value Length)) (Maybe (Value Length))
- (Value Color) Bit
- (Value Shadow))
- (let [with_inset (if inset?
- (list "inset")
- (list))]
- (|> (list& (:representation horizontal)
- (:representation vertical)
- (|> blur (maybe.else ..default_shadow_length) :representation)
- (|> spread (maybe.else ..default_shadow_length) :representation)
- (:representation color)
- with_inset)
- (text.interposed " ")
- :abstraction)))
-
- (type: .public Rectangle
- (Record
- [#top (Value Length)
- #right (Value Length)
- #bottom (Value Length)
- #left (Value Length)]))
-
- (def: .public (clip rectangle)
- (-> Rectangle (Value Clip))
- (`` (..apply "rect" (list (~~ (template [<side>]
- [(:representation (value@ <side> rectangle))]
-
- [#top] [#right] [#bottom] [#left]))))))
-
- (def: .public counter
- (-> Label (Value Counter))
- (|>> :abstraction))
-
- (def: .public current_count
- (-> (Value Counter) (Value Content))
- (|>> :representation (list) (..apply "counter")))
-
- (def: .public text
- (-> Text (Value Content))
- (|>> %.text :abstraction))
-
- (def: .public attribute
- (-> Label (Value Content))
- (|>> (list) (..apply "attr")))
-
- (def: .public media
- (-> URL (Value Content))
- (|>> (list) (..apply "url")))
-
- (enumeration: Font Text
- font_name
- [[serif "serif"]
- [sans_serif "sans-serif"]
- [cursive "cursive"]
- [fantasy "fantasy"]
- [monospace "monospace"]]
- [(def: .public font
- (-> Text Font)
- (|>> %.text :abstraction))
-
- (def: .public (font_family options)
- (-> (List Font) (Value Font))
- (case options
- (#.Item _)
- (|> options
- (list\each ..font_name)
- (text.interposed ",")
- (:abstraction Value))
-
- #.End
- ..initial))])
-
- (def: .public font_size
- (-> (Value Length) (Value Font_Size))
- (|>> :transmutation))
-
- (def: .public number
- (-> Frac (Value Number))
- (|>> %number :abstraction))
-
- (def: .public grid
- (-> Label (Value Grid))
- (|>> :abstraction))
-
- (def: .public fit_content
- (-> (Value Length) (Value Grid_Content))
- (|>> :representation (list) (..apply "fit-content")))
-
- (def: .public (min_max min max)
- (-> (Value Grid_Content) (Value Grid_Content) (Value Grid_Content))
- (..apply "minmax" (list (:representation min)
- (:representation max))))
-
- (def: .public grid_span
- (-> Nat (Value Grid_Span))
- (|>> %.nat (format "span ") :abstraction))
-
- (def: grid_column_separator " ")
- (def: grid_row_separator " ")
-
- (def: .public grid_template
- (-> (List (List (Maybe (Value Grid)))) (Value Grid_Template))
- (let [empty (: (Value Grid)
- (:abstraction "."))]
- (|>> (list\each (|>> (list\each (|>> (maybe.else empty)
- :representation))
- (text.interposed ..grid_column_separator)
- (text.enclosed ["'" "'"])))
- (text.interposed ..grid_row_separator)
+ (..apply "drop-shadow")))
+
+ (def: length_separator " ")
+
+ (template [<name> <type>]
+ [(def: .public (<name> horizontal vertical)
+ (-> (Value Length) (Value Length) (Value <type>))
+ (:abstraction (format (:representation horizontal)
+ ..length_separator
+ (:representation vertical))))]
+
+ [location Location]
+ [fit Fit]
+ )
+
+ (def: .public (fit/1 length)
+ (-> (Value Length) (Value Fit))
+ (..fit length length))
+
+ (def: .public image
+ (-> URL (Value Image))
+ (|>> %.text
+ (list)
+ (..apply "url")))
+
+ (enumeration: Shape Text
+ shape
+ [[ellipse_shape "ellipse"]
+ [circle_shape "circle"]]
+ [])
+
+ (enumeration: Extent Text
+ extent
+ [[closest_side "closest-side"]
+ [closest_corner "closest-corner"]
+ [farthest_side "farthest-side"]
+ [farthest_corner "farthest-corner"]]
+ [])
+
+ (template [<name> <function>]
+ [(def: .public (<name> shape extent location start next)
+ (-> Shape (Maybe Extent) (Value Location)
+ Stop (List/1 [(Maybe Hint) Stop])
+ (Value Image))
+ (let [after_extent (format "at " (:representation location))
+ with_extent (case extent
+ (#.Some extent)
+ (format (..extent extent) " " after_extent)
+
+ #.None
+ after_extent)
+ where (format (..shape shape) " " with_extent)
+ [now after] next]
+ (..apply <function> (list& (..shape shape)
+ (with_hint now)
+ (list\each with_hint after)))))]
+
+ [radial_gradient "radial-gradient"]
+ [repeating_radial_gradient "repeating-radial-gradient"]
+ )
+
+ (def: .public (shadow horizontal vertical blur spread color inset?)
+ (-> (Value Length) (Value Length)
+ (Maybe (Value Length)) (Maybe (Value Length))
+ (Value Color) Bit
+ (Value Shadow))
+ (let [with_inset (if inset?
+ (list "inset")
+ (list))]
+ (|> (list& (:representation horizontal)
+ (:representation vertical)
+ (|> blur (maybe.else ..default_shadow_length) :representation)
+ (|> spread (maybe.else ..default_shadow_length) :representation)
+ (:representation color)
+ with_inset)
+ (text.interposed " ")
:abstraction)))
- (def: .public (resolution dpi)
- (-> Nat (Value Resolution))
- (:abstraction (format (%.nat dpi) "dpi")))
-
- (def: .public (ratio numerator denominator)
- (-> Nat Nat (Value Ratio))
- (:abstraction (format (%.nat numerator) "/" (%.nat denominator))))
-
- (enumeration: Quote Text
- quote_text
- [[double_quote "\0022"]
- [single_quote "\0027"]
- [single_left_angle_quote "\2039"]
- [single_right_angle_quote "\203A"]
- [double_left_angle_quote "\00AB"]
- [double_right_angle_quote "\00BB"]
- [single_left_quote "\2018"]
- [single_right_quote "\2019"]
- [double_left_quote "\201C"]
- [double_right_quote "\201D"]
- [low_double_quote "\201E"]]
- [(def: .public quote
- (-> Text Quote)
- (|>> :abstraction))])
-
- (def: quote_separator " ")
-
- (def: .public (quotes [left0 right0] [left1 right1])
- (-> [Quote Quote] [Quote Quote] (Value Quotes))
- (|> (list left0 right0 left1 right1)
- (list\each (|>> ..quote_text %.text))
- (text.interposed ..quote_separator)
- :abstraction))
-
- (def: .public (matrix_2d [a b] [c d] [tx ty])
- (-> [Frac Frac]
- [Frac Frac]
- [Frac Frac]
- (Value Transform))
- (|> (list a b c d tx ty)
- (list\each %number)
- (..apply "matrix")))
-
- (def: .public (matrix_3d [a0 b0 c0 d0] [a1 b1 c1 d1] [a2 b2 c2 d2] [a3 b3 c3 d3])
- (-> [Frac Frac Frac Frac]
- [Frac Frac Frac Frac]
- [Frac Frac Frac Frac]
- [Frac Frac Frac Frac]
- (Value Transform))
- (|> (list a0 b0 c0 d0 a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3)
- (list\each %number)
- (..apply "matrix3d")))
-
- (template [<name> <function> <input_types> <input_values>]
- [(`` (def: .public (<name> [(~~ (template.spliced <input_values>))])
- (-> [(~~ (template.spliced <input_types>))] (Value Transform))
- (|> (list (~~ (template.spliced <input_values>)))
- (list\each %number)
- (..apply <function>))))]
-
- [translate_2d "translate" [Frac Frac] [x y]]
- [translate_3d "translate3d" [Frac Frac Frac] [x y z]]
- [translate_x "translateX" [Frac] [value]]
- [translate_y "translateY" [Frac] [value]]
- [translate_z "translateZ" [Frac] [value]]
-
- [scale_2d "scale" [Frac Frac] [x y]]
- [scale_3d "scale3d" [Frac Frac Frac] [x y z]]
- [scale_x "scaleX" [Frac] [value]]
- [scale_y "scaleY" [Frac] [value]]
- [scale_z "scaleZ" [Frac] [value]]
-
- [perspective "perspective" [Frac] [value]]
- )
-
- (template [<name> <function> <input_types> <input_values>]
- [(`` (def: .public (<name> [(~~ (template.spliced <input_values>))])
- (-> [(~~ (template.spliced <input_types>))] (Value Transform))
- (|> (list (~~ (template.spliced <input_values>)))
- (list\each ..angle)
- (..apply <function>))))]
-
- [rotate_2d "rotate" [Angle] [angle]]
- [rotate_x "rotateX" [Angle] [angle]]
- [rotate_y "rotateY" [Angle] [angle]]
- [rotate_z "rotateZ" [Angle] [angle]]
-
- [skew "skew" [Angle Angle] [x_angle y_angle]]
- [skew_x "skewX" [Angle] [angle]]
- [skew_y "skewY" [Angle] [angle]]
- )
-
- (def: .public (rotate_3d [x y z angle])
- (-> [Frac Frac Frac Angle] (Value Transform))
- (..apply "rotate3d"
- (list (%number x) (%number y) (%number z) (..angle angle))))
-
- (def: origin_separator " ")
-
- (def: .public (origin_2d x y)
- (-> (Value Length) (Value Length) (Value Transform_Origin))
- (:abstraction (format (:representation x) ..origin_separator
- (:representation y))))
-
- (def: .public (origin_3d x y z)
- (-> (Value Length) (Value Length) (Value Length) (Value Transform_Origin))
- (:abstraction (format (:representation x) ..origin_separator
- (:representation y) ..origin_separator
- (:representation z))))
-
- (def: .public vertical_align
- (-> (Value Length) (Value Vertical_Align))
- (|>> :transmutation))
-
- (def: .public (z_index index)
- (-> Int (Value Z_Index))
- (:abstraction (if (i.< +0 index)
- (%.int index)
- (%.nat (.nat index)))))
-
- (multi: multi_image Image ",")
- (multi: multi_shadow Shadow ",")
- (multi: multi_content Content " ")
+ (type: .public Rectangle
+ (Record
+ [#top (Value Length)
+ #right (Value Length)
+ #bottom (Value Length)
+ #left (Value Length)]))
+
+ (def: .public (clip rectangle)
+ (-> Rectangle (Value Clip))
+ (`` (..apply "rect" (list (~~ (template [<side>]
+ [(:representation (value@ <side> rectangle))]
+
+ [#top] [#right] [#bottom] [#left]))))))
+
+ (def: .public counter
+ (-> Label (Value Counter))
+ (|>> :abstraction))
+
+ (def: .public current_count
+ (-> (Value Counter) (Value Content))
+ (|>> :representation (list) (..apply "counter")))
+
+ (def: .public text
+ (-> Text (Value Content))
+ (|>> %.text :abstraction))
+
+ (def: .public attribute
+ (-> Label (Value Content))
+ (|>> (list) (..apply "attr")))
+
+ (def: .public media
+ (-> URL (Value Content))
+ (|>> (list) (..apply "url")))
+
+ (enumeration: Font Text
+ font_name
+ [[serif "serif"]
+ [sans_serif "sans-serif"]
+ [cursive "cursive"]
+ [fantasy "fantasy"]
+ [monospace "monospace"]]
+ [(def: .public font
+ (-> Text Font)
+ (|>> %.text :abstraction))
+
+ (def: .public (font_family options)
+ (-> (List Font) (Value Font))
+ (case options
+ (#.Item _)
+ (|> options
+ (list\each ..font_name)
+ (text.interposed ",")
+ (:abstraction Value))
+
+ #.End
+ ..initial))])
+
+ (def: .public font_size
+ (-> (Value Length) (Value Font_Size))
+ (|>> :transmutation))
+
+ (def: .public number
+ (-> Frac (Value Number))
+ (|>> %number :abstraction))
+
+ (def: .public grid
+ (-> Label (Value Grid))
+ (|>> :abstraction))
+
+ (def: .public fit_content
+ (-> (Value Length) (Value Grid_Content))
+ (|>> :representation (list) (..apply "fit-content")))
+
+ (def: .public (min_max min max)
+ (-> (Value Grid_Content) (Value Grid_Content) (Value Grid_Content))
+ (..apply "minmax" (list (:representation min)
+ (:representation max))))
+
+ (def: .public grid_span
+ (-> Nat (Value Grid_Span))
+ (|>> %.nat (format "span ") :abstraction))
+
+ (def: grid_column_separator " ")
+ (def: grid_row_separator " ")
+
+ (def: .public grid_template
+ (-> (List (List (Maybe (Value Grid)))) (Value Grid_Template))
+ (let [empty (: (Value Grid)
+ (:abstraction "."))]
+ (|>> (list\each (|>> (list\each (|>> (maybe.else empty)
+ :representation))
+ (text.interposed ..grid_column_separator)
+ (text.enclosed ["'" "'"])))
+ (text.interposed ..grid_row_separator)
+ :abstraction)))
+
+ (def: .public (resolution dpi)
+ (-> Nat (Value Resolution))
+ (:abstraction (format (%.nat dpi) "dpi")))
+
+ (def: .public (ratio numerator denominator)
+ (-> Nat Nat (Value Ratio))
+ (:abstraction (format (%.nat numerator) "/" (%.nat denominator))))
+
+ (enumeration: Quote Text
+ quote_text
+ [[double_quote "\0022"]
+ [single_quote "\0027"]
+ [single_left_angle_quote "\2039"]
+ [single_right_angle_quote "\203A"]
+ [double_left_angle_quote "\00AB"]
+ [double_right_angle_quote "\00BB"]
+ [single_left_quote "\2018"]
+ [single_right_quote "\2019"]
+ [double_left_quote "\201C"]
+ [double_right_quote "\201D"]
+ [low_double_quote "\201E"]]
+ [(def: .public quote
+ (-> Text Quote)
+ (|>> :abstraction))])
+
+ (def: quote_separator " ")
+
+ (def: .public (quotes [left0 right0] [left1 right1])
+ (-> [Quote Quote] [Quote Quote] (Value Quotes))
+ (|> (list left0 right0 left1 right1)
+ (list\each (|>> ..quote_text %.text))
+ (text.interposed ..quote_separator)
+ :abstraction))
+
+ (def: .public (matrix_2d [a b] [c d] [tx ty])
+ (-> [Frac Frac]
+ [Frac Frac]
+ [Frac Frac]
+ (Value Transform))
+ (|> (list a b c d tx ty)
+ (list\each %number)
+ (..apply "matrix")))
+
+ (def: .public (matrix_3d [a0 b0 c0 d0] [a1 b1 c1 d1] [a2 b2 c2 d2] [a3 b3 c3 d3])
+ (-> [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ (Value Transform))
+ (|> (list a0 b0 c0 d0 a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3)
+ (list\each %number)
+ (..apply "matrix3d")))
+
+ (template [<name> <function> <input_types> <input_values>]
+ [(`` (def: .public (<name> [(~~ (template.spliced <input_values>))])
+ (-> [(~~ (template.spliced <input_types>))] (Value Transform))
+ (|> (list (~~ (template.spliced <input_values>)))
+ (list\each %number)
+ (..apply <function>))))]
+
+ [translate_2d "translate" [Frac Frac] [x y]]
+ [translate_3d "translate3d" [Frac Frac Frac] [x y z]]
+ [translate_x "translateX" [Frac] [value]]
+ [translate_y "translateY" [Frac] [value]]
+ [translate_z "translateZ" [Frac] [value]]
+
+ [scale_2d "scale" [Frac Frac] [x y]]
+ [scale_3d "scale3d" [Frac Frac Frac] [x y z]]
+ [scale_x "scaleX" [Frac] [value]]
+ [scale_y "scaleY" [Frac] [value]]
+ [scale_z "scaleZ" [Frac] [value]]
+
+ [perspective "perspective" [Frac] [value]]
+ )
+
+ (template [<name> <function> <input_types> <input_values>]
+ [(`` (def: .public (<name> [(~~ (template.spliced <input_values>))])
+ (-> [(~~ (template.spliced <input_types>))] (Value Transform))
+ (|> (list (~~ (template.spliced <input_values>)))
+ (list\each ..angle)
+ (..apply <function>))))]
+
+ [rotate_2d "rotate" [Angle] [angle]]
+ [rotate_x "rotateX" [Angle] [angle]]
+ [rotate_y "rotateY" [Angle] [angle]]
+ [rotate_z "rotateZ" [Angle] [angle]]
+
+ [skew "skew" [Angle Angle] [x_angle y_angle]]
+ [skew_x "skewX" [Angle] [angle]]
+ [skew_y "skewY" [Angle] [angle]]
+ )
+
+ (def: .public (rotate_3d [x y z angle])
+ (-> [Frac Frac Frac Angle] (Value Transform))
+ (..apply "rotate3d"
+ (list (%number x) (%number y) (%number z) (..angle angle))))
+
+ (def: origin_separator " ")
+
+ (def: .public (origin_2d x y)
+ (-> (Value Length) (Value Length) (Value Transform_Origin))
+ (:abstraction (format (:representation x) ..origin_separator
+ (:representation y))))
+
+ (def: .public (origin_3d x y z)
+ (-> (Value Length) (Value Length) (Value Length) (Value Transform_Origin))
+ (:abstraction (format (:representation x) ..origin_separator
+ (:representation y) ..origin_separator
+ (:representation z))))
+
+ (def: .public vertical_align
+ (-> (Value Length) (Value Vertical_Align))
+ (|>> :transmutation))
+
+ (def: .public (z_index index)
+ (-> Int (Value Z_Index))
+ (:abstraction (if (i.< +0 index)
+ (%.int index)
+ (%.nat (.nat index)))))
+
+ (multi: multi_image Image ",")
+ (multi: multi_shadow Shadow ",")
+ (multi: multi_content Content " ")]
)