katalyst-tables 3.6.2 → 3.8.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/app/assets/builds/katalyst/tables.min.js.map +1 -1
- data/app/assets/images/katalyst/tables/icons/sort-asc.svg +3 -0
- data/app/assets/images/katalyst/tables/icons/sort-desc.svg +3 -0
- data/app/assets/stylesheets/katalyst/_tables.scss +3 -0
- data/app/assets/stylesheets/katalyst/tables/query.css +142 -0
- data/app/assets/stylesheets/katalyst/tables/{_summary.scss → summary.css} +1 -1
- data/app/assets/stylesheets/katalyst/tables/table.css +164 -0
- data/app/assets/stylesheets/katalyst/tables.css +3 -0
- data/app/components/concerns/katalyst/tables/orderable.rb +1 -1
- data/app/components/concerns/katalyst/tables/sortable.rb +1 -1
- data/app/components/katalyst/summary_table_component.rb +4 -2
- data/app/components/katalyst/table_component.rb +5 -1
- data/app/components/katalyst/tables/cells/boolean_component.rb +1 -1
- data/app/components/katalyst/tables/cells/currency_component.rb +1 -1
- data/app/components/katalyst/tables/cells/date_component.rb +1 -1
- data/app/components/katalyst/tables/cells/date_time_component.rb +1 -1
- data/app/components/katalyst/tables/cells/enum_component.rb +1 -1
- data/app/components/katalyst/tables/cells/number_component.rb +1 -1
- data/app/components/katalyst/tables/cells/ordinal_component.rb +3 -3
- data/app/components/katalyst/tables/cells/rich_text_component.rb +1 -1
- data/app/components/katalyst/tables/cells/select_component.rb +4 -4
- data/app/components/katalyst/tables/query/input_component.html.erb +1 -1
- data/app/components/katalyst/tables/query/modal_component.html.erb +1 -1
- data/app/components/katalyst/tables/query_component.rb +2 -1
- data/app/models/katalyst/tables/suggestions/constant_value.rb +1 -3
- data/app/models/katalyst/tables/suggestions/database_value.rb +1 -5
- data/lib/katalyst/tables/collection/type/boolean.rb +2 -4
- data/lib/katalyst/tables/collection/type/date.rb +6 -8
- data/lib/katalyst/tables/collection/type/enum.rb +10 -2
- data/lib/katalyst/tables/collection/type/string.rb +24 -5
- data/lib/katalyst/tables/collection/type/value.rb +33 -28
- metadata +10 -19
- data/app/assets/stylesheets/katalyst/tables/_index.scss +0 -3
- data/app/assets/stylesheets/katalyst/tables/_ordinal.scss +0 -38
- data/app/assets/stylesheets/katalyst/tables/_query.scss +0 -142
- data/app/assets/stylesheets/katalyst/tables/_select.scss +0 -7
- data/app/assets/stylesheets/katalyst/tables/_table.scss +0 -128
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_boolean.scss +0 -4
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_currency.scss +0 -8
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_date.scss +0 -4
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_datetime.scss +0 -4
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_enum.scss +0 -19
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_index.scss +0 -6
- data/app/assets/stylesheets/katalyst/tables/typed-columns/_number.scss +0 -8
@@ -55,7 +55,7 @@ module Katalyst
|
|
55
55
|
action: %W[mousedown->#{LIST_CONTROLLER}#mousedown
|
56
56
|
turbo:before-morph-element->#{LIST_CONTROLLER}#beforeMorphElement:self],
|
57
57
|
"#{LIST_CONTROLLER}-#{FORM_CONTROLLER}-outlet" => "##{Orderable.default_form_id(collection)}",
|
58
|
-
"#{LIST_CONTROLLER}-#{ITEM_CONTROLLER}-outlet" => "td
|
58
|
+
"#{LIST_CONTROLLER}-#{ITEM_CONTROLLER}-outlet" => "td[data-cell-type=ordinal]",
|
59
59
|
},
|
60
60
|
)
|
61
61
|
end
|
@@ -21,8 +21,6 @@ module Katalyst
|
|
21
21
|
super(collection: [model], **)
|
22
22
|
|
23
23
|
@summary_rows = []
|
24
|
-
|
25
|
-
update_html_attributes(class: "summary-table")
|
26
24
|
end
|
27
25
|
|
28
26
|
def with_cell(cell, &)
|
@@ -40,5 +38,9 @@ module Katalyst
|
|
40
38
|
@index += 1
|
41
39
|
end
|
42
40
|
end
|
41
|
+
|
42
|
+
def default_html_attributes
|
43
|
+
{ class: "katalyst--summary-table" }
|
44
|
+
end
|
43
45
|
end
|
44
46
|
end
|
@@ -230,7 +230,7 @@ module Katalyst
|
|
230
230
|
# @example Render a generic text column for any value that supports `to_s`
|
231
231
|
# <% row.enum :status %>
|
232
232
|
# <%# label => <th>Status</th> %>
|
233
|
-
# <%# data => <td
|
233
|
+
# <%# data => <td data-cell-type="enum"><span data-enum="status" data-value="published">Published</span></td> %>
|
234
234
|
def enum(column, label: nil, heading: false, **, &)
|
235
235
|
with_cell(Tables::Cells::EnumComponent.new(
|
236
236
|
collection:, row:, column:, record:, label:, heading:, **,
|
@@ -317,6 +317,10 @@ module Katalyst
|
|
317
317
|
|
318
318
|
private
|
319
319
|
|
320
|
+
def default_html_attributes
|
321
|
+
{ class: "katalyst--table" }
|
322
|
+
end
|
323
|
+
|
320
324
|
# Extension point for subclasses and extensions to customize header row rendering.
|
321
325
|
def add_header_row_callback(&block)
|
322
326
|
@header_row_callbacks << block
|
@@ -18,11 +18,11 @@ module Katalyst
|
|
18
18
|
|
19
19
|
def default_html_attributes
|
20
20
|
if @row.header?
|
21
|
-
{
|
21
|
+
{ data: { cell_type: "ordinal" } }
|
22
22
|
else
|
23
23
|
{
|
24
|
-
|
25
|
-
|
24
|
+
data: {
|
25
|
+
cell_type: "ordinal",
|
26
26
|
controller: Orderable::ITEM_CONTROLLER,
|
27
27
|
"#{Orderable::ITEM_CONTROLLER}-params-value": params.to_json,
|
28
28
|
},
|
@@ -24,16 +24,16 @@ module Katalyst
|
|
24
24
|
def default_html_attributes
|
25
25
|
if @row.header?
|
26
26
|
{
|
27
|
-
|
28
|
-
|
27
|
+
data: {
|
28
|
+
cell_type: "selection",
|
29
29
|
"#{Selectable::TABLE_CONTROLLER}-target" => "header",
|
30
30
|
action: "change->#{Selectable::TABLE_CONTROLLER}#toggleHeader",
|
31
31
|
},
|
32
32
|
}
|
33
33
|
else
|
34
34
|
{
|
35
|
-
|
36
|
-
|
35
|
+
data: {
|
36
|
+
cell_type: "selection",
|
37
37
|
controller: Selectable::ITEM_CONTROLLER,
|
38
38
|
action: "change->#{Selectable::ITEM_CONTROLLER}#change",
|
39
39
|
"#{Selectable::ITEM_CONTROLLER}-params-value" => @params.to_json,
|
@@ -15,5 +15,5 @@
|
|
15
15
|
) %>
|
16
16
|
<div aria-hidden="true" class="highlight" data-tables--query-input-target="highlight"><%= form.object.query %></div>
|
17
17
|
<%= form.hidden_field(:p) %>
|
18
|
-
<%= form.button("Apply", type: :submit, name: nil, tabindex: -1) %>
|
18
|
+
<%= form.button("Apply", type: :submit, name: nil, tabindex: -1, class: "button") %>
|
19
19
|
<% end %>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<div class="content">
|
10
10
|
<% if suggestions? %>
|
11
11
|
<h4 id="suggestions-title"><%= t(".suggestions_title") %></h4>
|
12
|
-
<ul id="suggestions" role="listbox" aria-labelledby="suggestions-title">
|
12
|
+
<ul id="suggestions" class="suggestions" role="listbox" aria-labelledby="suggestions-title">
|
13
13
|
<% suggestions.each do |suggestion| %>
|
14
14
|
<%= render suggestion %>
|
15
15
|
<% end %>
|
@@ -6,12 +6,10 @@ module Katalyst
|
|
6
6
|
class ConstantValue < Base
|
7
7
|
delegate :to_param, to: :@attribute_type
|
8
8
|
|
9
|
-
def initialize(name:, type:,
|
9
|
+
def initialize(name:, type:, value:)
|
10
10
|
super(value)
|
11
11
|
|
12
12
|
@attribute_type = type
|
13
|
-
@model = model
|
14
|
-
@column = column
|
15
13
|
@name = name
|
16
14
|
end
|
17
15
|
|
@@ -4,16 +4,12 @@ module Katalyst
|
|
4
4
|
module Tables
|
5
5
|
module Suggestions
|
6
6
|
class DatabaseValue < Base
|
7
|
-
attr_reader :model, :column
|
8
|
-
|
9
7
|
delegate :to_param, to: :@attribute_type
|
10
8
|
|
11
|
-
def initialize(name:, type:,
|
9
|
+
def initialize(name:, type:, value:)
|
12
10
|
super(value)
|
13
11
|
|
14
12
|
@attribute_type = type
|
15
|
-
@model = model
|
16
|
-
@column = column
|
17
13
|
@name = name
|
18
14
|
end
|
19
15
|
|
@@ -22,16 +22,14 @@ module Katalyst
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
def suggestions(
|
26
|
-
_, model, column = model_and_column_for(scope, attribute)
|
27
|
-
|
25
|
+
def suggestions(_scope, attribute)
|
28
26
|
values = %w[true false]
|
29
27
|
|
30
28
|
if attribute.value_before_type_cast.present?
|
31
29
|
values = values.select { |value| value.include?(attribute.value_before_type_cast) }
|
32
30
|
end
|
33
31
|
|
34
|
-
values.map { |v| constant_suggestion(attribute:,
|
32
|
+
values.map { |v| constant_suggestion(attribute:, value: deserialize(v)) }
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
@@ -7,6 +7,8 @@ module Katalyst
|
|
7
7
|
class Date < Value
|
8
8
|
include Helpers::Range
|
9
9
|
|
10
|
+
ISO_DATE = /\A(?<year>\d{4})-(?<month>\d\d)-(?<day>\d\d)\z/
|
11
|
+
|
10
12
|
define_range_patterns /\d{4}-\d\d-\d\d/
|
11
13
|
|
12
14
|
def type
|
@@ -23,21 +25,17 @@ module Katalyst
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def suggestions(scope, attribute)
|
26
|
-
_, model, column = model_and_column_for(scope, attribute)
|
27
|
-
|
28
28
|
[
|
29
29
|
*super(scope, attribute, limit: 6, order: :desc),
|
30
|
-
database_suggestion(attribute:,
|
31
|
-
database_suggestion(attribute:,
|
32
|
-
database_suggestion(attribute:,
|
33
|
-
database_suggestion(attribute:,
|
30
|
+
database_suggestion(attribute:, value: ::Date.current.beginning_of_week..),
|
31
|
+
database_suggestion(attribute:, value: ::Date.current.beginning_of_month..),
|
32
|
+
database_suggestion(attribute:, value: 1.month.ago.all_month),
|
33
|
+
database_suggestion(attribute:, value: 1.year.ago.all_year),
|
34
34
|
]
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
-
ISO_DATE = /\A(?<year>\d{4})-(?<month>\d\d)-(?<day>\d\d)\z/
|
40
|
-
|
41
39
|
def cast_value(value)
|
42
40
|
return value unless value.is_a?(::String)
|
43
41
|
|
@@ -16,7 +16,15 @@ module Katalyst
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def suggestions(scope, attribute)
|
19
|
-
|
19
|
+
model = scope.model
|
20
|
+
column = attribute.name
|
21
|
+
|
22
|
+
if attribute.name.include?(".")
|
23
|
+
table_name, column = attribute.name.split(".")
|
24
|
+
model = scope.model.reflections[table_name].klass
|
25
|
+
|
26
|
+
raise(ArgumentError, "Unknown association '#{table_name}' for #{scope.model}") unless model
|
27
|
+
end
|
20
28
|
|
21
29
|
raise ArgumentError, "Unknown enum #{column} for #{model}" unless model.defined_enums.has_key?(column)
|
22
30
|
|
@@ -26,7 +34,7 @@ module Katalyst
|
|
26
34
|
values = values.select { |key| key.include?(attribute.value_before_type_cast) }
|
27
35
|
end
|
28
36
|
|
29
|
-
values.map { |value| constant_suggestion(attribute:,
|
37
|
+
values.map { |value| constant_suggestion(attribute:, value:) }
|
30
38
|
end
|
31
39
|
|
32
40
|
private
|
@@ -5,8 +5,6 @@ module Katalyst
|
|
5
5
|
module Collection
|
6
6
|
module Type
|
7
7
|
class String < Value
|
8
|
-
include ActiveRecord::Sanitization::ClassMethods
|
9
|
-
|
10
8
|
attr_reader :exact
|
11
9
|
alias_method :exact?, :exact
|
12
10
|
|
@@ -21,11 +19,32 @@ module Katalyst
|
|
21
19
|
|
22
20
|
private
|
23
21
|
|
24
|
-
|
25
|
-
|
22
|
+
class Match
|
23
|
+
include ActiveRecord::Sanitization::ClassMethods
|
24
|
+
|
25
|
+
attr_reader :value
|
26
|
+
|
27
|
+
def initialize(value)
|
28
|
+
@value = value
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_sql
|
32
|
+
"%#{sanitize_sql_like(value)}%"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class MatchHandler
|
37
|
+
def call(attribute, value)
|
38
|
+
attribute.matches(value.to_sql)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def apply_filter(scope, model, attribute, value)
|
43
|
+
if exact?
|
26
44
|
super
|
27
45
|
else
|
28
|
-
model.
|
46
|
+
model.predicate_builder.register_handler(Match, MatchHandler.new)
|
47
|
+
scope.where(attribute.name => Match.new(value))
|
29
48
|
end
|
30
49
|
end
|
31
50
|
end
|
@@ -33,10 +33,18 @@ module Katalyst
|
|
33
33
|
def filter(scope, attribute, value: filter_value(attribute))
|
34
34
|
return scope unless filter?(attribute, value)
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
if self.scope.present?
|
37
|
+
scope.public_send(self.scope, value)
|
38
|
+
elsif attribute.name.include?(".")
|
39
|
+
table_name, = attribute.name.split(".")
|
40
|
+
association = scope.model.reflections[table_name]
|
38
41
|
|
39
|
-
|
42
|
+
raise(ArgumentError, "Unknown association '#{table_name}' for #{scope.model}") unless association
|
43
|
+
|
44
|
+
apply_filter(scope.joins(table_name.to_sym), association.klass, attribute, value)
|
45
|
+
else
|
46
|
+
apply_filter(scope, scope.model, attribute, value)
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
50
|
def to_param(value)
|
@@ -44,54 +52,51 @@ module Katalyst
|
|
44
52
|
end
|
45
53
|
|
46
54
|
def suggestions(scope, attribute, limit: 10, order: :asc)
|
47
|
-
|
55
|
+
model = scope.model
|
56
|
+
column = attribute.name
|
57
|
+
|
58
|
+
if attribute.name.include?(".")
|
59
|
+
table_name, column = attribute.name.split(".")
|
60
|
+
model = scope.model.reflections[table_name].klass
|
61
|
+
|
62
|
+
raise(ArgumentError, "Unknown association '#{table_name}' for #{scope.model}") unless model
|
63
|
+
|
64
|
+
scope = scope.joins(table_name.to_sym)
|
65
|
+
end
|
48
66
|
|
49
67
|
unless model.attribute_types.has_key?(column)
|
50
68
|
raise(ArgumentError, "Unknown column '#{column}' for #{model}. " \
|
51
69
|
"Consider defining '#{attribute.name.parameterize.underscore}_suggestions'")
|
52
70
|
end
|
53
71
|
|
54
|
-
arel_column = model.arel_table[column]
|
55
|
-
|
56
72
|
filter(scope, attribute)
|
57
|
-
.group(
|
73
|
+
.group(attribute.name)
|
58
74
|
.distinct
|
59
75
|
.limit(limit)
|
60
|
-
.reorder(
|
61
|
-
.pluck(
|
62
|
-
.map { |v| database_suggestion(attribute:,
|
76
|
+
.reorder(attribute.name => order)
|
77
|
+
.pluck(attribute.name)
|
78
|
+
.map { |v| database_suggestion(attribute:, value: deserialize(v)) }
|
63
79
|
end
|
64
80
|
|
65
81
|
private
|
66
82
|
|
67
|
-
def constant_suggestion(attribute:,
|
68
|
-
Tables::Suggestions::ConstantValue.new(name: attribute.name, type: attribute.type,
|
83
|
+
def constant_suggestion(attribute:, value:)
|
84
|
+
Tables::Suggestions::ConstantValue.new(name: attribute.name, type: attribute.type, value:)
|
69
85
|
end
|
70
86
|
|
71
|
-
def database_suggestion(attribute:,
|
72
|
-
Tables::Suggestions::DatabaseValue.new(name: attribute.name, type: attribute.type,
|
87
|
+
def database_suggestion(attribute:, value:)
|
88
|
+
Tables::Suggestions::DatabaseValue.new(name: attribute.name, type: attribute.type, value:)
|
73
89
|
end
|
74
90
|
|
75
91
|
def filter_value(attribute)
|
76
92
|
attribute.value
|
77
93
|
end
|
78
94
|
|
79
|
-
def
|
95
|
+
def apply_filter(scope, _model, attribute, value)
|
80
96
|
if value.nil?
|
81
|
-
|
82
|
-
elsif scope
|
83
|
-
model.public_send(scope, value)
|
84
|
-
else
|
85
|
-
model.where(column => serialize(value))
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def model_and_column_for(scope, attribute)
|
90
|
-
if attribute.name.include?(".")
|
91
|
-
table, column = attribute.name.split(".")
|
92
|
-
[scope.joins(table.to_sym), scope.model.reflections[table].klass, column]
|
97
|
+
scope.none
|
93
98
|
else
|
94
|
-
|
99
|
+
scope.where(attribute.name => serialize(value))
|
95
100
|
end
|
96
101
|
end
|
97
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katalyst-tables
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katalyst Interactive
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-12 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: katalyst-html-attributes
|
@@ -54,19 +53,13 @@ files:
|
|
54
53
|
- app/assets/builds/katalyst/tables.min.js
|
55
54
|
- app/assets/builds/katalyst/tables.min.js.map
|
56
55
|
- app/assets/config/katalyst-tables.js
|
57
|
-
- app/assets/
|
58
|
-
- app/assets/
|
59
|
-
- app/assets/stylesheets/katalyst/
|
60
|
-
- app/assets/stylesheets/katalyst/tables
|
61
|
-
- app/assets/stylesheets/katalyst/tables/
|
62
|
-
- app/assets/stylesheets/katalyst/tables/
|
63
|
-
- app/assets/stylesheets/katalyst/tables/
|
64
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_currency.scss
|
65
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_date.scss
|
66
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_datetime.scss
|
67
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_enum.scss
|
68
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_index.scss
|
69
|
-
- app/assets/stylesheets/katalyst/tables/typed-columns/_number.scss
|
56
|
+
- app/assets/images/katalyst/tables/icons/sort-asc.svg
|
57
|
+
- app/assets/images/katalyst/tables/icons/sort-desc.svg
|
58
|
+
- app/assets/stylesheets/katalyst/_tables.scss
|
59
|
+
- app/assets/stylesheets/katalyst/tables.css
|
60
|
+
- app/assets/stylesheets/katalyst/tables/query.css
|
61
|
+
- app/assets/stylesheets/katalyst/tables/summary.css
|
62
|
+
- app/assets/stylesheets/katalyst/tables/table.css
|
70
63
|
- app/components/concerns/katalyst/tables/has_table_content.rb
|
71
64
|
- app/components/concerns/katalyst/tables/identifiable.rb
|
72
65
|
- app/components/concerns/katalyst/tables/orderable.rb
|
@@ -175,7 +168,6 @@ metadata:
|
|
175
168
|
homepage_uri: https://github.com/katalyst/tables
|
176
169
|
source_code_uri: https://github.com/katalyst/tables
|
177
170
|
changelog_uri: https://github.com/katalyst/tables/blobs/main/CHANGELOG.md
|
178
|
-
post_install_message:
|
179
171
|
rdoc_options: []
|
180
172
|
require_paths:
|
181
173
|
- lib
|
@@ -190,8 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
182
|
- !ruby/object:Gem::Version
|
191
183
|
version: '0'
|
192
184
|
requirements: []
|
193
|
-
rubygems_version: 3.
|
194
|
-
signing_key:
|
185
|
+
rubygems_version: 3.6.2
|
195
186
|
specification_version: 4
|
196
187
|
summary: HTML table generator for Rails views
|
197
188
|
test_files: []
|
@@ -1,38 +0,0 @@
|
|
1
|
-
$width: 2rem !default;
|
2
|
-
$time: 125ms !default;
|
3
|
-
|
4
|
-
table {
|
5
|
-
tr {
|
6
|
-
transition:
|
7
|
-
top $time ease-in-out,
|
8
|
-
transform $time ease-in-out;
|
9
|
-
}
|
10
|
-
|
11
|
-
tr[dragging] {
|
12
|
-
transition: transform $time ease-in-out;
|
13
|
-
filter: drop-shadow(0 0 0.5rem var(--row-border-color));
|
14
|
-
transform: scale(1.01);
|
15
|
-
td {
|
16
|
-
box-shadow: none;
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
th.ordinal {
|
21
|
-
width: $width;
|
22
|
-
padding-left: 0;
|
23
|
-
a {
|
24
|
-
width: $width;
|
25
|
-
height: 3rem;
|
26
|
-
}
|
27
|
-
a::after {
|
28
|
-
margin-left: 0.4rem;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
td.ordinal {
|
33
|
-
width: $width;
|
34
|
-
padding-left: 0;
|
35
|
-
cursor: grab;
|
36
|
-
text-align: center;
|
37
|
-
}
|
38
|
-
}
|